From ac425629047a206532645854c30d14a5a25f4c2b Mon Sep 17 00:00:00 2001 From: Niels Bantilan Date: Tue, 9 Jan 2024 17:47:29 -0500 Subject: [PATCH 01/30] add algolia searchbar (#4696) * add algolia searchbar Signed-off-by: Niels Bantilan * update css and search.html filepath Signed-off-by: Niels Bantilan --------- Signed-off-by: Niels Bantilan --- docs/_static/algolia-search.js | 12 +++ docs/_static/algolia.css | 23 +++++ docs/_static/flyte.css | 11 +++ docs/_templates/base.html | 125 ++++++++++++++++++++++++++++ docs/_templates/page.html | 2 + docs/_templates/sidebar/search.html | 5 ++ docs/conf.py | 2 +- 7 files changed, 179 insertions(+), 1 deletion(-) create mode 100644 docs/_static/algolia-search.js create mode 100644 docs/_static/algolia.css create mode 100644 docs/_templates/base.html create mode 100644 docs/_templates/sidebar/search.html diff --git a/docs/_static/algolia-search.js b/docs/_static/algolia-search.js new file mode 100644 index 0000000000..34789e97e8 --- /dev/null +++ b/docs/_static/algolia-search.js @@ -0,0 +1,12 @@ +/*global docsearch*/ + +docsearch({ + container: ".docsearch", + appId: "WLG0MZB58Q", + apiKey: "28bf9bfd4a77a7d6b3ab7e98c671e781", + indexName: "flyte", + searchParameters: { + hitsPerPage: 10, + // See https://www.algolia.com/doc/api-reference/api-parameters/ + }, +}); diff --git a/docs/_static/algolia.css b/docs/_static/algolia.css new file mode 100644 index 0000000000..c051ed6197 --- /dev/null +++ b/docs/_static/algolia.css @@ -0,0 +1,23 @@ +/* Algolia Docs Search Style */ +.docsearch { + width: 100% !important; +} + +.DocSearch-Button { + height: 60px !important; + width: 100% !important; + margin: 0px !important; + border-radius: 0 !important; + border-bottom: 1px solid var(--color-header-border) !important; + background: var(--color-sidebar-background) !important; + padding: 0 15px !important; +} + +.DocSearch-Button:hover, .DocSearch-Button:active { + box-shadow: none !important; + background: var(--docsearch-searchbox-background) !important; +} + +.sidebar-search-container::before { + content: none; +} diff --git a/docs/_static/flyte.css b/docs/_static/flyte.css index a0e5225c25..6071b8ab51 100644 --- a/docs/_static/flyte.css +++ b/docs/_static/flyte.css @@ -43,6 +43,7 @@ h6 { width: 100% !important; margin: 0px !important; border-radius: 0 !important; + border-top: 1px solid var(--color-header-border) !important; border-bottom: 1px solid var(--color-header-border) !important; background: var(--color-sidebar-background) !important; padding: 0 15px !important; @@ -53,6 +54,16 @@ h6 { background: var(--docsearch-searchbox-background) !important; } +.DocSearch-Button-Key { + border-radius: 3px !important; + box-shadow: var(--docsearch-key-shadow) !important; + color: var(--docsearch-muted-color) !important; + display: flex !important; + margin-right: 0.4em !important; + padding: 0 0 2px !important; + border: 0 !important; +} + .sidebar-search-container::before { content: none; } diff --git a/docs/_templates/base.html b/docs/_templates/base.html new file mode 100644 index 0000000000..f3c5ef1a49 --- /dev/null +++ b/docs/_templates/base.html @@ -0,0 +1,125 @@ + + + + {%- block site_meta -%} + + + + + {%- if metatags %}{{ metatags }}{% endif -%} + + {%- block linktags %} + {%- if hasdoc('about') -%} + + {%- endif -%} + {%- if hasdoc('genindex') -%} + + {%- endif -%} + {%- if hasdoc('search') -%} + + {%- endif -%} + {%- if hasdoc('copyright') -%} + + {%- endif -%} + {%- if next -%} + + {%- endif -%} + {%- if prev -%} + + {%- endif -%} + {#- rel="canonical" (set by html_baseurl) -#} + {%- if pageurl %} + + {%- endif %} + {%- endblock linktags %} + + {# Favicon #} + {%- if favicon_url -%} + + {%- endif -%} + + {#- Generator banner -#} + + + {%- endblock site_meta -%} + + {#- Site title -#} + {%- block htmltitle -%} + {% if not docstitle %} + {{ title|striptags|e }} + {% elif pagename == master_doc %} + {{ docstitle|striptags|e }} + {% else %} + {{ title|striptags|e }} - {{ docstitle|striptags|e }} + {% endif %} + {%- endblock -%} + + {%- block styles -%} + + {# Custom stylesheets #} + {%- block regular_styles -%} + {%- for css in css_files -%} + {% if css|attr("filename") -%} + {{ css_tag(css) }} + {%- else -%} + + {%- endif %} + {% endfor -%} + {%- endblock regular_styles -%} + + {#- Theme-related stylesheets -#} + {%- block theme_styles %} + {% include "partials/_head_css_variables.html" with context %} + {%- endblock theme_styles -%} + + {%- block extra_styles -%} + + + {%- endblock extra_styles -%} + + {%- endblock styles -%} + + {#- Custom front matter #} + {%- block extrahead -%}{%- endblock -%} + + + + + + {% block body %} + + {% endblock %} + + {%- block scripts -%} + + {# Custom JS #} + {%- block regular_scripts -%} + {% for path in script_files -%} + {{ js_tag(path) }} + {% endfor -%} + {%- endblock regular_scripts -%} + + {# Theme-related JavaScript code #} + {%- block theme_scripts -%} + + + {%- endblock -%} + {%- endblock scripts -%} + + diff --git a/docs/_templates/page.html b/docs/_templates/page.html index 582062c95e..d078e9dd5e 100644 --- a/docs/_templates/page.html +++ b/docs/_templates/page.html @@ -61,6 +61,8 @@
+ + diff --git a/docs/_templates/sidebar/search.html b/docs/_templates/sidebar/search.html new file mode 100644 index 0000000000..a6bfc08dd9 --- /dev/null +++ b/docs/_templates/sidebar/search.html @@ -0,0 +1,5 @@ +
+ + + diff --git a/docs/conf.py b/docs/conf.py index f1ac1cb684..ed9df55433 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -186,7 +186,7 @@ # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ["_static"] -html_css_files = ["custom.css", "flyte.css"] +html_css_files = ["custom.css", "flyte.css", "algolia.css"] # Custom sidebar templates, must be a dictionary that maps document names # to template names. From b35f792636e3733e9f77c3cbc0fcf36a0f431bd9 Mon Sep 17 00:00:00 2001 From: Niels Bantilan Date: Wed, 10 Jan 2024 11:03:09 -0500 Subject: [PATCH 02/30] monodocs: do not use beta releases when importing projects (#4712) Signed-off-by: Niels Bantilan --- docs/_ext/import_projects.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/docs/_ext/import_projects.py b/docs/_ext/import_projects.py index b4fa6310d7..df223ee760 100644 --- a/docs/_ext/import_projects.py +++ b/docs/_ext/import_projects.py @@ -53,6 +53,8 @@ class Project: ``` """ +VERSION_PATTERN = r"^v[0-9]+.[0-9]+.[0-9]+$" + class ListTableToc(SphinxDirective): """Custom directive to convert list-table into both list-table and toctree.""" @@ -146,7 +148,10 @@ def import_projects(app: Sphinx, config: Config): dest_docs_dir = srcdir / project.dest if repo: - tags = sorted(repo.tags, key=lambda t: t.commit.committed_datetime) + tags = sorted( + [t for t in repo.tags if re.match(VERSION_PATTERN, t.name)], + key=lambda t: t.commit.committed_datetime + ) if not tags: # If tags don't exist just use the current commit. This occurs # when the git repo is a shallow clone. From 4ed13d01bda1a15fee6df692e53a48ccb5bcaf31 Mon Sep 17 00:00:00 2001 From: Paul Dittamo <37558497+pvditt@users.noreply.github.com> Date: Wed, 10 Jan 2024 09:14:06 -0800 Subject: [PATCH 03/30] add cache evicted status (#4705) Signed-off-by: Paul Dittamo --- .../gen/pb-cpp/flyteidl/core/catalog.pb.cc | 12 ++-- .../gen/pb-cpp/flyteidl/core/catalog.pb.h | 3 +- .../gen/pb-go/flyteidl/core/catalog.pb.go | 66 ++++++++++--------- .../pb-go/flyteidl/service/admin.swagger.json | 5 +- .../service/flyteadmin/api/swagger.yaml | 4 +- .../model_core_catalog_cache_status.go | 3 +- .../gen/pb-go/flyteidl/service/openapi.go | 4 +- .../gen/pb-java/flyteidl/core/Catalog.java | 26 ++++++-- flyteidl/gen/pb-js/flyteidl.d.ts | 3 +- flyteidl/gen/pb-js/flyteidl.js | 5 ++ .../pb_python/flyteidl/core/catalog_pb2.py | 4 +- .../pb_python/flyteidl/core/catalog_pb2.pyi | 2 + .../models/core_catalog_cache_status.py | 1 + flyteidl/gen/pb_rust/flyteidl.core.rs | 4 ++ flyteidl/protos/flyteidl/core/catalog.proto | 2 + 15 files changed, 94 insertions(+), 50 deletions(-) diff --git a/flyteidl/gen/pb-cpp/flyteidl/core/catalog.pb.cc b/flyteidl/gen/pb-cpp/flyteidl/core/catalog.pb.cc index e366a80acd..83c7bb3fe6 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/core/catalog.pb.cc +++ b/flyteidl/gen/pb-cpp/flyteidl/core/catalog.pb.cc @@ -145,18 +145,19 @@ const char descriptor_table_protodef_flyteidl_2fcore_2fcatalog_2eproto[] = "ogReservation\"\207\001\n\006Status\022\030\n\024RESERVATION_" "DISABLED\020\000\022\030\n\024RESERVATION_ACQUIRED\020\001\022\026\n\022" "RESERVATION_EXISTS\020\002\022\030\n\024RESERVATION_RELE" - "ASED\020\003\022\027\n\023RESERVATION_FAILURE\020\004*\240\001\n\022Cata" + "ASED\020\003\022\027\n\023RESERVATION_FAILURE\020\004*\263\001\n\022Cata" "logCacheStatus\022\022\n\016CACHE_DISABLED\020\000\022\016\n\nCA" "CHE_MISS\020\001\022\r\n\tCACHE_HIT\020\002\022\023\n\017CACHE_POPUL" "ATED\020\003\022\030\n\024CACHE_LOOKUP_FAILURE\020\004\022\025\n\021CACH" - "E_PUT_FAILURE\020\005\022\021\n\rCACHE_SKIPPED\020\006B::min(), CatalogCacheStatus_INT_MAX_SENTINEL_DO_NOT_USE_ = std::numeric_limits<::google::protobuf::int32>::max() }; bool CatalogCacheStatus_IsValid(int value); const CatalogCacheStatus CatalogCacheStatus_MIN = CACHE_DISABLED; -const CatalogCacheStatus CatalogCacheStatus_MAX = CACHE_SKIPPED; +const CatalogCacheStatus CatalogCacheStatus_MAX = CACHE_EVICTED; const int CatalogCacheStatus_ARRAYSIZE = CatalogCacheStatus_MAX + 1; const ::google::protobuf::EnumDescriptor* CatalogCacheStatus_descriptor(); diff --git a/flyteidl/gen/pb-go/flyteidl/core/catalog.pb.go b/flyteidl/gen/pb-go/flyteidl/core/catalog.pb.go index 47675cbb7a..66f06900fa 100644 --- a/flyteidl/gen/pb-go/flyteidl/core/catalog.pb.go +++ b/flyteidl/gen/pb-go/flyteidl/core/catalog.pb.go @@ -38,6 +38,8 @@ const ( CatalogCacheStatus_CACHE_PUT_FAILURE CatalogCacheStatus = 5 // Used to indicate the cache lookup was skipped CatalogCacheStatus_CACHE_SKIPPED CatalogCacheStatus = 6 + // Used to indicate that the cache was evicted + CatalogCacheStatus_CACHE_EVICTED CatalogCacheStatus = 7 ) var CatalogCacheStatus_name = map[int32]string{ @@ -48,6 +50,7 @@ var CatalogCacheStatus_name = map[int32]string{ 4: "CACHE_LOOKUP_FAILURE", 5: "CACHE_PUT_FAILURE", 6: "CACHE_SKIPPED", + 7: "CACHE_EVICTED", } var CatalogCacheStatus_value = map[string]int32{ @@ -58,6 +61,7 @@ var CatalogCacheStatus_value = map[string]int32{ "CACHE_LOOKUP_FAILURE": 4, "CACHE_PUT_FAILURE": 5, "CACHE_SKIPPED": 6, + "CACHE_EVICTED": 7, } func (x CatalogCacheStatus) String() string { @@ -285,35 +289,35 @@ func init() { func init() { proto.RegisterFile("flyteidl/core/catalog.proto", fileDescriptor_534f5d1443565574) } var fileDescriptor_534f5d1443565574 = []byte{ - // 468 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x52, 0x4f, 0x6f, 0xd3, 0x4e, - 0x10, 0xad, 0xd3, 0xfe, 0x22, 0x65, 0xf2, 0x4b, 0xeb, 0x6e, 0x5a, 0x30, 0x20, 0xf1, 0x27, 0x07, - 0x84, 0x90, 0xb0, 0xa5, 0x72, 0x41, 0x88, 0x8b, 0x63, 0x2f, 0xca, 0xaa, 0x2e, 0x31, 0xbb, 0x36, - 0x42, 0x08, 0x29, 0xda, 0xd8, 0x1b, 0xd7, 0x6a, 0x9a, 0xad, 0xec, 0x0d, 0x82, 0x33, 0x07, 0xbe, - 0x05, 0xe2, 0xa3, 0xa2, 0x78, 0x1d, 0xe7, 0x0f, 0x27, 0xcf, 0xbc, 0xf7, 0xe6, 0xcd, 0xb3, 0x3d, - 0xf0, 0x68, 0x36, 0xff, 0xa1, 0x44, 0x9e, 0xce, 0x9d, 0x44, 0x16, 0xc2, 0x49, 0xb8, 0xe2, 0x73, - 0x99, 0xd9, 0x77, 0x85, 0x54, 0x12, 0xf5, 0xd6, 0xa4, 0xbd, 0x22, 0x1f, 0x3e, 0xde, 0xd5, 0xe6, - 0xa9, 0x58, 0xa8, 0x7c, 0x96, 0x8b, 0x42, 0xcb, 0x07, 0x04, 0x90, 0xa7, 0xe7, 0xdd, 0x42, 0xe5, - 0x33, 0x9e, 0xa8, 0x88, 0x67, 0xe8, 0x09, 0x74, 0x79, 0xdd, 0x4e, 0xf2, 0xd4, 0x32, 0x9e, 0x1a, - 0x2f, 0x3a, 0x14, 0xd6, 0x10, 0x49, 0x11, 0x82, 0xa3, 0x05, 0xbf, 0x15, 0x56, 0xab, 0x62, 0xaa, - 0x7a, 0xf0, 0xb3, 0x05, 0x27, 0xb5, 0xd7, 0x95, 0x50, 0x3c, 0xe5, 0x8a, 0xa3, 0x37, 0x00, 0xab, - 0x67, 0x29, 0x1a, 0x9f, 0xee, 0xc5, 0x03, 0x7b, 0x27, 0xa2, 0x4d, 0x9a, 0x4c, 0xb4, 0x53, 0x8b, - 0x49, 0x8a, 0x7c, 0xf8, 0xbf, 0x89, 0xa0, 0x78, 0x56, 0x6d, 0xea, 0x5e, 0x3c, 0xdb, 0x9b, 0xfd, - 0x37, 0x3b, 0x6d, 0x92, 0xaf, 0x5e, 0xe4, 0x2b, 0x9c, 0x97, 0x72, 0x59, 0x24, 0x62, 0xa2, 0x78, - 0x79, 0x33, 0x11, 0xdf, 0x45, 0xb2, 0x54, 0xb9, 0x5c, 0x58, 0x87, 0x95, 0xdd, 0xf3, 0x3d, 0xbb, - 0x88, 0x97, 0x37, 0x78, 0xad, 0xd9, 0xe4, 0x1a, 0x1d, 0xd0, 0xbe, 0xb6, 0xd9, 0x11, 0x0c, 0x11, - 0x98, 0xb5, 0x7b, 0x63, 0x3c, 0xf8, 0x6d, 0x34, 0x5f, 0x94, 0x8a, 0x52, 0x14, 0xdf, 0x78, 0x05, - 0xff, 0x32, 0xa0, 0xcd, 0x14, 0x57, 0xcb, 0x12, 0x59, 0x70, 0x46, 0x31, 0xc3, 0xf4, 0x93, 0x1b, - 0x91, 0xf1, 0x87, 0x89, 0x4f, 0x98, 0x3b, 0x0c, 0xb0, 0x6f, 0x1e, 0xec, 0x33, 0xae, 0xf7, 0x31, - 0x26, 0x14, 0xfb, 0xa6, 0x81, 0xee, 0x01, 0xda, 0x66, 0xf0, 0x67, 0xc2, 0x22, 0x66, 0xb6, 0xf6, - 0x27, 0x28, 0x0e, 0xb0, 0xcb, 0xb0, 0x6f, 0x1e, 0xa2, 0xfb, 0xd0, 0xdf, 0x66, 0xde, 0xbb, 0x24, - 0x88, 0x29, 0x36, 0x8f, 0x5e, 0xfe, 0xd9, 0x04, 0xf4, 0x78, 0x72, 0x2d, 0xea, 0x54, 0x08, 0x8e, - 0x3d, 0xd7, 0x1b, 0xe1, 0xed, 0x3c, 0xc7, 0x00, 0x1a, 0xbb, 0x22, 0x8c, 0x99, 0x06, 0xea, 0x41, - 0x47, 0xf7, 0x23, 0x12, 0x99, 0x2d, 0xd4, 0x87, 0x13, 0xdd, 0x86, 0xe3, 0x30, 0x0e, 0xdc, 0xa8, - 0xda, 0x6b, 0xc1, 0x99, 0x06, 0x83, 0xf1, 0xf8, 0x32, 0x0e, 0x37, 0x8b, 0xd1, 0x39, 0x9c, 0xd6, - 0xf2, 0x38, 0x6a, 0xe0, 0xff, 0xd0, 0x29, 0xf4, 0x34, 0xcc, 0x2e, 0x49, 0x18, 0x62, 0xdf, 0x6c, - 0x0f, 0xdf, 0x7d, 0x79, 0x9b, 0xe5, 0xea, 0x7a, 0x39, 0xb5, 0x13, 0x79, 0xeb, 0x54, 0xbf, 0x48, - 0x16, 0x99, 0x2e, 0x9c, 0xe6, 0xa0, 0x33, 0xb1, 0x70, 0xee, 0xa6, 0xaf, 0x32, 0xe9, 0xec, 0xdc, - 0xf8, 0xb4, 0x5d, 0x5d, 0xf6, 0xeb, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x7c, 0xed, 0xa2, 0x14, - 0x27, 0x03, 0x00, 0x00, + // 475 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x52, 0x4d, 0x6f, 0xd3, 0x40, + 0x10, 0xad, 0xd3, 0x12, 0x94, 0x09, 0x69, 0xdd, 0x4d, 0x0b, 0x01, 0x24, 0x3e, 0x72, 0x40, 0x08, + 0x09, 0x5b, 0x2a, 0x17, 0x84, 0xb8, 0x38, 0xf6, 0xa2, 0xac, 0xea, 0x12, 0xb3, 0x6b, 0x57, 0x08, + 0x21, 0x45, 0x1b, 0x7b, 0xe3, 0x5a, 0x4d, 0xb3, 0x95, 0xbd, 0x41, 0x70, 0xe6, 0xc0, 0xbf, 0xe0, + 0x4f, 0xf0, 0x07, 0x51, 0xbc, 0x8e, 0xf3, 0xd1, 0x93, 0x67, 0xde, 0x7b, 0xf3, 0xe6, 0xd9, 0x1e, + 0x78, 0x3a, 0x9d, 0xfd, 0x52, 0x22, 0x4b, 0x66, 0x76, 0x2c, 0x73, 0x61, 0xc7, 0x5c, 0xf1, 0x99, + 0x4c, 0xad, 0xdb, 0x5c, 0x2a, 0x89, 0x3a, 0x2b, 0xd2, 0x5a, 0x92, 0x4f, 0x9e, 0x6d, 0x6b, 0xb3, + 0x44, 0xcc, 0x55, 0x36, 0xcd, 0x44, 0xae, 0xe5, 0x7d, 0x02, 0xc8, 0xd5, 0xf3, 0x4e, 0xae, 0xb2, + 0x29, 0x8f, 0x55, 0xc8, 0x53, 0xf4, 0x1c, 0xda, 0xbc, 0x6a, 0xc7, 0x59, 0xd2, 0x33, 0x5e, 0x18, + 0xaf, 0x5b, 0x14, 0x56, 0x10, 0x49, 0x10, 0x82, 0x83, 0x39, 0xbf, 0x11, 0xbd, 0x46, 0xc9, 0x94, + 0x75, 0xff, 0x77, 0x03, 0x8e, 0x2a, 0xaf, 0x0b, 0xa1, 0x78, 0xc2, 0x15, 0x47, 0xef, 0x01, 0x96, + 0xcf, 0x42, 0xd4, 0x3e, 0xed, 0xb3, 0xc7, 0xd6, 0x56, 0x44, 0x8b, 0xd4, 0x99, 0x68, 0xab, 0x12, + 0x93, 0x04, 0x79, 0xf0, 0xa0, 0x8e, 0xa0, 0x78, 0x5a, 0x6e, 0x6a, 0x9f, 0xbd, 0xdc, 0x99, 0xbd, + 0x9b, 0x9d, 0xd6, 0xc9, 0x97, 0x2f, 0xf2, 0x1d, 0x4e, 0x0b, 0xb9, 0xc8, 0x63, 0x31, 0x56, 0xbc, + 0xb8, 0x1e, 0x8b, 0x9f, 0x22, 0x5e, 0xa8, 0x4c, 0xce, 0x7b, 0xfb, 0xa5, 0xdd, 0xab, 0x1d, 0xbb, + 0x90, 0x17, 0xd7, 0x78, 0xa5, 0x59, 0xe7, 0x1a, 0xee, 0xd1, 0xae, 0xb6, 0xd9, 0x12, 0x0c, 0x10, + 0x98, 0x95, 0x7b, 0x6d, 0xdc, 0xff, 0x6b, 0xd4, 0x5f, 0x94, 0x8a, 0x42, 0xe4, 0x3f, 0x78, 0x09, + 0xff, 0x31, 0xa0, 0xc9, 0x14, 0x57, 0x8b, 0x02, 0xf5, 0xe0, 0x84, 0x62, 0x86, 0xe9, 0xa5, 0x13, + 0x92, 0xd1, 0xe7, 0xb1, 0x47, 0x98, 0x33, 0xf0, 0xb1, 0x67, 0xee, 0xed, 0x32, 0x8e, 0xfb, 0x25, + 0x22, 0x14, 0x7b, 0xa6, 0x81, 0x1e, 0x02, 0xda, 0x64, 0xf0, 0x57, 0xc2, 0x42, 0x66, 0x36, 0x76, + 0x27, 0x28, 0xf6, 0xb1, 0xc3, 0xb0, 0x67, 0xee, 0xa3, 0x47, 0xd0, 0xdd, 0x64, 0x3e, 0x39, 0xc4, + 0x8f, 0x28, 0x36, 0x0f, 0xde, 0xfc, 0x5b, 0x07, 0x74, 0x79, 0x7c, 0x25, 0xaa, 0x54, 0x08, 0x0e, + 0x5d, 0xc7, 0x1d, 0xe2, 0xcd, 0x3c, 0x87, 0x00, 0x1a, 0xbb, 0x20, 0x8c, 0x99, 0x06, 0xea, 0x40, + 0x4b, 0xf7, 0x43, 0x12, 0x9a, 0x0d, 0xd4, 0x85, 0x23, 0xdd, 0x06, 0xa3, 0x20, 0xf2, 0x9d, 0xb0, + 0xdc, 0xdb, 0x83, 0x13, 0x0d, 0xfa, 0xa3, 0xd1, 0x79, 0x14, 0xac, 0x17, 0xa3, 0x53, 0x38, 0xae, + 0xe4, 0x51, 0x58, 0xc3, 0xf7, 0xd0, 0x31, 0x74, 0x34, 0xcc, 0xce, 0x49, 0x10, 0x60, 0xcf, 0x6c, + 0xae, 0x21, 0x7c, 0x49, 0xdc, 0xa5, 0xed, 0xfd, 0xc1, 0xc7, 0x6f, 0x1f, 0xd2, 0x4c, 0x5d, 0x2d, + 0x26, 0x56, 0x2c, 0x6f, 0xec, 0xf2, 0xaf, 0xc9, 0x3c, 0xd5, 0x85, 0x5d, 0xdf, 0x78, 0x2a, 0xe6, + 0xf6, 0xed, 0xe4, 0x6d, 0x2a, 0xed, 0xad, 0xb3, 0x9f, 0x34, 0xcb, 0x63, 0x7f, 0xf7, 0x3f, 0x00, + 0x00, 0xff, 0xff, 0x2e, 0x3b, 0x98, 0x7c, 0x3a, 0x03, 0x00, 0x00, } diff --git a/flyteidl/gen/pb-go/flyteidl/service/admin.swagger.json b/flyteidl/gen/pb-go/flyteidl/service/admin.swagger.json index b2d41e5616..ecfd48e694 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/admin.swagger.json +++ b/flyteidl/gen/pb-go/flyteidl/service/admin.swagger.json @@ -5856,10 +5856,11 @@ "CACHE_POPULATED", "CACHE_LOOKUP_FAILURE", "CACHE_PUT_FAILURE", - "CACHE_SKIPPED" + "CACHE_SKIPPED", + "CACHE_EVICTED" ], "default": "CACHE_DISABLED", - "description": "- CACHE_DISABLED: Used to indicate that caching was disabled\n - CACHE_MISS: Used to indicate that the cache lookup resulted in no matches\n - CACHE_HIT: used to indicate that the associated artifact was a result of a previous execution\n - CACHE_POPULATED: used to indicate that the resultant artifact was added to the cache\n - CACHE_LOOKUP_FAILURE: Used to indicate that cache lookup failed because of an error\n - CACHE_PUT_FAILURE: Used to indicate that cache lookup failed because of an error\n - CACHE_SKIPPED: Used to indicate the cache lookup was skipped", + "description": "- CACHE_DISABLED: Used to indicate that caching was disabled\n - CACHE_MISS: Used to indicate that the cache lookup resulted in no matches\n - CACHE_HIT: used to indicate that the associated artifact was a result of a previous execution\n - CACHE_POPULATED: used to indicate that the resultant artifact was added to the cache\n - CACHE_LOOKUP_FAILURE: Used to indicate that cache lookup failed because of an error\n - CACHE_PUT_FAILURE: Used to indicate that cache lookup failed because of an error\n - CACHE_SKIPPED: Used to indicate the cache lookup was skipped\n - CACHE_EVICTED: Used to indicate that the cache was evicted", "title": "Indicates the status of CatalogCaching. The reason why this is not embedded in TaskNodeMetadata is, that we may use for other types of nodes as well in the future" }, "coreCatalogMetadata": { diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api/swagger.yaml b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api/swagger.yaml index 392faa0aab..42d3dac5c9 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api/swagger.yaml +++ b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api/swagger.yaml @@ -77338,7 +77338,8 @@ definitions: \ artifact was added to the cache\n - CACHE_LOOKUP_FAILURE: Used to indicate\ \ that cache lookup failed because of an error\n - CACHE_PUT_FAILURE: Used to\ \ indicate that cache lookup failed because of an error\n - CACHE_SKIPPED: Used\ - \ to indicate the cache lookup was skipped" + \ to indicate the cache lookup was skipped\n - CACHE_EVICTED: Used to indicate\ + \ that the cache was evicted" enum: - "CACHE_DISABLED" - "CACHE_MISS" @@ -77347,6 +77348,7 @@ definitions: - "CACHE_LOOKUP_FAILURE" - "CACHE_PUT_FAILURE" - "CACHE_SKIPPED" + - "CACHE_EVICTED" default: "CACHE_DISABLED" coreCatalogMetadata: type: "object" diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_catalog_cache_status.go b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_catalog_cache_status.go index 6e50baf228..855a733fbc 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_catalog_cache_status.go +++ b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_catalog_cache_status.go @@ -8,7 +8,7 @@ */ package flyteadmin -// CoreCatalogCacheStatus : - CACHE_DISABLED: Used to indicate that caching was disabled - CACHE_MISS: Used to indicate that the cache lookup resulted in no matches - CACHE_HIT: used to indicate that the associated artifact was a result of a previous execution - CACHE_POPULATED: used to indicate that the resultant artifact was added to the cache - CACHE_LOOKUP_FAILURE: Used to indicate that cache lookup failed because of an error - CACHE_PUT_FAILURE: Used to indicate that cache lookup failed because of an error - CACHE_SKIPPED: Used to indicate the cache lookup was skipped +// CoreCatalogCacheStatus : - CACHE_DISABLED: Used to indicate that caching was disabled - CACHE_MISS: Used to indicate that the cache lookup resulted in no matches - CACHE_HIT: used to indicate that the associated artifact was a result of a previous execution - CACHE_POPULATED: used to indicate that the resultant artifact was added to the cache - CACHE_LOOKUP_FAILURE: Used to indicate that cache lookup failed because of an error - CACHE_PUT_FAILURE: Used to indicate that cache lookup failed because of an error - CACHE_SKIPPED: Used to indicate the cache lookup was skipped - CACHE_EVICTED: Used to indicate that the cache was evicted type CoreCatalogCacheStatus string // List of coreCatalogCacheStatus @@ -20,4 +20,5 @@ const ( CoreCatalogCacheStatusLOOKUP_FAILURE CoreCatalogCacheStatus = "CACHE_LOOKUP_FAILURE" CoreCatalogCacheStatusPUT_FAILURE CoreCatalogCacheStatus = "CACHE_PUT_FAILURE" CoreCatalogCacheStatusSKIPPED CoreCatalogCacheStatus = "CACHE_SKIPPED" + CoreCatalogCacheStatusEVICTED CoreCatalogCacheStatus = "CACHE_EVICTED" ) diff --git a/flyteidl/gen/pb-go/flyteidl/service/openapi.go b/flyteidl/gen/pb-go/flyteidl/service/openapi.go index 84081d9498..e0479d7a27 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/openapi.go +++ b/flyteidl/gen/pb-go/flyteidl/service/openapi.go @@ -78,7 +78,7 @@ func (fi bindataFileInfo) Sys() interface{} { return nil } -var _adminSwaggerJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\x7b\x73\xeb\xb8\x95\x2f\x0c\xff\x3f\x9f\x02\x67\xcf\xa9\xea\xee\x44\xb6\x3b\xc9\x4c\xde\x94\xa7\x4e\xbd\x8f\xda\xd6\xde\xad\xd3\xbe\xc5\x97\xee\xe9\x67\x94\x52\x43\x24\x24\x21\x26\x01\x06\x00\xed\xad\x4e\xe5\xbb\x3f\x85\x85\x0b\x41\x8a\x94\xa8\x8b\x6d\x79\x37\x67\xaa\xd2\xde\x22\x89\xeb\xc2\xc2\xba\xfe\xd6\x3f\xff\x0d\xa1\x0f\xf2\x19\xcf\x66\x44\x7c\x38\x45\x1f\xfe\x78\xfc\xed\x87\x9e\xfe\x8d\xb2\x29\xff\x70\x8a\xf4\x73\x84\x3e\x28\xaa\x12\xa2\x9f\x4f\x93\x85\x22\x34\x4e\x4e\x24\x11\x4f\x34\x22\x27\x38\x4e\x29\x3b\xce\x04\x57\x1c\x3e\x44\xe8\xc3\x13\x11\x92\x72\xa6\x5f\xb7\x7f\x22\xc6\x15\x92\x44\x7d\xf8\x37\x84\xfe\x05\xcd\xcb\x68\x4e\x52\x22\x3f\x9c\xa2\xff\x31\x1f\xcd\x95\xca\x5c\x03\xfa\x6f\xa9\xdf\xfd\x1b\xbc\x1b\x71\x26\xf3\xd2\xcb\x38\xcb\x12\x1a\x61\x45\x39\x3b\xf9\xbb\xe4\xac\x78\x37\x13\x3c\xce\xa3\x96\xef\x62\x35\x97\xc5\x1c\x4f\x70\x46\x4f\x9e\xfe\x70\x82\x23\x45\x9f\xc8\x38\xc1\x39\x8b\xe6\xe3\x2c\xc1\x4c\x9e\xfc\x93\xc6\x7a\x8e\x7f\x27\x91\xfa\x17\xfc\x23\xe6\x29\xa6\xcc\xfc\xcd\x70\x4a\xfe\xe5\xdb\x41\xe8\xc3\x8c\xa8\xe0\x9f\x7a\xb6\x79\x9a\x62\xb1\xd0\x2b\xf2\x91\xa8\x68\x8e\xd4\x9c\x20\xd3\x0f\x72\x4b\xc4\xa7\x08\xa3\x53\x41\xa6\xa7\xbf\x08\x32\x1d\xbb\x85\x3e\x36\x0b\x7c\x01\xa3\xb9\x49\x30\xfb\xe5\xd8\x2e\x13\xb4\xcc\x33\x22\x60\x6e\xc3\x58\xb7\xfe\x89\xa8\x3e\x34\x5b\xbc\x1f\xbe\x2d\x88\xcc\x38\x93\x44\x96\x86\x87\xd0\x87\x3f\x7e\xfb\x6d\xe5\x27\x84\x3e\xc4\x44\x46\x82\x66\xca\xee\x65\x1f\xc9\x3c\x8a\x88\x94\xd3\x3c\x41\xae\xa5\x70\x30\x66\xaa\x7a\x63\xf1\x52\x63\x08\x7d\xf8\xdf\x82\x4c\x75\x3b\xff\x7e\x12\x93\x29\x65\x54\xb7\x2b\x0d\xfd\x04\xa3\x2d\x7d\xf5\xaf\x7f\xab\xfb\xfb\x5f\xc1\x8c\x32\x2c\x70\x4a\x14\x11\xc5\x8e\x9b\xff\xab\xcc\x45\xef\x91\xee\xbc\xd8\xc7\xea\xc0\x2b\xb3\xbd\xc2\x29\xd1\x7b\xa2\x77\xca\x7e\x01\x7f\x0b\x22\x79\x2e\x22\x82\x26\x24\xe1\x6c\x26\x91\xe2\x4b\x6b\x40\xa1\x05\x4d\x5e\xd5\x27\x82\xfc\x23\xa7\x82\xe8\xbd\x52\x22\x27\x95\xa7\x6a\x91\xc1\x20\xa5\x12\x94\xcd\xc2\xa5\xf8\x57\xaf\xd5\xd4\x0c\x55\x6e\x30\x33\xf3\x41\xe3\xc4\x46\xac\xef\x5e\x89\x30\x43\x13\x82\xf4\x59\xa4\x31\x11\x24\x46\x58\x22\x8c\x64\x3e\x91\x44\xa1\x67\xaa\xe6\x94\xe9\x7f\x67\x24\xa2\x53\x1a\xb9\x35\x3b\x9c\xb5\x81\x3f\x57\xaf\xcc\x83\x24\x42\x0f\xfc\x89\xc6\x24\x46\x4f\x38\xc9\x09\x9a\x72\x51\x5a\x9e\xe3\x11\xbb\x9f\xeb\x75\x48\x27\x94\xc1\xc9\xd3\x6b\xe9\x28\xe4\xf7\x6e\xb9\x7e\x8f\x74\x7f\x28\x67\xf4\x1f\x39\x49\x16\x88\xc6\x84\x29\x3a\xa5\x44\x56\x5b\xfb\x3d\x87\xfe\x71\x82\x8e\x90\x5e\x67\x22\x14\xac\x37\x67\x8a\x7c\x56\x12\x1d\xa1\x84\x3e\x12\xf4\xd5\x05\x95\x0a\xf5\x6f\x86\x5f\xf5\xd0\x57\xe6\xbc\x20\xe0\x4d\x5f\xbd\xc2\x0a\xfb\xbf\xff\x16\x1c\x3d\x85\x67\xd5\x43\xf7\xa1\xaf\x4f\xf3\x9d\xb9\x1a\x8a\x16\xfe\xf6\x6f\x61\x3b\x76\xbf\x56\xf3\xdb\x82\xd9\x5a\x4e\xdb\x96\xbf\xc2\x32\x95\x59\xab\xd4\x3b\xb4\x2b\x67\xd5\xed\x56\x59\xab\x7c\x5f\xbc\x55\x4f\xe1\xa5\xf9\xeb\x2e\xcc\x15\x2b\xa0\x7a\x4c\x99\x39\x24\xfe\xcc\x08\xa9\xcf\x89\xa3\xde\x03\x61\x29\xbb\xf0\xda\x60\x66\x01\xbb\x75\x5c\x34\x58\x95\x03\x9c\x77\x42\x53\xba\x6e\x7f\x87\x2c\xd6\x22\x97\x65\x76\x2c\x4f\x27\x44\xe8\x65\x70\x6c\x0f\x66\x3b\xd1\x6c\x50\xe5\x82\x91\xb8\xc5\x34\xff\x91\x13\xb1\x58\x31\xcf\x29\x4e\x64\xd3\x44\x29\x53\x44\xcb\xb7\x95\xc7\x53\x2e\x52\xac\xec\x0b\x7f\xfe\x8f\x4d\x17\x42\xf1\x47\xb2\x6e\xff\x87\x66\x37\x23\x2c\x81\x0c\xd2\x3c\x51\x34\x4b\x08\xca\xf0\x8c\x48\xbb\x22\x79\xa2\x64\x0f\x5e\xd3\x32\x35\x11\x47\xfe\x06\x82\x1e\xdc\xcd\x9b\x4b\xf8\x05\x4d\xbd\x00\xc9\xc8\x67\x05\x2d\x8d\x18\xdc\xbd\xb0\x44\xe1\x8d\xf2\x02\x4b\xb9\x1d\xcd\x48\x2e\xd4\x78\xb2\x38\x7e\x24\x4b\xfd\x36\x52\x0e\x66\x08\x2b\x25\xe8\x24\x57\x44\xcf\x5b\xb7\xe1\xee\x4e\x60\x8f\xe6\x82\x6e\xc3\x1a\xde\x6e\xc2\x31\x15\x24\x82\xb9\x6d\x72\x60\xfc\x57\x7a\xde\x5a\x7f\x59\x98\xd9\x3f\x92\x05\xc8\x23\x35\x2b\xe0\xb7\x7c\xc4\x46\x0c\x1d\xa1\xf3\xc1\xdd\xd9\xe0\xea\x7c\x78\xf5\xe9\x14\x7d\xb7\x40\x31\x99\xe2\x3c\x51\x3d\x34\xa5\x24\x89\x25\xc2\x82\x40\x93\x24\xd6\x32\x87\x1e\x0c\x61\x31\x65\x33\xc4\x45\x4c\xc4\xcb\x2d\x63\xe5\x29\x61\x79\x5a\xb9\x57\xe0\xf7\x62\xf4\x95\x2f\xb4\x88\xe1\x1f\x95\x9e\xfc\x6d\x69\x81\x61\xc6\xba\xef\xa0\xb5\x57\x13\x6a\xa2\x39\x4d\x62\x41\xd8\x89\xc2\xf2\x71\x4c\x3e\x93\x28\x37\x77\xf2\x3f\xcb\x3f\x8c\xb5\x64\xca\x63\x52\xfe\xa5\xf4\x8f\x42\x14\xda\xf8\x53\xaf\xa5\x6e\xfc\x25\xe8\xb4\xed\xbe\x83\x5f\x68\x5c\xfb\x36\xfc\xb2\x66\x0e\xee\x9d\x15\x83\x75\xaf\x34\x8e\xca\xbd\x60\x25\xbe\xda\x77\x04\x51\x62\x31\xc6\x4a\x91\x34\x53\x1b\xea\xeb\x18\x25\x5a\xae\x5c\x25\x47\x5e\xf1\x98\x0c\x5c\x7f\xbf\x20\x23\xce\x92\x18\x4d\x16\x96\x6b\x4d\x89\x20\x2c\x22\xcd\x2d\xdc\x63\xf9\x58\xb4\xb0\x4e\x18\x2d\xf5\x27\x3f\x72\xa1\x3f\x7f\x0f\x02\x69\x69\xe0\xaf\x21\x93\x6e\x7b\xe2\xbe\x38\x0b\xc1\x96\xfc\xa3\xb3\x27\xec\xbe\x92\x6d\xad\x0f\x5c\x20\xb9\x90\x8a\xa4\x6b\xed\x10\xef\x67\x21\xec\x05\x71\xa8\x03\xae\xdc\x51\xbf\x81\x53\x5f\xbe\x71\xbb\xe3\xbd\xc1\x92\xed\xcb\x8a\x78\xe8\xf3\x74\x3e\x9c\xd5\x53\xbd\x73\xdb\x17\x38\x31\xde\xc5\x34\x4b\xb2\xe0\xbe\x07\xf9\x42\xe6\x86\xc6\xbd\x72\xab\x3d\x86\x01\xac\x51\x34\xcb\x76\x68\x7f\xfe\xf4\xa7\xa1\x85\xc6\x98\xe3\xd4\x9c\xca\xc0\x58\x85\x22\x2e\x8c\x2c\x18\xdb\xf3\x6e\x74\xcd\xfe\x7d\xff\x6e\x70\x7f\x8a\xfa\x28\xc6\x0a\xeb\x03\x2e\x48\x26\x88\x24\x4c\x81\x1e\xaf\xbf\x57\x0b\x94\xf2\x98\x24\x46\xe3\xfc\xa8\x25\x5f\x74\x8e\x15\x3e\xc3\x0a\x27\x7c\x76\x8c\xfa\xf0\x4f\xfd\x31\x95\x08\x27\x92\x23\xec\xc8\x8a\xc4\xae\x09\xcc\x62\xc7\x5a\x30\x8a\x78\x9a\xd1\xc4\xdb\xe0\xbd\x71\x85\xb2\x98\x3e\xd1\x38\xc7\x09\xe2\x13\xcd\x55\xb4\x86\x3c\x78\x22\x4c\xe5\x38\x49\x16\x08\x27\x09\xb2\xdd\xba\x17\x90\x9c\xf3\x3c\x89\x75\xbb\x6e\x94\x92\xa6\x34\xc1\x42\xab\xe0\x66\xb4\xd7\xb6\x2d\x74\x3f\x27\x7e\xac\x30\x2e\xbd\x9a\x29\x7e\x24\x12\x51\x85\x32\x2e\x25\x9d\x24\xc5\x99\x7f\x18\x22\x18\xf7\xd9\xc5\x10\xf4\xf9\x48\x21\x6e\x78\xa8\xeb\xdc\xda\x6f\x5c\x8f\x29\x66\x8c\x40\xc7\x5c\xcd\x89\xb0\xdd\xdb\x97\xdf\x5a\x35\x7f\xb8\xba\xbb\x19\x9c\x0d\x3f\x0e\x07\xe7\xcb\xba\xf9\x7d\xff\xee\x87\xe5\x5f\x7f\xba\xbe\xfd\xe1\xe3\xc5\xf5\x4f\xcb\x4f\x2e\xfa\x0f\x57\x67\xdf\x8f\x6f\x2e\xfa\x57\xcb\x0f\x2d\x59\xb5\x56\xf3\xc3\x91\x6d\x78\xb6\x3a\x9b\xe6\x4b\xd9\x34\x7b\x5f\xae\x51\x73\x4a\x13\xd0\x41\x5b\x1b\x34\xbd\x0d\xc1\x7e\x89\x32\x2c\xa5\x91\x8c\xcc\x08\x8e\x47\xec\x92\x0b\xcd\xc0\xa6\x5c\xf3\x08\x2d\x3d\x29\x91\x47\x8a\xb2\x99\xff\xe8\x14\x8d\xf2\x6f\xbf\xfd\x53\x74\x41\xd9\x23\xfc\x45\x0e\x71\x71\x3a\x8b\x6f\x67\xf1\xfd\x6d\x59\x7c\xb5\xe8\x73\x12\x1a\x7a\xf7\x1b\x32\xa4\x85\x0b\x96\xe5\x0a\x44\x09\x9e\x2b\xfd\xa7\xee\x12\xc8\x63\x45\xe0\x50\x3b\x83\xe2\x27\xa2\xfc\x8b\x5a\xb4\x79\x0f\x76\xc4\x9f\xb8\x78\x9c\x26\xfc\xd9\x0f\xfc\x13\x51\x7a\xec\xb7\xb6\x97\x2e\x94\xa8\x0b\x25\x7a\xdb\x50\xa2\x83\x32\xe6\xbd\x3c\xf3\x2b\x5b\xfe\x0c\x07\x6c\xf0\x64\x35\x3a\xaa\x1a\xfc\x50\x81\x9b\xe9\x55\xb8\x66\xd9\x99\xb3\x86\x73\x96\x5e\x7e\x2f\xdc\xb3\x34\xe8\xd7\xe7\x9c\xbf\x09\x7f\x4b\xe7\x4e\xd9\x72\xa1\xde\x25\x83\x6d\x79\x77\xbc\x9a\x33\xe4\xe5\x19\xfe\x52\x6c\xc3\x26\xc1\x0c\x1b\x44\x2f\xb4\x0e\x57\x58\x13\x9f\x50\x1b\x90\x50\x17\x81\xb0\x1c\x72\x50\x1b\x63\xb0\x5b\x50\xc1\xb6\x77\x53\xfb\x30\x81\x4f\x44\x95\x5e\x7e\x2f\x77\x53\x69\xd0\xaf\x7f\x37\xfd\x46\xa3\x03\xba\x70\x80\x17\x5c\xba\x2f\xfd\x46\x3b\x5c\x87\xff\x6f\xc0\xc3\xdf\xb9\xf4\x37\x5a\xa3\x2f\xcb\x87\xff\xa5\x3a\xed\xdf\xa7\x97\xbe\x73\xcb\x77\x6e\xf9\xb7\xf0\x9f\xbc\x3f\xb7\xfc\xcb\xaa\xa7\xc5\xf1\x1a\x3b\x5a\xb0\xfa\x5a\x70\x28\xff\xd5\xc2\x49\x03\x7f\x39\x95\x6f\xd3\xa0\xf1\x46\x1d\xee\xbc\x18\xdf\x00\x8e\xd0\x2f\x96\x90\xd6\xa8\x73\x4b\xdf\xbd\x07\x75\x6e\x79\xd0\x2f\xaf\xc3\xbd\x19\xf3\x7d\xa1\xcb\xf3\x9d\xb0\x81\xcd\x6f\xcb\x2f\x58\x26\xef\x64\xf1\x97\xcf\xc6\x3f\x98\x09\xbd\x1f\xd9\xfb\x0d\x2e\xde\x96\xb7\xee\xde\x73\xb2\x6a\xae\xd9\xe0\x76\x5a\x97\x61\x55\xfd\x9a\x12\xf9\xc7\x77\x79\xdf\xbe\x46\x92\x55\x77\xe1\x76\x17\xae\x6d\xaa\xbb\x70\xbf\xe0\x0b\xf7\xe0\xe0\x6f\x0e\x26\x02\xb4\x0b\x22\xef\x80\x31\xba\x18\xf2\x3d\x2e\x4e\x17\x43\xde\xc5\x90\xff\xc6\x62\xc8\x77\xd1\x9e\xb6\xc5\xa2\x7c\x0b\x3d\xaa\x53\xa3\x3a\x35\x2a\xfc\xbd\x53\xa3\x3a\x35\xaa\x53\xa3\xbe\x70\x14\xd1\x4e\x87\x6a\xbf\x10\x9d\x0e\xd5\x7a\xa9\x3a\x1d\x6a\xc5\xe2\x74\x3a\x54\xa7\x43\xfd\xb6\x74\x28\xf2\x44\x98\x92\x90\x8c\x16\x6a\x14\x1f\x32\x2e\x9b\x35\xa1\x90\x3b\xd4\x68\x41\xd0\x66\x39\x29\x0c\x02\x97\x7e\x41\x73\x2c\x11\x8f\xa2\x5c\x54\xce\x40\x55\x0f\x3a\x13\x04\x2b\x02\x2d\xe8\x0f\xdf\x83\xfe\xb3\x3c\xdd\xd7\x8a\xc1\x9f\xf0\x78\x89\xda\xcd\x41\xa8\x7b\xb2\x5a\x1e\xd9\xdb\xd4\xff\x91\x93\x76\xea\xdf\x0b\x12\xb5\xc2\xf2\x71\xcf\x44\x5d\xca\xb5\xd8\x8a\xa8\xa1\x85\xf7\x42\xd4\xcb\xd3\xfd\xcd\x10\x75\xdd\xd4\x0f\x81\xa8\x9f\x6d\x1e\xff\x9e\x09\x7b\x09\x1e\x60\x2b\xe2\xf6\xad\xbc\x17\x02\xaf\x9f\xf6\x6f\x86\xc8\x9b\xa6\xff\xb6\x84\xee\x53\x24\x5b\x93\xf8\xbd\xa0\xb3\x99\x56\x33\x40\xc3\xd3\xa4\xb8\xbe\x46\x50\x91\x14\xb8\x96\xac\xfd\xab\xef\x81\xa4\xfd\x60\xcd\xd8\x7f\x33\xb4\xbc\x34\xef\x03\x21\xe2\x13\x41\x22\xfe\x04\xf5\xc2\xda\x11\xf3\x2d\x01\x0a\x06\x7e\x9d\x09\xf2\x44\x79\x2e\x93\xc5\x91\xc8\x19\x72\xcc\x1f\xf9\xe6\x8d\xb5\xfa\x99\x26\x09\xe2\x4c\xeb\x5f\x0a\x0b\xe5\x1e\x6b\xfd\x5b\xf0\x14\x4e\x45\x82\xa5\x42\x8f\x8c\x3f\x33\x34\xc5\x34\xc9\x05\x41\x19\xa7\x4c\x1d\x8f\xd8\x90\xa1\x5b\x33\x46\xc8\x1b\xe8\xa1\x5c\xea\xb3\x14\x61\xc6\xb8\x42\xd1\x1c\xb3\x19\x41\x98\x2d\x6c\x02\x6e\x41\x19\x88\x0b\x94\x67\x31\xd6\x8a\xef\x9c\x54\xa3\xf4\xfc\x18\xc1\x7c\x47\x25\xa2\x12\x91\xcf\x4a\x90\x94\x24\x0b\xdd\x87\xa6\x7d\xc5\x91\x5d\x1f\x33\x54\x9b\xce\x47\x84\xe0\x42\x42\xc6\xc1\x64\xf1\x2b\x66\x8a\x32\x82\x40\x51\x92\xc6\x34\x77\x84\x2e\xb8\x04\xb3\xcd\x0f\x7f\x91\x28\x4a\x72\xa9\x88\xe8\xa1\x49\x3e\x93\x5a\x53\xcc\x12\xac\xa6\x5c\xa4\x7a\x84\x94\x49\x85\x27\x34\xa1\x6a\xd1\x43\x29\x8e\xe6\xa6\x2d\x58\x03\xd9\x1b\xb1\x98\x3f\x33\xa9\x04\xc1\xbe\x77\xf7\x10\x7d\x1d\x3e\x33\x04\x20\xbf\xe9\x41\xda\x21\x4d\xb5\xba\x1b\x0c\xbf\xd8\x71\xb3\x27\xba\x11\x12\xa3\x09\x89\x70\x2e\xad\x87\x41\x89\x05\x22\x9f\xe7\x38\x97\xb0\x77\x7a\x7a\x36\x67\x23\xe2\x69\x96\x10\x45\x10\x9d\x22\x25\x28\x89\x11\x9e\x61\xaa\x97\xee\x8e\xac\x00\x41\xf7\x44\x6f\x37\xd0\x52\xfd\x2f\xa0\x7e\xa7\x5c\x10\x14\x13\x85\x69\xb2\xd2\xeb\x64\xbf\xed\xb8\xdc\x7b\xe2\x72\xe5\x0d\x3f\x08\x36\x67\x40\xfc\xf7\x70\x69\x33\x6b\xba\x8f\x70\xb2\xe3\xfd\x7d\x6b\x07\xd5\xd1\xf6\xfb\xa2\x6d\xb3\x6b\x87\x43\xdc\xaf\x16\x83\xdd\xbe\xa2\x45\x51\xcd\xe2\x5d\xd1\xf4\x6b\x84\x05\x74\x0e\xe7\xce\xe1\xdc\xb8\x32\xef\xd3\xe1\x7c\x30\x1e\xa3\xce\xe7\xfc\x42\x3e\x67\x2a\x3b\xa7\x73\xe7\x74\x6e\xbb\x40\x9d\xd3\xb9\x73\x3a\xbf\x5f\xa7\xf3\x4b\xe2\x3e\xef\x15\xdd\xf9\x5d\x89\xd6\x9d\x58\xdd\x89\xd5\x1d\x84\xb3\x9f\xda\xbe\x58\x98\xfb\xfa\x43\x4c\x12\xa2\x48\xb3\x3d\x8b\x88\x54\x6b\x0b\xe6\x7a\xa6\x4c\xcb\x71\x33\x41\xa4\xdc\x95\x21\xf9\x86\xdf\x27\x5b\xf2\xc3\xef\xa0\xe6\x3b\x3e\xd5\xf1\xa9\x6d\xa6\x76\x38\xa6\xd9\xe0\x30\xbf\x96\x6d\xd6\xf3\xdf\x2c\x6f\x96\xfe\x1e\x8c\x1b\xb2\xf0\x8b\x1a\x0a\xd7\x52\xbb\xe2\xfe\x70\x5b\x3a\xdf\x91\x1f\x9b\xbe\xde\x27\x33\x36\x63\xef\x38\x71\xc7\x89\x3b\x4e\xfc\xbe\x39\xb1\x3b\xc9\x6f\xea\x22\x33\x7e\xba\x71\x96\x60\x36\xa6\xb1\x3c\xf9\x67\xa1\xcb\xbf\x94\x87\x4c\x1f\xa8\xd8\xa4\x98\xfa\x94\x4e\xf1\x8b\xfe\x24\x29\x0c\xe6\x1e\x33\x73\x8d\x13\xcd\xd8\xd8\x6f\x12\xcc\x86\xf1\xbb\xf0\xa3\xd5\xce\xfe\x35\x7c\x6a\xbb\xf0\x71\xac\xc0\xd3\x81\x29\x33\x26\xbc\x22\xaf\xb6\x64\xa0\x3c\x8c\x13\xbe\x0b\x57\x0f\x26\x16\x30\x76\xc7\xaf\x83\x45\x39\xbc\x69\x77\x7e\x9d\x2e\x97\xb0\xf3\x5c\xb4\x9c\x70\xe7\xb9\x38\x5c\xcf\xc5\x5b\xb9\x23\x5f\xf9\x78\xbe\x96\x58\xd7\x3e\x08\xdf\x44\xab\x41\x50\x6b\x9e\x25\x1c\xc7\xab\x5c\x31\x85\xe0\x15\x82\xa3\xac\x8d\xc4\x2f\x3e\x7b\x0f\xc2\x5a\x31\xda\xdf\x58\x24\xdf\xf2\xc4\x0f\x45\x4b\x79\xc5\x50\xbe\x7a\x12\xdf\x40\x25\x79\x1f\xf8\xa9\xc5\x78\xbb\xd0\xbe\xce\xa2\xf4\xf6\x16\xa5\x2e\xb4\xaf\x53\x01\x0f\x4c\x05\xec\x42\xfb\xba\xd0\xbe\x4e\x41\x5e\x3d\xed\x4e\x41\xfe\x22\x42\xfb\x5a\x89\xda\x2f\x88\xbd\xb9\xbb\xd0\xdd\xc9\xdc\xee\xbd\x4e\xe6\xee\x64\xee\x2f\x54\xe6\x3e\x8c\x15\xee\x04\xee\x4e\xe0\xee\x04\xee\x4e\xe0\xee\x04\xee\xbd\x2f\x63\x27\x70\xbf\x66\x81\xce\x7a\xa9\x7b\x4d\x92\xcd\x7b\xf5\xe5\x74\xe2\x76\x27\x6e\x1f\xb6\xb8\x7d\x30\x13\x7a\x3f\x65\x1e\xdb\xcd\xa7\x2b\x52\xde\x15\x29\xef\x8a\x94\xbf\x78\x91\x72\xf7\x75\x8b\x8c\x0f\x7b\xb8\x14\x56\xb9\x34\x80\x8f\x82\xcc\xa8\x54\xc0\xfe\xdb\xc8\x2b\xeb\x13\x3d\xde\xab\x9c\xd2\xa5\x7a\xf8\xa7\x9d\xd4\xd2\x49\x2d\xbf\x51\xa9\xe5\x80\x62\xc1\x0e\x22\x63\x25\xc5\x2a\x9a\xe3\x49\x42\xc6\xde\xe8\x23\xdb\xea\xc1\x17\x54\x2a\x89\xa2\x5c\x2a\x9e\x36\x5f\x2e\x97\xae\x87\xbe\xef\xe0\x8c\xb3\x29\x9d\xe5\xe6\x6e\x31\xe0\x9c\xc1\x89\x2e\x24\xc1\x45\x46\xd6\x79\xaa\x6a\x5a\x7f\x17\xd7\x52\xfd\xd0\x5f\xeb\x76\xda\x44\x70\x2f\x8c\x7c\x56\xea\xd6\xb2\xd6\xf8\x76\x70\x77\xfd\x70\x7b\x36\x38\x45\xfd\x2c\x4b\xa8\xb1\xbb\x1b\x52\xa0\xbf\xea\x49\x21\x85\xe5\x63\xb1\x97\xc2\x90\xb9\xc1\xb0\x05\x43\xbf\x96\x8d\xd1\x11\x3a\xbb\x78\xb8\xbb\x1f\xdc\x36\x34\x68\x09\x05\xf2\x56\x49\x9a\x25\x58\x91\x18\x3d\xe6\x13\x22\x18\xd1\xd2\x8e\x45\xba\x2d\xcc\xff\xa6\xd1\xc1\x7f\x0f\xce\x1e\xee\x87\xd7\x57\xe3\xbf\x3e\x0c\x1e\x06\xa7\xc8\x51\x9c\x6e\x56\x8f\x4b\x8f\x22\x5e\x30\x9c\x6a\x0d\x44\xff\x50\x64\xca\xfe\x23\x27\x39\x41\x58\x4a\x3a\x63\x29\x01\x44\xe0\x52\x8b\x6e\xc0\x17\xfd\xef\x06\x17\xe5\x96\xe7\x24\x84\xdf\x45\x09\x9e\x90\xc4\xfa\x23\xc0\xc4\xae\x09\x3d\x80\x2a\x36\x8e\x8a\xdc\xac\xea\x5f\x1f\xfa\x17\xc3\xfb\x9f\xc7\xd7\x1f\xc7\x77\x83\xdb\x1f\x87\x67\x83\xb1\x95\x2a\xcf\xfa\xba\xdf\x52\x4f\x56\xf8\x44\xff\xc8\x71\xa2\xb5\x13\x3e\x75\x78\xbc\xe8\x79\x4e\x18\xca\x19\x50\x9c\x51\x79\xb4\x1e\xe4\x3b\xd5\xa7\xcc\xcc\xe8\xe6\xe2\xe1\xd3\xf0\x6a\x7c\xfd\xe3\xe0\xf6\x76\x78\x3e\x38\x45\x77\x24\x01\xa5\xc0\x2d\x3a\xec\x62\x96\xe4\x33\xca\x10\x4d\xb3\x84\xe8\xd5\xc0\x36\x9b\x78\x8e\x9f\x28\x17\xf6\xe8\xce\xe8\x13\x61\x66\x1d\xe1\xcc\x42\xfb\x4e\xf8\x1e\x07\x4b\x77\x7d\xf5\x71\xf8\xe9\x14\xf5\xe3\xd8\xcf\x41\x42\x1b\x25\xca\x71\xb0\xce\x47\xe5\x61\x6b\xe6\x00\xdd\x1b\x22\xe2\x4f\x44\x08\x1a\x93\x0a\x1d\xf5\xef\xee\x86\x9f\xae\x2e\x07\x57\xf7\xb0\x62\x4a\xf0\x44\xa2\x39\x7f\x06\x53\x36\xcc\x10\x2c\xdc\x4f\x98\x26\xd0\x99\xdb\x2c\xce\xd0\xf3\x9c\x82\xfb\x03\x80\x99\x7d\xcf\x46\x3f\x13\x39\x7b\x73\xeb\x6c\xe9\xe0\x2d\xab\x2d\xd5\x93\xb4\xfc\x46\xe5\x58\xac\x7a\xa1\x44\xe5\xcb\x2f\xae\xa3\xd6\xe5\x2f\x2a\xe4\xd6\xac\xac\x2d\xd1\x4b\xf3\x4c\x8b\xbd\x6e\xad\xab\x95\xd7\xf0\xf5\xae\x59\xa2\x04\x8d\xe4\xcb\x42\x3d\x89\x9c\x29\x9a\x12\x64\x3b\xb3\x87\x73\x8f\xf0\x4f\x97\xa6\xe1\xf7\x70\xc1\x2e\x95\x72\xf8\x44\x94\x1d\x7e\xa7\x02\x76\x2a\xe0\x61\xa8\x80\xef\x2d\xdb\x3f\x26\xd9\x72\x87\x95\x89\xc1\x3b\xc6\xeb\xb5\x14\xa4\x61\xec\x89\xd6\xa2\x9a\x90\x27\x92\x80\x94\xa7\x04\xd6\x4a\xa3\x95\x5d\x26\x82\xe0\x47\x2d\xf0\xc5\xfc\x39\x94\x5c\x6a\x90\xfb\xd1\x7e\x6e\xe1\x36\x41\x1c\x7f\xfa\xe3\xeb\x5d\x16\x7a\xb9\xe3\xd7\x28\xe1\x7d\x0b\x41\x32\x2b\x31\x02\x83\x04\xfb\x5f\xac\x25\x78\xcd\x6d\x11\x7c\xf1\x1e\x2e\x8a\x70\xb8\x07\xa4\x75\xdd\x86\x4a\xb0\x63\xa1\x29\x51\x38\xc6\x0a\xeb\x43\x33\x23\xea\x18\x5d\x33\x78\x76\x8f\xe5\x63\x0f\xb9\x2b\x4f\xb3\x95\xc2\xca\xf0\x0a\xa9\xf5\xef\xc4\x80\xbf\x39\x1f\xef\xae\xef\xee\xfa\xae\x5f\x99\x2e\xcc\xb3\x61\x85\xf7\x75\x31\x6e\xe4\xf3\xda\xdf\xfd\x65\x5a\x7c\xbf\x57\xd8\xeb\x3a\xb9\xf6\x7a\xa1\x99\xca\x59\xdd\x6d\x65\xfe\xaf\xbb\xad\xba\xdb\xaa\xbb\xad\x0e\x60\x85\xdf\xdc\x61\x58\xc3\xdd\xdf\xd4\x63\xb8\x4e\x3b\xdd\x1a\xf2\xae\xd0\x46\x37\x01\xbd\xfb\xa5\x2d\xb6\x5d\xf1\x0d\x7d\x1f\x3e\xc2\x60\x92\xaf\x91\xd6\xb6\xd7\xcb\xdc\xe4\x8b\x74\xfa\xe9\x0b\xde\xf8\x1d\x02\xe1\x5e\x11\x08\x0f\x63\xae\x2f\x92\x02\xf7\x36\x16\xd3\xb7\x4f\x7b\xeb\xa0\x06\xbb\xc4\xae\x2e\xb1\x0b\x7e\xef\xa0\x06\xf7\x47\xad\x2f\x2b\x5d\xf3\x98\x8c\x2b\x51\x02\xfe\x9f\xe3\xaa\xe7\xa7\xf4\x24\x74\x03\x95\x1e\x14\x99\x6e\xd0\x3a\x8d\xf7\x59\x44\xea\x8a\xc7\xa4\x75\x24\x41\xe9\xe5\x03\x97\xc1\xdd\x3c\x8d\x2c\x5e\x1a\xf8\x0b\x4b\xe2\x0d\x5b\xfe\x25\x1a\x76\x6a\x08\xb8\xb3\xf2\xac\x5d\xa8\x2f\x35\xbe\xa0\xe0\x50\xef\xc8\x53\xd1\x8e\x8d\xbb\x98\xc6\x71\x03\x33\xaf\x7f\xee\x59\x7a\xfd\xe3\x97\xc1\x0c\x6a\xcf\xd1\xc1\xac\x12\xbe\xfd\x3e\xec\x2a\xe1\x88\x5f\xc3\xb2\xb2\x72\xef\xbf\x38\xae\xbe\x8a\x92\x3b\xde\xde\x72\xb9\xbe\x54\x0e\xdf\x41\xfc\xac\xb2\x75\x74\x18\x3a\x9d\xa9\xe5\x70\x26\xdc\x99\x5a\xde\xb5\xa9\xc5\xb8\x68\xc7\x19\x16\x84\xa9\x1a\x91\xba\x7a\x9d\xc0\xeb\x21\xe6\x82\x93\x3a\xa0\x01\xa4\x25\x5a\x64\x2f\x64\x7f\x55\x7d\x59\xb6\x17\x2b\x18\x04\x99\x90\x27\xff\x2c\xfe\xf6\xc2\x7a\xa9\x02\xc4\x8a\xe8\x24\x83\xf5\x2f\xf5\x1d\x9d\xdb\x40\xa5\xdd\x73\x25\xb1\x2a\x89\x82\x10\x44\xbd\x36\x9e\xe9\xc6\xbc\xfd\xbe\x52\x24\x97\x06\xfd\xba\xb1\x4d\xcb\x1b\xdf\xee\x00\xb9\x9d\xa1\x26\xdd\x2f\xc8\x29\xd3\xd2\x28\x9f\x16\x17\x83\x44\xcf\x34\x49\x00\x51\x04\x32\x1e\x9b\x6e\x80\xdf\x5c\xc4\x43\xe3\xce\xbf\x69\xdc\x43\x1d\x77\xa8\x63\x09\x6d\xec\xa9\xfb\xca\x99\x76\xc4\x06\xe9\xac\xa0\x0d\xad\x31\xc0\x7e\x19\x9c\xe0\x13\x51\xaf\xc5\x06\xb6\x3d\xfb\x2b\xcf\xbd\x20\x53\x22\x08\x8b\xc8\x01\x7a\xdb\x37\x09\x03\xf9\xc9\x4c\xd2\xc6\x80\x78\x28\x81\x70\xaa\x8a\x5b\x3d\xad\x24\xea\x76\x99\xe4\x5d\x26\x79\x97\x49\x5e\x3d\xea\x5d\x26\x79\x97\x49\x5e\x9b\x03\x11\x93\x84\x28\xd2\x28\x55\x9c\xc3\xe3\xb7\x92\x2a\x4c\xef\x5f\x86\x60\x61\xe6\xd2\xc9\x16\xbf\x19\xcd\xc2\x6d\xf8\x41\x68\x16\xe6\xac\xad\x33\x3f\x94\x7e\xac\x09\xb1\x7e\x75\x93\xc4\x36\x4c\xa3\x64\x97\x38\x87\xd7\xdf\x25\xeb\xa8\x0e\xbd\xb3\x51\xa0\x60\xeb\x5e\x8e\x93\x2c\x1d\x81\x76\x13\xb7\x1e\xc3\xf7\x3b\xef\x43\xe1\xa0\x4d\x74\x7f\xa8\x7c\x74\xeb\xa4\x94\x43\xb1\xd8\x7c\x41\x3c\xb2\xb3\xde\xbc\x71\xae\xc4\x12\x33\x7c\xb7\xd3\xed\x8c\x55\x9d\xb1\xaa\x33\x56\x75\xc6\xaa\xce\x58\x85\x3a\x63\xd5\xc6\xc6\xaa\x2f\x48\xa6\xea\x0c\x57\x9d\x58\xb5\xbf\xe9\x1e\xaa\x96\x79\x48\xd6\xba\xd6\x28\xe9\x45\x0e\xd5\xda\xc8\x7b\x3b\xed\x5f\xd6\x84\xdc\xdf\xb8\x11\xbc\x1f\x7e\x25\x5f\x9a\x25\xed\x12\x58\xec\x76\xf4\x8b\x8d\x2b\xee\x4a\x87\xd6\xae\x55\x17\xf6\xbc\x62\x71\xba\xb0\xe7\x2e\xec\xf9\xe0\xc2\x9e\xf7\xae\xac\x64\x5c\xae\x02\x24\x32\xa5\xb3\x56\xe6\x3f\xbb\x3b\x1b\x12\x8d\x80\x14\x0c\xca\x71\x4c\xb2\x84\x2f\xc0\x92\xb2\xe2\x3a\x77\x5d\xdc\x2c\x49\xd4\x87\x7e\xa3\xbb\x91\xbf\x96\xce\x71\x28\x32\x69\x31\xef\x83\x90\x42\x4f\xfe\x59\x49\xe7\x6f\x85\x97\xc9\x10\xf9\x4c\x25\xdc\x4a\xeb\x09\x7b\xc4\xea\x9f\x04\xa5\x0b\xed\x3d\x38\xc9\x55\x90\xbb\x27\xb5\x60\x95\x11\xa1\x16\xc1\x9b\x24\xcd\xd4\xe2\xbf\x46\x8c\x2a\xef\x61\xa3\x33\xc6\x85\xe1\x6a\xfa\xe3\x39\x66\x71\x42\x84\xbe\x54\x5d\x3b\x11\x66\x8c\x2b\x10\x37\x60\x06\x31\x7a\xa2\xd8\x08\x27\xfd\x9b\x61\x6b\x3f\xf3\x3b\x3a\x5d\xaf\x5d\xac\x6e\xcd\x5d\xf7\x29\xe1\x13\xa8\x60\x99\x97\x75\x7a\xdd\x40\xe7\x19\x2d\xed\xdc\x5b\x31\x04\x85\xe5\x63\x15\x38\xa4\x9c\x85\x3e\x5e\x09\x25\xb2\xe6\xdd\x12\xc6\xfc\xea\x57\x2b\x70\x23\xe5\x67\x16\x80\x04\x1e\xc3\x90\xab\xe3\x70\x3f\x86\x1d\xba\xdf\x8a\x96\xdd\x2f\xae\x74\x37\xfc\x28\x88\x12\x8b\x31\x56\x4a\x33\x99\x7d\x62\x9c\xdc\x63\xf9\xd8\x1a\xe3\xa4\xf4\xf2\x81\xb3\x9c\x12\xc6\x49\x79\xe0\x2f\xce\x72\x5a\x52\xe7\x1a\xce\xf4\xfe\xf2\xe3\xdb\x9e\xb5\x0d\x26\xfe\x5b\xc9\x95\x6f\xc7\x7b\xd6\x99\x69\xdf\x63\xde\xfc\x2a\x66\x7a\x30\x23\xac\xf0\xf3\x2f\xf1\xe4\x96\x6f\xa7\xee\x88\xae\x5a\xa3\x2f\xae\x10\x6e\x45\xe8\x58\x33\xb7\x77\x52\x10\xb7\x2a\x37\xed\x7b\x54\x2f\x63\xe6\x0e\x76\x63\x93\x18\xa0\x61\x19\xad\xdc\x9f\x21\x17\x15\x54\x94\x9e\x9d\x43\xa2\x35\x95\x61\x42\x7c\xc4\x85\x91\xbc\x62\x7b\x66\x8d\xd9\xce\x80\xf9\x9e\xa2\x3e\x8a\x6d\x6d\x7e\x41\x32\x41\x24\x61\xca\xa8\xda\xa6\xde\x95\x2b\xef\x4f\x99\xb5\x10\x9d\x63\x85\xcf\xb0\xc2\x09\x9f\x1d\xa3\xbe\x2f\xec\x4f\x25\xc2\x89\xe4\x08\x3b\xc2\x21\xb1\x6b\x02\xb3\xd8\xb1\x07\x8c\x22\x9e\x66\x34\xf1\x48\xed\xde\x8a\x4f\x59\x4c\x9f\x68\x9c\xe3\xc4\x23\x63\x8f\xd8\xe0\x89\x30\x95\x83\x0a\x87\x93\x04\xd9\x6e\xdd\x0b\x81\x7e\xee\x46\x29\x69\x4a\x13\x2c\x90\xe2\x76\xb4\xd7\xb6\x2d\x74\x3f\x27\x7e\xac\x0e\x05\x1c\xa5\xf8\x91\x48\x44\x15\xca\xb8\x94\x74\x92\x14\xc7\xf8\x61\x88\x60\xdc\x67\x17\x43\x30\x8d\x46\x0a\x71\xc3\x07\x5d\xe7\xd6\x4f\xe0\x7a\x4c\x31\x63\x04\x3a\xe6\x6a\x4e\x84\xed\xde\xbe\xfc\xd6\x56\xce\xb7\xc6\x88\x6e\xb6\x98\x86\x23\x7b\x3b\xa5\xb3\xb5\xc6\xd9\x56\xdd\x6c\xa7\x6b\x36\x2b\x9a\x2f\xe0\xa5\x6d\xaf\x0d\x5e\x50\x59\x56\x07\xdf\x85\xcb\xb6\x34\xe2\xd7\xc0\x47\xfb\x8d\x2a\x82\x9d\x16\xf8\x22\xeb\xf6\xa5\xaa\x80\x07\xae\xff\x75\xc8\x6e\x1d\x8a\x7d\x17\x80\xb1\xc7\xc5\xe9\x02\x30\xba\x00\x8c\x2f\x36\x00\xa3\x59\x9b\xa0\xf1\xce\xe9\x7a\x1b\x56\x90\xf2\x46\x01\xf1\x0b\x88\x52\x58\x3e\xb6\xad\x29\xa5\x45\xe5\x61\xfc\x2e\xa4\xfa\xda\x09\xbf\x86\x74\xdf\xd5\x29\xda\x6b\x9d\xa2\x83\x9b\x76\x27\xf8\x75\x82\x5f\x27\xdb\xb4\x9c\x70\x27\xdb\x1c\xae\x6c\xf3\x56\x0a\xcb\x97\x04\xa1\xab\x85\xa7\x52\x66\xcc\xca\x00\x5b\x03\x47\x03\xee\x81\x3c\x4b\x38\x8e\xd7\x05\xe1\xfc\x82\x0a\xb9\x66\x85\x68\x66\xda\xd5\x1f\x1c\xb8\x64\xb6\x14\x7f\x63\x46\xfe\x5b\x88\xa9\x6d\x9c\xfa\x9b\x86\xd5\x02\xfd\x42\x30\x59\x29\x28\xed\xa5\xb4\x90\x2a\x4d\xb7\x52\x38\xe4\x1f\x0f\x9c\xaa\xfd\x96\xbe\x86\x7a\xf1\x05\x3b\x08\x3a\x27\xc0\x6f\xb3\xf0\xf9\xc1\x48\xad\x9d\x6a\xd7\x65\x55\x76\x46\xfd\x4e\xf1\xed\x14\xdf\xbd\x2f\xe3\x21\x29\xbe\x6f\x28\x51\x9b\x34\x91\x17\x29\x63\xb8\x9d\x6c\xdd\x89\xd6\x9d\x68\xdd\x89\xd6\x5f\xac\x68\x7d\x18\x2b\xdc\xc9\xd5\x9d\x5c\xdd\xc9\xd5\x9d\x5c\xdd\xc9\xd5\x7b\x5f\xc6\x4e\xae\xae\xc8\xd5\xf0\x97\x4b\x93\xde\x54\xc8\x6e\x2d\x5c\xb7\xc8\x89\x7e\x2f\x92\x75\x27\x55\x77\x52\xf5\x61\x4b\xd5\x07\x33\xa1\x2f\x2f\x11\xb2\x4b\x25\xec\x52\x09\xbb\x54\xc2\xb7\x48\x25\x74\xbc\x64\x95\x84\xb2\x2c\x58\xfc\xb8\xc4\x81\x0e\x56\xb6\x28\x46\xbb\x6d\x78\xc7\xbe\x96\xda\x01\xcd\x6f\x53\x69\xaa\xf4\x9b\x6b\xe8\x80\xea\x4f\xf5\x9c\xb4\xa0\x19\x85\x1b\xdf\x7a\x84\xb0\x9f\xec\x9b\xef\x0b\x0c\x7c\x79\xd4\x5d\xfd\x29\x14\xec\x5a\x57\x7f\xea\x05\xe7\xed\x0e\xd7\x9a\x99\x3b\x1a\x35\x36\xde\x77\x3a\xed\x37\x07\x97\x6b\x3e\xe9\x6f\x1a\x2e\x57\x7b\x93\x2c\x25\xef\x9c\xfc\xb3\xf6\xa2\x78\x83\xb2\x5b\x1b\xdf\x0e\x9f\x88\xfa\x52\xae\x86\xae\xec\x56\x57\x1f\x62\x4f\xd3\xdd\x8a\xf5\xbf\xdb\xd9\x76\x45\xc6\xba\x22\x63\x5d\x91\xb1\xae\xc8\x58\x57\x64\x0c\xfd\xc6\x8b\x8c\x6d\x2c\x3e\x9a\x71\x7c\x29\x12\x64\x57\x64\xac\x13\x22\xf7\x37\xdd\xdf\x96\x10\x79\x80\x16\x84\x83\xa8\xa6\xe6\x2d\x08\x6f\x8e\xfb\xe1\x46\xd2\x16\xfb\xc3\x2d\x68\x87\xff\x61\xff\xaf\xc3\xff\xe8\xf0\x3f\x1a\x66\xdd\x05\xb3\x76\xf8\x1f\xa8\x0b\xd7\xec\xc2\x35\x0f\x39\x5c\xb3\xc5\x36\x76\xf8\x1f\x2d\xc5\xb9\x17\xc2\x00\x71\x32\xd7\x46\x38\x20\x3f\x2d\x2b\x1a\x07\x2b\xa5\xb9\xb1\xfe\x76\x70\x40\x6a\xa7\x7d\x10\x2a\xc9\x2b\xe2\x80\xd4\xd1\x75\x6b\x05\xe4\x7d\xe0\x81\xb8\xd1\x76\x89\x8b\x5d\x88\xf5\xe1\x87\x58\x1f\x5c\xe2\xe2\xc1\x48\xb2\x9d\xba\xd7\xe5\x2e\x76\xb9\x8b\x9d\x32\xdc\x29\xc3\x7b\x5f\xc6\x43\x52\x86\xdf\x58\xc2\x7e\x41\x5c\x90\xdd\x64\xed\x4e\xd4\x36\xef\x75\xa2\x76\x27\x6a\x7f\xa1\xa2\xf6\x61\xac\x70\x27\x67\x77\x72\x76\x27\x67\x77\x72\x76\x27\x67\xef\x7d\x19\x3b\x39\xfb\xd5\x70\x42\xea\x84\xed\x96\xf9\x36\xef\x49\xd2\xee\xa4\xec\x4e\xca\x3e\x6c\x29\xfb\x60\x26\xd4\x61\x86\x74\x98\x21\x1d\x66\x48\x87\x19\xb2\x95\x7c\xf3\x6f\xf6\x58\x7e\x08\x6e\x62\x7f\x65\x7f\xf8\x2e\xe1\x93\xfb\x45\x46\xf4\x7f\xcf\x69\x4a\x98\x04\x69\x94\xaa\x45\x28\xcf\x34\xac\xfc\xf2\x9a\x7f\xb8\x1b\x5e\x7d\xba\x08\xb3\x69\x3e\x5c\x3e\x5c\xdc\x0f\x6f\xfa\xb7\x7e\x5d\xfc\xac\xc2\xb5\xb0\xdf\x95\x44\x32\x4b\xf2\xb7\x44\xeb\x9e\x70\x6a\xee\x14\x56\xb9\xdc\x6e\x64\xb7\x83\xbb\xc1\xed\x8f\x90\x0d\x34\x3e\x1f\xde\xf5\xbf\xbb\x28\x11\x44\xe9\x79\xff\xec\xaf\x0f\xc3\xdb\xe6\xe7\x83\xff\x1e\xde\xdd\xdf\x35\x3d\xbd\x1d\x5c\x0c\xfa\x77\xcd\x5f\x7f\xec\x0f\x2f\x1e\x6e\x07\x2b\xd7\x63\xe5\x68\x57\x2b\x21\x12\x16\x09\xe2\xfc\x51\x64\xb9\x86\x28\xd6\x10\x79\xf1\xd1\xb1\xc3\xba\xbe\x4e\xd1\x83\xd5\xe9\xa9\x6d\xdc\x30\xd8\xa0\x21\xa3\x8c\xc4\x54\xe2\x49\x42\xe2\xa5\x96\xdc\x1a\x36\xb5\x84\x4b\x83\x7a\xd6\xda\xb3\x17\x39\x35\xcf\x8b\x0c\x2f\x40\x90\xa3\xa8\x08\x8b\x6b\xfa\x30\xfb\xd0\xd8\x03\xd3\xbc\x8b\x3e\x91\x52\x4f\x51\x2e\x04\x61\x2a\x59\x20\xf2\x99\x4a\x25\x97\x1a\x75\xdb\xd7\xd4\xac\xbd\x53\x7d\x83\x73\x2c\xd1\x84\x10\x56\x1e\xbf\x20\x09\xc1\xb2\x66\xcc\x76\xf7\xdb\x2d\x8b\xdf\x2b\x6b\x8d\x31\x97\xd1\x14\xd3\x24\x17\xa4\x72\x5a\x78\x9a\x61\x41\x25\x67\x83\xcf\xfa\x2e\xd3\x07\xf9\x1a\x3e\xe7\x62\xbb\x13\x33\xf8\x6b\x48\xc1\x57\xe5\x7f\x7e\xba\x2f\xff\xab\x74\xe6\x2f\xee\xcb\xff\x5a\x4d\xeb\x41\xc3\x55\xca\x3e\x42\x9f\xee\x4f\xd1\x27\x08\x71\x12\xe8\x7e\x8e\x0d\xc5\x5e\xdc\x9f\xa2\x0b\x22\x25\xfc\x52\x7c\xac\xa8\x4a\x60\x6e\xdf\x51\x86\xc5\x02\xb9\xe9\x9b\x44\x57\x1c\xcd\x11\xf1\x4b\x53\x5d\x3c\xf6\xf7\x9c\x81\xea\x5e\xac\xde\x05\x9f\xd1\x08\x27\xbb\x2d\x62\xff\xaa\xc4\x07\xae\x6f\x57\x2e\x45\xf8\xf6\xf2\x5a\xf4\xaf\xce\x21\x89\xd4\x0d\xb5\x66\xe6\x57\x44\x6a\x22\x89\x38\x8b\xad\x97\x46\xdf\xfe\x8b\x40\xa8\xff\x3b\x87\x44\xdc\x5c\x52\x36\xd3\x2d\xa2\x13\x74\x7d\x3b\x62\xd7\x22\x36\x86\x50\xa2\xa5\x61\x43\x73\x54\x22\xc6\x15\xa2\x69\xc6\x85\xc2\x4c\x69\x45\x00\xc4\x00\xbb\x22\x86\x03\x9c\xf1\x34\xcd\x15\xd6\x07\x6d\x69\x51\x99\x31\x87\xdc\x11\x35\x8c\xc1\xb5\x52\xb3\x86\x46\x4e\x28\xe6\x92\x09\xdd\xbe\x96\x51\xca\x3a\x34\x8d\x97\x54\x59\xd7\x04\x16\x02\x97\xa5\x89\x0f\x54\x91\xb4\xfa\x7e\xcb\x20\xcf\x7f\xd5\x1a\x08\xce\x4c\x52\x05\x11\x7d\x11\xcd\xa9\x22\x91\xd2\x47\x70\x2b\x9a\x78\xb8\xfa\xe1\xea\xfa\xa7\x50\x82\xf8\xd0\xbf\x3c\xff\xf3\x7f\x94\x7e\xb8\xbd\x5c\xfa\x61\xfc\xe3\x9f\x97\x7e\xf9\xff\xad\xa4\xa7\x6a\x4f\x4b\x7a\x7e\x30\x97\x23\x10\xa9\xc1\x26\xec\xa6\x8a\x68\x8a\x67\x04\xc9\x3c\xd3\x14\x20\x8f\xcb\xfb\xab\x45\xca\x0b\x8e\x63\xca\x66\x26\x03\xf4\x82\x2a\x22\x70\x72\x89\xb3\x8f\xce\x7e\xbd\xc5\xea\xfc\xdf\xbb\x52\xbe\xee\x87\x9f\xfb\x97\x61\xc6\xef\x87\x9b\xdb\xeb\xfb\xeb\x95\xb3\x2e\xb5\xb0\x7c\x8c\xf4\xe3\x53\xf8\x5f\x74\x82\x74\xeb\x5e\xf2\x4d\x89\xc2\x5a\x23\x40\x5f\x9b\xa4\x39\x9f\x48\x43\x59\x02\xa7\x26\x13\x34\xa5\x70\xa5\x18\x0b\xde\x37\x46\xb8\xf6\xda\x83\x3f\x37\xe6\x03\xd0\x96\xdd\xa5\xcc\x62\x2c\x62\xf4\x77\x59\x4d\x1f\x07\xc3\xb1\xf9\x81\xc4\xe8\x08\xcd\x95\xca\xe4\xe9\xc9\xc9\xf3\xf3\xf3\xb1\x7e\xfb\x98\x8b\xd9\x89\xfe\xe3\x88\xb0\xe3\xb9\x4a\x13\x93\x2e\xaf\x57\xe1\x14\xdd\x08\xae\xaf\x10\x50\xd0\x89\xa0\x38\xa1\xbf\x92\x18\x4d\x0c\xff\xe3\x53\xf4\x4b\xc4\x05\x39\x2e\x36\xc6\x1a\x95\xec\x3d\x62\x0d\x4f\x27\xfa\xa5\x1a\x66\x52\xdd\x4f\x14\x93\x88\xc6\x56\xcc\x20\x2c\xe2\x60\x79\x34\xbe\x0a\xdd\x9e\xcb\x34\xd4\x1a\x4d\x96\xab\x62\x39\x03\x65\x05\xc7\x24\xc8\x76\x57\xbc\x4c\x70\x5a\xf1\x19\x1a\xb5\x35\xd7\x2a\xba\xbe\x5b\x31\xdc\xaa\xee\xd5\x4c\x4f\x38\xe2\x09\x9a\xe4\xd3\x29\x11\xa1\x43\xba\xa7\xb5\x19\x2a\x91\x20\x11\x4f\x53\x90\x18\xf4\x57\xb9\x34\x54\x0d\x2b\x66\x47\x7b\x3c\x62\xb0\xff\x5a\xcd\x01\x0a\x88\x39\xb0\x3a\x46\x48\x8c\x30\x5b\x98\x6e\x26\xf9\x34\x6c\xdf\xc0\x50\xe0\x18\x51\x35\x62\xfd\x24\x41\x82\xa4\x5c\x91\x20\x87\x12\x9c\x67\xe5\x05\x07\x16\x29\x48\x96\xe0\x88\xc4\x86\x1e\x12\x1e\xe1\x04\x4d\x69\x42\xe4\x42\x2a\x92\x86\x0d\x7c\x0d\xb6\x1a\xbd\x66\x54\xa2\x98\x3f\xb3\x84\x63\x3b\x8f\xea\x67\xdf\x94\x4f\xe3\xc0\x41\x04\x0c\x84\xe0\x02\xfe\xe7\x07\xca\xe2\xbd\x71\xa8\x87\xbb\xc1\x6d\xf8\xef\xbb\x9f\xef\xee\x07\x97\x9b\x71\x1f\x4f\x59\x30\x3c\xd0\xe1\x4f\xd1\x9d\x59\x04\x2e\xb4\x44\x24\x1a\x26\x75\x69\x49\xa9\xf8\x81\xc7\x5b\x72\xdf\xcb\xfe\xd5\x43\xbf\xc4\x51\xee\xce\xbe\x1f\x9c\x3f\x54\xf4\x01\x3b\xbf\x92\x0c\x6f\xd4\xbf\xf0\xb7\xb3\xef\x87\x17\xe7\xe3\x1a\x85\xf1\xc3\xed\xe0\xec\xfa\xc7\xc1\x6d\xa1\xdb\xd5\x2e\x51\x65\x30\x55\x66\x75\x6f\x98\xd2\x9c\xc7\x68\xb2\xa8\x07\x84\xd0\x92\x73\x02\xbe\xd8\x02\x12\xc5\xb4\x7a\x0a\xbc\xc9\x61\x73\x14\x5f\xa4\x3c\x26\x3d\xfb\x0e\x20\x69\x18\xe3\x8a\x91\x98\xeb\x1b\xd6\xbd\x63\x16\x18\x2a\x0c\xc8\x85\x5f\xb8\x53\xd4\x47\x52\xbf\x98\xeb\x43\x2d\xe8\x6c\x06\x86\xc3\xca\x50\x4d\x6b\xf6\x53\x58\x5e\xf8\xce\xec\x7f\x26\x38\x9c\x73\xdd\xad\xb5\x38\x7b\xab\x84\xf9\x10\x50\x57\xca\x2d\x0a\x0c\x06\x87\x9a\xa1\xb9\xcd\xd2\x8b\xd0\xb8\x5e\xe6\x3c\x1a\x7b\x91\x3e\x5c\xc0\xb6\xa4\xb1\x77\x66\x82\x3c\x51\x9e\x07\x9f\x5a\x60\x8f\xd2\x8e\xd7\x36\x5f\x2c\x00\x2c\x9b\x31\x8a\x54\x9a\xf1\xe4\x51\xdb\x82\x66\x61\x4f\xd0\xc2\x54\xf0\xb4\xa6\x8d\xf2\x31\x19\x5e\xdf\x29\x81\x15\x99\x2d\xce\x2d\xcb\xd8\xfe\x78\x9c\x5f\xff\x74\x75\x71\xdd\x3f\x1f\x0f\xfa\x9f\xca\x27\xde\x3f\xb9\xbb\xbf\x1d\xf4\x2f\xcb\x8f\xc6\x57\xd7\xf7\x63\xf7\xc6\x4a\x92\x6f\xe8\x60\xf9\x9e\x2e\xbf\x78\x8a\x34\xcb\x05\xd6\xe8\x00\xef\x02\xfe\x38\x21\x53\x2e\x0c\x9f\x4f\x5d\xe8\x82\x15\x61\xdc\xda\x5a\x5d\xac\x32\x8b\x53\xb0\x8c\xd5\x35\x69\xac\xde\x4a\x10\x9c\xc2\x3d\x81\x19\x1a\xb0\xf8\xe8\x7a\x7a\x74\x67\x7e\x4c\xb1\x78\x24\xc2\x7f\xfa\x2c\xa8\x52\x84\x95\x54\x3a\xec\x86\xec\x95\xc4\xa2\x83\x63\x74\xab\xf9\xbe\x7e\xdf\x5f\x6a\x9a\xd8\x63\xa2\x30\x4d\xa4\x1d\x6c\x69\x5d\x4f\xd1\x05\x16\xb3\xc2\x0e\xf7\x35\x9f\x4e\x4d\x63\xdf\x98\x61\xe8\x3b\xac\x34\x8b\x1a\xde\xab\x49\xc3\xdd\x8b\xd0\x9f\x7d\xd9\xcb\xc3\xcb\x54\xf5\x90\xed\x46\x53\x0f\x37\xb0\xe2\x46\x63\x2f\xe9\x86\xf6\x49\x0d\xad\xc1\xc4\xcd\xe3\xd5\x97\x4c\x7d\xdb\xcb\xe4\x54\x7e\xb1\x86\x9c\x4c\x2e\x95\xde\xf9\xa9\xd6\x36\x6b\x68\x89\x7c\xa6\xd6\x60\x10\x8e\xbb\x42\x42\x45\x33\x60\x5e\xc5\x59\x46\xb0\x90\x75\xbb\x5d\x16\x03\x1b\xf6\xde\xf4\x14\xf6\x61\x37\xd9\xf5\xd3\x43\x9c\x81\xc1\xc1\x0b\x11\x15\x8a\x6c\x41\x03\xa6\xad\x25\x0a\xb8\x01\xb4\xa5\x6b\x8b\x6c\x74\x49\xa5\x56\x1a\xcd\x8f\xdf\x59\xc8\xa5\xed\x08\xe2\x63\x7f\x78\x51\x11\x2e\xc6\xe7\x83\x8f\xfd\x87\x8b\xd5\x66\xc2\xd2\x77\xd5\x2d\x46\x47\x48\x3f\x2f\xfb\xcd\xe9\xd4\xdc\x19\x0e\x38\xca\xa8\xb4\x84\x81\xd1\xca\x42\xd5\x18\x7b\x75\x4c\xb2\x84\x2f\x52\xc2\xc0\xc4\x53\xba\x09\xf5\x7a\x4e\x31\xb5\x57\x4b\x30\x58\xb0\xe2\x58\xb3\x1b\x5c\x63\x47\x0e\xad\x8a\xc4\xfe\xe6\x2d\x83\x55\x55\x58\xf7\x8d\xf1\x9e\xd9\xff\xdc\x29\xac\xb6\x3c\x63\xfd\xb3\xfb\xe1\x8f\x83\xb2\x7e\x78\xf6\xfd\xf0\xc7\x3a\xa9\x66\xfc\x69\x70\x35\xb8\xed\xdf\xaf\x11\x4e\x2a\x4d\xd6\x09\x27\x52\x0f\xb8\xea\x3d\xa5\xd2\x47\x04\x45\x06\xf2\x0a\x51\x25\xd1\x13\x95\x74\x42\x01\x20\xcc\x7a\x22\x1f\x86\xc0\x59\x9f\x70\x42\x63\xaa\x16\x4e\x7c\x31\xfd\x96\xf7\x51\x73\x52\xdb\xbe\x31\x3b\x84\xfe\x49\xb0\xf2\x99\xcd\x71\x93\x3e\x45\xa0\xdb\x3e\x81\xd2\x16\x7c\xc6\xb4\x20\xcd\x66\x44\x98\xe1\x80\xf7\x25\x1c\x4b\xf0\x5c\x8f\x2a\x14\x56\x8a\x55\xf3\x42\xeb\x8c\x30\x22\x00\x04\xce\x77\x62\x04\x29\x41\xd8\x57\x5a\xe6\xca\x12\x1a\x51\x95\x2c\x50\x04\x36\x2c\x30\x67\xa6\x98\xe1\x99\x15\x0e\x40\xcd\xa9\x90\xc4\x5f\x0d\x8a\xda\xf5\xd4\x9a\xf6\xef\x29\xd9\xf2\x98\x3d\x5c\x9d\x0f\x3e\x0e\xaf\xca\x24\xf0\xfd\xf0\x53\x49\x84\xbd\x1c\x9c\x0f\x1f\x4a\xb7\xb9\x96\x64\x57\xcb\xf5\xd5\x66\x6b\x8e\xa2\x7f\xe9\x14\x9d\x9b\x4f\x4f\xf5\xe2\xd6\x40\xc4\x79\xe5\xb7\xb2\x0e\xb7\x2e\x24\xcf\xfd\x31\x60\x4a\xd4\xfa\x25\xda\x9a\x90\xac\x0f\xb2\x64\x43\xaa\x0f\x55\x58\xea\xfb\xaa\xea\x54\xae\x4e\xd9\xbd\x08\x41\x97\xc7\x85\x65\x29\x8c\x61\x00\xa3\x41\x93\x11\xab\xc6\xad\x55\x30\xec\x1f\xc1\x45\x9d\xe6\x52\x19\x57\x22\x10\x27\x7a\xfc\x8b\xd4\x0b\x0a\xae\xc6\x63\x74\x47\xc8\x88\x39\xeb\xc1\x8c\xaa\x79\x3e\x39\x8e\x78\x7a\x52\xe0\x13\x9e\xe0\x8c\xa6\x58\x4b\xd2\x44\x2c\x4e\x26\x09\x9f\x9c\xa4\x58\x2a\x22\x4e\xb2\xc7\x19\x44\xc0\x38\x77\xea\x89\x6f\x76\xc6\xff\xfd\xe2\x4f\xdf\x1e\x5d\xfc\xe5\xdb\x0f\xcb\x16\xb2\xa6\xfd\x1f\xb0\x08\x67\x32\x4f\x6c\xc4\x9c\x08\xd7\xc6\x1d\xf9\x9c\xac\xdb\xef\xab\xf2\x76\xed\xa6\xbf\x9e\xdd\x3c\x94\x2c\xd6\xe5\x7f\x5e\x0e\x2e\xaf\x6f\x7f\x2e\x71\xca\xfb\xeb\xdb\xfe\xa7\x12\x43\x1d\xdc\x7c\x3f\xb8\x1c\xdc\xf6\x2f\xc6\xee\xe1\x2e\xb6\xb7\x1f\x18\x7f\x66\xe5\xa5\x91\x8e\x03\x2e\xf5\x74\x8a\x3e\x72\x81\x7e\xf0\x3b\x79\x34\xc1\x12\xae\x18\x77\x67\xc9\x1e\xca\x78\x0c\x8c\x17\x91\x6c\x4e\x52\x22\x70\x62\x6d\x06\x52\x71\x81\x67\xe6\xa6\x97\x91\xc0\x2a\x9a\x23\x99\xe1\x88\xf4\x50\x04\xd4\x30\xeb\xc1\xa6\x80\xaa\xc5\x67\x55\x3b\xdf\x6d\xce\x14\x4d\x89\x53\xc1\xed\x3f\xef\xcd\x66\x6c\xb1\x39\xd7\xf7\xdf\x97\x85\xbd\x8f\x17\x3f\xdf\x0f\xc6\x77\xe7\x3f\xac\x5c\x4f\xf3\x59\x69\x64\x77\x10\x80\x74\xc6\x93\x3c\x65\xe1\xdf\xdb\x8f\x6d\x78\x75\x3f\xf8\x54\x1d\xdd\x75\xff\xbe\x4c\x19\xb7\xe5\x00\xb7\x0f\xdf\x5d\x5f\x5f\x0c\x4a\x2e\xe1\x0f\xe7\xfd\xfb\xc1\xfd\xf0\xb2\x44\x3f\xe7\x0f\xb7\x06\x8d\x70\xd5\x34\xdd\x08\x6a\x26\xaa\xa7\x15\x4e\x73\xdf\xac\xb0\x15\x27\xea\xdb\x80\x72\x73\x96\x8f\x02\xb8\x1d\x13\x0e\x06\x56\x9d\x23\x6f\x52\x8d\xcc\x48\x6b\xd9\xa1\x2a\x6f\x13\x6a\x66\xc7\x2b\x37\x7a\x15\x57\xbe\xf7\x43\x30\x50\xa0\x46\xd9\xc6\x49\xc2\x9f\x4d\x28\x6f\x4a\xf5\xad\x6c\x81\xd1\xf4\x2b\xb2\xf0\x10\x1e\xd7\x70\xbc\xf2\xb6\x90\x48\x10\x75\xc9\x73\xa6\xb6\x27\xb9\xfe\x55\x89\xef\x0c\xae\x7e\x1c\xff\xd8\x2f\x53\xe0\xf0\x62\x35\xab\x09\x9b\xa8\xb9\x8a\xfb\x57\x3f\xfb\x4b\x18\x02\xbe\x7b\x5e\x43\x35\xb2\x6b\x94\x50\x2d\xf6\x46\x58\x6b\xaf\x09\x48\x34\x88\x50\x30\x39\xa4\x7a\x72\x10\x60\x9a\x19\x7f\x92\xe1\x4f\x66\x90\xa7\xee\x8f\x4a\x7b\x12\xd6\x05\xac\xa9\x2e\x9e\x1e\xda\xb1\x5a\x35\x43\x84\x3d\x51\xc1\x01\xcf\x16\x3d\x61\x41\xb5\x34\x6e\x5a\xd6\x73\x3d\x85\xff\xdd\xac\x4d\x30\x8c\x56\x18\xd7\x1d\x17\xea\xdc\x07\xf2\x6e\x67\x0d\xa9\x0b\x68\x5d\x0e\x65\xad\x37\x74\x2c\x7f\x5b\xb3\x39\x3b\x06\xfc\x96\x27\xfc\x8f\xe4\x9c\xe2\x44\x33\x80\xfd\xc9\x8b\xfd\xab\xbb\x61\x59\x7e\x2c\xab\x19\x01\x5f\xde\x5a\x5e\x04\x43\xa5\x19\xb9\x53\x26\xee\xfe\x7a\x61\xb4\x0b\x00\x3d\x36\xe7\x36\x50\x2c\x40\x00\x72\x28\x28\x19\x16\xb2\xf2\x85\x44\x00\x84\x56\x04\x5c\xe9\x3b\x0b\xc2\x99\x9e\x38\x8d\x47\x8c\x7c\xce\x08\x93\x10\x1c\x60\xee\xb3\xc2\xd7\x2e\x8f\xd1\x70\x0a\x2c\x41\xbf\xce\x50\xce\xac\x03\x4c\x5f\xb8\x66\x90\x3d\x2d\xca\xda\x21\x78\x0d\x11\x0c\x2f\x8c\xb8\x60\xa9\x62\xf0\x23\xf6\x93\x77\xa2\xc1\xa3\x29\xd7\x0c\x48\xef\xa2\x6d\xef\x14\x61\x26\x69\x0f\x69\x85\xa5\xba\xa7\x90\x3a\xa0\x15\x4a\x1b\xc2\xa5\x39\x8d\xfd\xf3\xf5\xaf\x81\xa5\x38\xe1\xf0\x32\xa8\xbf\x0b\x2a\x57\x41\x83\x68\x9c\x18\x8f\xc9\xb8\xfd\x9d\x10\x71\x41\xac\x9f\x65\xe3\x6b\x60\x1d\x63\xbf\xc7\xf2\x71\xc9\xf7\x30\x64\x52\x61\x16\x91\xb3\x04\xcb\x2d\x83\x90\x9c\x8d\xa3\x57\x96\x38\x6e\x6f\x1f\x6e\xee\x87\xdf\xad\xe1\xf2\xd5\x8f\x97\xc3\x80\xa2\x24\x77\xee\xb9\x89\xe0\x38\x46\x9a\x7d\xce\xb8\x71\x05\x5a\xc1\xbf\x80\xfe\x36\x79\x3d\x3e\xa0\xb2\x04\x3b\x5e\xa4\x23\x58\x3b\x47\xe8\x4a\xa0\x76\x21\x50\xa4\x57\x02\x05\x26\x0f\xb7\xd5\xe0\x59\x34\x05\x49\xac\x75\x2b\x4b\xb0\x9a\x72\x91\x1a\x2e\x5f\x9a\xb4\x69\x7c\x75\xa3\x94\x29\x22\x44\x9e\x29\xea\xb0\xdc\xab\x52\x2a\x54\x78\xe7\xb3\x4b\x22\x25\x9e\x91\x5d\x1c\xd0\x75\xca\xc3\xdd\x8f\xe1\x3f\xc1\xc1\xdc\x46\xf6\x2f\x8d\xd0\x45\xbe\x3b\x7a\xba\x66\x1f\x4d\x20\xcf\x0d\x4f\x68\xb4\x65\xc0\xdd\xc7\xfe\xf0\x62\x3c\xbc\xd4\x4a\x7c\xff\x7e\x70\x51\x12\x25\xe0\x59\xff\xe3\xfd\xe0\xd6\x82\x58\xf7\xbf\xbb\x18\x8c\xaf\xae\xcf\x07\x77\xe3\xb3\xeb\xcb\x9b\x8b\xc1\x9a\xc8\x9c\xc6\xc6\x97\xad\xab\xd5\x57\x4f\x97\x7e\x81\x1d\xd6\xbc\x2c\xb4\x97\x41\xd6\x18\xa6\x09\x38\xc1\xb9\x71\x86\x63\xc4\x78\x4c\xe0\x67\xe9\xac\x33\x1e\x39\x1a\x0d\xd5\x57\x49\x82\x70\xae\x78\x8a\xc1\x6b\x93\x2c\x46\x0c\x4f\x34\x6b\xc5\x49\x12\x84\x77\x89\x9c\x31\xcd\x62\x75\x63\x06\xa2\x3d\x4a\x88\x66\xe7\x59\x90\xec\x67\xfd\x06\x53\xca\x20\xd2\x36\xc5\xe2\xd1\xb8\x99\x8a\x2e\x8b\x43\x21\x11\x96\x23\xa6\xc7\x45\xac\x61\xa8\xcd\x0a\x9f\xb6\x7a\xab\x71\x75\x52\xfc\x48\xf4\xaa\xa4\x79\x34\x47\x99\xe0\x33\x41\xa4\xb4\xb6\xe5\x08\x33\x13\x80\x60\x5f\xd7\xd7\xd0\x88\x31\xae\x97\xc2\x99\xb0\x63\x92\x11\x16\x13\x16\x51\x93\xd6\x07\xbe\x7b\x6f\xda\x9c\x09\x9c\xcd\x91\xe4\xe0\xf4\x86\x65\x07\xfb\x95\xf9\xc8\xdd\x64\x66\xc6\xe6\x71\x68\x81\x16\xb9\xe6\x13\xd7\x20\x27\x9a\x55\x86\x8f\xdd\x65\xe8\xdc\x2e\xc6\x0e\x98\x66\x09\x51\x06\xac\x1f\x96\x1c\x36\x43\xaf\x75\x69\x3f\xf4\x36\xd5\x6d\x82\xbe\xb0\xdd\x98\xb1\xb4\x23\x3a\xae\xb1\x6c\xdb\x23\x85\xbe\xc7\x2c\x4e\x74\x2b\xce\x87\x51\x3e\x8b\x90\x8a\xd2\xd7\x54\xe3\x4e\xe3\x2e\xb7\x68\x84\x73\xb9\xcb\x35\x5a\xc9\xc5\x34\x56\xc1\xa3\x22\x28\x04\xc8\xdb\x26\x62\xc2\xea\x66\x9a\x45\xe2\x84\xdb\x55\x32\xaf\xe7\xa6\xfe\x13\x82\xd1\x34\x5c\xb3\x99\xa0\x2c\xa2\x19\x4e\xb6\xd2\xfd\x2a\xc1\xf8\x36\xc6\xfd\x6b\x3a\xd5\xe4\xf3\xcd\x92\xdb\x56\x11\x91\x42\x82\xb2\x1d\xa6\xdf\xc2\x0d\x2c\x49\x36\xab\x81\xc8\x22\x9a\x04\x0b\x9e\x1b\x7f\x1c\xac\x0b\x89\x6b\x8e\xea\x71\xdd\x76\xeb\x93\x81\xcb\x01\xd0\x5b\x6c\xb6\x89\xfc\x69\x5a\xbf\x4a\x2b\xb6\x77\x13\x8c\x87\x93\x9b\xfa\x36\xeb\x76\x20\x78\xf8\xaf\x55\xb4\x73\x89\x33\x4d\x33\x16\xb6\x1f\x17\x73\xb4\x4a\x92\xad\x0a\xe6\xe2\x67\x02\xdf\xb9\xcf\x0b\x69\xbf\x1b\xc5\x12\xda\x00\xa8\xe5\x4e\x4a\x31\x04\x41\x8e\xb9\xa5\xf1\x69\xae\x65\x59\x84\x21\x0a\x01\x7d\x4d\x8e\x67\xc7\xc8\x15\x61\xe8\xa1\xfe\xcd\xcd\xe0\xea\xbc\x87\x88\x8a\xbe\x71\x31\x8b\x36\x60\x69\xc4\x14\xb7\xd2\xca\xc2\x15\xd0\x48\x89\x98\x91\xd2\x9c\x5d\x74\x13\x84\x2a\xcf\xa8\x54\x36\x7c\x56\xf3\x95\xa0\xd4\x09\x4d\xab\x62\xb6\xa1\x90\x5c\xcd\x77\x21\x0d\x2c\x65\x9e\x6a\x5d\x76\x4c\x71\x3a\x16\x3c\xd9\x85\x29\x9c\xc3\x54\x40\x5d\xf6\xe9\xf9\x14\xa7\x48\x37\x6b\x43\x41\xbc\xcb\xd1\x8b\x74\x5a\x30\xd2\x7c\x59\xdf\x9b\xc1\xbd\xe5\xbc\x0f\x36\x1e\x8d\xba\x10\x08\x48\xdf\x6f\x60\x15\x85\xd9\x78\x6c\x2d\xf5\x63\x1c\x45\x5a\xe5\xde\xf3\xa4\x82\xfa\x39\xce\x25\x60\x3b\x7a\xb1\x69\xae\xa3\x73\x37\xcc\x4c\x73\x30\x08\x06\xd6\x57\xae\xe4\x11\x2d\xda\xaf\xe9\x77\xb2\x58\xea\xd5\x55\xb8\x79\x90\xde\xa4\x62\x2e\x61\x49\x60\x27\xa5\xa9\x90\xa3\xe6\x64\x81\xe6\xf8\x89\x94\xba\x74\x09\x31\xba\xe1\x05\xcf\x45\x1d\xa3\x1b\xb1\x73\x92\x09\xa2\x25\xfd\xaa\x03\xc5\xd3\xf4\x6d\x99\x12\x3b\xba\xee\xe8\xfa\xdd\xd3\xf5\x99\x29\x94\xd4\xf7\x85\xb1\x76\x12\xe0\x4c\x63\xe3\x8c\xf3\x64\xdc\xc2\x26\xd2\x7e\xc5\x4b\x9e\xb0\x4a\xd9\x28\x80\x04\xe0\x39\xc8\x47\xa5\x6b\x93\xeb\xbb\x2e\x48\xb1\xb5\xc3\x5b\xb1\x0c\xce\x65\x16\xd4\xcb\xd9\xe5\xbc\xd7\xb5\xb2\xaa\x25\xf4\xe2\x62\xce\x99\x91\x6f\xbc\xbb\x2c\xac\x7f\x5a\x3a\x4c\x4e\x14\xa1\x6c\xa9\x1a\x9b\xa1\x67\xbd\xc0\x46\xee\xf8\x47\xce\x15\x96\xdf\x1c\x8f\x98\x16\xa2\x1e\xc9\xc2\x98\x5b\xb5\x98\xf2\x3b\x2d\x8b\x1f\x49\xc2\x24\x84\x7b\xff\xce\xb8\xe7\x34\x89\x3b\x73\xb5\x51\x4d\x4d\x11\x38\x08\xba\xf6\xbd\x40\x88\xae\x6d\xd4\x4a\x49\x45\x00\x34\xc8\xf9\x66\x2e\xf6\x99\x19\xfe\x8c\x28\x48\xb1\x56\x54\x81\xce\x14\x9b\x2a\x73\x4b\x43\x5f\x6b\xba\x32\x54\x21\x38\xf8\x49\xe2\x7c\x37\xc6\x2f\x97\xdb\x58\xcb\x19\xbd\xb6\x70\x67\x63\xde\x4f\x9c\xdd\x28\x12\x7c\xa9\x74\x1b\x96\xc8\xec\xf4\xc4\xb0\x03\xe7\xbf\x26\xec\xf8\x99\x3e\xd2\x8c\xc4\x14\x43\x04\xbc\xfe\xd7\x89\x9e\xd7\xbf\x9f\xdd\x5e\x5f\x8d\x8b\x4c\x9e\xff\x1a\xb1\x7e\x22\xb9\xcf\x52\x40\x8c\x33\x1f\x6e\x9f\x09\xe2\x44\x42\x3b\x17\xb0\xba\x16\x66\xc4\x11\x6b\x1a\x41\xcc\x23\x79\x8c\x9f\xe5\x31\x4e\xf1\xaf\x9c\x81\x2b\xbd\x0f\x7f\x9e\x25\x3c\x8f\x7f\xc2\x2a\x9a\x9f\xc0\xb9\x56\x27\xe4\x89\x30\x65\xdc\x54\x7a\xb9\x62\x48\xde\x95\x10\xad\xff\xef\x7a\xcc\x45\x52\x91\xd4\x9a\x6c\x44\x32\x85\xfe\x1f\x41\x26\x9c\xab\xfa\x4b\x8a\x4f\xa7\x92\x6c\x74\x21\x15\x4a\xda\xdd\x35\xfa\xcb\x9f\xbf\xfd\x83\x26\xa1\x6d\xd6\x78\x78\x77\x3d\xd6\xdf\xff\xfb\xb9\xfd\x5e\x6e\xc0\xee\xae\xb3\x82\xb5\x39\xe2\x31\x81\xf3\x39\x83\xdb\x4f\x80\xf3\x02\xd8\x1b\x90\x43\xb1\x8f\x75\xdc\xed\xbc\xd4\xfa\x6e\x2a\xdb\x56\x8b\x09\x2a\x76\x30\x47\x74\x84\x18\x47\xa9\x89\x35\xc5\x0c\xfd\xc7\x0f\xdf\xd5\x6f\x60\x2e\xe8\x56\x1d\x52\x0b\xd7\x10\x74\x29\xe9\xaf\x44\x22\x4d\x35\x9a\x8a\x79\xaa\xbb\x16\x44\xce\x79\x12\xa3\x67\x02\x6a\x92\x8d\x03\xf5\x5a\xb9\x20\x23\x16\x36\x01\x21\x87\x08\x27\x8a\xcf\x08\xdc\xd5\x4e\x51\x53\x44\x68\x51\xc5\x64\x69\x28\x2e\x48\xcf\x40\x7d\xdd\xfd\xc9\xc5\x56\xc3\x34\xe1\x91\x4b\x6a\xb1\x26\xb9\x78\x52\x3f\xf3\x69\xd5\xf4\x8a\x9a\x6d\xf8\xd5\x4d\xb6\x66\xdb\xfa\xa5\xb1\x49\x28\xd6\x86\x55\xdd\x99\xfa\xc1\xd0\x88\xb3\x71\x42\xd9\xe3\x56\x9b\x71\xed\x44\x39\xdd\x82\x5d\x33\xdd\xa2\xb7\x73\x1b\x0b\xc8\x06\xe7\xe3\x63\x9e\x24\x26\xb5\x25\xdc\x1e\x90\xbb\xcc\xba\x81\x30\x90\x99\x1c\x50\x12\x5b\xbf\x97\xd5\x84\x05\x61\x10\xf0\x36\x62\x93\x85\xf5\xd9\xca\x1e\x92\x79\x34\x77\x99\x79\x11\x67\x52\x8b\xd1\x5c\xa0\x88\xa7\xa9\x29\x6e\xca\x08\x52\x9c\x27\xd2\x46\xbb\xb3\x23\x85\x23\x35\x62\x45\x7f\x6b\x4e\x9e\xa9\x80\xb4\x5b\xea\x5e\x7b\x97\x4e\x51\x69\x69\xa5\xc0\x4d\xe3\x10\xb3\x01\x8c\x60\xc6\x13\x15\xa0\x3f\xf0\xe5\xb3\x64\x36\xac\x41\x33\x90\x73\x2e\xd4\x38\xae\xe5\x39\x6b\x89\xa6\xca\x08\x19\x39\x4a\x20\x68\x98\x3f\x69\xe1\x9f\x3c\x7b\xe3\xeb\xaa\x21\x68\xaa\x5e\x35\x82\x76\xc7\x68\xe5\xc8\x36\x25\xc1\x86\xb5\x32\x08\x1e\x51\x39\x26\x7c\xdd\x18\xef\xe0\xab\x33\xfd\xd1\xca\xc5\xab\x9e\x3b\x27\x04\xf1\xb8\x00\x9b\x33\xf7\xba\xcd\x08\x59\xb5\xa6\x16\x3a\xe1\xe5\x32\x47\x57\x4d\xe5\xa1\x6c\xc9\xd5\x63\x01\x93\xbd\x24\x20\x6b\x62\x31\xa1\x4a\x60\x51\x42\x0a\xf1\xfa\xa0\x24\x58\x40\x7c\xd6\x88\x19\xdc\x38\xa3\x29\xc4\x28\xa6\x12\x12\x44\xe0\x2e\x0d\x9c\x61\xa8\x9d\x12\x58\x39\xda\x45\x9e\xa3\x89\x3f\x87\xc0\xb2\x82\x34\x1c\xb3\xd3\x1d\x79\x7c\x2c\xad\x9f\xf1\x28\x2f\x04\xb9\x08\x24\x5c\x8b\xa9\x83\x28\x93\x74\x36\x57\x88\x32\x6b\x77\xc4\xc9\x8c\x0b\xaa\xe6\xa9\xec\xa1\x49\x2e\xb5\x16\x6a\x82\xd5\x4c\x3c\x0a\x51\x51\x2b\x2e\xb4\x6b\x12\x71\x5c\x69\x70\x59\x45\xd9\x82\x34\xda\x1d\xca\x41\xe5\xae\x58\x43\x38\x7d\x8f\x33\x58\x6d\x83\x42\xdd\x46\x03\x4f\x89\x4c\x1c\x20\x77\xc8\x4e\x50\x05\xa4\xe9\x1c\x00\x2a\xe4\xde\xbc\x14\xaf\x51\x88\x0b\x99\x64\x50\x41\x5c\xec\x36\x48\x5e\x65\x64\x4a\x83\xde\xe4\x9d\x4e\x69\xa6\x6a\x03\xb7\x96\x5d\x45\xb7\x01\xe6\x4f\xbb\xc5\x86\x64\x2c\xa0\x66\x40\x6a\x1b\xb1\x3b\x42\x9a\x81\xdc\x96\xf6\xde\x94\xc6\x85\x29\xd8\x44\x8f\xd5\x24\xbf\x8b\x13\xfb\x7c\x70\x77\x76\x3b\xbc\x31\x90\x13\xd7\xb7\x97\xfd\xfb\x71\x8d\x5f\xbb\xe6\xad\xcb\xfe\xed\x0f\xe7\xeb\x5f\xfb\xfe\xbe\x9c\x95\x5d\xf3\xca\xed\xdd\xea\x64\x8e\x16\x43\xac\x49\x0a\xab\xed\xe7\x14\x65\x0b\x35\xe7\xcc\x87\x28\xc4\x25\xde\x74\x84\x4c\x46\xb0\x82\x10\x22\x21\x55\x8d\xe3\xf0\x1e\xe2\x72\xd6\x4b\x98\xe5\xcd\x32\x30\x6c\x7b\x15\x8d\x36\x38\x91\x9f\x12\x3e\x01\xbf\x75\x5e\x2a\x71\xbb\x22\x02\x7d\xc7\x78\x9f\x73\x2a\xb3\x04\x2f\x96\x7a\x58\x77\xe5\x5c\xe1\x94\x40\xc4\x71\x81\x1f\xe7\x92\x45\xf4\xce\x40\x02\x93\xbf\xd7\xe9\x14\x32\x99\x14\xc5\x8a\xa0\x09\x51\xcf\x90\x37\xe7\x7e\xf5\xb6\x54\x17\x30\x22\x8f\x47\x0c\xcc\x39\x23\xbd\xc8\x71\x0e\xd1\x7e\xa3\x0f\x3d\x34\xfa\x10\x93\x27\x92\xf0\x4c\xef\xbc\xfe\xa1\xe1\x92\x19\xa4\x98\x26\x57\x5c\x79\xcb\xdc\x2e\xfb\x29\x48\x44\x33\x90\xcc\xc7\x44\xb7\xfb\x7a\x82\x47\x89\x92\x1d\x3b\x83\x31\x20\x1c\xc7\x5a\xc9\x06\x56\xe6\x86\x57\x84\x00\xb1\x60\xea\xa5\x5a\x99\x9b\x88\x14\xde\xfc\x6d\x7a\x0c\xdb\x2c\x9b\x3d\x6b\x77\x80\x3d\xbd\xa0\x4b\x76\xd7\x8b\x5c\x6b\x25\x3f\x90\x05\xa4\x60\xdc\x60\x2a\xb6\x74\xcd\xd6\xc5\xbc\xbe\x88\x93\x76\x50\xd3\xd1\x01\xb9\x6b\xeb\xd7\x61\x37\xc7\xad\x8f\xd5\x7b\x2d\x2d\xd5\xc5\x72\xf9\x8e\x5b\xaa\xad\x0f\x4d\x4a\x6a\x63\x08\x03\xaa\x2a\x5e\x19\x89\x36\xd0\xb8\xfc\x00\xef\xf4\x77\x6b\x35\x15\x2f\xae\x45\x61\x4d\x7f\xd8\x05\x9b\x1c\x5f\xcd\xc7\x27\x6b\x47\x1c\x25\x5c\x96\xb1\x72\x5a\x0f\xfa\xcc\x7e\xba\x6a\xdc\x83\x90\x7c\xb5\x5c\xb8\x51\x40\x43\xcd\xc2\x57\xc0\x20\xcd\x3d\xa3\xac\x87\xcc\xbe\xdd\x43\x14\xa2\x2d\x41\x21\x4b\x0a\xe4\x00\x16\xa3\xc2\x0d\x32\x62\x45\xcc\x8a\x44\xcf\x24\x81\x30\xb7\x88\xa7\x19\x98\xf8\xed\x70\x6d\x4b\x24\x36\x11\xc3\x3d\xc4\x73\xa5\x1b\x33\x39\x39\xce\x88\x6b\x13\x7e\x0a\xb7\x87\xf1\xbd\xd9\xe0\x77\x0f\x2c\x6d\x68\xdd\xdc\xa5\x94\xa1\x4f\x44\x41\x2b\x00\xdc\x1f\x4e\x10\xf4\x84\x6a\x08\x65\xfd\xda\xef\x70\xa2\xec\x4c\x36\xd8\xf9\x02\x38\xe5\xbb\x84\x4f\x56\x1b\x09\xa0\x71\xf4\x70\x3b\x74\x16\xc9\x22\x7e\x2a\x40\x2f\x2e\x79\x14\x07\x37\xb7\x83\xb3\xfe\xfd\xe0\xfc\x18\x3d\x48\xa2\x97\xc7\x4f\x17\xf2\xab\xbd\x4a\x62\x46\x6e\x91\x58\x98\x54\x04\x37\x19\x42\x88\x10\xa5\x2c\xe8\x35\x8c\xa3\x0c\xd3\xb2\x9a\xb0\x01\x24\x85\x5a\x43\x1d\x00\x0b\x55\xe7\x69\x23\xf3\xd6\x9d\x40\x88\x93\x1a\xbf\x9f\x28\x35\x33\xde\x74\x39\x32\x6f\x1d\xf9\x94\x23\xfa\x5e\x7a\x32\x70\xb4\xd4\x9c\x50\x81\x5a\x4d\xcb\x10\xd5\xb8\xfd\x9c\x82\x10\xf7\x4b\x9c\xad\x4e\x3f\xc5\xcf\x25\xa2\x35\xa2\x70\xe0\xbb\x7f\xe9\x73\xe0\xd8\xda\xd8\xb0\xc2\xdd\x27\x58\x38\xb4\x0c\x6f\xf5\x7c\xd3\x64\x7c\x48\x67\x24\x0b\x27\x56\x19\x84\x8d\x63\x95\x08\xce\x0e\xfc\x42\x19\x2a\x5d\x89\x3d\x34\xa5\x9f\x6d\xa3\x45\x7c\xbb\x7b\x35\x08\x78\x68\x88\xa7\x9c\xe3\xe5\x33\xb5\x81\xd8\x70\x03\xdf\xaf\x14\x22\xb9\xd4\x22\x51\xa4\xc5\x25\x41\x22\x2e\xf4\x4d\x01\xdd\x16\x5e\x88\x75\x22\x83\xc2\x42\x2f\xca\xb2\x57\x66\xd5\xe9\x2f\x6a\x90\xc4\x58\x91\x23\x2d\x7a\xad\x49\x80\xb6\x39\x32\x90\x4d\x83\x55\x00\x07\x56\xdc\x3c\x13\x32\xc3\xcc\x85\x66\x37\x0c\xd7\x5d\x79\x3b\xb0\x2a\xad\x02\x61\x48\x0f\x03\xf9\x0a\x52\x7f\x4a\xe3\x90\x19\xac\xe7\xca\x71\xd8\xe8\x97\x43\x58\xb6\x67\xec\x83\x71\x1a\x06\x9b\x67\xf1\x21\x0d\x36\xc1\x52\x21\x3b\xa6\x26\x53\x44\xa0\x22\xbe\xac\x11\xb6\xa4\xdb\xb7\x55\xde\x34\x09\x95\xb5\x58\x02\x9e\x11\xe9\x70\x53\x0c\x4a\x8c\xd6\x69\x9c\x20\x6c\x4a\x31\xfb\xb3\x6d\x6b\x32\xbb\x5b\x22\x64\x26\x10\xa4\xbf\xdc\xf4\x31\xea\xb3\x25\xbc\x2c\x17\x97\x55\x5a\x2f\x73\x27\xe1\xe4\x19\x2f\x24\xca\x84\x81\x96\x31\x91\xfb\x6e\xf2\xa0\x81\x95\x3f\xf2\xa1\x10\xca\xa5\x4e\x20\xb0\xc5\xac\x0f\x9a\x73\x72\xef\xf8\x05\x5c\x79\x95\xa8\x72\x2f\x90\x17\xcd\x15\xb6\x8a\x16\xac\x4e\x91\x71\x34\xc7\x6c\x46\xc6\xce\xc8\xba\x8d\xb6\xa4\xdb\x39\x83\x66\xce\x6d\x2b\xf5\x97\xd3\x8d\x51\x98\x6c\xfd\x17\xf3\xaa\x37\x20\xea\x43\x20\x15\x9e\x11\x64\x46\xd4\xca\x2c\x5d\x8a\x18\xb3\x60\xc3\xa0\x27\xd8\x56\x07\xe5\x28\xfa\x26\xe1\x1d\x42\x9f\x2e\xf0\x84\x24\x6f\x13\x39\x01\x5d\x5b\xe3\x3c\x78\xeb\x4c\x36\x00\x41\xcf\x60\xcf\xaf\xb0\x0c\x6b\xbd\x17\x79\x5d\x6e\xc0\xaa\x79\x96\xaa\x9f\xef\x30\x51\x57\x2b\x64\x9b\xa9\x36\x55\x10\x09\xaf\xbd\xa0\xd2\x46\x9d\x81\x2d\xbc\xfe\xaa\x36\xe5\xed\x06\x12\x14\xfc\x68\x18\xc7\xce\x15\x3f\xd6\x4e\x65\x6b\x90\x81\x96\x55\xf0\x86\x53\xc4\x38\x23\x88\xca\xe2\x65\x55\x4e\x87\xf2\x10\x3d\x5a\xc4\x37\xc6\x17\x5f\xa5\xcb\x17\x5f\x7a\x69\x4b\x4b\x01\x9e\xe0\x6d\x03\x2e\xbf\x9b\x11\xad\xa8\x62\xb1\x00\x88\x4f\xc3\x87\xcb\x32\xdd\xda\x71\xee\x5d\xe0\xbe\x77\x08\xae\x41\xa4\xae\xe2\x08\xc4\xc8\xca\xe0\x90\xc1\x41\xb5\x2f\xd9\x8f\x2c\x4c\xcd\x88\x79\xcb\x06\x10\x22\x95\x28\xc5\x19\xf8\xf4\x18\x57\xc5\x57\x06\x76\x49\xf9\x2d\xec\x39\x41\x5c\x9a\x1a\x5a\x0d\x2b\xb0\xce\xb4\xe3\xae\xdf\x62\x5d\xcb\xf0\x96\x0e\x9a\x77\x46\x9f\x08\x73\x34\xdd\x73\x67\x42\x0f\xca\x75\x9a\x2c\x8e\x30\x84\x19\x93\x38\xf4\x7c\xac\xe6\x48\xc6\x20\x73\x08\xf6\xc8\xf6\x4b\x76\x5f\x1b\x46\x63\x40\xd2\x4a\xe8\xf6\x2e\x30\x3c\xa4\x52\x8b\xdb\x6b\x32\xc1\xb1\x44\xbf\x63\x5c\xfd\x2e\x40\x36\x76\xc6\x0b\xf8\xd4\x99\xa0\x7a\x4b\x25\x5b\xe0\xd0\x5a\xc2\x41\x38\x40\xd8\x5a\xbb\xf2\xbb\xc6\x06\x14\x81\xef\x2f\x2a\x8d\x0e\x96\xb3\xe0\x9a\x6a\x5e\x75\x1e\x7b\x54\xbd\x16\xaa\x06\x4f\x53\x56\xaf\x38\xe9\x25\x43\xa7\x5c\xe7\xa2\xf7\x7b\xd1\xca\x35\xbf\x84\x08\xb0\x0b\xb5\xa5\xad\x23\xa7\xd6\x80\x20\xd7\xdb\x25\xb6\xc9\xf3\x6c\x92\xcb\x45\x39\x74\xcd\x96\xc1\x68\x40\xf9\x3d\x1e\xb1\x8f\x5c\xd8\x2b\x58\xda\x3a\x03\x13\x1c\x3d\x1e\x11\x16\x23\x9c\xab\xb9\x41\xdb\xb5\x7e\x85\x85\xa5\x06\x2d\x69\x00\xd9\x78\x28\x0d\x2a\x23\x2c\x62\x57\xf1\xe2\x89\xbb\x51\x8c\x58\xd0\x08\x54\x32\x80\x42\x4f\x50\xaa\xb6\x49\xd5\x24\x52\xeb\x57\x4d\x6b\x51\x57\x84\x75\xa9\x04\xeb\xea\x73\x56\x2a\x2a\x0b\x35\x18\x20\xc0\x89\x4f\x97\x57\x67\xe8\xac\x8d\x4e\xbf\xd3\xf4\xbc\xec\x85\xe8\x59\x8d\xc2\x98\xa4\xec\x0c\xb4\xa4\xf3\xad\xe3\xb5\x25\xd4\xe0\x69\x2e\x20\x5c\xb7\xae\xcd\xaf\xa3\x39\x4d\x0a\xdf\xc5\x37\x3d\x3f\x4c\xdd\x64\x42\x9e\x48\x62\x30\xeb\x23\x01\x91\xf9\xc6\x6a\xf8\x2d\xfa\x3f\xa6\x30\x29\xfa\xc3\x88\x7d\x02\x36\x9c\x24\x0b\x40\xd4\xf4\x2d\x63\x55\x69\xe6\xb1\x76\x00\xca\xa6\x02\xa1\xf2\x40\xcc\x5e\xcf\xf1\x13\x19\x31\xd7\xcc\xff\x41\x8f\xe8\xf7\xe8\x0f\x4d\xea\x9d\x0b\xb0\x7f\x61\x3b\xc7\xc7\x20\x7c\x3d\xb8\xe5\x2c\xa3\xb4\xfc\xc6\x99\x41\x4a\x46\xc8\x1a\x64\x0d\x0f\x8c\x4d\xd9\x13\x8f\x96\xb2\x38\xc2\x53\x8b\x05\x61\x6a\xcc\x78\x4c\xc6\xa4\xc6\xa5\xb9\x82\x49\x68\x21\xe0\x8a\xc7\x64\xad\x43\xd2\x33\xd3\x9f\xc0\x74\x23\xf3\x89\xdf\x0e\x48\xf0\xf7\xd9\xdc\xde\xfa\x50\xa6\xb4\xfa\x91\x7b\xf4\xd9\x6d\xc6\xbd\xad\x33\xd5\x85\x89\xf6\xe0\x42\xb0\x03\xa8\x77\xe8\x25\x58\x39\xf7\x7a\xf5\x38\x56\x1d\x01\xfa\x65\x3d\x73\x7b\x59\x05\xb8\xba\x50\xfb\x44\xd0\x19\xd5\xf2\x7b\x7b\x87\x2d\x70\xc2\x6d\xbc\x19\x06\x64\xb4\x95\x3b\xa3\x58\x0a\x07\xb4\x72\xe4\xe9\xaf\x70\x42\x4e\x78\x5e\x15\xe0\xed\x02\x50\x19\xba\xfb\xad\xac\xbe\xd0\x7c\x78\x66\x32\x00\xc9\x9c\x9a\x9c\xfb\xfe\xd9\x05\xd2\xa7\x83\xa7\x06\x98\x0a\x16\x2d\x57\x73\x2e\xe8\xaf\xab\x68\x1b\x0b\x45\xa7\x38\x52\xe3\xbd\xd4\x71\x69\x26\xa6\xbe\xed\x67\x78\xde\xda\xd4\x77\x87\x9f\x48\x10\x02\x08\x01\x7e\xb6\x15\xe9\x5d\xa9\x55\x7e\xcb\x05\x62\xfc\xb9\x00\xa6\x72\xdf\x03\x16\x73\x90\x3a\x81\xb5\xd2\x93\x41\x0c\xaf\xa4\x40\x9f\x00\x13\xf5\x95\x32\x69\x91\x00\x31\x6e\x00\x9e\x34\x79\xce\x31\x8b\x13\x77\x85\x20\x6e\x62\x6a\x16\xcf\x78\xb1\x91\x57\x3b\x8c\x6c\x2c\xf2\xe4\xcc\xf6\x97\x95\x20\xe0\x01\x46\x52\x53\x25\x65\xaf\x4e\x15\x45\x93\x1c\xa0\x6d\xf5\x9a\x4c\xf3\xc4\xd4\xc3\x88\xb8\x88\x4d\x41\x7a\x59\xca\xca\x83\xe8\x66\xa7\x35\x61\xe5\x1b\xa4\x16\x01\xd4\x56\xdc\x30\x86\xb1\x95\x72\xfd\x5f\x73\x92\xef\x29\xb1\xf1\x4d\x43\xc1\xef\xf1\x4c\x16\xb1\xdd\x66\x6d\xf4\x95\x57\xac\xef\x3f\xf4\x4c\x65\x90\x0a\xec\x0c\xb6\x1e\x59\xcb\x58\x3a\x4c\xbd\xd5\x8d\x0c\x65\xb7\xa6\xa2\xc0\x1e\x2c\x65\xaf\x11\x26\xb3\x2c\x7a\xd6\x70\x75\x4b\x7e\x4f\x3e\x31\x16\xbd\x8e\xf9\xc9\x95\x66\xa8\x08\x75\x2f\x68\x89\xda\xe2\xee\x58\xd6\x55\x56\x06\x9b\x17\x76\x29\x7f\x5b\xd4\xe4\xa8\x2b\x0e\xd9\x2c\xcf\x82\x02\xf0\xde\xa2\x78\xd9\x97\x16\x76\xb7\x70\xc8\x63\xb4\xf0\x67\xb4\x05\x08\x97\x71\x4b\xb8\xa8\xbf\x3a\x37\xb0\xeb\xd8\x86\xca\x5d\x2f\x87\x43\x34\x9d\x08\xc3\x92\x0e\xf5\x48\x2c\xa3\xee\xac\x3d\x0c\xbe\xc0\xca\xdb\xd8\x65\xbd\xc4\xf8\x7a\x27\xc3\x93\xe3\x38\xc2\xd1\xbc\x71\x52\x13\xce\x13\x82\x59\x93\x52\x50\xfb\xb8\x7a\x44\x0c\x66\x2c\xb0\xee\x24\x01\xe0\x64\xb7\x04\xb6\xd8\x66\xa1\x15\xb1\x18\x00\xef\x0d\x0f\x37\x21\x97\x6e\xa0\x8a\x30\x67\x50\xa3\x6c\x96\x90\xea\x5a\xd9\xca\x04\x3d\xdb\x49\x12\xe5\x49\x50\x6d\x33\x23\x42\x8f\x5a\x2f\xf1\x13\x61\x5a\x15\xb3\xe3\x70\x3e\xa2\x67\x97\x67\xee\x6b\x6c\xf5\x7c\xd7\xce\x4d\x09\xc9\x9c\xf1\x88\xc1\xc1\xe5\xe5\xc3\xaa\x69\x55\x6a\xed\x2d\x34\xf7\x6d\x7d\x3a\x03\x21\x62\xe3\xe3\x79\x57\xb6\xbe\x6f\x7c\x26\x4d\xdf\x63\x08\xdd\xd8\xd9\x63\x19\x78\xb5\x0a\x04\x0c\xb3\xb1\x0e\xe5\xec\x95\x6c\xf3\x10\x0c\x53\x8e\xe6\x0d\x62\x61\x9a\x50\xb6\x5e\xf4\x2e\x29\xaa\x8a\xb8\xdb\xa0\xe5\x50\x56\x46\x00\xb4\xf4\xe7\x83\xd1\x77\xd5\xb9\xbd\xb0\x52\x7d\xd9\x13\xee\xd3\xa6\x8a\xe8\x51\x5b\x37\x57\x09\x0c\xa0\x0f\x90\xaa\xff\x93\x31\x5c\x50\x69\x84\x7b\x57\x3d\x24\xcd\xd4\xc2\x16\x9b\x83\x7b\xb1\x24\xef\x03\x90\x5e\x9d\xd7\xbd\x7a\x47\xc6\x25\xbf\x7b\x5d\x67\xd0\x91\xb5\xd6\xd4\x36\xe9\x16\x3a\x04\x66\xa9\x00\x61\x34\x05\xd9\x98\xba\xbd\x63\x9c\x34\x9a\x08\xf7\xc0\x34\x41\x39\x2a\xc0\x2f\x2c\xa6\xae\x12\x39\xd1\xbc\x0b\x27\x49\x65\x5e\x18\xb2\xcc\x95\xaf\xdd\x37\x29\x0a\x0c\xb7\x8f\x01\x48\xf0\x84\x6c\xe4\xf5\xbf\x30\x1f\xac\xa4\x22\x78\x05\x02\xe6\xb3\x2c\x59\xb4\x0b\xd4\x0f\xb5\xdf\x5a\xec\xb9\x75\x03\x0b\x11\xeb\x56\xde\x4d\x65\xd4\xb7\xed\x86\x28\x49\x94\x0b\xaa\x16\x63\x6b\x4b\x6d\xcf\xb4\xee\xec\x97\x67\xf6\xc3\x36\x86\x8a\x53\xe4\xfa\x73\xb6\x5b\xb8\xa7\x04\x35\x85\x89\xec\x14\xda\x6c\x37\xce\xd5\xbc\x16\x93\x6a\xd5\xc2\x3a\x50\xac\x76\x43\xd5\x5d\x6c\x3b\x3c\x5b\xf0\x64\xcc\xa7\x0e\x6e\xaa\xfd\xc2\x56\x2b\xc1\x6c\x60\x84\x76\xa8\xd6\x99\xa0\x5c\xd8\x82\x2b\x6d\x62\x05\x53\xfc\x79\x9c\x61\x81\x93\x84\x24\x54\xa6\xdb\x9b\xcc\xff\xf4\xc7\x95\xa3\x3d\x33\x85\x81\xa4\x2d\xb3\xf5\x99\xa6\x79\x8a\x58\x9e\x4e\xac\x94\x8b\xe5\x63\x88\x29\xea\x10\x10\x0c\x34\x96\x1b\x60\x09\x87\x41\x04\x28\xb1\x23\x16\xe0\x85\x5b\x53\x05\x8e\xe6\x94\x3c\x01\x9a\xa9\x60\x44\xca\x63\x74\xc5\x15\x39\x45\x97\x38\xbb\x07\x41\xcd\x54\xea\x9c\x19\xa7\x03\x96\x48\x4b\xad\x39\xa3\xaa\x37\x62\x16\x64\xdc\xad\xca\x49\xc4\x99\x01\x9a\x8d\x60\x61\x7d\x13\x60\x45\x77\x88\xab\xca\xe5\x8b\x52\xd9\xb0\xd8\x02\x3f\x8f\x83\xa0\xe0\xb1\x49\xba\xd8\x80\x8e\x6f\xf1\xb3\x09\x83\x3f\xc7\x0a\x9b\x22\xbc\xab\x24\x77\x1b\x67\x66\x0b\x33\x19\x7c\x65\x17\x8f\xc3\x2d\xc8\x87\x2f\x29\x67\x82\x7e\xbf\xa6\xc7\xe4\x18\x7d\x97\xf0\x89\xec\x15\xa6\x2a\xf3\x50\x12\x25\x7b\xc6\xef\x07\xff\x36\x19\x76\xdf\xb8\xd5\x2f\xf8\x3e\x54\x53\x9c\xd2\xcf\x06\x5b\x44\xfe\xe9\xf4\xe4\x24\x5d\x1c\x4d\xf2\xe8\x91\x28\xfd\x17\xc8\x14\xb5\x2b\xe4\x80\xb9\x70\x1d\xcc\xd7\xba\xd5\x59\x86\x08\x6b\x45\x91\x36\x5b\x49\x12\x80\xa3\xd7\x57\xba\xaf\x57\xeb\x10\xa5\x38\xab\x2f\xc6\x69\xa7\x2c\xf2\xa6\xe3\x55\xc2\xb1\x7e\x1d\x6d\xc5\xd4\xe3\x0d\xe1\xb3\xa7\x09\x9e\x55\x54\x96\x0d\x94\x94\xeb\x94\x5a\x2a\xd2\x73\x87\x30\x16\x7d\xca\xca\xc1\x7b\x5f\x39\x2f\x2f\x78\x6b\xad\x17\xeb\x78\xc4\xfa\x12\x3d\x13\x53\x66\x17\x52\x3d\xc1\xe9\x93\x53\x39\xf7\x89\x9e\x60\x86\x86\x46\x0d\xca\xb0\x01\xa3\xb0\x8a\xa3\xd3\xac\x9c\x5b\xcc\x6a\xa0\x38\x91\xa4\xa7\x1b\x06\x93\xaa\x8b\xcf\x44\xcf\x02\x67\x19\x11\x23\x66\x11\x63\x01\x17\x9d\x73\x1b\x7b\xd3\x14\xa4\xdf\x69\x94\xaf\xab\x51\x06\x6b\x4f\xca\x79\xa0\xeb\xce\x37\xa4\x8d\xae\x5a\xe1\xba\x4c\x48\xb7\x7c\x5a\x16\x6d\x1b\x40\xff\xf6\x66\xe3\x96\x63\x5e\xa7\x9d\xf7\x2b\xd9\x0f\x50\xc5\x3b\x05\x05\x52\x16\xc5\x4a\x9d\xad\xcf\xab\xef\x25\x31\x07\x00\xc7\xe1\xe3\x98\x13\x19\x18\xf1\x91\xb7\xc5\x25\x74\x4a\xb4\xf4\x31\x62\x9a\x8c\x43\x87\x83\xc1\x2d\x77\x30\xe6\xba\xd3\x48\x70\x29\x6d\x42\x83\x69\x67\x75\x5a\xda\x0e\x25\x12\x0d\xf8\xfa\xf0\xfa\x6a\xbc\x5c\x2c\x31\x78\xe6\xca\x26\xda\x87\xb5\xd8\x05\x8d\x4d\xad\x2d\x92\x58\xac\xc5\x06\x65\x12\x4f\xce\x2e\x86\xbe\x36\x58\xa5\xeb\xe5\x3a\x89\x21\x60\x7d\x73\xa5\xc4\xe5\x19\x07\x35\x13\x2b\x4d\xac\xa8\x9a\xb8\x7e\xb3\xca\x61\xd4\xbb\xa0\x11\x56\xb6\x7e\x2d\x7f\x28\xd3\xcc\xba\x68\xff\x3d\x6d\x53\xc3\xb5\x12\x81\xc0\xf8\xd2\x81\x0b\x20\x78\xe9\xb7\xa4\xc2\x69\x16\x66\xb2\x3a\x38\x56\x3b\x4d\x73\xd4\x9a\x2e\xc1\x57\x85\x89\x8f\xb0\x09\x12\xaa\x0e\x6e\x69\x2b\x36\xf3\x78\xdd\x5b\xf4\xf9\x7d\x44\x87\xbf\x5e\x6a\x78\xb2\x28\x82\x21\xa5\x95\xdd\x5c\x65\xf3\x06\xbb\xff\x84\x78\xa4\xfd\xc6\x0d\xdd\x35\xf7\xd3\x23\x72\x09\x82\xa5\x75\x7f\x43\x8a\x64\x25\x7d\x6a\x03\xf3\xb0\x1f\xb3\x49\xb2\x3e\xf2\xb5\x2d\x82\xab\xc6\x96\x6b\x8b\xdc\x41\xa4\x42\x90\x27\x22\x80\x76\x6c\x28\x15\x2b\x1f\x55\x9c\x08\x82\xe3\x45\xb0\x22\x3e\x8e\xc3\xf4\x0c\xe6\x31\x49\x53\xad\xc0\x83\x6a\xc2\xf8\x11\xcf\x9c\xce\x52\x7a\x0b\x0a\x93\xd0\xa9\xbe\xb1\x82\x28\x10\xfd\x05\x3b\x22\x9f\xa9\x54\x5a\xae\xa8\x09\x81\x75\x8d\x80\xc4\x03\xe5\xca\xe6\xc4\xde\x70\xa3\x0f\xfd\xef\xae\x6f\xef\x07\xe7\xa3\x0f\x45\xd2\x83\xcb\xea\xf3\x40\x5b\xae\x6e\x02\x67\x23\xe6\xe3\x94\x3d\xae\x34\xec\x25\xc2\x71\x5c\x00\x46\x58\x25\xd2\xc8\x6c\x2b\x39\x72\x70\x2a\xd6\x46\x28\xaf\x68\xe6\x01\x52\xbb\x0e\xf5\x64\xad\x70\x9d\x95\x4e\x8e\x49\x50\x5b\x91\x49\xb4\xa7\xcb\x26\x84\xc4\x55\x46\xd7\x26\xca\x61\x36\x32\xf2\xec\x74\x25\xb8\x9d\x4f\xb0\xb9\x84\x37\xe3\x76\x6e\x43\xb6\xd8\xd4\x8f\xf4\x33\x89\x6f\x1b\xa4\xaa\xbd\x24\x0a\xb5\x0a\xb0\xac\xdd\x85\x9c\xd1\x4d\x34\x7e\x3f\x95\x07\xfd\x5d\x7b\xb6\x74\x5d\x20\xdd\x15\xa8\xb5\x00\x59\xab\x10\x46\x11\x11\x0a\x53\x86\xa6\x70\xb0\x59\xb4\x40\x80\x83\x42\xc0\x87\xfd\x47\x94\x52\x06\x80\x0c\xab\x96\xf6\xa1\x3c\x8f\x0d\x84\xd6\xcb\xe1\xd5\xc3\x7d\x49\x54\xfd\xfe\xfa\xa1\x5c\x2b\xbf\xff\xf3\x4a\x59\xb5\xd2\xc2\xaa\x60\xa1\x60\x8a\x45\x72\xa7\x05\xef\xf5\x2b\x53\x3b\xd1\x64\xa1\xc8\xc3\xed\xc5\x4e\xf2\x5d\xbd\xb3\xac\x11\x7a\x3d\x94\xae\xea\x81\x26\xda\x7c\x1a\x93\x68\x1d\x38\x6c\x7b\x3a\x32\x51\x50\x7a\x1d\xac\x35\xd1\x02\xc7\x61\x89\x32\x2c\xac\x1f\x2a\x36\x01\x50\xe5\x82\x6b\x46\xf3\x5a\x05\xcc\xf1\x89\xa8\x1f\xf5\xd5\xc7\xd9\x3e\x92\x4b\xac\x28\x0b\xfe\x51\x32\x7e\x32\x0d\x6f\x70\xd2\xec\x50\x56\x64\x10\x39\x61\x19\x7a\x40\xb6\x87\x10\xce\xe2\xd8\x14\xde\xef\xeb\xe6\x60\x45\x5c\x98\xa6\x56\x49\x39\xd3\x14\x69\x50\x6a\x1d\xb4\x6d\xd0\x1c\x9f\x9a\x8f\x5b\x02\xfd\x05\xc9\x02\xba\xad\x62\x29\x51\xff\x66\x58\xb3\xd6\x17\x55\x17\xd2\x97\x55\x25\x28\xf1\xde\xac\x7d\x63\x4f\x05\x59\x9f\x07\x01\x36\x65\x67\xba\x1b\xba\x94\x71\xfa\xdf\x94\x23\x09\x0e\x01\x04\xb9\x4e\x65\x28\x65\x73\xaf\xc1\x3b\xde\x2c\xc1\xb1\x58\x86\x0d\xb1\xa4\xc2\x01\xd9\xec\x9a\x10\x3f\x69\x39\x74\xbb\x17\xe2\x29\x71\x53\x87\xd8\xc6\x16\xec\x0d\x63\xaa\x98\x4d\x1b\x90\xa9\x1f\x0d\x45\x7b\x0c\x12\x40\x55\x71\x75\x2e\x5d\xc8\xb5\x85\x04\x08\xa7\x1b\x52\xdb\x66\xb8\x54\xc5\xf8\x9c\xf9\xdb\x42\x7c\xe3\x0c\x5b\xbb\x03\x28\x51\xae\x00\x45\x5d\xbd\xc2\xe3\x11\x0b\x02\x56\xa4\x51\x7b\xf4\x19\x71\x35\x5f\xa0\x90\x30\x03\xbc\x70\xc8\x7d\xf2\xc2\x4f\x69\x07\xaa\xc8\x03\x6a\x5e\xae\xda\xb2\xd4\x8f\x3d\x9d\x72\x8e\x5d\x7e\xa7\xb3\xa0\xd8\x38\xc0\xd0\xbe\x04\xed\x05\x75\x1a\x6c\xc7\x60\x8e\x06\xa3\x05\x0e\xaa\x00\x06\x98\x00\x31\x27\x92\x7d\xa5\x7c\x06\x2d\x4d\x16\x2e\xa4\xba\xe2\x1e\xd0\x52\x1d\xa6\xb6\xe5\xd5\x07\x7c\x0f\xa0\x57\x9b\x2a\x0e\xc1\xb1\x5a\x6b\xa6\x72\x3e\x5e\xa0\x84\x30\x16\x09\x3a\x6d\xb2\xaa\x7f\xce\x48\xb4\x0d\x32\xcf\x0d\x16\x38\x25\x8a\x88\x55\xe1\x48\xe5\x1a\xdd\x20\xe2\xb8\x1d\xb4\xfd\x9a\x5d\x34\x05\x4c\xaa\x95\x6e\xbc\x76\x7b\xb1\x0e\x69\xc7\xcf\x62\x23\x50\x31\x3d\x8d\x1f\xad\xe5\x7f\xc3\x59\xd8\x7e\x8a\x69\xd8\x68\xab\x00\x58\x69\xd7\x39\xbd\x0e\xc2\xcc\xfd\x12\x56\x4b\x29\x5c\xe8\x40\xa0\x65\xd6\x8f\xb2\x09\x53\x66\x1d\x2f\xdd\x0b\xef\x76\x19\x0e\x2e\x33\xb9\x72\xa8\x4a\xb9\x13\x40\x25\xa0\x52\x19\x78\x95\x7a\x5c\x18\x10\x5a\xea\x22\x24\x03\xb7\x9f\x45\x0d\x2c\x0c\xba\x56\xb2\xaa\xd6\xec\xaa\x2c\xd7\x1a\x1e\xb7\x2f\xcc\x8c\x4e\xa2\xd9\xb7\x44\xb3\x8e\x94\x4b\xd1\xb5\x9a\x3a\x89\xa8\xc0\xf7\xd8\x5a\xda\x16\x77\xa1\x3c\x41\x48\xe9\xb2\x57\xa4\x2d\xc8\x0b\x57\x3f\x65\xfe\x5f\x65\x0e\xee\x88\x3a\x24\xd5\xba\x5c\xd5\xe3\xc0\x05\x05\x1e\xa8\x24\x94\x06\x6c\x5c\x0d\x8c\xd6\x84\x41\x1a\x2b\xff\xf0\xca\x38\xb0\x20\x67\x7c\xc1\x73\xf4\x4c\xe5\x1c\x29\x3e\x62\x10\x27\xe8\xbd\x01\x8a\x23\xf3\x62\x0f\xde\x02\x74\x09\x99\x4f\x52\xaa\x10\x0e\x66\x58\x32\x49\xf6\xec\x79\xd6\x1f\xc0\x8c\x6b\xe1\x0b\xea\x90\x8f\xd6\x1c\x9a\x2d\xec\x6b\x45\x23\xbb\x22\x14\x04\x31\xcd\x2f\x8b\x51\x10\x68\x3c\xa1\x86\x59\x7b\xe6\x3a\x90\x02\x54\x6f\x6d\xb0\x58\xac\x00\x98\x4b\xa5\xaa\xdc\x2d\xd6\xd0\xb3\x06\xa0\xa0\xd8\x88\x56\x08\x05\xc5\xeb\xfb\x80\x28\x68\xaa\xfe\xb6\x2a\x65\xd5\x7d\xd2\x60\xff\x76\xa9\xd0\x8a\xbb\xc0\xf9\x50\x52\xba\x69\x94\x94\x0e\x0d\x2c\xae\x48\x08\xd8\x3e\xbc\xbc\x29\x7a\x19\xce\x78\xc4\x59\x4c\x37\x88\x17\x86\x0a\x5f\x93\x7c\xda\x67\x8b\xf5\xd8\x43\x69\x18\xa8\x6f\xed\x25\x81\x24\x52\x8f\x7a\xb9\x56\x65\x2d\xda\x0f\x29\x3d\x48\x09\x2d\xc3\x01\x91\xea\xed\xc4\xb8\x82\xbc\x9f\x08\xaa\xf7\x2f\xe5\xa2\x8e\x58\xbd\x94\xb4\x9a\x6f\xef\x9a\x46\xb2\x57\xe0\xbb\x80\x47\xb8\x59\x58\xab\xdb\x4f\x3e\x10\xcf\x28\xf4\xb6\x0e\x7f\x55\x0c\x2e\xdc\x90\x4d\x01\x54\x5a\x38\xda\x26\xd7\xbc\x86\x73\xd4\x0f\x7d\x29\xc9\x63\xed\xd9\xb5\x82\xc1\x1e\xd5\xcf\xa5\x1b\xa4\x75\x4e\x8c\x97\xe3\xed\x8d\x61\x83\xba\x63\x6f\x6b\xa8\xb8\x93\xb7\x29\x30\x0c\x80\xb2\x7b\x83\xc1\xad\x22\x53\xe8\xc6\x7b\xe0\x82\xb6\x63\xc7\x26\x1c\xc7\x83\xb3\x57\xf6\xa4\x34\x63\x13\x52\xf9\x22\xb3\xde\xb4\x2a\x74\xe0\x13\x15\x36\x26\x99\x86\xd6\x0d\x28\x07\x6d\x43\x39\x2b\xb7\x85\x17\x40\x73\x16\x13\xc1\x08\x56\xf3\xd7\xcb\x04\x39\xdb\xd5\x84\x1e\x8c\xef\x65\xb3\x42\xec\x48\x71\x39\x39\x64\x97\xe1\x96\xcb\xe3\xaf\x1d\xa7\x7e\xbd\x8d\x35\xcb\x06\x48\xf8\x02\xd1\x4b\xea\x6d\x8d\x69\x33\xc0\x1f\xda\x84\x4a\x77\x4a\x16\xa9\x57\x39\x5f\x26\x6d\xa6\xc6\x36\xb5\x94\x30\xa3\x4f\x7b\x58\x56\x7b\xcd\x92\x7c\x11\xf9\x29\x2f\x9f\x32\xb1\xaa\x80\x77\x1e\x64\x51\x40\x15\x75\x85\x29\xb3\xdc\x6b\x55\xe2\x84\x96\x7b\x53\x5c\x97\x2b\x71\xf0\x59\x38\x5f\x7c\x12\x4e\x97\x92\xd1\xa5\x64\xd4\xec\x51\x97\x92\x81\xd0\xa1\xa5\x64\xac\x53\x41\x57\x19\x69\xbd\xdf\x10\x0a\xad\x96\xaa\x1b\x99\xfd\x5d\xa3\x47\x6e\x9f\x76\xe0\xec\x9c\x61\xcc\x96\xfd\xc5\xfe\x50\x1b\xb6\xb5\xf4\x59\x75\xb6\xa1\xcd\x95\x2d\xaa\xae\x0b\x2c\xe2\xc4\x42\x10\xda\xa0\xea\xb2\x8d\x6c\x95\x39\x77\xc4\xbe\xe7\xcf\xe4\x89\x88\x1e\xc2\x0a\xa5\x1c\x70\xad\x8a\x18\x1e\x38\x08\x25\x34\x7b\x13\xab\x81\xd1\x15\x4e\x49\x6c\x8a\x5d\x06\xa1\x97\xd6\xa8\x6c\xdd\xc1\x75\x48\xbb\x00\x1a\x6b\xb6\xc1\xc5\x76\x8c\x98\x09\x87\x34\x21\x78\x20\x2b\x50\x37\x31\x20\x98\xdf\x79\x67\xf5\xef\x8e\xd1\xbd\xbe\x9f\xa8\x2c\x8f\x37\x00\xde\x6b\x1a\xdb\x88\xcd\x04\xcf\x33\x6f\xe7\xe3\x13\x53\xf5\xd8\x44\x68\x2d\x3b\xab\x61\x30\xce\x53\x1d\xe1\x58\xeb\xe2\xab\x09\xe7\x4d\x22\x65\xb7\x82\x59\x0a\x09\x48\x1f\x43\x1f\xfe\x67\xc3\xf1\x8d\x8f\x39\x00\x97\x59\x85\xc1\xff\x42\x0e\xf0\x73\x22\xc1\x2a\xe4\x3d\x03\xa5\x5c\xf7\x32\x9e\x42\xed\x38\x57\xd9\x6d\xbd\x6f\xc5\xf9\x1f\xea\xa1\x1a\x8a\xce\x6d\x5c\x9a\x49\xa4\xb5\xf7\xc4\x8b\x59\x74\x5b\x47\xf8\x36\xf1\x8b\x9b\x5c\x64\x1c\x24\xb1\x64\xe1\xa0\x25\x2c\xc8\x5f\xc6\xb3\xdc\xc4\xde\xd1\x30\x14\xab\x96\xb2\xa9\x54\x97\x58\x45\x73\xcd\xb9\x0b\x54\xb6\x3d\xc5\x24\x16\x5c\xf9\x65\xad\xbc\x35\x33\x38\x0b\x7b\x6f\x70\x7b\xac\xa2\x9e\x20\xc6\xd0\x07\x72\x7a\x49\x22\xd5\xfd\x19\xd7\xa0\xad\x65\x1e\xd8\x45\xdd\x27\xf6\x89\x9e\xe8\x3a\x2a\x5a\x37\xfe\x76\xb4\x55\x2e\xb6\xb6\xf7\x68\xc7\x1d\x60\x6e\xce\x2d\xa8\x58\xf1\xa2\x2d\xce\xdb\x10\xa2\x20\xe8\x76\x99\x4a\xb6\x40\xc2\x93\x16\x47\xbc\xc5\x35\xc5\x99\x56\x22\x14\xd7\xb7\xa4\x98\x19\x39\xd6\xc4\xf2\x22\x8c\x72\x41\xdd\xd9\xaf\xe4\xad\x37\x53\x07\x58\x28\x4f\xc2\x62\x5a\x11\x0e\xea\x0c\x9a\xa0\x04\x1c\xa9\x1c\xfb\xe0\x49\xa0\x09\x57\xff\xde\xe4\xe8\x3b\xe7\xbf\x70\xe2\x5d\xcd\x9e\xae\x25\xec\x1d\x76\x19\xd7\x61\x30\xb6\x3a\x69\x94\xcd\x02\x00\xc7\x7a\x2b\x71\x9b\xb2\x17\xb5\x5f\xb6\x2b\xdd\x51\xfb\xa9\x93\x7d\xb6\xf9\x76\x05\xc0\xd4\xd6\xf1\xe3\xa5\x58\x7c\x1b\xac\x6b\xa5\xa7\x10\x5a\xd3\xda\xef\x00\x78\x98\x42\x30\x01\xb6\xd2\xd4\x7f\xf9\xbf\x4c\x99\x34\xb3\x34\xff\x85\xb8\x18\x31\xf3\x7b\xcf\x97\x28\xd1\x2f\x14\xd8\xbf\x38\x25\x05\x8c\xa7\x28\x03\xfe\x01\xec\x89\x05\x6c\x33\x38\xcf\xbe\x42\x83\x1e\xc3\x63\x3e\x21\x82\x11\x3d\x34\x07\x90\xe0\x99\x59\x8a\x19\x9e\x01\xaa\x74\x0f\xa2\xf7\x40\x5c\x2d\x54\x11\x43\xd2\xa6\xd4\x25\x70\x2b\xcd\x2c\x6d\x4e\x70\x51\xf2\x19\xfa\x34\xa2\xac\x05\xb5\x2d\x42\x40\xea\xa9\xff\xd6\xf6\xbf\x9d\xc4\x7e\xdf\xbf\xfb\x61\x7c\x3b\xb8\xbb\x7e\xb8\x3d\x2b\x89\xed\x67\x17\x0f\x77\xf7\x83\xdb\xda\x67\x45\x3e\xed\x5f\x1f\x06\x0f\x0d\x8f\x5c\x03\x17\xfd\xef\x06\xa5\xfa\xe9\x7f\x7d\xe8\x5f\x0c\xef\x7f\x1e\x5f\x7f\x1c\xdf\x0d\x6e\x7f\x1c\x9e\x0d\xc6\x77\x37\x83\xb3\xe1\xc7\xe1\x59\x5f\x7f\x19\xbe\x7b\x73\xf1\xf0\x69\x78\x35\x76\xa1\xd1\xe1\xa3\x9f\xae\x6f\x7f\xf8\x78\x71\xfd\xd3\x38\xe8\xf2\xfa\xea\xe3\xf0\x53\xdd\x2c\xfa\x77\x77\xc3\x4f\x57\x97\x83\xab\xd5\x75\xda\xeb\x57\xa3\xb1\x04\x74\x70\x91\x05\x46\xa3\x40\x4c\x9a\x2c\x2c\x69\xd3\x5f\xc1\x77\x71\x63\xe8\xf1\xa8\xe7\xfe\x32\x55\xd5\x8f\x34\x0b\x74\x7e\xb1\x82\x7b\x8c\x98\x77\xae\xfa\x4b\x55\xe1\x99\x74\xe9\xd1\xa5\xd1\x9e\xa2\x3e\x9c\x15\x50\x18\x4a\x9d\x42\xf6\x85\x1f\xa9\x73\xc7\x03\x1d\x26\x34\xa5\xe0\x99\x47\x47\xa8\xba\xe1\xe5\x06\xed\x9c\x60\x08\xd6\x6f\x17\xaf\x3a\x0d\xb2\x9a\x79\x0d\x94\x72\x8a\x1c\x87\x26\xc6\x9c\x60\xf0\x71\x17\x0c\xa7\x34\xaa\xa6\x89\x00\x44\x2c\x2a\xe0\x50\xaa\x2d\x96\x08\xac\xdc\xf2\x9c\xa0\x1f\xfe\x52\x0c\x0a\x3c\x18\x56\xf3\xce\x97\x8a\x29\xda\x07\x22\x37\xab\xba\x8e\x3c\x4b\x3d\xb9\x63\x6e\x4d\xcb\x70\x6e\x6d\xd1\x76\x70\x37\xe5\x2c\x80\x44\x2b\xf9\x9e\xf4\xf1\x36\x33\xaa\xd0\xf8\x29\xba\x03\x38\x16\x59\xa8\xee\x7a\x17\xb3\x24\x9f\x51\x86\x68\x9a\x25\xc0\x63\x8c\x3e\x3f\x21\x73\xfc\x44\xb9\xab\x5c\x62\x0a\xbc\xc0\x3a\x5a\xd1\x0a\x1d\xa1\xc6\x83\x72\x8a\xfa\x71\x2c\xcb\x0c\xae\x44\x39\x8e\x65\x1e\x95\x87\x1d\xa2\x98\xb1\xd8\xb3\xcd\x0a\x1d\x15\x47\x0e\x56\x6c\xff\x80\x33\xcb\xec\xb0\x7c\xf7\xee\x70\xfd\xeb\x15\x1c\x3b\x52\x1e\x6f\x25\x0c\xdc\x63\xf9\xe8\x58\xf3\x3a\x81\xc0\x41\xff\xec\xd6\xa3\xc5\x00\x6a\xdb\xa9\x5f\xd9\x31\x1c\xb4\xed\xfa\x6c\x44\xae\x5e\xd3\xa5\x9b\x71\x52\xa9\xda\xd6\xba\xbf\x52\xd5\xb7\xda\xce\xf6\xea\xed\xa9\x97\xc6\xe0\x48\x8e\x3d\xfd\x6f\x30\x8f\x1b\xf8\xf4\xda\x7f\xb9\x52\x64\x1b\x07\xeb\xb6\xa9\x0f\x68\x29\x91\xd8\xfa\x81\x56\xd2\xe1\x9e\x20\xa8\xda\x0b\x83\x50\x73\x83\x46\xe0\xee\xc3\x94\xd9\x4a\x4c\xc4\xfb\xa3\x5c\xed\x71\x7d\x8e\x7d\x75\x40\x3c\xe1\x4f\x25\xe5\x32\x25\x52\xe2\x06\x50\x95\xc0\x24\xb6\x0b\x63\xf0\x27\xd4\x7e\xd8\x92\x9e\xdc\x99\xbc\xd7\x5f\xad\x32\xfa\xdc\x86\x9a\xb1\x9b\xa8\x16\x58\x63\x17\x0d\x8c\xae\x4d\x4e\xa0\xe6\x2f\xbd\x22\x98\x86\x8b\x20\xc6\xa8\xc9\xfd\xd3\xd2\xac\x56\x5d\xb0\xda\x02\x5b\xa1\x0b\x6f\xf3\x18\x9c\xa0\xf5\xad\x51\xbb\xad\x5f\x05\x97\xd7\x67\x03\xaa\x2b\xf9\x3b\xc3\xe2\xe3\x11\x4f\x53\x23\x17\x94\x6c\xa9\x3d\x84\x4d\x2a\x66\x21\x4d\xc9\x3c\x9a\x1b\x2f\x93\xbe\x32\x7a\x23\xf6\x1c\x6c\x48\x29\x58\xb9\x1f\xb6\x04\x88\xa7\x9f\xf5\x71\xa3\x4f\xa5\x10\x70\x10\x19\x29\xc4\x23\x07\x84\x60\x1c\x82\x45\xe5\xb0\x35\x04\x1e\xec\xd7\x0e\xa4\xbe\x45\x99\xc8\xca\xfa\x36\x15\x8b\xf4\x73\x0b\x6a\x34\xee\xa0\x29\xb7\x1d\x42\x50\x26\xb2\x6e\x04\x7b\xa8\x12\xf9\xaa\x10\xe4\x3e\xa5\xd4\x64\x20\xa7\x13\x8b\xa3\xa1\xa7\xeb\x56\xfb\xf7\x6e\x46\xbf\x37\x7e\x87\xbc\x01\x78\x25\x68\xcd\xa3\x90\xa3\x23\x2d\xb3\x3a\x40\x00\x1b\x88\x21\xd1\x91\x41\x36\xfc\x0a\xa2\x41\xfb\x37\xc3\xaf\x7a\xe8\xab\x30\x23\xee\xab\xad\x0e\xa0\x1d\xb7\xad\x14\x09\xda\x54\x29\x2d\xa2\x7c\xec\x60\xaf\x2a\x27\xd1\xee\x99\x3d\x88\xa8\xe9\x1c\xea\x2f\x4b\xdf\x80\x73\x1a\x2a\x1f\x1a\xff\xad\x0f\xca\xb6\x2e\x20\x23\xe3\x52\x59\xb3\x76\xf1\x88\x4d\x16\x55\x27\x4f\xcf\x7b\x79\x5a\x9f\xd2\x9d\xab\xf9\xe9\xf6\x96\x53\xa8\xf7\x1c\x2c\xbc\xfa\x3e\x58\x93\x94\xdd\xf7\x25\x67\x0a\x2e\xd6\x14\xa5\xd0\x45\xd9\xd7\xcd\xaa\x64\x2f\x73\x8b\x59\xbb\x29\xeb\xe4\x9f\xf7\x46\x6e\x2d\x42\xd3\xfb\x75\x2b\x62\xb3\x12\x1a\x84\xeb\x8e\xca\x5e\x96\xca\xf6\x91\x95\x51\x1e\xdc\xe6\x17\xe8\x99\x91\xe3\x82\x66\x9c\xc1\x55\x2b\x13\x9e\xc1\x97\x4a\x3e\xae\xaf\x95\xbc\xa1\xcf\x37\x58\x93\xf5\x4e\xdf\x3b\x13\x38\x60\xdc\xae\xcb\x63\xad\x0e\xb5\xaf\x6c\xa1\x24\x4e\x4d\x06\xa6\xa2\x29\xe9\x99\xca\x5c\x45\xb0\x83\x3d\xaf\x40\x6e\x26\x46\x69\x4e\xa8\x70\x9d\x58\x1c\xc4\x8d\x52\xf6\x37\x94\xc6\x9b\x68\x64\x87\x48\x93\xab\xfe\xe5\xe0\x7c\x3c\xb8\xba\x1f\xde\xff\x5c\x83\x71\x59\x7e\xec\x60\x2e\x83\x17\xee\x7e\xbe\xbb\x1f\x5c\x8e\x3f\x0d\xae\x06\xb7\xfd\xfb\x35\x10\x98\xab\x3a\x6b\x82\x57\xcc\x65\x9d\xfa\xb6\x09\xc4\xa2\x33\xf3\xd6\xf4\xbe\x0c\x84\x19\x74\x42\x49\x03\x18\xa6\x81\x27\x60\x31\x11\x28\x26\x4f\x24\xe1\x59\x61\x56\xad\x5d\xb0\x00\x25\xb3\xa6\xfd\x55\x48\x99\xd0\x66\x75\x8d\x4f\x91\x29\xf3\x17\x54\x3a\xf6\x0d\x82\xc8\x87\x05\x61\x5f\x29\x44\x3e\x67\x09\x8d\xa8\x0a\xd2\x17\xb9\xb0\xee\x15\xe3\x3e\x84\xe8\xd4\x35\xc4\xb5\xb7\x68\x94\xbd\xeb\xfc\xa1\x27\x7d\x59\xdb\xf7\x27\xca\xa3\xb6\xad\x2d\x72\xb4\x07\xc5\xbe\xc1\x69\xbc\x04\x2a\xb7\xc5\xe8\x5e\xc2\x3c\xb0\x9c\xa3\x63\x53\x10\x1b\x00\xe7\xea\x07\xb9\xfe\x36\x5c\x15\x27\x53\x3a\xd7\xab\x03\x65\xda\x51\xea\x1b\x87\xbb\x94\x6a\xaa\xee\x01\x1d\xc4\xc6\xae\x6f\x18\xb0\xb0\x54\xd3\x86\x99\x98\x53\x8c\x04\x49\xb9\xd2\x0a\x98\x89\x08\xe8\x69\xa1\x8a\xe2\x84\xfe\x0a\x38\x5a\x82\x1c\x07\x11\x14\x0e\x7d\xac\x70\x1f\x58\x8c\x8b\xe3\x11\x3b\x1f\xdc\xdc\x0e\xce\x34\x43\x3a\x46\x0f\x12\x20\xb2\x4a\x53\x3f\xb7\xe4\x6d\xc4\xb1\x30\x92\x81\x32\xa9\x08\x6e\x0a\x06\x23\x42\x70\xd1\x9e\x3f\xf8\xfe\x06\xf0\x5d\x3d\x79\xc3\xb3\x92\x6d\xca\x19\x00\xae\x1a\x0b\x62\x07\x39\x03\x7b\xcf\xc9\xba\xc5\xcf\xa5\x15\x09\x21\x42\x40\x12\x29\xaf\xfa\x0b\xae\x36\x80\x8c\xb6\x9f\x5f\xa9\xcf\x1b\xf8\x76\xd5\x3c\xef\x21\xc4\x4e\xaa\x02\xb1\xd4\x80\x9a\xfa\xca\x3c\x95\x79\x36\x8a\x8a\xe2\x2d\xe0\x44\x2a\xa4\x3f\x21\x33\xcc\x90\xc8\x19\xab\x40\xd8\x86\x96\xb6\xe5\xa0\x99\x4d\x8f\xaa\x5e\x33\x9c\xf2\x9c\x99\xd2\xb2\x7a\x54\x35\x83\x91\x19\x61\x6a\xcd\x60\xde\x0a\x2c\xa6\x32\xd4\xc3\xc5\x8b\xa9\x19\x68\x13\x64\x4c\x9d\x3f\x09\xaa\x6e\x6f\x76\x2d\xbb\xa0\xbc\x92\x53\x49\x1f\x2a\x7f\x3f\xd7\x6b\xd9\x58\x3e\xee\xdc\xdd\x3d\x96\x8f\xeb\xbb\x8a\x49\xf4\xb8\xe9\x65\x53\xcd\xcc\x4c\x6c\xd1\xf2\x25\x63\xdf\x42\x3f\xb5\xe5\x63\xa0\x56\x7d\xf4\x88\xbe\xbf\xbf\xbc\x40\x53\xaa\xe5\x5e\x7d\xad\x5c\x61\x2d\x63\x3f\x88\xc4\xd9\x85\xad\x6d\x35\x17\x89\xbf\x7b\x61\xe3\x9d\x28\x15\x48\x09\xfa\x46\xc3\x33\xe2\x8c\xbd\xc2\x22\x02\x56\xca\xc7\x08\xcc\x62\x9e\x9a\x79\x9c\xc8\x7c\x3a\xa5\x9f\x8f\x15\x16\xdf\x34\xac\x87\x89\xaa\x18\xff\x9d\x4f\xc6\x7a\x44\x3b\x5e\xc4\x75\xcd\x21\x5b\x4b\xdb\x2f\x9b\x9d\xd9\xb9\x79\xf7\xff\xf2\x09\x64\xbb\x43\xc2\xbe\xf3\xce\xd9\x48\x05\xfb\x8a\xa3\xa4\xa2\xb8\x74\x09\x88\x25\xe2\x42\x10\x9b\x24\x6f\xea\x9f\x66\x58\x28\x0a\xd6\x5a\x07\xe4\x52\x42\xf0\x2f\xb6\x28\xac\xf6\x3e\xc7\x05\x5a\xf6\x84\x10\x70\xf0\x64\x34\xd9\x4c\xe9\x3d\x2b\xf9\x26\x2b\x27\xd0\x46\x9e\x5a\x6c\x4f\x30\xc8\xac\x15\xb1\x06\x4f\x84\xa9\xbd\xe8\x27\xd0\x44\x4d\xda\x7e\x3b\x2f\x83\x29\x43\x3a\x3c\x2f\x2e\x37\x17\xd2\x1b\x46\x35\x29\x81\xe1\x9e\xb7\x89\x52\xd6\xa5\xde\xe4\xe8\x7f\x6a\xed\x3b\x86\x57\x97\xd7\x65\x4d\x68\xbc\x5d\xed\xa2\xca\x7b\x11\xd6\xea\xca\x0f\x6c\x09\x36\x24\x89\xb1\x62\x04\x20\x17\x56\x39\xad\xee\xb9\xe9\x53\xd3\x56\xa5\xcb\xb5\x5b\xbe\x05\xb2\x4e\xa9\x99\x4f\x04\x52\x3a\xf7\x11\x88\xbe\x49\xee\x3e\x0c\xe4\x41\x24\x10\x42\xbd\xd2\x8a\x65\x4a\xa1\x6b\xce\xe7\x25\x3b\xdc\x42\x46\x37\x83\xd1\x42\x23\xc9\x04\x89\xf4\x55\x76\x8a\x6e\x12\xa2\x25\xaf\x5c\x4b\x5f\x79\x92\x38\x14\xb2\xd5\xd2\xe1\x46\xc8\x79\x2f\x3e\xaf\x40\xf7\x58\x31\x31\x87\xc2\xb7\x7a\x66\xc1\x1a\xec\x1f\x71\x21\x58\x5f\x30\x21\x83\x21\xb1\xac\x45\x02\x87\x5f\x98\xb8\x59\x30\x25\xe1\xd2\x45\x46\x7f\xd5\xec\x57\x10\x39\xe7\x8d\x49\x8e\xe1\x6c\x5f\x66\x0e\x6e\x29\x5f\x70\x12\xee\x3e\x6c\x8a\xab\x6e\x21\xd7\x54\xee\xc0\x92\x88\xb3\x6a\x8a\xbe\x42\x85\x8f\xfe\xb0\x98\xb0\xf6\x6e\xb5\x43\x83\x5b\xb2\x30\xb5\x85\xf8\x6c\x85\xeb\xa2\x50\x66\x16\xc6\xf7\xea\x3f\x2f\x0c\xc8\x45\x4a\x00\x55\xb2\xa8\x8c\x87\xf4\x5d\xdb\xb4\xc5\x7a\x9e\xe3\x5c\x6c\x04\x49\x51\x20\xab\x6f\xc2\xb9\x6d\x32\x4a\x31\x2c\xbd\x08\xf5\xec\xd2\x16\xbc\x00\x31\xda\x86\x1a\xc9\x12\x5a\x9d\x25\x1b\xb3\x8c\xb5\x2a\x5e\x33\x53\xde\xd5\xad\x06\x52\x72\x21\xca\xbc\x94\x77\xad\x44\x81\xa5\x09\x74\xf8\x67\x9b\xe3\x9f\xd9\xea\x27\x9e\xf6\x00\xad\x50\x09\x48\xfc\x2f\x1c\x68\x55\xc1\xc1\x1a\xbd\xd7\x65\x3e\x95\x76\xa7\x55\x9a\x53\xe9\x0b\xcd\x4b\xce\x77\xf4\xc0\xe9\xc9\x2c\xc6\x90\x38\xba\x4b\x14\x4e\x69\xfe\xc6\x7b\x00\x6d\x92\x18\x19\xf4\x02\x83\xce\x6c\xd7\xce\x7b\x4e\x32\x2c\x08\x53\x23\x76\xab\x47\x61\xbe\x28\x22\x31\x5c\x1c\x8e\x43\xcc\x87\xba\xba\x53\x84\xed\x57\xb0\xe8\x4d\x81\x70\x72\x6c\x5e\x02\xd5\xf4\x05\x93\xec\xbf\x33\xef\x18\xcc\x03\x8b\xf9\xa3\xa7\x4a\xa7\x85\x1a\xaf\x05\xc8\x68\x4e\x01\x72\x20\x26\xd2\x5e\x48\x54\x59\x4c\x09\x2f\x7e\xe7\xc4\x61\x44\xc3\x67\x9e\x7f\xd5\x31\x6c\x67\x28\x60\xce\x40\x27\x47\x2c\xe8\x63\x05\xa4\xa8\x51\xd6\xb7\x54\x25\x60\x9f\x69\xec\x1d\x5f\xf0\x4f\xb3\x43\x5c\xd0\x19\x65\x41\x61\x27\x3b\xbd\x14\x67\x60\xde\x35\x67\x90\x4f\xfd\x9d\x76\x6f\xb3\x0c\x8e\x61\xc4\xff\xf3\xdf\x7f\x3b\xa6\x4d\xde\x0f\x39\xb6\x2b\x70\x08\x3b\xb9\xd9\xb6\x84\x3b\x1f\xa0\x88\x34\xa0\x53\x04\x3a\xad\x2c\x65\x4e\x14\xbf\xda\xcb\x4d\x13\x0d\x57\x73\xe3\xee\x2d\x93\x3b\xf8\x46\x44\xbe\xe2\x6c\x98\x2b\xe6\x6d\xd7\x92\x4a\xc8\x0e\xd0\x23\x31\x27\xd9\x1b\x08\xc2\xa2\xe9\x4b\x66\x9a\x11\x2b\x3e\x91\x06\x0f\xc5\x40\xd0\x9a\x1f\x8a\xd5\x69\xb9\x30\xab\x78\x7f\x11\x29\x51\xb8\xc3\x83\x68\x64\x57\xe2\xc3\x44\x91\xea\xf6\x2b\x37\x6d\x85\x73\x07\x58\x8c\xbb\x44\x6d\xce\xb1\x7c\xb9\xd0\x9c\xda\xd2\x54\xc6\x9a\x1e\x0a\x0f\xeb\x82\x74\xcc\x20\x4d\xb6\xa7\xde\x90\x5c\x12\x61\x38\x9d\x87\xc3\xb2\x94\x10\x22\x4d\x42\x8c\xe6\x1a\x5f\x23\x49\x31\xdd\x28\x9f\x40\xbf\x5f\x8f\x83\x59\x72\x36\xe0\x19\x11\xe3\x38\x57\x4b\xc7\x62\x55\x8c\xbf\xfe\xe8\x3c\x57\x8b\xf5\xed\xcb\x04\x2f\x97\xe6\x59\x85\x3d\xaa\xdf\x6f\x68\x76\xbd\xc4\x1c\x84\xf8\x94\xa5\xe6\x06\x64\x4f\x52\x41\xf6\xb4\x31\xa7\x25\x13\x09\xdc\xc0\x4c\x01\xa4\x5e\xa1\x49\xd9\x2b\xda\xe0\x8f\xc3\xc8\xd1\x24\x2f\x4c\x4a\xbe\xa2\x43\x7c\x3c\x62\x1f\x4d\x49\x14\xd0\xf2\xcc\x00\x22\x48\xf8\x21\x9f\x33\x2e\x49\x29\x03\xad\xa6\x4a\x83\xcd\x20\xb5\xc3\xa8\x17\xd6\x8b\x8f\x76\x97\xd5\xdf\x1c\xa3\x75\x79\xc3\x97\xa7\x5c\x4f\x81\x3b\x89\x83\x11\xcd\xa8\xa6\x9d\x71\xed\x49\x7b\xb9\x4a\xc1\x45\x4c\x17\xe0\x60\xa9\x64\xd1\x43\x7e\x7a\x15\x82\x48\xc8\x13\x01\x73\x3a\x8c\x31\xac\xc5\x51\xb6\xeb\x35\xb0\x93\x75\x07\xa8\x48\xff\x04\xb6\x80\xe2\xea\x08\xca\x49\x72\x75\xb4\x58\x4e\xff\xd9\x39\x53\xad\x2e\x30\x65\x03\xf1\xbc\x1f\xd6\x24\x59\x10\x85\xc8\x67\x45\x6c\xd5\xd2\x7b\x97\x4b\xb8\x9c\x7e\x80\xea\xd3\xa1\x9a\x65\xc7\x17\xaf\x1f\xdd\x77\x19\xe4\x2e\x59\x32\x76\x57\xbe\x4d\x1e\x9c\x63\x16\xdb\x8c\x58\xab\x64\x68\x61\x0b\x66\x67\x8c\x6e\x3e\x57\xc0\xe6\x75\x06\x60\xee\xa6\x4d\x83\x3a\x0f\x17\x99\x53\x18\xb5\xca\x02\xe1\x15\x5c\x68\xc9\x3d\x67\x8a\x26\x9a\x38\xec\x18\x24\x9a\x42\x64\x9c\x05\x2a\x84\xc8\xf6\x26\x2c\x3c\x2a\x25\x65\xb3\xb1\x5d\x49\x97\xdc\xd9\xee\x62\x28\xd3\xd4\xa5\x69\xca\xfc\xf8\x9d\x6b\x68\xb5\x51\xdd\x90\x35\xe0\x94\xb9\xb4\x52\xd0\x38\x18\x77\x93\xb1\x00\x73\x2e\x1b\x75\x4c\x63\xb3\x14\xd4\x14\xc7\x86\x89\x6e\x62\x77\x07\x99\x6e\x19\xc7\xa1\xb8\x42\xa4\x4d\x15\x35\x09\x60\x10\xa9\xaf\x1a\x72\x61\x65\x63\x0e\xec\x90\x79\x11\xcd\x96\xe6\xf2\x99\xfe\x95\x74\x5a\xec\xba\xb3\xe9\x08\x38\x49\x26\x38\x7a\xf4\x5a\x98\xb7\x45\x70\xe1\x4a\x1b\x68\xb9\x12\x6a\xb7\x19\xe2\xd2\x03\x8d\x40\xba\x09\xbd\x85\x06\xc9\xc7\x0e\xbb\xe8\xdc\xac\x9a\x85\x48\x33\xd0\x4d\x66\xf4\x26\xb7\x21\x26\x59\xc2\x17\x69\xc3\x7d\x56\x4d\x21\xdc\x25\x52\xa7\x29\x83\x71\xaf\x57\x59\x85\xe9\x6d\x7c\x99\x2d\xe5\x23\xed\x01\x57\x6a\x03\x2e\xf9\x29\xe1\x13\x30\xa9\x5a\xf3\x83\xcb\xb1\x09\x52\x3d\xaa\xe7\x79\xd3\xcc\x9f\xea\x89\xa4\x32\x4b\xb4\x32\xd3\xdc\x83\xc9\x39\x79\xd9\x7d\x33\x18\x05\xeb\xad\x83\xed\xa3\xb5\x6b\x3f\x7f\x09\x04\xe3\x0b\x27\x09\x98\x77\x0d\xff\xaa\x58\xd9\x4c\xb2\xdf\xb1\x71\x52\x2b\x3e\x62\x0a\xcf\xdc\xe6\x5a\xe1\x92\x3f\x33\x22\xe4\x9c\x66\xa5\x9a\x8e\x3b\x87\x87\x5b\x8a\xb6\xff\x31\xc1\xd0\x1b\xf0\x4e\x9e\x1d\x19\x84\x12\x4d\x1f\x32\xc3\x51\x61\x15\x8d\x12\x2c\x25\x9d\x2e\x02\x60\x11\x1f\x69\x0b\xe9\x5b\x65\x33\x42\x50\x46\xad\x8e\xd1\x98\xf1\xed\x27\xb3\x7e\xf7\xac\xc2\x87\xf2\xf1\xa3\x71\x88\xe0\xa6\xef\x93\x65\x14\x19\x77\x53\x5b\x34\x99\x46\x24\x5a\x03\x21\xb0\x5d\x26\xfc\x4a\xf0\x9f\x66\x33\x42\x21\x4c\xda\x61\x5b\x45\xc6\x03\x7e\x84\x60\x38\xaa\x94\x4a\x09\x9b\xaf\x15\x27\x67\x17\xd6\xc4\xe9\xc1\x42\x00\x53\xa1\xf8\xb8\x87\xe4\x4e\x20\x5b\x6d\xe8\xe2\x9c\x24\x64\x2f\x11\xd7\x5b\x10\x49\x35\x9c\x21\x20\x8f\x95\xa4\x51\x94\x19\x58\x6f\x5c\xd8\x22\x10\xbc\x01\xaa\xa7\x7e\xe8\x3f\x99\x81\xda\x58\xf0\xba\x5d\x04\xc3\x20\xac\x72\x5b\xdd\xa5\x0e\xf3\xcf\xb4\x60\x49\xae\xe8\xa6\x44\x57\x45\xa7\x5e\x5e\x39\x44\x52\x7b\xe3\x90\xe9\xa5\x71\x7d\x22\x6d\xc2\x3b\xd6\x1e\x80\xad\x38\xd0\x32\x9f\x6e\x47\x17\xd6\x81\xaa\x38\x9a\x11\xc0\x64\xa1\x2c\xa6\x4f\x34\xce\x71\xf2\xae\x68\x62\x6f\x09\x1f\x7b\x5a\xfd\xfa\x43\xbe\xd9\xa9\xbd\x23\x4a\xba\x2b\x61\x09\x46\xd1\x6e\xce\x01\x6e\xc1\x61\x1c\x4b\x23\xb8\x7e\xf1\x72\xcb\xce\x20\x09\x76\x64\x16\x2a\xe0\x37\x24\x50\x99\x39\xc6\xf6\x0b\x0f\x0b\x50\x02\xc4\xc2\x25\x10\x41\xb3\x46\x6f\xcf\xf5\xaa\xa4\xfd\xa5\x8b\x5e\x9b\xd3\x78\x75\x54\x05\x75\x77\xf2\xe0\x66\xf2\xa0\x03\xd9\x3c\xc0\xcb\xbf\xe9\x18\x1c\xe6\xfd\x73\x00\xc2\xe1\xd2\x95\xb8\x3f\x11\xf1\x1d\x91\xc9\x41\x48\x8a\x4b\x5b\xf1\x5a\xf2\xe2\x91\x43\x39\x2a\x30\x83\x0e\x77\x8b\x0e\xe3\x24\xdf\x5a\x37\xd0\xcb\x5d\xb0\xeb\xe9\x65\x2f\xf4\x01\x80\x9f\x18\xf2\xa2\x73\x5b\x41\x04\x0e\x6f\x10\x4b\xb7\xe4\x7b\x58\x13\xa5\x68\x87\xd7\x2a\x3e\x71\x69\x39\x5f\x62\x7b\x6d\x12\x5c\xeb\xcd\x7d\x49\x52\xdb\x74\x2c\xfb\xd0\x51\x5e\xd8\x8b\x63\xa9\x31\xf8\xa0\x0b\x16\x6e\x77\x8b\xd6\x40\xeb\xb8\x2d\xdb\xe7\x21\xab\x2b\xfb\xb6\x7b\x1a\xbf\xcb\xf1\x1b\x67\x82\x4c\xe9\xe7\xad\x44\xf1\x1b\xf8\xd4\xaa\x97\x7a\x99\x2b\x85\xe4\xc0\x3d\x03\x85\xe7\x82\x80\x46\xbb\xd2\xb6\xd8\xd4\x88\x15\x99\x91\x36\x2d\xf2\x91\x2c\x10\x17\xa5\x9f\xb6\x05\x81\xdc\x7f\xd1\x3b\xb3\xaf\x73\xa5\x32\x79\x7a\x72\x32\xa3\x6a\x9e\x4f\x8e\x23\x9e\x9a\x38\x7c\x2e\x66\xe6\x8f\x13\x2a\x65\x4e\xe4\xc9\x1f\xff\xf0\x87\x62\x8b\x27\x38\x7a\x9c\x19\x58\x9d\x65\xbf\x53\x79\xcb\x09\x96\xbb\x45\xf6\xb8\x14\xb6\x17\x4e\x65\x0e\xba\x71\xc9\xa3\xfa\x1b\xa9\x70\x9a\x85\xa1\xa0\xa6\x6c\x9c\x54\xb8\x28\x56\x01\x79\x89\x7a\x9a\x68\x8e\xb3\x8c\xb0\x66\xb3\x83\x49\x34\xdd\x81\xf5\xb8\x54\x55\x3b\x42\xf2\x39\x4b\x30\x2b\xc3\x2f\x40\xe5\x25\x41\x22\xc2\x94\x85\x06\x28\xca\x5d\x03\x35\x1a\x08\x20\xc3\xff\x37\x4b\x45\x84\x39\x52\x59\x94\x54\x73\xc3\xb1\xe5\x4d\x5d\xd1\x4b\x1c\x2c\x5d\xb5\xa4\x6c\xb1\x76\xc4\xad\xda\xaa\x24\xc5\xbb\xe5\xf2\xe7\x9b\x97\xb4\x11\x9c\x8d\xc9\x67\xcd\xe4\xe4\xb6\x80\x5d\x0f\x92\x48\xd4\xff\xe9\x0e\xc9\x05\x53\xf8\xf3\x29\xba\xa4\x0c\x04\xd8\xef\x79\x2e\x24\x3a\xc7\x8b\x23\x3e\x3d\x4a\x39\x53\x73\x74\x09\xff\x6b\x7f\x7a\x26\xe4\x11\xfd\x4c\xb0\xb0\xfc\xc1\x96\xa4\xf3\x35\xd8\x35\x09\x89\x9c\x49\x44\x9e\xf4\x09\xfd\xc3\x7f\xa2\xd4\xb4\x7c\x8a\xbe\x3d\xf9\xc3\x7f\xa2\xdf\xc1\xff\xff\xff\xd1\xef\x1a\x34\xfd\xcd\x20\xbf\xa0\x72\xf1\x6d\xd9\x9d\xdb\xab\xac\xd4\x16\x15\xe7\xcf\x04\x2f\x76\xaa\xb6\xe5\x47\x1a\x3d\xf2\xe9\x74\xac\x09\xc3\x24\xf2\x8d\xb1\x58\x82\x8b\xde\x12\x3f\x95\xda\xda\xd3\xa6\x92\x5d\x51\x43\xc6\x76\x6a\x10\x1f\x1c\xbb\x96\x79\x51\x79\x17\x82\x88\x4a\xd5\x8c\xa9\x84\xaf\x48\xac\xb9\xea\x26\xa7\xc3\x59\xf7\x5c\xf2\xb7\xb3\xe0\x84\x08\x29\x61\x3d\x75\x1f\xf8\x17\x46\xb1\x9a\x40\x1f\xbb\x90\xb5\xc7\x61\x29\xbc\xf6\x8b\x89\x99\x84\xa9\xbd\x55\xbc\xa4\x5c\xea\x7c\x7d\xa8\xe4\x1d\x17\x3b\xe9\x5b\x8f\xa4\x31\x95\x61\x4d\xbd\x24\x57\xc3\x37\xac\xec\x0f\x19\xe2\x5c\x78\x1c\x63\x63\x17\xb1\x55\x15\xd7\x5b\x31\xa9\x30\xc1\x65\xed\x0e\xbd\x9e\xfa\xb9\xff\x64\xdd\x30\x21\xd2\xcc\xbd\x5d\xd4\x8b\x83\xd1\x6a\x11\x49\xb3\xc4\x9a\x11\xd7\x80\x1d\xae\xdb\xd0\x3b\x8f\x6f\x01\x8d\x43\xd8\x23\xe4\x6f\x30\x27\xd9\x5a\x00\x81\xfa\xfd\xcc\x45\x44\xce\xf8\x6e\x61\xaf\x09\x65\x4b\xf1\xf2\xed\x4b\x11\xf9\xd5\xbb\xb0\x45\xa7\x1c\x1e\x30\x8f\x0b\x65\xc1\xb8\x05\x6c\x15\x8a\x00\x88\xb4\x3c\x1b\x00\xb4\xdb\x07\xd6\xe5\x52\x6d\x84\x1d\xb8\xb6\x31\x1c\x17\x0c\xcf\x95\xd6\xa8\x54\xd4\x10\x58\xf3\xc2\x15\xb1\x6b\x10\x54\xb4\xf3\x38\x82\x2a\x31\x45\xa4\x52\xa5\x1a\x3b\x36\xa5\x52\xc4\x96\x58\xa5\xa6\x60\x53\x0f\x09\x0c\x41\x99\x6a\xae\xdb\x93\x44\x1c\x4d\x71\x44\xd9\xac\x17\xc0\x54\x02\x64\x44\x78\x1d\xd4\x11\xe9\x3d\x96\x8f\xfb\x0d\x34\xdc\xb9\x80\x25\x8d\x8b\x22\x6a\x16\x58\xc6\x38\x36\xe8\x12\x46\x9f\xc2\xf2\xb1\x09\x59\x69\x09\xd6\x6d\xc5\xe8\xfc\x52\x38\x30\xb8\x55\xe3\x73\x29\xe8\x24\xd4\xa7\xa0\x66\x83\x2b\xa9\x6c\x41\x1e\x5d\xc6\x1f\xf6\x28\x2c\x55\x74\xd3\x15\xe3\x97\x73\x2e\xd4\x78\x4b\x5c\xd8\x6a\x1a\x3d\x23\x47\x09\x00\xba\xf0\x27\x22\x9e\x28\x79\x2e\xc3\xab\x6e\x42\x8b\xc6\x68\x16\x44\xd5\x01\xfe\x66\x9a\x71\x48\xa1\x99\xa2\x14\xb3\x85\x61\x94\x9a\xb9\x60\xf9\x28\x7d\x21\x57\x24\x53\x9c\x24\x3d\x24\x48\x2e\x4d\x81\x63\x49\x92\xe9\x91\x2b\x85\x11\xa3\x84\xcf\x68\x84\x13\x34\x49\x78\xf4\x28\x4d\x86\x1b\x9b\x19\x26\x95\x09\x1e\x11\x29\x03\xc9\xaa\xc8\x66\xb7\x39\x86\x50\xc5\x55\x11\x91\x52\x46\xa5\xa2\x91\x13\x99\x0a\x50\x0a\x53\x4b\x3c\xc2\x60\x12\x86\x8c\x4d\x18\xae\x96\xf4\x88\x01\xe7\xcc\x99\x2d\x9a\x04\xd7\xb5\xc5\xdc\x73\x41\xe2\x4d\x07\x68\x0f\x10\x82\x8e\x42\xc6\xaa\x7c\x20\xd7\x1c\xa9\x33\xfb\x19\x1c\xe3\x55\x24\x70\x5b\x3e\x51\x9e\x20\xfd\x49\x2b\xc1\x1a\x41\x4c\xb9\x0f\x81\x2f\x49\x2e\x3e\x32\xfc\xc0\x10\xcd\x60\xc8\x0d\x38\x66\xeb\x68\x5a\xaf\x22\x88\x3c\x50\xa7\xab\xea\x35\xa7\x2c\x4a\xf2\xd8\x57\x6a\xd4\x22\xc0\x93\x26\x12\xb7\x3c\x7a\xed\xb5\xa0\xd0\x43\x58\xa2\x67\x92\x24\xfa\xbf\x26\x02\xfe\xc8\x17\x4e\xd0\x2c\xd9\x14\xb7\x80\x4e\x1c\x97\x6e\xa2\xa8\x83\x43\xa7\xbc\xc1\x6a\x6e\x72\xfe\x53\xae\x4c\x91\x4c\x83\x4e\xe9\xec\x5b\x06\xce\x70\x92\xf0\x09\x9c\x74\x00\xae\x74\x79\xae\x41\x5a\x5d\x1e\x45\x84\xc4\x24\x46\x5f\x07\x07\xd7\xe3\x51\x7c\x53\x0f\xa3\x58\x5a\x91\x03\x00\xad\xac\x1a\xd6\x1a\xa1\x2b\xcb\x75\xde\x8e\xd1\x4d\x05\x98\x25\xac\xdf\x8e\xab\x30\x5d\xbd\xa5\x2d\x7c\x1b\xa0\xcb\xca\x24\x5e\x6e\x87\x36\x04\xba\x2c\xf5\xb9\x07\xa0\xcb\xca\x3c\x1b\x62\xf7\xf9\xec\x45\x73\x8e\xf5\xa4\x2e\x78\xfb\x44\x30\x03\x10\x66\xee\xce\x12\x09\xba\x03\xb9\xa8\x23\xc4\xc3\x02\xf1\xac\x54\x43\x7c\x5b\x10\xcf\xca\x60\x0e\x19\xc4\xb3\x32\xd4\xc3\x05\xf1\xac\x19\x68\x0b\x10\x4f\xe3\xdc\x1f\x6b\xa2\x6e\xc7\x14\x20\xb1\x65\x92\x4f\xef\x20\xd5\x7b\xe5\x18\xcf\x4c\xe0\x80\xb9\xc6\xdc\x1d\x6d\x31\xad\x61\xb4\x36\x07\xb2\x29\x1c\xaa\xe2\x84\xd8\x94\xf6\xbc\xf7\xcd\x80\x3f\x6c\x6a\x76\xef\x85\xd6\x6e\xb0\x43\x46\x38\xb3\x39\xe5\x4d\xa5\x66\x0e\x27\x7b\x76\x3b\x7c\x54\xc0\x20\x2c\xb1\xfc\x56\x08\x62\x97\x95\xaa\x0d\x73\xfe\x6c\x2b\x27\x01\x19\x1a\xa2\x6c\x24\x41\xe8\x74\x6c\x95\xb6\xa6\x95\xa3\x4c\x91\x59\x55\xa7\x2d\x0e\x0d\x65\xea\x4f\x7f\x5c\xcb\x89\x0c\xc4\xa2\x53\x0f\x83\xda\x09\xde\xd9\x61\x9f\x91\x18\x45\x73\xad\x15\x49\xad\xbe\xe8\xe9\x98\x9b\x55\xa2\x14\x53\xa7\x48\xe5\xd2\xb8\x96\xa8\x1c\xb1\x12\x26\xe9\x31\xfa\x08\x05\x61\x71\x9a\x69\xfd\xcb\xcf\x8f\x6a\x4a\x1a\xe5\xdf\x7e\xfb\x27\x82\xbe\x45\x29\xc1\xac\xa4\xc3\x82\xda\xa4\xaf\x3e\xc0\xf0\x53\x73\x32\x62\xb5\x5b\x81\x06\x9f\x4d\x8d\x29\x17\xef\x37\x64\x53\xee\x74\x62\x28\x74\x88\xa3\x39\x92\xf9\xc4\x54\xea\x0d\x6c\x18\x4e\x90\xbe\xe0\x33\x70\x54\xc3\x8d\xec\x06\xbd\xea\x14\xbe\x6c\x0c\x80\x75\x37\xb6\xbd\x8d\xfb\x70\x8f\x1c\x49\x52\xc2\x76\xaa\x71\x9a\x19\xce\x17\x1e\x7c\x69\x70\x5f\x7a\xc6\x87\xa0\xf5\x33\x6c\x2d\xfb\x5a\x96\x86\x70\x5e\xf0\x92\xe5\x09\x16\xf6\xe8\x8f\x98\x56\x34\x04\x79\xa2\x3c\x97\xc9\x02\xc5\x9c\x91\x1e\x50\x42\x1e\xcd\x8d\x63\x55\xeb\x2c\xd8\x16\xac\x78\xa2\x32\xd7\x0a\x2d\xb4\xe5\xea\x63\x48\x85\x0d\x26\xd5\x9c\x42\x3f\x5a\xfd\x26\xf0\x55\x98\x25\x87\xda\x69\x51\x21\x6c\x6c\x85\xe7\xb7\x84\x8d\x2d\x51\x55\x07\x1b\xeb\x61\x63\x97\xd7\xe5\x10\x61\x63\x2b\x7b\xde\x0e\x36\xb6\x6e\xcb\xb7\x80\x8d\x2d\x35\xf3\xc5\xc0\xc6\x56\x56\xf4\x8b\x81\x8d\xad\xcc\xab\x83\x8d\xfd\xf2\x60\x63\x77\x04\x46\xad\xe7\xc5\x06\x5f\x49\x51\xb6\xd8\x98\xc8\xbe\x92\x68\x78\xad\x09\x2c\x7a\x2c\x07\xb5\xf9\xeb\x6a\x77\x30\xd6\x7a\x26\xb4\x19\x18\x6b\xad\xaa\xde\xcc\xea\x76\x05\x78\x02\xc5\xe0\x95\xc1\x58\x4b\x13\xe8\xe2\x2b\x37\x8f\xaf\xac\x25\x3e\xdb\xb7\x1e\x9e\x0b\xba\xac\x5e\xc8\x2d\xe1\x58\x4b\xfb\xd3\x2a\x12\x13\x44\xf7\x3d\x50\xe2\xcb\x4a\xf3\xf7\xa5\x43\xbe\x56\x96\x0f\x57\x51\x5a\x60\x68\x2d\xe1\x39\xb4\x38\xa3\x84\x87\xfe\xff\x8e\x72\xb7\x88\x0c\xae\x2c\xaf\xf7\xab\x18\x5a\x6c\x41\xaa\xad\x29\xd4\x69\xa5\xfb\x49\x94\x75\xc9\x93\x1b\xba\x98\xdd\x20\xee\x32\x12\x35\xd8\x98\x69\x4a\xf7\xd5\xec\xba\x8b\xcc\x63\x61\x81\x42\xbe\x94\x17\xaa\xaf\x27\x33\x1c\x23\xe3\x57\xd2\x61\x01\xa8\xc3\x7c\x39\xa3\x52\x89\xc6\xd8\xa6\xa5\x11\xee\xe2\x2a\xcd\xf2\xd6\x01\x31\xc1\xaa\xce\xb6\xfb\x2c\x25\x29\x17\xeb\x02\xab\x6a\xbf\xb4\xa5\x6e\xb6\xf9\x94\x64\x73\x92\x6a\x49\x66\xbc\x69\x23\x6d\xf7\xdb\x27\x0d\xdb\xdc\x35\x13\xe8\x58\x22\x82\xc0\x11\xaa\xdf\x8d\x0d\x22\x65\xeb\xed\xde\x75\x9b\x2d\x66\xe6\x86\x0e\x21\x07\xa6\xbc\xda\xe0\x66\x5f\x2a\xb9\xbb\x81\xbe\x6b\x63\x3a\x7c\x48\xcd\xfa\xa8\x8d\x15\xf1\x1a\xab\x70\xa7\x8a\xaf\x6c\x21\xe8\x0d\x5c\xf9\x65\xef\xbc\xe6\x84\x61\x15\xe0\xcd\x03\x3c\x1a\x50\x53\x97\x97\x07\x22\x73\x24\x11\x47\xa1\x66\x50\x1a\xcc\xf2\x7a\x95\xa8\xc4\x69\x94\x3b\x10\x49\x2e\x1a\xa3\x4c\xdb\x18\xb4\x23\x95\xe3\x04\x34\x89\xb0\x7a\x65\x75\x53\x27\x8b\x9a\xb4\xc7\x76\x1e\x13\xca\xd4\x9f\xff\x63\xa3\xdd\xd4\xaa\x95\x5d\x37\xa8\xb8\x85\xa3\x88\x48\x63\x63\xb7\x51\xc8\x78\xc2\x9f\xa0\xd8\xd6\x2e\xbb\xaa\x8f\xb2\x9e\xb7\x66\xf0\x1e\x8a\x38\x2e\x48\xdd\x88\x0b\x73\xc1\xf3\xd9\xdc\xd9\x90\xf4\x99\xd1\x53\xab\xdb\xcb\x1f\x97\x6c\xe4\x1b\xef\xe5\x77\x39\x4d\xb6\xb3\xd0\xdd\x95\xca\x90\x7d\x1a\xde\x23\x39\xf7\xa7\x75\x02\xcd\xd6\x6e\xec\xf2\xa0\xdb\xf7\x69\xbf\xf5\xfe\x1a\xe8\xa6\xe7\xe0\x37\xa7\x3c\x49\xc0\xd3\x20\x49\xfa\x44\x44\x7d\xf7\x30\xe1\x7b\xba\x19\x72\x9e\x1f\x00\x7c\x5d\x24\x46\xb4\x92\xbf\x6e\x8c\x68\x28\x91\x1b\x7d\x35\x68\xc1\x84\xaa\x71\x46\x58\x9d\x8d\xed\xa7\xe5\x0a\x30\xef\x2c\x60\xd0\x45\x8f\xed\x2d\x68\xd0\x2d\xc9\x2b\x07\x0e\xae\x99\xc7\xa1\x06\x0f\x56\x98\x9d\x8f\xe5\x2b\xae\x19\x17\x38\x64\x14\x9f\xbe\x5e\xe2\x11\xeb\x97\xf2\x29\x5c\xa5\xec\xc9\xa2\x08\xc8\x36\x3a\x44\xc8\xcc\xa0\xce\x86\x35\xac\x80\x1b\x4d\xff\x05\x9a\x8e\x01\xaf\x35\x21\x85\x2e\x6c\x10\xa2\xc9\x49\x7c\x84\xa3\x45\x94\xd0\x28\xd0\x99\x67\x02\x67\xf3\x3a\x8e\xe7\x76\xbe\x43\xdd\x79\x2b\xd4\x9d\xa6\x82\x54\x9b\xc4\x6d\x3b\xba\x62\x38\x25\x1d\x1a\x50\x1d\x1a\x50\xcf\xe3\x5d\xb0\xa2\xb4\xd6\x1b\xc2\x28\x2c\x9f\xbb\x0e\x12\xe8\x0d\x20\x81\xb6\x39\x7c\x05\xde\x4f\xe9\xd8\x75\x30\x45\x1f\x5a\xc1\x14\xf9\x4b\xf0\xa0\x90\x67\x9a\xcf\xe3\x1b\x23\x9a\x2c\x0f\xec\x2d\x61\x89\x6a\xc4\x85\x4d\xe4\xa6\x55\xb8\x44\xab\xe8\xa2\xd5\xba\xbc\x2d\x4a\xd0\x66\x2b\xb3\x11\x00\x50\xed\xdd\x75\x20\x70\x40\xcd\xdb\x70\x20\xe7\x66\x9f\x59\x2d\x9b\xd5\x0e\x0d\x33\x5b\x36\x51\xb0\x36\x4b\x72\xf1\xf4\xf0\xbe\x12\x5d\x8a\x22\x6b\xdb\x25\xbb\xf4\x9d\x0f\x9a\x08\x34\xe7\x49\xec\x40\x28\xfc\x6a\xf9\x0e\x7c\x26\x80\x5f\x20\xb7\x19\x50\xec\x1c\xb4\xad\xa2\x20\xd8\xaa\x94\x16\xbf\x89\x30\xdc\x3d\x30\x9a\x7d\x58\x11\x3c\x27\xd9\xc6\x7e\xb0\x56\x16\x91\x65\xf3\xf7\x8a\x31\x96\x56\x08\xac\xe6\xf5\xc3\x5c\x6b\xf7\x5d\x33\xb8\x55\xa2\x47\x60\x1c\x14\x75\xa5\x3e\x0d\x9d\xc1\xd3\x27\xea\x0c\x11\x38\xec\x71\xa5\x97\xce\xcd\xae\x95\xa7\xae\x4a\x2c\x5b\x04\x83\x2d\x55\x6e\xdb\x1d\x1c\x28\xc5\x9f\xc7\x19\x16\x38\x49\x48\x42\x65\xfa\x62\xc1\xc0\x67\x65\x77\xad\x3e\xab\x82\x1b\x13\x11\xcb\xd3\x89\x21\x45\x37\x10\x5b\xec\x4f\x71\x24\x72\x16\x42\x9b\xf9\x8d\xf1\xc5\x04\x73\xb8\x17\xc0\xaa\x14\xcd\xa1\x6a\xeb\x14\x53\xc1\x88\x6c\xac\x91\x49\xa2\x5c\x50\xb5\x18\xdb\x92\xa3\xed\x0f\xdc\x9d\xfd\xf2\xcc\x7e\xb8\xda\xc3\xed\xb2\xfa\x5d\x7f\xbe\xc4\x69\x46\x04\x94\x09\x72\x05\x6f\x82\xb2\xaa\x16\xb5\x81\xf8\x5a\x43\x10\xfe\xbc\x74\x6d\x37\x05\x0e\xe3\xe7\x71\x90\x51\x35\x8e\xaa\xc4\xb1\xee\xb0\xd6\xe1\x4e\xad\x9a\xe4\x0b\x23\x2f\x35\x78\x91\x5f\xa0\xca\x88\x4d\x9b\x30\x4d\xeb\x01\x07\xae\x60\xb0\x57\x16\x1b\x13\xa4\xbc\x5b\xa5\xaa\x61\x9c\x16\xeb\xa7\x2e\xf8\x68\xc5\x60\xfb\xc1\x57\x2d\x46\x1c\x74\xb2\xa7\x61\xeb\x83\x2e\x44\x9e\x29\x3a\x59\x86\xb6\x51\xfb\x2b\x21\xda\x4f\x20\xcd\xda\xb9\x19\x4a\xdd\x9a\xba\xa2\x25\x4e\x6c\x67\xa7\xe5\x7f\x8b\x23\xe6\x10\x82\x0c\xc2\x52\x98\xc7\x77\x9d\x52\xa5\x5c\xa2\x80\x31\x40\x6b\xea\x2c\xdb\x66\xbf\x72\xe1\x1e\x18\x2a\xbd\x1a\x13\xd1\xf1\x88\xf5\x25\x7a\x26\x88\x11\x0b\x21\x51\x53\xc3\xd5\x5b\xb5\xa1\xf6\xd3\x84\xe8\x9e\x7c\x6c\x8a\x16\x1e\xa8\x92\xbe\xfc\x98\xe9\x63\x8a\x13\x49\x7a\xba\x61\xa8\x5a\xaa\x38\x04\x7f\x62\xf4\x2c\x70\x96\x11\x31\x62\x36\x8b\x03\x1c\x2e\x9c\x27\xa6\xfd\xa6\x10\x57\xbb\x06\x64\x1c\xe1\x68\xfe\x4a\x7b\x84\x21\x19\x27\x9a\x93\xd8\xe5\x0b\x97\xb7\xc7\xcd\xdb\x18\xac\x37\xd8\xac\xe1\xd4\x95\xcf\xea\xd9\x4e\x92\x48\x73\x14\x5f\x66\x3a\x23\x42\x8f\x5a\xd3\xf0\x13\x61\x88\x4e\xdd\x38\x6c\xec\x0e\x7a\x06\xcf\x94\x26\xfd\x27\x4c\x13\x93\x80\xef\xba\x76\x42\xa0\x31\xbf\x8f\x98\x71\x77\xb3\xa8\x94\xa1\x4a\x19\x95\x73\xcd\xa9\x73\xf0\x49\x82\x9a\xd1\x94\x38\xc3\x9e\x36\x39\xcd\x03\xfd\xfa\x6a\x0e\xfa\x44\x05\x67\x29\x24\xc9\x58\x5c\x26\xb7\x7c\x92\x28\x7f\x3c\x6a\x53\x1c\xd7\x4a\xc4\x71\x2c\xcb\xc6\x4f\xa3\x56\xd2\x5f\x4b\x66\x97\xa3\x52\x56\x60\x14\xc0\x0a\x41\x10\xa7\xab\x2c\xb6\x4a\xfe\xed\x52\x1b\x96\x53\x1b\xea\xd7\xe6\x10\xd3\x1b\xfc\x21\xde\x34\xc5\xa1\x69\xfb\xf7\x21\xd9\xee\x31\xd5\xe1\x8d\x73\x02\x5e\x26\x1d\xe0\x6d\xf3\x37\x5e\x22\x75\xa3\x4b\x70\x78\xc3\x04\x87\xd6\x96\xda\x72\x6c\x76\xf3\xb1\xdd\x28\x39\x60\x0d\x98\x53\x5d\x2f\x97\x44\x09\x1a\xc9\x7d\xf0\x07\x99\xe1\x96\x51\x6d\xa0\x05\x66\x6b\xa4\x26\xfd\x82\x77\x42\x42\x9c\x98\xaf\xf3\x37\x11\x04\x3f\xc6\xfc\x79\xc9\x56\x27\x43\x34\x8d\x4b\xae\xc5\x1e\x41\x22\x2a\x49\x29\x92\x85\x4a\xc4\x88\xb4\xc6\x4e\x3c\x62\x73\x4a\x04\x16\xd1\x1c\xb2\x1b\x8b\x8d\x31\x59\xb2\x06\xd0\xc8\xc4\x32\x84\xde\xa6\x0d\x36\xbd\xc5\xba\x57\x2d\x4c\x1e\x9f\xce\xee\xb9\x1e\x49\x6a\x3e\xf1\xc2\x8c\x95\x32\x42\x93\x5c\xab\xed\xdf\x35\x10\xdf\x2f\xf6\x8b\x06\xe3\xfb\x60\xa2\xe0\x8b\x96\x01\xf9\x05\x35\x74\x41\xf9\x2f\x14\x94\x5f\xb3\xc4\x9b\x05\xe6\x6f\x65\xf2\x7b\xfd\x98\x61\xd7\xf3\x6b\xc4\x0d\xaf\x0b\xda\xca\x27\xe3\x17\x3f\x7a\xb5\x73\x6e\x7b\x02\x7f\xf2\x44\x61\x24\x62\xa1\xe9\x6c\x42\xe2\x18\x38\xad\xe2\xb6\x52\x74\x41\x3b\xce\x3c\xa0\xef\x5e\x2c\x35\xb1\xe3\x84\xb3\x99\xa4\xb1\x01\x5b\xc9\x30\x54\x6c\x0d\x8d\x17\x00\x2e\x00\xfb\x9b\x24\x44\x38\xaf\x84\x40\x5f\x4b\xca\x2c\x9a\xa2\xff\x2d\xe6\x44\xb2\xaf\x94\x31\x16\x60\xb6\x40\x8f\x8c\x3f\x27\x24\x9e\xc1\x0e\x55\x07\x73\x84\x28\xe9\x21\xaa\xfc\x67\x02\xd0\x08\x78\xae\x46\x7a\xec\x10\x6b\x66\x34\x00\x62\xbf\x0d\x6a\xa2\xfb\x66\xbe\x39\x46\x68\xc8\xd0\x14\x47\xaa\x87\x64\x3e\x29\xda\x8f\xb9\x29\x72\xad\xb5\xef\x60\xe2\x45\x23\x5d\xcc\x78\x4d\xe7\xf5\x67\xc3\x71\x07\x4d\xae\xfd\x84\xe2\x9d\x62\xeb\x9e\xf0\x2e\x10\xa3\x97\xb9\xb4\x41\x18\x88\x33\x7f\xf4\x2d\xbc\x92\xc7\x88\x06\xbc\x4f\x83\xb7\xcc\x78\xdc\x68\xeb\xac\x4c\x65\xd3\xb1\x14\x81\x90\x56\x50\xb2\x8e\x2a\x68\xd7\x2c\xb7\x96\x9a\xa4\x12\x04\xa7\xd6\x39\xa0\xaf\x1a\x10\x6b\x4c\x18\xa4\x1e\x3d\x15\x46\xc2\xdc\x64\x8b\x2f\x28\x7b\xd4\xbb\x5b\xa0\x62\x43\x7d\x79\xe8\xb9\x6e\xd3\x32\x7d\xe3\x91\x33\xce\x8c\x83\x70\x27\xb9\x93\xce\x18\x4e\x36\xb4\x71\x2c\xad\xdc\xb2\x4f\xcf\xc9\x59\x56\x5c\xd0\x52\x84\x31\xf6\x21\xd3\xe3\x46\x36\xa4\xca\x7c\x43\x79\x0f\xa3\x98\x64\x84\xc5\x84\x45\x0b\x20\x11\x06\xc8\x39\x82\xe1\x04\x61\xf8\x0e\x27\xc7\xe8\xdc\xe4\xd7\x78\x09\xcf\x5e\xeb\x70\xa1\xa7\x98\xd1\xa9\xd6\x13\xc0\x08\x6b\x47\x39\x62\x66\x98\xce\x07\x12\x14\xed\xf7\x2b\x56\xb7\x33\xfa\x06\xb9\xda\x11\x95\x98\x95\xbf\x47\xab\x2f\x1c\xe8\x6d\xd5\xee\xe8\xe6\x5c\x0d\x02\x99\x4f\x8e\xe0\xdf\xa5\x84\x33\x07\xd4\x53\xa0\xc8\x90\x84\x80\x39\xd0\x7a\xbc\xe0\x62\x6c\x02\x96\xdb\x87\xdf\x6e\x4d\x1e\x47\xd0\x47\x49\xa9\x49\x29\xa3\x69\x9e\x06\xce\x3b\x53\xb1\x20\xb2\xf6\x4b\x93\x89\x91\x69\x3d\x20\x72\xe0\xe5\x48\x5f\xae\x6c\x81\x66\xf4\x89\xb0\x11\xcb\x38\x65\xea\x18\x5d\x71\x45\x82\x12\x11\x06\x3a\x8a\x67\x8a\xa6\x06\xed\x54\x10\x7d\x0e\x0c\x28\x36\x00\x4d\xce\xb1\xea\xa1\x38\x87\xa3\xca\x88\xd2\xac\x43\xdf\xb8\x0a\x76\x06\xe2\xa3\xc5\x88\x99\x9b\x6e\x8a\x69\x92\x0b\x62\x65\x56\x6c\xf2\x62\x8a\x21\x17\x23\xb3\x48\x68\xc1\x24\x52\x3a\x9b\x2b\xbd\x45\x5a\xc6\xb3\xfe\xc6\xb9\xe6\x46\x7c\xc4\x26\x04\x61\x94\x71\x49\x15\x7d\xf2\xfe\x4b\x3a\x45\x58\x4a\xb0\xa0\x1c\xa3\xf3\x92\xfd\x9f\x4a\x50\xbd\x9b\xe2\x6a\x29\x1b\x5b\xdb\x73\x73\x3e\xce\xce\x1b\x59\xea\xc5\xae\x32\x9e\x48\x9e\xe4\x2a\x74\xc1\xd6\xef\x6d\x61\x1a\x77\xc0\xfd\x60\x20\xe6\xd3\x11\x73\x74\x2d\x8f\x51\x5f\x22\xc9\xf5\x2e\x49\xb3\x95\x91\xa0\x8a\x08\x6a\x50\x9c\x88\x32\x9b\xe0\xcf\xa9\x3f\x03\x29\x16\x8f\x5a\x84\x0a\x2d\xf0\x06\x53\xb4\x64\xed\x98\x18\x09\x09\x60\xad\xc2\xed\x00\xd3\x3f\x62\x9c\x1d\x31\x32\xc3\xeb\x76\x64\xc4\x4a\x5b\x82\xbe\xa6\xd3\x42\x21\x6d\xf2\x39\x06\x6b\x37\x86\xc8\xa7\xa6\x5d\x32\x1d\x37\x6d\xd2\x34\xe1\x78\x8d\xdb\x78\x5a\x1c\x7a\xf4\x77\x3e\x31\x63\xd4\x7a\x3f\x57\x20\x05\x6a\xf5\x6a\xca\x05\x99\x63\x16\xf7\xdc\x66\x95\xc7\x06\x37\xa3\x35\xb5\x39\x65\x0c\x24\x41\x07\x22\x4c\x0c\x16\x13\x66\xc1\x5e\x58\xc5\xcd\x6e\x45\xb1\x0f\x1b\xdd\x15\xbe\x35\xa8\x7d\x62\x0c\x10\x86\xe5\x2d\x32\x7b\xc4\x25\x4d\xb3\xa4\xc8\x69\x0a\x6c\xa3\x53\x2d\x62\x39\x1e\xc9\x9f\xc0\x74\xe5\xb4\x36\xb8\xd5\xed\xce\x69\x3a\xab\x19\xb9\x67\xa4\x70\x6b\x38\x9b\x97\x29\x83\x19\xb0\xb0\xaf\x25\xd1\xff\x54\xa4\x50\xfb\x8c\xb0\x3e\x62\x4e\x04\xf9\x06\xb8\x8c\x6d\x36\x30\x9e\x69\x11\xda\xc0\xbc\xda\xf5\x43\x91\x71\x72\x97\xce\x89\x3d\x0c\xee\xd5\xda\x8b\x4a\x51\x2d\x66\x7f\x47\x01\xa1\xea\x7c\x47\xd8\x79\xca\x62\xd2\x58\xcc\xa9\x15\xd7\x68\xba\x5b\x0c\x43\x1d\x6f\x5b\x7f\xe1\x7e\x4e\x24\x41\xea\xd9\x03\xa5\x69\xbd\x0a\x4c\x96\x82\x24\xe4\x09\x17\x77\x9c\xef\xcb\xb2\xcb\x08\xcb\x86\xf2\x28\x80\x36\xa6\xc7\xbf\x7d\xe2\xb0\x1f\xdf\xb5\x1e\xca\x13\x4e\x6c\xe2\x86\xf5\x95\xcb\xe6\x0d\x1b\x9e\xef\x14\x43\x6a\x5b\xa9\x5b\xcf\x66\x11\xc3\xf5\xfd\x03\x59\xd4\xaf\xc8\x1a\x10\xbf\x55\xd9\xd8\x7e\xd9\x37\xb0\x55\xdf\x14\xdf\x2c\xaf\x71\xe3\xca\xfd\x50\x9a\xf2\x1b\x24\x11\xdd\x2c\x55\x80\x86\x3f\x65\x3e\x9d\xd2\xcf\xa0\xd5\xba\x9b\xc4\x69\x1e\x91\xe0\x52\x73\x31\x90\x55\x90\xdb\x3c\xe3\x48\xde\x25\xa1\xa8\xf6\x4b\xad\x65\x6d\x4c\xd1\x8d\xab\xfd\xd7\x9c\x88\x9d\xd6\xdb\x93\xea\x26\xe1\x88\xc1\x29\xa9\xd7\x11\x5d\xa3\x0a\xb7\x8c\x49\x0a\x5b\xbd\xc7\x0d\x4b\xb7\x1e\xfe\xbb\xf6\xb3\x89\x61\xbe\x9b\x0f\x24\xe4\xda\x2b\x6d\x6a\x45\x7c\x9a\x8f\x4d\x76\x45\x79\x34\x7f\xeb\x59\x80\x71\x6c\x03\xa7\x7c\xaa\x2f\x76\x31\x23\xc6\x31\x62\x6a\x36\x29\x5b\x69\x20\xd0\xd4\x6d\x63\x94\xcd\x46\xcc\xad\xad\xec\x21\x13\x26\x5e\x61\xa8\x25\x6c\x77\x1c\x7c\xea\x09\xbb\x9d\x49\xd5\xf8\xd5\x19\x91\x52\x5f\x8c\x52\x09\x4c\x99\xf5\xe1\xb8\xf5\x91\x23\x86\x8e\xaa\x71\xea\x3d\xb0\x23\xf4\x5c\xb6\x67\xaf\x18\xa0\x1c\xb1\x6b\x63\x9d\xf9\x23\xfa\x5a\xe1\x99\xb9\x25\x00\xbd\x11\x27\x80\xfb\x08\x5a\x82\xd5\xca\x83\xe4\x00\x7f\x22\x69\xfc\xcd\xe9\xaa\x3e\x8d\x0d\xe1\x6b\x68\x06\x0e\xb9\x5e\xc3\x62\x81\xe8\xb4\xf8\x07\x89\xbf\x59\xd5\x52\xf1\xd1\x23\x59\xf4\xaa\x8b\xdc\x7c\x6f\xdc\xe3\x9d\x22\x34\x5f\xea\xe2\x80\x41\xb7\x77\x52\xe2\x09\x49\x7e\x2c\x26\x8a\x56\xb2\xa2\xef\x28\xc3\xbb\xf1\xa0\xda\xe1\xb5\x8b\x40\x9f\x2c\x9a\xea\xb6\xd5\xb0\x9e\xad\x11\x47\xfa\x46\x96\x25\x48\x77\x67\x25\x76\x57\xd5\x0f\x43\xd4\xe3\x9c\x24\x19\x8a\xe9\x14\x5c\x6f\x0a\xe8\xc5\x83\xa7\x9a\x7a\x37\x5a\xa1\x49\x73\x66\x80\x70\x4d\xd4\xc7\xb3\x3d\xe9\x96\x65\x14\x8d\x1f\x8f\xd8\x50\x7d\x25\x91\x54\x82\xb3\x99\x56\xa6\xe3\x27\x2a\x8b\x42\x6e\xfa\x40\xe6\x29\x11\xb6\x0b\x2a\x8d\xd4\x6d\x8b\x20\x61\x77\xb1\xe9\xb1\xe9\xab\x0f\x04\x1f\x57\x6c\x50\xff\x68\xf4\x0a\x3d\x4a\xe9\xa2\xa6\x6a\xc2\xde\xed\xe6\x56\x78\xe7\x2b\x9b\x2e\x7f\x0c\xad\x93\x28\x2d\x0c\x99\x8e\x5f\x9e\x54\xcd\x98\x76\xd5\x57\x98\x30\x37\xbe\x10\xda\x5e\x04\xae\x6a\x40\x6e\xd2\x9c\x74\x3f\xce\xb1\x65\x06\xb7\x91\x8a\x55\x99\xa0\x1d\xb5\xd1\x9e\x42\x13\x26\xa1\x60\xff\x90\x0a\x2b\x1a\xd9\x5b\x80\x0b\x6b\xc5\xb5\x7a\x75\xf3\xd6\xee\xaa\x93\xc8\x08\x27\xcb\x3b\xbc\xc2\xa7\x6e\xde\x5f\x6d\xe8\xb4\xc7\xcd\xb4\xbd\x12\xd8\x24\xe2\x49\xb2\x49\x99\xb6\xca\xcc\xcf\x8a\xcf\x57\x8f\xa8\xe8\x47\x6f\x80\xdb\x0b\x38\x35\xc6\x40\x81\x13\xeb\x2e\x92\xca\xee\x52\xf8\x92\xb9\xd4\x16\x56\x7d\x1c\x31\x3e\x85\x42\x7e\x49\x53\xe4\x7a\x26\x78\x4a\x37\xa9\x24\x61\x82\xb9\x6f\x9d\xef\x7f\x8d\x27\xc5\x45\x08\x80\xf9\xcd\x90\x97\xed\x11\x30\x09\xb0\x35\xa9\xad\x38\x43\x29\xce\xb6\x5a\xf0\x75\x91\x2f\x7d\x94\x9a\xb0\x23\xbb\x7a\x80\x29\x4d\xa0\x26\x1e\x2c\xf2\x33\x5e\x14\xf0\x2f\x4d\x35\x02\xd8\x46\xe4\xf0\xa0\x5f\x1f\xb2\x29\xdf\xe0\x70\x16\x70\x2d\xf6\xf4\x61\x47\xb3\xc1\xf9\xf3\x91\x18\x66\xf7\xcd\x9a\xb6\x39\x8f\x67\x75\x44\xbd\xf1\xc9\x74\x2b\xf8\x92\x7e\xd8\x90\x89\x04\xdf\xfc\x6b\x93\xbb\xb5\x7c\xb4\x82\x16\x11\x0c\x67\xf5\x52\x5d\x96\xe8\x70\xef\x6b\x54\x69\x07\x9e\x15\x09\x63\x37\xf5\xad\xbe\xc2\x9a\xd9\x43\xd2\x6a\xb1\x76\xc4\xa7\xda\xac\xd6\x81\xeb\xd1\x57\x36\xd8\x59\x93\x5b\xb7\x18\xc0\xcd\xa4\xd5\x1a\x8a\xec\x13\x9b\x86\x3f\xa5\x09\x91\xc7\x68\x58\xe3\xc4\x75\x49\xf0\x3e\x68\xdc\xa4\x03\x3a\xe9\x29\x17\x34\x28\x7e\xee\x64\x24\x44\xa1\x08\x5b\x18\xc8\x12\x38\x2d\xc0\x7d\x3a\xe7\xcf\x26\x03\x4f\x50\xcd\xb3\x8c\xb0\xaa\xc0\xa5\xa5\x79\x01\xb5\x1e\x21\xe3\x50\xf3\x1f\x70\x93\x17\xa1\xd5\x1c\xef\x0c\x0b\x2d\x10\xd5\x2d\xdd\x47\x19\xcb\xf6\x18\x03\xae\xd7\x7b\xfd\x45\x1b\xa5\xc0\xbd\xbb\xc3\xe8\xbc\x94\xbf\xb9\x3d\xf2\x23\x7c\xea\x0c\xbb\x18\x4d\x05\x01\x2d\x3b\xf5\xb8\x61\xa6\x70\x00\xe7\x70\xdf\xdd\x9d\xff\x70\xf2\x30\x44\x44\x45\x28\xa1\x8f\x64\xc4\x22\xf9\x04\x4a\xdf\x3f\x72\xa2\xf4\xcf\x0d\x46\x20\x9a\x12\x26\x81\x13\x50\xd5\x52\x5f\x73\x0b\xa3\xff\x7b\x5e\xfe\xbe\x8d\x56\xee\xb1\x2e\x35\xed\xba\x9a\x7e\x40\xa6\x50\xb6\xcc\x2c\x6d\x8d\x5d\xf3\x3b\xe3\x6f\x1d\xd4\x55\xfc\xde\x22\x25\x9a\xfd\x3d\x67\x1b\x0a\x5d\x67\xc5\x47\xc1\x28\x1a\x64\xba\x34\xc3\x50\xcf\x63\xb3\x5c\x6b\xf3\x4d\x6d\xeb\xeb\x98\x48\x01\x3d\xe3\xfc\xe7\x45\x71\x74\xa4\x04\x21\xc0\x42\x3c\x3d\xd9\xbb\xde\xa2\x8d\xf9\x89\x05\x1f\x1d\x8f\xd8\xa5\x8b\xaa\x2b\x7e\x95\x85\xaf\x21\x9d\x04\x65\x4e\xca\xad\x40\xb3\x31\x95\xfe\x07\x28\x5a\x27\xf3\x44\x99\xaa\xbd\x53\xca\x70\xe2\x07\x6a\x9e\xd4\x71\x09\x81\x59\x34\xdf\xd5\x4d\x4e\xa7\x63\x92\x6c\x22\x89\x0e\xa7\x83\x44\x6a\xfa\x8e\x1e\x1b\x4e\xe7\x36\x75\xa9\x8b\xc9\xd8\x6a\xfb\xa6\xb6\x25\x2a\xdc\xec\x38\x31\x55\x73\x09\x82\x38\xac\x6a\x86\xbc\x01\xc1\xd2\xbb\x68\x25\x75\x13\x86\x65\x52\x53\x7d\xda\x19\xf4\x82\xb0\x1a\x31\x91\x33\x28\xa8\xe5\xa3\x32\x31\x2a\x6a\xa2\x44\x2e\x46\xc2\x46\xac\xcc\x34\x9b\x30\x25\x47\xcc\xcb\x5a\x3f\xe3\xb9\x04\x7f\x54\x4a\x94\xbe\xa0\xbe\x86\x5a\xf7\x26\x2c\xba\x87\x32\x41\x53\x70\x29\xcb\x6f\x6a\xb6\xee\x0c\x2b\x9c\xf0\xd9\xbe\xad\x4a\x5b\xa6\xd8\xb8\x61\xa0\xe1\xb9\x5e\xfc\x19\x61\x44\xc0\x44\xc1\x96\x5d\x7b\x84\x5b\x58\xb9\x1b\x38\x37\x78\x12\xad\xf3\x57\x7a\x8b\x05\xce\x15\x4f\xb5\x7e\x8b\x93\x64\xd1\x33\x5e\x67\x82\xe6\x58\xce\xdd\x46\x1b\x87\x61\x9b\xbb\xc9\x2e\xee\x19\x8e\xe6\xe4\x4e\x61\x95\xd7\x46\x66\x55\x46\xf9\x81\xb0\x3c\xfd\x70\x8a\xfe\xa7\x98\xe3\x59\xff\xec\xfb\xc1\xf8\x7c\x78\xd7\xff\xee\x62\x70\x1e\xcc\xc7\x3e\xb9\x1c\xde\xdd\x2d\xff\xfa\xfd\xf0\x7e\xf9\xc7\x9b\xeb\x9b\x87\x8b\xfe\x7d\x5d\x2b\x17\xd7\xd7\x3f\x3c\xdc\x8c\x3f\xf6\x87\x17\x0f\xb7\x83\x9a\x4f\x1f\xee\x9b\x1f\xde\xfd\x30\xbc\xb9\x19\x78\x2b\xfd\xdf\x82\xd3\x05\x1e\x72\x3d\xd1\x86\x69\x54\x0f\xe0\x11\x2a\xbf\x78\x8a\x1e\xaa\xe5\x9d\x6c\xbe\x95\xc1\xea\x7a\xc6\x52\xf3\x30\x48\xf7\x03\x4b\x6b\xb1\x28\x4d\x9f\x9a\x90\xe4\x68\x4e\x50\xc2\xf9\x63\x9e\x59\xd6\x66\x8c\xea\x8c\x1b\xc3\x0f\x91\x41\x6b\xdf\x0f\xef\x4f\x97\xcb\x4c\xf9\xc6\x02\x54\x50\x6f\x43\x7e\xc6\x06\x21\x00\xd8\x29\xd8\x52\x5c\xf9\xa1\xc2\x43\x1d\xf4\xe0\x77\x66\x55\x3f\xa6\x35\xcc\x54\xa5\x9b\xd8\x44\x4b\x17\x13\x0b\x1a\x2e\xef\xeb\xaa\xd5\xf4\xcb\x61\xea\x6b\xa2\x09\x89\x70\x6e\x02\xb7\xf5\x3d\x25\x04\x17\xe1\x80\x0b\x7a\xd8\x5f\xa3\x96\x8e\x6a\x1b\xac\xec\x99\x9e\xb8\x7c\xa4\x59\x46\xe2\x0f\xcb\xf2\x4b\xb9\x02\xbe\x84\xd3\xa7\xfb\x0c\xce\xa4\xd6\xeb\x41\xe7\x77\xc5\xe1\xe6\x0b\x1f\x2d\x04\xc1\xa9\x45\xb8\x2e\x14\xab\xd0\x77\x82\x2f\xde\x45\x21\xfc\x07\x2b\xf4\x4c\x00\x36\x26\xb7\xd5\x31\x8d\xee\xad\xcf\x36\x74\x67\xfc\xf6\xae\xd6\x6d\x09\x4e\xa6\x91\x19\xef\x43\xe0\xd6\xdf\x4b\xb2\x99\xb3\x6d\x2d\xf6\xc7\xb9\x69\x14\xb8\xb3\x8b\xeb\x87\x11\xef\xd3\x39\x57\x73\x23\xad\xb9\x2c\x34\xdb\x6e\x33\x1e\x87\x77\x56\x2a\xe2\xd1\x7e\x60\xa5\x42\x0f\x6b\xd7\xea\x9e\xc7\x78\xa1\x89\x03\x82\x13\x64\x9e\x65\x5c\x28\xd4\xd0\x86\x09\x55\x34\xe3\x83\x3b\xc7\xce\xc3\xf3\x38\x68\x44\x4b\x18\xb2\xa6\x5e\x58\x3b\x08\x28\xbb\xae\x81\x8f\x2b\x48\x02\x02\x45\xd0\xd7\x76\x4c\x4b\x2a\x75\x89\x42\xeb\x84\xdf\x5d\xb2\x28\x33\x7d\xc1\xb7\x2d\x35\x5c\xd7\xfb\xb5\x6b\xa1\x76\xcb\x13\x32\x55\xe3\x0d\x9d\x52\xd0\x22\x6b\x42\xcd\xa3\xb3\xf9\x1e\x5a\x6c\xaf\x25\xfc\xd1\x06\x2f\x6b\xd5\x20\xb0\x10\x08\xce\x95\x91\x4f\x0b\x1d\x06\xb9\xd5\x04\xf3\x82\xed\xd4\xe6\xbb\x7b\x21\x50\xcb\xfc\x26\xe6\xcb\xa7\x86\x1f\x8f\xd8\x00\x82\x44\x0b\x45\xc4\xa5\xc1\x83\x16\xb0\x56\xfe\x2f\x15\x56\x7f\xd5\x8c\x94\x66\x14\xfb\x82\xee\x4d\x68\x21\x49\x16\xa8\x28\x9e\x5f\xfa\xae\xcd\xe9\x31\x56\x6f\x27\x02\x9a\x09\x9b\xa3\x23\x15\xc9\xac\x65\xde\xcc\xb3\x88\x66\x06\xaf\xb0\xee\xea\x18\xfd\xe4\x2c\x3f\x90\xdc\xe3\x93\x5d\x5c\x7c\x6a\x82\x17\x0e\xf8\xba\x6e\x61\xf7\x81\x25\xbd\xef\x74\x9f\xd5\x0b\xec\x41\x2b\x6b\x56\xb9\xa4\x80\x33\x66\x2c\xb2\x1b\x84\x0b\x9d\xf9\x8f\xee\xc8\xea\xc8\xc7\x8f\x50\x6a\xdc\x46\x8f\x83\xd0\xc1\x92\xc5\xff\x32\x9b\x65\xd0\x36\x5c\x30\x85\x2d\xfd\x6c\x3d\xa8\xfa\xfc\x80\x07\xd0\x80\x71\xa0\x29\x4d\x12\x90\x03\x8e\x51\x9f\x2d\x1c\x58\x85\xbe\x0a\x5d\x10\x29\x9d\x31\xbe\x2e\x8f\xbe\x81\x98\xa2\x80\x98\xee\x9a\x89\xc9\xc4\x69\x14\x58\x45\xfb\xa1\xa8\x3d\xe0\xd6\x69\xde\x82\x97\xab\x7e\xb4\x47\xab\xdb\x40\x79\x0f\x6f\xf3\xd7\xca\x00\x5b\x1a\x6e\xf0\xe1\xbf\xea\x87\xfe\x29\xc7\x02\x33\x05\x79\x4d\x56\x74\x17\x24\x48\xaf\x26\x9f\x21\x06\x95\x19\x43\x30\xfc\x14\x6e\xae\x73\xf9\x9b\x30\x31\x1a\xf7\x10\x3d\x26\xc7\x50\x81\x56\x68\x59\x62\x52\xbc\x39\xd7\x92\xc3\x88\x2d\xe5\x6b\x1c\xa3\x7e\x22\xb9\xfd\x82\xb0\x28\xe1\x12\x42\x70\x27\x21\x38\x38\x50\xbe\x75\x2b\x4d\x16\xa0\xa0\xc0\x56\x16\xcd\x73\xfb\x20\xf8\x10\x0a\xa9\x82\x4f\x3c\x81\x93\x5e\xfc\xfe\x7b\x9e\x19\x6f\x45\x53\x9c\xc4\x0b\x96\xac\x5a\xba\x86\x5e\x6c\x93\x4c\x39\xe4\x55\x1b\x04\x6f\xc0\xc6\x14\x79\x34\x01\xca\x1c\xfa\x1a\x2b\x94\x10\x2c\x15\xfa\xc3\x37\x1b\xc5\x86\xb8\x09\x16\xdc\xd5\x1e\xdf\x22\x19\xde\xa5\x53\x86\xc2\x9d\xef\x18\xea\xe3\x62\xa1\x10\x46\x8c\x3c\x87\xd9\x33\x1c\x12\x9e\x5c\xd1\x5b\x12\xe0\x77\x98\x98\x79\x83\x3e\x04\x19\xa9\x46\x65\x6a\xe0\x23\xae\xa4\x83\x75\x9f\xda\x61\xd5\x50\x56\xcf\x47\x9f\x41\xb8\xb9\x7e\xa9\x48\x6c\x9c\x63\x35\x62\x96\xb3\xba\xb0\x91\x20\x95\xbd\x9f\x24\xe5\x64\x42\x0c\xf9\xb2\x4c\x4f\x58\x8f\x3e\x3e\xf6\x0b\x74\x05\xea\x97\xcf\xe8\x2a\xd9\xe9\x8a\xc3\x62\x72\x0e\x3c\xa6\x63\xd8\x76\xad\xb4\x53\x67\x5f\x7e\x45\x21\xb8\xa6\xfb\x0b\x3e\xa3\x11\x4e\x5a\x08\xc3\xa4\x6e\xc8\x6b\x0e\xd6\xb2\x4d\x7f\x85\x6c\xbc\xef\x0e\xda\x8b\xca\xf5\xf6\x71\xb8\x66\x9f\x79\x8d\xb9\xbd\x61\x73\x03\xd9\x62\x17\x05\xdc\xa7\x16\xbe\x96\xc7\xb7\x34\xf4\x61\x0c\xc0\x06\xeb\xb9\x60\x01\x14\xe0\x58\x87\xc9\x2f\x8b\x83\xbc\xe5\x20\x4d\xd2\x06\x7b\x1a\xc6\x67\xdf\x6c\xf0\xbc\x66\xef\x7b\xfa\xbd\x62\xfe\x6e\x2a\x3e\x08\x6e\x79\xe2\xcd\xc2\x5e\x3f\xfe\x3b\x8e\x20\x9b\x11\x7a\x72\x79\x94\xcb\xa0\x93\xae\x54\x07\x06\x63\x7e\xad\x78\x98\x09\x1e\x11\x29\x8f\xd1\x00\x2e\x1a\xfb\x4f\x84\xa7\xce\x21\x11\xbc\x3c\x62\x5a\x33\x71\x18\x75\x41\xfb\x65\x12\xaf\x3b\x01\x06\xf0\x76\x27\x5f\x4e\xba\xbe\x0e\x5b\x93\x36\xe1\xf0\x76\xa1\x0d\x28\xdd\x84\x06\xb3\x53\x14\xf3\xe8\x91\x88\x13\x41\x62\x2a\x4f\xc1\xb7\xae\x1a\x9d\x7a\xa9\xd6\xb6\x77\x96\x34\x9a\x02\x05\xd6\x24\xfe\x9f\x99\xfe\x6d\xe8\xbf\x4b\x21\xea\x21\x3a\x05\x75\xc2\xe5\x9d\x9a\x44\x2b\x07\xe9\x47\x98\x12\x0b\x13\x95\xec\x4c\x59\x95\x85\x70\x9a\x86\x16\xda\x9a\x32\xa6\xc5\x3e\x62\x70\xb6\x9c\xb6\xc9\xcc\xb1\x01\x07\x66\x52\x8a\xdb\x7c\x2d\xc3\x2e\x32\xac\xe6\x12\xe0\x39\xca\x6b\x60\x95\x2e\xf8\x54\xaf\x10\xce\x20\x5e\xc1\x58\x29\x8a\x8f\x3c\x88\x84\x54\x34\x49\x46\xcc\x24\x58\x00\x92\xc6\x57\xb5\x28\x40\xfa\xd3\x1e\xc2\x71\x8c\xfe\xf7\xd7\x1f\x2f\x7e\xbe\x1f\x8c\x87\x57\x60\xb4\x1e\x5e\x0c\xbe\xe9\xf9\x1f\xaf\x1f\xee\xfd\xaf\xc6\xc2\xf2\x44\x04\x4a\xf1\x23\xa8\x78\x4c\x12\x9b\x20\x4a\x46\x2c\x1c\xa9\xc3\x47\xd2\x4f\x24\x71\x91\xae\x56\x4c\xf1\x30\xd1\x76\x0f\x9b\xc0\x55\x2d\x6c\xe6\x06\xca\xef\xad\xff\x64\x35\x0d\x3a\xe2\xf1\x5d\x38\x31\x10\xf2\x80\xb1\x0c\x00\x73\xac\xee\x5b\x10\x1c\x61\x33\xca\x9a\xe2\xf1\x08\x7b\x7a\x49\x21\xfe\x07\xb2\x80\x80\xf0\x1b\x4c\x45\x6b\xda\xab\x47\x3c\x74\x27\x46\xeb\xe9\x58\x56\x0f\x95\x34\xb2\xb0\xc9\x28\x6e\x8c\xf9\xac\x03\xbb\x7d\xf3\xe9\x5a\x08\x4d\xf2\x59\x09\x87\xc4\xe5\x73\x56\x1d\x5c\xa5\xbf\x68\x0a\x1a\x1c\xb1\xfb\xeb\xf3\xeb\x53\x44\x12\x3c\xe1\x90\xae\x68\x43\x82\x5c\x13\x76\xc1\x22\x9e\x06\x0d\x95\x50\xd8\x7a\x28\x2b\x50\xd8\x42\x23\xda\xb1\x69\x63\x0d\x1a\x5b\xc6\xc5\x32\x86\xd9\x7e\x55\x40\x3b\xd9\x1b\x2e\xda\x5c\xff\xfa\x35\x93\xbf\x91\x69\x45\xae\xc2\x79\xed\xdd\x3c\x25\x18\x10\x3a\xac\x5b\xc8\xda\xf2\x6d\x00\x6b\x92\x94\x6a\x46\xeb\x83\x23\x8f\xad\x0b\xbe\x78\x93\x33\xf4\xc3\x5f\x24\x9a\xe4\x6a\xc4\xca\x6d\x70\x86\xfa\x3f\xdd\xa1\xef\xb0\x8a\xe6\xdf\x8c\x18\xe4\x0f\xfe\xf0\x97\x06\xb8\xc8\x8d\x11\x98\xf5\x9a\x9c\x63\x85\x2f\x38\x8e\x29\x9b\xd5\xc1\x2f\x17\x35\xf2\x06\xf7\xfd\x53\x74\x6d\x75\xf8\x22\xdb\x55\x39\xd8\x93\xa0\x21\x60\xc8\x30\x11\xc7\x45\x80\x95\xb3\x32\x44\xad\xd1\xcc\xe0\xc2\x1a\xb1\x7b\x83\x3b\xad\xb9\x2a\x55\x28\xe3\xb6\x4e\xa3\xd6\xca\x0c\x22\x37\x76\x59\xe0\x24\x59\x20\xbd\x3a\x40\xc6\x7e\x33\xac\x3c\x06\xf2\xcc\x32\xb3\x1f\x31\x50\xd0\x7d\xfe\x6d\xc2\x23\x9c\x40\x4c\xde\x51\x60\xd3\xd3\x6a\x3b\xcf\x01\x03\x07\x82\x61\xd8\xa2\x1c\x3a\xeb\x61\x99\xbc\x50\x16\x6e\x14\x18\x00\x60\x1f\xad\x37\x36\xe5\x9a\xe3\x18\xbc\x59\x30\xbe\x25\x66\x75\xf4\x87\x1e\x7f\xd6\x2c\x8b\x7e\xea\x53\xd3\x79\xce\x1c\xde\x5a\x04\xe6\x7b\xb6\x80\xf0\x6d\x28\xac\xc6\x21\xf4\xa3\xe0\xce\x96\x28\x97\x76\xd1\xdf\x89\xc1\x67\x23\x66\x22\x05\x4b\xfb\x12\x22\x14\x06\xbd\x73\x06\x81\x8c\xcb\xf9\xf0\x79\x66\x03\x1b\xad\xac\x9f\x09\x72\xe4\xb3\xbc\xe3\xd2\x9a\xea\x1b\xf6\x18\xdd\x86\xea\x75\xcc\xa3\x3c\x75\xd5\x23\x20\x43\xdc\x46\xc0\xd9\x4b\xd4\x53\x88\xb9\xd8\xd7\x51\x3c\x20\xd1\x29\x02\x10\x39\xad\xf5\x63\x43\x30\xfd\xf0\xd3\x65\x49\xbd\x59\xf0\x05\xde\xb1\x5b\xd4\x9a\x69\x68\x9c\x95\x5b\x2a\xb5\xb6\x33\xf6\xc2\x55\x81\x70\xcf\x05\x08\x5b\xe4\x73\xc6\xc1\xc8\x6d\x12\xa0\x79\xfc\x95\x44\xc3\x1b\x2d\x01\x69\x8d\xd7\x9f\xc1\x5c\x2a\x13\x5c\x66\xf2\x94\xe1\x6b\x93\x2e\xd0\x43\xdf\xa2\x51\xfe\xed\xb7\x7f\x8a\xd0\x67\xf7\xc7\x9f\xff\xf3\x3f\xff\xf4\xe7\x4d\xd2\x49\x9c\x42\x0e\xed\x16\x6b\xe4\x4b\x66\x96\x45\xa2\x70\x07\x96\x39\xd5\x0e\xbb\x60\x0f\x60\xd3\xf2\x6f\x83\x64\x1d\xc4\x0e\xe1\x99\x3d\xe1\x32\x3c\x99\xa8\x74\x34\x8b\x48\x02\x49\x54\xaf\xcc\x21\xbc\xb0\x6b\x25\xfa\xff\xb5\x02\x90\x75\xac\x8f\xca\x76\x31\x4e\x34\xf1\xe2\xb5\x6e\x04\x7d\x6d\xed\x7f\x0a\x1c\x88\xdf\xb8\x0b\x8e\x27\x31\x11\x66\x4c\xde\x64\xe7\x0d\x89\xc0\x1c\xc8\xe7\x2c\xe1\xb1\x83\x80\x2f\xf0\x0e\x28\x08\x08\x83\xcf\x58\x73\xee\x9e\x85\x0a\xb5\xf9\xa5\xe0\x79\x99\xe2\x88\xd8\x5c\xe8\xaf\x3f\x9f\xea\xdf\x7a\x68\x71\x0a\x41\xa4\x3d\xf4\xeb\xa9\x45\x04\xc4\x42\x8d\xf5\x4f\xdf\x38\x59\xdb\x36\x01\x83\xa6\x12\x7d\x75\xf2\x84\xc5\x09\xb0\xe7\x13\x33\xa2\xaf\x2c\x67\xf5\xb5\x7f\x43\xd9\x3c\xe1\xfc\xd1\x06\xd8\x2e\x7d\x78\xe2\xc0\x65\x81\xbc\xbd\xdf\xc4\x6c\xbd\x07\x1f\x52\xe8\x08\x5e\x20\xe8\x38\x9b\xa0\xe3\xbf\x4b\xce\xd0\xf1\x02\xa7\x89\xfd\xd5\x3d\xb5\xf1\xbf\x58\xda\x9c\xb8\xd8\x07\xf9\x24\x0b\x63\x29\xfd\x2e\xe1\x13\x98\xd5\xa5\x9b\xa9\x89\xa0\x85\x81\x16\xb7\x4f\x71\x61\xd9\x89\x38\xb0\x0d\xc0\x48\x4c\xb9\x32\xaf\xd8\xf4\xd6\xe5\x59\x7d\xf6\x43\xfa\x6f\xe3\x17\x86\x45\x71\x49\x7c\xc6\x38\xec\xa3\xd7\x74\xa3\x9f\xd1\xd7\x96\x05\x7d\xa3\xef\x18\x1b\xae\x6c\x96\xa1\xae\x83\x85\xef\xe0\xe7\xa0\x03\xca\x90\x49\xcb\x5c\xf1\xe5\xaf\x27\xc7\xc7\xc7\xfe\x6b\x40\xe6\xf9\x7f\x11\x55\x92\x24\x53\xd3\x92\xbb\xc1\x16\x23\x76\xe9\x8a\x4b\x39\xe3\x75\x01\x5b\x9d\x09\xae\x78\xc4\x13\x74\x54\x18\x74\x63\x1e\x49\xf4\xef\x5a\xac\x0d\x96\x12\x7e\xd4\x7a\x5c\x03\xd4\xbd\xa9\x66\xf1\x4a\x87\xca\x1a\xc4\xab\xc7\x2a\x44\xaa\xf5\x8a\x2d\x96\x61\x32\x32\xd0\x82\xa6\x9c\x13\x8b\x66\x2b\x84\x7e\x99\x7c\x56\xf0\xa8\x01\x2c\xb8\x36\x94\xbd\xfe\xa6\x5c\x62\xb7\x05\x66\xb0\x21\xeb\x86\x05\xb0\x98\x9e\x96\x33\x98\x79\xf6\x42\xf7\x89\xbe\x5c\x58\x58\xee\x48\xe6\x69\x8a\xc5\xe2\xa4\x38\x6d\xcb\xc4\x59\xa0\xc9\x02\x8f\x49\xdc\x02\x80\x0b\x37\xb1\x47\xcb\x46\x31\x58\xf1\xd2\xdd\x68\xfe\xec\x46\x50\xaf\x39\x40\x65\x22\x2c\xe2\xb1\xa5\xeb\x22\xfb\xb4\x2c\xb1\xf8\x77\x96\x65\x15\x17\x11\x23\x0b\x63\x1c\x53\x06\xa6\xcc\xbe\xe1\x3e\x6e\x60\xdf\x7c\x0c\x95\xff\xc9\x6c\x03\xf7\xe8\xf0\xfa\xce\x7d\xd3\xfe\xd2\x85\x75\x28\x8b\xec\x38\x09\x31\x80\xd9\x0c\x09\xfc\x5c\x5c\xbf\x10\xdb\x61\xac\x33\xb9\xcf\xcd\x35\xff\x3e\xe3\x37\x34\xd1\xb7\x16\xd0\xf8\xf1\x88\x95\x7e\xee\x21\x92\xd0\x94\x32\x1f\x5b\x67\x98\x3b\x9f\x1a\xe9\xf9\x91\x2a\xbd\x65\x32\x7e\xd4\x1c\xcc\x61\x57\x06\x2a\x55\x9f\x2d\x1c\xe9\x78\xc7\x94\xb5\x40\xe4\x52\x8f\xab\xd0\xd1\x21\x6b\x9f\xc6\xe4\xc8\x0a\xa4\x34\x20\x3c\x38\xbf\xff\x1f\x7b\x6f\xda\xdd\xc6\x91\xa4\x8d\x7e\xef\x5f\x91\xd7\xef\x07\x49\xef\x80\xa0\xe5\x9e\x99\xe3\xd1\x1c\x9f\x73\x61\x8a\xb2\xd9\xa6\x28\x36\x17\xbb\xe7\x36\xfa\x40\x89\xaa\x04\x90\xc3\x42\x66\xb9\x16\xd2\xe8\xe5\xbf\xdf\x93\x11\x91\x4b\xad\xa8\x22\x48\xc9\xd3\xe3\x0f\x33\x6d\x11\x40\xee\x4b\x64\xc4\x13\xcf\x33\x57\xa6\x34\xbb\x97\x3c\x5c\x38\x28\x2f\x28\xee\xc8\x8a\xfe\x04\x27\x00\xd4\x51\xc1\xfc\x3a\xfb\xb7\xc5\x40\x39\x55\xe5\xf6\xd0\x64\x13\x82\x0f\x7f\x2e\x37\xdd\x65\x26\xec\x4d\x45\x89\x4b\x42\x95\x5b\xbb\xa1\x46\xac\xb8\x53\x32\x7f\x62\x11\x25\x1c\xd9\xf8\x4c\x41\x80\x7c\x9c\x60\x80\x34\x0d\xea\xc2\xeb\x05\xab\x41\x1d\xc1\x44\xa8\x97\xf8\xef\x57\x8c\xee\x86\x2f\x27\x74\x9f\x67\xb9\x63\x39\xc3\x39\x07\x1d\x6a\x11\xa3\x0f\x1d\x94\x17\xd6\x3c\x8b\xd1\x5b\x1e\xbe\x2a\x30\x83\xd7\xd8\x5f\x3b\x5d\xb2\x07\x99\x6f\xe6\xea\x46\x5b\x87\x23\x53\xda\x69\x57\x4c\xe0\x31\xda\xa8\x8f\xe7\x70\x08\x40\xab\xdb\x56\x80\x39\x84\x0f\xca\x35\x02\x14\xec\x42\xe9\x58\x1c\x46\xd2\x78\xe3\x63\x15\x36\x7e\x9d\x09\xcc\x07\x83\x9b\xa2\x2b\x9d\x56\xe4\xf9\x48\xdf\x7c\x7d\xe2\xe1\x1e\xa2\x72\x4c\xad\xfa\x61\x94\x82\x48\xc8\x7f\xea\x6e\x35\x28\xc5\xbe\x38\x83\x6c\xe0\xca\xd8\x3b\x45\x88\x43\x27\x21\x6a\x61\x64\x1c\x74\xf7\x63\xdf\x23\x18\x76\x07\x30\xe6\x6c\x9d\xe9\x32\x75\x29\xf3\x36\xdd\x0f\xa7\x81\x6c\x9a\x33\xb5\xd2\x6f\xe8\x4d\x75\x2e\xd5\x1d\xae\xf8\xe7\x9a\x23\x14\xfd\x10\x71\x85\xaa\xd6\x2a\xd1\x43\x1f\x8e\x98\x54\x51\x52\xc2\xc5\x97\x17\x3c\xba\x43\xe1\x92\x2e\xa7\xaf\xf9\xcd\x62\x7f\x32\x65\x87\xc5\x54\x26\x09\x55\xeb\x2f\x50\x20\x83\x03\x17\xd0\xbd\xe4\x8c\xb3\xdb\xab\xb3\xf6\xba\xef\x64\x33\x98\xd3\x7e\x7b\x56\x17\x08\xfc\xbf\x1f\xe4\x28\xdc\x65\x8d\xfa\x57\x54\x96\xba\x73\x2e\x75\x11\xcb\xe3\x22\x2d\xcc\x03\x22\xbe\x6a\x71\xed\x8f\x5e\xa7\xeb\xb4\x5c\x98\x81\x4a\xc6\x00\x04\x4c\x2b\xbe\xbb\xbc\x9d\x05\xbf\xeb\x5b\x2a\xdf\x5d\xde\xb2\xa0\x0e\x24\x75\x4e\x44\x54\x38\xa4\xf1\x94\x9d\x78\xad\x85\xba\x65\x1e\x8b\x7b\x19\x61\x8a\xeb\xc4\x58\x45\x73\x05\x14\xe6\xe6\xad\x73\x64\x79\x2f\xd9\x77\x97\xb7\xc4\x96\xe9\xf9\x6d\x50\x36\x02\x28\x2c\xc6\x5d\x3b\x35\xf2\x70\xa5\xd5\x11\x52\xfb\x64\xb1\x8f\x76\x4c\xe0\x71\x1d\xf1\xb4\x28\xc9\xc0\xb8\x7f\x3d\xb5\x73\x72\xe5\x23\x21\xa6\x59\x7a\xae\x8c\xad\x84\x59\x06\xa0\x70\x66\x3a\xdd\x9c\xda\xda\xa0\x1e\x02\x0e\x80\x41\x3b\xe8\xf0\x97\x2e\xc3\x8f\xab\x1d\xe3\xd9\x52\x16\x99\x79\x86\xe1\x8f\x27\xc8\x44\xb6\xb1\x2a\x56\x38\x6f\xde\x32\x22\x51\x3a\x98\x60\xa9\x8a\x7c\xae\x82\x0c\x16\x97\x15\x8c\xc9\x0b\x52\x31\xa0\xfc\x05\xec\x8d\xa5\x20\x8d\x12\x5d\xc6\xf6\x5a\xcd\x9c\xc8\xdd\x2e\x45\x23\x6a\xae\x80\x99\xc4\xdc\xad\xda\x98\xa1\xfe\xee\x7f\xc3\x3e\xaa\x7b\x19\x4b\x7e\x54\x88\x3c\xe1\x47\xc5\xbf\x7e\x9c\xd4\xfe\xc4\x5f\x7f\xf9\xe5\x47\xd4\xeb\xeb\xa2\x5d\x08\xd8\x95\x0e\x74\xf0\xb4\xc7\x29\x1c\x4f\xa1\x59\xa5\x07\xcc\xd3\xb9\xbc\x13\xec\x23\x4e\xf7\x47\x22\x29\x7e\xdc\xb4\xcd\x55\xdb\xbc\xb1\xc7\x4c\x1b\x50\xc6\xb7\xcf\x1b\xeb\x99\xb6\xd7\xeb\xe9\xbf\xad\x97\x66\xb6\xbe\x5a\x4f\x5f\x7f\x09\xff\x59\x9b\xa3\x7d\x9b\xd7\x65\xcf\xb4\x35\xbb\xe5\x20\x6a\xd9\x96\xee\x2c\x9a\xab\xfd\x87\x11\x1b\x77\x16\xc1\xaa\x6d\xdb\xf8\xbc\x10\x87\x66\xb7\x22\x77\xf5\x08\xf4\x75\x83\x14\xbc\x37\x22\x78\x20\xa3\xb6\x67\xc3\x06\xb8\x67\x37\xb5\x77\x08\xc0\x85\x0f\x47\xf0\xf1\xc0\xf7\x87\xf5\xa7\xf6\xdd\x3d\xdd\xe9\x6f\x66\x22\xc4\x08\x06\x99\x6b\xf3\xf5\x81\x8d\xac\x7c\xb5\xaf\x8d\x0f\x1c\x55\x03\x9b\x62\x35\x31\xbd\xd6\xc7\xec\x22\xbb\x1c\xd1\x65\x92\xbb\xbc\x3f\xd7\x12\x0b\xad\x74\xef\x6b\x5b\xef\x9a\xf6\x52\x28\x4a\xe8\xa2\x6e\x2d\x0b\x3f\x70\x45\x1c\x08\x85\x33\x4f\xea\xc5\x76\x30\x11\xba\xaf\xf8\x2d\xfd\xf8\x7d\x83\x16\xdd\x99\x97\xef\x21\x33\xdb\x91\x61\x6d\xb9\x32\xd6\x9a\xad\xb5\x23\xb0\x84\xaf\xfc\x47\x35\xe9\x36\x7d\x54\x83\xb0\xc6\x81\x7a\xfd\x54\x95\x2d\xe5\x01\x63\xab\x3c\xc1\xd8\x41\xb1\x01\xb7\xb2\xd7\xb9\xb5\xc7\x9c\x77\x2f\xa3\x26\x6e\xc2\xb3\x35\x3a\xbd\x72\x51\xe4\xaf\x5a\x66\xd8\xe7\xb1\x1d\x30\xc3\xd6\xec\x5a\x8c\xe3\xf9\xb0\xf6\x18\xb8\x54\xfa\x76\x9a\x6b\x65\x55\x14\xc3\xbd\xb4\x6c\xfd\x21\xe3\xbb\x4f\xae\x8b\x74\x86\x0a\x52\xc0\xc7\xda\xcd\x83\x75\x20\x1d\xec\x05\xdf\x3a\x96\x17\x2a\xcd\xe6\xec\x62\xe3\x96\x02\xf4\x5c\xba\xdb\x30\x88\xeb\x75\x68\x13\x88\x91\xb6\xab\x05\x73\x35\xb3\x5f\xf1\xac\xd4\xb9\x44\x2f\x0b\xa6\x23\x96\x4b\xcc\x70\x01\x9f\x19\xf7\xa3\x4e\x9d\xeb\xe8\xc4\xd8\x84\xfc\x5a\x17\x6e\x73\x91\xf9\xdb\xc8\xb3\x96\x86\xfd\xe8\xa8\x79\x18\x6b\x71\xef\x89\x6e\xbb\x48\x45\xd9\xb1\x6c\xab\x78\xf8\x43\x85\x0a\x22\xc2\x6a\x44\x31\x40\x5e\x40\xb2\xf3\xcb\xd4\x93\x9b\xd7\x2a\x6b\xee\xd6\xe2\xa0\xd3\x58\xf2\xed\x22\xd3\xdd\x32\xcc\x03\x86\xc9\x16\x51\xf1\xd9\x6f\x50\x96\x71\xc7\x7e\x2e\x79\x82\x97\x9b\xa2\xe5\x68\x9b\x0d\xee\x8f\xaf\xfe\x9d\xcd\xe0\xf6\x61\xef\xe1\x5c\x04\xd0\x16\x94\x56\x68\x26\xb7\xa9\xc8\x72\xad\x78\xa7\x1e\xf9\xdd\xd7\xf9\x82\x34\x55\xcd\xd3\x58\x97\x4d\xfd\xd4\x11\x3d\x69\x29\x2d\xec\x14\x67\x77\xe5\x52\x64\x4a\xa0\xe6\x3a\x7c\x8f\xd9\xef\x0d\x6a\xae\xe6\x65\xb1\xf9\x6a\x11\x25\x72\xb0\xd0\x2b\x64\x8c\xce\xcc\xcf\x4e\xf0\x57\x7d\x1d\xa8\x94\x5f\x69\xba\x62\xf8\x19\xc3\xcf\xa6\xec\x5b\x1e\xdd\x09\x15\xb3\x34\x29\xd7\x92\x08\x62\xd0\xdc\x97\xd5\x87\x7d\xb5\x63\x68\x5b\x60\xf9\xe6\x1a\x9a\xab\x2d\xbf\x43\xf1\x15\x32\x22\xcd\xcb\xa1\x8b\x5e\xd0\xb9\x4a\x16\xb2\xb9\x76\xf7\xce\x96\xbb\x0f\x9b\xc5\xd4\xd7\x5e\x5e\x62\xbe\xdc\xc3\x46\x13\xca\xa8\xe2\xa9\x19\xb1\x71\xdd\x6a\x6d\xf0\x78\x59\xae\x15\xa7\xbe\x4f\x8d\xc1\xdd\x0b\x21\x3c\x10\x10\x2a\x15\xe3\x40\x05\xf6\x22\x67\x65\x6a\xed\x33\x88\x2d\x25\x80\xf4\xc1\x29\x30\x1f\xa4\x32\xba\x43\x6c\x29\x64\x4f\x30\xd7\xbd\x86\x48\x33\x13\x1e\xe4\xd8\x76\x34\xac\x90\x08\xe7\x30\xdc\x4a\x43\x7f\x68\xcf\x3a\x1d\x98\x19\x52\x6c\x84\x5a\x3c\x42\x06\x67\xf8\xa4\x55\xb2\x40\xc8\x0c\x76\x31\x3a\x37\x84\xa5\x92\x44\x7b\xed\xdf\xd8\x4e\xe3\x41\xae\x6a\x66\xb4\xcc\x59\xce\x0b\x99\x9b\xb3\xac\x75\xc4\x3d\xfd\xd0\x21\xa3\xce\xc7\x71\x1e\xb5\xf0\x1d\xd5\xc6\xc2\x65\x9a\x4d\xd9\x3b\x88\x6c\x04\x2f\x03\xed\xd8\x83\xba\x0e\xac\x62\x23\x3a\x69\x74\x9f\x02\xa2\x69\x7b\x10\x7c\xbf\x37\x60\xe5\xb2\x0a\xa7\x6c\xe6\x23\xca\xc8\x9f\x84\xb1\xe2\x3d\x3d\x12\x49\x2e\x1e\xb3\xf8\x06\x05\x5f\x00\x75\x05\x0b\x88\x81\x25\x95\x9b\xbf\x7b\x3e\x75\xd7\xcc\x07\x48\xdc\xe7\x77\x42\xf5\x79\xd8\x87\xb7\x10\x43\x20\xbd\x2e\x01\x17\x5b\xd1\x18\x5e\x79\x4c\x03\x87\x6f\x3b\x4f\x59\x25\x57\xc7\x66\xc8\xcd\x33\x24\xba\xa3\x74\x41\x8c\xb0\x11\xe9\xd5\xc3\x46\xe7\xe1\x3e\xb3\xf3\x87\x2f\xd9\xac\x74\xea\x56\x90\x6e\xe9\x06\x18\x71\x96\x4a\x87\x9c\x58\xd0\x6a\xb7\x49\xd1\xad\xe3\xe6\x9b\xd9\x23\x14\x86\x01\x90\x09\xb6\xa8\x96\xdd\xac\xd2\xf2\xa9\xd4\x53\xf6\x13\x51\x37\x47\xb8\xd1\xa0\x1f\xbe\xce\x3f\x40\x7d\x4f\x41\x07\x83\x7e\xbe\xa7\x4f\xc5\x7a\x64\x10\xda\x81\x8c\xad\xff\x51\x43\x9a\x06\x5d\x94\xa9\x8e\x99\x5f\xef\x5d\xb9\x2e\x4a\x69\x04\x99\xfe\x0a\xbb\x15\x34\x6e\x70\xdf\xf6\x6d\xb5\xf7\x01\x52\x8d\x2d\x4b\x99\xc4\xc8\xe7\x17\x58\xa8\xda\x9a\x40\x20\x24\x04\xf6\x88\xcc\xdd\x05\xd7\xb2\xe8\x7f\xf8\x3a\xbf\xd4\xf1\x21\x0b\x6b\x3c\x67\x6b\x73\x5d\x0f\x48\x64\xc9\x43\x34\xd1\x76\xff\x48\xa4\xba\x3b\x05\x21\x5e\xe4\x55\xe5\xdc\x9e\x06\x03\xe6\x6c\x59\xae\xae\x41\xa6\xb3\x8b\x16\x29\x50\xb0\xb3\x79\xce\x66\x9e\x4d\x35\x2e\xeb\xae\x6b\x52\x08\xc2\xe4\xed\x11\xce\xfe\x70\xfd\xe1\xe2\x68\xcb\xb3\x7c\xc3\x81\x76\xc2\x96\x35\xb1\xca\xe7\xf8\x5e\xb7\xd0\x0a\xa9\xe6\xea\x88\xad\xf5\x04\x81\x3c\x6f\xd8\xa6\x28\xd2\xfc\xcd\xf1\xf1\x5a\x16\x9b\x72\x39\x8d\xf4\xf6\xd8\x0f\xcd\x31\x4f\xe5\xf1\x32\xd1\xcb\xe3\x4c\x40\x2a\xc7\xd1\xeb\xe9\x57\xaf\x61\x66\x8e\xef\x5f\x1f\x03\x7c\x63\xba\xd6\xff\xe7\xfc\xab\xff\xf8\xfd\xbf\x9b\x82\xd3\x5d\xb1\xd1\xea\x0d\xa1\x84\x7a\xcb\x3e\xc2\x67\xc2\x31\xfe\xa4\x56\xcb\x7f\x4c\xbf\x0c\x9b\x41\x5f\xdd\xea\x58\x24\xf9\xf1\xfd\xeb\x85\x9d\x98\x69\xda\xa1\x2d\xf1\x5b\xf2\xc3\x27\x48\x7e\xb8\x93\xc5\x6f\xc9\x0f\x9f\x35\xf9\x61\xb8\xc9\xe5\xce\x18\x60\x93\xf6\xe7\xa3\xf9\xbb\x3b\x23\x6d\x2c\x60\xdf\x39\xd4\x72\x39\x84\xa9\x69\x07\x5c\x11\x23\xa5\xde\x6a\xdd\x75\x6f\x99\x0e\x9f\xdf\x58\x45\x97\xce\xd7\xc5\x28\x26\x0e\x80\x1a\xca\x08\xd4\x02\xd0\x47\x99\x72\xd9\x96\xd2\x10\x28\xdc\x1c\x30\x84\xa8\xb8\xd1\x4e\x3b\x36\x44\x98\x8a\xb4\x99\x44\xbc\x78\x12\x89\xaa\xd6\x3a\x10\x95\x39\xba\xfc\x86\xdd\x3d\xc0\x34\x26\x9c\xf2\x41\x23\xfa\x8c\x62\x22\x4f\xad\x22\x42\xdd\x7d\xa4\x82\x48\x82\xbf\xb6\xa8\x6a\xfd\x60\x95\x43\x9e\x42\x6f\xc3\x23\xc6\x87\x69\x6d\xe0\x22\x85\xb6\xd8\x76\x75\x34\x63\xc3\xf3\xc7\xc1\xf3\x67\x48\xd6\xeb\xa2\xb1\x88\x6d\x96\xb9\xad\xd0\xde\xc6\x96\xff\xc8\x5c\xee\x96\x66\x31\x2d\xb3\x54\xe7\x22\x9f\xb2\x77\x3a\x43\x62\x2d\x62\xbd\xf1\x29\x07\x57\xef\x4e\xd8\xeb\xaf\xff\xe3\xf7\x73\xf5\xb2\xc5\x18\x82\x4b\x54\x67\x6b\xca\x80\x00\x13\x68\xcb\xf3\x42\x64\xc7\xd9\x2a\x3a\xc6\xab\xe3\xd8\xfc\xfe\x88\x2a\x3d\xd2\xab\x23\x27\x26\x70\x44\xbc\xea\xd3\x6d\xfc\xaa\x0b\x1b\xd8\x6e\x70\x7f\xb6\x47\xcf\xac\xc3\x30\x6f\x9b\xdf\xfd\x07\x6b\x65\x0b\xa1\x21\x42\x56\x48\x0e\x16\x0b\x92\x21\xea\x95\x93\xbf\xc1\x4c\x5b\x54\xca\xd2\xab\x96\xff\xf8\x36\xd1\xcb\xfc\x95\xa3\x60\xe5\xb9\xad\xc3\x73\x22\xb6\x9d\xdb\x8d\x3d\x77\xc8\xeb\x9b\x86\xe2\x39\xdd\x6a\xf6\x4c\x0c\xa7\x6d\xcc\xc0\xb7\x1f\x1a\xde\x16\x44\x46\x28\x9e\xe9\x52\x59\x7d\x09\xad\x84\x5e\x01\xd0\x08\x9e\x49\x16\x27\x09\x91\x05\x40\xdf\x39\xf6\xa7\x4c\xa4\x68\x7d\x40\x0c\xac\x7b\xb8\x0f\xd4\x58\xd9\x37\xce\xcf\xa1\xb1\x72\xe8\xb8\xd3\xc1\xf8\x99\x06\xfc\xd0\x64\x06\xdc\x4a\x63\x30\x40\xe6\xfb\x7b\xe3\xfd\xee\x1c\xf0\x1a\xcf\x5e\xce\x20\xe5\x19\x58\xf0\xe2\xa8\xd0\x47\x40\x9b\x07\x64\x6c\xa8\x7a\xd4\x05\x02\x02\x9c\xc4\x98\xeb\xde\x7c\x7f\x40\x3b\xf1\xd5\xf6\x4b\xd0\x50\x32\x58\x73\x24\x11\x27\x50\xb8\x54\x4a\x64\x14\x01\xde\x6b\x19\x8c\x44\x51\x84\x53\xd9\x8f\x09\xf7\x6e\x8a\x50\x91\xc6\x65\x04\xf2\xe0\x10\x98\x32\x78\x9a\x6c\xf4\x56\x1b\x5b\x57\x97\x79\xf0\x21\x3e\x6d\xc1\x98\xe8\x34\xcc\xb7\x3c\x45\x7b\xf5\xf3\xf5\xc6\x6c\x2d\xf3\x11\xba\xa0\xc3\x2f\x8d\x12\xf9\x5a\x56\x65\x8d\xf6\xb4\xdf\xe9\xd1\xf4\xaf\x1b\xc0\xe8\x6c\x21\xe4\xb7\xe1\xf7\xc2\xaa\x4c\xc8\xbf\x9a\x47\xaf\x59\x52\xee\x19\xe9\x2c\x10\x84\x94\x21\x1b\x74\x08\xa0\xb4\xb7\x6e\x27\x5f\x4b\xb9\x1d\x39\x07\x2e\xcd\x69\xc8\x04\x70\x85\x89\x3f\x36\xe3\xe7\xa8\x35\xe5\xa7\x6b\x5f\x82\x5f\xad\x34\x2f\x13\xcb\x58\x3e\xae\xa9\xd7\xae\x00\x22\x27\x6f\xb6\xdb\x13\x3e\x42\x7e\x18\x8e\x31\x1e\x08\xd6\xb6\xe8\x82\x19\x8f\xdf\x8c\x20\xf1\x36\x66\xec\xa0\x12\x5c\x9c\x8d\x11\x0c\xf6\x42\xd7\x00\x8e\xf3\xbf\xf6\xb9\x33\xdb\x10\xe6\xc8\x91\xeb\xf3\x87\x4d\x2b\x1b\x9e\x05\xf7\xc3\x7b\x2f\x23\x0c\x00\xdc\x65\x09\x9f\x5f\x7c\xb8\x09\xb1\x45\x12\x7b\x7b\x14\x6d\x44\x74\x07\xde\x34\xbc\xf2\x70\x33\x50\x3a\x3c\x00\x9e\xbd\xf8\x68\xa1\x2d\x50\x66\xe7\xf4\x58\x9c\x26\x91\xce\x58\x2c\xf3\x34\xe1\x3b\x80\x24\x28\xcc\x14\xf4\x70\x06\x97\x62\x6b\x8e\x82\x7d\xc1\x84\xe1\x33\x6d\x66\x65\xe6\x7f\x37\x76\x2c\x3d\xf4\xdb\x0f\x66\xf3\x3c\x60\xb9\xd8\x72\x55\xc8\x68\xae\xb6\x82\xab\x10\x43\x4a\x90\x0c\x33\xc8\xb1\x16\xa4\x58\xb0\x5a\x89\xa8\xf0\x94\xc7\xf0\x08\x71\x23\xb5\x6f\x0f\x8e\xeb\xbb\xdb\x79\xbd\x5d\xff\xde\x0a\x24\xcb\x2d\x20\x94\x69\x0d\xd1\xd5\xf8\xc8\x50\x23\x88\xd5\xd2\x95\x6b\x1f\xb5\xf0\x2f\xbb\xa6\xd8\x52\x14\x0f\x02\x18\x7d\x88\x82\xa0\xcd\xc6\x3f\x58\xb0\xe8\x90\xf4\xbd\x99\x63\x00\x24\x82\xf7\x06\x85\x2f\x6d\xb0\x10\xfa\xe8\xa8\x07\x55\x8d\x43\xf0\x05\x91\x22\x80\x2b\xf0\x05\x39\x35\x5f\xc0\x35\x6d\x5e\xc1\xd9\xbd\x88\xe7\xaa\x4a\xec\x48\x36\xa3\xdf\x70\xcc\x4b\x71\x3e\xcd\x69\x63\xc7\x78\x50\xa0\xe7\x14\xc8\xac\x3c\x8d\xb5\x4b\xfb\xef\x91\x06\xc5\x4e\x3f\xe7\xab\xca\xaa\x12\x0f\x7d\x0c\x7b\xb5\x4e\x92\xda\x23\x65\xde\x0a\xfa\xc7\x2d\x4a\x47\x5b\x87\x9c\xb6\x0e\xae\x4d\x4e\xeb\x86\x1b\xbc\xad\x8c\xb9\xb2\x7c\x2e\xab\x32\x41\x9e\xf2\xae\xac\x19\x62\xb1\xb4\xb9\xa7\x9f\x2f\x07\xd9\x39\x5d\x59\xa0\x6e\xea\x40\x3a\x01\x74\x1e\xcf\x3a\xbb\xea\x85\xca\x4b\x30\x29\xac\xb0\x21\x44\x25\xd6\xa2\x80\xdb\x3c\x2e\x13\xa4\x27\x81\x70\x0a\x30\x62\xf2\x24\x61\xb2\xc8\xe7\xca\x11\x78\x62\x6a\x0c\x9c\xb0\x36\xde\x12\xd3\x93\x0b\xaa\x80\x62\xe1\x63\xae\xc0\x0e\x93\x91\x2c\x1a\x09\x07\xbb\x50\x0c\x2c\x4d\x05\xc7\x6c\x7a\x9c\xb6\xb9\x0a\xdf\x5c\xf5\x49\xa0\xd4\x73\xd0\x8f\x7f\x8a\x2c\xf0\x1e\xc7\xad\xa9\xe2\x51\x28\x1b\xec\x9d\x79\x70\x59\x9d\x6f\x6c\x2d\x31\xf8\x10\x2e\xd8\xbc\x6a\x8a\xdc\x06\x50\xfc\xbb\x15\xb2\x6a\xa2\x32\xe1\x19\xa6\x13\xad\xca\x84\xc9\x55\x20\x59\x0e\x73\x80\xf4\x8d\x66\xba\x22\x0d\x77\xb5\x0d\xa1\xe4\x7c\x2b\x02\xe6\x18\x72\xef\x24\x01\xe2\x07\x35\x29\x10\x4a\x62\xca\x7a\x35\x65\x6f\x3d\x41\x2d\xce\x30\xec\x89\x80\xf6\x59\xe6\x78\xfc\xb9\xf6\x06\xa4\x07\xa8\xe5\x2f\x57\xe6\x49\xf9\x22\xd8\x75\x1d\x33\x08\xf2\x31\xe3\xe0\x44\x56\x3c\xa8\x1f\xe3\xde\x4a\x7a\x62\x7e\x5a\x03\x19\xb9\x0d\xd1\xd1\x40\x7b\x2b\x8c\x6c\x64\x48\x99\xfd\x88\x86\x3a\x4a\xf2\x96\xc6\x6e\x7b\x14\xd2\x61\x1e\x47\x36\x35\xd0\x1b\x1c\xdf\xd0\x60\xe5\x84\xe0\xb1\x21\x23\xbb\xe6\xc5\x58\x24\x99\x4b\x1d\x1b\xdf\xd0\x56\xd4\xde\x90\x66\xc2\xe9\x31\xb2\x9d\x33\xf3\x9b\x47\x36\x34\x2f\x97\x47\x78\x40\x3b\x45\x22\x38\x2a\x04\x8f\x36\x55\x16\x07\xcb\xb5\xec\x7a\x00\x59\x7c\xb0\x1f\xc7\x13\x50\xcc\xfc\x9a\x03\xc9\x45\x66\x9a\x3f\x65\x1f\x94\x40\x9c\xa7\x5e\x05\x97\x0a\x35\x80\xb4\x19\x41\xee\xc6\x9d\x72\x4b\xd3\x30\x75\x67\xc9\xad\xcc\x96\x9b\x30\xee\x4b\x87\x53\x0f\x97\x0d\x9e\x22\x1d\xb6\x64\x9b\x38\xd4\x01\xe6\xe5\x30\x8a\x88\xf6\x37\x7f\x00\x97\x1e\x7f\x02\xb4\xf5\x63\xf8\xb4\xf4\xe6\x3d\xb8\x57\x9c\x4d\x76\xa8\xae\x1b\x86\xe0\xe7\x7d\xe3\x7b\xb9\xa9\x62\x66\x47\x48\x29\xde\x5e\xbc\x3d\x7d\x77\x76\x51\xd5\x3f\xfc\xe3\xed\xe9\x6d\xf5\x2f\x57\xb7\x17\x17\x67\x17\xdf\x85\x7f\xba\xbe\x3d\x39\x39\x3d\x7d\x5b\xfd\xde\xbb\xd9\xd9\x79\xed\x7b\xe6\x4f\xd5\x2f\xcd\xbe\xfd\x70\x55\x53\x5c\xb4\x72\x89\xc1\x9f\x6e\xce\xde\x9f\xbe\x5d\x7c\xb8\xad\x88\x36\xbe\xfd\xaf\x8b\xd9\xfb\xb3\x93\x45\x4b\x7b\xae\x4e\x4f\x3e\xfc\x78\x7a\xb5\x47\x73\xd1\xf7\xb7\x75\x48\x9f\x02\x5b\xf8\x68\x05\xce\x19\x5b\x65\x52\xa8\x38\xd9\x61\xa6\x88\x7d\xd9\xd6\xa0\xdf\xe1\xdd\x2b\xb7\x42\x97\x87\x24\x7c\xdc\x6c\x04\xd3\xf7\x22\x03\x1e\x2e\x2c\x8d\x48\x3b\x7c\xce\x7f\xbd\xd6\x4c\x14\x59\x33\x2a\xd0\x9b\xd7\x56\x64\x3b\x97\x39\xd9\xd7\x1c\xcf\xe1\x48\x95\xb0\x54\x64\x7d\x6d\x01\xcb\x28\x2b\xd3\x42\x2e\xbb\x53\x78\x46\xa7\xbe\x0f\x7d\x7b\x23\xe3\x70\x3b\x3d\xdb\x45\xfb\xc1\x58\xc9\x64\x39\x04\x26\x0f\x25\x3c\x56\x58\xd6\xfd\xda\x42\x8b\xd3\x72\x99\xc8\x88\xc9\xb8\xee\x4f\x21\x46\x0a\x70\x19\xd7\x89\xc9\x53\x91\x81\xa9\x6a\x5e\x00\x69\x26\x8e\x78\x59\x6c\x90\x44\x93\x12\x67\x48\x46\x66\xae\x72\x11\x65\x02\x63\x01\x22\x07\x27\x2d\x2a\x8a\x06\x35\x41\x63\x88\x43\x26\x06\xba\xba\x69\x20\x12\xd3\x11\x23\xc0\x5f\x62\xe9\x23\x9c\xa4\xf8\xfd\xde\xa1\xa1\x16\x4b\xd4\x2c\x0d\x60\x61\x70\xc3\xe3\x87\x56\x97\xd4\xf4\xdb\x9c\xd4\x4e\x97\x13\x27\xd9\x66\x1a\xb5\x77\x63\xdf\x1a\x0b\x17\x4a\x35\xf5\x86\x4a\xa7\x8f\x4e\x32\x01\x97\x08\x41\x1a\xac\xff\x02\x70\x4d\x94\x99\x04\x09\x49\xe6\xa9\xb6\x14\x1b\x9e\xac\xd0\xe2\x30\x53\xd3\xce\xeb\x81\xe5\xdf\xe8\x3b\xa1\xae\x70\xc2\x3e\xcb\x71\xa8\xf0\xe5\xe3\x59\x85\x9c\x47\xc8\xbb\x30\x4d\x1b\xed\xaa\xb2\x99\x99\x60\x4c\x15\xf8\x4e\x08\x3e\xc6\x04\x24\xaf\x19\x60\x93\x3a\x57\x2b\xf9\x8b\x29\x70\xae\x44\x2b\x6b\x3a\x80\xc9\x2c\xbf\xa3\x3b\x97\x01\x38\x87\x24\x79\x77\x42\x81\xa2\x29\xd0\xf3\xed\x5f\xb3\xe3\xfc\xe7\xcd\xb9\xe8\x71\xe8\x83\xcf\x4f\x56\x84\x5e\xc3\x28\x8f\x1d\xa7\x02\x33\xc2\x1c\x0b\x06\xac\x9b\x93\xf3\xb3\xd3\x8b\x9b\xc5\xc9\xd5\xe9\xdb\xd3\x8b\x9b\xb3\xd9\xf9\xf5\xd0\xed\xf7\x14\x59\x7c\xb5\xdd\x57\x4f\x66\x73\x27\xc4\x31\xed\x3c\x9f\x4c\xee\x3a\xe5\xb7\x1d\x4c\xc9\xfe\xd6\xcb\x38\x5d\xc4\x32\x8f\xcc\xf5\xb7\x5b\x08\x15\x83\xdc\xc4\xa3\x96\x6a\x7b\x51\xf5\x5e\xb8\x6f\x30\xf7\x0d\x7b\x82\xe0\x6d\x77\x6f\x57\xb4\xfb\x1c\x20\x99\xe0\x86\xcc\x84\xd9\xfc\x71\x85\xe5\x63\xba\x5f\x63\xcc\x14\x77\x58\xdf\xaa\x45\xd4\xfb\x84\xed\x95\x79\x5e\x02\x99\x88\xfd\x1a\xe0\x51\x3b\x46\x85\x38\x80\x43\xcd\x0b\x19\xe8\xb5\x33\x99\xcf\xd5\x96\xab\x98\x17\x3a\xdb\x75\x74\x71\xd8\xe1\x19\x6e\x9b\xea\x11\x1a\x5e\xd9\x4a\x88\xd8\xce\x02\x7e\x95\xab\xfa\x52\x42\x65\x8c\x9b\x0f\x3f\x9c\x5e\x5c\x2f\x4e\x2f\x7e\x5c\x5c\x5e\x9d\xbe\x3b\xfb\x93\x83\xc9\xa6\x3c\x6f\xd3\x67\x4e\x33\x61\x4e\x17\x4b\x34\xd6\x7a\xbe\xa0\x68\xb2\x2d\x87\x84\x32\xe5\x6a\xae\xec\xc9\x92\xf9\xe2\x37\x99\x2e\xd7\x9b\xf6\x82\xea\xad\xbc\x9c\xdd\x7c\xff\xa8\x66\x02\x0d\x24\x2a\xab\xe2\x6e\x6b\xc2\x85\xe5\x8a\xce\x3d\xc4\x18\xd7\x9a\x07\x64\xa6\xf0\xd5\xb6\x28\x43\xc7\x89\xf6\xa8\xd7\x4b\xf3\xd0\xea\x35\xfe\x5b\xbe\xde\xb5\x80\x6e\x82\x73\xb3\x72\x8d\x00\x7c\x1d\x05\xba\x1b\xa5\xbd\x69\xf9\x5b\xe5\x06\xfb\xea\x28\x11\xeb\xb5\x88\x71\x79\xd5\x0b\x26\x1f\x1c\x1d\x81\x91\xbf\xd7\xdb\x46\x91\x24\x74\x0f\xb8\x98\x1d\xde\x6b\xf8\x01\x7e\xe9\x7e\xd2\x7e\x56\x9c\x10\x95\x13\xc4\x37\x0b\xae\x3a\x02\xc9\xfb\xf3\xc1\xda\x8b\xff\x90\x31\x97\xaa\x47\x0e\x13\x1b\x32\xf0\xfb\xa0\x0b\xf0\x72\x38\xbe\xd5\xb5\xe3\x4a\xa4\x09\x8f\x84\x4b\x70\x41\x0e\x5e\x78\xd7\x3f\x26\x80\x47\x42\xc5\x8a\xfc\x2d\x81\x80\xb1\xd7\x66\x6b\x5b\x02\xe0\xb9\xbd\xb2\xe7\xf1\xf3\xbb\x56\x7a\x1f\x6e\xc4\xbc\x09\x8e\x66\x54\x8a\xa4\xbc\x08\xf4\x45\x81\xfc\x6a\x27\x66\x7d\xd4\x72\xa8\xd5\xfc\x23\x4d\x3c\xbe\x99\xab\x8e\x6e\x6e\xb9\x6d\xdd\xf2\x70\xa6\x63\x9f\xbf\xb0\x28\xb2\x5e\x3a\xec\xa7\x08\x47\x5c\x66\x7a\x2b\x73\x31\x2b\x8a\x4c\x2e\xcb\x50\x0f\x78\x24\x60\xae\xf2\x38\xf1\x1d\x4e\x33\x1d\x97\x91\x25\xb0\x82\xde\x7a\xd8\x0f\x79\xf9\xac\xd5\x11\xb3\x23\xb3\xfa\xe8\xe5\x26\xe2\x23\xc8\xf6\x40\x86\xb5\xb6\x18\x9b\x3d\x18\x3b\x7c\x7f\x97\xf6\x2a\x7f\xe2\x9c\xd1\xee\xc1\xb4\x6b\x60\x58\x1a\x38\xb3\x5f\x07\x0b\xb8\x03\x35\x45\xcb\x65\xc9\x31\x80\x5e\xb5\x51\xba\xf8\x6a\xdc\x55\x33\x0e\xdc\x35\x0c\x1b\x53\x4d\xa7\x42\xbb\x61\xc3\x73\x34\xe7\x8b\x68\x53\x6d\x38\xf4\xa6\xca\xdb\x5b\x6f\xae\x33\x8f\x0f\x73\x9b\x0c\x0a\xa3\x4d\xd0\xd1\x20\xc9\xb1\x5d\xd1\x60\x75\x82\xd2\x9d\xfe\x7b\x4c\xb9\x58\xfc\x5c\x8a\x31\xba\xca\x36\x55\xe3\x8f\xf0\xb3\xbd\x80\x14\x89\xd8\x2d\xe7\x7b\x2d\xe4\xd6\x58\x40\x3c\x8b\x36\x6c\xc9\x73\x22\x04\x0c\xd9\x12\x50\x00\x9e\x49\xf3\x2b\x1e\x15\x24\x88\x6b\xab\xb5\xa2\xb8\x37\x16\x0a\x69\xcc\x5a\xef\xf5\x68\x5b\x6e\xfb\x06\x60\x8c\xf7\xda\x36\xe3\xec\xed\xa8\x18\x42\x68\x87\xbb\x77\x32\x5e\xb1\x70\x3b\x25\xbc\x54\xd1\x86\xa5\x09\x47\x42\x89\x0d\xcf\xf1\xa0\xb0\x08\x1d\xbe\x94\x89\x2c\x80\xa9\x0b\x03\xc7\xb5\x75\x6b\x1e\xcf\x3c\xbb\xb3\x82\x07\xdc\xd3\xb2\xf5\x1d\x25\x07\x22\xa1\x5d\xaf\x3e\x29\x16\xda\x1f\x84\xe1\xe1\x3e\x6c\xb3\x13\x0e\xda\x4f\x87\xb9\xde\x60\xb3\xfb\xbe\x8c\x8b\x0e\x51\x89\x97\xf5\x9f\xd7\xc6\x1b\x29\x20\x0f\xa2\xe9\xed\xcd\xcb\x7a\x16\xd0\xb9\xcf\x2a\xeb\xbf\x46\x9b\x1d\x6e\x31\x82\xc7\x03\x9f\x48\xba\x68\x84\x11\x53\x17\x36\x6a\xdd\xf7\xab\x44\xf3\xa2\x3f\xcb\x0d\x75\x8a\xba\xca\x8e\x75\xb9\xec\x52\xc6\xc0\x56\x3d\x3e\x87\xce\x1e\xff\x4f\xe5\x73\x0f\xef\x51\x5e\x08\x73\xfa\x3e\x6e\x40\xcd\xaf\x8f\xe0\xe7\xed\x85\x53\x16\xf3\x68\x46\x0a\xb7\x0c\xbc\x5a\x9e\xb3\xfd\x01\x92\xda\xb2\x9d\xea\x46\xde\x41\x39\x8f\x87\xcd\x97\x54\x7b\x96\xd2\x7e\x01\xae\xdf\x7f\x35\x24\x1b\xf1\x8f\x25\x37\x17\xc0\x87\xd5\x35\x12\x84\x1d\xd2\xe9\x42\x36\xb7\x55\xfb\x31\x50\xaf\xf5\xa6\x1a\xa5\x0d\x17\xfe\x60\xb6\x83\xb6\xde\x5c\x9b\x5f\x0f\x3f\x76\xcf\x2a\xde\xd8\x34\x93\x1a\x88\xb2\xf4\xaa\x62\x6b\xb4\x9c\xc4\xad\xf5\x1e\x30\x92\x3f\x97\xa2\x14\x66\x01\x2d\xcb\x78\xdd\x0c\x96\x8c\x78\x70\xf9\x2e\x6d\xf4\x03\xdb\x96\xd1\x86\xd9\xc2\x59\x2c\x12\xbe\xab\x9a\x51\xe6\xad\x51\x68\x20\x31\x1e\xc5\x17\x18\x50\xcf\x47\x65\x5e\xe8\x2d\xe0\xd4\x7d\xb9\x59\xa9\x60\x97\x33\x6e\x77\x57\xdb\x85\x56\xa1\xd4\x7c\x64\x84\xfc\xfa\xf2\xf4\xe4\xec\xdd\x59\x2d\x3c\x3d\xbb\xfe\x21\xfc\xf7\x4f\x1f\xae\x7e\x78\x77\xfe\xe1\xa7\xf0\x6f\xe7\xb3\xdb\x8b\x93\xef\x17\x97\xe7\xb3\x8b\x4a\x10\x7b\x76\x33\xbb\x3e\xbd\xd9\x13\xa7\x6e\xd6\xda\x3d\x11\x3c\x60\xfc\xb4\xc8\x79\x2b\x67\x63\xdd\x55\x54\xeb\x1b\x36\xb3\xfc\xa7\x15\x86\x5e\x8b\x35\x00\x70\x52\x82\x18\x4b\x84\x24\xbc\xe5\x05\x3f\xe1\x05\x4f\xf4\x7a\xca\x66\x8c\xf2\x0a\x30\x5f\x24\x37\x26\x21\x91\x43\x9a\xd9\xc1\x22\x8c\x5d\x18\x79\x57\x90\xd7\xeb\xd6\x2b\xa2\x65\x4d\x44\xa8\xec\x64\x93\x3c\xe7\xea\xf4\x5e\xa8\xa2\x04\x43\x9b\x27\x09\xa3\x6a\xed\x17\x02\x56\x10\xdb\xca\x5c\x6e\x65\xc2\x33\x2f\xad\xfc\x81\xca\x82\xc7\xae\x6d\xab\x63\xa5\x6b\x52\x4e\x58\x7f\xc0\xed\x19\x83\x76\x9f\x9c\x9f\x81\xa1\x1b\x15\x56\x37\xd0\x56\x3e\x57\x48\xfb\x49\x35\x6e\x39\xe4\x30\x15\x9a\x1c\xf4\x58\x3d\x7d\xb9\x7b\x21\x1e\x64\x58\xd9\x50\xd6\x73\x39\x26\x5c\x23\xed\x7f\x9c\xaa\x22\xdb\x0d\xb6\x5e\x6f\x80\xd1\x21\x87\x77\x1d\x41\x22\xab\x72\xcb\xe8\x3f\x65\xb6\xf4\x0b\x30\x69\x2d\x5e\x97\xc2\x7b\x2e\x8a\x87\xf0\xa8\x8e\x27\x51\x62\x6e\xde\x5f\xeb\x38\x84\x2c\x60\x30\x0a\x4b\x5d\xaa\x38\x27\xf0\xe6\x56\xaa\xe3\x2d\xff\xe5\x95\xed\x29\x92\xd8\x38\xd1\x33\x60\x4c\x14\x89\x79\x0f\xee\xcc\x21\xd7\x3f\x5c\x73\xd5\x33\x5e\xfb\xdf\x04\xf6\x64\x05\x97\x81\xf7\xef\x20\x0c\xf5\x5e\xec\xda\xe6\xaf\x21\x5c\xc9\x42\xf5\x05\x28\x24\xcd\x84\xf9\xa2\xc3\xb8\x26\x08\x5d\x76\xff\x86\x5c\x96\x8a\xb8\x76\xfb\xd9\x1d\xc2\x46\x0e\xda\x36\xad\x80\x95\xe1\x86\xcf\x60\xe5\x51\xaa\xc9\xcc\x19\xc2\x57\x6c\xe4\x84\x72\x77\x28\x2e\x6f\x26\xeb\xbf\xf5\x92\xad\x20\x91\x8d\xfc\x04\x99\x80\x48\x19\x4c\x85\x95\xca\x01\x5e\xbd\x06\x26\xc6\x2e\x81\x44\xe4\x10\x3f\x52\xe6\x51\x2d\x7e\x2e\x09\x02\xf0\xfa\xcb\x71\xf7\x6c\x81\x7a\x0b\x48\xb0\x5d\x57\x22\x70\x77\x39\xb4\xab\x54\xb2\x8d\x6c\xf3\xaa\x54\xe6\x2a\x7e\x0a\xf4\xd4\xf0\xf0\x78\xad\x52\xfa\xe7\xde\x5c\x33\x1b\xd9\xc9\xf0\xfb\xcf\xc6\x9d\xfc\x63\x8d\x32\x99\xaa\x83\xcc\x06\x2a\x3d\xbc\xd0\x96\x3c\xba\x7b\xe0\x59\x8c\xee\x7f\x80\x33\x4d\xd9\xf7\xfa\x41\xdc\x8b\x6c\xc2\x22\x91\x15\x9c\xf8\x0a\x73\xc0\x73\xc0\x86\xa2\x72\xe6\x0a\x12\x7d\x90\xfc\x51\xe5\x65\x26\x58\x21\xd7\x9b\x42\x64\x21\x1a\x47\x67\xe6\x38\x2a\x90\xaa\x36\x15\x11\x11\xb2\x75\x0c\xc0\x2a\xe1\xf7\x4d\x02\xc6\xc7\x30\xc9\xb0\x33\x97\xad\x6c\xc3\xdd\x56\x7e\xac\x0f\x3f\x45\x03\x46\x87\x26\x52\x68\x4d\xd8\x5a\x27\x5c\xad\xa7\xd3\x29\x48\x6d\xbc\x1a\xb5\xd0\xa9\xc0\x30\x80\xee\x50\xfa\x89\xd6\xb9\x48\x76\x8e\x44\xcc\xe5\x51\x01\x70\xf7\x97\x42\xa8\x5c\xa2\x63\xab\x65\xf9\x5f\xd7\x83\x4b\x9f\x36\x16\xd7\xfe\x3c\x1f\x9d\xa5\xdb\x51\x0e\xa8\x99\x8e\x28\x09\xbf\xdf\xfe\xf2\x7a\x54\xd6\x79\x7b\x59\x4a\xab\xb1\xa9\xd4\x3f\x6a\xd9\x01\x05\x79\x14\xd9\x68\x6b\x49\x44\x84\xf4\xa8\xf4\xd3\xf6\x31\x6b\x64\x04\x1f\x90\x0c\xdc\x93\xd7\x3b\x32\xa5\x77\x88\x23\xe0\xba\x3e\xdd\xa3\xb7\xc5\x7e\x81\xb5\xd6\x0e\x8d\x4c\x99\xf6\xdc\x06\x63\x4c\x27\xcc\xba\x4c\x76\xf0\xe2\x72\x09\xd4\x10\x1e\x88\x83\xa8\x52\x25\x68\x06\xa9\x7c\x3e\xea\xe6\x08\xea\x82\x20\x5b\x5e\xe8\x8c\xaf\x05\xdb\x8a\x58\x96\xdb\xd6\xc3\xc6\x35\xf7\x10\xf8\xa8\x4e\xca\x6d\x37\x55\xe8\xa1\x06\xb4\x6f\x24\xfe\xd7\x09\x54\x37\x9c\x43\xc7\x65\x46\x58\x9d\x4b\x6a\x2f\x86\x90\x68\xac\xcd\x4d\x99\xc9\x1c\x58\x76\x1f\x93\x39\xeb\x8a\xc1\xa2\x21\x00\xbf\x4b\xd1\xc9\x5e\x99\xdd\x23\x1b\x19\xa5\x9f\xe4\x38\xab\x10\xb5\xef\xbe\x14\xea\xa0\xd4\xf1\x6a\x77\x99\x2e\x1b\xdc\x53\x83\x80\x12\x60\x36\x06\xda\x17\x84\x9a\x83\x02\x09\xda\x53\x68\xb6\xb2\xb9\x98\x77\x22\xa0\x3e\x8c\x41\x15\xe3\x01\x29\x9f\x7e\xf8\x3a\xb7\x20\x20\xc2\x69\x79\x8b\xa5\xf0\x95\x60\x04\xe8\xfe\xb5\x85\xe7\x61\x0f\xb1\x08\x20\x28\x8c\xb9\x2a\x5a\x0b\xf0\xe8\x55\x28\x0b\x7f\xf2\x23\x2f\x93\xf6\xaf\x53\xf9\xf0\x55\x54\x4d\x9d\xfd\x74\xcd\x70\xa8\x49\x3f\x21\xeb\x6b\x68\x50\xc8\x7e\x80\x20\x0c\xd7\xe2\x11\x96\x60\x65\x1e\x70\xd0\xad\x80\x86\x19\x76\x51\x44\x1b\x6f\x79\x00\x41\xa3\x23\x96\x24\x49\x6c\xea\xe7\xd6\x2b\x42\x20\xf6\x3a\x04\xb1\xca\xb5\xd2\xa1\x98\x91\x56\x02\x42\x71\xe6\x00\xd2\x61\xb1\x4c\x16\xfb\x91\x82\x23\x59\x09\xf7\x2d\xb5\x42\x23\x02\x8c\xfa\x59\x89\x53\xc3\x93\x42\x22\x5d\x95\x85\x59\xe3\x9b\x88\x14\x96\xeb\x4a\x01\x55\x02\x90\xb9\xaa\x56\xd5\x18\x24\x0b\xe5\x93\x99\x40\x82\xef\xdc\x58\x6f\x85\xbc\x37\x1b\xb5\xb9\xac\xdd\x02\x85\x13\xa0\xb9\xf6\x28\x6c\xcb\x02\x96\xf0\x3b\xb1\xcb\x43\x39\x67\x5a\x51\xac\x6b\x41\x4a\xd3\x1f\x9a\xaf\xfd\x53\x01\x03\xb7\xc8\xbc\x28\xe3\xb0\xbb\x0c\x2b\x7d\x6f\x7e\xdc\x83\x11\x6e\x14\x6e\xd6\xa0\x4f\x76\xf5\x3e\x45\x3a\x26\xfc\x38\xd3\x1c\x7a\x18\x20\x80\x3c\x43\x18\x67\x98\xb9\x04\x0f\x5f\xf3\xbe\x9d\x2b\x12\x12\x08\x2e\x39\x73\xe0\x34\xa7\x8d\x32\xf0\x91\xbe\x7c\x57\x61\x0f\x02\x6a\x55\x4b\x33\x5b\xad\xd2\x46\x97\x41\x19\x0f\x96\x07\x54\x8d\x39\xca\xd6\x87\xd7\x5a\xe1\x23\xb1\xa5\x34\xb9\x9d\x78\xd2\x20\x11\x10\xbf\x49\xec\xa2\xa8\x0b\x8e\xaf\x9f\x48\x98\xe1\x9b\xa9\x56\x28\xa7\x05\x72\x5e\x9f\x9e\x5c\x9d\xde\x7c\x32\xbc\xa9\x05\x7b\x8e\x06\x9c\xda\x76\xbe\x3d\x7d\x37\xbb\x3d\xbf\x59\xbc\x3d\xbb\x7a\x0e\xc4\x29\x7d\xf4\x08\xc8\xe9\x35\xe9\x93\x9c\x68\x55\x88\x5f\x0e\xba\x93\xb3\x52\x2d\xf8\x88\xd4\x27\xa7\x50\xd4\x67\xee\x60\xa1\x4d\x7d\x15\x27\x7e\x42\xdc\xb6\x84\x3a\xb1\x72\x2a\x2b\xef\x34\x5c\xc9\x24\x81\x4c\x70\xe7\x5e\xa7\x2c\x43\x33\xa8\x70\xfe\x58\x3a\x5f\x3a\x53\xe7\x6a\x59\x91\xbf\x01\x97\xdf\xc6\x3c\x82\x31\x07\x3c\x35\x03\x90\x49\xc8\xb0\xed\x93\x60\x59\x4b\x25\x7c\x33\x60\xd6\x4c\xfb\x3a\x69\xea\x69\x12\x9f\x13\x59\x47\x86\xd7\x50\x5b\xd3\xae\xb8\xca\xfa\xb4\xe6\xa7\xfd\xd0\xf5\x10\x37\xb1\x54\x68\x98\x56\x76\xf3\x75\xfb\xd2\x3d\xf6\x5b\x00\xc6\xdd\xcc\x24\x87\x18\x44\x5e\xf0\xac\xf0\x13\x49\x13\x81\xd2\x6c\x3e\x38\x71\x27\x11\x81\xa6\x57\xb5\x71\x36\x47\xa1\x19\x6b\x09\x91\x0a\x4e\xe4\x36\x51\x52\xe6\x85\xc8\xc8\x6d\x32\xfb\xe9\x7a\xae\xbe\x35\xd7\xd7\x2b\xba\x85\x48\xbe\x0b\xab\x40\xa4\x8e\xae\xd4\x6f\x2d\x94\xf0\x04\x7b\x89\x3e\xea\xad\xe0\x2a\x67\xb0\x35\x92\x44\x64\x7e\x65\x60\x7b\x84\x88\x49\xc6\x1a\xa8\x9e\xfd\xef\x5f\x31\x02\xb7\x9a\xa1\x30\xed\xa5\x4f\x33\xb1\xd5\x45\x73\x3d\x75\x11\x0d\x00\xe2\xfc\x39\x57\x4e\x4b\xe2\xd3\xd0\x55\x44\x60\xfd\xd6\x45\x54\x4d\x43\x1a\xb4\x96\x6e\xb0\xb8\xdf\x96\xd2\x13\x2e\xa5\x01\xf7\x7a\x78\x4b\xb0\x8d\x36\x07\xa8\xd3\xb6\xf2\x61\x66\x47\x74\x92\x00\xca\xcd\x0c\x63\xeb\xad\x53\xd3\x77\x3d\x04\xfb\x01\x45\x1d\x86\xd0\x9e\xb5\x30\x2a\x79\x21\x41\x1b\xdb\xe9\x95\x8e\x7d\x1e\xe6\xc2\x99\xc5\xaa\x2a\x5d\x58\x0e\x12\x07\x0f\x25\xac\xab\xf9\x82\x23\xbf\xe9\x6d\x23\x11\xca\x58\x2b\x65\x71\xa0\xfc\xe2\x4d\x88\xa9\xad\x64\x65\x63\x2b\x42\x3e\x07\xcb\xe1\xe0\x38\x60\xc6\x2c\xbe\xc7\x0b\xfc\x56\xd7\x9c\xe3\x13\x7d\x14\xd8\xe1\xe2\xc3\xc5\x69\x08\x55\x38\xbb\xb8\x39\xfd\xee\xf4\xaa\x92\xcf\x7f\xfe\x61\x56\xc9\xc9\xbf\xbe\xb9\xaa\xa5\xe2\x7f\xfb\xe1\xc3\xf9\x69\x03\xf3\x70\x7a\x73\xf6\xbe\x52\xf8\xdb\xdb\xab\xd9\xcd\xd9\x87\xca\xf7\xbe\x3d\xbb\x98\x5d\xfd\x57\xf8\x97\xd3\xab\xab\x0f\x57\xb5\xfa\x6e\x4f\xfa\xd1\x13\x95\x6e\xb4\xbb\x7f\x7c\x70\x36\xa0\x56\x6d\xdd\xc6\x55\x01\xe4\x03\x76\xf1\x40\xe4\xd9\xbe\xe5\x68\xd3\xf5\xe3\x50\x8e\x03\x37\x86\x69\xea\xa8\x55\xf7\xf4\x8a\xcd\x95\xa1\x4b\xf9\x61\xc7\x9e\xb9\xd5\x16\x4f\x81\x04\xec\x35\x00\x5d\x2d\x35\xc7\x2d\x09\xa4\xe3\xd0\xa6\x10\xc1\x5a\xf3\x4e\xbd\x32\x15\x3f\x7b\x4b\x6d\x1d\xfb\xda\xe9\xa9\xbc\xf6\x30\x22\x3d\x15\x1b\x4a\x5f\xa3\x83\xca\x2c\xd9\x80\x8c\xad\xa1\x60\x3f\x0c\x61\xf7\xa6\x1b\x66\xe5\x04\xcb\xb1\x4b\x5a\xb7\x3d\x6d\xa9\x9f\x7d\x6f\x6c\xfb\xa9\x92\x66\xdb\x6b\x54\x2d\x23\xda\x0d\x94\x59\x63\xda\x7d\xc3\xf3\xbb\xb1\xed\xa6\x4a\x9a\xed\x06\xb3\xef\x51\xed\x06\x87\x77\xd1\x4e\xa3\x33\xe2\x10\x0b\x8b\xa9\x36\xcf\xe5\xf8\xbb\xaf\x04\x0a\xd6\xc3\xda\x68\x36\xc0\xf3\x3e\x2f\x53\x3e\x3c\x90\x01\xad\x71\xdb\x95\xd7\x58\xe5\xaf\xe1\x53\xe8\xe1\x32\x13\xfc\x2e\xd6\x0f\x34\x1f\x75\x64\x28\x1b\x74\x9a\x57\x07\xc8\x9c\xe1\xf6\x8a\x28\x32\x8a\x40\x21\x4a\xcd\x17\x0f\x30\x39\x49\xbc\xe8\x68\x83\x05\xd2\xcb\x75\x22\x22\xa0\x7e\x52\x7e\x76\xe6\x0a\xad\xf9\x36\xf9\x66\x33\xab\xa6\x45\x44\x1d\x02\x5d\x75\x36\x34\x06\xd7\xf3\x60\x62\x29\x0f\xa8\xcc\x00\x4c\xb7\xcc\xe0\xcd\x04\x03\x22\x15\x38\x93\x33\xf3\xe0\xc9\x44\x24\x73\x11\x28\xc6\xb5\xde\xd8\x3f\x1f\x26\x85\x52\xf0\xa2\xd5\xed\x3a\xd8\x1f\xce\xa3\xa2\xe4\x09\x83\x74\x25\x62\x60\x44\x5f\x25\xfe\x25\xe2\x0a\x53\x63\x0a\xb1\x4d\x21\xab\x3f\xcc\xe9\x98\xab\x9f\x00\x28\x81\x53\xf0\x22\x67\xdf\x01\xe4\xc1\x7e\x99\x2e\xe1\x2d\x2f\xe0\x2e\xfe\x23\xd6\xe1\x3e\x9b\xce\x55\x45\x81\x29\xf8\x55\x45\x8c\x69\x3a\x57\x56\xad\x23\xd6\x51\x3e\x85\x17\xdf\x54\x67\xeb\x63\x52\x33\x37\x8b\x5d\xdf\x2d\xb5\xbe\x3b\x16\xea\x18\x7c\x52\xc5\x31\x2f\x0b\x7d\x0c\x70\x29\x9c\xff\xfc\xd8\x8a\x1e\x5b\xd5\xe8\xfc\x78\x23\xef\x05\xfc\xbf\xe9\xa6\xd8\x26\xff\x27\x4f\x37\xbf\x1c\xad\x93\xec\xc8\xfc\xf6\x28\xfc\xed\x91\xfd\xed\x91\xfd\xed\x91\xf9\x19\xfe\xbf\x74\x87\xe1\x1d\xf1\x0b\x37\x77\xd9\x64\xae\xa4\xca\x45\x56\x80\xf5\xf3\x90\xc9\xc2\x4b\x5d\xed\xd8\x8b\xbf\xfd\x8d\x4d\x33\xfe\x80\x19\xb1\x6f\x79\xc1\x2f\xd1\xbf\xf8\x8f\x7f\xbc\x80\x80\x2a\x66\x31\xa5\x3c\xfb\xb9\x14\xc5\x5c\xe5\xc2\x6c\x42\xf6\x7f\xe7\x0a\x22\xb0\xdb\xdd\xa2\x40\xbf\x2b\xfa\x20\xe3\x9c\x7d\x83\x65\x9e\x21\x1b\x69\x9c\x9b\x92\x3a\xd2\x09\x24\x4f\x5a\x74\xf2\x3b\x5c\xf4\x3f\x27\x6f\xe9\xfb\x23\xb6\xf5\xcf\x49\x75\x57\x5b\xb1\xa5\xfc\xe7\x04\x2e\xd0\x44\x73\x0b\xd6\x62\x6e\xf1\xc2\x3b\x99\x1a\xd7\xb6\x47\x1a\xd0\x80\x67\x0d\xd3\xb7\xef\x95\x6b\x64\x44\xb7\x9e\xfb\xc6\x31\x02\xb1\x02\x1f\x87\x80\xe8\xb9\x34\x3b\xe4\x1a\x3d\xa1\x60\xb9\x61\xcf\xc1\x26\xa5\xd0\xb9\x2b\x0f\x1d\x17\xf9\xef\xdf\x1c\x1f\x4f\xd8\x3a\x87\xff\x59\xfe\x0c\xff\x03\xe8\xa1\xa7\x22\xf5\x6d\x0c\xa6\x03\xc2\x35\x67\x79\xff\x4c\x3c\x05\x8a\xee\x53\xf0\xc8\xd7\x96\xe9\xb7\xa5\x8a\x13\xe1\x53\x1b\x2b\x21\x91\x44\x9b\x99\xb4\x13\xd5\x54\x1e\x82\x39\x5e\x8a\x88\x9b\x83\xaf\x51\x37\x82\x4b\xf5\xaa\x10\x0a\xbd\x61\x99\x57\x7b\xe4\xe8\xb9\x02\xb3\x18\xa0\x90\xbc\x20\xc8\xb9\x80\x3f\x42\x25\x40\xcc\x3e\xa9\x7f\xc4\x76\xba\x24\x8e\x71\x60\xce\x8d\x45\x94\x80\x90\x83\x65\x0f\x62\x99\x28\xca\x4c\x31\xce\x52\xae\x62\x9e\xc3\x0a\x5c\x65\x10\xed\xcc\x18\x6f\x36\x74\x82\x70\x5c\x5d\x16\xc0\x89\x85\xc8\x82\x70\x24\x90\x04\x3e\x68\xf3\x24\x68\x04\xde\x09\xc0\x45\xdd\xf8\xe1\x74\xae\xac\x1e\x21\x61\xe1\xd0\x53\x16\xe9\x74\x47\x8c\x47\xf5\x41\x97\xd6\x73\x46\xc3\x3d\xf1\x78\x93\xfa\x77\x27\x4c\x56\x43\x6b\xc0\x37\x5f\x04\x12\xef\x56\x24\xff\xa5\x50\x91\x8e\x45\x96\xbf\x32\xdb\x50\xba\x77\x07\xda\x0f\x32\xf7\x93\x01\xa7\x94\xb9\xdc\xc8\x5b\x68\x8a\x77\x02\x53\x66\x74\x2a\x0c\xe5\x6d\x76\xce\xfe\xad\xf2\x6b\x47\xc1\xb4\xb5\x97\xfe\xf3\x93\x22\x62\x42\x5c\xa7\x7d\x73\x3e\xde\x05\x81\x5b\x36\x3c\x71\xb1\x50\xb4\x71\xc8\x38\xb1\x7a\xda\xb2\x00\x85\xcc\x4c\xe4\xc5\x5c\xd1\x0d\x3c\x61\x2b\xc1\x8d\x9d\x37\x61\x51\x7e\x8f\x87\x31\x5e\xf7\xc5\x83\xf6\x18\x1c\x2b\x6f\x03\x60\xd8\x4a\xe1\xde\x49\x8c\x5f\xe3\x94\x81\x8d\x00\x83\xae\x17\xba\x33\x55\x60\xb0\x5a\x0f\xc4\x47\x8c\x83\x55\x4b\xa9\x2b\xac\x85\x62\x3d\x30\x12\x3b\x0c\x14\xb3\x7a\x3b\xf0\x03\x73\xf0\x60\xef\x10\x06\x12\x1c\x8e\x60\x71\x13\x96\x16\xf7\x99\x8f\xe1\x86\x94\xf5\xe0\x9b\xe9\xda\x54\x3d\x03\x01\x0d\x78\x9c\xdf\xc2\xfc\x74\xaf\xc3\x2a\x17\x99\x95\x72\xc1\xbe\x22\xc1\xe4\x46\x66\xf1\x51\xca\xb3\x62\x67\x97\x6f\x22\x97\xa0\x00\x91\xc8\x3b\xc1\x66\x59\xa6\x1f\x9e\x7a\x14\x3a\x8f\x96\xae\x17\xf6\x21\x48\xf6\xb1\xaf\xfc\x56\x7a\xd9\xba\xbb\xe3\x71\x54\xb6\x5d\x8e\x8f\xd6\x7a\x32\x51\x64\xbb\x85\x59\x88\xdb\xb4\xf3\xa4\x18\x94\x34\x31\xdc\xc8\x1d\xc7\x92\x5b\x73\x61\x74\xb2\xe4\x56\x66\xf5\xd7\xc3\x92\xdb\x42\x80\xdb\x64\xc9\x3d\xbb\x38\xbb\x39\x9b\x9d\x9f\xfd\x7f\xb5\x12\x7f\x9a\x9d\xdd\x9c\x5d\x7c\xb7\x78\xf7\xe1\x6a\x71\x75\x7a\xfd\xe1\xf6\xea\xe4\xb4\x9f\xf6\xaa\xd9\x7a\x6f\x82\x1f\xb1\xb0\x9e\x37\xec\x26\x00\x6a\x60\xb2\x01\xd9\xdf\xa4\x8f\x0b\xab\xca\x6c\x66\xa9\xd6\x13\xd8\xa8\x6f\xd8\x69\x96\x9d\x6d\xf9\x5a\x5c\x96\x49\x02\x70\x2a\xcc\xec\x39\xc9\x04\x3c\x3c\x27\xec\x52\xc7\x67\xc1\xef\x20\x1d\xb1\xb5\x1b\x50\x3f\x8f\xe3\x4c\xe4\x39\x56\x3f\xa1\xfa\x03\xf0\x90\x4b\x75\x24\xf0\x1c\xbf\xe7\x32\x31\xef\xb7\x37\xec\x5b\x1e\xdd\xe9\xd5\x0a\xd3\x67\x26\x2e\x71\x8a\xfd\x5c\xea\x82\x33\xf1\x4b\x04\x54\x6f\xed\xeb\xe4\x5c\xaf\x3f\x03\x54\x79\x40\x78\xaa\xe3\x91\x02\x52\x77\x8b\xf6\xeb\xbc\xfd\x20\xa0\x5e\xbe\xc7\x9f\xbe\xc3\x5f\xb6\x3b\x28\x8b\xe4\x09\xd2\xe3\xcf\xf5\xba\x5d\x78\x08\xac\x6b\x52\x4b\xa2\x40\x42\x44\xec\x22\x7a\xcd\x72\xa9\xee\xe6\xea\xa7\x8d\x50\x4c\x97\x19\xfe\x09\x9e\xf9\xc6\xcc\x4c\xca\x7c\x23\x40\xa6\x7a\xc2\x1e\x04\xdb\xf2\x1d\x9a\xcd\xf0\x26\x70\x6a\x29\xb0\x64\xe0\x16\x31\xbf\x4e\xa4\x32\xa7\x45\x2a\x6d\x5e\x42\x7d\xea\x9f\xe2\xc5\x65\x89\x0e\xf9\xe1\x3c\xc4\x7d\xf7\x69\x05\x9f\x07\xae\x32\x8f\x9b\xb4\x00\x21\x3a\xb9\x41\x54\x56\xeb\xbb\x32\xf5\x94\xa8\x2f\x6c\x70\x12\x86\xfb\x5e\xcb\x98\xc5\x65\x9a\xc8\xc8\x9d\xbb\x0f\x3a\xeb\xe4\x7d\xc6\x04\x9a\xe1\xb7\x4e\x3d\x2d\xac\xaf\x63\x2d\xd9\x39\x01\x92\xae\x87\x01\xfa\x99\x39\xb0\x99\x54\x51\x52\x82\xcc\x5c\x99\x8b\xec\xc8\x49\x47\xbb\x5c\xbf\x5f\x3f\x49\xb6\x27\xe1\x3c\x3c\xad\x2d\x4c\x3a\x4f\xf4\x5a\x46\x3c\x09\xc1\xcd\x1e\x15\xe1\x58\x78\xed\xb6\x27\x31\x61\xc8\x83\xb0\x0d\xea\x24\xd2\x4a\x33\x01\x44\xd0\x0b\x38\xca\x17\x74\xdc\x1d\xd2\xee\x15\x33\x0f\x74\x6c\x57\xc8\x91\x6b\xc3\x0b\xf6\x86\xf3\x75\x5b\x25\x36\x30\x31\x51\xc2\x9f\xe9\x07\x25\x32\xb0\x60\x01\xf6\x61\x7a\xaa\x34\xd8\x26\x4e\x9d\xcd\xe1\x93\xad\x3a\xe1\xca\x01\xb1\x31\x73\x76\x2d\xef\x85\xfa\xf4\xa4\xe6\x41\x05\x11\x8f\x36\x62\x61\xed\xf2\xa7\x3e\xb2\xdc\x05\x30\xf2\xb0\xb2\x32\x29\xe1\x51\xea\xc2\x9b\xf0\x74\xc2\x16\x37\xcf\x2e\x0c\x24\xf6\x64\x64\x99\x46\x2c\x62\x11\xdd\x7d\xf2\xa3\xd9\x83\xac\x6c\x43\x18\x67\x6f\x45\x74\xc7\x6e\xaf\xce\x30\x1b\x58\x16\xcc\x1c\x05\xf9\xc6\xcb\x3e\x75\xbe\xdd\x0a\xbe\x7e\x06\x0a\xab\xa1\xba\x55\x5e\xaa\xc0\xa9\xf5\x99\x06\x11\x20\x0a\xf2\x25\xcd\x21\x49\xb9\x34\x00\x04\xe3\x85\x55\x33\x02\x47\x3c\xcb\xb7\x20\x5e\x54\x16\x81\xe2\x5f\xc2\x97\x22\xe9\x20\xee\x4c\x75\xbc\xb0\x71\x92\x43\xc1\x3c\x8d\xb2\xac\x1f\x83\xa2\x8e\x36\x8f\x81\x1b\x8b\xf5\x86\xbe\xc8\xee\xbe\xce\x03\x7a\x0d\x1d\xf2\x87\xc3\xbb\x9e\xe7\x90\xde\xbd\x92\x6b\x1b\x6d\x93\x2b\x92\x58\xc2\x84\x7e\x63\x07\xc3\x79\x69\x4a\xba\xd4\x31\xc1\xf4\x1c\x17\x9e\xb1\x82\x04\x79\x4f\x3c\xae\x22\x6c\x82\xc5\x01\x42\xbd\x66\x47\x08\x1e\x33\xbd\x22\x6f\x62\x9a\x26\x12\x98\xa1\x63\x24\xa1\x07\xf6\x8c\xbc\x8a\x8e\x0f\x4b\xb3\x8d\x0d\x48\x3e\x2e\x2d\x10\xaf\x4b\x8c\x17\x0e\x0c\xcc\x60\x58\x00\x1b\xdc\xe2\x9e\x77\x93\xa9\x3d\xbb\x62\x5a\x47\x7b\x5c\x34\xb9\x4a\x09\x5b\x21\xed\x23\x5f\x01\x5e\xeb\x36\x21\x3f\xe2\x49\x54\x52\x9c\x0c\xe4\xf2\xad\x0a\x7e\x3f\x82\xd0\x47\xfd\xcc\x44\x57\xbd\xfe\x75\x23\xf3\x50\x75\x45\x97\xa0\xf5\x58\x9f\x42\xbf\x7b\x71\x9d\xe8\x25\xac\x9c\x6e\x94\x60\xcf\x8d\x65\x8e\xeb\x4c\xc6\x63\xec\x1d\x3b\x26\x1f\xdc\x4f\xfb\x1a\xf8\xc1\xba\x7e\x5c\x4d\x76\xdd\x33\x12\x32\xa8\x31\x37\x8e\xa3\x40\x58\x91\xaa\x6a\xf5\x79\x52\x90\x8c\x07\x2c\x2b\x77\x3f\x75\xf8\x19\xaa\x7d\x39\x68\xa2\x9b\x4c\x31\x7b\xc6\xd2\x93\xcb\xf4\x4f\xf2\x01\x74\x1f\x78\x94\x39\xce\x8f\x6e\xcf\xa2\x8a\x45\xbc\x78\x44\x1f\x4e\xe9\xb7\xc3\xfa\xe2\x46\x1a\x9b\x07\x3e\x40\x75\x64\x4c\x85\x98\x67\xb1\xef\xc7\x04\xf6\x7b\xc4\x53\x70\xc3\x43\x58\xe3\xfe\xf5\xd4\xd6\x71\xe5\xb3\x8b\xcc\x79\x89\x39\xff\x88\xdf\xd6\x2d\x1a\x38\xfb\xd6\x91\x5b\xa4\x08\xef\x36\x2b\xc7\x2f\xd7\x4a\xde\xcd\xa0\xb5\x5b\x5f\x61\xf6\x00\x3f\x64\x71\x3d\xc7\xd9\x51\x16\xda\x47\x7b\xa0\x3f\x67\x40\x3b\x1c\x66\xf4\xc1\x01\x79\x16\x77\x20\x45\xac\xf9\x6d\x0f\xa1\x11\xf8\xe3\x51\x08\xe8\x34\x13\x36\x6e\xb8\x13\x85\xe3\x75\x48\xac\xae\x20\x84\xc5\x5c\xaf\xab\xc4\x36\x96\xbb\xc2\x91\x91\x41\x10\x8b\x4c\xfd\x48\x6f\x53\xad\x00\x96\x84\x59\x6a\x73\x45\x85\x5b\x75\x78\x17\x59\xab\xa4\x3a\x4e\xc8\xa1\x89\x89\x33\x22\xd7\xc9\x3d\x85\x50\x03\x11\x13\xd0\x95\x34\x0d\x3c\x31\x6f\x43\x9d\x21\xc1\x96\xbd\xd9\x21\x13\xa0\x26\x91\x9e\x89\xb5\xcc\x0b\x11\x66\x87\x86\xbf\x7f\x32\x35\xdb\x8a\xf3\xa4\x6f\xe8\x3b\xd5\x6c\xf7\xbd\x82\xcc\xf9\x34\xa2\x3d\xbb\x54\xc4\x67\xee\x77\xfd\x8b\xa1\x96\xc0\xef\x8f\xc3\xca\x7d\x87\x6b\x00\x5f\x7f\x39\x52\x7d\xe5\x4e\x7e\xc4\x4d\x12\x91\x30\x71\x0f\x68\x34\x53\xb4\x2e\x79\xc6\x55\x21\x44\x3e\x57\x14\x78\x46\xca\xba\x90\x95\xa5\x06\x84\x74\x6f\x9b\x48\xe7\x05\x32\x40\xc1\x4f\x56\x5c\x26\x65\xd6\xe9\x6e\xc0\x55\xf9\x28\xda\x89\xbe\x51\x3a\x81\x62\x59\xdb\xa4\xb9\x04\xe6\x60\x17\x39\xd6\x94\x7a\xd8\xb8\x9a\xdf\xdb\xd1\x05\x7b\xb9\x0c\x9f\x6f\xe7\x6b\xee\xc8\x69\xfe\x3a\x5f\xa4\x7a\xc4\x89\xf7\xc3\xd7\xf9\xa5\xee\xc8\x06\xcf\x7f\x6e\xf8\x44\x7b\xe0\x13\x3f\x77\x09\xb2\xf0\xfc\x0e\x22\x8f\xfb\x5c\x31\x83\xd8\x38\xf7\xc6\x27\x3b\xcf\x2e\x58\xb5\x1b\xae\xe2\xc4\x98\xbc\xbc\xa8\xf3\x5e\x3b\x9c\xb7\x79\x12\x15\xf6\x70\xec\x4e\xea\x83\x1c\x99\x45\xd4\x48\xb0\xdc\x37\x4e\xb5\xcc\xcc\x5e\x2c\x65\xad\x96\x6a\xbe\x64\x5b\x9e\x8e\xb7\x61\x48\x06\xd9\x6d\xd8\xcf\x6e\xbf\x9c\x86\x6d\xff\x44\xe6\x4b\x75\xaf\xad\xe4\xfa\x57\xe0\x48\x78\xdf\xbc\x12\x22\x3a\x73\xe8\xa2\x76\xd9\x0d\x07\x9e\x3a\x90\x48\x66\x4e\xed\x90\x71\x7c\xae\x48\x0e\x1e\xd1\x05\x10\x56\x46\xbe\xb5\x9c\xbd\x76\xd9\xc5\xaf\xff\xcd\xb2\x6d\xed\xd8\x0a\x16\x15\x50\xda\xe9\x28\x2a\x33\x08\xfd\x93\x7b\x92\x09\xbc\x84\xf3\x51\x44\x32\x60\x7a\x38\xc0\x16\xda\x89\x6d\x66\x92\xf3\x47\x57\x3a\x75\x03\x6e\x48\x14\xb6\x77\x97\x3e\xe9\x95\x65\x79\xc1\xf2\x42\xa4\xad\xc7\x6f\xc5\xba\xdc\xa5\x62\xa6\x94\x2e\xea\xf9\x29\xa3\xed\x4b\xee\x4a\x19\xb8\x75\x46\x5c\x46\xb3\xc0\x65\xf4\x87\xeb\x0f\x17\x2c\xe5\x3b\xc0\x3e\x16\x9a\xe1\x57\x81\x70\xb4\x7e\x50\xed\x9b\x81\x6a\xe7\xab\xa7\x0a\x8e\xa9\x05\x51\xb7\xc7\x27\xa8\xc6\xa6\xb1\x08\x6b\x86\x96\xa4\x39\xb3\x32\x9d\x1c\xa5\x09\x57\x01\xbc\x3d\x9f\xb2\x5a\xf5\x21\x9e\xc1\x45\x36\x09\x31\x06\x0d\x00\x7f\x05\xad\x85\xac\x6c\x05\x40\x03\xef\x8e\x5d\x50\x87\x41\x18\x3a\xcf\x88\x5e\x60\xe7\x7b\x54\x81\x41\x4d\x04\x64\xcf\xb0\xb0\x0c\x87\xec\xe1\x39\x80\x6e\x3b\x19\xc0\x79\x94\xf0\x3c\xef\x45\xe9\x3c\x0b\x95\x7c\x90\xb5\xb8\xff\xf8\xaa\xb6\x13\x61\x84\xc0\x6d\x82\xef\x52\xf7\x31\xb0\x25\xd8\xa3\xcb\x8b\xbe\x05\xf6\x7e\xa0\x06\x41\xd0\x07\xe2\x8b\x82\xdf\x23\x13\xe4\x9d\xd8\x59\x0f\x17\x1d\x55\x7c\x2b\x26\xce\xd9\xea\xbc\x89\x01\xe8\xaf\x59\xf0\x5c\x01\x2a\xf6\x5d\xd8\x3c\xf6\x4e\xeb\x09\xe2\x33\xa9\x72\x8e\xc5\xf2\x10\xe1\x34\x57\xef\xb4\x9e\x72\xf7\x88\xa5\xf6\xd3\x71\x53\xaf\x90\x50\x51\x80\x39\xac\x4d\xe7\xf0\xbd\xf9\xbd\x54\x28\x4f\x28\xb7\xe6\x01\x45\xe3\x04\x2b\x0a\x1a\x64\xd5\xf0\xf5\x43\xce\x62\xa4\x94\x29\x65\xbe\x81\xb0\x0b\xc6\x39\xa1\x7e\xba\x52\x10\x90\x95\x71\x95\x9b\x3d\x0c\xa1\x1a\x71\x2f\xc8\x5f\x5b\xc1\x18\x9c\xbd\x3d\x77\xb0\x25\xdc\x97\x24\xdd\xd1\xb1\xdb\x82\x47\xc7\x21\x8f\x73\x80\x9b\x8f\x20\xb4\x23\x07\xe7\x7b\x9e\xf6\x25\xc3\x1e\x5c\xe2\xbe\x59\x72\x84\x5a\xf5\x17\x15\x28\x99\x83\x86\x61\x25\x23\x36\x1c\xbd\x5b\x75\xe0\x8d\xd3\xca\x69\xbf\x5f\x72\x67\xb0\x83\x61\xe4\x51\xb1\xff\xba\x09\xb8\x2d\x1d\x64\xd0\xbd\x05\xcd\xc1\x0e\x0a\x71\x40\xca\x87\x5b\x7a\xca\xae\x85\x60\x1f\x61\xa4\x4c\x65\x1f\x49\x81\x14\x50\xd0\x05\x97\xad\x02\x71\xf0\xed\x33\xb5\xd2\x87\x9d\xff\xd9\xba\x81\xb2\x3d\x68\x54\xda\xdb\x79\x28\x8e\x17\x3c\xfd\xea\x79\x69\x45\x06\x5d\x0c\xb5\xb9\xbe\xf4\xfe\x26\x4a\x36\xb6\x2d\x35\x26\x19\x4c\xf1\x63\x88\xeb\x6a\x8b\xc4\xf4\x72\x82\x64\xec\x77\x4a\x3f\x28\x3c\x8f\xa9\x26\xf6\xd2\xec\x3f\xb0\x59\x30\x2e\x84\x96\x60\x89\xa7\xe1\x2b\x60\x87\x9f\xb9\x7f\xb3\x6b\x0c\x81\x63\x9b\x41\x3a\x2c\x07\x7b\x97\x44\xbf\xe0\x02\x7f\x39\x9b\xb0\x6f\x27\xec\x64\xc2\xa6\xd3\xe9\xab\x09\x13\x3c\xda\xd8\x16\xe1\x4f\xf0\xe8\x2f\xf8\xda\x94\x4d\xb2\x3f\xab\xa0\x02\x90\x07\x34\xf6\x89\x25\x41\xe4\xfe\x5b\x81\x57\xcd\x76\x01\x53\xb3\x29\x8f\x8c\xe0\x42\xd1\x46\x4b\xdf\x28\x40\x9e\x8b\x48\x67\x16\xbb\x9e\x17\x3a\xb3\x38\xdc\x7b\x9e\x71\xa9\x80\xb1\x82\x37\xb3\x10\xa8\xe6\x80\xb3\x5e\xfc\xc2\xb7\xd0\x7f\xa9\x1c\x6d\xaf\x19\xa6\x1b\xd7\xfe\x62\x97\x52\x9c\xed\x21\x93\x45\x61\x0c\xb2\x7c\xae\xae\xd9\x9b\x6f\xd8\x2c\x4d\x13\xc1\x66\xec\xef\xec\x5b\xae\xb8\xe2\xec\x5b\xf6\x77\x76\xc2\x55\xc1\x13\x5d\xa6\x82\x9d\xb0\xbf\x9b\x61\x33\xe5\x5d\x68\x63\x01\xed\x26\x8c\x33\x55\x26\x68\xe8\xbd\xb4\x18\xd7\x57\xae\x5f\xdc\xcf\xce\x52\x14\x0f\x42\x28\x96\xeb\x2d\x5d\x85\x7f\x72\xb7\x7f\x2e\xd5\x3a\x11\x05\xad\x87\x2a\x1a\x19\x2b\x38\x82\x9e\xbe\x99\x2b\xe7\xa7\xfe\x93\x69\xf1\x9f\xd8\xdf\xd9\x45\x99\x24\xa6\x49\xe6\xa0\x31\x0b\xe9\x0d\xb3\xd9\x61\x42\x4d\x1f\xe4\x9d\x4c\x45\x2c\x39\xe4\x87\x99\x7f\x1d\xdf\xc0\x6c\x2f\x4a\x4f\x05\x1a\xee\x69\x27\xc7\x76\xc8\xd1\xf3\x2c\x5c\x13\x4e\x2c\x30\xb4\x56\x3a\x41\x28\xe1\x4f\xc7\x1b\xc1\x9e\x00\x99\xf6\x03\xbd\x51\x50\x4a\x2f\x0c\x50\xb6\xd7\xef\x54\xbf\x52\xf3\x5f\xad\xf4\x1f\x83\xd4\xbf\xfa\xc6\xc3\xb7\x11\x8c\x53\x9c\x1c\x9f\x9c\x09\x0f\x19\xc8\x25\xc4\x7d\xb7\x03\xc9\x0f\x5b\x36\x3e\x3b\x31\xbc\x6d\x9e\xd2\x68\x8d\x16\x7c\x3d\x61\xa9\xd3\x91\xb2\x9b\xca\x05\xb6\x71\x1f\xa3\x66\x02\x19\x9b\x2f\x2d\x80\xc8\xac\x65\xca\x3f\x3c\x8e\xf5\x96\x4b\xf5\x0a\xea\xb0\xd4\x79\x7b\x06\xaa\xe5\xb9\xb2\x7f\x84\x6e\x78\x2f\x9a\xb1\x9b\xda\xbf\x6a\xec\xd4\x24\xdc\xda\xb6\xc3\x81\x1a\x66\x5e\xe1\xf4\x13\x3e\x87\x7e\x6c\x2c\xd1\xc1\xda\x07\xa4\x37\x56\x61\x4f\x01\x5b\xde\x33\xc8\x0d\x8a\xad\x3b\xe5\xb2\x1f\xab\x12\xaf\x95\x21\xd6\x72\x90\x16\x6e\xad\xb1\xb7\xf4\x12\xc3\xbc\x67\x73\x4c\xca\xe4\xd8\x1c\x95\xc7\x17\x5a\x09\xc6\xf3\x5c\xae\x91\xf5\x0e\x1c\x6a\x28\x22\x6b\x8d\xb2\x9b\xea\x93\x21\x38\x82\xc0\x3e\x33\x4d\x42\xc4\x74\x61\x4e\x61\x33\x05\xc9\x6e\xae\xcc\x2f\xc8\x22\x80\xec\x29\xe9\xc8\xd1\xb1\x36\xe2\x1e\xb7\x75\xd1\x85\x18\x14\xde\xb2\xc0\xfa\xa8\x19\x0e\x58\x70\xb4\x13\x0f\x88\xb8\x5d\x04\xc4\xa0\x54\x9a\x65\x8d\x42\x38\xcd\x52\x24\x5a\xad\xcd\xaa\xe8\x3a\x84\xe1\x14\x78\xa2\x26\x60\x61\x9d\x2d\x30\xc6\x0a\x7d\x85\xa6\xc4\xd8\x29\x32\xf6\x2e\xb5\xbc\x5c\x1a\x3b\xce\x45\x7b\x9c\x35\x42\x9d\xeb\xe2\xa9\x38\x0c\xb6\x74\x6b\xce\x60\x9d\x59\xe0\x9c\x8b\x24\xa2\xe1\xe2\x39\x9c\xb0\x47\xc3\x36\x55\x6f\xbe\x45\xbb\xf7\x91\x22\x95\x0d\xc6\x8e\x01\xeb\xf1\x73\xa6\x5e\x0c\x49\xc8\x78\x37\x3b\x3b\xaf\x7d\xaf\x99\x90\xd1\x92\xb5\x71\x73\xf6\xfe\xf4\xed\xe2\xc3\xed\x4d\xe3\x7b\xa6\x34\xfa\xd3\x9e\x9c\x8c\xce\xd1\x7b\x0a\x54\xfa\xcf\xa8\x22\xb6\xd0\x2b\x9b\xa0\x3f\xfc\x82\x6c\xe8\xb8\x0d\x03\x3f\x16\xc1\xfb\x36\xd4\x3b\x6b\x2e\x9c\x4e\x9a\x11\xb5\xa0\x68\xe7\xb0\xc6\xd6\x07\xec\x83\x7a\x87\x3f\xbf\xd4\x89\x8c\xfa\xb1\xd4\xf6\xba\x32\x76\x4d\x13\x9c\xba\x14\x90\x5c\x40\x2e\x57\x6a\x14\xbe\x90\x0a\x11\x15\x3e\x9a\xdf\xec\xdc\xff\x6a\xfc\xe6\x7e\x1f\x08\x7a\x42\xdd\xb0\x81\x3c\xb8\xc3\x07\xc0\xdd\x0a\xbc\xcd\x20\x57\x82\x76\x26\xf8\x56\x01\x37\x13\x71\x8a\xfa\x54\x46\x1e\x0e\xe8\x87\x8d\x4e\xc8\x23\x8a\x1c\xd8\x73\x95\x8a\x2c\xd2\x80\x7b\x44\x7a\x15\xcd\xa2\x8d\x4c\x62\xaf\x09\xf6\x12\x12\x45\x00\xce\xfd\x8a\xe4\x6d\x85\xc3\xaf\xd8\xe2\x7b\x6e\x5d\xbb\xec\xde\xe2\xee\x3e\x08\xfb\xf5\x94\xc8\xef\xbe\x65\xff\x13\x21\x94\x71\x28\x88\xb5\xae\x86\x44\x00\xc3\x3b\x6c\xcf\xa8\xa0\x8a\xb9\x6e\x49\xee\x29\xf2\x0f\xd7\xa2\x36\xaf\xb4\xcc\xea\x43\x09\x5c\xe6\xe8\xc9\x46\x18\x5e\x2e\xa0\x39\x5b\xc1\xd1\x16\xf3\xcc\xc2\x34\xa9\x73\xe5\xb1\x17\x2f\xf2\xd0\x2e\x6b\x9d\x67\xf4\x7f\x5b\x6c\xf9\x84\xbd\xa8\x74\xf4\x05\x70\x5d\x2b\x0d\xf5\x51\x7c\xbc\x32\x34\xb0\x5c\x27\x4c\x16\x73\x65\x5e\x4d\x66\x65\x66\x22\x11\xf7\xa6\x75\x61\x7c\x86\x10\x83\xd6\x77\x61\xbb\x0d\xe9\x49\xdc\xb2\x5a\xd0\xb2\xa1\x4d\x98\x85\x9c\xc9\x18\x18\x8e\x45\x6e\xec\x46\x50\x7b\x12\xbf\x98\x0d\x20\x21\xfc\x88\xd0\xb2\x58\x28\xdb\x3e\x40\x9c\xa1\xd2\xfe\x5c\x9d\xad\x80\x5a\x00\x08\x0d\xe2\x18\xbd\x00\x56\xff\xc7\x11\x58\x4a\x8a\xc7\x68\xf2\x89\xd8\x89\x20\x75\x66\xdc\x49\xe2\x5e\x64\xbb\x02\x9c\xea\x30\xae\x4a\xf0\x62\xc3\x64\x31\x01\xe6\x51\x7b\x52\xce\x15\x8f\x63\xca\xc8\xc6\xe2\x82\x07\x65\xe7\x3c\xd3\xe7\x4b\x7d\xdf\x67\xd8\x1e\x8a\x9d\xc5\x5d\x9d\x26\x5c\x2d\xf0\x06\xf9\x0c\xe8\xd9\x40\x38\xbb\x0b\x46\x51\x2e\x17\x8e\x2d\xed\x49\xda\xe9\xce\xfb\x2b\x0b\x1e\xa6\xc7\x45\xb9\xb4\x15\x4d\x2a\xe0\xe8\xa5\x27\xd6\x70\x7e\x32\x42\x2e\x65\xcc\xa2\x3b\x86\x9f\x02\x1e\x58\xcb\x6b\x28\x27\xbb\x5a\xf7\x21\x6b\xed\x0a\xf8\xb5\x62\x1f\x87\xcc\x7c\xed\x0e\xa9\x4f\xfb\x78\xd8\x5d\xc3\x42\x7c\x14\xf4\x6e\x4f\xb3\x9e\x17\x7e\xd7\xe9\x47\x69\xc2\xf0\x6c\x6f\x83\x08\x3b\x81\xf7\xd1\x0f\xea\x5c\x58\xed\xc2\xe8\xe1\x3b\x4c\xb7\x20\xd4\x9f\x32\x46\x00\xe7\xd4\x50\x4f\x89\xa7\xf4\x80\x76\x4d\xd9\x99\x62\xd6\xdc\x9b\xb0\x17\xb8\xb0\xf2\x17\xe4\x02\x26\x75\x7d\x82\xab\xc4\xb4\x7b\x88\x04\xa1\x0e\xf3\xc2\x54\x34\xbf\xdd\x30\x12\xd7\xcb\x98\xfb\xac\xe3\xf2\xad\x84\x54\xb8\xc7\xb0\x9d\x60\x14\x77\x89\x05\xd8\x4c\x8e\xc0\x19\x49\xdd\x85\x68\x82\xef\xb0\x8d\x37\xb2\x6f\xed\x0f\xcd\x10\xa5\x25\xdd\xa7\xf6\x73\xa6\xb3\xb9\xb2\xa5\x91\x4b\x38\x47\x89\xbe\x7a\x51\x41\x66\x0e\xd9\xfc\xc1\x4a\x85\x60\xbc\x55\x65\x04\xb1\x4f\x4f\xeb\x5d\x3f\x05\x00\x87\xb4\x74\x18\x50\xd0\x81\xf0\xb5\x19\xc3\xc3\x2c\xf0\x2d\x5e\xf3\x75\xea\xdf\x24\x31\x83\x22\x0b\xcb\x34\x1c\x64\xcd\xe5\x25\xf0\x65\xaf\x4a\x73\x18\x05\xa4\xe2\x73\x65\x06\x8f\xad\x24\x64\x4f\xd0\xb8\xcc\xd5\x7b\x9d\x5b\x92\x96\xdc\x8f\x87\x0d\xed\xd3\xb0\xbd\x70\xe2\x94\xf4\x87\xb7\x70\x69\x53\xcc\x05\xe9\xd6\xdc\xd5\x02\xe9\x92\xc4\xb4\xb4\xd3\x65\xe6\x3b\x15\x71\x35\x57\xff\x6d\x86\x07\x9e\x53\x5c\xd9\x69\xd5\x2b\xdc\xc2\x30\x83\x10\xac\xfa\x88\x85\xbe\xfc\xb7\x57\x1f\x5f\x61\x7a\x53\x99\x83\x1e\xf0\xa4\x7a\x81\x38\x7d\x89\x32\x49\x00\x09\x60\x7b\xe0\x38\x8e\x7c\x15\xbd\x48\x38\x7a\xd4\x2d\x54\xd5\xc4\x18\xb2\xd1\x87\x39\xd6\x67\x2c\xe2\x45\xb4\x39\xb2\xb6\x1c\x1d\x63\xf6\xf6\xa3\xe9\xc3\x3c\x24\x63\x69\xb5\x4b\x2c\x98\x07\x67\xb6\x75\xa4\xaf\x95\xf5\x62\xba\x00\x0e\xf8\x9b\xba\xde\x98\xe3\xa4\xc6\xc5\x89\x48\x9c\xaa\x9d\xe7\xbe\x6e\xd5\x3e\xfd\x8b\x93\xa2\x14\x8a\x6f\x45\xcc\x5e\x40\x22\xee\x0b\x3b\xf9\x73\x95\x2e\xa7\xc9\x6e\x55\x10\x73\xa0\x19\x94\x29\xe8\xe2\xed\xb9\xe5\x16\x71\xf3\x99\xb4\x67\xb0\x3b\x1f\x5a\xed\xb6\x8e\x1b\x1b\x57\xd3\x70\x83\x05\x7d\x5c\x6e\x74\xae\xab\xa8\xbc\xaa\x40\x07\xcf\xef\x26\x6c\x99\x71\x05\x92\x46\x71\x68\x54\xf9\xdd\x09\x8f\x67\xa4\xe5\xb3\x99\x79\x8a\x27\x3b\xc8\xc0\x99\xcc\x15\x72\x18\x02\xd9\xfd\x2e\x4a\x64\xc4\xd6\x19\x4f\x37\x35\x3b\x48\xdc\x0b\x55\x80\x32\xf6\x95\xe0\xf9\x61\x68\x89\xac\x5e\x02\x1b\x1c\xcf\x9a\x29\x78\x7d\x70\x55\x63\x9d\x86\xe6\x75\x5c\x2d\x80\x90\x14\xf1\x62\x1c\xe3\xd4\x5e\x5e\xe4\x0a\xdb\x26\x51\xbf\x41\x04\xd8\x74\x8e\xd9\x5a\xf7\xc1\x0f\x70\x5c\x89\x0c\xc9\x62\x6a\x0f\x85\x4c\x38\x72\xa5\x83\x28\x72\xcf\xaa\x56\x24\xf7\xac\x51\xde\x73\x4d\x81\x37\xf4\x54\xd8\x44\x04\x77\x70\x4c\x48\xb9\x14\xe8\x33\xd9\x1f\xcb\xa5\x4e\x2c\xff\xe8\xd9\x5b\xa6\x33\x90\xfe\x29\x34\xfd\x49\xc6\x5d\xd6\x81\x54\xb1\xf8\xe5\x20\x12\xa0\xfe\x8b\xde\x9a\xcd\xa6\x9a\x40\x61\xa6\xde\x59\x38\x9d\x32\x61\x2e\xe1\xc2\xbe\x8c\x1b\xdf\xca\xeb\x60\xe1\x59\x52\x6c\x00\xc1\x8b\x49\x32\x7e\x50\xb7\x7c\xc7\xa2\x0d\x57\xeb\xc0\x35\x01\x80\x4a\x91\xea\x0c\x25\x72\xef\x81\x6d\x53\x67\x96\x64\x81\xa8\x03\x28\x53\xc7\x05\x12\x10\x20\xaf\x2d\x3f\x00\x5f\xaf\x33\xb1\x86\x44\xd2\xb9\xaa\x90\x9f\x00\xd3\xa8\x55\xe7\xc1\x7a\xfa\xb8\x23\x9e\x86\x80\xa9\xeb\x35\x58\x64\x3b\x97\x79\x4f\xfa\xd2\x7e\x3f\xd7\x87\x75\xc2\xa4\x98\x4e\xd8\x57\x3e\x29\x40\x44\x5a\xb9\xd4\xfd\x8e\xbc\xed\x9a\xcb\x9f\xed\x79\x3a\x34\x99\x9a\xda\xdb\x0e\x9f\x35\x54\xaa\x5b\x17\x4d\x2f\xf7\x41\xc1\x8b\x72\xc4\x1d\x74\xc2\x0b\x9e\xe8\xf5\x89\xf9\xf1\x35\xfe\xb6\x6f\x5d\x9f\x20\x62\xdf\xb2\xe4\x99\xef\x9b\x9b\xd3\xd4\xed\x59\xf4\xdb\xc6\x7a\xaf\x03\x39\xd1\xdd\x0e\xe4\xa7\x30\xd5\x2d\x15\xd2\x7e\x1f\x72\xd2\x41\xef\xd3\xd3\xa7\xb1\x2e\x62\x8b\xab\xa7\xd4\xa0\xbc\xfe\x8c\x6d\x39\x01\xd2\x4c\xc7\x65\x24\x62\xb3\x73\xe1\x3d\x84\x88\x24\xc7\x32\x54\x39\x24\xdb\x2e\xda\x0a\x55\x1a\xdc\xba\x9f\xca\xe7\x30\x88\x9d\xde\x0d\xff\x6d\x87\xbf\xc1\x5a\x7c\x6d\x83\x1e\xee\x4f\x1c\xa7\x6c\xe4\x3d\xe5\xaa\xaf\x72\xca\xeb\x4c\xae\xa5\xe2\x85\xce\xd8\x4b\xc7\x25\xf0\xca\x09\xd1\x75\x5b\x08\x23\x8f\x89\xca\x10\xe1\x31\xf1\x49\x0d\x8f\xb6\x45\x6a\xbe\x95\x17\x7c\x9b\x86\x2c\xcd\x4e\xe6\x9f\x46\x26\xc1\x41\x70\xb6\x09\xf8\x4e\x65\xee\xf3\x66\xe7\x8a\x22\x0e\x38\x6f\x3a\x0b\x65\x06\x3a\xef\xe6\xb4\x2c\x16\x8f\x64\x1e\xc3\x1f\x8f\x73\x3c\x11\x0c\xe1\x3d\x4f\xfb\xb9\x9c\x38\xb9\x1c\x30\x71\x90\xdc\x11\xde\x52\xa9\xae\xcf\x7e\x21\x9f\x91\xdc\xd2\xf5\xd0\xf9\xd5\xb9\x0d\x14\xf9\xf7\x60\xe5\x81\x05\x13\x81\xa4\xb6\x98\x88\x85\x4f\x7b\x77\xac\x99\x5b\xdc\x12\x40\x9d\x24\xba\x8c\x19\x1d\x6a\x14\x86\xcf\xa6\x78\x3b\x02\xcb\xf4\x74\xda\x95\x58\x36\x52\x60\xdc\x9d\x3f\xf0\xbb\xf6\x1d\x08\x9f\x75\x9c\xc0\xbd\x5b\x9f\x46\xf6\xd9\xa6\x9e\x46\x1a\xe6\xde\x1d\xc7\xa3\xe6\xde\x79\xc1\x81\xf2\x72\x9c\x83\x14\xde\xa3\x32\x4e\x60\xbf\x85\x01\x84\x16\x52\xee\x4a\x60\x36\xbf\x3b\xb8\x3a\xcb\x03\xd1\x5f\x55\xca\x33\xa1\x8a\x05\xd4\x38\xae\x32\xa8\xe4\x12\x7e\x5e\x31\x98\x06\x39\x82\xff\x7c\xa3\xd1\xbf\x6f\xf9\xad\xfe\xc2\xae\xc9\xa7\x65\xce\x2b\x09\x20\xde\xfc\x8e\xbd\x94\x80\x39\x0a\x62\xa1\x6e\xe2\x3a\xa6\x8b\x3a\xf4\x88\xd1\x0b\x3a\x54\x39\xda\x07\x75\xc8\xb7\x1e\x42\xd5\x50\x0a\xb9\xf7\x28\x2b\xdf\x1c\xb5\xf6\x6f\x81\xe6\xc5\x45\xe5\xdf\xc0\x4f\x6c\xe6\x2f\x61\x7f\x15\x99\xf6\x19\x58\xe8\xac\x0a\x0b\xee\xb5\xd7\x1f\x2f\xd7\x8d\xf6\x38\x0a\x45\x87\x4a\xa9\xf0\x17\xa2\x10\x43\x8f\xc2\x72\x67\x9f\x23\x1d\x21\xa4\x54\x44\x8b\x0e\x59\x9c\x41\x4d\x09\x1e\x9e\xa1\xcc\x8d\xac\x5d\x66\x76\x83\x1e\x83\xbf\x82\x52\x9b\xb6\x3c\x25\x7c\x1f\x41\xb9\xeb\xc1\x9b\x29\x74\xe2\xcf\x7f\xfa\xcb\x54\x76\x24\x59\x43\xd3\xc7\xc2\xa5\x5c\xe3\xdf\x65\x52\xa8\x18\x82\xb1\x3c\x6e\x2a\xb6\xa9\x8a\x77\xbe\x72\x3c\x9b\x65\xf8\x24\x19\xd9\xed\x57\x6d\xbe\xc0\x45\xf4\x09\x22\xfa\xfe\x90\x75\xdb\xb7\x12\xef\xeb\x32\x25\xf2\x45\xbc\x53\x7c\x2b\xa3\x4f\xda\xc6\x9d\x14\x49\x0c\x4d\xa4\xda\xf7\x45\xa5\x62\x11\xdd\x8d\xb5\x09\x1e\xad\x37\x21\xa2\x3b\xf6\xfd\xcd\xfb\x73\x94\x17\x96\xf9\x5c\x5d\xf0\x42\xde\x8b\xdb\x2c\x71\xe1\x00\x82\x49\x67\x89\xdd\x23\x55\xfe\xf3\x80\x6b\xcb\x92\xa5\x5b\xc3\x21\x94\xa7\xd8\xee\x8e\x96\x65\x74\x27\x8a\xe3\x8c\xab\x58\x6f\xb1\x1b\xc7\x79\xb9\x5a\xc9\x5f\xa6\x05\xcf\x3a\xb4\x2a\xd0\x8f\xf0\x19\xed\x5c\xaf\x40\x56\x78\x9b\x17\x4d\xdd\x07\x48\xb4\x26\x5d\xfb\x8a\x71\x8b\x79\x81\x7c\x2b\x80\x6c\x94\x55\x75\x5e\xa0\x14\xcc\x5d\x06\x39\xd4\x3c\xa7\x0c\x06\x4d\x62\xeb\x1f\x03\xe3\xfe\x63\xd0\x2a\x1f\xc2\x0e\x1b\xe5\x25\x46\xb7\xfc\x0e\xdf\x87\xeb\x4c\xe4\xf9\x84\xe5\x1a\x5a\x3c\x57\x36\x17\xc0\xe6\xab\x01\xee\x05\xe8\x8a\x93\x1d\x8b\x74\xea\x40\xeb\xd8\xaf\x8d\x7e\x00\x3f\x7d\x98\xa9\x0b\x22\xda\xa5\x2a\x64\xc2\xf8\xaa\x20\x27\x3e\x68\x33\x58\x2d\xb6\x7c\x3a\x57\x10\x8a\x8d\xa0\xfb\x00\x91\x70\xe1\x17\xd7\x89\x9c\xad\x78\x24\x13\x59\x10\x63\x1c\x24\x79\x71\xd3\x5f\x73\x1f\x98\xb1\xcc\xf8\x8e\x27\xfe\x61\xc5\x93\xd2\x27\x27\x1f\xe5\xa2\x87\x91\x54\xe6\x0b\x74\x10\x3c\xdf\x06\xf7\x28\x40\x19\x06\x1f\x90\xbd\x7d\x66\x2a\xbf\xa8\xdd\xa2\xbf\x0b\xff\xb7\xf2\x0e\xef\xb3\x0a\x0e\x78\x90\x1f\x72\x39\x36\x9f\xdc\x4e\xc0\xdc\xdb\x19\x32\xb6\xf8\xe0\x8a\x29\xee\xd3\x7f\xdd\xf5\x08\x31\x93\x8e\x47\xff\xd4\xca\xce\x35\x6b\x18\x31\x7a\xed\x46\xe2\x27\x72\x67\x74\x51\xea\x0f\x69\xbe\xf5\xc6\x5f\x6a\x9d\x1c\xea\x91\x27\x52\x0c\xa9\xd5\x02\x94\x98\x0f\x79\x4e\xe2\x02\x70\x8e\xad\xb3\xb7\x2e\xe6\xee\x38\xea\xab\xfa\x6d\x04\x07\xa3\x26\xc0\x41\x06\x8d\xe8\x41\x8a\xe7\x69\x0b\xe8\x62\x24\xe2\x1d\xca\x40\xb4\x96\x35\xed\x9b\x21\x82\x80\x1f\x85\xfb\x36\x02\x8f\x6f\xad\x85\xa3\x9c\x75\xa8\x9b\x5c\xab\xca\x39\xee\x42\xbe\x6f\x37\x8e\x41\xdd\x76\x3c\xb7\x5c\x91\xe7\x8f\xac\xf8\xb9\x0a\x2c\x76\xe4\xa4\xb3\x29\x05\x6e\xd4\xda\xfc\x79\x95\x65\x78\xb0\x3f\xef\x10\x51\x87\xde\x93\xf3\x6d\x28\xcf\x08\x58\x90\x48\x6f\x97\x52\x59\x56\x08\x72\x72\xc3\x53\x63\x66\x39\x73\x5d\x40\xc2\x3e\x19\x50\xb4\xa7\x36\xf6\xce\xcc\x09\xe9\x87\xc3\x23\x6b\xdf\x73\x3c\x7c\xdf\x3d\xad\xfe\x44\x47\xa4\xb1\xde\x03\x73\x81\x24\x0f\x7c\x97\x83\x84\xb9\x30\xa7\xe2\x0a\x1d\xbb\xd5\xf6\x4f\x02\xf3\xc3\xf2\x31\xcf\x15\x8c\x10\xf2\x75\xd9\x83\xd4\x9c\xac\xb0\x00\x13\x2b\xd6\xee\xb9\xd6\x5e\xe4\xed\x83\xf3\x79\x62\x35\x59\x6f\xac\x06\x83\xd0\xff\x33\xc2\x33\x3d\x4e\xe0\x03\x7d\xd1\xc1\x35\x89\x16\x23\xc1\x84\x20\x71\xcb\x85\xa8\x27\x6c\xcb\xa5\xa2\x6d\x80\x82\x98\xb1\x58\x96\xeb\x75\xa7\x8b\xf4\xd7\x1f\x6b\xa9\xee\x93\x7f\x7a\x5f\x78\x2f\x5b\xe0\x53\x78\x8b\xcf\x6c\x4d\xe8\xbe\x36\xef\xbe\x4f\xe3\x20\xfe\x8c\xde\xf8\xd6\x90\x58\x63\x11\x3d\x8d\x37\xfe\x6c\x88\x37\xde\x62\xbb\x20\xc5\x8e\x9e\xd3\x16\x7f\xf3\x9b\x9b\xfe\xd3\xb8\xe9\x07\x2d\x0a\xa4\xd5\x59\xc8\xaa\x81\xde\xd3\xc2\x47\x32\x4f\x3a\x32\x66\x68\x15\xb2\xbb\x99\xd3\x3d\xce\xd9\x92\x47\xcf\x40\x45\x09\xb7\xe3\xe1\xfe\xc0\x3d\xe0\x97\x6b\xbd\x15\x0c\xaa\xca\x51\x4a\x89\x51\x16\xe3\x04\xd0\xaa\xa6\x83\x1e\x31\x42\x78\x14\xb8\x4e\x11\xb9\x12\x7b\xa3\xfa\xa5\x12\x0f\xcc\xdc\x56\x93\x10\xbe\x17\x4c\x0f\x68\xec\xbd\x32\xd6\x61\x05\xeb\xef\x28\x33\x32\xb1\xe6\x59\x0c\x19\x26\xb4\x25\x13\x1e\xdd\x99\xff\x86\xf6\x51\x8d\x04\x31\xb4\xd9\xfa\x08\x7b\xf5\xa5\x49\x15\x21\x19\xa1\x65\x55\x77\xed\xc3\x9f\xe7\x8c\x47\x99\xce\xd1\x69\xe4\xa4\xa9\x21\xc3\x19\x0c\xd8\x7b\x19\x97\x3c\xc1\x1a\x3b\x3d\xed\x63\xe1\x6b\x75\xc0\x51\xa0\x22\xd7\x44\xb3\xd1\x74\x20\x47\x14\x0c\xe3\x74\xae\xde\xba\x80\xc9\x1b\x76\x9b\x0b\x42\x99\xe5\x96\x87\xbf\xb7\xa5\xcf\x66\x3e\x34\x30\x81\x9d\x36\x44\xcf\x00\x58\x90\x75\x30\x10\x79\xf7\x48\xec\x21\x34\x3d\x64\x52\x46\x13\x33\x9f\x05\x52\xf6\x7e\x58\xf0\x9d\x90\x09\x1e\xef\x42\x36\x44\xa9\x18\x44\xe9\x18\x8f\xb7\x52\x99\x4d\x60\xe5\x52\xdd\x4d\x63\x95\x13\x10\x72\x0c\xaa\x62\x49\x52\x3b\x04\x73\xa6\x84\x31\x2e\x79\x26\x93\x1d\xbc\x27\xd2\x4c\x1c\x05\xf5\x04\xf3\x43\x19\x4f\xa0\x01\x41\x34\x2e\x65\x2e\x56\x65\x82\xaf\x0e\x78\x97\xbb\x0e\xd0\x89\x74\x7b\x36\x31\x06\x47\x41\x5a\x3e\x41\xc5\xa8\x90\xf9\x14\xd9\x23\x8d\x68\xe5\xb8\x88\x9b\x67\xeb\xcc\x00\xe4\xbe\xd1\x0f\x36\xd5\xed\x81\x7b\x2c\x73\xd7\xed\xfa\x64\x51\x96\x7e\x3b\xd4\xbe\x00\xed\x39\x15\x50\xee\xb9\xd0\x1a\x7d\x26\x62\x77\x36\x49\x05\xdd\x21\x91\x69\xef\xb9\x2e\x73\xcc\x98\x33\x73\x09\xf7\x97\x75\x74\x54\x1d\xd7\xcc\xf5\x4e\xe6\x5a\xb1\x79\xf9\xe5\x97\xbf\x17\xec\x4b\x48\x21\xa4\xf7\x08\xc6\xc7\x80\xaf\x13\x4b\x87\x23\xdb\x55\x20\x90\xcc\xb3\x31\x23\xac\x0d\xa2\x6a\xf3\xf5\x01\xe4\xc9\xa3\x0d\xcb\xcb\x25\x22\x18\x39\x85\x58\xb8\x72\xbc\xdf\xe7\x1a\xc0\x88\x78\xb3\xdb\xd6\xff\x2f\x09\x28\xa0\xec\xca\x5c\xa5\x1a\xa9\xe9\x01\xfa\xb9\x14\x6c\xcb\xb3\x3b\x50\xd1\x45\xf7\x3c\x50\xf1\xbf\x94\x62\x5a\x0d\x2f\xbc\xaa\xb4\x87\x02\x3a\x48\x39\xcd\xb2\x52\x29\x2b\x0b\xc6\x8c\x61\xea\x7d\xfd\x93\xb9\x5a\x96\xe1\xdb\xb3\x12\x2c\xf0\x4b\x0b\x02\x06\x70\xd8\x6a\xe0\x0a\xa1\x46\xf1\xdc\xb7\x6b\xca\x06\x44\x0d\xe6\xea\x89\xc3\x06\xfb\x1c\x7e\x97\x64\x83\x59\x67\x5e\x90\xaf\x00\xdd\x0d\x95\xab\x61\x3a\x70\xd9\x83\x91\x73\x09\xf2\xd5\x13\xf6\xbd\xbc\x17\x13\x76\x9d\xf2\xec\x6e\xc2\xde\x62\xf8\xef\x0f\x7a\xd9\xe6\xc3\x6b\x10\x4a\x1c\xec\xc7\x7b\x9c\x1b\xab\x8f\x68\xa5\xdd\xfa\xff\xa9\x41\x0c\xc0\xba\x62\xdf\xff\x33\x11\x79\x1d\x5c\x1f\xff\xec\x9e\x88\x3d\x61\xea\xdf\xc0\x6b\xff\x94\xaf\xe2\x7e\x9a\x8f\xdf\x85\xff\x6b\xcf\x2f\x6b\x71\x81\xed\x49\xa7\x5c\x2b\x2a\xed\xd7\x95\xd8\x2c\xe3\xfa\xa5\xdc\xcc\x6f\x1e\xb6\x15\x28\x7d\x3c\x76\xa9\xed\x23\x40\xf7\xf4\x53\x3b\x5e\x27\x89\xce\xcb\xac\x7f\xf3\x5f\x55\x5b\x6d\x6b\x6f\xa1\x5a\x85\xc5\xb6\x5d\x0a\x60\x2d\x18\x0a\x3f\xc1\xaf\x2d\xfe\x5b\x2f\x17\x80\xb5\x3a\x6c\x87\xb7\x15\xe7\x08\x9c\x75\x54\x69\xaa\xbf\x21\xaf\x53\x01\x8c\x53\xde\x14\xf5\x01\x81\xda\x0a\x73\xae\x91\xb9\xb2\x9c\xf7\x98\x31\x9b\x65\x02\xc8\xb9\x33\x01\x52\x8b\x8c\x38\x06\x93\x5d\x60\x11\x05\x2f\x1f\x0f\x8a\x09\xb3\xdc\x20\x59\x95\xde\x5b\x4b\x21\x94\x1b\xed\x31\xa6\x04\x10\x51\xd7\x46\x9f\xd0\x6e\x0f\xc2\x4a\x1f\x74\xc8\xc2\x36\x7e\x17\xbc\x05\xc1\xe4\x5e\x8b\x22\x38\xcd\x6b\xa6\x45\x65\x6b\x56\x22\x54\xbf\x2a\xc4\x7f\x6b\x0c\xba\x46\xce\x55\x71\xa0\x0c\x8a\xe9\x3d\x85\xbf\xfc\x92\x17\x1b\x7c\xd0\x6e\x75\x21\xf0\xcc\x44\x96\x20\x5c\x2f\xe8\x75\x5e\x26\x7a\x09\x1a\x87\x45\x0f\x87\x63\x44\x5b\x7b\xd0\xd0\x35\x27\x6c\xc8\xc9\x60\x4e\x13\xc8\xb4\xcd\x44\x0e\x84\x2b\xcd\x28\xd5\x50\x7c\xf2\xb8\x47\x77\xb3\xb9\xe6\xd0\x7f\xdb\x78\x6c\x37\x45\x31\xcc\xb6\x06\xb0\xea\xe9\x23\x32\x68\x1a\x12\x23\x44\x16\x4d\x61\x60\xe4\x8b\xad\xf5\xd7\x4a\xe9\xcf\xd5\x0c\x3f\x09\x2e\x01\xee\x55\xae\x1c\x1e\x94\x54\x93\xdd\xfe\xc3\xf4\x55\x36\x0b\x11\x88\xe4\x21\x98\x78\x5f\x26\x3c\x06\x26\x90\xd5\xa8\x0a\x99\x09\xa6\x00\x85\x30\x57\x79\xb9\x3c\xf2\xc4\x24\xe6\x15\x77\x0f\x64\x3a\xb9\x48\x39\x3c\x65\x80\xaf\xe8\xa8\xe5\x1a\x46\xcf\xa4\x57\xab\xb1\x04\x7e\x3c\xa1\xc3\x1f\x72\x25\x31\x33\xde\xf5\xdd\x95\x63\x1e\x6b\xf0\x8a\xb6\x70\x25\xbc\xec\xfa\xce\x0b\xd0\xd3\x82\x0c\xcc\x2b\x44\x51\x7c\xee\x0b\x3c\x8c\x86\x0e\xbd\xba\x21\x9e\x36\x57\xff\x62\xef\x86\x6e\x50\xf1\x88\x95\x6e\x46\xc6\x5c\x51\x9d\x60\xe7\x4a\xdb\xec\x13\x32\x30\x02\xbb\x1b\xd5\x58\xf2\x6d\xa5\x72\x8b\x6b\x09\x45\x55\x34\xa5\xcb\xc2\xa7\xf7\x32\x0f\xe8\xd6\xa1\xb6\x6b\x21\xd8\x9b\x4c\xac\xde\x7c\xcc\xc4\x6a\x61\x67\x7a\x0a\x1d\x9a\x9a\x1e\x35\x49\xd7\x07\x2e\x8e\x3c\xd5\xaa\x9d\xfc\x70\x0f\x39\x69\xad\x4b\x58\x4e\xd0\x27\xb9\x62\x5e\x5f\xd6\xf4\x07\x18\x20\x44\x5c\x67\x83\x6f\xb4\xec\x93\x5f\x73\x5d\x48\xb0\x01\x50\xab\x0e\x19\xd2\x7f\xfe\xeb\xad\x32\x66\x43\xae\xb7\x9b\x2a\x64\xc6\x1e\xf6\x5c\xb9\x0b\xaf\x1b\x17\xfa\x69\xd1\xe9\x30\x81\x79\xca\x1f\x14\xf1\xd8\x8c\x72\x3d\x0d\xbb\xd6\x6a\x00\xa2\xe0\x5a\x6b\x60\xe0\xfc\x2e\x53\xd6\xd3\x27\x9d\x92\xe5\x24\xd0\xff\xe7\x49\x12\x6a\x5a\xf8\x48\xdb\x5c\xf9\xbc\x54\x63\xb5\x26\x89\x75\xe1\x55\xec\x0d\x27\x39\x9c\x17\xbc\x10\x13\x4b\xba\x42\x74\x85\x14\x0f\x3b\x5a\x72\x10\x97\x76\x2a\x66\xfb\x76\xf3\x53\x3d\x22\x7f\x65\x79\xd1\x7b\x22\xcf\x58\xed\xe2\x4e\x34\xe0\xcc\x7b\xdb\xda\x1e\xe9\x08\x28\x25\x60\x33\xdb\x53\x36\xe2\x59\x66\x51\xfe\x54\x2b\xb3\x84\xe3\xe1\xab\xa4\xa3\x9d\x1b\x11\xdd\xa5\x5a\xaa\xd1\x67\x51\x85\xe2\x02\x16\x7b\xc1\x7c\x69\xee\x75\x38\xe8\x72\xac\xd8\x93\xd8\x91\x1c\xe0\x15\x16\x1a\xea\xc9\xd8\x38\x73\x5a\xd5\xdd\xcb\xee\xa9\xfd\x17\xc2\xdf\x0d\xcf\xe0\x8b\x6d\x89\x0f\xd5\x6e\x15\xde\xe2\xd8\xa9\x30\x81\xf2\x46\xf6\xd7\xc0\xc1\xe6\xac\x42\x61\xd8\x3a\xa4\xe0\x82\xfc\xcd\x33\xf4\x9b\x67\xe8\x7f\xb8\x67\xe8\x53\xba\x85\x00\x1b\xf3\x9c\x3e\xa1\x9e\x00\xf9\x01\xdb\xd1\xd5\x3a\x3a\xc7\xb1\xd5\x3a\x9e\x04\xb2\xdb\x41\xa6\x63\x13\xe8\x6f\x89\x30\xcc\xf8\x2c\x79\x74\x27\x54\x67\x8c\xde\xd2\x17\x75\x2a\xa0\x3e\x2d\x82\xa5\x8d\x7d\x29\xf8\x75\x3f\x94\xc5\x43\x9d\x88\x34\xb8\x8d\x10\xc4\xec\x13\xb0\x3d\x4d\xc7\x8f\x00\x34\xa6\x33\x47\x6c\x9d\x53\x16\x1e\x06\x23\x91\x26\x09\xc1\x52\x35\x2a\xe8\xa1\x98\x38\x5b\xf1\x22\xd5\x3a\x69\x85\xc6\x3d\xe9\x00\x36\x12\x65\x86\x0e\xde\x19\x1a\xa3\x79\x08\x18\xb3\xa3\xe8\x93\x2e\x7c\x8a\x06\xe6\x63\x80\x16\x06\xac\xa6\xb8\x84\x5c\x4a\x3f\x1c\x81\xc0\x21\x77\x0e\x17\xc2\x88\x2d\x45\xc4\x41\x7a\xd5\x82\xf7\x22\xee\xb2\x4f\x42\x52\xa4\x46\x3a\x48\xde\xac\xa7\x23\x6a\x09\xe5\x2e\x64\x9b\xf0\xc5\xd8\xcd\x55\xb3\x10\x2c\xb4\x1c\x5b\x6e\x91\x24\x96\x76\x71\x9f\xa4\xb0\xe5\x98\x5e\x80\xfe\xe1\xb0\x1b\xae\xf5\xdc\x39\xa3\x82\x4e\xa0\x9c\xe1\x07\xe9\xf7\x90\x8e\xb3\x1d\x88\xdc\x99\xab\x99\x53\x9a\xf5\xd8\x2f\x87\xdc\xc3\x70\x29\x62\x16\x1b\x53\x83\x5c\x8e\xfe\xe5\x32\x61\x79\x19\x6d\x80\xad\xb2\x7a\x4e\x85\xe7\x56\x73\xc7\x4e\xe6\xca\x3c\x88\xc0\xd5\xb2\xe5\x90\x17\xff\x60\x8c\xd5\x5c\xfe\x55\x38\x78\x16\x91\x77\x85\x88\x2c\x7c\x38\x69\xd5\x8a\x5e\xb3\xc4\xa1\x08\xb0\xf0\x98\x92\x32\x8d\x79\x21\xa6\x73\x8f\xb6\x91\xe8\xe9\xb4\x28\x0f\x32\x99\xf3\xb0\x63\x21\x8e\xb1\x76\xd2\x26\x72\x25\xa2\x5d\xd4\xd0\x01\xea\xa7\x89\xf8\xed\xd9\xf6\xeb\x7a\xb6\x21\xcb\x2e\xe6\x0c\x8e\x19\x5a\x6a\xea\x95\xff\xf9\x61\x83\x2b\x58\xd0\x92\x7c\xc4\x38\x7f\xc2\x67\x67\x8b\x0d\x3c\xce\x9e\x1f\xfc\x0e\xea\xbf\xce\xfc\xc3\xd6\x5f\xd6\x01\x05\x42\xc3\x2c\x0c\x83\x8b\x45\xb8\x74\x8c\x41\x3b\x38\xac\xdf\xcd\x32\xf3\xab\x02\x27\x0d\x79\xb8\x1a\x8b\xdb\xc1\x95\x2e\xac\xa5\xad\x04\xde\x77\x3d\x16\x77\xc0\xea\xce\x8b\x17\xb9\x1b\xf5\xea\x09\x68\xb1\xff\x33\xb5\x3b\x28\x01\x73\x97\x8a\x45\x99\x25\x07\xc1\x8d\x6f\xaf\xce\x8f\x9d\xb5\x01\x96\x73\xa7\xee\x51\x51\x13\x67\xb6\xaa\xc0\x22\x26\x38\x68\xa4\x13\xb6\x2c\x57\x2b\xd0\x2f\x21\x60\xa8\x3d\x8c\x40\x1b\xbe\xcc\x0b\x7b\x9f\x20\xd3\x0c\xcf\x8b\xb9\xd2\x4a\xb0\xf9\x17\xc7\xf3\x2f\xcc\x55\x96\xf1\xa8\x10\x19\x92\x0c\x24\x3c\x2f\x58\x2e\xd6\x60\x6a\x51\xa5\xb7\x57\xe7\x90\x95\x58\x6c\xb0\x38\xf7\x64\xc5\x7c\x4f\xe4\x7c\x06\xad\x1f\x20\xa8\x56\x81\xe6\x15\xb4\xfd\x25\xcf\x99\x54\x73\xf5\xd1\x14\x71\xbc\xd6\x7a\x9d\x88\xa9\x9d\x90\xe9\x5b\x72\x3d\x7e\x7c\x85\x2d\x80\x9f\x87\xb0\x7e\x73\x21\x72\xa5\x95\x8c\x78\x02\x09\x39\x73\x05\x56\xf3\xc4\x74\x06\x5c\xa3\xf3\x2f\xa6\xf3\x2f\x18\x84\x4f\x0b\xc6\xa3\x48\xa4\x85\x88\x51\x5c\xf4\x4c\xb1\x14\xf0\x8b\x91\x98\xb0\x42\xf0\x6d\x6e\x29\x9d\x59\x6a\xde\x98\xf0\x34\x64\x52\x11\xd2\x69\x29\x15\xcf\x76\x08\x66\x42\xb9\x70\x4a\xfe\xd8\xcd\x95\xf8\x05\xe8\x3f\x25\x30\x80\x96\xb9\xa3\xa5\x21\x61\x02\xd3\xe5\x99\xda\x4d\xd9\xf7\xc8\xd0\x80\x14\xa8\xb7\x57\xe7\x96\xde\x88\x72\x40\xe7\x2a\x8f\x36\x62\x2b\xd8\xc7\x4d\x51\xa4\x1f\x27\xf8\xbf\xf9\x47\x88\x38\x2a\xcd\xf0\xd3\x09\x33\x53\x64\x0c\x55\x8b\x97\x4f\x76\xa0\xe2\x5a\xa6\x24\xf9\x3e\x57\xc0\xc5\x9e\x85\xe8\x5e\x33\xda\x50\x63\xf0\x04\xaf\xe0\xc2\xcd\x29\x0e\xf2\x8a\x6f\xcc\xe0\xfc\x5f\x76\xb6\xf2\x55\x9a\x01\xb4\xea\x5e\xae\x55\x60\x90\xe4\x90\xb2\x35\x35\x3f\x98\x29\xf6\xfd\xcd\xcd\x25\xfb\xee\xf4\xc6\x1a\x3b\xb7\x57\xe7\xb8\x2e\x80\x4e\x85\x71\xf6\xe7\xfa\x14\xdf\xec\x52\xf1\x97\x3f\xff\x65\xae\x98\x55\x09\x57\x76\xa4\x71\x47\x4f\x90\x12\x16\xf0\x4e\x10\x98\x05\x2a\x67\xa8\x0f\x25\x77\xa8\xf9\x19\x5a\xe7\x0f\xe4\x2d\x80\x3b\x2a\xd1\xfa\xae\x4c\x9d\x9b\x3b\xb4\xc3\x4c\x85\xb7\x57\xe7\x50\x3a\xd0\x29\x15\x1b\x50\x30\x13\xce\xfb\x02\x13\xcf\x6d\x63\xcc\x7f\xdf\x6b\x19\x33\xae\x76\xe6\xb7\x58\x34\x2c\xcb\x4c\xac\x74\x26\x26\xf6\x9b\xa6\x00\x5e\xc8\xa5\x4c\x64\xb1\x83\x53\xca\x2a\xcb\xa7\x96\x23\xdf\x14\x60\x5e\x33\x04\xf0\x36\x0b\x0c\x85\x64\x5f\xde\xe6\x21\x02\x1c\x26\xcd\xa9\x13\xe2\x43\xc7\xfc\x76\x99\x09\x7e\x67\x56\x37\x95\x30\x7d\x45\xaa\xad\xe2\x0d\xde\x31\xab\x52\x45\xb8\x34\x4c\x1b\x68\xf5\xd3\xcb\x29\xd9\x05\xf2\xfd\x36\x5c\xbe\x5a\xc9\x48\xf2\x84\x4e\x8e\x65\xb9\x02\xd9\x18\x9e\x93\x64\x11\x82\x0f\x4d\x21\xf0\xca\xb0\x92\xf9\xb8\xa0\x96\x62\x2d\x11\x70\xfc\x20\x8b\x0d\xe6\x15\x4c\x71\x9e\x79\x2a\xf3\x69\xa4\xb7\xb0\xdf\xae\x61\x29\xe5\xf4\xe8\x05\x1c\x78\x6d\x9d\xb3\x97\x16\x6a\xb7\x4d\x8b\x1d\xad\xbd\x57\x6c\x2b\xd7\x9b\x02\x84\x5c\xa0\x76\x80\x44\xc8\x6d\x9a\xc0\xa3\x8f\x22\x8c\x16\xef\x9b\x8b\x2d\x57\x85\x8c\xba\x62\x4a\xad\xa2\xdc\xc3\x30\x9e\xcb\x5d\xd1\xef\xc7\x7b\x4f\x3c\xfb\x1c\x29\xf4\x83\x13\x99\xd5\x0f\x64\x3a\x03\x41\x5e\x26\x20\xf0\xaf\x8b\xbe\xee\x7b\x42\x7d\x9c\xa9\xdd\x47\x4f\x42\xca\x55\xa0\x7d\xd5\x53\xbb\xdd\xff\x3c\xd1\x34\x6b\x8c\xcf\x15\xa0\x3a\xcd\x81\x41\x72\xb0\xbd\x77\x8c\xbb\x52\xcc\xcc\x5e\xda\x45\x93\xc8\x25\xd4\x4d\x67\x45\xce\xf2\x32\x85\x7c\x82\x42\xb3\x94\x47\x77\xc7\xa5\x32\xff\x63\x0e\x43\xdc\xee\x79\x48\x4e\x34\x57\x7a\xc5\xca\x02\x37\x8e\x5d\xc2\xe0\x14\x09\x5c\x01\xfe\x81\xb6\x15\xc5\x46\xc7\x2e\x2f\xcc\x94\x09\xe3\x67\x5a\x74\x4a\xf4\xd2\xaf\xdf\xb0\x4b\x53\xa1\x59\xc4\x54\x37\x77\xdd\x97\x8a\x9d\xfc\xcb\xbf\xc0\xf7\xcd\xe0\xbe\xd3\x9a\xad\xb4\x66\xdf\xb0\xe9\x74\xfa\x9f\xf8\x37\x53\x28\x57\x3b\xfa\x17\x57\xbb\xa9\x29\xee\x5d\xa6\xb7\x2f\x57\x5a\xbf\xa2\xbf\x83\x6c\xb2\xf9\x0f\xb9\x62\x2f\xcd\x97\x6e\xa1\xaa\x1b\xfd\x72\x5e\x7e\xf9\xe5\x57\xff\x6e\xbe\xfa\x8a\xfd\x0d\xbf\x13\x7c\xfd\x1f\x61\x53\xbf\xda\xd3\xd4\x3f\xf0\x7b\x3e\xa4\xad\xec\x1b\xb8\x6b\x4c\x01\xbd\x6d\x94\xf9\xcb\x77\x5a\x4f\xe1\xf5\x1f\xb6\x0e\x8b\x35\xdf\xc0\x56\x04\xdf\xfa\xcf\xa0\xd9\xcc\xb6\xfb\xf7\x7b\xda\x8d\xa8\x7a\xd7\x72\x2c\xfe\x9d\xd6\x2f\xa7\x53\x73\x6e\xd1\xb8\x62\xab\x5f\xbe\xaa\x0e\x34\x74\xa0\xd9\x7e\xf3\xf1\x19\x36\xff\xed\xe9\xf5\xc9\xd5\xd9\xe5\xcd\x87\xab\x57\x6f\x6c\x0f\xfc\x0c\x04\xbf\x67\x56\xdc\xda\x35\xfc\x5f\xf7\x34\xfc\x3b\x6d\xdb\x0c\x8d\x7e\xf3\x0d\xc3\xd9\x4c\x97\xd3\x77\x5a\xff\x6d\x3a\x9d\xfe\x83\x3e\xe6\x6a\x37\x31\x17\x93\xf9\x4e\x8a\x47\xf9\x7b\x9e\xe5\x1b\x9e\x98\x3e\x05\x6d\x70\x9d\x68\x2d\xd1\x16\x27\x57\xb5\xc2\x6e\xd5\xd6\x17\x07\x95\xc1\xc4\xc2\xb7\xfe\x9f\x6f\x98\x92\x89\x9f\xbe\xa0\x0e\x98\xa7\x1b\xa0\x96\x88\xee\xdc\x76\x71\x2a\x9d\xcb\x1d\x4b\xeb\x1b\x17\xf3\xce\x76\x56\xa1\xc0\x1c\xf7\x73\xf5\xa2\xe5\x44\x3f\x36\xa6\xdd\x14\x3e\x30\x17\xd4\x0b\xab\xdf\x6e\xaf\x05\xa7\xac\x85\x23\x0b\x81\x68\xdc\xad\x8a\x72\xd4\xda\xec\x43\x77\xe1\x05\x64\x55\x60\x76\xbe\x38\x7e\x41\x89\x42\xbe\x8a\x2a\x91\xfc\xfc\x8b\x95\xd6\xd3\x25\xcf\xa0\x75\xbf\x1c\xef\xa6\x7f\x9d\x7f\x81\xfd\x41\xe3\x03\x0d\x23\x28\x7c\xfe\x05\x7c\x0a\xcb\x61\xae\xfe\x70\xfd\xe1\x62\xae\xbe\xf9\xe6\x9b\x6f\x70\xb4\xcc\xbf\x5b\x62\x2f\xe6\xba\x82\xe3\x16\xed\x94\x32\xb7\x92\x92\x62\x5d\x26\x3c\x9b\xab\xf6\x70\x4d\x2c\xfc\xa1\x39\xf1\xc1\x1b\x5a\x67\x13\xab\x6e\x01\x22\x65\xf6\x8c\x43\xdf\xe4\xc7\xff\xd7\x34\xf9\x23\x99\x88\xee\x90\x0f\x87\x60\x6a\x17\xf3\x1b\xbb\x54\xcd\x60\x9b\xf5\xeb\xed\xac\x95\x4c\x04\x6d\x5c\xbb\xb8\x2f\x45\x96\x6b\xe5\xd7\x0c\x3d\x08\x80\xdb\x0c\x02\x00\xec\x1b\xf6\xfa\x3f\x6b\x9f\x9a\x79\xb0\x1f\x7e\x55\x39\x09\x18\xf3\x45\xcd\xbf\x80\x56\xcf\xbf\x78\xc3\xe6\x5f\xb4\xad\x9b\x6a\xc3\xa6\xd8\x94\xf9\x17\x13\x5f\x00\x34\xe3\x82\x6f\xb1\x90\xf2\xcb\x2f\x7f\x1f\x61\x13\x30\x75\x2d\xf8\xa6\x69\x52\xf7\x17\x83\x26\x9e\xd5\x42\x67\x76\x20\x6c\x0a\xe4\x83\x48\x92\xa3\x3b\xa5\x1f\x50\xe9\x1b\xe2\x44\x94\xa5\xcc\x70\x79\x54\x27\x97\xb4\xc9\x6a\x33\x6e\x93\x36\x5d\x35\x4e\xde\x0e\x26\x74\xae\x3e\xc2\xd2\xb1\x33\x4a\x74\x44\x40\x07\xea\x6a\x82\x47\x0d\xad\x04\x9b\x63\x41\x0b\x61\xae\xa0\x18\x37\xe7\xec\x25\x00\xbf\xa8\x2b\x0d\xcb\xda\x3e\x9e\xfe\xf2\xe7\xbf\xbc\x7a\x73\xc8\x3c\x55\x8b\xab\x4c\x15\xf4\x07\xcb\x78\x3d\xfd\xea\xf5\x57\xf9\xfc\x0b\x1a\xf5\xf6\x27\xf6\xb9\xcc\x8b\x1f\x6b\x16\xd8\x23\xe4\xc6\x8d\xe1\xf0\x5c\xc1\x0b\xdb\x54\x6c\xe6\xd0\xa0\xc5\x55\x35\xac\xa0\x57\xd6\xad\x03\x8f\x33\x2b\xc4\x6e\xda\x3d\xca\xbc\x73\xe3\x85\x8f\x2d\xf6\x90\xf1\x34\x15\x99\xf5\x95\x37\xc2\x19\xa0\x6a\x0e\xb5\xd8\xa3\xbf\xed\x30\x33\xcb\xa6\x56\x34\x7c\x0d\x86\x6e\xda\x3e\x73\x17\x65\x92\x74\xce\xdc\x7e\xb1\xe4\x8b\xdb\xf3\xf3\xc5\x8f\xb3\xf3\xdb\x53\xdb\xfd\x56\xf1\xe1\xe0\x6b\x9d\x63\xe2\x5a\x42\x63\x82\xb8\xaa\x02\xb0\x54\xe5\x56\x64\x96\x29\xcc\xf7\x1a\x71\x24\x65\x92\x54\x85\xa9\xe7\xea\x23\x95\x03\xc7\x40\xa9\xa4\x35\x53\x7a\x07\xae\x5a\x3f\x7c\xed\xa3\x29\xfc\x23\xfe\xf6\x88\xf9\x4e\xbc\x61\x17\xae\xd6\x8e\x71\x25\xc2\x89\x03\xb6\x03\xe6\xdb\x76\x6d\x87\xa7\x96\xde\x7f\xdc\xf6\xb8\x55\x20\xfa\x65\x4e\x5e\x54\xcc\x7f\x92\xdd\x81\x63\xf7\xb1\x0a\x05\x77\xee\xd2\x18\xa3\x86\x50\xee\x04\x05\xd3\xf3\x82\x38\x8b\x71\xcc\xe6\x0a\x0f\x62\xd3\xa6\x42\x77\xb7\x89\x9d\x51\x04\x29\xe1\x6a\x5d\xf2\xb5\xc8\x27\xcc\x56\x3e\x57\xf6\x75\x6a\xdf\x3a\x0e\x98\x03\x8c\xac\xb5\x25\x54\x4b\x01\x96\x6a\xae\xa8\x4f\x70\xc3\x52\xf1\x98\x8e\xfa\x87\x6b\xd7\x1d\xca\xfb\xc6\x82\x48\xf3\x5d\xcd\x15\x4e\x2e\xfa\xc6\x2c\xd8\x10\xcc\x8e\xe6\xdd\xc4\x01\x1e\x8c\xef\xba\x98\x15\x7a\x0d\xb0\xc7\xb9\x72\x2c\x58\x08\xce\xb0\xef\x35\xaf\x0d\x8a\x4d\xda\x7f\x9e\xd8\xc9\xb0\x7b\x82\xda\xd6\xbe\xea\x0f\xbe\x03\xcc\x86\x5b\xb4\xbe\xe5\xfb\x97\xad\x3f\xc6\x06\x02\x72\x78\x70\x70\x74\x51\x23\x02\xf5\x59\x7b\x6b\x6c\xbf\xf0\x3b\x9d\xd9\xa3\xba\x5c\x26\x23\x9a\x84\xdf\xef\x6d\x14\x1e\xc9\xfd\x8d\x1a\xe0\x91\xbe\xaa\x6d\x2d\xb3\x4c\xfb\xaa\x5d\x6a\xdd\x31\x2f\x4f\x88\xd9\xad\x34\x8a\x7e\xb0\x6f\x30\xca\xa8\x78\xcc\x7a\x19\xc0\x07\x54\x1f\x22\x7b\xfa\xf4\x35\x28\x91\xf9\xa3\x9a\xe3\xed\xa7\xc1\x2d\x72\x16\x02\x5d\x76\xa3\x4e\x58\xba\xe7\x2a\x07\x6c\xc7\x31\x69\x9f\x29\x98\xde\x22\x24\x1e\x2f\x66\xf3\x4c\x60\x13\x99\xf5\x3f\x71\x8b\x68\xe2\x67\x6e\x02\x8d\x8c\xca\x2c\x37\xc7\x25\x9d\x77\x74\x6a\xeb\x8c\xf1\xb9\xb2\x6c\x30\xf6\x38\x9e\x59\x7f\x70\xe6\xfe\x8a\x1c\x4b\x29\x4a\xd6\x41\x50\xa8\x00\x2f\x39\x9d\x86\x73\x75\xcf\x33\xc9\x15\x60\x9a\x97\x39\xe8\x0d\xc3\x93\x6e\xc7\xe8\x03\x47\xc0\x91\x87\x4e\xe6\x3d\x67\x5e\xcd\x0c\xa8\xdc\xf3\xbf\x33\xff\xf7\x8f\xdf\xfd\xff\x01\x00\x00\xff\xff\x8b\xc2\xd9\xfd\x45\xd9\x04\x00") +var _adminSwaggerJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\x7b\x73\xeb\xb8\x95\x2f\x0c\xff\x3f\x9f\x02\x67\xcf\xa9\xea\xee\x44\xb6\x3b\xc9\x4c\xde\x94\xa7\x4e\xbd\x8f\xda\xd6\xde\xad\xd3\xbe\xc5\x97\xee\xe9\x67\x94\x52\x43\x24\x24\x21\x26\x01\x06\x00\xed\xad\x4e\xe5\xbb\x3f\x85\x85\x0b\x41\x8a\x94\xa8\x8b\x6d\x79\x37\x67\xaa\xd2\xde\x22\x89\xeb\xc2\xc2\xba\xfe\xd6\x3f\xff\x0d\xa1\x0f\xf2\x19\xcf\x66\x44\x7c\x38\x45\x1f\xfe\x78\xfc\xed\x87\x9e\xfe\x8d\xb2\x29\xff\x70\x8a\xf4\x73\x84\x3e\x28\xaa\x12\xa2\x9f\x4f\x93\x85\x22\x34\x4e\x4e\x24\x11\x4f\x34\x22\x27\x38\x4e\x29\x3b\xce\x04\x57\x1c\x3e\x44\xe8\xc3\x13\x11\x92\x72\xa6\x5f\xb7\x7f\x22\xc6\x15\x92\x44\x7d\xf8\x37\x84\xfe\x05\xcd\xcb\x68\x4e\x52\x22\x3f\x9c\xa2\xff\x31\x1f\xcd\x95\xca\x5c\x03\xfa\x6f\xa9\xdf\xfd\x1b\xbc\x1b\x71\x26\xf3\xd2\xcb\x38\xcb\x12\x1a\x61\x45\x39\x3b\xf9\xbb\xe4\xac\x78\x37\x13\x3c\xce\xa3\x96\xef\x62\x35\x97\xc5\x1c\x4f\x70\x46\x4f\x9e\xfe\x70\x82\x23\x45\x9f\xc8\x38\xc1\x39\x8b\xe6\xe3\x2c\xc1\x4c\x9e\xfc\x93\xc6\x7a\x8e\x7f\x27\x91\xfa\x17\xfc\x23\xe6\x29\xa6\xcc\xfc\xcd\x70\x4a\xfe\xe5\xdb\x41\xe8\xc3\x8c\xa8\xe0\x9f\x7a\xb6\x79\x9a\x62\xb1\xd0\x2b\xf2\x91\xa8\x68\x8e\xd4\x9c\x20\xd3\x0f\x72\x4b\xc4\xa7\x08\xa3\x53\x41\xa6\xa7\xbf\x08\x32\x1d\xbb\x85\x3e\x36\x0b\x7c\x01\xa3\xb9\x49\x30\xfb\xe5\xd8\x2e\x13\xb4\xcc\x33\x22\x60\x6e\xc3\x58\xb7\xfe\x89\xa8\x3e\x34\x5b\xbc\x1f\xbe\x2d\x88\xcc\x38\x93\x44\x96\x86\x87\xd0\x87\x3f\x7e\xfb\x6d\xe5\x27\x84\x3e\xc4\x44\x46\x82\x66\xca\xee\x65\x1f\xc9\x3c\x8a\x88\x94\xd3\x3c\x41\xae\xa5\x70\x30\x66\xaa\x7a\x63\xf1\x52\x63\x08\x7d\xf8\xdf\x82\x4c\x75\x3b\xff\x7e\x12\x93\x29\x65\x54\xb7\x2b\x0d\xfd\x04\xa3\x2d\x7d\xf5\xaf\x7f\xab\xfb\xfb\x5f\xc1\x8c\x32\x2c\x70\x4a\x14\x11\xc5\x8e\x9b\xff\xab\xcc\x45\xef\x91\xee\xbc\xd8\xc7\xea\xc0\x2b\xb3\xbd\xc2\x29\xd1\x7b\xa2\x77\xca\x7e\x01\x7f\x0b\x22\x79\x2e\x22\x82\x26\x24\xe1\x6c\x26\x91\xe2\x4b\x6b\x40\xa1\x05\x4d\x5e\xd5\x27\x82\xfc\x23\xa7\x82\xe8\xbd\x52\x22\x27\x95\xa7\x6a\x91\xc1\x20\xa5\x12\x94\xcd\xc2\xa5\xf8\x57\xaf\xd5\xd4\x0c\x55\x6e\x30\x33\xf3\x41\xe3\xc4\x46\xac\xef\x5e\x89\x30\x43\x13\x82\xf4\x59\xa4\x31\x11\x24\x46\x58\x22\x8c\x64\x3e\x91\x44\xa1\x67\xaa\xe6\x94\xe9\x7f\x67\x24\xa2\x53\x1a\xb9\x35\x3b\x9c\xb5\x81\x3f\x57\xaf\xcc\x83\x24\x42\x0f\xfc\x89\xc6\x24\x46\x4f\x38\xc9\x09\x9a\x72\x51\x5a\x9e\xe3\x11\xbb\x9f\xeb\x75\x48\x27\x94\xc1\xc9\xd3\x6b\xe9\x28\xe4\xf7\x6e\xb9\x7e\x8f\x74\x7f\x28\x67\xf4\x1f\x39\x49\x16\x88\xc6\x84\x29\x3a\xa5\x44\x56\x5b\xfb\x3d\x87\xfe\x71\x82\x8e\x90\x5e\x67\x22\x14\xac\x37\x67\x8a\x7c\x56\x12\x1d\xa1\x84\x3e\x12\xf4\xd5\x05\x95\x0a\xf5\x6f\x86\x5f\xf5\xd0\x57\xe6\xbc\x20\xe0\x4d\x5f\xbd\xc2\x0a\xfb\xbf\xff\x16\x1c\x3d\x85\x67\xd5\x43\xf7\xa1\xaf\x4f\xf3\x9d\xb9\x1a\x8a\x16\xfe\xf6\x6f\x61\x3b\x76\xbf\x56\xf3\xdb\x82\xd9\x5a\x4e\xdb\x96\xbf\xc2\x32\x95\x59\xab\xd4\x3b\xb4\x2b\x67\xd5\xed\x56\x59\xab\x7c\x5f\xbc\x55\x4f\xe1\xa5\xf9\xeb\x2e\xcc\x15\x2b\xa0\x7a\x4c\x99\x39\x24\xfe\xcc\x08\xa9\xcf\x89\xa3\xde\x03\x61\x29\xbb\xf0\xda\x60\x66\x01\xbb\x75\x5c\x34\x58\x95\x03\x9c\x77\x42\x53\xba\x6e\x7f\x87\x2c\xd6\x22\x97\x65\x76\x2c\x4f\x27\x44\xe8\x65\x70\x6c\x0f\x66\x3b\xd1\x6c\x50\xe5\x82\x91\xb8\xc5\x34\xff\x91\x13\xb1\x58\x31\xcf\x29\x4e\x64\xd3\x44\x29\x53\x44\xcb\xb7\x95\xc7\x53\x2e\x52\xac\xec\x0b\x7f\xfe\x8f\x4d\x17\x42\xf1\x47\xb2\x6e\xff\x87\x66\x37\x23\x2c\x81\x0c\xd2\x3c\x51\x34\x4b\x08\xca\xf0\x8c\x48\xbb\x22\x79\xa2\x64\x0f\x5e\xd3\x32\x35\x11\x47\xfe\x06\x82\x1e\xdc\xcd\x9b\x4b\xf8\x05\x4d\xbd\x00\xc9\xc8\x67\x05\x2d\x8d\x18\xdc\xbd\xb0\x44\xe1\x8d\xf2\x02\x4b\xb9\x1d\xcd\x48\x2e\xd4\x78\xb2\x38\x7e\x24\x4b\xfd\x36\x52\x0e\x66\x08\x2b\x25\xe8\x24\x57\x44\xcf\x5b\xb7\xe1\xee\x4e\x60\x8f\xe6\x82\x6e\xc3\x1a\xde\x6e\xc2\x31\x15\x24\x82\xb9\x6d\x72\x60\xfc\x57\x7a\xde\x5a\x7f\x59\x98\xd9\x3f\x92\x05\xc8\x23\x35\x2b\xe0\xb7\x7c\xc4\x46\x0c\x1d\xa1\xf3\xc1\xdd\xd9\xe0\xea\x7c\x78\xf5\xe9\x14\x7d\xb7\x40\x31\x99\xe2\x3c\x51\x3d\x34\xa5\x24\x89\x25\xc2\x82\x40\x93\x24\xd6\x32\x87\x1e\x0c\x61\x31\x65\x33\xc4\x45\x4c\xc4\xcb\x2d\x63\xe5\x29\x61\x79\x5a\xb9\x57\xe0\xf7\x62\xf4\x95\x2f\xb4\x88\xe1\x1f\x95\x9e\xfc\x6d\x69\x81\x61\xc6\xba\xef\xa0\xb5\x57\x13\x6a\xa2\x39\x4d\x62\x41\xd8\x89\xc2\xf2\x71\x4c\x3e\x93\x28\x37\x77\xf2\x3f\xcb\x3f\x8c\xb5\x64\xca\x63\x52\xfe\xa5\xf4\x8f\x42\x14\xda\xf8\x53\xaf\xa5\x6e\xfc\x25\xe8\xb4\xed\xbe\x83\x5f\x68\x5c\xfb\x36\xfc\xb2\x66\x0e\xee\x9d\x15\x83\x75\xaf\x34\x8e\xca\xbd\x60\x25\xbe\xda\x77\x04\x51\x62\x31\xc6\x4a\x91\x34\x53\x1b\xea\xeb\x18\x25\x5a\xae\x5c\x25\x47\x5e\xf1\x98\x0c\x5c\x7f\xbf\x20\x23\xce\x92\x18\x4d\x16\x96\x6b\x4d\x89\x20\x2c\x22\xcd\x2d\xdc\x63\xf9\x58\xb4\xb0\x4e\x18\x2d\xf5\x27\x3f\x72\xa1\x3f\x7f\x0f\x02\x69\x69\xe0\xaf\x21\x93\x6e\x7b\xe2\xbe\x38\x0b\xc1\x96\xfc\xa3\xb3\x27\xec\xbe\x92\x6d\xad\x0f\x5c\x20\xb9\x90\x8a\xa4\x6b\xed\x10\xef\x67\x21\xec\x05\x71\xa8\x03\xae\xdc\x51\xbf\x81\x53\x5f\xbe\x71\xbb\xe3\xbd\xc1\x92\xed\xcb\x8a\x78\xe8\xf3\x74\x3e\x9c\xd5\x53\xbd\x73\xdb\x17\x38\x31\xde\xc5\x34\x4b\xb2\xe0\xbe\x07\xf9\x42\xe6\x86\xc6\xbd\x72\xab\x3d\x86\x01\xac\x51\x34\xcb\x76\x68\x7f\xfe\xf4\xa7\xa1\x85\xc6\x98\xe3\xd4\x9c\xca\xc0\x58\x85\x22\x2e\x8c\x2c\x18\xdb\xf3\x6e\x74\xcd\xfe\x7d\xff\x6e\x70\x7f\x8a\xfa\x28\xc6\x0a\xeb\x03\x2e\x48\x26\x88\x24\x4c\x81\x1e\xaf\xbf\x57\x0b\x94\xf2\x98\x24\x46\xe3\xfc\xa8\x25\x5f\x74\x8e\x15\x3e\xc3\x0a\x27\x7c\x76\x8c\xfa\xf0\x4f\xfd\x31\x95\x08\x27\x92\x23\xec\xc8\x8a\xc4\xae\x09\xcc\x62\xc7\x5a\x30\x8a\x78\x9a\xd1\xc4\xdb\xe0\xbd\x71\x85\xb2\x98\x3e\xd1\x38\xc7\x09\xe2\x13\xcd\x55\xb4\x86\x3c\x78\x22\x4c\xe5\x38\x49\x16\x08\x27\x09\xb2\xdd\xba\x17\x90\x9c\xf3\x3c\x89\x75\xbb\x6e\x94\x92\xa6\x34\xc1\x42\xab\xe0\x66\xb4\xd7\xb6\x2d\x74\x3f\x27\x7e\xac\x30\x2e\xbd\x9a\x29\x7e\x24\x12\x51\x85\x32\x2e\x25\x9d\x24\xc5\x99\x7f\x18\x22\x18\xf7\xd9\xc5\x10\xf4\xf9\x48\x21\x6e\x78\xa8\xeb\xdc\xda\x6f\x5c\x8f\x29\x66\x8c\x40\xc7\x5c\xcd\x89\xb0\xdd\xdb\x97\xdf\x5a\x35\x7f\xb8\xba\xbb\x19\x9c\x0d\x3f\x0e\x07\xe7\xcb\xba\xf9\x7d\xff\xee\x87\xe5\x5f\x7f\xba\xbe\xfd\xe1\xe3\xc5\xf5\x4f\xcb\x4f\x2e\xfa\x0f\x57\x67\xdf\x8f\x6f\x2e\xfa\x57\xcb\x0f\x2d\x59\xb5\x56\xf3\xc3\x91\x6d\x78\xb6\x3a\x9b\xe6\x4b\xd9\x34\x7b\x5f\xae\x51\x73\x4a\x13\xd0\x41\x5b\x1b\x34\xbd\x0d\xc1\x7e\x89\x32\x2c\xa5\x91\x8c\xcc\x08\x8e\x47\xec\x92\x0b\xcd\xc0\xa6\x5c\xf3\x08\x2d\x3d\x29\x91\x47\x8a\xb2\x99\xff\xe8\x14\x8d\xf2\x6f\xbf\xfd\x53\x74\x41\xd9\x23\xfc\x45\x0e\x71\x71\x3a\x8b\x6f\x67\xf1\xfd\x6d\x59\x7c\xb5\xe8\x73\x12\x1a\x7a\xf7\x1b\x32\xa4\x85\x0b\x96\xe5\x0a\x44\x09\x9e\x2b\xfd\xa7\xee\x12\xc8\x63\x45\xe0\x50\x3b\x83\xe2\x27\xa2\xfc\x8b\x5a\xb4\x79\x0f\x76\xc4\x9f\xb8\x78\x9c\x26\xfc\xd9\x0f\xfc\x13\x51\x7a\xec\xb7\xb6\x97\x2e\x94\xa8\x0b\x25\x7a\xdb\x50\xa2\x83\x32\xe6\xbd\x3c\xf3\x2b\x5b\xfe\x0c\x07\x6c\xf0\x64\x35\x3a\xaa\x1a\xfc\x50\x81\x9b\xe9\x55\xb8\x66\xd9\x99\xb3\x86\x73\x96\x5e\x7e\x2f\xdc\xb3\x34\xe8\xd7\xe7\x9c\xbf\x09\x7f\x4b\xe7\x4e\xd9\x72\xa1\xde\x25\x83\x6d\x79\x77\xbc\x9a\x33\xe4\xe5\x19\xfe\x52\x6c\xc3\x26\xc1\x0c\x1b\x44\x2f\xb4\x0e\x57\x58\x13\x9f\x50\x1b\x90\x50\x17\x81\xb0\x1c\x72\x50\x1b\x63\xb0\x5b\x50\xc1\xb6\x77\x53\xfb\x30\x81\x4f\x44\x95\x5e\x7e\x2f\x77\x53\x69\xd0\xaf\x7f\x37\xfd\x46\xa3\x03\xba\x70\x80\x17\x5c\xba\x2f\xfd\x46\x3b\x5c\x87\xff\x6f\xc0\xc3\xdf\xb9\xf4\x37\x5a\xa3\x2f\xcb\x87\xff\xa5\x3a\xed\xdf\xa7\x97\xbe\x73\xcb\x77\x6e\xf9\xb7\xf0\x9f\xbc\x3f\xb7\xfc\xcb\xaa\xa7\xc5\xf1\x1a\x3b\x5a\xb0\xfa\x5a\x70\x28\xff\xd5\xc2\x49\x03\x7f\x39\x95\x6f\xd3\xa0\xf1\x46\x1d\xee\xbc\x18\xdf\x00\x8e\xd0\x2f\x96\x90\xd6\xa8\x73\x4b\xdf\xbd\x07\x75\x6e\x79\xd0\x2f\xaf\xc3\xbd\x19\xf3\x7d\xa1\xcb\xf3\x9d\xb0\x81\xcd\x6f\xcb\x2f\x58\x26\xef\x64\xf1\x97\xcf\xc6\x3f\x98\x09\xbd\x1f\xd9\xfb\x0d\x2e\xde\x96\xb7\xee\xde\x73\xb2\x6a\xae\xd9\xe0\x76\x5a\x97\x61\x55\xfd\x9a\x12\xf9\xc7\x77\x79\xdf\xbe\x46\x92\x55\x77\xe1\x76\x17\xae\x6d\xaa\xbb\x70\xbf\xe0\x0b\xf7\xe0\xe0\x6f\x0e\x26\x02\xb4\x0b\x22\xef\x80\x31\xba\x18\xf2\x3d\x2e\x4e\x17\x43\xde\xc5\x90\xff\xc6\x62\xc8\x77\xd1\x9e\xb6\xc5\xa2\x7c\x0b\x3d\xaa\x53\xa3\x3a\x35\x2a\xfc\xbd\x53\xa3\x3a\x35\xaa\x53\xa3\xbe\x70\x14\xd1\x4e\x87\x6a\xbf\x10\x9d\x0e\xd5\x7a\xa9\x3a\x1d\x6a\xc5\xe2\x74\x3a\x54\xa7\x43\xfd\xb6\x74\x28\xf2\x44\x98\x92\x90\x8c\x16\x6a\x14\x1f\x32\x2e\x9b\x35\xa1\x90\x3b\xd4\x68\x41\xd0\x66\x39\x29\x0c\x02\x97\x7e\x41\x73\x2c\x11\x8f\xa2\x5c\x54\xce\x40\x55\x0f\x3a\x13\x04\x2b\x02\x2d\xe8\x0f\xdf\x83\xfe\xb3\x3c\xdd\xd7\x8a\xc1\x9f\xf0\x78\x89\xda\xcd\x41\xa8\x7b\xb2\x5a\x1e\xd9\xdb\xd4\xff\x91\x93\x76\xea\xdf\x0b\x12\xb5\xc2\xf2\x71\xcf\x44\x5d\xca\xb5\xd8\x8a\xa8\xa1\x85\xf7\x42\xd4\xcb\xd3\xfd\xcd\x10\x75\xdd\xd4\x0f\x81\xa8\x9f\x6d\x1e\xff\x9e\x09\x7b\x09\x1e\x60\x2b\xe2\xf6\xad\xbc\x17\x02\xaf\x9f\xf6\x6f\x86\xc8\x9b\xa6\xff\xb6\x84\xee\x53\x24\x5b\x93\xf8\xbd\xa0\xb3\x99\x56\x33\x40\xc3\xd3\xa4\xb8\xbe\x46\x50\x91\x14\xb8\x96\xac\xfd\xab\xef\x81\xa4\xfd\x60\xcd\xd8\x7f\x33\xb4\xbc\x34\xef\x03\x21\xe2\x13\x41\x22\xfe\x04\xf5\xc2\xda\x11\xf3\x2d\x01\x0a\x06\x7e\x9d\x09\xf2\x44\x79\x2e\x93\xc5\x91\xc8\x19\x72\xcc\x1f\xf9\xe6\x8d\xb5\xfa\x99\x26\x09\xe2\x4c\xeb\x5f\x0a\x0b\xe5\x1e\x6b\xfd\x5b\xf0\x14\x4e\x45\x82\xa5\x42\x8f\x8c\x3f\x33\x34\xc5\x34\xc9\x05\x41\x19\xa7\x4c\x1d\x8f\xd8\x90\xa1\x5b\x33\x46\xc8\x1b\xe8\xa1\x5c\xea\xb3\x14\x61\xc6\xb8\x42\xd1\x1c\xb3\x19\x41\x98\x2d\x6c\x02\x6e\x41\x19\x88\x0b\x94\x67\x31\xd6\x8a\xef\x9c\x54\xa3\xf4\xfc\x18\xc1\x7c\x47\x25\xa2\x12\x91\xcf\x4a\x90\x94\x24\x0b\xdd\x87\xa6\x7d\xc5\x91\x5d\x1f\x33\x54\x9b\xce\x47\x84\xe0\x42\x42\xc6\xc1\x64\xf1\x2b\x66\x8a\x32\x82\x40\x51\x92\xc6\x34\x77\x84\x2e\xb8\x04\xb3\xcd\x0f\x7f\x91\x28\x4a\x72\xa9\x88\xe8\xa1\x49\x3e\x93\x5a\x53\xcc\x12\xac\xa6\x5c\xa4\x7a\x84\x94\x49\x85\x27\x34\xa1\x6a\xd1\x43\x29\x8e\xe6\xa6\x2d\x58\x03\xd9\x1b\xb1\x98\x3f\x33\xa9\x04\xc1\xbe\x77\xf7\x10\x7d\x1d\x3e\x33\x04\x20\xbf\xe9\x41\xda\x21\x4d\xb5\xba\x1b\x0c\xbf\xd8\x71\xb3\x27\xba\x11\x12\xa3\x09\x89\x70\x2e\xad\x87\x41\x89\x05\x22\x9f\xe7\x38\x97\xb0\x77\x7a\x7a\x36\x67\x23\xe2\x69\x96\x10\x45\x10\x9d\x22\x25\x28\x89\x11\x9e\x61\xaa\x97\xee\x8e\xac\x00\x41\xf7\x44\x6f\x37\xd0\x52\xfd\x2f\xa0\x7e\xa7\x5c\x10\x14\x13\x85\x69\xb2\xd2\xeb\x64\xbf\xed\xb8\xdc\x7b\xe2\x72\xe5\x0d\x3f\x08\x36\x67\x40\xfc\xf7\x70\x69\x33\x6b\xba\x8f\x70\xb2\xe3\xfd\x7d\x6b\x07\xd5\xd1\xf6\xfb\xa2\x6d\xb3\x6b\x87\x43\xdc\xaf\x16\x83\xdd\xbe\xa2\x45\x51\xcd\xe2\x5d\xd1\xf4\x6b\x84\x05\x74\x0e\xe7\xce\xe1\xdc\xb8\x32\xef\xd3\xe1\x7c\x30\x1e\xa3\xce\xe7\xfc\x42\x3e\x67\x2a\x3b\xa7\x73\xe7\x74\x6e\xbb\x40\x9d\xd3\xb9\x73\x3a\xbf\x5f\xa7\xf3\x4b\xe2\x3e\xef\x15\xdd\xf9\x5d\x89\xd6\x9d\x58\xdd\x89\xd5\x1d\x84\xb3\x9f\xda\xbe\x58\x98\xfb\xfa\x43\x4c\x12\xa2\x48\xb3\x3d\x8b\x88\x54\x6b\x0b\xe6\x7a\xa6\x4c\xcb\x71\x33\x41\xa4\xdc\x95\x21\xf9\x86\xdf\x27\x5b\xf2\xc3\xef\xa0\xe6\x3b\x3e\xd5\xf1\xa9\x6d\xa6\x76\x38\xa6\xd9\xe0\x30\xbf\x96\x6d\xd6\xf3\xdf\x2c\x6f\x96\xfe\x1e\x8c\x1b\xb2\xf0\x8b\x1a\x0a\xd7\x52\xbb\xe2\xfe\x70\x5b\x3a\xdf\x91\x1f\x9b\xbe\xde\x27\x33\x36\x63\xef\x38\x71\xc7\x89\x3b\x4e\xfc\xbe\x39\xb1\x3b\xc9\x6f\xea\x22\x33\x7e\xba\x71\x96\x60\x36\xa6\xb1\x3c\xf9\x67\xa1\xcb\xbf\x94\x87\x4c\x1f\xa8\xd8\xa4\x98\xfa\x94\x4e\xf1\x8b\xfe\x24\x29\x0c\xe6\x1e\x33\x73\x8d\x13\xcd\xd8\xd8\x6f\x12\xcc\x86\xf1\xbb\xf0\xa3\xd5\xce\xfe\x35\x7c\x6a\xbb\xf0\x71\xac\xc0\xd3\x81\x29\x33\x26\xbc\x22\xaf\xb6\x64\xa0\x3c\x8c\x13\xbe\x0b\x57\x0f\x26\x16\x30\x76\xc7\xaf\x83\x45\x39\xbc\x69\x77\x7e\x9d\x2e\x97\xb0\xf3\x5c\xb4\x9c\x70\xe7\xb9\x38\x5c\xcf\xc5\x5b\xb9\x23\x5f\xf9\x78\xbe\x96\x58\xd7\x3e\x08\xdf\x44\xab\x41\x50\x6b\x9e\x25\x1c\xc7\xab\x5c\x31\x85\xe0\x15\x82\xa3\xac\x8d\xc4\x2f\x3e\x7b\x0f\xc2\x5a\x31\xda\xdf\x58\x24\xdf\xf2\xc4\x0f\x45\x4b\x79\xc5\x50\xbe\x7a\x12\xdf\x40\x25\x79\x1f\xf8\xa9\xc5\x78\xbb\xd0\xbe\xce\xa2\xf4\xf6\x16\xa5\x2e\xb4\xaf\x53\x01\x0f\x4c\x05\xec\x42\xfb\xba\xd0\xbe\x4e\x41\x5e\x3d\xed\x4e\x41\xfe\x22\x42\xfb\x5a\x89\xda\x2f\x88\xbd\xb9\xbb\xd0\xdd\xc9\xdc\xee\xbd\x4e\xe6\xee\x64\xee\x2f\x54\xe6\x3e\x8c\x15\xee\x04\xee\x4e\xe0\xee\x04\xee\x4e\xe0\xee\x04\xee\xbd\x2f\x63\x27\x70\xbf\x66\x81\xce\x7a\xa9\x7b\x4d\x92\xcd\x7b\xf5\xe5\x74\xe2\x76\x27\x6e\x1f\xb6\xb8\x7d\x30\x13\x7a\x3f\x65\x1e\xdb\xcd\xa7\x2b\x52\xde\x15\x29\xef\x8a\x94\xbf\x78\x91\x72\xf7\x75\x8b\x8c\x0f\x7b\xb8\x14\x56\xb9\x34\x80\x8f\x82\xcc\xa8\x54\xc0\xfe\xdb\xc8\x2b\xeb\x13\x3d\xde\xab\x9c\xd2\xa5\x7a\xf8\xa7\x9d\xd4\xd2\x49\x2d\xbf\x51\xa9\xe5\x80\x62\xc1\x0e\x22\x63\x25\xc5\x2a\x9a\xe3\x49\x42\xc6\xde\xe8\x23\xdb\xea\xc1\x17\x54\x2a\x89\xa2\x5c\x2a\x9e\x36\x5f\x2e\x97\xae\x87\xbe\xef\xe0\x8c\xb3\x29\x9d\xe5\xe6\x6e\x31\xe0\x9c\xc1\x89\x2e\x24\xc1\x45\x46\xd6\x79\xaa\x6a\x5a\x7f\x17\xd7\x52\xfd\xd0\x5f\xeb\x76\xda\x44\x70\x2f\x8c\x7c\x56\xea\xd6\xb2\xd6\xf8\x76\x70\x77\xfd\x70\x7b\x36\x38\x45\xfd\x2c\x4b\xa8\xb1\xbb\x1b\x52\xa0\xbf\xea\x49\x21\x85\xe5\x63\xb1\x97\xc2\x90\xb9\xc1\xb0\x05\x43\xbf\x96\x8d\xd1\x11\x3a\xbb\x78\xb8\xbb\x1f\xdc\x36\x34\x68\x09\x05\xf2\x56\x49\x9a\x25\x58\x91\x18\x3d\xe6\x13\x22\x18\xd1\xd2\x8e\x45\xba\x2d\xcc\xff\xa6\xd1\xc1\x7f\x0f\xce\x1e\xee\x87\xd7\x57\xe3\xbf\x3e\x0c\x1e\x06\xa7\xc8\x51\x9c\x6e\x56\x8f\x4b\x8f\x22\x5e\x30\x9c\x6a\x0d\x44\xff\x50\x64\xca\xfe\x23\x27\x39\x41\x58\x4a\x3a\x63\x29\x01\x44\xe0\x52\x8b\x6e\xc0\x17\xfd\xef\x06\x17\xe5\x96\xe7\x24\x84\xdf\x45\x09\x9e\x90\xc4\xfa\x23\xc0\xc4\xae\x09\x3d\x80\x2a\x36\x8e\x8a\xdc\xac\xea\x5f\x1f\xfa\x17\xc3\xfb\x9f\xc7\xd7\x1f\xc7\x77\x83\xdb\x1f\x87\x67\x83\xb1\x95\x2a\xcf\xfa\xba\xdf\x52\x4f\x56\xf8\x44\xff\xc8\x71\xa2\xb5\x13\x3e\x75\x78\xbc\xe8\x79\x4e\x18\xca\x19\x50\x9c\x51\x79\xb4\x1e\xe4\x3b\xd5\xa7\xcc\xcc\xe8\xe6\xe2\xe1\xd3\xf0\x6a\x7c\xfd\xe3\xe0\xf6\x76\x78\x3e\x38\x45\x77\x24\x01\xa5\xc0\x2d\x3a\xec\x62\x96\xe4\x33\xca\x10\x4d\xb3\x84\xe8\xd5\xc0\x36\x9b\x78\x8e\x9f\x28\x17\xf6\xe8\xce\xe8\x13\x61\x66\x1d\xe1\xcc\x42\xfb\x4e\xf8\x1e\x07\x4b\x77\x7d\xf5\x71\xf8\xe9\x14\xf5\xe3\xd8\xcf\x41\x42\x1b\x25\xca\x71\xb0\xce\x47\xe5\x61\x6b\xe6\x00\xdd\x1b\x22\xe2\x4f\x44\x08\x1a\x93\x0a\x1d\xf5\xef\xee\x86\x9f\xae\x2e\x07\x57\xf7\xb0\x62\x4a\xf0\x44\xa2\x39\x7f\x06\x53\x36\xcc\x10\x2c\xdc\x4f\x98\x26\xd0\x99\xdb\x2c\xce\xd0\xf3\x9c\x82\xfb\x03\x80\x99\x7d\xcf\x46\x3f\x13\x39\x7b\x73\xeb\x6c\xe9\xe0\x2d\xab\x2d\xd5\x93\xb4\xfc\x46\xe5\x58\xac\x7a\xa1\x44\xe5\xcb\x2f\xae\xa3\xd6\xe5\x2f\x2a\xe4\xd6\xac\xac\x2d\xd1\x4b\xf3\x4c\x8b\xbd\x6e\xad\xab\x95\xd7\xf0\xf5\xae\x59\xa2\x04\x8d\xe4\xcb\x42\x3d\x89\x9c\x29\x9a\x12\x64\x3b\xb3\x87\x73\x8f\xf0\x4f\x97\xa6\xe1\xf7\x70\xc1\x2e\x95\x72\xf8\x44\x94\x1d\x7e\xa7\x02\x76\x2a\xe0\x61\xa8\x80\xef\x2d\xdb\x3f\x26\xd9\x72\x87\x95\x89\xc1\x3b\xc6\xeb\xb5\x14\xa4\x61\xec\x89\xd6\xa2\x9a\x90\x27\x92\x80\x94\xa7\x04\xd6\x4a\xa3\x95\x5d\x26\x82\xe0\x47\x2d\xf0\xc5\xfc\x39\x94\x5c\x6a\x90\xfb\xd1\x7e\x6e\xe1\x36\x41\x1c\x7f\xfa\xe3\xeb\x5d\x16\x7a\xb9\xe3\xd7\x28\xe1\x7d\x0b\x41\x32\x2b\x31\x02\x83\x04\xfb\x5f\xac\x25\x78\xcd\x6d\x11\x7c\xf1\x1e\x2e\x8a\x70\xb8\x07\xa4\x75\xdd\x86\x4a\xb0\x63\xa1\x29\x51\x38\xc6\x0a\xeb\x43\x33\x23\xea\x18\x5d\x33\x78\x76\x8f\xe5\x63\x0f\xb9\x2b\x4f\xb3\x95\xc2\xca\xf0\x0a\xa9\xf5\xef\xc4\x80\xbf\x39\x1f\xef\xae\xef\xee\xfa\xae\x5f\x99\x2e\xcc\xb3\x61\x85\xf7\x75\x31\x6e\xe4\xf3\xda\xdf\xfd\x65\x5a\x7c\xbf\x57\xd8\xeb\x3a\xb9\xf6\x7a\xa1\x99\xca\x59\xdd\x6d\x65\xfe\xaf\xbb\xad\xba\xdb\xaa\xbb\xad\x0e\x60\x85\xdf\xdc\x61\x58\xc3\xdd\xdf\xd4\x63\xb8\x4e\x3b\xdd\x1a\xf2\xae\xd0\x46\x37\x01\xbd\xfb\xa5\x2d\xb6\x5d\xf1\x0d\x7d\x1f\x3e\xc2\x60\x92\xaf\x91\xd6\xb6\xd7\xcb\xdc\xe4\x8b\x74\xfa\xe9\x0b\xde\xf8\x1d\x02\xe1\x5e\x11\x08\x0f\x63\xae\x2f\x92\x02\xf7\x36\x16\xd3\xb7\x4f\x7b\xeb\xa0\x06\xbb\xc4\xae\x2e\xb1\x0b\x7e\xef\xa0\x06\xf7\x47\xad\x2f\x2b\x5d\xf3\x98\x8c\x2b\x51\x02\xfe\x9f\xe3\xaa\xe7\xa7\xf4\x24\x74\x03\x95\x1e\x14\x99\x6e\xd0\x3a\x8d\xf7\x59\x44\xea\x8a\xc7\xa4\x75\x24\x41\xe9\xe5\x03\x97\xc1\xdd\x3c\x8d\x2c\x5e\x1a\xf8\x0b\x4b\xe2\x0d\x5b\xfe\x25\x1a\x76\x6a\x08\xb8\xb3\xf2\xac\x5d\xa8\x2f\x35\xbe\xa0\xe0\x50\xef\xc8\x53\xd1\x8e\x8d\xbb\x98\xc6\x71\x03\x33\xaf\x7f\xee\x59\x7a\xfd\xe3\x97\xc1\x0c\x6a\xcf\xd1\xc1\xac\x12\xbe\xfd\x3e\xec\x2a\xe1\x88\x5f\xc3\xb2\xb2\x72\xef\xbf\x38\xae\xbe\x8a\x92\x3b\xde\xde\x72\xb9\xbe\x54\x0e\xdf\x41\xfc\xac\xb2\x75\x74\x18\x3a\x9d\xa9\xe5\x70\x26\xdc\x99\x5a\xde\xb5\xa9\xc5\xb8\x68\xc7\x19\x16\x84\xa9\x1a\x91\xba\x7a\x9d\xc0\xeb\x21\xe6\x82\x93\x3a\xa0\x01\xa4\x25\x5a\x64\x2f\x64\x7f\x55\x7d\x59\xb6\x17\x2b\x18\x04\x99\x90\x27\xff\x2c\xfe\xf6\xc2\x7a\xa9\x02\xc4\x8a\xe8\x24\x83\xf5\x2f\xf5\x1d\x9d\xdb\x40\xa5\xdd\x73\x25\xb1\x2a\x89\x82\x10\x44\xbd\x36\x9e\xe9\xc6\xbc\xfd\xbe\x52\x24\x97\x06\xfd\xba\xb1\x4d\xcb\x1b\xdf\xee\x00\xb9\x9d\xa1\x26\xdd\x2f\xc8\x29\xd3\xd2\x28\x9f\x16\x17\x83\x44\xcf\x34\x49\x00\x51\x04\x32\x1e\x9b\x6e\x80\xdf\x5c\xc4\x43\xe3\xce\xbf\x69\xdc\x43\x1d\x77\xa8\x63\x09\x6d\xec\xa9\xfb\xca\x99\x76\xc4\x06\xe9\xac\xa0\x0d\xad\x31\xc0\x7e\x19\x9c\xe0\x13\x51\xaf\xc5\x06\xb6\x3d\xfb\x2b\xcf\xbd\x20\x53\x22\x08\x8b\xc8\x01\x7a\xdb\x37\x09\x03\xf9\xc9\x4c\xd2\xc6\x80\x78\x28\x81\x70\xaa\x8a\x5b\x3d\xad\x24\xea\x76\x99\xe4\x5d\x26\x79\x97\x49\x5e\x3d\xea\x5d\x26\x79\x97\x49\x5e\x9b\x03\x11\x93\x84\x28\xd2\x28\x55\x9c\xc3\xe3\xb7\x92\x2a\x4c\xef\x5f\x86\x60\x61\xe6\xd2\xc9\x16\xbf\x19\xcd\xc2\x6d\xf8\x41\x68\x16\xe6\xac\xad\x33\x3f\x94\x7e\xac\x09\xb1\x7e\x75\x93\xc4\x36\x4c\xa3\x64\x97\x38\x87\xd7\xdf\x25\xeb\xa8\x0e\xbd\xb3\x51\xa0\x60\xeb\x5e\x8e\x93\x2c\x1d\x81\x76\x13\xb7\x1e\xc3\xf7\x3b\xef\x43\xe1\xa0\x4d\x74\x7f\xa8\x7c\x74\xeb\xa4\x94\x43\xb1\xd8\x7c\x41\x3c\xb2\xb3\xde\xbc\x71\xae\xc4\x12\x33\x7c\xb7\xd3\xed\x8c\x55\x9d\xb1\xaa\x33\x56\x75\xc6\xaa\xce\x58\x85\x3a\x63\xd5\xc6\xc6\xaa\x2f\x48\xa6\xea\x0c\x57\x9d\x58\xb5\xbf\xe9\x1e\xaa\x96\x79\x48\xd6\xba\xd6\x28\xe9\x45\x0e\xd5\xda\xc8\x7b\x3b\xed\x5f\xd6\x84\xdc\xdf\xb8\x11\xbc\x1f\x7e\x25\x5f\x9a\x25\xed\x12\x58\xec\x76\xf4\x8b\x8d\x2b\xee\x4a\x87\xd6\xae\x55\x17\xf6\xbc\x62\x71\xba\xb0\xe7\x2e\xec\xf9\xe0\xc2\x9e\xf7\xae\xac\x64\x5c\xae\x02\x24\x32\xa5\xb3\x56\xe6\x3f\xbb\x3b\x1b\x12\x8d\x80\x14\x0c\xca\x71\x4c\xb2\x84\x2f\xc0\x92\xb2\xe2\x3a\x77\x5d\xdc\x2c\x49\xd4\x87\x7e\xa3\xbb\x91\xbf\x96\xce\x71\x28\x32\x69\x31\xef\x83\x90\x42\x4f\xfe\x59\x49\xe7\x6f\x85\x97\xc9\x10\xf9\x4c\x25\xdc\x4a\xeb\x09\x7b\xc4\xea\x9f\x04\xa5\x0b\xed\x3d\x38\xc9\x55\x90\xbb\x27\xb5\x60\x95\x11\xa1\x16\xc1\x9b\x24\xcd\xd4\xe2\xbf\x46\x8c\x2a\xef\x61\xa3\x33\xc6\x85\xe1\x6a\xfa\xe3\x39\x66\x71\x42\x84\xbe\x54\x5d\x3b\x11\x66\x8c\x2b\x10\x37\x60\x06\x31\x7a\xa2\xd8\x08\x27\xfd\x9b\x61\x6b\x3f\xf3\x3b\x3a\x5d\xaf\x5d\xac\x6e\xcd\x5d\xf7\x29\xe1\x13\xa8\x60\x99\x97\x75\x7a\xdd\x40\xe7\x19\x2d\xed\xdc\x5b\x31\x04\x85\xe5\x63\x15\x38\xa4\x9c\x85\x3e\x5e\x09\x25\xb2\xe6\xdd\x12\xc6\xfc\xea\x57\x2b\x70\x23\xe5\x67\x16\x80\x04\x1e\xc3\x90\xab\xe3\x70\x3f\x86\x1d\xba\xdf\x8a\x96\xdd\x2f\xae\x74\x37\xfc\x28\x88\x12\x8b\x31\x56\x4a\x33\x99\x7d\x62\x9c\xdc\x63\xf9\xd8\x1a\xe3\xa4\xf4\xf2\x81\xb3\x9c\x12\xc6\x49\x79\xe0\x2f\xce\x72\x5a\x52\xe7\x1a\xce\xf4\xfe\xf2\xe3\xdb\x9e\xb5\x0d\x26\xfe\x5b\xc9\x95\x6f\xc7\x7b\xd6\x99\x69\xdf\x63\xde\xfc\x2a\x66\x7a\x30\x23\xac\xf0\xf3\x2f\xf1\xe4\x96\x6f\xa7\xee\x88\xae\x5a\xa3\x2f\xae\x10\x6e\x45\xe8\x58\x33\xb7\x77\x52\x10\xb7\x2a\x37\xed\x7b\x54\x2f\x63\xe6\x0e\x76\x63\x93\x18\xa0\x61\x19\xad\xdc\x9f\x21\x17\x15\x54\x94\x9e\x9d\x43\xa2\x35\x95\x61\x42\x7c\xc4\x85\x91\xbc\x62\x7b\x66\x8d\xd9\xce\x80\xf9\x9e\xa2\x3e\x8a\x6d\x6d\x7e\x41\x32\x41\x24\x61\xca\xa8\xda\xa6\xde\x95\x2b\xef\x4f\x99\xb5\x10\x9d\x63\x85\xcf\xb0\xc2\x09\x9f\x1d\xa3\xbe\x2f\xec\x4f\x25\xc2\x89\xe4\x08\x3b\xc2\x21\xb1\x6b\x02\xb3\xd8\xb1\x07\x8c\x22\x9e\x66\x34\xf1\x48\xed\xde\x8a\x4f\x59\x4c\x9f\x68\x9c\xe3\xc4\x23\x63\x8f\xd8\xe0\x89\x30\x95\x83\x0a\x87\x93\x04\xd9\x6e\xdd\x0b\x81\x7e\xee\x46\x29\x69\x4a\x13\x2c\x90\xe2\x76\xb4\xd7\xb6\x2d\x74\x3f\x27\x7e\xac\x0e\x05\x1c\xa5\xf8\x91\x48\x44\x15\xca\xb8\x94\x74\x92\x14\xc7\xf8\x61\x88\x60\xdc\x67\x17\x43\x30\x8d\x46\x0a\x71\xc3\x07\x5d\xe7\xd6\x4f\xe0\x7a\x4c\x31\x63\x04\x3a\xe6\x6a\x4e\x84\xed\xde\xbe\xfc\xd6\x56\xce\xb7\xc6\x88\x6e\xb6\x98\x86\x23\x7b\x3b\xa5\xb3\xb5\xc6\xd9\x56\xdd\x6c\xa7\x6b\x36\x2b\x9a\x2f\xe0\xa5\x6d\xaf\x0d\x5e\x50\x59\x56\x07\xdf\x85\xcb\xb6\x34\xe2\xd7\xc0\x47\xfb\x8d\x2a\x82\x9d\x16\xf8\x22\xeb\xf6\xa5\xaa\x80\x07\xae\xff\x75\xc8\x6e\x1d\x8a\x7d\x17\x80\xb1\xc7\xc5\xe9\x02\x30\xba\x00\x8c\x2f\x36\x00\xa3\x59\x9b\xa0\xf1\xce\xe9\x7a\x1b\x56\x90\xf2\x46\x01\xf1\x0b\x88\x52\x58\x3e\xb6\xad\x29\xa5\x45\xe5\x61\xfc\x2e\xa4\xfa\xda\x09\xbf\x86\x74\xdf\xd5\x29\xda\x6b\x9d\xa2\x83\x9b\x76\x27\xf8\x75\x82\x5f\x27\xdb\xb4\x9c\x70\x27\xdb\x1c\xae\x6c\xf3\x56\x0a\xcb\x97\x04\xa1\xab\x85\xa7\x52\x66\xcc\xca\x00\x5b\x03\x47\x03\xee\x81\x3c\x4b\x38\x8e\xd7\x05\xe1\xfc\x82\x0a\xb9\x66\x85\x68\x66\xda\xd5\x1f\x1c\xb8\x64\xb6\x14\x7f\x63\x46\xfe\x5b\x88\xa9\x6d\x9c\xfa\x9b\x86\xd5\x02\xfd\x42\x30\x59\x29\x28\xed\xa5\xb4\x90\x2a\x4d\xb7\x52\x38\xe4\x1f\x0f\x9c\xaa\xfd\x96\xbe\x86\x7a\xf1\x05\x3b\x08\x3a\x27\xc0\x6f\xb3\xf0\xf9\xc1\x48\xad\x9d\x6a\xd7\x65\x55\x76\x46\xfd\x4e\xf1\xed\x14\xdf\xbd\x2f\xe3\x21\x29\xbe\x6f\x28\x51\x9b\x34\x91\x17\x29\x63\xb8\x9d\x6c\xdd\x89\xd6\x9d\x68\xdd\x89\xd6\x5f\xac\x68\x7d\x18\x2b\xdc\xc9\xd5\x9d\x5c\xdd\xc9\xd5\x9d\x5c\xdd\xc9\xd5\x7b\x5f\xc6\x4e\xae\xae\xc8\xd5\xf0\x97\x4b\x93\xde\x54\xc8\x6e\x2d\x5c\xb7\xc8\x89\x7e\x2f\x92\x75\x27\x55\x77\x52\xf5\x61\x4b\xd5\x07\x33\xa1\x2f\x2f\x11\xb2\x4b\x25\xec\x52\x09\xbb\x54\xc2\xb7\x48\x25\x74\xbc\x64\x95\x84\xb2\x2c\x58\xfc\xb8\xc4\x81\x0e\x56\xb6\x28\x46\xbb\x6d\x78\xc7\xbe\x96\xda\x01\xcd\x6f\x53\x69\xaa\xf4\x9b\x6b\xe8\x80\xea\x4f\xf5\x9c\xb4\xa0\x19\x85\x1b\xdf\x7a\x84\xb0\x9f\xec\x9b\xef\x0b\x0c\x7c\x79\xd4\x5d\xfd\x29\x14\xec\x5a\x57\x7f\xea\x05\xe7\xed\x0e\xd7\x9a\x99\x3b\x1a\x35\x36\xde\x77\x3a\xed\x37\x07\x97\x6b\x3e\xe9\x6f\x1a\x2e\x57\x7b\x93\x2c\x25\xef\x9c\xfc\xb3\xf6\xa2\x78\x83\xb2\x5b\x1b\xdf\x0e\x9f\x88\xfa\x52\xae\x86\xae\xec\x56\x57\x1f\x62\x4f\xd3\xdd\x8a\xf5\xbf\xdb\xd9\x76\x45\xc6\xba\x22\x63\x5d\x91\xb1\xae\xc8\x58\x57\x64\x0c\xfd\xc6\x8b\x8c\x6d\x2c\x3e\x9a\x71\x7c\x29\x12\x64\x57\x64\xac\x13\x22\xf7\x37\xdd\xdf\x96\x10\x79\x80\x16\x84\x83\xa8\xa6\xe6\x2d\x08\x6f\x8e\xfb\xe1\x46\xd2\x16\xfb\xc3\x2d\x68\x87\xff\x61\xff\xaf\xc3\xff\xe8\xf0\x3f\x1a\x66\xdd\x05\xb3\x76\xf8\x1f\xa8\x0b\xd7\xec\xc2\x35\x0f\x39\x5c\xb3\xc5\x36\x76\xf8\x1f\x2d\xc5\xb9\x17\xc2\x00\x71\x32\xd7\x46\x38\x20\x3f\x2d\x2b\x1a\x07\x2b\xa5\xb9\xb1\xfe\x76\x70\x40\x6a\xa7\x7d\x10\x2a\xc9\x2b\xe2\x80\xd4\xd1\x75\x6b\x05\xe4\x7d\xe0\x81\xb8\xd1\x76\x89\x8b\x5d\x88\xf5\xe1\x87\x58\x1f\x5c\xe2\xe2\xc1\x48\xb2\x9d\xba\xd7\xe5\x2e\x76\xb9\x8b\x9d\x32\xdc\x29\xc3\x7b\x5f\xc6\x43\x52\x86\xdf\x58\xc2\x7e\x41\x5c\x90\xdd\x64\xed\x4e\xd4\x36\xef\x75\xa2\x76\x27\x6a\x7f\xa1\xa2\xf6\x61\xac\x70\x27\x67\x77\x72\x76\x27\x67\x77\x72\x76\x27\x67\xef\x7d\x19\x3b\x39\xfb\xd5\x70\x42\xea\x84\xed\x96\xf9\x36\xef\x49\xd2\xee\xa4\xec\x4e\xca\x3e\x6c\x29\xfb\x60\x26\xd4\x61\x86\x74\x98\x21\x1d\x66\x48\x87\x19\xb2\x95\x7c\xf3\x6f\xf6\x58\x7e\x08\x6e\x62\x7f\x65\x7f\xf8\x2e\xe1\x93\xfb\x45\x46\xf4\x7f\xcf\x69\x4a\x98\x04\x69\x94\xaa\x45\x28\xcf\x34\xac\xfc\xf2\x9a\x7f\xb8\x1b\x5e\x7d\xba\x08\xb3\x69\x3e\x5c\x3e\x5c\xdc\x0f\x6f\xfa\xb7\x7e\x5d\xfc\xac\xc2\xb5\xb0\xdf\x95\x44\x32\x4b\xf2\xb7\x44\xeb\x9e\x70\x6a\xee\x14\x56\xb9\xdc\x6e\x64\xb7\x83\xbb\xc1\xed\x8f\x90\x0d\x34\x3e\x1f\xde\xf5\xbf\xbb\x28\x11\x44\xe9\x79\xff\xec\xaf\x0f\xc3\xdb\xe6\xe7\x83\xff\x1e\xde\xdd\xdf\x35\x3d\xbd\x1d\x5c\x0c\xfa\x77\xcd\x5f\x7f\xec\x0f\x2f\x1e\x6e\x07\x2b\xd7\x63\xe5\x68\x57\x2b\x21\x12\x16\x09\xe2\xfc\x51\x64\xb9\x86\x28\xd6\x10\x79\xf1\xd1\xb1\xc3\xba\xbe\x4e\xd1\x83\xd5\xe9\xa9\x6d\xdc\x30\xd8\xa0\x21\xa3\x8c\xc4\x54\xe2\x49\x42\xe2\xa5\x96\xdc\x1a\x36\xb5\x84\x4b\x83\x7a\xd6\xda\xb3\x17\x39\x35\xcf\x8b\x0c\x2f\x40\x90\xa3\xa8\x08\x8b\x6b\xfa\x30\xfb\xd0\xd8\x03\xd3\xbc\x8b\x3e\x91\x52\x4f\x51\x2e\x04\x61\x2a\x59\x20\xf2\x99\x4a\x25\x97\x1a\x75\xdb\xd7\xd4\xac\xbd\x53\x7d\x83\x73\x2c\xd1\x84\x10\x56\x1e\xbf\x20\x09\xc1\xb2\x66\xcc\x76\xf7\xdb\x2d\x8b\xdf\x2b\x6b\x8d\x31\x97\xd1\x14\xd3\x24\x17\xa4\x72\x5a\x78\x9a\x61\x41\x25\x67\x83\xcf\xfa\x2e\xd3\x07\xf9\x1a\x3e\xe7\x62\xbb\x13\x33\xf8\x6b\x48\xc1\x57\xe5\x7f\x7e\xba\x2f\xff\xab\x74\xe6\x2f\xee\xcb\xff\x5a\x4d\xeb\x41\xc3\x55\xca\x3e\x42\x9f\xee\x4f\xd1\x27\x08\x71\x12\xe8\x7e\x8e\x0d\xc5\x5e\xdc\x9f\xa2\x0b\x22\x25\xfc\x52\x7c\xac\xa8\x4a\x60\x6e\xdf\x51\x86\xc5\x02\xb9\xe9\x9b\x44\x57\x1c\xcd\x11\xf1\x4b\x53\x5d\x3c\xf6\xf7\x9c\x81\xea\x5e\xac\xde\x05\x9f\xd1\x08\x27\xbb\x2d\x62\xff\xaa\xc4\x07\xae\x6f\x57\x2e\x45\xf8\xf6\xf2\x5a\xf4\xaf\xce\x21\x89\xd4\x0d\xb5\x66\xe6\x57\x44\x6a\x22\x89\x38\x8b\xad\x97\x46\xdf\xfe\x8b\x40\xa8\xff\x3b\x87\x44\xdc\x5c\x52\x36\xd3\x2d\xa2\x13\x74\x7d\x3b\x62\xd7\x22\x36\x86\x50\xa2\xa5\x61\x43\x73\x54\x22\xc6\x15\xa2\x69\xc6\x85\xc2\x4c\x69\x45\x00\xc4\x00\xbb\x22\x86\x03\x9c\xf1\x34\xcd\x15\xd6\x07\x6d\x69\x51\x99\x31\x87\xdc\x11\x35\x8c\xc1\xb5\x52\xb3\x86\x46\x4e\x28\xe6\x92\x09\xdd\xbe\x96\x51\xca\x3a\x34\x8d\x97\x54\x59\xd7\x04\x16\x02\x97\xa5\x89\x0f\x54\x91\xb4\xfa\x7e\xcb\x20\xcf\x7f\xd5\x1a\x08\xce\x4c\x52\x05\x11\x7d\x11\xcd\xa9\x22\x91\xd2\x47\x70\x2b\x9a\x78\xb8\xfa\xe1\xea\xfa\xa7\x50\x82\xf8\xd0\xbf\x3c\xff\xf3\x7f\x94\x7e\xb8\xbd\x5c\xfa\x61\xfc\xe3\x9f\x97\x7e\xf9\xff\xad\xa4\xa7\x6a\x4f\x4b\x7a\x7e\x30\x97\x23\x10\xa9\xc1\x26\xec\xa6\x8a\x68\x8a\x67\x04\xc9\x3c\xd3\x14\x20\x8f\xcb\xfb\xab\x45\xca\x0b\x8e\x63\xca\x66\x26\x03\xf4\x82\x2a\x22\x70\x72\x89\xb3\x8f\xce\x7e\xbd\xc5\xea\xfc\xdf\xbb\x52\xbe\xee\x87\x9f\xfb\x97\x61\xc6\xef\x87\x9b\xdb\xeb\xfb\xeb\x95\xb3\x2e\xb5\xb0\x7c\x8c\xf4\xe3\x53\xf8\x5f\x74\x82\x74\xeb\x5e\xf2\x4d\x89\xc2\x5a\x23\x40\x5f\x9b\xa4\x39\x9f\x48\x43\x59\x02\xa7\x26\x13\x34\xa5\x70\xa5\x18\x0b\xde\x37\x46\xb8\xf6\xda\x83\x3f\x37\xe6\x03\xd0\x96\xdd\xa5\xcc\x62\x2c\x62\xf4\x77\x59\x4d\x1f\x07\xc3\xb1\xf9\x81\xc4\xe8\x08\xcd\x95\xca\xe4\xe9\xc9\xc9\xf3\xf3\xf3\xb1\x7e\xfb\x98\x8b\xd9\x89\xfe\xe3\x88\xb0\xe3\xb9\x4a\x13\x93\x2e\xaf\x57\xe1\x14\xdd\x08\xae\xaf\x10\x50\xd0\x89\xa0\x38\xa1\xbf\x92\x18\x4d\x0c\xff\xe3\x53\xf4\x4b\xc4\x05\x39\x2e\x36\xc6\x1a\x95\xec\x3d\x62\x0d\x4f\x27\xfa\xa5\x1a\x66\x52\xdd\x4f\x14\x93\x88\xc6\x56\xcc\x20\x2c\xe2\x60\x79\x34\xbe\x0a\xdd\x9e\xcb\x34\xd4\x1a\x4d\x96\xab\x62\x39\x03\x65\x05\xc7\x24\xc8\x76\x57\xbc\x4c\x70\x5a\xf1\x19\x1a\xb5\x35\xd7\x2a\xba\xbe\x5b\x31\xdc\xaa\xee\xd5\x4c\x4f\x38\xe2\x09\x9a\xe4\xd3\x29\x11\xa1\x43\xba\xa7\xb5\x19\x2a\x91\x20\x11\x4f\x53\x90\x18\xf4\x57\xb9\x34\x54\x0d\x2b\x66\x47\x7b\x3c\x62\xb0\xff\x5a\xcd\x01\x0a\x88\x39\xb0\x3a\x46\x48\x8c\x30\x5b\x98\x6e\x26\xf9\x34\x6c\xdf\xc0\x50\xe0\x18\x51\x35\x62\xfd\x24\x41\x82\xa4\x5c\x91\x20\x87\x12\x9c\x67\xe5\x05\x07\x16\x29\x48\x96\xe0\x88\xc4\x86\x1e\x12\x1e\xe1\x04\x4d\x69\x42\xe4\x42\x2a\x92\x86\x0d\x7c\x0d\xb6\x1a\xbd\x66\x54\xa2\x98\x3f\xb3\x84\x63\x3b\x8f\xea\x67\xdf\x94\x4f\xe3\xc0\x41\x04\x0c\x84\xe0\x02\xfe\xe7\x07\xca\xe2\xbd\x71\xa8\x87\xbb\xc1\x6d\xf8\xef\xbb\x9f\xef\xee\x07\x97\x9b\x71\x1f\x4f\x59\x30\x3c\xd0\xe1\x4f\xd1\x9d\x59\x04\x2e\xb4\x44\x24\x1a\x26\x75\x69\x49\xa9\xf8\x81\xc7\x5b\x72\xdf\xcb\xfe\xd5\x43\xbf\xc4\x51\xee\xce\xbe\x1f\x9c\x3f\x54\xf4\x01\x3b\xbf\x92\x0c\x6f\xd4\xbf\xf0\xb7\xb3\xef\x87\x17\xe7\xe3\x1a\x85\xf1\xc3\xed\xe0\xec\xfa\xc7\xc1\x6d\xa1\xdb\xd5\x2e\x51\x65\x30\x55\x66\x75\x6f\x98\xd2\x9c\xc7\x68\xb2\xa8\x07\x84\xd0\x92\x73\x02\xbe\xd8\x02\x12\xc5\xb4\x7a\x0a\xbc\xc9\x61\x73\x14\x5f\xa4\x3c\x26\x3d\xfb\x0e\x20\x69\x18\xe3\x8a\x91\x98\xeb\x1b\xd6\xbd\x63\x16\x18\x2a\x0c\xc8\x85\x5f\xb8\x53\xd4\x47\x52\xbf\x98\xeb\x43\x2d\xe8\x6c\x06\x86\xc3\xca\x50\x4d\x6b\xf6\x53\x58\x5e\xf8\xce\xec\x7f\x26\x38\x9c\x73\xdd\xad\xb5\x38\x7b\xab\x84\xf9\x10\x50\x57\xca\x2d\x0a\x0c\x06\x87\x9a\xa1\xb9\xcd\xd2\x8b\xd0\xb8\x5e\xe6\x3c\x1a\x7b\x91\x3e\x5c\xc0\xb6\xa4\xb1\x77\x66\x82\x3c\x51\x9e\x07\x9f\x5a\x60\x8f\xd2\x8e\xd7\x36\x5f\x2c\x00\x2c\x9b\x31\x8a\x54\x9a\xf1\xe4\x51\xdb\x82\x66\x61\x4f\xd0\xc2\x54\xf0\xb4\xa6\x8d\xf2\x31\x19\x5e\xdf\x29\x81\x15\x99\x2d\xce\x2d\xcb\xd8\xfe\x78\x9c\x5f\xff\x74\x75\x71\xdd\x3f\x1f\x0f\xfa\x9f\xca\x27\xde\x3f\xb9\xbb\xbf\x1d\xf4\x2f\xcb\x8f\xc6\x57\xd7\xf7\x63\xf7\xc6\x4a\x92\x6f\xe8\x60\xf9\x9e\x2e\xbf\x78\x8a\x34\xcb\x05\xd6\xe8\x00\xef\x02\xfe\x38\x21\x53\x2e\x0c\x9f\x4f\x5d\xe8\x82\x15\x61\xdc\xda\x5a\x5d\xac\x32\x8b\x53\xb0\x8c\xd5\x35\x69\xac\xde\x4a\x10\x9c\xc2\x3d\x81\x19\x1a\xb0\xf8\xe8\x7a\x7a\x74\x67\x7e\x4c\xb1\x78\x24\xc2\x7f\xfa\x2c\xa8\x52\x84\x95\x54\x3a\xec\x86\xec\x95\xc4\xa2\x83\x63\x74\xab\xf9\xbe\x7e\xdf\x5f\x6a\x9a\xd8\x63\xa2\x30\x4d\xa4\x1d\x6c\x69\x5d\x4f\xd1\x05\x16\xb3\xc2\x0e\xf7\x35\x9f\x4e\x4d\x63\xdf\x98\x61\xe8\x3b\xac\x34\x8b\x1a\xde\xab\x49\xc3\xdd\x8b\xd0\x9f\x7d\xd9\xcb\xc3\xcb\x54\xf5\x90\xed\x46\x53\x0f\x37\xb0\xe2\x46\x63\x2f\xe9\x86\xf6\x49\x0d\xad\xc1\xc4\xcd\xe3\xd5\x97\x4c\x7d\xdb\xcb\xe4\x54\x7e\xb1\x86\x9c\x4c\x2e\x95\xde\xf9\xa9\xd6\x36\x6b\x68\x89\x7c\xa6\xd6\x60\x10\x8e\xbb\x42\x42\x45\x33\x60\x5e\xc5\x59\x46\xb0\x90\x75\xbb\x5d\x16\x03\x1b\xf6\xde\xf4\x14\xf6\x61\x37\xd9\xf5\xd3\x43\x9c\x81\xc1\xc1\x0b\x11\x15\x8a\x6c\x41\x03\xa6\xad\x25\x0a\xb8\x01\xb4\xa5\x6b\x8b\x6c\x74\x49\xa5\x56\x1a\xcd\x8f\xdf\x59\xc8\xa5\xed\x08\xe2\x63\x7f\x78\x51\x11\x2e\xc6\xe7\x83\x8f\xfd\x87\x8b\xd5\x66\xc2\xd2\x77\xd5\x2d\x46\x47\x48\x3f\x2f\xfb\xcd\xe9\xd4\xdc\x19\x0e\x38\xca\xa8\xb4\x84\x81\xd1\xca\x42\xd5\x18\x7b\x75\x4c\xb2\x84\x2f\x52\xc2\xc0\xc4\x53\xba\x09\xf5\x7a\x4e\x31\xb5\x57\x4b\x30\x58\xb0\xe2\x58\xb3\x1b\x5c\x63\x47\x0e\xad\x8a\xc4\xfe\xe6\x2d\x83\x55\x55\x58\xf7\x8d\xf1\x9e\xd9\xff\xdc\x29\xac\xb6\x3c\x63\xfd\xb3\xfb\xe1\x8f\x83\xb2\x7e\x78\xf6\xfd\xf0\xc7\x3a\xa9\x66\xfc\x69\x70\x35\xb8\xed\xdf\xaf\x11\x4e\x2a\x4d\xd6\x09\x27\x52\x0f\xb8\xea\x3d\xa5\xd2\x47\x04\x45\x06\xf2\x0a\x51\x25\xd1\x13\x95\x74\x42\x01\x20\xcc\x7a\x22\x1f\x86\xc0\x59\x9f\x70\x42\x63\xaa\x16\x4e\x7c\x31\xfd\x96\xf7\x51\x73\x52\xdb\xbe\x31\x3b\x84\xfe\x49\xb0\xf2\x99\xcd\x71\x93\x3e\x45\xa0\xdb\x3e\x81\xd2\x16\x7c\xc6\xb4\x20\xcd\x66\x44\x98\xe1\x80\xf7\x25\x1c\x4b\xf0\x5c\x8f\x2a\x14\x56\x8a\x55\xf3\x42\xeb\x8c\x30\x22\x00\x04\xce\x77\x62\x04\x29\x41\xd8\x57\x5a\xe6\xca\x12\x1a\x51\x95\x2c\x50\x04\x36\x2c\x30\x67\xa6\x98\xe1\x99\x15\x0e\x40\xcd\xa9\x90\xc4\x5f\x0d\x8a\xda\xf5\xd4\x9a\xf6\xef\x29\xd9\xf2\x98\x3d\x5c\x9d\x0f\x3e\x0e\xaf\xca\x24\xf0\xfd\xf0\x53\x49\x84\xbd\x1c\x9c\x0f\x1f\x4a\xb7\xb9\x96\x64\x57\xcb\xf5\xd5\x66\x6b\x8e\xa2\x7f\xe9\x14\x9d\x9b\x4f\x4f\xf5\xe2\xd6\x40\xc4\x79\xe5\xb7\xb2\x0e\xb7\x2e\x24\xcf\xfd\x31\x60\x4a\xd4\xfa\x25\xda\x9a\x90\xac\x0f\xb2\x64\x43\xaa\x0f\x55\x58\xea\xfb\xaa\xea\x54\xae\x4e\xd9\xbd\x08\x41\x97\xc7\x85\x65\x29\x8c\x61\x00\xa3\x41\x93\x11\xab\xc6\xad\x55\x30\xec\x1f\xc1\x45\x9d\xe6\x52\x19\x57\x22\x10\x27\x7a\xfc\x8b\xd4\x0b\x0a\xae\xc6\x63\x74\x47\xc8\x88\x39\xeb\xc1\x8c\xaa\x79\x3e\x39\x8e\x78\x7a\x52\xe0\x13\x9e\xe0\x8c\xa6\x58\x4b\xd2\x44\x2c\x4e\x26\x09\x9f\x9c\xa4\x58\x2a\x22\x4e\xb2\xc7\x19\x44\xc0\x38\x77\xea\x89\x6f\x76\xc6\xff\xfd\xe2\x4f\xdf\x1e\x5d\xfc\xe5\xdb\x0f\xcb\x16\xb2\xa6\xfd\x1f\xb0\x08\x67\x32\x4f\x6c\xc4\x9c\x08\xd7\xc6\x1d\xf9\x9c\xac\xdb\xef\xab\xf2\x76\xed\xa6\xbf\x9e\xdd\x3c\x94\x2c\xd6\xe5\x7f\x5e\x0e\x2e\xaf\x6f\x7f\x2e\x71\xca\xfb\xeb\xdb\xfe\xa7\x12\x43\x1d\xdc\x7c\x3f\xb8\x1c\xdc\xf6\x2f\xc6\xee\xe1\x2e\xb6\xb7\x1f\x18\x7f\x66\xe5\xa5\x91\x8e\x03\x2e\xf5\x74\x8a\x3e\x72\x81\x7e\xf0\x3b\x79\x34\xc1\x12\xae\x18\x77\x67\xc9\x1e\xca\x78\x0c\x8c\x17\x91\x6c\x4e\x52\x22\x70\x62\x6d\x06\x52\x71\x81\x67\xe6\xa6\x97\x91\xc0\x2a\x9a\x23\x99\xe1\x88\xf4\x50\x04\xd4\x30\xeb\xc1\xa6\x80\xaa\xc5\x67\x55\x3b\xdf\x6d\xce\x14\x4d\x89\x53\xc1\xed\x3f\xef\xcd\x66\x6c\xb1\x39\xd7\xf7\xdf\x97\x85\xbd\x8f\x17\x3f\xdf\x0f\xc6\x77\xe7\x3f\xac\x5c\x4f\xf3\x59\x69\x64\x77\x10\x80\x74\xc6\x93\x3c\x65\xe1\xdf\xdb\x8f\x6d\x78\x75\x3f\xf8\x54\x1d\xdd\x75\xff\xbe\x4c\x19\xb7\xe5\x00\xb7\x0f\xdf\x5d\x5f\x5f\x0c\x4a\x2e\xe1\x0f\xe7\xfd\xfb\xc1\xfd\xf0\xb2\x44\x3f\xe7\x0f\xb7\x06\x8d\x70\xd5\x34\xdd\x08\x6a\x26\xaa\xa7\x15\x4e\x73\xdf\xac\xb0\x15\x27\xea\xdb\x80\x72\x73\x96\x8f\x02\xb8\x1d\x13\x0e\x06\x56\x9d\x23\x6f\x52\x8d\xcc\x48\x6b\xd9\xa1\x2a\x6f\x13\x6a\x66\xc7\x2b\x37\x7a\x15\x57\xbe\xf7\x43\x30\x50\xa0\x46\xd9\xc6\x49\xc2\x9f\x4d\x28\x6f\x4a\xf5\xad\x6c\x81\xd1\xf4\x2b\xb2\xf0\x10\x1e\xd7\x70\xbc\xf2\xb6\x90\x48\x10\x75\xc9\x73\xa6\xb6\x27\xb9\xfe\x55\x89\xef\x0c\xae\x7e\x1c\xff\xd8\x2f\x53\xe0\xf0\x62\x35\xab\x09\x9b\xa8\xb9\x8a\xfb\x57\x3f\xfb\x4b\x18\x02\xbe\x7b\x5e\x43\x35\xb2\x6b\x94\x50\x2d\xf6\x46\x58\x6b\xaf\x09\x48\x34\x88\x50\x30\x39\xa4\x7a\x72\x10\x60\x9a\x19\x7f\x92\xe1\x4f\x66\x90\xa7\xee\x8f\x4a\x7b\x12\xd6\x05\xac\xa9\x2e\x9e\x1e\xda\xb1\x5a\x35\x43\x84\x3d\x51\xc1\x01\xcf\x16\x3d\x61\x41\xb5\x34\x6e\x5a\xd6\x73\x3d\x85\xff\xdd\xac\x4d\x30\x8c\x56\x18\xd7\x1d\x17\xea\xdc\x07\xf2\x6e\x67\x0d\xa9\x0b\x68\x5d\x0e\x65\xad\x37\x74\x2c\x7f\x5b\xb3\x39\x3b\x06\xfc\x96\x27\xfc\x8f\xe4\x9c\xe2\x44\x33\x80\xfd\xc9\x8b\xfd\xab\xbb\x61\x59\x7e\x2c\xab\x19\x01\x5f\xde\x5a\x5e\x04\x43\xa5\x19\xb9\x53\x26\xee\xfe\x7a\x61\xb4\x0b\x00\x3d\x36\xe7\x36\x50\x2c\x40\x00\x72\x28\x28\x19\x16\xb2\xf2\x85\x44\x00\x84\x56\x04\x5c\xe9\x3b\x0b\xc2\x99\x9e\x38\x8d\x47\x8c\x7c\xce\x08\x93\x10\x1c\x60\xee\xb3\xc2\xd7\x2e\x8f\xd1\x70\x0a\x2c\x41\xbf\xce\x50\xce\xac\x03\x4c\x5f\xb8\x66\x90\x3d\x2d\xca\xda\x21\x78\x0d\x11\x0c\x2f\x8c\xb8\x60\xa9\x62\xf0\x23\xf6\x93\x77\xa2\xc1\xa3\x29\xd7\x0c\x48\xef\xa2\x6d\xef\x14\x61\x26\x69\x0f\x69\x85\xa5\xba\xa7\x90\x3a\xa0\x15\x4a\x1b\xc2\xa5\x39\x8d\xfd\xf3\xf5\xaf\x81\xa5\x38\xe1\xf0\x32\xa8\xbf\x0b\x2a\x57\x41\x83\x68\x9c\x18\x8f\xc9\xb8\xfd\x9d\x10\x71\x41\xac\x9f\x65\xe3\x6b\x60\x1d\x63\xbf\xc7\xf2\x71\xc9\xf7\x30\x64\x52\x61\x16\x91\xb3\x04\xcb\x2d\x83\x90\x9c\x8d\xa3\x57\x96\x38\x6e\x6f\x1f\x6e\xee\x87\xdf\xad\xe1\xf2\xd5\x8f\x97\xc3\x80\xa2\x24\x77\xee\xb9\x89\xe0\x38\x46\x9a\x7d\xce\xb8\x71\x05\x5a\xc1\xbf\x80\xfe\x36\x79\x3d\x3e\xa0\xb2\x04\x3b\x5e\xa4\x23\x58\x3b\x47\xe8\x4a\xa0\x76\x21\x50\xa4\x57\x02\x05\x26\x0f\xb7\xd5\xe0\x59\x34\x05\x49\xac\x75\x2b\x4b\xb0\x9a\x72\x91\x1a\x2e\x5f\x9a\xb4\x69\x7c\x75\xa3\x94\x29\x22\x44\x9e\x29\xea\xb0\xdc\xab\x52\x2a\x54\x78\xe7\xb3\x4b\x22\x25\x9e\x91\x5d\x1c\xd0\x75\xca\xc3\xdd\x8f\xe1\x3f\xc1\xc1\xdc\x46\xf6\x2f\x8d\xd0\x45\xbe\x3b\x7a\xba\x66\x1f\x4d\x20\xcf\x0d\x4f\x68\xb4\x65\xc0\xdd\xc7\xfe\xf0\x62\x3c\xbc\xd4\x4a\x7c\xff\x7e\x70\x51\x12\x25\xe0\x59\xff\xe3\xfd\xe0\xd6\x82\x58\xf7\xbf\xbb\x18\x8c\xaf\xae\xcf\x07\x77\xe3\xb3\xeb\xcb\x9b\x8b\xc1\x9a\xc8\x9c\xc6\xc6\x97\xad\xab\xd5\x57\x4f\x97\x7e\x81\x1d\xd6\xbc\x2c\xb4\x97\x41\xd6\x18\xa6\x09\x38\xc1\xb9\x71\x86\x63\xc4\x78\x4c\xe0\x67\xe9\xac\x33\x1e\x39\x1a\x0d\xd5\x57\x49\x82\x70\xae\x78\x8a\xc1\x6b\x93\x2c\x46\x0c\x4f\x34\x6b\xc5\x49\x12\x84\x77\x89\x9c\x31\xcd\x62\x75\x63\x06\xa2\x3d\x4a\x88\x66\xe7\x59\x90\xec\x67\xfd\x06\x53\xca\x20\xd2\x36\xc5\xe2\xd1\xb8\x99\x8a\x2e\x8b\x43\x21\x11\x96\x23\xa6\xc7\x45\xac\x61\xa8\xcd\x0a\x9f\xb6\x7a\xab\x71\x75\x52\xfc\x48\xf4\xaa\xa4\x79\x34\x47\x99\xe0\x33\x41\xa4\xb4\xb6\xe5\x08\x33\x13\x80\x60\x5f\xd7\xd7\xd0\x88\x31\xae\x97\xc2\x99\xb0\x63\x92\x11\x16\x13\x16\x51\x93\xd6\x07\xbe\x7b\x6f\xda\x9c\x09\x9c\xcd\x91\xe4\xe0\xf4\x86\x65\x07\xfb\x95\xf9\xc8\xdd\x64\x66\xc6\xe6\x71\x68\x81\x16\xb9\xe6\x13\xd7\x20\x27\x9a\x55\x86\x8f\xdd\x65\xe8\xdc\x2e\xc6\x0e\x98\x66\x09\x51\x06\xac\x1f\x96\x1c\x36\x43\xaf\x75\x69\x3f\xf4\x36\xd5\x6d\x82\xbe\xb0\xdd\x98\xb1\xb4\x23\x3a\xae\xb1\x6c\xdb\x23\x85\xbe\xc7\x2c\x4e\x74\x2b\xce\x87\x51\x3e\x8b\x90\x8a\xd2\xd7\x54\xe3\x4e\xe3\x2e\xb7\x68\x84\x73\xb9\xcb\x35\x5a\xc9\xc5\x34\x56\xc1\xa3\x22\x28\x04\xc8\xdb\x26\x62\xc2\xea\x66\x9a\x45\xe2\x84\xdb\x55\x32\xaf\xe7\xa6\xfe\x13\x82\xd1\x34\x5c\xb3\x99\xa0\x2c\xa2\x19\x4e\xb6\xd2\xfd\x2a\xc1\xf8\x36\xc6\xfd\x6b\x3a\xd5\xe4\xf3\xcd\x92\xdb\x56\x11\x91\x42\x82\xb2\x1d\xa6\xdf\xc2\x0d\x2c\x49\x36\xab\x81\xc8\x22\x9a\x04\x0b\x9e\x1b\x7f\x1c\xac\x0b\x89\x6b\x8e\xea\x71\xdd\x76\xeb\x93\x81\xcb\x01\xd0\x5b\x6c\xb6\x89\xfc\x69\x5a\xbf\x4a\x2b\xb6\x77\x13\x8c\x87\x93\x9b\xfa\x36\xeb\x76\x20\x78\xf8\xaf\x55\xb4\x73\x89\x33\x4d\x33\x16\xb6\x1f\x17\x73\xb4\x4a\x92\xad\x0a\xe6\xe2\x67\x02\xdf\xb9\xcf\x0b\x69\xbf\x1b\xc5\x12\xda\x00\xa8\xe5\x4e\x4a\x31\x04\x41\x8e\xb9\xa5\xf1\x69\xae\x65\x59\x84\x21\x0a\x01\x7d\x4d\x8e\x67\xc7\xc8\x15\x61\xe8\xa1\xfe\xcd\xcd\xe0\xea\xbc\x87\x88\x8a\xbe\x71\x31\x8b\x36\x60\x69\xc4\x14\xb7\xd2\xca\xc2\x15\xd0\x48\x89\x98\x91\xd2\x9c\x5d\x74\x13\x84\x2a\xcf\xa8\x54\x36\x7c\x56\xf3\x95\xa0\xd4\x09\x4d\xab\x62\xb6\xa1\x90\x5c\xcd\x77\x21\x0d\x2c\x65\x9e\x6a\x5d\x76\x4c\x71\x3a\x16\x3c\xd9\x85\x29\x9c\xc3\x54\x40\x5d\xf6\xe9\xf9\x14\xa7\x48\x37\x6b\x43\x41\xbc\xcb\xd1\x8b\x74\x5a\x30\xd2\x7c\x59\xdf\x9b\xc1\xbd\xe5\xbc\x0f\x36\x1e\x8d\xba\x10\x08\x48\xdf\x6f\x60\x15\x85\xd9\x78\x6c\x2d\xf5\x63\x1c\x45\x5a\xe5\xde\xf3\xa4\x82\xfa\x39\xce\x25\x60\x3b\x7a\xb1\x69\xae\xa3\x73\x37\xcc\x4c\x73\x30\x08\x06\xd6\x57\xae\xe4\x11\x2d\xda\xaf\xe9\x77\xb2\x58\xea\xd5\x55\xb8\x79\x90\xde\xa4\x62\x2e\x61\x49\x60\x27\xa5\xa9\x90\xa3\xe6\x64\x81\xe6\xf8\x89\x94\xba\x74\x09\x31\xba\xe1\x05\xcf\x45\x1d\xa3\x1b\xb1\x73\x92\x09\xa2\x25\xfd\xaa\x03\xc5\xd3\xf4\x6d\x99\x12\x3b\xba\xee\xe8\xfa\xdd\xd3\xf5\x99\x29\x94\xd4\xf7\x85\xb1\x76\x12\xe0\x4c\x63\xe3\x8c\xf3\x64\xdc\xc2\x26\xd2\x7e\xc5\x4b\x9e\xb0\x4a\xd9\x28\x80\x04\xe0\x39\xc8\x47\xa5\x6b\x93\xeb\xbb\x2e\x48\xb1\xb5\xc3\x5b\xb1\x0c\xce\x65\x16\xd4\xcb\xd9\xe5\xbc\xd7\xb5\xb2\xaa\x25\xf4\xe2\x62\xce\x99\x91\x6f\xbc\xbb\x2c\xac\x7f\x5a\x3a\x4c\x4e\x14\xa1\x6c\xa9\x1a\x9b\xa1\x67\xbd\xc0\x46\xee\xf8\x47\xce\x15\x96\xdf\x1c\x8f\x98\x16\xa2\x1e\xc9\xc2\x98\x5b\xb5\x98\xf2\x3b\x2d\x8b\x1f\x49\xc2\x24\x84\x7b\xff\xce\xb8\xe7\x34\x89\x3b\x73\xb5\x51\x4d\x4d\x11\x38\x08\xba\xf6\xbd\x40\x88\xae\x6d\xd4\x4a\x49\x45\x00\x34\xc8\xf9\x66\x2e\xf6\x99\x19\xfe\x8c\x28\x48\xb1\x56\x54\x81\xce\x14\x9b\x2a\x73\x4b\x43\x5f\x6b\xba\x32\x54\x21\x38\xf8\x49\xe2\x7c\x37\xc6\x2f\x97\xdb\x58\xcb\x19\xbd\xb6\x70\x67\x63\xde\x4f\x9c\xdd\x28\x12\x7c\xa9\x74\x1b\x96\xc8\xec\xf4\xc4\xb0\x03\xe7\xbf\x26\xec\xf8\x99\x3e\xd2\x8c\xc4\x14\x43\x04\xbc\xfe\xd7\x89\x9e\xd7\xbf\x9f\xdd\x5e\x5f\x8d\x8b\x4c\x9e\xff\x1a\xb1\x7e\x22\xb9\xcf\x52\x40\x8c\x33\x1f\x6e\x9f\x09\xe2\x44\x42\x3b\x17\xb0\xba\x16\x66\xc4\x11\x6b\x1a\x41\xcc\x23\x79\x8c\x9f\xe5\x31\x4e\xf1\xaf\x9c\x81\x2b\xbd\x0f\x7f\x9e\x25\x3c\x8f\x7f\xc2\x2a\x9a\x9f\xc0\xb9\x56\x27\xe4\x89\x30\x65\xdc\x54\x7a\xb9\x62\x48\xde\x95\x10\xad\xff\xef\x7a\xcc\x45\x52\x91\xd4\x9a\x6c\x44\x32\x85\xfe\x1f\x41\x26\x9c\xab\xfa\x4b\x8a\x4f\xa7\x92\x6c\x74\x21\x15\x4a\xda\xdd\x35\xfa\xcb\x9f\xbf\xfd\x83\x26\xa1\x6d\xd6\x78\x78\x77\x3d\xd6\xdf\xff\xfb\xb9\xfd\x5e\x6e\xc0\xee\xae\xb3\x82\xb5\x39\xe2\x31\x81\xf3\x39\x83\xdb\x4f\x80\xf3\x02\xd8\x1b\x90\x43\xb1\x8f\x75\xdc\xed\xbc\xd4\xfa\x6e\x2a\xdb\x56\x8b\x09\x2a\x76\x30\x47\x74\x84\x18\x47\xa9\x89\x35\xc5\x0c\xfd\xc7\x0f\xdf\xd5\x6f\x60\x2e\xe8\x56\x1d\x52\x0b\xd7\x10\x74\x29\xe9\xaf\x44\x22\x4d\x35\x9a\x8a\x79\xaa\xbb\x16\x44\xce\x79\x12\xa3\x67\x02\x6a\x92\x8d\x03\xf5\x5a\xb9\x20\x23\x16\x36\x01\x21\x87\x08\x27\x8a\xcf\x08\xdc\xd5\x4e\x51\x53\x44\x68\x51\xc5\x64\x69\x28\x2e\x48\xcf\x40\x7d\xdd\xfd\xc9\xc5\x56\xc3\x34\xe1\x91\x4b\x6a\xb1\x26\xb9\x78\x52\x3f\xf3\x69\xd5\xf4\x8a\x9a\x6d\xf8\xd5\x4d\xb6\x66\xdb\xfa\xa5\xb1\x49\x28\xd6\x86\x55\xdd\x99\xfa\xc1\xd0\x88\xb3\x71\x42\xd9\xe3\x56\x9b\x71\xed\x44\x39\xdd\x82\x5d\x33\xdd\xa2\xb7\x73\x1b\x0b\xc8\x06\xe7\xe3\x63\x9e\x24\x26\xb5\x25\xdc\x1e\x90\xbb\xcc\xba\x81\x30\x90\x99\x1c\x50\x12\x5b\xbf\x97\xd5\x84\x05\x61\x10\xf0\x36\x62\x93\x85\xf5\xd9\xca\x1e\x92\x79\x34\x77\x99\x79\x11\x67\x52\x8b\xd1\x5c\xa0\x88\xa7\xa9\x29\x6e\xca\x08\x52\x9c\x27\xd2\x46\xbb\xb3\x23\x85\x23\x35\x62\x45\x7f\x6b\x4e\x9e\xa9\x80\xb4\x5b\xea\x5e\x7b\x97\x4e\x51\x69\x69\xa5\xc0\x4d\xe3\x10\xb3\x01\x8c\x60\xc6\x13\x15\xa0\x3f\xf0\xe5\xb3\x64\x36\xac\x41\x33\x90\x73\x2e\xd4\x38\xae\xe5\x39\x6b\x89\xa6\xca\x08\x19\x39\x4a\x20\x68\x98\x3f\x69\xe1\x9f\x3c\x7b\xe3\xeb\xaa\x21\x68\xaa\x5e\x35\x82\x76\xc7\x68\xe5\xc8\x36\x25\xc1\x86\xb5\x32\x08\x1e\x51\x39\x26\x7c\xdd\x18\xef\xe0\xab\x33\xfd\xd1\xca\xc5\xab\x9e\x3b\x27\x04\xf1\xb8\x00\x9b\x33\xf7\xba\xcd\x08\x59\xb5\xa6\x16\x3a\xe1\xe5\x32\x47\x57\x4d\xe5\xa1\x6c\xc9\xd5\x63\x01\x93\xbd\x24\x20\x6b\x62\x31\xa1\x4a\x60\x51\x42\x0a\xf1\xfa\xa0\x24\x58\x40\x7c\xd6\x88\x19\xdc\x38\xa3\x29\xc4\x28\xa6\x12\x12\x44\xe0\x2e\x0d\x9c\x61\xa8\x9d\x12\x58\x39\xda\x45\x9e\xa3\x89\x3f\x87\xc0\xb2\x82\x34\x1c\xb3\xd3\x1d\x79\x7c\x2c\xad\x9f\xf1\x28\x2f\x04\xb9\x08\x24\x5c\x8b\xa9\x83\x28\x93\x74\x36\x57\x88\x32\x6b\x77\xc4\xc9\x8c\x0b\xaa\xe6\xa9\xec\xa1\x49\x2e\xb5\x16\x6a\x82\xd5\x4c\x3c\x0a\x51\x51\x2b\x2e\xb4\x6b\x12\x71\x5c\x69\x70\x59\x45\xd9\x82\x34\xda\x1d\xca\x41\xe5\xae\x58\x43\x38\x7d\x8f\x33\x58\x6d\x83\x42\xdd\x46\x03\x4f\x89\x4c\x1c\x20\x77\xc8\x4e\x50\x05\xa4\xe9\x1c\x00\x2a\xe4\xde\xbc\x14\xaf\x51\x88\x0b\x99\x64\x50\x41\x5c\xec\x36\x48\x5e\x65\x64\x4a\x83\xde\xe4\x9d\x4e\x69\xa6\x6a\x03\xb7\x96\x5d\x45\xb7\x01\xe6\x4f\xbb\xc5\x86\x64\x2c\xa0\x66\x40\x6a\x1b\xb1\x3b\x42\x9a\x81\xdc\x96\xf6\xde\x94\xc6\x85\x29\xd8\x44\x8f\xd5\x24\xbf\x8b\x13\xfb\x7c\x70\x77\x76\x3b\xbc\x31\x90\x13\xd7\xb7\x97\xfd\xfb\x71\x8d\x5f\xbb\xe6\xad\xcb\xfe\xed\x0f\xe7\xeb\x5f\xfb\xfe\xbe\x9c\x95\x5d\xf3\xca\xed\xdd\xea\x64\x8e\x16\x43\xac\x49\x0a\xab\xed\xe7\x14\x65\x0b\x35\xe7\xcc\x87\x28\xc4\x25\xde\x74\x84\x4c\x46\xb0\x82\x10\x22\x21\x55\x8d\xe3\xf0\x1e\xe2\x72\xd6\x4b\x98\xe5\xcd\x32\x30\x6c\x7b\x15\x8d\x36\x38\x91\x9f\x12\x3e\x01\xbf\x75\x5e\x2a\x71\xbb\x22\x02\x7d\xc7\x78\x9f\x73\x2a\xb3\x04\x2f\x96\x7a\x58\x77\xe5\x5c\xe1\x94\x40\xc4\x71\x81\x1f\xe7\x92\x45\xf4\xce\x40\x02\x93\xbf\xd7\xe9\x14\x32\x99\x14\xc5\x8a\xa0\x09\x51\xcf\x90\x37\xe7\x7e\xf5\xb6\x54\x17\x30\x22\x8f\x47\x0c\xcc\x39\x23\xbd\xc8\x71\x0e\xd1\x7e\xa3\x0f\x3d\x34\xfa\x10\x93\x27\x92\xf0\x4c\xef\xbc\xfe\xa1\xe1\x92\x19\xa4\x98\x26\x57\x5c\x79\xcb\xdc\x2e\xfb\x29\x48\x44\x33\x90\xcc\xc7\x44\xb7\xfb\x7a\x82\x47\x89\x92\x1d\x3b\x83\x31\x20\x1c\xc7\x5a\xc9\x06\x56\xe6\x86\x57\x84\x00\xb1\x60\xea\xa5\x5a\x99\x9b\x88\x14\xde\xfc\x6d\x7a\x0c\xdb\x2c\x9b\x3d\x6b\x77\x80\x3d\xbd\xa0\x4b\x76\xd7\x8b\x5c\x6b\x25\x3f\x90\x05\xa4\x60\xdc\x60\x2a\xb6\x74\xcd\xd6\xc5\xbc\xbe\x88\x93\x76\x50\xd3\xd1\x01\xb9\x6b\xeb\xd7\x61\x37\xc7\xad\x8f\xd5\x7b\x2d\x2d\xd5\xc5\x72\xf9\x8e\x5b\xaa\xad\x0f\x4d\x4a\x6a\x63\x08\x03\xaa\x2a\x5e\x19\x89\x36\xd0\xb8\xfc\x00\xef\xf4\x77\x6b\x35\x15\x2f\xae\x45\x61\x4d\x7f\xd8\x05\x9b\x1c\x5f\xcd\xc7\x27\x6b\x47\x1c\x25\x5c\x96\xb1\x72\x5a\x0f\xfa\xcc\x7e\xba\x6a\xdc\x83\x90\x7c\xb5\x5c\xb8\x51\x40\x43\xcd\xc2\x57\xc0\x20\xcd\x3d\xa3\xac\x87\xcc\xbe\xdd\x43\x14\xa2\x2d\x41\x21\x4b\x0a\xe4\x00\x16\xa3\xc2\x0d\x32\x62\x45\xcc\x8a\x44\xcf\x24\x81\x30\xb7\x88\xa7\x19\x98\xf8\xed\x70\x6d\x4b\x24\x36\x11\xc3\x3d\xc4\x73\xa5\x1b\x33\x39\x39\xce\x88\x6b\x13\x7e\x0a\xb7\x87\xf1\xbd\xd9\xe0\x77\x0f\x2c\x6d\x68\xdd\xdc\xa5\x94\xa1\x4f\x44\x41\x2b\x00\xdc\x1f\x4e\x10\xf4\x84\x6a\x08\x65\xfd\xda\xef\x70\xa2\xec\x4c\x36\xd8\xf9\x02\x38\xe5\xbb\x84\x4f\x56\x1b\x09\xa0\x71\xf4\x70\x3b\x74\x16\xc9\x22\x7e\x2a\x40\x2f\x2e\x79\x14\x07\x37\xb7\x83\xb3\xfe\xfd\xe0\xfc\x18\x3d\x48\xa2\x97\xc7\x4f\x17\xf2\xab\xbd\x4a\x62\x46\x6e\x91\x58\x98\x54\x04\x37\x19\x42\x88\x10\xa5\x2c\xe8\x35\x8c\xa3\x0c\xd3\xb2\x9a\xb0\x01\x24\x85\x5a\x43\x1d\x00\x0b\x55\xe7\x69\x23\xf3\xd6\x9d\x40\x88\x93\x1a\xbf\x9f\x28\x35\x33\xde\x74\x39\x32\x6f\x1d\xf9\x94\x23\xfa\x5e\x7a\x32\x70\xb4\xd4\x9c\x50\x81\x5a\x4d\xcb\x10\xd5\xb8\xfd\x9c\x82\x10\xf7\x4b\x9c\xad\x4e\x3f\xc5\xcf\x25\xa2\x35\xa2\x70\xe0\xbb\x7f\xe9\x73\xe0\xd8\xda\xd8\xb0\xc2\xdd\x27\x58\x38\xb4\x0c\x6f\xf5\x7c\xd3\x64\x7c\x48\x67\x24\x0b\x27\x56\x19\x84\x8d\x63\x95\x08\xce\x0e\xfc\x42\x19\x2a\x5d\x89\x3d\x34\xa5\x9f\x6d\xa3\x45\x7c\xbb\x7b\x35\x08\x78\x68\x88\xa7\x9c\xe3\xe5\x33\xb5\x81\xd8\x70\x03\xdf\xaf\x14\x22\xb9\xd4\x22\x51\xa4\xc5\x25\x41\x22\x2e\xf4\x4d\x01\xdd\x16\x5e\x88\x75\x22\x83\xc2\x42\x2f\xca\xb2\x57\x66\xd5\xe9\x2f\x6a\x90\xc4\x58\x91\x23\x2d\x7a\xad\x49\x80\xb6\x39\x32\x90\x4d\x83\x55\x00\x07\x56\xdc\x3c\x13\x32\xc3\xcc\x85\x66\x37\x0c\xd7\x5d\x79\x3b\xb0\x2a\xad\x02\x61\x48\x0f\x03\xf9\x0a\x52\x7f\x4a\xe3\x90\x19\xac\xe7\xca\x71\xd8\xe8\x97\x43\x58\xb6\x67\xec\x83\x71\x1a\x06\x9b\x67\xf1\x21\x0d\x36\xc1\x52\x21\x3b\xa6\x26\x53\x44\xa0\x22\xbe\xac\x11\xb6\xa4\xdb\xb7\x55\xde\x34\x09\x95\xb5\x58\x02\x9e\x11\xe9\x70\x53\x0c\x4a\x8c\xd6\x69\x9c\x20\x6c\x4a\x31\xfb\xb3\x6d\x6b\x32\xbb\x5b\x22\x64\x26\x10\xa4\xbf\xdc\xf4\x31\xea\xb3\x25\xbc\x2c\x17\x97\x55\x5a\x2f\x73\x27\xe1\xe4\x19\x2f\x24\xca\x84\x81\x96\x31\x91\xfb\x6e\xf2\xa0\x81\x95\x3f\xf2\xa1\x10\xca\xa5\x4e\x20\xb0\xc5\xac\x0f\x9a\x73\x72\xef\xf8\x05\x5c\x79\x95\xa8\x72\x2f\x90\x17\xcd\x15\xb6\x8a\x16\xac\x4e\x91\x71\x34\xc7\x6c\x46\xc6\xce\xc8\xba\x8d\xb6\xa4\xdb\x39\x83\x66\xce\x6d\x2b\xf5\x97\xd3\x8d\x51\x98\x6c\xfd\x17\xf3\xaa\x37\x20\xea\x43\x20\x15\x9e\x11\x64\x46\xd4\xca\x2c\x5d\x8a\x18\xb3\x60\xc3\xa0\x27\xd8\x56\x07\xe5\x28\xfa\x26\xe1\x1d\x42\x9f\x2e\xf0\x84\x24\x6f\x13\x39\x01\x5d\x5b\xe3\x3c\x78\xeb\x4c\x36\x00\x41\xcf\x60\xcf\xaf\xb0\x0c\x6b\xbd\x17\x79\x5d\x6e\xc0\xaa\x79\x96\xaa\x9f\xef\x30\x51\x57\x2b\x64\x9b\xa9\x36\x55\x10\x09\xaf\xbd\xa0\xd2\x46\x9d\x81\x2d\xbc\xfe\xaa\x36\xe5\xed\x06\x12\x14\xfc\x68\x18\xc7\xce\x15\x3f\xd6\x4e\x65\x6b\x90\x81\x96\x55\xf0\x86\x53\xc4\x38\x23\x88\xca\xe2\x65\x55\x4e\x87\xf2\x10\x3d\x5a\xc4\x37\xc6\x17\x5f\xa5\xcb\x17\x5f\x7a\x69\x4b\x4b\x01\x9e\xe0\x6d\x03\x2e\xbf\x9b\x11\xad\xa8\x62\xb1\x00\x88\x4f\xc3\x87\xcb\x32\xdd\xda\x71\xee\x5d\xe0\xbe\x77\x08\xae\x41\xa4\xae\xe2\x08\xc4\xc8\xca\xe0\x90\xc1\x41\xb5\x2f\xd9\x8f\x2c\x4c\xcd\x88\x79\xcb\x06\x10\x22\x95\x28\xc5\x19\xf8\xf4\x18\x57\xc5\x57\x06\x76\x49\xf9\x2d\xec\x39\x41\x5c\x9a\x1a\x5a\x0d\x2b\xb0\xce\xb4\xe3\xae\xdf\x62\x5d\xcb\xf0\x96\x0e\x9a\x77\x46\x9f\x08\x73\x34\xdd\x73\x67\x42\x0f\xca\x75\x9a\x2c\x8e\x30\x84\x19\x93\x38\xf4\x7c\xac\xe6\x48\xc6\x20\x73\x08\xf6\xc8\xf6\x4b\x76\x5f\x1b\x46\x63\x40\xd2\x4a\xe8\xf6\x2e\x30\x3c\xa4\x52\x8b\xdb\x6b\x32\xc1\xb1\x44\xbf\x63\x5c\xfd\x2e\x40\x36\x76\xc6\x0b\xf8\xd4\x99\xa0\x7a\x4b\x25\x5b\xe0\xd0\x5a\xc2\x41\x38\x40\xd8\x5a\xbb\xf2\xbb\xc6\x06\x14\x81\xef\x2f\x2a\x8d\x0e\x96\xb3\xe0\x9a\x6a\x5e\x75\x1e\x7b\x54\xbd\x16\xaa\x06\x4f\x53\x56\xaf\x38\xe9\x25\x43\xa7\x5c\xe7\xa2\xf7\x7b\xd1\xca\x35\xbf\x84\x08\xb0\x0b\xb5\xa5\xad\x23\xa7\xd6\x80\x20\xd7\xdb\x25\xb6\xc9\xf3\x6c\x92\xcb\x45\x39\x74\xcd\x96\xc1\x68\x40\xf9\x3d\x1e\xb1\x8f\x5c\xd8\x2b\x58\xda\x3a\x03\x13\x1c\x3d\x1e\x11\x16\x23\x9c\xab\xb9\x41\xdb\xb5\x7e\x85\x85\xa5\x06\x2d\x69\x00\xd9\x78\x28\x0d\x2a\x23\x2c\x62\x57\xf1\xe2\x89\xbb\x51\x8c\x58\xd0\x08\x54\x32\x80\x42\x4f\x50\xaa\xb6\x49\xd5\x24\x52\xeb\x57\x4d\x6b\x51\x57\x84\x75\xa9\x04\xeb\xea\x73\x56\x2a\x2a\x0b\x35\x18\x20\xc0\x89\x4f\x97\x57\x67\xe8\xac\x8d\x4e\xbf\xd3\xf4\xbc\xec\x85\xe8\x59\x8d\xc2\x98\xa4\xec\x0c\xb4\xa4\xf3\xad\xe3\xb5\x25\xd4\xe0\x69\x2e\x20\x5c\xb7\xae\xcd\xaf\xa3\x39\x4d\x0a\xdf\xc5\x37\x3d\x3f\x4c\xdd\x64\x42\x9e\x48\x62\x30\xeb\x23\x01\x91\xf9\xc6\x6a\xf8\x2d\xfa\x3f\xa6\x30\x29\xfa\xc3\x88\x7d\x02\x36\x9c\x24\x0b\x40\xd4\xf4\x2d\x63\x55\x69\xe6\xb1\x76\x00\xca\xa6\x02\xa1\xf2\x40\xcc\x5e\xcf\xf1\x13\x19\x31\xd7\xcc\xff\x41\x8f\xe8\xf7\xe8\x0f\x4d\xea\x9d\x0b\xb0\x7f\x61\x3b\xc7\xc7\x20\x7c\x3d\xb8\xe5\x2c\xa3\xb4\xfc\xc6\x99\x41\x4a\x46\xc8\x1a\x64\x0d\x0f\x8c\x4d\xd9\x13\x8f\x96\xb2\x38\xc2\x53\x8b\x05\x61\x6a\xcc\x78\x4c\xc6\xa4\xc6\xa5\xb9\x82\x49\x68\x21\xe0\x8a\xc7\x64\xad\x43\xd2\x33\xd3\x9f\xc0\x74\x23\xf3\x89\xdf\x0e\x48\xf0\xf7\xd9\xdc\xde\xfa\x50\xa6\xb4\xfa\x91\x7b\xf4\xd9\x6d\xc6\xbd\xad\x33\xd5\x85\x89\xf6\xe0\x42\xb0\x03\xa8\x77\xe8\x25\x58\x39\xf7\x7a\xf5\x38\x56\x1d\x01\xfa\x65\x3d\x73\x7b\x59\x05\xb8\xba\x50\xfb\x44\xd0\x19\xd5\xf2\x7b\x7b\x87\x2d\x70\xc2\x6d\xbc\x19\x06\x64\xb4\x95\x3b\xa3\x58\x0a\x07\xb4\x72\xe4\xe9\xaf\x70\x42\x4e\x78\x5e\x15\xe0\xed\x02\x50\x19\xba\xfb\xad\xac\xbe\xd0\x7c\x78\x66\x32\x00\xc9\x9c\x9a\x9c\xfb\xfe\xd9\x05\xd2\xa7\x83\xa7\x06\x98\x0a\x16\x2d\x57\x73\x2e\xe8\xaf\xab\x68\x1b\x0b\x45\xa7\x38\x52\xe3\xbd\xd4\x71\x69\x26\xa6\xbe\xed\x67\x78\xde\xda\xd4\x77\x87\x9f\x48\x10\x02\x08\x01\x7e\xb6\x15\xe9\x5d\xa9\x55\x7e\xcb\x05\x62\xfc\xb9\x00\xa6\x72\xdf\x03\x16\x73\x90\x3a\x81\xb5\xd2\x93\x41\x0c\xaf\xa4\x40\x9f\x00\x13\xf5\x95\x32\x69\x91\x00\x31\x6e\x00\x9e\x34\x79\xce\x31\x8b\x13\x77\x85\x20\x6e\x62\x6a\x16\xcf\x78\xb1\x91\x57\x3b\x8c\x6c\x2c\xf2\xe4\xcc\xf6\x97\x95\x20\xe0\x01\x46\x52\x53\x25\x65\xaf\x4e\x15\x45\x93\x1c\xa0\x6d\xf5\x9a\x4c\xf3\xc4\xd4\xc3\x88\xb8\x88\x4d\x41\x7a\x59\xca\xca\x83\xe8\x66\xa7\x35\x61\xe5\x1b\xa4\x16\x01\xd4\x56\xdc\x30\x86\xb1\x95\x72\xfd\x5f\x73\x92\xef\x29\xb1\xf1\x4d\x43\xc1\xef\xf1\x4c\x16\xb1\xdd\x66\x6d\xf4\x95\x57\xac\xef\x3f\xf4\x4c\x65\x90\x0a\xec\x0c\xb6\x1e\x59\xcb\x58\x3a\x4c\xbd\xd5\x8d\x0c\x65\xb7\xa6\xa2\xc0\x1e\x2c\x65\xaf\x11\x26\xb3\x2c\x7a\xd6\x70\x75\x4b\x7e\x4f\x3e\x31\x16\xbd\x8e\xf9\xc9\x95\x66\xa8\x08\x75\x2f\x68\x89\xda\xe2\xee\x58\xd6\x55\x56\x06\x9b\x17\x76\x29\x7f\x5b\xd4\xe4\xa8\x2b\x0e\xd9\x2c\xcf\x82\x02\xf0\xde\xa2\x78\xd9\x97\x16\x76\xb7\x70\xc8\x63\xb4\xf0\x67\xb4\x05\x08\x97\x71\x4b\xb8\xa8\xbf\x3a\x37\xb0\xeb\xd8\x86\xca\x5d\x2f\x87\x43\x34\x9d\x08\xc3\x92\x0e\xf5\x48\x2c\xa3\xee\xac\x3d\x0c\xbe\xc0\xca\xdb\xd8\x65\xbd\xc4\xf8\x7a\x27\xc3\x93\xe3\x38\xc2\xd1\xbc\x71\x52\x13\xce\x13\x82\x59\x93\x52\x50\xfb\xb8\x7a\x44\x0c\x66\x2c\xb0\xee\x24\x01\xe0\x64\xb7\x04\xb6\xd8\x66\xa1\x15\xb1\x18\x00\xef\x0d\x0f\x37\x21\x97\x6e\xa0\x8a\x30\x67\x50\xa3\x6c\x96\x90\xea\x5a\xd9\xca\x04\x3d\xdb\x49\x12\xe5\x49\x50\x6d\x33\x23\x42\x8f\x5a\x2f\xf1\x13\x61\x5a\x15\xb3\xe3\x70\x3e\xa2\x67\x97\x67\xee\x6b\x6c\xf5\x7c\xd7\xce\x4d\x09\xc9\x9c\xf1\x88\xc1\xc1\xe5\xe5\xc3\xaa\x69\x55\x6a\xed\x2d\x34\xf7\x6d\x7d\x3a\x03\x21\x62\xe3\xe3\x79\x57\xb6\xbe\x6f\x7c\x26\x4d\xdf\x63\x08\xdd\xd8\xd9\x63\x19\x78\xb5\x0a\x04\x0c\xb3\xb1\x0e\xe5\xec\x95\x6c\xf3\x10\x0c\x53\x8e\xe6\x0d\x62\x61\x9a\x50\xb6\x5e\xf4\x2e\x29\xaa\x8a\xb8\xdb\xa0\xe5\x50\x56\x46\x00\xb4\xf4\xe7\x83\xd1\x77\xd5\xb9\xbd\xb0\x52\x7d\xd9\x13\xee\xd3\xa6\x8a\xe8\x51\x5b\x37\x57\x09\x0c\xa0\x0f\x90\xaa\xff\x93\x31\x5c\x50\x69\x84\x7b\x57\x3d\x24\xcd\xd4\xc2\x16\x9b\x83\x7b\xb1\x24\xef\x03\x90\x5e\x9d\xd7\xbd\x7a\x47\xc6\x25\xbf\x7b\x5d\x67\xd0\x91\xb5\xd6\xd4\x36\xe9\x16\x3a\x04\x66\xa9\x00\x61\x34\x05\xd9\x98\xba\xbd\x63\x9c\x34\x9a\x08\xf7\xc0\x34\x41\x39\x2a\xc0\x2f\x2c\xa6\xae\x12\x39\xd1\xbc\x0b\x27\x49\x65\x5e\x18\xb2\xcc\x95\xaf\xdd\x37\x29\x0a\x0c\xb7\x8f\x01\x48\xf0\x84\x6c\xe4\xf5\xbf\x30\x1f\xac\xa4\x22\x78\x05\x02\xe6\xb3\x2c\x59\xb4\x0b\xd4\x0f\xb5\xdf\x5a\xec\xb9\x75\x03\x0b\x11\xeb\x56\xde\x4d\x65\xd4\xb7\xed\x86\x28\x49\x94\x0b\xaa\x16\x63\x6b\x4b\x6d\xcf\xb4\xee\xec\x97\x67\xf6\xc3\x36\x86\x8a\x53\xe4\xfa\x73\xb6\x5b\xb8\xa7\x04\x35\x85\x89\xec\x14\xda\x6c\x37\xce\xd5\xbc\x16\x93\x6a\xd5\xc2\x3a\x50\xac\x76\x43\xd5\x5d\x6c\x3b\x3c\x5b\xf0\x64\xcc\xa7\x0e\x6e\xaa\xfd\xc2\x56\x2b\xc1\x6c\x60\x84\x76\xa8\xd6\x99\xa0\x5c\xd8\x82\x2b\x6d\x62\x05\x53\xfc\x79\x9c\x61\x81\x93\x84\x24\x54\xa6\xdb\x9b\xcc\xff\xf4\xc7\x95\xa3\x3d\x33\x85\x81\xa4\x2d\xb3\xf5\x99\xa6\x79\x8a\x58\x9e\x4e\xac\x94\x8b\xe5\x63\x88\x29\xea\x10\x10\x0c\x34\x96\x1b\x60\x09\x87\x41\x04\x28\xb1\x23\x16\xe0\x85\x5b\x53\x05\x8e\xe6\x94\x3c\x01\x9a\xa9\x60\x44\xca\x63\x74\xc5\x15\x39\x45\x97\x38\xbb\x07\x41\xcd\x54\xea\x9c\x19\xa7\x03\x96\x48\x4b\xad\x39\xa3\xaa\x37\x62\x16\x64\xdc\xad\xca\x49\xc4\x99\x01\x9a\x8d\x60\x61\x7d\x13\x60\x45\x77\x88\xab\xca\xe5\x8b\x52\xd9\xb0\xd8\x02\x3f\x8f\x83\xa0\xe0\xb1\x49\xba\xd8\x80\x8e\x6f\xf1\xb3\x09\x83\x3f\xc7\x0a\x9b\x22\xbc\xab\x24\x77\x1b\x67\x66\x0b\x33\x19\x7c\x65\x17\x8f\xc3\x2d\xc8\x87\x2f\x29\x67\x82\x7e\xbf\xa6\xc7\xe4\x18\x7d\x97\xf0\x89\xec\x15\xa6\x2a\xf3\x50\x12\x25\x7b\xc6\xef\x07\xff\x36\x19\x76\xdf\xb8\xd5\x2f\xf8\x3e\x54\x53\x9c\xd2\xcf\x06\x5b\x44\xfe\xe9\xf4\xe4\x24\x5d\x1c\x4d\xf2\xe8\x91\x28\xfd\x17\xc8\x14\xb5\x2b\xe4\x80\xb9\x70\x1d\xcc\xd7\xba\xd5\x59\x86\x08\x6b\x45\x91\x36\x5b\x49\x12\x80\xa3\xd7\x57\xba\xaf\x57\xeb\x10\xa5\x38\xab\x2f\xc6\x69\xa7\x2c\xf2\xa6\xe3\x55\xc2\xb1\x7e\x1d\x6d\xc5\xd4\xe3\x0d\xe1\xb3\xa7\x09\x9e\x55\x54\x96\x0d\x94\x94\xeb\x94\x5a\x2a\xd2\x73\x87\x30\x16\x7d\xca\xca\xc1\x7b\x5f\x39\x2f\x2f\x78\x6b\xad\x17\xeb\x78\xc4\xfa\x12\x3d\x13\x53\x66\x17\x52\x3d\xc1\xe9\x93\x53\x39\xf7\x89\x9e\x60\x86\x86\x46\x0d\xca\xb0\x01\xa3\xb0\x8a\xa3\xd3\xac\x9c\x5b\xcc\x6a\xa0\x38\x91\xa4\xa7\x1b\x06\x93\xaa\x8b\xcf\x44\xcf\x02\x67\x19\x11\x23\x66\x11\x63\x01\x17\x9d\x73\x1b\x7b\xd3\x14\xa4\xdf\x69\x94\xaf\xab\x51\x06\x6b\x4f\xca\x79\xa0\xeb\xce\x37\xa4\x8d\xae\x5a\xe1\xba\x4c\x48\xb7\x7c\x5a\x16\x6d\x1b\x40\xff\xf6\x66\xe3\x96\x63\x5e\xa7\x9d\xf7\x2b\xd9\x0f\x50\xc5\x3b\x05\x05\x52\x16\xc5\x4a\x9d\xad\xcf\xab\xef\x25\x31\x07\x00\xc7\xe1\xe3\x98\x13\x19\x18\xf1\x91\xb7\xc5\x25\x74\x4a\xb4\xf4\x31\x62\x9a\x8c\x43\x87\x83\xc1\x2d\x77\x30\xe6\xba\xd3\x48\x70\x29\x6d\x42\x83\x69\x67\x75\x5a\xda\x0e\x25\x12\x0d\xf8\xfa\xf0\xfa\x6a\xbc\x5c\x2c\x31\x78\xe6\xca\x26\xda\x87\xb5\xd8\x05\x8d\x4d\xad\x2d\x92\x58\xac\xc5\x06\x65\x12\x4f\xce\x2e\x86\xbe\x36\x58\xa5\xeb\xe5\x3a\x89\x21\x60\x7d\x73\xa5\xc4\xe5\x19\x07\x35\x13\x2b\x4d\xac\xa8\x9a\xb8\x7e\xb3\xca\x61\xd4\xbb\xa0\x11\x56\xb6\x7e\x2d\x7f\x28\xd3\xcc\xba\x68\xff\x3d\x6d\x53\xc3\xb5\x12\x81\xc0\xf8\xd2\x81\x0b\x20\x78\xe9\xb7\xa4\xc2\x69\x16\x66\xb2\x3a\x38\x56\x3b\x4d\x73\xd4\x9a\x2e\xc1\x57\x85\x89\x8f\xb0\x09\x12\xaa\x0e\x6e\x69\x2b\x36\xf3\x78\xdd\x5b\xf4\xf9\x7d\x44\x87\xbf\x5e\x6a\x78\xb2\x28\x82\x21\xa5\x95\xdd\x5c\x65\xf3\x06\xbb\xff\x84\x78\xa4\xfd\xc6\x0d\xdd\x35\xf7\xd3\x23\x72\x09\x82\xa5\x75\x7f\x43\x8a\x64\x25\x7d\x6a\x03\xf3\xb0\x1f\xb3\x49\xb2\x3e\xf2\xb5\x2d\x82\xab\xc6\x96\x6b\x8b\xdc\x41\xa4\x42\x90\x27\x22\x80\x76\x6c\x28\x15\x2b\x1f\x55\x9c\x08\x82\xe3\x45\xb0\x22\x3e\x8e\xc3\xf4\x0c\xe6\x31\x49\x53\xad\xc0\x83\x6a\xc2\xf8\x11\xcf\x9c\xce\x52\x7a\x0b\x0a\x93\xd0\xa9\xbe\xb1\x82\x28\x10\xfd\x05\x3b\x22\x9f\xa9\x54\x5a\xae\xa8\x09\x81\x75\x8d\x80\xc4\x03\xe5\xca\xe6\xc4\xde\x70\xa3\x0f\xfd\xef\xae\x6f\xef\x07\xe7\xa3\x0f\x45\xd2\x83\xcb\xea\xf3\x40\x5b\xae\x6e\x02\x67\x23\xe6\xe3\x94\x3d\xae\x34\xec\x25\xc2\x71\x5c\x00\x46\x58\x25\xd2\xc8\x6c\x2b\x39\x72\x70\x2a\xd6\x46\x28\xaf\x68\xe6\x01\x52\xbb\x0e\xf5\x64\xad\x70\x9d\x95\x4e\x8e\x49\x50\x5b\x91\x49\xb4\xa7\xcb\x26\x84\xc4\x55\x46\xd7\x26\xca\x61\x36\x32\xf2\xec\x74\x25\xb8\x9d\x4f\xb0\xb9\x84\x37\xe3\x76\x6e\x43\xb6\xd8\xd4\x8f\xf4\x33\x89\x6f\x1b\xa4\xaa\xbd\x24\x0a\xb5\x0a\xb0\xac\xdd\x85\x9c\xd1\x4d\x34\x7e\x3f\x95\x07\xfd\x5d\x7b\xb6\x74\x5d\x20\xdd\x15\xa8\xb5\x00\x59\xab\x10\x46\x11\x11\x0a\x53\x86\xa6\x70\xb0\x59\xb4\x40\x80\x83\x42\xc0\x87\xfd\x47\x94\x52\x06\x80\x0c\xab\x96\xf6\xa1\x3c\x8f\x0d\x84\xd6\xcb\xe1\xd5\xc3\x7d\x49\x54\xfd\xfe\xfa\xa1\x5c\x2b\xbf\xff\xf3\x4a\x59\xb5\xd2\xc2\xaa\x60\xa1\x60\x8a\x45\x72\xa7\x05\xef\xf5\x2b\x53\x3b\xd1\x64\xa1\xc8\xc3\xed\xc5\x4e\xf2\x5d\xbd\xb3\xac\x11\x7a\x3d\x94\xae\xea\x81\x26\xda\x7c\x1a\x93\x68\x1d\x38\x6c\x7b\x3a\x32\x51\x50\x7a\x1d\xac\x35\xd1\x02\xc7\x61\x89\x32\x2c\xac\x1f\x2a\x36\x01\x50\xe5\x82\x6b\x46\xf3\x5a\x05\xcc\xf1\x89\xa8\x1f\xf5\xd5\xc7\xd9\x3e\x92\x4b\xac\x28\x0b\xfe\x51\x32\x7e\x32\x0d\x6f\x70\xd2\xec\x50\x56\x64\x10\x39\x61\x19\x7a\x40\xb6\x87\x10\xce\xe2\xd8\x14\xde\xef\xeb\xe6\x60\x45\x5c\x98\xa6\x56\x49\x39\xd3\x14\x69\x50\x6a\x1d\xb4\x6d\xd0\x1c\x9f\x9a\x8f\x5b\x02\xfd\x05\xc9\x02\xba\xad\x62\x29\x51\xff\x66\x58\xb3\xd6\x17\x55\x17\xd2\x97\x55\x25\x28\xf1\xde\xac\x7d\x63\x4f\x05\x59\x9f\x07\x01\x36\x65\x67\xba\x1b\xba\x94\x71\xfa\xdf\x94\x23\x09\x0e\x01\x04\xb9\x4e\x65\x28\x65\x73\xaf\xc1\x3b\xde\x2c\xc1\xb1\x58\x86\x0d\xb1\xa4\xc2\x01\xd9\xec\x9a\x10\x3f\x69\x39\x74\xbb\x17\xe2\x29\x71\x53\x87\xd8\xc6\x16\xec\x0d\x63\xaa\x98\x4d\x1b\x90\xa9\x1f\x0d\x45\x7b\x0c\x12\x40\x55\x71\x75\x2e\x5d\xc8\xb5\x85\x04\x08\xa7\x1b\x52\xdb\x66\xb8\x54\xc5\xf8\x9c\xf9\xdb\x42\x7c\xe3\x0c\x5b\xbb\x03\x28\x51\xae\x00\x45\x5d\xbd\xc2\xe3\x11\x0b\x02\x56\xa4\x51\x7b\xf4\x19\x71\x35\x5f\xa0\x90\x30\x03\xbc\x70\xc8\x7d\xf2\xc2\x4f\x69\x07\xaa\xc8\x03\x6a\x5e\xae\xda\xb2\xd4\x8f\x3d\x9d\x72\x8e\x5d\x7e\xa7\xb3\xa0\xd8\x38\xc0\xd0\xbe\x04\xed\x05\x75\x1a\x6c\xc7\x60\x8e\x06\xa3\x05\x0e\xaa\x00\x06\x98\x00\x31\x27\x92\x7d\xa5\x7c\x06\x2d\x4d\x16\x2e\xa4\xba\xe2\x1e\xd0\x52\x1d\xa6\xb6\xe5\xd5\x07\x7c\x0f\xa0\x57\x9b\x2a\x0e\xc1\xb1\x5a\x6b\xa6\x72\x3e\x5e\xa0\x84\x30\x16\x09\x3a\x6d\xb2\xaa\x7f\xce\x48\xb4\x0d\x32\xcf\x0d\x16\x38\x25\x8a\x88\x55\xe1\x48\xe5\x1a\xdd\x20\xe2\xb8\x1d\xb4\xfd\x9a\x5d\x34\x05\x4c\xaa\x95\x6e\xbc\x76\x7b\xb1\x0e\x69\xc7\xcf\x62\x23\x50\x31\x3d\x8d\x1f\xad\xe5\x7f\xc3\x59\xd8\x7e\x8a\x69\xd8\x68\xab\x00\x58\x69\xd7\x39\xbd\x0e\xc2\xcc\xfd\x12\x56\x4b\x29\x5c\xe8\x40\xa0\x65\xd6\x8f\xb2\x09\x53\x66\x1d\x2f\xdd\x0b\xef\x76\x19\x0e\x2e\x33\xb9\x72\xa8\x4a\xb9\x13\x40\x25\xa0\x52\x19\x78\x95\x7a\x5c\x18\x10\x5a\xea\x22\x24\x03\xb7\x9f\x45\x0d\x2c\x0c\xba\x56\xb2\xaa\xd6\xec\xaa\x2c\xd7\x1a\x1e\xb7\x2f\xcc\x8c\x4e\xa2\xd9\xb7\x44\xb3\x8e\x94\x4b\xd1\xb5\x9a\x3a\x89\xa8\xc0\xf7\xd8\x5a\xda\x16\x77\xa1\x3c\x41\x48\xe9\xb2\x57\xa4\x2d\xc8\x0b\x57\x3f\x65\xfe\x5f\x65\x0e\xee\x88\x3a\x24\xd5\xba\x5c\xd5\xe3\xc0\x05\x05\x1e\xa8\x24\x94\x06\x6c\x5c\x0d\x8c\xd6\x84\x41\x1a\x2b\xff\xf0\xca\x38\xb0\x20\x67\x7c\xc1\x73\xf4\x4c\xe5\x1c\x29\x3e\x62\x10\x27\xe8\xbd\x01\x8a\x23\xf3\x62\x0f\xde\x02\x74\x09\x99\x4f\x52\xaa\x10\x0e\x66\x58\x32\x49\xf6\xec\x79\xd6\x1f\xc0\x8c\x6b\xe1\x0b\xea\x90\x8f\xd6\x1c\x9a\x2d\xec\x6b\x45\x23\xbb\x22\x14\x04\x31\xcd\x2f\x8b\x51\x10\x68\x3c\xa1\x86\x59\x7b\xe6\x3a\x90\x02\x54\x6f\x6d\xb0\x58\xac\x00\x98\x4b\xa5\xaa\xdc\x2d\xd6\xd0\xb3\x06\xa0\xa0\xd8\x88\x56\x08\x05\xc5\xeb\xfb\x80\x28\x68\xaa\xfe\xb6\x2a\x65\xd5\x7d\xd2\x60\xff\x76\xa9\xd0\x8a\xbb\xc0\xf9\x50\x52\xba\x69\x94\x94\x0e\x0d\x2c\xae\x48\x08\xd8\x3e\xbc\xbc\x29\x7a\x19\xce\x78\xc4\x59\x4c\x37\x88\x17\x86\x0a\x5f\x93\x7c\xda\x67\x8b\xf5\xd8\x43\x69\x18\xa8\x6f\xed\x25\x81\x24\x52\x8f\x7a\xb9\x56\x65\x2d\xda\x0f\x29\x3d\x48\x09\x2d\xc3\x01\x91\xea\xed\xc4\xb8\x82\xbc\x9f\x08\xaa\xf7\x2f\xe5\xa2\x8e\x58\xbd\x94\xb4\x9a\x6f\xef\x9a\x46\xb2\x57\xe0\xbb\x80\x47\xb8\x59\x58\xab\xdb\x4f\x3e\x10\xcf\x28\xf4\xb6\x0e\x7f\x55\x0c\x2e\xdc\x90\x4d\x01\x54\x5a\x38\xda\x26\xd7\xbc\x86\x73\xd4\x0f\x7d\x29\xc9\x63\xed\xd9\xb5\x82\xc1\x1e\xd5\xcf\xa5\x1b\xa4\x75\x4e\x8c\x97\xe3\xed\x8d\x61\x83\xba\x63\x6f\x6b\xa8\xb8\x93\xb7\x29\x30\x0c\x80\xb2\x7b\x83\xc1\xad\x22\x53\xe8\xc6\x7b\xe0\x82\xb6\x63\xc7\x26\x1c\xc7\x83\xb3\x57\xf6\xa4\x34\x63\x13\x52\xf9\x22\xb3\xde\xb4\x2a\x74\xe0\x13\x15\x36\x26\x99\x86\xd6\x0d\x28\x07\x6d\x43\x39\x2b\xb7\x85\x17\x40\x73\x16\x13\xc1\x08\x56\xf3\xd7\xcb\x04\x39\xdb\xd5\x84\x1e\x8c\xef\x65\xb3\x42\xec\x48\x71\x39\x39\x64\x97\xe1\x96\xcb\xe3\xaf\x1d\xa7\x7e\xbd\x8d\x35\xcb\x06\x48\xf8\x02\xd1\x4b\xea\x6d\x8d\x69\x33\xc0\x1f\xda\x84\x4a\x77\x4a\x16\xa9\x57\x39\x5f\x26\x6d\xa6\xc6\x36\xb5\x94\x30\xa3\x4f\x7b\x58\x56\x7b\xcd\x92\x7c\x11\xf9\x29\x2f\x9f\x32\xb1\xaa\x80\x77\x1e\x64\x51\x40\x15\x75\x85\x29\xb3\xdc\x6b\x55\xe2\x84\x96\x7b\x53\x5c\x97\x2b\x71\xf0\x59\x38\x5f\x7c\x12\x4e\x97\x92\xd1\xa5\x64\xd4\xec\x51\x97\x92\x81\xd0\xa1\xa5\x64\xac\x53\x41\x57\x19\x69\xbd\xdf\x10\x0a\xad\x96\xaa\x1b\x99\xfd\x5d\xa3\x47\x6e\x9f\x76\xe0\xec\x9c\x61\xcc\x96\xfd\xc5\xfe\x50\x1b\xb6\xb5\xf4\x59\x75\xb6\xa1\xcd\x95\x2d\xaa\xae\x0b\x2c\xe2\xc4\x42\x10\xda\xa0\xea\xb2\x8d\x6c\x95\x39\x77\xc4\xbe\xe7\xcf\xe4\x89\x88\x1e\xc2\x0a\xa5\x1c\x70\xad\x8a\x18\x1e\x38\x08\x25\x34\x7b\x13\xab\x81\xd1\x15\x4e\x49\x6c\x8a\x5d\x06\xa1\x97\xd6\xa8\x6c\xdd\xc1\x75\x48\xbb\x00\x1a\x6b\xb6\xc1\xc5\x76\x8c\x98\x09\x87\x34\x21\x78\x20\x2b\x50\x37\x31\x20\x98\xdf\x79\x67\xf5\xef\x8e\xd1\xbd\xbe\x9f\xa8\x2c\x8f\x37\x00\xde\x6b\x1a\xdb\x88\xcd\x04\xcf\x33\x6f\xe7\xe3\x13\x53\xf5\xd8\x44\x68\x2d\x3b\xab\x61\x30\xce\x53\x1d\xe1\x58\xeb\xe2\xab\x09\xe7\x4d\x22\x65\xb7\x82\x59\x0a\x09\x48\x1f\x43\x1f\xfe\x67\xc3\xf1\x8d\x8f\x39\x00\x97\x59\x85\xc1\xff\x42\x0e\xf0\x73\x22\xc1\x2a\xe4\x3d\x03\xa5\x5c\xf7\x32\x9e\x42\xed\x38\x57\xd9\x6d\xbd\x6f\xc5\xf9\x1f\xea\xa1\x1a\x8a\xce\x6d\x5c\x9a\x49\xa4\xb5\xf7\xc4\x8b\x59\x74\x5b\x47\xf8\x36\xf1\x8b\x9b\x5c\x64\x1c\x24\xb1\x64\xe1\xa0\x25\x2c\xc8\x5f\xc6\xb3\xdc\xc4\xde\xd1\x30\x14\xab\x96\xb2\xa9\x54\x97\x58\x45\x73\xcd\xb9\x0b\x54\xb6\x3d\xc5\x24\x16\x5c\xf9\x65\xad\xbc\x35\x33\x38\x0b\x7b\x6f\x70\x7b\xac\xa2\x9e\x20\xc6\xd0\x07\x72\x7a\x49\x22\xd5\xfd\x19\xd7\xa0\xad\x65\x1e\xd8\x45\xdd\x27\xf6\x89\x9e\xe8\x3a\x2a\x5a\x37\xfe\x76\xb4\x55\x2e\xb6\xb6\xf7\x68\xc7\x1d\x60\x6e\xce\x2d\xa8\x58\xf1\xa2\x2d\xce\xdb\x10\xa2\x20\xe8\x76\x99\x4a\xb6\x40\xc2\x93\x16\x47\xbc\xc5\x35\xc5\x99\x56\x22\x14\xd7\xb7\xa4\x98\x19\x39\xd6\xc4\xf2\x22\x8c\x72\x41\xdd\xd9\xaf\xe4\xad\x37\x53\x07\x58\x28\x4f\xc2\x62\x5a\x11\x0e\xea\x0c\x9a\xa0\x04\x1c\xa9\x1c\xfb\xe0\x49\xa0\x09\x57\xff\xde\xe4\xe8\x3b\xe7\xbf\x70\xe2\x5d\xcd\x9e\xae\x25\xec\x1d\x76\x19\xd7\x61\x30\xb6\x3a\x69\x94\xcd\x02\x00\xc7\x7a\x2b\x71\x9b\xb2\x17\xb5\x5f\xb6\x2b\xdd\x51\xfb\xa9\x93\x7d\xb6\xf9\x76\x05\xc0\xd4\xd6\xf1\xe3\xa5\x58\x7c\x1b\xac\x6b\xa5\xa7\x10\x5a\xd3\xda\xef\x00\x78\x98\x42\x30\x01\xb6\xd2\xd4\x7f\xf9\xbf\x4c\x99\x34\xb3\x34\xff\x85\xb8\x18\x31\xf3\x7b\xcf\x97\x28\xd1\x2f\x14\xd8\xbf\x38\x25\x05\x8c\xa7\x28\x03\xfe\x01\xec\x89\x05\x6c\x33\x38\xcf\xbe\x42\x83\x1e\xc3\x63\x3e\x21\x82\x11\x3d\x34\x07\x90\xe0\x99\x59\x8a\x19\x9e\x01\xaa\x74\x0f\xa2\xf7\x40\x5c\x2d\x54\x11\x43\xd2\xa6\xd4\x25\x70\x2b\xcd\x2c\x6d\x4e\x70\x51\xf2\x19\xfa\x34\xa2\xac\x05\xb5\x2d\x42\x40\xea\xa9\xff\xd6\xf6\xbf\x9d\xc4\x7e\xdf\xbf\xfb\x61\x7c\x3b\xb8\xbb\x7e\xb8\x3d\x2b\x89\xed\x67\x17\x0f\x77\xf7\x83\xdb\xda\x67\x45\x3e\xed\x5f\x1f\x06\x0f\x0d\x8f\x5c\x03\x17\xfd\xef\x06\xa5\xfa\xe9\x7f\x7d\xe8\x5f\x0c\xef\x7f\x1e\x5f\x7f\x1c\xdf\x0d\x6e\x7f\x1c\x9e\x0d\xc6\x77\x37\x83\xb3\xe1\xc7\xe1\x59\x5f\x7f\x19\xbe\x7b\x73\xf1\xf0\x69\x78\x35\x76\xa1\xd1\xe1\xa3\x9f\xae\x6f\x7f\xf8\x78\x71\xfd\xd3\x38\xe8\xf2\xfa\xea\xe3\xf0\x53\xdd\x2c\xfa\x77\x77\xc3\x4f\x57\x97\x83\xab\xd5\x75\xda\xeb\x57\xa3\xb1\x04\x74\x70\x91\x05\x46\xa3\x40\x4c\x9a\x2c\x2c\x69\xd3\x5f\xc1\x77\x71\x63\xe8\xf1\xa8\xe7\xfe\x32\x55\xd5\x8f\x34\x0b\x74\x7e\xb1\x82\x7b\x8c\x98\x77\xae\xfa\x4b\x55\xe1\x99\x74\xe9\xd1\xa5\xd1\x9e\xa2\x3e\x9c\x15\x50\x18\x4a\x9d\x42\xf6\x85\x1f\xa9\x73\xc7\x03\x1d\x26\x34\xa5\xe0\x99\x47\x47\xa8\xba\xe1\xe5\x06\xed\x9c\x60\x08\xd6\x6f\x17\xaf\x3a\x0d\xb2\x9a\x79\x0d\x94\x72\x8a\x1c\x87\x26\xc6\x9c\x60\xf0\x71\x17\x0c\xa7\x34\xaa\xa6\x89\x00\x44\x2c\x2a\xe0\x50\xaa\x2d\x96\x08\xac\xdc\xf2\x9c\xa0\x1f\xfe\x52\x0c\x0a\x3c\x18\x56\xf3\xce\x97\x8a\x29\xda\x07\x22\x37\xab\xba\x8e\x3c\x4b\x3d\xb9\x63\x6e\x4d\xcb\x70\x6e\x6d\xd1\x76\x70\x37\xe5\x2c\x80\x44\x2b\xf9\x9e\xf4\xf1\x36\x33\xaa\xd0\xf8\x29\xba\x03\x38\x16\x59\xa8\xee\x7a\x17\xb3\x24\x9f\x51\x86\x68\x9a\x25\xc0\x63\x8c\x3e\x3f\x21\x73\xfc\x44\xb9\xab\x5c\x62\x0a\xbc\xc0\x3a\x5a\xd1\x0a\x1d\xa1\xc6\x83\x72\x8a\xfa\x71\x2c\xcb\x0c\xae\x44\x39\x8e\x65\x1e\x95\x87\x1d\xa2\x98\xb1\xd8\xb3\xcd\x0a\x1d\x15\x47\x0e\x56\x6c\xff\x80\x33\xcb\xec\xb0\x7c\xf7\xee\x70\xfd\xeb\x15\x1c\x3b\x52\x1e\x6f\x25\x0c\xdc\x63\xf9\xe8\x58\xf3\x3a\x81\xc0\x41\xff\xec\xd6\xa3\xc5\x00\x6a\xdb\xa9\x5f\xd9\x31\x1c\xb4\xed\xfa\x6c\x44\xae\x5e\xd3\xa5\x9b\x71\x52\xa9\xda\xd6\xba\xbf\x52\xd5\xb7\xda\xce\xf6\xea\xed\xa9\x97\xc6\xe0\x48\x8e\x3d\xfd\x6f\x30\x8f\x1b\xf8\xf4\xda\x7f\xb9\x52\x64\x1b\x07\xeb\xb6\xa9\x0f\x68\x29\x91\xd8\xfa\x81\x56\xd2\xe1\x9e\x20\xa8\xda\x0b\x83\x50\x73\x83\x46\xe0\xee\xc3\x94\xd9\x4a\x4c\xc4\xfb\xa3\x5c\xed\x71\x7d\x8e\x7d\x75\x40\x3c\xe1\x4f\x25\xe5\x32\x25\x52\xe2\x06\x50\x95\xc0\x24\xb6\x0b\x63\xf0\x27\xd4\x7e\xd8\x92\x9e\xdc\x99\xbc\xd7\x5f\xad\x32\xfa\xdc\x86\x9a\xb1\x9b\xa8\x16\x58\x63\x17\x0d\x8c\xae\x4d\x4e\xa0\xe6\x2f\xbd\x22\x98\x86\x8b\x20\xc6\xa8\xc9\xfd\xd3\xd2\xac\x56\x5d\xb0\xda\x02\x5b\xa1\x0b\x6f\xf3\x18\x9c\xa0\xf5\xad\x51\xbb\xad\x5f\x05\x97\xd7\x67\x03\xaa\x2b\xf9\x3b\xc3\xe2\xe3\x11\x4f\x53\x23\x17\x94\x6c\xa9\x3d\x84\x4d\x2a\x66\x21\x4d\xc9\x3c\x9a\x1b\x2f\x93\xbe\x32\x7a\x23\xf6\x1c\x6c\x48\x29\x58\xb9\x1f\xb6\x04\x88\xa7\x9f\xf5\x71\xa3\x4f\xa5\x10\x70\x10\x19\x29\xc4\x23\x07\x84\x60\x1c\x82\x45\xe5\xb0\x35\x04\x1e\xec\xd7\x0e\xa4\xbe\x45\x99\xc8\xca\xfa\x36\x15\x8b\xf4\x73\x0b\x6a\x34\xee\xa0\x29\xb7\x1d\x42\x50\x26\xb2\x6e\x04\x7b\xa8\x12\xf9\xaa\x10\xe4\x3e\xa5\xd4\x64\x20\xa7\x13\x8b\xa3\xa1\xa7\xeb\x56\xfb\xf7\x6e\x46\xbf\x37\x7e\x87\xbc\x01\x78\x25\x68\xcd\xa3\x90\xa3\x23\x2d\xb3\x3a\x40\x00\x1b\x88\x21\xd1\x91\x41\x36\xfc\x0a\xa2\x41\xfb\x37\xc3\xaf\x7a\xe8\xab\x30\x23\xee\xab\xad\x0e\xa0\x1d\xb7\xad\x14\x09\xda\x54\x29\x2d\xa2\x7c\xec\x60\xaf\x2a\x27\xd1\xee\x99\x3d\x88\xa8\xe9\x1c\xea\x2f\x4b\xdf\x80\x73\x1a\x2a\x1f\x1a\xff\xad\x0f\xca\xb6\x2e\x20\x23\xe3\x52\x59\xb3\x76\xf1\x88\x4d\x16\x55\x27\x4f\xcf\x7b\x79\x5a\x9f\xd2\x9d\xab\xf9\xe9\xf6\x96\x53\xa8\xf7\x1c\x2c\xbc\xfa\x3e\x58\x93\x94\xdd\xf7\x25\x67\x0a\x2e\xd6\x14\xa5\xd0\x45\xd9\xd7\xcd\xaa\x64\x2f\x73\x8b\x59\xbb\x29\xeb\xe4\x9f\xf7\x46\x6e\x2d\x42\xd3\xfb\x75\x2b\x62\xb3\x12\x1a\x84\xeb\x8e\xca\x5e\x96\xca\xf6\x91\x95\x51\x1e\xdc\xe6\x17\xe8\x99\x91\xe3\x82\x66\x9c\xc1\x55\x2b\x13\x9e\xc1\x97\x4a\x3e\xae\xaf\x95\xbc\xa1\xcf\x37\x58\x93\xf5\x4e\xdf\x3b\x13\x38\x60\xdc\xae\xcb\x63\xad\x0e\xb5\xaf\x6c\xa1\x24\x4e\x4d\x06\xa6\xa2\x29\xe9\x99\xca\x5c\x45\xb0\x83\x3d\xaf\x40\x6e\x26\x46\x69\x4e\xa8\x70\x9d\x58\x1c\xc4\x8d\x52\xf6\x37\x94\xc6\x9b\x68\x64\x87\x48\x93\xab\xfe\xe5\xe0\x7c\x3c\xb8\xba\x1f\xde\xff\x5c\x83\x71\x59\x7e\xec\x60\x2e\x83\x17\xee\x7e\xbe\xbb\x1f\x5c\x8e\x3f\x0d\xae\x06\xb7\xfd\xfb\x35\x10\x98\xab\x3a\x6b\x82\x57\xcc\x65\x9d\xfa\xb6\x09\xc4\xa2\x33\xf3\xd6\xf4\xbe\x0c\x84\x19\x74\x42\x49\x03\x18\xa6\x81\x27\x60\x31\x11\x28\x26\x4f\x24\xe1\x59\x61\x56\xad\x5d\xb0\x00\x25\xb3\xa6\xfd\x55\x48\x99\xd0\x66\x75\x8d\x4f\x91\x29\xf3\x17\x54\x3a\xf6\x0d\x82\xc8\x87\x05\x61\x5f\x29\x44\x3e\x67\x09\x8d\xa8\x0a\xd2\x17\xb9\xb0\xee\x15\xe3\x3e\x84\xe8\xd4\x35\xc4\xb5\xb7\x68\x94\xbd\xeb\xfc\xa1\x27\x7d\x59\xdb\xf7\x27\xca\xa3\xb6\xad\x2d\x72\xb4\x07\xc5\xbe\xc1\x69\xbc\x04\x2a\xb7\xc5\xe8\x5e\xc2\x3c\xb0\x9c\xa3\x63\x53\x10\x1b\x00\xe7\xea\x07\xb9\xfe\x36\x5c\x15\x27\x53\x3a\xd7\xab\x03\x65\xda\x51\xea\x1b\x87\xbb\x94\x6a\xaa\xee\x01\x1d\xc4\xc6\xae\x6f\x18\xb0\xb0\x54\xd3\x86\x99\x98\x53\x8c\x04\x49\xb9\xd2\x0a\x98\x89\x08\xe8\x69\xa1\x8a\xe2\x84\xfe\x0a\x38\x5a\x82\x1c\x07\x11\x14\x0e\x7d\xac\x70\x1f\x58\x8c\x8b\xe3\x11\x3b\x1f\xdc\xdc\x0e\xce\x34\x43\x3a\x46\x0f\x12\x20\xb2\x4a\x53\x3f\xb7\xe4\x6d\xc4\xb1\x30\x92\x81\x32\xa9\x08\x6e\x0a\x06\x23\x42\x70\xd1\x9e\x3f\xf8\xfe\x06\xf0\x5d\x3d\x79\xc3\xb3\x92\x6d\xca\x19\x00\xae\x1a\x0b\x62\x07\x39\x03\x7b\xcf\xc9\xba\xc5\xcf\xa5\x15\x09\x21\x42\x40\x12\x29\xaf\xfa\x0b\xae\x36\x80\x8c\xb6\x9f\x5f\xa9\xcf\x1b\xf8\x76\xd5\x3c\xef\x21\xc4\x4e\xaa\x02\xb1\xd4\x80\x9a\xfa\xca\x3c\x95\x79\x36\x8a\x8a\xe2\x2d\xe0\x44\x2a\xa4\x3f\x21\x33\xcc\x90\xc8\x19\xab\x40\xd8\x86\x96\xb6\xe5\xa0\x99\x4d\x8f\xaa\x5e\x33\x9c\xf2\x9c\x99\xd2\xb2\x7a\x54\x35\x83\x91\x19\x61\x6a\xcd\x60\xde\x0a\x2c\xa6\x32\xd4\xc3\xc5\x8b\xa9\x19\x68\x13\x64\x4c\x9d\x3f\x09\xaa\x6e\x6f\x76\x2d\xbb\xa0\xbc\x92\x53\x49\x1f\x2a\x7f\x3f\xd7\x6b\xd9\x58\x3e\xee\xdc\xdd\x3d\x96\x8f\xeb\xbb\x8a\x49\xf4\xb8\xe9\x65\x53\xcd\xcc\x4c\x6c\xd1\xf2\x25\x63\xdf\x42\x3f\xb5\xe5\x63\xa0\x56\x7d\xf4\x88\xbe\xbf\xbf\xbc\x40\x53\xaa\xe5\x5e\x7d\xad\x5c\x61\x2d\x63\x3f\x88\xc4\xd9\x85\xad\x6d\x35\x17\x89\xbf\x7b\x61\xe3\x9d\x28\x15\x48\x09\xfa\x46\xc3\x33\xe2\x8c\xbd\xc2\x22\x02\x56\xca\xc7\x08\xcc\x62\x9e\x9a\x79\x9c\xc8\x7c\x3a\xa5\x9f\x8f\x15\x16\xdf\x34\xac\x87\x89\xaa\x18\xff\x9d\x4f\xc6\x7a\x44\x3b\x5e\xc4\x75\xcd\x21\x5b\x4b\xdb\x2f\x9b\x9d\xd9\xb9\x79\xf7\xff\xf2\x09\x64\xbb\x43\xc2\xbe\xf3\xce\xd9\x48\x05\xfb\x8a\xa3\xa4\xa2\xb8\x74\x09\x88\x25\xe2\x42\x10\x9b\x24\x6f\xea\x9f\x66\x58\x28\x0a\xd6\x5a\x07\xe4\x52\x42\xf0\x2f\xb6\x28\xac\xf6\x3e\xc7\x05\x5a\xf6\x84\x10\x70\xf0\x64\x34\xd9\x4c\xe9\x3d\x2b\xf9\x26\x2b\x27\xd0\x46\x9e\x5a\x6c\x4f\x30\xc8\xac\x15\xb1\x06\x4f\x84\xa9\xbd\xe8\x27\xd0\x44\x4d\xda\x7e\x3b\x2f\x83\x29\x43\x3a\x3c\x2f\x2e\x37\x17\xd2\x1b\x46\x35\x29\x81\xe1\x9e\xb7\x89\x52\xd6\xa5\xde\xe4\xe8\x7f\x6a\xed\x3b\x86\x57\x97\xd7\x65\x4d\x68\xbc\x5d\xed\xa2\xca\x7b\x11\xd6\xea\xca\x0f\x6c\x09\x36\x24\x89\xb1\x62\x04\x20\x17\x56\x39\xad\xee\xb9\xe9\x53\xd3\x56\xa5\xcb\xb5\x5b\xbe\x05\xb2\x4e\xa9\x99\x4f\x04\x52\x3a\xf7\x11\x88\xbe\x49\xee\x3e\x0c\xe4\x41\x24\x10\x42\xbd\xd2\x8a\x65\x4a\xa1\x6b\xce\xe7\x25\x3b\xdc\x42\x46\x37\x83\xd1\x42\x23\xc9\x04\x89\xf4\x55\x76\x8a\x6e\x12\xa2\x25\xaf\x5c\x4b\x5f\x79\x92\x38\x14\xb2\xd5\xd2\xe1\x46\xc8\x79\x2f\x3e\xaf\x40\xf7\x58\x31\x31\x87\xc2\xb7\x7a\x66\xc1\x1a\xec\x1f\x71\x21\x58\x5f\x30\x21\x83\x21\xb1\xac\x45\x02\x87\x5f\x98\xb8\x59\x30\x25\xe1\xd2\x45\x46\x7f\xd5\xec\x57\x10\x39\xe7\x8d\x49\x8e\xe1\x6c\x5f\x66\x0e\x6e\x29\x5f\x70\x12\xee\x3e\x6c\x8a\xab\x6e\x21\xd7\x54\xee\xc0\x92\x88\xb3\x6a\x8a\xbe\x42\x85\x8f\xfe\xb0\x98\xb0\xf6\x6e\xb5\x43\x83\x5b\xb2\x30\xb5\x85\xf8\x6c\x85\xeb\xa2\x50\x66\x16\xc6\xf7\xea\x3f\x2f\x0c\xc8\x45\x4a\x00\x55\xb2\xa8\x8c\x87\xf4\x5d\xdb\xb4\xc5\x7a\x9e\xe3\x5c\x6c\x04\x49\x51\x20\xab\x6f\xc2\xb9\x6d\x32\x4a\x31\x2c\xbd\x08\xf5\xec\xd2\x16\xbc\x00\x31\xda\x86\x1a\xc9\x12\x5a\x9d\x25\x1b\xb3\x8c\xb5\x2a\x5e\x33\x53\xde\xd5\xad\x06\x52\x72\x21\xca\xbc\x94\x77\xad\x44\x81\xa5\x09\x74\xf8\x67\x9b\xe3\x9f\xd9\xea\x27\x9e\xf6\x00\xad\x50\x09\x48\xfc\x2f\x1c\x68\x55\xc1\xc1\x1a\xbd\xd7\x65\x3e\x95\x76\xa7\x55\x9a\x53\xe9\x0b\xcd\x4b\xce\x77\xf4\xc0\xe9\xc9\x2c\xc6\x90\x38\xba\x4b\x14\x4e\x69\xfe\xc6\x7b\x00\x6d\x92\x18\x19\xf4\x02\x83\xce\x6c\xd7\xce\x7b\x4e\x32\x2c\x08\x53\x23\x76\xab\x47\x61\xbe\x28\x22\x31\x5c\x1c\x8e\x43\xcc\x87\xba\xba\x53\x84\xed\x57\xb0\xe8\x4d\x81\x70\x72\x6c\x5e\x02\xd5\xf4\x05\x93\xec\xbf\x33\xef\x18\xcc\x03\x8b\xf9\xa3\xa7\x4a\xa7\x85\x1a\xaf\x05\xc8\x68\x4e\x01\x72\x20\x26\xd2\x5e\x48\x54\x59\x4c\x09\x2f\x7e\xe7\xc4\x61\x44\xc3\x67\x9e\x7f\xd5\x31\x6c\x67\x28\x60\xce\x40\x27\x47\x2c\xe8\x63\x05\xa4\xa8\x51\xd6\xb7\x54\x25\x60\x9f\x69\xec\x1d\x5f\xf0\x4f\xb3\x43\x5c\xd0\x19\x65\x41\x61\x27\x3b\xbd\x14\x67\x60\xde\x35\x67\x90\x4f\xfd\x9d\x76\x6f\xb3\x0c\x8e\x61\xc4\xff\xf3\xdf\x7f\x3b\xa6\x4d\xde\x0f\x39\xb6\x2b\x70\x08\x3b\xb9\xd9\xb6\x84\x3b\x1f\xa0\x88\x34\xa0\x53\x04\x3a\xad\x2c\x65\x4e\x14\xbf\xda\xcb\x4d\x13\x0d\x57\x73\xe3\xee\x2d\x93\x3b\xf8\x46\x44\xbe\xe2\x6c\x98\x2b\xe6\x6d\xd7\x92\x4a\xc8\x0e\xd0\x23\x31\x27\xd9\x1b\x08\xc2\xa2\xe9\x4b\x66\x9a\x11\x2b\x3e\x91\x06\x0f\xc5\x40\xd0\x9a\x1f\x8a\xd5\x69\xb9\x30\xab\x78\x7f\x11\x29\x51\xb8\xc3\x83\x68\x64\x57\xe2\xc3\x44\x91\xea\xf6\x2b\x37\x6d\x85\x73\x07\x58\x8c\xbb\x44\x6d\xce\xb1\x7c\xb9\xd0\x9c\xda\xd2\x54\xc6\x9a\x1e\x0a\x0f\xeb\x82\x74\xcc\x20\x4d\xb6\xa7\xde\x90\x5c\x12\x61\x38\x9d\x87\xc3\xb2\x94\x10\x22\x4d\x42\x8c\xe6\x1a\x5f\x23\x49\x31\xdd\x28\x9f\x40\xbf\x5f\x8f\x83\x59\x72\x36\xe0\x19\x11\xe3\x38\x57\x4b\xc7\x62\x55\x8c\xbf\xfe\xe8\x3c\x57\x8b\xf5\xed\xcb\x04\x2f\x97\xe6\x59\x85\x3d\xaa\xdf\x6f\x68\x76\xbd\xc4\x1c\x84\xf8\x94\xa5\xe6\x06\x64\x4f\x52\x41\xf6\xb4\x31\xa7\x25\x13\x09\xdc\xc0\x4c\x01\xa4\x5e\xa1\x49\xd9\x2b\xda\xe0\x8f\xc3\xc8\xd1\x24\x2f\x4c\x4a\xbe\xa2\x43\x7c\x3c\x62\x1f\x4d\x49\x14\xd0\xf2\xcc\x00\x22\x48\xf8\x21\x9f\x33\x2e\x49\x29\x03\xad\xa6\x4a\x83\xcd\x20\xb5\xc3\xa8\x17\xd6\x8b\x8f\x76\x97\xd5\xdf\x1c\xa3\x75\x79\xc3\x97\xa7\x5c\x4f\x81\x3b\x89\x83\x11\xcd\xa8\xa6\x9d\x71\xed\x49\x7b\xb9\x4a\xc1\x45\x4c\x17\xe0\x60\xa9\x64\xd1\x43\x7e\x7a\x15\x82\x48\xc8\x13\x01\x73\x3a\x8c\x31\xac\xc5\x51\xb6\xeb\x35\xb0\x93\x75\x07\xa8\x48\xff\x04\xb6\x80\xe2\xea\x08\xca\x49\x72\x75\xb4\x58\x4e\xff\xd9\x39\x53\xad\x2e\x30\x65\x03\xf1\xbc\x1f\xd6\x24\x59\x10\x85\xc8\x67\x45\x6c\xd5\xd2\x7b\x97\x4b\xb8\x9c\x7e\x80\xea\xd3\xa1\x9a\x65\xc7\x17\xaf\x1f\xdd\x77\x19\xe4\x2e\x59\x32\x76\x57\xbe\x4d\x1e\x9c\x63\x16\xdb\x8c\x58\xab\x64\x68\x61\x0b\x66\x67\x8c\x6e\x3e\x57\xc0\xe6\x75\x06\x60\xee\xa6\x4d\x83\x3a\x0f\x17\x99\x53\x18\xb5\xca\x02\xe1\x15\x5c\x68\xc9\x3d\x67\x8a\x26\x9a\x38\xec\x18\x24\x9a\x42\x64\x9c\x05\x2a\x84\xc8\xf6\x26\x2c\x3c\x2a\x25\x65\xb3\xb1\x5d\x49\x97\xdc\xd9\xee\x62\x28\xd3\xd4\xa5\x69\xca\xfc\xf8\x9d\x6b\x68\xb5\x51\xdd\x90\x35\xe0\x94\xb9\xb4\x52\xd0\x38\x18\x77\x93\xb1\x00\x73\x2e\x1b\x75\x4c\x63\xb3\x14\xd4\x14\xc7\x86\x89\x6e\x62\x77\x07\x99\x6e\x19\xc7\xa1\xb8\x42\xa4\x4d\x15\x35\x09\x60\x10\xa9\xaf\x1a\x72\x61\x65\x63\x0e\xec\x90\x79\x11\xcd\x96\xe6\xf2\x99\xfe\x95\x74\x5a\xec\xba\xb3\xe9\x08\x38\x49\x26\x38\x7a\xf4\x5a\x98\xb7\x45\x70\xe1\x4a\x1b\x68\xb9\x12\x6a\xb7\x19\xe2\xd2\x03\x8d\x40\xba\x09\xbd\x85\x06\xc9\xc7\x0e\xbb\xe8\xdc\xac\x9a\x85\x48\x33\xd0\x4d\x66\xf4\x26\xb7\x21\x26\x59\xc2\x17\x69\xc3\x7d\x56\x4d\x21\xdc\x25\x52\xa7\x29\x83\x71\xaf\x57\x59\x85\xe9\x6d\x7c\x99\x2d\xe5\x23\xed\x01\x57\x6a\x03\x2e\xf9\x29\xe1\x13\x30\xa9\x5a\xf3\x83\xcb\xb1\x09\x52\x3d\xaa\xe7\x79\xd3\xcc\x9f\xea\x89\xa4\x32\x4b\xb4\x32\xd3\xdc\x83\xc9\x39\x79\xd9\x7d\x33\x18\x05\xeb\xad\x83\xed\xa3\xb5\x6b\x3f\x7f\x09\x04\xe3\x0b\x27\x09\x98\x77\x0d\xff\xaa\x58\xd9\x4c\xb2\xdf\xb1\x71\x52\x2b\x3e\x62\x0a\xcf\xdc\xe6\x5a\xe1\x92\x3f\x33\x22\xe4\x9c\x66\xa5\x9a\x8e\x3b\x87\x87\x5b\x8a\xb6\xff\x31\xc1\xd0\x1b\xf0\x4e\x9e\x1d\x19\x84\x12\x4d\x1f\x32\xc3\x51\x61\x15\x8d\x12\x2c\x25\x9d\x2e\x02\x60\x11\x1f\x69\x0b\xe9\x5b\x65\x33\x42\x50\x46\xad\x8e\xd1\x98\xf1\xed\x27\xb3\x7e\xf7\xac\xc2\x87\xf2\xf1\xa3\x71\x88\xe0\xa6\xef\x93\x65\x14\x19\x77\x53\x5b\x34\x99\x46\x24\x5a\x03\x21\xb0\x5d\x26\xfc\x4a\xf0\x9f\x66\x33\x42\x21\x4c\xda\x61\x5b\x45\xc6\x03\x7e\x84\x60\x38\xaa\x94\x4a\x09\x9b\xaf\x15\x27\x67\x17\xd6\xc4\xe9\xc1\x42\x00\x53\xa1\xf8\xb8\x87\xe4\x4e\x20\x5b\x6d\xe8\xe2\x9c\x24\x64\x2f\x11\xd7\x5b\x10\x49\x35\x9c\x21\x20\x8f\x95\xa4\x51\x94\x19\x58\x6f\x5c\xd8\x22\x10\xbc\x01\xaa\xa7\x7e\xe8\x3f\x99\x81\xda\x58\xf0\xba\x5d\x04\xc3\x20\xac\x72\x5b\xdd\xa5\x0e\xf3\xcf\xb4\x60\x49\xae\xe8\xa6\x44\x57\x45\xa7\x5e\x5e\x39\x44\x52\x7b\xe3\x90\xe9\xa5\x71\x7d\x22\x6d\xc2\x3b\xd6\x1e\x80\xad\x38\xd0\x32\x9f\x6e\x47\x17\xd6\x81\xaa\x38\x9a\x11\xc0\x64\xa1\x2c\xa6\x4f\x34\xce\x71\xf2\xae\x68\x62\x6f\x09\x1f\x7b\x5a\xfd\xfa\x43\xbe\xd9\xa9\xbd\x23\x4a\xba\x2b\x61\x09\x46\xd1\x6e\xce\x01\x6e\xc1\x61\x1c\x4b\x23\xb8\x7e\xf1\x72\xcb\xce\x20\x09\x76\x64\x16\x2a\xe0\x37\x24\x50\x99\x39\xc6\xf6\x0b\x0f\x0b\x50\x02\xc4\xc2\x25\x10\x41\xb3\x46\x6f\xcf\xf5\xaa\xa4\xfd\xa5\x8b\x5e\x9b\xd3\x78\x75\x54\x05\x75\x77\xf2\xe0\x66\xf2\xa0\x03\xd9\x3c\xc0\xcb\xbf\xe9\x18\x1c\xe6\xfd\x73\x00\xc2\xe1\xd2\x95\xb8\x3f\x11\xf1\x1d\x91\xc9\x41\x48\x8a\x4b\x5b\xf1\x5a\xf2\xe2\x91\x43\x39\x2a\x30\x83\x0e\x77\x8b\x0e\xe3\x24\xdf\x5a\x37\xd0\xcb\x5d\xb0\xeb\xe9\x65\x2f\xf4\x01\x80\x9f\x18\xf2\xa2\x73\x5b\x41\x04\x0e\x6f\x10\x4b\xb7\xe4\x7b\x58\x13\xa5\x68\x87\xd7\x2a\x3e\x71\x69\x39\x5f\x62\x7b\x6d\x12\x5c\xeb\xcd\x7d\x49\x52\xdb\x74\x2c\xfb\xd0\x51\x5e\xd8\x8b\x63\xa9\x31\xf8\xa0\x0b\x16\x6e\x77\x8b\xd6\x40\xeb\xb8\x2d\xdb\xe7\x21\xab\x2b\xfb\xb6\x7b\x1a\xbf\xcb\xf1\x1b\x67\x82\x4c\xe9\xe7\xad\x44\xf1\x1b\xf8\xd4\xaa\x97\x7a\x99\x2b\x85\xe4\xc0\x3d\x03\x85\xe7\x82\x80\x46\xbb\xd2\xb6\xd8\xd4\x88\x15\x99\x91\x36\x2d\xf2\x91\x2c\x10\x17\xa5\x9f\xb6\x05\x81\xdc\x7f\xd1\x3b\xb3\xaf\x73\xa5\x32\x79\x7a\x72\x32\xa3\x6a\x9e\x4f\x8e\x23\x9e\x9a\x38\x7c\x2e\x66\xe6\x8f\x13\x2a\x65\x4e\xe4\xc9\x1f\xff\xf0\x87\x62\x8b\x27\x38\x7a\x9c\x19\x58\x9d\x65\xbf\x53\x79\xcb\x09\x96\xbb\x45\xf6\xb8\x14\xb6\x17\x4e\x65\x0e\xba\x71\xc9\xa3\xfa\x1b\xa9\x70\x9a\x85\xa1\xa0\xa6\x6c\x9c\x54\xb8\x28\x56\x01\x79\x89\x7a\x9a\x68\x8e\xb3\x8c\xb0\x66\xb3\x83\x49\x34\xdd\x81\xf5\xb8\x54\x55\x3b\x42\xf2\x39\x4b\x30\x2b\xc3\x2f\x40\xe5\x25\x41\x22\xc2\x94\x85\x06\x28\xca\x5d\x03\x35\x1a\x08\x20\xc3\xff\x37\x4b\x45\x84\x39\x52\x59\x94\x54\x73\xc3\xb1\xe5\x4d\x5d\xd1\x4b\x1c\x2c\x5d\xb5\xa4\x6c\xb1\x76\xc4\xad\xda\xaa\x24\xc5\xbb\xe5\xf2\xe7\x9b\x97\xb4\x11\x9c\x8d\xc9\x67\xcd\xe4\xe4\xb6\x80\x5d\x0f\x92\x48\xd4\xff\xe9\x0e\xc9\x05\x53\xf8\xf3\x29\xba\xa4\x0c\x04\xd8\xef\x79\x2e\x24\x3a\xc7\x8b\x23\x3e\x3d\x4a\x39\x53\x73\x74\x09\xff\x6b\x7f\x7a\x26\xe4\x11\xfd\x4c\xb0\xb0\xfc\xc1\x96\xa4\xf3\x35\xd8\x35\x09\x89\x9c\x49\x44\x9e\xf4\x09\xfd\xc3\x7f\xa2\xd4\xb4\x7c\x8a\xbe\x3d\xf9\xc3\x7f\xa2\xdf\xc1\xff\xff\xff\xd1\xef\x1a\x34\xfd\xcd\x20\xbf\xa0\x72\xf1\x6d\xd9\x9d\xdb\xab\xac\xd4\x16\x15\xe7\xcf\x04\x2f\x76\xaa\xb6\xe5\x47\x1a\x3d\xf2\xe9\x74\xac\x09\xc3\x24\xf2\x8d\xb1\x58\x82\x8b\xde\x12\x3f\x95\xda\xda\xd3\xa6\x92\x5d\x51\x43\xc6\x76\x6a\x10\x1f\x1c\xbb\x96\x79\x51\x79\x17\x82\x88\x4a\xd5\x8c\xa9\x84\xaf\x48\xac\xb9\xea\x26\xa7\xc3\x59\xf7\x5c\xf2\xb7\xb3\xe0\x84\x08\x29\x61\x3d\x75\x1f\xf8\x17\x46\xb1\x9a\x40\x1f\xbb\x90\xb5\xc7\x61\x29\xbc\xf6\x8b\x89\x99\x84\xa9\xbd\x55\xbc\xa4\x5c\xea\x7c\x7d\xa8\xe4\x1d\x17\x3b\xe9\x5b\x8f\xa4\x31\x95\x61\x4d\xbd\x24\x57\xc3\x37\xac\xec\x0f\x19\xe2\x5c\x78\x1c\x63\x63\x17\xb1\x55\x15\xd7\x5b\x31\xa9\x30\xc1\x65\xed\x0e\xbd\x9e\xfa\xb9\xff\x64\xdd\x30\x21\xd2\xcc\xbd\x5d\xd4\x8b\x83\xd1\x6a\x11\x49\xb3\xc4\x9a\x11\xd7\x80\x1d\xae\xdb\xd0\x3b\x8f\x6f\x01\x8d\x43\xd8\x23\xe4\x6f\x30\x27\xd9\x5a\x00\x81\xfa\xfd\xcc\x45\x44\xce\xf8\x6e\x61\xaf\x09\x65\x4b\xf1\xf2\xed\x4b\x11\xf9\xd5\xbb\xb0\x45\xa7\x1c\x1e\x30\x8f\x0b\x65\xc1\xb8\x05\x6c\x15\x8a\x00\x88\xb4\x3c\x1b\x00\xb4\xdb\x07\xd6\xe5\x52\x6d\x84\x1d\xb8\xb6\x31\x1c\x17\x0c\xcf\x95\xd6\xa8\x54\xd4\x10\x58\xf3\xc2\x15\xb1\x6b\x10\x54\xb4\xf3\x38\x82\x2a\x31\x45\xa4\x52\xa5\x1a\x3b\x36\xa5\x52\xc4\x96\x58\xa5\xa6\x60\x53\x0f\x09\x0c\x41\x99\x6a\xae\xdb\x93\x44\x1c\x4d\x71\x44\xd9\xac\x17\xc0\x54\x02\x64\x44\x78\x1d\xd4\x11\xe9\x3d\x96\x8f\xfb\x0d\x34\xdc\xb9\x80\x25\x8d\x8b\x22\x6a\x16\x58\xc6\x38\x36\xe8\x12\x46\x9f\xc2\xf2\xb1\x09\x59\x69\x09\xd6\x6d\xc5\xe8\xfc\x52\x38\x30\xb8\x55\xe3\x73\x29\xe8\x24\xd4\xa7\xa0\x66\x83\x2b\xa9\x6c\x41\x1e\x5d\xc6\x1f\xf6\x28\x2c\x55\x74\xd3\x15\xe3\x97\x73\x2e\xd4\x78\x4b\x5c\xd8\x6a\x1a\x3d\x23\x47\x09\x00\xba\xf0\x27\x22\x9e\x28\x79\x2e\xc3\xab\x6e\x42\x8b\xc6\x68\x16\x44\xd5\x01\xfe\x66\x9a\x71\x48\xa1\x99\xa2\x14\xb3\x85\x61\x94\x9a\xb9\x60\xf9\x28\x7d\x21\x57\x24\x53\x9c\x24\x3d\x24\x48\x2e\x4d\x81\x63\x49\x92\xe9\x91\x2b\x85\x11\xa3\x84\xcf\x68\x84\x13\x34\x49\x78\xf4\x28\x4d\x86\x1b\x9b\x19\x26\x95\x09\x1e\x11\x29\x03\xc9\xaa\xc8\x66\xb7\x39\x86\x50\xc5\x55\x11\x91\x52\x46\xa5\xa2\x91\x13\x99\x0a\x50\x0a\x53\x4b\x3c\xc2\x60\x12\x86\x8c\x4d\x18\xae\x96\xf4\x88\x01\xe7\xcc\x99\x2d\x9a\x04\xd7\xb5\xc5\xdc\x73\x41\xe2\x4d\x07\x68\x0f\x10\x82\x8e\x42\xc6\xaa\x7c\x20\xd7\x1c\xa9\x33\xfb\x19\x1c\xe3\x55\x24\x70\x5b\x3e\x51\x9e\x20\xfd\x49\x2b\xc1\x1a\x41\x4c\xb9\x0f\x81\x2f\x49\x2e\x3e\x32\xfc\xc0\x10\xcd\x60\xc8\x0d\x38\x66\xeb\x68\x5a\xaf\x22\x88\x3c\x50\xa7\xab\xea\x35\xa7\x2c\x4a\xf2\xd8\x57\x6a\xd4\x22\xc0\x93\x26\x12\xb7\x3c\x7a\xed\xb5\xa0\xd0\x43\x58\xa2\x67\x92\x24\xfa\xbf\x26\x02\xfe\xc8\x17\x4e\xd0\x2c\xd9\x14\xb7\x80\x4e\x1c\x97\x6e\xa2\xa8\x83\x43\xa7\xbc\xc1\x6a\x6e\x72\xfe\x53\xae\x4c\x91\x4c\x83\x4e\xe9\xec\x5b\x06\xce\x70\x92\xf0\x09\x9c\x74\x00\xae\x74\x79\xae\x41\x5a\x5d\x1e\x45\x84\xc4\x24\x46\x5f\x07\x07\xd7\xe3\x51\x7c\x53\x0f\xa3\x58\x5a\x91\x03\x00\xad\xac\x1a\xd6\x1a\xa1\x2b\xcb\x75\xde\x8e\xd1\x4d\x05\x98\x25\xac\xdf\x8e\xab\x30\x5d\xbd\xa5\x2d\x7c\x1b\xa0\xcb\xca\x24\x5e\x6e\x87\x36\x04\xba\x2c\xf5\xb9\x07\xa0\xcb\xca\x3c\x1b\x62\xf7\xf9\xec\x45\x73\x8e\xf5\xa4\x2e\x78\xfb\x44\x30\x03\x10\x66\xee\xce\x12\x09\xba\x03\xb9\xa8\x23\xc4\xc3\x02\xf1\xac\x54\x43\x7c\x5b\x10\xcf\xca\x60\x0e\x19\xc4\xb3\x32\xd4\xc3\x05\xf1\xac\x19\x68\x0b\x10\x4f\xe3\xdc\x1f\x6b\xa2\x6e\xc7\x14\x20\xb1\x65\x92\x4f\xef\x20\xd5\x7b\xe5\x18\xcf\x4c\xe0\x80\xb9\xc6\xdc\x1d\x6d\x31\xad\x61\xb4\x36\x07\xb2\x29\x1c\xaa\xe2\x84\xd8\x94\xf6\xbc\xf7\xcd\x80\x3f\x6c\x6a\x76\xef\x85\xd6\x6e\xb0\x43\x46\x38\xb3\x39\xe5\x4d\xa5\x66\x0e\x27\x7b\x76\x3b\x7c\x54\xc0\x20\x2c\xb1\xfc\x56\x08\x62\x97\x95\xaa\x0d\x73\xfe\x6c\x2b\x27\x01\x19\x1a\xa2\x6c\x24\x41\xe8\x74\x6c\x95\xb6\xa6\x95\xa3\x4c\x91\x59\x55\xa7\x2d\x0e\x0d\x65\xea\x4f\x7f\x5c\xcb\x89\x0c\xc4\xa2\x53\x0f\x83\xda\x09\xde\xd9\x61\x9f\x91\x18\x45\x73\xad\x15\x49\xad\xbe\xe8\xe9\x98\x9b\x55\xa2\x14\x53\xa7\x48\xe5\xd2\xb8\x96\xa8\x1c\xb1\x12\x26\xe9\x31\xfa\x08\x05\x61\x71\x9a\x69\xfd\xcb\xcf\x8f\x6a\x4a\x1a\xe5\xdf\x7e\xfb\x27\x82\xbe\x45\x29\xc1\xac\xa4\xc3\x82\xda\xa4\xaf\x3e\xc0\xf0\x53\x73\x32\x62\xb5\x5b\x81\x06\x9f\x4d\x8d\x29\x17\xef\x37\x64\x53\xee\x74\x62\x28\x74\x88\xa3\x39\x92\xf9\xc4\x54\xea\x0d\x6c\x18\x4e\x90\xbe\xe0\x33\x70\x54\xc3\x8d\xec\x06\xbd\xea\x14\xbe\x6c\x0c\x80\x75\x37\xb6\xbd\x8d\xfb\x70\x8f\x1c\x49\x52\xc2\x76\xaa\x71\x9a\x19\xce\x17\x1e\x7c\x69\x70\x5f\x7a\xc6\x87\xa0\xf5\x33\x6c\x2d\xfb\x5a\x96\x86\x70\x5e\xf0\x92\xe5\x09\x16\xf6\xe8\x8f\x98\x56\x34\x04\x79\xa2\x3c\x97\xc9\x02\xc5\x9c\x91\x1e\x50\x42\x1e\xcd\x8d\x63\x55\xeb\x2c\xd8\x16\xac\x78\xa2\x32\xd7\x0a\x2d\xb4\xe5\xea\x63\x48\x85\x0d\x26\xd5\x9c\x42\x3f\x5a\xfd\x26\xf0\x55\x98\x25\x87\xda\x69\x51\x21\x6c\x6c\x85\xe7\xb7\x84\x8d\x2d\x51\x55\x07\x1b\xeb\x61\x63\x97\xd7\xe5\x10\x61\x63\x2b\x7b\xde\x0e\x36\xb6\x6e\xcb\xb7\x80\x8d\x2d\x35\xf3\xc5\xc0\xc6\x56\x56\xf4\x8b\x81\x8d\xad\xcc\xab\x83\x8d\xfd\xf2\x60\x63\x77\x04\x46\xad\xe7\xc5\x06\x5f\x49\x51\xb6\xd8\x98\xc8\xbe\x92\x68\x78\xad\x09\x2c\x7a\x2c\x07\xb5\xf9\xeb\x6a\x77\x30\xd6\x7a\x26\xb4\x19\x18\x6b\xad\xaa\xde\xcc\xea\x76\x05\x78\x02\xc5\xe0\x95\xc1\x58\x4b\x13\xe8\xe2\x2b\x37\x8f\xaf\xac\x25\x3e\xdb\xb7\x1e\x9e\x0b\xba\xac\x5e\xc8\x2d\xe1\x58\x4b\xfb\xd3\x2a\x12\x13\x44\xf7\x3d\x50\xe2\xcb\x4a\xf3\xf7\xa5\x43\xbe\x56\x96\x0f\x57\x51\x5a\x60\x68\x2d\xe1\x39\xb4\x38\xa3\x84\x87\xfe\xff\x8e\x72\xb7\x88\x0c\xae\x2c\xaf\xf7\xab\x18\x5a\x6c\x41\xaa\xad\x29\xd4\x69\xa5\xfb\x49\x94\x75\xc9\x93\x1b\xba\x98\xdd\x20\xee\x32\x12\x35\xd8\x98\x69\x4a\xf7\xd5\xec\xba\x8b\xcc\x63\x61\x81\x42\xbe\x94\x17\xaa\xaf\x27\x33\x1c\x23\xe3\x57\xd2\x61\x01\xa8\xc3\x7c\x39\xa3\x52\x89\xc6\xd8\xa6\xa5\x11\xee\xe2\x2a\xcd\xf2\xd6\x01\x31\xc1\xaa\xce\xb6\xfb\x2c\x25\x29\x17\xeb\x02\xab\x6a\xbf\xb4\xa5\x6e\xb6\xf9\x94\x64\x73\x92\x6a\x49\x66\xbc\x69\x23\x6d\xf7\xdb\x27\x0d\xdb\xdc\x35\x13\xe8\x58\x22\x82\xc0\x11\xaa\xdf\x8d\x0d\x22\x65\xeb\xed\xde\x75\x9b\x2d\x66\xe6\x86\x0e\x21\x07\xa6\xbc\xda\xe0\x66\x5f\x2a\xb9\xbb\x81\xbe\x6b\x63\x3a\x7c\x48\xcd\xfa\xa8\x8d\x15\xf1\x1a\xab\x70\xa7\x8a\xaf\x6c\x21\xe8\x0d\x5c\xf9\x65\xef\xbc\xe6\x84\x61\x15\xe0\xcd\x03\x3c\x1a\x50\x53\x97\x97\x07\x22\x73\x24\x11\x47\xa1\x66\x50\x1a\xcc\xf2\x7a\x95\xa8\xc4\x69\x94\x3b\x10\x49\x2e\x1a\xa3\x4c\xdb\x18\xb4\x23\x95\xe3\x04\x34\x89\xb0\x7a\x65\x75\x53\x27\x8b\x9a\xb4\xc7\x76\x1e\x13\xca\xd4\x9f\xff\x63\xa3\xdd\xd4\xaa\x95\x5d\x37\xa8\xb8\x85\xa3\x88\x48\x63\x63\xb7\x51\xc8\x78\xc2\x9f\xa0\xd8\xd6\x2e\xbb\xaa\x8f\xb2\x9e\xb7\x66\xf0\x1e\x8a\x38\x2e\x48\xdd\x88\x0b\x73\xc1\xf3\xd9\xdc\xd9\x90\xf4\x99\xd1\x53\xab\xdb\xcb\x1f\x97\x6c\xe4\x1b\xef\xe5\x77\x39\x4d\xb6\xb3\xd0\xdd\x95\xca\x90\x7d\x1a\xde\x23\x39\xf7\xa7\x75\x02\xcd\xd6\x6e\xec\xf2\xa0\xdb\xf7\x69\xbf\xf5\xfe\x1a\xe8\xa6\xe7\xe0\x37\xa7\x3c\x49\xc0\xd3\x20\x49\xfa\x44\x44\x7d\xf7\x30\xe1\x7b\xba\x19\x72\x9e\x1f\x00\x7c\x5d\x24\x46\xb4\x92\xbf\x6e\x8c\x68\x28\x91\x1b\x7d\x35\x68\xc1\x84\xaa\x71\x46\x58\x9d\x8d\xed\xa7\xe5\x0a\x30\xef\x2c\x60\xd0\x45\x8f\xed\x2d\x68\xd0\x2d\xc9\x2b\x07\x0e\xae\x99\xc7\xa1\x06\x0f\x56\x98\x9d\x8f\xe5\x2b\xae\x19\x17\x38\x64\x14\x9f\xbe\x5e\xe2\x11\xeb\x97\xf2\x29\x5c\xa5\xec\xc9\xa2\x08\xc8\x36\x3a\x44\xc8\xcc\xa0\xce\x86\x35\xac\x80\x1b\x4d\xff\x05\x9a\x8e\x01\xaf\x35\x21\x85\x2e\x6c\x10\xa2\xc9\x49\x7c\x84\xa3\x45\x94\xd0\x28\xd0\x99\x67\x02\x67\xf3\x3a\x8e\xe7\x76\xbe\x43\xdd\x79\x2b\xd4\x9d\xa6\x82\x54\x9b\xc4\x6d\x3b\xba\x62\x38\x25\x1d\x1a\x50\x1d\x1a\x50\xcf\xe3\x5d\xb0\xa2\xb4\xd6\x1b\xc2\x28\x2c\x9f\xbb\x0e\x12\xe8\x0d\x20\x81\xb6\x39\x7c\x05\xde\x4f\xe9\xd8\x75\x30\x45\x1f\x5a\xc1\x14\xf9\x4b\xf0\xa0\x90\x67\x9a\xcf\xe3\x1b\x23\x9a\x2c\x0f\xec\x2d\x61\x89\x6a\xc4\x85\x4d\xe4\xa6\x55\xb8\x44\xab\xe8\xa2\xd5\xba\xbc\x2d\x4a\xd0\x66\x2b\xb3\x11\x00\x50\xed\xdd\x75\x20\x70\x40\xcd\xdb\x70\x20\xe7\x66\x9f\x59\x2d\x9b\xd5\x0e\x0d\x33\x5b\x36\x51\xb0\x36\x4b\x72\xf1\xf4\xf0\xbe\x12\x5d\x8a\x22\x6b\xdb\x25\xbb\xf4\x9d\x0f\x9a\x08\x34\xe7\x49\xec\x40\x28\xfc\x6a\xf9\x0e\x7c\x26\x80\x5f\x20\xb7\x19\x50\xec\x1c\xb4\xad\xa2\x20\xd8\xaa\x94\x16\xbf\x89\x30\xdc\x3d\x30\x9a\x7d\x58\x11\x3c\x27\xd9\xc6\x7e\xb0\x56\x16\x91\x65\xf3\xf7\x8a\x31\x96\x56\x08\xac\xe6\xf5\xc3\x5c\x6b\xf7\x5d\x33\xb8\x55\xa2\x47\x60\x1c\x14\x75\xa5\x3e\x0d\x9d\xc1\xd3\x27\xea\x0c\x11\x38\xec\x71\xa5\x97\xce\xcd\xae\x95\xa7\xae\x4a\x2c\x5b\x04\x83\x2d\x55\x6e\xdb\x1d\x1c\x28\xc5\x9f\xc7\x19\x16\x38\x49\x48\x42\x65\xfa\x62\xc1\xc0\x67\x65\x77\xad\x3e\xab\x82\x1b\x13\x11\xcb\xd3\x89\x21\x45\x37\x10\x5b\xec\x4f\x71\x24\x72\x16\x42\x9b\xf9\x8d\xf1\xc5\x04\x73\xb8\x17\xc0\xaa\x14\xcd\xa1\x6a\xeb\x14\x53\xc1\x88\x6c\xac\x91\x49\xa2\x5c\x50\xb5\x18\xdb\x92\xa3\xed\x0f\xdc\x9d\xfd\xf2\xcc\x7e\xb8\xda\xc3\xed\xb2\xfa\x5d\x7f\xbe\xc4\x69\x46\x04\x94\x09\x72\x05\x6f\x82\xb2\xaa\x16\xb5\x81\xf8\x5a\x43\x10\xfe\xbc\x74\x6d\x37\x05\x0e\xe3\xe7\x71\x90\x51\x35\x8e\xaa\xc4\xb1\xee\xb0\xd6\xe1\x4e\xad\x9a\xe4\x0b\x23\x2f\x35\x78\x91\x5f\xa0\xca\x88\x4d\x9b\x30\x4d\xeb\x01\x07\xae\x60\xb0\x57\x16\x1b\x13\xa4\xbc\x5b\xa5\xaa\x61\x9c\x16\xeb\xa7\x2e\xf8\x68\xc5\x60\xfb\xc1\x57\x2d\x46\x1c\x74\xb2\xa7\x61\xeb\x83\x2e\x44\x9e\x29\x3a\x59\x86\xb6\x51\xfb\x2b\x21\xda\x4f\x20\xcd\xda\xb9\x19\x4a\xdd\x9a\xba\xa2\x25\x4e\x6c\x67\xa7\xe5\x7f\x8b\x23\xe6\x10\x82\x0c\xc2\x52\x98\xc7\x77\x9d\x52\xa5\x5c\xa2\x80\x31\x40\x6b\xea\x2c\xdb\x66\xbf\x72\xe1\x1e\x18\x2a\xbd\x1a\x13\xd1\xf1\x88\xf5\x25\x7a\x26\x88\x11\x0b\x21\x51\x53\xc3\xd5\x5b\xb5\xa1\xf6\xd3\x84\xe8\x9e\x7c\x6c\x8a\x16\x1e\xa8\x92\xbe\xfc\x98\xe9\x63\x8a\x13\x49\x7a\xba\x61\xa8\x5a\xaa\x38\x04\x7f\x62\xf4\x2c\x70\x96\x11\x31\x62\x36\x8b\x03\x1c\x2e\x9c\x27\xa6\xfd\xa6\x10\x57\xbb\x06\x64\x1c\xe1\x68\xfe\x4a\x7b\x84\x21\x19\x27\x9a\x93\xd8\xe5\x0b\x97\xb7\xc7\xcd\xdb\x18\xac\x37\xd8\xac\xe1\xd4\x95\xcf\xea\xd9\x4e\x92\x48\x73\x14\x5f\x66\x3a\x23\x42\x8f\x5a\xd3\xf0\x13\x61\x88\x4e\xdd\x38\x6c\xec\x0e\x7a\x06\xcf\x94\x26\xfd\x27\x4c\x13\x93\x80\xef\xba\x76\x42\xa0\x31\xbf\x8f\x98\x71\x77\xb3\xa8\x94\xa1\x4a\x19\x95\x73\xcd\xa9\x73\xf0\x49\x82\x9a\xd1\x94\x38\xc3\x9e\x36\x39\xcd\x03\xfd\xfa\x6a\x0e\xfa\x44\x05\x67\x29\x24\xc9\x58\x5c\x26\xb7\x7c\x92\x28\x7f\x3c\x6a\x53\x1c\xd7\x4a\xc4\x71\x2c\xcb\xc6\x4f\xa3\x56\xd2\x5f\x4b\x66\x97\xa3\x52\x56\x60\x14\xc0\x0a\x41\x10\xa7\xab\x2c\xb6\x4a\xfe\xed\x52\x1b\x96\x53\x1b\xea\xd7\xe6\x10\xd3\x1b\xfc\x21\xde\x34\xc5\xa1\x69\xfb\xf7\x21\xd9\xee\x31\xd5\xe1\x8d\x73\x02\x5e\x26\x1d\xe0\x6d\xf3\x37\x5e\x22\x75\xa3\x4b\x70\x78\xc3\x04\x87\xd6\x96\xda\x72\x6c\x76\xf3\xb1\xdd\x28\x39\x60\x0d\x98\x53\x5d\x2f\x97\x44\x09\x1a\xc9\x7d\xf0\x07\x99\xe1\x96\x51\x6d\xa0\x05\x66\x6b\xa4\x26\xfd\x82\x77\x42\x42\x9c\x98\xaf\xf3\x37\x11\x04\x3f\xc6\xfc\x79\xc9\x56\x27\x43\x34\x8d\x4b\xae\xc5\x1e\x41\x22\x2a\x49\x29\x92\x85\x4a\xc4\x88\xb4\xc6\x4e\x3c\x62\x73\x4a\x04\x16\xd1\x1c\xb2\x1b\x8b\x8d\x31\x59\xb2\x06\xd0\xc8\xc4\x32\x84\xde\xa6\x0d\x36\xbd\xc5\xba\x57\x2d\x4c\x1e\x9f\xce\xee\xb9\x1e\x49\x6a\x3e\xf1\xc2\x8c\x95\x32\x42\x93\x5c\xab\xed\xdf\x35\x10\xdf\x2f\xf6\x8b\x06\xe3\xfb\x60\xa2\xe0\x8b\x96\x01\xf9\x05\x35\x74\x41\xf9\x2f\x14\x94\x5f\xb3\xc4\x9b\x05\xe6\x6f\x65\xf2\x7b\xfd\x98\x61\xd7\xf3\x6b\xc4\x0d\xaf\x0b\xda\xca\x27\xe3\x17\x3f\x7a\xb5\x73\x6e\x7b\x02\x7f\xf2\x44\x61\x24\x62\xa1\xe9\x6c\x42\xe2\x18\x38\xad\xe2\xb6\x52\x74\x41\x3b\xce\x3c\xa0\xef\x5e\x2c\x35\xb1\xe3\x84\xb3\x99\xa4\xb1\x01\x5b\xc9\x30\x54\x6c\x0d\x8d\x17\x00\x2e\x00\xfb\x9b\x24\x44\x38\xaf\x84\x40\x5f\x4b\xca\x2c\x9a\xa2\xff\x2d\xe6\x44\xb2\xaf\x94\x31\x16\x60\xb6\x40\x8f\x8c\x3f\x27\x24\x9e\xc1\x0e\x55\x07\x73\x84\x28\xe9\x21\xaa\xfc\x67\x02\xd0\x08\x78\xae\x46\x7a\xec\x10\x6b\x66\x34\x00\x62\xbf\x0d\x6a\xa2\xfb\x66\xbe\x39\x46\x68\xc8\xd0\x14\x47\xaa\x87\x64\x3e\x29\xda\x8f\xb9\x29\x72\xad\xb5\xef\x60\xe2\x45\x23\x5d\xcc\x78\x4d\xe7\xf5\x67\xc3\x71\x07\x4d\xae\xfd\x84\xe2\x9d\x62\xeb\x9e\xf0\x2e\x10\xa3\x97\xb9\xb4\x41\x18\x88\x33\x7f\xf4\x2d\xbc\x92\xc7\x88\x06\xbc\x4f\x83\xb7\xcc\x78\xdc\x68\xeb\xac\x4c\x65\xd3\xb1\x14\x81\x90\x56\x50\xb2\x8e\x2a\x68\xd7\x2c\xb7\x96\x9a\xa4\x12\x04\xa7\xd6\x39\xa0\xaf\x1a\x10\x6b\x4c\x18\xa4\x1e\x3d\x15\x46\xc2\xdc\x64\x8b\x2f\x28\x7b\xd4\xbb\x5b\xa0\x62\x43\x7d\x79\xe8\xb9\x6e\xd3\x32\x7d\xe3\x91\x33\xce\x8c\x83\x70\x27\xb9\x93\xce\x18\x4e\x36\xb4\x71\x2c\xad\xdc\xb2\x4f\xcf\xc9\x59\x56\x5c\xd0\x52\x84\x31\xf6\x21\xd3\xe3\x46\x36\xa4\xca\x7c\x43\x79\x0f\xa3\x98\x64\x84\xc5\x84\x45\x0b\x20\x11\x06\xc8\x39\x82\xe1\x04\x61\xf8\x0e\x27\xc7\xe8\xdc\xe4\xd7\x78\x09\xcf\x5e\xeb\x70\xa1\xa7\x98\xd1\xa9\xd6\x13\xc0\x08\x6b\x47\x39\x62\x66\x98\xce\x07\x12\x14\xed\xf7\x2b\x56\xb7\x33\xfa\x06\xb9\xda\x11\x95\x98\x95\xbf\x47\xab\x2f\x1c\xe8\x6d\xd5\xee\xe8\xe6\x5c\x0d\x02\x99\x4f\x8e\xe0\xdf\xa5\x84\x33\x07\xd4\x53\xa0\xc8\x90\x84\x80\x39\xd0\x7a\xbc\xe0\x62\x6c\x02\x96\xdb\x87\xdf\x6e\x4d\x1e\x47\xd0\x47\x49\xa9\x49\x29\xa3\x69\x9e\x06\xce\x3b\x53\xb1\x20\xb2\xf6\x4b\x93\x89\x91\x69\x3d\x20\x72\xe0\xe5\x48\x5f\xae\x6c\x81\x66\xf4\x89\xb0\x11\xcb\x38\x65\xea\x18\x5d\x71\x45\x82\x12\x11\x06\x3a\x8a\x67\x8a\xa6\x06\xed\x54\x10\x7d\x0e\x0c\x28\x36\x00\x4d\xce\xb1\xea\xa1\x38\x87\xa3\xca\x88\xd2\xac\x43\xdf\xb8\x0a\x76\x06\xe2\xa3\xc5\x88\x99\x9b\x6e\x8a\x69\x92\x0b\x62\x65\x56\x6c\xf2\x62\x8a\x21\x17\x23\xb3\x48\x68\xc1\x24\x52\x3a\x9b\x2b\xbd\x45\x5a\xc6\xb3\xfe\xc6\xb9\xe6\x46\x7c\xc4\x26\x04\x61\x94\x71\x49\x15\x7d\xf2\xfe\x4b\x3a\x45\x58\x4a\xb0\xa0\x1c\xa3\xf3\x92\xfd\x9f\x4a\x50\xbd\x9b\xe2\x6a\x29\x1b\x5b\xdb\x73\x73\x3e\xce\xce\x1b\x59\xea\xc5\xae\x32\x9e\x48\x9e\xe4\x2a\x74\xc1\xd6\xef\x6d\x61\x1a\x77\xc0\xfd\x60\x20\xe6\xd3\x11\x73\x74\x2d\x8f\x51\x5f\x22\xc9\xf5\x2e\x49\xb3\x95\x91\xa0\x8a\x08\x6a\x50\x9c\x88\x32\x9b\xe0\xcf\xa9\x3f\x03\x29\x16\x8f\x5a\x84\x0a\x2d\xf0\x06\x53\xb4\x64\xed\x98\x18\x09\x09\x60\xad\xc2\xed\x00\xd3\x3f\x62\x9c\x1d\x31\x32\xc3\xeb\x76\x64\xc4\x4a\x5b\x82\xbe\xa6\xd3\x42\x21\x6d\xf2\x39\x06\x6b\x37\x86\xc8\xa7\xa6\x5d\x32\x1d\x37\x6d\xd2\x34\xe1\x78\x8d\xdb\x78\x5a\x1c\x7a\xf4\x77\x3e\x31\x63\xd4\x7a\x3f\x57\x20\x05\x6a\xf5\x6a\xca\x05\x99\x63\x16\xf7\xdc\x66\x95\xc7\x06\x37\xa3\x35\xb5\x39\x65\x0c\x24\x41\x07\x22\x4c\x0c\x16\x13\x66\xc1\x5e\x58\xc5\xcd\x6e\x45\xb1\x0f\x1b\xdd\x15\xbe\x35\xa8\x7d\x62\x0c\x10\x86\xe5\x2d\x32\x7b\xc4\x25\x4d\xb3\xa4\xc8\x69\x0a\x6c\xa3\x53\x2d\x62\x39\x1e\xc9\x9f\xc0\x74\xe5\xb4\x36\xb8\xd5\xed\xce\x69\x3a\xab\x19\xb9\x67\xa4\x70\x6b\x38\x9b\x97\x29\x83\x19\xb0\xb0\xaf\x25\xd1\xff\x54\xa4\x50\xfb\x8c\xb0\x3e\x62\x4e\x04\xf9\x06\xb8\x8c\x6d\x36\x30\x9e\x69\x11\xda\xc0\xbc\xda\xf5\x43\x91\x71\x72\x97\xce\x89\x3d\x0c\xee\xd5\xda\x8b\x4a\x51\x2d\x66\x7f\x47\x01\xa1\xea\x7c\x47\xd8\x79\xca\x62\xd2\x58\xcc\xa9\x15\xd7\x68\xba\x5b\x0c\x43\x1d\x6f\x5b\x7f\xe1\x7e\x4e\x24\x41\xea\xd9\x03\xa5\x69\xbd\x0a\x4c\x96\x82\x24\xe4\x09\x17\x77\x9c\xef\xcb\xb2\xcb\x08\xcb\x86\xf2\x28\x80\x36\xa6\xc7\xbf\x7d\xe2\xb0\x1f\xdf\xb5\x1e\xca\x13\x4e\x6c\xe2\x86\xf5\x95\xcb\xe6\x0d\x1b\x9e\xef\x14\x43\x6a\x5b\xa9\x5b\xcf\x66\x11\xc3\xf5\xfd\x03\x59\xd4\xaf\xc8\x1a\x10\xbf\x55\xd9\xd8\x7e\xd9\x37\xb0\x55\xdf\x14\xdf\x2c\xaf\x71\xe3\xca\xfd\x50\x9a\xf2\x1b\x24\x11\xdd\x2c\x55\x80\x86\x3f\x65\x3e\x9d\xd2\xcf\xa0\xd5\xba\x9b\xc4\x69\x1e\x91\xe0\x52\x73\x31\x90\x55\x90\xdb\x3c\xe3\x48\xde\x25\xa1\xa8\xf6\x4b\xad\x65\x6d\x4c\xd1\x8d\xab\xfd\xd7\x9c\x88\x9d\xd6\xdb\x93\xea\x26\xe1\x88\xc1\x29\xa9\xd7\x11\x5d\xa3\x0a\xb7\x8c\x49\x0a\x5b\xbd\xc7\x0d\x4b\xb7\x1e\xfe\xbb\xf6\xb3\x89\x61\xbe\x9b\x0f\x24\xe4\xda\x2b\x6d\x6a\x45\x7c\x9a\x8f\x4d\x76\x45\x79\x34\x7f\xeb\x59\x80\x71\x6c\x03\xa7\x7c\xaa\x2f\x76\x31\x23\xc6\x31\x62\x6a\x36\x29\x5b\x69\x20\xd0\xd4\x6d\x63\x94\xcd\x46\xcc\xad\xad\xec\x21\x13\x26\x5e\x61\xa8\x25\x6c\x77\x1c\x7c\xea\x09\xbb\x9d\x49\xd5\xf8\xd5\x19\x91\x52\x5f\x8c\x52\x09\x4c\x99\xf5\xe1\xb8\xf5\x91\x23\x86\x8e\xaa\x71\xea\x3d\xb0\x23\xf4\x5c\xb6\x67\xaf\x18\xa0\x1c\xb1\x6b\x63\x9d\xf9\x23\xfa\x5a\xe1\x99\xb9\x25\x00\xbd\x11\x27\x80\xfb\x08\x5a\x82\xd5\xca\x83\xe4\x00\x7f\x22\x69\xfc\xcd\xe9\xaa\x3e\x8d\x0d\xe1\x6b\x68\x06\x0e\xb9\x5e\xc3\x62\x81\xe8\xb4\xf8\x07\x89\xbf\x59\xd5\x52\xf1\xd1\x23\x59\xf4\xaa\x8b\xdc\x7c\x6f\xdc\xe3\x9d\x22\x34\x5f\xea\xe2\x80\x41\xb7\x77\x52\xe2\x09\x49\x7e\x2c\x26\x8a\x56\xb2\xa2\xef\x28\xc3\xbb\xf1\xa0\xda\xe1\xb5\x8b\x40\x9f\x2c\x9a\xea\xb6\xd5\xb0\x9e\xad\x11\x47\xfa\x46\x96\x25\x48\x77\x67\x25\x76\x57\xd5\x0f\x43\xd4\xe3\x9c\x24\x19\x8a\xe9\x14\x5c\x6f\x0a\xe8\xc5\x83\xa7\x9a\x7a\x37\x5a\xa1\x49\x73\x66\x80\x70\x4d\xd4\xc7\xb3\x3d\xe9\x96\x65\x14\x8d\x1f\x8f\xd8\x50\x7d\x25\x91\x54\x82\xb3\x99\x56\xa6\xe3\x27\x2a\x8b\x42\x6e\xfa\x40\xe6\x29\x11\xb6\x0b\x2a\x8d\xd4\x6d\x8b\x20\x61\x77\xb1\xe9\xb1\xe9\xab\x0f\x04\x1f\x57\x6c\x50\xff\x68\xf4\x0a\x3d\x4a\xe9\xa2\xa6\x6a\xc2\xde\xed\xe6\x56\x78\xe7\x2b\x9b\x2e\x7f\x0c\xad\x93\x28\x2d\x0c\x99\x8e\x5f\x9e\x54\xcd\x98\x76\xd5\x57\x98\x30\x37\xbe\x10\xda\x5e\x04\xae\x6a\x40\x6e\xd2\x9c\x74\x3f\xce\xb1\x65\x06\xb7\x91\x8a\x55\x99\xa0\x1d\xb5\xd1\x9e\x42\x13\x26\xa1\x60\xff\x90\x0a\x2b\x1a\xd9\x5b\x80\x0b\x6b\xc5\xb5\x7a\x75\xf3\xd6\xee\xaa\x93\xc8\x08\x27\xcb\x3b\xbc\xc2\xa7\x6e\xde\x5f\x6d\xe8\xb4\xc7\xcd\xb4\xbd\x12\xd8\x24\xe2\x49\xb2\x49\x99\xb6\xca\xcc\xcf\x8a\xcf\x57\x8f\xa8\xe8\x47\x6f\x80\xdb\x0b\x38\x35\xc6\x40\x81\x13\xeb\x2e\x92\xca\xee\x52\xf8\x92\xb9\xd4\x16\x56\x7d\x1c\x31\x3e\x85\x42\x7e\x49\x53\xe4\x7a\x26\x78\x4a\x37\xa9\x24\x61\x82\xb9\x6f\x9d\xef\x7f\x8d\x27\xc5\x45\x08\x80\xf9\xcd\x90\x97\xed\x11\x30\x09\xb0\x35\xa9\xad\x38\x43\x29\xce\xb6\x5a\xf0\x75\x91\x2f\x7d\x94\x9a\xb0\x23\xbb\x7a\x80\x29\x4d\xa0\x26\x1e\x2c\xf2\x33\x5e\x14\xf0\x2f\x4d\x35\x02\xd8\x46\xe4\xf0\xa0\x5f\x1f\xb2\x29\xdf\xe0\x70\x16\x70\x2d\xf6\xf4\x61\x47\xb3\xc1\xf9\xf3\x91\x18\x66\xf7\xcd\x9a\xb6\x39\x8f\x67\x75\x44\xbd\xf1\xc9\x74\x2b\xf8\x92\x7e\xd8\x90\x89\x04\xdf\xfc\x6b\x93\xbb\xb5\x7c\xb4\x82\x16\x11\x0c\x67\xf5\x52\x5d\x96\xe8\x70\xef\x6b\x54\x69\x07\x9e\x15\x09\x63\x37\xf5\xad\xbe\xc2\x9a\xd9\x43\xd2\x6a\xb1\x76\xc4\xa7\xda\xac\xd6\x81\xeb\xd1\x57\x36\xd8\x59\x93\x5b\xb7\x18\xc0\xcd\xa4\xd5\x1a\x8a\xec\x13\x9b\x86\x3f\xa5\x09\x91\xc7\x68\x58\xe3\xc4\x75\x49\xf0\x3e\x68\xdc\xa4\x03\x3a\xe9\x29\x17\x34\x28\x7e\xee\x64\x24\x44\xa1\x08\x5b\x18\xc8\x12\x38\x2d\xc0\x7d\x3a\xe7\xcf\x26\x03\x4f\x50\xcd\xb3\x8c\xb0\xaa\xc0\xa5\xa5\x79\x01\xb5\x1e\x21\xe3\x50\xf3\x1f\x70\x93\x17\xa1\xd5\x1c\xef\x0c\x0b\x2d\x10\xd5\x2d\xdd\x47\x19\xcb\xf6\x18\x03\xae\xd7\x7b\xfd\x45\x1b\xa5\xc0\xbd\xbb\xc3\xe8\xbc\x94\xbf\xb9\x3d\xf2\x23\x7c\xea\x0c\xbb\x18\x4d\x05\x01\x2d\x3b\xf5\xb8\x61\xa6\x70\x00\xe7\x70\xdf\xdd\x9d\xff\x70\xf2\x30\x44\x44\x45\x28\xa1\x8f\x64\xc4\x22\xf9\x04\x4a\xdf\x3f\x72\xa2\xf4\xcf\x0d\x46\x20\x9a\x12\x26\x81\x13\x50\xd5\x52\x5f\x73\x0b\xa3\xff\x7b\x5e\xfe\xbe\x8d\x56\xee\xb1\x2e\x35\xed\xba\x9a\x7e\x40\xa6\x50\xb6\xcc\x2c\x6d\x8d\x5d\xf3\x3b\xe3\x6f\x1d\xd4\x55\xfc\xde\x22\x25\x9a\xfd\x3d\x67\x1b\x0a\x5d\x67\xc5\x47\xc1\x28\x1a\x64\xba\x34\xc3\x50\xcf\x63\xb3\x5c\x6b\xf3\x4d\x6d\xeb\xeb\x98\x48\x01\x3d\xe3\xfc\xe7\x45\x71\x74\xa4\x04\x21\xc0\x42\x3c\x3d\xd9\xbb\xde\xa2\x8d\xf9\x89\x05\x1f\x1d\x8f\xd8\xa5\x8b\xaa\x2b\x7e\x95\x85\xaf\x21\x9d\x04\x65\x4e\xca\xad\x40\xb3\x31\x95\xfe\x07\x28\x5a\x27\xf3\x44\x99\xaa\xbd\x53\xca\x70\xe2\x07\x6a\x9e\xd4\x71\x09\x81\x59\x34\xdf\xd5\x4d\x4e\xa7\x63\x92\x6c\x22\x89\x0e\xa7\x83\x44\x6a\xfa\x8e\x1e\x1b\x4e\xe7\x36\x75\xa9\x8b\xc9\xd8\x6a\xfb\xa6\xb6\x25\x2a\xdc\xec\x38\x31\x55\x73\x09\x82\x38\xac\x6a\x86\xbc\x01\xc1\xd2\xbb\x68\x25\x75\x13\x86\x65\x52\x53\x7d\xda\x19\xf4\x82\xb0\x1a\x31\x91\x33\x28\xa8\xe5\xa3\x32\x31\x2a\x6a\xa2\x44\x2e\x46\xc2\x46\xac\xcc\x34\x9b\x30\x25\x47\xcc\xcb\x5a\x3f\xe3\xb9\x04\x7f\x54\x4a\x94\xbe\xa0\xbe\x86\x5a\xf7\x26\x2c\xba\x87\x32\x41\x53\x70\x29\xcb\x6f\x6a\xb6\xee\x0c\x2b\x9c\xf0\xd9\xbe\xad\x4a\x5b\xa6\xd8\xb8\x61\xa0\xe1\xb9\x5e\xfc\x19\x61\x44\xc0\x44\xc1\x96\x5d\x7b\x84\x5b\x58\xb9\x1b\x38\x37\x78\x12\xad\xf3\x57\x7a\x8b\x05\xce\x15\x4f\xb5\x7e\x8b\x93\x64\xd1\x33\x5e\x67\x82\xe6\x58\xce\xdd\x46\x1b\x87\x61\x9b\xbb\xc9\x2e\xee\x19\x8e\xe6\xe4\x4e\x61\x95\xd7\x46\x66\x55\x46\xf9\x81\xb0\x3c\xfd\x70\x8a\xfe\xa7\x98\xe3\x59\xff\xec\xfb\xc1\xf8\x7c\x78\xd7\xff\xee\x62\x70\x1e\xcc\xc7\x3e\xb9\x1c\xde\xdd\x2d\xff\xfa\xfd\xf0\x7e\xf9\xc7\x9b\xeb\x9b\x87\x8b\xfe\x7d\x5d\x2b\x17\xd7\xd7\x3f\x3c\xdc\x8c\x3f\xf6\x87\x17\x0f\xb7\x83\x9a\x4f\x1f\xee\x9b\x1f\xde\xfd\x30\xbc\xb9\xa9\x6b\x75\xf0\xe3\xf0\x4c\x77\x67\x7f\xff\x5b\x70\xec\xc0\x75\xae\x57\xa0\x61\x7e\xd5\x93\x79\x84\xca\x2f\x9e\xa2\x87\x6a\xdd\x27\x9b\x88\x65\x40\xbc\x9e\xb1\xd4\xcc\x0d\xf2\x00\xc1\x04\x5b\xac\x56\xd3\xa7\x26\x56\x39\x9a\x13\x94\x70\xfe\x98\x67\x96\xe7\x19\x6b\x3b\xe3\xc6\x22\x44\x64\xd0\xda\xf7\xc3\xfb\xd3\xe5\xfa\x53\xbe\xb1\x00\x2e\xd4\x1b\x97\x9f\xb1\x81\x0e\x00\x3e\x0b\x46\x16\x57\x97\xa8\x70\x5d\x07\x3d\xf8\x2d\x5b\xd5\x8f\x69\x0d\x33\x55\xe9\x26\x36\x61\xd4\xc5\xc4\x82\x86\xcb\x1b\xbe\x6a\x35\xfd\x72\x98\xc2\x9b\x68\x42\x22\x9c\x9b\x88\x6e\x7d\x81\x09\xc1\x45\x38\xe0\x82\x50\xf6\xd7\xa8\x25\xb0\xda\x06\x2b\x7b\xa6\x27\x2e\x1f\x69\x96\x95\xb6\xdd\x12\xe2\xfa\x9d\x87\x52\x67\x4f\x34\x52\x24\xfe\xb0\x2c\x17\x95\x2b\xeb\x4b\x38\xd5\x7a\xc8\xc1\x59\xa7\x6c\x66\x6c\x09\xae\xe8\xdc\x7c\xe1\xa3\x90\x20\xe8\xb5\x08\x03\x86\x22\x18\xfa\xae\xf1\x45\xc1\x28\x84\x15\x61\x85\x9e\x09\xc0\xd1\xe4\xb6\xea\xa6\xd1\xe9\x35\xcf\x80\xee\x4c\x3c\x80\xab\xa1\x5b\x82\xa9\x69\x64\xf2\xfb\x10\xe4\xf5\xf7\x92\x6c\xe6\xc4\x5b\x8b\x29\x72\x6e\x1a\x05\xae\xef\xf2\x05\x60\xc4\xfb\x74\xfa\xd5\xdc\x74\x6b\x2e\x21\x7d\x1d\xb4\x19\x8f\xc3\x51\x2b\x15\x07\x69\x3f\xb0\x52\x01\x89\xb5\x6b\x75\xcf\x63\xbc\xd0\xc4\x01\x41\x0f\x32\xcf\x32\x2e\x14\x6a\x68\xc3\x84\x40\x9a\xf1\xc1\x5d\x66\xe7\xe1\x59\x24\x34\xa2\x25\x17\x59\x53\x87\xac\x1d\xb4\x94\x5d\xd7\xc0\x77\x16\x24\x17\x81\x82\xe9\x6b\x46\xa6\x25\x55\xbd\x44\xa1\x75\x42\xf5\x2e\xd9\x99\x99\x16\x1c\xda\x96\x30\xae\xeb\xfd\xda\xb5\x50\xbb\xe5\x09\x99\xaa\xf1\x86\xce\x2e\x68\x91\x35\xa1\xf1\xd1\xd9\x7c\x0f\x2d\xb6\xd7\x3e\xfe\x68\x83\xa2\xb5\xca\x11\x58\x1e\x04\xe7\xca\xc8\xbd\x85\x6e\x84\xdc\x6a\x82\xd9\xc2\x76\x6a\xf3\xe8\xbd\x70\xa9\x75\x09\x13\x4b\xe6\x53\xce\x8f\x47\x6c\x00\xc1\xa7\x85\x82\xe3\xd2\xeb\x41\xbb\x58\xab\x57\x94\x0a\xb6\xbf\x6a\xa6\x4b\x33\x3a\x7e\x41\xf7\x26\x64\x91\x24\x0b\x54\x14\xe5\x2f\x7d\xd7\xe6\xf4\x18\x6b\xba\x13\x2d\xcd\x84\xcd\xd1\x91\x8a\x64\xd6\xe2\x6f\xe6\x59\x44\x49\x83\xb7\x59\x77\x75\x8c\x7e\x72\x16\x25\x48\x1a\xf2\x49\x34\x2e\xee\x35\xc1\x0b\x07\xa8\x5d\xb7\xb0\xfb\xc0\xa8\xde\x77\x1a\xd1\xea\x05\xf6\x60\x98\x35\xab\x5c\x52\xec\x19\x33\x96\xde\x0d\xc2\x90\xce\xfc\x47\x77\x64\x75\x44\xe5\x47\x28\x61\x6e\xa3\xd2\x41\x66\x61\xc9\xe2\x7f\x99\xcd\x32\x28\x1e\x2e\x48\xc3\x96\x94\xb6\x9e\x59\x7d\x7e\xc0\xb3\x68\x40\x3e\xd0\x94\x26\x09\xc8\x01\xc7\xa8\xcf\x16\x0e\x04\x43\x5f\x85\x2e\x38\x95\xce\x18\x5f\x97\x9f\xdf\x40\x4c\x51\x40\x4c\x77\xcd\xc4\x64\xe2\x3f\x0a\x0c\xa4\xfd\x50\xd4\x1e\xf0\xf0\x34\x6f\xc1\xcb\xd5\x44\xda\xa3\xe0\x6d\x60\x14\x08\x6f\xf3\xd7\xca\x2c\x5b\x1a\x6e\xf0\xe1\xbf\xea\x87\xfe\x29\xc7\x02\x33\x05\xf9\x52\x56\x68\x15\x24\x48\xdb\x26\x9f\x21\xb6\x95\x19\x03\x33\xfc\x14\x6e\xae\x0b\x25\x30\xe1\x67\x34\xee\x21\x7a\x4c\x8e\xa1\xb2\xad\xd0\xb2\xc4\xa4\x78\x73\xae\x25\x87\x11\x5b\xca\x03\x39\x46\xfd\x44\x72\xfb\x05\x61\x51\xc2\x25\x84\xf6\x4e\x42\xd0\x71\xa0\x7c\xeb\xae\x9a\x2c\x40\xbf\x81\xad\x2c\x9a\xe7\xf6\x41\xf0\x21\x14\x68\x05\x5f\x7b\x02\x27\xbd\xf8\xfd\xf7\x3c\x33\x5e\x90\xa6\xf8\x8b\x17\x2c\x85\xb5\x74\x0d\xbd\xd8\x26\x99\x32\xcb\xab\x36\x08\xde\x80\x8d\x29\xf2\x73\x02\xf4\x3a\xf4\x35\x56\x28\x21\x58\x2a\xf4\x87\x6f\x36\x8a\x39\x71\x13\x2c\xb8\xab\x3d\xbe\x45\x92\xbd\x4b\xd3\x0c\x85\x3b\xdf\x31\xd4\xdd\xc5\x42\x21\x8c\x18\x79\x0e\xb3\x72\x38\x24\x52\xb9\x62\xba\x24\xc0\x05\x31\xb1\xf8\x06\xd5\x08\x32\x5d\x8d\xca\xd4\xc0\x47\x5c\xa9\x08\xeb\x96\xb5\xc3\xaa\xa1\xac\x9e\x8f\x6a\x83\x30\x76\xfd\x52\x91\x30\x39\xc7\x6a\xc4\x2c\x67\x75\xe1\x28\x41\x8a\x7c\x3f\x49\xca\x49\x8a\x18\xf2\x70\x99\x9e\xb0\x1e\x7d\x7c\xec\x17\xe8\x0a\xd4\x2f\x9f\x29\x56\xb2\xff\x15\x87\xc5\xe4\x32\x78\xac\xc8\xb0\xed\x5a\x69\xa7\xce\x6e\xfd\x8a\x42\x70\x4d\xf7\x17\x7c\x46\x23\x9c\xb4\x10\x86\x49\xdd\x90\xd7\x1c\xac\x65\x5f\xc1\x0a\xd9\x78\xdf\x1d\xb4\x17\x95\xeb\xed\xee\x70\xcd\x3e\xf3\x1a\x33\x7e\xc3\xe6\x06\xb2\xc5\x2e\x0a\xb8\x4f\x59\x7c\x2d\x4f\x72\x69\xe8\xc3\x18\x00\x13\xd6\x73\xc1\x02\x80\xc0\xb1\x0e\x93\xb7\x16\x07\xf9\xd0\x41\xfa\xa5\x0d\x22\x35\x8c\xcf\xbe\xd9\xe0\xd1\xcd\xde\xf7\xf4\x7b\xc5\xfc\xdd\x54\x7c\x70\xdd\xf2\xc4\x9b\x85\xbd\x7e\xfc\x77\x1c\x41\x96\x24\xf4\xe4\xf2\x33\x97\xc1\x2c\x5d\x09\x10\x0c\x4e\x82\x5a\xf1\x30\x13\x3c\x22\x52\x1e\xa3\x01\x5c\x34\xf6\x9f\x08\x4f\x9d\xa3\x23\x78\x79\xc4\xb4\x66\xe2\xb0\xef\x82\xf6\xcb\x24\x5e\x77\x02\x0c\x90\xee\x4e\x3e\xa2\x74\x7d\x7d\xb7\x26\x6d\xc2\xe1\xf8\x42\x1b\x50\x12\x0a\x0d\x66\xa7\x28\xe6\xd1\x23\x11\x27\x82\xc4\x54\x9e\x82\xcf\x5e\x35\x3a\x0b\x53\xad\x6d\xef\x2c\x69\x34\x05\x20\xac\x01\x14\x38\x33\xfd\xdb\x94\x02\x97\x9a\xd4\x43\x74\x0a\xea\x84\xcb\x67\x35\x09\x5c\x0e\x2a\x90\x30\x25\x16\x26\xda\xd9\x99\xb2\x2a\x0b\xe1\x34\x0d\x2d\xb4\x35\x65\x62\x8b\x7d\xc4\xf6\x6c\x39\x6d\x93\xf1\x63\x03\x19\xcc\xa4\x14\xb7\x79\x60\x86\x5d\x64\x58\xcd\x25\xc0\x7e\x94\xd7\xc0\x2a\x5d\xf0\xa9\x5e\x21\x9c\x41\x1c\x84\xb1\x52\x14\x1f\x79\x70\x0a\xa9\x68\x92\x8c\x98\x49\xdc\x00\x84\x8e\xaf\x6a\xd1\x85\xf4\xa7\x3d\x84\xe3\x18\xfd\xef\xaf\x3f\x5e\xfc\x7c\x3f\x18\x0f\xaf\xc0\xe6\x3d\xbc\x18\x7c\xd3\xf3\x3f\x5e\x3f\xdc\xfb\x5f\x8d\x85\xe5\x89\x08\x94\xe2\x47\x50\xf1\x98\x24\x36\xf1\x94\x8c\x58\x38\x52\x87\xbb\xa4\x9f\x48\xe2\x22\x68\xad\x98\xe2\xe1\xa7\xed\x1e\x36\x81\xb6\x5a\x38\xce\x0d\x94\xdf\x5b\xff\xc9\x6a\x1a\x74\xc4\xe3\xbb\x70\x62\x20\xe4\x17\x63\x19\x00\xf1\x58\xdd\xb7\x20\x38\xc2\x66\x94\x35\xc5\xf9\x11\xf6\xf4\x92\x42\xfc\x0f\x64\x01\x81\xe6\x37\x98\x8a\xd6\xb4\x57\x8f\xa4\xe8\x4e\x8c\xd6\xd3\xb1\xac\x1e\x2a\x69\x64\x61\x93\xa9\xdc\x18\x4b\x5a\x07\xa2\xfb\xe6\xd3\xb5\xd0\x9c\xe4\xb3\x12\x0e\xe1\xcb\xe7\xc2\x3a\x18\x4c\x7f\xd1\x14\x34\x38\x62\xf7\xd7\xe7\xd7\xa7\x88\x24\x78\xc2\x21\x0d\xd2\x86\x1a\xb9\x26\xec\x82\x45\x3c\x0d\x1a\x2a\xa1\xbb\xf5\x50\x56\xa0\xbb\x85\x46\xb4\x63\xd3\xc6\x1a\x94\xb7\x8c\x8b\x65\x6c\xb4\xfd\xaa\x80\x76\xb2\x37\x5c\xb4\xb9\xfe\xf5\x6b\x26\x2f\x24\xd3\x8a\x5c\x85\xf3\xda\xbb\x79\x4a\x30\x20\x7f\x58\xb7\x90\xb5\xe5\xdb\xc0\xd8\x24\x29\xd5\xa2\xd6\x07\x47\x1e\x5b\xd7\x7e\xf1\x26\x67\xe8\x87\xbf\x48\x34\xc9\xd5\x88\x95\xdb\xe0\x0c\xf5\x7f\xba\x43\xdf\x61\x15\xcd\xbf\x19\x31\xc8\x4b\xfc\xe1\x2f\x0d\x30\x94\x1b\x23\x3b\xeb\x35\x39\xc7\x0a\x5f\x70\x1c\x53\x36\xab\x83\x75\x2e\x6a\xef\x0d\xee\xfb\xa7\xe8\xda\xea\xf0\x45\x16\xad\x72\x70\x2a\x41\x43\xc0\x90\x61\x22\x8e\x8b\x00\x2b\x67\x65\xe8\x5b\xa3\x99\xc1\x85\x35\x62\xf7\x06\xcf\x5a\x73\x55\xaa\x50\xc6\x6d\xfd\x47\xad\x95\x19\xa4\x6f\xec\xb2\xcb\x49\xb2\x40\x7a\x75\x80\x8c\xfd\x66\x58\x79\x0c\xe4\x99\x65\x66\x3f\x62\xa0\xa0\xfb\xbc\xde\x84\x47\x38\x81\x58\xbf\xa3\xc0\xa6\xa7\xd5\x76\x9e\x03\xb6\x0e\x04\xd9\xb0\x45\x39\x24\xd7\xc3\x3d\x79\xa1\x2c\xdc\x28\x30\x00\xc0\x3e\x5a\x3f\x64\xca\x35\xc7\x31\x38\xb6\x60\x7c\x4b\xcc\xea\xe8\x0f\x3d\xae\xad\x59\x16\xfd\xd4\xa7\xbc\xf3\x9c\x39\x1c\xb7\x08\xcc\xf7\x6c\x01\x61\xe1\x50\xb0\x8d\x43\x48\x49\xc1\x9d\x2d\x51\x2e\xed\xa2\xbf\x13\x83\xcf\x46\xcc\x44\x20\x96\xf6\x25\x44\x3e\x0c\x7a\xe7\x0c\x02\x24\x97\xf3\xec\xf3\xcc\x06\x4c\x5a\x59\x3f\x13\xe4\xc8\x67\x8f\xc7\xa5\x35\xd5\x37\xec\x31\xba\x0d\xd5\xeb\x98\x47\x79\xea\xaa\x52\x40\xe6\xb9\x8d\xac\xb3\x97\xa8\xa7\x10\x73\xb1\xaf\xa3\x78\x40\xb8\x53\x04\xa0\x77\x5a\xeb\xc7\x86\x60\xfa\xe1\xa7\xcb\x92\x7a\xb3\xe0\x0b\xbc\x63\xb7\x68\x38\xd3\xd0\x38\x2b\xb7\x54\x6a\x6d\x67\x4c\x87\xab\x02\x39\x9f\x0b\x10\xb6\xc8\xe7\x8c\x83\x91\xdb\x24\x56\xf3\xf8\x2b\x89\x86\x37\x5a\x02\xd2\x1a\xaf\x3f\x83\xb9\x54\x26\x68\xcd\xe4\x3f\xc3\xd7\x26\x0d\xa1\x87\xbe\x45\xa3\xfc\xdb\x6f\xff\x14\xa1\xcf\xee\x8f\x3f\xff\xe7\x7f\xfe\xe9\xcf\x9b\xa4\xa9\x38\x85\x1c\xda\x2d\xd6\xc8\x97\xe2\x2c\x8b\x44\xe1\x0e\x2c\x73\xaa\x1d\x76\xc1\x1e\xc0\xa6\xe5\xdf\x06\x21\x3b\x88\x49\xc2\x33\x7b\xc2\x65\x78\x32\x51\xe9\x68\x16\x91\x04\x92\xa8\x5e\x99\x43\x78\x61\xd7\x4a\xf4\xff\x6b\x05\xd0\xeb\x58\x1f\x95\xed\x62\xa7\x68\xe2\xc5\x6b\xdd\x08\xfa\xda\xda\xff\x14\x38\x10\xbf\x71\x17\x1c\x4f\x62\x22\xcc\x98\xbc\xc9\xce\x1b\x12\x81\x39\x90\xcf\x59\xc2\x63\x07\x2d\x5f\xe0\x28\x50\x10\x10\x06\x9f\xb1\xe6\xdc\x3d\x0b\x41\x6a\xf3\x56\xc1\xf3\x32\xc5\x11\xb1\x39\xd6\x5f\x7f\x3e\xd5\xbf\xf5\xd0\xe2\x14\x82\x53\x7b\xe8\xd7\x53\x8b\x34\x88\x85\x1a\xeb\x9f\xbe\x71\xb2\xb6\x6d\x02\x06\x4d\x25\xfa\xea\xe4\x09\x8b\x13\x60\xcf\x27\x66\x44\x5f\x59\xce\xea\x6b\x0a\x87\xb2\x79\xc2\xf9\xa3\x0d\xdc\x5d\xfa\xf0\xc4\x81\xd6\x02\x79\x7b\xbf\x89\xd9\x7a\x0f\x6a\xa4\xd0\x11\xbc\x40\xd0\x71\x36\x41\xc7\x7f\x97\x9c\xa1\xe3\x05\x4e\x13\xfb\xab\x7b\x6a\xe3\x8a\xb1\xb4\xb9\x76\xb1\x8f\x11\x4a\x16\xc6\x52\xfa\x5d\xc2\x27\x30\xab\x4b\x37\x53\x13\x99\x0b\x03\x2d\x6e\x9f\xe2\xc2\xb2\x13\x71\x20\x1e\x80\xbd\x98\x72\x65\x5e\xb1\x69\xb3\xcb\xb3\xfa\xec\x87\xf4\xdf\xc6\x2f\x0c\x8b\xe2\x92\x03\x8d\x71\xd8\x47\xc5\xe9\x46\x3f\xa3\xaf\x2d\x0b\xfa\x46\xdf\x31\x36\x0c\xda\x2c\x43\x5d\x07\x0b\xdf\xc1\xcf\x41\x07\x94\x21\x93\xee\xb9\xe2\xcb\x5f\x4f\x8e\x8f\x8f\xfd\xd7\x80\xf8\xf3\xff\x22\xaa\x24\x49\xa6\xa6\x25\x77\x83\x2d\x46\xec\xd2\x15\xad\x72\xc6\xeb\x02\x0e\x3b\x13\x5c\xf1\x88\x27\xe8\xa8\x30\xe8\xc6\x3c\x92\xe8\xdf\xb5\x58\x1b\x2c\x25\xfc\xa8\xf5\xb8\x06\x08\x7d\x53\x25\xe3\x95\x0e\x95\x35\x88\x57\x8f\x55\x88\x80\xeb\x15\x5b\x2c\xc3\x24\x67\xa0\x05\x4d\x39\x27\x16\x25\x57\x08\xfd\x32\xf9\xac\xe0\x51\x03\x08\x71\x6d\x88\x7c\xfd\x4d\xb9\xc4\x6e\x0b\x2c\x62\x43\xd6\x0d\x0b\x60\xb1\x42\x2d\x67\x30\xf3\xec\x85\xee\x13\x7d\xb9\xb0\xb0\x8c\x92\xcc\xd3\x14\x8b\xc5\x49\x71\xda\x96\x89\xb3\x40\xa9\x05\x1e\x93\xb8\x05\x00\x17\x6e\x62\x8f\x96\x8d\x62\xb0\xe2\xa5\xbb\xd1\xfc\xd9\x8d\xa0\x0e\x74\x80\xf6\x44\x58\xc4\x63\x4b\xd7\x45\x56\x6b\x59\x62\xf1\xef\x2c\xcb\x2a\x2e\x22\x46\x16\xc6\x38\xa6\x0c\xfc\x99\x7d\xc3\x7d\xdc\xc0\xbe\xf9\x58\x2a\xcd\x28\x67\x1b\xb8\x47\x87\xd7\x77\xee\x9b\xf6\x97\x2e\xac\x43\x59\x64\xc7\x49\x88\x2d\xcc\x66\x48\xe0\xe7\xe2\xfa\x85\xd8\x0e\x63\x9d\xc9\x7d\xce\xaf\xf9\xf7\x19\xbf\xa1\x89\xbe\xb5\x80\xc6\x8f\x47\xac\xf4\x73\x0f\x91\x84\xa6\x94\xf9\xd8\x3a\xc3\xdc\xf9\xd4\x48\xcf\x8f\x54\xe9\x2d\x93\xf1\xa3\xe6\x60\x0e\x13\x33\x50\xa9\xfa\x6c\xf1\xff\xb1\xf7\xa6\xdd\x6d\x1c\x49\xda\xe8\xf7\xfe\x15\x79\xfd\x7e\x90\xf4\x0e\x08\x5a\xee\x99\x39\x1e\xcd\xf1\x39\x17\xa6\x28\x9b\x6d\x8a\x62\x73\xb1\x7b\x6e\xa3\x0f\x94\xa8\x4a\x00\x39\x2c\x64\x96\x6b\x21\x8d\x5e\xfe\xfb\x3d\x19\x11\xb9\xd4\x8a\x2a\x82\x94\x3c\x3d\xfe\x30\xd3\x16\x01\xe4\xbe\x44\x46\x3c\xf1\x3c\x76\xe9\xb8\xc0\x14\x79\x20\xca\xdc\xb4\xcb\xbf\xd1\x81\x0d\x40\xc6\xe2\x88\x0c\x52\x19\x2c\x3c\xd8\xbf\x73\x65\x4a\xb3\x7b\xc9\xc3\x90\x83\xf2\x82\xe2\x8e\xac\x98\x50\x70\x02\x40\x1d\x15\x2c\xb1\xb3\x7f\x5b\x0c\x94\x53\x55\x6e\x0f\x4d\x62\x21\x58\xf2\xe7\x72\xd3\x5d\x66\xc2\xde\x54\x94\x10\x25\x54\xb9\xb5\x1b\x6a\xc4\x8a\x3b\x25\xf3\x27\x16\x51\xc2\x91\xe5\xcf\x14\x04\xc8\xc7\x09\x06\x48\xd3\xa0\x2e\xbc\x5e\xb0\x1a\xd4\x27\x4c\x84\x7a\x89\xff\x7e\xc5\xe8\x6e\xf8\x72\x42\xf7\x79\x96\x3b\xf6\x34\x9c\x73\xd0\xb7\x16\x31\xfa\xd0\x41\xd1\x61\xcd\xb3\x18\xbd\xe5\xe1\xab\x02\x33\x83\x8d\xfd\xb5\xd3\x25\x7b\x90\xf9\x66\xae\x6e\xb4\x75\x38\x32\xa5\x9d\x26\xc6\x04\x1e\xa3\x8d\xfa\x78\x0e\x87\x00\xb4\xba\x6d\x05\x98\x43\xf8\xa0\x1c\x26\x00\xd1\x2e\x94\x8e\xc5\x61\xe4\x8f\x37\x3e\x56\x61\xe3\xd7\x99\xc0\x3c\x33\xb8\x29\xba\xd2\x74\x45\x9e\x8f\xf4\xcd\xd7\x27\x1e\xee\x21\x2a\xc7\xd4\xaa\x1f\x46\x29\x93\x84\xbc\xaa\xee\x56\x83\x52\xec\x8b\x33\xc8\x32\xae\x8c\xbd\x53\x9a\x38\x74\x12\xa2\x16\xa6\xc7\x41\x77\x3f\xf6\x3d\x82\x61\x77\x00\x63\xce\xd6\x99\x2e\x53\x97\x8a\x6f\xd3\x08\x71\x1a\xc8\xa6\x39\x53\x2b\xfd\x86\xde\x54\xe7\x52\xdd\xe1\x8a\x7f\xae\x39\x42\x31\x11\x11\x57\x28\x70\xad\xc2\x3d\xf4\xe1\x88\x49\x15\x25\x25\x5c\x7c\x79\xc1\xa3\x3b\x14\x44\xe9\x72\xfa\x9a\xdf\x2c\xf6\x27\x69\x76\x58\x4c\x65\x92\x50\xb5\xfe\x02\x05\x92\x39\x70\x01\xdd\x4b\xce\x38\xbb\xbd\x3a\x6b\xaf\xfb\x4e\x36\x83\x39\xed\xb7\x67\x75\x81\xc0\xff\xfb\x41\x8e\xc2\x5d\xd6\x28\x85\x45\x65\xa9\x3b\xe7\x52\x17\x61\x3d\x2e\xd2\xc2\x3c\x20\xe2\xab\x16\xd7\xfe\xe8\x75\xba\x4e\xcb\x85\x19\xa8\x64\x0c\x40\xc0\xb4\xe2\xbb\xcb\xdb\x59\xf0\xbb\xbe\xa5\xf2\xdd\xe5\x2d\x0b\xea\x40\xb2\xe8\x44\x44\x85\x43\x1a\x4f\xd9\x89\xd7\x70\xa8\x5b\xe6\xb1\xb8\x97\x11\xa6\xce\x4e\x8c\x55\x34\x57\x40\x8d\x6e\xde\x3a\x47\x96\x4f\x93\x7d\x77\x79\x4b\x2c\x9c\x9e\x37\x07\xe5\x28\x80\x1a\x63\xdc\xb5\x53\x23\x25\x57\x5a\x1d\x21\x65\x50\x16\xfb\x68\xc7\x04\x1e\xd7\x11\x4f\x8b\x92\x0c\x8c\xfb\xd7\x53\x3b\x27\x57\x3e\x12\x62\x9a\xa5\xe7\xca\xd8\x4a\x98\x63\x00\xca\x69\xa6\xd3\xcd\xa9\xad\x0d\xea\x21\xe0\x00\x18\xb4\x83\x0e\x7f\xe9\x32\x07\xb9\xda\x31\x9e\x2d\x65\x91\x99\x67\x18\xfe\x78\x82\x0c\x67\x1b\xab\x8e\x85\xf3\xe6\x2d\x23\x12\xbb\x83\x09\x96\xaa\xc8\xe7\x2a\x48\x80\x71\xd9\xc6\x98\xbc\x20\x15\x03\x2a\x61\xc0\xde\x58\x6a\xd3\x28\xd1\x65\x6c\xaf\xd5\xcc\x89\xe7\xed\x52\x34\xa2\xe6\x0a\x18\x4f\xcc\xdd\xaa\x8d\x19\xea\xef\xfe\x37\xec\xa3\xba\x97\xb1\xe4\x47\x85\xc8\x13\x7e\x54\xfc\xeb\xc7\x49\xed\x4f\xfc\xf5\x97\x5f\x7e\x44\x1d\xc0\x2e\x3a\x87\x80\xb5\xe9\x40\x07\x4f\x7b\x9c\xc2\xf1\x1f\x9a\x55\x7a\xc0\x3c\x9d\xcb\x3b\xc1\x3e\xe2\x74\x7f\x24\xf2\xe3\xc7\x4d\xdb\x5c\xb5\xcd\x1b\x7b\xcc\xb4\x01\x15\x7d\xfb\xbc\xb1\x9e\x69\x7b\xbd\x9e\xfe\xdb\x7a\x69\x66\xeb\xab\xf5\xf4\xf5\x97\xf0\x9f\xb5\x39\xda\xb7\x79\x5d\xf6\x4c\x5b\xb3\x5b\x0e\xa2\x96\x6d\xe9\xce\xa2\xb9\xda\x7f\x18\xb1\x71\x67\x11\xac\xda\xb6\x8d\xcf\x0b\x71\x68\xd6\x2c\x72\x62\x8f\x40\x5f\x37\xc8\xc6\x7b\x23\x82\x07\x32\x75\x7b\x96\x6d\x80\x7b\x76\x53\x86\x87\x00\x5c\xf8\x70\x04\xcf\x0f\x7c\x7f\x58\x7f\x6a\xdf\xdd\xd3\x9d\xfe\x66\x26\x42\x8c\x60\xa6\xb9\x36\x5f\x1f\xd8\xc8\xca\x57\xfb\xda\xf8\xc0\x51\x8d\xb0\x29\x82\x13\xd3\x6b\x7d\xcc\x2e\xb2\xcb\x11\x5d\x26\xb9\x4b\x1b\x74\x2d\xb1\xd0\x4a\xf7\xbe\xb6\xf5\xae\x69\x2f\x85\x62\x87\x2e\xea\xd6\xb2\xf0\x03\x57\xc4\x81\x50\x38\xf3\xa4\x5e\x6c\x07\x13\xac\xfb\x8a\xdf\xd2\x8f\xdf\x37\xe8\xd6\x9d\x79\xf9\x1e\x32\xbe\x1d\xc9\xd6\x96\x2b\x63\xad\xd9\x5a\x3b\x02\x4b\xf8\xca\x7f\x54\x93\x6e\xd3\x47\x35\x08\x6b\x1c\x96\xac\x65\xab\xb2\xa5\x3c\x60\x6c\x95\x27\x18\x3b\x28\x36\xe0\x56\xf6\xfa\xb9\xf6\x98\xf3\xee\x65\xd4\xda\x4d\x78\xb6\x46\xa7\x57\x2e\x8a\xfc\x55\xcb\x0c\xfb\x3c\xb6\x03\x66\xd8\x9a\x5d\x8b\x71\xfc\x21\xd6\x1e\x03\x97\x4a\xdf\x4e\x73\xad\xac\x8a\x6d\xb8\x97\x96\xad\x3f\x64\x92\xf7\xc9\x75\x91\xce\x50\x99\x0a\x78\x5e\xbb\xf9\xb5\x0e\xa4\x99\xbd\xe0\x5b\xc7\x1e\x43\xa5\xd9\x94\x5f\x6c\xdc\x52\x80\x4e\x4c\x77\x1b\x06\x71\xc8\x0e\x6d\x02\x31\xdd\x76\xb5\x60\xae\x66\xf6\x2b\x9e\xed\x3a\x97\xe8\x65\xc1\x74\xc4\x72\x89\x19\x2e\xe0\x33\xe3\x7e\xd4\xa9\x73\x1d\x9d\x18\x9b\xe8\x5f\xeb\xc2\x6d\x2e\x32\x7f\x1b\x79\x36\xd4\xb0\x1f\x1d\x35\x0f\x63\x43\xee\x3d\xd1\x6d\x17\xa9\x28\x3b\x96\x6d\x15\x0f\x7f\xa8\x50\x41\x44\x84\x8d\x28\x06\xc8\x0b\x48\x76\x7e\x99\x7a\xd2\xf4\x5a\x65\xcd\xdd\x5a\x1c\x74\x1a\x4b\xbe\x5d\x64\xba\x5b\xde\x79\xc0\x30\xd9\x22\x2a\x3e\xfb\x0d\xca\x3d\xee\xd8\xcf\x25\x4f\xf0\x72\x53\xb4\x1c\x6d\xb3\xc1\xfd\xf1\xd5\xbf\xb3\x19\xdc\x3e\xec\x3d\x9c\x8b\x00\xda\x82\xd2\x0a\xcd\xe4\x36\x15\x59\xae\x15\xef\xd4\x39\xbf\xfb\x3a\x5f\x90\x56\xab\x79\x1a\xeb\xb2\xa9\xcb\x3a\xa2\x27\x2d\xa5\x85\x9d\xe2\xec\xae\x5c\x8a\x4c\x09\xd4\x72\x87\xef\x31\xfb\xbd\x41\xcd\xd5\xbc\x2c\x36\x5f\x2d\xa2\x44\x0e\x16\x90\x85\x8c\xd1\x99\xf9\xd9\x09\xfe\xaa\xaf\x03\x95\xf2\x2b\x4d\x57\x0c\x3f\x63\xf8\xd9\x94\x7d\xcb\xa3\x3b\xa1\x62\x96\x26\xe5\x5a\x12\xf1\x0c\x9a\xfb\xb2\xfa\xb0\xaf\x76\x0c\x6d\x0b\x2c\xdf\x5c\x43\x73\xb5\xe5\x77\x28\xea\x42\x46\xa4\x79\x39\x74\xd1\x16\x3a\x57\xc9\x42\x36\xd7\xee\xde\xd9\x72\xf7\x61\xb3\x98\xfa\xda\xcb\x4b\xcc\x97\x7b\xd8\x68\x42\x19\x55\x3c\x35\x23\x36\xae\x5b\xad\x0d\x7e\x30\xcb\xe1\xe2\x54\xfd\xa9\x31\xb8\x7b\x21\x84\x07\xc2\x44\xa5\x62\x1c\x28\xc6\x5e\xe4\xac\x4c\xad\x7d\x06\xb1\xa5\x04\x90\x3e\x38\x05\xe6\x83\x54\x46\x77\x88\x2d\x85\xec\x09\xe6\xba\xd7\x10\x7f\x66\xc2\x83\x1c\xdb\x8e\x86\x15\x12\xec\x1c\x86\x5b\x69\xe8\x1a\xed\x59\xa7\x03\x33\x43\x8a\x8d\x50\x8b\x47\xc8\xeb\x0c\x9f\xb4\x4a\x16\x08\x99\xc1\x2e\x46\xe7\x86\xb0\x54\x92\xe8\xb4\xfd\x1b\xdb\x69\x47\xc8\x55\xcd\x8c\x96\x39\xcb\x79\x21\x73\x73\x96\xb5\x8e\xb8\xa7\x35\x3a\x64\xd4\xf9\x38\x2e\xa5\x16\x1e\xa5\xda\x58\xb8\x4c\xb3\x29\x7b\x07\x91\x8d\xe0\x65\xa0\x1d\x2b\x51\xd7\x81\x55\x6c\x44\x27\x3d\xef\x53\x40\x34\x6d\x0f\x82\xef\xf7\x06\xac\x5c\x56\xe1\x94\xcd\x7c\x44\x19\x79\x99\x30\x56\xbc\xa7\x47\x22\xc9\xc5\x63\x16\xdf\xa0\xe0\x0b\xa0\xae\x60\x01\x31\xb0\xa4\x72\xf3\x77\xcf\xd3\xee\x9a\xf9\x00\x89\xfb\xfc\x4e\xa8\x3e\x0f\xfb\xf0\x16\x62\x08\xa4\xd7\x25\xe0\x62\x2b\x1a\xc3\x2b\x8f\x69\xe0\xf0\x6d\xe7\xa9\xb0\xe4\xea\xd8\x0c\xb9\x79\x86\x44\x77\x94\x2e\x88\x11\x36\x22\xd3\x7a\xd8\xe8\x3c\xdc\x67\x76\xfe\xf0\x25\x9b\x95\x4e\x35\x0b\xd2\x2d\xdd\x00\x23\xce\x52\xe9\x90\x6b\x0b\x5a\xed\x36\x29\xba\x75\xdc\x7c\x33\x7b\x84\xc2\x30\x00\x32\xc1\x16\xd5\xb2\x9b\x55\x5a\x3e\x95\x2a\xcb\x7e\x82\xeb\xe6\x08\x37\x1a\xf4\xc3\xd7\xf9\x07\xa8\xef\x29\xe8\x60\xd0\xcf\xf7\xf4\xa9\x58\x8f\x0c\x42\x3b\x90\xb1\xf5\x3f\x6a\x48\xd3\xa0\x8b\x32\xd5\x31\xf3\xeb\xbd\x2b\xd7\x45\x29\x8d\x20\xd3\x5f\x61\xb7\x82\xc6\x0d\xee\xdb\xbe\xad\xf6\x3e\x40\xaa\xb1\x65\x29\x93\x18\x79\x02\x03\x0b\x55\x5b\x13\x08\x04\x8a\xc0\x1e\x91\xb9\xbb\xe0\x5a\x16\xfd\x0f\x5f\xe7\x97\x3a\x3e\x64\x61\x8d\xe7\x82\x6d\xae\xeb\x01\x89\x2c\x79\x88\x26\xda\xee\x1f\x89\x54\x77\xa7\x20\xc4\x8b\xbc\xaa\xc8\xdb\xd3\x60\xc0\x9c\x2d\xcb\xd5\x35\xc8\x7f\x76\xd1\x22\x05\xca\x78\x36\xcf\xd9\xcc\xb3\xa9\xc6\x65\xdd\x75\x4d\x0a\x41\x98\xbc\x3d\xc2\xd9\x1f\xae\x3f\x5c\x1c\x6d\x79\x96\x6f\x38\xd0\x4e\xd8\xb2\x26\x56\x51\x1d\xdf\xeb\x16\x5a\x21\xd5\x5c\x1d\xb1\xb5\x9e\x20\x90\xe7\x0d\xdb\x14\x45\x9a\xbf\x39\x3e\x5e\xcb\x62\x53\x2e\xa7\x91\xde\x1e\xfb\xa1\x39\xe6\xa9\x3c\x5e\x26\x7a\x79\x9c\x09\x48\xe5\x38\x7a\x3d\xfd\xea\x35\xcc\xcc\xf1\xfd\xeb\x63\x80\x6f\x4c\xd7\xfa\xff\x9c\x7f\xf5\x1f\xbf\xff\x77\x53\x70\xba\x2b\x36\x5a\xbd\x21\x94\x50\x6f\xd9\x47\xf8\x4c\x38\xc6\x9f\xd4\x6a\xf9\x8f\xe9\x97\x61\x33\xe8\xab\x5b\x1d\x8b\x24\x3f\xbe\x7f\xbd\xb0\x13\x33\x4d\x3b\x34\x2b\x7e\x4b\x7e\xf8\x04\xc9\x0f\x77\xb2\xf8\x2d\xf9\xe1\xb3\x26\x3f\x0c\x37\xb9\xdc\x19\x03\x2c\xd5\xfe\x7c\x34\x7f\x77\x67\xa4\x8d\x05\xec\x3b\x87\x5a\x2e\x87\x30\x35\xed\x80\x2b\x62\xa4\x84\x5c\xad\xbb\xee\x2d\xd3\xe1\xf3\x1b\xab\x14\xd3\xf9\xba\x18\xc5\xc4\x01\x50\x43\x19\x81\x0a\x01\xfa\x28\x53\x2e\xdb\x52\x1a\x02\xe5\x9c\x03\x86\x10\x95\x3c\xda\x69\xc7\x86\x08\x5e\x91\xe6\x93\x88\x17\x4f\x22\x7d\xd5\x5a\x07\xa2\x32\x47\x97\xdf\xb0\xbb\x07\x98\xc6\x84\x53\x3e\x68\x44\x9f\x51\xa4\xe4\xa9\xd5\x49\xa8\xbb\x8f\x54\x26\x49\xf0\xd7\x16\x55\xad\x1f\xac\x22\xc9\x53\xe8\x78\x78\xc4\xf8\x30\x0d\x0f\x5c\xa4\xd0\x16\xdb\xae\x8e\x66\x6c\x78\xfe\x38\x78\xfe\x0c\x49\x80\x5d\x34\x16\xb1\xcd\x32\xb7\x15\xda\xdb\xd8\xf2\x1f\x99\xcb\xdd\xd2\x2c\xa6\x65\x96\xea\x5c\xe4\x53\xf6\x4e\x67\x48\xac\x45\xac\x37\x3e\xe5\xe0\xea\xdd\x09\x7b\xfd\xf5\x7f\xfc\x7e\xae\x5e\xb6\x18\x43\x70\x89\xea\x6c\x4d\x19\x10\x60\x02\x6d\x79\x5e\x88\xec\x38\x5b\x45\xc7\x78\x75\x1c\x9b\xdf\x1f\x51\xa5\x47\x7a\x75\xe4\x44\x0a\x8e\x88\xaf\x7d\xba\x8d\x5f\x75\x61\x03\xdb\x0d\xee\xcf\xf6\xe8\x99\x75\x18\xe6\x6d\xf3\xbb\xff\x60\xad\x6c\x21\x34\x44\xc8\x0a\xc9\xc1\x62\x41\x32\x44\xbd\x72\xb2\x3a\x98\x69\x8b\x0a\x5c\x7a\xd5\xf2\x1f\xdf\x26\x7a\x99\xbf\x72\x14\xac\x3c\xb7\x75\x78\x4e\xc4\xb6\x73\xbb\xb1\xe7\x0e\x79\x7d\xd3\x50\x3c\xa7\x5b\xcd\x9e\x89\xe1\xb4\x8d\x19\xf8\xf6\x43\xc3\xdb\x82\xc8\x08\xc5\x33\x5d\x2a\xab\x5b\xa1\x95\xd0\x2b\x00\x1a\xc1\x33\xc9\xe2\x24\x21\xb2\x00\xe8\x3b\xc7\xfe\x94\x89\x14\xad\x0f\x88\x81\x75\x0f\xf7\x81\xda\x2d\xfb\xc6\xf9\x39\xb4\x5b\x0e\x1d\x77\x3a\x18\x3f\xd3\x80\x1f\x9a\xcc\x80\x5b\x69\x0c\x06\xc8\x7c\x7f\x6f\xbc\xdf\x9d\x03\x5e\x3b\xda\xcb\x24\xa4\x3c\x03\x0b\x5e\x1c\x15\xfa\x08\x68\xf3\x80\x8c\x0d\xd5\x94\xba\x40\x40\x80\x93\x18\x73\xdd\x9b\xef\x0f\x68\x27\xbe\xda\x7e\x09\x1a\x4a\x06\x6b\x8e\x1c\xe4\x04\x0a\x97\x4a\x89\x8c\x22\xc0\x7b\x2d\x83\x91\x28\x8a\x70\x2a\xfb\x31\xe1\xde\x4d\x11\x2a\xdd\xb8\x8c\x40\x1e\x1c\x02\x53\x06\x4f\x93\x8d\xde\x6a\x63\xeb\xea\x32\x0f\x3e\xc4\xa7\x2d\x18\x13\x9d\x86\xf9\x96\xa7\x68\xaf\x7e\xbe\xde\x98\xad\x65\x3e\x42\x17\x74\xf8\xa5\x51\xe2\x61\xcb\xaa\x5c\xd2\x9e\xf6\x3b\x9d\x9b\xfe\x75\x03\x18\x9d\x2d\x84\xfc\x36\xfc\x5e\x58\xf5\x0a\xf9\x57\xf3\xe8\x35\x4b\xca\x3d\x23\x9d\x05\x82\x90\x32\x64\x83\x0e\x01\x94\xf6\xd6\xed\xe4\x6b\x29\xb7\x23\xe7\xc0\xa5\x39\x0d\x99\x00\xae\x30\xf1\xc7\x66\xfc\x1c\xb5\xa6\xfc\x74\xed\x4b\xf0\xab\x95\xe6\x65\x62\x19\xcb\xc7\x35\xf5\xda\x15\x40\xe4\xe4\xcd\x76\x7b\xc2\x47\xc8\x0f\xc3\x31\xc6\x03\xc1\xda\x16\x5d\x30\xe3\xf1\x9b\x11\xa4\xe3\xc6\x8c\x1d\x54\x82\x8b\xb3\x31\x82\xc1\x5e\xe8\x1a\xc0\x71\xfe\xd7\x3e\x77\x66\x1b\xc2\x1c\x39\x72\x7d\xfe\xb0\x69\x65\xc3\xb3\xe0\x7e\x78\xef\xe5\x89\x01\x80\xbb\x2c\xe1\xf3\x8b\x0f\x37\x21\xb6\x48\x62\x6f\x8f\xa2\x8d\x88\xee\xc0\x9b\x86\x57\x1e\x6e\x06\x4a\x87\x07\xc0\xb3\x17\x35\x2d\xb4\x05\xca\xec\x9c\xce\x8b\xd3\x3a\xd2\x19\x8b\x65\x9e\x26\x7c\x07\x90\x04\x85\x99\x82\x1e\xce\xe0\x52\x6c\xcd\x51\xb0\x2f\x98\x30\x7c\xa6\xcd\xac\xcc\xfc\xef\xc6\x8e\xa5\x87\x7e\xfb\xc1\x6c\x9e\x07\x2c\x17\x5b\xae\x0a\x19\xcd\xd5\x56\x70\x15\x62\x48\x09\x92\x61\x06\x39\xd6\x82\x14\x0b\x56\x2b\x11\x15\x9e\xf2\x18\x1e\x21\x6e\xa4\xf6\xed\xc1\x71\x7d\x77\x3b\xaf\xb7\xeb\xdf\x5b\xe1\x65\xb9\x05\x84\x32\xad\x21\xba\x1a\x1f\x19\x6a\x04\x11\x5c\xba\x72\xed\xa3\x16\xfe\x65\xd7\x14\x5b\x8a\xe2\x41\x00\xa3\x0f\x51\x10\xb4\xd9\xf8\x07\x0b\x21\x1d\x92\xbe\x37\x73\x0c\x80\x44\xf0\xde\xa0\xf0\xa5\x0d\x16\x42\x1f\x1d\xf5\xa0\xaa\x71\x08\xbe\x20\x52\x04\x70\x05\xbe\x20\xa7\xe6\x0b\xb8\xa6\xcd\x2b\x38\xbb\x17\xf1\x5c\x55\x89\x1d\xc9\x66\xf4\x1b\x8e\x79\x89\xcf\xa7\x39\x6d\xec\x18\x0f\x0a\xf4\x9c\x02\x99\x95\xa7\xb1\x76\x69\xff\x3d\x92\xa3\xd8\xe9\xe7\x7c\x55\x59\xb5\xe3\xa1\x8f\x61\xaf\x02\x4a\x12\x7e\xa4\xf8\x5b\x41\xff\xb8\x45\xe9\x68\xeb\x90\xd3\xd6\xc1\xb5\xc9\x69\xdd\x70\x83\xb7\x95\x31\x57\x96\xcf\x65\x55\x26\xc8\x53\xde\x95\x35\x43\x2c\x96\x36\xf7\xf4\xf3\xe5\x20\x3b\xa7\x2b\x0b\x54\x53\x1d\x48\x27\x80\xce\xe3\x59\x67\x57\xbd\x50\x79\x09\x26\x85\x15\x4c\x84\xa8\xc4\x5a\x14\x70\x9b\xc7\x65\x82\xf4\x24\x10\x4e\x01\x46\x4c\x9e\x24\x4c\x16\xf9\x5c\x39\x02\x4f\x4c\x8d\x81\x13\xd6\xc6\x5b\x62\x7a\x72\x41\x15\x50\x2c\x7c\xcc\x15\xd8\x61\x32\x92\x45\x23\xe1\x60\x17\x8a\x8c\xa5\xa9\xe0\x98\x4d\x8f\xd3\x36\x57\xe1\x9b\xab\x3e\x09\x94\x7a\x0e\xba\xf4\x4f\x91\x05\xde\xe3\xb8\x35\x55\x3c\x0a\x65\x83\xbd\x33\x0f\x2e\xab\x1f\x8e\xad\x25\x06\x1f\xc2\x05\x9b\x57\x4d\x91\xdb\x00\x8a\x7f\xb7\x42\x56\x4d\x54\x26\x3c\xc3\x74\xa2\x55\x99\x30\xb9\x0a\xa4\xd0\x61\x0e\x90\xbe\xd1\x4c\x57\xa4\xe1\xae\xb6\x21\x94\x9c\x6f\x45\xc0\x1c\x43\xee\x9d\x24\x40\xfc\xa0\x26\x05\x42\x49\x4c\x59\xaf\xa6\xec\xad\x27\xa8\xc5\x19\x86\x3d\x11\xd0\x3e\xcb\x1c\x8f\x3f\xd7\xde\x80\xf4\x00\x7a\x67\x9a\xa8\x95\xd9\x91\x6e\xd7\x75\xcc\x20\xc8\xc7\x8c\x83\x13\x59\xf1\xa0\x7e\x8c\x7b\x2b\xe9\x89\xf9\x69\x0d\x64\xe4\x36\x44\x47\x03\xed\xad\x30\xb2\x91\x21\x65\xf6\x23\x1a\xea\x28\xc9\x5b\x1a\xbb\xed\x51\x5e\x87\x79\x1c\xd9\xd4\x40\xc7\x70\x7c\x43\x83\x95\x13\x82\xc7\x86\x8c\xec\x9a\x17\x63\x91\x64\x2e\x75\x6c\x7c\x43\x5b\x51\x7b\x43\x9a\x09\xa7\xc7\xc8\x76\xce\xcc\x6f\x1e\xd9\xd0\xbc\x5c\x1e\xe1\x01\xed\x14\x89\xe0\xa8\x10\x3c\xda\x54\x59\x1c\x2c\xd7\xb2\xeb\x01\x64\xf1\xc1\x7e\x1c\x4f\x40\x31\xf3\x6b\x0e\xa4\x1c\x99\x69\xfe\x94\x7d\x50\x02\x71\x9e\x7a\x15\x5c\x2a\xd4\x00\xd2\x7c\x04\xb9\x1b\x77\xca\x2d\x4d\xc3\xd4\x9d\x25\xb7\x32\x5b\x6e\xc2\xb8\x2f\x1d\x4e\x3d\x5c\x36\x78\x8a\x74\xd8\x92\x6d\xe2\x50\x07\x98\x97\xc3\x28\x22\xda\xdf\xfc\x01\x5c\x7a\xfc\x09\xd0\xd6\x8f\xe1\xd3\xd2\x9b\xf7\xe0\x5e\x71\x36\xd9\xa1\xba\x6e\x18\x82\x9f\xf7\x8d\xef\xe5\xa6\x8a\x99\x1d\x21\xd1\x78\x7b\xf1\xf6\xf4\xdd\xd9\x45\x55\x01\xf1\x8f\xb7\xa7\xb7\xd5\xbf\x5c\xdd\x5e\x5c\x9c\x5d\x7c\x17\xfe\xe9\xfa\xf6\xe4\xe4\xf4\xf4\x6d\xf5\x7b\xef\x66\x67\xe7\xb5\xef\x99\x3f\x55\xbf\x34\xfb\xf6\xc3\x55\x4d\xc9\xb1\x45\x86\xf1\xe6\xec\xfd\xe9\xdb\xc5\x87\xdb\x8a\x18\xe4\xdb\xff\xba\x98\xbd\x3f\x3b\x59\xb4\xb4\xe7\xea\xf4\xe4\xc3\x8f\xa7\x57\x7b\x24\x1b\x7d\x7f\x5b\x87\xf4\x29\xb0\x85\x8f\x56\xf6\x9c\xb1\x55\x26\x85\x8a\x93\x1d\x66\x8a\xd8\x97\x6d\x0d\xfa\x1d\xde\xbd\x72\x2b\x74\x79\x48\xc2\xc7\xcd\x46\x30\x7d\x2f\x32\xe0\xe1\xc2\xd2\x88\xb4\xc3\xe7\xfc\xd7\x6b\xcd\x44\x91\x35\xa3\x02\xbd\x79\x6d\x45\xb6\x73\x99\x93\x7d\xcd\xf1\x1c\x8e\x54\x09\x4b\x45\xd6\xd7\x16\xb0\x8c\xb2\x32\x2d\xe4\xb2\x3b\x85\x67\x74\xea\xfb\xd0\xb7\x37\x32\x0e\xb7\xd3\xb3\x5d\xb4\x1f\x8c\x95\x4c\x96\x43\x60\xf2\x50\xc2\x63\x05\x6b\xdd\xaf\x2d\xb4\x38\x2d\x97\x89\x8c\x98\x8c\xeb\xfe\x14\x62\xa4\x00\x97\x71\x9d\x98\x3c\x15\x19\x98\xaa\xe6\x05\x90\x66\xe2\x88\x97\xc5\x06\x49\x34\x29\x71\x86\x64\x64\xe6\x2a\x17\x51\x26\x30\x16\x20\x72\x70\xd2\xa2\x20\x69\x50\x13\x34\x86\x38\x64\x62\xa0\xab\x9b\x06\x22\x31\x1d\x31\x02\xfc\x25\x96\x3e\xc2\x49\x8a\xdf\xef\x1d\x1a\x6a\xb1\x44\xc9\xd3\x00\x16\x06\x37\x3c\x7e\x68\x65\x4d\x4d\xbf\xcd\x49\xed\x64\x3d\x71\x92\x6d\xa6\x51\x7b\x37\xf6\xad\xb1\x70\xa1\x54\x53\x6f\xa8\x74\xfa\xe8\x24\x13\x70\x89\x10\xa4\xc1\xfa\x2f\x00\xd7\x44\x99\x49\x90\x90\x64\x9e\x6a\x4b\xb1\xe1\xc9\x0a\x2d\x0e\x33\x35\xed\xbc\x1e\x58\xfe\x8d\xbe\x13\xea\x0a\x27\xec\xb3\x1c\x87\x0a\x5f\x3e\x9e\x55\xc8\x79\x84\xbc\x0b\xd3\xb4\xd1\xae\x2a\x9b\x99\x09\xc6\x54\x81\xef\x84\xe0\x63\x4c\x40\xf2\x9a\x01\x36\xa9\x73\xb5\x92\xbf\x98\x02\xe7\x4a\xb4\xb2\xa6\x03\x98\xcc\xf2\x3b\xba\x73\x19\x80\x73\x48\x92\x77\x27\x14\x28\x9a\x02\x3d\xdf\xfe\x35\x3b\xce\x7f\xde\x9c\x8b\x1e\x87\x3e\xf8\xfc\x64\x45\xe8\x35\x8c\xf2\xd8\x71\x2a\x30\x23\xcc\xb1\x60\xc0\xba\x39\x39\x3f\x3b\xbd\xb8\x59\x9c\x5c\x9d\xbe\x3d\xbd\xb8\x39\x9b\x9d\x5f\x0f\xdd\x7e\x4f\x91\xc5\x57\xdb\x7d\xf5\x64\x36\x77\x42\x1c\xd3\xce\xf3\xc9\xe4\xae\x53\x7e\xdb\xc1\x94\xec\x6f\xbd\x8c\xd3\x45\x2c\xf3\xc8\x5c\x7f\xbb\x85\x50\x31\xc8\x4d\x3c\x6a\xa9\xb6\x17\x55\xef\x85\xfb\x06\x73\xdf\xb0\x27\x08\xde\x76\xf7\x76\x45\xbb\xcf\x01\x92\x09\x6e\xc8\x4c\x98\xcd\x1f\x57\x58\x3e\xa6\xfb\x35\xc6\x4c\x71\x87\xf5\xad\x5a\x44\xbd\x4f\xd8\x5e\x99\xe7\x25\x90\x89\xd8\xaf\x01\x1e\xb5\x63\x54\x88\x03\x38\xd4\xbc\x90\x81\x0e\x3c\x93\xf9\x5c\x6d\xb9\x8a\x79\xa1\xb3\x5d\x47\x17\x87\x1d\x9e\xe1\xb6\xa9\x1e\xa1\xe1\x95\xad\x84\x88\xed\x2c\xe0\x57\xb9\xaa\x2f\x25\x54\xc6\xb8\xf9\xf0\xc3\xe9\xc5\xf5\xe2\xf4\xe2\xc7\xc5\xe5\xd5\xe9\xbb\xb3\x3f\x39\x98\x6c\xca\xf3\x36\x79\xe7\x34\x13\xe6\x74\xb1\x44\x63\xad\xe7\x0b\x8a\x26\xdb\x72\x48\x28\x53\xae\xe6\xca\x9e\x2c\x99\x2f\x7e\x93\xe9\x72\xbd\x69\x2f\xa8\xde\xca\xcb\xd9\xcd\xf7\x8f\x6a\x26\xd0\x40\xa2\xb2\x2a\xee\xb6\x26\x5c\x58\xae\xe8\xdc\x43\x8c\x71\xad\x79\x40\x66\x0a\x5f\x6d\x8b\x32\x74\x9c\x68\x8f\x7a\xbd\x34\x0f\xad\x5e\xe3\xbf\xe5\xeb\x5d\x0b\xe8\x26\x38\x37\x2b\xd7\x08\xc0\xd7\x51\x9e\xbb\x51\xda\x9b\x96\xbf\x55\x6e\xb0\xaf\x8e\x12\xb1\x5e\x8b\x18\x97\x57\xbd\x60\xf2\xc1\xd1\x11\x18\xf9\x7b\xbd\x6d\x14\x49\x42\xf7\x80\x8b\xd9\xe1\xbd\x86\x1f\xe0\x97\xee\x27\xed\x67\xc5\x09\x51\x39\x41\x7c\xb3\xe0\xaa\x23\x90\xbc\x3f\x1f\xac\xbd\xf8\x0f\x19\x73\xa9\x7a\xe4\x30\xb1\x21\x03\xbf\x0f\xba\x00\x2f\x87\xe3\x5b\x5d\x3b\xae\x44\x9a\xf0\x48\xb8\x04\x17\xe4\xe0\x85\x77\xfd\x63\x02\x78\x24\x54\xac\xc8\xdf\x12\x08\x18\x7b\x6d\xb6\xb6\x25\x00\x9e\xdb\x2b\x7b\x1e\x3f\xbf\x6b\xa5\xf7\xe1\x46\xcc\x9b\xe0\x68\x46\xa5\x48\xca\x8b\x40\x5f\x14\xc8\xaf\x76\x62\xd6\x47\x2d\x87\x5a\xcd\x3f\xd2\xc4\xe3\x9b\xb9\xea\xe8\xe6\x96\xdb\xd6\x2d\x0f\x67\x3a\xf6\xf9\x0b\x8b\x22\xeb\xa5\xc3\x7e\x8a\x70\xc4\x65\xa6\xb7\x32\x17\xb3\xa2\xc8\xe4\xb2\x0c\xf5\x80\x47\x02\xe6\x2a\x8f\x13\xdf\xe1\x34\xd3\x71\x19\x59\x02\x2b\xe8\xad\x87\xfd\x90\x97\xcf\x5a\x1d\x31\x3b\x32\xab\x8f\x5e\x6e\x22\x3e\x82\x6c\x0f\x64\x58\x6b\x8b\xb1\xd9\x83\xb1\xc3\xf7\x77\x69\xaf\xf2\x27\xce\x19\xed\x1e\x4c\xbb\x06\x86\xa5\x81\x33\xfb\x75\xb0\x80\x3b\x50\x53\xb4\x5c\x96\x1c\x03\xe8\x55\x1b\xa5\x8b\xaf\xc6\x5d\x35\xe3\xc0\x5d\xc3\xb0\x31\xd5\x74\x2a\xb4\x1b\x36\x3c\x47\x73\xbe\x88\x36\xd5\x86\x43\x6f\xaa\xbc\xbd\xf5\xe6\x3a\xf3\xf8\x30\xb7\xc9\xa0\x30\xda\x04\x1d\x0d\x92\x1c\xdb\x15\x0d\x56\x27\x28\xdd\xe9\xbf\xc7\x94\x8b\xc5\xcf\xa5\x18\xa3\xab\x6c\x53\x35\xfe\x08\x3f\xdb\x0b\x48\x91\x88\xdd\x72\xbe\xd7\x42\x6e\x8d\x05\xc4\xb3\x68\xc3\x96\x3c\x27\x42\xc0\x90\x2d\x01\x05\xe0\x99\x34\xbf\xe2\x51\x41\x82\xb8\xb6\x5a\x2b\x8a\x7b\x63\xa1\x90\xc6\xac\xf5\x5e\x8f\xb6\xe5\xb6\x6f\x00\xc6\x78\xaf\x6d\x33\xce\xde\x8e\x8a\x21\x84\x76\xb8\x7b\x27\xe3\x15\x0b\xb7\x53\xc2\x4b\x15\x6d\x58\x9a\x70\x24\x94\xd8\xf0\x1c\x0f\x0a\x8b\xd0\xe1\x4b\x99\xc8\x02\x98\xba\x30\x70\x5c\x5b\xb7\xe6\xf1\xcc\xb3\x3b\x2b\x78\xc0\x3d\x2d\x5b\xdf\x51\x72\x20\x12\xda\xf5\xea\x93\x62\xa1\xfd\x41\x18\x1e\xee\xc3\x36\x3b\xe1\xa0\xfd\x74\x98\xeb\x0d\x36\xbb\xef\xcb\xb8\xe8\x10\x95\x78\x59\xff\x79\x6d\xbc\x91\x02\xf2\x20\x9a\xde\xde\xbc\xac\x67\x01\x9d\xfb\xac\xb2\xfe\x6b\xb4\xd9\xe1\x16\x23\x78\x3c\xf0\x89\xa4\x8b\x46\x18\x31\x75\x61\xa3\xd6\x7d\xbf\x4a\x34\x2f\xfa\xb3\xdc\x50\xa7\xa8\xab\xec\x58\x97\xcb\x2e\x65\x0c\x6c\xd5\xe3\x73\xe8\xec\xf1\xff\x54\x3e\xf7\xf0\x1e\xe5\x85\x30\xa7\xef\xe3\x06\xd4\xfc\xfa\x08\x7e\xde\x5e\x38\x65\x31\x8f\x66\xa4\x70\xcb\xc0\xab\xe5\x39\xdb\x1f\x20\xa9\x2d\xdb\xa9\x6e\xe4\x1d\x94\xf3\x78\xd8\x7c\x49\xb5\x67\x29\xed\x17\xe0\xfa\xfd\x57\x43\xb2\x11\xff\x58\x72\x73\x01\x7c\x58\x5d\x23\x41\xd8\x21\x9d\x2e\x64\x73\x5b\xb5\x1f\x03\xf5\x5a\x6f\xaa\x51\xda\x70\xe1\x0f\x66\x3b\x68\xeb\xcd\xb5\xf9\xf5\xf0\x63\xf7\xac\xe2\x8d\x4d\x33\xa9\x81\x28\x4b\xaf\x2a\xb6\x46\xcb\x49\xdc\x5a\xef\x01\x23\xf9\x73\x29\x4a\x61\x16\xd0\xb2\x8c\xd7\xcd\x60\xc9\x88\x07\x97\xef\xd2\x46\x3f\xb0\x6d\x19\x6d\x98\x2d\x9c\xc5\x22\xe1\xbb\xaa\x19\x65\xde\x1a\x85\x06\x12\xe3\x51\x7c\x81\x01\xf5\x7c\x54\xe6\x85\xde\x02\x4e\xdd\x97\x9b\x95\x0a\x76\x39\xe3\x76\x77\xb5\x5d\x68\x15\x4a\xcd\x47\x46\xc8\xaf\x2f\x4f\x4f\xce\xde\x9d\xd5\xc2\xd3\xb3\xeb\x1f\xc2\x7f\xff\xf4\xe1\xea\x87\x77\xe7\x1f\x7e\x0a\xff\x76\x3e\xbb\xbd\x38\xf9\x7e\x71\x79\x3e\xbb\xa8\x04\xb1\x67\x37\xb3\xeb\xd3\x9b\x3d\x71\xea\x66\xad\xdd\x13\xc1\x03\xc6\x4f\x8b\x9c\xb7\x72\x36\xd6\x5d\x45\xb5\xbe\x61\x33\xcb\x7f\x5a\x61\xe8\xb5\x58\x03\x00\x27\x25\x88\xb1\x44\x48\xc2\x5b\x5e\xf0\x13\x5e\xf0\x44\xaf\xa7\x6c\xc6\x28\xaf\x00\xf3\x45\x72\x63\x12\x12\x39\xa4\x99\x1d\x2c\xc2\xd8\x85\x91\x77\x05\x79\xbd\x6e\xbd\x22\x5a\xd6\x44\x84\xca\x4e\x36\xc9\x73\xae\x4e\xef\x85\x2a\x4a\x30\xb4\x79\x92\x30\xaa\xd6\x7e\x21\x60\x05\xb1\xad\xcc\xe5\x56\x26\x3c\xf3\xd2\xca\x1f\xa8\x2c\x78\xec\xda\xb6\x3a\x56\xba\x26\xe5\x84\xf5\x07\xdc\x9e\x31\x68\xf7\xc9\xf9\x19\x18\xba\x51\x61\x75\x03\x6d\xe5\x73\x85\xb4\x9f\x54\xe3\x96\x43\x0e\x53\xa1\xc9\x41\x8f\xd5\xd3\x97\xbb\x17\xe2\x41\x86\x95\x0d\x65\x3d\x97\x63\xc2\x35\xd2\xfe\xc7\xa9\x2a\xb2\xdd\x60\xeb\xf5\x06\x18\x1d\x72\x78\xd7\x11\x24\xb2\x2a\xb7\x8c\xfe\x53\x66\x4b\xbf\x00\x93\xd6\xe2\x75\x29\xbc\xe7\xa2\x78\x08\x8f\xea\x78\x12\x25\xe6\xe6\xfd\xb5\x8e\x43\xc8\x02\x06\xa3\xb0\xd4\xa5\x8a\x73\x02\x6f\x6e\xa5\x3a\xde\xf2\x5f\x5e\xd9\x9e\x22\x89\x8d\x13\x3d\x03\xc6\x44\x91\x98\xf7\xe0\xce\x1c\x72\xfd\xc3\x35\x57\x3d\xe3\xb5\xff\x4d\x60\x4f\x56\x70\x19\x78\xff\x0e\xc2\x50\xef\xc5\xae\x6d\xfe\x1a\xc2\x95\x2c\x54\x5f\x80\x42\xd2\x4c\x98\x2f\x3a\x8c\x6b\x82\xd0\x65\xf7\x6f\xc8\x65\xa9\x88\x6b\xb7\x9f\xdd\x21\x6c\xe4\xa0\x6d\xd3\x0a\x58\x19\x6e\xf8\x0c\x56\x1e\xa5\x9a\xcc\x9c\x21\x7c\xc5\x46\x4e\x28\x77\x87\xe2\xf2\x66\xb2\xfe\x5b\x2f\xd9\x0a\x12\xd9\xc8\x4f\x90\x09\x88\x94\xc1\x54\x58\xa9\x1c\xe0\xd5\x6b\x60\x62\xec\x12\x48\x44\x0e\xf1\x23\x65\x1e\xd5\xe2\xe7\x92\x20\x00\xaf\xbf\x1c\x77\xcf\x16\xa8\xb7\x80\x04\xdb\x75\x25\x02\x77\x97\x43\xbb\x4a\x25\xdb\xc8\x36\xaf\x4a\x65\xae\xe2\xa7\x40\x4f\x0d\x0f\x8f\xd7\x2a\xa5\x7f\xee\xcd\x35\xb3\x91\x9d\x0c\xbf\xff\x6c\xdc\xc9\x3f\xd6\x28\x93\xa9\x3a\xc8\x6c\xa0\xd2\xc3\x0b\x6d\xc9\xa3\xbb\x07\x9e\xc5\xe8\xfe\x07\x38\xd3\x94\x7d\xaf\x1f\xc4\xbd\xc8\x26\x2c\x12\x59\xc1\x89\xaf\x30\x07\x3c\x07\x6c\x28\x2a\x67\xae\x20\xd1\x07\xc9\x1f\x55\x5e\x66\x82\x15\x72\xbd\x29\x44\x16\xa2\x71\x74\x66\x8e\xa3\x02\xa9\x6a\x53\x11\x11\x21\x5b\xc7\x00\xac\x12\x7e\xdf\x24\x60\x7c\x0c\x93\x0c\x3b\x73\xd9\xca\x36\xdc\x6d\xe5\xc7\xfa\xf0\x53\x34\x60\x74\x68\x22\x85\xd6\x84\xad\x75\xc2\xd5\x7a\x3a\x9d\x82\xd4\xc6\xab\x51\x0b\x9d\x0a\x0c\x03\xe8\x0e\xa5\x9f\x68\x9d\x8b\x64\xe7\x48\xc4\x5c\x1e\x15\x00\x77\x7f\x29\x84\xca\x25\x3a\xb6\x5a\x96\xff\x75\x3d\xb8\xf4\x69\x63\x71\xed\xcf\xf3\xd1\x59\xba\x1d\xe5\x80\x9a\xe9\x88\x92\xf0\xfb\xed\x2f\xaf\x47\x65\x9d\xb7\x97\xa5\xb4\x1a\x9b\x4a\xfd\xa3\x96\x1d\x50\x90\x47\x91\x8d\xb6\x96\x44\x44\x48\x8f\x4a\x3f\x6d\x1f\xb3\x46\x46\xf0\x01\xc9\xc0\x3d\x79\xbd\x23\x53\x7a\x87\x38\x02\xae\xeb\xd3\x3d\x7a\x5b\xec\x17\x58\x6b\xed\xd0\xc8\x94\x69\xcf\x6d\x30\xc6\x74\xc2\xac\xcb\x64\x07\x2f\x2e\x97\x40\x0d\xe1\x81\x38\x88\x2a\x55\x82\x66\x90\xca\xe7\xa3\x6e\x8e\xa0\x2e\x08\xb2\xe5\x85\xce\xf8\x5a\xb0\xad\x88\x65\xb9\x6d\x3d\x6c\x5c\x73\x0f\x81\x8f\xea\xa4\xdc\x76\x53\x85\x1e\x6a\x40\xfb\x46\xe2\x7f\x9d\x40\x75\xc3\x39\x74\x5c\x66\x84\xd5\xb9\xa4\xf6\x62\x08\x89\xc6\xda\xdc\x94\x99\xcc\x81\x65\xf7\x31\x99\xb3\xae\x18\x2c\x1a\x02\xf0\xbb\x14\x9d\xec\x95\xd9\x3d\xb2\x91\x51\xfa\x49\x8e\xb3\x0a\x51\xfb\xee\x4b\xa1\x0e\x4a\x1d\xaf\x76\x97\xe9\xb2\xc1\x3d\x35\x08\x28\x01\x66\x63\xa0\x7d\x41\xa8\x39\x28\x90\xa0\x3d\x85\x66\x2b\x9b\x8b\x79\x27\x02\xea\xc3\x18\x54\x31\x1e\x90\xf2\xe9\x87\xaf\x73\x0b\x02\x22\x9c\x96\xb7\x58\x0a\x5f\x09\x46\x80\xee\x5f\x5b\x78\x1e\xf6\x10\x8b\x00\x82\xc2\x98\xab\xa2\xb5\x00\x8f\x5e\x85\xb2\xf0\x27\x3f\xf2\x32\x69\xff\x3a\x95\x0f\x5f\x45\xd5\xd4\xd9\x4f\xd7\x0c\x87\x9a\xf4\x13\xb2\xbe\x86\x06\x85\xec\x07\x08\xc2\x70\x2d\x1e\x61\x09\x56\xe6\x01\x07\xdd\x0a\x68\x98\x61\x17\x45\xb4\xf1\x96\x07\x10\x34\x3a\x62\x49\x92\xc4\xa6\x7e\x6e\xbd\x22\x04\x62\xaf\x43\x10\xab\x5c\x2b\x1d\x8a\x19\x69\x25\x20\x14\x67\x0e\x20\x1d\x16\xcb\x64\xb1\x1f\x29\x38\x92\x95\x70\xdf\x52\x2b\x34\x22\xc0\xa8\x9f\x95\x38\x35\x3c\x29\x24\xd2\x55\x59\x98\x35\xbe\x89\x48\x61\xb9\xae\x14\x50\x25\x00\x99\xab\x6a\x55\x8d\x41\xb2\x50\x3e\x99\x09\x24\xf8\xce\x8d\xf5\x56\xc8\x7b\xb3\x51\x9b\xcb\xda\x2d\x50\x38\x01\x9a\x6b\x8f\xc2\xb6\x2c\x60\x09\xbf\x13\xbb\x3c\x94\x73\xa6\x15\xc5\xba\x16\xa4\x34\xfd\xa1\xf9\xda\x3f\x15\x30\x70\x8b\xcc\x8b\x32\x0e\xbb\xcb\xb0\xd2\xf7\xe6\xc7\x3d\x18\xe1\x46\xe1\x66\x0d\xfa\x64\x57\xef\x53\xa4\x63\xc2\x8f\x33\xcd\xa1\x87\x01\x02\xc8\x33\x84\x71\x86\x99\x4b\xf0\xf0\x35\xef\xdb\xb9\x22\x21\x81\xe0\x92\x33\x07\x4e\x73\xda\x28\x03\x1f\xe9\xcb\x77\x15\xf6\x20\xa0\x56\xb5\x34\xb3\xd5\x2a\x6d\x74\x19\x94\xf1\x60\x79\x40\xd5\x98\xa3\x6c\x7d\x78\xad\x15\x3e\x12\x5b\x4a\x93\xdb\x89\x27\x0d\x12\x01\xf1\x9b\xc4\x2e\x8a\xba\xe0\xf8\xfa\x89\x84\x19\xbe\x99\x6a\x85\x72\x5a\x20\xe7\xf5\xe9\xc9\xd5\xe9\xcd\x27\xc3\x9b\x5a\xb0\xe7\x68\xc0\xa9\x6d\xe7\xdb\xd3\x77\xb3\xdb\xf3\x9b\xc5\xdb\xb3\xab\xe7\x40\x9c\xd2\x47\x8f\x80\x9c\x5e\x93\x3e\xc9\x89\x56\x85\xf8\xe5\xa0\x3b\x39\x2b\xd5\x82\x8f\x48\x7d\x72\x0a\x45\x7d\xe6\x0e\x16\xda\xd4\x57\x71\xe2\x27\xc4\x6d\x4b\xa8\x13\x2b\xa7\xb2\xf2\x4e\xc3\x95\x4c\x12\xc8\x04\x77\xee\x75\xca\x32\x34\x83\x0a\xe7\x8f\xa5\xf3\xa5\x33\x75\xae\x96\x15\xf9\x1b\x70\xf9\x6d\xcc\x23\x18\x73\xc0\x53\x33\x00\x99\x84\x0c\xdb\x3e\x09\x96\xb5\x54\xc2\x37\x03\x66\xcd\xb4\xaf\x93\xa6\x9e\x26\xf1\x39\x91\x75\x64\x78\x0d\xb5\x35\xed\x8a\xab\xac\x4f\x6b\x7e\xda\x0f\x5d\x0f\x71\x13\x4b\x85\x86\x69\x65\x37\x5f\xb7\x2f\xdd\x63\xbf\x05\x60\xdc\xcd\x4c\x72\x88\x41\xe4\x05\xcf\x0a\x3f\x91\x34\x11\x28\xcd\xe6\x83\x13\x77\x12\x11\x68\x7a\x55\x1b\x67\x73\x14\x9a\xb1\x96\x10\xa9\xe0\x44\x6e\x13\x25\x65\x5e\x88\x8c\xdc\x26\xb3\x9f\xae\xe7\xea\x5b\x73\x7d\xbd\xa2\x5b\x88\xe4\xbb\xb0\x0a\x44\xea\xe8\x4a\xfd\xd6\x42\x09\x4f\xb0\x97\xe8\xa3\xde\x0a\xae\x72\x06\x5b\x23\x49\x44\xe6\x57\x06\xb6\x47\x88\x98\x64\xac\x81\xea\xd9\xff\xfe\x15\x23\x70\xab\x19\x0a\xd3\x5e\xfa\x34\x13\x5b\x5d\x34\xd7\x53\x17\xd1\x00\x20\xce\x9f\x73\xe5\xb4\x24\x3e\x0d\x5d\x45\x04\xd6\x6f\x5d\x44\xd5\x34\xa4\x41\x6b\xe9\x06\x8b\xfb\x6d\x29\x3d\xe1\x52\x1a\x70\xaf\x87\xb7\x04\xdb\x68\x73\x80\x3a\x6d\x2b\x1f\x66\x76\x44\x27\x09\xa0\xdc\xcc\x30\xb6\xde\x3a\x35\x7d\xd7\x43\xb0\x1f\x50\xd4\x61\x08\xed\x59\x0b\xa3\x92\x17\x12\xb4\xb1\x9d\x5e\xe9\xd8\xe7\x61\x2e\x9c\x59\xac\xaa\xd2\x85\xe5\x20\x71\xf0\x50\xc2\xba\x9a\x2f\x38\xf2\x9b\xde\x36\x12\xa1\x8c\xb5\x52\x16\x07\xca\x2f\xde\x84\x98\xda\x4a\x56\x36\xb6\x22\xe4\x73\xb0\x1c\x0e\x8e\x03\x66\xcc\xe2\x7b\xbc\xc0\x6f\x75\xcd\x39\x3e\xd1\x47\x81\x1d\x2e\x3e\x5c\x9c\x86\x50\x85\xb3\x8b\x9b\xd3\xef\x4e\xaf\x2a\xf9\xfc\xe7\x1f\x66\x95\x9c\xfc\xeb\x9b\xab\x5a\x2a\xfe\xb7\x1f\x3e\x9c\x9f\x36\x30\x0f\xa7\x37\x67\xef\x2b\x85\xbf\xbd\xbd\x9a\xdd\x9c\x7d\xa8\x7c\xef\xdb\xb3\x8b\xd9\xd5\x7f\x85\x7f\x39\xbd\xba\xfa\x70\x55\xab\xef\xf6\xa4\x1f\x3d\x51\xe9\x46\xbb\xfb\xc7\x07\x67\x03\x6a\xd5\xd6\x6d\x5c\x15\x40\x3e\x60\x17\x0f\x44\x9e\xed\x5b\x8e\x36\x5d\x3f\x0e\xe5\x38\x70\x63\x98\xa6\x8e\x5a\x75\x4f\xaf\xd8\x5c\x19\xba\x94\x1f\x76\xec\x99\x5b\x6d\xf1\x14\x48\xc0\x5e\x03\xd0\xd5\x52\x73\xdc\x92\x40\x3a\x0e\x6d\x0a\x11\xac\x35\xef\xd4\x2b\x53\xf1\xb3\xb7\xd4\xd6\xb1\xaf\x9d\x9e\xca\x6b\x0f\x23\xd2\x53\xb1\xa1\xf4\x35\x3a\xa8\xcc\x92\x0d\xc8\xd8\x1a\x0a\xf6\xc3\x10\x76\x6f\xba\x61\x56\x4e\xb0\x1c\xbb\xa4\x75\xdb\xd3\x96\xfa\xd9\xf7\xc6\xb6\x9f\x2a\x69\xb6\xbd\x46\xd5\x32\xa2\xdd\x40\x99\x35\xa6\xdd\x37\x3c\xbf\x1b\xdb\x6e\xaa\xa4\xd9\x6e\x30\xfb\x1e\xd5\x6e\x70\x78\x17\xed\x34\x3a\x23\x0e\xb1\xb0\x98\x6a\xf3\x5c\x8e\xbf\xfb\x4a\xa0\x60\x3d\xac\x8d\x66\x03\x3c\xef\xf3\x32\xe5\xc3\x03\x19\xd0\x1a\xb7\x5d\x79\x8d\x55\xfe\x1a\x3e\x85\x1e\x2e\x33\xc1\xef\x62\xfd\x40\xf3\x51\x47\x86\xb2\x41\xa7\x79\x75\x80\xcc\x19\x6e\xaf\x88\x22\xa3\x08\x14\xa2\xd4\x7c\xf1\x00\x93\x93\xc4\x8b\x8e\x36\x58\x20\xbd\x5c\x27\x22\x02\xea\x27\xe5\x67\x67\xae\xd0\x9a\x6f\x93\x6f\x36\xb3\x6a\x5a\x44\xd4\x21\xd0\x55\x67\x43\x63\x70\x3d\x0f\x26\x96\xf2\x80\xca\x0c\xc0\x74\xcb\x0c\xde\x4c\x30\x20\x52\x81\x33\x39\x33\x0f\x9e\x4c\x44\x32\x17\x81\x62\x5c\xeb\x8d\xfd\xf3\x61\x52\x28\x05\x2f\x5a\xdd\xae\x83\xfd\xe1\x3c\x2a\x4a\x9e\x30\x48\x57\x22\x06\x46\xf4\x55\xe2\x5f\x22\xae\x30\x35\xa6\x10\xdb\x14\xb2\xfa\xc3\x9c\x8e\xb9\xfa\x09\x80\x12\x38\x05\x2f\x72\xf6\x1d\x40\x1e\xec\x97\xe9\x12\xde\xf2\x02\xee\xe2\x3f\x62\x1d\xee\xb3\xe9\x5c\x55\x14\x98\x82\x5f\x55\xc4\x98\xa6\x73\x65\xd5\x3a\x62\x1d\xe5\x53\x78\xf1\x4d\x75\xb6\x3e\x26\x35\x73\xb3\xd8\xf5\xdd\x52\xeb\xbb\x63\xa1\x8e\xc1\x27\x55\x1c\xf3\xb2\xd0\xc7\x00\x97\xc2\xf9\xcf\x8f\xad\xe8\xb1\x55\x8d\xce\x8f\x37\xf2\x5e\xc0\xff\x9b\x6e\x8a\x6d\xf2\x7f\xf2\x74\xf3\xcb\xd1\x3a\xc9\x8e\xcc\x6f\x8f\xc2\xdf\x1e\xd9\xdf\x1e\xd9\xdf\x1e\x99\x9f\xe1\xff\x4b\x77\x18\xde\x11\xbf\x70\x73\x97\x4d\xe6\x4a\xaa\x5c\x64\x05\x58\x3f\x0f\x99\x2c\xbc\xd4\xd5\x8e\xbd\xf8\xdb\xdf\xd8\x34\xe3\x0f\x98\x11\xfb\x96\x17\xfc\x12\xfd\x8b\xff\xf8\xc7\x0b\x08\xa8\x62\x16\x53\xca\xb3\x9f\x4b\x51\xcc\x55\x2e\xcc\x26\x64\xff\x77\xae\x20\x02\xbb\xdd\x2d\x0a\xf4\xbb\xa2\x0f\x32\xce\xd9\x37\x58\xe6\x19\xb2\x91\xc6\xb9\x29\xa9\x23\x9d\x40\xf2\xa4\x45\x27\xbf\xc3\x45\xff\x73\xf2\x96\xbe\x3f\x62\x5b\xff\x9c\x54\x77\xb5\x15\x5b\xca\x7f\x4e\xe0\x02\x4d\x34\xb7\x60\x2d\xe6\x16\x2f\xbc\x93\xa9\x71\x6d\x7b\xa4\x01\x0d\x78\xd6\x30\x7d\xfb\x5e\xb9\x46\x46\x74\xeb\xb9\x6f\x1c\x23\x10\x2b\xf0\x71\x08\x88\x9e\x4b\xb3\x43\xae\xd1\x13\x0a\x96\x1b\xf6\x1c\x6c\x52\x0a\x9d\xbb\xf2\xd0\x71\x91\xff\xfe\xcd\xf1\xf1\x84\xad\x73\xf8\x9f\xe5\xcf\xf0\x3f\x80\x1e\x7a\x2a\x52\xdf\xc6\x60\x3a\x20\x5c\x73\x96\xf7\xcf\xc4\x53\xa0\xe8\x3e\x05\x8f\x7c\x6d\x99\x7e\x5b\xaa\x38\x11\x3e\xb5\xb1\x12\x12\x49\xb4\x99\x49\x3b\x51\x4d\xe5\x21\x98\xe3\xa5\x88\xb8\x39\xf8\x1a\x75\x23\xb8\x54\xaf\x0a\xa1\xd0\x1b\x96\x79\xb5\x47\x8e\x9e\x2b\x30\x8b\x01\x0a\xc9\x0b\x82\x9c\x0b\xf8\x23\x54\x02\xc4\xec\x93\xfa\x47\x6c\xa7\x4b\xe2\x18\x07\xe6\xdc\x58\x44\x09\x08\x39\x58\xf6\x20\x96\x89\xa2\xcc\x14\xe3\x2c\xe5\x2a\xe6\x39\xac\xc0\x55\x06\xd1\xce\x8c\xf1\x66\x43\x27\x08\xc7\xd5\x65\x01\x9c\x58\x88\x2c\x08\x47\x02\x49\xe0\x83\x36\x4f\x82\x46\xe0\x9d\x00\x5c\xd4\x8d\x1f\x4e\xe7\xca\xea\x11\x12\x16\x0e\x3d\x65\x91\x4e\x77\xc4\x78\x54\x1f\x74\x69\x3d\x67\x34\xdc\x13\x8f\x37\xa9\x7f\x77\xc2\x64\x35\xb4\x06\x7c\xf3\x45\x20\xf1\x6e\x45\xf2\x5f\x0a\x15\xe9\x58\x64\xf9\x2b\xb3\x0d\xa5\x7b\x77\xa0\xfd\x20\x73\x3f\x19\x70\x4a\x99\xcb\x8d\xbc\x85\xa6\x78\x27\x30\x65\x46\xa7\xc2\x50\xde\x66\xe7\xec\xdf\x2a\xbf\x76\x14\x4c\x5b\x7b\xe9\x3f\x3f\x29\x22\x26\xc4\x75\xda\x37\xe7\xe3\x5d\x10\xb8\x65\xc3\x13\x17\x0b\x45\x1b\x87\x8c\x13\xab\xa7\x2d\x0b\x50\xc8\xcc\x44\x5e\xcc\x15\xdd\xc0\x13\xb6\x12\xdc\xd8\x79\x13\x16\xe5\xf7\x78\x18\xe3\x75\x5f\x3c\x68\x8f\xc1\xb1\xf2\x36\x00\x86\xad\x14\xee\x9d\xc4\xf8\x35\x4e\x19\xd8\x08\x30\xe8\x7a\xa1\x3b\x53\x05\x06\xab\xf5\x40\x7c\xc4\x38\x58\xb5\x94\xba\xc2\x5a\x28\xd6\x03\x23\xb1\xc3\x40\x31\xab\xb7\x03\x3f\x30\x07\x0f\xf6\x0e\x61\x20\xc1\xe1\x08\x16\x37\x61\x69\x71\x9f\xf9\x18\x6e\x48\x59\x0f\xbe\x99\xae\x4d\xd5\x33\x10\xd0\x80\xc7\xf9\x2d\xcc\x4f\xf7\x3a\xac\x72\x91\x59\x29\x17\xec\x2b\x12\x4c\x6e\x64\x16\x1f\xa5\x3c\x2b\x76\x76\xf9\x26\x72\x09\x0a\x10\x89\xbc\x13\x6c\x96\x65\xfa\xe1\xa9\x47\xa1\xf3\x68\xe9\x7a\x61\x1f\x82\x64\x1f\xfb\xca\x6f\xa5\x97\xad\xbb\x3b\x1e\x47\x65\xdb\xe5\xf8\x68\xad\x27\x13\x45\xb6\x5b\x98\x85\xb8\x4d\x3b\x4f\x8a\x41\x49\x13\xc3\x8d\xdc\x71\x2c\xb9\x35\x17\x46\x27\x4b\x6e\x65\x56\x7f\x3d\x2c\xb9\x2d\x04\xb8\x4d\x96\xdc\xb3\x8b\xb3\x9b\xb3\xd9\xf9\xd9\xff\x57\x2b\xf1\xa7\xd9\xd9\xcd\xd9\xc5\x77\x8b\x77\x1f\xae\x16\x57\xa7\xd7\x1f\x6e\xaf\x4e\x4e\xfb\x69\xaf\x9a\xad\xf7\x26\xf8\x11\x0b\xeb\x79\xc3\x6e\x02\xa0\x06\x26\x1b\x90\xfd\x4d\xfa\xb8\xb0\xaa\xcc\x66\x96\x6a\x3d\x81\x8d\xfa\x86\x9d\x66\xd9\xd9\x96\xaf\xc5\x65\x99\x24\x00\xa7\xc2\xcc\x9e\x93\x4c\xc0\xc3\x73\xc2\x2e\x75\x7c\x16\xfc\x0e\xd2\x11\x5b\xbb\x01\xf5\xf3\x38\xce\x44\x9e\x63\xf5\x13\xaa\x3f\x00\x0f\xb9\x54\x47\x02\xcf\xf1\x7b\x2e\x13\xf3\x7e\x7b\xc3\xbe\xe5\xd1\x9d\x5e\xad\x30\x7d\x66\xe2\x12\xa7\xd8\xcf\xa5\x2e\x38\x13\xbf\x44\x40\xf5\xd6\xbe\x4e\xce\xf5\xfa\x33\x40\x95\x07\x84\xa7\x3a\x1e\x29\x20\x75\xb7\x68\xbf\xce\xdb\x0f\x02\xea\xe5\x7b\xfc\xe9\x3b\xfc\x65\xbb\x83\xb2\x48\x9e\x20\x3d\xfe\x5c\xaf\xdb\x85\x87\xc0\xba\x26\xb5\x24\x0a\x24\x44\xc4\x2e\xa2\xd7\x2c\x97\xea\x6e\xae\x7e\xda\x08\xc5\x74\x99\xe1\x9f\xe0\x99\x6f\xcc\xcc\xa4\xcc\x37\x02\x64\xaa\x27\xec\x41\xb0\x2d\xdf\xa1\xd9\x0c\x6f\x02\xa7\x96\x02\x4b\x06\x6e\x11\xf3\xeb\x44\x2a\x73\x5a\xa4\xd2\xe6\x25\xd4\xa7\xfe\x29\x5e\x5c\x96\xe8\x90\x1f\xce\x43\xdc\x77\x9f\x56\xf0\x79\xe0\x2a\xf3\xb8\x49\x0b\x10\xa2\x93\x1b\x44\x65\xb5\xbe\x2b\x53\x4f\x89\xfa\xc2\x06\x27\x61\xb8\xef\xb5\x8c\x59\x5c\xa6\x89\x8c\xdc\xb9\xfb\xa0\xb3\x4e\xde\x67\x4c\xa0\x19\x7e\xeb\xd4\xd3\xc2\xfa\x3a\xd6\x92\x9d\x13\x20\xe9\x7a\x18\xa0\x9f\x99\x03\x9b\x49\x15\x25\x25\xc8\xcc\x95\xb9\xc8\x8e\x9c\x74\xb4\xcb\xf5\xfb\xf5\x93\x64\x7b\x12\xce\xc3\xd3\xda\xc2\xa4\xf3\x44\xaf\x65\xc4\x93\x10\xdc\xec\x51\x11\x8e\x85\xd7\x6e\x7b\x12\x13\x86\x3c\x08\xdb\xa0\x4e\x22\xad\x34\x13\x40\x04\xbd\x80\xa3\x7c\x41\xc7\xdd\x21\xed\x5e\x31\xf3\x40\xc7\x76\x85\x1c\xb9\x36\xbc\x60\x6f\x38\x5f\xb7\x55\x62\x03\x13\x13\x25\xfc\x99\x7e\x50\x22\x03\x0b\x16\x60\x1f\xa6\xa7\x4a\x83\x6d\xe2\xd4\xd9\x1c\x3e\xd9\xaa\x13\xae\x1c\x10\x1b\x33\x67\xd7\xf2\x5e\xa8\x4f\x4f\x6a\x1e\x54\x10\xf1\x68\x23\x16\xd6\x2e\x7f\xea\x23\xcb\x5d\x00\x23\x0f\x2b\x2b\x93\x12\x1e\xa5\x2e\xbc\x09\x4f\x27\x6c\x71\xf3\xec\xc2\x40\x62\x4f\x46\x96\x69\xc4\x22\x16\xd1\xdd\x27\x3f\x9a\x3d\xc8\xca\x36\x84\x71\xf6\x56\x44\x77\xec\xf6\xea\x0c\xb3\x81\x65\xc1\xcc\x51\x90\x6f\xbc\xec\x53\xe7\xdb\xad\xe0\xeb\x67\xa0\xb0\x1a\xaa\x5b\xe5\xa5\x0a\x9c\x5a\x9f\x69\x10\x01\xa2\x20\x5f\xd2\x1c\x92\x94\x4b\x03\x40\x30\x5e\x58\x35\x23\x70\xc4\xb3\x7c\x0b\xe2\x45\x65\x11\x28\xfe\x25\x7c\x29\x92\x0e\xe2\xce\x54\xc7\x0b\x1b\x27\x39\x14\xcc\xd3\x28\xcb\xfa\x31\x28\xea\x68\xf3\x18\xb8\xb1\x58\x6f\xe8\x8b\xec\xee\xeb\x3c\xa0\xd7\xd0\x21\x7f\x38\xbc\xeb\x79\x0e\xe9\xdd\x2b\xb9\xb6\xd1\x36\xb9\x22\x89\x25\x4c\xe8\x37\x76\x30\x9c\x97\xa6\xa4\x4b\x1d\x13\x4c\xcf\x71\xe1\x19\x2b\x48\x90\xf7\xc4\xe3\x2a\xc2\x26\x58\x1c\x20\xd4\x6b\x76\x84\xe0\x31\xd3\x2b\xf2\x26\xa6\x69\x22\x81\x19\x3a\x46\x12\x7a\x60\xcf\xc8\xab\xe8\xf8\xb0\x34\xdb\xd8\x80\xe4\xe3\xd2\x02\xf1\xba\xc4\x78\xe1\xc0\xc0\x0c\x86\x05\xb0\xc1\x2d\xee\x79\x37\x99\xda\xb3\x2b\xa6\x75\xb4\xc7\x45\x93\xab\x94\xb0\x15\xd2\x3e\xf2\x15\xe0\xb5\x6e\x13\xf2\x23\x9e\x44\x25\xc5\xc9\x40\x2e\xdf\xaa\xe0\xf7\x23\x08\x7d\xd4\xcf\x4c\x74\xd5\xeb\x5f\x37\x32\x0f\x55\x57\x74\x09\x5a\x8f\xf5\x29\xf4\xbb\x17\xd7\x89\x5e\xc2\xca\xe9\x46\x09\xf6\xdc\x58\xe6\xb8\xce\x64\x3c\xc6\xde\xb1\x63\xf2\xc1\xfd\xb4\xaf\x81\x1f\xac\xeb\xc7\xd5\x64\xd7\x3d\x23\x21\x83\x1a\x73\xe3\x38\x0a\x84\x15\xa9\xaa\x56\x9f\x27\x05\xc9\x78\xc0\xb2\x72\xf7\x53\x87\x9f\xa1\xda\x97\x83\x26\xba\xc9\x14\xb3\x67\x2c\x3d\xb9\x4c\xff\x24\x1f\x40\xf7\x81\x47\x99\xe3\xfc\xe8\xf6\x2c\xaa\x58\xc4\x8b\x47\xf4\xe1\x94\x7e\x3b\xac\x2f\x6e\xa4\xb1\x79\xe0\x03\x54\x47\xc6\x54\x88\x79\x16\xfb\x7e\x4c\x60\xbf\x47\x3c\x05\x37\x3c\x84\x35\xee\x5f\x4f\x6d\x1d\x57\x3e\xbb\xc8\x9c\x97\x98\xf3\x8f\xf8\x6d\xdd\xa2\x81\xb3\x6f\x1d\xb9\x45\x8a\xf0\x6e\xb3\x72\xfc\x72\xad\xe4\xdd\x0c\x5a\xbb\xf5\x15\x66\x0f\xf0\x43\x16\xd7\x73\x9c\x1d\x65\xa1\x7d\xb4\x07\xfa\x73\x06\xb4\xc3\x61\x46\x1f\x1c\x90\x67\x71\x07\x52\xc4\x9a\xdf\xf6\x10\x1a\x81\x3f\x1e\x85\x80\x4e\x33\x61\xe3\x86\x3b\x51\x38\x5e\x87\xc4\xea\x0a\x42\x58\xcc\xf5\xba\x4a\x6c\x63\xb9\x2b\x1c\x19\x19\x04\xb1\xc8\xd4\x8f\xf4\x36\xd5\x0a\x60\x49\x98\xa5\x36\x57\x54\xb8\x55\x87\x77\x91\xb5\x4a\xaa\xe3\x84\x1c\x9a\x98\x38\x23\x72\x9d\xdc\x53\x08\x35\x10\x31\x01\x5d\x49\xd3\xc0\x13\xf3\x36\xd4\x19\x12\x6c\xd9\x9b\x1d\x32\x01\x6a\x12\xe9\x99\x58\xcb\xbc\x10\x61\x76\x68\xf8\xfb\x27\x53\xb3\xad\x38\x4f\xfa\x86\xbe\x53\xcd\x76\xdf\x2b\xc8\x9c\x4f\x23\xda\xb3\x4b\x45\x7c\xe6\x7e\xd7\xbf\x18\x6a\x09\xfc\xfe\x38\xac\xdc\x77\xb8\x06\xf0\xf5\x97\x23\xd5\x57\xee\xe4\x47\xdc\x24\x11\x09\x13\xf7\x80\x46\x33\x45\xeb\x92\x67\x5c\x15\x42\xe4\x73\x45\x81\x67\xa4\xac\x0b\x59\x59\x6a\x40\x48\xf7\xb6\x89\x74\x5e\x20\x03\x14\xfc\x64\xc5\x65\x52\x66\x9d\xee\x06\x5c\x95\x8f\xa2\x9d\xe8\x1b\xa5\x13\x28\x96\xb5\x4d\x9a\x4b\x60\x0e\x76\x91\x63\x4d\xa9\x87\x8d\xab\xf9\xbd\x1d\x5d\xb0\x97\xcb\xf0\xf9\x76\xbe\xe6\x8e\x9c\xe6\xaf\xf3\x45\xaa\x47\x9c\x78\x3f\x7c\x9d\x5f\xea\x8e\x6c\xf0\xfc\xe7\x86\x4f\xb4\x07\x3e\xf1\x73\x97\x20\x0b\xcf\xef\x20\xf2\xb8\xcf\x15\x33\x88\x8d\x73\x6f\x7c\xb2\xf3\xec\x82\x55\xbb\xe1\x2a\x4e\x8c\xc9\xcb\x8b\x3a\xef\xb5\xc3\x79\x9b\x27\x51\x61\x0f\xc7\xee\xa4\x3e\xc8\x91\x59\x44\x8d\x04\xcb\x7d\xe3\x54\xcb\xcc\xec\xc5\x52\xd6\x6a\xa9\xe6\x4b\xb6\xe5\xe9\x78\x1b\x86\x64\x90\xdd\x86\xfd\xec\xf6\xcb\x69\xd8\xf6\x4f\x64\xbe\x54\xf7\xda\x4a\xae\x7f\x05\x8e\x84\xf7\xcd\x2b\x21\xa2\x33\x87\x2e\x6a\x97\xdd\x70\xe0\xa9\x03\x89\x64\xe6\xd4\x0e\x19\xc7\xe7\x8a\xe4\xe0\x11\x5d\x00\x61\x65\xe4\x5b\xcb\xd9\x6b\x97\x5d\xfc\xfa\xdf\x2c\xdb\xd6\x8e\xad\x60\x51\x01\xa5\x9d\x8e\xa2\x32\x83\xd0\x3f\xb9\x27\x99\xc0\x4b\x38\x1f\x45\x24\x03\xa6\x87\x03\x6c\xa1\x9d\xd8\x66\x26\x39\x7f\x74\xa5\x53\x37\xe0\x86\x44\x61\x7b\x77\xe9\x93\x5e\x59\x96\x17\x2c\x2f\x44\xda\x7a\xfc\x56\xac\xcb\x5d\x2a\x66\x4a\xe9\xa2\x9e\x9f\x32\xda\xbe\xe4\xae\x94\x81\x5b\x67\xc4\x65\x34\x0b\x5c\x46\x7f\xb8\xfe\x70\xc1\x52\xbe\x03\xec\x63\xa1\x19\x7e\x15\x08\x47\xeb\x07\xd5\xbe\x19\xa8\x76\xbe\x7a\xaa\xe0\x98\x5a\x10\x75\x7b\x7c\x82\x6a\x6c\x1a\x8b\xb0\x66\x68\x49\x9a\x33\x2b\xd3\xc9\x51\x9a\x70\x15\xc0\xdb\xf3\x29\xab\x55\x1f\xe2\x19\x5c\x64\x93\x10\x63\xd0\x00\xf0\x57\xd0\x5a\xc8\xca\x56\x00\x34\xf0\xee\xd8\x05\x75\x18\x84\xa1\xf3\x8c\xe8\x05\x76\xbe\x47\x15\x18\xd4\x44\x40\xf6\x0c\x0b\xcb\x70\xc8\x1e\x9e\x03\xe8\xb6\x93\x01\x9c\x47\x09\xcf\xf3\x5e\x94\xce\xb3\x50\xc9\x07\x59\x8b\xfb\x8f\xaf\x6a\x3b\x11\x46\x08\xdc\x26\xf8\x2e\x75\x1f\x03\x5b\x82\x3d\xba\xbc\xe8\x5b\x60\xef\x07\x6a\x10\x04\x7d\x20\xbe\x28\xf8\x3d\x32\x41\xde\x89\x9d\xf5\x70\xd1\x51\xc5\xb7\x62\xe2\x9c\xad\xce\x9b\x18\x80\xfe\x9a\x05\xcf\x15\xa0\x62\xdf\x85\xcd\x63\xef\xb4\x9e\x20\x3e\x93\x2a\xe7\x58\x2c\x0f\x11\x4e\x73\xf5\x4e\xeb\x29\x77\x8f\x58\x6a\x3f\x1d\x37\xf5\x0a\x09\x15\x05\x98\xc3\xda\x74\x0e\xdf\x9b\xdf\x4b\x85\xf2\x84\x72\x6b\x1e\x50\x34\x4e\xb0\xa2\xa0\x41\x56\x0d\x5f\x3f\xe4\x2c\x46\x4a\x99\x52\xe6\x1b\x08\xbb\x60\x9c\x13\xea\xa7\x2b\x05\x01\x59\x19\x57\xb9\xd9\xc3\x10\xaa\x11\xf7\x82\xfc\xb5\x15\x8c\xc1\xd9\xdb\x73\x07\x5b\xc2\x7d\x49\xd2\x1d\x1d\xbb\x2d\x78\x74\x1c\xf2\x38\x07\xb8\xf9\x08\x42\x3b\x72\x70\xbe\xe7\x69\x5f\x32\xec\xc1\x25\xee\x9b\x25\x47\xa8\x55\x7f\x51\x81\x92\x39\x68\x18\x56\x32\x62\xc3\xd1\xbb\x55\x07\xde\x38\xad\x9c\xf6\xfb\x25\x77\x06\x3b\x18\x46\x1e\x15\xfb\xaf\x9b\x80\xdb\xd2\x41\x06\xdd\x5b\xd0\x1c\xec\xa0\x10\x07\xa4\x7c\xb8\xa5\xa7\xec\x5a\x08\xf6\x11\x46\xca\x54\xf6\x91\x14\x48\x01\x05\x5d\x70\xd9\x2a\x10\x07\xdf\x3e\x53\x2b\x7d\xd8\xf9\x9f\xad\x1b\x28\xdb\x83\x46\xa5\xbd\x9d\x87\xe2\x78\xc1\xd3\xaf\x9e\x97\x56\x64\xd0\xc5\x50\x9b\xeb\x4b\xef\x6f\xa2\x64\x63\xdb\x52\x63\x92\xc1\x14\x3f\x86\xb8\xae\xb6\x48\x4c\x2f\x27\x48\xc6\x7e\xa7\xf4\x83\xc2\xf3\x98\x6a\x62\x2f\xcd\xfe\x03\x9b\x05\xe3\x42\x68\x09\x96\x78\x1a\xbe\x02\x76\xf8\x99\xfb\x37\xbb\xc6\x10\x38\xb6\x19\xa4\xc3\x72\xb0\x77\x49\xf4\x0b\x2e\xf0\x97\xb3\x09\xfb\x76\xc2\x4e\x26\x6c\x3a\x9d\xbe\x9a\x30\xc1\xa3\x8d\x6d\x11\xfe\x04\x8f\xfe\x82\xaf\x4d\xd9\x24\xfb\xb3\x0a\x2a\x00\x79\x40\x63\x9f\x58\x12\x44\xee\xbf\x15\x78\xd5\x6c\x17\x30\x35\x9b\xf2\xc8\x08\x2e\x14\x6d\xb4\xf4\x8d\x02\xe4\xb9\x88\x74\x66\xb1\xeb\x79\xa1\x33\x8b\xc3\xbd\xe7\x19\x97\x0a\x18\x2b\x78\x33\x0b\x81\x6a\x0e\x38\xeb\xc5\x2f\x7c\x0b\xfd\x97\xca\xd1\xf6\x9a\x61\xba\x71\xed\x2f\x76\x29\xc5\xd9\x1e\x32\x59\x14\xc6\x20\xcb\xe7\xea\x9a\xbd\xf9\x86\xcd\xd2\x34\x11\x6c\xc6\xfe\xce\xbe\xe5\x8a\x2b\xce\xbe\x65\x7f\x67\x27\x5c\x15\x3c\xd1\x65\x2a\xd8\x09\xfb\xbb\x19\x36\x53\xde\x85\x36\x16\xd0\x6e\xc2\x38\x53\x65\x82\x86\xde\x4b\x8b\x71\x7d\xe5\xfa\xc5\xfd\xec\x2c\x45\xf1\x20\x84\x62\xb9\xde\xd2\x55\xf8\x27\x77\xfb\xe7\x52\xad\x13\x51\xd0\x7a\xa8\xa2\x91\xb1\x82\x23\xe8\xe9\x9b\xb9\x72\x7e\xea\x3f\x99\x16\xff\x89\xfd\x9d\x5d\x94\x49\x62\x9a\x64\x0e\x1a\xb3\x90\xde\x30\x9b\x1d\x26\xd4\xf4\x41\xde\xc9\x54\xc4\x92\x43\x7e\x98\xf9\xd7\xf1\x0d\xcc\xf6\xa2\xf4\x54\xa0\xe1\x9e\x76\x72\x6c\x87\x1c\x3d\xcf\xc2\x35\xe1\xc4\x02\x43\x6b\xa5\x13\x84\x12\xfe\x74\xbc\x11\xec\x09\x90\x69\x3f\xd0\x1b\x05\xa5\xf4\xc2\x00\x65\x7b\xfd\x4e\xf5\x2b\x35\xff\xd5\x4a\xff\x31\x48\xfd\xab\x6f\x3c\x7c\x1b\xc1\x38\xc5\xc9\xf1\xc9\x99\xf0\x90\x81\x5c\x42\xdc\x77\x3b\x90\xfc\xb0\x65\xe3\xb3\x13\xc3\xdb\xe6\x29\x8d\xd6\x68\xc1\xd7\x13\x96\x3a\x1d\x29\xbb\xa9\x5c\x60\x1b\xf7\x31\x6a\x26\x90\xb1\xf9\xd2\x02\x88\xcc\x5a\xa6\xfc\xc3\xe3\x58\x6f\xb9\x54\xaf\xa0\x0e\x4b\x9d\xb7\x67\xa0\x5a\x9e\x2b\xfb\x47\xe8\x86\xf7\xa2\x19\xbb\xa9\xfd\xab\xc6\x4e\x4d\xc2\xad\x6d\x3b\x1c\xa8\x61\xe6\x15\x4e\x3f\xe1\x73\xe8\xc7\xc6\x12\x1d\xac\x7d\x40\x7a\x63\x15\xf6\x14\xb0\xe5\x3d\x83\xdc\xa0\xd8\xba\x53\x2e\xfb\xb1\x2a\xf1\x5a\x19\x62\x2d\x07\x69\xe1\xd6\x1a\x7b\x4b\x2f\x31\xcc\x7b\x36\xc7\xa4\x4c\x8e\xcd\x51\x79\x7c\xa1\x95\x60\x3c\xcf\xe5\x1a\x59\xef\xc0\xa1\x86\x22\xb2\xd6\x28\xbb\xa9\x3e\x19\x82\x23\x08\xec\x33\xd3\x24\x44\x4c\x17\xe6\x14\x36\x53\x90\xec\xe6\xca\xfc\x82\x2c\x02\xc8\x9e\x92\x8e\x1c\x1d\x6b\x23\xee\x71\x5b\x17\x5d\x88\x41\xe1\x2d\x0b\xac\x8f\x9a\xe1\x80\x05\x47\x3b\xf1\x80\x88\xdb\x45\x40\x0c\x4a\xa5\x59\xd6\x28\x84\xd3\x2c\x45\xa2\xd5\xda\xac\x8a\xae\x43\x18\x4e\x81\x27\x6a\x02\x16\xd6\xd9\x02\x63\xac\xd0\x57\x68\x4a\x8c\x9d\x22\x63\xef\x52\xcb\xcb\xa5\xb1\xe3\x5c\xb4\xc7\x59\x23\xd4\xb9\x2e\x9e\x8a\xc3\x60\x4b\xb7\xe6\x0c\xd6\x99\x05\xce\xb9\x48\x22\x1a\x2e\x9e\xc3\x09\x7b\x34\x6c\x53\xf5\xe6\x5b\xb4\x7b\x1f\x29\x52\xd9\x60\xec\x18\xb0\x1e\x3f\x67\xea\xc5\x90\x84\x8c\x77\xb3\xb3\xf3\xda\xf7\x9a\x09\x19\x2d\x59\x1b\x37\x67\xef\x4f\xdf\x2e\x3e\xdc\xde\x34\xbe\x67\x4a\xa3\x3f\xed\xc9\xc9\xe8\x1c\xbd\xa7\x40\xa5\xff\x8c\x2a\x62\x0b\xbd\xb2\x09\xfa\xc3\x2f\xc8\x86\x8e\xdb\x30\xf0\x63\x11\xbc\x6f\x43\xbd\xb3\xe6\xc2\xe9\xa4\x19\x51\x0b\x8a\x76\x0e\x6b\x6c\x7d\xc0\x3e\xa8\x77\xf8\xf3\x4b\x9d\xc8\xa8\x1f\x4b\x6d\xaf\x2b\x63\xd7\x34\xc1\xa9\x4b\x01\xc9\x05\xe4\x72\xa5\x46\xe1\x0b\xa9\x10\x51\xe1\xa3\xf9\xcd\xce\xfd\xaf\xc6\x6f\xee\xf7\x81\xa0\x27\xd4\x0d\x1b\xc8\x83\x3b\x7c\x00\xdc\xad\xc0\xdb\x0c\x72\x25\x68\x67\x82\x6f\x15\x70\x33\x11\xa7\xa8\x4f\x65\xe4\xe1\x80\x7e\xd8\xe8\x84\x3c\xa2\xc8\x81\x3d\x57\xa9\xc8\x22\x0d\xb8\x47\xa4\x57\xd1\x2c\xda\xc8\x24\xf6\x9a\x60\x2f\x21\x51\x04\xe0\xdc\xaf\x48\xde\x56\x38\xfc\x8a\x2d\xbe\xe7\xd6\xb5\xcb\xee\x2d\xee\xee\x83\xb0\x5f\x4f\x89\xfc\xee\x5b\xf6\x3f\x11\x42\x19\x87\x82\x58\xeb\x6a\x48\x04\x30\xbc\xc3\xf6\x8c\x0a\xaa\x98\xeb\x96\xe4\x9e\x22\xff\x70\x2d\x6a\xf3\x4a\xcb\xac\x3e\x94\xc0\x65\x8e\x9e\x6c\x84\xe1\xe5\x02\x9a\xb3\x15\x1c\x6d\x31\xcf\x2c\x4c\x93\x3a\x57\x1e\x7b\xf1\x22\x0f\xed\xb2\xd6\x79\x46\xff\xb7\xc5\x96\x4f\xd8\x8b\x4a\x47\x5f\x00\xd7\xb5\xd2\x50\x1f\xc5\xc7\x2b\x43\x03\xcb\x75\xc2\x64\x31\x57\xe6\xd5\x64\x56\x66\x26\x12\x71\x6f\x5a\x17\xc6\x67\x08\x31\x68\x7d\x17\xb6\xdb\x90\x9e\xc4\x2d\xab\x05\x2d\x1b\xda\x84\x59\xc8\x99\x8c\x81\xe1\x58\xe4\xc6\x6e\x04\xb5\x27\xf1\x8b\xd9\x00\x12\xc2\x8f\x08\x2d\x8b\x85\xb2\xed\x03\xc4\x19\x2a\xed\xcf\xd5\xd9\x0a\xa8\x05\x80\xd0\x20\x8e\xd1\x0b\x60\xf5\x7f\x1c\x81\xa5\xa4\x78\x8c\x26\x9f\x88\x9d\x08\x52\x67\xc6\x9d\x24\xee\x45\xb6\x2b\xc0\xa9\x0e\xe3\xaa\x04\x2f\x36\x4c\x16\x13\x60\x1e\xb5\x27\xe5\x5c\xf1\x38\xa6\x8c\x6c\x2c\x2e\x78\x50\x76\xce\x33\x7d\xbe\xd4\xf7\x7d\x86\xed\xa1\xd8\x59\xdc\xd5\x69\xc2\xd5\x02\x6f\x90\xcf\x80\x9e\x0d\x84\xb3\xbb\x60\x14\xe5\x72\xe1\xd8\xd2\x9e\xa4\x9d\xee\xbc\xbf\xb2\xe0\x61\x7a\x5c\x94\x4b\x5b\xd1\xa4\x02\x8e\x5e\x7a\x62\x0d\xe7\x27\x23\xe4\x52\xc6\x2c\xba\x63\xf8\x29\xe0\x81\xb5\xbc\x86\x72\xb2\xab\x75\x1f\xb2\xd6\xae\x80\x5f\x2b\xf6\x71\xc8\xcc\xd7\xee\x90\xfa\xb4\x8f\x87\xdd\x35\x2c\xc4\x47\x41\xef\xf6\x34\xeb\x79\xe1\x77\x9d\x7e\x94\x26\x0c\xcf\xf6\x36\x88\xb0\x13\x78\x1f\xfd\xa0\xce\x85\xd5\x2e\x8c\x1e\xbe\xc3\x74\x0b\x42\xfd\x29\x63\x04\x70\x4e\x0d\xf5\x94\x78\x4a\x0f\x68\xd7\x94\x9d\x29\x66\xcd\xbd\x09\x7b\x81\x0b\x2b\x7f\x41\x2e\x60\x52\xd7\x27\xb8\x4a\x4c\xbb\x87\x48\x10\xea\x30\x2f\x4c\x45\xf3\xdb\x0d\x23\x71\xbd\x8c\xb9\xcf\x3a\x2e\xdf\x4a\x48\x85\x7b\x0c\xdb\x09\x46\x71\x97\x58\x80\xcd\xe4\x08\x9c\x91\xd4\x5d\x88\x26\xf8\x0e\xdb\x78\x23\xfb\xd6\xfe\xd0\x0c\x51\x5a\xd2\x7d\x6a\x3f\x67\x3a\x9b\x2b\x5b\x1a\xb9\x84\x73\x94\xe8\xab\x17\x15\x64\xe6\x90\xcd\x1f\xac\x54\x08\xc6\x5b\x55\x46\x10\xfb\xf4\xb4\xde\xf5\x53\x00\x70\x48\x4b\x87\x01\x05\x1d\x08\x5f\x9b\x31\x3c\xcc\x02\xdf\xe2\x35\x5f\xa7\xfe\x4d\x12\x33\x28\xb2\xb0\x4c\xc3\x41\xd6\x5c\x5e\x02\x5f\xf6\xaa\x34\x87\x51\x40\x2a\x3e\x57\x66\xf0\xd8\x4a\x42\xf6\x04\x8d\xcb\x5c\xbd\xd7\xb9\x25\x69\xc9\xfd\x78\xd8\xd0\x3e\x0d\xdb\x0b\x27\x4e\x49\x7f\x78\x0b\x97\x36\xc5\x5c\x90\x6e\xcd\x5d\x2d\x90\x2e\x49\x4c\x4b\x3b\x5d\x66\xbe\x53\x11\x57\x73\xf5\xdf\x66\x78\xe0\x39\xc5\x95\x9d\x56\xbd\xc2\x2d\x0c\x33\x08\xc1\xaa\x8f\x58\xe8\xcb\x7f\x7b\xf5\xf1\x15\xa6\x37\x95\x39\xe8\x01\x4f\xaa\x17\x88\xd3\x97\x28\x93\x04\x90\x00\xb6\x07\x8e\xe3\xc8\x57\xd1\x8b\x84\xa3\x47\xdd\x42\x55\x4d\x8c\x21\x1b\x7d\x98\x63\x7d\xc6\x22\x5e\x44\x9b\x23\x6b\xcb\xd1\x31\x66\x6f\x3f\x9a\x3e\xcc\x43\x32\x96\x56\xbb\xc4\x82\x79\x70\x66\x5b\x47\xfa\x5a\x59\x2f\xa6\x0b\xe0\x80\xbf\xa9\xeb\x8d\x39\x4e\x6a\x5c\x9c\x88\xc4\xa9\xda\x79\xee\xeb\x56\xed\xd3\xbf\x38\x29\x4a\xa1\xf8\x56\xc4\xec\x05\x24\xe2\xbe\xb0\x93\x3f\x57\xe9\x72\x9a\xec\x56\x05\x31\x07\x9a\x41\x99\x82\x2e\xde\x9e\x5b\x6e\x11\x37\x9f\x49\x7b\x06\xbb\xf3\xa1\xd5\x6e\xeb\xb8\xb1\x71\x35\x0d\x37\x58\xd0\xc7\xe5\x46\xe7\xba\x8a\xca\xab\x0a\x74\xf0\xfc\x6e\xc2\x96\x19\x57\x20\x69\x14\x87\x46\x95\xdf\x9d\xf0\x78\x46\x5a\x3e\x9b\x99\xa7\x78\xb2\x83\x0c\x9c\xc9\x5c\x21\x87\x21\x90\xdd\xef\xa2\x44\x46\x6c\x9d\xf1\x74\x53\xb3\x83\xc4\xbd\x50\x05\x28\x63\x5f\x09\x9e\x1f\x86\x96\xc8\xea\x25\xb0\xc1\xf1\xac\x99\x82\xd7\x07\x57\x35\xd6\x69\x68\x5e\xc7\xd5\x02\x08\x49\x11\x2f\xc6\x31\x4e\xed\xe5\x45\xae\xb0\x6d\x12\xf5\x1b\x44\x80\x4d\xe7\x98\xad\x75\x1f\xfc\x00\xc7\x95\xc8\x90\x2c\xa6\xf6\x50\xc8\x84\x23\x57\x3a\x88\x22\xf7\xac\x6a\x45\x72\xcf\x1a\xe5\x3d\xd7\x14\x78\x43\x4f\x85\x4d\x44\x70\x07\xc7\x84\x94\x4b\x81\x3e\x93\xfd\xb1\x5c\xea\xc4\xf2\x8f\x9e\xbd\x65\x3a\x03\xe9\x9f\x42\xd3\x9f\x64\xdc\x65\x1d\x48\x15\x8b\x5f\x0e\x22\x01\xea\xbf\xe8\xad\xd9\x6c\xaa\x09\x14\x66\xea\x9d\x85\xd3\x29\x13\xe6\x12\x2e\xec\xcb\xb8\xf1\xad\xbc\x0e\x16\x9e\x25\xc5\x06\x10\xbc\x98\x24\xe3\x07\x75\xcb\x77\x2c\xda\x70\xb5\x0e\x5c\x13\x00\xa8\x14\xa9\xce\x50\x22\xf7\x1e\xd8\x36\x75\x66\x49\x16\x88\x3a\x80\x32\x75\x5c\x20\x01\x01\xf2\xda\xf2\x03\xf0\xf5\x3a\x13\x6b\x48\x24\x9d\xab\x0a\xf9\x09\x30\x8d\x5a\x75\x1e\xac\xa7\x8f\x3b\xe2\x69\x08\x98\xba\x5e\x83\x45\xb6\x73\x99\xf7\xa4\x2f\xed\xf7\x73\x7d\x58\x27\x4c\x8a\xe9\x84\x7d\xe5\x93\x02\x44\xa4\x95\x4b\xdd\xef\xc8\xdb\xae\xb9\xfc\xd9\x9e\xa7\x43\x93\xa9\xa9\xbd\xed\xf0\x59\x43\xa5\xba\x75\xd1\xf4\x72\x1f\x14\xbc\x28\x47\xdc\x41\x27\xbc\xe0\x89\x5e\x9f\x98\x1f\x5f\xe3\x6f\xfb\xd6\xf5\x09\x22\xf6\x2d\x4b\x9e\xf9\xbe\xb9\x39\x4d\xdd\x9e\x45\xbf\x6d\xac\xf7\x3a\x90\x13\xdd\xed\x40\x7e\x0a\x53\xdd\x52\x21\xed\xf7\x21\x27\x1d\xf4\x3e\x3d\x7d\x1a\xeb\x22\xb6\xb8\x7a\x4a\x0d\xca\xeb\xcf\xd8\x96\x13\x20\xcd\x74\x5c\x46\x22\x36\x3b\x17\xde\x43\x88\x48\x72\x2c\x43\x95\x43\xb2\xed\xa2\xad\x50\xa5\xc1\xad\xfb\xa9\x7c\x0e\x83\xd8\xe9\xdd\xf0\xdf\x76\xf8\x1b\xac\xc5\xd7\x36\xe8\xe1\xfe\xc4\x71\xca\x46\xde\x53\xae\xfa\x2a\xa7\xbc\xce\xe4\x5a\x2a\x5e\xe8\x8c\xbd\x74\x5c\x02\xaf\x9c\x10\x5d\xb7\x85\x30\xf2\x98\xa8\x0c\x11\x1e\x13\x9f\xd4\xf0\x68\x5b\xa4\xe6\x5b\x79\xc1\xb7\x69\xc8\xd2\xec\x64\xfe\x69\x64\x12\x1c\x04\x67\x9b\x80\xef\x54\xe6\x3e\x6f\x76\xae\x28\xe2\x80\xf3\xa6\xb3\x50\x66\xa0\xf3\x6e\x4e\xcb\x62\xf1\x48\xe6\x31\xfc\xf1\x38\xc7\x13\xc1\x10\xde\xf3\xb4\x9f\xcb\x89\x93\xcb\x01\x13\x07\xc9\x1d\xe1\x2d\x95\xea\xfa\xec\x17\xf2\x19\xc9\x2d\x5d\x0f\x9d\x5f\x9d\xdb\x40\x91\x7f\x0f\x56\x1e\x58\x30\x11\x48\x6a\x8b\x89\x58\xf8\xb4\x77\xc7\x9a\xb9\xc5\x2d\x01\xd4\x49\xa2\xcb\x98\xd1\xa1\x46\x61\xf8\x6c\x8a\xb7\x23\xb0\x4c\x4f\xa7\x5d\x89\x65\x23\x05\xc6\xdd\xf9\x03\xbf\x6b\xdf\x81\xf0\x59\xc7\x09\xdc\xbb\xf5\x69\x64\x9f\x6d\xea\x69\xa4\x61\xee\xdd\x71\x3c\x6a\xee\x9d\x17\x1c\x28\x2f\xc7\x39\x48\xe1\x3d\x2a\xe3\x04\xf6\x5b\x18\x40\x68\x21\xe5\xae\x04\x66\xf3\xbb\x83\xab\xb3\x3c\x10\xfd\x55\xa5\x3c\x13\xaa\x58\x40\x8d\xe3\x2a\x83\x4a\x2e\xe1\xe7\x15\x83\x69\x90\x23\xf8\xcf\x37\x1a\xfd\xfb\x96\xdf\xea\x2f\xec\x9a\x7c\x5a\xe6\xbc\x92\x00\xe2\xcd\xef\xd8\x4b\x09\x98\xa3\x20\x16\xea\x26\xae\x63\xba\xa8\x43\x8f\x18\xbd\xa0\x43\x95\xa3\x7d\x50\x87\x7c\xeb\x21\x54\x0d\xa5\x90\x7b\x8f\xb2\xf2\xcd\x51\x6b\xff\x16\x68\x5e\x5c\x54\xfe\x0d\xfc\xc4\x66\xfe\x12\xf6\x57\x91\x69\x9f\x81\x85\xce\xaa\xb0\xe0\x5e\x7b\xfd\xf1\x72\xdd\x68\x8f\xa3\x50\x74\xa8\x94\x0a\x7f\x21\x0a\x31\xf4\x28\x2c\x77\xf6\x39\xd2\x11\x42\x4a\x45\xb4\xe8\x90\xc5\x19\xd4\x94\xe0\xe1\x19\xca\xdc\xc8\xda\x65\x66\x37\xe8\x31\xf8\x2b\x28\xb5\x69\xcb\x53\xc2\xf7\x11\x94\xbb\x1e\xbc\x99\x42\x27\xfe\xfc\xa7\xbf\x4c\x65\x47\x92\x35\x34\x7d\x2c\x5c\xca\x35\xfe\x5d\x26\x85\x8a\x21\x18\xcb\xe3\xa6\x62\x9b\xaa\x78\xe7\x2b\xc7\xb3\x59\x86\x4f\x92\x91\xdd\x7e\xd5\xe6\x0b\x5c\x44\x9f\x20\xa2\xef\x0f\x59\xb7\x7d\x2b\xf1\xbe\x2e\x53\x22\x5f\xc4\x3b\xc5\xb7\x32\xfa\xa4\x6d\xdc\x49\x91\xc4\xd0\x44\xaa\x7d\x5f\x54\x2a\x16\xd1\xdd\x58\x9b\xe0\xd1\x7a\x13\x22\xba\x63\xdf\xdf\xbc\x3f\x47\x79\x61\x99\xcf\xd5\x05\x2f\xe4\xbd\xb8\xcd\x12\x17\x0e\x20\x98\x74\x96\xd8\x3d\x52\xe5\x3f\x0f\xb8\xb6\x2c\x59\xba\x35\x1c\x42\x79\x8a\xed\xee\x68\x59\x46\x77\xa2\x38\xce\xb8\x8a\xf5\x16\xbb\x71\x9c\x97\xab\x95\xfc\x65\x5a\xf0\xac\x43\xab\x02\xfd\x08\x9f\xd1\xce\xf5\x0a\x64\x85\xb7\x79\xd1\xd4\x7d\x80\x44\x6b\xd2\xb5\xaf\x18\xb7\x98\x17\xc8\xb7\x02\xc8\x46\x59\x55\xe7\x05\x4a\xc1\xdc\x65\x90\x43\xcd\x73\xca\x60\xd0\x24\xb6\xfe\x31\x30\xee\x3f\x06\xad\xf2\x21\xec\xb0\x51\x5e\x62\x74\xcb\xef\xf0\x7d\xb8\xce\x44\x9e\x4f\x58\xae\xa1\xc5\x73\x65\x73\x01\x6c\xbe\x1a\xe0\x5e\x80\xae\x38\xd9\xb1\x48\xa7\x0e\xb4\x8e\xfd\xda\xe8\x07\xf0\xd3\x87\x99\xba\x20\xa2\x5d\xaa\x42\x26\x8c\xaf\x0a\x72\xe2\x83\x36\x83\xd5\x62\xcb\xa7\x73\x05\xa1\xd8\x08\xba\x0f\x10\x09\x17\x7e\x71\x9d\xc8\xd9\x8a\x47\x32\x91\x05\x31\xc6\x41\x92\x17\x37\xfd\x35\xf7\x81\x19\xcb\x8c\xef\x78\xe2\x1f\x56\x3c\x29\x7d\x72\xf2\x51\x2e\x7a\x18\x49\x65\xbe\x40\x07\xc1\xf3\x6d\x70\x8f\x02\x94\x61\xf0\x01\xd9\xdb\x67\xa6\xf2\x8b\xda\x2d\xfa\xbb\xf0\x7f\x2b\xef\xf0\x3e\xab\xe0\x80\x07\xf9\x21\x97\x63\xf3\xc9\xed\x04\xcc\xbd\x9d\x21\x63\x8b\x0f\xae\x98\xe2\x3e\xfd\xd7\x5d\x8f\x10\x33\xe9\x78\xf4\x4f\xad\xec\x5c\xb3\x86\x11\xa3\xd7\x6e\x24\x7e\x22\x77\x46\x17\xa5\xfe\x90\xe6\x5b\x6f\xfc\xa5\xd6\xc9\xa1\x1e\x79\x22\xc5\x90\x5a\x2d\x40\x89\xf9\x90\xe7\x24\x2e\x00\xe7\xd8\x3a\x7b\xeb\x62\xee\x8e\xa3\xbe\xaa\xdf\x46\x70\x30\x6a\x02\x1c\x64\xd0\x88\x1e\xa4\x78\x9e\xb6\x80\x2e\x46\x22\xde\xa1\x0c\x44\x6b\x59\xd3\xbe\x19\x22\x08\xf8\x51\xb8\x6f\x23\xf0\xf8\xd6\x5a\x38\xca\x59\x87\xba\xc9\xb5\xaa\x9c\xe3\x2e\xe4\xfb\x76\xe3\x18\xd4\x6d\xc7\x73\xcb\x15\x79\xfe\xc8\x8a\x9f\xab\xc0\x62\x47\x4e\x3a\x9b\x52\xe0\x46\xad\xcd\x9f\x57\x59\x86\x07\xfb\xf3\x0e\x11\x75\xe8\x3d\x39\xdf\x86\xf2\x8c\x80\x05\x89\xf4\x76\x29\x95\x65\x85\x20\x27\x37\x3c\x35\x66\x96\x33\xd7\x05\x24\xec\x93\x01\x45\x7b\x6a\x63\xef\xcc\x9c\x90\x7e\x38\x3c\xb2\xf6\x3d\xc7\xc3\xf7\xdd\xd3\xea\x4f\x74\x44\x1a\xeb\x3d\x30\x17\x48\xf2\xc0\x77\x39\x48\x98\x0b\x73\x2a\xae\xd0\xb1\x5b\x6d\xff\x24\x30\x3f\x2c\x1f\xf3\x5c\xc1\x08\x21\x5f\x97\x3d\x48\xcd\xc9\x0a\x0b\x30\xb1\x62\xed\x9e\x6b\xed\x45\xde\x3e\x38\x9f\x27\x56\x93\xf5\xc6\x6a\x30\x08\xfd\x3f\x23\x3c\xd3\xe3\x04\x3e\xd0\x17\x1d\x5c\x93\x68\x31\x12\x4c\x08\x12\xb7\x5c\x88\x7a\xc2\xb6\x5c\x2a\xda\x06\x28\x88\x19\x8b\x65\xb9\x5e\x77\xba\x48\x7f\xfd\xb1\x96\xea\x3e\xf9\xa7\xf7\x85\xf7\xb2\x05\x3e\x85\xb7\xf8\xcc\xd6\x84\xee\x6b\xf3\xee\xfb\x34\x0e\xe2\xcf\xe8\x8d\x6f\x0d\x89\x35\x16\xd1\xd3\x78\xe3\xcf\x86\x78\xe3\x2d\xb6\x0b\x52\xec\xe8\x39\x6d\xf1\x37\xbf\xb9\xe9\x3f\x8d\x9b\x7e\xd0\xa2\x40\x5a\x9d\x85\xac\x1a\xe8\x3d\x2d\x7c\x24\xf3\xa4\x23\x63\x86\x56\x21\xbb\x9b\x39\xdd\xe3\x9c\x2d\x79\xf4\x0c\x54\x94\x70\x3b\x1e\xee\x0f\xdc\x03\x7e\xb9\xd6\x5b\xc1\xa0\xaa\x1c\xa5\x94\x18\x65\x31\x4e\x00\xad\x6a\x3a\xe8\x11\x23\x84\x47\x81\xeb\x14\x91\x2b\xb1\x37\xaa\x5f\x2a\xf1\xc0\xcc\x6d\x35\x09\xe1\x7b\xc1\xf4\x80\xc6\xde\x2b\x63\x1d\x56\xb0\xfe\x8e\x32\x23\x13\x6b\x9e\xc5\x90\x61\x42\x5b\x32\xe1\xd1\x9d\xf9\x6f\x68\x1f\xd5\x48\x10\x43\x9b\xad\x8f\xb0\x57\x5f\x9a\x54\x11\x92\x11\x5a\x56\x75\xd7\x3e\xfc\x79\xce\x78\x94\xe9\x1c\x9d\x46\x4e\x9a\x1a\x32\x9c\xc1\x80\xbd\x97\x71\xc9\x13\xac\xb1\xd3\xd3\x3e\x16\xbe\x56\x07\x1c\x05\x2a\x72\x4d\x34\x1b\x4d\x07\x72\x44\xc1\x30\x4e\xe7\xea\xad\x0b\x98\xbc\x61\xb7\xb9\x20\x94\x59\x6e\x79\xf8\x7b\x5b\xfa\x6c\xe6\x43\x03\x13\xd8\x69\x43\xf4\x0c\x80\x05\x59\x07\x03\x91\x77\x8f\xc4\x1e\x42\xd3\x43\x26\x65\x34\x31\xf3\x59\x20\x65\xef\x87\x05\xdf\x09\x99\xe0\xf1\x2e\x64\x43\x94\x8a\x41\x94\x8e\xf1\x78\x2b\x95\xd9\x04\x56\x2e\xd5\xdd\x34\x56\x39\x01\x21\xc7\xa0\x2a\x96\x24\xb5\x43\x30\x67\x4a\x18\xe3\x92\x67\x32\xd9\xc1\x7b\x22\xcd\xc4\x51\x50\x4f\x30\x3f\x94\xf1\x04\x1a\x10\x44\xe3\x52\xe6\x62\x55\x26\xf8\xea\x80\x77\xb9\xeb\x00\x9d\x48\xb7\x67\x13\x63\x70\x14\xa4\xe5\x13\x54\x8c\x0a\x99\x4f\x91\x3d\xd2\x88\x56\x8e\x8b\xb8\x79\xb6\xce\x0c\x40\xee\x1b\xfd\x60\x53\xdd\x1e\xb8\xc7\x32\x77\xdd\xae\x4f\x16\x65\xe9\xb7\x43\xed\x0b\xd0\x9e\x53\x01\xe5\x9e\x0b\xad\xd1\x67\x22\x76\x67\x93\x54\xd0\x1d\x12\x99\xf6\x9e\xeb\x32\xc7\x8c\x39\x33\x97\x70\x7f\x59\x47\x47\xd5\x71\xcd\x5c\xef\x64\xae\x15\x9b\x97\x5f\x7e\xf9\x7b\xc1\xbe\x84\x14\x42\x7a\x8f\x60\x7c\x0c\xf8\x3a\xb1\x74\x38\xb2\x5d\x05\x02\xc9\x3c\x1b\x33\xc2\xda\x20\xaa\x36\x5f\x1f\x40\x9e\x3c\xda\xb0\xbc\x5c\x22\x82\x91\x53\x88\x85\x2b\xc7\xfb\x7d\xae\x01\x8c\x88\x37\xbb\x6d\xfd\xff\x92\x80\x02\xca\xae\xcc\x55\xaa\x91\x9a\x1e\xa0\x9f\x4b\xc1\xb6\x3c\xbb\x03\x15\x5d\x74\xcf\x03\x15\xff\x4b\x29\xa6\xd5\xf0\xc2\xab\x4a\x7b\x28\xa0\x83\x94\xd3\x2c\x2b\x95\xb2\xb2\x60\xcc\x18\xa6\xde\xd7\x3f\x99\xab\x65\x19\xbe\x3d\x2b\xc1\x02\xbf\xb4\x20\x60\x00\x87\xad\x06\xae\x10\x6a\x14\xcf\x7d\xbb\xa6\x6c\x40\xd4\x60\xae\x9e\x38\x6c\xb0\xcf\xe1\x77\x49\x36\x98\x75\xe6\x05\xf9\x0a\xd0\xdd\x50\xb9\x1a\xa6\x03\x97\x3d\x18\x39\x97\x20\x5f\x3d\x61\xdf\xcb\x7b\x31\x61\xd7\x29\xcf\xee\x26\xec\x2d\x86\xff\xfe\xa0\x97\x6d\x3e\xbc\x06\xa1\xc4\xc1\x7e\xbc\xc7\xb9\xb1\xfa\x88\x56\xda\xad\xff\x9f\x1a\xc4\x00\xac\x2b\xf6\xfd\x3f\x13\x91\xd7\xc1\xf5\xf1\xcf\xee\x89\xd8\x13\xa6\xfe\x0d\xbc\xf6\x4f\xf9\x2a\xee\xa7\xf9\xf8\x5d\xf8\xbf\xf6\xfc\xb2\x16\x17\xd8\x9e\x74\xca\xb5\xa2\xd2\x7e\x5d\x89\xcd\x32\xae\x5f\xca\xcd\xfc\xe6\x61\x5b\x81\xd2\xc7\x63\x97\xda\x3e\x02\x74\x4f\x3f\xb5\xe3\x75\x92\xe8\xbc\xcc\xfa\x37\xff\x55\xb5\xd5\xb6\xf6\x16\xaa\x55\x58\x6c\xdb\xa5\x00\xd6\x82\xa1\xf0\x13\xfc\xda\xe2\xbf\xf5\x72\x01\x58\xab\xc3\x76\x78\x5b\x71\x8e\xc0\x59\x47\x95\xa6\xfa\x1b\xf2\x3a\x15\xc0\x38\xe5\x4d\x51\x1f\x10\xa8\xad\x30\xe7\x1a\x99\x2b\xcb\x79\x8f\x19\xb3\x59\x26\x80\x9c\x3b\x13\x20\xb5\xc8\x88\x63\x30\xd9\x05\x16\x51\xf0\xf2\xf1\xa0\x98\x30\xcb\x0d\x92\x55\xe9\xbd\xb5\x14\x42\xb9\xd1\x1e\x63\x4a\x00\x11\x75\x6d\xf4\x09\xed\xf6\x20\xac\xf4\x41\x87\x2c\x6c\xe3\x77\xc1\x5b\x10\x4c\xee\xb5\x28\x82\xd3\xbc\x66\x5a\x54\xb6\x66\x25\x42\xf5\xab\x42\xfc\xb7\xc6\xa0\x6b\xe4\x5c\x15\x07\xca\xa0\x98\xde\x53\xf8\xcb\x2f\x79\xb1\xc1\x07\xed\x56\x17\x02\xcf\x4c\x64\x09\xc2\xf5\x82\x5e\xe7\x65\xa2\x97\xa0\x71\x58\xf4\x70\x38\x46\xb4\xb5\x07\x0d\x5d\x73\xc2\x86\x9c\x0c\xe6\x34\x81\x4c\xdb\x4c\xe4\x40\xb8\xd2\x8c\x52\x0d\xc5\x27\x8f\x7b\x74\x37\x9b\x6b\x0e\xfd\xb7\x8d\xc7\x76\x53\x14\xc3\x6c\x6b\x00\xab\x9e\x3e\x22\x83\xa6\x21\x31\x42\x64\xd1\x14\x06\x46\xbe\xd8\x5a\x7f\xad\x94\xfe\x5c\xcd\xf0\x93\xe0\x12\xe0\x5e\xe5\xca\xe1\x41\x49\x35\xd9\xed\x3f\x4c\x5f\x65\xb3\x10\x81\x48\x1e\x82\x89\xf7\x65\xc2\x63\x60\x02\x59\x8d\xaa\x90\x99\x60\x0a\x50\x08\x73\x95\x97\xcb\x23\x4f\x4c\x62\x5e\x71\xf7\x40\xa6\x93\x8b\x94\xc3\x53\x06\xf8\x8a\x8e\x5a\xae\x61\xf4\x4c\x7a\xb5\x1a\x4b\xe0\xc7\x13\x3a\xfc\x21\x57\x12\x33\xe3\x5d\xdf\x5d\x39\xe6\xb1\x06\xaf\x68\x0b\x57\xc2\xcb\xae\xef\xbc\x00\x3d\x2d\xc8\xc0\xbc\x42\x14\xc5\xe7\xbe\xc0\xc3\x68\xe8\xd0\xab\x1b\xe2\x69\x73\xf5\x2f\xf6\x6e\xe8\x06\x15\x8f\x58\xe9\x66\x64\xcc\x15\xd5\x09\x76\xae\xb4\xcd\x3e\x21\x03\x23\xb0\xbb\x51\x8d\x25\xdf\x56\x2a\xb7\xb8\x96\x50\x54\x45\x53\xba\x2c\x7c\x7a\x2f\xf3\x80\x6e\x1d\x6a\xbb\x16\x82\xbd\xc9\xc4\xea\xcd\xc7\x4c\xac\x16\x76\xa6\xa7\xd0\xa1\xa9\xe9\x51\x93\x74\x7d\xe0\xe2\xc8\x53\xad\xda\xc9\x0f\xf7\x90\x93\xd6\xba\x84\xe5\x04\x7d\x92\x2b\xe6\xf5\x65\x4d\x7f\x80\x01\x42\xc4\x75\x36\xf8\x46\xcb\x3e\xf9\x35\xd7\x85\x04\x1b\x00\xb5\xea\x90\x21\xfd\xe7\xbf\xde\x2a\x63\x36\xe4\x7a\xbb\xa9\x42\x66\xec\x61\xcf\x95\xbb\xf0\xba\x71\xa1\x9f\x16\x9d\x0e\x13\x98\xa7\xfc\x41\x11\x8f\xcd\x28\xd7\xd3\xb0\x6b\xad\x06\x20\x0a\xae\xb5\x06\x06\xce\xef\x32\x65\x3d\x7d\xd2\x29\x59\x4e\x02\xfd\x7f\x9e\x24\xa1\xa6\x85\x8f\xb4\xcd\x95\xcf\x4b\x35\x56\x6b\x92\x58\x17\x5e\xc5\xde\x70\x92\xc3\x79\xc1\x0b\x31\xb1\xa4\x2b\x44\x57\x48\xf1\xb0\xa3\x25\x07\x71\x69\xa7\x62\xb6\x6f\x37\x3f\xd5\x23\xf2\x57\x96\x17\xbd\x27\xf2\x8c\xd5\x2e\xee\x44\x03\xce\xbc\xb7\xad\xed\x91\x8e\x80\x52\x02\x36\xb3\x3d\x65\x23\x9e\x65\x16\xe5\x4f\xb5\x32\x4b\x38\x1e\xbe\x4a\x3a\xda\xb9\x11\xd1\x5d\xaa\xa5\x1a\x7d\x16\x55\x28\x2e\x60\xb1\x17\xcc\x97\xe6\x5e\x87\x83\x2e\xc7\x8a\x3d\x89\x1d\xc9\x01\x5e\x61\xa1\xa1\x9e\x8c\x8d\x33\xa7\x55\xdd\xbd\xec\x9e\xda\x7f\x21\xfc\xdd\xf0\x0c\xbe\xd8\x96\xf8\x50\xed\x56\xe1\x2d\x8e\x9d\x0a\x13\x28\x6f\x64\x7f\x0d\x1c\x6c\xce\x2a\x14\x86\xad\x43\x0a\x2e\xc8\xdf\x3c\x43\xbf\x79\x86\xfe\x87\x7b\x86\x3e\xa5\x5b\x08\xb0\x31\xcf\xe9\x13\xea\x09\x90\x1f\xb0\x1d\x5d\xad\xa3\x73\x1c\x5b\xad\xe3\x49\x20\xbb\x1d\x64\x3a\x36\x81\xfe\x96\x08\xc3\x8c\xcf\x92\x47\x77\x42\x75\xc6\xe8\x2d\x7d\x51\xa7\x02\xea\xd3\x22\x58\xda\xd8\x97\x82\x5f\xf7\x43\x59\x3c\xd4\x89\x48\x83\xdb\x08\x41\xcc\x3e\x01\xdb\xd3\x74\xfc\x08\x40\x63\x3a\x73\xc4\xd6\x39\x65\xe1\x61\x30\x12\x69\x92\x10\x2c\x55\xa3\x82\x1e\x8a\x89\xb3\x15\x2f\x52\xad\x93\x56\x68\xdc\x93\x0e\x60\x23\x51\x66\xe8\xe0\x9d\xa1\x31\x9a\x87\x80\x31\x3b\x8a\x3e\xe9\xc2\xa7\x68\x60\x3e\x06\x68\x61\xc0\x6a\x8a\x4b\xc8\xa5\xf4\xc3\x11\x08\x1c\x72\xe7\x70\x21\x8c\xd8\x52\x44\x1c\xa4\x57\x2d\x78\x2f\xe2\x2e\xfb\x24\x24\x45\x6a\xa4\x83\xe4\xcd\x7a\x3a\xa2\x96\x50\xee\x42\xb6\x09\x5f\x8c\xdd\x5c\x35\x0b\xc1\x42\xcb\xb1\xe5\x16\x49\x62\x69\x17\xf7\x49\x0a\x5b\x8e\xe9\x05\xe8\x1f\x0e\xbb\xe1\x5a\xcf\x9d\x33\x2a\xe8\x04\xca\x19\x7e\x90\x7e\x0f\xe9\x38\xdb\x81\xc8\x9d\xb9\x9a\x39\xa5\x59\x8f\xfd\x72\xc8\x3d\x0c\x97\x22\x66\xb1\x31\x35\xc8\xe5\xe8\x5f\x2e\x13\x96\x97\xd1\x06\xd8\x2a\xab\xe7\x54\x78\x6e\x35\x77\xec\x64\xae\xcc\x83\x08\x5c\x2d\x5b\x0e\x79\xf1\x0f\xc6\x58\xcd\xe5\x5f\x85\x83\x67\x11\x79\x57\x88\xc8\xc2\x87\x93\x56\xad\xe8\x35\x4b\x1c\x8a\x00\x0b\x8f\x29\x29\xd3\x98\x17\x62\x3a\xf7\x68\x1b\x89\x9e\x4e\x8b\xf2\x20\x93\x39\x0f\x3b\x16\xe2\x18\x6b\x27\x6d\x22\x57\x22\xda\x45\x0d\x1d\xa0\x7e\x9a\x88\xdf\x9e\x6d\xbf\xae\x67\x1b\xb2\xec\x62\xce\xe0\x98\xa1\xa5\xa6\x5e\xf9\x9f\x1f\x36\xb8\x82\x05\x2d\xc9\x47\x8c\xf3\x27\x7c\x76\xb6\xd8\xc0\xe3\xec\xf9\xc1\xef\xa0\xfe\xeb\xcc\x3f\x6c\xfd\x65\x1d\x50\x20\x34\xcc\xc2\x30\xb8\x58\x84\x4b\xc7\x18\xb4\x83\xc3\xfa\xdd\x2c\x33\xbf\x2a\x70\xd2\x90\x87\xab\xb1\xb8\x1d\x5c\xe9\xc2\x5a\xda\x4a\xe0\x7d\xd7\x63\x71\x07\xac\xee\xbc\x78\x91\xbb\x51\xaf\x9e\x80\x16\xfb\x3f\x53\xbb\x83\x12\x30\x77\xa9\x58\x94\x59\x72\x10\xdc\xf8\xf6\xea\xfc\xd8\x59\x1b\x60\x39\x77\xea\x1e\x15\x35\x71\x66\xab\x0a\x2c\x62\x82\x83\x46\x3a\x61\xcb\x72\xb5\x02\xfd\x12\x02\x86\xda\xc3\x08\xb4\xe1\xcb\xbc\xb0\xf7\x09\x32\xcd\xf0\xbc\x98\x2b\xad\x04\x9b\x7f\x71\x3c\xff\xc2\x5c\x65\x19\x8f\x0a\x91\x21\xc9\x40\xc2\xf3\x82\xe5\x62\x0d\xa6\x16\x55\x7a\x7b\x75\x0e\x59\x89\xc5\x06\x8b\x73\x4f\x56\xcc\xf7\x44\xce\x67\xd0\xfa\x01\x82\x6a\x15\x68\x5e\x41\xdb\x5f\xf2\x9c\x49\x35\x57\x1f\x4d\x11\xc7\x6b\xad\xd7\x89\x98\xda\x09\x99\xbe\x25\xd7\xe3\xc7\x57\xd8\x02\xf8\x79\x08\xeb\x37\x17\x22\x57\x5a\xc9\x88\x27\x90\x90\x33\x57\x60\x35\x4f\x4c\x67\xc0\x35\x3a\xff\x62\x3a\xff\x82\x41\xf8\xb4\x60\x3c\x8a\x44\x5a\x88\x18\xc5\x45\xcf\x14\x4b\x01\xbf\x18\x89\x09\x2b\x04\xdf\xe6\x96\xd2\x99\xa5\xe6\x8d\x09\x4f\x43\x26\x15\x21\x9d\x96\x52\xf1\x6c\x87\x60\x26\x94\x0b\xa7\xe4\x8f\xdd\x5c\x89\x5f\x80\xfe\x53\x02\x03\x68\x99\x3b\x5a\x1a\x12\x26\x30\x5d\x9e\xa9\xdd\x94\x7d\x8f\x0c\x0d\x48\x81\x7a\x7b\x75\x6e\xe9\x8d\x28\x07\x74\xae\xf2\x68\x23\xb6\x82\x7d\xdc\x14\x45\xfa\x71\x82\xff\x9b\x7f\x84\x88\xa3\xd2\x0c\x3f\x9d\x30\x33\x45\xc6\x50\xb5\x78\xf9\x64\x07\x2a\xae\x65\x4a\x92\xef\x73\x05\x5c\xec\x59\x88\xee\x35\xa3\x0d\x35\x06\x4f\xf0\x0a\x2e\xdc\x9c\xe2\x20\xaf\xf8\xc6\x0c\xce\xff\x65\x67\x2b\x5f\xa5\x19\x40\xab\xee\xe5\x5a\x05\x06\x49\x0e\x29\x5b\x53\xf3\x83\x99\x62\xdf\xdf\xdc\x5c\xb2\xef\x4e\x6f\xac\xb1\x73\x7b\x75\x8e\xeb\x02\xe8\x54\x18\x67\x7f\xae\x4f\xf1\xcd\x2e\x15\x7f\xf9\xf3\x5f\xe6\x8a\x59\x95\x70\x65\x47\x1a\x77\xf4\x04\x29\x61\x01\xef\x04\x81\x59\xa0\x72\x86\xfa\x50\x72\x87\x9a\x9f\xa1\x75\xfe\x40\xde\x02\xb8\xa3\x12\xad\xef\xca\xd4\xb9\xb9\x43\x3b\xcc\x54\x78\x7b\x75\x0e\xa5\x03\x9d\x52\xb1\x01\x05\x33\xe1\xbc\x2f\x30\xf1\xdc\x36\xc6\xfc\xf7\xbd\x96\x31\xe3\x6a\x67\x7e\x8b\x45\xc3\xb2\xcc\xc4\x4a\x67\x62\x62\xbf\x69\x0a\xe0\x85\x5c\xca\x44\x16\x3b\x38\xa5\xac\xb2\x7c\x6a\x39\xf2\x4d\x01\xe6\x35\x43\x00\x6f\xb3\xc0\x50\x48\xf6\xe5\x6d\x1e\x22\xc0\x61\xd2\x9c\x3a\x21\x3e\x74\xcc\x6f\x97\x99\xe0\x77\x66\x75\x53\x09\xd3\x57\xa4\xda\x2a\xde\xe0\x1d\xb3\x2a\x55\x84\x4b\xc3\xb4\x81\x56\x3f\xbd\x9c\x92\x5d\x20\xdf\x6f\xc3\xe5\xab\x95\x8c\x24\x4f\xe8\xe4\x58\x96\x2b\x90\x8d\xe1\x39\x49\x16\x21\xf8\xd0\x14\x02\xaf\x0c\x2b\x99\x8f\x0b\x6a\x29\xd6\x12\x01\xc7\x0f\xb2\xd8\x60\x5e\xc1\x14\xe7\x99\xa7\x32\x9f\x46\x7a\x0b\xfb\xed\x1a\x96\x52\x4e\x8f\x5e\xc0\x81\xd7\xd6\x39\x7b\x69\xa1\x76\xdb\xb4\xd8\xd1\xda\x7b\xc5\xb6\x72\xbd\x29\x40\xc8\x05\x6a\x07\x48\x84\xdc\xa6\x09\x3c\xfa\x28\xc2\x68\xf1\xbe\xb9\xd8\x72\x55\xc8\xa8\x2b\xa6\xd4\x2a\xca\x3d\x0c\xe3\xb9\xdc\x15\xfd\x7e\xbc\xf7\xc4\xb3\xcf\x91\x42\x3f\x38\x91\x59\xfd\x40\xa6\x33\x10\xe4\x65\x02\x02\xff\xba\xe8\xeb\xbe\x27\xd4\xc7\x99\xda\x7d\xf4\x24\xa4\x5c\x05\xda\x57\x3d\xb5\xdb\xfd\xcf\x13\x4d\xb3\xc6\xf8\x5c\x01\xaa\xd3\x1c\x18\x24\x07\xdb\x7b\xc7\xb8\x2b\xc5\xcc\xec\xa5\x5d\x34\x89\x5c\x42\xdd\x74\x56\xe4\x2c\x2f\x53\xc8\x27\x28\x34\x4b\x79\x74\x77\x5c\x2a\xf3\x3f\xe6\x30\xc4\xed\x9e\x87\xe4\x44\x73\xa5\x57\xac\x2c\x70\xe3\xd8\x25\x0c\x4e\x91\xc0\x15\xe0\x1f\x68\x5b\x51\x6c\x74\xec\xf2\xc2\x4c\x99\x30\x7e\xa6\x45\xa7\x44\x2f\xfd\xfa\x0d\xbb\x34\x15\x9a\x45\x4c\x75\x73\xd7\x7d\xa9\xd8\xc9\xbf\xfc\x0b\x7c\xdf\x0c\xee\x3b\xad\xd9\x4a\x6b\xf6\x0d\x9b\x4e\xa7\xff\x89\x7f\x33\x85\x72\xb5\xa3\x7f\x71\xb5\x9b\x9a\xe2\xde\x65\x7a\xfb\x72\xa5\xf5\x2b\xfa\x3b\xc8\x26\x9b\xff\x90\x2b\xf6\xd2\x7c\xe9\x16\xaa\xba\xd1\x2f\xe7\xe5\x97\x5f\x7e\xf5\xef\xe6\xab\xaf\xd8\xdf\xf0\x3b\xc1\xd7\xff\x11\x36\xf5\xab\x3d\x4d\xfd\x03\xbf\xe7\x43\xda\xca\xbe\x81\xbb\xc6\x14\xd0\xdb\x46\x99\xbf\x7c\xa7\xf5\x14\x5e\xff\x61\xeb\xb0\x58\xf3\x0d\x6c\x45\xf0\xad\xff\x0c\x9a\xcd\x6c\xbb\x7f\xbf\xa7\xdd\x88\xaa\x77\x2d\xc7\xe2\xdf\x69\xfd\x72\x3a\x35\xe7\x16\x8d\x2b\xb6\xfa\xe5\xab\xea\x40\x43\x07\x9a\xed\x37\x1f\x9f\x61\xf3\xdf\x9e\x5e\x9f\x5c\x9d\x5d\xde\x7c\xb8\x7a\xf5\xc6\xf6\xc0\xcf\x40\xf0\x7b\x66\xc5\xad\x5d\xc3\xff\x75\x4f\xc3\xbf\xd3\xb6\xcd\xd0\xe8\x37\xdf\x30\x9c\xcd\x74\x39\x7d\xa7\xf5\xdf\xa6\xd3\xe9\x3f\xe8\x63\xae\x76\x13\x73\x31\x99\xef\xa4\x78\x94\xbf\xe7\x59\xbe\xe1\x89\xe9\x53\xd0\x06\xd7\x89\xd6\x12\x6d\x71\x72\x55\x2b\xec\x56\x6d\x7d\x71\x50\x19\x4c\x2c\x7c\xeb\xff\xf9\x86\x29\x99\xf8\xe9\x0b\xea\x80\x79\xba\x01\x6a\x89\xe8\xce\x6d\x17\xa7\xd2\xb9\xdc\xb1\xb4\xbe\x71\x31\xef\x6c\x67\x15\x0a\xcc\x71\x3f\x57\x2f\x5a\x4e\xf4\x63\x63\xda\x4d\xe1\x03\x73\x41\xbd\xb0\xfa\xed\xf6\x5a\x70\xca\x5a\x38\xb2\x10\x88\xc6\xdd\xaa\x28\x47\xad\xcd\x3e\x74\x17\x5e\x40\x56\x05\x66\xe7\x8b\xe3\x17\x94\x28\xe4\xab\xa8\x12\xc9\xcf\xbf\x58\x69\x3d\x5d\xf2\x0c\x5a\xf7\xcb\xf1\x6e\xfa\xd7\xf9\x17\xd8\x1f\x34\x3e\xd0\x30\x82\xc2\xe7\x5f\xc0\xa7\xb0\x1c\xe6\xea\x0f\xd7\x1f\x2e\xe6\xea\x9b\x6f\xbe\xf9\x06\x47\xcb\xfc\xbb\x25\xf6\x62\xae\x2b\x38\x6e\xd1\x4e\x29\x73\x2b\x29\x29\xd6\x65\xc2\xb3\xb9\x6a\x0f\xd7\xc4\xc2\x1f\x9a\x13\x1f\xbc\xa1\x75\x36\xb1\xea\x16\x20\x52\x66\xcf\x38\xf4\x4d\x7e\xfc\x7f\x4d\x93\x3f\x92\x89\xe8\x0e\xf9\x70\x08\xa6\x76\x31\xbf\xb1\x4b\xd5\x0c\xb6\x59\xbf\xde\xce\x5a\xc9\x44\xd0\xc6\xb5\x8b\xfb\x52\x64\xb9\x56\x7e\xcd\xd0\x83\x00\xb8\xcd\x20\x00\xc0\xbe\x61\xaf\xff\xb3\xf6\xa9\x99\x07\xfb\xe1\x57\x95\x93\x80\x31\x5f\xd4\xfc\x0b\x68\xf5\xfc\x8b\x37\x6c\xfe\x45\xdb\xba\xa9\x36\x6c\x8a\x4d\x99\x7f\x31\xf1\x05\x40\x33\x2e\xf8\x16\x0b\x29\xbf\xfc\xf2\xf7\x11\x36\x01\x53\xd7\x82\x6f\x9a\x26\x75\x7f\x31\x68\xe2\x59\x2d\x74\x66\x07\xc2\xa6\x40\x3e\x88\x24\x39\xba\x53\xfa\x01\x95\xbe\x21\x4e\x44\x59\xca\x0c\x97\x47\x75\x72\x49\x9b\xac\x36\xe3\x36\x69\xd3\x55\xe3\xe4\xed\x60\x42\xe7\xea\x23\x2c\x1d\x3b\xa3\x44\x47\x04\x74\xa0\xae\x26\x78\xd4\xd0\x4a\xb0\x39\x16\xb4\x10\xe6\x0a\x8a\x71\x73\xce\x5e\x02\xf0\x8b\xba\xd2\xb0\xac\xed\xe3\xe9\x2f\x7f\xfe\xcb\xab\x37\x87\xcc\x53\xb5\xb8\xca\x54\x41\x7f\xb0\x8c\xd7\xd3\xaf\x5e\x7f\x95\xcf\xbf\xa0\x51\x6f\x7f\x62\x9f\xcb\xbc\xf8\xb1\x66\x81\x3d\x42\x6e\xdc\x18\x0e\xcf\x15\xbc\xb0\x4d\xc5\x66\x0e\x0d\x5a\x5c\x55\xc3\x0a\x7a\x65\xdd\x3a\xf0\x38\xb3\x42\xec\xa6\xdd\xa3\xcc\x3b\x37\x5e\xf8\xd8\x62\x0f\x19\x4f\x53\x91\x59\x5f\x79\x23\x9c\x01\xaa\xe6\x50\x8b\x3d\xfa\xdb\x0e\x33\xb3\x6c\x6a\x45\xc3\xd7\x60\xe8\xa6\xed\x33\x77\x51\x26\x49\xe7\xcc\xed\x17\x4b\xbe\xb8\x3d\x3f\x5f\xfc\x38\x3b\xbf\x3d\xb5\xdd\x6f\x15\x1f\x0e\xbe\xd6\x39\x26\xae\x25\x34\x26\x88\xab\x2a\x00\x4b\x55\x6e\x45\x66\x99\xc2\x7c\xaf\x11\x47\x52\x26\x49\x55\x98\x7a\xae\x3e\x52\x39\x70\x0c\x94\x4a\x5a\x33\xa5\x77\xe0\xaa\xf5\xc3\xd7\x3e\x9a\xc2\x3f\xe2\x6f\x8f\x98\xef\xc4\x1b\x76\xe1\x6a\xed\x18\x57\x22\x9c\x38\x60\x3b\x60\xbe\x6d\xd7\x76\x78\x6a\xe9\xfd\xc7\x6d\x8f\x5b\x05\xa2\x5f\xe6\xe4\x45\xc5\xfc\x27\xd9\x1d\x38\x76\x1f\xab\x50\x70\xe7\x2e\x8d\x31\x6a\x08\xe5\x4e\x50\x30\x3d\x2f\x88\xb3\x18\xc7\x6c\xae\xf0\x20\x36\x6d\x2a\x74\x77\x9b\xd8\x19\x45\x90\x12\xae\xd6\x25\x5f\x8b\x7c\xc2\x6c\xe5\x73\x65\x5f\xa7\xf6\xad\xe3\x80\x39\xc0\xc8\x5a\x5b\x42\xb5\x14\x60\xa9\xe6\x8a\xfa\x04\x37\x2c\x15\x8f\xe9\xa8\x7f\xb8\x76\xdd\xa1\xbc\x6f\x2c\x88\x34\xdf\xd5\x5c\xe1\xe4\xa2\x6f\xcc\x82\x0d\xc1\xec\x68\xde\x4d\x1c\xe0\xc1\xf8\xae\x8b\x59\xa1\xd7\x00\x7b\x9c\x2b\xc7\x82\x85\xe0\x0c\xfb\x5e\xf3\xda\xa0\xd8\xa4\xfd\xe7\x89\x9d\x0c\xbb\x27\xa8\x6d\xed\xab\xfe\xe0\x3b\xc0\x6c\xb8\x45\xeb\x5b\xbe\x7f\xd9\xfa\x63\x6c\x20\x20\x87\x07\x07\x47\x17\x35\x22\x50\x9f\xb5\xb7\xc6\xf6\x0b\xbf\xd3\x99\x3d\xaa\xcb\x65\x32\xa2\x49\xf8\xfd\xde\x46\xe1\x91\xdc\xdf\xa8\x01\x1e\xe9\xab\xda\xd6\x32\xcb\xb4\xaf\xda\xa5\xd6\x1d\xf3\xf2\x84\x98\xdd\x4a\xa3\xe8\x07\xfb\x06\xa3\x8c\x8a\xc7\xac\x97\x01\x7c\x40\xf5\x21\xb2\xa7\x4f\x5f\x83\x12\x99\x3f\xaa\x39\xde\x7e\x1a\xdc\x22\x67\x21\xd0\x65\x37\xea\x84\xa5\x7b\xae\x72\xc0\x76\x1c\x93\xf6\x99\x82\xe9\x2d\x42\xe2\xf1\x62\x36\xcf\x04\x36\x91\x59\xff\x13\xb7\x88\x26\x7e\xe6\x26\xd0\xc8\xa8\xcc\x72\x73\x5c\xd2\x79\x47\xa7\xb6\xce\x18\x9f\x2b\xcb\x06\x63\x8f\xe3\x99\xf5\x07\x67\xee\xaf\xc8\xb1\x94\xa2\x64\x1d\x04\x85\x0a\xf0\x92\xd3\x69\x38\x57\xf7\x3c\x93\x5c\x01\xa6\x79\x99\x83\xde\x30\x3c\xe9\x76\x8c\x3e\x70\x04\x1c\x79\xe8\x64\xde\x73\xe6\xd5\xcc\x80\xca\x3d\xff\x3b\xf3\x7f\xff\xf8\xdd\xff\x1f\x00\x00\xff\xff\x0c\x0f\x01\xd5\x9d\xd9\x04\x00") func adminSwaggerJsonBytes() ([]byte, error) { return bindataRead( @@ -93,7 +93,7 @@ func adminSwaggerJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "admin.swagger.json", size: 317765, mode: os.FileMode(420), modTime: time.Unix(1562572800, 0)} + info := bindataFileInfo{name: "admin.swagger.json", size: 317853, mode: os.FileMode(420), modTime: time.Unix(1562572800, 0)} a := &asset{bytes: bytes, info: info} return a, nil } diff --git a/flyteidl/gen/pb-java/flyteidl/core/Catalog.java b/flyteidl/gen/pb-java/flyteidl/core/Catalog.java index 61f9bc344a..74f1ba67ff 100644 --- a/flyteidl/gen/pb-java/flyteidl/core/Catalog.java +++ b/flyteidl/gen/pb-java/flyteidl/core/Catalog.java @@ -79,6 +79,14 @@ public enum CatalogCacheStatus * CACHE_SKIPPED = 6; */ CACHE_SKIPPED(6), + /** + *
+     * Used to indicate that the cache was evicted
+     * 
+ * + * CACHE_EVICTED = 7; + */ + CACHE_EVICTED(7), UNRECOGNIZED(-1), ; @@ -138,6 +146,14 @@ public enum CatalogCacheStatus * CACHE_SKIPPED = 6; */ public static final int CACHE_SKIPPED_VALUE = 6; + /** + *
+     * Used to indicate that the cache was evicted
+     * 
+ * + * CACHE_EVICTED = 7; + */ + public static final int CACHE_EVICTED_VALUE = 7; public final int getNumber() { @@ -165,6 +181,7 @@ public static CatalogCacheStatus forNumber(int value) { case 4: return CACHE_LOOKUP_FAILURE; case 5: return CACHE_PUT_FAILURE; case 6: return CACHE_SKIPPED; + case 7: return CACHE_EVICTED; default: return null; } } @@ -2864,13 +2881,14 @@ public flyteidl.core.Catalog.CatalogReservation getDefaultInstanceForType() { "ogReservation\"\207\001\n\006Status\022\030\n\024RESERVATION_" + "DISABLED\020\000\022\030\n\024RESERVATION_ACQUIRED\020\001\022\026\n\022" + "RESERVATION_EXISTS\020\002\022\030\n\024RESERVATION_RELE" + - "ASED\020\003\022\027\n\023RESERVATION_FAILURE\020\004*\240\001\n\022Cata" + + "ASED\020\003\022\027\n\023RESERVATION_FAILURE\020\004*\263\001\n\022Cata" + "logCacheStatus\022\022\n\016CACHE_DISABLED\020\000\022\016\n\nCA" + "CHE_MISS\020\001\022\r\n\tCACHE_HIT\020\002\022\023\n\017CACHE_POPUL" + "ATED\020\003\022\030\n\024CACHE_LOOKUP_FAILURE\020\004\022\025\n\021CACH" + - "E_PUT_FAILURE\020\005\022\021\n\rCACHE_SKIPPED\020\006B "CACHE_LOOKUP_FAILURE", CatalogCacheStatus::CachePutFailure => "CACHE_PUT_FAILURE", CatalogCacheStatus::CacheSkipped => "CACHE_SKIPPED", + CatalogCacheStatus::CacheEvicted => "CACHE_EVICTED", } } /// Creates an enum from field names used in the ProtoBuf definition. @@ -2790,6 +2793,7 @@ impl CatalogCacheStatus { "CACHE_LOOKUP_FAILURE" => Some(Self::CacheLookupFailure), "CACHE_PUT_FAILURE" => Some(Self::CachePutFailure), "CACHE_SKIPPED" => Some(Self::CacheSkipped), + "CACHE_EVICTED" => Some(Self::CacheEvicted), _ => None, } } diff --git a/flyteidl/protos/flyteidl/core/catalog.proto b/flyteidl/protos/flyteidl/core/catalog.proto index fc86f0b975..4d98c28d7e 100644 --- a/flyteidl/protos/flyteidl/core/catalog.proto +++ b/flyteidl/protos/flyteidl/core/catalog.proto @@ -22,6 +22,8 @@ enum CatalogCacheStatus { CACHE_PUT_FAILURE = 5; // Used to indicate the cache lookup was skipped CACHE_SKIPPED = 6; + // Used to indicate that the cache was evicted + CACHE_EVICTED = 7; }; message CatalogArtifactTag { From ec73c1a804c5a8b79d7722808f5828129c0ae81a Mon Sep 17 00:00:00 2001 From: David Espejo <82604841+davidmirror-ops@users.noreply.github.com> Date: Wed, 10 Jan 2024 16:49:51 -0500 Subject: [PATCH 04/30] Update community meeting cadence (#4699) Signed-off-by: David Espejo <82604841+davidmirror-ops@users.noreply.github.com> --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4f5a86fafb..24c2b3aff6 100644 --- a/README.md +++ b/README.md @@ -138,7 +138,7 @@ Join the likes of LinkedIn, Spotify, Freenome, Pachama, Warner Bros. and many ot ## How to stay involved 📆 [Weekly office hours](https://calendly.com/flyte-office-hours-01/30min): Live informal sessions with the Flyte team held every week. Book a 30-minute slot and get your questions answered.
-👥 [Biweekly community sync](https://www.addevent.com/event/EA7823958): A biweekly event where the Flyte team provides updates on the project and community members can share their progress and ask questions.
+👥 [Monthly community sync](https://www.addevent.com/event/EA7823958): Happening the first Tuesday of every month, this is where the Flyte team provides updates on the project, and community members can share their progress and ask questions.
💬 [Slack](https://slack.flyte.org/): Join the Flyte community on Slack to chat with other users, ask questions, and get help.
⚠️ [Newsletter](https://lists.lfaidata.foundation/g/flyte-announce/join): join this group to receive the Flyte Monthly newsletter.
📹 [Youtube](https://www.youtube.com/channel/UCNduEoLOToNo3nFVly-vUTQ): Tune into panel discussions, customer success stories, community updates and feature deep dives.
From 75c2b08ca12c20083ee2c1caa03f2259229b46d8 Mon Sep 17 00:00:00 2001 From: Kevin Su Date: Wed, 10 Jan 2024 16:18:57 -0800 Subject: [PATCH 05/30] Remove dockerfiles from subfolder (#4715) Signed-off-by: Kevin Su --- datacatalog/Dockerfile | 53 -------------------------------- flyteadmin/Dockerfile | 54 --------------------------------- flyteadmin/scheduler.Dockerfile | 44 --------------------------- flytecopilot/Dockerfile | 39 ------------------------ flytepropeller/Dockerfile | 42 ------------------------- 5 files changed, 232 deletions(-) delete mode 100644 datacatalog/Dockerfile delete mode 100644 flyteadmin/Dockerfile delete mode 100644 flyteadmin/scheduler.Dockerfile delete mode 100644 flytecopilot/Dockerfile delete mode 100644 flytepropeller/Dockerfile diff --git a/datacatalog/Dockerfile b/datacatalog/Dockerfile deleted file mode 100644 index 6ba53406ed..0000000000 --- a/datacatalog/Dockerfile +++ /dev/null @@ -1,53 +0,0 @@ -# WARNING: THIS FILE IS MANAGED IN THE 'BOILERPLATE' REPO AND COPIED TO OTHER REPOSITORIES. -# ONLY EDIT THIS FILE FROM WITHIN THE 'FLYTEORG/BOILERPLATE' REPOSITORY: -# -# TO OPT OUT OF UPDATES, SEE https://github.com/flyteorg/boilerplate/blob/master/Readme.rst - -FROM --platform=${BUILDPLATFORM} golang:1.19-alpine3.16 as builder - -ARG TARGETARCH -ENV GOARCH "${TARGETARCH}" -ENV GOOS linux - -RUN apk add git openssh-client make curl - -# Create the artifacts directory -RUN mkdir /artifacts - -# Pull GRPC health probe binary for liveness and readiness checks -RUN GRPC_HEALTH_PROBE_VERSION=v0.4.11 && \ - wget -qO/artifacts/grpc_health_probe https://github.com/grpc-ecosystem/grpc-health-probe/releases/download/${GRPC_HEALTH_PROBE_VERSION}/grpc_health_probe-linux-amd64 && \ - chmod +x /artifacts/grpc_health_probe && \ - echo 'ded15e598d887ccc47bf2321371950bbf930f5e4856b9f75712ce4b2b5120480 /artifacts/grpc_health_probe' > .grpc_checksum && \ - sha256sum -c .grpc_checksum - -# COPY only the go mod files for efficient caching -COPY go.mod go.sum /go/src/github.com/flyteorg/datacatalog/ -WORKDIR /go/src/github.com/flyteorg/datacatalog - -# Pull dependencies -RUN go mod download - -# COPY the rest of the source code -COPY . /go/src/github.com/flyteorg/datacatalog/ - -# This 'linux_compile' target should compile binaries to the /artifacts directory -# The main entrypoint should be compiled to /artifacts/datacatalog -RUN make linux_compile - -# update the PATH to include the /artifacts directory -ENV PATH="/artifacts:${PATH}" - -# This will eventually move to centurylink/ca-certs:latest for minimum possible image size -FROM alpine:3.16 -LABEL org.opencontainers.image.source=https://github.com/flyteorg/datacatalog - -COPY --from=builder /artifacts /bin - -# Ensure the latest CA certs are present to authenticate SSL connections. -RUN apk --update add ca-certificates - -RUN addgroup -S flyte && adduser -S flyte -G flyte -USER flyte - -CMD ["datacatalog"] diff --git a/flyteadmin/Dockerfile b/flyteadmin/Dockerfile deleted file mode 100644 index e7412dfe43..0000000000 --- a/flyteadmin/Dockerfile +++ /dev/null @@ -1,54 +0,0 @@ -# WARNING: THIS FILE IS MANAGED IN THE 'BOILERPLATE' REPO AND COPIED TO OTHER REPOSITORIES. -# ONLY EDIT THIS FILE FROM WITHIN THE 'LYFT/BOILERPLATE' REPOSITORY: -# -# TO OPT OUT OF UPDATES, SEE https://github.com/lyft/boilerplate/blob/master/Readme.rst - -FROM --platform=${BUILDPLATFORM} golang:1.19-alpine3.16 as builder - -ARG TARGETARCH -ENV GOARCH "${TARGETARCH}" -ENV GOOS linux - -RUN apk add git openssh-client make curl - -# Create the artifacts directory -RUN mkdir /artifacts - -# Pull GRPC health probe binary for liveness and readiness checks -RUN GRPC_HEALTH_PROBE_VERSION=v0.4.11 && \ - wget -qO/artifacts/grpc_health_probe https://github.com/grpc-ecosystem/grpc-health-probe/releases/download/${GRPC_HEALTH_PROBE_VERSION}/grpc_health_probe-linux-amd64 && \ - chmod +x /artifacts/grpc_health_probe && \ - echo 'ded15e598d887ccc47bf2321371950bbf930f5e4856b9f75712ce4b2b5120480 /artifacts/grpc_health_probe' > .grpc_checksum && \ - sha256sum -c .grpc_checksum - -# COPY only the go mod files for efficient caching -COPY go.mod go.sum /go/src/github.com/flyteorg/flyteadmin/ -WORKDIR /go/src/github.com/flyteorg/flyteadmin - -# Pull dependencies -RUN go mod download - - -# COPY the rest of the source code -COPY . /go/src/github.com/flyteorg/flyteadmin/ - -# This 'linux_compile' target should compile binaries to the /artifacts directory -# The main entrypoint should be compiled to /artifacts/flyteadmin -RUN make linux_compile - -# update the PATH to include the /artifacts directory -ENV PATH="/artifacts:${PATH}" - -# This will eventually move to centurylink/ca-certs:latest for minimum possible image size -FROM alpine:3.16 -LABEL org.opencontainers.image.source https://github.com/flyteorg/flyteadmin - -COPY --from=builder /artifacts /bin - -# Ensure the latest CA certs are present to authenticate SSL connections. -RUN apk --update add ca-certificates - -RUN addgroup -S flyte && adduser -S flyte -G flyte -USER flyte - -CMD ["flyteadmin"] diff --git a/flyteadmin/scheduler.Dockerfile b/flyteadmin/scheduler.Dockerfile deleted file mode 100644 index 35753d84be..0000000000 --- a/flyteadmin/scheduler.Dockerfile +++ /dev/null @@ -1,44 +0,0 @@ -# WARNING: THIS FILE IS MANAGED IN THE 'BOILERPLATE' REPO AND COPIED TO OTHER REPOSITORIES. -# ONLY EDIT THIS FILE FROM WITHIN THE 'LYFT/BOILERPLATE' REPOSITORY: -# -# TO OPT OUT OF UPDATES, SEE https://github.com/lyft/boilerplate/blob/master/Readme.rst - -FROM --platform=${BUILDPLATFORM} golang:1.18-alpine3.15 as builder - -ARG TARGETARCH -ENV GOARCH "${TARGETARCH}" -ENV GOOS linux - -RUN apk add git openssh-client make curl - -# COPY only the go mod files for efficient caching -COPY go.mod go.sum /go/src/github.com/flyteorg/flyteadmin/ -WORKDIR /go/src/github.com/flyteorg/flyteadmin - -# Pull dependencies -RUN go mod download - -# COPY the rest of the source code -COPY . /go/src/github.com/flyteorg/flyteadmin/ - -# This 'linux_compile_scheduler' target should compile binaries to the /artifacts directory -# The main entrypoint should be compiled to /artifacts/flytescheduler -RUN make linux_compile_scheduler - -# update the PATH to include the /artifacts directory -ENV PATH="/artifacts:${PATH}" - -# This will eventually move to centurylink/ca-certs:latest for minimum possible image size -FROM alpine:3.15 -LABEL org.opencontainers.image.source https://github.com/flyteorg/flyteadmin - -COPY --from=builder /artifacts /bin - -# Ensure the latest CA certs are present to authenticate SSL connections. -RUN apk --update add ca-certificates - -RUN addgroup -S flyte && adduser -S flyte -G flyte -USER flyte - -CMD ["flytescheduler"] - diff --git a/flytecopilot/Dockerfile b/flytecopilot/Dockerfile deleted file mode 100644 index 741b668bfd..0000000000 --- a/flytecopilot/Dockerfile +++ /dev/null @@ -1,39 +0,0 @@ -# WARNING: THIS FILE IS MANAGED IN THE 'BOILERPLATE' REPO AND COPIED TO OTHER REPOSITORIES. -# ONLY EDIT THIS FILE FROM WITHIN THE 'LYFT/BOILERPLATE' REPOSITORY: -# -# TO OPT OUT OF UPDATES, SEE https://github.com/lyft/boilerplate/blob/master/Readme.rst - -FROM --platform=${BUILDPLATFORM} golang:1.19-alpine3.16 as builder - -ARG TARGETARCH -ENV GOARCH "${TARGETARCH}" -ENV GOOS linux - -RUN apk add git openssh-client make curl - -# COPY only the go mod files for efficient caching -COPY go.mod go.sum /go/src/github.com/lyft/flyteplugins/ -WORKDIR /go/src/github.com/lyft/flyteplugins - -# Pull dependencies -RUN go mod download - -# COPY the rest of the source code -COPY . /go/src/github.com/lyft/flyteplugins/ - -# This 'linux_compile' target should compile binaries to the /artifacts directory -# The main entrypoint should be compiled to /artifacts/flyteplugins -RUN make linux_compile - -# update the PATH to include the /artifacts directory -ENV PATH="/artifacts:${PATH}" - -# This will eventually move to centurylink/ca-certs:latest for minimum possible image size -FROM alpine:3.16 -LABEL org.opencontainers.image.source https://github.com/lyft/flyteplugins - -COPY --from=builder /artifacts /bin - -RUN apk --update add ca-certificates - -CMD ["flyte-copilot"] diff --git a/flytepropeller/Dockerfile b/flytepropeller/Dockerfile deleted file mode 100644 index 84ae3b8585..0000000000 --- a/flytepropeller/Dockerfile +++ /dev/null @@ -1,42 +0,0 @@ -# WARNING: THIS FILE IS MANAGED IN THE 'BOILERPLATE' REPO AND COPIED TO OTHER REPOSITORIES. -# ONLY EDIT THIS FILE FROM WITHIN THE 'LYFT/BOILERPLATE' REPOSITORY: -# -# TO OPT OUT OF UPDATES, SEE https://github.com/lyft/boilerplate/blob/master/Readme.rst - -FROM --platform=${BUILDPLATFORM} golang:1.19-alpine3.16 as builder - -ARG TARGETARCH -ENV GOARCH "${TARGETARCH}" -ENV GOOS linux - -RUN apk add git openssh-client make curl - -# COPY only the go mod files for efficient caching -COPY go.mod go.sum /go/src/github.com/flyteorg/flytepropeller/ -WORKDIR /go/src/github.com/flyteorg/flytepropeller - -# Pull dependencies -RUN go mod download - -# COPY the rest of the source code -COPY . /go/src/github.com/flyteorg/flytepropeller/ - -# This 'linux_compile' target should compile binaries to the /artifacts directory -# The main entrypoint should be compiled to /artifacts/flytepropeller -RUN make linux_compile - -# update the PATH to include the /artifacts directory -ENV PATH="/artifacts:${PATH}" - -# This will eventually move to centurylink/ca-certs:latest for minimum possible image size -FROM alpine:3.16 -LABEL org.opencontainers.image.source https://github.com/flyteorg/flytepropeller - -COPY --from=builder /artifacts /bin - -RUN apk --update add ca-certificates - -RUN addgroup -S flyte && adduser -S flyte -G flyte -USER flyte - -CMD ["flytepropeller"] From 32cde08cdcccc3223c6c968ba9c8c7936788c922 Mon Sep 17 00:00:00 2001 From: Yee Hing Tong Date: Wed, 10 Jan 2024 16:34:11 -0800 Subject: [PATCH 06/30] Update to artifact idl - Add List Usage endpoint (#4714) Signed-off-by: Yee Hing Tong --- .../flyteidl/artifact/artifacts.grpc.pb.cc | 42 + .../flyteidl/artifact/artifacts.grpc.pb.h | 169 +- .../pb-cpp/flyteidl/artifact/artifacts.pb.cc | 756 +++++++- .../pb-cpp/flyteidl/artifact/artifacts.pb.h | 327 +++- .../pb-go/flyteidl/artifact/artifacts.pb.go | 331 ++-- .../flyteidl/artifact/artifacts.pb.gw.go | 95 + .../flyteidl/artifact/artifacts.swagger.json | 54 + .../pb-java/flyteidl/artifact/Artifacts.java | 1521 ++++++++++++++++- .../flyteidl/artifact/artifacts_pb2.py | 12 +- .../flyteidl/artifact/artifacts_pb2.pyi | 12 + .../flyteidl/artifact/artifacts_pb2_grpc.py | 33 + flyteidl/gen/pb_rust/flyteidl.artifact.rs | 12 + .../protos/flyteidl/artifact/artifacts.proto | 13 + 13 files changed, 3159 insertions(+), 218 deletions(-) diff --git a/flyteidl/gen/pb-cpp/flyteidl/artifact/artifacts.grpc.pb.cc b/flyteidl/gen/pb-cpp/flyteidl/artifact/artifacts.grpc.pb.cc index 80aff7ed55..5315df5372 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/artifact/artifacts.grpc.pb.cc +++ b/flyteidl/gen/pb-cpp/flyteidl/artifact/artifacts.grpc.pb.cc @@ -30,6 +30,7 @@ static const char* ArtifactRegistry_method_names[] = { "/flyteidl.artifact.ArtifactRegistry/RegisterConsumer", "/flyteidl.artifact.ArtifactRegistry/SetExecutionInputs", "/flyteidl.artifact.ArtifactRegistry/FindByWorkflowExec", + "/flyteidl.artifact.ArtifactRegistry/ListUsage", }; std::unique_ptr< ArtifactRegistry::Stub> ArtifactRegistry::NewStub(const std::shared_ptr< ::grpc::ChannelInterface>& channel, const ::grpc::StubOptions& options) { @@ -49,6 +50,7 @@ ArtifactRegistry::Stub::Stub(const std::shared_ptr< ::grpc::ChannelInterface>& c , rpcmethod_RegisterConsumer_(ArtifactRegistry_method_names[7], ::grpc::internal::RpcMethod::NORMAL_RPC, channel) , rpcmethod_SetExecutionInputs_(ArtifactRegistry_method_names[8], ::grpc::internal::RpcMethod::NORMAL_RPC, channel) , rpcmethod_FindByWorkflowExec_(ArtifactRegistry_method_names[9], ::grpc::internal::RpcMethod::NORMAL_RPC, channel) + , rpcmethod_ListUsage_(ArtifactRegistry_method_names[10], ::grpc::internal::RpcMethod::NORMAL_RPC, channel) {} ::grpc::Status ArtifactRegistry::Stub::CreateArtifact(::grpc::ClientContext* context, const ::flyteidl::artifact::CreateArtifactRequest& request, ::flyteidl::artifact::CreateArtifactResponse* response) { @@ -331,6 +333,34 @@ ::grpc::ClientAsyncResponseReader< ::flyteidl::artifact::SearchArtifactsResponse return ::grpc::internal::ClientAsyncResponseReaderFactory< ::flyteidl::artifact::SearchArtifactsResponse>::Create(channel_.get(), cq, rpcmethod_FindByWorkflowExec_, context, request, false); } +::grpc::Status ArtifactRegistry::Stub::ListUsage(::grpc::ClientContext* context, const ::flyteidl::artifact::ListUsageRequest& request, ::flyteidl::artifact::ListUsageResponse* response) { + return ::grpc::internal::BlockingUnaryCall(channel_.get(), rpcmethod_ListUsage_, context, request, response); +} + +void ArtifactRegistry::Stub::experimental_async::ListUsage(::grpc::ClientContext* context, const ::flyteidl::artifact::ListUsageRequest* request, ::flyteidl::artifact::ListUsageResponse* response, std::function f) { + ::grpc::internal::CallbackUnaryCall(stub_->channel_.get(), stub_->rpcmethod_ListUsage_, context, request, response, std::move(f)); +} + +void ArtifactRegistry::Stub::experimental_async::ListUsage(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::artifact::ListUsageResponse* response, std::function f) { + ::grpc::internal::CallbackUnaryCall(stub_->channel_.get(), stub_->rpcmethod_ListUsage_, context, request, response, std::move(f)); +} + +void ArtifactRegistry::Stub::experimental_async::ListUsage(::grpc::ClientContext* context, const ::flyteidl::artifact::ListUsageRequest* request, ::flyteidl::artifact::ListUsageResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) { + ::grpc::internal::ClientCallbackUnaryFactory::Create(stub_->channel_.get(), stub_->rpcmethod_ListUsage_, context, request, response, reactor); +} + +void ArtifactRegistry::Stub::experimental_async::ListUsage(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::artifact::ListUsageResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) { + ::grpc::internal::ClientCallbackUnaryFactory::Create(stub_->channel_.get(), stub_->rpcmethod_ListUsage_, context, request, response, reactor); +} + +::grpc::ClientAsyncResponseReader< ::flyteidl::artifact::ListUsageResponse>* ArtifactRegistry::Stub::AsyncListUsageRaw(::grpc::ClientContext* context, const ::flyteidl::artifact::ListUsageRequest& request, ::grpc::CompletionQueue* cq) { + return ::grpc::internal::ClientAsyncResponseReaderFactory< ::flyteidl::artifact::ListUsageResponse>::Create(channel_.get(), cq, rpcmethod_ListUsage_, context, request, true); +} + +::grpc::ClientAsyncResponseReader< ::flyteidl::artifact::ListUsageResponse>* ArtifactRegistry::Stub::PrepareAsyncListUsageRaw(::grpc::ClientContext* context, const ::flyteidl::artifact::ListUsageRequest& request, ::grpc::CompletionQueue* cq) { + return ::grpc::internal::ClientAsyncResponseReaderFactory< ::flyteidl::artifact::ListUsageResponse>::Create(channel_.get(), cq, rpcmethod_ListUsage_, context, request, false); +} + ArtifactRegistry::Service::Service() { AddMethod(new ::grpc::internal::RpcServiceMethod( ArtifactRegistry_method_names[0], @@ -382,6 +412,11 @@ ArtifactRegistry::Service::Service() { ::grpc::internal::RpcMethod::NORMAL_RPC, new ::grpc::internal::RpcMethodHandler< ArtifactRegistry::Service, ::flyteidl::artifact::FindByWorkflowExecRequest, ::flyteidl::artifact::SearchArtifactsResponse>( std::mem_fn(&ArtifactRegistry::Service::FindByWorkflowExec), this))); + AddMethod(new ::grpc::internal::RpcServiceMethod( + ArtifactRegistry_method_names[10], + ::grpc::internal::RpcMethod::NORMAL_RPC, + new ::grpc::internal::RpcMethodHandler< ArtifactRegistry::Service, ::flyteidl::artifact::ListUsageRequest, ::flyteidl::artifact::ListUsageResponse>( + std::mem_fn(&ArtifactRegistry::Service::ListUsage), this))); } ArtifactRegistry::Service::~Service() { @@ -457,6 +492,13 @@ ::grpc::Status ArtifactRegistry::Service::FindByWorkflowExec(::grpc::ServerConte return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); } +::grpc::Status ArtifactRegistry::Service::ListUsage(::grpc::ServerContext* context, const ::flyteidl::artifact::ListUsageRequest* request, ::flyteidl::artifact::ListUsageResponse* response) { + (void) context; + (void) request; + (void) response; + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); +} + } // namespace flyteidl } // namespace artifact diff --git a/flyteidl/gen/pb-cpp/flyteidl/artifact/artifacts.grpc.pb.h b/flyteidl/gen/pb-cpp/flyteidl/artifact/artifacts.grpc.pb.h index 8de7e34e02..d113f04e20 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/artifact/artifacts.grpc.pb.h +++ b/flyteidl/gen/pb-cpp/flyteidl/artifact/artifacts.grpc.pb.h @@ -118,6 +118,13 @@ class ArtifactRegistry final { std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::artifact::SearchArtifactsResponse>> PrepareAsyncFindByWorkflowExec(::grpc::ClientContext* context, const ::flyteidl::artifact::FindByWorkflowExecRequest& request, ::grpc::CompletionQueue* cq) { return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::artifact::SearchArtifactsResponse>>(PrepareAsyncFindByWorkflowExecRaw(context, request, cq)); } + virtual ::grpc::Status ListUsage(::grpc::ClientContext* context, const ::flyteidl::artifact::ListUsageRequest& request, ::flyteidl::artifact::ListUsageResponse* response) = 0; + std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::artifact::ListUsageResponse>> AsyncListUsage(::grpc::ClientContext* context, const ::flyteidl::artifact::ListUsageRequest& request, ::grpc::CompletionQueue* cq) { + return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::artifact::ListUsageResponse>>(AsyncListUsageRaw(context, request, cq)); + } + std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::artifact::ListUsageResponse>> PrepareAsyncListUsage(::grpc::ClientContext* context, const ::flyteidl::artifact::ListUsageRequest& request, ::grpc::CompletionQueue* cq) { + return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::artifact::ListUsageResponse>>(PrepareAsyncListUsageRaw(context, request, cq)); + } class experimental_async_interface { public: virtual ~experimental_async_interface() {} @@ -161,6 +168,10 @@ class ArtifactRegistry final { virtual void FindByWorkflowExec(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::artifact::SearchArtifactsResponse* response, std::function) = 0; virtual void FindByWorkflowExec(::grpc::ClientContext* context, const ::flyteidl::artifact::FindByWorkflowExecRequest* request, ::flyteidl::artifact::SearchArtifactsResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0; virtual void FindByWorkflowExec(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::artifact::SearchArtifactsResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0; + virtual void ListUsage(::grpc::ClientContext* context, const ::flyteidl::artifact::ListUsageRequest* request, ::flyteidl::artifact::ListUsageResponse* response, std::function) = 0; + virtual void ListUsage(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::artifact::ListUsageResponse* response, std::function) = 0; + virtual void ListUsage(::grpc::ClientContext* context, const ::flyteidl::artifact::ListUsageRequest* request, ::flyteidl::artifact::ListUsageResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0; + virtual void ListUsage(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::artifact::ListUsageResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0; }; virtual class experimental_async_interface* experimental_async() { return nullptr; } private: @@ -184,6 +195,8 @@ class ArtifactRegistry final { virtual ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::artifact::ExecutionInputsResponse>* PrepareAsyncSetExecutionInputsRaw(::grpc::ClientContext* context, const ::flyteidl::artifact::ExecutionInputsRequest& request, ::grpc::CompletionQueue* cq) = 0; virtual ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::artifact::SearchArtifactsResponse>* AsyncFindByWorkflowExecRaw(::grpc::ClientContext* context, const ::flyteidl::artifact::FindByWorkflowExecRequest& request, ::grpc::CompletionQueue* cq) = 0; virtual ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::artifact::SearchArtifactsResponse>* PrepareAsyncFindByWorkflowExecRaw(::grpc::ClientContext* context, const ::flyteidl::artifact::FindByWorkflowExecRequest& request, ::grpc::CompletionQueue* cq) = 0; + virtual ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::artifact::ListUsageResponse>* AsyncListUsageRaw(::grpc::ClientContext* context, const ::flyteidl::artifact::ListUsageRequest& request, ::grpc::CompletionQueue* cq) = 0; + virtual ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::artifact::ListUsageResponse>* PrepareAsyncListUsageRaw(::grpc::ClientContext* context, const ::flyteidl::artifact::ListUsageRequest& request, ::grpc::CompletionQueue* cq) = 0; }; class Stub final : public StubInterface { public: @@ -258,6 +271,13 @@ class ArtifactRegistry final { std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flyteidl::artifact::SearchArtifactsResponse>> PrepareAsyncFindByWorkflowExec(::grpc::ClientContext* context, const ::flyteidl::artifact::FindByWorkflowExecRequest& request, ::grpc::CompletionQueue* cq) { return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flyteidl::artifact::SearchArtifactsResponse>>(PrepareAsyncFindByWorkflowExecRaw(context, request, cq)); } + ::grpc::Status ListUsage(::grpc::ClientContext* context, const ::flyteidl::artifact::ListUsageRequest& request, ::flyteidl::artifact::ListUsageResponse* response) override; + std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flyteidl::artifact::ListUsageResponse>> AsyncListUsage(::grpc::ClientContext* context, const ::flyteidl::artifact::ListUsageRequest& request, ::grpc::CompletionQueue* cq) { + return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flyteidl::artifact::ListUsageResponse>>(AsyncListUsageRaw(context, request, cq)); + } + std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flyteidl::artifact::ListUsageResponse>> PrepareAsyncListUsage(::grpc::ClientContext* context, const ::flyteidl::artifact::ListUsageRequest& request, ::grpc::CompletionQueue* cq) { + return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::flyteidl::artifact::ListUsageResponse>>(PrepareAsyncListUsageRaw(context, request, cq)); + } class experimental_async final : public StubInterface::experimental_async_interface { public: @@ -301,6 +321,10 @@ class ArtifactRegistry final { void FindByWorkflowExec(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::artifact::SearchArtifactsResponse* response, std::function) override; void FindByWorkflowExec(::grpc::ClientContext* context, const ::flyteidl::artifact::FindByWorkflowExecRequest* request, ::flyteidl::artifact::SearchArtifactsResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) override; void FindByWorkflowExec(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::artifact::SearchArtifactsResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) override; + void ListUsage(::grpc::ClientContext* context, const ::flyteidl::artifact::ListUsageRequest* request, ::flyteidl::artifact::ListUsageResponse* response, std::function) override; + void ListUsage(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::artifact::ListUsageResponse* response, std::function) override; + void ListUsage(::grpc::ClientContext* context, const ::flyteidl::artifact::ListUsageRequest* request, ::flyteidl::artifact::ListUsageResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) override; + void ListUsage(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::artifact::ListUsageResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) override; private: friend class Stub; explicit experimental_async(Stub* stub): stub_(stub) { } @@ -332,6 +356,8 @@ class ArtifactRegistry final { ::grpc::ClientAsyncResponseReader< ::flyteidl::artifact::ExecutionInputsResponse>* PrepareAsyncSetExecutionInputsRaw(::grpc::ClientContext* context, const ::flyteidl::artifact::ExecutionInputsRequest& request, ::grpc::CompletionQueue* cq) override; ::grpc::ClientAsyncResponseReader< ::flyteidl::artifact::SearchArtifactsResponse>* AsyncFindByWorkflowExecRaw(::grpc::ClientContext* context, const ::flyteidl::artifact::FindByWorkflowExecRequest& request, ::grpc::CompletionQueue* cq) override; ::grpc::ClientAsyncResponseReader< ::flyteidl::artifact::SearchArtifactsResponse>* PrepareAsyncFindByWorkflowExecRaw(::grpc::ClientContext* context, const ::flyteidl::artifact::FindByWorkflowExecRequest& request, ::grpc::CompletionQueue* cq) override; + ::grpc::ClientAsyncResponseReader< ::flyteidl::artifact::ListUsageResponse>* AsyncListUsageRaw(::grpc::ClientContext* context, const ::flyteidl::artifact::ListUsageRequest& request, ::grpc::CompletionQueue* cq) override; + ::grpc::ClientAsyncResponseReader< ::flyteidl::artifact::ListUsageResponse>* PrepareAsyncListUsageRaw(::grpc::ClientContext* context, const ::flyteidl::artifact::ListUsageRequest& request, ::grpc::CompletionQueue* cq) override; const ::grpc::internal::RpcMethod rpcmethod_CreateArtifact_; const ::grpc::internal::RpcMethod rpcmethod_GetArtifact_; const ::grpc::internal::RpcMethod rpcmethod_SearchArtifacts_; @@ -342,6 +368,7 @@ class ArtifactRegistry final { const ::grpc::internal::RpcMethod rpcmethod_RegisterConsumer_; const ::grpc::internal::RpcMethod rpcmethod_SetExecutionInputs_; const ::grpc::internal::RpcMethod rpcmethod_FindByWorkflowExec_; + const ::grpc::internal::RpcMethod rpcmethod_ListUsage_; }; static std::unique_ptr NewStub(const std::shared_ptr< ::grpc::ChannelInterface>& channel, const ::grpc::StubOptions& options = ::grpc::StubOptions()); @@ -359,6 +386,7 @@ class ArtifactRegistry final { virtual ::grpc::Status RegisterConsumer(::grpc::ServerContext* context, const ::flyteidl::artifact::RegisterConsumerRequest* request, ::flyteidl::artifact::RegisterResponse* response); virtual ::grpc::Status SetExecutionInputs(::grpc::ServerContext* context, const ::flyteidl::artifact::ExecutionInputsRequest* request, ::flyteidl::artifact::ExecutionInputsResponse* response); virtual ::grpc::Status FindByWorkflowExec(::grpc::ServerContext* context, const ::flyteidl::artifact::FindByWorkflowExecRequest* request, ::flyteidl::artifact::SearchArtifactsResponse* response); + virtual ::grpc::Status ListUsage(::grpc::ServerContext* context, const ::flyteidl::artifact::ListUsageRequest* request, ::flyteidl::artifact::ListUsageResponse* response); }; template class WithAsyncMethod_CreateArtifact : public BaseClass { @@ -560,7 +588,27 @@ class ArtifactRegistry final { ::grpc::Service::RequestAsyncUnary(9, context, request, response, new_call_cq, notification_cq, tag); } }; - typedef WithAsyncMethod_CreateArtifact > > > > > > > > > AsyncService; + template + class WithAsyncMethod_ListUsage : public BaseClass { + private: + void BaseClassMustBeDerivedFromService(const Service *service) {} + public: + WithAsyncMethod_ListUsage() { + ::grpc::Service::MarkMethodAsync(10); + } + ~WithAsyncMethod_ListUsage() override { + BaseClassMustBeDerivedFromService(this); + } + // disable synchronous version of this method + ::grpc::Status ListUsage(::grpc::ServerContext* context, const ::flyteidl::artifact::ListUsageRequest* request, ::flyteidl::artifact::ListUsageResponse* response) override { + abort(); + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); + } + void RequestListUsage(::grpc::ServerContext* context, ::flyteidl::artifact::ListUsageRequest* request, ::grpc::ServerAsyncResponseWriter< ::flyteidl::artifact::ListUsageResponse>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) { + ::grpc::Service::RequestAsyncUnary(10, context, request, response, new_call_cq, notification_cq, tag); + } + }; + typedef WithAsyncMethod_CreateArtifact > > > > > > > > > > AsyncService; template class ExperimentalWithCallbackMethod_CreateArtifact : public BaseClass { private: @@ -871,7 +919,38 @@ class ArtifactRegistry final { } virtual void FindByWorkflowExec(::grpc::ServerContext* context, const ::flyteidl::artifact::FindByWorkflowExecRequest* request, ::flyteidl::artifact::SearchArtifactsResponse* response, ::grpc::experimental::ServerCallbackRpcController* controller) { controller->Finish(::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "")); } }; - typedef ExperimentalWithCallbackMethod_CreateArtifact > > > > > > > > > ExperimentalCallbackService; + template + class ExperimentalWithCallbackMethod_ListUsage : public BaseClass { + private: + void BaseClassMustBeDerivedFromService(const Service *service) {} + public: + ExperimentalWithCallbackMethod_ListUsage() { + ::grpc::Service::experimental().MarkMethodCallback(10, + new ::grpc::internal::CallbackUnaryHandler< ::flyteidl::artifact::ListUsageRequest, ::flyteidl::artifact::ListUsageResponse>( + [this](::grpc::ServerContext* context, + const ::flyteidl::artifact::ListUsageRequest* request, + ::flyteidl::artifact::ListUsageResponse* response, + ::grpc::experimental::ServerCallbackRpcController* controller) { + return this->ListUsage(context, request, response, controller); + })); + } + void SetMessageAllocatorFor_ListUsage( + ::grpc::experimental::MessageAllocator< ::flyteidl::artifact::ListUsageRequest, ::flyteidl::artifact::ListUsageResponse>* allocator) { + static_cast<::grpc::internal::CallbackUnaryHandler< ::flyteidl::artifact::ListUsageRequest, ::flyteidl::artifact::ListUsageResponse>*>( + ::grpc::Service::experimental().GetHandler(10)) + ->SetMessageAllocator(allocator); + } + ~ExperimentalWithCallbackMethod_ListUsage() override { + BaseClassMustBeDerivedFromService(this); + } + // disable synchronous version of this method + ::grpc::Status ListUsage(::grpc::ServerContext* context, const ::flyteidl::artifact::ListUsageRequest* request, ::flyteidl::artifact::ListUsageResponse* response) override { + abort(); + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); + } + virtual void ListUsage(::grpc::ServerContext* context, const ::flyteidl::artifact::ListUsageRequest* request, ::flyteidl::artifact::ListUsageResponse* response, ::grpc::experimental::ServerCallbackRpcController* controller) { controller->Finish(::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "")); } + }; + typedef ExperimentalWithCallbackMethod_CreateArtifact > > > > > > > > > > ExperimentalCallbackService; template class WithGenericMethod_CreateArtifact : public BaseClass { private: @@ -1043,6 +1122,23 @@ class ArtifactRegistry final { } }; template + class WithGenericMethod_ListUsage : public BaseClass { + private: + void BaseClassMustBeDerivedFromService(const Service *service) {} + public: + WithGenericMethod_ListUsage() { + ::grpc::Service::MarkMethodGeneric(10); + } + ~WithGenericMethod_ListUsage() override { + BaseClassMustBeDerivedFromService(this); + } + // disable synchronous version of this method + ::grpc::Status ListUsage(::grpc::ServerContext* context, const ::flyteidl::artifact::ListUsageRequest* request, ::flyteidl::artifact::ListUsageResponse* response) override { + abort(); + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); + } + }; + template class WithRawMethod_CreateArtifact : public BaseClass { private: void BaseClassMustBeDerivedFromService(const Service *service) {} @@ -1243,6 +1339,26 @@ class ArtifactRegistry final { } }; template + class WithRawMethod_ListUsage : public BaseClass { + private: + void BaseClassMustBeDerivedFromService(const Service *service) {} + public: + WithRawMethod_ListUsage() { + ::grpc::Service::MarkMethodRaw(10); + } + ~WithRawMethod_ListUsage() override { + BaseClassMustBeDerivedFromService(this); + } + // disable synchronous version of this method + ::grpc::Status ListUsage(::grpc::ServerContext* context, const ::flyteidl::artifact::ListUsageRequest* request, ::flyteidl::artifact::ListUsageResponse* response) override { + abort(); + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); + } + void RequestListUsage(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) { + ::grpc::Service::RequestAsyncUnary(10, context, request, response, new_call_cq, notification_cq, tag); + } + }; + template class ExperimentalWithRawCallbackMethod_CreateArtifact : public BaseClass { private: void BaseClassMustBeDerivedFromService(const Service *service) {} @@ -1493,6 +1609,31 @@ class ArtifactRegistry final { virtual void FindByWorkflowExec(::grpc::ServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response, ::grpc::experimental::ServerCallbackRpcController* controller) { controller->Finish(::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "")); } }; template + class ExperimentalWithRawCallbackMethod_ListUsage : public BaseClass { + private: + void BaseClassMustBeDerivedFromService(const Service *service) {} + public: + ExperimentalWithRawCallbackMethod_ListUsage() { + ::grpc::Service::experimental().MarkMethodRawCallback(10, + new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>( + [this](::grpc::ServerContext* context, + const ::grpc::ByteBuffer* request, + ::grpc::ByteBuffer* response, + ::grpc::experimental::ServerCallbackRpcController* controller) { + this->ListUsage(context, request, response, controller); + })); + } + ~ExperimentalWithRawCallbackMethod_ListUsage() override { + BaseClassMustBeDerivedFromService(this); + } + // disable synchronous version of this method + ::grpc::Status ListUsage(::grpc::ServerContext* context, const ::flyteidl::artifact::ListUsageRequest* request, ::flyteidl::artifact::ListUsageResponse* response) override { + abort(); + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); + } + virtual void ListUsage(::grpc::ServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response, ::grpc::experimental::ServerCallbackRpcController* controller) { controller->Finish(::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "")); } + }; + template class WithStreamedUnaryMethod_CreateArtifact : public BaseClass { private: void BaseClassMustBeDerivedFromService(const Service *service) {} @@ -1692,9 +1833,29 @@ class ArtifactRegistry final { // replace default version of method with streamed unary virtual ::grpc::Status StreamedFindByWorkflowExec(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::flyteidl::artifact::FindByWorkflowExecRequest,::flyteidl::artifact::SearchArtifactsResponse>* server_unary_streamer) = 0; }; - typedef WithStreamedUnaryMethod_CreateArtifact > > > > > > > > > StreamedUnaryService; + template + class WithStreamedUnaryMethod_ListUsage : public BaseClass { + private: + void BaseClassMustBeDerivedFromService(const Service *service) {} + public: + WithStreamedUnaryMethod_ListUsage() { + ::grpc::Service::MarkMethodStreamed(10, + new ::grpc::internal::StreamedUnaryHandler< ::flyteidl::artifact::ListUsageRequest, ::flyteidl::artifact::ListUsageResponse>(std::bind(&WithStreamedUnaryMethod_ListUsage::StreamedListUsage, this, std::placeholders::_1, std::placeholders::_2))); + } + ~WithStreamedUnaryMethod_ListUsage() override { + BaseClassMustBeDerivedFromService(this); + } + // disable regular version of this method + ::grpc::Status ListUsage(::grpc::ServerContext* context, const ::flyteidl::artifact::ListUsageRequest* request, ::flyteidl::artifact::ListUsageResponse* response) override { + abort(); + return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); + } + // replace default version of method with streamed unary + virtual ::grpc::Status StreamedListUsage(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::flyteidl::artifact::ListUsageRequest,::flyteidl::artifact::ListUsageResponse>* server_unary_streamer) = 0; + }; + typedef WithStreamedUnaryMethod_CreateArtifact > > > > > > > > > > StreamedUnaryService; typedef Service SplitStreamedService; - typedef WithStreamedUnaryMethod_CreateArtifact > > > > > > > > > StreamedService; + typedef WithStreamedUnaryMethod_CreateArtifact > > > > > > > > > > StreamedService; }; } // namespace artifact diff --git a/flyteidl/gen/pb-cpp/flyteidl/artifact/artifacts.pb.cc b/flyteidl/gen/pb-cpp/flyteidl/artifact/artifacts.pb.cc index 8ad1843781..94d3515bb0 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/artifact/artifacts.pb.cc +++ b/flyteidl/gen/pb-cpp/flyteidl/artifact/artifacts.pb.cc @@ -137,6 +137,14 @@ class ExecutionInputsResponseDefaultTypeInternal { public: ::google::protobuf::internal::ExplicitlyConstructed _instance; } _ExecutionInputsResponse_default_instance_; +class ListUsageRequestDefaultTypeInternal { + public: + ::google::protobuf::internal::ExplicitlyConstructed _instance; +} _ListUsageRequest_default_instance_; +class ListUsageResponseDefaultTypeInternal { + public: + ::google::protobuf::internal::ExplicitlyConstructed _instance; +} _ListUsageResponse_default_instance_; } // namespace artifact } // namespace flyteidl static void InitDefaultsArtifact_flyteidl_2fartifact_2fartifacts_2eproto() { @@ -519,6 +527,36 @@ static void InitDefaultsExecutionInputsResponse_flyteidl_2fartifact_2fartifacts_ ::google::protobuf::internal::SCCInfo<0> scc_info_ExecutionInputsResponse_flyteidl_2fartifact_2fartifacts_2eproto = {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsExecutionInputsResponse_flyteidl_2fartifact_2fartifacts_2eproto}, {}}; +static void InitDefaultsListUsageRequest_flyteidl_2fartifact_2fartifacts_2eproto() { + GOOGLE_PROTOBUF_VERIFY_VERSION; + + { + void* ptr = &::flyteidl::artifact::_ListUsageRequest_default_instance_; + new (ptr) ::flyteidl::artifact::ListUsageRequest(); + ::google::protobuf::internal::OnShutdownDestroyMessage(ptr); + } + ::flyteidl::artifact::ListUsageRequest::InitAsDefaultInstance(); +} + +::google::protobuf::internal::SCCInfo<1> scc_info_ListUsageRequest_flyteidl_2fartifact_2fartifacts_2eproto = + {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsListUsageRequest_flyteidl_2fartifact_2fartifacts_2eproto}, { + &scc_info_ArtifactID_flyteidl_2fcore_2fartifact_5fid_2eproto.base,}}; + +static void InitDefaultsListUsageResponse_flyteidl_2fartifact_2fartifacts_2eproto() { + GOOGLE_PROTOBUF_VERIFY_VERSION; + + { + void* ptr = &::flyteidl::artifact::_ListUsageResponse_default_instance_; + new (ptr) ::flyteidl::artifact::ListUsageResponse(); + ::google::protobuf::internal::OnShutdownDestroyMessage(ptr); + } + ::flyteidl::artifact::ListUsageResponse::InitAsDefaultInstance(); +} + +::google::protobuf::internal::SCCInfo<1> scc_info_ListUsageResponse_flyteidl_2fartifact_2fartifacts_2eproto = + {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsListUsageResponse_flyteidl_2fartifact_2fartifacts_2eproto}, { + &scc_info_WorkflowExecutionIdentifier_flyteidl_2fcore_2fidentifier_2eproto.base,}}; + void InitDefaults_flyteidl_2fartifact_2fartifacts_2eproto() { ::google::protobuf::internal::InitSCC(&scc_info_Artifact_flyteidl_2fartifact_2fartifacts_2eproto.base); ::google::protobuf::internal::InitSCC(&scc_info_CreateArtifactRequest_PartitionsEntry_DoNotUse_flyteidl_2fartifact_2fartifacts_2eproto.base); @@ -545,9 +583,11 @@ void InitDefaults_flyteidl_2fartifact_2fartifacts_2eproto() { ::google::protobuf::internal::InitSCC(&scc_info_RegisterResponse_flyteidl_2fartifact_2fartifacts_2eproto.base); ::google::protobuf::internal::InitSCC(&scc_info_ExecutionInputsRequest_flyteidl_2fartifact_2fartifacts_2eproto.base); ::google::protobuf::internal::InitSCC(&scc_info_ExecutionInputsResponse_flyteidl_2fartifact_2fartifacts_2eproto.base); + ::google::protobuf::internal::InitSCC(&scc_info_ListUsageRequest_flyteidl_2fartifact_2fartifacts_2eproto.base); + ::google::protobuf::internal::InitSCC(&scc_info_ListUsageResponse_flyteidl_2fartifact_2fartifacts_2eproto.base); } -::google::protobuf::Metadata file_level_metadata_flyteidl_2fartifact_2fartifacts_2eproto[25]; +::google::protobuf::Metadata file_level_metadata_flyteidl_2fartifact_2fartifacts_2eproto[27]; const ::google::protobuf::EnumDescriptor* file_level_enum_descriptors_flyteidl_2fartifact_2fartifacts_2eproto[1]; constexpr ::google::protobuf::ServiceDescriptor const** file_level_service_descriptors_flyteidl_2fartifact_2fartifacts_2eproto = nullptr; @@ -731,6 +771,18 @@ const ::google::protobuf::uint32 TableStruct_flyteidl_2fartifact_2fartifacts_2ep ~0u, // no _extensions_ ~0u, // no _oneof_case_ ~0u, // no _weak_field_map_ + ~0u, // no _has_bits_ + PROTOBUF_FIELD_OFFSET(::flyteidl::artifact::ListUsageRequest, _internal_metadata_), + ~0u, // no _extensions_ + ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ + PROTOBUF_FIELD_OFFSET(::flyteidl::artifact::ListUsageRequest, artifact_id_), + ~0u, // no _has_bits_ + PROTOBUF_FIELD_OFFSET(::flyteidl::artifact::ListUsageResponse, _internal_metadata_), + ~0u, // no _extensions_ + ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ + PROTOBUF_FIELD_OFFSET(::flyteidl::artifact::ListUsageResponse, executions_), }; static const ::google::protobuf::internal::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = { { 0, -1, sizeof(::flyteidl::artifact::Artifact)}, @@ -758,6 +810,8 @@ static const ::google::protobuf::internal::MigrationSchema schemas[] PROTOBUF_SE { 162, -1, sizeof(::flyteidl::artifact::RegisterResponse)}, { 167, -1, sizeof(::flyteidl::artifact::ExecutionInputsRequest)}, { 174, -1, sizeof(::flyteidl::artifact::ExecutionInputsResponse)}, + { 179, -1, sizeof(::flyteidl::artifact::ListUsageRequest)}, + { 185, -1, sizeof(::flyteidl::artifact::ListUsageResponse)}, }; static ::google::protobuf::Message const * const file_default_instances[] = { @@ -786,12 +840,14 @@ static ::google::protobuf::Message const * const file_default_instances[] = { reinterpret_cast(&::flyteidl::artifact::_RegisterResponse_default_instance_), reinterpret_cast(&::flyteidl::artifact::_ExecutionInputsRequest_default_instance_), reinterpret_cast(&::flyteidl::artifact::_ExecutionInputsResponse_default_instance_), + reinterpret_cast(&::flyteidl::artifact::_ListUsageRequest_default_instance_), + reinterpret_cast(&::flyteidl::artifact::_ListUsageResponse_default_instance_), }; ::google::protobuf::internal::AssignDescriptorsTable assign_descriptors_table_flyteidl_2fartifact_2fartifacts_2eproto = { {}, AddDescriptors_flyteidl_2fartifact_2fartifacts_2eproto, "flyteidl/artifact/artifacts.proto", schemas, file_default_instances, TableStruct_flyteidl_2fartifact_2fartifacts_2eproto::offsets, - file_level_metadata_flyteidl_2fartifact_2fartifacts_2eproto, 25, file_level_enum_descriptors_flyteidl_2fartifact_2fartifacts_2eproto, file_level_service_descriptors_flyteidl_2fartifact_2fartifacts_2eproto, + file_level_metadata_flyteidl_2fartifact_2fartifacts_2eproto, 27, file_level_enum_descriptors_flyteidl_2fartifact_2fartifacts_2eproto, file_level_service_descriptors_flyteidl_2fartifact_2fartifacts_2eproto, }; const char descriptor_table_protodef_flyteidl_2fartifact_2fartifacts_2eproto[] = @@ -868,62 +924,72 @@ const char descriptor_table_protodef_flyteidl_2fartifact_2fartifacts_2eproto[] = "ionInputsRequest\022@\n\014execution_id\030\001 \001(\0132*" ".flyteidl.core.WorkflowExecutionIdentifi" "er\022)\n\006inputs\030\002 \003(\0132\031.flyteidl.core.Artif" - "actID\"\031\n\027ExecutionInputsResponse2\371\016\n\020Art" - "ifactRegistry\022g\n\016CreateArtifact\022(.flytei" - "dl.artifact.CreateArtifactRequest\032).flyt" - "eidl.artifact.CreateArtifactResponse\"\000\022\361" - "\004\n\013GetArtifact\022%.flyteidl.artifact.GetAr" - "tifactRequest\032&.flyteidl.artifact.GetArt" - "ifactResponse\"\222\004\202\323\344\223\002\213\004\022\033/artifacts/api/" - "v1/artifactsZ\263\001\022\260\001/artifacts/api/v1/arti" - "fact/id/{query.artifact_id.artifact_key." - "project}/{query.artifact_id.artifact_key" - ".domain}/{query.artifact_id.artifact_key" - ".name}/{query.artifact_id.version}Z\227\001\022\224\001" - "/artifacts/api/v1/artifact/id/{query.art" - "ifact_id.artifact_key.project}/{query.ar" - "tifact_id.artifact_key.domain}/{query.ar" - "tifact_id.artifact_key.name}Z\233\001\022\230\001/artif" - "acts/api/v1/artifact/tag/{query.artifact" - "_tag.artifact_key.project}/{query.artifa" - "ct_tag.artifact_key.domain}/{query.artif" - "act_tag.artifact_key.name}\022\226\002\n\017SearchArt" - "ifacts\022).flyteidl.artifact.SearchArtifac" - "tsRequest\032*.flyteidl.artifact.SearchArti" - "factsResponse\"\253\001\202\323\344\223\002\244\001\022Y/artifacts/api/" - "v1/search/{artifact_key.project}/{artifa" - "ct_key.domain}/{artifact_key.name}ZG\022E/a" - "rtifacts/api/v1/search/{artifact_key.pro" - "ject}/{artifact_key.domain}\022d\n\rCreateTri" - "gger\022\'.flyteidl.artifact.CreateTriggerRe" - "quest\032(.flyteidl.artifact.CreateTriggerR" - "esponse\"\000\022\237\001\n\021DeactivateTrigger\022+.flytei" - "dl.artifact.DeactivateTriggerRequest\032,.f" - "lyteidl.artifact.DeactivateTriggerRespon" - "se\"/\202\323\344\223\002)2$/artifacts/api/v1/trigger/de" - "activate:\001*\022O\n\006AddTag\022 .flyteidl.artifac" - "t.AddTagRequest\032!.flyteidl.artifact.AddT" - "agResponse\"\000\022e\n\020RegisterProducer\022*.flyte" - "idl.artifact.RegisterProducerRequest\032#.f" - "lyteidl.artifact.RegisterResponse\"\000\022e\n\020R" - "egisterConsumer\022*.flyteidl.artifact.Regi" - "sterConsumerRequest\032#.flyteidl.artifact." - "RegisterResponse\"\000\022m\n\022SetExecutionInputs" - "\022).flyteidl.artifact.ExecutionInputsRequ" - "est\032*.flyteidl.artifact.ExecutionInputsR" - "esponse\"\000\022\330\001\n\022FindByWorkflowExec\022,.flyte" - "idl.artifact.FindByWorkflowExecRequest\032*" - ".flyteidl.artifact.SearchArtifactsRespon" - "se\"h\202\323\344\223\002b\022`/artifacts/api/v1/search/exe" - "cution/{exec_id.project}/{exec_id.domain" - "}/{exec_id.name}/{direction}B@Z>github.c" - "om/flyteorg/flyte/flyteidl/gen/pb-go/fly" - "teidl/artifactb\006proto3" + "actID\"\031\n\027ExecutionInputsResponse\"B\n\020List" + "UsageRequest\022.\n\013artifact_id\030\001 \001(\0132\031.flyt" + "eidl.core.ArtifactID\"S\n\021ListUsageRespons" + "e\022>\n\nexecutions\030\001 \003(\0132*.flyteidl.core.Wo" + "rkflowExecutionIdentifier2\361\020\n\020ArtifactRe" + "gistry\022g\n\016CreateArtifact\022(.flyteidl.arti" + "fact.CreateArtifactRequest\032).flyteidl.ar" + "tifact.CreateArtifactResponse\"\000\022\361\004\n\013GetA" + "rtifact\022%.flyteidl.artifact.GetArtifactR" + "equest\032&.flyteidl.artifact.GetArtifactRe" + "sponse\"\222\004\202\323\344\223\002\213\004\022\033/artifacts/api/v1/arti" + "factsZ\263\001\022\260\001/artifacts/api/v1/artifact/id" + "/{query.artifact_id.artifact_key.project" + "}/{query.artifact_id.artifact_key.domain" + "}/{query.artifact_id.artifact_key.name}/" + "{query.artifact_id.version}Z\227\001\022\224\001/artifa" + "cts/api/v1/artifact/id/{query.artifact_i" + "d.artifact_key.project}/{query.artifact_" + "id.artifact_key.domain}/{query.artifact_" + "id.artifact_key.name}Z\233\001\022\230\001/artifacts/ap" + "i/v1/artifact/tag/{query.artifact_tag.ar" + "tifact_key.project}/{query.artifact_tag." + "artifact_key.domain}/{query.artifact_tag" + ".artifact_key.name}\022\226\002\n\017SearchArtifacts\022" + ").flyteidl.artifact.SearchArtifactsReque" + "st\032*.flyteidl.artifact.SearchArtifactsRe" + "sponse\"\253\001\202\323\344\223\002\244\001\022Y/artifacts/api/v1/sear" + "ch/{artifact_key.project}/{artifact_key." + "domain}/{artifact_key.name}ZG\022E/artifact" + "s/api/v1/search/{artifact_key.project}/{" + "artifact_key.domain}\022d\n\rCreateTrigger\022\'." + "flyteidl.artifact.CreateTriggerRequest\032(" + ".flyteidl.artifact.CreateTriggerResponse" + "\"\000\022\237\001\n\021DeactivateTrigger\022+.flyteidl.arti" + "fact.DeactivateTriggerRequest\032,.flyteidl" + ".artifact.DeactivateTriggerResponse\"/\202\323\344" + "\223\002)2$/artifacts/api/v1/trigger/deactivat" + "e:\001*\022O\n\006AddTag\022 .flyteidl.artifact.AddTa" + "gRequest\032!.flyteidl.artifact.AddTagRespo" + "nse\"\000\022e\n\020RegisterProducer\022*.flyteidl.art" + "ifact.RegisterProducerRequest\032#.flyteidl" + ".artifact.RegisterResponse\"\000\022e\n\020Register" + "Consumer\022*.flyteidl.artifact.RegisterCon" + "sumerRequest\032#.flyteidl.artifact.Registe" + "rResponse\"\000\022m\n\022SetExecutionInputs\022).flyt" + "eidl.artifact.ExecutionInputsRequest\032*.f" + "lyteidl.artifact.ExecutionInputsResponse" + "\"\000\022\330\001\n\022FindByWorkflowExec\022,.flyteidl.art" + "ifact.FindByWorkflowExecRequest\032*.flytei" + "dl.artifact.SearchArtifactsResponse\"h\202\323\344" + "\223\002b\022`/artifacts/api/v1/search/execution/" + "{exec_id.project}/{exec_id.domain}/{exec" + "_id.name}/{direction}\022\365\001\n\tListUsage\022#.fl" + "yteidl.artifact.ListUsageRequest\032$.flyte" + "idl.artifact.ListUsageResponse\"\234\001\202\323\344\223\002\225\001" + "\022\222\001/artifacts/api/v1/usage/{artifact_id." + "artifact_key.project}/{artifact_id.artif" + "act_key.domain}/{artifact_id.artifact_ke" + "y.name}/{artifact_id.version}B@Z>github." + "com/flyteorg/flyte/flyteidl/gen/pb-go/fl" + "yteidl/artifactb\006proto3" ; ::google::protobuf::internal::DescriptorTable descriptor_table_flyteidl_2fartifact_2fartifacts_2eproto = { false, InitDefaults_flyteidl_2fartifact_2fartifacts_2eproto, descriptor_table_protodef_flyteidl_2fartifact_2fartifacts_2eproto, - "flyteidl/artifact/artifacts.proto", &assign_descriptors_table_flyteidl_2fartifact_2fartifacts_2eproto, 4942, + "flyteidl/artifact/artifacts.proto", &assign_descriptors_table_flyteidl_2fartifact_2fartifacts_2eproto, 5343, }; void AddDescriptors_flyteidl_2fartifact_2fartifacts_2eproto() { @@ -9706,6 +9772,582 @@ ::google::protobuf::Metadata ExecutionInputsResponse::GetMetadata() const { } +// =================================================================== + +void ListUsageRequest::InitAsDefaultInstance() { + ::flyteidl::artifact::_ListUsageRequest_default_instance_._instance.get_mutable()->artifact_id_ = const_cast< ::flyteidl::core::ArtifactID*>( + ::flyteidl::core::ArtifactID::internal_default_instance()); +} +class ListUsageRequest::HasBitSetters { + public: + static const ::flyteidl::core::ArtifactID& artifact_id(const ListUsageRequest* msg); +}; + +const ::flyteidl::core::ArtifactID& +ListUsageRequest::HasBitSetters::artifact_id(const ListUsageRequest* msg) { + return *msg->artifact_id_; +} +void ListUsageRequest::clear_artifact_id() { + if (GetArenaNoVirtual() == nullptr && artifact_id_ != nullptr) { + delete artifact_id_; + } + artifact_id_ = nullptr; +} +#if !defined(_MSC_VER) || _MSC_VER >= 1900 +const int ListUsageRequest::kArtifactIdFieldNumber; +#endif // !defined(_MSC_VER) || _MSC_VER >= 1900 + +ListUsageRequest::ListUsageRequest() + : ::google::protobuf::Message(), _internal_metadata_(nullptr) { + SharedCtor(); + // @@protoc_insertion_point(constructor:flyteidl.artifact.ListUsageRequest) +} +ListUsageRequest::ListUsageRequest(const ListUsageRequest& from) + : ::google::protobuf::Message(), + _internal_metadata_(nullptr) { + _internal_metadata_.MergeFrom(from._internal_metadata_); + if (from.has_artifact_id()) { + artifact_id_ = new ::flyteidl::core::ArtifactID(*from.artifact_id_); + } else { + artifact_id_ = nullptr; + } + // @@protoc_insertion_point(copy_constructor:flyteidl.artifact.ListUsageRequest) +} + +void ListUsageRequest::SharedCtor() { + ::google::protobuf::internal::InitSCC( + &scc_info_ListUsageRequest_flyteidl_2fartifact_2fartifacts_2eproto.base); + artifact_id_ = nullptr; +} + +ListUsageRequest::~ListUsageRequest() { + // @@protoc_insertion_point(destructor:flyteidl.artifact.ListUsageRequest) + SharedDtor(); +} + +void ListUsageRequest::SharedDtor() { + if (this != internal_default_instance()) delete artifact_id_; +} + +void ListUsageRequest::SetCachedSize(int size) const { + _cached_size_.Set(size); +} +const ListUsageRequest& ListUsageRequest::default_instance() { + ::google::protobuf::internal::InitSCC(&::scc_info_ListUsageRequest_flyteidl_2fartifact_2fartifacts_2eproto.base); + return *internal_default_instance(); +} + + +void ListUsageRequest::Clear() { +// @@protoc_insertion_point(message_clear_start:flyteidl.artifact.ListUsageRequest) + ::google::protobuf::uint32 cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + if (GetArenaNoVirtual() == nullptr && artifact_id_ != nullptr) { + delete artifact_id_; + } + artifact_id_ = nullptr; + _internal_metadata_.Clear(); +} + +#if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER +const char* ListUsageRequest::_InternalParse(const char* begin, const char* end, void* object, + ::google::protobuf::internal::ParseContext* ctx) { + auto msg = static_cast(object); + ::google::protobuf::int32 size; (void)size; + int depth; (void)depth; + ::google::protobuf::uint32 tag; + ::google::protobuf::internal::ParseFunc parser_till_end; (void)parser_till_end; + auto ptr = begin; + while (ptr < end) { + ptr = ::google::protobuf::io::Parse32(ptr, &tag); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + switch (tag >> 3) { + // .flyteidl.core.ArtifactID artifact_id = 1; + case 1: { + if (static_cast<::google::protobuf::uint8>(tag) != 10) goto handle_unusual; + ptr = ::google::protobuf::io::ReadSize(ptr, &size); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + parser_till_end = ::flyteidl::core::ArtifactID::_InternalParse; + object = msg->mutable_artifact_id(); + if (size > end - ptr) goto len_delim_till_end; + ptr += size; + GOOGLE_PROTOBUF_PARSER_ASSERT(ctx->ParseExactRange( + {parser_till_end, object}, ptr - size, ptr)); + break; + } + default: { + handle_unusual: + if ((tag & 7) == 4 || tag == 0) { + ctx->EndGroup(tag); + return ptr; + } + auto res = UnknownFieldParse(tag, {_InternalParse, msg}, + ptr, end, msg->_internal_metadata_.mutable_unknown_fields(), ctx); + ptr = res.first; + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr != nullptr); + if (res.second) return ptr; + } + } // switch + } // while + return ptr; +len_delim_till_end: + return ctx->StoreAndTailCall(ptr, end, {_InternalParse, msg}, + {parser_till_end, object}, size); +} +#else // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER +bool ListUsageRequest::MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input) { +#define DO_(EXPRESSION) if (!PROTOBUF_PREDICT_TRUE(EXPRESSION)) goto failure + ::google::protobuf::uint32 tag; + // @@protoc_insertion_point(parse_start:flyteidl.artifact.ListUsageRequest) + for (;;) { + ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u); + tag = p.first; + if (!p.second) goto handle_unusual; + switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) { + // .flyteidl.core.ArtifactID artifact_id = 1; + case 1: { + if (static_cast< ::google::protobuf::uint8>(tag) == (10 & 0xFF)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadMessage( + input, mutable_artifact_id())); + } else { + goto handle_unusual; + } + break; + } + + default: { + handle_unusual: + if (tag == 0) { + goto success; + } + DO_(::google::protobuf::internal::WireFormat::SkipField( + input, tag, _internal_metadata_.mutable_unknown_fields())); + break; + } + } + } +success: + // @@protoc_insertion_point(parse_success:flyteidl.artifact.ListUsageRequest) + return true; +failure: + // @@protoc_insertion_point(parse_failure:flyteidl.artifact.ListUsageRequest) + return false; +#undef DO_ +} +#endif // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER + +void ListUsageRequest::SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const { + // @@protoc_insertion_point(serialize_start:flyteidl.artifact.ListUsageRequest) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + // .flyteidl.core.ArtifactID artifact_id = 1; + if (this->has_artifact_id()) { + ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( + 1, HasBitSetters::artifact_id(this), output); + } + + if (_internal_metadata_.have_unknown_fields()) { + ::google::protobuf::internal::WireFormat::SerializeUnknownFields( + _internal_metadata_.unknown_fields(), output); + } + // @@protoc_insertion_point(serialize_end:flyteidl.artifact.ListUsageRequest) +} + +::google::protobuf::uint8* ListUsageRequest::InternalSerializeWithCachedSizesToArray( + ::google::protobuf::uint8* target) const { + // @@protoc_insertion_point(serialize_to_array_start:flyteidl.artifact.ListUsageRequest) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + // .flyteidl.core.ArtifactID artifact_id = 1; + if (this->has_artifact_id()) { + target = ::google::protobuf::internal::WireFormatLite:: + InternalWriteMessageToArray( + 1, HasBitSetters::artifact_id(this), target); + } + + if (_internal_metadata_.have_unknown_fields()) { + target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( + _internal_metadata_.unknown_fields(), target); + } + // @@protoc_insertion_point(serialize_to_array_end:flyteidl.artifact.ListUsageRequest) + return target; +} + +size_t ListUsageRequest::ByteSizeLong() const { +// @@protoc_insertion_point(message_byte_size_start:flyteidl.artifact.ListUsageRequest) + size_t total_size = 0; + + if (_internal_metadata_.have_unknown_fields()) { + total_size += + ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize( + _internal_metadata_.unknown_fields()); + } + ::google::protobuf::uint32 cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + // .flyteidl.core.ArtifactID artifact_id = 1; + if (this->has_artifact_id()) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::MessageSize( + *artifact_id_); + } + + int cached_size = ::google::protobuf::internal::ToCachedSize(total_size); + SetCachedSize(cached_size); + return total_size; +} + +void ListUsageRequest::MergeFrom(const ::google::protobuf::Message& from) { +// @@protoc_insertion_point(generalized_merge_from_start:flyteidl.artifact.ListUsageRequest) + GOOGLE_DCHECK_NE(&from, this); + const ListUsageRequest* source = + ::google::protobuf::DynamicCastToGenerated( + &from); + if (source == nullptr) { + // @@protoc_insertion_point(generalized_merge_from_cast_fail:flyteidl.artifact.ListUsageRequest) + ::google::protobuf::internal::ReflectionOps::Merge(from, this); + } else { + // @@protoc_insertion_point(generalized_merge_from_cast_success:flyteidl.artifact.ListUsageRequest) + MergeFrom(*source); + } +} + +void ListUsageRequest::MergeFrom(const ListUsageRequest& from) { +// @@protoc_insertion_point(class_specific_merge_from_start:flyteidl.artifact.ListUsageRequest) + GOOGLE_DCHECK_NE(&from, this); + _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + if (from.has_artifact_id()) { + mutable_artifact_id()->::flyteidl::core::ArtifactID::MergeFrom(from.artifact_id()); + } +} + +void ListUsageRequest::CopyFrom(const ::google::protobuf::Message& from) { +// @@protoc_insertion_point(generalized_copy_from_start:flyteidl.artifact.ListUsageRequest) + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +void ListUsageRequest::CopyFrom(const ListUsageRequest& from) { +// @@protoc_insertion_point(class_specific_copy_from_start:flyteidl.artifact.ListUsageRequest) + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +bool ListUsageRequest::IsInitialized() const { + return true; +} + +void ListUsageRequest::Swap(ListUsageRequest* other) { + if (other == this) return; + InternalSwap(other); +} +void ListUsageRequest::InternalSwap(ListUsageRequest* other) { + using std::swap; + _internal_metadata_.Swap(&other->_internal_metadata_); + swap(artifact_id_, other->artifact_id_); +} + +::google::protobuf::Metadata ListUsageRequest::GetMetadata() const { + ::google::protobuf::internal::AssignDescriptors(&::assign_descriptors_table_flyteidl_2fartifact_2fartifacts_2eproto); + return ::file_level_metadata_flyteidl_2fartifact_2fartifacts_2eproto[kIndexInFileMessages]; +} + + +// =================================================================== + +void ListUsageResponse::InitAsDefaultInstance() { +} +class ListUsageResponse::HasBitSetters { + public: +}; + +void ListUsageResponse::clear_executions() { + executions_.Clear(); +} +#if !defined(_MSC_VER) || _MSC_VER >= 1900 +const int ListUsageResponse::kExecutionsFieldNumber; +#endif // !defined(_MSC_VER) || _MSC_VER >= 1900 + +ListUsageResponse::ListUsageResponse() + : ::google::protobuf::Message(), _internal_metadata_(nullptr) { + SharedCtor(); + // @@protoc_insertion_point(constructor:flyteidl.artifact.ListUsageResponse) +} +ListUsageResponse::ListUsageResponse(const ListUsageResponse& from) + : ::google::protobuf::Message(), + _internal_metadata_(nullptr), + executions_(from.executions_) { + _internal_metadata_.MergeFrom(from._internal_metadata_); + // @@protoc_insertion_point(copy_constructor:flyteidl.artifact.ListUsageResponse) +} + +void ListUsageResponse::SharedCtor() { + ::google::protobuf::internal::InitSCC( + &scc_info_ListUsageResponse_flyteidl_2fartifact_2fartifacts_2eproto.base); +} + +ListUsageResponse::~ListUsageResponse() { + // @@protoc_insertion_point(destructor:flyteidl.artifact.ListUsageResponse) + SharedDtor(); +} + +void ListUsageResponse::SharedDtor() { +} + +void ListUsageResponse::SetCachedSize(int size) const { + _cached_size_.Set(size); +} +const ListUsageResponse& ListUsageResponse::default_instance() { + ::google::protobuf::internal::InitSCC(&::scc_info_ListUsageResponse_flyteidl_2fartifact_2fartifacts_2eproto.base); + return *internal_default_instance(); +} + + +void ListUsageResponse::Clear() { +// @@protoc_insertion_point(message_clear_start:flyteidl.artifact.ListUsageResponse) + ::google::protobuf::uint32 cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + executions_.Clear(); + _internal_metadata_.Clear(); +} + +#if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER +const char* ListUsageResponse::_InternalParse(const char* begin, const char* end, void* object, + ::google::protobuf::internal::ParseContext* ctx) { + auto msg = static_cast(object); + ::google::protobuf::int32 size; (void)size; + int depth; (void)depth; + ::google::protobuf::uint32 tag; + ::google::protobuf::internal::ParseFunc parser_till_end; (void)parser_till_end; + auto ptr = begin; + while (ptr < end) { + ptr = ::google::protobuf::io::Parse32(ptr, &tag); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + switch (tag >> 3) { + // repeated .flyteidl.core.WorkflowExecutionIdentifier executions = 1; + case 1: { + if (static_cast<::google::protobuf::uint8>(tag) != 10) goto handle_unusual; + do { + ptr = ::google::protobuf::io::ReadSize(ptr, &size); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + parser_till_end = ::flyteidl::core::WorkflowExecutionIdentifier::_InternalParse; + object = msg->add_executions(); + if (size > end - ptr) goto len_delim_till_end; + ptr += size; + GOOGLE_PROTOBUF_PARSER_ASSERT(ctx->ParseExactRange( + {parser_till_end, object}, ptr - size, ptr)); + if (ptr >= end) break; + } while ((::google::protobuf::io::UnalignedLoad<::google::protobuf::uint64>(ptr) & 255) == 10 && (ptr += 1)); + break; + } + default: { + handle_unusual: + if ((tag & 7) == 4 || tag == 0) { + ctx->EndGroup(tag); + return ptr; + } + auto res = UnknownFieldParse(tag, {_InternalParse, msg}, + ptr, end, msg->_internal_metadata_.mutable_unknown_fields(), ctx); + ptr = res.first; + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr != nullptr); + if (res.second) return ptr; + } + } // switch + } // while + return ptr; +len_delim_till_end: + return ctx->StoreAndTailCall(ptr, end, {_InternalParse, msg}, + {parser_till_end, object}, size); +} +#else // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER +bool ListUsageResponse::MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input) { +#define DO_(EXPRESSION) if (!PROTOBUF_PREDICT_TRUE(EXPRESSION)) goto failure + ::google::protobuf::uint32 tag; + // @@protoc_insertion_point(parse_start:flyteidl.artifact.ListUsageResponse) + for (;;) { + ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u); + tag = p.first; + if (!p.second) goto handle_unusual; + switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) { + // repeated .flyteidl.core.WorkflowExecutionIdentifier executions = 1; + case 1: { + if (static_cast< ::google::protobuf::uint8>(tag) == (10 & 0xFF)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadMessage( + input, add_executions())); + } else { + goto handle_unusual; + } + break; + } + + default: { + handle_unusual: + if (tag == 0) { + goto success; + } + DO_(::google::protobuf::internal::WireFormat::SkipField( + input, tag, _internal_metadata_.mutable_unknown_fields())); + break; + } + } + } +success: + // @@protoc_insertion_point(parse_success:flyteidl.artifact.ListUsageResponse) + return true; +failure: + // @@protoc_insertion_point(parse_failure:flyteidl.artifact.ListUsageResponse) + return false; +#undef DO_ +} +#endif // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER + +void ListUsageResponse::SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const { + // @@protoc_insertion_point(serialize_start:flyteidl.artifact.ListUsageResponse) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + // repeated .flyteidl.core.WorkflowExecutionIdentifier executions = 1; + for (unsigned int i = 0, + n = static_cast(this->executions_size()); i < n; i++) { + ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( + 1, + this->executions(static_cast(i)), + output); + } + + if (_internal_metadata_.have_unknown_fields()) { + ::google::protobuf::internal::WireFormat::SerializeUnknownFields( + _internal_metadata_.unknown_fields(), output); + } + // @@protoc_insertion_point(serialize_end:flyteidl.artifact.ListUsageResponse) +} + +::google::protobuf::uint8* ListUsageResponse::InternalSerializeWithCachedSizesToArray( + ::google::protobuf::uint8* target) const { + // @@protoc_insertion_point(serialize_to_array_start:flyteidl.artifact.ListUsageResponse) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + // repeated .flyteidl.core.WorkflowExecutionIdentifier executions = 1; + for (unsigned int i = 0, + n = static_cast(this->executions_size()); i < n; i++) { + target = ::google::protobuf::internal::WireFormatLite:: + InternalWriteMessageToArray( + 1, this->executions(static_cast(i)), target); + } + + if (_internal_metadata_.have_unknown_fields()) { + target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( + _internal_metadata_.unknown_fields(), target); + } + // @@protoc_insertion_point(serialize_to_array_end:flyteidl.artifact.ListUsageResponse) + return target; +} + +size_t ListUsageResponse::ByteSizeLong() const { +// @@protoc_insertion_point(message_byte_size_start:flyteidl.artifact.ListUsageResponse) + size_t total_size = 0; + + if (_internal_metadata_.have_unknown_fields()) { + total_size += + ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize( + _internal_metadata_.unknown_fields()); + } + ::google::protobuf::uint32 cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + // repeated .flyteidl.core.WorkflowExecutionIdentifier executions = 1; + { + unsigned int count = static_cast(this->executions_size()); + total_size += 1UL * count; + for (unsigned int i = 0; i < count; i++) { + total_size += + ::google::protobuf::internal::WireFormatLite::MessageSize( + this->executions(static_cast(i))); + } + } + + int cached_size = ::google::protobuf::internal::ToCachedSize(total_size); + SetCachedSize(cached_size); + return total_size; +} + +void ListUsageResponse::MergeFrom(const ::google::protobuf::Message& from) { +// @@protoc_insertion_point(generalized_merge_from_start:flyteidl.artifact.ListUsageResponse) + GOOGLE_DCHECK_NE(&from, this); + const ListUsageResponse* source = + ::google::protobuf::DynamicCastToGenerated( + &from); + if (source == nullptr) { + // @@protoc_insertion_point(generalized_merge_from_cast_fail:flyteidl.artifact.ListUsageResponse) + ::google::protobuf::internal::ReflectionOps::Merge(from, this); + } else { + // @@protoc_insertion_point(generalized_merge_from_cast_success:flyteidl.artifact.ListUsageResponse) + MergeFrom(*source); + } +} + +void ListUsageResponse::MergeFrom(const ListUsageResponse& from) { +// @@protoc_insertion_point(class_specific_merge_from_start:flyteidl.artifact.ListUsageResponse) + GOOGLE_DCHECK_NE(&from, this); + _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + executions_.MergeFrom(from.executions_); +} + +void ListUsageResponse::CopyFrom(const ::google::protobuf::Message& from) { +// @@protoc_insertion_point(generalized_copy_from_start:flyteidl.artifact.ListUsageResponse) + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +void ListUsageResponse::CopyFrom(const ListUsageResponse& from) { +// @@protoc_insertion_point(class_specific_copy_from_start:flyteidl.artifact.ListUsageResponse) + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +bool ListUsageResponse::IsInitialized() const { + return true; +} + +void ListUsageResponse::Swap(ListUsageResponse* other) { + if (other == this) return; + InternalSwap(other); +} +void ListUsageResponse::InternalSwap(ListUsageResponse* other) { + using std::swap; + _internal_metadata_.Swap(&other->_internal_metadata_); + CastToBase(&executions_)->InternalSwap(CastToBase(&other->executions_)); +} + +::google::protobuf::Metadata ListUsageResponse::GetMetadata() const { + ::google::protobuf::internal::AssignDescriptors(&::assign_descriptors_table_flyteidl_2fartifact_2fartifacts_2eproto); + return ::file_level_metadata_flyteidl_2fartifact_2fartifacts_2eproto[kIndexInFileMessages]; +} + + // @@protoc_insertion_point(namespace_scope) } // namespace artifact } // namespace flyteidl @@ -9786,6 +10428,12 @@ template<> PROTOBUF_NOINLINE ::flyteidl::artifact::ExecutionInputsRequest* Arena template<> PROTOBUF_NOINLINE ::flyteidl::artifact::ExecutionInputsResponse* Arena::CreateMaybeMessage< ::flyteidl::artifact::ExecutionInputsResponse >(Arena* arena) { return Arena::CreateInternal< ::flyteidl::artifact::ExecutionInputsResponse >(arena); } +template<> PROTOBUF_NOINLINE ::flyteidl::artifact::ListUsageRequest* Arena::CreateMaybeMessage< ::flyteidl::artifact::ListUsageRequest >(Arena* arena) { + return Arena::CreateInternal< ::flyteidl::artifact::ListUsageRequest >(arena); +} +template<> PROTOBUF_NOINLINE ::flyteidl::artifact::ListUsageResponse* Arena::CreateMaybeMessage< ::flyteidl::artifact::ListUsageResponse >(Arena* arena) { + return Arena::CreateInternal< ::flyteidl::artifact::ListUsageResponse >(arena); +} } // namespace protobuf } // namespace google diff --git a/flyteidl/gen/pb-cpp/flyteidl/artifact/artifacts.pb.h b/flyteidl/gen/pb-cpp/flyteidl/artifact/artifacts.pb.h index e64c3003b5..fb09c5adbc 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/artifact/artifacts.pb.h +++ b/flyteidl/gen/pb-cpp/flyteidl/artifact/artifacts.pb.h @@ -54,7 +54,7 @@ struct TableStruct_flyteidl_2fartifact_2fartifacts_2eproto { PROTOBUF_SECTION_VARIABLE(protodesc_cold); static const ::google::protobuf::internal::AuxillaryParseTableField aux[] PROTOBUF_SECTION_VARIABLE(protodesc_cold); - static const ::google::protobuf::internal::ParseTable schema[25] + static const ::google::protobuf::internal::ParseTable schema[27] PROTOBUF_SECTION_VARIABLE(protodesc_cold); static const ::google::protobuf::internal::FieldMetadata field_metadata[]; static const ::google::protobuf::internal::SerializationTable serialization_table[]; @@ -120,6 +120,12 @@ extern GetArtifactRequestDefaultTypeInternal _GetArtifactRequest_default_instanc class GetArtifactResponse; class GetArtifactResponseDefaultTypeInternal; extern GetArtifactResponseDefaultTypeInternal _GetArtifactResponse_default_instance_; +class ListUsageRequest; +class ListUsageRequestDefaultTypeInternal; +extern ListUsageRequestDefaultTypeInternal _ListUsageRequest_default_instance_; +class ListUsageResponse; +class ListUsageResponseDefaultTypeInternal; +extern ListUsageResponseDefaultTypeInternal _ListUsageResponse_default_instance_; class RegisterConsumerRequest; class RegisterConsumerRequestDefaultTypeInternal; extern RegisterConsumerRequestDefaultTypeInternal _RegisterConsumerRequest_default_instance_; @@ -161,6 +167,8 @@ template<> ::flyteidl::artifact::ExecutionInputsResponse* Arena::CreateMaybeMess template<> ::flyteidl::artifact::FindByWorkflowExecRequest* Arena::CreateMaybeMessage<::flyteidl::artifact::FindByWorkflowExecRequest>(Arena*); template<> ::flyteidl::artifact::GetArtifactRequest* Arena::CreateMaybeMessage<::flyteidl::artifact::GetArtifactRequest>(Arena*); template<> ::flyteidl::artifact::GetArtifactResponse* Arena::CreateMaybeMessage<::flyteidl::artifact::GetArtifactResponse>(Arena*); +template<> ::flyteidl::artifact::ListUsageRequest* Arena::CreateMaybeMessage<::flyteidl::artifact::ListUsageRequest>(Arena*); +template<> ::flyteidl::artifact::ListUsageResponse* Arena::CreateMaybeMessage<::flyteidl::artifact::ListUsageResponse>(Arena*); template<> ::flyteidl::artifact::RegisterConsumerRequest* Arena::CreateMaybeMessage<::flyteidl::artifact::RegisterConsumerRequest>(Arena*); template<> ::flyteidl::artifact::RegisterProducerRequest* Arena::CreateMaybeMessage<::flyteidl::artifact::RegisterProducerRequest>(Arena*); template<> ::flyteidl::artifact::RegisterResponse* Arena::CreateMaybeMessage<::flyteidl::artifact::RegisterResponse>(Arena*); @@ -3328,6 +3336,239 @@ class ExecutionInputsResponse final : mutable ::google::protobuf::internal::CachedSize _cached_size_; friend struct ::TableStruct_flyteidl_2fartifact_2fartifacts_2eproto; }; +// ------------------------------------------------------------------- + +class ListUsageRequest final : + public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:flyteidl.artifact.ListUsageRequest) */ { + public: + ListUsageRequest(); + virtual ~ListUsageRequest(); + + ListUsageRequest(const ListUsageRequest& from); + + inline ListUsageRequest& operator=(const ListUsageRequest& from) { + CopyFrom(from); + return *this; + } + #if LANG_CXX11 + ListUsageRequest(ListUsageRequest&& from) noexcept + : ListUsageRequest() { + *this = ::std::move(from); + } + + inline ListUsageRequest& operator=(ListUsageRequest&& from) noexcept { + if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) { + if (this != &from) InternalSwap(&from); + } else { + CopyFrom(from); + } + return *this; + } + #endif + static const ::google::protobuf::Descriptor* descriptor() { + return default_instance().GetDescriptor(); + } + static const ListUsageRequest& default_instance(); + + static void InitAsDefaultInstance(); // FOR INTERNAL USE ONLY + static inline const ListUsageRequest* internal_default_instance() { + return reinterpret_cast( + &_ListUsageRequest_default_instance_); + } + static constexpr int kIndexInFileMessages = + 25; + + void Swap(ListUsageRequest* other); + friend void swap(ListUsageRequest& a, ListUsageRequest& b) { + a.Swap(&b); + } + + // implements Message ---------------------------------------------- + + inline ListUsageRequest* New() const final { + return CreateMaybeMessage(nullptr); + } + + ListUsageRequest* New(::google::protobuf::Arena* arena) const final { + return CreateMaybeMessage(arena); + } + void CopyFrom(const ::google::protobuf::Message& from) final; + void MergeFrom(const ::google::protobuf::Message& from) final; + void CopyFrom(const ListUsageRequest& from); + void MergeFrom(const ListUsageRequest& from); + PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; + bool IsInitialized() const final; + + size_t ByteSizeLong() const final; + #if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER + static const char* _InternalParse(const char* begin, const char* end, void* object, ::google::protobuf::internal::ParseContext* ctx); + ::google::protobuf::internal::ParseFunc _ParseFunc() const final { return _InternalParse; } + #else + bool MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input) final; + #endif // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER + void SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const final; + ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( + ::google::protobuf::uint8* target) const final; + int GetCachedSize() const final { return _cached_size_.Get(); } + + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const final; + void InternalSwap(ListUsageRequest* other); + private: + inline ::google::protobuf::Arena* GetArenaNoVirtual() const { + return nullptr; + } + inline void* MaybeArenaPtr() const { + return nullptr; + } + public: + + ::google::protobuf::Metadata GetMetadata() const final; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + // .flyteidl.core.ArtifactID artifact_id = 1; + bool has_artifact_id() const; + void clear_artifact_id(); + static const int kArtifactIdFieldNumber = 1; + const ::flyteidl::core::ArtifactID& artifact_id() const; + ::flyteidl::core::ArtifactID* release_artifact_id(); + ::flyteidl::core::ArtifactID* mutable_artifact_id(); + void set_allocated_artifact_id(::flyteidl::core::ArtifactID* artifact_id); + + // @@protoc_insertion_point(class_scope:flyteidl.artifact.ListUsageRequest) + private: + class HasBitSetters; + + ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; + ::flyteidl::core::ArtifactID* artifact_id_; + mutable ::google::protobuf::internal::CachedSize _cached_size_; + friend struct ::TableStruct_flyteidl_2fartifact_2fartifacts_2eproto; +}; +// ------------------------------------------------------------------- + +class ListUsageResponse final : + public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:flyteidl.artifact.ListUsageResponse) */ { + public: + ListUsageResponse(); + virtual ~ListUsageResponse(); + + ListUsageResponse(const ListUsageResponse& from); + + inline ListUsageResponse& operator=(const ListUsageResponse& from) { + CopyFrom(from); + return *this; + } + #if LANG_CXX11 + ListUsageResponse(ListUsageResponse&& from) noexcept + : ListUsageResponse() { + *this = ::std::move(from); + } + + inline ListUsageResponse& operator=(ListUsageResponse&& from) noexcept { + if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) { + if (this != &from) InternalSwap(&from); + } else { + CopyFrom(from); + } + return *this; + } + #endif + static const ::google::protobuf::Descriptor* descriptor() { + return default_instance().GetDescriptor(); + } + static const ListUsageResponse& default_instance(); + + static void InitAsDefaultInstance(); // FOR INTERNAL USE ONLY + static inline const ListUsageResponse* internal_default_instance() { + return reinterpret_cast( + &_ListUsageResponse_default_instance_); + } + static constexpr int kIndexInFileMessages = + 26; + + void Swap(ListUsageResponse* other); + friend void swap(ListUsageResponse& a, ListUsageResponse& b) { + a.Swap(&b); + } + + // implements Message ---------------------------------------------- + + inline ListUsageResponse* New() const final { + return CreateMaybeMessage(nullptr); + } + + ListUsageResponse* New(::google::protobuf::Arena* arena) const final { + return CreateMaybeMessage(arena); + } + void CopyFrom(const ::google::protobuf::Message& from) final; + void MergeFrom(const ::google::protobuf::Message& from) final; + void CopyFrom(const ListUsageResponse& from); + void MergeFrom(const ListUsageResponse& from); + PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; + bool IsInitialized() const final; + + size_t ByteSizeLong() const final; + #if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER + static const char* _InternalParse(const char* begin, const char* end, void* object, ::google::protobuf::internal::ParseContext* ctx); + ::google::protobuf::internal::ParseFunc _ParseFunc() const final { return _InternalParse; } + #else + bool MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input) final; + #endif // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER + void SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const final; + ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( + ::google::protobuf::uint8* target) const final; + int GetCachedSize() const final { return _cached_size_.Get(); } + + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const final; + void InternalSwap(ListUsageResponse* other); + private: + inline ::google::protobuf::Arena* GetArenaNoVirtual() const { + return nullptr; + } + inline void* MaybeArenaPtr() const { + return nullptr; + } + public: + + ::google::protobuf::Metadata GetMetadata() const final; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + // repeated .flyteidl.core.WorkflowExecutionIdentifier executions = 1; + int executions_size() const; + void clear_executions(); + static const int kExecutionsFieldNumber = 1; + ::flyteidl::core::WorkflowExecutionIdentifier* mutable_executions(int index); + ::google::protobuf::RepeatedPtrField< ::flyteidl::core::WorkflowExecutionIdentifier >* + mutable_executions(); + const ::flyteidl::core::WorkflowExecutionIdentifier& executions(int index) const; + ::flyteidl::core::WorkflowExecutionIdentifier* add_executions(); + const ::google::protobuf::RepeatedPtrField< ::flyteidl::core::WorkflowExecutionIdentifier >& + executions() const; + + // @@protoc_insertion_point(class_scope:flyteidl.artifact.ListUsageResponse) + private: + class HasBitSetters; + + ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; + ::google::protobuf::RepeatedPtrField< ::flyteidl::core::WorkflowExecutionIdentifier > executions_; + mutable ::google::protobuf::internal::CachedSize _cached_size_; + friend struct ::TableStruct_flyteidl_2fartifact_2fartifacts_2eproto; +}; // =================================================================== @@ -5530,6 +5771,86 @@ ExecutionInputsRequest::inputs() const { // ExecutionInputsResponse +// ------------------------------------------------------------------- + +// ListUsageRequest + +// .flyteidl.core.ArtifactID artifact_id = 1; +inline bool ListUsageRequest::has_artifact_id() const { + return this != internal_default_instance() && artifact_id_ != nullptr; +} +inline const ::flyteidl::core::ArtifactID& ListUsageRequest::artifact_id() const { + const ::flyteidl::core::ArtifactID* p = artifact_id_; + // @@protoc_insertion_point(field_get:flyteidl.artifact.ListUsageRequest.artifact_id) + return p != nullptr ? *p : *reinterpret_cast( + &::flyteidl::core::_ArtifactID_default_instance_); +} +inline ::flyteidl::core::ArtifactID* ListUsageRequest::release_artifact_id() { + // @@protoc_insertion_point(field_release:flyteidl.artifact.ListUsageRequest.artifact_id) + + ::flyteidl::core::ArtifactID* temp = artifact_id_; + artifact_id_ = nullptr; + return temp; +} +inline ::flyteidl::core::ArtifactID* ListUsageRequest::mutable_artifact_id() { + + if (artifact_id_ == nullptr) { + auto* p = CreateMaybeMessage<::flyteidl::core::ArtifactID>(GetArenaNoVirtual()); + artifact_id_ = p; + } + // @@protoc_insertion_point(field_mutable:flyteidl.artifact.ListUsageRequest.artifact_id) + return artifact_id_; +} +inline void ListUsageRequest::set_allocated_artifact_id(::flyteidl::core::ArtifactID* artifact_id) { + ::google::protobuf::Arena* message_arena = GetArenaNoVirtual(); + if (message_arena == nullptr) { + delete reinterpret_cast< ::google::protobuf::MessageLite*>(artifact_id_); + } + if (artifact_id) { + ::google::protobuf::Arena* submessage_arena = nullptr; + if (message_arena != submessage_arena) { + artifact_id = ::google::protobuf::internal::GetOwnedMessage( + message_arena, artifact_id, submessage_arena); + } + + } else { + + } + artifact_id_ = artifact_id; + // @@protoc_insertion_point(field_set_allocated:flyteidl.artifact.ListUsageRequest.artifact_id) +} + +// ------------------------------------------------------------------- + +// ListUsageResponse + +// repeated .flyteidl.core.WorkflowExecutionIdentifier executions = 1; +inline int ListUsageResponse::executions_size() const { + return executions_.size(); +} +inline ::flyteidl::core::WorkflowExecutionIdentifier* ListUsageResponse::mutable_executions(int index) { + // @@protoc_insertion_point(field_mutable:flyteidl.artifact.ListUsageResponse.executions) + return executions_.Mutable(index); +} +inline ::google::protobuf::RepeatedPtrField< ::flyteidl::core::WorkflowExecutionIdentifier >* +ListUsageResponse::mutable_executions() { + // @@protoc_insertion_point(field_mutable_list:flyteidl.artifact.ListUsageResponse.executions) + return &executions_; +} +inline const ::flyteidl::core::WorkflowExecutionIdentifier& ListUsageResponse::executions(int index) const { + // @@protoc_insertion_point(field_get:flyteidl.artifact.ListUsageResponse.executions) + return executions_.Get(index); +} +inline ::flyteidl::core::WorkflowExecutionIdentifier* ListUsageResponse::add_executions() { + // @@protoc_insertion_point(field_add:flyteidl.artifact.ListUsageResponse.executions) + return executions_.Add(); +} +inline const ::google::protobuf::RepeatedPtrField< ::flyteidl::core::WorkflowExecutionIdentifier >& +ListUsageResponse::executions() const { + // @@protoc_insertion_point(field_list:flyteidl.artifact.ListUsageResponse.executions) + return executions_; +} + #ifdef __GNUC__ #pragma GCC diagnostic pop #endif // __GNUC__ @@ -5581,6 +5902,10 @@ ExecutionInputsRequest::inputs() const { // ------------------------------------------------------------------- +// ------------------------------------------------------------------- + +// ------------------------------------------------------------------- + // @@protoc_insertion_point(namespace_scope) diff --git a/flyteidl/gen/pb-go/flyteidl/artifact/artifacts.pb.go b/flyteidl/gen/pb-go/flyteidl/artifact/artifacts.pb.go index e29d85883e..27f84cb68d 100644 --- a/flyteidl/gen/pb-go/flyteidl/artifact/artifacts.pb.go +++ b/flyteidl/gen/pb-go/flyteidl/artifact/artifacts.pb.go @@ -1219,6 +1219,84 @@ func (m *ExecutionInputsResponse) XXX_DiscardUnknown() { var xxx_messageInfo_ExecutionInputsResponse proto.InternalMessageInfo +type ListUsageRequest struct { + ArtifactId *core.ArtifactID `protobuf:"bytes,1,opt,name=artifact_id,json=artifactId,proto3" json:"artifact_id,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ListUsageRequest) Reset() { *m = ListUsageRequest{} } +func (m *ListUsageRequest) String() string { return proto.CompactTextString(m) } +func (*ListUsageRequest) ProtoMessage() {} +func (*ListUsageRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_804518da5936dedb, []int{24} +} + +func (m *ListUsageRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ListUsageRequest.Unmarshal(m, b) +} +func (m *ListUsageRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ListUsageRequest.Marshal(b, m, deterministic) +} +func (m *ListUsageRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_ListUsageRequest.Merge(m, src) +} +func (m *ListUsageRequest) XXX_Size() int { + return xxx_messageInfo_ListUsageRequest.Size(m) +} +func (m *ListUsageRequest) XXX_DiscardUnknown() { + xxx_messageInfo_ListUsageRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_ListUsageRequest proto.InternalMessageInfo + +func (m *ListUsageRequest) GetArtifactId() *core.ArtifactID { + if m != nil { + return m.ArtifactId + } + return nil +} + +type ListUsageResponse struct { + Executions []*core.WorkflowExecutionIdentifier `protobuf:"bytes,1,rep,name=executions,proto3" json:"executions,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ListUsageResponse) Reset() { *m = ListUsageResponse{} } +func (m *ListUsageResponse) String() string { return proto.CompactTextString(m) } +func (*ListUsageResponse) ProtoMessage() {} +func (*ListUsageResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_804518da5936dedb, []int{25} +} + +func (m *ListUsageResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ListUsageResponse.Unmarshal(m, b) +} +func (m *ListUsageResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ListUsageResponse.Marshal(b, m, deterministic) +} +func (m *ListUsageResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_ListUsageResponse.Merge(m, src) +} +func (m *ListUsageResponse) XXX_Size() int { + return xxx_messageInfo_ListUsageResponse.Size(m) +} +func (m *ListUsageResponse) XXX_DiscardUnknown() { + xxx_messageInfo_ListUsageResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_ListUsageResponse proto.InternalMessageInfo + +func (m *ListUsageResponse) GetExecutions() []*core.WorkflowExecutionIdentifier { + if m != nil { + return m.Executions + } + return nil +} + func init() { proto.RegisterEnum("flyteidl.artifact.FindByWorkflowExecRequest_Direction", FindByWorkflowExecRequest_Direction_name, FindByWorkflowExecRequest_Direction_value) proto.RegisterType((*Artifact)(nil), "flyteidl.artifact.Artifact") @@ -1246,116 +1324,123 @@ func init() { proto.RegisterType((*RegisterResponse)(nil), "flyteidl.artifact.RegisterResponse") proto.RegisterType((*ExecutionInputsRequest)(nil), "flyteidl.artifact.ExecutionInputsRequest") proto.RegisterType((*ExecutionInputsResponse)(nil), "flyteidl.artifact.ExecutionInputsResponse") + proto.RegisterType((*ListUsageRequest)(nil), "flyteidl.artifact.ListUsageRequest") + proto.RegisterType((*ListUsageResponse)(nil), "flyteidl.artifact.ListUsageResponse") } func init() { proto.RegisterFile("flyteidl/artifact/artifacts.proto", fileDescriptor_804518da5936dedb) } var fileDescriptor_804518da5936dedb = []byte{ - // 1656 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0xcb, 0x73, 0xdb, 0xc6, - 0x19, 0x37, 0x44, 0x8a, 0x14, 0x3f, 0x4a, 0xb2, 0xb4, 0x76, 0x25, 0x8a, 0x72, 0x6b, 0x19, 0x76, - 0x5b, 0xf9, 0x51, 0x62, 0x4c, 0x77, 0x5c, 0x4b, 0x33, 0xee, 0x54, 0xb6, 0x5c, 0x0f, 0xeb, 0x97, - 0x0c, 0xc9, 0x6d, 0xad, 0xe9, 0x0c, 0xbd, 0x04, 0x56, 0x14, 0x2c, 0x10, 0x80, 0x17, 0x4b, 0xa9, - 0x18, 0x8f, 0xc7, 0x99, 0x5c, 0x7d, 0x4b, 0x32, 0x49, 0x26, 0x39, 0xe4, 0x92, 0x5b, 0x2e, 0x99, - 0xe4, 0xbf, 0xc8, 0x35, 0x97, 0x1c, 0x72, 0xcc, 0x3f, 0x90, 0xa3, 0x27, 0x97, 0x0c, 0x16, 0x58, - 0x00, 0x24, 0x40, 0x8a, 0xb2, 0x7d, 0xc8, 0x0d, 0xfb, 0xed, 0xef, 0x7b, 0xee, 0xf7, 0x22, 0xe1, - 0xcc, 0x8e, 0xe9, 0x31, 0x62, 0xe8, 0xa6, 0x82, 0x29, 0x33, 0x76, 0xb0, 0xc6, 0xa2, 0x0f, 0xb7, - 0xe6, 0x50, 0x9b, 0xd9, 0x68, 0x56, 0x40, 0x6a, 0xe2, 0xa6, 0xba, 0xd0, 0xb6, 0xed, 0xb6, 0x49, - 0x14, 0x0e, 0x68, 0x75, 0x77, 0x14, 0x6c, 0x79, 0x01, 0xba, 0x7a, 0x2a, 0xbc, 0xc2, 0x8e, 0xa1, - 0x60, 0xcb, 0xb2, 0x19, 0x66, 0x86, 0x6d, 0x85, 0xb2, 0xaa, 0x4b, 0xb1, 0x3a, 0xbd, 0x63, 0x58, - 0x8a, 0x89, 0xbb, 0x96, 0xb6, 0xdb, 0x74, 0x4c, 0x6c, 0x09, 0xfe, 0x08, 0xa1, 0xd9, 0x94, 0x28, - 0xa6, 0xc1, 0x08, 0xc5, 0xa6, 0xe0, 0x5f, 0xe8, 0xbd, 0x65, 0x9e, 0x43, 0xc4, 0xd5, 0x1f, 0x7a, - 0xaf, 0x0c, 0x9d, 0x58, 0xcc, 0xd8, 0x31, 0x08, 0x0d, 0xef, 0x4f, 0xf7, 0xde, 0x0b, 0x5f, 0x9a, - 0x86, 0x1e, 0x02, 0x7e, 0xdf, 0x27, 0xc0, 0x62, 0x84, 0xee, 0x60, 0x8d, 0xa4, 0x4c, 0x27, 0xfb, - 0xc4, 0x62, 0x8a, 0x66, 0xda, 0x5d, 0x9d, 0x7f, 0x86, 0x16, 0xc8, 0xdf, 0x49, 0x30, 0xb1, 0x16, - 0x8a, 0x45, 0xab, 0x50, 0x4e, 0xa8, 0xa8, 0x48, 0x4b, 0xd2, 0x72, 0xb9, 0xbe, 0x50, 0x8b, 0x62, - 0xe9, 0xeb, 0xa8, 0x09, 0x74, 0x63, 0x5d, 0x05, 0x81, 0x6e, 0xe8, 0xe8, 0x0a, 0xe4, 0x5d, 0x87, - 0x68, 0x95, 0x31, 0xce, 0x74, 0xba, 0x96, 0x7a, 0x80, 0x88, 0x71, 0xd3, 0x21, 0x9a, 0xca, 0xc1, - 0x08, 0x41, 0x9e, 0xe1, 0xb6, 0x5b, 0xc9, 0x2d, 0xe5, 0x96, 0x4b, 0x2a, 0xff, 0x46, 0x2b, 0x50, - 0x70, 0xed, 0x2e, 0xd5, 0x48, 0x25, 0xcf, 0x45, 0x9d, 0x19, 0x26, 0x8a, 0x03, 0xd5, 0x90, 0x41, - 0x7e, 0x95, 0x83, 0xdf, 0xdd, 0xa4, 0x04, 0x33, 0x22, 0x00, 0x2a, 0x79, 0xd6, 0x25, 0x2e, 0x43, - 0xd7, 0x61, 0x32, 0xf2, 0x6c, 0x8f, 0x78, 0xa1, 0x6b, 0xd5, 0x01, 0xae, 0xdd, 0x21, 0x9e, 0x1a, - 0x45, 0xe2, 0x0e, 0xf1, 0x50, 0x05, 0x8a, 0xfb, 0x84, 0xba, 0x86, 0x6d, 0x55, 0x72, 0x4b, 0xd2, - 0x72, 0x49, 0x15, 0xc7, 0x37, 0x73, 0xfb, 0xbf, 0x00, 0x8e, 0x7f, 0xcf, 0xb3, 0xac, 0x92, 0x5f, - 0xca, 0x2d, 0x97, 0xeb, 0xd7, 0x32, 0x58, 0x33, 0x7d, 0xa9, 0x6d, 0x44, 0xac, 0xb7, 0x2c, 0x46, - 0x3d, 0x35, 0x21, 0x0b, 0xcd, 0x40, 0x8e, 0xe1, 0x76, 0x65, 0x9c, 0x1b, 0xe9, 0x7f, 0x26, 0xc2, - 0x59, 0x38, 0x62, 0x38, 0xab, 0xd7, 0xe1, 0x78, 0x9f, 0x2e, 0x5f, 0xbe, 0x08, 0x5f, 0x49, 0xf5, - 0x3f, 0xd1, 0x49, 0x18, 0xdf, 0xc7, 0x66, 0x97, 0xf0, 0x08, 0x94, 0xd4, 0xe0, 0xb0, 0x3a, 0x76, - 0x4d, 0x92, 0x7f, 0x91, 0x60, 0xba, 0x57, 0x32, 0x7a, 0x0c, 0xe8, 0xc0, 0xa6, 0x7b, 0x3b, 0xa6, - 0x7d, 0xd0, 0x24, 0xff, 0x27, 0x5a, 0xd7, 0x17, 0x1d, 0x3e, 0xc6, 0x85, 0xbe, 0xc7, 0xf8, 0x4f, - 0x08, 0xbc, 0x25, 0x70, 0x8d, 0xa8, 0x3a, 0xd4, 0xd9, 0x83, 0xfe, 0x4b, 0x34, 0x0f, 0x45, 0xcb, - 0xd6, 0x89, 0x9f, 0xb7, 0x81, 0x25, 0x05, 0xff, 0xd8, 0xd0, 0x51, 0x1d, 0x8a, 0x0c, 0xbb, 0x7b, - 0xfe, 0x45, 0x2e, 0x33, 0xa1, 0x13, 0x72, 0x0b, 0x3e, 0xb2, 0xa1, 0xa3, 0xb3, 0x30, 0x45, 0x09, - 0xa3, 0x5e, 0x13, 0x33, 0x46, 0x3a, 0x0e, 0xe3, 0xa9, 0x38, 0xa5, 0x4e, 0x72, 0xe2, 0x5a, 0x40, - 0x43, 0xa7, 0xa0, 0xe4, 0x50, 0xc3, 0xd2, 0x0c, 0x07, 0x9b, 0x61, 0xc4, 0x63, 0x82, 0xfc, 0x5a, - 0x82, 0xc9, 0xe4, 0xd3, 0xa3, 0x4b, 0x22, 0x50, 0x81, 0xbb, 0x73, 0x7d, 0x56, 0xdc, 0x0d, 0x9a, - 0x46, 0x18, 0x40, 0x54, 0x83, 0xbc, 0xdf, 0x28, 0xc2, 0xbc, 0xaa, 0x66, 0x83, 0xb7, 0x3c, 0x87, - 0xa8, 0x1c, 0x87, 0x2e, 0xc2, 0xac, 0xbb, 0x6b, 0x53, 0xd6, 0xd4, 0x89, 0xab, 0x51, 0xc3, 0x61, - 0x71, 0xae, 0xce, 0xf0, 0x8b, 0xf5, 0x98, 0x8e, 0x56, 0x60, 0xaa, 0xeb, 0x12, 0xda, 0xec, 0x10, - 0x86, 0x75, 0xcc, 0x70, 0x58, 0x69, 0x27, 0x6b, 0x41, 0x1f, 0xac, 0x89, 0x16, 0x59, 0x5b, 0xb3, - 0x3c, 0x75, 0xd2, 0x87, 0xde, 0x0b, 0x91, 0x7e, 0x64, 0x04, 0x57, 0x93, 0x1b, 0x18, 0x38, 0x3e, - 0x29, 0x88, 0xbe, 0x49, 0xf2, 0x43, 0x98, 0xeb, 0x4f, 0x5d, 0xd7, 0xb1, 0x2d, 0x97, 0xa0, 0xbf, - 0xc1, 0x84, 0xc8, 0xba, 0x30, 0x0e, 0x8b, 0x43, 0xf2, 0x51, 0x8d, 0xc0, 0x72, 0x0b, 0xd0, 0x6d, - 0xc2, 0xfa, 0xcb, 0xba, 0x0e, 0xe3, 0xcf, 0xba, 0x84, 0x8a, 0x7a, 0x3e, 0x35, 0xa0, 0x9e, 0x1f, - 0xfa, 0x18, 0x35, 0x80, 0xfa, 0xb5, 0xac, 0x13, 0x86, 0x0d, 0xd3, 0xe5, 0xc1, 0x9d, 0x50, 0xc5, - 0x51, 0xbe, 0x0f, 0x27, 0x7a, 0x74, 0xbc, 0xad, 0xcd, 0x4f, 0x60, 0x6a, 0x93, 0x60, 0xaa, 0xed, - 0x3e, 0x70, 0x82, 0xea, 0xf4, 0x1f, 0x89, 0x51, 0x43, 0x63, 0xcd, 0x44, 0xf9, 0x4b, 0xdc, 0x88, - 0x99, 0xe0, 0x22, 0xae, 0x37, 0x24, 0xc3, 0x94, 0x89, 0x19, 0x71, 0x59, 0xb3, 0xe5, 0xf1, 0x9e, - 0x15, 0x58, 0x5b, 0x0e, 0x88, 0x37, 0xbc, 0x3b, 0xc4, 0x93, 0xbf, 0x19, 0x83, 0xb9, 0x40, 0x85, - 0x50, 0xef, 0xbe, 0xa3, 0x8e, 0xb7, 0xd2, 0xd3, 0xa2, 0xc6, 0x32, 0x0b, 0x27, 0x36, 0xb6, 0xa7, - 0x07, 0xf5, 0xd4, 0x45, 0xae, 0xaf, 0x2e, 0x92, 0xad, 0x34, 0xdf, 0xdb, 0x4a, 0x57, 0xa1, 0x68, - 0x07, 0x81, 0xe2, 0x49, 0x55, 0xae, 0x2f, 0x65, 0x84, 0xb9, 0x27, 0xa0, 0xaa, 0x60, 0xf0, 0xbb, - 0x10, 0xb3, 0xf7, 0x88, 0xc5, 0x9b, 0x5c, 0x49, 0x0d, 0x0e, 0x3e, 0xd5, 0x34, 0x3a, 0x06, 0xab, - 0x14, 0x97, 0xa4, 0xe5, 0x71, 0x35, 0x38, 0xc8, 0x4f, 0x61, 0x3e, 0x15, 0xb3, 0xf0, 0xa9, 0x57, - 0xa0, 0x14, 0x6d, 0x12, 0x15, 0x89, 0xf7, 0xe5, 0xa1, 0x6f, 0x1d, 0xa3, 0x63, 0x0b, 0xc6, 0x12, - 0x16, 0xc8, 0x3f, 0x4a, 0xb0, 0xf0, 0x4f, 0xc3, 0xd2, 0x6f, 0x78, 0xc9, 0x76, 0x26, 0xde, 0xe8, - 0x26, 0x14, 0xfd, 0x2e, 0x18, 0xcf, 0xda, 0xa3, 0xf4, 0xc0, 0x82, 0xcf, 0xda, 0xd0, 0xd1, 0x16, - 0x94, 0x74, 0x83, 0x12, 0x8d, 0x57, 0xbc, 0xaf, 0x7c, 0xba, 0x7e, 0x35, 0xc3, 0xe6, 0x81, 0x56, - 0xd4, 0xd6, 0x05, 0xb7, 0x1a, 0x0b, 0x92, 0xcf, 0x41, 0x29, 0xa2, 0x23, 0x80, 0x42, 0xe3, 0xfe, - 0xc6, 0xa3, 0xad, 0xcd, 0x99, 0x63, 0xa8, 0x0c, 0xc5, 0x07, 0x8f, 0xb6, 0xf8, 0x41, 0x92, 0x5f, - 0xc2, 0xd4, 0x9a, 0xae, 0x6f, 0xe1, 0xb6, 0xf0, 0xe8, 0x6d, 0x36, 0x88, 0xcc, 0x49, 0xe2, 0x67, - 0x93, 0xbd, 0x4f, 0xe8, 0x01, 0x35, 0x18, 0xe1, 0xd9, 0x34, 0xa1, 0xc6, 0x04, 0x79, 0x06, 0xa6, - 0x85, 0x01, 0xc1, 0x13, 0xca, 0x2d, 0x38, 0x19, 0xf4, 0x9e, 0x2d, 0x6a, 0xb4, 0xdb, 0x84, 0x0a, - 0xcb, 0xfe, 0x05, 0x27, 0x58, 0x40, 0x69, 0x26, 0x16, 0xb8, 0x74, 0x59, 0xf0, 0x1d, 0xaf, 0x76, - 0x97, 0x43, 0x36, 0x4c, 0x6c, 0xa9, 0xb3, 0x21, 0x5b, 0x4c, 0x92, 0xe7, 0xc5, 0x9a, 0x11, 0xe9, - 0x08, 0x95, 0x6f, 0x41, 0x65, 0x9d, 0x60, 0x8d, 0x19, 0xfb, 0x69, 0x03, 0xae, 0x01, 0x08, 0x03, - 0x06, 0x46, 0x26, 0xf1, 0xbc, 0xa5, 0x10, 0xdc, 0xd0, 0xe5, 0x45, 0x58, 0xc8, 0x90, 0x1a, 0xaa, - 0x7c, 0x4f, 0x82, 0x19, 0x11, 0xd0, 0x0d, 0x6a, 0xeb, 0x5d, 0x8d, 0x50, 0x74, 0x15, 0x4a, 0xbe, - 0x20, 0xe6, 0x8d, 0xa4, 0x6a, 0x22, 0xc0, 0x36, 0x74, 0xf4, 0x57, 0x28, 0xda, 0x5d, 0xe6, 0x74, - 0x99, 0x3b, 0x60, 0xf0, 0xfc, 0x1b, 0x53, 0x03, 0xb7, 0x4c, 0x72, 0x0f, 0x3b, 0xaa, 0x80, 0xca, - 0xff, 0x83, 0x79, 0x95, 0xb4, 0x0d, 0x97, 0x11, 0x2a, 0x2c, 0x10, 0x4e, 0xaf, 0xf9, 0xbd, 0x20, - 0x20, 0x89, 0x82, 0x3a, 0x3b, 0xa4, 0xa0, 0x22, 0xf6, 0x98, 0x4b, 0x7e, 0x19, 0xfb, 0x77, 0xd3, - 0xb6, 0xdc, 0x6e, 0xe7, 0x2d, 0xfc, 0xbb, 0x02, 0x05, 0xc3, 0x4a, 0xb8, 0xb7, 0x98, 0xee, 0x68, - 0xb8, 0x43, 0x18, 0xa1, 0xbe, 0x7f, 0x21, 0x34, 0xe9, 0x9e, 0x30, 0x20, 0xe1, 0x9e, 0x16, 0x92, - 0x46, 0x71, 0x2f, 0x62, 0x8f, 0xb9, 0x64, 0x04, 0x33, 0x42, 0x7a, 0xf4, 0xa6, 0x9f, 0x49, 0x30, - 0x17, 0x97, 0x3c, 0xb7, 0x42, 0x68, 0xbc, 0x07, 0x93, 0xd1, 0xe2, 0xf4, 0x66, 0x7d, 0xa3, 0x4c, - 0x62, 0x22, 0xba, 0x9c, 0x08, 0x48, 0x6e, 0x78, 0xa9, 0x8a, 0x70, 0x2c, 0xc0, 0x7c, 0xca, 0xb6, - 0xc0, 0xee, 0xfa, 0xeb, 0xe9, 0xf8, 0xad, 0x02, 0xa7, 0xa8, 0x87, 0xda, 0x30, 0xdd, 0xbb, 0x0c, - 0xa0, 0xe5, 0x51, 0x57, 0xdd, 0xea, 0xf9, 0x11, 0x90, 0x61, 0xcc, 0x8e, 0xa1, 0x9f, 0xf3, 0x50, - 0x4e, 0xcc, 0x6f, 0xf4, 0xc7, 0x0c, 0xe6, 0xf4, 0x0e, 0x51, 0xfd, 0xd3, 0x61, 0xb0, 0x50, 0xc1, - 0x07, 0xf9, 0xf7, 0xbf, 0xff, 0xe9, 0xc3, 0xb1, 0x57, 0x79, 0xb4, 0x18, 0xff, 0xdc, 0xe4, 0x3f, - 0x19, 0xf7, 0x2f, 0xc7, 0x84, 0xed, 0x6f, 0x25, 0xf4, 0xb5, 0x34, 0x18, 0xa0, 0x18, 0xba, 0xf2, - 0x9c, 0x2f, 0x22, 0xb5, 0xe4, 0xaf, 0xb9, 0xe4, 0xa8, 0xf6, 0xd7, 0xaf, 0xa7, 0x44, 0x63, 0x2f, - 0x0e, 0x05, 0xea, 0x76, 0x07, 0x1b, 0xd6, 0xe1, 0x38, 0x0b, 0x77, 0x48, 0x26, 0x2a, 0x1c, 0xbd, - 0x2f, 0xb6, 0x3f, 0x91, 0xd0, 0x47, 0xbf, 0x49, 0xab, 0xb7, 0x3f, 0x97, 0xd0, 0xa7, 0xc3, 0x2c, - 0x63, 0xb8, 0x9d, 0x92, 0xc4, 0x70, 0x7b, 0x44, 0xdb, 0x52, 0xc8, 0x41, 0xc6, 0xa5, 0x80, 0xdc, - 0x3a, 0xf4, 0xf1, 0x18, 0x1c, 0xef, 0x5b, 0x26, 0xd0, 0xf9, 0x81, 0x6b, 0x4b, 0xff, 0x92, 0x56, - 0xbd, 0x30, 0x0a, 0x34, 0xcc, 0xbf, 0xaf, 0x24, 0x9e, 0x7f, 0x5f, 0x4a, 0xe8, 0x71, 0x3a, 0x1c, - 0x2e, 0x67, 0x52, 0x9e, 0x0f, 0xf0, 0x3a, 0xdb, 0xc5, 0x8c, 0x68, 0xdf, 0x46, 0xb7, 0xde, 0x89, - 0x70, 0xa4, 0xc3, 0x54, 0xcf, 0x88, 0x44, 0x7f, 0x1e, 0x58, 0xca, 0xbd, 0x73, 0xb2, 0xba, 0x7c, - 0x38, 0x30, 0x2a, 0xf9, 0x2f, 0x24, 0x98, 0x4d, 0x8d, 0x46, 0x74, 0x31, 0x43, 0xc2, 0xa0, 0xb1, - 0x5c, 0xbd, 0x34, 0x1a, 0x38, 0x54, 0xa9, 0xf0, 0x37, 0x38, 0x5f, 0x3f, 0x97, 0x8e, 0x52, 0x38, - 0xaf, 0x15, 0x3d, 0x62, 0x5e, 0x95, 0x2e, 0xa0, 0x07, 0x50, 0x08, 0x16, 0x14, 0x94, 0xb5, 0xcd, - 0xf6, 0x2c, 0x4f, 0xd5, 0x33, 0x43, 0x10, 0x91, 0xcb, 0x24, 0x9e, 0x17, 0xd1, 0xb8, 0xcf, 0x4a, - 0xa3, 0x01, 0x13, 0xb9, 0x7a, 0x76, 0x08, 0x36, 0x5b, 0x4d, 0x34, 0x75, 0x87, 0xa9, 0xe9, 0x9b, - 0x8c, 0xa3, 0xaa, 0xe9, 0x00, 0xda, 0x24, 0xac, 0x6f, 0x9e, 0x64, 0x56, 0x50, 0xf6, 0x3c, 0xcc, - 0xac, 0xa0, 0x01, 0xe3, 0x49, 0x3e, 0x86, 0x7e, 0x90, 0x00, 0xa5, 0x17, 0x61, 0x74, 0xe9, 0x28, - 0xfb, 0xf2, 0x91, 0x8a, 0x76, 0x97, 0xe7, 0x4b, 0x0b, 0x3d, 0x19, 0x58, 0x55, 0xd1, 0x34, 0x56, - 0x9e, 0x87, 0xbf, 0x05, 0x12, 0xa5, 0x25, 0x28, 0x51, 0xc9, 0x0a, 0x42, 0xd8, 0xd1, 0xa3, 0x7d, - 0xfd, 0xc5, 0x8d, 0x7f, 0x6c, 0xff, 0xbd, 0x6d, 0xb0, 0xdd, 0x6e, 0xab, 0xa6, 0xd9, 0x1d, 0x85, - 0x5b, 0x68, 0xd3, 0x76, 0xf0, 0xa1, 0x44, 0x7f, 0x03, 0xb6, 0x89, 0xa5, 0x38, 0xad, 0xbf, 0xb4, - 0x6d, 0x25, 0xf5, 0x1f, 0x6a, 0xab, 0xc0, 0x7f, 0xf6, 0x5f, 0xf9, 0x35, 0x00, 0x00, 0xff, 0xff, - 0x39, 0x44, 0x4a, 0xb7, 0x5f, 0x15, 0x00, 0x00, + // 1734 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0xcb, 0x6f, 0xdb, 0xc8, + 0x19, 0x0f, 0x2d, 0x45, 0xb2, 0x3e, 0xd9, 0x5e, 0x79, 0x36, 0xb5, 0x65, 0x39, 0xed, 0x3a, 0x4c, + 0xda, 0x3a, 0xd9, 0x54, 0xc4, 0x2a, 0xc5, 0x36, 0x36, 0xb0, 0x45, 0x9d, 0x38, 0x5d, 0x68, 0xf3, + 0xf2, 0xd2, 0x4e, 0xdb, 0x35, 0x0a, 0x68, 0x47, 0xe4, 0x98, 0xe6, 0x9a, 0x22, 0xb9, 0xc3, 0x91, + 0x5d, 0x22, 0x08, 0xb6, 0xe8, 0x75, 0x6f, 0xdb, 0x27, 0xda, 0x02, 0xbd, 0xf4, 0xd6, 0x4b, 0xd1, + 0xfe, 0x17, 0xbd, 0xf6, 0xd2, 0x43, 0x8f, 0xfd, 0x07, 0xf6, 0xd0, 0x43, 0xd1, 0x4b, 0xc1, 0xe1, + 0x0c, 0x49, 0x89, 0x94, 0x2c, 0x27, 0x39, 0xf4, 0x46, 0x7e, 0xf3, 0xfb, 0x9e, 0xf3, 0xbd, 0x48, + 0xb8, 0x76, 0xe4, 0x84, 0x8c, 0xd8, 0xa6, 0xa3, 0x61, 0xca, 0xec, 0x23, 0x6c, 0xb0, 0xe4, 0x21, + 0x68, 0xfb, 0xd4, 0x63, 0x1e, 0x5a, 0x96, 0x90, 0xb6, 0x3c, 0x69, 0xad, 0x59, 0x9e, 0x67, 0x39, + 0x44, 0xe3, 0x80, 0xfe, 0xf0, 0x48, 0xc3, 0x6e, 0x18, 0xa3, 0x5b, 0x57, 0xc5, 0x11, 0xf6, 0x6d, + 0x0d, 0xbb, 0xae, 0xc7, 0x30, 0xb3, 0x3d, 0x57, 0xc8, 0x6a, 0x6d, 0xa4, 0xea, 0xcc, 0x81, 0xed, + 0x6a, 0x0e, 0x1e, 0xba, 0xc6, 0x71, 0xcf, 0x77, 0xb0, 0x2b, 0xf9, 0x13, 0x84, 0xe1, 0x51, 0xa2, + 0x39, 0x36, 0x23, 0x14, 0x3b, 0x92, 0x7f, 0x6d, 0xf4, 0x94, 0x85, 0x3e, 0x91, 0x47, 0x5f, 0x1b, + 0x3d, 0xb2, 0x4d, 0xe2, 0x32, 0xfb, 0xc8, 0x26, 0x54, 0x9c, 0xbf, 0x35, 0x7a, 0x2e, 0x7d, 0xe9, + 0xd9, 0xa6, 0x00, 0x7c, 0x75, 0x4c, 0x80, 0xcb, 0x08, 0x3d, 0xc2, 0x06, 0xc9, 0x99, 0x4e, 0x4e, + 0x89, 0xcb, 0x34, 0xc3, 0xf1, 0x86, 0x26, 0x7f, 0x14, 0x16, 0xa8, 0x7f, 0x53, 0x60, 0x7e, 0x47, + 0x88, 0x45, 0xdb, 0x50, 0xcf, 0xa8, 0x68, 0x2a, 0x1b, 0xca, 0x66, 0xbd, 0xb3, 0xd6, 0x4e, 0x62, + 0x19, 0xe9, 0x68, 0x4b, 0x74, 0x77, 0x57, 0x07, 0x89, 0xee, 0x9a, 0xe8, 0x0e, 0x94, 0x03, 0x9f, + 0x18, 0xcd, 0x39, 0xce, 0xf4, 0x56, 0x3b, 0x77, 0x01, 0x09, 0xe3, 0xbe, 0x4f, 0x0c, 0x9d, 0x83, + 0x11, 0x82, 0x32, 0xc3, 0x56, 0xd0, 0x2c, 0x6d, 0x94, 0x36, 0x6b, 0x3a, 0x7f, 0x46, 0x5b, 0x50, + 0x09, 0xbc, 0x21, 0x35, 0x48, 0xb3, 0xcc, 0x45, 0x5d, 0x9b, 0x26, 0x8a, 0x03, 0x75, 0xc1, 0xa0, + 0x7e, 0x5e, 0x82, 0xaf, 0xdc, 0xa7, 0x04, 0x33, 0x22, 0x01, 0x3a, 0xf9, 0x74, 0x48, 0x02, 0x86, + 0xde, 0x83, 0x85, 0xc4, 0xb3, 0x13, 0x12, 0x0a, 0xd7, 0x5a, 0x13, 0x5c, 0x7b, 0x48, 0x42, 0x3d, + 0x89, 0xc4, 0x43, 0x12, 0xa2, 0x26, 0x54, 0x4f, 0x09, 0x0d, 0x6c, 0xcf, 0x6d, 0x96, 0x36, 0x94, + 0xcd, 0x9a, 0x2e, 0x5f, 0x5f, 0xce, 0xed, 0x1f, 0x01, 0xf8, 0xd1, 0x39, 0xcf, 0xb2, 0x66, 0x79, + 0xa3, 0xb4, 0x59, 0xef, 0xdc, 0x2d, 0x60, 0x2d, 0xf4, 0xa5, 0xbd, 0x97, 0xb0, 0x3e, 0x70, 0x19, + 0x0d, 0xf5, 0x8c, 0x2c, 0xd4, 0x80, 0x12, 0xc3, 0x56, 0xf3, 0x32, 0x37, 0x32, 0x7a, 0xcc, 0x84, + 0xb3, 0x72, 0xc1, 0x70, 0xb6, 0xde, 0x83, 0x37, 0xc6, 0x74, 0x45, 0xf2, 0x65, 0xf8, 0x6a, 0x7a, + 0xf4, 0x88, 0xae, 0xc0, 0xe5, 0x53, 0xec, 0x0c, 0x09, 0x8f, 0x40, 0x4d, 0x8f, 0x5f, 0xb6, 0xe7, + 0xee, 0x2a, 0xea, 0x7f, 0x15, 0x58, 0x1a, 0x95, 0x8c, 0x3e, 0x02, 0x74, 0xe6, 0xd1, 0x93, 0x23, + 0xc7, 0x3b, 0xeb, 0x91, 0x9f, 0x10, 0x63, 0x18, 0x89, 0x16, 0x97, 0x71, 0x6b, 0xec, 0x32, 0x7e, + 0x28, 0x80, 0x0f, 0x24, 0xae, 0x9b, 0x54, 0x87, 0xbe, 0x7c, 0x36, 0x7e, 0x88, 0x56, 0xa1, 0xea, + 0x7a, 0x26, 0x89, 0xf2, 0x36, 0xb6, 0xa4, 0x12, 0xbd, 0x76, 0x4d, 0xd4, 0x81, 0x2a, 0xc3, 0xc1, + 0x49, 0x74, 0x50, 0x2a, 0x4c, 0xe8, 0x8c, 0xdc, 0x4a, 0x84, 0xec, 0x9a, 0xe8, 0x3a, 0x2c, 0x52, + 0xc2, 0x68, 0xd8, 0xc3, 0x8c, 0x91, 0x81, 0xcf, 0x78, 0x2a, 0x2e, 0xea, 0x0b, 0x9c, 0xb8, 0x13, + 0xd3, 0xd0, 0x55, 0xa8, 0xf9, 0xd4, 0x76, 0x0d, 0xdb, 0xc7, 0x8e, 0x88, 0x78, 0x4a, 0x50, 0xff, + 0xa3, 0xc0, 0x42, 0xf6, 0xea, 0xd1, 0x6d, 0x19, 0xa8, 0xd8, 0xdd, 0x95, 0x31, 0x2b, 0x1e, 0xc5, + 0x4d, 0x43, 0x04, 0x10, 0xb5, 0xa1, 0x1c, 0x35, 0x0a, 0x91, 0x57, 0xad, 0x62, 0xf0, 0x41, 0xe8, + 0x13, 0x9d, 0xe3, 0xd0, 0xdb, 0xb0, 0x1c, 0x1c, 0x7b, 0x94, 0xf5, 0x4c, 0x12, 0x18, 0xd4, 0xf6, + 0x59, 0x9a, 0xab, 0x0d, 0x7e, 0xb0, 0x9b, 0xd2, 0xd1, 0x16, 0x2c, 0x0e, 0x03, 0x42, 0x7b, 0x03, + 0xc2, 0xb0, 0x89, 0x19, 0x16, 0x95, 0x76, 0xa5, 0x1d, 0xf7, 0xc1, 0xb6, 0x6c, 0x91, 0xed, 0x1d, + 0x37, 0xd4, 0x17, 0x22, 0xe8, 0x63, 0x81, 0x8c, 0x22, 0x23, 0xb9, 0x7a, 0xdc, 0xc0, 0xd8, 0xf1, + 0x05, 0x49, 0x8c, 0x4c, 0x52, 0x3f, 0x84, 0x95, 0xf1, 0xd4, 0x0d, 0x7c, 0xcf, 0x0d, 0x08, 0xfa, + 0x0e, 0xcc, 0xcb, 0xac, 0x13, 0x71, 0x58, 0x9f, 0x92, 0x8f, 0x7a, 0x02, 0x56, 0xfb, 0x80, 0xde, + 0x27, 0x6c, 0xbc, 0xac, 0x3b, 0x70, 0xf9, 0xd3, 0x21, 0xa1, 0xb2, 0x9e, 0xaf, 0x4e, 0xa8, 0xe7, + 0x0f, 0x23, 0x8c, 0x1e, 0x43, 0xa3, 0x5a, 0x36, 0x09, 0xc3, 0xb6, 0x13, 0xf0, 0xe0, 0xce, 0xeb, + 0xf2, 0x55, 0x7d, 0x02, 0x6f, 0x8e, 0xe8, 0x78, 0x55, 0x9b, 0x3f, 0x86, 0xc5, 0x7d, 0x82, 0xa9, + 0x71, 0xfc, 0xd4, 0x8f, 0xab, 0x33, 0xba, 0x24, 0x46, 0x6d, 0x83, 0xf5, 0x32, 0xe5, 0xaf, 0x70, + 0x23, 0x1a, 0xf1, 0x41, 0x5a, 0x6f, 0x48, 0x85, 0x45, 0x07, 0x33, 0x12, 0xb0, 0x5e, 0x3f, 0xe4, + 0x3d, 0x2b, 0xb6, 0xb6, 0x1e, 0x13, 0xef, 0x85, 0x0f, 0x49, 0xa8, 0xfe, 0x65, 0x0e, 0x56, 0x62, + 0x15, 0x52, 0x7d, 0xf0, 0x9a, 0x3a, 0xde, 0xd6, 0x48, 0x8b, 0x9a, 0x2b, 0x2c, 0x9c, 0xd4, 0xd8, + 0x91, 0x1e, 0x34, 0x52, 0x17, 0xa5, 0xb1, 0xba, 0xc8, 0xb6, 0xd2, 0xf2, 0x68, 0x2b, 0xdd, 0x86, + 0xaa, 0x17, 0x07, 0x8a, 0x27, 0x55, 0xbd, 0xb3, 0x51, 0x10, 0xe6, 0x91, 0x80, 0xea, 0x92, 0x21, + 0xea, 0x42, 0xcc, 0x3b, 0x21, 0x2e, 0x6f, 0x72, 0x35, 0x3d, 0x7e, 0x89, 0xa8, 0x8e, 0x3d, 0xb0, + 0x59, 0xb3, 0xba, 0xa1, 0x6c, 0x5e, 0xd6, 0xe3, 0x17, 0xf5, 0x13, 0x58, 0xcd, 0xc5, 0x4c, 0x5c, + 0xf5, 0x16, 0xd4, 0x92, 0x4d, 0xa2, 0xa9, 0xf0, 0xbe, 0x3c, 0xf5, 0xae, 0x53, 0x74, 0x6a, 0xc1, + 0x5c, 0xc6, 0x02, 0xf5, 0x9f, 0x0a, 0xac, 0x7d, 0xdf, 0x76, 0xcd, 0x7b, 0x61, 0xb6, 0x9d, 0xc9, + 0x3b, 0xba, 0x0f, 0xd5, 0xa8, 0x0b, 0xa6, 0xb3, 0xf6, 0x22, 0x3d, 0xb0, 0x12, 0xb1, 0x76, 0x4d, + 0x74, 0x00, 0x35, 0xd3, 0xa6, 0xc4, 0xe0, 0x15, 0x1f, 0x29, 0x5f, 0xea, 0xbc, 0x5b, 0x60, 0xf3, + 0x44, 0x2b, 0xda, 0xbb, 0x92, 0x5b, 0x4f, 0x05, 0xa9, 0x37, 0xa0, 0x96, 0xd0, 0x11, 0x40, 0xa5, + 0xfb, 0x64, 0xef, 0xd9, 0xc1, 0x7e, 0xe3, 0x12, 0xaa, 0x43, 0xf5, 0xe9, 0xb3, 0x03, 0xfe, 0xa2, + 0xa8, 0x9f, 0xc1, 0xe2, 0x8e, 0x69, 0x1e, 0x60, 0x4b, 0x7a, 0xf4, 0x2a, 0x1b, 0x44, 0xe1, 0x24, + 0x89, 0xb2, 0xc9, 0x3b, 0x25, 0xf4, 0x8c, 0xda, 0x8c, 0xf0, 0x6c, 0x9a, 0xd7, 0x53, 0x82, 0xda, + 0x80, 0x25, 0x69, 0x40, 0x7c, 0x85, 0x6a, 0x1f, 0xae, 0xc4, 0xbd, 0xe7, 0x80, 0xda, 0x96, 0x45, + 0xa8, 0xb4, 0xec, 0x03, 0x78, 0x93, 0xc5, 0x94, 0x5e, 0x66, 0x81, 0xcb, 0x97, 0x05, 0xdf, 0xf1, + 0xda, 0x8f, 0x38, 0x64, 0xcf, 0xc1, 0xae, 0xbe, 0x2c, 0xd8, 0x52, 0x92, 0xba, 0x2a, 0xd7, 0x8c, + 0x44, 0x87, 0x50, 0x7e, 0x00, 0xcd, 0x5d, 0x82, 0x0d, 0x66, 0x9f, 0xe6, 0x0d, 0xb8, 0x0b, 0x20, + 0x0d, 0x98, 0x18, 0x99, 0xcc, 0xf5, 0xd6, 0x04, 0xb8, 0x6b, 0xaa, 0xeb, 0xb0, 0x56, 0x20, 0x55, + 0xa8, 0xfc, 0xa9, 0x02, 0x0d, 0x19, 0xd0, 0x3d, 0xea, 0x99, 0x43, 0x83, 0x50, 0xf4, 0x2e, 0xd4, + 0x22, 0x41, 0x2c, 0x9c, 0x49, 0xd5, 0x7c, 0x8c, 0xed, 0x9a, 0xe8, 0xdb, 0x50, 0xf5, 0x86, 0xcc, + 0x1f, 0xb2, 0x60, 0xc2, 0xe0, 0xf9, 0x01, 0xa6, 0x36, 0xee, 0x3b, 0xe4, 0x31, 0xf6, 0x75, 0x09, + 0x55, 0x7f, 0x0c, 0xab, 0x3a, 0xb1, 0xec, 0x80, 0x11, 0x2a, 0x2d, 0x90, 0x4e, 0xef, 0x44, 0xbd, + 0x20, 0x26, 0xc9, 0x82, 0xba, 0x3e, 0xa5, 0xa0, 0x12, 0xf6, 0x94, 0x4b, 0xfd, 0x2c, 0xf5, 0xef, + 0xbe, 0xe7, 0x06, 0xc3, 0xc1, 0x2b, 0xf8, 0x77, 0x07, 0x2a, 0xb6, 0x9b, 0x71, 0x6f, 0x3d, 0xdf, + 0xd1, 0xf0, 0x80, 0x30, 0x42, 0x23, 0xff, 0x04, 0x34, 0xeb, 0x9e, 0x34, 0x20, 0xe3, 0x9e, 0x21, + 0x48, 0xb3, 0xb8, 0x97, 0xb0, 0xa7, 0x5c, 0x2a, 0x82, 0x86, 0x94, 0x9e, 0xdc, 0xe9, 0x6f, 0x15, + 0x58, 0x49, 0x4b, 0x9e, 0x5b, 0x21, 0x35, 0x3e, 0x86, 0x85, 0x64, 0x71, 0x7a, 0xb9, 0xbe, 0x51, + 0x27, 0x29, 0x11, 0xbd, 0x93, 0x09, 0x48, 0x69, 0x7a, 0xa9, 0xca, 0x70, 0xac, 0xc1, 0x6a, 0xce, + 0x36, 0x61, 0xf7, 0x13, 0x68, 0x3c, 0xb2, 0x03, 0xf6, 0x2c, 0xc0, 0x16, 0x79, 0x0d, 0x1d, 0x41, + 0xed, 0xc1, 0x72, 0x46, 0x9e, 0xe8, 0xd1, 0x1f, 0x00, 0x24, 0x1e, 0xc8, 0xa0, 0x5f, 0xc4, 0xff, + 0x0c, 0x77, 0xe7, 0xcb, 0x46, 0x9a, 0x5c, 0xf1, 0x2d, 0xd0, 0x10, 0x59, 0xb0, 0x34, 0xba, 0xbd, + 0xa0, 0xcd, 0x59, 0x77, 0xf3, 0xd6, 0xcd, 0x19, 0x90, 0x22, 0x58, 0x97, 0xd0, 0x97, 0x65, 0xa8, + 0x67, 0x16, 0x0e, 0xf4, 0xf5, 0x02, 0xe6, 0xfc, 0xd2, 0xd3, 0xfa, 0xc6, 0x79, 0x30, 0xa1, 0xe0, + 0x8b, 0xf2, 0xcf, 0xfe, 0xfe, 0xaf, 0x9f, 0xcf, 0x7d, 0x5e, 0x46, 0xeb, 0xe9, 0xf7, 0x31, 0xff, + 0xc6, 0x3d, 0x7d, 0x27, 0x25, 0x1c, 0xfe, 0x55, 0x41, 0x7f, 0x56, 0x26, 0x03, 0x34, 0xdb, 0xd4, + 0x9e, 0xf3, 0xcd, 0xa9, 0x9d, 0xfd, 0xfc, 0xcc, 0xee, 0x16, 0xd1, 0xbe, 0xf8, 0x09, 0x31, 0xd8, + 0x8b, 0x73, 0x81, 0xa6, 0x37, 0xc0, 0xb6, 0x7b, 0x3e, 0xce, 0xc5, 0x03, 0x52, 0x88, 0x12, 0xbb, + 0xc2, 0x8b, 0xc3, 0x5f, 0x2b, 0xe8, 0x17, 0xff, 0x97, 0x56, 0x1f, 0xfe, 0x4e, 0x41, 0xbf, 0x99, + 0x66, 0x19, 0xc3, 0x56, 0x4e, 0x12, 0xc3, 0xd6, 0x8c, 0xb6, 0xe5, 0x90, 0x93, 0x8c, 0xcb, 0x01, + 0xb9, 0x75, 0xe8, 0x57, 0x73, 0xf0, 0xc6, 0xd8, 0xf6, 0x83, 0x6e, 0x4e, 0xdc, 0xb3, 0xc6, 0xb7, + 0xca, 0xd6, 0xad, 0x59, 0xa0, 0x22, 0xff, 0xfe, 0xa4, 0xf0, 0xfc, 0xfb, 0xa3, 0x82, 0x3e, 0xca, + 0x87, 0x23, 0xe0, 0x4c, 0xda, 0xf3, 0x09, 0x5e, 0x17, 0xbb, 0x58, 0x10, 0xed, 0xf7, 0xd1, 0x83, + 0xd7, 0x22, 0x1c, 0x99, 0xb0, 0x38, 0x32, 0xd3, 0xd1, 0x37, 0x27, 0x96, 0xf2, 0xe8, 0x60, 0x6f, + 0x6d, 0x9e, 0x0f, 0x4c, 0x4a, 0xfe, 0x0f, 0x0a, 0x2c, 0xe7, 0x66, 0x39, 0x7a, 0xbb, 0x40, 0xc2, + 0xa4, 0x3d, 0xa2, 0x75, 0x7b, 0x36, 0xb0, 0x50, 0xa9, 0xf1, 0x3b, 0xb8, 0xd9, 0xb9, 0x91, 0x8f, + 0x92, 0x58, 0x30, 0x34, 0x33, 0x61, 0xde, 0x56, 0x6e, 0xa1, 0xa7, 0x50, 0x89, 0x37, 0x2a, 0x54, + 0xb4, 0x7e, 0x8f, 0x6c, 0x7b, 0xad, 0x6b, 0x53, 0x10, 0x89, 0xcb, 0x24, 0x1d, 0x70, 0xc9, 0x7e, + 0x52, 0x94, 0x46, 0x13, 0x56, 0x88, 0xd6, 0xf5, 0x29, 0xd8, 0x62, 0x35, 0xc9, 0x9a, 0x30, 0x4d, + 0xcd, 0xd8, 0x28, 0x9f, 0x55, 0xcd, 0x00, 0xd0, 0x3e, 0x61, 0x63, 0x03, 0xb0, 0xb0, 0x82, 0x8a, + 0x07, 0x78, 0x61, 0x05, 0x4d, 0x9a, 0xa7, 0x97, 0xd0, 0x3f, 0x14, 0x40, 0xf9, 0xcd, 0x1d, 0xdd, + 0xbe, 0xc8, 0x82, 0x7f, 0xa1, 0xa2, 0x3d, 0xe6, 0xf9, 0xd2, 0x47, 0x1f, 0x4f, 0xac, 0xaa, 0x64, + 0x7c, 0x6a, 0xcf, 0xc5, 0xc7, 0x4b, 0xa6, 0xb4, 0x24, 0x25, 0x29, 0x59, 0x49, 0x10, 0x1d, 0x3d, + 0xf9, 0xc0, 0x78, 0x81, 0xfe, 0xad, 0x40, 0x2d, 0x99, 0xee, 0xa8, 0x28, 0xfc, 0xe3, 0xbb, 0x44, + 0xeb, 0xc6, 0x74, 0x90, 0x70, 0xe1, 0xf7, 0x71, 0xdf, 0xf9, 0xa5, 0x82, 0xbe, 0x28, 0xe8, 0xc3, + 0xc3, 0x08, 0x9b, 0xe9, 0x01, 0x93, 0xa7, 0xc2, 0xf9, 0xf3, 0xe0, 0xbc, 0xf9, 0x55, 0x34, 0xb9, + 0xee, 0x7d, 0xef, 0xf0, 0xbb, 0x96, 0xcd, 0x8e, 0x87, 0xfd, 0xb6, 0xe1, 0x0d, 0x34, 0xee, 0x90, + 0x47, 0xad, 0xf8, 0x41, 0x4b, 0xfe, 0xd7, 0x5a, 0xc4, 0xd5, 0xfc, 0xfe, 0xb7, 0x2c, 0x4f, 0xcb, + 0xfd, 0xec, 0xee, 0x57, 0xf8, 0xff, 0x99, 0x3b, 0xff, 0x0b, 0x00, 0x00, 0xff, 0xff, 0xc9, 0x67, + 0x17, 0x6c, 0x08, 0x17, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1380,6 +1465,7 @@ type ArtifactRegistryClient interface { RegisterConsumer(ctx context.Context, in *RegisterConsumerRequest, opts ...grpc.CallOption) (*RegisterResponse, error) SetExecutionInputs(ctx context.Context, in *ExecutionInputsRequest, opts ...grpc.CallOption) (*ExecutionInputsResponse, error) FindByWorkflowExec(ctx context.Context, in *FindByWorkflowExecRequest, opts ...grpc.CallOption) (*SearchArtifactsResponse, error) + ListUsage(ctx context.Context, in *ListUsageRequest, opts ...grpc.CallOption) (*ListUsageResponse, error) } type artifactRegistryClient struct { @@ -1480,6 +1566,15 @@ func (c *artifactRegistryClient) FindByWorkflowExec(ctx context.Context, in *Fin return out, nil } +func (c *artifactRegistryClient) ListUsage(ctx context.Context, in *ListUsageRequest, opts ...grpc.CallOption) (*ListUsageResponse, error) { + out := new(ListUsageResponse) + err := c.cc.Invoke(ctx, "/flyteidl.artifact.ArtifactRegistry/ListUsage", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // ArtifactRegistryServer is the server API for ArtifactRegistry service. type ArtifactRegistryServer interface { CreateArtifact(context.Context, *CreateArtifactRequest) (*CreateArtifactResponse, error) @@ -1492,6 +1587,7 @@ type ArtifactRegistryServer interface { RegisterConsumer(context.Context, *RegisterConsumerRequest) (*RegisterResponse, error) SetExecutionInputs(context.Context, *ExecutionInputsRequest) (*ExecutionInputsResponse, error) FindByWorkflowExec(context.Context, *FindByWorkflowExecRequest) (*SearchArtifactsResponse, error) + ListUsage(context.Context, *ListUsageRequest) (*ListUsageResponse, error) } // UnimplementedArtifactRegistryServer can be embedded to have forward compatible implementations. @@ -1528,6 +1624,9 @@ func (*UnimplementedArtifactRegistryServer) SetExecutionInputs(ctx context.Conte func (*UnimplementedArtifactRegistryServer) FindByWorkflowExec(ctx context.Context, req *FindByWorkflowExecRequest) (*SearchArtifactsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method FindByWorkflowExec not implemented") } +func (*UnimplementedArtifactRegistryServer) ListUsage(ctx context.Context, req *ListUsageRequest) (*ListUsageResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListUsage not implemented") +} func RegisterArtifactRegistryServer(s *grpc.Server, srv ArtifactRegistryServer) { s.RegisterService(&_ArtifactRegistry_serviceDesc, srv) @@ -1713,6 +1812,24 @@ func _ArtifactRegistry_FindByWorkflowExec_Handler(srv interface{}, ctx context.C return interceptor(ctx, in, info, handler) } +func _ArtifactRegistry_ListUsage_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListUsageRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ArtifactRegistryServer).ListUsage(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/flyteidl.artifact.ArtifactRegistry/ListUsage", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ArtifactRegistryServer).ListUsage(ctx, req.(*ListUsageRequest)) + } + return interceptor(ctx, in, info, handler) +} + var _ArtifactRegistry_serviceDesc = grpc.ServiceDesc{ ServiceName: "flyteidl.artifact.ArtifactRegistry", HandlerType: (*ArtifactRegistryServer)(nil), @@ -1757,6 +1874,10 @@ var _ArtifactRegistry_serviceDesc = grpc.ServiceDesc{ MethodName: "FindByWorkflowExec", Handler: _ArtifactRegistry_FindByWorkflowExec_Handler, }, + { + MethodName: "ListUsage", + Handler: _ArtifactRegistry_ListUsage_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "flyteidl/artifact/artifacts.proto", diff --git a/flyteidl/gen/pb-go/flyteidl/artifact/artifacts.pb.gw.go b/flyteidl/gen/pb-go/flyteidl/artifact/artifacts.pb.gw.go index 664d0c4869..4d83ccf464 100644 --- a/flyteidl/gen/pb-go/flyteidl/artifact/artifacts.pb.gw.go +++ b/flyteidl/gen/pb-go/flyteidl/artifact/artifacts.pb.gw.go @@ -439,6 +439,77 @@ func request_ArtifactRegistry_FindByWorkflowExec_0(ctx context.Context, marshale } +var ( + filter_ArtifactRegistry_ListUsage_0 = &utilities.DoubleArray{Encoding: map[string]int{"artifact_id": 0, "artifact_key": 1, "project": 2, "domain": 3, "name": 4, "version": 5}, Base: []int{1, 6, 1, 1, 2, 2, 5, 0, 0, 4, 0, 6, 0}, Check: []int{0, 1, 2, 3, 2, 5, 2, 4, 6, 7, 10, 2, 12}} +) + +func request_ArtifactRegistry_ListUsage_0(ctx context.Context, marshaler runtime.Marshaler, client ArtifactRegistryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ListUsageRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["artifact_id.artifact_key.project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "artifact_id.artifact_key.project") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "artifact_id.artifact_key.project", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "artifact_id.artifact_key.project", err) + } + + val, ok = pathParams["artifact_id.artifact_key.domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "artifact_id.artifact_key.domain") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "artifact_id.artifact_key.domain", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "artifact_id.artifact_key.domain", err) + } + + val, ok = pathParams["artifact_id.artifact_key.name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "artifact_id.artifact_key.name") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "artifact_id.artifact_key.name", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "artifact_id.artifact_key.name", err) + } + + val, ok = pathParams["artifact_id.version"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "artifact_id.version") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "artifact_id.version", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "artifact_id.version", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ArtifactRegistry_ListUsage_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ListUsage(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + // RegisterArtifactRegistryHandlerFromEndpoint is same as RegisterArtifactRegistryHandler but // automatically dials to "endpoint" and closes the connection when "ctx" gets done. func RegisterArtifactRegistryHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { @@ -637,6 +708,26 @@ func RegisterArtifactRegistryHandlerClient(ctx context.Context, mux *runtime.Ser }) + mux.Handle("GET", pattern_ArtifactRegistry_ListUsage_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ArtifactRegistry_ListUsage_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ArtifactRegistry_ListUsage_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -656,6 +747,8 @@ var ( pattern_ArtifactRegistry_DeactivateTrigger_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"artifacts", "api", "v1", "trigger", "deactivate"}, "")) pattern_ArtifactRegistry_FindByWorkflowExec_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8}, []string{"artifacts", "api", "v1", "search", "execution", "exec_id.project", "exec_id.domain", "exec_id.name", "direction"}, "")) + + pattern_ArtifactRegistry_ListUsage_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7}, []string{"artifacts", "api", "v1", "usage", "artifact_id.artifact_key.project", "artifact_id.artifact_key.domain", "artifact_id.artifact_key.name", "artifact_id.version"}, "")) ) var ( @@ -674,4 +767,6 @@ var ( forward_ArtifactRegistry_DeactivateTrigger_0 = runtime.ForwardResponseMessage forward_ArtifactRegistry_FindByWorkflowExec_0 = runtime.ForwardResponseMessage + + forward_ArtifactRegistry_ListUsage_0 = runtime.ForwardResponseMessage ) diff --git a/flyteidl/gen/pb-go/flyteidl/artifact/artifacts.swagger.json b/flyteidl/gen/pb-go/flyteidl/artifact/artifacts.swagger.json index e6ea0b65d9..a670f70f1d 100644 --- a/flyteidl/gen/pb-go/flyteidl/artifact/artifacts.swagger.json +++ b/flyteidl/gen/pb-go/flyteidl/artifact/artifacts.swagger.json @@ -700,6 +700,49 @@ "ArtifactRegistry" ] } + }, + "/artifacts/api/v1/usage/{artifact_id.artifact_key.project}/{artifact_id.artifact_key.domain}/{artifact_id.artifact_key.name}/{artifact_id.version}": { + "get": { + "operationId": "ListUsage", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/artifactListUsageResponse" + } + } + }, + "parameters": [ + { + "name": "artifact_id.artifact_key.project", + "description": "Project and domain and suffix needs to be unique across a given artifact store.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "artifact_id.artifact_key.domain", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "artifact_id.artifact_key.name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "artifact_id.version", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "ArtifactRegistry" + ] + } } }, "definitions": { @@ -1246,6 +1289,17 @@ } } }, + "artifactListUsageResponse": { + "type": "object", + "properties": { + "executions": { + "type": "array", + "items": { + "$ref": "#/definitions/coreWorkflowExecutionIdentifier" + } + } + } + }, "artifactRegisterResponse": { "type": "object" }, diff --git a/flyteidl/gen/pb-java/flyteidl/artifact/Artifacts.java b/flyteidl/gen/pb-java/flyteidl/artifact/Artifacts.java index 861dc1f87b..c4272da952 100644 --- a/flyteidl/gen/pb-java/flyteidl/artifact/Artifacts.java +++ b/flyteidl/gen/pb-java/flyteidl/artifact/Artifacts.java @@ -19810,6 +19810,1393 @@ public flyteidl.artifact.Artifacts.ExecutionInputsResponse getDefaultInstanceFor } + public interface ListUsageRequestOrBuilder extends + // @@protoc_insertion_point(interface_extends:flyteidl.artifact.ListUsageRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * .flyteidl.core.ArtifactID artifact_id = 1; + */ + boolean hasArtifactId(); + /** + * .flyteidl.core.ArtifactID artifact_id = 1; + */ + flyteidl.core.ArtifactId.ArtifactID getArtifactId(); + /** + * .flyteidl.core.ArtifactID artifact_id = 1; + */ + flyteidl.core.ArtifactId.ArtifactIDOrBuilder getArtifactIdOrBuilder(); + } + /** + * Protobuf type {@code flyteidl.artifact.ListUsageRequest} + */ + public static final class ListUsageRequest extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:flyteidl.artifact.ListUsageRequest) + ListUsageRequestOrBuilder { + private static final long serialVersionUID = 0L; + // Use ListUsageRequest.newBuilder() to construct. + private ListUsageRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private ListUsageRequest() { + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private ListUsageRequest( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + flyteidl.core.ArtifactId.ArtifactID.Builder subBuilder = null; + if (artifactId_ != null) { + subBuilder = artifactId_.toBuilder(); + } + artifactId_ = input.readMessage(flyteidl.core.ArtifactId.ArtifactID.parser(), extensionRegistry); + if (subBuilder != null) { + subBuilder.mergeFrom(artifactId_); + artifactId_ = subBuilder.buildPartial(); + } + + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return flyteidl.artifact.Artifacts.internal_static_flyteidl_artifact_ListUsageRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return flyteidl.artifact.Artifacts.internal_static_flyteidl_artifact_ListUsageRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + flyteidl.artifact.Artifacts.ListUsageRequest.class, flyteidl.artifact.Artifacts.ListUsageRequest.Builder.class); + } + + public static final int ARTIFACT_ID_FIELD_NUMBER = 1; + private flyteidl.core.ArtifactId.ArtifactID artifactId_; + /** + * .flyteidl.core.ArtifactID artifact_id = 1; + */ + public boolean hasArtifactId() { + return artifactId_ != null; + } + /** + * .flyteidl.core.ArtifactID artifact_id = 1; + */ + public flyteidl.core.ArtifactId.ArtifactID getArtifactId() { + return artifactId_ == null ? flyteidl.core.ArtifactId.ArtifactID.getDefaultInstance() : artifactId_; + } + /** + * .flyteidl.core.ArtifactID artifact_id = 1; + */ + public flyteidl.core.ArtifactId.ArtifactIDOrBuilder getArtifactIdOrBuilder() { + return getArtifactId(); + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (artifactId_ != null) { + output.writeMessage(1, getArtifactId()); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (artifactId_ != null) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, getArtifactId()); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof flyteidl.artifact.Artifacts.ListUsageRequest)) { + return super.equals(obj); + } + flyteidl.artifact.Artifacts.ListUsageRequest other = (flyteidl.artifact.Artifacts.ListUsageRequest) obj; + + if (hasArtifactId() != other.hasArtifactId()) return false; + if (hasArtifactId()) { + if (!getArtifactId() + .equals(other.getArtifactId())) return false; + } + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasArtifactId()) { + hash = (37 * hash) + ARTIFACT_ID_FIELD_NUMBER; + hash = (53 * hash) + getArtifactId().hashCode(); + } + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static flyteidl.artifact.Artifacts.ListUsageRequest parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static flyteidl.artifact.Artifacts.ListUsageRequest parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static flyteidl.artifact.Artifacts.ListUsageRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static flyteidl.artifact.Artifacts.ListUsageRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static flyteidl.artifact.Artifacts.ListUsageRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static flyteidl.artifact.Artifacts.ListUsageRequest parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static flyteidl.artifact.Artifacts.ListUsageRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static flyteidl.artifact.Artifacts.ListUsageRequest parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static flyteidl.artifact.Artifacts.ListUsageRequest parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static flyteidl.artifact.Artifacts.ListUsageRequest parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static flyteidl.artifact.Artifacts.ListUsageRequest parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static flyteidl.artifact.Artifacts.ListUsageRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(flyteidl.artifact.Artifacts.ListUsageRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code flyteidl.artifact.ListUsageRequest} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:flyteidl.artifact.ListUsageRequest) + flyteidl.artifact.Artifacts.ListUsageRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return flyteidl.artifact.Artifacts.internal_static_flyteidl_artifact_ListUsageRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return flyteidl.artifact.Artifacts.internal_static_flyteidl_artifact_ListUsageRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + flyteidl.artifact.Artifacts.ListUsageRequest.class, flyteidl.artifact.Artifacts.ListUsageRequest.Builder.class); + } + + // Construct using flyteidl.artifact.Artifacts.ListUsageRequest.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + if (artifactIdBuilder_ == null) { + artifactId_ = null; + } else { + artifactId_ = null; + artifactIdBuilder_ = null; + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return flyteidl.artifact.Artifacts.internal_static_flyteidl_artifact_ListUsageRequest_descriptor; + } + + @java.lang.Override + public flyteidl.artifact.Artifacts.ListUsageRequest getDefaultInstanceForType() { + return flyteidl.artifact.Artifacts.ListUsageRequest.getDefaultInstance(); + } + + @java.lang.Override + public flyteidl.artifact.Artifacts.ListUsageRequest build() { + flyteidl.artifact.Artifacts.ListUsageRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public flyteidl.artifact.Artifacts.ListUsageRequest buildPartial() { + flyteidl.artifact.Artifacts.ListUsageRequest result = new flyteidl.artifact.Artifacts.ListUsageRequest(this); + if (artifactIdBuilder_ == null) { + result.artifactId_ = artifactId_; + } else { + result.artifactId_ = artifactIdBuilder_.build(); + } + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof flyteidl.artifact.Artifacts.ListUsageRequest) { + return mergeFrom((flyteidl.artifact.Artifacts.ListUsageRequest)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(flyteidl.artifact.Artifacts.ListUsageRequest other) { + if (other == flyteidl.artifact.Artifacts.ListUsageRequest.getDefaultInstance()) return this; + if (other.hasArtifactId()) { + mergeArtifactId(other.getArtifactId()); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + flyteidl.artifact.Artifacts.ListUsageRequest parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (flyteidl.artifact.Artifacts.ListUsageRequest) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private flyteidl.core.ArtifactId.ArtifactID artifactId_; + private com.google.protobuf.SingleFieldBuilderV3< + flyteidl.core.ArtifactId.ArtifactID, flyteidl.core.ArtifactId.ArtifactID.Builder, flyteidl.core.ArtifactId.ArtifactIDOrBuilder> artifactIdBuilder_; + /** + * .flyteidl.core.ArtifactID artifact_id = 1; + */ + public boolean hasArtifactId() { + return artifactIdBuilder_ != null || artifactId_ != null; + } + /** + * .flyteidl.core.ArtifactID artifact_id = 1; + */ + public flyteidl.core.ArtifactId.ArtifactID getArtifactId() { + if (artifactIdBuilder_ == null) { + return artifactId_ == null ? flyteidl.core.ArtifactId.ArtifactID.getDefaultInstance() : artifactId_; + } else { + return artifactIdBuilder_.getMessage(); + } + } + /** + * .flyteidl.core.ArtifactID artifact_id = 1; + */ + public Builder setArtifactId(flyteidl.core.ArtifactId.ArtifactID value) { + if (artifactIdBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + artifactId_ = value; + onChanged(); + } else { + artifactIdBuilder_.setMessage(value); + } + + return this; + } + /** + * .flyteidl.core.ArtifactID artifact_id = 1; + */ + public Builder setArtifactId( + flyteidl.core.ArtifactId.ArtifactID.Builder builderForValue) { + if (artifactIdBuilder_ == null) { + artifactId_ = builderForValue.build(); + onChanged(); + } else { + artifactIdBuilder_.setMessage(builderForValue.build()); + } + + return this; + } + /** + * .flyteidl.core.ArtifactID artifact_id = 1; + */ + public Builder mergeArtifactId(flyteidl.core.ArtifactId.ArtifactID value) { + if (artifactIdBuilder_ == null) { + if (artifactId_ != null) { + artifactId_ = + flyteidl.core.ArtifactId.ArtifactID.newBuilder(artifactId_).mergeFrom(value).buildPartial(); + } else { + artifactId_ = value; + } + onChanged(); + } else { + artifactIdBuilder_.mergeFrom(value); + } + + return this; + } + /** + * .flyteidl.core.ArtifactID artifact_id = 1; + */ + public Builder clearArtifactId() { + if (artifactIdBuilder_ == null) { + artifactId_ = null; + onChanged(); + } else { + artifactId_ = null; + artifactIdBuilder_ = null; + } + + return this; + } + /** + * .flyteidl.core.ArtifactID artifact_id = 1; + */ + public flyteidl.core.ArtifactId.ArtifactID.Builder getArtifactIdBuilder() { + + onChanged(); + return getArtifactIdFieldBuilder().getBuilder(); + } + /** + * .flyteidl.core.ArtifactID artifact_id = 1; + */ + public flyteidl.core.ArtifactId.ArtifactIDOrBuilder getArtifactIdOrBuilder() { + if (artifactIdBuilder_ != null) { + return artifactIdBuilder_.getMessageOrBuilder(); + } else { + return artifactId_ == null ? + flyteidl.core.ArtifactId.ArtifactID.getDefaultInstance() : artifactId_; + } + } + /** + * .flyteidl.core.ArtifactID artifact_id = 1; + */ + private com.google.protobuf.SingleFieldBuilderV3< + flyteidl.core.ArtifactId.ArtifactID, flyteidl.core.ArtifactId.ArtifactID.Builder, flyteidl.core.ArtifactId.ArtifactIDOrBuilder> + getArtifactIdFieldBuilder() { + if (artifactIdBuilder_ == null) { + artifactIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + flyteidl.core.ArtifactId.ArtifactID, flyteidl.core.ArtifactId.ArtifactID.Builder, flyteidl.core.ArtifactId.ArtifactIDOrBuilder>( + getArtifactId(), + getParentForChildren(), + isClean()); + artifactId_ = null; + } + return artifactIdBuilder_; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:flyteidl.artifact.ListUsageRequest) + } + + // @@protoc_insertion_point(class_scope:flyteidl.artifact.ListUsageRequest) + private static final flyteidl.artifact.Artifacts.ListUsageRequest DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new flyteidl.artifact.Artifacts.ListUsageRequest(); + } + + public static flyteidl.artifact.Artifacts.ListUsageRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ListUsageRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new ListUsageRequest(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public flyteidl.artifact.Artifacts.ListUsageRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface ListUsageResponseOrBuilder extends + // @@protoc_insertion_point(interface_extends:flyteidl.artifact.ListUsageResponse) + com.google.protobuf.MessageOrBuilder { + + /** + * repeated .flyteidl.core.WorkflowExecutionIdentifier executions = 1; + */ + java.util.List + getExecutionsList(); + /** + * repeated .flyteidl.core.WorkflowExecutionIdentifier executions = 1; + */ + flyteidl.core.IdentifierOuterClass.WorkflowExecutionIdentifier getExecutions(int index); + /** + * repeated .flyteidl.core.WorkflowExecutionIdentifier executions = 1; + */ + int getExecutionsCount(); + /** + * repeated .flyteidl.core.WorkflowExecutionIdentifier executions = 1; + */ + java.util.List + getExecutionsOrBuilderList(); + /** + * repeated .flyteidl.core.WorkflowExecutionIdentifier executions = 1; + */ + flyteidl.core.IdentifierOuterClass.WorkflowExecutionIdentifierOrBuilder getExecutionsOrBuilder( + int index); + } + /** + * Protobuf type {@code flyteidl.artifact.ListUsageResponse} + */ + public static final class ListUsageResponse extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:flyteidl.artifact.ListUsageResponse) + ListUsageResponseOrBuilder { + private static final long serialVersionUID = 0L; + // Use ListUsageResponse.newBuilder() to construct. + private ListUsageResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private ListUsageResponse() { + executions_ = java.util.Collections.emptyList(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private ListUsageResponse( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + if (!((mutable_bitField0_ & 0x00000001) != 0)) { + executions_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000001; + } + executions_.add( + input.readMessage(flyteidl.core.IdentifierOuterClass.WorkflowExecutionIdentifier.parser(), extensionRegistry)); + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + if (((mutable_bitField0_ & 0x00000001) != 0)) { + executions_ = java.util.Collections.unmodifiableList(executions_); + } + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return flyteidl.artifact.Artifacts.internal_static_flyteidl_artifact_ListUsageResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return flyteidl.artifact.Artifacts.internal_static_flyteidl_artifact_ListUsageResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + flyteidl.artifact.Artifacts.ListUsageResponse.class, flyteidl.artifact.Artifacts.ListUsageResponse.Builder.class); + } + + public static final int EXECUTIONS_FIELD_NUMBER = 1; + private java.util.List executions_; + /** + * repeated .flyteidl.core.WorkflowExecutionIdentifier executions = 1; + */ + public java.util.List getExecutionsList() { + return executions_; + } + /** + * repeated .flyteidl.core.WorkflowExecutionIdentifier executions = 1; + */ + public java.util.List + getExecutionsOrBuilderList() { + return executions_; + } + /** + * repeated .flyteidl.core.WorkflowExecutionIdentifier executions = 1; + */ + public int getExecutionsCount() { + return executions_.size(); + } + /** + * repeated .flyteidl.core.WorkflowExecutionIdentifier executions = 1; + */ + public flyteidl.core.IdentifierOuterClass.WorkflowExecutionIdentifier getExecutions(int index) { + return executions_.get(index); + } + /** + * repeated .flyteidl.core.WorkflowExecutionIdentifier executions = 1; + */ + public flyteidl.core.IdentifierOuterClass.WorkflowExecutionIdentifierOrBuilder getExecutionsOrBuilder( + int index) { + return executions_.get(index); + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + for (int i = 0; i < executions_.size(); i++) { + output.writeMessage(1, executions_.get(i)); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + for (int i = 0; i < executions_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, executions_.get(i)); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof flyteidl.artifact.Artifacts.ListUsageResponse)) { + return super.equals(obj); + } + flyteidl.artifact.Artifacts.ListUsageResponse other = (flyteidl.artifact.Artifacts.ListUsageResponse) obj; + + if (!getExecutionsList() + .equals(other.getExecutionsList())) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (getExecutionsCount() > 0) { + hash = (37 * hash) + EXECUTIONS_FIELD_NUMBER; + hash = (53 * hash) + getExecutionsList().hashCode(); + } + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static flyteidl.artifact.Artifacts.ListUsageResponse parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static flyteidl.artifact.Artifacts.ListUsageResponse parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static flyteidl.artifact.Artifacts.ListUsageResponse parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static flyteidl.artifact.Artifacts.ListUsageResponse parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static flyteidl.artifact.Artifacts.ListUsageResponse parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static flyteidl.artifact.Artifacts.ListUsageResponse parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static flyteidl.artifact.Artifacts.ListUsageResponse parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static flyteidl.artifact.Artifacts.ListUsageResponse parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static flyteidl.artifact.Artifacts.ListUsageResponse parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static flyteidl.artifact.Artifacts.ListUsageResponse parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static flyteidl.artifact.Artifacts.ListUsageResponse parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static flyteidl.artifact.Artifacts.ListUsageResponse parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(flyteidl.artifact.Artifacts.ListUsageResponse prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code flyteidl.artifact.ListUsageResponse} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:flyteidl.artifact.ListUsageResponse) + flyteidl.artifact.Artifacts.ListUsageResponseOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return flyteidl.artifact.Artifacts.internal_static_flyteidl_artifact_ListUsageResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return flyteidl.artifact.Artifacts.internal_static_flyteidl_artifact_ListUsageResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + flyteidl.artifact.Artifacts.ListUsageResponse.class, flyteidl.artifact.Artifacts.ListUsageResponse.Builder.class); + } + + // Construct using flyteidl.artifact.Artifacts.ListUsageResponse.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + getExecutionsFieldBuilder(); + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + if (executionsBuilder_ == null) { + executions_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + } else { + executionsBuilder_.clear(); + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return flyteidl.artifact.Artifacts.internal_static_flyteidl_artifact_ListUsageResponse_descriptor; + } + + @java.lang.Override + public flyteidl.artifact.Artifacts.ListUsageResponse getDefaultInstanceForType() { + return flyteidl.artifact.Artifacts.ListUsageResponse.getDefaultInstance(); + } + + @java.lang.Override + public flyteidl.artifact.Artifacts.ListUsageResponse build() { + flyteidl.artifact.Artifacts.ListUsageResponse result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public flyteidl.artifact.Artifacts.ListUsageResponse buildPartial() { + flyteidl.artifact.Artifacts.ListUsageResponse result = new flyteidl.artifact.Artifacts.ListUsageResponse(this); + int from_bitField0_ = bitField0_; + if (executionsBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0)) { + executions_ = java.util.Collections.unmodifiableList(executions_); + bitField0_ = (bitField0_ & ~0x00000001); + } + result.executions_ = executions_; + } else { + result.executions_ = executionsBuilder_.build(); + } + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof flyteidl.artifact.Artifacts.ListUsageResponse) { + return mergeFrom((flyteidl.artifact.Artifacts.ListUsageResponse)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(flyteidl.artifact.Artifacts.ListUsageResponse other) { + if (other == flyteidl.artifact.Artifacts.ListUsageResponse.getDefaultInstance()) return this; + if (executionsBuilder_ == null) { + if (!other.executions_.isEmpty()) { + if (executions_.isEmpty()) { + executions_ = other.executions_; + bitField0_ = (bitField0_ & ~0x00000001); + } else { + ensureExecutionsIsMutable(); + executions_.addAll(other.executions_); + } + onChanged(); + } + } else { + if (!other.executions_.isEmpty()) { + if (executionsBuilder_.isEmpty()) { + executionsBuilder_.dispose(); + executionsBuilder_ = null; + executions_ = other.executions_; + bitField0_ = (bitField0_ & ~0x00000001); + executionsBuilder_ = + com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? + getExecutionsFieldBuilder() : null; + } else { + executionsBuilder_.addAllMessages(other.executions_); + } + } + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + flyteidl.artifact.Artifacts.ListUsageResponse parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (flyteidl.artifact.Artifacts.ListUsageResponse) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private java.util.List executions_ = + java.util.Collections.emptyList(); + private void ensureExecutionsIsMutable() { + if (!((bitField0_ & 0x00000001) != 0)) { + executions_ = new java.util.ArrayList(executions_); + bitField0_ |= 0x00000001; + } + } + + private com.google.protobuf.RepeatedFieldBuilderV3< + flyteidl.core.IdentifierOuterClass.WorkflowExecutionIdentifier, flyteidl.core.IdentifierOuterClass.WorkflowExecutionIdentifier.Builder, flyteidl.core.IdentifierOuterClass.WorkflowExecutionIdentifierOrBuilder> executionsBuilder_; + + /** + * repeated .flyteidl.core.WorkflowExecutionIdentifier executions = 1; + */ + public java.util.List getExecutionsList() { + if (executionsBuilder_ == null) { + return java.util.Collections.unmodifiableList(executions_); + } else { + return executionsBuilder_.getMessageList(); + } + } + /** + * repeated .flyteidl.core.WorkflowExecutionIdentifier executions = 1; + */ + public int getExecutionsCount() { + if (executionsBuilder_ == null) { + return executions_.size(); + } else { + return executionsBuilder_.getCount(); + } + } + /** + * repeated .flyteidl.core.WorkflowExecutionIdentifier executions = 1; + */ + public flyteidl.core.IdentifierOuterClass.WorkflowExecutionIdentifier getExecutions(int index) { + if (executionsBuilder_ == null) { + return executions_.get(index); + } else { + return executionsBuilder_.getMessage(index); + } + } + /** + * repeated .flyteidl.core.WorkflowExecutionIdentifier executions = 1; + */ + public Builder setExecutions( + int index, flyteidl.core.IdentifierOuterClass.WorkflowExecutionIdentifier value) { + if (executionsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureExecutionsIsMutable(); + executions_.set(index, value); + onChanged(); + } else { + executionsBuilder_.setMessage(index, value); + } + return this; + } + /** + * repeated .flyteidl.core.WorkflowExecutionIdentifier executions = 1; + */ + public Builder setExecutions( + int index, flyteidl.core.IdentifierOuterClass.WorkflowExecutionIdentifier.Builder builderForValue) { + if (executionsBuilder_ == null) { + ensureExecutionsIsMutable(); + executions_.set(index, builderForValue.build()); + onChanged(); + } else { + executionsBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .flyteidl.core.WorkflowExecutionIdentifier executions = 1; + */ + public Builder addExecutions(flyteidl.core.IdentifierOuterClass.WorkflowExecutionIdentifier value) { + if (executionsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureExecutionsIsMutable(); + executions_.add(value); + onChanged(); + } else { + executionsBuilder_.addMessage(value); + } + return this; + } + /** + * repeated .flyteidl.core.WorkflowExecutionIdentifier executions = 1; + */ + public Builder addExecutions( + int index, flyteidl.core.IdentifierOuterClass.WorkflowExecutionIdentifier value) { + if (executionsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureExecutionsIsMutable(); + executions_.add(index, value); + onChanged(); + } else { + executionsBuilder_.addMessage(index, value); + } + return this; + } + /** + * repeated .flyteidl.core.WorkflowExecutionIdentifier executions = 1; + */ + public Builder addExecutions( + flyteidl.core.IdentifierOuterClass.WorkflowExecutionIdentifier.Builder builderForValue) { + if (executionsBuilder_ == null) { + ensureExecutionsIsMutable(); + executions_.add(builderForValue.build()); + onChanged(); + } else { + executionsBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + * repeated .flyteidl.core.WorkflowExecutionIdentifier executions = 1; + */ + public Builder addExecutions( + int index, flyteidl.core.IdentifierOuterClass.WorkflowExecutionIdentifier.Builder builderForValue) { + if (executionsBuilder_ == null) { + ensureExecutionsIsMutable(); + executions_.add(index, builderForValue.build()); + onChanged(); + } else { + executionsBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .flyteidl.core.WorkflowExecutionIdentifier executions = 1; + */ + public Builder addAllExecutions( + java.lang.Iterable values) { + if (executionsBuilder_ == null) { + ensureExecutionsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, executions_); + onChanged(); + } else { + executionsBuilder_.addAllMessages(values); + } + return this; + } + /** + * repeated .flyteidl.core.WorkflowExecutionIdentifier executions = 1; + */ + public Builder clearExecutions() { + if (executionsBuilder_ == null) { + executions_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + } else { + executionsBuilder_.clear(); + } + return this; + } + /** + * repeated .flyteidl.core.WorkflowExecutionIdentifier executions = 1; + */ + public Builder removeExecutions(int index) { + if (executionsBuilder_ == null) { + ensureExecutionsIsMutable(); + executions_.remove(index); + onChanged(); + } else { + executionsBuilder_.remove(index); + } + return this; + } + /** + * repeated .flyteidl.core.WorkflowExecutionIdentifier executions = 1; + */ + public flyteidl.core.IdentifierOuterClass.WorkflowExecutionIdentifier.Builder getExecutionsBuilder( + int index) { + return getExecutionsFieldBuilder().getBuilder(index); + } + /** + * repeated .flyteidl.core.WorkflowExecutionIdentifier executions = 1; + */ + public flyteidl.core.IdentifierOuterClass.WorkflowExecutionIdentifierOrBuilder getExecutionsOrBuilder( + int index) { + if (executionsBuilder_ == null) { + return executions_.get(index); } else { + return executionsBuilder_.getMessageOrBuilder(index); + } + } + /** + * repeated .flyteidl.core.WorkflowExecutionIdentifier executions = 1; + */ + public java.util.List + getExecutionsOrBuilderList() { + if (executionsBuilder_ != null) { + return executionsBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(executions_); + } + } + /** + * repeated .flyteidl.core.WorkflowExecutionIdentifier executions = 1; + */ + public flyteidl.core.IdentifierOuterClass.WorkflowExecutionIdentifier.Builder addExecutionsBuilder() { + return getExecutionsFieldBuilder().addBuilder( + flyteidl.core.IdentifierOuterClass.WorkflowExecutionIdentifier.getDefaultInstance()); + } + /** + * repeated .flyteidl.core.WorkflowExecutionIdentifier executions = 1; + */ + public flyteidl.core.IdentifierOuterClass.WorkflowExecutionIdentifier.Builder addExecutionsBuilder( + int index) { + return getExecutionsFieldBuilder().addBuilder( + index, flyteidl.core.IdentifierOuterClass.WorkflowExecutionIdentifier.getDefaultInstance()); + } + /** + * repeated .flyteidl.core.WorkflowExecutionIdentifier executions = 1; + */ + public java.util.List + getExecutionsBuilderList() { + return getExecutionsFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilderV3< + flyteidl.core.IdentifierOuterClass.WorkflowExecutionIdentifier, flyteidl.core.IdentifierOuterClass.WorkflowExecutionIdentifier.Builder, flyteidl.core.IdentifierOuterClass.WorkflowExecutionIdentifierOrBuilder> + getExecutionsFieldBuilder() { + if (executionsBuilder_ == null) { + executionsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< + flyteidl.core.IdentifierOuterClass.WorkflowExecutionIdentifier, flyteidl.core.IdentifierOuterClass.WorkflowExecutionIdentifier.Builder, flyteidl.core.IdentifierOuterClass.WorkflowExecutionIdentifierOrBuilder>( + executions_, + ((bitField0_ & 0x00000001) != 0), + getParentForChildren(), + isClean()); + executions_ = null; + } + return executionsBuilder_; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:flyteidl.artifact.ListUsageResponse) + } + + // @@protoc_insertion_point(class_scope:flyteidl.artifact.ListUsageResponse) + private static final flyteidl.artifact.Artifacts.ListUsageResponse DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new flyteidl.artifact.Artifacts.ListUsageResponse(); + } + + public static flyteidl.artifact.Artifacts.ListUsageResponse getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ListUsageResponse parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new ListUsageResponse(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public flyteidl.artifact.Artifacts.ListUsageResponse getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + private static final com.google.protobuf.Descriptors.Descriptor internal_static_flyteidl_artifact_Artifact_descriptor; private static final @@ -19935,6 +21322,16 @@ public flyteidl.artifact.Artifacts.ExecutionInputsResponse getDefaultInstanceFor private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_flyteidl_artifact_ExecutionInputsResponse_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_flyteidl_artifact_ListUsageRequest_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_flyteidl_artifact_ListUsageRequest_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_flyteidl_artifact_ListUsageResponse_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_flyteidl_artifact_ListUsageResponse_fieldAccessorTable; public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { @@ -20017,57 +21414,67 @@ public flyteidl.artifact.Artifacts.ExecutionInputsResponse getDefaultInstanceFor "ionInputsRequest\022@\n\014execution_id\030\001 \001(\0132*" + ".flyteidl.core.WorkflowExecutionIdentifi" + "er\022)\n\006inputs\030\002 \003(\0132\031.flyteidl.core.Artif" + - "actID\"\031\n\027ExecutionInputsResponse2\371\016\n\020Art" + - "ifactRegistry\022g\n\016CreateArtifact\022(.flytei" + - "dl.artifact.CreateArtifactRequest\032).flyt" + - "eidl.artifact.CreateArtifactResponse\"\000\022\361" + - "\004\n\013GetArtifact\022%.flyteidl.artifact.GetAr" + - "tifactRequest\032&.flyteidl.artifact.GetArt" + - "ifactResponse\"\222\004\202\323\344\223\002\213\004\022\033/artifacts/api/" + - "v1/artifactsZ\263\001\022\260\001/artifacts/api/v1/arti" + - "fact/id/{query.artifact_id.artifact_key." + - "project}/{query.artifact_id.artifact_key" + - ".domain}/{query.artifact_id.artifact_key" + - ".name}/{query.artifact_id.version}Z\227\001\022\224\001" + - "/artifacts/api/v1/artifact/id/{query.art" + - "ifact_id.artifact_key.project}/{query.ar" + - "tifact_id.artifact_key.domain}/{query.ar" + - "tifact_id.artifact_key.name}Z\233\001\022\230\001/artif" + - "acts/api/v1/artifact/tag/{query.artifact" + - "_tag.artifact_key.project}/{query.artifa" + - "ct_tag.artifact_key.domain}/{query.artif" + - "act_tag.artifact_key.name}\022\226\002\n\017SearchArt" + - "ifacts\022).flyteidl.artifact.SearchArtifac" + - "tsRequest\032*.flyteidl.artifact.SearchArti" + - "factsResponse\"\253\001\202\323\344\223\002\244\001\022Y/artifacts/api/" + - "v1/search/{artifact_key.project}/{artifa" + - "ct_key.domain}/{artifact_key.name}ZG\022E/a" + - "rtifacts/api/v1/search/{artifact_key.pro" + - "ject}/{artifact_key.domain}\022d\n\rCreateTri" + - "gger\022\'.flyteidl.artifact.CreateTriggerRe" + - "quest\032(.flyteidl.artifact.CreateTriggerR" + - "esponse\"\000\022\237\001\n\021DeactivateTrigger\022+.flytei" + - "dl.artifact.DeactivateTriggerRequest\032,.f" + - "lyteidl.artifact.DeactivateTriggerRespon" + - "se\"/\202\323\344\223\002)2$/artifacts/api/v1/trigger/de" + - "activate:\001*\022O\n\006AddTag\022 .flyteidl.artifac" + - "t.AddTagRequest\032!.flyteidl.artifact.AddT" + - "agResponse\"\000\022e\n\020RegisterProducer\022*.flyte" + - "idl.artifact.RegisterProducerRequest\032#.f" + - "lyteidl.artifact.RegisterResponse\"\000\022e\n\020R" + - "egisterConsumer\022*.flyteidl.artifact.Regi" + - "sterConsumerRequest\032#.flyteidl.artifact." + - "RegisterResponse\"\000\022m\n\022SetExecutionInputs" + - "\022).flyteidl.artifact.ExecutionInputsRequ" + - "est\032*.flyteidl.artifact.ExecutionInputsR" + - "esponse\"\000\022\330\001\n\022FindByWorkflowExec\022,.flyte" + - "idl.artifact.FindByWorkflowExecRequest\032*" + - ".flyteidl.artifact.SearchArtifactsRespon" + - "se\"h\202\323\344\223\002b\022`/artifacts/api/v1/search/exe" + - "cution/{exec_id.project}/{exec_id.domain" + - "}/{exec_id.name}/{direction}B@Z>github.c" + - "om/flyteorg/flyte/flyteidl/gen/pb-go/fly" + - "teidl/artifactb\006proto3" + "actID\"\031\n\027ExecutionInputsResponse\"B\n\020List" + + "UsageRequest\022.\n\013artifact_id\030\001 \001(\0132\031.flyt" + + "eidl.core.ArtifactID\"S\n\021ListUsageRespons" + + "e\022>\n\nexecutions\030\001 \003(\0132*.flyteidl.core.Wo" + + "rkflowExecutionIdentifier2\361\020\n\020ArtifactRe" + + "gistry\022g\n\016CreateArtifact\022(.flyteidl.arti" + + "fact.CreateArtifactRequest\032).flyteidl.ar" + + "tifact.CreateArtifactResponse\"\000\022\361\004\n\013GetA" + + "rtifact\022%.flyteidl.artifact.GetArtifactR" + + "equest\032&.flyteidl.artifact.GetArtifactRe" + + "sponse\"\222\004\202\323\344\223\002\213\004\022\033/artifacts/api/v1/arti" + + "factsZ\263\001\022\260\001/artifacts/api/v1/artifact/id" + + "/{query.artifact_id.artifact_key.project" + + "}/{query.artifact_id.artifact_key.domain" + + "}/{query.artifact_id.artifact_key.name}/" + + "{query.artifact_id.version}Z\227\001\022\224\001/artifa" + + "cts/api/v1/artifact/id/{query.artifact_i" + + "d.artifact_key.project}/{query.artifact_" + + "id.artifact_key.domain}/{query.artifact_" + + "id.artifact_key.name}Z\233\001\022\230\001/artifacts/ap" + + "i/v1/artifact/tag/{query.artifact_tag.ar" + + "tifact_key.project}/{query.artifact_tag." + + "artifact_key.domain}/{query.artifact_tag" + + ".artifact_key.name}\022\226\002\n\017SearchArtifacts\022" + + ").flyteidl.artifact.SearchArtifactsReque" + + "st\032*.flyteidl.artifact.SearchArtifactsRe" + + "sponse\"\253\001\202\323\344\223\002\244\001\022Y/artifacts/api/v1/sear" + + "ch/{artifact_key.project}/{artifact_key." + + "domain}/{artifact_key.name}ZG\022E/artifact" + + "s/api/v1/search/{artifact_key.project}/{" + + "artifact_key.domain}\022d\n\rCreateTrigger\022\'." + + "flyteidl.artifact.CreateTriggerRequest\032(" + + ".flyteidl.artifact.CreateTriggerResponse" + + "\"\000\022\237\001\n\021DeactivateTrigger\022+.flyteidl.arti" + + "fact.DeactivateTriggerRequest\032,.flyteidl" + + ".artifact.DeactivateTriggerResponse\"/\202\323\344" + + "\223\002)2$/artifacts/api/v1/trigger/deactivat" + + "e:\001*\022O\n\006AddTag\022 .flyteidl.artifact.AddTa" + + "gRequest\032!.flyteidl.artifact.AddTagRespo" + + "nse\"\000\022e\n\020RegisterProducer\022*.flyteidl.art" + + "ifact.RegisterProducerRequest\032#.flyteidl" + + ".artifact.RegisterResponse\"\000\022e\n\020Register" + + "Consumer\022*.flyteidl.artifact.RegisterCon" + + "sumerRequest\032#.flyteidl.artifact.Registe" + + "rResponse\"\000\022m\n\022SetExecutionInputs\022).flyt" + + "eidl.artifact.ExecutionInputsRequest\032*.f" + + "lyteidl.artifact.ExecutionInputsResponse" + + "\"\000\022\330\001\n\022FindByWorkflowExec\022,.flyteidl.art" + + "ifact.FindByWorkflowExecRequest\032*.flytei" + + "dl.artifact.SearchArtifactsResponse\"h\202\323\344" + + "\223\002b\022`/artifacts/api/v1/search/execution/" + + "{exec_id.project}/{exec_id.domain}/{exec" + + "_id.name}/{direction}\022\365\001\n\tListUsage\022#.fl" + + "yteidl.artifact.ListUsageRequest\032$.flyte" + + "idl.artifact.ListUsageResponse\"\234\001\202\323\344\223\002\225\001" + + "\022\222\001/artifacts/api/v1/usage/{artifact_id." + + "artifact_key.project}/{artifact_id.artif" + + "act_key.domain}/{artifact_id.artifact_ke" + + "y.name}/{artifact_id.version}B@Z>github." + + "com/flyteorg/flyte/flyteidl/gen/pb-go/fl" + + "yteidl/artifactb\006proto3" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { @@ -20240,6 +21647,18 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors( com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_flyteidl_artifact_ExecutionInputsResponse_descriptor, new java.lang.String[] { }); + internal_static_flyteidl_artifact_ListUsageRequest_descriptor = + getDescriptor().getMessageTypes().get(24); + internal_static_flyteidl_artifact_ListUsageRequest_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_flyteidl_artifact_ListUsageRequest_descriptor, + new java.lang.String[] { "ArtifactId", }); + internal_static_flyteidl_artifact_ListUsageResponse_descriptor = + getDescriptor().getMessageTypes().get(25); + internal_static_flyteidl_artifact_ListUsageResponse_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_flyteidl_artifact_ListUsageResponse_descriptor, + new java.lang.String[] { "Executions", }); com.google.protobuf.ExtensionRegistry registry = com.google.protobuf.ExtensionRegistry.newInstance(); registry.add(com.google.api.AnnotationsProto.http); diff --git a/flyteidl/gen/pb_python/flyteidl/artifact/artifacts_pb2.py b/flyteidl/gen/pb_python/flyteidl/artifact/artifacts_pb2.py index 3cded1be54..cc5c3dc55f 100644 --- a/flyteidl/gen/pb_python/flyteidl/artifact/artifacts_pb2.py +++ b/flyteidl/gen/pb_python/flyteidl/artifact/artifacts_pb2.py @@ -22,7 +22,7 @@ from flyteidl.event import cloudevents_pb2 as flyteidl_dot_event_dot_cloudevents__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!flyteidl/artifact/artifacts.proto\x12\x11\x66lyteidl.artifact\x1a\x19google/protobuf/any.proto\x1a\x1cgoogle/api/annotations.proto\x1a flyteidl/admin/launch_plan.proto\x1a\x1c\x66lyteidl/core/literals.proto\x1a\x19\x66lyteidl/core/types.proto\x1a\x1e\x66lyteidl/core/identifier.proto\x1a\x1f\x66lyteidl/core/artifact_id.proto\x1a\x1d\x66lyteidl/core/interface.proto\x1a flyteidl/event/cloudevents.proto\"\xca\x01\n\x08\x41rtifact\x12:\n\x0b\x61rtifact_id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.ArtifactIDR\nartifactId\x12\x33\n\x04spec\x18\x02 \x01(\x0b\x32\x1f.flyteidl.artifact.ArtifactSpecR\x04spec\x12\x12\n\x04tags\x18\x03 \x03(\tR\x04tags\x12\x39\n\x06source\x18\x04 \x01(\x0b\x32!.flyteidl.artifact.ArtifactSourceR\x06source\"\x8b\x03\n\x15\x43reateArtifactRequest\x12=\n\x0c\x61rtifact_key\x18\x01 \x01(\x0b\x32\x1a.flyteidl.core.ArtifactKeyR\x0b\x61rtifactKey\x12\x18\n\x07version\x18\x03 \x01(\tR\x07version\x12\x33\n\x04spec\x18\x02 \x01(\x0b\x32\x1f.flyteidl.artifact.ArtifactSpecR\x04spec\x12X\n\npartitions\x18\x04 \x03(\x0b\x32\x38.flyteidl.artifact.CreateArtifactRequest.PartitionsEntryR\npartitions\x12\x10\n\x03tag\x18\x05 \x01(\tR\x03tag\x12\x39\n\x06source\x18\x06 \x01(\x0b\x32!.flyteidl.artifact.ArtifactSourceR\x06source\x1a=\n\x0fPartitionsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\xfb\x01\n\x0e\x41rtifactSource\x12Y\n\x12workflow_execution\x18\x01 \x01(\x0b\x32*.flyteidl.core.WorkflowExecutionIdentifierR\x11workflowExecution\x12\x17\n\x07node_id\x18\x02 \x01(\tR\x06nodeId\x12\x32\n\x07task_id\x18\x03 \x01(\x0b\x32\x19.flyteidl.core.IdentifierR\x06taskId\x12#\n\rretry_attempt\x18\x04 \x01(\rR\x0cretryAttempt\x12\x1c\n\tprincipal\x18\x05 \x01(\tR\tprincipal\"\xf9\x01\n\x0c\x41rtifactSpec\x12,\n\x05value\x18\x01 \x01(\x0b\x32\x16.flyteidl.core.LiteralR\x05value\x12.\n\x04type\x18\x02 \x01(\x0b\x32\x1a.flyteidl.core.LiteralTypeR\x04type\x12+\n\x11short_description\x18\x03 \x01(\tR\x10shortDescription\x12\x39\n\ruser_metadata\x18\x04 \x01(\x0b\x32\x14.google.protobuf.AnyR\x0cuserMetadata\x12#\n\rmetadata_type\x18\x05 \x01(\tR\x0cmetadataType\"Q\n\x16\x43reateArtifactResponse\x12\x37\n\x08\x61rtifact\x18\x01 \x01(\x0b\x32\x1b.flyteidl.artifact.ArtifactR\x08\x61rtifact\"b\n\x12GetArtifactRequest\x12\x32\n\x05query\x18\x01 \x01(\x0b\x32\x1c.flyteidl.core.ArtifactQueryR\x05query\x12\x18\n\x07\x64\x65tails\x18\x02 \x01(\x08R\x07\x64\x65tails\"N\n\x13GetArtifactResponse\x12\x37\n\x08\x61rtifact\x18\x01 \x01(\x0b\x32\x1b.flyteidl.artifact.ArtifactR\x08\x61rtifact\"`\n\rSearchOptions\x12+\n\x11strict_partitions\x18\x01 \x01(\x08R\x10strictPartitions\x12\"\n\rlatest_by_key\x18\x02 \x01(\x08R\x0blatestByKey\"\xb2\x02\n\x16SearchArtifactsRequest\x12=\n\x0c\x61rtifact_key\x18\x01 \x01(\x0b\x32\x1a.flyteidl.core.ArtifactKeyR\x0b\x61rtifactKey\x12\x39\n\npartitions\x18\x02 \x01(\x0b\x32\x19.flyteidl.core.PartitionsR\npartitions\x12\x1c\n\tprincipal\x18\x03 \x01(\tR\tprincipal\x12\x18\n\x07version\x18\x04 \x01(\tR\x07version\x12:\n\x07options\x18\x05 \x01(\x0b\x32 .flyteidl.artifact.SearchOptionsR\x07options\x12\x14\n\x05token\x18\x06 \x01(\tR\x05token\x12\x14\n\x05limit\x18\x07 \x01(\x05R\x05limit\"j\n\x17SearchArtifactsResponse\x12\x39\n\tartifacts\x18\x01 \x03(\x0b\x32\x1b.flyteidl.artifact.ArtifactR\tartifacts\x12\x14\n\x05token\x18\x02 \x01(\tR\x05token\"\xdc\x01\n\x19\x46indByWorkflowExecRequest\x12\x43\n\x07\x65xec_id\x18\x01 \x01(\x0b\x32*.flyteidl.core.WorkflowExecutionIdentifierR\x06\x65xecId\x12T\n\tdirection\x18\x02 \x01(\x0e\x32\x36.flyteidl.artifact.FindByWorkflowExecRequest.DirectionR\tdirection\"$\n\tDirection\x12\n\n\x06INPUTS\x10\x00\x12\x0b\n\x07OUTPUTS\x10\x01\"\x7f\n\rAddTagRequest\x12:\n\x0b\x61rtifact_id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.ArtifactIDR\nartifactId\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value\x12\x1c\n\toverwrite\x18\x03 \x01(\x08R\toverwrite\"\x10\n\x0e\x41\x64\x64TagResponse\"b\n\x14\x43reateTriggerRequest\x12J\n\x13trigger_launch_plan\x18\x01 \x01(\x0b\x32\x1a.flyteidl.admin.LaunchPlanR\x11triggerLaunchPlan\"\x17\n\x15\x43reateTriggerResponse\"T\n\x18\x44\x65\x61\x63tivateTriggerRequest\x12\x38\n\ntrigger_id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.IdentifierR\ttriggerId\"\x1b\n\x19\x44\x65\x61\x63tivateTriggerResponse\"\x80\x01\n\x10\x41rtifactProducer\x12\x36\n\tentity_id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.IdentifierR\x08\x65ntityId\x12\x34\n\x07outputs\x18\x02 \x01(\x0b\x32\x1a.flyteidl.core.VariableMapR\x07outputs\"\\\n\x17RegisterProducerRequest\x12\x41\n\tproducers\x18\x01 \x03(\x0b\x32#.flyteidl.artifact.ArtifactProducerR\tproducers\"\x7f\n\x10\x41rtifactConsumer\x12\x36\n\tentity_id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.IdentifierR\x08\x65ntityId\x12\x33\n\x06inputs\x18\x02 \x01(\x0b\x32\x1b.flyteidl.core.ParameterMapR\x06inputs\"\\\n\x17RegisterConsumerRequest\x12\x41\n\tconsumers\x18\x01 \x03(\x0b\x32#.flyteidl.artifact.ArtifactConsumerR\tconsumers\"\x12\n\x10RegisterResponse\"\x9a\x01\n\x16\x45xecutionInputsRequest\x12M\n\x0c\x65xecution_id\x18\x01 \x01(\x0b\x32*.flyteidl.core.WorkflowExecutionIdentifierR\x0b\x65xecutionId\x12\x31\n\x06inputs\x18\x02 \x03(\x0b\x32\x19.flyteidl.core.ArtifactIDR\x06inputs\"\x19\n\x17\x45xecutionInputsResponse2\xf9\x0e\n\x10\x41rtifactRegistry\x12g\n\x0e\x43reateArtifact\x12(.flyteidl.artifact.CreateArtifactRequest\x1a).flyteidl.artifact.CreateArtifactResponse\"\x00\x12\xf1\x04\n\x0bGetArtifact\x12%.flyteidl.artifact.GetArtifactRequest\x1a&.flyteidl.artifact.GetArtifactResponse\"\x92\x04\x82\xd3\xe4\x93\x02\x8b\x04Z\xb3\x01\x12\xb0\x01/artifacts/api/v1/artifact/id/{query.artifact_id.artifact_key.project}/{query.artifact_id.artifact_key.domain}/{query.artifact_id.artifact_key.name}/{query.artifact_id.version}Z\x97\x01\x12\x94\x01/artifacts/api/v1/artifact/id/{query.artifact_id.artifact_key.project}/{query.artifact_id.artifact_key.domain}/{query.artifact_id.artifact_key.name}Z\x9b\x01\x12\x98\x01/artifacts/api/v1/artifact/tag/{query.artifact_tag.artifact_key.project}/{query.artifact_tag.artifact_key.domain}/{query.artifact_tag.artifact_key.name}\x12\x1b/artifacts/api/v1/artifacts\x12\x96\x02\n\x0fSearchArtifacts\x12).flyteidl.artifact.SearchArtifactsRequest\x1a*.flyteidl.artifact.SearchArtifactsResponse\"\xab\x01\x82\xd3\xe4\x93\x02\xa4\x01ZG\x12\x45/artifacts/api/v1/search/{artifact_key.project}/{artifact_key.domain}\x12Y/artifacts/api/v1/search/{artifact_key.project}/{artifact_key.domain}/{artifact_key.name}\x12\x64\n\rCreateTrigger\x12\'.flyteidl.artifact.CreateTriggerRequest\x1a(.flyteidl.artifact.CreateTriggerResponse\"\x00\x12\x9f\x01\n\x11\x44\x65\x61\x63tivateTrigger\x12+.flyteidl.artifact.DeactivateTriggerRequest\x1a,.flyteidl.artifact.DeactivateTriggerResponse\"/\x82\xd3\xe4\x93\x02):\x01*2$/artifacts/api/v1/trigger/deactivate\x12O\n\x06\x41\x64\x64Tag\x12 .flyteidl.artifact.AddTagRequest\x1a!.flyteidl.artifact.AddTagResponse\"\x00\x12\x65\n\x10RegisterProducer\x12*.flyteidl.artifact.RegisterProducerRequest\x1a#.flyteidl.artifact.RegisterResponse\"\x00\x12\x65\n\x10RegisterConsumer\x12*.flyteidl.artifact.RegisterConsumerRequest\x1a#.flyteidl.artifact.RegisterResponse\"\x00\x12m\n\x12SetExecutionInputs\x12).flyteidl.artifact.ExecutionInputsRequest\x1a*.flyteidl.artifact.ExecutionInputsResponse\"\x00\x12\xd8\x01\n\x12\x46indByWorkflowExec\x12,.flyteidl.artifact.FindByWorkflowExecRequest\x1a*.flyteidl.artifact.SearchArtifactsResponse\"h\x82\xd3\xe4\x93\x02\x62\x12`/artifacts/api/v1/search/execution/{exec_id.project}/{exec_id.domain}/{exec_id.name}/{direction}B\xcc\x01\n\x15\x63om.flyteidl.artifactB\x0e\x41rtifactsProtoP\x01Z>github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/artifact\xa2\x02\x03\x46\x41X\xaa\x02\x11\x46lyteidl.Artifact\xca\x02\x11\x46lyteidl\\Artifact\xe2\x02\x1d\x46lyteidl\\Artifact\\GPBMetadata\xea\x02\x12\x46lyteidl::Artifactb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!flyteidl/artifact/artifacts.proto\x12\x11\x66lyteidl.artifact\x1a\x19google/protobuf/any.proto\x1a\x1cgoogle/api/annotations.proto\x1a flyteidl/admin/launch_plan.proto\x1a\x1c\x66lyteidl/core/literals.proto\x1a\x19\x66lyteidl/core/types.proto\x1a\x1e\x66lyteidl/core/identifier.proto\x1a\x1f\x66lyteidl/core/artifact_id.proto\x1a\x1d\x66lyteidl/core/interface.proto\x1a flyteidl/event/cloudevents.proto\"\xca\x01\n\x08\x41rtifact\x12:\n\x0b\x61rtifact_id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.ArtifactIDR\nartifactId\x12\x33\n\x04spec\x18\x02 \x01(\x0b\x32\x1f.flyteidl.artifact.ArtifactSpecR\x04spec\x12\x12\n\x04tags\x18\x03 \x03(\tR\x04tags\x12\x39\n\x06source\x18\x04 \x01(\x0b\x32!.flyteidl.artifact.ArtifactSourceR\x06source\"\x8b\x03\n\x15\x43reateArtifactRequest\x12=\n\x0c\x61rtifact_key\x18\x01 \x01(\x0b\x32\x1a.flyteidl.core.ArtifactKeyR\x0b\x61rtifactKey\x12\x18\n\x07version\x18\x03 \x01(\tR\x07version\x12\x33\n\x04spec\x18\x02 \x01(\x0b\x32\x1f.flyteidl.artifact.ArtifactSpecR\x04spec\x12X\n\npartitions\x18\x04 \x03(\x0b\x32\x38.flyteidl.artifact.CreateArtifactRequest.PartitionsEntryR\npartitions\x12\x10\n\x03tag\x18\x05 \x01(\tR\x03tag\x12\x39\n\x06source\x18\x06 \x01(\x0b\x32!.flyteidl.artifact.ArtifactSourceR\x06source\x1a=\n\x0fPartitionsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\xfb\x01\n\x0e\x41rtifactSource\x12Y\n\x12workflow_execution\x18\x01 \x01(\x0b\x32*.flyteidl.core.WorkflowExecutionIdentifierR\x11workflowExecution\x12\x17\n\x07node_id\x18\x02 \x01(\tR\x06nodeId\x12\x32\n\x07task_id\x18\x03 \x01(\x0b\x32\x19.flyteidl.core.IdentifierR\x06taskId\x12#\n\rretry_attempt\x18\x04 \x01(\rR\x0cretryAttempt\x12\x1c\n\tprincipal\x18\x05 \x01(\tR\tprincipal\"\xf9\x01\n\x0c\x41rtifactSpec\x12,\n\x05value\x18\x01 \x01(\x0b\x32\x16.flyteidl.core.LiteralR\x05value\x12.\n\x04type\x18\x02 \x01(\x0b\x32\x1a.flyteidl.core.LiteralTypeR\x04type\x12+\n\x11short_description\x18\x03 \x01(\tR\x10shortDescription\x12\x39\n\ruser_metadata\x18\x04 \x01(\x0b\x32\x14.google.protobuf.AnyR\x0cuserMetadata\x12#\n\rmetadata_type\x18\x05 \x01(\tR\x0cmetadataType\"Q\n\x16\x43reateArtifactResponse\x12\x37\n\x08\x61rtifact\x18\x01 \x01(\x0b\x32\x1b.flyteidl.artifact.ArtifactR\x08\x61rtifact\"b\n\x12GetArtifactRequest\x12\x32\n\x05query\x18\x01 \x01(\x0b\x32\x1c.flyteidl.core.ArtifactQueryR\x05query\x12\x18\n\x07\x64\x65tails\x18\x02 \x01(\x08R\x07\x64\x65tails\"N\n\x13GetArtifactResponse\x12\x37\n\x08\x61rtifact\x18\x01 \x01(\x0b\x32\x1b.flyteidl.artifact.ArtifactR\x08\x61rtifact\"`\n\rSearchOptions\x12+\n\x11strict_partitions\x18\x01 \x01(\x08R\x10strictPartitions\x12\"\n\rlatest_by_key\x18\x02 \x01(\x08R\x0blatestByKey\"\xb2\x02\n\x16SearchArtifactsRequest\x12=\n\x0c\x61rtifact_key\x18\x01 \x01(\x0b\x32\x1a.flyteidl.core.ArtifactKeyR\x0b\x61rtifactKey\x12\x39\n\npartitions\x18\x02 \x01(\x0b\x32\x19.flyteidl.core.PartitionsR\npartitions\x12\x1c\n\tprincipal\x18\x03 \x01(\tR\tprincipal\x12\x18\n\x07version\x18\x04 \x01(\tR\x07version\x12:\n\x07options\x18\x05 \x01(\x0b\x32 .flyteidl.artifact.SearchOptionsR\x07options\x12\x14\n\x05token\x18\x06 \x01(\tR\x05token\x12\x14\n\x05limit\x18\x07 \x01(\x05R\x05limit\"j\n\x17SearchArtifactsResponse\x12\x39\n\tartifacts\x18\x01 \x03(\x0b\x32\x1b.flyteidl.artifact.ArtifactR\tartifacts\x12\x14\n\x05token\x18\x02 \x01(\tR\x05token\"\xdc\x01\n\x19\x46indByWorkflowExecRequest\x12\x43\n\x07\x65xec_id\x18\x01 \x01(\x0b\x32*.flyteidl.core.WorkflowExecutionIdentifierR\x06\x65xecId\x12T\n\tdirection\x18\x02 \x01(\x0e\x32\x36.flyteidl.artifact.FindByWorkflowExecRequest.DirectionR\tdirection\"$\n\tDirection\x12\n\n\x06INPUTS\x10\x00\x12\x0b\n\x07OUTPUTS\x10\x01\"\x7f\n\rAddTagRequest\x12:\n\x0b\x61rtifact_id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.ArtifactIDR\nartifactId\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value\x12\x1c\n\toverwrite\x18\x03 \x01(\x08R\toverwrite\"\x10\n\x0e\x41\x64\x64TagResponse\"b\n\x14\x43reateTriggerRequest\x12J\n\x13trigger_launch_plan\x18\x01 \x01(\x0b\x32\x1a.flyteidl.admin.LaunchPlanR\x11triggerLaunchPlan\"\x17\n\x15\x43reateTriggerResponse\"T\n\x18\x44\x65\x61\x63tivateTriggerRequest\x12\x38\n\ntrigger_id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.IdentifierR\ttriggerId\"\x1b\n\x19\x44\x65\x61\x63tivateTriggerResponse\"\x80\x01\n\x10\x41rtifactProducer\x12\x36\n\tentity_id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.IdentifierR\x08\x65ntityId\x12\x34\n\x07outputs\x18\x02 \x01(\x0b\x32\x1a.flyteidl.core.VariableMapR\x07outputs\"\\\n\x17RegisterProducerRequest\x12\x41\n\tproducers\x18\x01 \x03(\x0b\x32#.flyteidl.artifact.ArtifactProducerR\tproducers\"\x7f\n\x10\x41rtifactConsumer\x12\x36\n\tentity_id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.IdentifierR\x08\x65ntityId\x12\x33\n\x06inputs\x18\x02 \x01(\x0b\x32\x1b.flyteidl.core.ParameterMapR\x06inputs\"\\\n\x17RegisterConsumerRequest\x12\x41\n\tconsumers\x18\x01 \x03(\x0b\x32#.flyteidl.artifact.ArtifactConsumerR\tconsumers\"\x12\n\x10RegisterResponse\"\x9a\x01\n\x16\x45xecutionInputsRequest\x12M\n\x0c\x65xecution_id\x18\x01 \x01(\x0b\x32*.flyteidl.core.WorkflowExecutionIdentifierR\x0b\x65xecutionId\x12\x31\n\x06inputs\x18\x02 \x03(\x0b\x32\x19.flyteidl.core.ArtifactIDR\x06inputs\"\x19\n\x17\x45xecutionInputsResponse\"N\n\x10ListUsageRequest\x12:\n\x0b\x61rtifact_id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.ArtifactIDR\nartifactId\"_\n\x11ListUsageResponse\x12J\n\nexecutions\x18\x01 \x03(\x0b\x32*.flyteidl.core.WorkflowExecutionIdentifierR\nexecutions2\xf1\x10\n\x10\x41rtifactRegistry\x12g\n\x0e\x43reateArtifact\x12(.flyteidl.artifact.CreateArtifactRequest\x1a).flyteidl.artifact.CreateArtifactResponse\"\x00\x12\xf1\x04\n\x0bGetArtifact\x12%.flyteidl.artifact.GetArtifactRequest\x1a&.flyteidl.artifact.GetArtifactResponse\"\x92\x04\x82\xd3\xe4\x93\x02\x8b\x04Z\xb3\x01\x12\xb0\x01/artifacts/api/v1/artifact/id/{query.artifact_id.artifact_key.project}/{query.artifact_id.artifact_key.domain}/{query.artifact_id.artifact_key.name}/{query.artifact_id.version}Z\x97\x01\x12\x94\x01/artifacts/api/v1/artifact/id/{query.artifact_id.artifact_key.project}/{query.artifact_id.artifact_key.domain}/{query.artifact_id.artifact_key.name}Z\x9b\x01\x12\x98\x01/artifacts/api/v1/artifact/tag/{query.artifact_tag.artifact_key.project}/{query.artifact_tag.artifact_key.domain}/{query.artifact_tag.artifact_key.name}\x12\x1b/artifacts/api/v1/artifacts\x12\x96\x02\n\x0fSearchArtifacts\x12).flyteidl.artifact.SearchArtifactsRequest\x1a*.flyteidl.artifact.SearchArtifactsResponse\"\xab\x01\x82\xd3\xe4\x93\x02\xa4\x01ZG\x12\x45/artifacts/api/v1/search/{artifact_key.project}/{artifact_key.domain}\x12Y/artifacts/api/v1/search/{artifact_key.project}/{artifact_key.domain}/{artifact_key.name}\x12\x64\n\rCreateTrigger\x12\'.flyteidl.artifact.CreateTriggerRequest\x1a(.flyteidl.artifact.CreateTriggerResponse\"\x00\x12\x9f\x01\n\x11\x44\x65\x61\x63tivateTrigger\x12+.flyteidl.artifact.DeactivateTriggerRequest\x1a,.flyteidl.artifact.DeactivateTriggerResponse\"/\x82\xd3\xe4\x93\x02):\x01*2$/artifacts/api/v1/trigger/deactivate\x12O\n\x06\x41\x64\x64Tag\x12 .flyteidl.artifact.AddTagRequest\x1a!.flyteidl.artifact.AddTagResponse\"\x00\x12\x65\n\x10RegisterProducer\x12*.flyteidl.artifact.RegisterProducerRequest\x1a#.flyteidl.artifact.RegisterResponse\"\x00\x12\x65\n\x10RegisterConsumer\x12*.flyteidl.artifact.RegisterConsumerRequest\x1a#.flyteidl.artifact.RegisterResponse\"\x00\x12m\n\x12SetExecutionInputs\x12).flyteidl.artifact.ExecutionInputsRequest\x1a*.flyteidl.artifact.ExecutionInputsResponse\"\x00\x12\xd8\x01\n\x12\x46indByWorkflowExec\x12,.flyteidl.artifact.FindByWorkflowExecRequest\x1a*.flyteidl.artifact.SearchArtifactsResponse\"h\x82\xd3\xe4\x93\x02\x62\x12`/artifacts/api/v1/search/execution/{exec_id.project}/{exec_id.domain}/{exec_id.name}/{direction}\x12\xf5\x01\n\tListUsage\x12#.flyteidl.artifact.ListUsageRequest\x1a$.flyteidl.artifact.ListUsageResponse\"\x9c\x01\x82\xd3\xe4\x93\x02\x95\x01\x12\x92\x01/artifacts/api/v1/usage/{artifact_id.artifact_key.project}/{artifact_id.artifact_key.domain}/{artifact_id.artifact_key.name}/{artifact_id.version}B\xcc\x01\n\x15\x63om.flyteidl.artifactB\x0e\x41rtifactsProtoP\x01Z>github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/artifact\xa2\x02\x03\x46\x41X\xaa\x02\x11\x46lyteidl.Artifact\xca\x02\x11\x46lyteidl\\Artifact\xe2\x02\x1d\x46lyteidl\\Artifact\\GPBMetadata\xea\x02\x12\x46lyteidl::Artifactb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -41,6 +41,8 @@ _ARTIFACTREGISTRY.methods_by_name['DeactivateTrigger']._serialized_options = b'\202\323\344\223\002):\001*2$/artifacts/api/v1/trigger/deactivate' _ARTIFACTREGISTRY.methods_by_name['FindByWorkflowExec']._options = None _ARTIFACTREGISTRY.methods_by_name['FindByWorkflowExec']._serialized_options = b'\202\323\344\223\002b\022`/artifacts/api/v1/search/execution/{exec_id.project}/{exec_id.domain}/{exec_id.name}/{direction}' + _ARTIFACTREGISTRY.methods_by_name['ListUsage']._options = None + _ARTIFACTREGISTRY.methods_by_name['ListUsage']._serialized_options = b'\202\323\344\223\002\225\001\022\222\001/artifacts/api/v1/usage/{artifact_id.artifact_key.project}/{artifact_id.artifact_key.domain}/{artifact_id.artifact_key.name}/{artifact_id.version}' _globals['_ARTIFACT']._serialized_start=335 _globals['_ARTIFACT']._serialized_end=537 _globals['_CREATEARTIFACTREQUEST']._serialized_start=540 @@ -93,6 +95,10 @@ _globals['_EXECUTIONINPUTSREQUEST']._serialized_end=3454 _globals['_EXECUTIONINPUTSRESPONSE']._serialized_start=3456 _globals['_EXECUTIONINPUTSRESPONSE']._serialized_end=3481 - _globals['_ARTIFACTREGISTRY']._serialized_start=3484 - _globals['_ARTIFACTREGISTRY']._serialized_end=5397 + _globals['_LISTUSAGEREQUEST']._serialized_start=3483 + _globals['_LISTUSAGEREQUEST']._serialized_end=3561 + _globals['_LISTUSAGERESPONSE']._serialized_start=3563 + _globals['_LISTUSAGERESPONSE']._serialized_end=3658 + _globals['_ARTIFACTREGISTRY']._serialized_start=3661 + _globals['_ARTIFACTREGISTRY']._serialized_end=5822 # @@protoc_insertion_point(module_scope) diff --git a/flyteidl/gen/pb_python/flyteidl/artifact/artifacts_pb2.pyi b/flyteidl/gen/pb_python/flyteidl/artifact/artifacts_pb2.pyi index 61c28f21d4..92ba6c0904 100644 --- a/flyteidl/gen/pb_python/flyteidl/artifact/artifacts_pb2.pyi +++ b/flyteidl/gen/pb_python/flyteidl/artifact/artifacts_pb2.pyi @@ -223,3 +223,15 @@ class ExecutionInputsRequest(_message.Message): class ExecutionInputsResponse(_message.Message): __slots__ = [] def __init__(self) -> None: ... + +class ListUsageRequest(_message.Message): + __slots__ = ["artifact_id"] + ARTIFACT_ID_FIELD_NUMBER: _ClassVar[int] + artifact_id: _artifact_id_pb2.ArtifactID + def __init__(self, artifact_id: _Optional[_Union[_artifact_id_pb2.ArtifactID, _Mapping]] = ...) -> None: ... + +class ListUsageResponse(_message.Message): + __slots__ = ["executions"] + EXECUTIONS_FIELD_NUMBER: _ClassVar[int] + executions: _containers.RepeatedCompositeFieldContainer[_identifier_pb2.WorkflowExecutionIdentifier] + def __init__(self, executions: _Optional[_Iterable[_Union[_identifier_pb2.WorkflowExecutionIdentifier, _Mapping]]] = ...) -> None: ... diff --git a/flyteidl/gen/pb_python/flyteidl/artifact/artifacts_pb2_grpc.py b/flyteidl/gen/pb_python/flyteidl/artifact/artifacts_pb2_grpc.py index 95ddd8107e..661103389b 100644 --- a/flyteidl/gen/pb_python/flyteidl/artifact/artifacts_pb2_grpc.py +++ b/flyteidl/gen/pb_python/flyteidl/artifact/artifacts_pb2_grpc.py @@ -64,6 +64,11 @@ def __init__(self, channel): request_serializer=flyteidl_dot_artifact_dot_artifacts__pb2.FindByWorkflowExecRequest.SerializeToString, response_deserializer=flyteidl_dot_artifact_dot_artifacts__pb2.SearchArtifactsResponse.FromString, ) + self.ListUsage = channel.unary_unary( + '/flyteidl.artifact.ArtifactRegistry/ListUsage', + request_serializer=flyteidl_dot_artifact_dot_artifacts__pb2.ListUsageRequest.SerializeToString, + response_deserializer=flyteidl_dot_artifact_dot_artifacts__pb2.ListUsageResponse.FromString, + ) class ArtifactRegistryServicer(object): @@ -129,6 +134,12 @@ def FindByWorkflowExec(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def ListUsage(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def add_ArtifactRegistryServicer_to_server(servicer, server): rpc_method_handlers = { @@ -182,6 +193,11 @@ def add_ArtifactRegistryServicer_to_server(servicer, server): request_deserializer=flyteidl_dot_artifact_dot_artifacts__pb2.FindByWorkflowExecRequest.FromString, response_serializer=flyteidl_dot_artifact_dot_artifacts__pb2.SearchArtifactsResponse.SerializeToString, ), + 'ListUsage': grpc.unary_unary_rpc_method_handler( + servicer.ListUsage, + request_deserializer=flyteidl_dot_artifact_dot_artifacts__pb2.ListUsageRequest.FromString, + response_serializer=flyteidl_dot_artifact_dot_artifacts__pb2.ListUsageResponse.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( 'flyteidl.artifact.ArtifactRegistry', rpc_method_handlers) @@ -361,3 +377,20 @@ def FindByWorkflowExec(request, flyteidl_dot_artifact_dot_artifacts__pb2.SearchArtifactsResponse.FromString, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def ListUsage(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/flyteidl.artifact.ArtifactRegistry/ListUsage', + flyteidl_dot_artifact_dot_artifacts__pb2.ListUsageRequest.SerializeToString, + flyteidl_dot_artifact_dot_artifacts__pb2.ListUsageResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/flyteidl/gen/pb_rust/flyteidl.artifact.rs b/flyteidl/gen/pb_rust/flyteidl.artifact.rs index d35149b740..5423067bbd 100644 --- a/flyteidl/gen/pb_rust/flyteidl.artifact.rs +++ b/flyteidl/gen/pb_rust/flyteidl.artifact.rs @@ -245,4 +245,16 @@ pub struct ExecutionInputsRequest { #[derive(Clone, PartialEq, ::prost::Message)] pub struct ExecutionInputsResponse { } +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ListUsageRequest { + #[prost(message, optional, tag="1")] + pub artifact_id: ::core::option::Option, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ListUsageResponse { + #[prost(message, repeated, tag="1")] + pub executions: ::prost::alloc::vec::Vec, +} // @@protoc_insertion_point(module) diff --git a/flyteidl/protos/flyteidl/artifact/artifacts.proto b/flyteidl/protos/flyteidl/artifact/artifacts.proto index aea350c6cf..eda28944f5 100644 --- a/flyteidl/protos/flyteidl/artifact/artifacts.proto +++ b/flyteidl/protos/flyteidl/artifact/artifacts.proto @@ -184,6 +184,14 @@ message ExecutionInputsRequest { message ExecutionInputsResponse {} +message ListUsageRequest { + core.ArtifactID artifact_id = 1; +} + +message ListUsageResponse { + repeated core.WorkflowExecutionIdentifier executions = 1; +} + service ArtifactRegistry { rpc CreateArtifact (CreateArtifactRequest) returns (CreateArtifactResponse) {} @@ -226,4 +234,9 @@ service ArtifactRegistry { }; } + rpc ListUsage (ListUsageRequest) returns (ListUsageResponse) { + option (google.api.http) = { + get: "/artifacts/api/v1/usage/{artifact_id.artifact_key.project}/{artifact_id.artifact_key.domain}/{artifact_id.artifact_key.name}/{artifact_id.version}" + }; + } } From c8351beb54406bb136de5d83ae510dc7496957db Mon Sep 17 00:00:00 2001 From: Niels Bantilan Date: Fri, 12 Jan 2024 11:18:03 -0500 Subject: [PATCH 07/30] monodocs uses flytekit/flytectl index rst file (#4720) Signed-off-by: Niels Bantilan --- docs/_ext/import_projects.py | 10 ++-- docs/conf.py | 4 +- docs/flytectl_overview.rst | 107 ----------------------------------- docs/index.md | 12 ++-- docs/reference_flytectl.md | 11 ---- docs/reference_flytekit.md | 20 ------- 6 files changed, 15 insertions(+), 149 deletions(-) delete mode 100644 docs/flytectl_overview.rst delete mode 100644 docs/reference_flytectl.md delete mode 100644 docs/reference_flytekit.md diff --git a/docs/_ext/import_projects.py b/docs/_ext/import_projects.py index df223ee760..1e32aa0d8c 100644 --- a/docs/_ext/import_projects.py +++ b/docs/_ext/import_projects.py @@ -26,6 +26,7 @@ class ImportProjectsConfig: flytekit_api_dir: str source_regex_mapping: dict = field(default_factory=dict) list_table_toc: List[str] = field(default_factory=list) + dev_build: bool = False @dataclass @@ -104,7 +105,7 @@ def update_sys_path_for_flytekit(import_project_config: ImportProjectsConfig): def update_html_context(project: Project, tag: str, commit: str, config: Config): - tag_url = f"{project.source}/releases/tag/{tag}" + tag_url = "#" if tag == "dev" else f"{project.source}/releases/tag/{tag}" commit_url = f"{project.source}/tree/{commit}" config.html_context[f"{project.name}_tag"] = tag @@ -152,9 +153,10 @@ def import_projects(app: Sphinx, config: Config): [t for t in repo.tags if re.match(VERSION_PATTERN, t.name)], key=lambda t: t.commit.committed_datetime ) - if not tags: - # If tags don't exist just use the current commit. This occurs - # when the git repo is a shallow clone. + if not tags or import_projects_config.dev_build: + # If dev_build is specified or the tags don't exist just use the + # current commit. This occurs when the git repo is a shallow + # clone. tag_str = "dev" commit = str(repo.head.commit)[:7] else: diff --git a/docs/conf.py b/docs/conf.py index ed9df55433..05651bf483 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -311,7 +311,7 @@ # from other repos. REPLACE_PATTERNS = { r"": r"", - r"": r"", + r"": r"", INTERSPHINX_REFS_PATTERN: INTERSPHINX_REFS_REPLACE, r"": r"", @@ -337,6 +337,7 @@ "flytesnacks/tutorials", "flytesnacks/integrations", ], + "dev_build": bool(int(os.environ.get("MONODOCS_DEV_BUILD", 1))), } # Define these environment variables to use local copies of the projects. This @@ -444,6 +445,7 @@ def filter(self, record: logging.LogRecord) -> bool: 'Error with CSV data in "csv-table" directive', "Definition list ends without a blank line", "autodoc: failed to import module 'awssagemaker' from module 'flytekitplugins'", + "Enumerated list ends without a blank line", ) if msg.strip().startswith(filter_out): diff --git a/docs/flytectl_overview.rst b/docs/flytectl_overview.rst deleted file mode 100644 index a6d104b08f..0000000000 --- a/docs/flytectl_overview.rst +++ /dev/null @@ -1,107 +0,0 @@ -.. flytectl doc - -#################################################### -Flytectl: The Official Flyte Command-line Interface -#################################################### - -Overview -========= -This video will take you on a tour of Flytectl - how to install and configure it, as well as how to use the Verbs and Nouns sections on the left hand side menu. Detailed information can be found in the sections below the video. - -.. youtube:: cV8ezYnBANE - - -Installation -============ - -Flytectl is a Golang binary that can be installed on any platform supported by Golang. - -.. tabbed:: OSX - - .. prompt:: bash $ - - brew install flyteorg/homebrew-tap/flytectl - - *Upgrade* existing installation using the following command: - - .. prompt:: bash $ - - flytectl upgrade - -.. tabbed:: Other Operating systems - - .. prompt:: bash $ - - curl -sL https://ctl.flyte.org/install | bash - - *Upgrade* existing installation using the following command: - - .. prompt:: bash $ - - flytectl upgrade - -**Test** if Flytectl is installed correctly (your Flytectl version should be > 0.2.0) using the following command: - -.. prompt:: bash $ - - flytectl version - -Configuration -============= - -Flytectl allows you to communicate with FlyteAdmin using a YAML file or by passing every configuration value -on the command-line. The following configuration can be used for the setup: - -Basic Configuration --------------------- - -The full list of available configurable options can be found by running ``flytectl --help``, or `here `__. - -.. NOTE:: - - Currently, the Project ``-p``, Domain ``-d``, and Output ``-o`` flags cannot be used in the config file. - -.. tabbed:: Local Flyte Sandbox - - Automatically configured for you by ``flytectl sandbox`` command. - - .. code-block:: yaml - - admin: - # For GRPC endpoints you might want to use dns:///flyte.myexample.com - endpoint: dns:///localhost:30081 - insecure: true # Set to false to enable TLS/SSL connection (not recommended except on local sandbox deployment). - authType: Pkce # authType: Pkce # if using authentication or just drop this. - -.. tabbed:: AWS Configuration - - .. code-block:: yaml - - admin: - # For GRPC endpoints you might want to use dns:///flyte.myexample.com - endpoint: dns:/// - authType: Pkce # authType: Pkce # if using authentication or just drop this. - insecure: true # insecure: True # Set to true if the endpoint isn't accessible through TLS/SSL connection (not recommended except on local sandbox deployment) - -.. tabbed:: GCS Configuration - - .. code-block:: yaml - - admin: - # For GRPC endpoints you might want to use dns:///flyte.myexample.com - endpoint: dns:/// - authType: Pkce # authType: Pkce # if using authentication or just drop this. - insecure: false # insecure: True # Set to true if the endpoint isn't accessible through TLS/SSL connection (not recommended except on local sandbox deployment) - -.. tabbed:: Others - - For other supported storage backends like Oracle, Azure, etc., refer to the configuration structure `here `__. - - Place the config file in ``$HOME/.flyte`` directory with the name config.yaml. - This file is typically searched in: - - * ``$HOME/.flyte`` - * currDir from where you run flytectl - * ``/etc/flyte/config`` - - You can also pass the file name in the command line using ``--config ``. diff --git a/docs/index.md b/docs/index.md index c2bf0f9087..40a0a745f7 100644 --- a/docs/index.md +++ b/docs/index.md @@ -57,7 +57,7 @@ learning and analytics. Created at [Lyft](https://www.lyft.com/) in collaboration with Spotify, Freenome, and many others, Flyte provides first-class support for -{doc}`Python `, +{doc}`Python `, [Java, and Scala](https://github.com/flyteorg/flytekit-java). Data Scientists and ML Engineers in the industry use Flyte to create: @@ -102,11 +102,11 @@ Below are the API reference to the different components of Flyte: :header-rows: 0 :widths: 20 30 -* - {doc}`Flytekit ` +* - {doc}`Flytekit ` - Flyte's official Python SDK. -* - {doc}`FlyteCTL ` +* - {doc}`FlyteCTL ` - Flyte's command-line interface for interacting with a Flyte cluster. -* - {doc}`FlyteIDL ` +* - {doc}`FlyteIDL ` - Flyte's core specification language. ``` @@ -172,8 +172,8 @@ reference/swagger :name: apitoc :hidden: -flytekit -flytectl +flytekit +flytectl flyteidl ``` diff --git a/docs/reference_flytectl.md b/docs/reference_flytectl.md deleted file mode 100644 index ad1ba6c7a5..0000000000 --- a/docs/reference_flytectl.md +++ /dev/null @@ -1,11 +0,0 @@ -# FlyteCTL API Reference - -```{toctree} -:maxdepth: 2 - -Overview -CLI Entrypoint -flytectl/verbs -flytectl/nouns -flytectl/contribute -``` diff --git a/docs/reference_flytekit.md b/docs/reference_flytekit.md deleted file mode 100644 index 97012a9429..0000000000 --- a/docs/reference_flytekit.md +++ /dev/null @@ -1,20 +0,0 @@ -# Flytekit API Reference - -```{toctree} -:maxdepth: 2 - -api/flytekit/design/index -api/flytekit/flytekit -api/flytekit/configuration -api/flytekit/remote -api/flytekit/clients -api/flytekit/testing -api/flytekit/extend -api/flytekit/deck -api/flytekit/plugins/index -api/flytekit/tasks.extend -api/flytekit/types.extend -api/flytekit/experimental -api/flytekit/pyflyte -api/flytekit/contributing -``` From 38d1833181ff44cedaccbc5c775341b7be3f354e Mon Sep 17 00:00:00 2001 From: Yee Hing Tong Date: Fri, 12 Jan 2024 10:20:12 -0800 Subject: [PATCH 08/30] Replace grpc gateway endpoints with post (#4717) Signed-off-by: Yee Hing Tong --- .../pb-cpp/flyteidl/artifact/artifacts.pb.cc | 92 ++- .../pb-go/flyteidl/artifact/artifacts.pb.go | 215 +++--- .../flyteidl/artifact/artifacts.pb.gw.go | 404 +---------- .../flyteidl/artifact/artifacts.swagger.json | 625 ++---------------- .../pb-java/flyteidl/artifact/Artifacts.java | 90 ++- .../flyteidl/artifact/artifacts_pb2.py | 8 +- .../protos/flyteidl/artifact/artifacts.proto | 10 +- 7 files changed, 252 insertions(+), 1192 deletions(-) diff --git a/flyteidl/gen/pb-cpp/flyteidl/artifact/artifacts.pb.cc b/flyteidl/gen/pb-cpp/flyteidl/artifact/artifacts.pb.cc index 94d3515bb0..300fa12f8f 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/artifact/artifacts.pb.cc +++ b/flyteidl/gen/pb-cpp/flyteidl/artifact/artifacts.pb.cc @@ -928,68 +928,52 @@ const char descriptor_table_protodef_flyteidl_2fartifact_2fartifacts_2eproto[] = "UsageRequest\022.\n\013artifact_id\030\001 \001(\0132\031.flyt" "eidl.core.ArtifactID\"S\n\021ListUsageRespons" "e\022>\n\nexecutions\030\001 \003(\0132*.flyteidl.core.Wo" - "rkflowExecutionIdentifier2\361\020\n\020ArtifactRe" + "rkflowExecutionIdentifier2\373\013\n\020ArtifactRe" "gistry\022g\n\016CreateArtifact\022(.flyteidl.arti" "fact.CreateArtifactRequest\032).flyteidl.ar" - "tifact.CreateArtifactResponse\"\000\022\361\004\n\013GetA" + "tifact.CreateArtifactResponse\"\000\022\204\001\n\013GetA" "rtifact\022%.flyteidl.artifact.GetArtifactR" "equest\032&.flyteidl.artifact.GetArtifactRe" - "sponse\"\222\004\202\323\344\223\002\213\004\022\033/artifacts/api/v1/arti" - "factsZ\263\001\022\260\001/artifacts/api/v1/artifact/id" - "/{query.artifact_id.artifact_key.project" - "}/{query.artifact_id.artifact_key.domain" - "}/{query.artifact_id.artifact_key.name}/" - "{query.artifact_id.version}Z\227\001\022\224\001/artifa" - "cts/api/v1/artifact/id/{query.artifact_i" - "d.artifact_key.project}/{query.artifact_" - "id.artifact_key.domain}/{query.artifact_" - "id.artifact_key.name}Z\233\001\022\230\001/artifacts/ap" - "i/v1/artifact/tag/{query.artifact_tag.ar" - "tifact_key.project}/{query.artifact_tag." - "artifact_key.domain}/{query.artifact_tag" - ".artifact_key.name}\022\226\002\n\017SearchArtifacts\022" - ").flyteidl.artifact.SearchArtifactsReque" - "st\032*.flyteidl.artifact.SearchArtifactsRe" - "sponse\"\253\001\202\323\344\223\002\244\001\022Y/artifacts/api/v1/sear" - "ch/{artifact_key.project}/{artifact_key." - "domain}/{artifact_key.name}ZG\022E/artifact" - "s/api/v1/search/{artifact_key.project}/{" - "artifact_key.domain}\022d\n\rCreateTrigger\022\'." - "flyteidl.artifact.CreateTriggerRequest\032(" - ".flyteidl.artifact.CreateTriggerResponse" - "\"\000\022\237\001\n\021DeactivateTrigger\022+.flyteidl.arti" - "fact.DeactivateTriggerRequest\032,.flyteidl" - ".artifact.DeactivateTriggerResponse\"/\202\323\344" - "\223\002)2$/artifacts/api/v1/trigger/deactivat" - "e:\001*\022O\n\006AddTag\022 .flyteidl.artifact.AddTa" - "gRequest\032!.flyteidl.artifact.AddTagRespo" - "nse\"\000\022e\n\020RegisterProducer\022*.flyteidl.art" - "ifact.RegisterProducerRequest\032#.flyteidl" - ".artifact.RegisterResponse\"\000\022e\n\020Register" - "Consumer\022*.flyteidl.artifact.RegisterCon" - "sumerRequest\032#.flyteidl.artifact.Registe" - "rResponse\"\000\022m\n\022SetExecutionInputs\022).flyt" - "eidl.artifact.ExecutionInputsRequest\032*.f" - "lyteidl.artifact.ExecutionInputsResponse" - "\"\000\022\330\001\n\022FindByWorkflowExec\022,.flyteidl.art" - "ifact.FindByWorkflowExecRequest\032*.flytei" - "dl.artifact.SearchArtifactsResponse\"h\202\323\344" - "\223\002b\022`/artifacts/api/v1/search/execution/" - "{exec_id.project}/{exec_id.domain}/{exec" - "_id.name}/{direction}\022\365\001\n\tListUsage\022#.fl" - "yteidl.artifact.ListUsageRequest\032$.flyte" - "idl.artifact.ListUsageResponse\"\234\001\202\323\344\223\002\225\001" - "\022\222\001/artifacts/api/v1/usage/{artifact_id." - "artifact_key.project}/{artifact_id.artif" - "act_key.domain}/{artifact_id.artifact_ke" - "y.name}/{artifact_id.version}B@Z>github." - "com/flyteorg/flyte/flyteidl/gen/pb-go/fl" - "yteidl/artifactb\006proto3" + "sponse\"&\202\323\344\223\002 \"\033/artifacts/api/v1/artifa" + "cts:\001*\022\215\001\n\017SearchArtifacts\022).flyteidl.ar" + "tifact.SearchArtifactsRequest\032*.flyteidl" + ".artifact.SearchArtifactsResponse\"#\202\323\344\223\002" + "\035\"\030/artifacts/api/v1/search:\001*\022d\n\rCreate" + "Trigger\022\'.flyteidl.artifact.CreateTrigge" + "rRequest\032(.flyteidl.artifact.CreateTrigg" + "erResponse\"\000\022\237\001\n\021DeactivateTrigger\022+.fly" + "teidl.artifact.DeactivateTriggerRequest\032" + ",.flyteidl.artifact.DeactivateTriggerRes" + "ponse\"/\202\323\344\223\002)2$/artifacts/api/v1/trigger" + "/deactivate:\001*\022O\n\006AddTag\022 .flyteidl.arti" + "fact.AddTagRequest\032!.flyteidl.artifact.A" + "ddTagResponse\"\000\022e\n\020RegisterProducer\022*.fl" + "yteidl.artifact.RegisterProducerRequest\032" + "#.flyteidl.artifact.RegisterResponse\"\000\022e" + "\n\020RegisterConsumer\022*.flyteidl.artifact.R" + "egisterConsumerRequest\032#.flyteidl.artifa" + "ct.RegisterResponse\"\000\022m\n\022SetExecutionInp" + "uts\022).flyteidl.artifact.ExecutionInputsR" + "equest\032*.flyteidl.artifact.ExecutionInpu" + "tsResponse\"\000\022\330\001\n\022FindByWorkflowExec\022,.fl" + "yteidl.artifact.FindByWorkflowExecReques" + "t\032*.flyteidl.artifact.SearchArtifactsRes" + "ponse\"h\202\323\344\223\002b\022`/artifacts/api/v1/search/" + "execution/{exec_id.project}/{exec_id.dom" + "ain}/{exec_id.name}/{direction}\022\365\001\n\tList" + "Usage\022#.flyteidl.artifact.ListUsageReque" + "st\032$.flyteidl.artifact.ListUsageResponse" + "\"\234\001\202\323\344\223\002\225\001\022\222\001/artifacts/api/v1/usage/{ar" + "tifact_id.artifact_key.project}/{artifac" + "t_id.artifact_key.domain}/{artifact_id.a" + "rtifact_key.name}/{artifact_id.version}B" + "@Z>github.com/flyteorg/flyte/flyteidl/ge" + "n/pb-go/flyteidl/artifactb\006proto3" ; ::google::protobuf::internal::DescriptorTable descriptor_table_flyteidl_2fartifact_2fartifacts_2eproto = { false, InitDefaults_flyteidl_2fartifact_2fartifacts_2eproto, descriptor_table_protodef_flyteidl_2fartifact_2fartifacts_2eproto, - "flyteidl/artifact/artifacts.proto", &assign_descriptors_table_flyteidl_2fartifact_2fartifacts_2eproto, 5343, + "flyteidl/artifact/artifacts.proto", &assign_descriptors_table_flyteidl_2fartifact_2fartifacts_2eproto, 4713, }; void AddDescriptors_flyteidl_2fartifact_2fartifacts_2eproto() { diff --git a/flyteidl/gen/pb-go/flyteidl/artifact/artifacts.pb.go b/flyteidl/gen/pb-go/flyteidl/artifact/artifacts.pb.go index 27f84cb68d..8e7930233b 100644 --- a/flyteidl/gen/pb-go/flyteidl/artifact/artifacts.pb.go +++ b/flyteidl/gen/pb-go/flyteidl/artifact/artifacts.pb.go @@ -1331,116 +1331,111 @@ func init() { func init() { proto.RegisterFile("flyteidl/artifact/artifacts.proto", fileDescriptor_804518da5936dedb) } var fileDescriptor_804518da5936dedb = []byte{ - // 1734 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0xcb, 0x6f, 0xdb, 0xc8, - 0x19, 0x0f, 0x2d, 0x45, 0xb2, 0x3e, 0xd9, 0x5e, 0x79, 0x36, 0xb5, 0x65, 0x39, 0xed, 0x3a, 0x4c, - 0xda, 0x3a, 0xd9, 0x54, 0xc4, 0x2a, 0xc5, 0x36, 0x36, 0xb0, 0x45, 0x9d, 0x38, 0x5d, 0x68, 0xf3, - 0xf2, 0xd2, 0x4e, 0xdb, 0x35, 0x0a, 0x68, 0x47, 0xe4, 0x98, 0xe6, 0x9a, 0x22, 0xb9, 0xc3, 0x91, - 0x5d, 0x22, 0x08, 0xb6, 0xe8, 0x75, 0x6f, 0xdb, 0x27, 0xda, 0x02, 0xbd, 0xf4, 0xd6, 0x4b, 0xd1, - 0xfe, 0x17, 0xbd, 0xf6, 0xd2, 0x43, 0x8f, 0xfd, 0x07, 0xf6, 0xd0, 0x43, 0xd1, 0x4b, 0xc1, 0xe1, - 0x0c, 0x49, 0x89, 0x94, 0x2c, 0x27, 0x39, 0xf4, 0x46, 0x7e, 0xf3, 0xfb, 0x9e, 0xf3, 0xbd, 0x48, - 0xb8, 0x76, 0xe4, 0x84, 0x8c, 0xd8, 0xa6, 0xa3, 0x61, 0xca, 0xec, 0x23, 0x6c, 0xb0, 0xe4, 0x21, - 0x68, 0xfb, 0xd4, 0x63, 0x1e, 0x5a, 0x96, 0x90, 0xb6, 0x3c, 0x69, 0xad, 0x59, 0x9e, 0x67, 0x39, - 0x44, 0xe3, 0x80, 0xfe, 0xf0, 0x48, 0xc3, 0x6e, 0x18, 0xa3, 0x5b, 0x57, 0xc5, 0x11, 0xf6, 0x6d, - 0x0d, 0xbb, 0xae, 0xc7, 0x30, 0xb3, 0x3d, 0x57, 0xc8, 0x6a, 0x6d, 0xa4, 0xea, 0xcc, 0x81, 0xed, - 0x6a, 0x0e, 0x1e, 0xba, 0xc6, 0x71, 0xcf, 0x77, 0xb0, 0x2b, 0xf9, 0x13, 0x84, 0xe1, 0x51, 0xa2, - 0x39, 0x36, 0x23, 0x14, 0x3b, 0x92, 0x7f, 0x6d, 0xf4, 0x94, 0x85, 0x3e, 0x91, 0x47, 0x5f, 0x1b, - 0x3d, 0xb2, 0x4d, 0xe2, 0x32, 0xfb, 0xc8, 0x26, 0x54, 0x9c, 0xbf, 0x35, 0x7a, 0x2e, 0x7d, 0xe9, - 0xd9, 0xa6, 0x00, 0x7c, 0x75, 0x4c, 0x80, 0xcb, 0x08, 0x3d, 0xc2, 0x06, 0xc9, 0x99, 0x4e, 0x4e, - 0x89, 0xcb, 0x34, 0xc3, 0xf1, 0x86, 0x26, 0x7f, 0x14, 0x16, 0xa8, 0x7f, 0x53, 0x60, 0x7e, 0x47, - 0x88, 0x45, 0xdb, 0x50, 0xcf, 0xa8, 0x68, 0x2a, 0x1b, 0xca, 0x66, 0xbd, 0xb3, 0xd6, 0x4e, 0x62, - 0x19, 0xe9, 0x68, 0x4b, 0x74, 0x77, 0x57, 0x07, 0x89, 0xee, 0x9a, 0xe8, 0x0e, 0x94, 0x03, 0x9f, - 0x18, 0xcd, 0x39, 0xce, 0xf4, 0x56, 0x3b, 0x77, 0x01, 0x09, 0xe3, 0xbe, 0x4f, 0x0c, 0x9d, 0x83, - 0x11, 0x82, 0x32, 0xc3, 0x56, 0xd0, 0x2c, 0x6d, 0x94, 0x36, 0x6b, 0x3a, 0x7f, 0x46, 0x5b, 0x50, - 0x09, 0xbc, 0x21, 0x35, 0x48, 0xb3, 0xcc, 0x45, 0x5d, 0x9b, 0x26, 0x8a, 0x03, 0x75, 0xc1, 0xa0, - 0x7e, 0x5e, 0x82, 0xaf, 0xdc, 0xa7, 0x04, 0x33, 0x22, 0x01, 0x3a, 0xf9, 0x74, 0x48, 0x02, 0x86, - 0xde, 0x83, 0x85, 0xc4, 0xb3, 0x13, 0x12, 0x0a, 0xd7, 0x5a, 0x13, 0x5c, 0x7b, 0x48, 0x42, 0x3d, - 0x89, 0xc4, 0x43, 0x12, 0xa2, 0x26, 0x54, 0x4f, 0x09, 0x0d, 0x6c, 0xcf, 0x6d, 0x96, 0x36, 0x94, - 0xcd, 0x9a, 0x2e, 0x5f, 0x5f, 0xce, 0xed, 0x1f, 0x01, 0xf8, 0xd1, 0x39, 0xcf, 0xb2, 0x66, 0x79, - 0xa3, 0xb4, 0x59, 0xef, 0xdc, 0x2d, 0x60, 0x2d, 0xf4, 0xa5, 0xbd, 0x97, 0xb0, 0x3e, 0x70, 0x19, - 0x0d, 0xf5, 0x8c, 0x2c, 0xd4, 0x80, 0x12, 0xc3, 0x56, 0xf3, 0x32, 0x37, 0x32, 0x7a, 0xcc, 0x84, - 0xb3, 0x72, 0xc1, 0x70, 0xb6, 0xde, 0x83, 0x37, 0xc6, 0x74, 0x45, 0xf2, 0x65, 0xf8, 0x6a, 0x7a, - 0xf4, 0x88, 0xae, 0xc0, 0xe5, 0x53, 0xec, 0x0c, 0x09, 0x8f, 0x40, 0x4d, 0x8f, 0x5f, 0xb6, 0xe7, - 0xee, 0x2a, 0xea, 0x7f, 0x15, 0x58, 0x1a, 0x95, 0x8c, 0x3e, 0x02, 0x74, 0xe6, 0xd1, 0x93, 0x23, - 0xc7, 0x3b, 0xeb, 0x91, 0x9f, 0x10, 0x63, 0x18, 0x89, 0x16, 0x97, 0x71, 0x6b, 0xec, 0x32, 0x7e, - 0x28, 0x80, 0x0f, 0x24, 0xae, 0x9b, 0x54, 0x87, 0xbe, 0x7c, 0x36, 0x7e, 0x88, 0x56, 0xa1, 0xea, - 0x7a, 0x26, 0x89, 0xf2, 0x36, 0xb6, 0xa4, 0x12, 0xbd, 0x76, 0x4d, 0xd4, 0x81, 0x2a, 0xc3, 0xc1, - 0x49, 0x74, 0x50, 0x2a, 0x4c, 0xe8, 0x8c, 0xdc, 0x4a, 0x84, 0xec, 0x9a, 0xe8, 0x3a, 0x2c, 0x52, - 0xc2, 0x68, 0xd8, 0xc3, 0x8c, 0x91, 0x81, 0xcf, 0x78, 0x2a, 0x2e, 0xea, 0x0b, 0x9c, 0xb8, 0x13, - 0xd3, 0xd0, 0x55, 0xa8, 0xf9, 0xd4, 0x76, 0x0d, 0xdb, 0xc7, 0x8e, 0x88, 0x78, 0x4a, 0x50, 0xff, - 0xa3, 0xc0, 0x42, 0xf6, 0xea, 0xd1, 0x6d, 0x19, 0xa8, 0xd8, 0xdd, 0x95, 0x31, 0x2b, 0x1e, 0xc5, - 0x4d, 0x43, 0x04, 0x10, 0xb5, 0xa1, 0x1c, 0x35, 0x0a, 0x91, 0x57, 0xad, 0x62, 0xf0, 0x41, 0xe8, - 0x13, 0x9d, 0xe3, 0xd0, 0xdb, 0xb0, 0x1c, 0x1c, 0x7b, 0x94, 0xf5, 0x4c, 0x12, 0x18, 0xd4, 0xf6, - 0x59, 0x9a, 0xab, 0x0d, 0x7e, 0xb0, 0x9b, 0xd2, 0xd1, 0x16, 0x2c, 0x0e, 0x03, 0x42, 0x7b, 0x03, - 0xc2, 0xb0, 0x89, 0x19, 0x16, 0x95, 0x76, 0xa5, 0x1d, 0xf7, 0xc1, 0xb6, 0x6c, 0x91, 0xed, 0x1d, - 0x37, 0xd4, 0x17, 0x22, 0xe8, 0x63, 0x81, 0x8c, 0x22, 0x23, 0xb9, 0x7a, 0xdc, 0xc0, 0xd8, 0xf1, - 0x05, 0x49, 0x8c, 0x4c, 0x52, 0x3f, 0x84, 0x95, 0xf1, 0xd4, 0x0d, 0x7c, 0xcf, 0x0d, 0x08, 0xfa, - 0x0e, 0xcc, 0xcb, 0xac, 0x13, 0x71, 0x58, 0x9f, 0x92, 0x8f, 0x7a, 0x02, 0x56, 0xfb, 0x80, 0xde, - 0x27, 0x6c, 0xbc, 0xac, 0x3b, 0x70, 0xf9, 0xd3, 0x21, 0xa1, 0xb2, 0x9e, 0xaf, 0x4e, 0xa8, 0xe7, - 0x0f, 0x23, 0x8c, 0x1e, 0x43, 0xa3, 0x5a, 0x36, 0x09, 0xc3, 0xb6, 0x13, 0xf0, 0xe0, 0xce, 0xeb, - 0xf2, 0x55, 0x7d, 0x02, 0x6f, 0x8e, 0xe8, 0x78, 0x55, 0x9b, 0x3f, 0x86, 0xc5, 0x7d, 0x82, 0xa9, - 0x71, 0xfc, 0xd4, 0x8f, 0xab, 0x33, 0xba, 0x24, 0x46, 0x6d, 0x83, 0xf5, 0x32, 0xe5, 0xaf, 0x70, - 0x23, 0x1a, 0xf1, 0x41, 0x5a, 0x6f, 0x48, 0x85, 0x45, 0x07, 0x33, 0x12, 0xb0, 0x5e, 0x3f, 0xe4, - 0x3d, 0x2b, 0xb6, 0xb6, 0x1e, 0x13, 0xef, 0x85, 0x0f, 0x49, 0xa8, 0xfe, 0x65, 0x0e, 0x56, 0x62, - 0x15, 0x52, 0x7d, 0xf0, 0x9a, 0x3a, 0xde, 0xd6, 0x48, 0x8b, 0x9a, 0x2b, 0x2c, 0x9c, 0xd4, 0xd8, - 0x91, 0x1e, 0x34, 0x52, 0x17, 0xa5, 0xb1, 0xba, 0xc8, 0xb6, 0xd2, 0xf2, 0x68, 0x2b, 0xdd, 0x86, - 0xaa, 0x17, 0x07, 0x8a, 0x27, 0x55, 0xbd, 0xb3, 0x51, 0x10, 0xe6, 0x91, 0x80, 0xea, 0x92, 0x21, - 0xea, 0x42, 0xcc, 0x3b, 0x21, 0x2e, 0x6f, 0x72, 0x35, 0x3d, 0x7e, 0x89, 0xa8, 0x8e, 0x3d, 0xb0, - 0x59, 0xb3, 0xba, 0xa1, 0x6c, 0x5e, 0xd6, 0xe3, 0x17, 0xf5, 0x13, 0x58, 0xcd, 0xc5, 0x4c, 0x5c, - 0xf5, 0x16, 0xd4, 0x92, 0x4d, 0xa2, 0xa9, 0xf0, 0xbe, 0x3c, 0xf5, 0xae, 0x53, 0x74, 0x6a, 0xc1, - 0x5c, 0xc6, 0x02, 0xf5, 0x9f, 0x0a, 0xac, 0x7d, 0xdf, 0x76, 0xcd, 0x7b, 0x61, 0xb6, 0x9d, 0xc9, - 0x3b, 0xba, 0x0f, 0xd5, 0xa8, 0x0b, 0xa6, 0xb3, 0xf6, 0x22, 0x3d, 0xb0, 0x12, 0xb1, 0x76, 0x4d, - 0x74, 0x00, 0x35, 0xd3, 0xa6, 0xc4, 0xe0, 0x15, 0x1f, 0x29, 0x5f, 0xea, 0xbc, 0x5b, 0x60, 0xf3, - 0x44, 0x2b, 0xda, 0xbb, 0x92, 0x5b, 0x4f, 0x05, 0xa9, 0x37, 0xa0, 0x96, 0xd0, 0x11, 0x40, 0xa5, - 0xfb, 0x64, 0xef, 0xd9, 0xc1, 0x7e, 0xe3, 0x12, 0xaa, 0x43, 0xf5, 0xe9, 0xb3, 0x03, 0xfe, 0xa2, - 0xa8, 0x9f, 0xc1, 0xe2, 0x8e, 0x69, 0x1e, 0x60, 0x4b, 0x7a, 0xf4, 0x2a, 0x1b, 0x44, 0xe1, 0x24, - 0x89, 0xb2, 0xc9, 0x3b, 0x25, 0xf4, 0x8c, 0xda, 0x8c, 0xf0, 0x6c, 0x9a, 0xd7, 0x53, 0x82, 0xda, - 0x80, 0x25, 0x69, 0x40, 0x7c, 0x85, 0x6a, 0x1f, 0xae, 0xc4, 0xbd, 0xe7, 0x80, 0xda, 0x96, 0x45, - 0xa8, 0xb4, 0xec, 0x03, 0x78, 0x93, 0xc5, 0x94, 0x5e, 0x66, 0x81, 0xcb, 0x97, 0x05, 0xdf, 0xf1, - 0xda, 0x8f, 0x38, 0x64, 0xcf, 0xc1, 0xae, 0xbe, 0x2c, 0xd8, 0x52, 0x92, 0xba, 0x2a, 0xd7, 0x8c, - 0x44, 0x87, 0x50, 0x7e, 0x00, 0xcd, 0x5d, 0x82, 0x0d, 0x66, 0x9f, 0xe6, 0x0d, 0xb8, 0x0b, 0x20, - 0x0d, 0x98, 0x18, 0x99, 0xcc, 0xf5, 0xd6, 0x04, 0xb8, 0x6b, 0xaa, 0xeb, 0xb0, 0x56, 0x20, 0x55, - 0xa8, 0xfc, 0xa9, 0x02, 0x0d, 0x19, 0xd0, 0x3d, 0xea, 0x99, 0x43, 0x83, 0x50, 0xf4, 0x2e, 0xd4, - 0x22, 0x41, 0x2c, 0x9c, 0x49, 0xd5, 0x7c, 0x8c, 0xed, 0x9a, 0xe8, 0xdb, 0x50, 0xf5, 0x86, 0xcc, - 0x1f, 0xb2, 0x60, 0xc2, 0xe0, 0xf9, 0x01, 0xa6, 0x36, 0xee, 0x3b, 0xe4, 0x31, 0xf6, 0x75, 0x09, - 0x55, 0x7f, 0x0c, 0xab, 0x3a, 0xb1, 0xec, 0x80, 0x11, 0x2a, 0x2d, 0x90, 0x4e, 0xef, 0x44, 0xbd, - 0x20, 0x26, 0xc9, 0x82, 0xba, 0x3e, 0xa5, 0xa0, 0x12, 0xf6, 0x94, 0x4b, 0xfd, 0x2c, 0xf5, 0xef, - 0xbe, 0xe7, 0x06, 0xc3, 0xc1, 0x2b, 0xf8, 0x77, 0x07, 0x2a, 0xb6, 0x9b, 0x71, 0x6f, 0x3d, 0xdf, - 0xd1, 0xf0, 0x80, 0x30, 0x42, 0x23, 0xff, 0x04, 0x34, 0xeb, 0x9e, 0x34, 0x20, 0xe3, 0x9e, 0x21, - 0x48, 0xb3, 0xb8, 0x97, 0xb0, 0xa7, 0x5c, 0x2a, 0x82, 0x86, 0x94, 0x9e, 0xdc, 0xe9, 0x6f, 0x15, - 0x58, 0x49, 0x4b, 0x9e, 0x5b, 0x21, 0x35, 0x3e, 0x86, 0x85, 0x64, 0x71, 0x7a, 0xb9, 0xbe, 0x51, - 0x27, 0x29, 0x11, 0xbd, 0x93, 0x09, 0x48, 0x69, 0x7a, 0xa9, 0xca, 0x70, 0xac, 0xc1, 0x6a, 0xce, - 0x36, 0x61, 0xf7, 0x13, 0x68, 0x3c, 0xb2, 0x03, 0xf6, 0x2c, 0xc0, 0x16, 0x79, 0x0d, 0x1d, 0x41, - 0xed, 0xc1, 0x72, 0x46, 0x9e, 0xe8, 0xd1, 0x1f, 0x00, 0x24, 0x1e, 0xc8, 0xa0, 0x5f, 0xc4, 0xff, - 0x0c, 0x77, 0xe7, 0xcb, 0x46, 0x9a, 0x5c, 0xf1, 0x2d, 0xd0, 0x10, 0x59, 0xb0, 0x34, 0xba, 0xbd, - 0xa0, 0xcd, 0x59, 0x77, 0xf3, 0xd6, 0xcd, 0x19, 0x90, 0x22, 0x58, 0x97, 0xd0, 0x97, 0x65, 0xa8, - 0x67, 0x16, 0x0e, 0xf4, 0xf5, 0x02, 0xe6, 0xfc, 0xd2, 0xd3, 0xfa, 0xc6, 0x79, 0x30, 0xa1, 0xe0, - 0x8b, 0xf2, 0xcf, 0xfe, 0xfe, 0xaf, 0x9f, 0xcf, 0x7d, 0x5e, 0x46, 0xeb, 0xe9, 0xf7, 0x31, 0xff, - 0xc6, 0x3d, 0x7d, 0x27, 0x25, 0x1c, 0xfe, 0x55, 0x41, 0x7f, 0x56, 0x26, 0x03, 0x34, 0xdb, 0xd4, - 0x9e, 0xf3, 0xcd, 0xa9, 0x9d, 0xfd, 0xfc, 0xcc, 0xee, 0x16, 0xd1, 0xbe, 0xf8, 0x09, 0x31, 0xd8, - 0x8b, 0x73, 0x81, 0xa6, 0x37, 0xc0, 0xb6, 0x7b, 0x3e, 0xce, 0xc5, 0x03, 0x52, 0x88, 0x12, 0xbb, - 0xc2, 0x8b, 0xc3, 0x5f, 0x2b, 0xe8, 0x17, 0xff, 0x97, 0x56, 0x1f, 0xfe, 0x4e, 0x41, 0xbf, 0x99, - 0x66, 0x19, 0xc3, 0x56, 0x4e, 0x12, 0xc3, 0xd6, 0x8c, 0xb6, 0xe5, 0x90, 0x93, 0x8c, 0xcb, 0x01, - 0xb9, 0x75, 0xe8, 0x57, 0x73, 0xf0, 0xc6, 0xd8, 0xf6, 0x83, 0x6e, 0x4e, 0xdc, 0xb3, 0xc6, 0xb7, - 0xca, 0xd6, 0xad, 0x59, 0xa0, 0x22, 0xff, 0xfe, 0xa4, 0xf0, 0xfc, 0xfb, 0xa3, 0x82, 0x3e, 0xca, - 0x87, 0x23, 0xe0, 0x4c, 0xda, 0xf3, 0x09, 0x5e, 0x17, 0xbb, 0x58, 0x10, 0xed, 0xf7, 0xd1, 0x83, - 0xd7, 0x22, 0x1c, 0x99, 0xb0, 0x38, 0x32, 0xd3, 0xd1, 0x37, 0x27, 0x96, 0xf2, 0xe8, 0x60, 0x6f, - 0x6d, 0x9e, 0x0f, 0x4c, 0x4a, 0xfe, 0x0f, 0x0a, 0x2c, 0xe7, 0x66, 0x39, 0x7a, 0xbb, 0x40, 0xc2, - 0xa4, 0x3d, 0xa2, 0x75, 0x7b, 0x36, 0xb0, 0x50, 0xa9, 0xf1, 0x3b, 0xb8, 0xd9, 0xb9, 0x91, 0x8f, - 0x92, 0x58, 0x30, 0x34, 0x33, 0x61, 0xde, 0x56, 0x6e, 0xa1, 0xa7, 0x50, 0x89, 0x37, 0x2a, 0x54, - 0xb4, 0x7e, 0x8f, 0x6c, 0x7b, 0xad, 0x6b, 0x53, 0x10, 0x89, 0xcb, 0x24, 0x1d, 0x70, 0xc9, 0x7e, - 0x52, 0x94, 0x46, 0x13, 0x56, 0x88, 0xd6, 0xf5, 0x29, 0xd8, 0x62, 0x35, 0xc9, 0x9a, 0x30, 0x4d, - 0xcd, 0xd8, 0x28, 0x9f, 0x55, 0xcd, 0x00, 0xd0, 0x3e, 0x61, 0x63, 0x03, 0xb0, 0xb0, 0x82, 0x8a, - 0x07, 0x78, 0x61, 0x05, 0x4d, 0x9a, 0xa7, 0x97, 0xd0, 0x3f, 0x14, 0x40, 0xf9, 0xcd, 0x1d, 0xdd, - 0xbe, 0xc8, 0x82, 0x7f, 0xa1, 0xa2, 0x3d, 0xe6, 0xf9, 0xd2, 0x47, 0x1f, 0x4f, 0xac, 0xaa, 0x64, - 0x7c, 0x6a, 0xcf, 0xc5, 0xc7, 0x4b, 0xa6, 0xb4, 0x24, 0x25, 0x29, 0x59, 0x49, 0x10, 0x1d, 0x3d, - 0xf9, 0xc0, 0x78, 0x81, 0xfe, 0xad, 0x40, 0x2d, 0x99, 0xee, 0xa8, 0x28, 0xfc, 0xe3, 0xbb, 0x44, - 0xeb, 0xc6, 0x74, 0x90, 0x70, 0xe1, 0xf7, 0x71, 0xdf, 0xf9, 0xa5, 0x82, 0xbe, 0x28, 0xe8, 0xc3, - 0xc3, 0x08, 0x9b, 0xe9, 0x01, 0x93, 0xa7, 0xc2, 0xf9, 0xf3, 0xe0, 0xbc, 0xf9, 0x55, 0x34, 0xb9, - 0xee, 0x7d, 0xef, 0xf0, 0xbb, 0x96, 0xcd, 0x8e, 0x87, 0xfd, 0xb6, 0xe1, 0x0d, 0x34, 0xee, 0x90, - 0x47, 0xad, 0xf8, 0x41, 0x4b, 0xfe, 0xd7, 0x5a, 0xc4, 0xd5, 0xfc, 0xfe, 0xb7, 0x2c, 0x4f, 0xcb, - 0xfd, 0xec, 0xee, 0x57, 0xf8, 0xff, 0x99, 0x3b, 0xff, 0x0b, 0x00, 0x00, 0xff, 0xff, 0xc9, 0x67, - 0x17, 0x6c, 0x08, 0x17, 0x00, 0x00, + // 1654 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x58, 0xcd, 0x6f, 0xdb, 0x46, + 0x16, 0x0f, 0x2d, 0x5b, 0xb2, 0x9e, 0x6c, 0x47, 0x9e, 0x64, 0x6d, 0x59, 0x4e, 0x36, 0x0a, 0x9d, + 0xcd, 0x3a, 0x1f, 0x2b, 0x22, 0xca, 0x22, 0x1b, 0x1b, 0xc8, 0x62, 0x9d, 0x38, 0xbb, 0x50, 0x3e, + 0x1d, 0xda, 0xd9, 0x2f, 0x2c, 0xa0, 0x8c, 0xc8, 0xb1, 0xcc, 0x98, 0x22, 0x99, 0xe1, 0xc8, 0x5e, + 0x22, 0x30, 0xb2, 0x58, 0xf4, 0x56, 0xf4, 0xd2, 0xa2, 0x97, 0xa2, 0x40, 0xff, 0x87, 0xfe, 0x19, + 0xbd, 0xf6, 0xd2, 0x43, 0x8f, 0xfd, 0x17, 0x7a, 0x28, 0x72, 0x29, 0x38, 0x9c, 0x21, 0x29, 0x89, + 0x52, 0xec, 0x24, 0x37, 0xf2, 0xcd, 0xef, 0xcd, 0xfb, 0x98, 0xf7, 0x7e, 0xf3, 0x48, 0xb8, 0xb8, + 0x6b, 0x07, 0x8c, 0x58, 0xa6, 0xad, 0x61, 0xca, 0xac, 0x5d, 0x6c, 0xb0, 0xf8, 0xc1, 0xaf, 0x7b, + 0xd4, 0x65, 0x2e, 0x9a, 0x97, 0x90, 0xba, 0x5c, 0xa9, 0x2e, 0x75, 0x5c, 0xb7, 0x63, 0x13, 0x8d, + 0x03, 0xda, 0xbd, 0x5d, 0x0d, 0x3b, 0x41, 0x84, 0xae, 0x9e, 0x13, 0x4b, 0xd8, 0xb3, 0x34, 0xec, + 0x38, 0x2e, 0xc3, 0xcc, 0x72, 0x1d, 0xb1, 0x57, 0xb5, 0x96, 0x98, 0x33, 0xbb, 0x96, 0xa3, 0xd9, + 0xb8, 0xe7, 0x18, 0x7b, 0x2d, 0xcf, 0xc6, 0x8e, 0xd4, 0x8f, 0x11, 0x86, 0x4b, 0x89, 0x66, 0x5b, + 0x8c, 0x50, 0x6c, 0x4b, 0xfd, 0xa5, 0xfe, 0x55, 0x16, 0x78, 0x44, 0x2e, 0xfd, 0xb6, 0x7f, 0xc9, + 0x32, 0x89, 0xc3, 0xac, 0x5d, 0x8b, 0x50, 0xb1, 0x7e, 0xa1, 0x7f, 0x5d, 0xc6, 0xd2, 0xb2, 0x4c, + 0x01, 0x38, 0x3f, 0xb0, 0x81, 0xc3, 0x08, 0xdd, 0xc5, 0x06, 0x19, 0x72, 0x9d, 0x1c, 0x10, 0x87, + 0x69, 0x86, 0xed, 0xf6, 0x4c, 0xfe, 0x28, 0x3c, 0x50, 0xbf, 0x53, 0x60, 0x7a, 0x43, 0x6c, 0x8b, + 0xd6, 0xa1, 0x94, 0x32, 0x51, 0x51, 0x6a, 0xca, 0x6a, 0xa9, 0xb1, 0x54, 0x8f, 0x73, 0x19, 0xda, + 0xa8, 0x4b, 0x74, 0x73, 0x53, 0x07, 0x89, 0x6e, 0x9a, 0xe8, 0x26, 0x4c, 0xfa, 0x1e, 0x31, 0x2a, + 0x13, 0x5c, 0xe9, 0x42, 0x7d, 0xe8, 0x00, 0x62, 0xc5, 0x6d, 0x8f, 0x18, 0x3a, 0x07, 0x23, 0x04, + 0x93, 0x0c, 0x77, 0xfc, 0x4a, 0xae, 0x96, 0x5b, 0x2d, 0xea, 0xfc, 0x19, 0xad, 0x41, 0xde, 0x77, + 0x7b, 0xd4, 0x20, 0x95, 0x49, 0xbe, 0xd5, 0xc5, 0x71, 0x5b, 0x71, 0xa0, 0x2e, 0x14, 0xd4, 0x4f, + 0x73, 0xf0, 0x9b, 0x7b, 0x94, 0x60, 0x46, 0x24, 0x40, 0x27, 0xaf, 0x7a, 0xc4, 0x67, 0xe8, 0x0e, + 0xcc, 0xc4, 0x91, 0xed, 0x93, 0x40, 0x84, 0x56, 0x1d, 0x11, 0xda, 0x43, 0x12, 0xe8, 0x71, 0x26, + 0x1e, 0x92, 0x00, 0x55, 0xa0, 0x70, 0x40, 0xa8, 0x6f, 0xb9, 0x4e, 0x25, 0x57, 0x53, 0x56, 0x8b, + 0xba, 0x7c, 0x7d, 0xbf, 0xb0, 0xff, 0x09, 0xe0, 0x85, 0xeb, 0xbc, 0xca, 0x2a, 0x93, 0xb5, 0xdc, + 0x6a, 0xa9, 0x71, 0x3b, 0x43, 0x35, 0x33, 0x96, 0xfa, 0x56, 0xac, 0x7a, 0xdf, 0x61, 0x34, 0xd0, + 0x53, 0x7b, 0xa1, 0x32, 0xe4, 0x18, 0xee, 0x54, 0xa6, 0xb8, 0x93, 0xe1, 0x63, 0x2a, 0x9d, 0xf9, + 0x13, 0xa6, 0xb3, 0x7a, 0x07, 0x4e, 0x0f, 0xd8, 0x0a, 0xf7, 0x97, 0xe9, 0x2b, 0xea, 0xe1, 0x23, + 0x3a, 0x0b, 0x53, 0x07, 0xd8, 0xee, 0x11, 0x9e, 0x81, 0xa2, 0x1e, 0xbd, 0xac, 0x4f, 0xdc, 0x56, + 0xd4, 0xb7, 0x0a, 0xcc, 0xf5, 0xef, 0x8c, 0xfe, 0x05, 0xe8, 0xd0, 0xa5, 0xfb, 0xbb, 0xb6, 0x7b, + 0xd8, 0x22, 0xff, 0x25, 0x46, 0x2f, 0xdc, 0x5a, 0x1c, 0xc6, 0xd5, 0x81, 0xc3, 0xf8, 0x87, 0x00, + 0xde, 0x97, 0xb8, 0x66, 0xdc, 0x1d, 0xfa, 0xfc, 0xe1, 0xe0, 0x22, 0x5a, 0x84, 0x82, 0xe3, 0x9a, + 0x24, 0xac, 0xdb, 0xc8, 0x93, 0x7c, 0xf8, 0xda, 0x34, 0x51, 0x03, 0x0a, 0x0c, 0xfb, 0xfb, 0xe1, + 0x42, 0x2e, 0xb3, 0xa0, 0x53, 0xfb, 0xe6, 0x43, 0x64, 0xd3, 0x44, 0x2b, 0x30, 0x4b, 0x09, 0xa3, + 0x41, 0x0b, 0x33, 0x46, 0xba, 0x1e, 0xe3, 0xa5, 0x38, 0xab, 0xcf, 0x70, 0xe1, 0x46, 0x24, 0x43, + 0xe7, 0xa0, 0xe8, 0x51, 0xcb, 0x31, 0x2c, 0x0f, 0xdb, 0x22, 0xe3, 0x89, 0x40, 0xfd, 0x45, 0x81, + 0x99, 0xf4, 0xd1, 0xa3, 0xeb, 0x32, 0x51, 0x51, 0xb8, 0x0b, 0x03, 0x5e, 0x3c, 0x8a, 0x48, 0x43, + 0x24, 0x10, 0xd5, 0x61, 0x32, 0x24, 0x0a, 0x51, 0x57, 0xd5, 0x6c, 0xf0, 0x4e, 0xe0, 0x11, 0x9d, + 0xe3, 0xd0, 0x35, 0x98, 0xf7, 0xf7, 0x5c, 0xca, 0x5a, 0x26, 0xf1, 0x0d, 0x6a, 0x79, 0x2c, 0xa9, + 0xd5, 0x32, 0x5f, 0xd8, 0x4c, 0xe4, 0x68, 0x0d, 0x66, 0x7b, 0x3e, 0xa1, 0xad, 0x2e, 0x61, 0xd8, + 0xc4, 0x0c, 0x8b, 0x4e, 0x3b, 0x5b, 0x8f, 0x78, 0xb0, 0x2e, 0x29, 0xb2, 0xbe, 0xe1, 0x04, 0xfa, + 0x4c, 0x08, 0x7d, 0x2c, 0x90, 0x61, 0x66, 0xa4, 0x56, 0x8b, 0x3b, 0x18, 0x05, 0x3e, 0x23, 0x85, + 0xa1, 0x4b, 0xea, 0x33, 0x58, 0x18, 0x2c, 0x5d, 0xdf, 0x73, 0x1d, 0x9f, 0xa0, 0x3f, 0xc1, 0xb4, + 0xac, 0x3a, 0x91, 0x87, 0xe5, 0x31, 0xf5, 0xa8, 0xc7, 0x60, 0xb5, 0x0d, 0xe8, 0x6f, 0x84, 0x0d, + 0xb6, 0x75, 0x03, 0xa6, 0x5e, 0xf5, 0x08, 0x95, 0xfd, 0x7c, 0x6e, 0x44, 0x3f, 0x3f, 0x0b, 0x31, + 0x7a, 0x04, 0x0d, 0x7b, 0xd9, 0x24, 0x0c, 0x5b, 0xb6, 0xcf, 0x93, 0x3b, 0xad, 0xcb, 0x57, 0xf5, + 0x09, 0x9c, 0xe9, 0xb3, 0xf1, 0xa1, 0x3e, 0xbf, 0x80, 0xd9, 0x6d, 0x82, 0xa9, 0xb1, 0xf7, 0xd4, + 0x8b, 0xba, 0x33, 0x3c, 0x24, 0x46, 0x2d, 0x83, 0xb5, 0x52, 0xed, 0xaf, 0x70, 0x27, 0xca, 0xd1, + 0x42, 0xd2, 0x6f, 0x48, 0x85, 0x59, 0x1b, 0x33, 0xe2, 0xb3, 0x56, 0x3b, 0xe0, 0x9c, 0x15, 0x79, + 0x5b, 0x8a, 0x84, 0x77, 0x83, 0x87, 0x24, 0x50, 0xbf, 0x9d, 0x80, 0x85, 0xc8, 0x84, 0x34, 0xef, + 0x7f, 0x24, 0xc6, 0x5b, 0xeb, 0xa3, 0xa8, 0x89, 0xcc, 0xc6, 0x49, 0x9c, 0xed, 0xe3, 0xa0, 0xbe, + 0xbe, 0xc8, 0x0d, 0xf4, 0x45, 0x9a, 0x4a, 0x27, 0xfb, 0xa9, 0x74, 0x1d, 0x0a, 0x6e, 0x94, 0x28, + 0x5e, 0x54, 0xa5, 0x46, 0x2d, 0x23, 0xcd, 0x7d, 0x09, 0xd5, 0xa5, 0x42, 0xc8, 0x42, 0xcc, 0xdd, + 0x27, 0x0e, 0x27, 0xb9, 0xa2, 0x1e, 0xbd, 0x84, 0x52, 0xdb, 0xea, 0x5a, 0xac, 0x52, 0xa8, 0x29, + 0xab, 0x53, 0x7a, 0xf4, 0xa2, 0xbe, 0x84, 0xc5, 0xa1, 0x9c, 0x89, 0xa3, 0x5e, 0x83, 0x62, 0x3c, + 0x49, 0x54, 0x14, 0xce, 0xcb, 0x63, 0xcf, 0x3a, 0x41, 0x27, 0x1e, 0x4c, 0xa4, 0x3c, 0x50, 0x7f, + 0x54, 0x60, 0xe9, 0xaf, 0x96, 0x63, 0xde, 0x0d, 0xd2, 0x74, 0x26, 0xcf, 0xe8, 0x1e, 0x14, 0x42, + 0x16, 0x4c, 0xee, 0xda, 0x93, 0x70, 0x60, 0x3e, 0x54, 0x6d, 0x9a, 0x68, 0x07, 0x8a, 0xa6, 0x45, + 0x89, 0xc1, 0x3b, 0x3e, 0x34, 0x3e, 0xd7, 0xb8, 0x95, 0xe1, 0xf3, 0x48, 0x2f, 0xea, 0x9b, 0x52, + 0x5b, 0x4f, 0x36, 0x52, 0x2f, 0x41, 0x31, 0x96, 0x23, 0x80, 0x7c, 0xf3, 0xc9, 0xd6, 0xf3, 0x9d, + 0xed, 0xf2, 0x29, 0x54, 0x82, 0xc2, 0xd3, 0xe7, 0x3b, 0xfc, 0x45, 0x51, 0xdf, 0xc0, 0xec, 0x86, + 0x69, 0xee, 0xe0, 0x8e, 0x8c, 0xe8, 0x43, 0x26, 0x88, 0xcc, 0x9b, 0x24, 0xac, 0x26, 0xf7, 0x80, + 0xd0, 0x43, 0x6a, 0x31, 0xc2, 0xab, 0x69, 0x5a, 0x4f, 0x04, 0x6a, 0x19, 0xe6, 0xa4, 0x03, 0xd1, + 0x11, 0xaa, 0x6d, 0x38, 0x1b, 0x71, 0xcf, 0x0e, 0xb5, 0x3a, 0x1d, 0x42, 0xa5, 0x67, 0x0f, 0xe0, + 0x0c, 0x8b, 0x24, 0xad, 0xd4, 0x00, 0x37, 0xdc, 0x16, 0x7c, 0xc6, 0xab, 0x3f, 0xe2, 0x90, 0x2d, + 0x1b, 0x3b, 0xfa, 0xbc, 0x50, 0x4b, 0x44, 0xea, 0xa2, 0x1c, 0x33, 0x62, 0x1b, 0xc2, 0xf8, 0x0e, + 0x54, 0x36, 0x09, 0x36, 0x98, 0x75, 0x30, 0xec, 0xc0, 0x6d, 0x00, 0xe9, 0xc0, 0xc8, 0xcc, 0xa4, + 0x8e, 0xb7, 0x28, 0xc0, 0x4d, 0x53, 0x5d, 0x86, 0xa5, 0x8c, 0x5d, 0x85, 0xc9, 0xff, 0x29, 0x50, + 0x96, 0x09, 0xdd, 0xa2, 0xae, 0xd9, 0x33, 0x08, 0x45, 0xb7, 0xa0, 0x18, 0x6e, 0xc4, 0x82, 0x63, + 0x99, 0x9a, 0x8e, 0xb0, 0x4d, 0x13, 0xfd, 0x11, 0x0a, 0x6e, 0x8f, 0x79, 0x3d, 0xe6, 0x8f, 0xb8, + 0x78, 0xfe, 0x8e, 0xa9, 0x85, 0xdb, 0x36, 0x79, 0x8c, 0x3d, 0x5d, 0x42, 0xd5, 0xff, 0xc0, 0xa2, + 0x4e, 0x3a, 0x96, 0xcf, 0x08, 0x95, 0x1e, 0xc8, 0xa0, 0x37, 0x42, 0x2e, 0x88, 0x44, 0xb2, 0xa1, + 0x56, 0xc6, 0x34, 0x54, 0xac, 0x9e, 0x68, 0xa9, 0x6f, 0x92, 0xf8, 0xee, 0xb9, 0x8e, 0xdf, 0xeb, + 0x7e, 0x40, 0x7c, 0x37, 0x21, 0x6f, 0x39, 0xa9, 0xf0, 0x96, 0x87, 0x19, 0x0d, 0x77, 0x09, 0x23, + 0x34, 0x8c, 0x4f, 0x40, 0xd3, 0xe1, 0x49, 0x07, 0x52, 0xe1, 0x19, 0x42, 0x74, 0x9c, 0xf0, 0x62, + 0xf5, 0x44, 0x4b, 0x45, 0x50, 0x96, 0xbb, 0xc7, 0x67, 0xfa, 0x95, 0x02, 0x0b, 0x49, 0xcb, 0x73, + 0x2f, 0xa4, 0xc5, 0xc7, 0x30, 0x13, 0x0f, 0x4e, 0xef, 0xc7, 0x1b, 0x25, 0x92, 0x08, 0xd1, 0x8d, + 0x54, 0x42, 0x72, 0xe3, 0x5b, 0x55, 0xa6, 0x63, 0x09, 0x16, 0x87, 0x7c, 0x13, 0x7e, 0x3f, 0x81, + 0xf2, 0x23, 0xcb, 0x67, 0xcf, 0x7d, 0xdc, 0x21, 0x1f, 0x81, 0x11, 0xd4, 0x16, 0xcc, 0xa7, 0xf6, + 0x13, 0x1c, 0xfd, 0x00, 0x20, 0x8e, 0x40, 0x26, 0xfd, 0x24, 0xf1, 0xa7, 0xb4, 0x1b, 0x6f, 0x4b, + 0x49, 0x71, 0x45, 0xa7, 0x40, 0x03, 0xd4, 0x81, 0xb9, 0xfe, 0xe9, 0x05, 0xad, 0x1e, 0x77, 0x36, + 0xaf, 0x5e, 0x39, 0x06, 0x52, 0x24, 0xeb, 0x14, 0xfa, 0x44, 0x81, 0x52, 0x6a, 0xe0, 0x40, 0xbf, + 0xcb, 0x50, 0x1e, 0x1e, 0x7a, 0xaa, 0x97, 0xdf, 0x05, 0x13, 0x06, 0x2e, 0xff, 0xff, 0xfb, 0x9f, + 0xbe, 0x98, 0xa8, 0xa9, 0xcb, 0xc9, 0xd7, 0x31, 0xff, 0xc2, 0x3d, 0xb8, 0x91, 0x08, 0xd6, 0x95, + 0xab, 0xe8, 0x33, 0x05, 0x4e, 0x0f, 0x5c, 0x88, 0xe8, 0xca, 0xc8, 0xab, 0x77, 0x70, 0xd0, 0xa8, + 0x5e, 0x3d, 0x0e, 0x54, 0xb8, 0xb4, 0xc2, 0x5d, 0x3a, 0xaf, 0x56, 0x86, 0x5d, 0xf2, 0xb9, 0x4a, + 0xe8, 0x8f, 0x09, 0xb3, 0x7d, 0xec, 0x8a, 0x7e, 0x3f, 0x32, 0xa9, 0xfd, 0x14, 0x5b, 0x5d, 0x7d, + 0x37, 0x30, 0x4e, 0xfe, 0x37, 0x0a, 0xcc, 0x0f, 0xb1, 0x2a, 0xba, 0x96, 0xb1, 0xc3, 0x28, 0x46, + 0xaf, 0x5e, 0x3f, 0x1e, 0x58, 0x98, 0xd4, 0x78, 0xec, 0x57, 0x1a, 0x97, 0x86, 0x63, 0x17, 0x54, + 0xaf, 0x99, 0xb1, 0x72, 0x98, 0x87, 0xa7, 0x90, 0x8f, 0xee, 0x36, 0x94, 0x35, 0x08, 0xf5, 0xdd, + 0xbb, 0xd5, 0x8b, 0x63, 0x10, 0x71, 0xc8, 0x24, 0xa1, 0x9a, 0xf8, 0xa6, 0xc8, 0x3a, 0xbd, 0x11, + 0x64, 0x5e, 0x5d, 0x19, 0x83, 0xcd, 0x36, 0x13, 0x13, 0xf6, 0x38, 0x33, 0x03, 0xa4, 0x7a, 0x5c, + 0x33, 0x5d, 0x40, 0xdb, 0x84, 0x0d, 0x50, 0x51, 0x66, 0xe1, 0x66, 0x53, 0x69, 0x66, 0xe1, 0x8e, + 0x62, 0xb6, 0x53, 0xe8, 0x07, 0x05, 0xd0, 0xf0, 0x0c, 0x85, 0xae, 0x9f, 0x64, 0xd4, 0x3a, 0x51, + 0xaf, 0xec, 0xf1, 0x7a, 0x69, 0xa3, 0x17, 0xa3, 0x7a, 0x45, 0x8b, 0x89, 0x4c, 0x7b, 0x2d, 0xc6, + 0xc8, 0xf0, 0xcb, 0xed, 0x25, 0x31, 0xd8, 0x51, 0x22, 0x31, 0xdd, 0x2e, 0xb6, 0x9c, 0x94, 0xc0, + 0xc1, 0x5d, 0x72, 0xa4, 0xbd, 0x8e, 0x47, 0xbd, 0x23, 0xf4, 0xb3, 0x02, 0xc5, 0x98, 0x67, 0x51, + 0x56, 0xfa, 0x07, 0x59, 0xbd, 0x7a, 0x69, 0x3c, 0x48, 0x84, 0xf0, 0xb5, 0xc2, 0x63, 0xf8, 0x52, + 0x41, 0x9f, 0x2b, 0xc3, 0x51, 0xf4, 0x42, 0xac, 0xf6, 0x3a, 0xfd, 0x53, 0x2b, 0xfd, 0xc5, 0x92, + 0x8a, 0x65, 0x24, 0x24, 0x0e, 0x6e, 0x24, 0x42, 0x44, 0x9b, 0x5e, 0x17, 0xdf, 0x1b, 0x47, 0x77, + 0xff, 0xf2, 0xef, 0x3f, 0x77, 0x2c, 0xb6, 0xd7, 0x6b, 0xd7, 0x0d, 0xb7, 0xab, 0xf1, 0x80, 0x5c, + 0xda, 0x89, 0x1e, 0xb4, 0xf8, 0xcf, 0x59, 0x87, 0x38, 0x9a, 0xd7, 0xfe, 0x43, 0xc7, 0xd5, 0x86, + 0x7e, 0x3b, 0xb6, 0xf3, 0xfc, 0x4b, 0xf9, 0xe6, 0xaf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xc1, 0x2f, + 0x2d, 0x08, 0x92, 0x14, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/flyteidl/gen/pb-go/flyteidl/artifact/artifacts.pb.gw.go b/flyteidl/gen/pb-go/flyteidl/artifact/artifacts.pb.gw.go index 4d83ccf464..6e92073451 100644 --- a/flyteidl/gen/pb-go/flyteidl/artifact/artifacts.pb.gw.go +++ b/flyteidl/gen/pb-go/flyteidl/artifact/artifacts.pb.gw.go @@ -28,209 +28,15 @@ var _ status.Status var _ = runtime.String var _ = utilities.NewDoubleArray -var ( - filter_ArtifactRegistry_GetArtifact_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) - func request_ArtifactRegistry_GetArtifact_0(ctx context.Context, marshaler runtime.Marshaler, client ArtifactRegistryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq GetArtifactRequest var metadata runtime.ServerMetadata - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ArtifactRegistry_GetArtifact_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.GetArtifact(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -var ( - filter_ArtifactRegistry_GetArtifact_1 = &utilities.DoubleArray{Encoding: map[string]int{"query": 0, "artifact_id": 1, "artifact_key": 2, "project": 3, "domain": 4, "name": 5, "version": 6}, Base: []int{1, 13, 1, 1, 1, 4, 3, 2, 0, 0, 9, 7, 6, 0, 9, 9, 0}, Check: []int{0, 1, 2, 3, 4, 2, 6, 7, 5, 8, 2, 11, 12, 13, 2, 15, 16}} -) - -func request_ArtifactRegistry_GetArtifact_1(ctx context.Context, marshaler runtime.Marshaler, client ArtifactRegistryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetArtifactRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["query.artifact_id.artifact_key.project"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "query.artifact_id.artifact_key.project") - } - - err = runtime.PopulateFieldFromPath(&protoReq, "query.artifact_id.artifact_key.project", val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "query.artifact_id.artifact_key.project", err) - } - - val, ok = pathParams["query.artifact_id.artifact_key.domain"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "query.artifact_id.artifact_key.domain") - } - - err = runtime.PopulateFieldFromPath(&protoReq, "query.artifact_id.artifact_key.domain", val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "query.artifact_id.artifact_key.domain", err) - } - - val, ok = pathParams["query.artifact_id.artifact_key.name"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "query.artifact_id.artifact_key.name") - } - - err = runtime.PopulateFieldFromPath(&protoReq, "query.artifact_id.artifact_key.name", val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "query.artifact_id.artifact_key.name", err) - } - - val, ok = pathParams["query.artifact_id.version"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "query.artifact_id.version") - } - - err = runtime.PopulateFieldFromPath(&protoReq, "query.artifact_id.version", val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "query.artifact_id.version", err) - } - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ArtifactRegistry_GetArtifact_1); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.GetArtifact(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -var ( - filter_ArtifactRegistry_GetArtifact_2 = &utilities.DoubleArray{Encoding: map[string]int{"query": 0, "artifact_id": 1, "artifact_key": 2, "project": 3, "domain": 4, "name": 5}, Base: []int{1, 9, 1, 1, 1, 4, 4, 0, 3, 0, 9, 7, 7, 0}, Check: []int{0, 1, 2, 3, 4, 2, 6, 5, 7, 9, 2, 11, 12, 13}} -) - -func request_ArtifactRegistry_GetArtifact_2(ctx context.Context, marshaler runtime.Marshaler, client ArtifactRegistryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetArtifactRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["query.artifact_id.artifact_key.project"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "query.artifact_id.artifact_key.project") - } - - err = runtime.PopulateFieldFromPath(&protoReq, "query.artifact_id.artifact_key.project", val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "query.artifact_id.artifact_key.project", err) - } - - val, ok = pathParams["query.artifact_id.artifact_key.domain"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "query.artifact_id.artifact_key.domain") - } - - err = runtime.PopulateFieldFromPath(&protoReq, "query.artifact_id.artifact_key.domain", val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "query.artifact_id.artifact_key.domain", err) - } - - val, ok = pathParams["query.artifact_id.artifact_key.name"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "query.artifact_id.artifact_key.name") - } - - err = runtime.PopulateFieldFromPath(&protoReq, "query.artifact_id.artifact_key.name", val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "query.artifact_id.artifact_key.name", err) - } - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ArtifactRegistry_GetArtifact_2); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.GetArtifact(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -var ( - filter_ArtifactRegistry_GetArtifact_3 = &utilities.DoubleArray{Encoding: map[string]int{"query": 0, "artifact_tag": 1, "artifact_key": 2, "project": 3, "domain": 4, "name": 5}, Base: []int{1, 9, 1, 1, 1, 4, 4, 0, 3, 0, 9, 7, 7, 0}, Check: []int{0, 1, 2, 3, 4, 2, 6, 5, 7, 9, 2, 11, 12, 13}} -) - -func request_ArtifactRegistry_GetArtifact_3(ctx context.Context, marshaler runtime.Marshaler, client ArtifactRegistryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetArtifactRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["query.artifact_tag.artifact_key.project"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "query.artifact_tag.artifact_key.project") - } - - err = runtime.PopulateFieldFromPath(&protoReq, "query.artifact_tag.artifact_key.project", val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "query.artifact_tag.artifact_key.project", err) - } - - val, ok = pathParams["query.artifact_tag.artifact_key.domain"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "query.artifact_tag.artifact_key.domain") - } - - err = runtime.PopulateFieldFromPath(&protoReq, "query.artifact_tag.artifact_key.domain", val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "query.artifact_tag.artifact_key.domain", err) - } - - val, ok = pathParams["query.artifact_tag.artifact_key.name"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "query.artifact_tag.artifact_key.name") - } - - err = runtime.PopulateFieldFromPath(&protoReq, "query.artifact_tag.artifact_key.name", val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "query.artifact_tag.artifact_key.name", err) - } - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ArtifactRegistry_GetArtifact_3); err != nil { + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -239,107 +45,15 @@ func request_ArtifactRegistry_GetArtifact_3(ctx context.Context, marshaler runti } -var ( - filter_ArtifactRegistry_SearchArtifacts_0 = &utilities.DoubleArray{Encoding: map[string]int{"artifact_key": 0, "project": 1, "domain": 2, "name": 3}, Base: []int{1, 1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 3, 4, 5}} -) - func request_ArtifactRegistry_SearchArtifacts_0(ctx context.Context, marshaler runtime.Marshaler, client ArtifactRegistryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq SearchArtifactsRequest var metadata runtime.ServerMetadata - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["artifact_key.project"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "artifact_key.project") - } - - err = runtime.PopulateFieldFromPath(&protoReq, "artifact_key.project", val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "artifact_key.project", err) - } - - val, ok = pathParams["artifact_key.domain"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "artifact_key.domain") - } - - err = runtime.PopulateFieldFromPath(&protoReq, "artifact_key.domain", val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "artifact_key.domain", err) - } - - val, ok = pathParams["artifact_key.name"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "artifact_key.name") - } - - err = runtime.PopulateFieldFromPath(&protoReq, "artifact_key.name", val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "artifact_key.name", err) - } - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ArtifactRegistry_SearchArtifacts_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.SearchArtifacts(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -var ( - filter_ArtifactRegistry_SearchArtifacts_1 = &utilities.DoubleArray{Encoding: map[string]int{"artifact_key": 0, "project": 1, "domain": 2}, Base: []int{1, 1, 1, 2, 0, 0}, Check: []int{0, 1, 2, 2, 3, 4}} -) - -func request_ArtifactRegistry_SearchArtifacts_1(ctx context.Context, marshaler runtime.Marshaler, client ArtifactRegistryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq SearchArtifactsRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["artifact_key.project"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "artifact_key.project") - } - - err = runtime.PopulateFieldFromPath(&protoReq, "artifact_key.project", val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "artifact_key.project", err) - } - - val, ok = pathParams["artifact_key.domain"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "artifact_key.domain") - } - - err = runtime.PopulateFieldFromPath(&protoReq, "artifact_key.domain", val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "artifact_key.domain", err) - } - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ArtifactRegistry_SearchArtifacts_1); err != nil { + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -548,7 +262,7 @@ func RegisterArtifactRegistryHandler(ctx context.Context, mux *runtime.ServeMux, // "ArtifactRegistryClient" to call the correct interceptors. func RegisterArtifactRegistryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client ArtifactRegistryClient) error { - mux.Handle("GET", pattern_ArtifactRegistry_GetArtifact_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("POST", pattern_ArtifactRegistry_GetArtifact_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -568,67 +282,7 @@ func RegisterArtifactRegistryHandlerClient(ctx context.Context, mux *runtime.Ser }) - mux.Handle("GET", pattern_ArtifactRegistry_GetArtifact_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_ArtifactRegistry_GetArtifact_1(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_ArtifactRegistry_GetArtifact_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_ArtifactRegistry_GetArtifact_2, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_ArtifactRegistry_GetArtifact_2(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_ArtifactRegistry_GetArtifact_2(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_ArtifactRegistry_GetArtifact_3, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_ArtifactRegistry_GetArtifact_3(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_ArtifactRegistry_GetArtifact_3(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_ArtifactRegistry_SearchArtifacts_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("POST", pattern_ArtifactRegistry_SearchArtifacts_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -648,26 +302,6 @@ func RegisterArtifactRegistryHandlerClient(ctx context.Context, mux *runtime.Ser }) - mux.Handle("GET", pattern_ArtifactRegistry_SearchArtifacts_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_ArtifactRegistry_SearchArtifacts_1(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_ArtifactRegistry_SearchArtifacts_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - mux.Handle("PATCH", pattern_ArtifactRegistry_DeactivateTrigger_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -734,15 +368,7 @@ func RegisterArtifactRegistryHandlerClient(ctx context.Context, mux *runtime.Ser var ( pattern_ArtifactRegistry_GetArtifact_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 0}, []string{"artifacts", "api", "v1"}, "")) - pattern_ArtifactRegistry_GetArtifact_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8}, []string{"artifacts", "api", "v1", "artifact", "id", "query.artifact_id.artifact_key.project", "query.artifact_id.artifact_key.domain", "query.artifact_id.artifact_key.name", "query.artifact_id.version"}, "")) - - pattern_ArtifactRegistry_GetArtifact_2 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7}, []string{"artifacts", "api", "v1", "artifact", "id", "query.artifact_id.artifact_key.project", "query.artifact_id.artifact_key.domain", "query.artifact_id.artifact_key.name"}, "")) - - pattern_ArtifactRegistry_GetArtifact_3 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7}, []string{"artifacts", "api", "v1", "artifact", "tag", "query.artifact_tag.artifact_key.project", "query.artifact_tag.artifact_key.domain", "query.artifact_tag.artifact_key.name"}, "")) - - pattern_ArtifactRegistry_SearchArtifacts_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6}, []string{"artifacts", "api", "v1", "search", "artifact_key.project", "artifact_key.domain", "artifact_key.name"}, "")) - - pattern_ArtifactRegistry_SearchArtifacts_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"artifacts", "api", "v1", "search", "artifact_key.project", "artifact_key.domain"}, "")) + pattern_ArtifactRegistry_SearchArtifacts_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"artifacts", "api", "v1", "search"}, "")) pattern_ArtifactRegistry_DeactivateTrigger_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"artifacts", "api", "v1", "trigger", "deactivate"}, "")) @@ -754,16 +380,8 @@ var ( var ( forward_ArtifactRegistry_GetArtifact_0 = runtime.ForwardResponseMessage - forward_ArtifactRegistry_GetArtifact_1 = runtime.ForwardResponseMessage - - forward_ArtifactRegistry_GetArtifact_2 = runtime.ForwardResponseMessage - - forward_ArtifactRegistry_GetArtifact_3 = runtime.ForwardResponseMessage - forward_ArtifactRegistry_SearchArtifacts_0 = runtime.ForwardResponseMessage - forward_ArtifactRegistry_SearchArtifacts_1 = runtime.ForwardResponseMessage - forward_ArtifactRegistry_DeactivateTrigger_0 = runtime.ForwardResponseMessage forward_ArtifactRegistry_FindByWorkflowExec_0 = runtime.ForwardResponseMessage diff --git a/flyteidl/gen/pb-go/flyteidl/artifact/artifacts.swagger.json b/flyteidl/gen/pb-go/flyteidl/artifact/artifacts.swagger.json index a670f70f1d..7068db44ec 100644 --- a/flyteidl/gen/pb-go/flyteidl/artifact/artifacts.swagger.json +++ b/flyteidl/gen/pb-go/flyteidl/artifact/artifacts.swagger.json @@ -15,9 +15,9 @@ "application/json" ], "paths": { - "/artifacts/api/v1/artifact/id/{query.artifact_id.artifact_key.project}/{query.artifact_id.artifact_key.domain}/{query.artifact_id.artifact_key.name}": { - "get": { - "operationId": "GetArtifact3", + "/artifacts/api/v1/artifacts": { + "post": { + "operationId": "GetArtifact", "responses": { "200": { "description": "A successful response.", @@ -28,442 +28,39 @@ }, "parameters": [ { - "name": "query.artifact_id.artifact_key.project", - "description": "Project and domain and suffix needs to be unique across a given artifact store.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "query.artifact_id.artifact_key.domain", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "query.artifact_id.artifact_key.name", - "in": "path", + "name": "body", + "in": "body", "required": true, - "type": "string" - }, - { - "name": "query.artifact_id.version", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "query.artifact_tag.value.static_value", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "query.artifact_tag.value.triggered_binding.index", - "in": "query", - "required": false, - "type": "integer", - "format": "int64" - }, - { - "name": "query.artifact_tag.value.triggered_binding.partition_key", - "description": "These two fields are only relevant in the partition value case.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "query.artifact_tag.value.triggered_binding.transform", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "query.artifact_tag.value.input_binding.var", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "query.uri", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "query.binding.index", - "in": "query", - "required": false, - "type": "integer", - "format": "int64" - }, - { - "name": "query.binding.partition_key", - "description": "These two fields are only relevant in the partition value case.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "query.binding.transform", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "details", - "description": "If false, then long_description is not returned.", - "in": "query", - "required": false, - "type": "boolean", - "format": "boolean" - } - ], - "tags": [ - "ArtifactRegistry" - ] - } - }, - "/artifacts/api/v1/artifact/id/{query.artifact_id.artifact_key.project}/{query.artifact_id.artifact_key.domain}/{query.artifact_id.artifact_key.name}/{query.artifact_id.version}": { - "get": { - "operationId": "GetArtifact2", - "responses": { - "200": { - "description": "A successful response.", "schema": { - "$ref": "#/definitions/artifactGetArtifactResponse" + "$ref": "#/definitions/artifactGetArtifactRequest" } } - }, - "parameters": [ - { - "name": "query.artifact_id.artifact_key.project", - "description": "Project and domain and suffix needs to be unique across a given artifact store.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "query.artifact_id.artifact_key.domain", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "query.artifact_id.artifact_key.name", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "query.artifact_id.version", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "query.artifact_tag.value.static_value", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "query.artifact_tag.value.triggered_binding.index", - "in": "query", - "required": false, - "type": "integer", - "format": "int64" - }, - { - "name": "query.artifact_tag.value.triggered_binding.partition_key", - "description": "These two fields are only relevant in the partition value case.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "query.artifact_tag.value.triggered_binding.transform", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "query.artifact_tag.value.input_binding.var", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "query.uri", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "query.binding.index", - "in": "query", - "required": false, - "type": "integer", - "format": "int64" - }, - { - "name": "query.binding.partition_key", - "description": "These two fields are only relevant in the partition value case.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "query.binding.transform", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "details", - "description": "If false, then long_description is not returned.", - "in": "query", - "required": false, - "type": "boolean", - "format": "boolean" - } ], "tags": [ "ArtifactRegistry" ] } }, - "/artifacts/api/v1/artifact/tag/{query.artifact_tag.artifact_key.project}/{query.artifact_tag.artifact_key.domain}/{query.artifact_tag.artifact_key.name}": { - "get": { - "operationId": "GetArtifact4", + "/artifacts/api/v1/search": { + "post": { + "operationId": "SearchArtifacts", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/artifactGetArtifactResponse" + "$ref": "#/definitions/artifactSearchArtifactsResponse" } } }, "parameters": [ { - "name": "query.artifact_tag.artifact_key.project", - "description": "Project and domain and suffix needs to be unique across a given artifact store.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "query.artifact_tag.artifact_key.domain", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "query.artifact_tag.artifact_key.name", - "in": "path", + "name": "body", + "in": "body", "required": true, - "type": "string" - }, - { - "name": "query.artifact_id.version", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "query.artifact_tag.value.static_value", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "query.artifact_tag.value.triggered_binding.index", - "in": "query", - "required": false, - "type": "integer", - "format": "int64" - }, - { - "name": "query.artifact_tag.value.triggered_binding.partition_key", - "description": "These two fields are only relevant in the partition value case.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "query.artifact_tag.value.triggered_binding.transform", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "query.artifact_tag.value.input_binding.var", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "query.uri", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "query.binding.index", - "in": "query", - "required": false, - "type": "integer", - "format": "int64" - }, - { - "name": "query.binding.partition_key", - "description": "These two fields are only relevant in the partition value case.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "query.binding.transform", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "details", - "description": "If false, then long_description is not returned.", - "in": "query", - "required": false, - "type": "boolean", - "format": "boolean" - } - ], - "tags": [ - "ArtifactRegistry" - ] - } - }, - "/artifacts/api/v1/artifacts": { - "get": { - "operationId": "GetArtifact", - "responses": { - "200": { - "description": "A successful response.", "schema": { - "$ref": "#/definitions/artifactGetArtifactResponse" + "$ref": "#/definitions/artifactSearchArtifactsRequest" } } - }, - "parameters": [ - { - "name": "query.artifact_id.artifact_key.project", - "description": "Project and domain and suffix needs to be unique across a given artifact store.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "query.artifact_id.artifact_key.domain", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "query.artifact_id.artifact_key.name", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "query.artifact_id.version", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "query.artifact_tag.artifact_key.project", - "description": "Project and domain and suffix needs to be unique across a given artifact store.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "query.artifact_tag.artifact_key.domain", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "query.artifact_tag.artifact_key.name", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "query.artifact_tag.value.static_value", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "query.artifact_tag.value.triggered_binding.index", - "in": "query", - "required": false, - "type": "integer", - "format": "int64" - }, - { - "name": "query.artifact_tag.value.triggered_binding.partition_key", - "description": "These two fields are only relevant in the partition value case.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "query.artifact_tag.value.triggered_binding.transform", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "query.artifact_tag.value.input_binding.var", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "query.uri", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "query.binding.index", - "in": "query", - "required": false, - "type": "integer", - "format": "int64" - }, - { - "name": "query.binding.partition_key", - "description": "These two fields are only relevant in the partition value case.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "query.binding.transform", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "details", - "description": "If false, then long_description is not returned.", - "in": "query", - "required": false, - "type": "boolean", - "format": "boolean" - } ], "tags": [ "ArtifactRegistry" @@ -519,162 +116,6 @@ ] } }, - "/artifacts/api/v1/search/{artifact_key.project}/{artifact_key.domain}": { - "get": { - "operationId": "SearchArtifacts2", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/artifactSearchArtifactsResponse" - } - } - }, - "parameters": [ - { - "name": "artifact_key.project", - "description": "Project and domain and suffix needs to be unique across a given artifact store.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "artifact_key.domain", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "artifact_key.name", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "principal", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "version", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "options.strict_partitions", - "description": "If true, this means a strict partition search. meaning if you don't specify the partition\nfield, that will mean, non-partitioned, rather than any partition.", - "in": "query", - "required": false, - "type": "boolean", - "format": "boolean" - }, - { - "name": "options.latest_by_key", - "description": "If true, only one artifact per key will be returned. It will be the latest one by creation time.", - "in": "query", - "required": false, - "type": "boolean", - "format": "boolean" - }, - { - "name": "token", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "limit", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - } - ], - "tags": [ - "ArtifactRegistry" - ] - } - }, - "/artifacts/api/v1/search/{artifact_key.project}/{artifact_key.domain}/{artifact_key.name}": { - "get": { - "operationId": "SearchArtifacts", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/artifactSearchArtifactsResponse" - } - } - }, - "parameters": [ - { - "name": "artifact_key.project", - "description": "Project and domain and suffix needs to be unique across a given artifact store.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "artifact_key.domain", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "artifact_key.name", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "principal", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "version", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "options.strict_partitions", - "description": "If true, this means a strict partition search. meaning if you don't specify the partition\nfield, that will mean, non-partitioned, rather than any partition.", - "in": "query", - "required": false, - "type": "boolean", - "format": "boolean" - }, - { - "name": "options.latest_by_key", - "description": "If true, only one artifact per key will be returned. It will be the latest one by creation time.", - "in": "query", - "required": false, - "type": "boolean", - "format": "boolean" - }, - { - "name": "token", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "limit", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - } - ], - "tags": [ - "ArtifactRegistry" - ] - } - }, "/artifacts/api/v1/trigger/deactivate": { "patch": { "operationId": "DeactivateTrigger", @@ -1281,6 +722,19 @@ ], "default": "INPUTS" }, + "artifactGetArtifactRequest": { + "type": "object", + "properties": { + "query": { + "$ref": "#/definitions/coreArtifactQuery" + }, + "details": { + "type": "boolean", + "format": "boolean", + "description": "If false, then long_description is not returned." + } + } + }, "artifactGetArtifactResponse": { "type": "object", "properties": { @@ -1303,6 +757,33 @@ "artifactRegisterResponse": { "type": "object" }, + "artifactSearchArtifactsRequest": { + "type": "object", + "properties": { + "artifact_key": { + "$ref": "#/definitions/coreArtifactKey" + }, + "partitions": { + "$ref": "#/definitions/corePartitions" + }, + "principal": { + "type": "string" + }, + "version": { + "type": "string" + }, + "options": { + "$ref": "#/definitions/artifactSearchOptions" + }, + "token": { + "type": "string" + }, + "limit": { + "type": "integer", + "format": "int32" + } + } + }, "artifactSearchArtifactsResponse": { "type": "object", "properties": { diff --git a/flyteidl/gen/pb-java/flyteidl/artifact/Artifacts.java b/flyteidl/gen/pb-java/flyteidl/artifact/Artifacts.java index c4272da952..92f92c7e09 100644 --- a/flyteidl/gen/pb-java/flyteidl/artifact/Artifacts.java +++ b/flyteidl/gen/pb-java/flyteidl/artifact/Artifacts.java @@ -21418,63 +21418,47 @@ public flyteidl.artifact.Artifacts.ListUsageResponse getDefaultInstanceForType() "UsageRequest\022.\n\013artifact_id\030\001 \001(\0132\031.flyt" + "eidl.core.ArtifactID\"S\n\021ListUsageRespons" + "e\022>\n\nexecutions\030\001 \003(\0132*.flyteidl.core.Wo" + - "rkflowExecutionIdentifier2\361\020\n\020ArtifactRe" + + "rkflowExecutionIdentifier2\373\013\n\020ArtifactRe" + "gistry\022g\n\016CreateArtifact\022(.flyteidl.arti" + "fact.CreateArtifactRequest\032).flyteidl.ar" + - "tifact.CreateArtifactResponse\"\000\022\361\004\n\013GetA" + + "tifact.CreateArtifactResponse\"\000\022\204\001\n\013GetA" + "rtifact\022%.flyteidl.artifact.GetArtifactR" + "equest\032&.flyteidl.artifact.GetArtifactRe" + - "sponse\"\222\004\202\323\344\223\002\213\004\022\033/artifacts/api/v1/arti" + - "factsZ\263\001\022\260\001/artifacts/api/v1/artifact/id" + - "/{query.artifact_id.artifact_key.project" + - "}/{query.artifact_id.artifact_key.domain" + - "}/{query.artifact_id.artifact_key.name}/" + - "{query.artifact_id.version}Z\227\001\022\224\001/artifa" + - "cts/api/v1/artifact/id/{query.artifact_i" + - "d.artifact_key.project}/{query.artifact_" + - "id.artifact_key.domain}/{query.artifact_" + - "id.artifact_key.name}Z\233\001\022\230\001/artifacts/ap" + - "i/v1/artifact/tag/{query.artifact_tag.ar" + - "tifact_key.project}/{query.artifact_tag." + - "artifact_key.domain}/{query.artifact_tag" + - ".artifact_key.name}\022\226\002\n\017SearchArtifacts\022" + - ").flyteidl.artifact.SearchArtifactsReque" + - "st\032*.flyteidl.artifact.SearchArtifactsRe" + - "sponse\"\253\001\202\323\344\223\002\244\001\022Y/artifacts/api/v1/sear" + - "ch/{artifact_key.project}/{artifact_key." + - "domain}/{artifact_key.name}ZG\022E/artifact" + - "s/api/v1/search/{artifact_key.project}/{" + - "artifact_key.domain}\022d\n\rCreateTrigger\022\'." + - "flyteidl.artifact.CreateTriggerRequest\032(" + - ".flyteidl.artifact.CreateTriggerResponse" + - "\"\000\022\237\001\n\021DeactivateTrigger\022+.flyteidl.arti" + - "fact.DeactivateTriggerRequest\032,.flyteidl" + - ".artifact.DeactivateTriggerResponse\"/\202\323\344" + - "\223\002)2$/artifacts/api/v1/trigger/deactivat" + - "e:\001*\022O\n\006AddTag\022 .flyteidl.artifact.AddTa" + - "gRequest\032!.flyteidl.artifact.AddTagRespo" + - "nse\"\000\022e\n\020RegisterProducer\022*.flyteidl.art" + - "ifact.RegisterProducerRequest\032#.flyteidl" + - ".artifact.RegisterResponse\"\000\022e\n\020Register" + - "Consumer\022*.flyteidl.artifact.RegisterCon" + - "sumerRequest\032#.flyteidl.artifact.Registe" + - "rResponse\"\000\022m\n\022SetExecutionInputs\022).flyt" + - "eidl.artifact.ExecutionInputsRequest\032*.f" + - "lyteidl.artifact.ExecutionInputsResponse" + - "\"\000\022\330\001\n\022FindByWorkflowExec\022,.flyteidl.art" + - "ifact.FindByWorkflowExecRequest\032*.flytei" + - "dl.artifact.SearchArtifactsResponse\"h\202\323\344" + - "\223\002b\022`/artifacts/api/v1/search/execution/" + - "{exec_id.project}/{exec_id.domain}/{exec" + - "_id.name}/{direction}\022\365\001\n\tListUsage\022#.fl" + - "yteidl.artifact.ListUsageRequest\032$.flyte" + - "idl.artifact.ListUsageResponse\"\234\001\202\323\344\223\002\225\001" + - "\022\222\001/artifacts/api/v1/usage/{artifact_id." + - "artifact_key.project}/{artifact_id.artif" + - "act_key.domain}/{artifact_id.artifact_ke" + - "y.name}/{artifact_id.version}B@Z>github." + - "com/flyteorg/flyte/flyteidl/gen/pb-go/fl" + - "yteidl/artifactb\006proto3" + "sponse\"&\202\323\344\223\002 \"\033/artifacts/api/v1/artifa" + + "cts:\001*\022\215\001\n\017SearchArtifacts\022).flyteidl.ar" + + "tifact.SearchArtifactsRequest\032*.flyteidl" + + ".artifact.SearchArtifactsResponse\"#\202\323\344\223\002" + + "\035\"\030/artifacts/api/v1/search:\001*\022d\n\rCreate" + + "Trigger\022\'.flyteidl.artifact.CreateTrigge" + + "rRequest\032(.flyteidl.artifact.CreateTrigg" + + "erResponse\"\000\022\237\001\n\021DeactivateTrigger\022+.fly" + + "teidl.artifact.DeactivateTriggerRequest\032" + + ",.flyteidl.artifact.DeactivateTriggerRes" + + "ponse\"/\202\323\344\223\002)2$/artifacts/api/v1/trigger" + + "/deactivate:\001*\022O\n\006AddTag\022 .flyteidl.arti" + + "fact.AddTagRequest\032!.flyteidl.artifact.A" + + "ddTagResponse\"\000\022e\n\020RegisterProducer\022*.fl" + + "yteidl.artifact.RegisterProducerRequest\032" + + "#.flyteidl.artifact.RegisterResponse\"\000\022e" + + "\n\020RegisterConsumer\022*.flyteidl.artifact.R" + + "egisterConsumerRequest\032#.flyteidl.artifa" + + "ct.RegisterResponse\"\000\022m\n\022SetExecutionInp" + + "uts\022).flyteidl.artifact.ExecutionInputsR" + + "equest\032*.flyteidl.artifact.ExecutionInpu" + + "tsResponse\"\000\022\330\001\n\022FindByWorkflowExec\022,.fl" + + "yteidl.artifact.FindByWorkflowExecReques" + + "t\032*.flyteidl.artifact.SearchArtifactsRes" + + "ponse\"h\202\323\344\223\002b\022`/artifacts/api/v1/search/" + + "execution/{exec_id.project}/{exec_id.dom" + + "ain}/{exec_id.name}/{direction}\022\365\001\n\tList" + + "Usage\022#.flyteidl.artifact.ListUsageReque" + + "st\032$.flyteidl.artifact.ListUsageResponse" + + "\"\234\001\202\323\344\223\002\225\001\022\222\001/artifacts/api/v1/usage/{ar" + + "tifact_id.artifact_key.project}/{artifac" + + "t_id.artifact_key.domain}/{artifact_id.a" + + "rtifact_key.name}/{artifact_id.version}B" + + "@Z>github.com/flyteorg/flyte/flyteidl/ge" + + "n/pb-go/flyteidl/artifactb\006proto3" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { diff --git a/flyteidl/gen/pb_python/flyteidl/artifact/artifacts_pb2.py b/flyteidl/gen/pb_python/flyteidl/artifact/artifacts_pb2.py index cc5c3dc55f..983ab99c0b 100644 --- a/flyteidl/gen/pb_python/flyteidl/artifact/artifacts_pb2.py +++ b/flyteidl/gen/pb_python/flyteidl/artifact/artifacts_pb2.py @@ -22,7 +22,7 @@ from flyteidl.event import cloudevents_pb2 as flyteidl_dot_event_dot_cloudevents__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!flyteidl/artifact/artifacts.proto\x12\x11\x66lyteidl.artifact\x1a\x19google/protobuf/any.proto\x1a\x1cgoogle/api/annotations.proto\x1a flyteidl/admin/launch_plan.proto\x1a\x1c\x66lyteidl/core/literals.proto\x1a\x19\x66lyteidl/core/types.proto\x1a\x1e\x66lyteidl/core/identifier.proto\x1a\x1f\x66lyteidl/core/artifact_id.proto\x1a\x1d\x66lyteidl/core/interface.proto\x1a flyteidl/event/cloudevents.proto\"\xca\x01\n\x08\x41rtifact\x12:\n\x0b\x61rtifact_id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.ArtifactIDR\nartifactId\x12\x33\n\x04spec\x18\x02 \x01(\x0b\x32\x1f.flyteidl.artifact.ArtifactSpecR\x04spec\x12\x12\n\x04tags\x18\x03 \x03(\tR\x04tags\x12\x39\n\x06source\x18\x04 \x01(\x0b\x32!.flyteidl.artifact.ArtifactSourceR\x06source\"\x8b\x03\n\x15\x43reateArtifactRequest\x12=\n\x0c\x61rtifact_key\x18\x01 \x01(\x0b\x32\x1a.flyteidl.core.ArtifactKeyR\x0b\x61rtifactKey\x12\x18\n\x07version\x18\x03 \x01(\tR\x07version\x12\x33\n\x04spec\x18\x02 \x01(\x0b\x32\x1f.flyteidl.artifact.ArtifactSpecR\x04spec\x12X\n\npartitions\x18\x04 \x03(\x0b\x32\x38.flyteidl.artifact.CreateArtifactRequest.PartitionsEntryR\npartitions\x12\x10\n\x03tag\x18\x05 \x01(\tR\x03tag\x12\x39\n\x06source\x18\x06 \x01(\x0b\x32!.flyteidl.artifact.ArtifactSourceR\x06source\x1a=\n\x0fPartitionsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\xfb\x01\n\x0e\x41rtifactSource\x12Y\n\x12workflow_execution\x18\x01 \x01(\x0b\x32*.flyteidl.core.WorkflowExecutionIdentifierR\x11workflowExecution\x12\x17\n\x07node_id\x18\x02 \x01(\tR\x06nodeId\x12\x32\n\x07task_id\x18\x03 \x01(\x0b\x32\x19.flyteidl.core.IdentifierR\x06taskId\x12#\n\rretry_attempt\x18\x04 \x01(\rR\x0cretryAttempt\x12\x1c\n\tprincipal\x18\x05 \x01(\tR\tprincipal\"\xf9\x01\n\x0c\x41rtifactSpec\x12,\n\x05value\x18\x01 \x01(\x0b\x32\x16.flyteidl.core.LiteralR\x05value\x12.\n\x04type\x18\x02 \x01(\x0b\x32\x1a.flyteidl.core.LiteralTypeR\x04type\x12+\n\x11short_description\x18\x03 \x01(\tR\x10shortDescription\x12\x39\n\ruser_metadata\x18\x04 \x01(\x0b\x32\x14.google.protobuf.AnyR\x0cuserMetadata\x12#\n\rmetadata_type\x18\x05 \x01(\tR\x0cmetadataType\"Q\n\x16\x43reateArtifactResponse\x12\x37\n\x08\x61rtifact\x18\x01 \x01(\x0b\x32\x1b.flyteidl.artifact.ArtifactR\x08\x61rtifact\"b\n\x12GetArtifactRequest\x12\x32\n\x05query\x18\x01 \x01(\x0b\x32\x1c.flyteidl.core.ArtifactQueryR\x05query\x12\x18\n\x07\x64\x65tails\x18\x02 \x01(\x08R\x07\x64\x65tails\"N\n\x13GetArtifactResponse\x12\x37\n\x08\x61rtifact\x18\x01 \x01(\x0b\x32\x1b.flyteidl.artifact.ArtifactR\x08\x61rtifact\"`\n\rSearchOptions\x12+\n\x11strict_partitions\x18\x01 \x01(\x08R\x10strictPartitions\x12\"\n\rlatest_by_key\x18\x02 \x01(\x08R\x0blatestByKey\"\xb2\x02\n\x16SearchArtifactsRequest\x12=\n\x0c\x61rtifact_key\x18\x01 \x01(\x0b\x32\x1a.flyteidl.core.ArtifactKeyR\x0b\x61rtifactKey\x12\x39\n\npartitions\x18\x02 \x01(\x0b\x32\x19.flyteidl.core.PartitionsR\npartitions\x12\x1c\n\tprincipal\x18\x03 \x01(\tR\tprincipal\x12\x18\n\x07version\x18\x04 \x01(\tR\x07version\x12:\n\x07options\x18\x05 \x01(\x0b\x32 .flyteidl.artifact.SearchOptionsR\x07options\x12\x14\n\x05token\x18\x06 \x01(\tR\x05token\x12\x14\n\x05limit\x18\x07 \x01(\x05R\x05limit\"j\n\x17SearchArtifactsResponse\x12\x39\n\tartifacts\x18\x01 \x03(\x0b\x32\x1b.flyteidl.artifact.ArtifactR\tartifacts\x12\x14\n\x05token\x18\x02 \x01(\tR\x05token\"\xdc\x01\n\x19\x46indByWorkflowExecRequest\x12\x43\n\x07\x65xec_id\x18\x01 \x01(\x0b\x32*.flyteidl.core.WorkflowExecutionIdentifierR\x06\x65xecId\x12T\n\tdirection\x18\x02 \x01(\x0e\x32\x36.flyteidl.artifact.FindByWorkflowExecRequest.DirectionR\tdirection\"$\n\tDirection\x12\n\n\x06INPUTS\x10\x00\x12\x0b\n\x07OUTPUTS\x10\x01\"\x7f\n\rAddTagRequest\x12:\n\x0b\x61rtifact_id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.ArtifactIDR\nartifactId\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value\x12\x1c\n\toverwrite\x18\x03 \x01(\x08R\toverwrite\"\x10\n\x0e\x41\x64\x64TagResponse\"b\n\x14\x43reateTriggerRequest\x12J\n\x13trigger_launch_plan\x18\x01 \x01(\x0b\x32\x1a.flyteidl.admin.LaunchPlanR\x11triggerLaunchPlan\"\x17\n\x15\x43reateTriggerResponse\"T\n\x18\x44\x65\x61\x63tivateTriggerRequest\x12\x38\n\ntrigger_id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.IdentifierR\ttriggerId\"\x1b\n\x19\x44\x65\x61\x63tivateTriggerResponse\"\x80\x01\n\x10\x41rtifactProducer\x12\x36\n\tentity_id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.IdentifierR\x08\x65ntityId\x12\x34\n\x07outputs\x18\x02 \x01(\x0b\x32\x1a.flyteidl.core.VariableMapR\x07outputs\"\\\n\x17RegisterProducerRequest\x12\x41\n\tproducers\x18\x01 \x03(\x0b\x32#.flyteidl.artifact.ArtifactProducerR\tproducers\"\x7f\n\x10\x41rtifactConsumer\x12\x36\n\tentity_id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.IdentifierR\x08\x65ntityId\x12\x33\n\x06inputs\x18\x02 \x01(\x0b\x32\x1b.flyteidl.core.ParameterMapR\x06inputs\"\\\n\x17RegisterConsumerRequest\x12\x41\n\tconsumers\x18\x01 \x03(\x0b\x32#.flyteidl.artifact.ArtifactConsumerR\tconsumers\"\x12\n\x10RegisterResponse\"\x9a\x01\n\x16\x45xecutionInputsRequest\x12M\n\x0c\x65xecution_id\x18\x01 \x01(\x0b\x32*.flyteidl.core.WorkflowExecutionIdentifierR\x0b\x65xecutionId\x12\x31\n\x06inputs\x18\x02 \x03(\x0b\x32\x19.flyteidl.core.ArtifactIDR\x06inputs\"\x19\n\x17\x45xecutionInputsResponse\"N\n\x10ListUsageRequest\x12:\n\x0b\x61rtifact_id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.ArtifactIDR\nartifactId\"_\n\x11ListUsageResponse\x12J\n\nexecutions\x18\x01 \x03(\x0b\x32*.flyteidl.core.WorkflowExecutionIdentifierR\nexecutions2\xf1\x10\n\x10\x41rtifactRegistry\x12g\n\x0e\x43reateArtifact\x12(.flyteidl.artifact.CreateArtifactRequest\x1a).flyteidl.artifact.CreateArtifactResponse\"\x00\x12\xf1\x04\n\x0bGetArtifact\x12%.flyteidl.artifact.GetArtifactRequest\x1a&.flyteidl.artifact.GetArtifactResponse\"\x92\x04\x82\xd3\xe4\x93\x02\x8b\x04Z\xb3\x01\x12\xb0\x01/artifacts/api/v1/artifact/id/{query.artifact_id.artifact_key.project}/{query.artifact_id.artifact_key.domain}/{query.artifact_id.artifact_key.name}/{query.artifact_id.version}Z\x97\x01\x12\x94\x01/artifacts/api/v1/artifact/id/{query.artifact_id.artifact_key.project}/{query.artifact_id.artifact_key.domain}/{query.artifact_id.artifact_key.name}Z\x9b\x01\x12\x98\x01/artifacts/api/v1/artifact/tag/{query.artifact_tag.artifact_key.project}/{query.artifact_tag.artifact_key.domain}/{query.artifact_tag.artifact_key.name}\x12\x1b/artifacts/api/v1/artifacts\x12\x96\x02\n\x0fSearchArtifacts\x12).flyteidl.artifact.SearchArtifactsRequest\x1a*.flyteidl.artifact.SearchArtifactsResponse\"\xab\x01\x82\xd3\xe4\x93\x02\xa4\x01ZG\x12\x45/artifacts/api/v1/search/{artifact_key.project}/{artifact_key.domain}\x12Y/artifacts/api/v1/search/{artifact_key.project}/{artifact_key.domain}/{artifact_key.name}\x12\x64\n\rCreateTrigger\x12\'.flyteidl.artifact.CreateTriggerRequest\x1a(.flyteidl.artifact.CreateTriggerResponse\"\x00\x12\x9f\x01\n\x11\x44\x65\x61\x63tivateTrigger\x12+.flyteidl.artifact.DeactivateTriggerRequest\x1a,.flyteidl.artifact.DeactivateTriggerResponse\"/\x82\xd3\xe4\x93\x02):\x01*2$/artifacts/api/v1/trigger/deactivate\x12O\n\x06\x41\x64\x64Tag\x12 .flyteidl.artifact.AddTagRequest\x1a!.flyteidl.artifact.AddTagResponse\"\x00\x12\x65\n\x10RegisterProducer\x12*.flyteidl.artifact.RegisterProducerRequest\x1a#.flyteidl.artifact.RegisterResponse\"\x00\x12\x65\n\x10RegisterConsumer\x12*.flyteidl.artifact.RegisterConsumerRequest\x1a#.flyteidl.artifact.RegisterResponse\"\x00\x12m\n\x12SetExecutionInputs\x12).flyteidl.artifact.ExecutionInputsRequest\x1a*.flyteidl.artifact.ExecutionInputsResponse\"\x00\x12\xd8\x01\n\x12\x46indByWorkflowExec\x12,.flyteidl.artifact.FindByWorkflowExecRequest\x1a*.flyteidl.artifact.SearchArtifactsResponse\"h\x82\xd3\xe4\x93\x02\x62\x12`/artifacts/api/v1/search/execution/{exec_id.project}/{exec_id.domain}/{exec_id.name}/{direction}\x12\xf5\x01\n\tListUsage\x12#.flyteidl.artifact.ListUsageRequest\x1a$.flyteidl.artifact.ListUsageResponse\"\x9c\x01\x82\xd3\xe4\x93\x02\x95\x01\x12\x92\x01/artifacts/api/v1/usage/{artifact_id.artifact_key.project}/{artifact_id.artifact_key.domain}/{artifact_id.artifact_key.name}/{artifact_id.version}B\xcc\x01\n\x15\x63om.flyteidl.artifactB\x0e\x41rtifactsProtoP\x01Z>github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/artifact\xa2\x02\x03\x46\x41X\xaa\x02\x11\x46lyteidl.Artifact\xca\x02\x11\x46lyteidl\\Artifact\xe2\x02\x1d\x46lyteidl\\Artifact\\GPBMetadata\xea\x02\x12\x46lyteidl::Artifactb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!flyteidl/artifact/artifacts.proto\x12\x11\x66lyteidl.artifact\x1a\x19google/protobuf/any.proto\x1a\x1cgoogle/api/annotations.proto\x1a flyteidl/admin/launch_plan.proto\x1a\x1c\x66lyteidl/core/literals.proto\x1a\x19\x66lyteidl/core/types.proto\x1a\x1e\x66lyteidl/core/identifier.proto\x1a\x1f\x66lyteidl/core/artifact_id.proto\x1a\x1d\x66lyteidl/core/interface.proto\x1a flyteidl/event/cloudevents.proto\"\xca\x01\n\x08\x41rtifact\x12:\n\x0b\x61rtifact_id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.ArtifactIDR\nartifactId\x12\x33\n\x04spec\x18\x02 \x01(\x0b\x32\x1f.flyteidl.artifact.ArtifactSpecR\x04spec\x12\x12\n\x04tags\x18\x03 \x03(\tR\x04tags\x12\x39\n\x06source\x18\x04 \x01(\x0b\x32!.flyteidl.artifact.ArtifactSourceR\x06source\"\x8b\x03\n\x15\x43reateArtifactRequest\x12=\n\x0c\x61rtifact_key\x18\x01 \x01(\x0b\x32\x1a.flyteidl.core.ArtifactKeyR\x0b\x61rtifactKey\x12\x18\n\x07version\x18\x03 \x01(\tR\x07version\x12\x33\n\x04spec\x18\x02 \x01(\x0b\x32\x1f.flyteidl.artifact.ArtifactSpecR\x04spec\x12X\n\npartitions\x18\x04 \x03(\x0b\x32\x38.flyteidl.artifact.CreateArtifactRequest.PartitionsEntryR\npartitions\x12\x10\n\x03tag\x18\x05 \x01(\tR\x03tag\x12\x39\n\x06source\x18\x06 \x01(\x0b\x32!.flyteidl.artifact.ArtifactSourceR\x06source\x1a=\n\x0fPartitionsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\xfb\x01\n\x0e\x41rtifactSource\x12Y\n\x12workflow_execution\x18\x01 \x01(\x0b\x32*.flyteidl.core.WorkflowExecutionIdentifierR\x11workflowExecution\x12\x17\n\x07node_id\x18\x02 \x01(\tR\x06nodeId\x12\x32\n\x07task_id\x18\x03 \x01(\x0b\x32\x19.flyteidl.core.IdentifierR\x06taskId\x12#\n\rretry_attempt\x18\x04 \x01(\rR\x0cretryAttempt\x12\x1c\n\tprincipal\x18\x05 \x01(\tR\tprincipal\"\xf9\x01\n\x0c\x41rtifactSpec\x12,\n\x05value\x18\x01 \x01(\x0b\x32\x16.flyteidl.core.LiteralR\x05value\x12.\n\x04type\x18\x02 \x01(\x0b\x32\x1a.flyteidl.core.LiteralTypeR\x04type\x12+\n\x11short_description\x18\x03 \x01(\tR\x10shortDescription\x12\x39\n\ruser_metadata\x18\x04 \x01(\x0b\x32\x14.google.protobuf.AnyR\x0cuserMetadata\x12#\n\rmetadata_type\x18\x05 \x01(\tR\x0cmetadataType\"Q\n\x16\x43reateArtifactResponse\x12\x37\n\x08\x61rtifact\x18\x01 \x01(\x0b\x32\x1b.flyteidl.artifact.ArtifactR\x08\x61rtifact\"b\n\x12GetArtifactRequest\x12\x32\n\x05query\x18\x01 \x01(\x0b\x32\x1c.flyteidl.core.ArtifactQueryR\x05query\x12\x18\n\x07\x64\x65tails\x18\x02 \x01(\x08R\x07\x64\x65tails\"N\n\x13GetArtifactResponse\x12\x37\n\x08\x61rtifact\x18\x01 \x01(\x0b\x32\x1b.flyteidl.artifact.ArtifactR\x08\x61rtifact\"`\n\rSearchOptions\x12+\n\x11strict_partitions\x18\x01 \x01(\x08R\x10strictPartitions\x12\"\n\rlatest_by_key\x18\x02 \x01(\x08R\x0blatestByKey\"\xb2\x02\n\x16SearchArtifactsRequest\x12=\n\x0c\x61rtifact_key\x18\x01 \x01(\x0b\x32\x1a.flyteidl.core.ArtifactKeyR\x0b\x61rtifactKey\x12\x39\n\npartitions\x18\x02 \x01(\x0b\x32\x19.flyteidl.core.PartitionsR\npartitions\x12\x1c\n\tprincipal\x18\x03 \x01(\tR\tprincipal\x12\x18\n\x07version\x18\x04 \x01(\tR\x07version\x12:\n\x07options\x18\x05 \x01(\x0b\x32 .flyteidl.artifact.SearchOptionsR\x07options\x12\x14\n\x05token\x18\x06 \x01(\tR\x05token\x12\x14\n\x05limit\x18\x07 \x01(\x05R\x05limit\"j\n\x17SearchArtifactsResponse\x12\x39\n\tartifacts\x18\x01 \x03(\x0b\x32\x1b.flyteidl.artifact.ArtifactR\tartifacts\x12\x14\n\x05token\x18\x02 \x01(\tR\x05token\"\xdc\x01\n\x19\x46indByWorkflowExecRequest\x12\x43\n\x07\x65xec_id\x18\x01 \x01(\x0b\x32*.flyteidl.core.WorkflowExecutionIdentifierR\x06\x65xecId\x12T\n\tdirection\x18\x02 \x01(\x0e\x32\x36.flyteidl.artifact.FindByWorkflowExecRequest.DirectionR\tdirection\"$\n\tDirection\x12\n\n\x06INPUTS\x10\x00\x12\x0b\n\x07OUTPUTS\x10\x01\"\x7f\n\rAddTagRequest\x12:\n\x0b\x61rtifact_id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.ArtifactIDR\nartifactId\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value\x12\x1c\n\toverwrite\x18\x03 \x01(\x08R\toverwrite\"\x10\n\x0e\x41\x64\x64TagResponse\"b\n\x14\x43reateTriggerRequest\x12J\n\x13trigger_launch_plan\x18\x01 \x01(\x0b\x32\x1a.flyteidl.admin.LaunchPlanR\x11triggerLaunchPlan\"\x17\n\x15\x43reateTriggerResponse\"T\n\x18\x44\x65\x61\x63tivateTriggerRequest\x12\x38\n\ntrigger_id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.IdentifierR\ttriggerId\"\x1b\n\x19\x44\x65\x61\x63tivateTriggerResponse\"\x80\x01\n\x10\x41rtifactProducer\x12\x36\n\tentity_id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.IdentifierR\x08\x65ntityId\x12\x34\n\x07outputs\x18\x02 \x01(\x0b\x32\x1a.flyteidl.core.VariableMapR\x07outputs\"\\\n\x17RegisterProducerRequest\x12\x41\n\tproducers\x18\x01 \x03(\x0b\x32#.flyteidl.artifact.ArtifactProducerR\tproducers\"\x7f\n\x10\x41rtifactConsumer\x12\x36\n\tentity_id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.IdentifierR\x08\x65ntityId\x12\x33\n\x06inputs\x18\x02 \x01(\x0b\x32\x1b.flyteidl.core.ParameterMapR\x06inputs\"\\\n\x17RegisterConsumerRequest\x12\x41\n\tconsumers\x18\x01 \x03(\x0b\x32#.flyteidl.artifact.ArtifactConsumerR\tconsumers\"\x12\n\x10RegisterResponse\"\x9a\x01\n\x16\x45xecutionInputsRequest\x12M\n\x0c\x65xecution_id\x18\x01 \x01(\x0b\x32*.flyteidl.core.WorkflowExecutionIdentifierR\x0b\x65xecutionId\x12\x31\n\x06inputs\x18\x02 \x03(\x0b\x32\x19.flyteidl.core.ArtifactIDR\x06inputs\"\x19\n\x17\x45xecutionInputsResponse\"N\n\x10ListUsageRequest\x12:\n\x0b\x61rtifact_id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.ArtifactIDR\nartifactId\"_\n\x11ListUsageResponse\x12J\n\nexecutions\x18\x01 \x03(\x0b\x32*.flyteidl.core.WorkflowExecutionIdentifierR\nexecutions2\xfb\x0b\n\x10\x41rtifactRegistry\x12g\n\x0e\x43reateArtifact\x12(.flyteidl.artifact.CreateArtifactRequest\x1a).flyteidl.artifact.CreateArtifactResponse\"\x00\x12\x84\x01\n\x0bGetArtifact\x12%.flyteidl.artifact.GetArtifactRequest\x1a&.flyteidl.artifact.GetArtifactResponse\"&\x82\xd3\xe4\x93\x02 :\x01*\"\x1b/artifacts/api/v1/artifacts\x12\x8d\x01\n\x0fSearchArtifacts\x12).flyteidl.artifact.SearchArtifactsRequest\x1a*.flyteidl.artifact.SearchArtifactsResponse\"#\x82\xd3\xe4\x93\x02\x1d:\x01*\"\x18/artifacts/api/v1/search\x12\x64\n\rCreateTrigger\x12\'.flyteidl.artifact.CreateTriggerRequest\x1a(.flyteidl.artifact.CreateTriggerResponse\"\x00\x12\x9f\x01\n\x11\x44\x65\x61\x63tivateTrigger\x12+.flyteidl.artifact.DeactivateTriggerRequest\x1a,.flyteidl.artifact.DeactivateTriggerResponse\"/\x82\xd3\xe4\x93\x02):\x01*2$/artifacts/api/v1/trigger/deactivate\x12O\n\x06\x41\x64\x64Tag\x12 .flyteidl.artifact.AddTagRequest\x1a!.flyteidl.artifact.AddTagResponse\"\x00\x12\x65\n\x10RegisterProducer\x12*.flyteidl.artifact.RegisterProducerRequest\x1a#.flyteidl.artifact.RegisterResponse\"\x00\x12\x65\n\x10RegisterConsumer\x12*.flyteidl.artifact.RegisterConsumerRequest\x1a#.flyteidl.artifact.RegisterResponse\"\x00\x12m\n\x12SetExecutionInputs\x12).flyteidl.artifact.ExecutionInputsRequest\x1a*.flyteidl.artifact.ExecutionInputsResponse\"\x00\x12\xd8\x01\n\x12\x46indByWorkflowExec\x12,.flyteidl.artifact.FindByWorkflowExecRequest\x1a*.flyteidl.artifact.SearchArtifactsResponse\"h\x82\xd3\xe4\x93\x02\x62\x12`/artifacts/api/v1/search/execution/{exec_id.project}/{exec_id.domain}/{exec_id.name}/{direction}\x12\xf5\x01\n\tListUsage\x12#.flyteidl.artifact.ListUsageRequest\x1a$.flyteidl.artifact.ListUsageResponse\"\x9c\x01\x82\xd3\xe4\x93\x02\x95\x01\x12\x92\x01/artifacts/api/v1/usage/{artifact_id.artifact_key.project}/{artifact_id.artifact_key.domain}/{artifact_id.artifact_key.name}/{artifact_id.version}B\xcc\x01\n\x15\x63om.flyteidl.artifactB\x0e\x41rtifactsProtoP\x01Z>github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/artifact\xa2\x02\x03\x46\x41X\xaa\x02\x11\x46lyteidl.Artifact\xca\x02\x11\x46lyteidl\\Artifact\xe2\x02\x1d\x46lyteidl\\Artifact\\GPBMetadata\xea\x02\x12\x46lyteidl::Artifactb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -34,9 +34,9 @@ _CREATEARTIFACTREQUEST_PARTITIONSENTRY._options = None _CREATEARTIFACTREQUEST_PARTITIONSENTRY._serialized_options = b'8\001' _ARTIFACTREGISTRY.methods_by_name['GetArtifact']._options = None - _ARTIFACTREGISTRY.methods_by_name['GetArtifact']._serialized_options = b'\202\323\344\223\002\213\004Z\263\001\022\260\001/artifacts/api/v1/artifact/id/{query.artifact_id.artifact_key.project}/{query.artifact_id.artifact_key.domain}/{query.artifact_id.artifact_key.name}/{query.artifact_id.version}Z\227\001\022\224\001/artifacts/api/v1/artifact/id/{query.artifact_id.artifact_key.project}/{query.artifact_id.artifact_key.domain}/{query.artifact_id.artifact_key.name}Z\233\001\022\230\001/artifacts/api/v1/artifact/tag/{query.artifact_tag.artifact_key.project}/{query.artifact_tag.artifact_key.domain}/{query.artifact_tag.artifact_key.name}\022\033/artifacts/api/v1/artifacts' + _ARTIFACTREGISTRY.methods_by_name['GetArtifact']._serialized_options = b'\202\323\344\223\002 :\001*\"\033/artifacts/api/v1/artifacts' _ARTIFACTREGISTRY.methods_by_name['SearchArtifacts']._options = None - _ARTIFACTREGISTRY.methods_by_name['SearchArtifacts']._serialized_options = b'\202\323\344\223\002\244\001ZG\022E/artifacts/api/v1/search/{artifact_key.project}/{artifact_key.domain}\022Y/artifacts/api/v1/search/{artifact_key.project}/{artifact_key.domain}/{artifact_key.name}' + _ARTIFACTREGISTRY.methods_by_name['SearchArtifacts']._serialized_options = b'\202\323\344\223\002\035:\001*\"\030/artifacts/api/v1/search' _ARTIFACTREGISTRY.methods_by_name['DeactivateTrigger']._options = None _ARTIFACTREGISTRY.methods_by_name['DeactivateTrigger']._serialized_options = b'\202\323\344\223\002):\001*2$/artifacts/api/v1/trigger/deactivate' _ARTIFACTREGISTRY.methods_by_name['FindByWorkflowExec']._options = None @@ -100,5 +100,5 @@ _globals['_LISTUSAGERESPONSE']._serialized_start=3563 _globals['_LISTUSAGERESPONSE']._serialized_end=3658 _globals['_ARTIFACTREGISTRY']._serialized_start=3661 - _globals['_ARTIFACTREGISTRY']._serialized_end=5822 + _globals['_ARTIFACTREGISTRY']._serialized_end=5192 # @@protoc_insertion_point(module_scope) diff --git a/flyteidl/protos/flyteidl/artifact/artifacts.proto b/flyteidl/protos/flyteidl/artifact/artifacts.proto index eda28944f5..5a3135d793 100644 --- a/flyteidl/protos/flyteidl/artifact/artifacts.proto +++ b/flyteidl/protos/flyteidl/artifact/artifacts.proto @@ -197,17 +197,15 @@ service ArtifactRegistry { rpc GetArtifact (GetArtifactRequest) returns (GetArtifactResponse) { option (google.api.http) = { - get: "/artifacts/api/v1/artifacts" - additional_bindings {get: "/artifacts/api/v1/artifact/id/{query.artifact_id.artifact_key.project}/{query.artifact_id.artifact_key.domain}/{query.artifact_id.artifact_key.name}/{query.artifact_id.version}"} - additional_bindings {get: "/artifacts/api/v1/artifact/id/{query.artifact_id.artifact_key.project}/{query.artifact_id.artifact_key.domain}/{query.artifact_id.artifact_key.name}"} - additional_bindings {get: "/artifacts/api/v1/artifact/tag/{query.artifact_tag.artifact_key.project}/{query.artifact_tag.artifact_key.domain}/{query.artifact_tag.artifact_key.name}"} + post: "/artifacts/api/v1/artifacts" + body: "*" }; } rpc SearchArtifacts (SearchArtifactsRequest) returns (SearchArtifactsResponse) { option (google.api.http) = { - get: "/artifacts/api/v1/search/{artifact_key.project}/{artifact_key.domain}/{artifact_key.name}" - additional_bindings {get: "/artifacts/api/v1/search/{artifact_key.project}/{artifact_key.domain}"} + post: "/artifacts/api/v1/search" + body: "*" }; } From 136ac8d3f3287ed5147aa2bcfa49d26727c8efe3 Mon Sep 17 00:00:00 2001 From: Paul Dittamo <37558497+pvditt@users.noreply.github.com> Date: Tue, 16 Jan 2024 06:52:20 -0800 Subject: [PATCH 09/30] [BUG] Retry fetching subworkflow output data on failure (#4602) * bubble up errors on remote store reads Signed-off-by: Paul Dittamo * error when closure output data exceeds max size Signed-off-by: Paul Dittamo * remove urlblob from getouputs return Signed-off-by: Paul Dittamo * remove signedurl logic on fetching outputs Signed-off-by: Paul Dittamo * cleanup no longer used param Signed-off-by: Paul Dittamo * remove legacy unit test after removing legacy utility Signed-off-by: Paul Dittamo * revert changes to getinputs Signed-off-by: Paul Dittamo * revert fetch input unit tests after reverting getinputs changes Signed-off-by: Paul Dittamo * remove inputsURLBlob from GetInputs returns Signed-off-by: Paul Dittamo * attempt remote storage output retrieval if fetching subworkflow execution data fails Signed-off-by: Paul Dittamo * lint Signed-off-by: Paul Dittamo * cleanup url blob set up in unit tests Signed-off-by: Paul Dittamo * add unit tests Signed-off-by: Paul Dittamo * lint Signed-off-by: Paul Dittamo * revert admin changes to make in another PR Signed-off-by: Paul Dittamo * retry fetching subworkflow output data if fulloutputs are not set Signed-off-by: Paul Dittamo --------- Signed-off-by: Paul Dittamo --- flytepropeller/pkg/controller/controller.go | 23 +- .../nodes/subworkflow/launchplan/admin.go | 43 ++-- .../subworkflow/launchplan/admin_test.go | 222 +++++++++++++++--- 3 files changed, 230 insertions(+), 58 deletions(-) diff --git a/flytepropeller/pkg/controller/controller.go b/flytepropeller/pkg/controller/controller.go index 6b36dc05db..de28612c54 100644 --- a/flytepropeller/pkg/controller/controller.go +++ b/flytepropeller/pkg/controller/controller.go @@ -324,10 +324,21 @@ func New(ctx context.Context, cfg *config.Config, kubeClientset kubernetes.Inter logger.Errorf(ctx, "failed to initialize Admin client, err :%s", err.Error()) return nil, err } + + sCfg := storage.GetConfig() + if sCfg == nil { + logger.Errorf(ctx, "Storage configuration missing.") + } + + store, err := storage.NewDataStore(sCfg, scope.NewSubScope("metastore")) + if err != nil { + return nil, errors.Wrapf(err, "Failed to create Metadata storage") + } + var launchPlanActor launchplan.FlyteAdmin if cfg.EnableAdminLauncher { launchPlanActor, err = launchplan.NewAdminLaunchPlanExecutor(ctx, adminClient, cfg.DownstreamEval.Duration, - launchplan.GetAdminConfig(), scope.NewSubScope("admin_launcher")) + launchplan.GetAdminConfig(), scope.NewSubScope("admin_launcher"), store) if err != nil { logger.Errorf(ctx, "failed to create Admin workflow Launcher, err: %v", err.Error()) return nil, err @@ -401,16 +412,6 @@ func New(ctx context.Context, cfg *config.Config, kubeClientset kubernetes.Inter flytek8s.DefaultPodTemplateStore.SetDefaultNamespace(podNamespace) - sCfg := storage.GetConfig() - if sCfg == nil { - logger.Errorf(ctx, "Storage configuration missing.") - } - - store, err := storage.NewDataStore(sCfg, scope.NewSubScope("metastore")) - if err != nil { - return nil, errors.Wrapf(err, "Failed to create Metadata storage") - } - logger.Info(ctx, "Setting up Catalog client.") catalogClient, err := catalog.NewCatalogClient(ctx, authOpts...) if err != nil { diff --git a/flytepropeller/pkg/controller/nodes/subworkflow/launchplan/admin.go b/flytepropeller/pkg/controller/nodes/subworkflow/launchplan/admin.go index 0c552560a9..336f095e90 100644 --- a/flytepropeller/pkg/controller/nodes/subworkflow/launchplan/admin.go +++ b/flytepropeller/pkg/controller/nodes/subworkflow/launchplan/admin.go @@ -19,6 +19,7 @@ import ( stdErr "github.com/flyteorg/flyte/flytestdlib/errors" "github.com/flyteorg/flyte/flytestdlib/logger" "github.com/flyteorg/flyte/flytestdlib/promutils" + "github.com/flyteorg/flyte/flytestdlib/storage" ) var isRecovery = true @@ -33,6 +34,7 @@ func IsWorkflowTerminated(p core.WorkflowExecution_Phase) bool { type adminLaunchPlanExecutor struct { adminClient service.AdminServiceClient cache cache.AutoRefresh + store *storage.DataStore } type executionCacheItem struct { @@ -258,7 +260,7 @@ func (a *adminLaunchPlanExecutor) syncItem(ctx context.Context, batch cache.Batc continue } - var outputs *core.LiteralMap + var outputs = &core.LiteralMap{} // Retrieve potential outputs only when the workflow succeeded. // TODO: We can optimize further by only retrieving the outputs when the workflow has output variables in the // interface. @@ -266,21 +268,31 @@ func (a *adminLaunchPlanExecutor) syncItem(ctx context.Context, batch cache.Batc execData, err := a.adminClient.GetExecutionData(ctx, &admin.WorkflowExecutionGetDataRequest{ Id: &exec.WorkflowExecutionIdentifier, }) + if err != nil || execData.GetFullOutputs() == nil || execData.GetFullOutputs().GetLiterals() == nil { + outputURI := res.GetClosure().GetOutputs().GetUri() + // attempt remote storage read on GetExecutionData failure + if outputURI != "" { + err = a.store.ReadProtobuf(ctx, storage.DataReference(outputURI), outputs) + if err != nil { + logger.Errorf(ctx, "Failed to read outputs from URI [%s] with err: %v", outputURI, err) + } + } + if err != nil { + resp = append(resp, cache.ItemSyncResponse{ + ID: obj.GetID(), + Item: executionCacheItem{ + WorkflowExecutionIdentifier: exec.WorkflowExecutionIdentifier, + SyncError: err, + }, + Action: cache.Update, + }) + + continue + } - if err != nil { - resp = append(resp, cache.ItemSyncResponse{ - ID: obj.GetID(), - Item: executionCacheItem{ - WorkflowExecutionIdentifier: exec.WorkflowExecutionIdentifier, - SyncError: err, - }, - Action: cache.Update, - }) - - continue + } else { + outputs = execData.GetFullOutputs() } - - outputs = execData.GetFullOutputs() } // Update the cache with the retrieved status @@ -299,9 +311,10 @@ func (a *adminLaunchPlanExecutor) syncItem(ctx context.Context, batch cache.Batc } func NewAdminLaunchPlanExecutor(_ context.Context, client service.AdminServiceClient, - syncPeriod time.Duration, cfg *AdminConfig, scope promutils.Scope) (FlyteAdmin, error) { + syncPeriod time.Duration, cfg *AdminConfig, scope promutils.Scope, store *storage.DataStore) (FlyteAdmin, error) { exec := &adminLaunchPlanExecutor{ adminClient: client, + store: store, } rateLimiter := &workqueue.BucketRateLimiter{Limiter: rate.NewLimiter(rate.Limit(cfg.TPS), cfg.Burst)} diff --git a/flytepropeller/pkg/controller/nodes/subworkflow/launchplan/admin_test.go b/flytepropeller/pkg/controller/nodes/subworkflow/launchplan/admin_test.go index 0af8d1eb16..1f359c1d6a 100644 --- a/flytepropeller/pkg/controller/nodes/subworkflow/launchplan/admin_test.go +++ b/flytepropeller/pkg/controller/nodes/subworkflow/launchplan/admin_test.go @@ -12,11 +12,16 @@ import ( "google.golang.org/grpc/status" "github.com/flyteorg/flyte/flyteidl/clients/go/admin/mocks" + "github.com/flyteorg/flyte/flyteidl/clients/go/coreutils" "github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin" "github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/core" "github.com/flyteorg/flyte/flytestdlib/cache" mocks2 "github.com/flyteorg/flyte/flytestdlib/cache/mocks" + "github.com/flyteorg/flyte/flytestdlib/contextutils" "github.com/flyteorg/flyte/flytestdlib/promutils" + "github.com/flyteorg/flyte/flytestdlib/promutils/labeled" + "github.com/flyteorg/flyte/flytestdlib/storage" + storageMocks "github.com/flyteorg/flyte/flytestdlib/storage/mocks" ) func TestAdminLaunchPlanExecutor_GetStatus(t *testing.T) { @@ -28,9 +33,12 @@ func TestAdminLaunchPlanExecutor_GetStatus(t *testing.T) { } var result *admin.ExecutionClosure + memStore, err := storage.NewDataStore(&storage.Config{Type: storage.TypeMemory}, promutils.NewTestScope()) + assert.NoError(t, err) + t.Run("happy", func(t *testing.T) { mockClient := &mocks.AdminServiceClient{} - exec, err := NewAdminLaunchPlanExecutor(ctx, mockClient, time.Millisecond, defaultAdminConfig, promutils.NewTestScope()) + exec, err := NewAdminLaunchPlanExecutor(ctx, mockClient, time.Millisecond, defaultAdminConfig, promutils.NewTestScope(), memStore) assert.NoError(t, err) mockClient.On("GetExecution", ctx, @@ -42,25 +50,6 @@ func TestAdminLaunchPlanExecutor_GetStatus(t *testing.T) { assert.Equal(t, result, s) }) - t.Run("terminal-sync", func(t *testing.T) { - mockClient := &mocks.AdminServiceClient{} - exec, err := NewAdminLaunchPlanExecutor(ctx, mockClient, time.Millisecond, defaultAdminConfig, promutils.NewTestScope()) - assert.NoError(t, err) - iwMock := &mocks2.ItemWrapper{} - i := executionCacheItem{ExecutionClosure: &admin.ExecutionClosure{Phase: core.WorkflowExecution_SUCCEEDED, WorkflowId: &core.Identifier{Project: "p"}}} - iwMock.OnGetItem().Return(i) - iwMock.OnGetID().Return("id") - adminExec := exec.(*adminLaunchPlanExecutor) - v, err := adminExec.syncItem(ctx, cache.Batch{ - iwMock, - }) - assert.NoError(t, err) - assert.NotNil(t, v) - assert.Len(t, v, 1) - assert.Equal(t, v[0].ID, "id") - assert.Equal(t, v[0].Item, i) - }) - t.Run("notFound", func(t *testing.T) { mockClient := &mocks.AdminServiceClient{} @@ -76,7 +65,7 @@ func TestAdminLaunchPlanExecutor_GetStatus(t *testing.T) { mock.MatchedBy(func(o *admin.WorkflowExecutionGetRequest) bool { return true }), ).Return(nil, status.Error(codes.NotFound, "")) - exec, err := NewAdminLaunchPlanExecutor(ctx, mockClient, time.Millisecond, defaultAdminConfig, promutils.NewTestScope()) + exec, err := NewAdminLaunchPlanExecutor(ctx, mockClient, time.Millisecond, defaultAdminConfig, promutils.NewTestScope(), memStore) assert.NoError(t, err) assert.NoError(t, exec.Initialize(ctx)) @@ -122,7 +111,7 @@ func TestAdminLaunchPlanExecutor_GetStatus(t *testing.T) { mock.MatchedBy(func(o *admin.WorkflowExecutionGetRequest) bool { return true }), ).Return(nil, status.Error(codes.Canceled, "")) - exec, err := NewAdminLaunchPlanExecutor(ctx, mockClient, time.Millisecond, defaultAdminConfig, promutils.NewTestScope()) + exec, err := NewAdminLaunchPlanExecutor(ctx, mockClient, time.Millisecond, defaultAdminConfig, promutils.NewTestScope(), memStore) assert.NoError(t, err) assert.NoError(t, exec.Initialize(ctx)) @@ -162,11 +151,13 @@ func TestAdminLaunchPlanExecutor_Launch(t *testing.T) { Domain: "d", Project: "p", } + memStore, err := storage.NewDataStore(&storage.Config{Type: storage.TypeMemory}, promutils.NewTestScope()) + assert.NoError(t, err) t.Run("happy", func(t *testing.T) { mockClient := &mocks.AdminServiceClient{} - exec, err := NewAdminLaunchPlanExecutor(ctx, mockClient, time.Second, defaultAdminConfig, promutils.NewTestScope()) + exec, err := NewAdminLaunchPlanExecutor(ctx, mockClient, time.Second, defaultAdminConfig, promutils.NewTestScope(), memStore) mockClient.On("CreateExecution", ctx, mock.MatchedBy(func(o *admin.ExecutionCreateRequest) bool { @@ -204,7 +195,7 @@ func TestAdminLaunchPlanExecutor_Launch(t *testing.T) { Name: "orig", }, } - exec, err := NewAdminLaunchPlanExecutor(ctx, mockClient, time.Second, defaultAdminConfig, promutils.NewTestScope()) + exec, err := NewAdminLaunchPlanExecutor(ctx, mockClient, time.Second, defaultAdminConfig, promutils.NewTestScope(), memStore) mockClient.On("RecoverExecution", ctx, mock.MatchedBy(func(o *admin.ExecutionRecoverRequest) bool { @@ -240,7 +231,7 @@ func TestAdminLaunchPlanExecutor_Launch(t *testing.T) { Name: "orig", }, } - exec, err := NewAdminLaunchPlanExecutor(ctx, mockClient, time.Second, defaultAdminConfig, promutils.NewTestScope()) + exec, err := NewAdminLaunchPlanExecutor(ctx, mockClient, time.Second, defaultAdminConfig, promutils.NewTestScope(), memStore) assert.NoError(t, err) recoveryErr := status.Error(codes.NotFound, "foo") @@ -282,7 +273,7 @@ func TestAdminLaunchPlanExecutor_Launch(t *testing.T) { t.Run("notFound", func(t *testing.T) { mockClient := &mocks.AdminServiceClient{} - exec, err := NewAdminLaunchPlanExecutor(ctx, mockClient, time.Second, defaultAdminConfig, promutils.NewTestScope()) + exec, err := NewAdminLaunchPlanExecutor(ctx, mockClient, time.Second, defaultAdminConfig, promutils.NewTestScope(), memStore) mockClient.On("CreateExecution", ctx, mock.MatchedBy(func(o *admin.ExecutionCreateRequest) bool { return true }), @@ -310,7 +301,7 @@ func TestAdminLaunchPlanExecutor_Launch(t *testing.T) { t.Run("other", func(t *testing.T) { mockClient := &mocks.AdminServiceClient{} - exec, err := NewAdminLaunchPlanExecutor(ctx, mockClient, time.Second, defaultAdminConfig, promutils.NewTestScope()) + exec, err := NewAdminLaunchPlanExecutor(ctx, mockClient, time.Second, defaultAdminConfig, promutils.NewTestScope(), memStore) mockClient.On("CreateExecution", ctx, mock.MatchedBy(func(o *admin.ExecutionCreateRequest) bool { return true }), @@ -343,12 +334,14 @@ func TestAdminLaunchPlanExecutor_Kill(t *testing.T) { Domain: "d", Project: "p", } + memStore, err := storage.NewDataStore(&storage.Config{Type: storage.TypeMemory}, promutils.NewTestScope()) + assert.NoError(t, err) const reason = "reason" t.Run("happy", func(t *testing.T) { mockClient := &mocks.AdminServiceClient{} - exec, err := NewAdminLaunchPlanExecutor(ctx, mockClient, time.Second, defaultAdminConfig, promutils.NewTestScope()) + exec, err := NewAdminLaunchPlanExecutor(ctx, mockClient, time.Second, defaultAdminConfig, promutils.NewTestScope(), memStore) mockClient.On("TerminateExecution", ctx, mock.MatchedBy(func(o *admin.ExecutionTerminateRequest) bool { return o.Id == id && o.Cause == reason }), @@ -361,7 +354,7 @@ func TestAdminLaunchPlanExecutor_Kill(t *testing.T) { t.Run("notFound", func(t *testing.T) { mockClient := &mocks.AdminServiceClient{} - exec, err := NewAdminLaunchPlanExecutor(ctx, mockClient, time.Second, defaultAdminConfig, promutils.NewTestScope()) + exec, err := NewAdminLaunchPlanExecutor(ctx, mockClient, time.Second, defaultAdminConfig, promutils.NewTestScope(), memStore) mockClient.On("TerminateExecution", ctx, mock.MatchedBy(func(o *admin.ExecutionTerminateRequest) bool { return o.Id == id && o.Cause == reason }), @@ -374,7 +367,7 @@ func TestAdminLaunchPlanExecutor_Kill(t *testing.T) { t.Run("other", func(t *testing.T) { mockClient := &mocks.AdminServiceClient{} - exec, err := NewAdminLaunchPlanExecutor(ctx, mockClient, time.Second, defaultAdminConfig, promutils.NewTestScope()) + exec, err := NewAdminLaunchPlanExecutor(ctx, mockClient, time.Second, defaultAdminConfig, promutils.NewTestScope(), memStore) mockClient.On("TerminateExecution", ctx, mock.MatchedBy(func(o *admin.ExecutionTerminateRequest) bool { return o.Id == id && o.Cause == reason }), @@ -395,10 +388,12 @@ func TestNewAdminLaunchPlanExecutor_GetLaunchPlan(t *testing.T) { Project: "p", Version: "v", } + memStore, err := storage.NewDataStore(&storage.Config{Type: storage.TypeMemory}, promutils.NewTestScope()) + assert.NoError(t, err) t.Run("launch plan found", func(t *testing.T) { mockClient := &mocks.AdminServiceClient{} - exec, err := NewAdminLaunchPlanExecutor(ctx, mockClient, time.Second, defaultAdminConfig, promutils.NewTestScope()) + exec, err := NewAdminLaunchPlanExecutor(ctx, mockClient, time.Second, defaultAdminConfig, promutils.NewTestScope(), memStore) assert.NoError(t, err) mockClient.OnGetLaunchPlanMatch( ctx, @@ -411,7 +406,7 @@ func TestNewAdminLaunchPlanExecutor_GetLaunchPlan(t *testing.T) { t.Run("launch plan not found", func(t *testing.T) { mockClient := &mocks.AdminServiceClient{} - exec, err := NewAdminLaunchPlanExecutor(ctx, mockClient, time.Second, defaultAdminConfig, promutils.NewTestScope()) + exec, err := NewAdminLaunchPlanExecutor(ctx, mockClient, time.Second, defaultAdminConfig, promutils.NewTestScope(), memStore) assert.NoError(t, err) mockClient.OnGetLaunchPlanMatch( ctx, @@ -423,6 +418,165 @@ func TestNewAdminLaunchPlanExecutor_GetLaunchPlan(t *testing.T) { }) } +type test struct { + name string + cacheItem executionCacheItem + getExecutionResp *admin.Execution + getExecutionError error + getExecutionDataResp *admin.WorkflowExecutionGetDataResponse + getExecutionDataError error + storageReadError error + expectSuccess bool + expectError bool + expectedOutputs *core.LiteralMap + expectedErrorContains string +} + +func TestAdminLaunchPlanExecutorScenarios(t *testing.T) { + ctx := context.TODO() + + mockExecutionRespWithOutputs := &admin.Execution{ + Closure: &admin.ExecutionClosure{ + Phase: core.WorkflowExecution_SUCCEEDED, + OutputResult: &admin.ExecutionClosure_Outputs{ + Outputs: &admin.LiteralMapBlob{ + Data: &admin.LiteralMapBlob_Uri{ + Uri: "s3://foo/bar", + }, + }, + }, + }, + } + mockExecutionRespWithoutOutputs := &admin.Execution{ + Closure: &admin.ExecutionClosure{ + Phase: core.WorkflowExecution_SUCCEEDED, + }, + } + outputLiteral := &core.LiteralMap{ + Literals: map[string]*core.Literal{ + "foo-1": coreutils.MustMakeLiteral("foo-value-1"), + }, + } + + tests := []test{ + { + name: "terminal-sync", + expectSuccess: true, + cacheItem: executionCacheItem{ + ExecutionClosure: &admin.ExecutionClosure{ + Phase: core.WorkflowExecution_SUCCEEDED, + WorkflowId: &core.Identifier{Project: "p"}}, + ExecutionOutputs: outputLiteral, + }, + expectedOutputs: outputLiteral, + }, + { + name: "GetExecution-fails", + expectError: true, + cacheItem: executionCacheItem{}, + getExecutionError: status.Error(codes.NotFound, ""), + expectedErrorContains: RemoteErrorNotFound, + }, + { + name: "GetExecution-fails-system", + expectError: true, + cacheItem: executionCacheItem{}, + getExecutionError: status.Error(codes.Internal, ""), + expectedErrorContains: RemoteErrorSystem, + }, + { + name: "GetExecutionData-succeeds", + expectSuccess: true, + cacheItem: executionCacheItem{}, + expectedOutputs: outputLiteral, + getExecutionDataResp: &admin.WorkflowExecutionGetDataResponse{ + FullOutputs: outputLiteral, + }, + getExecutionDataError: nil, + getExecutionResp: mockExecutionRespWithOutputs, + }, + { + name: "GetExecutionData-error-no-retry", + expectError: true, + cacheItem: executionCacheItem{}, + getExecutionDataError: status.Error(codes.NotFound, ""), + expectedErrorContains: codes.NotFound.String(), + getExecutionResp: mockExecutionRespWithoutOutputs, + }, + { + name: "GetExecutionData-error-retry-fails", + expectError: true, + cacheItem: executionCacheItem{}, + getExecutionDataError: status.Error(codes.NotFound, ""), + storageReadError: status.Error(codes.Internal, ""), + expectedErrorContains: codes.Internal.String(), + getExecutionResp: mockExecutionRespWithOutputs, + }, + { + name: "GetExecutionData-empty-retry-fails", + expectError: true, + cacheItem: executionCacheItem{}, + getExecutionDataResp: &admin.WorkflowExecutionGetDataResponse{ + FullOutputs: &core.LiteralMap{}, + }, + getExecutionDataError: nil, + storageReadError: status.Error(codes.Internal, ""), + expectedErrorContains: codes.Internal.String(), + getExecutionResp: mockExecutionRespWithOutputs, + }, + { + name: "GetExecutionData-empty-retry-succeeds", + expectSuccess: true, + cacheItem: executionCacheItem{}, + getExecutionDataResp: &admin.WorkflowExecutionGetDataResponse{ + FullOutputs: &core.LiteralMap{}, + }, + getExecutionDataError: nil, + expectedOutputs: &core.LiteralMap{}, + getExecutionResp: mockExecutionRespWithOutputs, + }, + } + + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + mockClient := &mocks.AdminServiceClient{} + pbStore := &storageMocks.ComposedProtobufStore{} + pbStore.On("ReadProtobuf", mock.Anything, mock.Anything, mock.Anything).Return(tc.storageReadError) + storageClient := &storage.DataStore{ + ComposedProtobufStore: pbStore, + ReferenceConstructor: &storageMocks.ReferenceConstructor{}, + } + exec, err := NewAdminLaunchPlanExecutor(ctx, mockClient, time.Millisecond, defaultAdminConfig, promutils.NewTestScope(), storageClient) + assert.NoError(t, err) + + iwMock := &mocks2.ItemWrapper{} + i := tc.cacheItem + iwMock.OnGetItem().Return(i) + iwMock.OnGetID().Return("id") + + mockClient.On("GetExecution", mock.Anything, mock.Anything).Return(tc.getExecutionResp, tc.getExecutionError) + mockClient.On("GetExecutionData", mock.Anything, mock.Anything).Return(tc.getExecutionDataResp, tc.getExecutionDataError) + + adminExec := exec.(*adminLaunchPlanExecutor) + + v, err := adminExec.syncItem(ctx, cache.Batch{iwMock}) + assert.NoError(t, err) + assert.Len(t, v, 1) + item, ok := v[0].Item.(executionCacheItem) + assert.True(t, ok) + + if tc.expectSuccess { + assert.Nil(t, item.SyncError) + assert.Equal(t, tc.expectedOutputs, item.ExecutionOutputs) + } + if tc.expectError { + assert.NotNil(t, item.SyncError) + assert.Contains(t, item.SyncError.Error(), tc.expectedErrorContains) + } + }) + } +} + func TestIsWorkflowTerminated(t *testing.T) { assert.True(t, IsWorkflowTerminated(core.WorkflowExecution_SUCCEEDED)) assert.True(t, IsWorkflowTerminated(core.WorkflowExecution_ABORTED)) @@ -434,3 +588,7 @@ func TestIsWorkflowTerminated(t *testing.T) { assert.False(t, IsWorkflowTerminated(core.WorkflowExecution_QUEUED)) assert.False(t, IsWorkflowTerminated(core.WorkflowExecution_UNDEFINED)) } + +func init() { + labeled.SetMetricKeys(contextutils.ProjectKey, contextutils.DomainKey, contextutils.WorkflowIDKey, contextutils.TaskIDKey) +} From d208ed3dc32a0678b8e1f9c344d93875e287724f Mon Sep 17 00:00:00 2001 From: Thomas Newton Date: Tue, 16 Jan 2024 15:17:43 +0000 Subject: [PATCH 10/30] Option to clear node state on any termination (#4596) * `ClearSubNodeStatus` on failure Signed-off-by: Thomas Newton * More aggressive collapsing Signed-off-by: Thomas Newton * Tidy Signed-off-by: Thomas Newton * Fix panic Signed-off-by: Thomas Newton * Tidy Signed-off-by: Thomas Newton * Handle possibility of nil startedAt time Signed-off-by: Thomas Newton * Update test assertions Signed-off-by: Thomas Newton * Config flag attempt 1 Signed-off-by: Thomas Newton * Update more calls to UpdatePhase Signed-off-by: Thomas Newton * Update generated code Signed-off-by: Thomas Newton * Update tests Signed-off-by: Thomas Newton * Fix more tests Signed-off-by: Thomas Newton * Fix tests Signed-off-by: Thomas Newton * Rename clear-state-on-termination -> clear-state-on-any-termination Signed-off-by: Thomas Newton * Add a comment Signed-off-by: Thomas Newton * Missing test coverage - add test case `non-terminal-timing-out` Signed-off-by: Thomas Newton * Add test coverage for `TestNodeExecutor_RecursiveNodeHandler_Recurse` with `clearStateOnAnyTermination=true` Signed-off-by: Thomas Newton * Address another TODO Signed-off-by: Thomas Newton * Add comment Signed-off-by: Thomas Newton * Rename the config option to `enable-cr-debug-metadata` Signed-off-by: Thomas Newton --------- Signed-off-by: Thomas Newton --- .../pkg/apis/flyteworkflow/v1alpha1/iface.go | 2 +- .../v1alpha1/mocks/ExecutableNodeStatus.go | 6 +- .../v1alpha1/mocks/MutableNodeStatus.go | 6 +- .../flyteworkflow/v1alpha1/node_status.go | 47 ++- .../v1alpha1/node_status_test.go | 312 ++++++++++-------- .../pkg/controller/config/config.go | 2 + .../pkg/controller/config/config_flags.go | 1 + .../controller/config/config_flags_test.go | 14 + .../pkg/controller/nodes/branch/evaluator.go | 4 +- .../pkg/controller/nodes/executor.go | 24 +- .../pkg/controller/nodes/executor_test.go | 36 +- .../pkg/controller/nodes/transformers.go | 4 +- 12 files changed, 269 insertions(+), 189 deletions(-) diff --git a/flytepropeller/pkg/apis/flyteworkflow/v1alpha1/iface.go b/flytepropeller/pkg/apis/flyteworkflow/v1alpha1/iface.go index b3d744bd77..6590aaa04a 100644 --- a/flytepropeller/pkg/apis/flyteworkflow/v1alpha1/iface.go +++ b/flytepropeller/pkg/apis/flyteworkflow/v1alpha1/iface.go @@ -318,7 +318,7 @@ type MutableNodeStatus interface { SetOutputDir(d DataReference) SetParentNodeID(n *NodeID) SetParentTaskID(t *core.TaskExecutionIdentifier) - UpdatePhase(phase NodePhase, occurredAt metav1.Time, reason string, err *core.ExecutionError) + UpdatePhase(phase NodePhase, occurredAt metav1.Time, reason string, enableCRDebugMetadata bool, err *core.ExecutionError) IncrementAttempts() uint32 IncrementSystemFailures() uint32 SetCached() diff --git a/flytepropeller/pkg/apis/flyteworkflow/v1alpha1/mocks/ExecutableNodeStatus.go b/flytepropeller/pkg/apis/flyteworkflow/v1alpha1/mocks/ExecutableNodeStatus.go index cb447e06fc..cdf3f1b6ab 100644 --- a/flytepropeller/pkg/apis/flyteworkflow/v1alpha1/mocks/ExecutableNodeStatus.go +++ b/flytepropeller/pkg/apis/flyteworkflow/v1alpha1/mocks/ExecutableNodeStatus.go @@ -1187,9 +1187,9 @@ func (_m *ExecutableNodeStatus) SetParentTaskID(t *core.TaskExecutionIdentifier) _m.Called(t) } -// UpdatePhase provides a mock function with given fields: phase, occurredAt, reason, err -func (_m *ExecutableNodeStatus) UpdatePhase(phase v1alpha1.NodePhase, occurredAt v1.Time, reason string, err *core.ExecutionError) { - _m.Called(phase, occurredAt, reason, err) +// UpdatePhase provides a mock function with given fields: phase, occurredAt, reason, enableCRDebugMetadata, err +func (_m *ExecutableNodeStatus) UpdatePhase(phase v1alpha1.NodePhase, occurredAt v1.Time, reason string, enableCRDebugMetadata bool, err *core.ExecutionError) { + _m.Called(phase, occurredAt, reason, enableCRDebugMetadata, err) } // VisitNodeStatuses provides a mock function with given fields: visitor diff --git a/flytepropeller/pkg/apis/flyteworkflow/v1alpha1/mocks/MutableNodeStatus.go b/flytepropeller/pkg/apis/flyteworkflow/v1alpha1/mocks/MutableNodeStatus.go index b8c97f6be7..3f103bc2ec 100644 --- a/flytepropeller/pkg/apis/flyteworkflow/v1alpha1/mocks/MutableNodeStatus.go +++ b/flytepropeller/pkg/apis/flyteworkflow/v1alpha1/mocks/MutableNodeStatus.go @@ -587,7 +587,7 @@ func (_m *MutableNodeStatus) SetParentTaskID(t *core.TaskExecutionIdentifier) { _m.Called(t) } -// UpdatePhase provides a mock function with given fields: phase, occurredAt, reason, err -func (_m *MutableNodeStatus) UpdatePhase(phase v1alpha1.NodePhase, occurredAt v1.Time, reason string, err *core.ExecutionError) { - _m.Called(phase, occurredAt, reason, err) +// UpdatePhase provides a mock function with given fields: phase, occurredAt, reason, enableCRDebugMetadata, err +func (_m *MutableNodeStatus) UpdatePhase(phase v1alpha1.NodePhase, occurredAt v1.Time, reason string, enableCRDebugMetadata bool, err *core.ExecutionError) { + _m.Called(phase, occurredAt, reason, enableCRDebugMetadata, err) } diff --git a/flytepropeller/pkg/apis/flyteworkflow/v1alpha1/node_status.go b/flytepropeller/pkg/apis/flyteworkflow/v1alpha1/node_status.go index 9fb891d01a..aab034224d 100644 --- a/flytepropeller/pkg/apis/flyteworkflow/v1alpha1/node_status.go +++ b/flytepropeller/pkg/apis/flyteworkflow/v1alpha1/node_status.go @@ -594,7 +594,7 @@ func (in *NodeStatus) GetOrCreateArrayNodeStatus() MutableArrayNodeStatus { return in.ArrayNodeStatus } -func (in *NodeStatus) UpdatePhase(p NodePhase, occurredAt metav1.Time, reason string, err *core.ExecutionError) { +func (in *NodeStatus) UpdatePhase(p NodePhase, occurredAt metav1.Time, reason string, enableCRDebugMetadata bool, err *core.ExecutionError) { if in.Phase == p && in.Message == reason { // We will not update the phase multiple times. This prevents the comparison from returning false positive return @@ -607,6 +607,7 @@ func (in *NodeStatus) UpdatePhase(p NodePhase, occurredAt metav1.Time, reason st } n := occurredAt + in.LastUpdatedAt = &n if occurredAt.IsZero() { n = metav1.Now() } @@ -625,35 +626,31 @@ func (in *NodeStatus) UpdatePhase(p NodePhase, occurredAt metav1.Time, reason st in.LastAttemptStartedAt = &n } } else if IsPhaseTerminal(p) { - // If we are in terminal phase then we will clear out all our fields as they are not required anymore - // Only thing required is stopped at and lastupdatedat time if in.StoppedAt == nil { in.StoppedAt = &n } - if in.StartedAt == nil { - in.StartedAt = &n - } - if in.LastAttemptStartedAt == nil { - in.LastAttemptStartedAt = &n + if p == NodePhaseSucceeded || p == NodePhaseSkipped || !enableCRDebugMetadata { + // Clear most status related fields after reaching a terminal state. This keeps the CR state small to avoid + // etcd size limits. Importantly we keep Phase, StoppedAt and Error which will be needed further. + in.Message = "" + in.QueuedAt = nil + in.StartedAt = nil + in.LastUpdatedAt = nil + in.LastAttemptStartedAt = nil + in.DynamicNodeStatus = nil + in.BranchStatus = nil + in.SubNodeStatus = nil + in.TaskNodeStatus = nil + in.WorkflowNodeStatus = nil + } else { + if in.StartedAt == nil { + in.StartedAt = &n + } + if in.LastAttemptStartedAt == nil { + in.LastAttemptStartedAt = &n + } } } - in.LastUpdatedAt = &n - - // For cases in which the node is either Succeeded or Skipped we clear most fields from the status - // except for StoppedAt and Phase. StoppedAt is used to calculate transition latency between this node and - // any downstream nodes and Phase is required for propeller to continue to downstream nodes. - if p == NodePhaseSucceeded || p == NodePhaseSkipped { - in.Message = "" - in.QueuedAt = nil - in.StartedAt = nil - in.LastAttemptStartedAt = nil - in.DynamicNodeStatus = nil - in.BranchStatus = nil - in.SubNodeStatus = nil - in.TaskNodeStatus = nil - in.WorkflowNodeStatus = nil - in.LastUpdatedAt = nil - } in.SetDirty() } diff --git a/flytepropeller/pkg/apis/flyteworkflow/v1alpha1/node_status_test.go b/flytepropeller/pkg/apis/flyteworkflow/v1alpha1/node_status_test.go index 45c299687a..0278d62f55 100644 --- a/flytepropeller/pkg/apis/flyteworkflow/v1alpha1/node_status_test.go +++ b/flytepropeller/pkg/apis/flyteworkflow/v1alpha1/node_status_test.go @@ -259,71 +259,202 @@ func TestNodeStatus_UpdatePhase(t *testing.T) { n := metav1.NewTime(time.Now()) const queued = "queued" - t.Run("identical-phase", func(t *testing.T) { - p := NodePhaseQueued - ns := NodeStatus{ - Phase: p, - Message: queued, - } - msg := queued - ns.UpdatePhase(p, n, msg, nil) - assert.Nil(t, ns.QueuedAt) - }) + const success = "success" + for _, enableCRDebugMetadata := range []bool{false, true} { + t.Run("identical-phase", func(t *testing.T) { + p := NodePhaseQueued + ns := NodeStatus{ + Phase: p, + Message: queued, + } + msg := queued + ns.UpdatePhase(p, n, msg, enableCRDebugMetadata, nil) + assert.Nil(t, ns.QueuedAt) + }) - t.Run("zero", func(t *testing.T) { - p := NodePhaseQueued - ns := NodeStatus{} - msg := queued - ns.UpdatePhase(p, metav1.NewTime(time.Time{}), msg, nil) - assert.NotNil(t, ns.QueuedAt) - }) + t.Run("zero", func(t *testing.T) { + p := NodePhaseQueued + ns := NodeStatus{} + msg := queued + ns.UpdatePhase(p, metav1.NewTime(time.Time{}), msg, enableCRDebugMetadata, nil) + assert.NotNil(t, ns.QueuedAt) + }) - t.Run("non-terminal", func(t *testing.T) { - ns := NodeStatus{} - p := NodePhaseQueued - msg := queued - ns.UpdatePhase(p, n, msg, nil) + t.Run("non-terminal", func(t *testing.T) { + ns := NodeStatus{} + p := NodePhaseQueued + msg := queued + ns.UpdatePhase(p, n, msg, enableCRDebugMetadata, nil) + + assert.Equal(t, *ns.LastUpdatedAt, n) + assert.Equal(t, *ns.QueuedAt, n) + assert.Nil(t, ns.LastAttemptStartedAt) + assert.Nil(t, ns.StartedAt) + assert.Nil(t, ns.StoppedAt) + assert.Equal(t, p, ns.Phase) + assert.Equal(t, msg, ns.Message) + assert.Nil(t, ns.Error) + }) - assert.Equal(t, *ns.LastUpdatedAt, n) - assert.Equal(t, *ns.QueuedAt, n) - assert.Nil(t, ns.LastAttemptStartedAt) - assert.Nil(t, ns.StartedAt) - assert.Nil(t, ns.StoppedAt) - assert.Equal(t, p, ns.Phase) - assert.Equal(t, msg, ns.Message) - assert.Nil(t, ns.Error) - }) + t.Run("non-terminal-running", func(t *testing.T) { + ns := NodeStatus{} + p := NodePhaseRunning + msg := "running" + ns.UpdatePhase(p, n, msg, enableCRDebugMetadata, nil) + + assert.Equal(t, *ns.LastUpdatedAt, n) + assert.Nil(t, ns.QueuedAt) + assert.Equal(t, *ns.LastAttemptStartedAt, n) + assert.Equal(t, *ns.StartedAt, n) + assert.Nil(t, ns.StoppedAt) + assert.Equal(t, p, ns.Phase) + assert.Equal(t, msg, ns.Message) + assert.Nil(t, ns.Error) + }) + + t.Run("non-terminal-timing-out", func(t *testing.T) { + ns := NodeStatus{} + p := NodePhaseTimingOut + msg := "timing-out" + ns.UpdatePhase(p, n, msg, enableCRDebugMetadata, nil) + + assert.Equal(t, *ns.LastUpdatedAt, n) + assert.Nil(t, ns.QueuedAt) + assert.Nil(t, ns.LastAttemptStartedAt) + assert.Nil(t, ns.StartedAt) + assert.Nil(t, ns.StoppedAt) + assert.Equal(t, p, ns.Phase) + assert.Equal(t, msg, ns.Message) + assert.Nil(t, ns.Error) + }) - t.Run("non-terminal-running", func(t *testing.T) { + t.Run("terminal-success", func(t *testing.T) { + ns := NodeStatus{} + p := NodePhaseSucceeded + msg := success + ns.UpdatePhase(p, n, msg, enableCRDebugMetadata, nil) + + assert.Nil(t, ns.LastUpdatedAt) + assert.Nil(t, ns.QueuedAt) + assert.Nil(t, ns.LastAttemptStartedAt) + assert.Nil(t, ns.StartedAt) + assert.Equal(t, *ns.StoppedAt, n) + assert.Equal(t, p, ns.Phase) + assert.Empty(t, ns.Message) + assert.Nil(t, ns.Error) + }) + + t.Run("terminal-skipped", func(t *testing.T) { + ns := NodeStatus{} + p := NodePhaseSucceeded + msg := success + ns.UpdatePhase(p, n, msg, enableCRDebugMetadata, nil) + + assert.Nil(t, ns.LastUpdatedAt) + assert.Nil(t, ns.QueuedAt) + assert.Nil(t, ns.LastAttemptStartedAt) + assert.Nil(t, ns.StartedAt) + assert.Equal(t, *ns.StoppedAt, n) + assert.Equal(t, p, ns.Phase) + assert.Empty(t, ns.Message) + assert.Nil(t, ns.Error) + }) + + t.Run("terminal-success-preset", func(t *testing.T) { + ns := NodeStatus{ + QueuedAt: &n, + StartedAt: &n, + LastUpdatedAt: &n, + LastAttemptStartedAt: &n, + WorkflowNodeStatus: &WorkflowNodeStatus{}, + BranchStatus: &BranchNodeStatus{}, + DynamicNodeStatus: &DynamicNodeStatus{}, + TaskNodeStatus: &TaskNodeStatus{}, + SubNodeStatus: map[NodeID]*NodeStatus{}, + } + p := NodePhaseSucceeded + msg := success + ns.UpdatePhase(p, n, msg, enableCRDebugMetadata, nil) + + assert.Nil(t, ns.LastUpdatedAt) + assert.Nil(t, ns.QueuedAt) + assert.Nil(t, ns.LastAttemptStartedAt) + assert.Nil(t, ns.StartedAt) + assert.Equal(t, *ns.StoppedAt, n) + assert.Equal(t, p, ns.Phase) + assert.Empty(t, ns.Message) + assert.Nil(t, ns.Error) + assert.Nil(t, ns.SubNodeStatus) + assert.Nil(t, ns.DynamicNodeStatus) + assert.Nil(t, ns.WorkflowNodeStatus) + assert.Nil(t, ns.BranchStatus) + assert.Nil(t, ns.TaskNodeStatus) + }) + + t.Run("non-terminal-preset", func(t *testing.T) { + ns := NodeStatus{ + QueuedAt: &n, + StartedAt: &n, + LastUpdatedAt: &n, + LastAttemptStartedAt: &n, + WorkflowNodeStatus: &WorkflowNodeStatus{}, + BranchStatus: &BranchNodeStatus{}, + DynamicNodeStatus: &DynamicNodeStatus{}, + TaskNodeStatus: &TaskNodeStatus{}, + SubNodeStatus: map[NodeID]*NodeStatus{}, + } + n2 := metav1.NewTime(time.Now()) + p := NodePhaseRunning + msg := "running" + ns.UpdatePhase(p, n2, msg, enableCRDebugMetadata, nil) + + assert.Equal(t, *ns.LastUpdatedAt, n2) + assert.Equal(t, *ns.QueuedAt, n) + assert.Equal(t, *ns.LastAttemptStartedAt, n) + assert.Equal(t, *ns.StartedAt, n) + assert.Nil(t, ns.StoppedAt) + assert.Equal(t, p, ns.Phase) + assert.Equal(t, msg, ns.Message) + assert.Nil(t, ns.Error) + assert.NotNil(t, ns.SubNodeStatus) + assert.NotNil(t, ns.DynamicNodeStatus) + assert.NotNil(t, ns.WorkflowNodeStatus) + assert.NotNil(t, ns.BranchStatus) + assert.NotNil(t, ns.TaskNodeStatus) + }) + } + + t.Run("terminal-fail", func(t *testing.T) { ns := NodeStatus{} - p := NodePhaseRunning - msg := "running" - ns.UpdatePhase(p, n, msg, nil) + p := NodePhaseFailed + msg := "failed" + err := &core.ExecutionError{} + ns.UpdatePhase(p, n, msg, true, err) assert.Equal(t, *ns.LastUpdatedAt, n) assert.Nil(t, ns.QueuedAt) assert.Equal(t, *ns.LastAttemptStartedAt, n) assert.Equal(t, *ns.StartedAt, n) - assert.Nil(t, ns.StoppedAt) + assert.Equal(t, *ns.StoppedAt, n) assert.Equal(t, p, ns.Phase) assert.Equal(t, msg, ns.Message) - assert.Nil(t, ns.Error) + assert.Equal(t, ns.Error.ExecutionError, err) }) - t.Run("terminal-fail", func(t *testing.T) { + t.Run("terminal-fail-clear-state-on-any-termination", func(t *testing.T) { ns := NodeStatus{} p := NodePhaseFailed msg := "failed" err := &core.ExecutionError{} - ns.UpdatePhase(p, n, msg, err) + ns.UpdatePhase(p, n, msg, false, err) - assert.Equal(t, *ns.LastUpdatedAt, n) + assert.Nil(t, ns.LastUpdatedAt) assert.Nil(t, ns.QueuedAt) - assert.Equal(t, *ns.LastAttemptStartedAt, n) - assert.Equal(t, *ns.StartedAt, n) + assert.Nil(t, ns.LastAttemptStartedAt) + assert.Nil(t, ns.StartedAt) assert.Equal(t, *ns.StoppedAt, n) assert.Equal(t, p, ns.Phase) - assert.Equal(t, msg, ns.Message) + assert.Equal(t, ns.Message, "") assert.Equal(t, ns.Error.ExecutionError, err) }) @@ -332,7 +463,7 @@ func TestNodeStatus_UpdatePhase(t *testing.T) { p := NodePhaseTimedOut msg := "tm" err := &core.ExecutionError{} - ns.UpdatePhase(p, n, msg, err) + ns.UpdatePhase(p, n, msg, true, err) assert.Equal(t, *ns.LastUpdatedAt, n) assert.Nil(t, ns.QueuedAt) @@ -344,54 +475,12 @@ func TestNodeStatus_UpdatePhase(t *testing.T) { assert.Equal(t, ns.Error.ExecutionError, err) }) - const success = "success" - t.Run("terminal-success", func(t *testing.T) { - ns := NodeStatus{} - p := NodePhaseSucceeded - msg := success - ns.UpdatePhase(p, n, msg, nil) - - assert.Nil(t, ns.LastUpdatedAt) - assert.Nil(t, ns.QueuedAt) - assert.Nil(t, ns.LastAttemptStartedAt) - assert.Nil(t, ns.StartedAt) - assert.Equal(t, *ns.StoppedAt, n) - assert.Equal(t, p, ns.Phase) - assert.Empty(t, ns.Message) - assert.Nil(t, ns.Error) - }) - - t.Run("terminal-skipped", func(t *testing.T) { + t.Run("terminal-timeout-clear-state-on-any-termination", func(t *testing.T) { ns := NodeStatus{} - p := NodePhaseSucceeded - msg := success - ns.UpdatePhase(p, n, msg, nil) - - assert.Nil(t, ns.LastUpdatedAt) - assert.Nil(t, ns.QueuedAt) - assert.Nil(t, ns.LastAttemptStartedAt) - assert.Nil(t, ns.StartedAt) - assert.Equal(t, *ns.StoppedAt, n) - assert.Equal(t, p, ns.Phase) - assert.Empty(t, ns.Message) - assert.Nil(t, ns.Error) - }) - - t.Run("terminal-success-preset", func(t *testing.T) { - ns := NodeStatus{ - QueuedAt: &n, - StartedAt: &n, - LastUpdatedAt: &n, - LastAttemptStartedAt: &n, - WorkflowNodeStatus: &WorkflowNodeStatus{}, - BranchStatus: &BranchNodeStatus{}, - DynamicNodeStatus: &DynamicNodeStatus{}, - TaskNodeStatus: &TaskNodeStatus{}, - SubNodeStatus: map[NodeID]*NodeStatus{}, - } - p := NodePhaseSucceeded - msg := success - ns.UpdatePhase(p, n, msg, nil) + p := NodePhaseTimedOut + msg := "tm" + err := &core.ExecutionError{} + ns.UpdatePhase(p, n, msg, false, err) assert.Nil(t, ns.LastUpdatedAt) assert.Nil(t, ns.QueuedAt) @@ -399,44 +488,7 @@ func TestNodeStatus_UpdatePhase(t *testing.T) { assert.Nil(t, ns.StartedAt) assert.Equal(t, *ns.StoppedAt, n) assert.Equal(t, p, ns.Phase) - assert.Empty(t, ns.Message) - assert.Nil(t, ns.Error) - assert.Nil(t, ns.SubNodeStatus) - assert.Nil(t, ns.DynamicNodeStatus) - assert.Nil(t, ns.WorkflowNodeStatus) - assert.Nil(t, ns.BranchStatus) - assert.Nil(t, ns.TaskNodeStatus) - }) - - t.Run("non-terminal-preset", func(t *testing.T) { - ns := NodeStatus{ - QueuedAt: &n, - StartedAt: &n, - LastUpdatedAt: &n, - LastAttemptStartedAt: &n, - WorkflowNodeStatus: &WorkflowNodeStatus{}, - BranchStatus: &BranchNodeStatus{}, - DynamicNodeStatus: &DynamicNodeStatus{}, - TaskNodeStatus: &TaskNodeStatus{}, - SubNodeStatus: map[NodeID]*NodeStatus{}, - } - n2 := metav1.NewTime(time.Now()) - p := NodePhaseRunning - msg := "running" - ns.UpdatePhase(p, n2, msg, nil) - - assert.Equal(t, *ns.LastUpdatedAt, n2) - assert.Equal(t, *ns.QueuedAt, n) - assert.Equal(t, *ns.LastAttemptStartedAt, n) - assert.Equal(t, *ns.StartedAt, n) - assert.Nil(t, ns.StoppedAt) - assert.Equal(t, p, ns.Phase) - assert.Equal(t, msg, ns.Message) - assert.Nil(t, ns.Error) - assert.NotNil(t, ns.SubNodeStatus) - assert.NotNil(t, ns.DynamicNodeStatus) - assert.NotNil(t, ns.WorkflowNodeStatus) - assert.NotNil(t, ns.BranchStatus) - assert.NotNil(t, ns.TaskNodeStatus) + assert.Equal(t, ns.Message, "") + assert.Equal(t, ns.Error.ExecutionError, err) }) } diff --git a/flytepropeller/pkg/controller/config/config.go b/flytepropeller/pkg/controller/config/config.go index 1afc986287..698883fb48 100644 --- a/flytepropeller/pkg/controller/config/config.go +++ b/flytepropeller/pkg/controller/config/config.go @@ -98,6 +98,7 @@ var ( InterruptibleFailureThreshold: -1, DefaultMaxAttempts: 1, IgnoreRetryCause: false, + EnableCRDebugMetadata: false, }, MaxStreakLength: 8, // Turbo mode is enabled by default ProfilerPort: config.Port{ @@ -213,6 +214,7 @@ type NodeConfig struct { InterruptibleFailureThreshold int32 `json:"interruptible-failure-threshold" pflag:"1,number of failures for a node to be still considered interruptible. Negative numbers are treated as complementary (ex. -1 means last attempt is non-interruptible).'"` DefaultMaxAttempts int32 `json:"default-max-attempts" pflag:"3,Default maximum number of attempts for a node"` IgnoreRetryCause bool `json:"ignore-retry-cause" pflag:",Ignore retry cause and count all attempts toward a node's max attempts"` + EnableCRDebugMetadata bool `json:"enable-cr-debug-metadata" pflag:",Collapse node on any terminal state, not just successful terminations. This is useful to reduce the size of workflow state in etcd."` } // DefaultDeadlines contains default values for timeouts diff --git a/flytepropeller/pkg/controller/config/config_flags.go b/flytepropeller/pkg/controller/config/config_flags.go index 07a4fba742..c60f724ee2 100755 --- a/flytepropeller/pkg/controller/config/config_flags.go +++ b/flytepropeller/pkg/controller/config/config_flags.go @@ -96,6 +96,7 @@ func (cfg Config) GetPFlagSet(prefix string) *pflag.FlagSet { cmdFlags.Int32(fmt.Sprintf("%v%v", prefix, "node-config.interruptible-failure-threshold"), defaultConfig.NodeConfig.InterruptibleFailureThreshold, "number of failures for a node to be still considered interruptible. Negative numbers are treated as complementary (ex. -1 means last attempt is non-interruptible).'") cmdFlags.Int32(fmt.Sprintf("%v%v", prefix, "node-config.default-max-attempts"), defaultConfig.NodeConfig.DefaultMaxAttempts, "Default maximum number of attempts for a node") cmdFlags.Bool(fmt.Sprintf("%v%v", prefix, "node-config.ignore-retry-cause"), defaultConfig.NodeConfig.IgnoreRetryCause, "Ignore retry cause and count all attempts toward a node's max attempts") + cmdFlags.Bool(fmt.Sprintf("%v%v", prefix, "node-config.enable-cr-debug-metadata"), defaultConfig.NodeConfig.EnableCRDebugMetadata, "Collapse node on any terminal state, not just successful terminations. This is useful to reduce the size of workflow state in etcd.") cmdFlags.Int(fmt.Sprintf("%v%v", prefix, "max-streak-length"), defaultConfig.MaxStreakLength, "Maximum number of consecutive rounds that one propeller worker can use for one workflow - >1 => turbo-mode is enabled.") cmdFlags.String(fmt.Sprintf("%v%v", prefix, "event-config.raw-output-policy"), defaultConfig.EventConfig.RawOutputPolicy, "How output data should be passed along in execution events.") cmdFlags.Bool(fmt.Sprintf("%v%v", prefix, "event-config.fallback-to-output-reference"), defaultConfig.EventConfig.FallbackToOutputReference, "Whether output data should be sent by reference when it is too large to be sent inline in execution events.") diff --git a/flytepropeller/pkg/controller/config/config_flags_test.go b/flytepropeller/pkg/controller/config/config_flags_test.go index 54da9e9fe1..6f3c67b652 100755 --- a/flytepropeller/pkg/controller/config/config_flags_test.go +++ b/flytepropeller/pkg/controller/config/config_flags_test.go @@ -743,6 +743,20 @@ func TestConfig_SetFlags(t *testing.T) { } }) }) + t.Run("Test_node-config.enable-cr-debug-metadata", func(t *testing.T) { + + t.Run("Override", func(t *testing.T) { + testValue := "1" + + cmdFlags.Set("node-config.enable-cr-debug-metadata", testValue) + if vBool, err := cmdFlags.GetBool("node-config.enable-cr-debug-metadata"); err == nil { + testDecodeJson_Config(t, fmt.Sprintf("%v", vBool), &actual.NodeConfig.EnableCRDebugMetadata) + + } else { + assert.FailNow(t, err.Error()) + } + }) + }) t.Run("Test_max-streak-length", func(t *testing.T) { t.Run("Override", func(t *testing.T) { diff --git a/flytepropeller/pkg/controller/nodes/branch/evaluator.go b/flytepropeller/pkg/controller/nodes/branch/evaluator.go index 44dc8711e8..4bc1676745 100644 --- a/flytepropeller/pkg/controller/nodes/branch/evaluator.go +++ b/flytepropeller/pkg/controller/nodes/branch/evaluator.go @@ -129,7 +129,9 @@ func DecideBranch(ctx context.Context, nl executors.NodeLookup, nodeID v1alpha1. } nStatus := nl.GetNodeExecutionStatus(ctx, n.GetID()) logger.Infof(ctx, "Branch Setting Node[%v] status to Skipped!", skippedNodeID) - nStatus.UpdatePhase(v1alpha1.NodePhaseSkipped, v1.Now(), "Branch evaluated to false", nil) + // We hard code enableCRDebugMetadata=true because it has no effect when setting phase to + // NodePhaseSkipped. This saves us passing the config all the way down from the nodeExecutor. + nStatus.UpdatePhase(v1alpha1.NodePhaseSkipped, v1.Now(), "Branch evaluated to false", true, nil) } if selectedNodeID == nil { diff --git a/flytepropeller/pkg/controller/nodes/executor.go b/flytepropeller/pkg/controller/nodes/executor.go index 8e96ee9645..6ddde14c71 100644 --- a/flytepropeller/pkg/controller/nodes/executor.go +++ b/flytepropeller/pkg/controller/nodes/executor.go @@ -475,6 +475,7 @@ func (c *recursiveNodeExecutor) WithNodeExecutionContextBuilder(nCtxBuilder inte type nodeExecutor struct { catalog catalog.Client clusterID string + enableCRDebugMetadata bool defaultActiveDeadline time.Duration defaultDataSandbox storage.DataReference defaultExecutionDeadline time.Duration @@ -1005,7 +1006,7 @@ func (c *nodeExecutor) handleNotYetStartedNode(ctx context.Context, dag executor logger.Warningf(ctx, "Failed to record nodeEvent, error [%s]", err.Error()) return interfaces.NodeStatusUndefined, errors.Wrapf(errors.EventRecordingFailed, nCtx.NodeID(), err, "failed to record node event") } - UpdateNodeStatus(np, p, nCtx.NodeStateReader(), nodeStatus) + UpdateNodeStatus(np, p, nCtx.NodeStateReader(), nodeStatus, c.enableCRDebugMetadata) c.RecordTransitionLatency(ctx, dag, nCtx.ContextualNodeLookup(), nCtx.Node(), nodeStatus) } @@ -1271,7 +1272,7 @@ func (c *nodeExecutor) handleQueuedOrRunningNode(ctx context.Context, nCtx inter } } - UpdateNodeStatus(np, p, nCtx.NodeStateReader(), nodeStatus) + UpdateNodeStatus(np, p, nCtx.NodeStateReader(), nodeStatus, c.enableCRDebugMetadata) return finalStatus, nil } @@ -1285,7 +1286,7 @@ func (c *nodeExecutor) handleRetryableFailure(ctx context.Context, nCtx interfac // NOTE: It is important to increment attempts only after abort has been called. Increment attempt mutates the state // Attempt is used throughout the system to determine the idempotent resource version. nodeStatus.IncrementAttempts() - nodeStatus.UpdatePhase(v1alpha1.NodePhaseRunning, metav1.Now(), "retrying", nil) + nodeStatus.UpdatePhase(v1alpha1.NodePhaseRunning, metav1.Now(), "retrying", c.enableCRDebugMetadata, nil) // We are going to retry in the next round, so we should clear all current state nodeStatus.ClearSubNodeStatus() nodeStatus.ClearTaskStatus() @@ -1324,8 +1325,14 @@ func (c *nodeExecutor) HandleNode(ctx context.Context, dag executors.DAGStructur if err := c.Abort(ctx, h, nCtx, "node failing", false); err != nil { return interfaces.NodeStatusUndefined, err } - nodeStatus.UpdatePhase(v1alpha1.NodePhaseFailed, metav1.Now(), nodeStatus.GetMessage(), nodeStatus.GetExecutionError()) - c.metrics.FailureDuration.Observe(ctx, nodeStatus.GetStartedAt().Time, nodeStatus.GetStoppedAt().Time) + t := metav1.Now() + + startedAt := nodeStatus.GetStartedAt() + if startedAt == nil { + startedAt = &t + } + nodeStatus.UpdatePhase(v1alpha1.NodePhaseFailed, t, nodeStatus.GetMessage(), c.enableCRDebugMetadata, nodeStatus.GetExecutionError()) + c.metrics.FailureDuration.Observe(ctx, startedAt.Time, nodeStatus.GetStoppedAt().Time) if nCtx.NodeExecutionMetadata().IsInterruptible() { c.metrics.InterruptibleNodesTerminated.Inc(ctx) } @@ -1338,8 +1345,7 @@ func (c *nodeExecutor) HandleNode(ctx context.Context, dag executors.DAGStructur return interfaces.NodeStatusUndefined, err } - nodeStatus.ClearSubNodeStatus() - nodeStatus.UpdatePhase(v1alpha1.NodePhaseTimedOut, metav1.Now(), nodeStatus.GetMessage(), nodeStatus.GetExecutionError()) + nodeStatus.UpdatePhase(v1alpha1.NodePhaseTimedOut, metav1.Now(), nodeStatus.GetMessage(), c.enableCRDebugMetadata, nodeStatus.GetExecutionError()) c.metrics.TimedOutFailure.Inc(ctx) if nCtx.NodeExecutionMetadata().IsInterruptible() { c.metrics.InterruptibleNodesTerminated.Inc(ctx) @@ -1363,8 +1369,7 @@ func (c *nodeExecutor) HandleNode(ctx context.Context, dag executors.DAGStructur stopped = &t } c.metrics.SuccessDuration.Observe(ctx, started.Time, stopped.Time) - nodeStatus.ClearSubNodeStatus() - nodeStatus.UpdatePhase(v1alpha1.NodePhaseSucceeded, t, "completed successfully", nil) + nodeStatus.UpdatePhase(v1alpha1.NodePhaseSucceeded, t, "completed successfully", c.enableCRDebugMetadata, nil) if nCtx.NodeExecutionMetadata().IsInterruptible() { c.metrics.InterruptibleNodesTerminated.Inc(ctx) } @@ -1431,6 +1436,7 @@ func NewExecutor(ctx context.Context, nodeConfig config.NodeConfig, store *stora nodeExecutor := &nodeExecutor{ catalog: catalogClient, clusterID: clusterID, + enableCRDebugMetadata: nodeConfig.EnableCRDebugMetadata, defaultActiveDeadline: nodeConfig.DefaultDeadlines.DefaultNodeActiveDeadline.Duration, defaultDataSandbox: defaultRawOutputPrefix, defaultExecutionDeadline: nodeConfig.DefaultDeadlines.DefaultNodeExecutionDeadline.Duration, diff --git a/flytepropeller/pkg/controller/nodes/executor_test.go b/flytepropeller/pkg/controller/nodes/executor_test.go index 222e0a05d5..2bc552bab0 100644 --- a/flytepropeller/pkg/controller/nodes/executor_test.go +++ b/flytepropeller/pkg/controller/nodes/executor_test.go @@ -565,7 +565,7 @@ func TestNodeExecutor_RecursiveNodeHandler_Recurse(t *testing.T) { }, } - setupNodePhase := func(n0Phase, n2Phase, expectedN2Phase v1alpha1.NodePhase) (*mocks.ExecutableWorkflow, *mocks.ExecutableNodeStatus) { + setupNodePhase := func(n0Phase, n2Phase, expectedN2Phase v1alpha1.NodePhase, expectedClearStateOnAnyTermination bool) (*mocks.ExecutableWorkflow, *mocks.ExecutableNodeStatus) { taskID := "id" taskID0 := "id1" // Setup @@ -582,7 +582,7 @@ func TestNodeExecutor_RecursiveNodeHandler_Recurse(t *testing.T) { mockN2Status.OnGetStoppedAt().Return(nil) var ee *core.ExecutionError - mockN2Status.On("UpdatePhase", expectedN2Phase, mock.Anything, mock.AnythingOfType("string"), ee) + mockN2Status.On("UpdatePhase", expectedN2Phase, mock.Anything, mock.AnythingOfType("string"), expectedClearStateOnAnyTermination, ee) mockN2Status.OnIsDirty().Return(false) mockN2Status.OnGetTaskNodeStatus().Return(nil) mockN2Status.On("ClearDynamicNodeStatus").Return(nil) @@ -659,17 +659,21 @@ func TestNodeExecutor_RecursiveNodeHandler_Recurse(t *testing.T) { } tests := []struct { - name string - currentNodePhase v1alpha1.NodePhase - parentNodePhase v1alpha1.NodePhase - expectedNodePhase v1alpha1.NodePhase - expectedPhase interfaces.NodePhase - expectedError bool - updateCalled bool + name string + currentNodePhase v1alpha1.NodePhase + parentNodePhase v1alpha1.NodePhase + enableCRDebugMetadata bool + expectedNodePhase v1alpha1.NodePhase + expectedPhase interfaces.NodePhase + expectedError bool + updateCalled bool }{ - {"notYetStarted->skipped", v1alpha1.NodePhaseNotYetStarted, v1alpha1.NodePhaseFailed, v1alpha1.NodePhaseSkipped, interfaces.NodePhaseFailed, false, false}, - {"notYetStarted->skipped", v1alpha1.NodePhaseNotYetStarted, v1alpha1.NodePhaseSkipped, v1alpha1.NodePhaseSkipped, interfaces.NodePhaseSuccess, false, true}, - {"notYetStarted->queued", v1alpha1.NodePhaseNotYetStarted, v1alpha1.NodePhaseSucceeded, v1alpha1.NodePhaseQueued, interfaces.NodePhasePending, false, true}, + {"notYetStarted->skipped", v1alpha1.NodePhaseNotYetStarted, v1alpha1.NodePhaseFailed, false, v1alpha1.NodePhaseSkipped, interfaces.NodePhaseFailed, false, false}, + {"notYetStarted->skipped", v1alpha1.NodePhaseNotYetStarted, v1alpha1.NodePhaseSkipped, false, v1alpha1.NodePhaseSkipped, interfaces.NodePhaseSuccess, false, true}, + {"notYetStarted->queued", v1alpha1.NodePhaseNotYetStarted, v1alpha1.NodePhaseSucceeded, false, v1alpha1.NodePhaseQueued, interfaces.NodePhasePending, false, true}, + {"notYetStarted->skipped enableCRDebugMetadata", v1alpha1.NodePhaseNotYetStarted, v1alpha1.NodePhaseFailed, true, v1alpha1.NodePhaseSkipped, interfaces.NodePhaseFailed, false, false}, + {"notYetStarted->skipped enableCRDebugMetadata", v1alpha1.NodePhaseNotYetStarted, v1alpha1.NodePhaseSkipped, true, v1alpha1.NodePhaseSkipped, interfaces.NodePhaseSuccess, false, true}, + {"notYetStarted->queued enableCRDebugMetadata", v1alpha1.NodePhaseNotYetStarted, v1alpha1.NodePhaseSucceeded, true, v1alpha1.NodePhaseQueued, interfaces.NodePhasePending, false, true}, } for _, test := range tests { t.Run(test.name, func(t *testing.T) { @@ -684,12 +688,14 @@ func TestNodeExecutor_RecursiveNodeHandler_Recurse(t *testing.T) { h.OnFinalizeRequired().Return(false) hf.OnGetHandler(v1alpha1.NodeKindTask).Return(h, nil) - mockWf, _ := setupNodePhase(test.parentNodePhase, test.currentNodePhase, test.expectedNodePhase) + mockWf, _ := setupNodePhase(test.parentNodePhase, test.currentNodePhase, test.expectedNodePhase, test.enableCRDebugMetadata) startNode := mockWf.StartNode() store := createInmemoryDataStore(t, promutils.NewTestScope()) adminClient := launchplan.NewFailFastLaunchPlanExecutor() - execIface, err := NewExecutor(ctx, config.GetConfig().NodeConfig, store, enQWf, mockEventSink, adminClient, adminClient, + nodeConfig := config.GetConfig().NodeConfig + nodeConfig.EnableCRDebugMetadata = test.enableCRDebugMetadata + execIface, err := NewExecutor(ctx, nodeConfig, store, enQWf, mockEventSink, adminClient, adminClient, 10, "s3://bucket", fakeKubeClient, catalogClient, recoveryClient, eventConfig, testClusterID, signalClient, hf, promutils.NewTestScope()) assert.NoError(t, err) exec := execIface.(*recursiveNodeExecutor) @@ -1329,7 +1335,7 @@ func TestNodeExecutor_RecursiveNodeHandler_BranchNode(t *testing.T) { if test.phaseUpdateExpected { var ee *core.ExecutionError - branchTakeNodeStatus.On("UpdatePhase", v1alpha1.NodePhaseQueued, mock.Anything, mock.Anything, ee).Return() + branchTakeNodeStatus.On("UpdatePhase", v1alpha1.NodePhaseQueued, mock.Anything, mock.Anything, false, ee).Return() } leafDag := executors.NewLeafNodeDAGStructure(branchTakenNodeID, parentBranchNodeID) diff --git a/flytepropeller/pkg/controller/nodes/transformers.go b/flytepropeller/pkg/controller/nodes/transformers.go index 8c0db1e57a..e341a0d2a1 100644 --- a/flytepropeller/pkg/controller/nodes/transformers.go +++ b/flytepropeller/pkg/controller/nodes/transformers.go @@ -228,10 +228,10 @@ func ToK8sTime(t time.Time) v1.Time { return v1.Time{Time: t} } -func UpdateNodeStatus(np v1alpha1.NodePhase, p handler.PhaseInfo, n interfaces.NodeStateReader, s v1alpha1.ExecutableNodeStatus) { +func UpdateNodeStatus(np v1alpha1.NodePhase, p handler.PhaseInfo, n interfaces.NodeStateReader, s v1alpha1.ExecutableNodeStatus, enableCRDebugMetadata bool) { // We update the phase and / or reason only if they are not already updated if np != s.GetPhase() || p.GetReason() != s.GetMessage() { - s.UpdatePhase(np, ToK8sTime(p.GetOccurredAt()), p.GetReason(), p.GetErr()) + s.UpdatePhase(np, ToK8sTime(p.GetOccurredAt()), p.GetReason(), enableCRDebugMetadata, p.GetErr()) } // Update TaskStatus if n.HasTaskNodeState() { From 03e94e97451b374d3a8ab74f5273f137b4155534 Mon Sep 17 00:00:00 2001 From: Katrina Rogan Date: Tue, 16 Jan 2024 09:45:46 -0800 Subject: [PATCH 11/30] Add org to identifier protos (#4663) --- .../gen/pb-cpp/flyteidl/admin/common.pb.cc | 404 +- .../gen/pb-cpp/flyteidl/admin/common.pb.h | 204 + .../gen/pb-cpp/flyteidl/admin/execution.pb.cc | 326 +- .../gen/pb-cpp/flyteidl/admin/execution.pb.h | 68 + .../pb-cpp/flyteidl/admin/launch_plan.pb.cc | 87 +- .../pb-cpp/flyteidl/admin/launch_plan.pb.h | 68 + .../flyteidl/admin/matchable_resource.pb.cc | 108 +- .../flyteidl/admin/matchable_resource.pb.h | 68 + .../gen/pb-cpp/flyteidl/admin/project.pb.cc | 112 +- .../gen/pb-cpp/flyteidl/admin/project.pb.h | 68 + .../flyteidl/admin/project_attributes.pb.cc | 267 +- .../flyteidl/admin/project_attributes.pb.h | 204 + .../admin/project_domain_attributes.pb.cc | 277 +- .../admin/project_domain_attributes.pb.h | 204 + .../flyteidl/admin/workflow_attributes.pb.cc | 273 +- .../flyteidl/admin/workflow_attributes.pb.h | 204 + .../gen/pb-cpp/flyteidl/core/identifier.pb.cc | 193 +- .../gen/pb-cpp/flyteidl/core/identifier.pb.h | 136 + .../flyteidl/datacatalog/datacatalog.pb.cc | 311 +- .../flyteidl/datacatalog/datacatalog.pb.h | 180 + .../pb-cpp/flyteidl/service/admin.grpc.pb.h | 18 +- .../gen/pb-cpp/flyteidl/service/admin.pb.cc | 597 +- .../service/external_plugin_service.pb.cc | 54 +- .../service/external_plugin_service.pb.h | 1 - .../gen/pb-go/flyteidl/admin/common.pb.go | 186 +- .../gen/pb-go/flyteidl/admin/execution.pb.go | 252 +- .../pb-go/flyteidl/admin/launch_plan.pb.go | 164 +- .../flyteidl/admin/matchable_resource.pb.go | 200 +- .../gen/pb-go/flyteidl/admin/project.pb.go | 78 +- .../flyteidl/admin/project_attributes.pb.go | 96 +- .../admin/project_domain_attributes.pb.go | 100 +- .../flyteidl/admin/workflow_attributes.pb.go | 100 +- .../flyteidl/artifact/artifacts.swagger.json | 15 + .../gen/pb-go/flyteidl/core/identifier.pb.go | 85 +- .../flyteidl/datacatalog/datacatalog.pb.go | 247 +- .../gen/pb-go/flyteidl/service/admin.pb.go | 303 +- .../gen/pb-go/flyteidl/service/admin.pb.gw.go | 6497 +++++++++-- .../pb-go/flyteidl/service/admin.swagger.json | 5835 +++++++--- .../pb-go/flyteidl/service/agent.swagger.json | 8 + .../flyteidl/service/dataproxy.swagger.json | 4 + .../service/external_plugin_service.pb.go | 70 +- .../external_plugin_service.swagger.json | 4 + .../flyteidl/service/flyteadmin/README.md | 53 +- .../service/flyteadmin/api/swagger.yaml | 4800 +++++++-- .../service/flyteadmin/api_admin_service.go | 7093 ++++++++++-- .../model_admin_execution_create_request.go | 2 + ...dmin_matchable_attributes_configuration.go | 4 +- .../model_admin_named_entity_identifier.go | 2 + .../service/flyteadmin/model_admin_project.go | 2 + .../model_admin_project_attributes.go | 2 + ...admin_project_attributes_delete_request.go | 2 + .../model_admin_project_domain_attributes.go | 2 + ...roject_domain_attributes_delete_request.go | 2 + .../model_admin_workflow_attributes.go | 2 + ...dmin_workflow_attributes_delete_request.go | 2 + .../flyteadmin/model_core_identifier.go | 2 + ...odel_core_workflow_execution_identifier.go | 2 + .../gen/pb-go/flyteidl/service/openapi.go | 4 +- .../flyteidl/service/signal.swagger.json | 11 + .../gen/pb-java/datacatalog/Datacatalog.java | 510 +- .../gen/pb-java/flyteidl/admin/Common.java | 655 +- .../flyteidl/admin/ExecutionOuterClass.java | 381 +- .../flyteidl/admin/LaunchPlanOuterClass.java | 190 +- .../admin/MatchableResourceOuterClass.java | 211 +- .../admin/ProjectAttributesOuterClass.java | 556 +- .../ProjectDomainAttributesOuterClass.java | 566 +- .../flyteidl/admin/ProjectOuterClass.java | 201 +- .../admin/WorkflowAttributesOuterClass.java | 562 +- .../flyteidl/core/IdentifierOuterClass.java | 385 +- .../gen/pb-java/flyteidl/service/Admin.java | 595 +- .../ExternalPluginServiceOuterClass.java | 49 +- flyteidl/gen/pb-js/flyteidl.d.ts | 108 + flyteidl/gen/pb-js/flyteidl.js | 306 + .../pb_python/flyteidl/admin/common_pb2.py | 112 +- .../pb_python/flyteidl/admin/common_pb2.pyi | 18 +- .../pb_python/flyteidl/admin/execution_pb2.py | 100 +- .../flyteidl/admin/execution_pb2.pyi | 6 +- .../flyteidl/admin/launch_plan_pb2.py | 8 +- .../flyteidl/admin/launch_plan_pb2.pyi | 6 +- .../flyteidl/admin/matchable_resource_pb2.py | 16 +- .../flyteidl/admin/matchable_resource_pb2.pyi | 6 +- .../flyteidl/admin/project_attributes_pb2.py | 28 +- .../flyteidl/admin/project_attributes_pb2.pyi | 18 +- .../admin/project_domain_attributes_pb2.py | 28 +- .../admin/project_domain_attributes_pb2.pyi | 18 +- .../pb_python/flyteidl/admin/project_pb2.py | 28 +- .../pb_python/flyteidl/admin/project_pb2.pyi | 6 +- .../flyteidl/admin/workflow_attributes_pb2.py | 28 +- .../admin/workflow_attributes_pb2.pyi | 18 +- .../pb_python/flyteidl/core/identifier_pb2.py | 24 +- .../flyteidl/core/identifier_pb2.pyi | 12 +- .../flyteidl/datacatalog/datacatalog_pb2.py | 74 +- .../flyteidl/datacatalog/datacatalog_pb2.pyi | 12 +- .../pb_python/flyteidl/service/admin_pb2.py | 82 +- .../flyteidl/service/admin_pb2_grpc.py | 6 +- .../service/external_plugin_service_pb2.py | 35 +- .../service/external_plugin_service_pb2.pyi | 1 - .../flyteidl/service/flyteadmin/README.md | 53 +- .../flyteadmin/api/admin_service_api.py | 9541 +++++++++++++---- .../models/admin_execution_create_request.py | 34 +- ...dmin_matchable_attributes_configuration.py | 34 +- .../models/admin_named_entity_identifier.py | 34 +- .../flyteadmin/models/admin_project.py | 34 +- .../models/admin_project_attributes.py | 34 +- ...admin_project_attributes_delete_request.py | 34 +- .../models/admin_project_domain_attributes.py | 34 +- ...roject_domain_attributes_delete_request.py | 34 +- .../models/admin_workflow_attributes.py | 34 +- ...dmin_workflow_attributes_delete_request.py | 34 +- .../flyteadmin/models/core_identifier.py | 34 +- .../core_workflow_execution_identifier.py | 34 +- .../flyteadmin/test/test_admin_service_api.py | 303 +- flyteidl/gen/pb_rust/datacatalog.rs | 8 +- flyteidl/gen/pb_rust/flyteidl.admin.rs | 54 +- flyteidl/gen/pb_rust/flyteidl.core.rs | 6 + flyteidl/go.mod | 2 + flyteidl/protos/flyteidl/admin/common.proto | 8 + .../protos/flyteidl/admin/execution.proto | 3 + .../protos/flyteidl/admin/launch_plan.proto | 5 +- .../flyteidl/admin/matchable_resource.proto | 7 +- flyteidl/protos/flyteidl/admin/project.proto | 3 + .../flyteidl/admin/project_attributes.proto | 9 + .../admin/project_domain_attributes.proto | 11 +- .../flyteidl/admin/workflow_attributes.proto | 9 + .../protos/flyteidl/core/identifier.proto | 6 + .../flyteidl/datacatalog/datacatalog.proto | 5 + flyteidl/protos/flyteidl/service/admin.proto | 169 +- .../service/external_plugin_service.proto | 1 - .../catalog/async_client_impl_test.go | 4 +- 129 files changed, 38709 insertions(+), 8534 deletions(-) diff --git a/flyteidl/gen/pb-cpp/flyteidl/admin/common.pb.cc b/flyteidl/gen/pb-cpp/flyteidl/admin/common.pb.cc index 982f3fb6b7..60e9f6862c 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/admin/common.pb.cc +++ b/flyteidl/gen/pb-cpp/flyteidl/admin/common.pb.cc @@ -560,6 +560,7 @@ const ::google::protobuf::uint32 TableStruct_flyteidl_2fadmin_2fcommon_2eproto:: PROTOBUF_FIELD_OFFSET(::flyteidl::admin::NamedEntityIdentifier, project_), PROTOBUF_FIELD_OFFSET(::flyteidl::admin::NamedEntityIdentifier, domain_), PROTOBUF_FIELD_OFFSET(::flyteidl::admin::NamedEntityIdentifier, name_), + PROTOBUF_FIELD_OFFSET(::flyteidl::admin::NamedEntityIdentifier, org_), ~0u, // no _has_bits_ PROTOBUF_FIELD_OFFSET(::flyteidl::admin::NamedEntityMetadata, _internal_metadata_), ~0u, // no _extensions_ @@ -593,6 +594,7 @@ const ::google::protobuf::uint32 TableStruct_flyteidl_2fadmin_2fcommon_2eproto:: PROTOBUF_FIELD_OFFSET(::flyteidl::admin::NamedEntityIdentifierListRequest, token_), PROTOBUF_FIELD_OFFSET(::flyteidl::admin::NamedEntityIdentifierListRequest, sort_by_), PROTOBUF_FIELD_OFFSET(::flyteidl::admin::NamedEntityIdentifierListRequest, filters_), + PROTOBUF_FIELD_OFFSET(::flyteidl::admin::NamedEntityIdentifierListRequest, org_), ~0u, // no _has_bits_ PROTOBUF_FIELD_OFFSET(::flyteidl::admin::NamedEntityListRequest, _internal_metadata_), ~0u, // no _extensions_ @@ -605,6 +607,7 @@ const ::google::protobuf::uint32 TableStruct_flyteidl_2fadmin_2fcommon_2eproto:: PROTOBUF_FIELD_OFFSET(::flyteidl::admin::NamedEntityListRequest, token_), PROTOBUF_FIELD_OFFSET(::flyteidl::admin::NamedEntityListRequest, sort_by_), PROTOBUF_FIELD_OFFSET(::flyteidl::admin::NamedEntityListRequest, filters_), + PROTOBUF_FIELD_OFFSET(::flyteidl::admin::NamedEntityListRequest, org_), ~0u, // no _has_bits_ PROTOBUF_FIELD_OFFSET(::flyteidl::admin::NamedEntityIdentifierList, _internal_metadata_), ~0u, // no _extensions_ @@ -750,31 +753,31 @@ const ::google::protobuf::uint32 TableStruct_flyteidl_2fadmin_2fcommon_2eproto:: }; static const ::google::protobuf::internal::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = { { 0, -1, sizeof(::flyteidl::admin::NamedEntityIdentifier)}, - { 8, -1, sizeof(::flyteidl::admin::NamedEntityMetadata)}, - { 15, -1, sizeof(::flyteidl::admin::NamedEntity)}, - { 23, -1, sizeof(::flyteidl::admin::Sort)}, - { 30, -1, sizeof(::flyteidl::admin::NamedEntityIdentifierListRequest)}, - { 41, -1, sizeof(::flyteidl::admin::NamedEntityListRequest)}, - { 53, -1, sizeof(::flyteidl::admin::NamedEntityIdentifierList)}, - { 60, -1, sizeof(::flyteidl::admin::NamedEntityList)}, - { 67, -1, sizeof(::flyteidl::admin::NamedEntityGetRequest)}, - { 74, -1, sizeof(::flyteidl::admin::NamedEntityUpdateRequest)}, - { 82, -1, sizeof(::flyteidl::admin::NamedEntityUpdateResponse)}, - { 87, -1, sizeof(::flyteidl::admin::ObjectGetRequest)}, - { 93, -1, sizeof(::flyteidl::admin::ResourceListRequest)}, - { 103, -1, sizeof(::flyteidl::admin::EmailNotification)}, - { 109, -1, sizeof(::flyteidl::admin::PagerDutyNotification)}, - { 115, -1, sizeof(::flyteidl::admin::SlackNotification)}, - { 121, -1, sizeof(::flyteidl::admin::Notification)}, - { 131, -1, sizeof(::flyteidl::admin::UrlBlob)}, - { 138, 145, sizeof(::flyteidl::admin::Labels_ValuesEntry_DoNotUse)}, - { 147, -1, sizeof(::flyteidl::admin::Labels)}, - { 153, 160, sizeof(::flyteidl::admin::Annotations_ValuesEntry_DoNotUse)}, - { 162, -1, sizeof(::flyteidl::admin::Annotations)}, - { 168, -1, sizeof(::flyteidl::admin::Envs)}, - { 174, -1, sizeof(::flyteidl::admin::AuthRole)}, - { 181, -1, sizeof(::flyteidl::admin::RawOutputDataConfig)}, - { 187, -1, sizeof(::flyteidl::admin::FlyteURLs)}, + { 9, -1, sizeof(::flyteidl::admin::NamedEntityMetadata)}, + { 16, -1, sizeof(::flyteidl::admin::NamedEntity)}, + { 24, -1, sizeof(::flyteidl::admin::Sort)}, + { 31, -1, sizeof(::flyteidl::admin::NamedEntityIdentifierListRequest)}, + { 43, -1, sizeof(::flyteidl::admin::NamedEntityListRequest)}, + { 56, -1, sizeof(::flyteidl::admin::NamedEntityIdentifierList)}, + { 63, -1, sizeof(::flyteidl::admin::NamedEntityList)}, + { 70, -1, sizeof(::flyteidl::admin::NamedEntityGetRequest)}, + { 77, -1, sizeof(::flyteidl::admin::NamedEntityUpdateRequest)}, + { 85, -1, sizeof(::flyteidl::admin::NamedEntityUpdateResponse)}, + { 90, -1, sizeof(::flyteidl::admin::ObjectGetRequest)}, + { 96, -1, sizeof(::flyteidl::admin::ResourceListRequest)}, + { 106, -1, sizeof(::flyteidl::admin::EmailNotification)}, + { 112, -1, sizeof(::flyteidl::admin::PagerDutyNotification)}, + { 118, -1, sizeof(::flyteidl::admin::SlackNotification)}, + { 124, -1, sizeof(::flyteidl::admin::Notification)}, + { 134, -1, sizeof(::flyteidl::admin::UrlBlob)}, + { 141, 148, sizeof(::flyteidl::admin::Labels_ValuesEntry_DoNotUse)}, + { 150, -1, sizeof(::flyteidl::admin::Labels)}, + { 156, 163, sizeof(::flyteidl::admin::Annotations_ValuesEntry_DoNotUse)}, + { 165, -1, sizeof(::flyteidl::admin::Annotations)}, + { 171, -1, sizeof(::flyteidl::admin::Envs)}, + { 177, -1, sizeof(::flyteidl::admin::AuthRole)}, + { 184, -1, sizeof(::flyteidl::admin::RawOutputDataConfig)}, + { 190, -1, sizeof(::flyteidl::admin::FlyteURLs)}, }; static ::google::protobuf::Message const * const file_default_instances[] = { @@ -817,78 +820,78 @@ const char descriptor_table_protodef_flyteidl_2fadmin_2fcommon_2eproto[] = "admin\032\035flyteidl/core/execution.proto\032\036fl" "yteidl/core/identifier.proto\032\034flyteidl/c" "ore/literals.proto\032\037google/protobuf/time" - "stamp.proto\"F\n\025NamedEntityIdentifier\022\017\n\007" + "stamp.proto\"S\n\025NamedEntityIdentifier\022\017\n\007" "project\030\001 \001(\t\022\016\n\006domain\030\002 \001(\t\022\014\n\004name\030\003 " - "\001(\t\"[\n\023NamedEntityMetadata\022\023\n\013descriptio" - "n\030\001 \001(\t\022/\n\005state\030\002 \001(\0162 .flyteidl.admin." - "NamedEntityState\"\253\001\n\013NamedEntity\0222\n\rreso" - "urce_type\030\001 \001(\0162\033.flyteidl.core.Resource" - "Type\0221\n\002id\030\002 \001(\0132%.flyteidl.admin.NamedE" - "ntityIdentifier\0225\n\010metadata\030\003 \001(\0132#.flyt" - "eidl.admin.NamedEntityMetadata\"r\n\004Sort\022\013" - "\n\003key\030\001 \001(\t\0221\n\tdirection\030\002 \001(\0162\036.flyteid" - "l.admin.Sort.Direction\"*\n\tDirection\022\016\n\nD" - "ESCENDING\020\000\022\r\n\tASCENDING\020\001\"\231\001\n NamedEnti" - "tyIdentifierListRequest\022\017\n\007project\030\001 \001(\t" - "\022\016\n\006domain\030\002 \001(\t\022\r\n\005limit\030\003 \001(\r\022\r\n\005token" + "\001(\t\022\013\n\003org\030\004 \001(\t\"[\n\023NamedEntityMetadata\022" + "\023\n\013description\030\001 \001(\t\022/\n\005state\030\002 \001(\0162 .fl" + "yteidl.admin.NamedEntityState\"\253\001\n\013NamedE" + "ntity\0222\n\rresource_type\030\001 \001(\0162\033.flyteidl." + "core.ResourceType\0221\n\002id\030\002 \001(\0132%.flyteidl" + ".admin.NamedEntityIdentifier\0225\n\010metadata" + "\030\003 \001(\0132#.flyteidl.admin.NamedEntityMetad" + "ata\"r\n\004Sort\022\013\n\003key\030\001 \001(\t\0221\n\tdirection\030\002 " + "\001(\0162\036.flyteidl.admin.Sort.Direction\"*\n\tD" + "irection\022\016\n\nDESCENDING\020\000\022\r\n\tASCENDING\020\001\"" + "\246\001\n NamedEntityIdentifierListRequest\022\017\n\007" + "project\030\001 \001(\t\022\016\n\006domain\030\002 \001(\t\022\r\n\005limit\030\003" + " \001(\r\022\r\n\005token\030\004 \001(\t\022%\n\007sort_by\030\005 \001(\0132\024.f" + "lyteidl.admin.Sort\022\017\n\007filters\030\006 \001(\t\022\013\n\003o" + "rg\030\007 \001(\t\"\320\001\n\026NamedEntityListRequest\0222\n\rr" + "esource_type\030\001 \001(\0162\033.flyteidl.core.Resou" + "rceType\022\017\n\007project\030\002 \001(\t\022\016\n\006domain\030\003 \001(\t" + "\022\r\n\005limit\030\004 \001(\r\022\r\n\005token\030\005 \001(\t\022%\n\007sort_b" + "y\030\006 \001(\0132\024.flyteidl.admin.Sort\022\017\n\007filters" + "\030\007 \001(\t\022\013\n\003org\030\010 \001(\t\"c\n\031NamedEntityIdenti" + "fierList\0227\n\010entities\030\001 \003(\0132%.flyteidl.ad" + "min.NamedEntityIdentifier\022\r\n\005token\030\002 \001(\t" + "\"O\n\017NamedEntityList\022-\n\010entities\030\001 \003(\0132\033." + "flyteidl.admin.NamedEntity\022\r\n\005token\030\002 \001(" + "\t\"~\n\025NamedEntityGetRequest\0222\n\rresource_t" + "ype\030\001 \001(\0162\033.flyteidl.core.ResourceType\0221" + "\n\002id\030\002 \001(\0132%.flyteidl.admin.NamedEntityI" + "dentifier\"\270\001\n\030NamedEntityUpdateRequest\0222" + "\n\rresource_type\030\001 \001(\0162\033.flyteidl.core.Re" + "sourceType\0221\n\002id\030\002 \001(\0132%.flyteidl.admin." + "NamedEntityIdentifier\0225\n\010metadata\030\003 \001(\0132" + "#.flyteidl.admin.NamedEntityMetadata\"\033\n\031" + "NamedEntityUpdateResponse\"9\n\020ObjectGetRe" + "quest\022%\n\002id\030\001 \001(\0132\031.flyteidl.core.Identi" + "fier\"\236\001\n\023ResourceListRequest\0221\n\002id\030\001 \001(\013" + "2%.flyteidl.admin.NamedEntityIdentifier\022" + "\r\n\005limit\030\002 \001(\r\022\r\n\005token\030\003 \001(\t\022\017\n\007filters" "\030\004 \001(\t\022%\n\007sort_by\030\005 \001(\0132\024.flyteidl.admin" - ".Sort\022\017\n\007filters\030\006 \001(\t\"\303\001\n\026NamedEntityLi" - "stRequest\0222\n\rresource_type\030\001 \001(\0162\033.flyte" - "idl.core.ResourceType\022\017\n\007project\030\002 \001(\t\022\016" - "\n\006domain\030\003 \001(\t\022\r\n\005limit\030\004 \001(\r\022\r\n\005token\030\005" - " \001(\t\022%\n\007sort_by\030\006 \001(\0132\024.flyteidl.admin.S" - "ort\022\017\n\007filters\030\007 \001(\t\"c\n\031NamedEntityIdent" - "ifierList\0227\n\010entities\030\001 \003(\0132%.flyteidl.a" - "dmin.NamedEntityIdentifier\022\r\n\005token\030\002 \001(" - "\t\"O\n\017NamedEntityList\022-\n\010entities\030\001 \003(\0132\033" - ".flyteidl.admin.NamedEntity\022\r\n\005token\030\002 \001" - "(\t\"~\n\025NamedEntityGetRequest\0222\n\rresource_" - "type\030\001 \001(\0162\033.flyteidl.core.ResourceType\022" - "1\n\002id\030\002 \001(\0132%.flyteidl.admin.NamedEntity" - "Identifier\"\270\001\n\030NamedEntityUpdateRequest\022" - "2\n\rresource_type\030\001 \001(\0162\033.flyteidl.core.R" - "esourceType\0221\n\002id\030\002 \001(\0132%.flyteidl.admin" - ".NamedEntityIdentifier\0225\n\010metadata\030\003 \001(\013" - "2#.flyteidl.admin.NamedEntityMetadata\"\033\n" - "\031NamedEntityUpdateResponse\"9\n\020ObjectGetR" - "equest\022%\n\002id\030\001 \001(\0132\031.flyteidl.core.Ident" - "ifier\"\236\001\n\023ResourceListRequest\0221\n\002id\030\001 \001(" - "\0132%.flyteidl.admin.NamedEntityIdentifier" - "\022\r\n\005limit\030\002 \001(\r\022\r\n\005token\030\003 \001(\t\022\017\n\007filter" - "s\030\004 \001(\t\022%\n\007sort_by\030\005 \001(\0132\024.flyteidl.admi" - "n.Sort\"-\n\021EmailNotification\022\030\n\020recipient" - "s_email\030\001 \003(\t\"1\n\025PagerDutyNotification\022\030" - "\n\020recipients_email\030\001 \003(\t\"-\n\021SlackNotific" - "ation\022\030\n\020recipients_email\030\001 \003(\t\"\363\001\n\014Noti" - "fication\0226\n\006phases\030\001 \003(\0162&.flyteidl.core" - ".WorkflowExecution.Phase\0222\n\005email\030\002 \001(\0132" - "!.flyteidl.admin.EmailNotificationH\000\022;\n\n" - "pager_duty\030\003 \001(\0132%.flyteidl.admin.PagerD" - "utyNotificationH\000\0222\n\005slack\030\004 \001(\0132!.flyte" - "idl.admin.SlackNotificationH\000B\006\n\004type\")\n" - "\007UrlBlob\022\013\n\003url\030\001 \001(\t\022\r\n\005bytes\030\002 \001(\003:\002\030\001" - "\"k\n\006Labels\0222\n\006values\030\001 \003(\0132\".flyteidl.ad" - "min.Labels.ValuesEntry\032-\n\013ValuesEntry\022\013\n" - "\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"u\n\013Annotat" - "ions\0227\n\006values\030\001 \003(\0132\'.flyteidl.admin.An" - "notations.ValuesEntry\032-\n\013ValuesEntry\022\013\n\003" - "key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"3\n\004Envs\022+\n\006" - "values\030\001 \003(\0132\033.flyteidl.core.KeyValuePai" - "r\"N\n\010AuthRole\022\032\n\022assumable_iam_role\030\001 \001(" - "\t\022\"\n\032kubernetes_service_account\030\002 \001(\t:\002\030" - "\001\"5\n\023RawOutputDataConfig\022\036\n\026output_locat" - "ion_prefix\030\001 \001(\t\":\n\tFlyteURLs\022\016\n\006inputs\030" - "\001 \001(\t\022\017\n\007outputs\030\002 \001(\t\022\014\n\004deck\030\003 \001(\t*\\\n\020" - "NamedEntityState\022\027\n\023NAMED_ENTITY_ACTIVE\020" - "\000\022\031\n\025NAMED_ENTITY_ARCHIVED\020\001\022\024\n\020SYSTEM_G" - "ENERATED\020\002B=Z;github.com/flyteorg/flyte/" - "flyteidl/gen/pb-go/flyteidl/adminb\006proto" - "3" + ".Sort\"-\n\021EmailNotification\022\030\n\020recipients" + "_email\030\001 \003(\t\"1\n\025PagerDutyNotification\022\030\n" + "\020recipients_email\030\001 \003(\t\"-\n\021SlackNotifica" + "tion\022\030\n\020recipients_email\030\001 \003(\t\"\363\001\n\014Notif" + "ication\0226\n\006phases\030\001 \003(\0162&.flyteidl.core." + "WorkflowExecution.Phase\0222\n\005email\030\002 \001(\0132!" + ".flyteidl.admin.EmailNotificationH\000\022;\n\np" + "ager_duty\030\003 \001(\0132%.flyteidl.admin.PagerDu" + "tyNotificationH\000\0222\n\005slack\030\004 \001(\0132!.flytei" + "dl.admin.SlackNotificationH\000B\006\n\004type\")\n\007" + "UrlBlob\022\013\n\003url\030\001 \001(\t\022\r\n\005bytes\030\002 \001(\003:\002\030\001\"" + "k\n\006Labels\0222\n\006values\030\001 \003(\0132\".flyteidl.adm" + "in.Labels.ValuesEntry\032-\n\013ValuesEntry\022\013\n\003" + "key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"u\n\013Annotati" + "ons\0227\n\006values\030\001 \003(\0132\'.flyteidl.admin.Ann" + "otations.ValuesEntry\032-\n\013ValuesEntry\022\013\n\003k" + "ey\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"3\n\004Envs\022+\n\006v" + "alues\030\001 \003(\0132\033.flyteidl.core.KeyValuePair" + "\"N\n\010AuthRole\022\032\n\022assumable_iam_role\030\001 \001(\t" + "\022\"\n\032kubernetes_service_account\030\002 \001(\t:\002\030\001" + "\"5\n\023RawOutputDataConfig\022\036\n\026output_locati" + "on_prefix\030\001 \001(\t\":\n\tFlyteURLs\022\016\n\006inputs\030\001" + " \001(\t\022\017\n\007outputs\030\002 \001(\t\022\014\n\004deck\030\003 \001(\t*\\\n\020N" + "amedEntityState\022\027\n\023NAMED_ENTITY_ACTIVE\020\000" + "\022\031\n\025NAMED_ENTITY_ARCHIVED\020\001\022\024\n\020SYSTEM_GE" + "NERATED\020\002B=Z;github.com/flyteorg/flyte/f" + "lyteidl/gen/pb-go/flyteidl/adminb\006proto3" ; ::google::protobuf::internal::DescriptorTable descriptor_table_flyteidl_2fadmin_2fcommon_2eproto = { false, InitDefaults_flyteidl_2fadmin_2fcommon_2eproto, descriptor_table_protodef_flyteidl_2fadmin_2fcommon_2eproto, - "flyteidl/admin/common.proto", &assign_descriptors_table_flyteidl_2fadmin_2fcommon_2eproto, 2801, + "flyteidl/admin/common.proto", &assign_descriptors_table_flyteidl_2fadmin_2fcommon_2eproto, 2840, }; void AddDescriptors_flyteidl_2fadmin_2fcommon_2eproto() { @@ -955,6 +958,7 @@ class NamedEntityIdentifier::HasBitSetters { const int NamedEntityIdentifier::kProjectFieldNumber; const int NamedEntityIdentifier::kDomainFieldNumber; const int NamedEntityIdentifier::kNameFieldNumber; +const int NamedEntityIdentifier::kOrgFieldNumber; #endif // !defined(_MSC_VER) || _MSC_VER >= 1900 NamedEntityIdentifier::NamedEntityIdentifier() @@ -978,6 +982,10 @@ NamedEntityIdentifier::NamedEntityIdentifier(const NamedEntityIdentifier& from) if (from.name().size() > 0) { name_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.name_); } + org_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + if (from.org().size() > 0) { + org_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.org_); + } // @@protoc_insertion_point(copy_constructor:flyteidl.admin.NamedEntityIdentifier) } @@ -987,6 +995,7 @@ void NamedEntityIdentifier::SharedCtor() { project_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); domain_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); name_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); } NamedEntityIdentifier::~NamedEntityIdentifier() { @@ -998,6 +1007,7 @@ void NamedEntityIdentifier::SharedDtor() { project_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); domain_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); name_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); } void NamedEntityIdentifier::SetCachedSize(int size) const { @@ -1018,6 +1028,7 @@ void NamedEntityIdentifier::Clear() { project_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); domain_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); name_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); _internal_metadata_.Clear(); } @@ -1082,6 +1093,22 @@ const char* NamedEntityIdentifier::_InternalParse(const char* begin, const char* ptr += size; break; } + // string org = 4; + case 4: { + if (static_cast<::google::protobuf::uint8>(tag) != 34) goto handle_unusual; + ptr = ::google::protobuf::io::ReadSize(ptr, &size); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + ctx->extra_parse_data().SetFieldName("flyteidl.admin.NamedEntityIdentifier.org"); + object = msg->mutable_org(); + if (size > end - ptr + ::google::protobuf::internal::ParseContext::kSlopBytes) { + parser_till_end = ::google::protobuf::internal::GreedyStringParserUTF8; + goto string_till_end; + } + GOOGLE_PROTOBUF_PARSER_ASSERT(::google::protobuf::internal::StringCheckUTF8(ptr, size, ctx)); + ::google::protobuf::internal::InlineGreedyStringParser(object, ptr, size, ctx); + ptr += size; + break; + } default: { handle_unusual: if ((tag & 7) == 4 || tag == 0) { @@ -1161,6 +1188,21 @@ bool NamedEntityIdentifier::MergePartialFromCodedStream( break; } + // string org = 4; + case 4: { + if (static_cast< ::google::protobuf::uint8>(tag) == (34 & 0xFF)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadString( + input, this->mutable_org())); + DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::PARSE, + "flyteidl.admin.NamedEntityIdentifier.org")); + } else { + goto handle_unusual; + } + break; + } + default: { handle_unusual: if (tag == 0) { @@ -1218,6 +1260,16 @@ void NamedEntityIdentifier::SerializeWithCachedSizes( 3, this->name(), output); } + // string org = 4; + if (this->org().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.admin.NamedEntityIdentifier.org"); + ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( + 4, this->org(), output); + } + if (_internal_metadata_.have_unknown_fields()) { ::google::protobuf::internal::WireFormat::SerializeUnknownFields( _internal_metadata_.unknown_fields(), output); @@ -1264,6 +1316,17 @@ ::google::protobuf::uint8* NamedEntityIdentifier::InternalSerializeWithCachedSiz 3, this->name(), target); } + // string org = 4; + if (this->org().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.admin.NamedEntityIdentifier.org"); + target = + ::google::protobuf::internal::WireFormatLite::WriteStringToArray( + 4, this->org(), target); + } + if (_internal_metadata_.have_unknown_fields()) { target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( _internal_metadata_.unknown_fields(), target); @@ -1306,6 +1369,13 @@ size_t NamedEntityIdentifier::ByteSizeLong() const { this->name()); } + // string org = 4; + if (this->org().size() > 0) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::StringSize( + this->org()); + } + int cached_size = ::google::protobuf::internal::ToCachedSize(total_size); SetCachedSize(cached_size); return total_size; @@ -1345,6 +1415,10 @@ void NamedEntityIdentifier::MergeFrom(const NamedEntityIdentifier& from) { name_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.name_); } + if (from.org().size() > 0) { + + org_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.org_); + } } void NamedEntityIdentifier::CopyFrom(const ::google::protobuf::Message& from) { @@ -1378,6 +1452,8 @@ void NamedEntityIdentifier::InternalSwap(NamedEntityIdentifier* other) { GetArenaNoVirtual()); name_.Swap(&other->name_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), GetArenaNoVirtual()); + org_.Swap(&other->org_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), + GetArenaNoVirtual()); } ::google::protobuf::Metadata NamedEntityIdentifier::GetMetadata() const { @@ -2500,6 +2576,7 @@ const int NamedEntityIdentifierListRequest::kLimitFieldNumber; const int NamedEntityIdentifierListRequest::kTokenFieldNumber; const int NamedEntityIdentifierListRequest::kSortByFieldNumber; const int NamedEntityIdentifierListRequest::kFiltersFieldNumber; +const int NamedEntityIdentifierListRequest::kOrgFieldNumber; #endif // !defined(_MSC_VER) || _MSC_VER >= 1900 NamedEntityIdentifierListRequest::NamedEntityIdentifierListRequest() @@ -2527,6 +2604,10 @@ NamedEntityIdentifierListRequest::NamedEntityIdentifierListRequest(const NamedEn if (from.filters().size() > 0) { filters_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.filters_); } + org_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + if (from.org().size() > 0) { + org_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.org_); + } if (from.has_sort_by()) { sort_by_ = new ::flyteidl::admin::Sort(*from.sort_by_); } else { @@ -2543,6 +2624,7 @@ void NamedEntityIdentifierListRequest::SharedCtor() { domain_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); token_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); filters_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); ::memset(&sort_by_, 0, static_cast( reinterpret_cast(&limit_) - reinterpret_cast(&sort_by_)) + sizeof(limit_)); @@ -2558,6 +2640,7 @@ void NamedEntityIdentifierListRequest::SharedDtor() { domain_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); token_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); filters_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); if (this != internal_default_instance()) delete sort_by_; } @@ -2580,6 +2663,7 @@ void NamedEntityIdentifierListRequest::Clear() { domain_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); token_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); filters_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); if (GetArenaNoVirtual() == nullptr && sort_by_ != nullptr) { delete sort_by_; } @@ -2685,6 +2769,22 @@ const char* NamedEntityIdentifierListRequest::_InternalParse(const char* begin, ptr += size; break; } + // string org = 7; + case 7: { + if (static_cast<::google::protobuf::uint8>(tag) != 58) goto handle_unusual; + ptr = ::google::protobuf::io::ReadSize(ptr, &size); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + ctx->extra_parse_data().SetFieldName("flyteidl.admin.NamedEntityIdentifierListRequest.org"); + object = msg->mutable_org(); + if (size > end - ptr + ::google::protobuf::internal::ParseContext::kSlopBytes) { + parser_till_end = ::google::protobuf::internal::GreedyStringParserUTF8; + goto string_till_end; + } + GOOGLE_PROTOBUF_PARSER_ASSERT(::google::protobuf::internal::StringCheckUTF8(ptr, size, ctx)); + ::google::protobuf::internal::InlineGreedyStringParser(object, ptr, size, ctx); + ptr += size; + break; + } default: { handle_unusual: if ((tag & 7) == 4 || tag == 0) { @@ -2803,6 +2903,21 @@ bool NamedEntityIdentifierListRequest::MergePartialFromCodedStream( break; } + // string org = 7; + case 7: { + if (static_cast< ::google::protobuf::uint8>(tag) == (58 & 0xFF)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadString( + input, this->mutable_org())); + DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::PARSE, + "flyteidl.admin.NamedEntityIdentifierListRequest.org")); + } else { + goto handle_unusual; + } + break; + } + default: { handle_unusual: if (tag == 0) { @@ -2881,6 +2996,16 @@ void NamedEntityIdentifierListRequest::SerializeWithCachedSizes( 6, this->filters(), output); } + // string org = 7; + if (this->org().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.admin.NamedEntityIdentifierListRequest.org"); + ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( + 7, this->org(), output); + } + if (_internal_metadata_.have_unknown_fields()) { ::google::protobuf::internal::WireFormat::SerializeUnknownFields( _internal_metadata_.unknown_fields(), output); @@ -2950,6 +3075,17 @@ ::google::protobuf::uint8* NamedEntityIdentifierListRequest::InternalSerializeWi 6, this->filters(), target); } + // string org = 7; + if (this->org().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.admin.NamedEntityIdentifierListRequest.org"); + target = + ::google::protobuf::internal::WireFormatLite::WriteStringToArray( + 7, this->org(), target); + } + if (_internal_metadata_.have_unknown_fields()) { target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( _internal_metadata_.unknown_fields(), target); @@ -2999,6 +3135,13 @@ size_t NamedEntityIdentifierListRequest::ByteSizeLong() const { this->filters()); } + // string org = 7; + if (this->org().size() > 0) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::StringSize( + this->org()); + } + // .flyteidl.admin.Sort sort_by = 5; if (this->has_sort_by()) { total_size += 1 + @@ -3056,6 +3199,10 @@ void NamedEntityIdentifierListRequest::MergeFrom(const NamedEntityIdentifierList filters_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.filters_); } + if (from.org().size() > 0) { + + org_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.org_); + } if (from.has_sort_by()) { mutable_sort_by()->::flyteidl::admin::Sort::MergeFrom(from.sort_by()); } @@ -3097,6 +3244,8 @@ void NamedEntityIdentifierListRequest::InternalSwap(NamedEntityIdentifierListReq GetArenaNoVirtual()); filters_.Swap(&other->filters_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), GetArenaNoVirtual()); + org_.Swap(&other->org_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), + GetArenaNoVirtual()); swap(sort_by_, other->sort_by_); swap(limit_, other->limit_); } @@ -3130,6 +3279,7 @@ const int NamedEntityListRequest::kLimitFieldNumber; const int NamedEntityListRequest::kTokenFieldNumber; const int NamedEntityListRequest::kSortByFieldNumber; const int NamedEntityListRequest::kFiltersFieldNumber; +const int NamedEntityListRequest::kOrgFieldNumber; #endif // !defined(_MSC_VER) || _MSC_VER >= 1900 NamedEntityListRequest::NamedEntityListRequest() @@ -3157,6 +3307,10 @@ NamedEntityListRequest::NamedEntityListRequest(const NamedEntityListRequest& fro if (from.filters().size() > 0) { filters_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.filters_); } + org_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + if (from.org().size() > 0) { + org_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.org_); + } if (from.has_sort_by()) { sort_by_ = new ::flyteidl::admin::Sort(*from.sort_by_); } else { @@ -3175,6 +3329,7 @@ void NamedEntityListRequest::SharedCtor() { domain_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); token_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); filters_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); ::memset(&sort_by_, 0, static_cast( reinterpret_cast(&limit_) - reinterpret_cast(&sort_by_)) + sizeof(limit_)); @@ -3190,6 +3345,7 @@ void NamedEntityListRequest::SharedDtor() { domain_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); token_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); filters_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); if (this != internal_default_instance()) delete sort_by_; } @@ -3212,6 +3368,7 @@ void NamedEntityListRequest::Clear() { domain_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); token_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); filters_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); if (GetArenaNoVirtual() == nullptr && sort_by_ != nullptr) { delete sort_by_; } @@ -3327,6 +3484,22 @@ const char* NamedEntityListRequest::_InternalParse(const char* begin, const char ptr += size; break; } + // string org = 8; + case 8: { + if (static_cast<::google::protobuf::uint8>(tag) != 66) goto handle_unusual; + ptr = ::google::protobuf::io::ReadSize(ptr, &size); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + ctx->extra_parse_data().SetFieldName("flyteidl.admin.NamedEntityListRequest.org"); + object = msg->mutable_org(); + if (size > end - ptr + ::google::protobuf::internal::ParseContext::kSlopBytes) { + parser_till_end = ::google::protobuf::internal::GreedyStringParserUTF8; + goto string_till_end; + } + GOOGLE_PROTOBUF_PARSER_ASSERT(::google::protobuf::internal::StringCheckUTF8(ptr, size, ctx)); + ::google::protobuf::internal::InlineGreedyStringParser(object, ptr, size, ctx); + ptr += size; + break; + } default: { handle_unusual: if ((tag & 7) == 4 || tag == 0) { @@ -3459,6 +3632,21 @@ bool NamedEntityListRequest::MergePartialFromCodedStream( break; } + // string org = 8; + case 8: { + if (static_cast< ::google::protobuf::uint8>(tag) == (66 & 0xFF)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadString( + input, this->mutable_org())); + DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::PARSE, + "flyteidl.admin.NamedEntityListRequest.org")); + } else { + goto handle_unusual; + } + break; + } + default: { handle_unusual: if (tag == 0) { @@ -3543,6 +3731,16 @@ void NamedEntityListRequest::SerializeWithCachedSizes( 7, this->filters(), output); } + // string org = 8; + if (this->org().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.admin.NamedEntityListRequest.org"); + ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( + 8, this->org(), output); + } + if (_internal_metadata_.have_unknown_fields()) { ::google::protobuf::internal::WireFormat::SerializeUnknownFields( _internal_metadata_.unknown_fields(), output); @@ -3618,6 +3816,17 @@ ::google::protobuf::uint8* NamedEntityListRequest::InternalSerializeWithCachedSi 7, this->filters(), target); } + // string org = 8; + if (this->org().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.admin.NamedEntityListRequest.org"); + target = + ::google::protobuf::internal::WireFormatLite::WriteStringToArray( + 8, this->org(), target); + } + if (_internal_metadata_.have_unknown_fields()) { target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( _internal_metadata_.unknown_fields(), target); @@ -3667,6 +3876,13 @@ size_t NamedEntityListRequest::ByteSizeLong() const { this->filters()); } + // string org = 8; + if (this->org().size() > 0) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::StringSize( + this->org()); + } + // .flyteidl.admin.Sort sort_by = 6; if (this->has_sort_by()) { total_size += 1 + @@ -3730,6 +3946,10 @@ void NamedEntityListRequest::MergeFrom(const NamedEntityListRequest& from) { filters_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.filters_); } + if (from.org().size() > 0) { + + org_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.org_); + } if (from.has_sort_by()) { mutable_sort_by()->::flyteidl::admin::Sort::MergeFrom(from.sort_by()); } @@ -3774,6 +3994,8 @@ void NamedEntityListRequest::InternalSwap(NamedEntityListRequest* other) { GetArenaNoVirtual()); filters_.Swap(&other->filters_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), GetArenaNoVirtual()); + org_.Swap(&other->org_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), + GetArenaNoVirtual()); swap(sort_by_, other->sort_by_); swap(resource_type_, other->resource_type_); swap(limit_, other->limit_); diff --git a/flyteidl/gen/pb-cpp/flyteidl/admin/common.pb.h b/flyteidl/gen/pb-cpp/flyteidl/admin/common.pb.h index b2eb1cb4e5..a553cfad4a 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/admin/common.pb.h +++ b/flyteidl/gen/pb-cpp/flyteidl/admin/common.pb.h @@ -353,6 +353,20 @@ class NamedEntityIdentifier final : ::std::string* release_name(); void set_allocated_name(::std::string* name); + // string org = 4; + void clear_org(); + static const int kOrgFieldNumber = 4; + const ::std::string& org() const; + void set_org(const ::std::string& value); + #if LANG_CXX11 + void set_org(::std::string&& value); + #endif + void set_org(const char* value); + void set_org(const char* value, size_t size); + ::std::string* mutable_org(); + ::std::string* release_org(); + void set_allocated_org(::std::string* org); + // @@protoc_insertion_point(class_scope:flyteidl.admin.NamedEntityIdentifier) private: class HasBitSetters; @@ -361,6 +375,7 @@ class NamedEntityIdentifier final : ::google::protobuf::internal::ArenaStringPtr project_; ::google::protobuf::internal::ArenaStringPtr domain_; ::google::protobuf::internal::ArenaStringPtr name_; + ::google::protobuf::internal::ArenaStringPtr org_; mutable ::google::protobuf::internal::CachedSize _cached_size_; friend struct ::TableStruct_flyteidl_2fadmin_2fcommon_2eproto; }; @@ -929,6 +944,20 @@ class NamedEntityIdentifierListRequest final : ::std::string* release_filters(); void set_allocated_filters(::std::string* filters); + // string org = 7; + void clear_org(); + static const int kOrgFieldNumber = 7; + const ::std::string& org() const; + void set_org(const ::std::string& value); + #if LANG_CXX11 + void set_org(::std::string&& value); + #endif + void set_org(const char* value); + void set_org(const char* value, size_t size); + ::std::string* mutable_org(); + ::std::string* release_org(); + void set_allocated_org(::std::string* org); + // .flyteidl.admin.Sort sort_by = 5; bool has_sort_by() const; void clear_sort_by(); @@ -953,6 +982,7 @@ class NamedEntityIdentifierListRequest final : ::google::protobuf::internal::ArenaStringPtr domain_; ::google::protobuf::internal::ArenaStringPtr token_; ::google::protobuf::internal::ArenaStringPtr filters_; + ::google::protobuf::internal::ArenaStringPtr org_; ::flyteidl::admin::Sort* sort_by_; ::google::protobuf::uint32 limit_; mutable ::google::protobuf::internal::CachedSize _cached_size_; @@ -1111,6 +1141,20 @@ class NamedEntityListRequest final : ::std::string* release_filters(); void set_allocated_filters(::std::string* filters); + // string org = 8; + void clear_org(); + static const int kOrgFieldNumber = 8; + const ::std::string& org() const; + void set_org(const ::std::string& value); + #if LANG_CXX11 + void set_org(::std::string&& value); + #endif + void set_org(const char* value); + void set_org(const char* value, size_t size); + ::std::string* mutable_org(); + ::std::string* release_org(); + void set_allocated_org(::std::string* org); + // .flyteidl.admin.Sort sort_by = 6; bool has_sort_by() const; void clear_sort_by(); @@ -1141,6 +1185,7 @@ class NamedEntityListRequest final : ::google::protobuf::internal::ArenaStringPtr domain_; ::google::protobuf::internal::ArenaStringPtr token_; ::google::protobuf::internal::ArenaStringPtr filters_; + ::google::protobuf::internal::ArenaStringPtr org_; ::flyteidl::admin::Sort* sort_by_; int resource_type_; ::google::protobuf::uint32 limit_; @@ -3710,6 +3755,59 @@ inline void NamedEntityIdentifier::set_allocated_name(::std::string* name) { // @@protoc_insertion_point(field_set_allocated:flyteidl.admin.NamedEntityIdentifier.name) } +// string org = 4; +inline void NamedEntityIdentifier::clear_org() { + org_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline const ::std::string& NamedEntityIdentifier::org() const { + // @@protoc_insertion_point(field_get:flyteidl.admin.NamedEntityIdentifier.org) + return org_.GetNoArena(); +} +inline void NamedEntityIdentifier::set_org(const ::std::string& value) { + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); + // @@protoc_insertion_point(field_set:flyteidl.admin.NamedEntityIdentifier.org) +} +#if LANG_CXX11 +inline void NamedEntityIdentifier::set_org(::std::string&& value) { + + org_.SetNoArena( + &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); + // @@protoc_insertion_point(field_set_rvalue:flyteidl.admin.NamedEntityIdentifier.org) +} +#endif +inline void NamedEntityIdentifier::set_org(const char* value) { + GOOGLE_DCHECK(value != nullptr); + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); + // @@protoc_insertion_point(field_set_char:flyteidl.admin.NamedEntityIdentifier.org) +} +inline void NamedEntityIdentifier::set_org(const char* value, size_t size) { + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), + ::std::string(reinterpret_cast(value), size)); + // @@protoc_insertion_point(field_set_pointer:flyteidl.admin.NamedEntityIdentifier.org) +} +inline ::std::string* NamedEntityIdentifier::mutable_org() { + + // @@protoc_insertion_point(field_mutable:flyteidl.admin.NamedEntityIdentifier.org) + return org_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline ::std::string* NamedEntityIdentifier::release_org() { + // @@protoc_insertion_point(field_release:flyteidl.admin.NamedEntityIdentifier.org) + + return org_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline void NamedEntityIdentifier::set_allocated_org(::std::string* org) { + if (org != nullptr) { + + } else { + + } + org_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), org); + // @@protoc_insertion_point(field_set_allocated:flyteidl.admin.NamedEntityIdentifier.org) +} + // ------------------------------------------------------------------- // NamedEntityMetadata @@ -4253,6 +4351,59 @@ inline void NamedEntityIdentifierListRequest::set_allocated_filters(::std::strin // @@protoc_insertion_point(field_set_allocated:flyteidl.admin.NamedEntityIdentifierListRequest.filters) } +// string org = 7; +inline void NamedEntityIdentifierListRequest::clear_org() { + org_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline const ::std::string& NamedEntityIdentifierListRequest::org() const { + // @@protoc_insertion_point(field_get:flyteidl.admin.NamedEntityIdentifierListRequest.org) + return org_.GetNoArena(); +} +inline void NamedEntityIdentifierListRequest::set_org(const ::std::string& value) { + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); + // @@protoc_insertion_point(field_set:flyteidl.admin.NamedEntityIdentifierListRequest.org) +} +#if LANG_CXX11 +inline void NamedEntityIdentifierListRequest::set_org(::std::string&& value) { + + org_.SetNoArena( + &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); + // @@protoc_insertion_point(field_set_rvalue:flyteidl.admin.NamedEntityIdentifierListRequest.org) +} +#endif +inline void NamedEntityIdentifierListRequest::set_org(const char* value) { + GOOGLE_DCHECK(value != nullptr); + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); + // @@protoc_insertion_point(field_set_char:flyteidl.admin.NamedEntityIdentifierListRequest.org) +} +inline void NamedEntityIdentifierListRequest::set_org(const char* value, size_t size) { + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), + ::std::string(reinterpret_cast(value), size)); + // @@protoc_insertion_point(field_set_pointer:flyteidl.admin.NamedEntityIdentifierListRequest.org) +} +inline ::std::string* NamedEntityIdentifierListRequest::mutable_org() { + + // @@protoc_insertion_point(field_mutable:flyteidl.admin.NamedEntityIdentifierListRequest.org) + return org_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline ::std::string* NamedEntityIdentifierListRequest::release_org() { + // @@protoc_insertion_point(field_release:flyteidl.admin.NamedEntityIdentifierListRequest.org) + + return org_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline void NamedEntityIdentifierListRequest::set_allocated_org(::std::string* org) { + if (org != nullptr) { + + } else { + + } + org_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), org); + // @@protoc_insertion_point(field_set_allocated:flyteidl.admin.NamedEntityIdentifierListRequest.org) +} + // ------------------------------------------------------------------- // NamedEntityListRequest @@ -4548,6 +4699,59 @@ inline void NamedEntityListRequest::set_allocated_filters(::std::string* filters // @@protoc_insertion_point(field_set_allocated:flyteidl.admin.NamedEntityListRequest.filters) } +// string org = 8; +inline void NamedEntityListRequest::clear_org() { + org_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline const ::std::string& NamedEntityListRequest::org() const { + // @@protoc_insertion_point(field_get:flyteidl.admin.NamedEntityListRequest.org) + return org_.GetNoArena(); +} +inline void NamedEntityListRequest::set_org(const ::std::string& value) { + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); + // @@protoc_insertion_point(field_set:flyteidl.admin.NamedEntityListRequest.org) +} +#if LANG_CXX11 +inline void NamedEntityListRequest::set_org(::std::string&& value) { + + org_.SetNoArena( + &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); + // @@protoc_insertion_point(field_set_rvalue:flyteidl.admin.NamedEntityListRequest.org) +} +#endif +inline void NamedEntityListRequest::set_org(const char* value) { + GOOGLE_DCHECK(value != nullptr); + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); + // @@protoc_insertion_point(field_set_char:flyteidl.admin.NamedEntityListRequest.org) +} +inline void NamedEntityListRequest::set_org(const char* value, size_t size) { + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), + ::std::string(reinterpret_cast(value), size)); + // @@protoc_insertion_point(field_set_pointer:flyteidl.admin.NamedEntityListRequest.org) +} +inline ::std::string* NamedEntityListRequest::mutable_org() { + + // @@protoc_insertion_point(field_mutable:flyteidl.admin.NamedEntityListRequest.org) + return org_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline ::std::string* NamedEntityListRequest::release_org() { + // @@protoc_insertion_point(field_release:flyteidl.admin.NamedEntityListRequest.org) + + return org_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline void NamedEntityListRequest::set_allocated_org(::std::string* org) { + if (org != nullptr) { + + } else { + + } + org_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), org); + // @@protoc_insertion_point(field_set_allocated:flyteidl.admin.NamedEntityListRequest.org) +} + // ------------------------------------------------------------------- // NamedEntityIdentifierList diff --git a/flyteidl/gen/pb-cpp/flyteidl/admin/execution.pb.cc b/flyteidl/gen/pb-cpp/flyteidl/admin/execution.pb.cc index 6165cc0849..3b146336fe 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/admin/execution.pb.cc +++ b/flyteidl/gen/pb-cpp/flyteidl/admin/execution.pb.cc @@ -561,6 +561,7 @@ const ::google::protobuf::uint32 TableStruct_flyteidl_2fadmin_2fexecution_2eprot PROTOBUF_FIELD_OFFSET(::flyteidl::admin::ExecutionCreateRequest, name_), PROTOBUF_FIELD_OFFSET(::flyteidl::admin::ExecutionCreateRequest, spec_), PROTOBUF_FIELD_OFFSET(::flyteidl::admin::ExecutionCreateRequest, inputs_), + PROTOBUF_FIELD_OFFSET(::flyteidl::admin::ExecutionCreateRequest, org_), ~0u, // no _has_bits_ PROTOBUF_FIELD_OFFSET(::flyteidl::admin::ExecutionRelaunchRequest, _internal_metadata_), ~0u, // no _extensions_ @@ -751,28 +752,28 @@ const ::google::protobuf::uint32 TableStruct_flyteidl_2fadmin_2fexecution_2eprot }; static const ::google::protobuf::internal::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = { { 0, -1, sizeof(::flyteidl::admin::ExecutionCreateRequest)}, - { 10, -1, sizeof(::flyteidl::admin::ExecutionRelaunchRequest)}, - { 18, -1, sizeof(::flyteidl::admin::ExecutionRecoverRequest)}, - { 26, -1, sizeof(::flyteidl::admin::ExecutionCreateResponse)}, - { 32, -1, sizeof(::flyteidl::admin::WorkflowExecutionGetRequest)}, - { 38, -1, sizeof(::flyteidl::admin::Execution)}, - { 46, -1, sizeof(::flyteidl::admin::ExecutionList)}, - { 53, -1, sizeof(::flyteidl::admin::LiteralMapBlob)}, - { 61, -1, sizeof(::flyteidl::admin::AbortMetadata)}, - { 68, -1, sizeof(::flyteidl::admin::ExecutionClosure)}, - { 88, -1, sizeof(::flyteidl::admin::SystemMetadata)}, - { 95, -1, sizeof(::flyteidl::admin::ExecutionMetadata)}, - { 108, -1, sizeof(::flyteidl::admin::NotificationList)}, - { 114, -1, sizeof(::flyteidl::admin::ExecutionSpec)}, - { 137, -1, sizeof(::flyteidl::admin::ExecutionTerminateRequest)}, - { 144, -1, sizeof(::flyteidl::admin::ExecutionTerminateResponse)}, - { 149, -1, sizeof(::flyteidl::admin::WorkflowExecutionGetDataRequest)}, - { 155, -1, sizeof(::flyteidl::admin::WorkflowExecutionGetDataResponse)}, - { 164, -1, sizeof(::flyteidl::admin::ExecutionUpdateRequest)}, - { 171, -1, sizeof(::flyteidl::admin::ExecutionStateChangeDetails)}, - { 179, -1, sizeof(::flyteidl::admin::ExecutionUpdateResponse)}, - { 184, -1, sizeof(::flyteidl::admin::WorkflowExecutionGetMetricsRequest)}, - { 191, -1, sizeof(::flyteidl::admin::WorkflowExecutionGetMetricsResponse)}, + { 11, -1, sizeof(::flyteidl::admin::ExecutionRelaunchRequest)}, + { 19, -1, sizeof(::flyteidl::admin::ExecutionRecoverRequest)}, + { 27, -1, sizeof(::flyteidl::admin::ExecutionCreateResponse)}, + { 33, -1, sizeof(::flyteidl::admin::WorkflowExecutionGetRequest)}, + { 39, -1, sizeof(::flyteidl::admin::Execution)}, + { 47, -1, sizeof(::flyteidl::admin::ExecutionList)}, + { 54, -1, sizeof(::flyteidl::admin::LiteralMapBlob)}, + { 62, -1, sizeof(::flyteidl::admin::AbortMetadata)}, + { 69, -1, sizeof(::flyteidl::admin::ExecutionClosure)}, + { 89, -1, sizeof(::flyteidl::admin::SystemMetadata)}, + { 96, -1, sizeof(::flyteidl::admin::ExecutionMetadata)}, + { 109, -1, sizeof(::flyteidl::admin::NotificationList)}, + { 115, -1, sizeof(::flyteidl::admin::ExecutionSpec)}, + { 138, -1, sizeof(::flyteidl::admin::ExecutionTerminateRequest)}, + { 145, -1, sizeof(::flyteidl::admin::ExecutionTerminateResponse)}, + { 150, -1, sizeof(::flyteidl::admin::WorkflowExecutionGetDataRequest)}, + { 156, -1, sizeof(::flyteidl::admin::WorkflowExecutionGetDataResponse)}, + { 165, -1, sizeof(::flyteidl::admin::ExecutionUpdateRequest)}, + { 172, -1, sizeof(::flyteidl::admin::ExecutionStateChangeDetails)}, + { 180, -1, sizeof(::flyteidl::admin::ExecutionUpdateResponse)}, + { 185, -1, sizeof(::flyteidl::admin::WorkflowExecutionGetMetricsRequest)}, + { 192, -1, sizeof(::flyteidl::admin::WorkflowExecutionGetMetricsResponse)}, }; static ::google::protobuf::Message const * const file_default_instances[] = { @@ -818,119 +819,119 @@ const char descriptor_table_protodef_flyteidl_2fadmin_2fexecution_2eproto[] = "idl/core/security.proto\032\036google/protobuf" "/duration.proto\032\037google/protobuf/timesta" "mp.proto\032\036google/protobuf/wrappers.proto" - "\"\237\001\n\026ExecutionCreateRequest\022\017\n\007project\030\001" + "\"\254\001\n\026ExecutionCreateRequest\022\017\n\007project\030\001" " \001(\t\022\016\n\006domain\030\002 \001(\t\022\014\n\004name\030\003 \001(\t\022+\n\004sp" "ec\030\004 \001(\0132\035.flyteidl.admin.ExecutionSpec\022" ")\n\006inputs\030\005 \001(\0132\031.flyteidl.core.LiteralM" - "ap\"\177\n\030ExecutionRelaunchRequest\0226\n\002id\030\001 \001" - "(\0132*.flyteidl.core.WorkflowExecutionIden" - "tifier\022\014\n\004name\030\003 \001(\t\022\027\n\017overwrite_cache\030" - "\004 \001(\010J\004\010\002\020\003\"\224\001\n\027ExecutionRecoverRequest\022" + "ap\022\013\n\003org\030\006 \001(\t\"\177\n\030ExecutionRelaunchRequ" + "est\0226\n\002id\030\001 \001(\0132*.flyteidl.core.Workflow" + "ExecutionIdentifier\022\014\n\004name\030\003 \001(\t\022\027\n\017ove" + "rwrite_cache\030\004 \001(\010J\004\010\002\020\003\"\224\001\n\027ExecutionRe" + "coverRequest\0226\n\002id\030\001 \001(\0132*.flyteidl.core" + ".WorkflowExecutionIdentifier\022\014\n\004name\030\002 \001" + "(\t\0223\n\010metadata\030\003 \001(\0132!.flyteidl.admin.Ex" + "ecutionMetadata\"Q\n\027ExecutionCreateRespon" + "se\0226\n\002id\030\001 \001(\0132*.flyteidl.core.WorkflowE" + "xecutionIdentifier\"U\n\033WorkflowExecutionG" + "etRequest\0226\n\002id\030\001 \001(\0132*.flyteidl.core.Wo" + "rkflowExecutionIdentifier\"\243\001\n\tExecution\022" "6\n\002id\030\001 \001(\0132*.flyteidl.core.WorkflowExec" - "utionIdentifier\022\014\n\004name\030\002 \001(\t\0223\n\010metadat" - "a\030\003 \001(\0132!.flyteidl.admin.ExecutionMetada" - "ta\"Q\n\027ExecutionCreateResponse\0226\n\002id\030\001 \001(" - "\0132*.flyteidl.core.WorkflowExecutionIdent" - "ifier\"U\n\033WorkflowExecutionGetRequest\0226\n\002" - "id\030\001 \001(\0132*.flyteidl.core.WorkflowExecuti" - "onIdentifier\"\243\001\n\tExecution\0226\n\002id\030\001 \001(\0132*" - ".flyteidl.core.WorkflowExecutionIdentifi" - "er\022+\n\004spec\030\002 \001(\0132\035.flyteidl.admin.Execut" - "ionSpec\0221\n\007closure\030\003 \001(\0132 .flyteidl.admi" - "n.ExecutionClosure\"M\n\rExecutionList\022-\n\ne" - "xecutions\030\001 \003(\0132\031.flyteidl.admin.Executi" - "on\022\r\n\005token\030\002 \001(\t\"X\n\016LiteralMapBlob\022/\n\006v" - "alues\030\001 \001(\0132\031.flyteidl.core.LiteralMapB\002" - "\030\001H\000\022\r\n\003uri\030\002 \001(\tH\000B\006\n\004data\"1\n\rAbortMeta" - "data\022\r\n\005cause\030\001 \001(\t\022\021\n\tprincipal\030\002 \001(\t\"\360" - "\005\n\020ExecutionClosure\0225\n\007outputs\030\001 \001(\0132\036.f" - "lyteidl.admin.LiteralMapBlobB\002\030\001H\000\022.\n\005er" - "ror\030\002 \001(\0132\035.flyteidl.core.ExecutionError" - "H\000\022\031\n\013abort_cause\030\n \001(\tB\002\030\001H\000\0227\n\016abort_m" - "etadata\030\014 \001(\0132\035.flyteidl.admin.AbortMeta" - "dataH\000\0224\n\013output_data\030\r \001(\0132\031.flyteidl.c" - "ore.LiteralMapB\002\030\001H\000\0226\n\017computed_inputs\030" - "\003 \001(\0132\031.flyteidl.core.LiteralMapB\002\030\001\0225\n\005" - "phase\030\004 \001(\0162&.flyteidl.core.WorkflowExec" - "ution.Phase\022.\n\nstarted_at\030\005 \001(\0132\032.google" - ".protobuf.Timestamp\022+\n\010duration\030\006 \001(\0132\031." - "google.protobuf.Duration\022.\n\ncreated_at\030\007" - " \001(\0132\032.google.protobuf.Timestamp\022.\n\nupda" - "ted_at\030\010 \001(\0132\032.google.protobuf.Timestamp" - "\0223\n\rnotifications\030\t \003(\0132\034.flyteidl.admin" - ".Notification\022.\n\013workflow_id\030\013 \001(\0132\031.fly" - "teidl.core.Identifier\022I\n\024state_change_de" - "tails\030\016 \001(\0132+.flyteidl.admin.ExecutionSt" - "ateChangeDetailsB\017\n\routput_result\">\n\016Sys" - "temMetadata\022\031\n\021execution_cluster\030\001 \001(\t\022\021" - "\n\tnamespace\030\002 \001(\t\"\213\004\n\021ExecutionMetadata\022" - "=\n\004mode\030\001 \001(\0162/.flyteidl.admin.Execution" - "Metadata.ExecutionMode\022\021\n\tprincipal\030\002 \001(" - "\t\022\017\n\007nesting\030\003 \001(\r\0220\n\014scheduled_at\030\004 \001(\013" - "2\032.google.protobuf.Timestamp\022E\n\025parent_n" - "ode_execution\030\005 \001(\0132&.flyteidl.core.Node" - "ExecutionIdentifier\022G\n\023reference_executi" - "on\030\020 \001(\0132*.flyteidl.core.WorkflowExecuti" - "onIdentifier\0227\n\017system_metadata\030\021 \001(\0132\036." - "flyteidl.admin.SystemMetadata\022/\n\014artifac" - "t_ids\030\022 \003(\0132\031.flyteidl.core.ArtifactID\"g" - "\n\rExecutionMode\022\n\n\006MANUAL\020\000\022\r\n\tSCHEDULED" - "\020\001\022\n\n\006SYSTEM\020\002\022\014\n\010RELAUNCH\020\003\022\022\n\016CHILD_WO" - "RKFLOW\020\004\022\r\n\tRECOVERED\020\005\"G\n\020NotificationL" - "ist\0223\n\rnotifications\030\001 \003(\0132\034.flyteidl.ad" - "min.Notification\"\262\006\n\rExecutionSpec\022.\n\013la" - "unch_plan\030\001 \001(\0132\031.flyteidl.core.Identifi" - "er\022-\n\006inputs\030\002 \001(\0132\031.flyteidl.core.Liter" - "alMapB\002\030\001\0223\n\010metadata\030\003 \001(\0132!.flyteidl.a" - "dmin.ExecutionMetadata\0229\n\rnotifications\030" - "\005 \001(\0132 .flyteidl.admin.NotificationListH" - "\000\022\025\n\013disable_all\030\006 \001(\010H\000\022&\n\006labels\030\007 \001(\013" - "2\026.flyteidl.admin.Labels\0220\n\013annotations\030" - "\010 \001(\0132\033.flyteidl.admin.Annotations\0228\n\020se" - "curity_context\030\n \001(\0132\036.flyteidl.core.Sec" - "urityContext\022/\n\tauth_role\030\020 \001(\0132\030.flytei" - "dl.admin.AuthRoleB\002\030\001\022;\n\022quality_of_serv" - "ice\030\021 \001(\0132\037.flyteidl.core.QualityOfServi" - "ce\022\027\n\017max_parallelism\030\022 \001(\005\022C\n\026raw_outpu" - "t_data_config\030\023 \001(\0132#.flyteidl.admin.Raw" - "OutputDataConfig\022=\n\022cluster_assignment\030\024" - " \001(\0132!.flyteidl.admin.ClusterAssignment\022" - "1\n\rinterruptible\030\025 \001(\0132\032.google.protobuf" - ".BoolValue\022\027\n\017overwrite_cache\030\026 \001(\010\022\"\n\004e" - "nvs\030\027 \001(\0132\024.flyteidl.admin.Envs\022\014\n\004tags\030" - "\030 \003(\tB\030\n\026notification_overridesJ\004\010\004\020\005\"b\n" - "\031ExecutionTerminateRequest\0226\n\002id\030\001 \001(\0132*" - ".flyteidl.core.WorkflowExecutionIdentifi" - "er\022\r\n\005cause\030\002 \001(\t\"\034\n\032ExecutionTerminateR" - "esponse\"Y\n\037WorkflowExecutionGetDataReque" + "utionIdentifier\022+\n\004spec\030\002 \001(\0132\035.flyteidl" + ".admin.ExecutionSpec\0221\n\007closure\030\003 \001(\0132 ." + "flyteidl.admin.ExecutionClosure\"M\n\rExecu" + "tionList\022-\n\nexecutions\030\001 \003(\0132\031.flyteidl." + "admin.Execution\022\r\n\005token\030\002 \001(\t\"X\n\016Litera" + "lMapBlob\022/\n\006values\030\001 \001(\0132\031.flyteidl.core" + ".LiteralMapB\002\030\001H\000\022\r\n\003uri\030\002 \001(\tH\000B\006\n\004data" + "\"1\n\rAbortMetadata\022\r\n\005cause\030\001 \001(\t\022\021\n\tprin" + "cipal\030\002 \001(\t\"\360\005\n\020ExecutionClosure\0225\n\007outp" + "uts\030\001 \001(\0132\036.flyteidl.admin.LiteralMapBlo" + "bB\002\030\001H\000\022.\n\005error\030\002 \001(\0132\035.flyteidl.core.E" + "xecutionErrorH\000\022\031\n\013abort_cause\030\n \001(\tB\002\030\001" + "H\000\0227\n\016abort_metadata\030\014 \001(\0132\035.flyteidl.ad" + "min.AbortMetadataH\000\0224\n\013output_data\030\r \001(\013" + "2\031.flyteidl.core.LiteralMapB\002\030\001H\000\0226\n\017com" + "puted_inputs\030\003 \001(\0132\031.flyteidl.core.Liter" + "alMapB\002\030\001\0225\n\005phase\030\004 \001(\0162&.flyteidl.core" + ".WorkflowExecution.Phase\022.\n\nstarted_at\030\005" + " \001(\0132\032.google.protobuf.Timestamp\022+\n\010dura" + "tion\030\006 \001(\0132\031.google.protobuf.Duration\022.\n" + "\ncreated_at\030\007 \001(\0132\032.google.protobuf.Time" + "stamp\022.\n\nupdated_at\030\010 \001(\0132\032.google.proto" + "buf.Timestamp\0223\n\rnotifications\030\t \003(\0132\034.f" + "lyteidl.admin.Notification\022.\n\013workflow_i" + "d\030\013 \001(\0132\031.flyteidl.core.Identifier\022I\n\024st" + "ate_change_details\030\016 \001(\0132+.flyteidl.admi" + "n.ExecutionStateChangeDetailsB\017\n\routput_" + "result\">\n\016SystemMetadata\022\031\n\021execution_cl" + "uster\030\001 \001(\t\022\021\n\tnamespace\030\002 \001(\t\"\213\004\n\021Execu" + "tionMetadata\022=\n\004mode\030\001 \001(\0162/.flyteidl.ad" + "min.ExecutionMetadata.ExecutionMode\022\021\n\tp" + "rincipal\030\002 \001(\t\022\017\n\007nesting\030\003 \001(\r\0220\n\014sched" + "uled_at\030\004 \001(\0132\032.google.protobuf.Timestam" + "p\022E\n\025parent_node_execution\030\005 \001(\0132&.flyte" + "idl.core.NodeExecutionIdentifier\022G\n\023refe" + "rence_execution\030\020 \001(\0132*.flyteidl.core.Wo" + "rkflowExecutionIdentifier\0227\n\017system_meta" + "data\030\021 \001(\0132\036.flyteidl.admin.SystemMetada" + "ta\022/\n\014artifact_ids\030\022 \003(\0132\031.flyteidl.core" + ".ArtifactID\"g\n\rExecutionMode\022\n\n\006MANUAL\020\000" + "\022\r\n\tSCHEDULED\020\001\022\n\n\006SYSTEM\020\002\022\014\n\010RELAUNCH\020" + "\003\022\022\n\016CHILD_WORKFLOW\020\004\022\r\n\tRECOVERED\020\005\"G\n\020" + "NotificationList\0223\n\rnotifications\030\001 \003(\0132" + "\034.flyteidl.admin.Notification\"\262\006\n\rExecut" + "ionSpec\022.\n\013launch_plan\030\001 \001(\0132\031.flyteidl." + "core.Identifier\022-\n\006inputs\030\002 \001(\0132\031.flytei" + "dl.core.LiteralMapB\002\030\001\0223\n\010metadata\030\003 \001(\013" + "2!.flyteidl.admin.ExecutionMetadata\0229\n\rn" + "otifications\030\005 \001(\0132 .flyteidl.admin.Noti" + "ficationListH\000\022\025\n\013disable_all\030\006 \001(\010H\000\022&\n" + "\006labels\030\007 \001(\0132\026.flyteidl.admin.Labels\0220\n" + "\013annotations\030\010 \001(\0132\033.flyteidl.admin.Anno" + "tations\0228\n\020security_context\030\n \001(\0132\036.flyt" + "eidl.core.SecurityContext\022/\n\tauth_role\030\020" + " \001(\0132\030.flyteidl.admin.AuthRoleB\002\030\001\022;\n\022qu" + "ality_of_service\030\021 \001(\0132\037.flyteidl.core.Q" + "ualityOfService\022\027\n\017max_parallelism\030\022 \001(\005" + "\022C\n\026raw_output_data_config\030\023 \001(\0132#.flyte" + "idl.admin.RawOutputDataConfig\022=\n\022cluster" + "_assignment\030\024 \001(\0132!.flyteidl.admin.Clust" + "erAssignment\0221\n\rinterruptible\030\025 \001(\0132\032.go" + "ogle.protobuf.BoolValue\022\027\n\017overwrite_cac" + "he\030\026 \001(\010\022\"\n\004envs\030\027 \001(\0132\024.flyteidl.admin." + "Envs\022\014\n\004tags\030\030 \003(\tB\030\n\026notification_overr" + "idesJ\004\010\004\020\005\"b\n\031ExecutionTerminateRequest\022" + "6\n\002id\030\001 \001(\0132*.flyteidl.core.WorkflowExec" + "utionIdentifier\022\r\n\005cause\030\002 \001(\t\"\034\n\032Execut" + "ionTerminateResponse\"Y\n\037WorkflowExecutio" + "nGetDataRequest\0226\n\002id\030\001 \001(\0132*.flyteidl.c" + "ore.WorkflowExecutionIdentifier\"\336\001\n Work" + "flowExecutionGetDataResponse\022,\n\007outputs\030" + "\001 \001(\0132\027.flyteidl.admin.UrlBlobB\002\030\001\022+\n\006in" + "puts\030\002 \001(\0132\027.flyteidl.admin.UrlBlobB\002\030\001\022" + ".\n\013full_inputs\030\003 \001(\0132\031.flyteidl.core.Lit" + "eralMap\022/\n\014full_outputs\030\004 \001(\0132\031.flyteidl" + ".core.LiteralMap\"\177\n\026ExecutionUpdateReque" "st\0226\n\002id\030\001 \001(\0132*.flyteidl.core.WorkflowE" - "xecutionIdentifier\"\336\001\n WorkflowExecution" - "GetDataResponse\022,\n\007outputs\030\001 \001(\0132\027.flyte" - "idl.admin.UrlBlobB\002\030\001\022+\n\006inputs\030\002 \001(\0132\027." - "flyteidl.admin.UrlBlobB\002\030\001\022.\n\013full_input" - "s\030\003 \001(\0132\031.flyteidl.core.LiteralMap\022/\n\014fu" - "ll_outputs\030\004 \001(\0132\031.flyteidl.core.Literal" - "Map\"\177\n\026ExecutionUpdateRequest\0226\n\002id\030\001 \001(" - "\0132*.flyteidl.core.WorkflowExecutionIdent" - "ifier\022-\n\005state\030\002 \001(\0162\036.flyteidl.admin.Ex" - "ecutionState\"\220\001\n\033ExecutionStateChangeDet" - "ails\022-\n\005state\030\001 \001(\0162\036.flyteidl.admin.Exe" - "cutionState\022/\n\013occurred_at\030\002 \001(\0132\032.googl" - "e.protobuf.Timestamp\022\021\n\tprincipal\030\003 \001(\t\"" - "\031\n\027ExecutionUpdateResponse\"k\n\"WorkflowEx" - "ecutionGetMetricsRequest\0226\n\002id\030\001 \001(\0132*.f" - "lyteidl.core.WorkflowExecutionIdentifier" - "\022\r\n\005depth\030\002 \001(\005\"H\n#WorkflowExecutionGetM" - "etricsResponse\022!\n\004span\030\001 \001(\0132\023.flyteidl." - "core.Span*>\n\016ExecutionState\022\024\n\020EXECUTION" - "_ACTIVE\020\000\022\026\n\022EXECUTION_ARCHIVED\020\001B=Z;git" - "hub.com/flyteorg/flyte/flyteidl/gen/pb-g" - "o/flyteidl/adminb\006proto3" + "xecutionIdentifier\022-\n\005state\030\002 \001(\0162\036.flyt" + "eidl.admin.ExecutionState\"\220\001\n\033ExecutionS" + "tateChangeDetails\022-\n\005state\030\001 \001(\0162\036.flyte" + "idl.admin.ExecutionState\022/\n\013occurred_at\030" + "\002 \001(\0132\032.google.protobuf.Timestamp\022\021\n\tpri" + "ncipal\030\003 \001(\t\"\031\n\027ExecutionUpdateResponse\"" + "k\n\"WorkflowExecutionGetMetricsRequest\0226\n" + "\002id\030\001 \001(\0132*.flyteidl.core.WorkflowExecut" + "ionIdentifier\022\r\n\005depth\030\002 \001(\005\"H\n#Workflow" + "ExecutionGetMetricsResponse\022!\n\004span\030\001 \001(" + "\0132\023.flyteidl.core.Span*>\n\016ExecutionState" + "\022\024\n\020EXECUTION_ACTIVE\020\000\022\026\n\022EXECUTION_ARCH" + "IVED\020\001B=Z;github.com/flyteorg/flyte/flyt" + "eidl/gen/pb-go/flyteidl/adminb\006proto3" ; ::google::protobuf::internal::DescriptorTable descriptor_table_flyteidl_2fadmin_2fexecution_2eproto = { false, InitDefaults_flyteidl_2fadmin_2fexecution_2eproto, descriptor_table_protodef_flyteidl_2fadmin_2fexecution_2eproto, - "flyteidl/admin/execution.proto", &assign_descriptors_table_flyteidl_2fadmin_2fexecution_2eproto, 4704, + "flyteidl/admin/execution.proto", &assign_descriptors_table_flyteidl_2fadmin_2fexecution_2eproto, 4717, }; void AddDescriptors_flyteidl_2fadmin_2fexecution_2eproto() { @@ -1033,6 +1034,7 @@ const int ExecutionCreateRequest::kDomainFieldNumber; const int ExecutionCreateRequest::kNameFieldNumber; const int ExecutionCreateRequest::kSpecFieldNumber; const int ExecutionCreateRequest::kInputsFieldNumber; +const int ExecutionCreateRequest::kOrgFieldNumber; #endif // !defined(_MSC_VER) || _MSC_VER >= 1900 ExecutionCreateRequest::ExecutionCreateRequest() @@ -1056,6 +1058,10 @@ ExecutionCreateRequest::ExecutionCreateRequest(const ExecutionCreateRequest& fro if (from.name().size() > 0) { name_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.name_); } + org_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + if (from.org().size() > 0) { + org_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.org_); + } if (from.has_spec()) { spec_ = new ::flyteidl::admin::ExecutionSpec(*from.spec_); } else { @@ -1075,6 +1081,7 @@ void ExecutionCreateRequest::SharedCtor() { project_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); domain_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); name_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); ::memset(&spec_, 0, static_cast( reinterpret_cast(&inputs_) - reinterpret_cast(&spec_)) + sizeof(inputs_)); @@ -1089,6 +1096,7 @@ void ExecutionCreateRequest::SharedDtor() { project_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); domain_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); name_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); if (this != internal_default_instance()) delete spec_; if (this != internal_default_instance()) delete inputs_; } @@ -1111,6 +1119,7 @@ void ExecutionCreateRequest::Clear() { project_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); domain_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); name_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); if (GetArenaNoVirtual() == nullptr && spec_ != nullptr) { delete spec_; } @@ -1209,6 +1218,22 @@ const char* ExecutionCreateRequest::_InternalParse(const char* begin, const char {parser_till_end, object}, ptr - size, ptr)); break; } + // string org = 6; + case 6: { + if (static_cast<::google::protobuf::uint8>(tag) != 50) goto handle_unusual; + ptr = ::google::protobuf::io::ReadSize(ptr, &size); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + ctx->extra_parse_data().SetFieldName("flyteidl.admin.ExecutionCreateRequest.org"); + object = msg->mutable_org(); + if (size > end - ptr + ::google::protobuf::internal::ParseContext::kSlopBytes) { + parser_till_end = ::google::protobuf::internal::GreedyStringParserUTF8; + goto string_till_end; + } + GOOGLE_PROTOBUF_PARSER_ASSERT(::google::protobuf::internal::StringCheckUTF8(ptr, size, ctx)); + ::google::protobuf::internal::InlineGreedyStringParser(object, ptr, size, ctx); + ptr += size; + break; + } default: { handle_unusual: if ((tag & 7) == 4 || tag == 0) { @@ -1310,6 +1335,21 @@ bool ExecutionCreateRequest::MergePartialFromCodedStream( break; } + // string org = 6; + case 6: { + if (static_cast< ::google::protobuf::uint8>(tag) == (50 & 0xFF)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadString( + input, this->mutable_org())); + DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::PARSE, + "flyteidl.admin.ExecutionCreateRequest.org")); + } else { + goto handle_unusual; + } + break; + } + default: { handle_unusual: if (tag == 0) { @@ -1379,6 +1419,16 @@ void ExecutionCreateRequest::SerializeWithCachedSizes( 5, HasBitSetters::inputs(this), output); } + // string org = 6; + if (this->org().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.admin.ExecutionCreateRequest.org"); + ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( + 6, this->org(), output); + } + if (_internal_metadata_.have_unknown_fields()) { ::google::protobuf::internal::WireFormat::SerializeUnknownFields( _internal_metadata_.unknown_fields(), output); @@ -1439,6 +1489,17 @@ ::google::protobuf::uint8* ExecutionCreateRequest::InternalSerializeWithCachedSi 5, HasBitSetters::inputs(this), target); } + // string org = 6; + if (this->org().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.admin.ExecutionCreateRequest.org"); + target = + ::google::protobuf::internal::WireFormatLite::WriteStringToArray( + 6, this->org(), target); + } + if (_internal_metadata_.have_unknown_fields()) { target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( _internal_metadata_.unknown_fields(), target); @@ -1481,6 +1542,13 @@ size_t ExecutionCreateRequest::ByteSizeLong() const { this->name()); } + // string org = 6; + if (this->org().size() > 0) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::StringSize( + this->org()); + } + // .flyteidl.admin.ExecutionSpec spec = 4; if (this->has_spec()) { total_size += 1 + @@ -1534,6 +1602,10 @@ void ExecutionCreateRequest::MergeFrom(const ExecutionCreateRequest& from) { name_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.name_); } + if (from.org().size() > 0) { + + org_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.org_); + } if (from.has_spec()) { mutable_spec()->::flyteidl::admin::ExecutionSpec::MergeFrom(from.spec()); } @@ -1573,6 +1645,8 @@ void ExecutionCreateRequest::InternalSwap(ExecutionCreateRequest* other) { GetArenaNoVirtual()); name_.Swap(&other->name_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), GetArenaNoVirtual()); + org_.Swap(&other->org_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), + GetArenaNoVirtual()); swap(spec_, other->spec_); swap(inputs_, other->inputs_); } diff --git a/flyteidl/gen/pb-cpp/flyteidl/admin/execution.pb.h b/flyteidl/gen/pb-cpp/flyteidl/admin/execution.pb.h index fbe4b1f4f4..e98933aa24 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/admin/execution.pb.h +++ b/flyteidl/gen/pb-cpp/flyteidl/admin/execution.pb.h @@ -348,6 +348,20 @@ class ExecutionCreateRequest final : ::std::string* release_name(); void set_allocated_name(::std::string* name); + // string org = 6; + void clear_org(); + static const int kOrgFieldNumber = 6; + const ::std::string& org() const; + void set_org(const ::std::string& value); + #if LANG_CXX11 + void set_org(::std::string&& value); + #endif + void set_org(const char* value); + void set_org(const char* value, size_t size); + ::std::string* mutable_org(); + ::std::string* release_org(); + void set_allocated_org(::std::string* org); + // .flyteidl.admin.ExecutionSpec spec = 4; bool has_spec() const; void clear_spec(); @@ -374,6 +388,7 @@ class ExecutionCreateRequest final : ::google::protobuf::internal::ArenaStringPtr project_; ::google::protobuf::internal::ArenaStringPtr domain_; ::google::protobuf::internal::ArenaStringPtr name_; + ::google::protobuf::internal::ArenaStringPtr org_; ::flyteidl::admin::ExecutionSpec* spec_; ::flyteidl::core::LiteralMap* inputs_; mutable ::google::protobuf::internal::CachedSize _cached_size_; @@ -3853,6 +3868,59 @@ inline void ExecutionCreateRequest::set_allocated_inputs(::flyteidl::core::Liter // @@protoc_insertion_point(field_set_allocated:flyteidl.admin.ExecutionCreateRequest.inputs) } +// string org = 6; +inline void ExecutionCreateRequest::clear_org() { + org_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline const ::std::string& ExecutionCreateRequest::org() const { + // @@protoc_insertion_point(field_get:flyteidl.admin.ExecutionCreateRequest.org) + return org_.GetNoArena(); +} +inline void ExecutionCreateRequest::set_org(const ::std::string& value) { + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); + // @@protoc_insertion_point(field_set:flyteidl.admin.ExecutionCreateRequest.org) +} +#if LANG_CXX11 +inline void ExecutionCreateRequest::set_org(::std::string&& value) { + + org_.SetNoArena( + &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); + // @@protoc_insertion_point(field_set_rvalue:flyteidl.admin.ExecutionCreateRequest.org) +} +#endif +inline void ExecutionCreateRequest::set_org(const char* value) { + GOOGLE_DCHECK(value != nullptr); + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); + // @@protoc_insertion_point(field_set_char:flyteidl.admin.ExecutionCreateRequest.org) +} +inline void ExecutionCreateRequest::set_org(const char* value, size_t size) { + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), + ::std::string(reinterpret_cast(value), size)); + // @@protoc_insertion_point(field_set_pointer:flyteidl.admin.ExecutionCreateRequest.org) +} +inline ::std::string* ExecutionCreateRequest::mutable_org() { + + // @@protoc_insertion_point(field_mutable:flyteidl.admin.ExecutionCreateRequest.org) + return org_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline ::std::string* ExecutionCreateRequest::release_org() { + // @@protoc_insertion_point(field_release:flyteidl.admin.ExecutionCreateRequest.org) + + return org_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline void ExecutionCreateRequest::set_allocated_org(::std::string* org) { + if (org != nullptr) { + + } else { + + } + org_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), org); + // @@protoc_insertion_point(field_set_allocated:flyteidl.admin.ExecutionCreateRequest.org) +} + // ------------------------------------------------------------------- // ExecutionRelaunchRequest diff --git a/flyteidl/gen/pb-cpp/flyteidl/admin/launch_plan.pb.cc b/flyteidl/gen/pb-cpp/flyteidl/admin/launch_plan.pb.cc index a69ec02fdb..d02760dfd5 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/admin/launch_plan.pb.cc +++ b/flyteidl/gen/pb-cpp/flyteidl/admin/launch_plan.pb.cc @@ -408,6 +408,7 @@ const ::google::protobuf::uint32 TableStruct_flyteidl_2fadmin_2flaunch_5fplan_2e PROTOBUF_FIELD_OFFSET(::flyteidl::admin::ActiveLaunchPlanListRequest, limit_), PROTOBUF_FIELD_OFFSET(::flyteidl::admin::ActiveLaunchPlanListRequest, token_), PROTOBUF_FIELD_OFFSET(::flyteidl::admin::ActiveLaunchPlanListRequest, sort_by_), + PROTOBUF_FIELD_OFFSET(::flyteidl::admin::ActiveLaunchPlanListRequest, org_), }; static const ::google::protobuf::internal::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = { { 0, -1, sizeof(::flyteidl::admin::LaunchPlanCreateRequest)}, @@ -501,18 +502,19 @@ const char descriptor_table_protodef_flyteidl_2fadmin_2flaunch_5fplan_2eproto[] "\001(\0162\037.flyteidl.admin.LaunchPlanState\"\032\n\030" "LaunchPlanUpdateResponse\"L\n\027ActiveLaunch" "PlanRequest\0221\n\002id\030\001 \001(\0132%.flyteidl.admin" - ".NamedEntityIdentifier\"\203\001\n\033ActiveLaunchP" + ".NamedEntityIdentifier\"\220\001\n\033ActiveLaunchP" "lanListRequest\022\017\n\007project\030\001 \001(\t\022\016\n\006domai" "n\030\002 \001(\t\022\r\n\005limit\030\003 \001(\r\022\r\n\005token\030\004 \001(\t\022%\n" - "\007sort_by\030\005 \001(\0132\024.flyteidl.admin.Sort*+\n\017" - "LaunchPlanState\022\014\n\010INACTIVE\020\000\022\n\n\006ACTIVE\020" - "\001B=Z;github.com/flyteorg/flyte/flyteidl/" - "gen/pb-go/flyteidl/adminb\006proto3" + "\007sort_by\030\005 \001(\0132\024.flyteidl.admin.Sort\022\013\n\003" + "org\030\006 \001(\t*+\n\017LaunchPlanState\022\014\n\010INACTIVE" + "\020\000\022\n\n\006ACTIVE\020\001B=Z;github.com/flyteorg/fl" + "yte/flyteidl/gen/pb-go/flyteidl/adminb\006p" + "roto3" ; ::google::protobuf::internal::DescriptorTable descriptor_table_flyteidl_2fadmin_2flaunch_5fplan_2eproto = { false, InitDefaults_flyteidl_2fadmin_2flaunch_5fplan_2eproto, descriptor_table_protodef_flyteidl_2fadmin_2flaunch_5fplan_2eproto, - "flyteidl/admin/launch_plan.proto", &assign_descriptors_table_flyteidl_2fadmin_2flaunch_5fplan_2eproto, 2472, + "flyteidl/admin/launch_plan.proto", &assign_descriptors_table_flyteidl_2fadmin_2flaunch_5fplan_2eproto, 2485, }; void AddDescriptors_flyteidl_2fadmin_2flaunch_5fplan_2eproto() { @@ -5446,6 +5448,7 @@ const int ActiveLaunchPlanListRequest::kDomainFieldNumber; const int ActiveLaunchPlanListRequest::kLimitFieldNumber; const int ActiveLaunchPlanListRequest::kTokenFieldNumber; const int ActiveLaunchPlanListRequest::kSortByFieldNumber; +const int ActiveLaunchPlanListRequest::kOrgFieldNumber; #endif // !defined(_MSC_VER) || _MSC_VER >= 1900 ActiveLaunchPlanListRequest::ActiveLaunchPlanListRequest() @@ -5469,6 +5472,10 @@ ActiveLaunchPlanListRequest::ActiveLaunchPlanListRequest(const ActiveLaunchPlanL if (from.token().size() > 0) { token_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.token_); } + org_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + if (from.org().size() > 0) { + org_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.org_); + } if (from.has_sort_by()) { sort_by_ = new ::flyteidl::admin::Sort(*from.sort_by_); } else { @@ -5484,6 +5491,7 @@ void ActiveLaunchPlanListRequest::SharedCtor() { project_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); domain_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); token_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); ::memset(&sort_by_, 0, static_cast( reinterpret_cast(&limit_) - reinterpret_cast(&sort_by_)) + sizeof(limit_)); @@ -5498,6 +5506,7 @@ void ActiveLaunchPlanListRequest::SharedDtor() { project_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); domain_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); token_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); if (this != internal_default_instance()) delete sort_by_; } @@ -5519,6 +5528,7 @@ void ActiveLaunchPlanListRequest::Clear() { project_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); domain_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); token_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); if (GetArenaNoVirtual() == nullptr && sort_by_ != nullptr) { delete sort_by_; } @@ -5608,6 +5618,22 @@ const char* ActiveLaunchPlanListRequest::_InternalParse(const char* begin, const {parser_till_end, object}, ptr - size, ptr)); break; } + // string org = 6; + case 6: { + if (static_cast<::google::protobuf::uint8>(tag) != 50) goto handle_unusual; + ptr = ::google::protobuf::io::ReadSize(ptr, &size); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + ctx->extra_parse_data().SetFieldName("flyteidl.admin.ActiveLaunchPlanListRequest.org"); + object = msg->mutable_org(); + if (size > end - ptr + ::google::protobuf::internal::ParseContext::kSlopBytes) { + parser_till_end = ::google::protobuf::internal::GreedyStringParserUTF8; + goto string_till_end; + } + GOOGLE_PROTOBUF_PARSER_ASSERT(::google::protobuf::internal::StringCheckUTF8(ptr, size, ctx)); + ::google::protobuf::internal::InlineGreedyStringParser(object, ptr, size, ctx); + ptr += size; + break; + } default: { handle_unusual: if ((tag & 7) == 4 || tag == 0) { @@ -5711,6 +5737,21 @@ bool ActiveLaunchPlanListRequest::MergePartialFromCodedStream( break; } + // string org = 6; + case 6: { + if (static_cast< ::google::protobuf::uint8>(tag) == (50 & 0xFF)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadString( + input, this->mutable_org())); + DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::PARSE, + "flyteidl.admin.ActiveLaunchPlanListRequest.org")); + } else { + goto handle_unusual; + } + break; + } + default: { handle_unusual: if (tag == 0) { @@ -5779,6 +5820,16 @@ void ActiveLaunchPlanListRequest::SerializeWithCachedSizes( 5, HasBitSetters::sort_by(this), output); } + // string org = 6; + if (this->org().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.admin.ActiveLaunchPlanListRequest.org"); + ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( + 6, this->org(), output); + } + if (_internal_metadata_.have_unknown_fields()) { ::google::protobuf::internal::WireFormat::SerializeUnknownFields( _internal_metadata_.unknown_fields(), output); @@ -5837,6 +5888,17 @@ ::google::protobuf::uint8* ActiveLaunchPlanListRequest::InternalSerializeWithCac 5, HasBitSetters::sort_by(this), target); } + // string org = 6; + if (this->org().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.admin.ActiveLaunchPlanListRequest.org"); + target = + ::google::protobuf::internal::WireFormatLite::WriteStringToArray( + 6, this->org(), target); + } + if (_internal_metadata_.have_unknown_fields()) { target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( _internal_metadata_.unknown_fields(), target); @@ -5879,6 +5941,13 @@ size_t ActiveLaunchPlanListRequest::ByteSizeLong() const { this->token()); } + // string org = 6; + if (this->org().size() > 0) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::StringSize( + this->org()); + } + // .flyteidl.admin.Sort sort_by = 5; if (this->has_sort_by()) { total_size += 1 + @@ -5932,6 +6001,10 @@ void ActiveLaunchPlanListRequest::MergeFrom(const ActiveLaunchPlanListRequest& f token_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.token_); } + if (from.org().size() > 0) { + + org_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.org_); + } if (from.has_sort_by()) { mutable_sort_by()->::flyteidl::admin::Sort::MergeFrom(from.sort_by()); } @@ -5971,6 +6044,8 @@ void ActiveLaunchPlanListRequest::InternalSwap(ActiveLaunchPlanListRequest* othe GetArenaNoVirtual()); token_.Swap(&other->token_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), GetArenaNoVirtual()); + org_.Swap(&other->org_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), + GetArenaNoVirtual()); swap(sort_by_, other->sort_by_); swap(limit_, other->limit_); } diff --git a/flyteidl/gen/pb-cpp/flyteidl/admin/launch_plan.pb.h b/flyteidl/gen/pb-cpp/flyteidl/admin/launch_plan.pb.h index 27e0deca98..8334ed7e4a 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/admin/launch_plan.pb.h +++ b/flyteidl/gen/pb-cpp/flyteidl/admin/launch_plan.pb.h @@ -1807,6 +1807,20 @@ class ActiveLaunchPlanListRequest final : ::std::string* release_token(); void set_allocated_token(::std::string* token); + // string org = 6; + void clear_org(); + static const int kOrgFieldNumber = 6; + const ::std::string& org() const; + void set_org(const ::std::string& value); + #if LANG_CXX11 + void set_org(::std::string&& value); + #endif + void set_org(const char* value); + void set_org(const char* value, size_t size); + ::std::string* mutable_org(); + ::std::string* release_org(); + void set_allocated_org(::std::string* org); + // .flyteidl.admin.Sort sort_by = 5; bool has_sort_by() const; void clear_sort_by(); @@ -1830,6 +1844,7 @@ class ActiveLaunchPlanListRequest final : ::google::protobuf::internal::ArenaStringPtr project_; ::google::protobuf::internal::ArenaStringPtr domain_; ::google::protobuf::internal::ArenaStringPtr token_; + ::google::protobuf::internal::ArenaStringPtr org_; ::flyteidl::admin::Sort* sort_by_; ::google::protobuf::uint32 limit_; mutable ::google::protobuf::internal::CachedSize _cached_size_; @@ -3636,6 +3651,59 @@ inline void ActiveLaunchPlanListRequest::set_allocated_sort_by(::flyteidl::admin // @@protoc_insertion_point(field_set_allocated:flyteidl.admin.ActiveLaunchPlanListRequest.sort_by) } +// string org = 6; +inline void ActiveLaunchPlanListRequest::clear_org() { + org_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline const ::std::string& ActiveLaunchPlanListRequest::org() const { + // @@protoc_insertion_point(field_get:flyteidl.admin.ActiveLaunchPlanListRequest.org) + return org_.GetNoArena(); +} +inline void ActiveLaunchPlanListRequest::set_org(const ::std::string& value) { + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); + // @@protoc_insertion_point(field_set:flyteidl.admin.ActiveLaunchPlanListRequest.org) +} +#if LANG_CXX11 +inline void ActiveLaunchPlanListRequest::set_org(::std::string&& value) { + + org_.SetNoArena( + &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); + // @@protoc_insertion_point(field_set_rvalue:flyteidl.admin.ActiveLaunchPlanListRequest.org) +} +#endif +inline void ActiveLaunchPlanListRequest::set_org(const char* value) { + GOOGLE_DCHECK(value != nullptr); + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); + // @@protoc_insertion_point(field_set_char:flyteidl.admin.ActiveLaunchPlanListRequest.org) +} +inline void ActiveLaunchPlanListRequest::set_org(const char* value, size_t size) { + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), + ::std::string(reinterpret_cast(value), size)); + // @@protoc_insertion_point(field_set_pointer:flyteidl.admin.ActiveLaunchPlanListRequest.org) +} +inline ::std::string* ActiveLaunchPlanListRequest::mutable_org() { + + // @@protoc_insertion_point(field_mutable:flyteidl.admin.ActiveLaunchPlanListRequest.org) + return org_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline ::std::string* ActiveLaunchPlanListRequest::release_org() { + // @@protoc_insertion_point(field_release:flyteidl.admin.ActiveLaunchPlanListRequest.org) + + return org_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline void ActiveLaunchPlanListRequest::set_allocated_org(::std::string* org) { + if (org != nullptr) { + + } else { + + } + org_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), org); + // @@protoc_insertion_point(field_set_allocated:flyteidl.admin.ActiveLaunchPlanListRequest.org) +} + #ifdef __GNUC__ #pragma GCC diagnostic pop #endif // __GNUC__ diff --git a/flyteidl/gen/pb-cpp/flyteidl/admin/matchable_resource.pb.cc b/flyteidl/gen/pb-cpp/flyteidl/admin/matchable_resource.pb.cc index b38613ca8a..82edc1a1ec 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/admin/matchable_resource.pb.cc +++ b/flyteidl/gen/pb-cpp/flyteidl/admin/matchable_resource.pb.cc @@ -415,6 +415,7 @@ const ::google::protobuf::uint32 TableStruct_flyteidl_2fadmin_2fmatchable_5freso PROTOBUF_FIELD_OFFSET(::flyteidl::admin::MatchableAttributesConfiguration, project_), PROTOBUF_FIELD_OFFSET(::flyteidl::admin::MatchableAttributesConfiguration, workflow_), PROTOBUF_FIELD_OFFSET(::flyteidl::admin::MatchableAttributesConfiguration, launch_plan_), + PROTOBUF_FIELD_OFFSET(::flyteidl::admin::MatchableAttributesConfiguration, org_), ~0u, // no _has_bits_ PROTOBUF_FIELD_OFFSET(::flyteidl::admin::ListMatchableAttributesRequest, _internal_metadata_), ~0u, // no _extensions_ @@ -440,8 +441,8 @@ static const ::google::protobuf::internal::MigrationSchema schemas[] PROTOBUF_SE { 58, -1, sizeof(::flyteidl::admin::WorkflowExecutionConfig)}, { 71, -1, sizeof(::flyteidl::admin::MatchingAttributes)}, { 85, -1, sizeof(::flyteidl::admin::MatchableAttributesConfiguration)}, - { 95, -1, sizeof(::flyteidl::admin::ListMatchableAttributesRequest)}, - { 101, -1, sizeof(::flyteidl::admin::ListMatchableAttributesResponse)}, + { 96, -1, sizeof(::flyteidl::admin::ListMatchableAttributesRequest)}, + { 102, -1, sizeof(::flyteidl::admin::ListMatchableAttributesResponse)}, }; static ::google::protobuf::Message const * const file_default_instances[] = { @@ -515,29 +516,29 @@ const char descriptor_table_protodef_flyteidl_2fadmin_2fmatchable_5fresource_2ep "sH\000\022L\n\031workflow_execution_config\030\007 \001(\0132\'" ".flyteidl.admin.WorkflowExecutionConfigH" "\000\022\?\n\022cluster_assignment\030\010 \001(\0132!.flyteidl" - ".admin.ClusterAssignmentH\000B\010\n\006target\"\242\001\n" + ".admin.ClusterAssignmentH\000B\010\n\006target\"\257\001\n" " MatchableAttributesConfiguration\0226\n\natt" "ributes\030\001 \001(\0132\".flyteidl.admin.MatchingA" "ttributes\022\016\n\006domain\030\002 \001(\t\022\017\n\007project\030\003 \001" "(\t\022\020\n\010workflow\030\004 \001(\t\022\023\n\013launch_plan\030\005 \001(" - "\t\"Z\n\036ListMatchableAttributesRequest\0228\n\rr" - "esource_type\030\001 \001(\0162!.flyteidl.admin.Matc" - "hableResource\"k\n\037ListMatchableAttributes" - "Response\022H\n\016configurations\030\001 \003(\01320.flyte" - "idl.admin.MatchableAttributesConfigurati" - "on*\340\001\n\021MatchableResource\022\021\n\rTASK_RESOURC" - "E\020\000\022\024\n\020CLUSTER_RESOURCE\020\001\022\023\n\017EXECUTION_Q" - "UEUE\020\002\022\033\n\027EXECUTION_CLUSTER_LABEL\020\003\022$\n Q" - "UALITY_OF_SERVICE_SPECIFICATION\020\004\022\023\n\017PLU" - "GIN_OVERRIDE\020\005\022\035\n\031WORKFLOW_EXECUTION_CON" - "FIG\020\006\022\026\n\022CLUSTER_ASSIGNMENT\020\007B=Z;github." - "com/flyteorg/flyte/flyteidl/gen/pb-go/fl" - "yteidl/adminb\006proto3" + "\t\022\013\n\003org\030\006 \001(\t\"Z\n\036ListMatchableAttribute" + "sRequest\0228\n\rresource_type\030\001 \001(\0162!.flytei" + "dl.admin.MatchableResource\"k\n\037ListMatcha" + "bleAttributesResponse\022H\n\016configurations\030" + "\001 \003(\01320.flyteidl.admin.MatchableAttribut" + "esConfiguration*\340\001\n\021MatchableResource\022\021\n" + "\rTASK_RESOURCE\020\000\022\024\n\020CLUSTER_RESOURCE\020\001\022\023" + "\n\017EXECUTION_QUEUE\020\002\022\033\n\027EXECUTION_CLUSTER" + "_LABEL\020\003\022$\n QUALITY_OF_SERVICE_SPECIFICA" + "TION\020\004\022\023\n\017PLUGIN_OVERRIDE\020\005\022\035\n\031WORKFLOW_" + "EXECUTION_CONFIG\020\006\022\026\n\022CLUSTER_ASSIGNMENT" + "\020\007B=Z;github.com/flyteorg/flyte/flyteidl" + "/gen/pb-go/flyteidl/adminb\006proto3" ; ::google::protobuf::internal::DescriptorTable descriptor_table_flyteidl_2fadmin_2fmatchable_5fresource_2eproto = { false, InitDefaults_flyteidl_2fadmin_2fmatchable_5fresource_2eproto, descriptor_table_protodef_flyteidl_2fadmin_2fmatchable_5fresource_2eproto, - "flyteidl/admin/matchable_resource.proto", &assign_descriptors_table_flyteidl_2fadmin_2fmatchable_5fresource_2eproto, 2620, + "flyteidl/admin/matchable_resource.proto", &assign_descriptors_table_flyteidl_2fadmin_2fmatchable_5fresource_2eproto, 2633, }; void AddDescriptors_flyteidl_2fadmin_2fmatchable_5fresource_2eproto() { @@ -4901,6 +4902,7 @@ const int MatchableAttributesConfiguration::kDomainFieldNumber; const int MatchableAttributesConfiguration::kProjectFieldNumber; const int MatchableAttributesConfiguration::kWorkflowFieldNumber; const int MatchableAttributesConfiguration::kLaunchPlanFieldNumber; +const int MatchableAttributesConfiguration::kOrgFieldNumber; #endif // !defined(_MSC_VER) || _MSC_VER >= 1900 MatchableAttributesConfiguration::MatchableAttributesConfiguration() @@ -4928,6 +4930,10 @@ MatchableAttributesConfiguration::MatchableAttributesConfiguration(const Matchab if (from.launch_plan().size() > 0) { launch_plan_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.launch_plan_); } + org_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + if (from.org().size() > 0) { + org_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.org_); + } if (from.has_attributes()) { attributes_ = new ::flyteidl::admin::MatchingAttributes(*from.attributes_); } else { @@ -4943,6 +4949,7 @@ void MatchableAttributesConfiguration::SharedCtor() { project_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); workflow_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); launch_plan_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); attributes_ = nullptr; } @@ -4956,6 +4963,7 @@ void MatchableAttributesConfiguration::SharedDtor() { project_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); workflow_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); launch_plan_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); if (this != internal_default_instance()) delete attributes_; } @@ -4978,6 +4986,7 @@ void MatchableAttributesConfiguration::Clear() { project_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); workflow_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); launch_plan_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); if (GetArenaNoVirtual() == nullptr && attributes_ != nullptr) { delete attributes_; } @@ -5075,6 +5084,22 @@ const char* MatchableAttributesConfiguration::_InternalParse(const char* begin, ptr += size; break; } + // string org = 6; + case 6: { + if (static_cast<::google::protobuf::uint8>(tag) != 50) goto handle_unusual; + ptr = ::google::protobuf::io::ReadSize(ptr, &size); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + ctx->extra_parse_data().SetFieldName("flyteidl.admin.MatchableAttributesConfiguration.org"); + object = msg->mutable_org(); + if (size > end - ptr + ::google::protobuf::internal::ParseContext::kSlopBytes) { + parser_till_end = ::google::protobuf::internal::GreedyStringParserUTF8; + goto string_till_end; + } + GOOGLE_PROTOBUF_PARSER_ASSERT(::google::protobuf::internal::StringCheckUTF8(ptr, size, ctx)); + ::google::protobuf::internal::InlineGreedyStringParser(object, ptr, size, ctx); + ptr += size; + break; + } default: { handle_unusual: if ((tag & 7) == 4 || tag == 0) { @@ -5180,6 +5205,21 @@ bool MatchableAttributesConfiguration::MergePartialFromCodedStream( break; } + // string org = 6; + case 6: { + if (static_cast< ::google::protobuf::uint8>(tag) == (50 & 0xFF)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadString( + input, this->mutable_org())); + DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::PARSE, + "flyteidl.admin.MatchableAttributesConfiguration.org")); + } else { + goto handle_unusual; + } + break; + } + default: { handle_unusual: if (tag == 0) { @@ -5253,6 +5293,16 @@ void MatchableAttributesConfiguration::SerializeWithCachedSizes( 5, this->launch_plan(), output); } + // string org = 6; + if (this->org().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.admin.MatchableAttributesConfiguration.org"); + ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( + 6, this->org(), output); + } + if (_internal_metadata_.have_unknown_fields()) { ::google::protobuf::internal::WireFormat::SerializeUnknownFields( _internal_metadata_.unknown_fields(), output); @@ -5317,6 +5367,17 @@ ::google::protobuf::uint8* MatchableAttributesConfiguration::InternalSerializeWi 5, this->launch_plan(), target); } + // string org = 6; + if (this->org().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.admin.MatchableAttributesConfiguration.org"); + target = + ::google::protobuf::internal::WireFormatLite::WriteStringToArray( + 6, this->org(), target); + } + if (_internal_metadata_.have_unknown_fields()) { target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( _internal_metadata_.unknown_fields(), target); @@ -5366,6 +5427,13 @@ size_t MatchableAttributesConfiguration::ByteSizeLong() const { this->launch_plan()); } + // string org = 6; + if (this->org().size() > 0) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::StringSize( + this->org()); + } + // .flyteidl.admin.MatchingAttributes attributes = 1; if (this->has_attributes()) { total_size += 1 + @@ -5416,6 +5484,10 @@ void MatchableAttributesConfiguration::MergeFrom(const MatchableAttributesConfig launch_plan_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.launch_plan_); } + if (from.org().size() > 0) { + + org_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.org_); + } if (from.has_attributes()) { mutable_attributes()->::flyteidl::admin::MatchingAttributes::MergeFrom(from.attributes()); } @@ -5454,6 +5526,8 @@ void MatchableAttributesConfiguration::InternalSwap(MatchableAttributesConfigura GetArenaNoVirtual()); launch_plan_.Swap(&other->launch_plan_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), GetArenaNoVirtual()); + org_.Swap(&other->org_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), + GetArenaNoVirtual()); swap(attributes_, other->attributes_); } diff --git a/flyteidl/gen/pb-cpp/flyteidl/admin/matchable_resource.pb.h b/flyteidl/gen/pb-cpp/flyteidl/admin/matchable_resource.pb.h index 12ea29fdf1..1bd845f182 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/admin/matchable_resource.pb.h +++ b/flyteidl/gen/pb-cpp/flyteidl/admin/matchable_resource.pb.h @@ -1707,6 +1707,20 @@ class MatchableAttributesConfiguration final : ::std::string* release_launch_plan(); void set_allocated_launch_plan(::std::string* launch_plan); + // string org = 6; + void clear_org(); + static const int kOrgFieldNumber = 6; + const ::std::string& org() const; + void set_org(const ::std::string& value); + #if LANG_CXX11 + void set_org(::std::string&& value); + #endif + void set_org(const char* value); + void set_org(const char* value, size_t size); + ::std::string* mutable_org(); + ::std::string* release_org(); + void set_allocated_org(::std::string* org); + // .flyteidl.admin.MatchingAttributes attributes = 1; bool has_attributes() const; void clear_attributes(); @@ -1725,6 +1739,7 @@ class MatchableAttributesConfiguration final : ::google::protobuf::internal::ArenaStringPtr project_; ::google::protobuf::internal::ArenaStringPtr workflow_; ::google::protobuf::internal::ArenaStringPtr launch_plan_; + ::google::protobuf::internal::ArenaStringPtr org_; ::flyteidl::admin::MatchingAttributes* attributes_; mutable ::google::protobuf::internal::CachedSize _cached_size_; friend struct ::TableStruct_flyteidl_2fadmin_2fmatchable_5fresource_2eproto; @@ -3568,6 +3583,59 @@ inline void MatchableAttributesConfiguration::set_allocated_launch_plan(::std::s // @@protoc_insertion_point(field_set_allocated:flyteidl.admin.MatchableAttributesConfiguration.launch_plan) } +// string org = 6; +inline void MatchableAttributesConfiguration::clear_org() { + org_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline const ::std::string& MatchableAttributesConfiguration::org() const { + // @@protoc_insertion_point(field_get:flyteidl.admin.MatchableAttributesConfiguration.org) + return org_.GetNoArena(); +} +inline void MatchableAttributesConfiguration::set_org(const ::std::string& value) { + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); + // @@protoc_insertion_point(field_set:flyteidl.admin.MatchableAttributesConfiguration.org) +} +#if LANG_CXX11 +inline void MatchableAttributesConfiguration::set_org(::std::string&& value) { + + org_.SetNoArena( + &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); + // @@protoc_insertion_point(field_set_rvalue:flyteidl.admin.MatchableAttributesConfiguration.org) +} +#endif +inline void MatchableAttributesConfiguration::set_org(const char* value) { + GOOGLE_DCHECK(value != nullptr); + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); + // @@protoc_insertion_point(field_set_char:flyteidl.admin.MatchableAttributesConfiguration.org) +} +inline void MatchableAttributesConfiguration::set_org(const char* value, size_t size) { + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), + ::std::string(reinterpret_cast(value), size)); + // @@protoc_insertion_point(field_set_pointer:flyteidl.admin.MatchableAttributesConfiguration.org) +} +inline ::std::string* MatchableAttributesConfiguration::mutable_org() { + + // @@protoc_insertion_point(field_mutable:flyteidl.admin.MatchableAttributesConfiguration.org) + return org_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline ::std::string* MatchableAttributesConfiguration::release_org() { + // @@protoc_insertion_point(field_release:flyteidl.admin.MatchableAttributesConfiguration.org) + + return org_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline void MatchableAttributesConfiguration::set_allocated_org(::std::string* org) { + if (org != nullptr) { + + } else { + + } + org_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), org); + // @@protoc_insertion_point(field_set_allocated:flyteidl.admin.MatchableAttributesConfiguration.org) +} + // ------------------------------------------------------------------- // ListMatchableAttributesRequest diff --git a/flyteidl/gen/pb-cpp/flyteidl/admin/project.pb.cc b/flyteidl/gen/pb-cpp/flyteidl/admin/project.pb.cc index 979041c005..b283c46bfb 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/admin/project.pb.cc +++ b/flyteidl/gen/pb-cpp/flyteidl/admin/project.pb.cc @@ -188,6 +188,7 @@ const ::google::protobuf::uint32 TableStruct_flyteidl_2fadmin_2fproject_2eproto: PROTOBUF_FIELD_OFFSET(::flyteidl::admin::Project, description_), PROTOBUF_FIELD_OFFSET(::flyteidl::admin::Project, labels_), PROTOBUF_FIELD_OFFSET(::flyteidl::admin::Project, state_), + PROTOBUF_FIELD_OFFSET(::flyteidl::admin::Project, org_), ~0u, // no _has_bits_ PROTOBUF_FIELD_OFFSET(::flyteidl::admin::Projects, _internal_metadata_), ~0u, // no _extensions_ @@ -224,11 +225,11 @@ const ::google::protobuf::uint32 TableStruct_flyteidl_2fadmin_2fproject_2eproto: static const ::google::protobuf::internal::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = { { 0, -1, sizeof(::flyteidl::admin::Domain)}, { 7, -1, sizeof(::flyteidl::admin::Project)}, - { 18, -1, sizeof(::flyteidl::admin::Projects)}, - { 25, -1, sizeof(::flyteidl::admin::ProjectListRequest)}, - { 34, -1, sizeof(::flyteidl::admin::ProjectRegisterRequest)}, - { 40, -1, sizeof(::flyteidl::admin::ProjectRegisterResponse)}, - { 45, -1, sizeof(::flyteidl::admin::ProjectUpdateResponse)}, + { 19, -1, sizeof(::flyteidl::admin::Projects)}, + { 26, -1, sizeof(::flyteidl::admin::ProjectListRequest)}, + { 35, -1, sizeof(::flyteidl::admin::ProjectRegisterRequest)}, + { 41, -1, sizeof(::flyteidl::admin::ProjectRegisterResponse)}, + { 46, -1, sizeof(::flyteidl::admin::ProjectUpdateResponse)}, }; static ::google::protobuf::Message const * const file_default_instances[] = { @@ -250,28 +251,28 @@ ::google::protobuf::internal::AssignDescriptorsTable assign_descriptors_table_fl const char descriptor_table_protodef_flyteidl_2fadmin_2fproject_2eproto[] = "\n\034flyteidl/admin/project.proto\022\016flyteidl" ".admin\032\033flyteidl/admin/common.proto\"\"\n\006D" - "omain\022\n\n\002id\030\001 \001(\t\022\014\n\004name\030\002 \001(\t\"\376\001\n\007Proj" + "omain\022\n\n\002id\030\001 \001(\t\022\014\n\004name\030\002 \001(\t\"\213\002\n\007Proj" "ect\022\n\n\002id\030\001 \001(\t\022\014\n\004name\030\002 \001(\t\022\'\n\007domains" "\030\003 \003(\0132\026.flyteidl.admin.Domain\022\023\n\013descri" "ption\030\004 \001(\t\022&\n\006labels\030\005 \001(\0132\026.flyteidl.a" "dmin.Labels\0223\n\005state\030\006 \001(\0162$.flyteidl.ad" - "min.Project.ProjectState\">\n\014ProjectState" - "\022\n\n\006ACTIVE\020\000\022\014\n\010ARCHIVED\020\001\022\024\n\020SYSTEM_GEN" - "ERATED\020\002\"D\n\010Projects\022)\n\010projects\030\001 \003(\0132\027" - ".flyteidl.admin.Project\022\r\n\005token\030\002 \001(\t\"j" - "\n\022ProjectListRequest\022\r\n\005limit\030\001 \001(\r\022\r\n\005t" - "oken\030\002 \001(\t\022\017\n\007filters\030\003 \001(\t\022%\n\007sort_by\030\004" - " \001(\0132\024.flyteidl.admin.Sort\"B\n\026ProjectReg" - "isterRequest\022(\n\007project\030\001 \001(\0132\027.flyteidl" - ".admin.Project\"\031\n\027ProjectRegisterRespons" - "e\"\027\n\025ProjectUpdateResponseB=Z;github.com" - "/flyteorg/flyte/flyteidl/gen/pb-go/flyte" - "idl/adminb\006proto3" + "min.Project.ProjectState\022\013\n\003org\030\007 \001(\t\">\n" + "\014ProjectState\022\n\n\006ACTIVE\020\000\022\014\n\010ARCHIVED\020\001\022" + "\024\n\020SYSTEM_GENERATED\020\002\"D\n\010Projects\022)\n\010pro" + "jects\030\001 \003(\0132\027.flyteidl.admin.Project\022\r\n\005" + "token\030\002 \001(\t\"j\n\022ProjectListRequest\022\r\n\005lim" + "it\030\001 \001(\r\022\r\n\005token\030\002 \001(\t\022\017\n\007filters\030\003 \001(\t" + "\022%\n\007sort_by\030\004 \001(\0132\024.flyteidl.admin.Sort\"" + "B\n\026ProjectRegisterRequest\022(\n\007project\030\001 \001" + "(\0132\027.flyteidl.admin.Project\"\031\n\027ProjectRe" + "gisterResponse\"\027\n\025ProjectUpdateResponseB" + "=Z;github.com/flyteorg/flyte/flyteidl/ge" + "n/pb-go/flyteidl/adminb\006proto3" ; ::google::protobuf::internal::DescriptorTable descriptor_table_flyteidl_2fadmin_2fproject_2eproto = { false, InitDefaults_flyteidl_2fadmin_2fproject_2eproto, descriptor_table_protodef_flyteidl_2fadmin_2fproject_2eproto, - "flyteidl/admin/project.proto", &assign_descriptors_table_flyteidl_2fadmin_2fproject_2eproto, 737, + "flyteidl/admin/project.proto", &assign_descriptors_table_flyteidl_2fadmin_2fproject_2eproto, 750, }; void AddDescriptors_flyteidl_2fadmin_2fproject_2eproto() { @@ -708,6 +709,7 @@ const int Project::kDomainsFieldNumber; const int Project::kDescriptionFieldNumber; const int Project::kLabelsFieldNumber; const int Project::kStateFieldNumber; +const int Project::kOrgFieldNumber; #endif // !defined(_MSC_VER) || _MSC_VER >= 1900 Project::Project() @@ -732,6 +734,10 @@ Project::Project(const Project& from) if (from.description().size() > 0) { description_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.description_); } + org_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + if (from.org().size() > 0) { + org_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.org_); + } if (from.has_labels()) { labels_ = new ::flyteidl::admin::Labels(*from.labels_); } else { @@ -747,6 +753,7 @@ void Project::SharedCtor() { id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); name_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); description_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); ::memset(&labels_, 0, static_cast( reinterpret_cast(&state_) - reinterpret_cast(&labels_)) + sizeof(state_)); @@ -761,6 +768,7 @@ void Project::SharedDtor() { id_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); name_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); description_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); if (this != internal_default_instance()) delete labels_; } @@ -783,6 +791,7 @@ void Project::Clear() { id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); name_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); description_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); if (GetArenaNoVirtual() == nullptr && labels_ != nullptr) { delete labels_; } @@ -889,6 +898,22 @@ const char* Project::_InternalParse(const char* begin, const char* end, void* ob GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); break; } + // string org = 7; + case 7: { + if (static_cast<::google::protobuf::uint8>(tag) != 58) goto handle_unusual; + ptr = ::google::protobuf::io::ReadSize(ptr, &size); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + ctx->extra_parse_data().SetFieldName("flyteidl.admin.Project.org"); + object = msg->mutable_org(); + if (size > end - ptr + ::google::protobuf::internal::ParseContext::kSlopBytes) { + parser_till_end = ::google::protobuf::internal::GreedyStringParserUTF8; + goto string_till_end; + } + GOOGLE_PROTOBUF_PARSER_ASSERT(::google::protobuf::internal::StringCheckUTF8(ptr, size, ctx)); + ::google::protobuf::internal::InlineGreedyStringParser(object, ptr, size, ctx); + ptr += size; + break; + } default: { handle_unusual: if ((tag & 7) == 4 || tag == 0) { @@ -1004,6 +1029,21 @@ bool Project::MergePartialFromCodedStream( break; } + // string org = 7; + case 7: { + if (static_cast< ::google::protobuf::uint8>(tag) == (58 & 0xFF)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadString( + input, this->mutable_org())); + DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::PARSE, + "flyteidl.admin.Project.org")); + } else { + goto handle_unusual; + } + break; + } + default: { handle_unusual: if (tag == 0) { @@ -1082,6 +1122,16 @@ void Project::SerializeWithCachedSizes( 6, this->state(), output); } + // string org = 7; + if (this->org().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.admin.Project.org"); + ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( + 7, this->org(), output); + } + if (_internal_metadata_.have_unknown_fields()) { ::google::protobuf::internal::WireFormat::SerializeUnknownFields( _internal_metadata_.unknown_fields(), output); @@ -1149,6 +1199,17 @@ ::google::protobuf::uint8* Project::InternalSerializeWithCachedSizesToArray( 6, this->state(), target); } + // string org = 7; + if (this->org().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.admin.Project.org"); + target = + ::google::protobuf::internal::WireFormatLite::WriteStringToArray( + 7, this->org(), target); + } + if (_internal_metadata_.have_unknown_fields()) { target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( _internal_metadata_.unknown_fields(), target); @@ -1202,6 +1263,13 @@ size_t Project::ByteSizeLong() const { this->description()); } + // string org = 7; + if (this->org().size() > 0) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::StringSize( + this->org()); + } + // .flyteidl.admin.Labels labels = 5; if (this->has_labels()) { total_size += 1 + @@ -1255,6 +1323,10 @@ void Project::MergeFrom(const Project& from) { description_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.description_); } + if (from.org().size() > 0) { + + org_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.org_); + } if (from.has_labels()) { mutable_labels()->::flyteidl::admin::Labels::MergeFrom(from.labels()); } @@ -1295,6 +1367,8 @@ void Project::InternalSwap(Project* other) { GetArenaNoVirtual()); description_.Swap(&other->description_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), GetArenaNoVirtual()); + org_.Swap(&other->org_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), + GetArenaNoVirtual()); swap(labels_, other->labels_); swap(state_, other->state_); } diff --git a/flyteidl/gen/pb-cpp/flyteidl/admin/project.pb.h b/flyteidl/gen/pb-cpp/flyteidl/admin/project.pb.h index b1fa7e9e3b..4645e8bf9c 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/admin/project.pb.h +++ b/flyteidl/gen/pb-cpp/flyteidl/admin/project.pb.h @@ -425,6 +425,20 @@ class Project final : ::std::string* release_description(); void set_allocated_description(::std::string* description); + // string org = 7; + void clear_org(); + static const int kOrgFieldNumber = 7; + const ::std::string& org() const; + void set_org(const ::std::string& value); + #if LANG_CXX11 + void set_org(::std::string&& value); + #endif + void set_org(const char* value); + void set_org(const char* value, size_t size); + ::std::string* mutable_org(); + ::std::string* release_org(); + void set_allocated_org(::std::string* org); + // .flyteidl.admin.Labels labels = 5; bool has_labels() const; void clear_labels(); @@ -449,6 +463,7 @@ class Project final : ::google::protobuf::internal::ArenaStringPtr id_; ::google::protobuf::internal::ArenaStringPtr name_; ::google::protobuf::internal::ArenaStringPtr description_; + ::google::protobuf::internal::ArenaStringPtr org_; ::flyteidl::admin::Labels* labels_; int state_; mutable ::google::protobuf::internal::CachedSize _cached_size_; @@ -1433,6 +1448,59 @@ inline void Project::set_state(::flyteidl::admin::Project_ProjectState value) { // @@protoc_insertion_point(field_set:flyteidl.admin.Project.state) } +// string org = 7; +inline void Project::clear_org() { + org_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline const ::std::string& Project::org() const { + // @@protoc_insertion_point(field_get:flyteidl.admin.Project.org) + return org_.GetNoArena(); +} +inline void Project::set_org(const ::std::string& value) { + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); + // @@protoc_insertion_point(field_set:flyteidl.admin.Project.org) +} +#if LANG_CXX11 +inline void Project::set_org(::std::string&& value) { + + org_.SetNoArena( + &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); + // @@protoc_insertion_point(field_set_rvalue:flyteidl.admin.Project.org) +} +#endif +inline void Project::set_org(const char* value) { + GOOGLE_DCHECK(value != nullptr); + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); + // @@protoc_insertion_point(field_set_char:flyteidl.admin.Project.org) +} +inline void Project::set_org(const char* value, size_t size) { + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), + ::std::string(reinterpret_cast(value), size)); + // @@protoc_insertion_point(field_set_pointer:flyteidl.admin.Project.org) +} +inline ::std::string* Project::mutable_org() { + + // @@protoc_insertion_point(field_mutable:flyteidl.admin.Project.org) + return org_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline ::std::string* Project::release_org() { + // @@protoc_insertion_point(field_release:flyteidl.admin.Project.org) + + return org_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline void Project::set_allocated_org(::std::string* org) { + if (org != nullptr) { + + } else { + + } + org_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), org); + // @@protoc_insertion_point(field_set_allocated:flyteidl.admin.Project.org) +} + // ------------------------------------------------------------------- // Projects diff --git a/flyteidl/gen/pb-cpp/flyteidl/admin/project_attributes.pb.cc b/flyteidl/gen/pb-cpp/flyteidl/admin/project_attributes.pb.cc index ad78bb68cf..40a47623d7 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/admin/project_attributes.pb.cc +++ b/flyteidl/gen/pb-cpp/flyteidl/admin/project_attributes.pb.cc @@ -173,6 +173,7 @@ const ::google::protobuf::uint32 TableStruct_flyteidl_2fadmin_2fproject_5fattrib ~0u, // no _weak_field_map_ PROTOBUF_FIELD_OFFSET(::flyteidl::admin::ProjectAttributes, project_), PROTOBUF_FIELD_OFFSET(::flyteidl::admin::ProjectAttributes, matching_attributes_), + PROTOBUF_FIELD_OFFSET(::flyteidl::admin::ProjectAttributes, org_), ~0u, // no _has_bits_ PROTOBUF_FIELD_OFFSET(::flyteidl::admin::ProjectAttributesUpdateRequest, _internal_metadata_), ~0u, // no _extensions_ @@ -191,6 +192,7 @@ const ::google::protobuf::uint32 TableStruct_flyteidl_2fadmin_2fproject_5fattrib ~0u, // no _weak_field_map_ PROTOBUF_FIELD_OFFSET(::flyteidl::admin::ProjectAttributesGetRequest, project_), PROTOBUF_FIELD_OFFSET(::flyteidl::admin::ProjectAttributesGetRequest, resource_type_), + PROTOBUF_FIELD_OFFSET(::flyteidl::admin::ProjectAttributesGetRequest, org_), ~0u, // no _has_bits_ PROTOBUF_FIELD_OFFSET(::flyteidl::admin::ProjectAttributesGetResponse, _internal_metadata_), ~0u, // no _extensions_ @@ -204,6 +206,7 @@ const ::google::protobuf::uint32 TableStruct_flyteidl_2fadmin_2fproject_5fattrib ~0u, // no _weak_field_map_ PROTOBUF_FIELD_OFFSET(::flyteidl::admin::ProjectAttributesDeleteRequest, project_), PROTOBUF_FIELD_OFFSET(::flyteidl::admin::ProjectAttributesDeleteRequest, resource_type_), + PROTOBUF_FIELD_OFFSET(::flyteidl::admin::ProjectAttributesDeleteRequest, org_), ~0u, // no _has_bits_ PROTOBUF_FIELD_OFFSET(::flyteidl::admin::ProjectAttributesDeleteResponse, _internal_metadata_), ~0u, // no _extensions_ @@ -212,12 +215,12 @@ const ::google::protobuf::uint32 TableStruct_flyteidl_2fadmin_2fproject_5fattrib }; static const ::google::protobuf::internal::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = { { 0, -1, sizeof(::flyteidl::admin::ProjectAttributes)}, - { 7, -1, sizeof(::flyteidl::admin::ProjectAttributesUpdateRequest)}, - { 13, -1, sizeof(::flyteidl::admin::ProjectAttributesUpdateResponse)}, - { 18, -1, sizeof(::flyteidl::admin::ProjectAttributesGetRequest)}, - { 25, -1, sizeof(::flyteidl::admin::ProjectAttributesGetResponse)}, - { 31, -1, sizeof(::flyteidl::admin::ProjectAttributesDeleteRequest)}, - { 38, -1, sizeof(::flyteidl::admin::ProjectAttributesDeleteResponse)}, + { 8, -1, sizeof(::flyteidl::admin::ProjectAttributesUpdateRequest)}, + { 14, -1, sizeof(::flyteidl::admin::ProjectAttributesUpdateResponse)}, + { 19, -1, sizeof(::flyteidl::admin::ProjectAttributesGetRequest)}, + { 27, -1, sizeof(::flyteidl::admin::ProjectAttributesGetResponse)}, + { 33, -1, sizeof(::flyteidl::admin::ProjectAttributesDeleteRequest)}, + { 41, -1, sizeof(::flyteidl::admin::ProjectAttributesDeleteResponse)}, }; static ::google::protobuf::Message const * const file_default_instances[] = { @@ -239,28 +242,29 @@ ::google::protobuf::internal::AssignDescriptorsTable assign_descriptors_table_fl const char descriptor_table_protodef_flyteidl_2fadmin_2fproject_5fattributes_2eproto[] = "\n\'flyteidl/admin/project_attributes.prot" "o\022\016flyteidl.admin\032\'flyteidl/admin/matcha" - "ble_resource.proto\"e\n\021ProjectAttributes\022" + "ble_resource.proto\"r\n\021ProjectAttributes\022" "\017\n\007project\030\001 \001(\t\022\?\n\023matching_attributes\030" "\002 \001(\0132\".flyteidl.admin.MatchingAttribute" - "s\"W\n\036ProjectAttributesUpdateRequest\0225\n\na" - "ttributes\030\001 \001(\0132!.flyteidl.admin.Project" - "Attributes\"!\n\037ProjectAttributesUpdateRes" - "ponse\"h\n\033ProjectAttributesGetRequest\022\017\n\007" - "project\030\001 \001(\t\0228\n\rresource_type\030\002 \001(\0162!.f" - "lyteidl.admin.MatchableResource\"U\n\034Proje" - "ctAttributesGetResponse\0225\n\nattributes\030\001 " - "\001(\0132!.flyteidl.admin.ProjectAttributes\"k" - "\n\036ProjectAttributesDeleteRequest\022\017\n\007proj" - "ect\030\001 \001(\t\0228\n\rresource_type\030\002 \001(\0162!.flyte" - "idl.admin.MatchableResource\"!\n\037ProjectAt" - "tributesDeleteResponseB=Z;github.com/fly" - "teorg/flyte/flyteidl/gen/pb-go/flyteidl/" - "adminb\006proto3" + "s\022\013\n\003org\030\003 \001(\t\"W\n\036ProjectAttributesUpdat" + "eRequest\0225\n\nattributes\030\001 \001(\0132!.flyteidl." + "admin.ProjectAttributes\"!\n\037ProjectAttrib" + "utesUpdateResponse\"u\n\033ProjectAttributesG" + "etRequest\022\017\n\007project\030\001 \001(\t\0228\n\rresource_t" + "ype\030\002 \001(\0162!.flyteidl.admin.MatchableReso" + "urce\022\013\n\003org\030\003 \001(\t\"U\n\034ProjectAttributesGe" + "tResponse\0225\n\nattributes\030\001 \001(\0132!.flyteidl" + ".admin.ProjectAttributes\"x\n\036ProjectAttri" + "butesDeleteRequest\022\017\n\007project\030\001 \001(\t\0228\n\rr" + "esource_type\030\002 \001(\0162!.flyteidl.admin.Matc" + "hableResource\022\013\n\003org\030\003 \001(\t\"!\n\037ProjectAtt" + "ributesDeleteResponseB=Z;github.com/flyt" + "eorg/flyte/flyteidl/gen/pb-go/flyteidl/a" + "dminb\006proto3" ; ::google::protobuf::internal::DescriptorTable descriptor_table_flyteidl_2fadmin_2fproject_5fattributes_2eproto = { false, InitDefaults_flyteidl_2fadmin_2fproject_5fattributes_2eproto, descriptor_table_protodef_flyteidl_2fadmin_2fproject_5fattributes_2eproto, - "flyteidl/admin/project_attributes.proto", &assign_descriptors_table_flyteidl_2fadmin_2fproject_5fattributes_2eproto, 733, + "flyteidl/admin/project_attributes.proto", &assign_descriptors_table_flyteidl_2fadmin_2fproject_5fattributes_2eproto, 772, }; void AddDescriptors_flyteidl_2fadmin_2fproject_5fattributes_2eproto() { @@ -300,6 +304,7 @@ void ProjectAttributes::clear_matching_attributes() { #if !defined(_MSC_VER) || _MSC_VER >= 1900 const int ProjectAttributes::kProjectFieldNumber; const int ProjectAttributes::kMatchingAttributesFieldNumber; +const int ProjectAttributes::kOrgFieldNumber; #endif // !defined(_MSC_VER) || _MSC_VER >= 1900 ProjectAttributes::ProjectAttributes() @@ -315,6 +320,10 @@ ProjectAttributes::ProjectAttributes(const ProjectAttributes& from) if (from.project().size() > 0) { project_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.project_); } + org_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + if (from.org().size() > 0) { + org_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.org_); + } if (from.has_matching_attributes()) { matching_attributes_ = new ::flyteidl::admin::MatchingAttributes(*from.matching_attributes_); } else { @@ -327,6 +336,7 @@ void ProjectAttributes::SharedCtor() { ::google::protobuf::internal::InitSCC( &scc_info_ProjectAttributes_flyteidl_2fadmin_2fproject_5fattributes_2eproto.base); project_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); matching_attributes_ = nullptr; } @@ -337,6 +347,7 @@ ProjectAttributes::~ProjectAttributes() { void ProjectAttributes::SharedDtor() { project_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); if (this != internal_default_instance()) delete matching_attributes_; } @@ -356,6 +367,7 @@ void ProjectAttributes::Clear() { (void) cached_has_bits; project_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); if (GetArenaNoVirtual() == nullptr && matching_attributes_ != nullptr) { delete matching_attributes_; } @@ -405,6 +417,22 @@ const char* ProjectAttributes::_InternalParse(const char* begin, const char* end {parser_till_end, object}, ptr - size, ptr)); break; } + // string org = 3; + case 3: { + if (static_cast<::google::protobuf::uint8>(tag) != 26) goto handle_unusual; + ptr = ::google::protobuf::io::ReadSize(ptr, &size); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + ctx->extra_parse_data().SetFieldName("flyteidl.admin.ProjectAttributes.org"); + object = msg->mutable_org(); + if (size > end - ptr + ::google::protobuf::internal::ParseContext::kSlopBytes) { + parser_till_end = ::google::protobuf::internal::GreedyStringParserUTF8; + goto string_till_end; + } + GOOGLE_PROTOBUF_PARSER_ASSERT(::google::protobuf::internal::StringCheckUTF8(ptr, size, ctx)); + ::google::protobuf::internal::InlineGreedyStringParser(object, ptr, size, ctx); + ptr += size; + break; + } default: { handle_unusual: if ((tag & 7) == 4 || tag == 0) { @@ -465,6 +493,21 @@ bool ProjectAttributes::MergePartialFromCodedStream( break; } + // string org = 3; + case 3: { + if (static_cast< ::google::protobuf::uint8>(tag) == (26 & 0xFF)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadString( + input, this->mutable_org())); + DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::PARSE, + "flyteidl.admin.ProjectAttributes.org")); + } else { + goto handle_unusual; + } + break; + } + default: { handle_unusual: if (tag == 0) { @@ -508,6 +551,16 @@ void ProjectAttributes::SerializeWithCachedSizes( 2, HasBitSetters::matching_attributes(this), output); } + // string org = 3; + if (this->org().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.admin.ProjectAttributes.org"); + ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( + 3, this->org(), output); + } + if (_internal_metadata_.have_unknown_fields()) { ::google::protobuf::internal::WireFormat::SerializeUnknownFields( _internal_metadata_.unknown_fields(), output); @@ -539,6 +592,17 @@ ::google::protobuf::uint8* ProjectAttributes::InternalSerializeWithCachedSizesTo 2, HasBitSetters::matching_attributes(this), target); } + // string org = 3; + if (this->org().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.admin.ProjectAttributes.org"); + target = + ::google::protobuf::internal::WireFormatLite::WriteStringToArray( + 3, this->org(), target); + } + if (_internal_metadata_.have_unknown_fields()) { target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( _internal_metadata_.unknown_fields(), target); @@ -567,6 +631,13 @@ size_t ProjectAttributes::ByteSizeLong() const { this->project()); } + // string org = 3; + if (this->org().size() > 0) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::StringSize( + this->org()); + } + // .flyteidl.admin.MatchingAttributes matching_attributes = 2; if (this->has_matching_attributes()) { total_size += 1 + @@ -605,6 +676,10 @@ void ProjectAttributes::MergeFrom(const ProjectAttributes& from) { project_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.project_); } + if (from.org().size() > 0) { + + org_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.org_); + } if (from.has_matching_attributes()) { mutable_matching_attributes()->::flyteidl::admin::MatchingAttributes::MergeFrom(from.matching_attributes()); } @@ -637,6 +712,8 @@ void ProjectAttributes::InternalSwap(ProjectAttributes* other) { _internal_metadata_.Swap(&other->_internal_metadata_); project_.Swap(&other->project_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), GetArenaNoVirtual()); + org_.Swap(&other->org_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), + GetArenaNoVirtual()); swap(matching_attributes_, other->matching_attributes_); } @@ -1153,6 +1230,7 @@ class ProjectAttributesGetRequest::HasBitSetters { #if !defined(_MSC_VER) || _MSC_VER >= 1900 const int ProjectAttributesGetRequest::kProjectFieldNumber; const int ProjectAttributesGetRequest::kResourceTypeFieldNumber; +const int ProjectAttributesGetRequest::kOrgFieldNumber; #endif // !defined(_MSC_VER) || _MSC_VER >= 1900 ProjectAttributesGetRequest::ProjectAttributesGetRequest() @@ -1168,6 +1246,10 @@ ProjectAttributesGetRequest::ProjectAttributesGetRequest(const ProjectAttributes if (from.project().size() > 0) { project_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.project_); } + org_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + if (from.org().size() > 0) { + org_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.org_); + } resource_type_ = from.resource_type_; // @@protoc_insertion_point(copy_constructor:flyteidl.admin.ProjectAttributesGetRequest) } @@ -1176,6 +1258,7 @@ void ProjectAttributesGetRequest::SharedCtor() { ::google::protobuf::internal::InitSCC( &scc_info_ProjectAttributesGetRequest_flyteidl_2fadmin_2fproject_5fattributes_2eproto.base); project_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); resource_type_ = 0; } @@ -1186,6 +1269,7 @@ ProjectAttributesGetRequest::~ProjectAttributesGetRequest() { void ProjectAttributesGetRequest::SharedDtor() { project_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); } void ProjectAttributesGetRequest::SetCachedSize(int size) const { @@ -1204,6 +1288,7 @@ void ProjectAttributesGetRequest::Clear() { (void) cached_has_bits; project_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); resource_type_ = 0; _internal_metadata_.Clear(); } @@ -1245,6 +1330,22 @@ const char* ProjectAttributesGetRequest::_InternalParse(const char* begin, const GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); break; } + // string org = 3; + case 3: { + if (static_cast<::google::protobuf::uint8>(tag) != 26) goto handle_unusual; + ptr = ::google::protobuf::io::ReadSize(ptr, &size); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + ctx->extra_parse_data().SetFieldName("flyteidl.admin.ProjectAttributesGetRequest.org"); + object = msg->mutable_org(); + if (size > end - ptr + ::google::protobuf::internal::ParseContext::kSlopBytes) { + parser_till_end = ::google::protobuf::internal::GreedyStringParserUTF8; + goto string_till_end; + } + GOOGLE_PROTOBUF_PARSER_ASSERT(::google::protobuf::internal::StringCheckUTF8(ptr, size, ctx)); + ::google::protobuf::internal::InlineGreedyStringParser(object, ptr, size, ctx); + ptr += size; + break; + } default: { handle_unusual: if ((tag & 7) == 4 || tag == 0) { @@ -1308,6 +1409,21 @@ bool ProjectAttributesGetRequest::MergePartialFromCodedStream( break; } + // string org = 3; + case 3: { + if (static_cast< ::google::protobuf::uint8>(tag) == (26 & 0xFF)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadString( + input, this->mutable_org())); + DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::PARSE, + "flyteidl.admin.ProjectAttributesGetRequest.org")); + } else { + goto handle_unusual; + } + break; + } + default: { handle_unusual: if (tag == 0) { @@ -1351,6 +1467,16 @@ void ProjectAttributesGetRequest::SerializeWithCachedSizes( 2, this->resource_type(), output); } + // string org = 3; + if (this->org().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.admin.ProjectAttributesGetRequest.org"); + ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( + 3, this->org(), output); + } + if (_internal_metadata_.have_unknown_fields()) { ::google::protobuf::internal::WireFormat::SerializeUnknownFields( _internal_metadata_.unknown_fields(), output); @@ -1381,6 +1507,17 @@ ::google::protobuf::uint8* ProjectAttributesGetRequest::InternalSerializeWithCac 2, this->resource_type(), target); } + // string org = 3; + if (this->org().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.admin.ProjectAttributesGetRequest.org"); + target = + ::google::protobuf::internal::WireFormatLite::WriteStringToArray( + 3, this->org(), target); + } + if (_internal_metadata_.have_unknown_fields()) { target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( _internal_metadata_.unknown_fields(), target); @@ -1409,6 +1546,13 @@ size_t ProjectAttributesGetRequest::ByteSizeLong() const { this->project()); } + // string org = 3; + if (this->org().size() > 0) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::StringSize( + this->org()); + } + // .flyteidl.admin.MatchableResource resource_type = 2; if (this->resource_type() != 0) { total_size += 1 + @@ -1446,6 +1590,10 @@ void ProjectAttributesGetRequest::MergeFrom(const ProjectAttributesGetRequest& f project_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.project_); } + if (from.org().size() > 0) { + + org_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.org_); + } if (from.resource_type() != 0) { set_resource_type(from.resource_type()); } @@ -1478,6 +1626,8 @@ void ProjectAttributesGetRequest::InternalSwap(ProjectAttributesGetRequest* othe _internal_metadata_.Swap(&other->_internal_metadata_); project_.Swap(&other->project_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), GetArenaNoVirtual()); + org_.Swap(&other->org_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), + GetArenaNoVirtual()); swap(resource_type_, other->resource_type_); } @@ -1785,6 +1935,7 @@ class ProjectAttributesDeleteRequest::HasBitSetters { #if !defined(_MSC_VER) || _MSC_VER >= 1900 const int ProjectAttributesDeleteRequest::kProjectFieldNumber; const int ProjectAttributesDeleteRequest::kResourceTypeFieldNumber; +const int ProjectAttributesDeleteRequest::kOrgFieldNumber; #endif // !defined(_MSC_VER) || _MSC_VER >= 1900 ProjectAttributesDeleteRequest::ProjectAttributesDeleteRequest() @@ -1800,6 +1951,10 @@ ProjectAttributesDeleteRequest::ProjectAttributesDeleteRequest(const ProjectAttr if (from.project().size() > 0) { project_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.project_); } + org_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + if (from.org().size() > 0) { + org_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.org_); + } resource_type_ = from.resource_type_; // @@protoc_insertion_point(copy_constructor:flyteidl.admin.ProjectAttributesDeleteRequest) } @@ -1808,6 +1963,7 @@ void ProjectAttributesDeleteRequest::SharedCtor() { ::google::protobuf::internal::InitSCC( &scc_info_ProjectAttributesDeleteRequest_flyteidl_2fadmin_2fproject_5fattributes_2eproto.base); project_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); resource_type_ = 0; } @@ -1818,6 +1974,7 @@ ProjectAttributesDeleteRequest::~ProjectAttributesDeleteRequest() { void ProjectAttributesDeleteRequest::SharedDtor() { project_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); } void ProjectAttributesDeleteRequest::SetCachedSize(int size) const { @@ -1836,6 +1993,7 @@ void ProjectAttributesDeleteRequest::Clear() { (void) cached_has_bits; project_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); resource_type_ = 0; _internal_metadata_.Clear(); } @@ -1877,6 +2035,22 @@ const char* ProjectAttributesDeleteRequest::_InternalParse(const char* begin, co GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); break; } + // string org = 3; + case 3: { + if (static_cast<::google::protobuf::uint8>(tag) != 26) goto handle_unusual; + ptr = ::google::protobuf::io::ReadSize(ptr, &size); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + ctx->extra_parse_data().SetFieldName("flyteidl.admin.ProjectAttributesDeleteRequest.org"); + object = msg->mutable_org(); + if (size > end - ptr + ::google::protobuf::internal::ParseContext::kSlopBytes) { + parser_till_end = ::google::protobuf::internal::GreedyStringParserUTF8; + goto string_till_end; + } + GOOGLE_PROTOBUF_PARSER_ASSERT(::google::protobuf::internal::StringCheckUTF8(ptr, size, ctx)); + ::google::protobuf::internal::InlineGreedyStringParser(object, ptr, size, ctx); + ptr += size; + break; + } default: { handle_unusual: if ((tag & 7) == 4 || tag == 0) { @@ -1940,6 +2114,21 @@ bool ProjectAttributesDeleteRequest::MergePartialFromCodedStream( break; } + // string org = 3; + case 3: { + if (static_cast< ::google::protobuf::uint8>(tag) == (26 & 0xFF)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadString( + input, this->mutable_org())); + DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::PARSE, + "flyteidl.admin.ProjectAttributesDeleteRequest.org")); + } else { + goto handle_unusual; + } + break; + } + default: { handle_unusual: if (tag == 0) { @@ -1983,6 +2172,16 @@ void ProjectAttributesDeleteRequest::SerializeWithCachedSizes( 2, this->resource_type(), output); } + // string org = 3; + if (this->org().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.admin.ProjectAttributesDeleteRequest.org"); + ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( + 3, this->org(), output); + } + if (_internal_metadata_.have_unknown_fields()) { ::google::protobuf::internal::WireFormat::SerializeUnknownFields( _internal_metadata_.unknown_fields(), output); @@ -2013,6 +2212,17 @@ ::google::protobuf::uint8* ProjectAttributesDeleteRequest::InternalSerializeWith 2, this->resource_type(), target); } + // string org = 3; + if (this->org().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.admin.ProjectAttributesDeleteRequest.org"); + target = + ::google::protobuf::internal::WireFormatLite::WriteStringToArray( + 3, this->org(), target); + } + if (_internal_metadata_.have_unknown_fields()) { target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( _internal_metadata_.unknown_fields(), target); @@ -2041,6 +2251,13 @@ size_t ProjectAttributesDeleteRequest::ByteSizeLong() const { this->project()); } + // string org = 3; + if (this->org().size() > 0) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::StringSize( + this->org()); + } + // .flyteidl.admin.MatchableResource resource_type = 2; if (this->resource_type() != 0) { total_size += 1 + @@ -2078,6 +2295,10 @@ void ProjectAttributesDeleteRequest::MergeFrom(const ProjectAttributesDeleteRequ project_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.project_); } + if (from.org().size() > 0) { + + org_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.org_); + } if (from.resource_type() != 0) { set_resource_type(from.resource_type()); } @@ -2110,6 +2331,8 @@ void ProjectAttributesDeleteRequest::InternalSwap(ProjectAttributesDeleteRequest _internal_metadata_.Swap(&other->_internal_metadata_); project_.Swap(&other->project_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), GetArenaNoVirtual()); + org_.Swap(&other->org_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), + GetArenaNoVirtual()); swap(resource_type_, other->resource_type_); } diff --git a/flyteidl/gen/pb-cpp/flyteidl/admin/project_attributes.pb.h b/flyteidl/gen/pb-cpp/flyteidl/admin/project_attributes.pb.h index 3c859a5e4a..af00e25767 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/admin/project_attributes.pb.h +++ b/flyteidl/gen/pb-cpp/flyteidl/admin/project_attributes.pb.h @@ -199,6 +199,20 @@ class ProjectAttributes final : ::std::string* release_project(); void set_allocated_project(::std::string* project); + // string org = 3; + void clear_org(); + static const int kOrgFieldNumber = 3; + const ::std::string& org() const; + void set_org(const ::std::string& value); + #if LANG_CXX11 + void set_org(::std::string&& value); + #endif + void set_org(const char* value); + void set_org(const char* value, size_t size); + ::std::string* mutable_org(); + ::std::string* release_org(); + void set_allocated_org(::std::string* org); + // .flyteidl.admin.MatchingAttributes matching_attributes = 2; bool has_matching_attributes() const; void clear_matching_attributes(); @@ -214,6 +228,7 @@ class ProjectAttributes final : ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; ::google::protobuf::internal::ArenaStringPtr project_; + ::google::protobuf::internal::ArenaStringPtr org_; ::flyteidl::admin::MatchingAttributes* matching_attributes_; mutable ::google::protobuf::internal::CachedSize _cached_size_; friend struct ::TableStruct_flyteidl_2fadmin_2fproject_5fattributes_2eproto; @@ -549,6 +564,20 @@ class ProjectAttributesGetRequest final : ::std::string* release_project(); void set_allocated_project(::std::string* project); + // string org = 3; + void clear_org(); + static const int kOrgFieldNumber = 3; + const ::std::string& org() const; + void set_org(const ::std::string& value); + #if LANG_CXX11 + void set_org(::std::string&& value); + #endif + void set_org(const char* value); + void set_org(const char* value, size_t size); + ::std::string* mutable_org(); + ::std::string* release_org(); + void set_allocated_org(::std::string* org); + // .flyteidl.admin.MatchableResource resource_type = 2; void clear_resource_type(); static const int kResourceTypeFieldNumber = 2; @@ -561,6 +590,7 @@ class ProjectAttributesGetRequest final : ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; ::google::protobuf::internal::ArenaStringPtr project_; + ::google::protobuf::internal::ArenaStringPtr org_; int resource_type_; mutable ::google::protobuf::internal::CachedSize _cached_size_; friend struct ::TableStruct_flyteidl_2fadmin_2fproject_5fattributes_2eproto; @@ -791,6 +821,20 @@ class ProjectAttributesDeleteRequest final : ::std::string* release_project(); void set_allocated_project(::std::string* project); + // string org = 3; + void clear_org(); + static const int kOrgFieldNumber = 3; + const ::std::string& org() const; + void set_org(const ::std::string& value); + #if LANG_CXX11 + void set_org(::std::string&& value); + #endif + void set_org(const char* value); + void set_org(const char* value, size_t size); + ::std::string* mutable_org(); + ::std::string* release_org(); + void set_allocated_org(::std::string* org); + // .flyteidl.admin.MatchableResource resource_type = 2; void clear_resource_type(); static const int kResourceTypeFieldNumber = 2; @@ -803,6 +847,7 @@ class ProjectAttributesDeleteRequest final : ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; ::google::protobuf::internal::ArenaStringPtr project_; + ::google::protobuf::internal::ArenaStringPtr org_; int resource_type_; mutable ::google::protobuf::internal::CachedSize _cached_size_; friend struct ::TableStruct_flyteidl_2fadmin_2fproject_5fattributes_2eproto; @@ -1021,6 +1066,59 @@ inline void ProjectAttributes::set_allocated_matching_attributes(::flyteidl::adm // @@protoc_insertion_point(field_set_allocated:flyteidl.admin.ProjectAttributes.matching_attributes) } +// string org = 3; +inline void ProjectAttributes::clear_org() { + org_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline const ::std::string& ProjectAttributes::org() const { + // @@protoc_insertion_point(field_get:flyteidl.admin.ProjectAttributes.org) + return org_.GetNoArena(); +} +inline void ProjectAttributes::set_org(const ::std::string& value) { + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); + // @@protoc_insertion_point(field_set:flyteidl.admin.ProjectAttributes.org) +} +#if LANG_CXX11 +inline void ProjectAttributes::set_org(::std::string&& value) { + + org_.SetNoArena( + &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); + // @@protoc_insertion_point(field_set_rvalue:flyteidl.admin.ProjectAttributes.org) +} +#endif +inline void ProjectAttributes::set_org(const char* value) { + GOOGLE_DCHECK(value != nullptr); + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); + // @@protoc_insertion_point(field_set_char:flyteidl.admin.ProjectAttributes.org) +} +inline void ProjectAttributes::set_org(const char* value, size_t size) { + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), + ::std::string(reinterpret_cast(value), size)); + // @@protoc_insertion_point(field_set_pointer:flyteidl.admin.ProjectAttributes.org) +} +inline ::std::string* ProjectAttributes::mutable_org() { + + // @@protoc_insertion_point(field_mutable:flyteidl.admin.ProjectAttributes.org) + return org_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline ::std::string* ProjectAttributes::release_org() { + // @@protoc_insertion_point(field_release:flyteidl.admin.ProjectAttributes.org) + + return org_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline void ProjectAttributes::set_allocated_org(::std::string* org) { + if (org != nullptr) { + + } else { + + } + org_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), org); + // @@protoc_insertion_point(field_set_allocated:flyteidl.admin.ProjectAttributes.org) +} + // ------------------------------------------------------------------- // ProjectAttributesUpdateRequest @@ -1151,6 +1249,59 @@ inline void ProjectAttributesGetRequest::set_resource_type(::flyteidl::admin::Ma // @@protoc_insertion_point(field_set:flyteidl.admin.ProjectAttributesGetRequest.resource_type) } +// string org = 3; +inline void ProjectAttributesGetRequest::clear_org() { + org_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline const ::std::string& ProjectAttributesGetRequest::org() const { + // @@protoc_insertion_point(field_get:flyteidl.admin.ProjectAttributesGetRequest.org) + return org_.GetNoArena(); +} +inline void ProjectAttributesGetRequest::set_org(const ::std::string& value) { + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); + // @@protoc_insertion_point(field_set:flyteidl.admin.ProjectAttributesGetRequest.org) +} +#if LANG_CXX11 +inline void ProjectAttributesGetRequest::set_org(::std::string&& value) { + + org_.SetNoArena( + &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); + // @@protoc_insertion_point(field_set_rvalue:flyteidl.admin.ProjectAttributesGetRequest.org) +} +#endif +inline void ProjectAttributesGetRequest::set_org(const char* value) { + GOOGLE_DCHECK(value != nullptr); + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); + // @@protoc_insertion_point(field_set_char:flyteidl.admin.ProjectAttributesGetRequest.org) +} +inline void ProjectAttributesGetRequest::set_org(const char* value, size_t size) { + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), + ::std::string(reinterpret_cast(value), size)); + // @@protoc_insertion_point(field_set_pointer:flyteidl.admin.ProjectAttributesGetRequest.org) +} +inline ::std::string* ProjectAttributesGetRequest::mutable_org() { + + // @@protoc_insertion_point(field_mutable:flyteidl.admin.ProjectAttributesGetRequest.org) + return org_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline ::std::string* ProjectAttributesGetRequest::release_org() { + // @@protoc_insertion_point(field_release:flyteidl.admin.ProjectAttributesGetRequest.org) + + return org_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline void ProjectAttributesGetRequest::set_allocated_org(::std::string* org) { + if (org != nullptr) { + + } else { + + } + org_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), org); + // @@protoc_insertion_point(field_set_allocated:flyteidl.admin.ProjectAttributesGetRequest.org) +} + // ------------------------------------------------------------------- // ProjectAttributesGetResponse @@ -1277,6 +1428,59 @@ inline void ProjectAttributesDeleteRequest::set_resource_type(::flyteidl::admin: // @@protoc_insertion_point(field_set:flyteidl.admin.ProjectAttributesDeleteRequest.resource_type) } +// string org = 3; +inline void ProjectAttributesDeleteRequest::clear_org() { + org_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline const ::std::string& ProjectAttributesDeleteRequest::org() const { + // @@protoc_insertion_point(field_get:flyteidl.admin.ProjectAttributesDeleteRequest.org) + return org_.GetNoArena(); +} +inline void ProjectAttributesDeleteRequest::set_org(const ::std::string& value) { + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); + // @@protoc_insertion_point(field_set:flyteidl.admin.ProjectAttributesDeleteRequest.org) +} +#if LANG_CXX11 +inline void ProjectAttributesDeleteRequest::set_org(::std::string&& value) { + + org_.SetNoArena( + &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); + // @@protoc_insertion_point(field_set_rvalue:flyteidl.admin.ProjectAttributesDeleteRequest.org) +} +#endif +inline void ProjectAttributesDeleteRequest::set_org(const char* value) { + GOOGLE_DCHECK(value != nullptr); + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); + // @@protoc_insertion_point(field_set_char:flyteidl.admin.ProjectAttributesDeleteRequest.org) +} +inline void ProjectAttributesDeleteRequest::set_org(const char* value, size_t size) { + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), + ::std::string(reinterpret_cast(value), size)); + // @@protoc_insertion_point(field_set_pointer:flyteidl.admin.ProjectAttributesDeleteRequest.org) +} +inline ::std::string* ProjectAttributesDeleteRequest::mutable_org() { + + // @@protoc_insertion_point(field_mutable:flyteidl.admin.ProjectAttributesDeleteRequest.org) + return org_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline ::std::string* ProjectAttributesDeleteRequest::release_org() { + // @@protoc_insertion_point(field_release:flyteidl.admin.ProjectAttributesDeleteRequest.org) + + return org_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline void ProjectAttributesDeleteRequest::set_allocated_org(::std::string* org) { + if (org != nullptr) { + + } else { + + } + org_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), org); + // @@protoc_insertion_point(field_set_allocated:flyteidl.admin.ProjectAttributesDeleteRequest.org) +} + // ------------------------------------------------------------------- // ProjectAttributesDeleteResponse diff --git a/flyteidl/gen/pb-cpp/flyteidl/admin/project_domain_attributes.pb.cc b/flyteidl/gen/pb-cpp/flyteidl/admin/project_domain_attributes.pb.cc index 6de4670235..25b576c211 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/admin/project_domain_attributes.pb.cc +++ b/flyteidl/gen/pb-cpp/flyteidl/admin/project_domain_attributes.pb.cc @@ -174,6 +174,7 @@ const ::google::protobuf::uint32 TableStruct_flyteidl_2fadmin_2fproject_5fdomain PROTOBUF_FIELD_OFFSET(::flyteidl::admin::ProjectDomainAttributes, project_), PROTOBUF_FIELD_OFFSET(::flyteidl::admin::ProjectDomainAttributes, domain_), PROTOBUF_FIELD_OFFSET(::flyteidl::admin::ProjectDomainAttributes, matching_attributes_), + PROTOBUF_FIELD_OFFSET(::flyteidl::admin::ProjectDomainAttributes, org_), ~0u, // no _has_bits_ PROTOBUF_FIELD_OFFSET(::flyteidl::admin::ProjectDomainAttributesUpdateRequest, _internal_metadata_), ~0u, // no _extensions_ @@ -193,6 +194,7 @@ const ::google::protobuf::uint32 TableStruct_flyteidl_2fadmin_2fproject_5fdomain PROTOBUF_FIELD_OFFSET(::flyteidl::admin::ProjectDomainAttributesGetRequest, project_), PROTOBUF_FIELD_OFFSET(::flyteidl::admin::ProjectDomainAttributesGetRequest, domain_), PROTOBUF_FIELD_OFFSET(::flyteidl::admin::ProjectDomainAttributesGetRequest, resource_type_), + PROTOBUF_FIELD_OFFSET(::flyteidl::admin::ProjectDomainAttributesGetRequest, org_), ~0u, // no _has_bits_ PROTOBUF_FIELD_OFFSET(::flyteidl::admin::ProjectDomainAttributesGetResponse, _internal_metadata_), ~0u, // no _extensions_ @@ -207,6 +209,7 @@ const ::google::protobuf::uint32 TableStruct_flyteidl_2fadmin_2fproject_5fdomain PROTOBUF_FIELD_OFFSET(::flyteidl::admin::ProjectDomainAttributesDeleteRequest, project_), PROTOBUF_FIELD_OFFSET(::flyteidl::admin::ProjectDomainAttributesDeleteRequest, domain_), PROTOBUF_FIELD_OFFSET(::flyteidl::admin::ProjectDomainAttributesDeleteRequest, resource_type_), + PROTOBUF_FIELD_OFFSET(::flyteidl::admin::ProjectDomainAttributesDeleteRequest, org_), ~0u, // no _has_bits_ PROTOBUF_FIELD_OFFSET(::flyteidl::admin::ProjectDomainAttributesDeleteResponse, _internal_metadata_), ~0u, // no _extensions_ @@ -215,12 +218,12 @@ const ::google::protobuf::uint32 TableStruct_flyteidl_2fadmin_2fproject_5fdomain }; static const ::google::protobuf::internal::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = { { 0, -1, sizeof(::flyteidl::admin::ProjectDomainAttributes)}, - { 8, -1, sizeof(::flyteidl::admin::ProjectDomainAttributesUpdateRequest)}, - { 14, -1, sizeof(::flyteidl::admin::ProjectDomainAttributesUpdateResponse)}, - { 19, -1, sizeof(::flyteidl::admin::ProjectDomainAttributesGetRequest)}, - { 27, -1, sizeof(::flyteidl::admin::ProjectDomainAttributesGetResponse)}, - { 33, -1, sizeof(::flyteidl::admin::ProjectDomainAttributesDeleteRequest)}, - { 41, -1, sizeof(::flyteidl::admin::ProjectDomainAttributesDeleteResponse)}, + { 9, -1, sizeof(::flyteidl::admin::ProjectDomainAttributesUpdateRequest)}, + { 15, -1, sizeof(::flyteidl::admin::ProjectDomainAttributesUpdateResponse)}, + { 20, -1, sizeof(::flyteidl::admin::ProjectDomainAttributesGetRequest)}, + { 29, -1, sizeof(::flyteidl::admin::ProjectDomainAttributesGetResponse)}, + { 35, -1, sizeof(::flyteidl::admin::ProjectDomainAttributesDeleteRequest)}, + { 44, -1, sizeof(::flyteidl::admin::ProjectDomainAttributesDeleteResponse)}, }; static ::google::protobuf::Message const * const file_default_instances[] = { @@ -242,31 +245,32 @@ ::google::protobuf::internal::AssignDescriptorsTable assign_descriptors_table_fl const char descriptor_table_protodef_flyteidl_2fadmin_2fproject_5fdomain_5fattributes_2eproto[] = "\n.flyteidl/admin/project_domain_attribut" "es.proto\022\016flyteidl.admin\032\'flyteidl/admin" - "/matchable_resource.proto\"{\n\027ProjectDoma" - "inAttributes\022\017\n\007project\030\001 \001(\t\022\016\n\006domain\030" - "\002 \001(\t\022\?\n\023matching_attributes\030\003 \001(\0132\".fly" - "teidl.admin.MatchingAttributes\"c\n$Projec" - "tDomainAttributesUpdateRequest\022;\n\nattrib" - "utes\030\001 \001(\0132\'.flyteidl.admin.ProjectDomai" - "nAttributes\"\'\n%ProjectDomainAttributesUp" - "dateResponse\"~\n!ProjectDomainAttributesG" - "etRequest\022\017\n\007project\030\001 \001(\t\022\016\n\006domain\030\002 \001" - "(\t\0228\n\rresource_type\030\003 \001(\0162!.flyteidl.adm" - "in.MatchableResource\"a\n\"ProjectDomainAtt" - "ributesGetResponse\022;\n\nattributes\030\001 \001(\0132\'" - ".flyteidl.admin.ProjectDomainAttributes\"" - "\201\001\n$ProjectDomainAttributesDeleteRequest" - "\022\017\n\007project\030\001 \001(\t\022\016\n\006domain\030\002 \001(\t\0228\n\rres" - "ource_type\030\003 \001(\0162!.flyteidl.admin.Matcha" - "bleResource\"\'\n%ProjectDomainAttributesDe" - "leteResponseB=Z;github.com/flyteorg/flyt" - "e/flyteidl/gen/pb-go/flyteidl/adminb\006pro" - "to3" + "/matchable_resource.proto\"\210\001\n\027ProjectDom" + "ainAttributes\022\017\n\007project\030\001 \001(\t\022\016\n\006domain" + "\030\002 \001(\t\022\?\n\023matching_attributes\030\003 \001(\0132\".fl" + "yteidl.admin.MatchingAttributes\022\013\n\003org\030\004" + " \001(\t\"c\n$ProjectDomainAttributesUpdateReq" + "uest\022;\n\nattributes\030\001 \001(\0132\'.flyteidl.admi" + "n.ProjectDomainAttributes\"\'\n%ProjectDoma" + "inAttributesUpdateResponse\"\213\001\n!ProjectDo" + "mainAttributesGetRequest\022\017\n\007project\030\001 \001(" + "\t\022\016\n\006domain\030\002 \001(\t\0228\n\rresource_type\030\003 \001(\016" + "2!.flyteidl.admin.MatchableResource\022\013\n\003o" + "rg\030\004 \001(\t\"a\n\"ProjectDomainAttributesGetRe" + "sponse\022;\n\nattributes\030\001 \001(\0132\'.flyteidl.ad" + "min.ProjectDomainAttributes\"\216\001\n$ProjectD" + "omainAttributesDeleteRequest\022\017\n\007project\030" + "\001 \001(\t\022\016\n\006domain\030\002 \001(\t\0228\n\rresource_type\030\003" + " \001(\0162!.flyteidl.admin.MatchableResource\022" + "\013\n\003org\030\004 \001(\t\"\'\n%ProjectDomainAttributesD" + "eleteResponseB=Z;github.com/flyteorg/fly" + "te/flyteidl/gen/pb-go/flyteidl/adminb\006pr" + "oto3" ; ::google::protobuf::internal::DescriptorTable descriptor_table_flyteidl_2fadmin_2fproject_5fdomain_5fattributes_2eproto = { false, InitDefaults_flyteidl_2fadmin_2fproject_5fdomain_5fattributes_2eproto, descriptor_table_protodef_flyteidl_2fadmin_2fproject_5fdomain_5fattributes_2eproto, - "flyteidl/admin/project_domain_attributes.proto", &assign_descriptors_table_flyteidl_2fadmin_2fproject_5fdomain_5fattributes_2eproto, 843, + "flyteidl/admin/project_domain_attributes.proto", &assign_descriptors_table_flyteidl_2fadmin_2fproject_5fdomain_5fattributes_2eproto, 884, }; void AddDescriptors_flyteidl_2fadmin_2fproject_5fdomain_5fattributes_2eproto() { @@ -307,6 +311,7 @@ void ProjectDomainAttributes::clear_matching_attributes() { const int ProjectDomainAttributes::kProjectFieldNumber; const int ProjectDomainAttributes::kDomainFieldNumber; const int ProjectDomainAttributes::kMatchingAttributesFieldNumber; +const int ProjectDomainAttributes::kOrgFieldNumber; #endif // !defined(_MSC_VER) || _MSC_VER >= 1900 ProjectDomainAttributes::ProjectDomainAttributes() @@ -326,6 +331,10 @@ ProjectDomainAttributes::ProjectDomainAttributes(const ProjectDomainAttributes& if (from.domain().size() > 0) { domain_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.domain_); } + org_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + if (from.org().size() > 0) { + org_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.org_); + } if (from.has_matching_attributes()) { matching_attributes_ = new ::flyteidl::admin::MatchingAttributes(*from.matching_attributes_); } else { @@ -339,6 +348,7 @@ void ProjectDomainAttributes::SharedCtor() { &scc_info_ProjectDomainAttributes_flyteidl_2fadmin_2fproject_5fdomain_5fattributes_2eproto.base); project_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); domain_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); matching_attributes_ = nullptr; } @@ -350,6 +360,7 @@ ProjectDomainAttributes::~ProjectDomainAttributes() { void ProjectDomainAttributes::SharedDtor() { project_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); domain_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); if (this != internal_default_instance()) delete matching_attributes_; } @@ -370,6 +381,7 @@ void ProjectDomainAttributes::Clear() { project_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); domain_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); if (GetArenaNoVirtual() == nullptr && matching_attributes_ != nullptr) { delete matching_attributes_; } @@ -435,6 +447,22 @@ const char* ProjectDomainAttributes::_InternalParse(const char* begin, const cha {parser_till_end, object}, ptr - size, ptr)); break; } + // string org = 4; + case 4: { + if (static_cast<::google::protobuf::uint8>(tag) != 34) goto handle_unusual; + ptr = ::google::protobuf::io::ReadSize(ptr, &size); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + ctx->extra_parse_data().SetFieldName("flyteidl.admin.ProjectDomainAttributes.org"); + object = msg->mutable_org(); + if (size > end - ptr + ::google::protobuf::internal::ParseContext::kSlopBytes) { + parser_till_end = ::google::protobuf::internal::GreedyStringParserUTF8; + goto string_till_end; + } + GOOGLE_PROTOBUF_PARSER_ASSERT(::google::protobuf::internal::StringCheckUTF8(ptr, size, ctx)); + ::google::protobuf::internal::InlineGreedyStringParser(object, ptr, size, ctx); + ptr += size; + break; + } default: { handle_unusual: if ((tag & 7) == 4 || tag == 0) { @@ -510,6 +538,21 @@ bool ProjectDomainAttributes::MergePartialFromCodedStream( break; } + // string org = 4; + case 4: { + if (static_cast< ::google::protobuf::uint8>(tag) == (34 & 0xFF)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadString( + input, this->mutable_org())); + DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::PARSE, + "flyteidl.admin.ProjectDomainAttributes.org")); + } else { + goto handle_unusual; + } + break; + } + default: { handle_unusual: if (tag == 0) { @@ -563,6 +606,16 @@ void ProjectDomainAttributes::SerializeWithCachedSizes( 3, HasBitSetters::matching_attributes(this), output); } + // string org = 4; + if (this->org().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.admin.ProjectDomainAttributes.org"); + ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( + 4, this->org(), output); + } + if (_internal_metadata_.have_unknown_fields()) { ::google::protobuf::internal::WireFormat::SerializeUnknownFields( _internal_metadata_.unknown_fields(), output); @@ -605,6 +658,17 @@ ::google::protobuf::uint8* ProjectDomainAttributes::InternalSerializeWithCachedS 3, HasBitSetters::matching_attributes(this), target); } + // string org = 4; + if (this->org().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.admin.ProjectDomainAttributes.org"); + target = + ::google::protobuf::internal::WireFormatLite::WriteStringToArray( + 4, this->org(), target); + } + if (_internal_metadata_.have_unknown_fields()) { target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( _internal_metadata_.unknown_fields(), target); @@ -640,6 +704,13 @@ size_t ProjectDomainAttributes::ByteSizeLong() const { this->domain()); } + // string org = 4; + if (this->org().size() > 0) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::StringSize( + this->org()); + } + // .flyteidl.admin.MatchingAttributes matching_attributes = 3; if (this->has_matching_attributes()) { total_size += 1 + @@ -682,6 +753,10 @@ void ProjectDomainAttributes::MergeFrom(const ProjectDomainAttributes& from) { domain_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.domain_); } + if (from.org().size() > 0) { + + org_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.org_); + } if (from.has_matching_attributes()) { mutable_matching_attributes()->::flyteidl::admin::MatchingAttributes::MergeFrom(from.matching_attributes()); } @@ -716,6 +791,8 @@ void ProjectDomainAttributes::InternalSwap(ProjectDomainAttributes* other) { GetArenaNoVirtual()); domain_.Swap(&other->domain_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), GetArenaNoVirtual()); + org_.Swap(&other->org_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), + GetArenaNoVirtual()); swap(matching_attributes_, other->matching_attributes_); } @@ -1233,6 +1310,7 @@ class ProjectDomainAttributesGetRequest::HasBitSetters { const int ProjectDomainAttributesGetRequest::kProjectFieldNumber; const int ProjectDomainAttributesGetRequest::kDomainFieldNumber; const int ProjectDomainAttributesGetRequest::kResourceTypeFieldNumber; +const int ProjectDomainAttributesGetRequest::kOrgFieldNumber; #endif // !defined(_MSC_VER) || _MSC_VER >= 1900 ProjectDomainAttributesGetRequest::ProjectDomainAttributesGetRequest() @@ -1252,6 +1330,10 @@ ProjectDomainAttributesGetRequest::ProjectDomainAttributesGetRequest(const Proje if (from.domain().size() > 0) { domain_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.domain_); } + org_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + if (from.org().size() > 0) { + org_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.org_); + } resource_type_ = from.resource_type_; // @@protoc_insertion_point(copy_constructor:flyteidl.admin.ProjectDomainAttributesGetRequest) } @@ -1261,6 +1343,7 @@ void ProjectDomainAttributesGetRequest::SharedCtor() { &scc_info_ProjectDomainAttributesGetRequest_flyteidl_2fadmin_2fproject_5fdomain_5fattributes_2eproto.base); project_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); domain_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); resource_type_ = 0; } @@ -1272,6 +1355,7 @@ ProjectDomainAttributesGetRequest::~ProjectDomainAttributesGetRequest() { void ProjectDomainAttributesGetRequest::SharedDtor() { project_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); domain_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); } void ProjectDomainAttributesGetRequest::SetCachedSize(int size) const { @@ -1291,6 +1375,7 @@ void ProjectDomainAttributesGetRequest::Clear() { project_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); domain_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); resource_type_ = 0; _internal_metadata_.Clear(); } @@ -1348,6 +1433,22 @@ const char* ProjectDomainAttributesGetRequest::_InternalParse(const char* begin, GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); break; } + // string org = 4; + case 4: { + if (static_cast<::google::protobuf::uint8>(tag) != 34) goto handle_unusual; + ptr = ::google::protobuf::io::ReadSize(ptr, &size); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + ctx->extra_parse_data().SetFieldName("flyteidl.admin.ProjectDomainAttributesGetRequest.org"); + object = msg->mutable_org(); + if (size > end - ptr + ::google::protobuf::internal::ParseContext::kSlopBytes) { + parser_till_end = ::google::protobuf::internal::GreedyStringParserUTF8; + goto string_till_end; + } + GOOGLE_PROTOBUF_PARSER_ASSERT(::google::protobuf::internal::StringCheckUTF8(ptr, size, ctx)); + ::google::protobuf::internal::InlineGreedyStringParser(object, ptr, size, ctx); + ptr += size; + break; + } default: { handle_unusual: if ((tag & 7) == 4 || tag == 0) { @@ -1426,6 +1527,21 @@ bool ProjectDomainAttributesGetRequest::MergePartialFromCodedStream( break; } + // string org = 4; + case 4: { + if (static_cast< ::google::protobuf::uint8>(tag) == (34 & 0xFF)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadString( + input, this->mutable_org())); + DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::PARSE, + "flyteidl.admin.ProjectDomainAttributesGetRequest.org")); + } else { + goto handle_unusual; + } + break; + } + default: { handle_unusual: if (tag == 0) { @@ -1479,6 +1595,16 @@ void ProjectDomainAttributesGetRequest::SerializeWithCachedSizes( 3, this->resource_type(), output); } + // string org = 4; + if (this->org().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.admin.ProjectDomainAttributesGetRequest.org"); + ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( + 4, this->org(), output); + } + if (_internal_metadata_.have_unknown_fields()) { ::google::protobuf::internal::WireFormat::SerializeUnknownFields( _internal_metadata_.unknown_fields(), output); @@ -1520,6 +1646,17 @@ ::google::protobuf::uint8* ProjectDomainAttributesGetRequest::InternalSerializeW 3, this->resource_type(), target); } + // string org = 4; + if (this->org().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.admin.ProjectDomainAttributesGetRequest.org"); + target = + ::google::protobuf::internal::WireFormatLite::WriteStringToArray( + 4, this->org(), target); + } + if (_internal_metadata_.have_unknown_fields()) { target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( _internal_metadata_.unknown_fields(), target); @@ -1555,6 +1692,13 @@ size_t ProjectDomainAttributesGetRequest::ByteSizeLong() const { this->domain()); } + // string org = 4; + if (this->org().size() > 0) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::StringSize( + this->org()); + } + // .flyteidl.admin.MatchableResource resource_type = 3; if (this->resource_type() != 0) { total_size += 1 + @@ -1596,6 +1740,10 @@ void ProjectDomainAttributesGetRequest::MergeFrom(const ProjectDomainAttributesG domain_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.domain_); } + if (from.org().size() > 0) { + + org_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.org_); + } if (from.resource_type() != 0) { set_resource_type(from.resource_type()); } @@ -1630,6 +1778,8 @@ void ProjectDomainAttributesGetRequest::InternalSwap(ProjectDomainAttributesGetR GetArenaNoVirtual()); domain_.Swap(&other->domain_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), GetArenaNoVirtual()); + org_.Swap(&other->org_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), + GetArenaNoVirtual()); swap(resource_type_, other->resource_type_); } @@ -1938,6 +2088,7 @@ class ProjectDomainAttributesDeleteRequest::HasBitSetters { const int ProjectDomainAttributesDeleteRequest::kProjectFieldNumber; const int ProjectDomainAttributesDeleteRequest::kDomainFieldNumber; const int ProjectDomainAttributesDeleteRequest::kResourceTypeFieldNumber; +const int ProjectDomainAttributesDeleteRequest::kOrgFieldNumber; #endif // !defined(_MSC_VER) || _MSC_VER >= 1900 ProjectDomainAttributesDeleteRequest::ProjectDomainAttributesDeleteRequest() @@ -1957,6 +2108,10 @@ ProjectDomainAttributesDeleteRequest::ProjectDomainAttributesDeleteRequest(const if (from.domain().size() > 0) { domain_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.domain_); } + org_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + if (from.org().size() > 0) { + org_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.org_); + } resource_type_ = from.resource_type_; // @@protoc_insertion_point(copy_constructor:flyteidl.admin.ProjectDomainAttributesDeleteRequest) } @@ -1966,6 +2121,7 @@ void ProjectDomainAttributesDeleteRequest::SharedCtor() { &scc_info_ProjectDomainAttributesDeleteRequest_flyteidl_2fadmin_2fproject_5fdomain_5fattributes_2eproto.base); project_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); domain_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); resource_type_ = 0; } @@ -1977,6 +2133,7 @@ ProjectDomainAttributesDeleteRequest::~ProjectDomainAttributesDeleteRequest() { void ProjectDomainAttributesDeleteRequest::SharedDtor() { project_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); domain_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); } void ProjectDomainAttributesDeleteRequest::SetCachedSize(int size) const { @@ -1996,6 +2153,7 @@ void ProjectDomainAttributesDeleteRequest::Clear() { project_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); domain_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); resource_type_ = 0; _internal_metadata_.Clear(); } @@ -2053,6 +2211,22 @@ const char* ProjectDomainAttributesDeleteRequest::_InternalParse(const char* beg GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); break; } + // string org = 4; + case 4: { + if (static_cast<::google::protobuf::uint8>(tag) != 34) goto handle_unusual; + ptr = ::google::protobuf::io::ReadSize(ptr, &size); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + ctx->extra_parse_data().SetFieldName("flyteidl.admin.ProjectDomainAttributesDeleteRequest.org"); + object = msg->mutable_org(); + if (size > end - ptr + ::google::protobuf::internal::ParseContext::kSlopBytes) { + parser_till_end = ::google::protobuf::internal::GreedyStringParserUTF8; + goto string_till_end; + } + GOOGLE_PROTOBUF_PARSER_ASSERT(::google::protobuf::internal::StringCheckUTF8(ptr, size, ctx)); + ::google::protobuf::internal::InlineGreedyStringParser(object, ptr, size, ctx); + ptr += size; + break; + } default: { handle_unusual: if ((tag & 7) == 4 || tag == 0) { @@ -2131,6 +2305,21 @@ bool ProjectDomainAttributesDeleteRequest::MergePartialFromCodedStream( break; } + // string org = 4; + case 4: { + if (static_cast< ::google::protobuf::uint8>(tag) == (34 & 0xFF)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadString( + input, this->mutable_org())); + DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::PARSE, + "flyteidl.admin.ProjectDomainAttributesDeleteRequest.org")); + } else { + goto handle_unusual; + } + break; + } + default: { handle_unusual: if (tag == 0) { @@ -2184,6 +2373,16 @@ void ProjectDomainAttributesDeleteRequest::SerializeWithCachedSizes( 3, this->resource_type(), output); } + // string org = 4; + if (this->org().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.admin.ProjectDomainAttributesDeleteRequest.org"); + ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( + 4, this->org(), output); + } + if (_internal_metadata_.have_unknown_fields()) { ::google::protobuf::internal::WireFormat::SerializeUnknownFields( _internal_metadata_.unknown_fields(), output); @@ -2225,6 +2424,17 @@ ::google::protobuf::uint8* ProjectDomainAttributesDeleteRequest::InternalSeriali 3, this->resource_type(), target); } + // string org = 4; + if (this->org().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.admin.ProjectDomainAttributesDeleteRequest.org"); + target = + ::google::protobuf::internal::WireFormatLite::WriteStringToArray( + 4, this->org(), target); + } + if (_internal_metadata_.have_unknown_fields()) { target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( _internal_metadata_.unknown_fields(), target); @@ -2260,6 +2470,13 @@ size_t ProjectDomainAttributesDeleteRequest::ByteSizeLong() const { this->domain()); } + // string org = 4; + if (this->org().size() > 0) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::StringSize( + this->org()); + } + // .flyteidl.admin.MatchableResource resource_type = 3; if (this->resource_type() != 0) { total_size += 1 + @@ -2301,6 +2518,10 @@ void ProjectDomainAttributesDeleteRequest::MergeFrom(const ProjectDomainAttribut domain_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.domain_); } + if (from.org().size() > 0) { + + org_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.org_); + } if (from.resource_type() != 0) { set_resource_type(from.resource_type()); } @@ -2335,6 +2556,8 @@ void ProjectDomainAttributesDeleteRequest::InternalSwap(ProjectDomainAttributesD GetArenaNoVirtual()); domain_.Swap(&other->domain_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), GetArenaNoVirtual()); + org_.Swap(&other->org_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), + GetArenaNoVirtual()); swap(resource_type_, other->resource_type_); } diff --git a/flyteidl/gen/pb-cpp/flyteidl/admin/project_domain_attributes.pb.h b/flyteidl/gen/pb-cpp/flyteidl/admin/project_domain_attributes.pb.h index 3ad739b9dd..aa27ef3a0a 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/admin/project_domain_attributes.pb.h +++ b/flyteidl/gen/pb-cpp/flyteidl/admin/project_domain_attributes.pb.h @@ -213,6 +213,20 @@ class ProjectDomainAttributes final : ::std::string* release_domain(); void set_allocated_domain(::std::string* domain); + // string org = 4; + void clear_org(); + static const int kOrgFieldNumber = 4; + const ::std::string& org() const; + void set_org(const ::std::string& value); + #if LANG_CXX11 + void set_org(::std::string&& value); + #endif + void set_org(const char* value); + void set_org(const char* value, size_t size); + ::std::string* mutable_org(); + ::std::string* release_org(); + void set_allocated_org(::std::string* org); + // .flyteidl.admin.MatchingAttributes matching_attributes = 3; bool has_matching_attributes() const; void clear_matching_attributes(); @@ -229,6 +243,7 @@ class ProjectDomainAttributes final : ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; ::google::protobuf::internal::ArenaStringPtr project_; ::google::protobuf::internal::ArenaStringPtr domain_; + ::google::protobuf::internal::ArenaStringPtr org_; ::flyteidl::admin::MatchingAttributes* matching_attributes_; mutable ::google::protobuf::internal::CachedSize _cached_size_; friend struct ::TableStruct_flyteidl_2fadmin_2fproject_5fdomain_5fattributes_2eproto; @@ -578,6 +593,20 @@ class ProjectDomainAttributesGetRequest final : ::std::string* release_domain(); void set_allocated_domain(::std::string* domain); + // string org = 4; + void clear_org(); + static const int kOrgFieldNumber = 4; + const ::std::string& org() const; + void set_org(const ::std::string& value); + #if LANG_CXX11 + void set_org(::std::string&& value); + #endif + void set_org(const char* value); + void set_org(const char* value, size_t size); + ::std::string* mutable_org(); + ::std::string* release_org(); + void set_allocated_org(::std::string* org); + // .flyteidl.admin.MatchableResource resource_type = 3; void clear_resource_type(); static const int kResourceTypeFieldNumber = 3; @@ -591,6 +620,7 @@ class ProjectDomainAttributesGetRequest final : ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; ::google::protobuf::internal::ArenaStringPtr project_; ::google::protobuf::internal::ArenaStringPtr domain_; + ::google::protobuf::internal::ArenaStringPtr org_; int resource_type_; mutable ::google::protobuf::internal::CachedSize _cached_size_; friend struct ::TableStruct_flyteidl_2fadmin_2fproject_5fdomain_5fattributes_2eproto; @@ -835,6 +865,20 @@ class ProjectDomainAttributesDeleteRequest final : ::std::string* release_domain(); void set_allocated_domain(::std::string* domain); + // string org = 4; + void clear_org(); + static const int kOrgFieldNumber = 4; + const ::std::string& org() const; + void set_org(const ::std::string& value); + #if LANG_CXX11 + void set_org(::std::string&& value); + #endif + void set_org(const char* value); + void set_org(const char* value, size_t size); + ::std::string* mutable_org(); + ::std::string* release_org(); + void set_allocated_org(::std::string* org); + // .flyteidl.admin.MatchableResource resource_type = 3; void clear_resource_type(); static const int kResourceTypeFieldNumber = 3; @@ -848,6 +892,7 @@ class ProjectDomainAttributesDeleteRequest final : ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; ::google::protobuf::internal::ArenaStringPtr project_; ::google::protobuf::internal::ArenaStringPtr domain_; + ::google::protobuf::internal::ArenaStringPtr org_; int resource_type_; mutable ::google::protobuf::internal::CachedSize _cached_size_; friend struct ::TableStruct_flyteidl_2fadmin_2fproject_5fdomain_5fattributes_2eproto; @@ -1119,6 +1164,59 @@ inline void ProjectDomainAttributes::set_allocated_matching_attributes(::flyteid // @@protoc_insertion_point(field_set_allocated:flyteidl.admin.ProjectDomainAttributes.matching_attributes) } +// string org = 4; +inline void ProjectDomainAttributes::clear_org() { + org_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline const ::std::string& ProjectDomainAttributes::org() const { + // @@protoc_insertion_point(field_get:flyteidl.admin.ProjectDomainAttributes.org) + return org_.GetNoArena(); +} +inline void ProjectDomainAttributes::set_org(const ::std::string& value) { + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); + // @@protoc_insertion_point(field_set:flyteidl.admin.ProjectDomainAttributes.org) +} +#if LANG_CXX11 +inline void ProjectDomainAttributes::set_org(::std::string&& value) { + + org_.SetNoArena( + &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); + // @@protoc_insertion_point(field_set_rvalue:flyteidl.admin.ProjectDomainAttributes.org) +} +#endif +inline void ProjectDomainAttributes::set_org(const char* value) { + GOOGLE_DCHECK(value != nullptr); + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); + // @@protoc_insertion_point(field_set_char:flyteidl.admin.ProjectDomainAttributes.org) +} +inline void ProjectDomainAttributes::set_org(const char* value, size_t size) { + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), + ::std::string(reinterpret_cast(value), size)); + // @@protoc_insertion_point(field_set_pointer:flyteidl.admin.ProjectDomainAttributes.org) +} +inline ::std::string* ProjectDomainAttributes::mutable_org() { + + // @@protoc_insertion_point(field_mutable:flyteidl.admin.ProjectDomainAttributes.org) + return org_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline ::std::string* ProjectDomainAttributes::release_org() { + // @@protoc_insertion_point(field_release:flyteidl.admin.ProjectDomainAttributes.org) + + return org_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline void ProjectDomainAttributes::set_allocated_org(::std::string* org) { + if (org != nullptr) { + + } else { + + } + org_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), org); + // @@protoc_insertion_point(field_set_allocated:flyteidl.admin.ProjectDomainAttributes.org) +} + // ------------------------------------------------------------------- // ProjectDomainAttributesUpdateRequest @@ -1302,6 +1400,59 @@ inline void ProjectDomainAttributesGetRequest::set_resource_type(::flyteidl::adm // @@protoc_insertion_point(field_set:flyteidl.admin.ProjectDomainAttributesGetRequest.resource_type) } +// string org = 4; +inline void ProjectDomainAttributesGetRequest::clear_org() { + org_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline const ::std::string& ProjectDomainAttributesGetRequest::org() const { + // @@protoc_insertion_point(field_get:flyteidl.admin.ProjectDomainAttributesGetRequest.org) + return org_.GetNoArena(); +} +inline void ProjectDomainAttributesGetRequest::set_org(const ::std::string& value) { + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); + // @@protoc_insertion_point(field_set:flyteidl.admin.ProjectDomainAttributesGetRequest.org) +} +#if LANG_CXX11 +inline void ProjectDomainAttributesGetRequest::set_org(::std::string&& value) { + + org_.SetNoArena( + &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); + // @@protoc_insertion_point(field_set_rvalue:flyteidl.admin.ProjectDomainAttributesGetRequest.org) +} +#endif +inline void ProjectDomainAttributesGetRequest::set_org(const char* value) { + GOOGLE_DCHECK(value != nullptr); + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); + // @@protoc_insertion_point(field_set_char:flyteidl.admin.ProjectDomainAttributesGetRequest.org) +} +inline void ProjectDomainAttributesGetRequest::set_org(const char* value, size_t size) { + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), + ::std::string(reinterpret_cast(value), size)); + // @@protoc_insertion_point(field_set_pointer:flyteidl.admin.ProjectDomainAttributesGetRequest.org) +} +inline ::std::string* ProjectDomainAttributesGetRequest::mutable_org() { + + // @@protoc_insertion_point(field_mutable:flyteidl.admin.ProjectDomainAttributesGetRequest.org) + return org_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline ::std::string* ProjectDomainAttributesGetRequest::release_org() { + // @@protoc_insertion_point(field_release:flyteidl.admin.ProjectDomainAttributesGetRequest.org) + + return org_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline void ProjectDomainAttributesGetRequest::set_allocated_org(::std::string* org) { + if (org != nullptr) { + + } else { + + } + org_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), org); + // @@protoc_insertion_point(field_set_allocated:flyteidl.admin.ProjectDomainAttributesGetRequest.org) +} + // ------------------------------------------------------------------- // ProjectDomainAttributesGetResponse @@ -1481,6 +1632,59 @@ inline void ProjectDomainAttributesDeleteRequest::set_resource_type(::flyteidl:: // @@protoc_insertion_point(field_set:flyteidl.admin.ProjectDomainAttributesDeleteRequest.resource_type) } +// string org = 4; +inline void ProjectDomainAttributesDeleteRequest::clear_org() { + org_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline const ::std::string& ProjectDomainAttributesDeleteRequest::org() const { + // @@protoc_insertion_point(field_get:flyteidl.admin.ProjectDomainAttributesDeleteRequest.org) + return org_.GetNoArena(); +} +inline void ProjectDomainAttributesDeleteRequest::set_org(const ::std::string& value) { + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); + // @@protoc_insertion_point(field_set:flyteidl.admin.ProjectDomainAttributesDeleteRequest.org) +} +#if LANG_CXX11 +inline void ProjectDomainAttributesDeleteRequest::set_org(::std::string&& value) { + + org_.SetNoArena( + &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); + // @@protoc_insertion_point(field_set_rvalue:flyteidl.admin.ProjectDomainAttributesDeleteRequest.org) +} +#endif +inline void ProjectDomainAttributesDeleteRequest::set_org(const char* value) { + GOOGLE_DCHECK(value != nullptr); + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); + // @@protoc_insertion_point(field_set_char:flyteidl.admin.ProjectDomainAttributesDeleteRequest.org) +} +inline void ProjectDomainAttributesDeleteRequest::set_org(const char* value, size_t size) { + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), + ::std::string(reinterpret_cast(value), size)); + // @@protoc_insertion_point(field_set_pointer:flyteidl.admin.ProjectDomainAttributesDeleteRequest.org) +} +inline ::std::string* ProjectDomainAttributesDeleteRequest::mutable_org() { + + // @@protoc_insertion_point(field_mutable:flyteidl.admin.ProjectDomainAttributesDeleteRequest.org) + return org_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline ::std::string* ProjectDomainAttributesDeleteRequest::release_org() { + // @@protoc_insertion_point(field_release:flyteidl.admin.ProjectDomainAttributesDeleteRequest.org) + + return org_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline void ProjectDomainAttributesDeleteRequest::set_allocated_org(::std::string* org) { + if (org != nullptr) { + + } else { + + } + org_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), org); + // @@protoc_insertion_point(field_set_allocated:flyteidl.admin.ProjectDomainAttributesDeleteRequest.org) +} + // ------------------------------------------------------------------- // ProjectDomainAttributesDeleteResponse diff --git a/flyteidl/gen/pb-cpp/flyteidl/admin/workflow_attributes.pb.cc b/flyteidl/gen/pb-cpp/flyteidl/admin/workflow_attributes.pb.cc index 0a85bfeb1d..f181c74738 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/admin/workflow_attributes.pb.cc +++ b/flyteidl/gen/pb-cpp/flyteidl/admin/workflow_attributes.pb.cc @@ -175,6 +175,7 @@ const ::google::protobuf::uint32 TableStruct_flyteidl_2fadmin_2fworkflow_5fattri PROTOBUF_FIELD_OFFSET(::flyteidl::admin::WorkflowAttributes, domain_), PROTOBUF_FIELD_OFFSET(::flyteidl::admin::WorkflowAttributes, workflow_), PROTOBUF_FIELD_OFFSET(::flyteidl::admin::WorkflowAttributes, matching_attributes_), + PROTOBUF_FIELD_OFFSET(::flyteidl::admin::WorkflowAttributes, org_), ~0u, // no _has_bits_ PROTOBUF_FIELD_OFFSET(::flyteidl::admin::WorkflowAttributesUpdateRequest, _internal_metadata_), ~0u, // no _extensions_ @@ -195,6 +196,7 @@ const ::google::protobuf::uint32 TableStruct_flyteidl_2fadmin_2fworkflow_5fattri PROTOBUF_FIELD_OFFSET(::flyteidl::admin::WorkflowAttributesGetRequest, domain_), PROTOBUF_FIELD_OFFSET(::flyteidl::admin::WorkflowAttributesGetRequest, workflow_), PROTOBUF_FIELD_OFFSET(::flyteidl::admin::WorkflowAttributesGetRequest, resource_type_), + PROTOBUF_FIELD_OFFSET(::flyteidl::admin::WorkflowAttributesGetRequest, org_), ~0u, // no _has_bits_ PROTOBUF_FIELD_OFFSET(::flyteidl::admin::WorkflowAttributesGetResponse, _internal_metadata_), ~0u, // no _extensions_ @@ -210,6 +212,7 @@ const ::google::protobuf::uint32 TableStruct_flyteidl_2fadmin_2fworkflow_5fattri PROTOBUF_FIELD_OFFSET(::flyteidl::admin::WorkflowAttributesDeleteRequest, domain_), PROTOBUF_FIELD_OFFSET(::flyteidl::admin::WorkflowAttributesDeleteRequest, workflow_), PROTOBUF_FIELD_OFFSET(::flyteidl::admin::WorkflowAttributesDeleteRequest, resource_type_), + PROTOBUF_FIELD_OFFSET(::flyteidl::admin::WorkflowAttributesDeleteRequest, org_), ~0u, // no _has_bits_ PROTOBUF_FIELD_OFFSET(::flyteidl::admin::WorkflowAttributesDeleteResponse, _internal_metadata_), ~0u, // no _extensions_ @@ -218,12 +221,12 @@ const ::google::protobuf::uint32 TableStruct_flyteidl_2fadmin_2fworkflow_5fattri }; static const ::google::protobuf::internal::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = { { 0, -1, sizeof(::flyteidl::admin::WorkflowAttributes)}, - { 9, -1, sizeof(::flyteidl::admin::WorkflowAttributesUpdateRequest)}, - { 15, -1, sizeof(::flyteidl::admin::WorkflowAttributesUpdateResponse)}, - { 20, -1, sizeof(::flyteidl::admin::WorkflowAttributesGetRequest)}, - { 29, -1, sizeof(::flyteidl::admin::WorkflowAttributesGetResponse)}, - { 35, -1, sizeof(::flyteidl::admin::WorkflowAttributesDeleteRequest)}, - { 44, -1, sizeof(::flyteidl::admin::WorkflowAttributesDeleteResponse)}, + { 10, -1, sizeof(::flyteidl::admin::WorkflowAttributesUpdateRequest)}, + { 16, -1, sizeof(::flyteidl::admin::WorkflowAttributesUpdateResponse)}, + { 21, -1, sizeof(::flyteidl::admin::WorkflowAttributesGetRequest)}, + { 31, -1, sizeof(::flyteidl::admin::WorkflowAttributesGetResponse)}, + { 37, -1, sizeof(::flyteidl::admin::WorkflowAttributesDeleteRequest)}, + { 47, -1, sizeof(::flyteidl::admin::WorkflowAttributesDeleteResponse)}, }; static ::google::protobuf::Message const * const file_default_instances[] = { @@ -245,31 +248,32 @@ ::google::protobuf::internal::AssignDescriptorsTable assign_descriptors_table_fl const char descriptor_table_protodef_flyteidl_2fadmin_2fworkflow_5fattributes_2eproto[] = "\n(flyteidl/admin/workflow_attributes.pro" "to\022\016flyteidl.admin\032\'flyteidl/admin/match" - "able_resource.proto\"\210\001\n\022WorkflowAttribut" + "able_resource.proto\"\225\001\n\022WorkflowAttribut" "es\022\017\n\007project\030\001 \001(\t\022\016\n\006domain\030\002 \001(\t\022\020\n\010w" "orkflow\030\003 \001(\t\022\?\n\023matching_attributes\030\004 \001" - "(\0132\".flyteidl.admin.MatchingAttributes\"Y" - "\n\037WorkflowAttributesUpdateRequest\0226\n\natt" - "ributes\030\001 \001(\0132\".flyteidl.admin.WorkflowA" - "ttributes\"\"\n WorkflowAttributesUpdateRes" - "ponse\"\213\001\n\034WorkflowAttributesGetRequest\022\017" - "\n\007project\030\001 \001(\t\022\016\n\006domain\030\002 \001(\t\022\020\n\010workf" - "low\030\003 \001(\t\0228\n\rresource_type\030\004 \001(\0162!.flyte" - "idl.admin.MatchableResource\"W\n\035WorkflowA" - "ttributesGetResponse\0226\n\nattributes\030\001 \001(\013" - "2\".flyteidl.admin.WorkflowAttributes\"\216\001\n" - "\037WorkflowAttributesDeleteRequest\022\017\n\007proj" - "ect\030\001 \001(\t\022\016\n\006domain\030\002 \001(\t\022\020\n\010workflow\030\003 " - "\001(\t\0228\n\rresource_type\030\004 \001(\0162!.flyteidl.ad" - "min.MatchableResource\"\"\n WorkflowAttribu" - "tesDeleteResponseB=Z;github.com/flyteorg" - "/flyte/flyteidl/gen/pb-go/flyteidl/admin" - "b\006proto3" + "(\0132\".flyteidl.admin.MatchingAttributes\022\013" + "\n\003org\030\005 \001(\t\"Y\n\037WorkflowAttributesUpdateR" + "equest\0226\n\nattributes\030\001 \001(\0132\".flyteidl.ad" + "min.WorkflowAttributes\"\"\n WorkflowAttrib" + "utesUpdateResponse\"\230\001\n\034WorkflowAttribute" + "sGetRequest\022\017\n\007project\030\001 \001(\t\022\016\n\006domain\030\002" + " \001(\t\022\020\n\010workflow\030\003 \001(\t\0228\n\rresource_type\030" + "\004 \001(\0162!.flyteidl.admin.MatchableResource" + "\022\013\n\003org\030\005 \001(\t\"W\n\035WorkflowAttributesGetRe" + "sponse\0226\n\nattributes\030\001 \001(\0132\".flyteidl.ad" + "min.WorkflowAttributes\"\233\001\n\037WorkflowAttri" + "butesDeleteRequest\022\017\n\007project\030\001 \001(\t\022\016\n\006d" + "omain\030\002 \001(\t\022\020\n\010workflow\030\003 \001(\t\0228\n\rresourc" + "e_type\030\004 \001(\0162!.flyteidl.admin.MatchableR" + "esource\022\013\n\003org\030\005 \001(\t\"\"\n WorkflowAttribut" + "esDeleteResponseB=Z;github.com/flyteorg/" + "flyte/flyteidl/gen/pb-go/flyteidl/adminb" + "\006proto3" ; ::google::protobuf::internal::DescriptorTable descriptor_table_flyteidl_2fadmin_2fworkflow_5fattributes_2eproto = { false, InitDefaults_flyteidl_2fadmin_2fworkflow_5fattributes_2eproto, descriptor_table_protodef_flyteidl_2fadmin_2fworkflow_5fattributes_2eproto, - "flyteidl/admin/workflow_attributes.proto", &assign_descriptors_table_flyteidl_2fadmin_2fworkflow_5fattributes_2eproto, 848, + "flyteidl/admin/workflow_attributes.proto", &assign_descriptors_table_flyteidl_2fadmin_2fworkflow_5fattributes_2eproto, 887, }; void AddDescriptors_flyteidl_2fadmin_2fworkflow_5fattributes_2eproto() { @@ -311,6 +315,7 @@ const int WorkflowAttributes::kProjectFieldNumber; const int WorkflowAttributes::kDomainFieldNumber; const int WorkflowAttributes::kWorkflowFieldNumber; const int WorkflowAttributes::kMatchingAttributesFieldNumber; +const int WorkflowAttributes::kOrgFieldNumber; #endif // !defined(_MSC_VER) || _MSC_VER >= 1900 WorkflowAttributes::WorkflowAttributes() @@ -334,6 +339,10 @@ WorkflowAttributes::WorkflowAttributes(const WorkflowAttributes& from) if (from.workflow().size() > 0) { workflow_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.workflow_); } + org_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + if (from.org().size() > 0) { + org_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.org_); + } if (from.has_matching_attributes()) { matching_attributes_ = new ::flyteidl::admin::MatchingAttributes(*from.matching_attributes_); } else { @@ -348,6 +357,7 @@ void WorkflowAttributes::SharedCtor() { project_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); domain_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); workflow_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); matching_attributes_ = nullptr; } @@ -360,6 +370,7 @@ void WorkflowAttributes::SharedDtor() { project_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); domain_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); workflow_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); if (this != internal_default_instance()) delete matching_attributes_; } @@ -381,6 +392,7 @@ void WorkflowAttributes::Clear() { project_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); domain_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); workflow_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); if (GetArenaNoVirtual() == nullptr && matching_attributes_ != nullptr) { delete matching_attributes_; } @@ -462,6 +474,22 @@ const char* WorkflowAttributes::_InternalParse(const char* begin, const char* en {parser_till_end, object}, ptr - size, ptr)); break; } + // string org = 5; + case 5: { + if (static_cast<::google::protobuf::uint8>(tag) != 42) goto handle_unusual; + ptr = ::google::protobuf::io::ReadSize(ptr, &size); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + ctx->extra_parse_data().SetFieldName("flyteidl.admin.WorkflowAttributes.org"); + object = msg->mutable_org(); + if (size > end - ptr + ::google::protobuf::internal::ParseContext::kSlopBytes) { + parser_till_end = ::google::protobuf::internal::GreedyStringParserUTF8; + goto string_till_end; + } + GOOGLE_PROTOBUF_PARSER_ASSERT(::google::protobuf::internal::StringCheckUTF8(ptr, size, ctx)); + ::google::protobuf::internal::InlineGreedyStringParser(object, ptr, size, ctx); + ptr += size; + break; + } default: { handle_unusual: if ((tag & 7) == 4 || tag == 0) { @@ -552,6 +580,21 @@ bool WorkflowAttributes::MergePartialFromCodedStream( break; } + // string org = 5; + case 5: { + if (static_cast< ::google::protobuf::uint8>(tag) == (42 & 0xFF)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadString( + input, this->mutable_org())); + DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::PARSE, + "flyteidl.admin.WorkflowAttributes.org")); + } else { + goto handle_unusual; + } + break; + } + default: { handle_unusual: if (tag == 0) { @@ -615,6 +658,16 @@ void WorkflowAttributes::SerializeWithCachedSizes( 4, HasBitSetters::matching_attributes(this), output); } + // string org = 5; + if (this->org().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.admin.WorkflowAttributes.org"); + ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( + 5, this->org(), output); + } + if (_internal_metadata_.have_unknown_fields()) { ::google::protobuf::internal::WireFormat::SerializeUnknownFields( _internal_metadata_.unknown_fields(), output); @@ -668,6 +721,17 @@ ::google::protobuf::uint8* WorkflowAttributes::InternalSerializeWithCachedSizesT 4, HasBitSetters::matching_attributes(this), target); } + // string org = 5; + if (this->org().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.admin.WorkflowAttributes.org"); + target = + ::google::protobuf::internal::WireFormatLite::WriteStringToArray( + 5, this->org(), target); + } + if (_internal_metadata_.have_unknown_fields()) { target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( _internal_metadata_.unknown_fields(), target); @@ -710,6 +774,13 @@ size_t WorkflowAttributes::ByteSizeLong() const { this->workflow()); } + // string org = 5; + if (this->org().size() > 0) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::StringSize( + this->org()); + } + // .flyteidl.admin.MatchingAttributes matching_attributes = 4; if (this->has_matching_attributes()) { total_size += 1 + @@ -756,6 +827,10 @@ void WorkflowAttributes::MergeFrom(const WorkflowAttributes& from) { workflow_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.workflow_); } + if (from.org().size() > 0) { + + org_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.org_); + } if (from.has_matching_attributes()) { mutable_matching_attributes()->::flyteidl::admin::MatchingAttributes::MergeFrom(from.matching_attributes()); } @@ -792,6 +867,8 @@ void WorkflowAttributes::InternalSwap(WorkflowAttributes* other) { GetArenaNoVirtual()); workflow_.Swap(&other->workflow_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), GetArenaNoVirtual()); + org_.Swap(&other->org_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), + GetArenaNoVirtual()); swap(matching_attributes_, other->matching_attributes_); } @@ -1310,6 +1387,7 @@ const int WorkflowAttributesGetRequest::kProjectFieldNumber; const int WorkflowAttributesGetRequest::kDomainFieldNumber; const int WorkflowAttributesGetRequest::kWorkflowFieldNumber; const int WorkflowAttributesGetRequest::kResourceTypeFieldNumber; +const int WorkflowAttributesGetRequest::kOrgFieldNumber; #endif // !defined(_MSC_VER) || _MSC_VER >= 1900 WorkflowAttributesGetRequest::WorkflowAttributesGetRequest() @@ -1333,6 +1411,10 @@ WorkflowAttributesGetRequest::WorkflowAttributesGetRequest(const WorkflowAttribu if (from.workflow().size() > 0) { workflow_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.workflow_); } + org_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + if (from.org().size() > 0) { + org_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.org_); + } resource_type_ = from.resource_type_; // @@protoc_insertion_point(copy_constructor:flyteidl.admin.WorkflowAttributesGetRequest) } @@ -1343,6 +1425,7 @@ void WorkflowAttributesGetRequest::SharedCtor() { project_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); domain_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); workflow_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); resource_type_ = 0; } @@ -1355,6 +1438,7 @@ void WorkflowAttributesGetRequest::SharedDtor() { project_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); domain_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); workflow_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); } void WorkflowAttributesGetRequest::SetCachedSize(int size) const { @@ -1375,6 +1459,7 @@ void WorkflowAttributesGetRequest::Clear() { project_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); domain_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); workflow_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); resource_type_ = 0; _internal_metadata_.Clear(); } @@ -1448,6 +1533,22 @@ const char* WorkflowAttributesGetRequest::_InternalParse(const char* begin, cons GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); break; } + // string org = 5; + case 5: { + if (static_cast<::google::protobuf::uint8>(tag) != 42) goto handle_unusual; + ptr = ::google::protobuf::io::ReadSize(ptr, &size); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + ctx->extra_parse_data().SetFieldName("flyteidl.admin.WorkflowAttributesGetRequest.org"); + object = msg->mutable_org(); + if (size > end - ptr + ::google::protobuf::internal::ParseContext::kSlopBytes) { + parser_till_end = ::google::protobuf::internal::GreedyStringParserUTF8; + goto string_till_end; + } + GOOGLE_PROTOBUF_PARSER_ASSERT(::google::protobuf::internal::StringCheckUTF8(ptr, size, ctx)); + ::google::protobuf::internal::InlineGreedyStringParser(object, ptr, size, ctx); + ptr += size; + break; + } default: { handle_unusual: if ((tag & 7) == 4 || tag == 0) { @@ -1541,6 +1642,21 @@ bool WorkflowAttributesGetRequest::MergePartialFromCodedStream( break; } + // string org = 5; + case 5: { + if (static_cast< ::google::protobuf::uint8>(tag) == (42 & 0xFF)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadString( + input, this->mutable_org())); + DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::PARSE, + "flyteidl.admin.WorkflowAttributesGetRequest.org")); + } else { + goto handle_unusual; + } + break; + } + default: { handle_unusual: if (tag == 0) { @@ -1604,6 +1720,16 @@ void WorkflowAttributesGetRequest::SerializeWithCachedSizes( 4, this->resource_type(), output); } + // string org = 5; + if (this->org().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.admin.WorkflowAttributesGetRequest.org"); + ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( + 5, this->org(), output); + } + if (_internal_metadata_.have_unknown_fields()) { ::google::protobuf::internal::WireFormat::SerializeUnknownFields( _internal_metadata_.unknown_fields(), output); @@ -1656,6 +1782,17 @@ ::google::protobuf::uint8* WorkflowAttributesGetRequest::InternalSerializeWithCa 4, this->resource_type(), target); } + // string org = 5; + if (this->org().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.admin.WorkflowAttributesGetRequest.org"); + target = + ::google::protobuf::internal::WireFormatLite::WriteStringToArray( + 5, this->org(), target); + } + if (_internal_metadata_.have_unknown_fields()) { target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( _internal_metadata_.unknown_fields(), target); @@ -1698,6 +1835,13 @@ size_t WorkflowAttributesGetRequest::ByteSizeLong() const { this->workflow()); } + // string org = 5; + if (this->org().size() > 0) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::StringSize( + this->org()); + } + // .flyteidl.admin.MatchableResource resource_type = 4; if (this->resource_type() != 0) { total_size += 1 + @@ -1743,6 +1887,10 @@ void WorkflowAttributesGetRequest::MergeFrom(const WorkflowAttributesGetRequest& workflow_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.workflow_); } + if (from.org().size() > 0) { + + org_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.org_); + } if (from.resource_type() != 0) { set_resource_type(from.resource_type()); } @@ -1779,6 +1927,8 @@ void WorkflowAttributesGetRequest::InternalSwap(WorkflowAttributesGetRequest* ot GetArenaNoVirtual()); workflow_.Swap(&other->workflow_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), GetArenaNoVirtual()); + org_.Swap(&other->org_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), + GetArenaNoVirtual()); swap(resource_type_, other->resource_type_); } @@ -2088,6 +2238,7 @@ const int WorkflowAttributesDeleteRequest::kProjectFieldNumber; const int WorkflowAttributesDeleteRequest::kDomainFieldNumber; const int WorkflowAttributesDeleteRequest::kWorkflowFieldNumber; const int WorkflowAttributesDeleteRequest::kResourceTypeFieldNumber; +const int WorkflowAttributesDeleteRequest::kOrgFieldNumber; #endif // !defined(_MSC_VER) || _MSC_VER >= 1900 WorkflowAttributesDeleteRequest::WorkflowAttributesDeleteRequest() @@ -2111,6 +2262,10 @@ WorkflowAttributesDeleteRequest::WorkflowAttributesDeleteRequest(const WorkflowA if (from.workflow().size() > 0) { workflow_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.workflow_); } + org_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + if (from.org().size() > 0) { + org_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.org_); + } resource_type_ = from.resource_type_; // @@protoc_insertion_point(copy_constructor:flyteidl.admin.WorkflowAttributesDeleteRequest) } @@ -2121,6 +2276,7 @@ void WorkflowAttributesDeleteRequest::SharedCtor() { project_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); domain_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); workflow_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); resource_type_ = 0; } @@ -2133,6 +2289,7 @@ void WorkflowAttributesDeleteRequest::SharedDtor() { project_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); domain_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); workflow_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); } void WorkflowAttributesDeleteRequest::SetCachedSize(int size) const { @@ -2153,6 +2310,7 @@ void WorkflowAttributesDeleteRequest::Clear() { project_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); domain_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); workflow_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); resource_type_ = 0; _internal_metadata_.Clear(); } @@ -2226,6 +2384,22 @@ const char* WorkflowAttributesDeleteRequest::_InternalParse(const char* begin, c GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); break; } + // string org = 5; + case 5: { + if (static_cast<::google::protobuf::uint8>(tag) != 42) goto handle_unusual; + ptr = ::google::protobuf::io::ReadSize(ptr, &size); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + ctx->extra_parse_data().SetFieldName("flyteidl.admin.WorkflowAttributesDeleteRequest.org"); + object = msg->mutable_org(); + if (size > end - ptr + ::google::protobuf::internal::ParseContext::kSlopBytes) { + parser_till_end = ::google::protobuf::internal::GreedyStringParserUTF8; + goto string_till_end; + } + GOOGLE_PROTOBUF_PARSER_ASSERT(::google::protobuf::internal::StringCheckUTF8(ptr, size, ctx)); + ::google::protobuf::internal::InlineGreedyStringParser(object, ptr, size, ctx); + ptr += size; + break; + } default: { handle_unusual: if ((tag & 7) == 4 || tag == 0) { @@ -2319,6 +2493,21 @@ bool WorkflowAttributesDeleteRequest::MergePartialFromCodedStream( break; } + // string org = 5; + case 5: { + if (static_cast< ::google::protobuf::uint8>(tag) == (42 & 0xFF)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadString( + input, this->mutable_org())); + DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::PARSE, + "flyteidl.admin.WorkflowAttributesDeleteRequest.org")); + } else { + goto handle_unusual; + } + break; + } + default: { handle_unusual: if (tag == 0) { @@ -2382,6 +2571,16 @@ void WorkflowAttributesDeleteRequest::SerializeWithCachedSizes( 4, this->resource_type(), output); } + // string org = 5; + if (this->org().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.admin.WorkflowAttributesDeleteRequest.org"); + ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( + 5, this->org(), output); + } + if (_internal_metadata_.have_unknown_fields()) { ::google::protobuf::internal::WireFormat::SerializeUnknownFields( _internal_metadata_.unknown_fields(), output); @@ -2434,6 +2633,17 @@ ::google::protobuf::uint8* WorkflowAttributesDeleteRequest::InternalSerializeWit 4, this->resource_type(), target); } + // string org = 5; + if (this->org().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.admin.WorkflowAttributesDeleteRequest.org"); + target = + ::google::protobuf::internal::WireFormatLite::WriteStringToArray( + 5, this->org(), target); + } + if (_internal_metadata_.have_unknown_fields()) { target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( _internal_metadata_.unknown_fields(), target); @@ -2476,6 +2686,13 @@ size_t WorkflowAttributesDeleteRequest::ByteSizeLong() const { this->workflow()); } + // string org = 5; + if (this->org().size() > 0) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::StringSize( + this->org()); + } + // .flyteidl.admin.MatchableResource resource_type = 4; if (this->resource_type() != 0) { total_size += 1 + @@ -2521,6 +2738,10 @@ void WorkflowAttributesDeleteRequest::MergeFrom(const WorkflowAttributesDeleteRe workflow_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.workflow_); } + if (from.org().size() > 0) { + + org_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.org_); + } if (from.resource_type() != 0) { set_resource_type(from.resource_type()); } @@ -2557,6 +2778,8 @@ void WorkflowAttributesDeleteRequest::InternalSwap(WorkflowAttributesDeleteReque GetArenaNoVirtual()); workflow_.Swap(&other->workflow_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), GetArenaNoVirtual()); + org_.Swap(&other->org_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), + GetArenaNoVirtual()); swap(resource_type_, other->resource_type_); } diff --git a/flyteidl/gen/pb-cpp/flyteidl/admin/workflow_attributes.pb.h b/flyteidl/gen/pb-cpp/flyteidl/admin/workflow_attributes.pb.h index f6e12acc87..52d266d94b 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/admin/workflow_attributes.pb.h +++ b/flyteidl/gen/pb-cpp/flyteidl/admin/workflow_attributes.pb.h @@ -227,6 +227,20 @@ class WorkflowAttributes final : ::std::string* release_workflow(); void set_allocated_workflow(::std::string* workflow); + // string org = 5; + void clear_org(); + static const int kOrgFieldNumber = 5; + const ::std::string& org() const; + void set_org(const ::std::string& value); + #if LANG_CXX11 + void set_org(::std::string&& value); + #endif + void set_org(const char* value); + void set_org(const char* value, size_t size); + ::std::string* mutable_org(); + ::std::string* release_org(); + void set_allocated_org(::std::string* org); + // .flyteidl.admin.MatchingAttributes matching_attributes = 4; bool has_matching_attributes() const; void clear_matching_attributes(); @@ -244,6 +258,7 @@ class WorkflowAttributes final : ::google::protobuf::internal::ArenaStringPtr project_; ::google::protobuf::internal::ArenaStringPtr domain_; ::google::protobuf::internal::ArenaStringPtr workflow_; + ::google::protobuf::internal::ArenaStringPtr org_; ::flyteidl::admin::MatchingAttributes* matching_attributes_; mutable ::google::protobuf::internal::CachedSize _cached_size_; friend struct ::TableStruct_flyteidl_2fadmin_2fworkflow_5fattributes_2eproto; @@ -607,6 +622,20 @@ class WorkflowAttributesGetRequest final : ::std::string* release_workflow(); void set_allocated_workflow(::std::string* workflow); + // string org = 5; + void clear_org(); + static const int kOrgFieldNumber = 5; + const ::std::string& org() const; + void set_org(const ::std::string& value); + #if LANG_CXX11 + void set_org(::std::string&& value); + #endif + void set_org(const char* value); + void set_org(const char* value, size_t size); + ::std::string* mutable_org(); + ::std::string* release_org(); + void set_allocated_org(::std::string* org); + // .flyteidl.admin.MatchableResource resource_type = 4; void clear_resource_type(); static const int kResourceTypeFieldNumber = 4; @@ -621,6 +650,7 @@ class WorkflowAttributesGetRequest final : ::google::protobuf::internal::ArenaStringPtr project_; ::google::protobuf::internal::ArenaStringPtr domain_; ::google::protobuf::internal::ArenaStringPtr workflow_; + ::google::protobuf::internal::ArenaStringPtr org_; int resource_type_; mutable ::google::protobuf::internal::CachedSize _cached_size_; friend struct ::TableStruct_flyteidl_2fadmin_2fworkflow_5fattributes_2eproto; @@ -879,6 +909,20 @@ class WorkflowAttributesDeleteRequest final : ::std::string* release_workflow(); void set_allocated_workflow(::std::string* workflow); + // string org = 5; + void clear_org(); + static const int kOrgFieldNumber = 5; + const ::std::string& org() const; + void set_org(const ::std::string& value); + #if LANG_CXX11 + void set_org(::std::string&& value); + #endif + void set_org(const char* value); + void set_org(const char* value, size_t size); + ::std::string* mutable_org(); + ::std::string* release_org(); + void set_allocated_org(::std::string* org); + // .flyteidl.admin.MatchableResource resource_type = 4; void clear_resource_type(); static const int kResourceTypeFieldNumber = 4; @@ -893,6 +937,7 @@ class WorkflowAttributesDeleteRequest final : ::google::protobuf::internal::ArenaStringPtr project_; ::google::protobuf::internal::ArenaStringPtr domain_; ::google::protobuf::internal::ArenaStringPtr workflow_; + ::google::protobuf::internal::ArenaStringPtr org_; int resource_type_; mutable ::google::protobuf::internal::CachedSize _cached_size_; friend struct ::TableStruct_flyteidl_2fadmin_2fworkflow_5fattributes_2eproto; @@ -1217,6 +1262,59 @@ inline void WorkflowAttributes::set_allocated_matching_attributes(::flyteidl::ad // @@protoc_insertion_point(field_set_allocated:flyteidl.admin.WorkflowAttributes.matching_attributes) } +// string org = 5; +inline void WorkflowAttributes::clear_org() { + org_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline const ::std::string& WorkflowAttributes::org() const { + // @@protoc_insertion_point(field_get:flyteidl.admin.WorkflowAttributes.org) + return org_.GetNoArena(); +} +inline void WorkflowAttributes::set_org(const ::std::string& value) { + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); + // @@protoc_insertion_point(field_set:flyteidl.admin.WorkflowAttributes.org) +} +#if LANG_CXX11 +inline void WorkflowAttributes::set_org(::std::string&& value) { + + org_.SetNoArena( + &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); + // @@protoc_insertion_point(field_set_rvalue:flyteidl.admin.WorkflowAttributes.org) +} +#endif +inline void WorkflowAttributes::set_org(const char* value) { + GOOGLE_DCHECK(value != nullptr); + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); + // @@protoc_insertion_point(field_set_char:flyteidl.admin.WorkflowAttributes.org) +} +inline void WorkflowAttributes::set_org(const char* value, size_t size) { + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), + ::std::string(reinterpret_cast(value), size)); + // @@protoc_insertion_point(field_set_pointer:flyteidl.admin.WorkflowAttributes.org) +} +inline ::std::string* WorkflowAttributes::mutable_org() { + + // @@protoc_insertion_point(field_mutable:flyteidl.admin.WorkflowAttributes.org) + return org_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline ::std::string* WorkflowAttributes::release_org() { + // @@protoc_insertion_point(field_release:flyteidl.admin.WorkflowAttributes.org) + + return org_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline void WorkflowAttributes::set_allocated_org(::std::string* org) { + if (org != nullptr) { + + } else { + + } + org_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), org); + // @@protoc_insertion_point(field_set_allocated:flyteidl.admin.WorkflowAttributes.org) +} + // ------------------------------------------------------------------- // WorkflowAttributesUpdateRequest @@ -1453,6 +1551,59 @@ inline void WorkflowAttributesGetRequest::set_resource_type(::flyteidl::admin::M // @@protoc_insertion_point(field_set:flyteidl.admin.WorkflowAttributesGetRequest.resource_type) } +// string org = 5; +inline void WorkflowAttributesGetRequest::clear_org() { + org_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline const ::std::string& WorkflowAttributesGetRequest::org() const { + // @@protoc_insertion_point(field_get:flyteidl.admin.WorkflowAttributesGetRequest.org) + return org_.GetNoArena(); +} +inline void WorkflowAttributesGetRequest::set_org(const ::std::string& value) { + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); + // @@protoc_insertion_point(field_set:flyteidl.admin.WorkflowAttributesGetRequest.org) +} +#if LANG_CXX11 +inline void WorkflowAttributesGetRequest::set_org(::std::string&& value) { + + org_.SetNoArena( + &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); + // @@protoc_insertion_point(field_set_rvalue:flyteidl.admin.WorkflowAttributesGetRequest.org) +} +#endif +inline void WorkflowAttributesGetRequest::set_org(const char* value) { + GOOGLE_DCHECK(value != nullptr); + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); + // @@protoc_insertion_point(field_set_char:flyteidl.admin.WorkflowAttributesGetRequest.org) +} +inline void WorkflowAttributesGetRequest::set_org(const char* value, size_t size) { + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), + ::std::string(reinterpret_cast(value), size)); + // @@protoc_insertion_point(field_set_pointer:flyteidl.admin.WorkflowAttributesGetRequest.org) +} +inline ::std::string* WorkflowAttributesGetRequest::mutable_org() { + + // @@protoc_insertion_point(field_mutable:flyteidl.admin.WorkflowAttributesGetRequest.org) + return org_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline ::std::string* WorkflowAttributesGetRequest::release_org() { + // @@protoc_insertion_point(field_release:flyteidl.admin.WorkflowAttributesGetRequest.org) + + return org_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline void WorkflowAttributesGetRequest::set_allocated_org(::std::string* org) { + if (org != nullptr) { + + } else { + + } + org_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), org); + // @@protoc_insertion_point(field_set_allocated:flyteidl.admin.WorkflowAttributesGetRequest.org) +} + // ------------------------------------------------------------------- // WorkflowAttributesGetResponse @@ -1685,6 +1836,59 @@ inline void WorkflowAttributesDeleteRequest::set_resource_type(::flyteidl::admin // @@protoc_insertion_point(field_set:flyteidl.admin.WorkflowAttributesDeleteRequest.resource_type) } +// string org = 5; +inline void WorkflowAttributesDeleteRequest::clear_org() { + org_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline const ::std::string& WorkflowAttributesDeleteRequest::org() const { + // @@protoc_insertion_point(field_get:flyteidl.admin.WorkflowAttributesDeleteRequest.org) + return org_.GetNoArena(); +} +inline void WorkflowAttributesDeleteRequest::set_org(const ::std::string& value) { + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); + // @@protoc_insertion_point(field_set:flyteidl.admin.WorkflowAttributesDeleteRequest.org) +} +#if LANG_CXX11 +inline void WorkflowAttributesDeleteRequest::set_org(::std::string&& value) { + + org_.SetNoArena( + &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); + // @@protoc_insertion_point(field_set_rvalue:flyteidl.admin.WorkflowAttributesDeleteRequest.org) +} +#endif +inline void WorkflowAttributesDeleteRequest::set_org(const char* value) { + GOOGLE_DCHECK(value != nullptr); + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); + // @@protoc_insertion_point(field_set_char:flyteidl.admin.WorkflowAttributesDeleteRequest.org) +} +inline void WorkflowAttributesDeleteRequest::set_org(const char* value, size_t size) { + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), + ::std::string(reinterpret_cast(value), size)); + // @@protoc_insertion_point(field_set_pointer:flyteidl.admin.WorkflowAttributesDeleteRequest.org) +} +inline ::std::string* WorkflowAttributesDeleteRequest::mutable_org() { + + // @@protoc_insertion_point(field_mutable:flyteidl.admin.WorkflowAttributesDeleteRequest.org) + return org_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline ::std::string* WorkflowAttributesDeleteRequest::release_org() { + // @@protoc_insertion_point(field_release:flyteidl.admin.WorkflowAttributesDeleteRequest.org) + + return org_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline void WorkflowAttributesDeleteRequest::set_allocated_org(::std::string* org) { + if (org != nullptr) { + + } else { + + } + org_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), org); + // @@protoc_insertion_point(field_set_allocated:flyteidl.admin.WorkflowAttributesDeleteRequest.org) +} + // ------------------------------------------------------------------- // WorkflowAttributesDeleteResponse diff --git a/flyteidl/gen/pb-cpp/flyteidl/core/identifier.pb.cc b/flyteidl/gen/pb-cpp/flyteidl/core/identifier.pb.cc index 23adc9e27e..1e16dd7858 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/core/identifier.pb.cc +++ b/flyteidl/gen/pb-cpp/flyteidl/core/identifier.pb.cc @@ -140,6 +140,7 @@ const ::google::protobuf::uint32 TableStruct_flyteidl_2fcore_2fidentifier_2eprot PROTOBUF_FIELD_OFFSET(::flyteidl::core::Identifier, domain_), PROTOBUF_FIELD_OFFSET(::flyteidl::core::Identifier, name_), PROTOBUF_FIELD_OFFSET(::flyteidl::core::Identifier, version_), + PROTOBUF_FIELD_OFFSET(::flyteidl::core::Identifier, org_), ~0u, // no _has_bits_ PROTOBUF_FIELD_OFFSET(::flyteidl::core::WorkflowExecutionIdentifier, _internal_metadata_), ~0u, // no _extensions_ @@ -148,6 +149,7 @@ const ::google::protobuf::uint32 TableStruct_flyteidl_2fcore_2fidentifier_2eprot PROTOBUF_FIELD_OFFSET(::flyteidl::core::WorkflowExecutionIdentifier, project_), PROTOBUF_FIELD_OFFSET(::flyteidl::core::WorkflowExecutionIdentifier, domain_), PROTOBUF_FIELD_OFFSET(::flyteidl::core::WorkflowExecutionIdentifier, name_), + PROTOBUF_FIELD_OFFSET(::flyteidl::core::WorkflowExecutionIdentifier, org_), ~0u, // no _has_bits_ PROTOBUF_FIELD_OFFSET(::flyteidl::core::NodeExecutionIdentifier, _internal_metadata_), ~0u, // no _extensions_ @@ -173,10 +175,10 @@ const ::google::protobuf::uint32 TableStruct_flyteidl_2fcore_2fidentifier_2eprot }; static const ::google::protobuf::internal::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = { { 0, -1, sizeof(::flyteidl::core::Identifier)}, - { 10, -1, sizeof(::flyteidl::core::WorkflowExecutionIdentifier)}, - { 18, -1, sizeof(::flyteidl::core::NodeExecutionIdentifier)}, - { 25, -1, sizeof(::flyteidl::core::TaskExecutionIdentifier)}, - { 33, -1, sizeof(::flyteidl::core::SignalIdentifier)}, + { 11, -1, sizeof(::flyteidl::core::WorkflowExecutionIdentifier)}, + { 20, -1, sizeof(::flyteidl::core::NodeExecutionIdentifier)}, + { 27, -1, sizeof(::flyteidl::core::TaskExecutionIdentifier)}, + { 35, -1, sizeof(::flyteidl::core::SignalIdentifier)}, }; static ::google::protobuf::Message const * const file_default_instances[] = { @@ -195,30 +197,31 @@ ::google::protobuf::internal::AssignDescriptorsTable assign_descriptors_table_fl const char descriptor_table_protodef_flyteidl_2fcore_2fidentifier_2eproto[] = "\n\036flyteidl/core/identifier.proto\022\rflytei" - "dl.core\"\200\001\n\nIdentifier\0222\n\rresource_type\030" + "dl.core\"\215\001\n\nIdentifier\0222\n\rresource_type\030" "\001 \001(\0162\033.flyteidl.core.ResourceType\022\017\n\007pr" "oject\030\002 \001(\t\022\016\n\006domain\030\003 \001(\t\022\014\n\004name\030\004 \001(" - "\t\022\017\n\007version\030\005 \001(\t\"L\n\033WorkflowExecutionI" - "dentifier\022\017\n\007project\030\001 \001(\t\022\016\n\006domain\030\002 \001" - "(\t\022\014\n\004name\030\004 \001(\t\"l\n\027NodeExecutionIdentif" - "ier\022\017\n\007node_id\030\001 \001(\t\022@\n\014execution_id\030\002 \001" - "(\0132*.flyteidl.core.WorkflowExecutionIden" - "tifier\"\237\001\n\027TaskExecutionIdentifier\022*\n\007ta" - "sk_id\030\001 \001(\0132\031.flyteidl.core.Identifier\022A" - "\n\021node_execution_id\030\002 \001(\0132&.flyteidl.cor" - "e.NodeExecutionIdentifier\022\025\n\rretry_attem" - "pt\030\003 \001(\r\"g\n\020SignalIdentifier\022\021\n\tsignal_i" - "d\030\001 \001(\t\022@\n\014execution_id\030\002 \001(\0132*.flyteidl" - ".core.WorkflowExecutionIdentifier*U\n\014Res" - "ourceType\022\017\n\013UNSPECIFIED\020\000\022\010\n\004TASK\020\001\022\014\n\010" - "WORKFLOW\020\002\022\017\n\013LAUNCH_PLAN\020\003\022\013\n\007DATASET\020\004" - "B= 1900 Identifier::Identifier() @@ -291,6 +295,10 @@ Identifier::Identifier(const Identifier& from) if (from.version().size() > 0) { version_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.version_); } + org_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + if (from.org().size() > 0) { + org_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.org_); + } resource_type_ = from.resource_type_; // @@protoc_insertion_point(copy_constructor:flyteidl.core.Identifier) } @@ -302,6 +310,7 @@ void Identifier::SharedCtor() { domain_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); name_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); version_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); resource_type_ = 0; } @@ -315,6 +324,7 @@ void Identifier::SharedDtor() { domain_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); name_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); version_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); } void Identifier::SetCachedSize(int size) const { @@ -336,6 +346,7 @@ void Identifier::Clear() { domain_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); name_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); version_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); resource_type_ = 0; _internal_metadata_.Clear(); } @@ -425,6 +436,22 @@ const char* Identifier::_InternalParse(const char* begin, const char* end, void* ptr += size; break; } + // string org = 6; + case 6: { + if (static_cast<::google::protobuf::uint8>(tag) != 50) goto handle_unusual; + ptr = ::google::protobuf::io::ReadSize(ptr, &size); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + ctx->extra_parse_data().SetFieldName("flyteidl.core.Identifier.org"); + object = msg->mutable_org(); + if (size > end - ptr + ::google::protobuf::internal::ParseContext::kSlopBytes) { + parser_till_end = ::google::protobuf::internal::GreedyStringParserUTF8; + goto string_till_end; + } + GOOGLE_PROTOBUF_PARSER_ASSERT(::google::protobuf::internal::StringCheckUTF8(ptr, size, ctx)); + ::google::protobuf::internal::InlineGreedyStringParser(object, ptr, size, ctx); + ptr += size; + break; + } default: { handle_unusual: if ((tag & 7) == 4 || tag == 0) { @@ -533,6 +560,21 @@ bool Identifier::MergePartialFromCodedStream( break; } + // string org = 6; + case 6: { + if (static_cast< ::google::protobuf::uint8>(tag) == (50 & 0xFF)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadString( + input, this->mutable_org())); + DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::PARSE, + "flyteidl.core.Identifier.org")); + } else { + goto handle_unusual; + } + break; + } + default: { handle_unusual: if (tag == 0) { @@ -606,6 +648,16 @@ void Identifier::SerializeWithCachedSizes( 5, this->version(), output); } + // string org = 6; + if (this->org().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.core.Identifier.org"); + ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( + 6, this->org(), output); + } + if (_internal_metadata_.have_unknown_fields()) { ::google::protobuf::internal::WireFormat::SerializeUnknownFields( _internal_metadata_.unknown_fields(), output); @@ -669,6 +721,17 @@ ::google::protobuf::uint8* Identifier::InternalSerializeWithCachedSizesToArray( 5, this->version(), target); } + // string org = 6; + if (this->org().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.core.Identifier.org"); + target = + ::google::protobuf::internal::WireFormatLite::WriteStringToArray( + 6, this->org(), target); + } + if (_internal_metadata_.have_unknown_fields()) { target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( _internal_metadata_.unknown_fields(), target); @@ -718,6 +781,13 @@ size_t Identifier::ByteSizeLong() const { this->version()); } + // string org = 6; + if (this->org().size() > 0) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::StringSize( + this->org()); + } + // .flyteidl.core.ResourceType resource_type = 1; if (this->resource_type() != 0) { total_size += 1 + @@ -767,6 +837,10 @@ void Identifier::MergeFrom(const Identifier& from) { version_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.version_); } + if (from.org().size() > 0) { + + org_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.org_); + } if (from.resource_type() != 0) { set_resource_type(from.resource_type()); } @@ -805,6 +879,8 @@ void Identifier::InternalSwap(Identifier* other) { GetArenaNoVirtual()); version_.Swap(&other->version_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), GetArenaNoVirtual()); + org_.Swap(&other->org_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), + GetArenaNoVirtual()); swap(resource_type_, other->resource_type_); } @@ -826,6 +902,7 @@ class WorkflowExecutionIdentifier::HasBitSetters { const int WorkflowExecutionIdentifier::kProjectFieldNumber; const int WorkflowExecutionIdentifier::kDomainFieldNumber; const int WorkflowExecutionIdentifier::kNameFieldNumber; +const int WorkflowExecutionIdentifier::kOrgFieldNumber; #endif // !defined(_MSC_VER) || _MSC_VER >= 1900 WorkflowExecutionIdentifier::WorkflowExecutionIdentifier() @@ -849,6 +926,10 @@ WorkflowExecutionIdentifier::WorkflowExecutionIdentifier(const WorkflowExecution if (from.name().size() > 0) { name_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.name_); } + org_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + if (from.org().size() > 0) { + org_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.org_); + } // @@protoc_insertion_point(copy_constructor:flyteidl.core.WorkflowExecutionIdentifier) } @@ -858,6 +939,7 @@ void WorkflowExecutionIdentifier::SharedCtor() { project_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); domain_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); name_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); } WorkflowExecutionIdentifier::~WorkflowExecutionIdentifier() { @@ -869,6 +951,7 @@ void WorkflowExecutionIdentifier::SharedDtor() { project_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); domain_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); name_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); } void WorkflowExecutionIdentifier::SetCachedSize(int size) const { @@ -889,6 +972,7 @@ void WorkflowExecutionIdentifier::Clear() { project_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); domain_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); name_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); _internal_metadata_.Clear(); } @@ -953,6 +1037,22 @@ const char* WorkflowExecutionIdentifier::_InternalParse(const char* begin, const ptr += size; break; } + // string org = 5; + case 5: { + if (static_cast<::google::protobuf::uint8>(tag) != 42) goto handle_unusual; + ptr = ::google::protobuf::io::ReadSize(ptr, &size); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + ctx->extra_parse_data().SetFieldName("flyteidl.core.WorkflowExecutionIdentifier.org"); + object = msg->mutable_org(); + if (size > end - ptr + ::google::protobuf::internal::ParseContext::kSlopBytes) { + parser_till_end = ::google::protobuf::internal::GreedyStringParserUTF8; + goto string_till_end; + } + GOOGLE_PROTOBUF_PARSER_ASSERT(::google::protobuf::internal::StringCheckUTF8(ptr, size, ctx)); + ::google::protobuf::internal::InlineGreedyStringParser(object, ptr, size, ctx); + ptr += size; + break; + } default: { handle_unusual: if ((tag & 7) == 4 || tag == 0) { @@ -1032,6 +1132,21 @@ bool WorkflowExecutionIdentifier::MergePartialFromCodedStream( break; } + // string org = 5; + case 5: { + if (static_cast< ::google::protobuf::uint8>(tag) == (42 & 0xFF)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadString( + input, this->mutable_org())); + DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::PARSE, + "flyteidl.core.WorkflowExecutionIdentifier.org")); + } else { + goto handle_unusual; + } + break; + } + default: { handle_unusual: if (tag == 0) { @@ -1089,6 +1204,16 @@ void WorkflowExecutionIdentifier::SerializeWithCachedSizes( 4, this->name(), output); } + // string org = 5; + if (this->org().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.core.WorkflowExecutionIdentifier.org"); + ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( + 5, this->org(), output); + } + if (_internal_metadata_.have_unknown_fields()) { ::google::protobuf::internal::WireFormat::SerializeUnknownFields( _internal_metadata_.unknown_fields(), output); @@ -1135,6 +1260,17 @@ ::google::protobuf::uint8* WorkflowExecutionIdentifier::InternalSerializeWithCac 4, this->name(), target); } + // string org = 5; + if (this->org().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.core.WorkflowExecutionIdentifier.org"); + target = + ::google::protobuf::internal::WireFormatLite::WriteStringToArray( + 5, this->org(), target); + } + if (_internal_metadata_.have_unknown_fields()) { target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( _internal_metadata_.unknown_fields(), target); @@ -1177,6 +1313,13 @@ size_t WorkflowExecutionIdentifier::ByteSizeLong() const { this->name()); } + // string org = 5; + if (this->org().size() > 0) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::StringSize( + this->org()); + } + int cached_size = ::google::protobuf::internal::ToCachedSize(total_size); SetCachedSize(cached_size); return total_size; @@ -1216,6 +1359,10 @@ void WorkflowExecutionIdentifier::MergeFrom(const WorkflowExecutionIdentifier& f name_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.name_); } + if (from.org().size() > 0) { + + org_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.org_); + } } void WorkflowExecutionIdentifier::CopyFrom(const ::google::protobuf::Message& from) { @@ -1249,6 +1396,8 @@ void WorkflowExecutionIdentifier::InternalSwap(WorkflowExecutionIdentifier* othe GetArenaNoVirtual()); name_.Swap(&other->name_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), GetArenaNoVirtual()); + org_.Swap(&other->org_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), + GetArenaNoVirtual()); } ::google::protobuf::Metadata WorkflowExecutionIdentifier::GetMetadata() const { diff --git a/flyteidl/gen/pb-cpp/flyteidl/core/identifier.pb.h b/flyteidl/gen/pb-cpp/flyteidl/core/identifier.pb.h index d3ee554d5a..efcc339874 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/core/identifier.pb.h +++ b/flyteidl/gen/pb-cpp/flyteidl/core/identifier.pb.h @@ -257,6 +257,20 @@ class Identifier final : ::std::string* release_version(); void set_allocated_version(::std::string* version); + // string org = 6; + void clear_org(); + static const int kOrgFieldNumber = 6; + const ::std::string& org() const; + void set_org(const ::std::string& value); + #if LANG_CXX11 + void set_org(::std::string&& value); + #endif + void set_org(const char* value); + void set_org(const char* value, size_t size); + ::std::string* mutable_org(); + ::std::string* release_org(); + void set_allocated_org(::std::string* org); + // .flyteidl.core.ResourceType resource_type = 1; void clear_resource_type(); static const int kResourceTypeFieldNumber = 1; @@ -272,6 +286,7 @@ class Identifier final : ::google::protobuf::internal::ArenaStringPtr domain_; ::google::protobuf::internal::ArenaStringPtr name_; ::google::protobuf::internal::ArenaStringPtr version_; + ::google::protobuf::internal::ArenaStringPtr org_; int resource_type_; mutable ::google::protobuf::internal::CachedSize _cached_size_; friend struct ::TableStruct_flyteidl_2fcore_2fidentifier_2eproto; @@ -415,6 +430,20 @@ class WorkflowExecutionIdentifier final : ::std::string* release_name(); void set_allocated_name(::std::string* name); + // string org = 5; + void clear_org(); + static const int kOrgFieldNumber = 5; + const ::std::string& org() const; + void set_org(const ::std::string& value); + #if LANG_CXX11 + void set_org(::std::string&& value); + #endif + void set_org(const char* value); + void set_org(const char* value, size_t size); + ::std::string* mutable_org(); + ::std::string* release_org(); + void set_allocated_org(::std::string* org); + // @@protoc_insertion_point(class_scope:flyteidl.core.WorkflowExecutionIdentifier) private: class HasBitSetters; @@ -423,6 +452,7 @@ class WorkflowExecutionIdentifier final : ::google::protobuf::internal::ArenaStringPtr project_; ::google::protobuf::internal::ArenaStringPtr domain_; ::google::protobuf::internal::ArenaStringPtr name_; + ::google::protobuf::internal::ArenaStringPtr org_; mutable ::google::protobuf::internal::CachedSize _cached_size_; friend struct ::TableStruct_flyteidl_2fcore_2fidentifier_2eproto; }; @@ -1055,6 +1085,59 @@ inline void Identifier::set_allocated_version(::std::string* version) { // @@protoc_insertion_point(field_set_allocated:flyteidl.core.Identifier.version) } +// string org = 6; +inline void Identifier::clear_org() { + org_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline const ::std::string& Identifier::org() const { + // @@protoc_insertion_point(field_get:flyteidl.core.Identifier.org) + return org_.GetNoArena(); +} +inline void Identifier::set_org(const ::std::string& value) { + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); + // @@protoc_insertion_point(field_set:flyteidl.core.Identifier.org) +} +#if LANG_CXX11 +inline void Identifier::set_org(::std::string&& value) { + + org_.SetNoArena( + &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); + // @@protoc_insertion_point(field_set_rvalue:flyteidl.core.Identifier.org) +} +#endif +inline void Identifier::set_org(const char* value) { + GOOGLE_DCHECK(value != nullptr); + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); + // @@protoc_insertion_point(field_set_char:flyteidl.core.Identifier.org) +} +inline void Identifier::set_org(const char* value, size_t size) { + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), + ::std::string(reinterpret_cast(value), size)); + // @@protoc_insertion_point(field_set_pointer:flyteidl.core.Identifier.org) +} +inline ::std::string* Identifier::mutable_org() { + + // @@protoc_insertion_point(field_mutable:flyteidl.core.Identifier.org) + return org_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline ::std::string* Identifier::release_org() { + // @@protoc_insertion_point(field_release:flyteidl.core.Identifier.org) + + return org_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline void Identifier::set_allocated_org(::std::string* org) { + if (org != nullptr) { + + } else { + + } + org_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), org); + // @@protoc_insertion_point(field_set_allocated:flyteidl.core.Identifier.org) +} + // ------------------------------------------------------------------- // WorkflowExecutionIdentifier @@ -1218,6 +1301,59 @@ inline void WorkflowExecutionIdentifier::set_allocated_name(::std::string* name) // @@protoc_insertion_point(field_set_allocated:flyteidl.core.WorkflowExecutionIdentifier.name) } +// string org = 5; +inline void WorkflowExecutionIdentifier::clear_org() { + org_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline const ::std::string& WorkflowExecutionIdentifier::org() const { + // @@protoc_insertion_point(field_get:flyteidl.core.WorkflowExecutionIdentifier.org) + return org_.GetNoArena(); +} +inline void WorkflowExecutionIdentifier::set_org(const ::std::string& value) { + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); + // @@protoc_insertion_point(field_set:flyteidl.core.WorkflowExecutionIdentifier.org) +} +#if LANG_CXX11 +inline void WorkflowExecutionIdentifier::set_org(::std::string&& value) { + + org_.SetNoArena( + &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); + // @@protoc_insertion_point(field_set_rvalue:flyteidl.core.WorkflowExecutionIdentifier.org) +} +#endif +inline void WorkflowExecutionIdentifier::set_org(const char* value) { + GOOGLE_DCHECK(value != nullptr); + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); + // @@protoc_insertion_point(field_set_char:flyteidl.core.WorkflowExecutionIdentifier.org) +} +inline void WorkflowExecutionIdentifier::set_org(const char* value, size_t size) { + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), + ::std::string(reinterpret_cast(value), size)); + // @@protoc_insertion_point(field_set_pointer:flyteidl.core.WorkflowExecutionIdentifier.org) +} +inline ::std::string* WorkflowExecutionIdentifier::mutable_org() { + + // @@protoc_insertion_point(field_mutable:flyteidl.core.WorkflowExecutionIdentifier.org) + return org_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline ::std::string* WorkflowExecutionIdentifier::release_org() { + // @@protoc_insertion_point(field_release:flyteidl.core.WorkflowExecutionIdentifier.org) + + return org_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline void WorkflowExecutionIdentifier::set_allocated_org(::std::string* org) { + if (org != nullptr) { + + } else { + + } + org_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), org); + // @@protoc_insertion_point(field_set_allocated:flyteidl.core.WorkflowExecutionIdentifier.org) +} + // ------------------------------------------------------------------- // NodeExecutionIdentifier diff --git a/flyteidl/gen/pb-cpp/flyteidl/datacatalog/datacatalog.pb.cc b/flyteidl/gen/pb-cpp/flyteidl/datacatalog/datacatalog.pb.cc index dbd20da087..1ce63673cb 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/datacatalog/datacatalog.pb.cc +++ b/flyteidl/gen/pb-cpp/flyteidl/datacatalog/datacatalog.pb.cc @@ -200,6 +200,7 @@ class DatasetPropertyFilterDefaultTypeInternal { ::google::protobuf::internal::ArenaStringPtr name_; ::google::protobuf::internal::ArenaStringPtr domain_; ::google::protobuf::internal::ArenaStringPtr version_; + ::google::protobuf::internal::ArenaStringPtr org_; } _DatasetPropertyFilter_default_instance_; class PaginationOptionsDefaultTypeInternal { public: @@ -1000,6 +1001,7 @@ const ::google::protobuf::uint32 TableStruct_flyteidl_2fdatacatalog_2fdatacatalo PROTOBUF_FIELD_OFFSET(::datacatalog::DatasetID, domain_), PROTOBUF_FIELD_OFFSET(::datacatalog::DatasetID, version_), PROTOBUF_FIELD_OFFSET(::datacatalog::DatasetID, uuid_), + PROTOBUF_FIELD_OFFSET(::datacatalog::DatasetID, org_), ~0u, // no _has_bits_ PROTOBUF_FIELD_OFFSET(::datacatalog::Artifact, _internal_metadata_), ~0u, // no _extensions_ @@ -1096,6 +1098,7 @@ const ::google::protobuf::uint32 TableStruct_flyteidl_2fdatacatalog_2fdatacatalo offsetof(::datacatalog::DatasetPropertyFilterDefaultTypeInternal, name_), offsetof(::datacatalog::DatasetPropertyFilterDefaultTypeInternal, domain_), offsetof(::datacatalog::DatasetPropertyFilterDefaultTypeInternal, version_), + offsetof(::datacatalog::DatasetPropertyFilterDefaultTypeInternal, org_), PROTOBUF_FIELD_OFFSET(::datacatalog::DatasetPropertyFilter, property_), ~0u, // no _has_bits_ PROTOBUF_FIELD_OFFSET(::datacatalog::PaginationOptions, _internal_metadata_), @@ -1133,19 +1136,19 @@ static const ::google::protobuf::internal::MigrationSchema schemas[] PROTOBUF_SE { 149, -1, sizeof(::datacatalog::Dataset)}, { 157, -1, sizeof(::datacatalog::Partition)}, { 164, -1, sizeof(::datacatalog::DatasetID)}, - { 174, -1, sizeof(::datacatalog::Artifact)}, - { 186, -1, sizeof(::datacatalog::ArtifactData)}, - { 193, -1, sizeof(::datacatalog::Tag)}, - { 201, 208, sizeof(::datacatalog::Metadata_KeyMapEntry_DoNotUse)}, - { 210, -1, sizeof(::datacatalog::Metadata)}, - { 216, -1, sizeof(::datacatalog::FilterExpression)}, - { 222, -1, sizeof(::datacatalog::SinglePropertyFilter)}, - { 233, -1, sizeof(::datacatalog::ArtifactPropertyFilter)}, - { 240, -1, sizeof(::datacatalog::TagPropertyFilter)}, - { 247, -1, sizeof(::datacatalog::PartitionPropertyFilter)}, - { 254, -1, sizeof(::datacatalog::KeyValuePair)}, - { 261, -1, sizeof(::datacatalog::DatasetPropertyFilter)}, - { 271, -1, sizeof(::datacatalog::PaginationOptions)}, + { 175, -1, sizeof(::datacatalog::Artifact)}, + { 187, -1, sizeof(::datacatalog::ArtifactData)}, + { 194, -1, sizeof(::datacatalog::Tag)}, + { 202, 209, sizeof(::datacatalog::Metadata_KeyMapEntry_DoNotUse)}, + { 211, -1, sizeof(::datacatalog::Metadata)}, + { 217, -1, sizeof(::datacatalog::FilterExpression)}, + { 223, -1, sizeof(::datacatalog::SinglePropertyFilter)}, + { 234, -1, sizeof(::datacatalog::ArtifactPropertyFilter)}, + { 241, -1, sizeof(::datacatalog::TagPropertyFilter)}, + { 248, -1, sizeof(::datacatalog::PartitionPropertyFilter)}, + { 255, -1, sizeof(::datacatalog::KeyValuePair)}, + { 262, -1, sizeof(::datacatalog::DatasetPropertyFilter)}, + { 273, -1, sizeof(::datacatalog::PaginationOptions)}, }; static ::google::protobuf::Message const * const file_default_instances[] = { @@ -1252,78 +1255,79 @@ const char descriptor_table_protodef_flyteidl_2fdatacatalog_2fdatacatalog_2eprot "datacatalog.DatasetID\022\'\n\010metadata\030\002 \001(\0132" "\025.datacatalog.Metadata\022\025\n\rpartitionKeys\030" "\003 \003(\t\"\'\n\tPartition\022\013\n\003key\030\001 \001(\t\022\r\n\005value" - "\030\002 \001(\t\"Y\n\tDatasetID\022\017\n\007project\030\001 \001(\t\022\014\n\004" + "\030\002 \001(\t\"f\n\tDatasetID\022\017\n\007project\030\001 \001(\t\022\014\n\004" "name\030\002 \001(\t\022\016\n\006domain\030\003 \001(\t\022\017\n\007version\030\004 " - "\001(\t\022\014\n\004UUID\030\005 \001(\t\"\215\002\n\010Artifact\022\n\n\002id\030\001 \001" - "(\t\022\'\n\007dataset\030\002 \001(\0132\026.datacatalog.Datase" - "tID\022\'\n\004data\030\003 \003(\0132\031.datacatalog.Artifact" - "Data\022\'\n\010metadata\030\004 \001(\0132\025.datacatalog.Met" - "adata\022*\n\npartitions\030\005 \003(\0132\026.datacatalog." - "Partition\022\036\n\004tags\030\006 \003(\0132\020.datacatalog.Ta" - "g\022.\n\ncreated_at\030\007 \001(\0132\032.google.protobuf." - "Timestamp\"C\n\014ArtifactData\022\014\n\004name\030\001 \001(\t\022" - "%\n\005value\030\002 \001(\0132\026.flyteidl.core.Literal\"Q" - "\n\003Tag\022\014\n\004name\030\001 \001(\t\022\023\n\013artifact_id\030\002 \001(\t" - "\022\'\n\007dataset\030\003 \001(\0132\026.datacatalog.DatasetI" - "D\"m\n\010Metadata\0222\n\007key_map\030\001 \003(\0132!.datacat" - "alog.Metadata.KeyMapEntry\032-\n\013KeyMapEntry" - "\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"F\n\020Filt" - "erExpression\0222\n\007filters\030\001 \003(\0132!.datacata" - "log.SinglePropertyFilter\"\211\003\n\024SinglePrope" - "rtyFilter\0224\n\ntag_filter\030\001 \001(\0132\036.datacata" - "log.TagPropertyFilterH\000\022@\n\020partition_fil" - "ter\030\002 \001(\0132$.datacatalog.PartitionPropert" - "yFilterH\000\022>\n\017artifact_filter\030\003 \001(\0132#.dat" - "acatalog.ArtifactPropertyFilterH\000\022<\n\016dat" - "aset_filter\030\004 \001(\0132\".datacatalog.DatasetP" - "ropertyFilterH\000\022F\n\010operator\030\n \001(\01624.data" - "catalog.SinglePropertyFilter.ComparisonO" - "perator\" \n\022ComparisonOperator\022\n\n\006EQUALS\020" - "\000B\021\n\017property_filter\";\n\026ArtifactProperty" - "Filter\022\025\n\013artifact_id\030\001 \001(\tH\000B\n\n\010propert" - "y\"3\n\021TagPropertyFilter\022\022\n\010tag_name\030\001 \001(\t" - "H\000B\n\n\010property\"S\n\027PartitionPropertyFilte" - "r\022,\n\007key_val\030\001 \001(\0132\031.datacatalog.KeyValu" - "ePairH\000B\n\n\010property\"*\n\014KeyValuePair\022\013\n\003k" - "ey\030\001 \001(\t\022\r\n\005value\030\002 \001(\t\"k\n\025DatasetProper" - "tyFilter\022\021\n\007project\030\001 \001(\tH\000\022\016\n\004name\030\002 \001(" - "\tH\000\022\020\n\006domain\030\003 \001(\tH\000\022\021\n\007version\030\004 \001(\tH\000" - "B\n\n\010property\"\361\001\n\021PaginationOptions\022\r\n\005li" - "mit\030\001 \001(\r\022\r\n\005token\030\002 \001(\t\0227\n\007sortKey\030\003 \001(" - "\0162&.datacatalog.PaginationOptions.SortKe" - "y\022;\n\tsortOrder\030\004 \001(\0162(.datacatalog.Pagin" - "ationOptions.SortOrder\"*\n\tSortOrder\022\016\n\nD" - "ESCENDING\020\000\022\r\n\tASCENDING\020\001\"\034\n\007SortKey\022\021\n" - "\rCREATION_TIME\020\0002\206\007\n\013DataCatalog\022V\n\rCrea" - "teDataset\022!.datacatalog.CreateDatasetReq" - "uest\032\".datacatalog.CreateDatasetResponse" - "\022M\n\nGetDataset\022\036.datacatalog.GetDatasetR" - "equest\032\037.datacatalog.GetDatasetResponse\022" - "Y\n\016CreateArtifact\022\".datacatalog.CreateAr" - "tifactRequest\032#.datacatalog.CreateArtifa" - "ctResponse\022P\n\013GetArtifact\022\037.datacatalog." - "GetArtifactRequest\032 .datacatalog.GetArti" - "factResponse\022A\n\006AddTag\022\032.datacatalog.Add" - "TagRequest\032\033.datacatalog.AddTagResponse\022" - "V\n\rListArtifacts\022!.datacatalog.ListArtif" - "actsRequest\032\".datacatalog.ListArtifactsR" - "esponse\022S\n\014ListDatasets\022 .datacatalog.Li" - "stDatasetsRequest\032!.datacatalog.ListData" - "setsResponse\022Y\n\016UpdateArtifact\022\".datacat" - "alog.UpdateArtifactRequest\032#.datacatalog" - ".UpdateArtifactResponse\022q\n\026GetOrExtendRe" - "servation\022*.datacatalog.GetOrExtendReser" - "vationRequest\032+.datacatalog.GetOrExtendR" - "eservationResponse\022e\n\022ReleaseReservation" - "\022&.datacatalog.ReleaseReservationRequest" - "\032\'.datacatalog.ReleaseReservationRespons" - "eBCZAgithub.com/flyteorg/flyte/flyteidl/" - "gen/pb-go/flyteidl/datacatalogb\006proto3" + "\001(\t\022\014\n\004UUID\030\005 \001(\t\022\013\n\003org\030\006 \001(\t\"\215\002\n\010Artif" + "act\022\n\n\002id\030\001 \001(\t\022\'\n\007dataset\030\002 \001(\0132\026.datac" + "atalog.DatasetID\022\'\n\004data\030\003 \003(\0132\031.datacat" + "alog.ArtifactData\022\'\n\010metadata\030\004 \001(\0132\025.da" + "tacatalog.Metadata\022*\n\npartitions\030\005 \003(\0132\026" + ".datacatalog.Partition\022\036\n\004tags\030\006 \003(\0132\020.d" + "atacatalog.Tag\022.\n\ncreated_at\030\007 \001(\0132\032.goo" + "gle.protobuf.Timestamp\"C\n\014ArtifactData\022\014" + "\n\004name\030\001 \001(\t\022%\n\005value\030\002 \001(\0132\026.flyteidl.c" + "ore.Literal\"Q\n\003Tag\022\014\n\004name\030\001 \001(\t\022\023\n\013arti" + "fact_id\030\002 \001(\t\022\'\n\007dataset\030\003 \001(\0132\026.datacat" + "alog.DatasetID\"m\n\010Metadata\0222\n\007key_map\030\001 " + "\003(\0132!.datacatalog.Metadata.KeyMapEntry\032-" + "\n\013KeyMapEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(" + "\t:\0028\001\"F\n\020FilterExpression\0222\n\007filters\030\001 \003" + "(\0132!.datacatalog.SinglePropertyFilter\"\211\003" + "\n\024SinglePropertyFilter\0224\n\ntag_filter\030\001 \001" + "(\0132\036.datacatalog.TagPropertyFilterH\000\022@\n\020" + "partition_filter\030\002 \001(\0132$.datacatalog.Par" + "titionPropertyFilterH\000\022>\n\017artifact_filte" + "r\030\003 \001(\0132#.datacatalog.ArtifactPropertyFi" + "lterH\000\022<\n\016dataset_filter\030\004 \001(\0132\".datacat" + "alog.DatasetPropertyFilterH\000\022F\n\010operator" + "\030\n \001(\01624.datacatalog.SinglePropertyFilte" + "r.ComparisonOperator\" \n\022ComparisonOperat" + "or\022\n\n\006EQUALS\020\000B\021\n\017property_filter\";\n\026Art" + "ifactPropertyFilter\022\025\n\013artifact_id\030\001 \001(\t" + "H\000B\n\n\010property\"3\n\021TagPropertyFilter\022\022\n\010t" + "ag_name\030\001 \001(\tH\000B\n\n\010property\"S\n\027Partition" + "PropertyFilter\022,\n\007key_val\030\001 \001(\0132\031.dataca" + "talog.KeyValuePairH\000B\n\n\010property\"*\n\014KeyV" + "aluePair\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t\"z\n\025" + "DatasetPropertyFilter\022\021\n\007project\030\001 \001(\tH\000" + "\022\016\n\004name\030\002 \001(\tH\000\022\020\n\006domain\030\003 \001(\tH\000\022\021\n\007ve" + "rsion\030\004 \001(\tH\000\022\r\n\003org\030\005 \001(\tH\000B\n\n\010property" + "\"\361\001\n\021PaginationOptions\022\r\n\005limit\030\001 \001(\r\022\r\n" + "\005token\030\002 \001(\t\0227\n\007sortKey\030\003 \001(\0162&.datacata" + "log.PaginationOptions.SortKey\022;\n\tsortOrd" + "er\030\004 \001(\0162(.datacatalog.PaginationOptions" + ".SortOrder\"*\n\tSortOrder\022\016\n\nDESCENDING\020\000\022" + "\r\n\tASCENDING\020\001\"\034\n\007SortKey\022\021\n\rCREATION_TI" + "ME\020\0002\206\007\n\013DataCatalog\022V\n\rCreateDataset\022!." + "datacatalog.CreateDatasetRequest\032\".datac" + "atalog.CreateDatasetResponse\022M\n\nGetDatas" + "et\022\036.datacatalog.GetDatasetRequest\032\037.dat" + "acatalog.GetDatasetResponse\022Y\n\016CreateArt" + "ifact\022\".datacatalog.CreateArtifactReques" + "t\032#.datacatalog.CreateArtifactResponse\022P" + "\n\013GetArtifact\022\037.datacatalog.GetArtifactR" + "equest\032 .datacatalog.GetArtifactResponse" + "\022A\n\006AddTag\022\032.datacatalog.AddTagRequest\032\033" + ".datacatalog.AddTagResponse\022V\n\rListArtif" + "acts\022!.datacatalog.ListArtifactsRequest\032" + "\".datacatalog.ListArtifactsResponse\022S\n\014L" + "istDatasets\022 .datacatalog.ListDatasetsRe" + "quest\032!.datacatalog.ListDatasetsResponse" + "\022Y\n\016UpdateArtifact\022\".datacatalog.UpdateA" + "rtifactRequest\032#.datacatalog.UpdateArtif" + "actResponse\022q\n\026GetOrExtendReservation\022*." + "datacatalog.GetOrExtendReservationReques" + "t\032+.datacatalog.GetOrExtendReservationRe" + "sponse\022e\n\022ReleaseReservation\022&.datacatal" + "og.ReleaseReservationRequest\032\'.datacatal" + "og.ReleaseReservationResponseBCZAgithub." + "com/flyteorg/flyte/flyteidl/gen/pb-go/fl" + "yteidl/datacatalogb\006proto3" ; ::google::protobuf::internal::DescriptorTable descriptor_table_flyteidl_2fdatacatalog_2fdatacatalog_2eproto = { false, InitDefaults_flyteidl_2fdatacatalog_2fdatacatalog_2eproto, descriptor_table_protodef_flyteidl_2fdatacatalog_2fdatacatalog_2eproto, - "flyteidl/datacatalog/datacatalog.proto", &assign_descriptors_table_flyteidl_2fdatacatalog_2fdatacatalog_2eproto, 4918, + "flyteidl/datacatalog/datacatalog.proto", &assign_descriptors_table_flyteidl_2fdatacatalog_2fdatacatalog_2eproto, 4946, }; void AddDescriptors_flyteidl_2fdatacatalog_2fdatacatalog_2eproto() { @@ -9658,6 +9662,7 @@ const int DatasetID::kNameFieldNumber; const int DatasetID::kDomainFieldNumber; const int DatasetID::kVersionFieldNumber; const int DatasetID::kUUIDFieldNumber; +const int DatasetID::kOrgFieldNumber; #endif // !defined(_MSC_VER) || _MSC_VER >= 1900 DatasetID::DatasetID() @@ -9689,6 +9694,10 @@ DatasetID::DatasetID(const DatasetID& from) if (from.uuid().size() > 0) { uuid_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.uuid_); } + org_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + if (from.org().size() > 0) { + org_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.org_); + } // @@protoc_insertion_point(copy_constructor:datacatalog.DatasetID) } @@ -9700,6 +9709,7 @@ void DatasetID::SharedCtor() { domain_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); version_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); uuid_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); } DatasetID::~DatasetID() { @@ -9713,6 +9723,7 @@ void DatasetID::SharedDtor() { domain_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); version_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); uuid_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); } void DatasetID::SetCachedSize(int size) const { @@ -9735,6 +9746,7 @@ void DatasetID::Clear() { domain_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); version_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); uuid_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); _internal_metadata_.Clear(); } @@ -9831,6 +9843,22 @@ const char* DatasetID::_InternalParse(const char* begin, const char* end, void* ptr += size; break; } + // string org = 6; + case 6: { + if (static_cast<::google::protobuf::uint8>(tag) != 50) goto handle_unusual; + ptr = ::google::protobuf::io::ReadSize(ptr, &size); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + ctx->extra_parse_data().SetFieldName("datacatalog.DatasetID.org"); + object = msg->mutable_org(); + if (size > end - ptr + ::google::protobuf::internal::ParseContext::kSlopBytes) { + parser_till_end = ::google::protobuf::internal::GreedyStringParserUTF8; + goto string_till_end; + } + GOOGLE_PROTOBUF_PARSER_ASSERT(::google::protobuf::internal::StringCheckUTF8(ptr, size, ctx)); + ::google::protobuf::internal::InlineGreedyStringParser(object, ptr, size, ctx); + ptr += size; + break; + } default: { handle_unusual: if ((tag & 7) == 4 || tag == 0) { @@ -9940,6 +9968,21 @@ bool DatasetID::MergePartialFromCodedStream( break; } + // string org = 6; + case 6: { + if (static_cast< ::google::protobuf::uint8>(tag) == (50 & 0xFF)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadString( + input, this->mutable_org())); + DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::PARSE, + "datacatalog.DatasetID.org")); + } else { + goto handle_unusual; + } + break; + } + default: { handle_unusual: if (tag == 0) { @@ -10017,6 +10060,16 @@ void DatasetID::SerializeWithCachedSizes( 5, this->uuid(), output); } + // string org = 6; + if (this->org().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "datacatalog.DatasetID.org"); + ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( + 6, this->org(), output); + } + if (_internal_metadata_.have_unknown_fields()) { ::google::protobuf::internal::WireFormat::SerializeUnknownFields( _internal_metadata_.unknown_fields(), output); @@ -10085,6 +10138,17 @@ ::google::protobuf::uint8* DatasetID::InternalSerializeWithCachedSizesToArray( 5, this->uuid(), target); } + // string org = 6; + if (this->org().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "datacatalog.DatasetID.org"); + target = + ::google::protobuf::internal::WireFormatLite::WriteStringToArray( + 6, this->org(), target); + } + if (_internal_metadata_.have_unknown_fields()) { target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( _internal_metadata_.unknown_fields(), target); @@ -10141,6 +10205,13 @@ size_t DatasetID::ByteSizeLong() const { this->uuid()); } + // string org = 6; + if (this->org().size() > 0) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::StringSize( + this->org()); + } + int cached_size = ::google::protobuf::internal::ToCachedSize(total_size); SetCachedSize(cached_size); return total_size; @@ -10188,6 +10259,10 @@ void DatasetID::MergeFrom(const DatasetID& from) { uuid_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.uuid_); } + if (from.org().size() > 0) { + + org_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.org_); + } } void DatasetID::CopyFrom(const ::google::protobuf::Message& from) { @@ -10225,6 +10300,8 @@ void DatasetID::InternalSwap(DatasetID* other) { GetArenaNoVirtual()); uuid_.Swap(&other->uuid_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), GetArenaNoVirtual()); + org_.Swap(&other->org_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), + GetArenaNoVirtual()); } ::google::protobuf::Metadata DatasetID::GetMetadata() const { @@ -14418,6 +14495,8 @@ void DatasetPropertyFilter::InitAsDefaultInstance() { &::google::protobuf::internal::GetEmptyStringAlreadyInited()); ::datacatalog::_DatasetPropertyFilter_default_instance_.version_.UnsafeSetDefault( &::google::protobuf::internal::GetEmptyStringAlreadyInited()); + ::datacatalog::_DatasetPropertyFilter_default_instance_.org_.UnsafeSetDefault( + &::google::protobuf::internal::GetEmptyStringAlreadyInited()); } class DatasetPropertyFilter::HasBitSetters { public: @@ -14428,6 +14507,7 @@ const int DatasetPropertyFilter::kProjectFieldNumber; const int DatasetPropertyFilter::kNameFieldNumber; const int DatasetPropertyFilter::kDomainFieldNumber; const int DatasetPropertyFilter::kVersionFieldNumber; +const int DatasetPropertyFilter::kOrgFieldNumber; #endif // !defined(_MSC_VER) || _MSC_VER >= 1900 DatasetPropertyFilter::DatasetPropertyFilter() @@ -14457,6 +14537,10 @@ DatasetPropertyFilter::DatasetPropertyFilter(const DatasetPropertyFilter& from) set_version(from.version()); break; } + case kOrg: { + set_org(from.org()); + break; + } case PROPERTY_NOT_SET: { break; } @@ -14509,6 +14593,10 @@ void DatasetPropertyFilter::clear_property() { property_.version_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); break; } + case kOrg: { + property_.org_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + break; + } case PROPERTY_NOT_SET: { break; } @@ -14604,6 +14692,22 @@ const char* DatasetPropertyFilter::_InternalParse(const char* begin, const char* ptr += size; break; } + // string org = 5; + case 5: { + if (static_cast<::google::protobuf::uint8>(tag) != 42) goto handle_unusual; + ptr = ::google::protobuf::io::ReadSize(ptr, &size); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + ctx->extra_parse_data().SetFieldName("datacatalog.DatasetPropertyFilter.org"); + object = msg->mutable_org(); + if (size > end - ptr + ::google::protobuf::internal::ParseContext::kSlopBytes) { + parser_till_end = ::google::protobuf::internal::GreedyStringParserUTF8; + goto string_till_end; + } + GOOGLE_PROTOBUF_PARSER_ASSERT(::google::protobuf::internal::StringCheckUTF8(ptr, size, ctx)); + ::google::protobuf::internal::InlineGreedyStringParser(object, ptr, size, ctx); + ptr += size; + break; + } default: { handle_unusual: if ((tag & 7) == 4 || tag == 0) { @@ -14698,6 +14802,21 @@ bool DatasetPropertyFilter::MergePartialFromCodedStream( break; } + // string org = 5; + case 5: { + if (static_cast< ::google::protobuf::uint8>(tag) == (42 & 0xFF)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadString( + input, this->mutable_org())); + DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::PARSE, + "datacatalog.DatasetPropertyFilter.org")); + } else { + goto handle_unusual; + } + break; + } + default: { handle_unusual: if (tag == 0) { @@ -14765,6 +14884,16 @@ void DatasetPropertyFilter::SerializeWithCachedSizes( 4, this->version(), output); } + // string org = 5; + if (has_org()) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "datacatalog.DatasetPropertyFilter.org"); + ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( + 5, this->org(), output); + } + if (_internal_metadata_.have_unknown_fields()) { ::google::protobuf::internal::WireFormat::SerializeUnknownFields( _internal_metadata_.unknown_fields(), output); @@ -14822,6 +14951,17 @@ ::google::protobuf::uint8* DatasetPropertyFilter::InternalSerializeWithCachedSiz 4, this->version(), target); } + // string org = 5; + if (has_org()) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "datacatalog.DatasetPropertyFilter.org"); + target = + ::google::protobuf::internal::WireFormatLite::WriteStringToArray( + 5, this->org(), target); + } + if (_internal_metadata_.have_unknown_fields()) { target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( _internal_metadata_.unknown_fields(), target); @@ -14872,6 +15012,13 @@ size_t DatasetPropertyFilter::ByteSizeLong() const { this->version()); break; } + // string org = 5; + case kOrg: { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::StringSize( + this->org()); + break; + } case PROPERTY_NOT_SET: { break; } @@ -14920,6 +15067,10 @@ void DatasetPropertyFilter::MergeFrom(const DatasetPropertyFilter& from) { set_version(from.version()); break; } + case kOrg: { + set_org(from.org()); + break; + } case PROPERTY_NOT_SET: { break; } diff --git a/flyteidl/gen/pb-cpp/flyteidl/datacatalog/datacatalog.pb.h b/flyteidl/gen/pb-cpp/flyteidl/datacatalog/datacatalog.pb.h index da52d149e1..27a69c19e7 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/datacatalog/datacatalog.pb.h +++ b/flyteidl/gen/pb-cpp/flyteidl/datacatalog/datacatalog.pb.h @@ -3518,6 +3518,20 @@ class DatasetID final : ::std::string* release_uuid(); void set_allocated_uuid(::std::string* uuid); + // string org = 6; + void clear_org(); + static const int kOrgFieldNumber = 6; + const ::std::string& org() const; + void set_org(const ::std::string& value); + #if LANG_CXX11 + void set_org(::std::string&& value); + #endif + void set_org(const char* value); + void set_org(const char* value, size_t size); + ::std::string* mutable_org(); + ::std::string* release_org(); + void set_allocated_org(::std::string* org); + // @@protoc_insertion_point(class_scope:datacatalog.DatasetID) private: class HasBitSetters; @@ -3528,6 +3542,7 @@ class DatasetID final : ::google::protobuf::internal::ArenaStringPtr domain_; ::google::protobuf::internal::ArenaStringPtr version_; ::google::protobuf::internal::ArenaStringPtr uuid_; + ::google::protobuf::internal::ArenaStringPtr org_; mutable ::google::protobuf::internal::CachedSize _cached_size_; friend struct ::TableStruct_flyteidl_2fdatacatalog_2fdatacatalog_2eproto; }; @@ -5039,6 +5054,7 @@ class DatasetPropertyFilter final : kName = 2, kDomain = 3, kVersion = 4, + kOrg = 5, PROPERTY_NOT_SET = 0, }; @@ -5173,6 +5189,23 @@ class DatasetPropertyFilter final : ::std::string* release_version(); void set_allocated_version(::std::string* version); + // string org = 5; + private: + bool has_org() const; + public: + void clear_org(); + static const int kOrgFieldNumber = 5; + const ::std::string& org() const; + void set_org(const ::std::string& value); + #if LANG_CXX11 + void set_org(::std::string&& value); + #endif + void set_org(const char* value); + void set_org(const char* value, size_t size); + ::std::string* mutable_org(); + ::std::string* release_org(); + void set_allocated_org(::std::string* org); + void clear_property(); PropertyCase property_case() const; // @@protoc_insertion_point(class_scope:datacatalog.DatasetPropertyFilter) @@ -5182,6 +5215,7 @@ class DatasetPropertyFilter final : void set_has_name(); void set_has_domain(); void set_has_version(); + void set_has_org(); inline bool has_property() const; inline void clear_has_property(); @@ -5193,6 +5227,7 @@ class DatasetPropertyFilter final : ::google::protobuf::internal::ArenaStringPtr name_; ::google::protobuf::internal::ArenaStringPtr domain_; ::google::protobuf::internal::ArenaStringPtr version_; + ::google::protobuf::internal::ArenaStringPtr org_; } property_; mutable ::google::protobuf::internal::CachedSize _cached_size_; ::google::protobuf::uint32 _oneof_case_[1]; @@ -8044,6 +8079,59 @@ inline void DatasetID::set_allocated_uuid(::std::string* uuid) { // @@protoc_insertion_point(field_set_allocated:datacatalog.DatasetID.UUID) } +// string org = 6; +inline void DatasetID::clear_org() { + org_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline const ::std::string& DatasetID::org() const { + // @@protoc_insertion_point(field_get:datacatalog.DatasetID.org) + return org_.GetNoArena(); +} +inline void DatasetID::set_org(const ::std::string& value) { + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); + // @@protoc_insertion_point(field_set:datacatalog.DatasetID.org) +} +#if LANG_CXX11 +inline void DatasetID::set_org(::std::string&& value) { + + org_.SetNoArena( + &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); + // @@protoc_insertion_point(field_set_rvalue:datacatalog.DatasetID.org) +} +#endif +inline void DatasetID::set_org(const char* value) { + GOOGLE_DCHECK(value != nullptr); + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); + // @@protoc_insertion_point(field_set_char:datacatalog.DatasetID.org) +} +inline void DatasetID::set_org(const char* value, size_t size) { + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), + ::std::string(reinterpret_cast(value), size)); + // @@protoc_insertion_point(field_set_pointer:datacatalog.DatasetID.org) +} +inline ::std::string* DatasetID::mutable_org() { + + // @@protoc_insertion_point(field_mutable:datacatalog.DatasetID.org) + return org_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline ::std::string* DatasetID::release_org() { + // @@protoc_insertion_point(field_release:datacatalog.DatasetID.org) + + return org_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline void DatasetID::set_allocated_org(::std::string* org) { + if (org != nullptr) { + + } else { + + } + org_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), org); + // @@protoc_insertion_point(field_set_allocated:datacatalog.DatasetID.org) +} + // ------------------------------------------------------------------- // Artifact @@ -9597,6 +9685,98 @@ inline void DatasetPropertyFilter::set_allocated_version(::std::string* version) // @@protoc_insertion_point(field_set_allocated:datacatalog.DatasetPropertyFilter.version) } +// string org = 5; +inline bool DatasetPropertyFilter::has_org() const { + return property_case() == kOrg; +} +inline void DatasetPropertyFilter::set_has_org() { + _oneof_case_[0] = kOrg; +} +inline void DatasetPropertyFilter::clear_org() { + if (has_org()) { + property_.org_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + clear_has_property(); + } +} +inline const ::std::string& DatasetPropertyFilter::org() const { + // @@protoc_insertion_point(field_get:datacatalog.DatasetPropertyFilter.org) + if (has_org()) { + return property_.org_.GetNoArena(); + } + return *&::google::protobuf::internal::GetEmptyStringAlreadyInited(); +} +inline void DatasetPropertyFilter::set_org(const ::std::string& value) { + // @@protoc_insertion_point(field_set:datacatalog.DatasetPropertyFilter.org) + if (!has_org()) { + clear_property(); + set_has_org(); + property_.org_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + property_.org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); + // @@protoc_insertion_point(field_set:datacatalog.DatasetPropertyFilter.org) +} +#if LANG_CXX11 +inline void DatasetPropertyFilter::set_org(::std::string&& value) { + // @@protoc_insertion_point(field_set:datacatalog.DatasetPropertyFilter.org) + if (!has_org()) { + clear_property(); + set_has_org(); + property_.org_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + property_.org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); + // @@protoc_insertion_point(field_set_rvalue:datacatalog.DatasetPropertyFilter.org) +} +#endif +inline void DatasetPropertyFilter::set_org(const char* value) { + GOOGLE_DCHECK(value != nullptr); + if (!has_org()) { + clear_property(); + set_has_org(); + property_.org_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + property_.org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), + ::std::string(value)); + // @@protoc_insertion_point(field_set_char:datacatalog.DatasetPropertyFilter.org) +} +inline void DatasetPropertyFilter::set_org(const char* value, size_t size) { + if (!has_org()) { + clear_property(); + set_has_org(); + property_.org_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + property_.org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string( + reinterpret_cast(value), size)); + // @@protoc_insertion_point(field_set_pointer:datacatalog.DatasetPropertyFilter.org) +} +inline ::std::string* DatasetPropertyFilter::mutable_org() { + if (!has_org()) { + clear_property(); + set_has_org(); + property_.org_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + // @@protoc_insertion_point(field_mutable:datacatalog.DatasetPropertyFilter.org) + return property_.org_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline ::std::string* DatasetPropertyFilter::release_org() { + // @@protoc_insertion_point(field_release:datacatalog.DatasetPropertyFilter.org) + if (has_org()) { + clear_has_property(); + return property_.org_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } else { + return nullptr; + } +} +inline void DatasetPropertyFilter::set_allocated_org(::std::string* org) { + if (has_property()) { + clear_property(); + } + if (org != nullptr) { + set_has_org(); + property_.org_.UnsafeSetDefault(org); + } + // @@protoc_insertion_point(field_set_allocated:datacatalog.DatasetPropertyFilter.org) +} + inline bool DatasetPropertyFilter::has_property() const { return property_case() != PROPERTY_NOT_SET; } diff --git a/flyteidl/gen/pb-cpp/flyteidl/service/admin.grpc.pb.h b/flyteidl/gen/pb-cpp/flyteidl/service/admin.grpc.pb.h index 77f3dc1487..830119f9ad 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/service/admin.grpc.pb.h +++ b/flyteidl/gen/pb-cpp/flyteidl/service/admin.grpc.pb.h @@ -66,7 +66,7 @@ class AdminService final { std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::admin::Task>> PrepareAsyncGetTask(::grpc::ClientContext* context, const ::flyteidl::admin::ObjectGetRequest& request, ::grpc::CompletionQueue* cq) { return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::admin::Task>>(PrepareAsyncGetTaskRaw(context, request, cq)); } - // Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of task objects. + // Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of task objects. virtual ::grpc::Status ListTaskIds(::grpc::ClientContext* context, const ::flyteidl::admin::NamedEntityIdentifierListRequest& request, ::flyteidl::admin::NamedEntityIdentifierList* response) = 0; std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::admin::NamedEntityIdentifierList>> AsyncListTaskIds(::grpc::ClientContext* context, const ::flyteidl::admin::NamedEntityIdentifierListRequest& request, ::grpc::CompletionQueue* cq) { return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::admin::NamedEntityIdentifierList>>(AsyncListTaskIdsRaw(context, request, cq)); @@ -278,7 +278,7 @@ class AdminService final { std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::admin::ProjectRegisterResponse>> PrepareAsyncRegisterProject(::grpc::ClientContext* context, const ::flyteidl::admin::ProjectRegisterRequest& request, ::grpc::CompletionQueue* cq) { return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::admin::ProjectRegisterResponse>>(PrepareAsyncRegisterProjectRaw(context, request, cq)); } - // Updates an existing :ref:`ref_flyteidl.admin.Project` + // Updates an existing :ref:`ref_flyteidl.admin.Project` // flyteidl.admin.Project should be passed but the domains property should be empty; // it will be ignored in the handler as domains cannot be updated via this API. virtual ::grpc::Status UpdateProject(::grpc::ClientContext* context, const ::flyteidl::admin::Project& request, ::flyteidl::admin::ProjectUpdateResponse* response) = 0; @@ -288,7 +288,7 @@ class AdminService final { std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::admin::ProjectUpdateResponse>> PrepareAsyncUpdateProject(::grpc::ClientContext* context, const ::flyteidl::admin::Project& request, ::grpc::CompletionQueue* cq) { return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::admin::ProjectUpdateResponse>>(PrepareAsyncUpdateProjectRaw(context, request, cq)); } - // Fetches a list of :ref:`ref_flyteidl.admin.Project` + // Fetches a list of :ref:`ref_flyteidl.admin.Project` virtual ::grpc::Status ListProjects(::grpc::ClientContext* context, const ::flyteidl::admin::ProjectListRequest& request, ::flyteidl::admin::Projects* response) = 0; std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::admin::Projects>> AsyncListProjects(::grpc::ClientContext* context, const ::flyteidl::admin::ProjectListRequest& request, ::grpc::CompletionQueue* cq) { return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::flyteidl::admin::Projects>>(AsyncListProjectsRaw(context, request, cq)); @@ -492,7 +492,7 @@ class AdminService final { virtual void GetTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::Task* response, std::function) = 0; virtual void GetTask(::grpc::ClientContext* context, const ::flyteidl::admin::ObjectGetRequest* request, ::flyteidl::admin::Task* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0; virtual void GetTask(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::Task* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0; - // Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of task objects. + // Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of task objects. virtual void ListTaskIds(::grpc::ClientContext* context, const ::flyteidl::admin::NamedEntityIdentifierListRequest* request, ::flyteidl::admin::NamedEntityIdentifierList* response, std::function) = 0; virtual void ListTaskIds(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::NamedEntityIdentifierList* response, std::function) = 0; virtual void ListTaskIds(::grpc::ClientContext* context, const ::flyteidl::admin::NamedEntityIdentifierListRequest* request, ::flyteidl::admin::NamedEntityIdentifierList* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0; @@ -626,14 +626,14 @@ class AdminService final { virtual void RegisterProject(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::ProjectRegisterResponse* response, std::function) = 0; virtual void RegisterProject(::grpc::ClientContext* context, const ::flyteidl::admin::ProjectRegisterRequest* request, ::flyteidl::admin::ProjectRegisterResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0; virtual void RegisterProject(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::ProjectRegisterResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0; - // Updates an existing :ref:`ref_flyteidl.admin.Project` + // Updates an existing :ref:`ref_flyteidl.admin.Project` // flyteidl.admin.Project should be passed but the domains property should be empty; // it will be ignored in the handler as domains cannot be updated via this API. virtual void UpdateProject(::grpc::ClientContext* context, const ::flyteidl::admin::Project* request, ::flyteidl::admin::ProjectUpdateResponse* response, std::function) = 0; virtual void UpdateProject(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::ProjectUpdateResponse* response, std::function) = 0; virtual void UpdateProject(::grpc::ClientContext* context, const ::flyteidl::admin::Project* request, ::flyteidl::admin::ProjectUpdateResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0; virtual void UpdateProject(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::ProjectUpdateResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0; - // Fetches a list of :ref:`ref_flyteidl.admin.Project` + // Fetches a list of :ref:`ref_flyteidl.admin.Project` virtual void ListProjects(::grpc::ClientContext* context, const ::flyteidl::admin::ProjectListRequest* request, ::flyteidl::admin::Projects* response, std::function) = 0; virtual void ListProjects(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::flyteidl::admin::Projects* response, std::function) = 0; virtual void ListProjects(::grpc::ClientContext* context, const ::flyteidl::admin::ProjectListRequest* request, ::flyteidl::admin::Projects* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0; @@ -1632,7 +1632,7 @@ class AdminService final { virtual ::grpc::Status CreateTask(::grpc::ServerContext* context, const ::flyteidl::admin::TaskCreateRequest* request, ::flyteidl::admin::TaskCreateResponse* response); // Fetch a :ref:`ref_flyteidl.admin.Task` definition. virtual ::grpc::Status GetTask(::grpc::ServerContext* context, const ::flyteidl::admin::ObjectGetRequest* request, ::flyteidl::admin::Task* response); - // Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of task objects. + // Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of task objects. virtual ::grpc::Status ListTaskIds(::grpc::ServerContext* context, const ::flyteidl::admin::NamedEntityIdentifierListRequest* request, ::flyteidl::admin::NamedEntityIdentifierList* response); // Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions. virtual ::grpc::Status ListTasks(::grpc::ServerContext* context, const ::flyteidl::admin::ResourceListRequest* request, ::flyteidl::admin::TaskList* response); @@ -1688,11 +1688,11 @@ class AdminService final { virtual ::grpc::Status GetNodeExecutionData(::grpc::ServerContext* context, const ::flyteidl::admin::NodeExecutionGetDataRequest* request, ::flyteidl::admin::NodeExecutionGetDataResponse* response); // Registers a :ref:`ref_flyteidl.admin.Project` with the Flyte deployment. virtual ::grpc::Status RegisterProject(::grpc::ServerContext* context, const ::flyteidl::admin::ProjectRegisterRequest* request, ::flyteidl::admin::ProjectRegisterResponse* response); - // Updates an existing :ref:`ref_flyteidl.admin.Project` + // Updates an existing :ref:`ref_flyteidl.admin.Project` // flyteidl.admin.Project should be passed but the domains property should be empty; // it will be ignored in the handler as domains cannot be updated via this API. virtual ::grpc::Status UpdateProject(::grpc::ServerContext* context, const ::flyteidl::admin::Project* request, ::flyteidl::admin::ProjectUpdateResponse* response); - // Fetches a list of :ref:`ref_flyteidl.admin.Project` + // Fetches a list of :ref:`ref_flyteidl.admin.Project` virtual ::grpc::Status ListProjects(::grpc::ServerContext* context, const ::flyteidl::admin::ProjectListRequest* request, ::flyteidl::admin::Projects* response); // Indicates a :ref:`ref_flyteidl.event.WorkflowExecutionEvent` has occurred. virtual ::grpc::Status CreateWorkflowEvent(::grpc::ServerContext* context, const ::flyteidl::admin::WorkflowExecutionEventRequest* request, ::flyteidl::admin::WorkflowExecutionEventResponse* response); diff --git a/flyteidl/gen/pb-cpp/flyteidl/service/admin.pb.cc b/flyteidl/gen/pb-cpp/flyteidl/service/admin.pb.cc index 991c8bb312..54b3861c05 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/service/admin.pb.cc +++ b/flyteidl/gen/pb-cpp/flyteidl/service/admin.pb.cc @@ -52,263 +52,376 @@ const char descriptor_table_protodef_flyteidl_2fservice_2fadmin_2eproto[] = "admin/task_execution.proto\032\034flyteidl/adm" "in/version.proto\032\033flyteidl/admin/common." "proto\032\'flyteidl/admin/description_entity" - ".proto2\204N\n\014AdminService\022m\n\nCreateTask\022!." + ".proto2\265q\n\014AdminService\022m\n\nCreateTask\022!." "flyteidl.admin.TaskCreateRequest\032\".flyte" "idl.admin.TaskCreateResponse\"\030\202\323\344\223\002\022\"\r/a" - "pi/v1/tasks:\001*\022\210\001\n\007GetTask\022 .flyteidl.ad" + "pi/v1/tasks:\001*\022\330\001\n\007GetTask\022 .flyteidl.ad" "min.ObjectGetRequest\032\024.flyteidl.admin.Ta" - "sk\"E\202\323\344\223\002\?\022=/api/v1/tasks/{id.project}/{" - "id.domain}/{id.name}/{id.version}\022\227\001\n\013Li" + "sk\"\224\001\202\323\344\223\002\215\001\022=/api/v1/tasks/{id.project}" + "/{id.domain}/{id.name}/{id.version}ZL\022J/" + "api/v1/tasks/org/{id.org}/{id.project}/{" + "id.domain}/{id.name}/{id.version}\022\305\001\n\013Li" "stTaskIds\0220.flyteidl.admin.NamedEntityId" "entifierListRequest\032).flyteidl.admin.Nam" - "edEntityIdentifierList\"+\202\323\344\223\002%\022#/api/v1/" - "task_ids/{project}/{domain}\022\256\001\n\tListTask" - "s\022#.flyteidl.admin.ResourceListRequest\032\030" - ".flyteidl.admin.TaskList\"b\202\323\344\223\002\\\0220/api/v" - "1/tasks/{id.project}/{id.domain}/{id.nam" - "e}Z(\022&/api/v1/tasks/{id.project}/{id.dom" - "ain}\022}\n\016CreateWorkflow\022%.flyteidl.admin." - "WorkflowCreateRequest\032&.flyteidl.admin.W" - "orkflowCreateResponse\"\034\202\323\344\223\002\026\"\021/api/v1/w" - "orkflows:\001*\022\224\001\n\013GetWorkflow\022 .flyteidl.a" - "dmin.ObjectGetRequest\032\030.flyteidl.admin.W" - "orkflow\"I\202\323\344\223\002C\022A/api/v1/workflows/{id.p" - "roject}/{id.domain}/{id.name}/{id.versio" - "n}\022\237\001\n\017ListWorkflowIds\0220.flyteidl.admin." - "NamedEntityIdentifierListRequest\032).flyte" - "idl.admin.NamedEntityIdentifierList\"/\202\323\344" - "\223\002)\022\'/api/v1/workflow_ids/{project}/{dom" - "ain}\022\276\001\n\rListWorkflows\022#.flyteidl.admin." - "ResourceListRequest\032\034.flyteidl.admin.Wor" - "kflowList\"j\202\323\344\223\002d\0224/api/v1/workflows/{id" - ".project}/{id.domain}/{id.name}Z,\022*/api/" - "v1/workflows/{id.project}/{id.domain}\022\206\001" - "\n\020CreateLaunchPlan\022\'.flyteidl.admin.Laun" - "chPlanCreateRequest\032(.flyteidl.admin.Lau" - "nchPlanCreateResponse\"\037\202\323\344\223\002\031\"\024/api/v1/l" - "aunch_plans:\001*\022\233\001\n\rGetLaunchPlan\022 .flyte" - "idl.admin.ObjectGetRequest\032\032.flyteidl.ad" - "min.LaunchPlan\"L\202\323\344\223\002F\022D/api/v1/launch_p" - "lans/{id.project}/{id.domain}/{id.name}/" - "{id.version}\022\242\001\n\023GetActiveLaunchPlan\022\'.f" - "lyteidl.admin.ActiveLaunchPlanRequest\032\032." - "flyteidl.admin.LaunchPlan\"F\202\323\344\223\002@\022>/api/" - "v1/active_launch_plans/{id.project}/{id." + "edEntityIdentifierList\"Y\202\323\344\223\002S\022#/api/v1/" + "task_ids/{project}/{domain}Z,\022*/api/v1/t" + "asks/org/{org}/{project}/{domain}\022\250\002\n\tLi" + "stTasks\022#.flyteidl.admin.ResourceListReq" + "uest\032\030.flyteidl.admin.TaskList\"\333\001\202\323\344\223\002\324\001" + "\0220/api/v1/tasks/{id.project}/{id.domain}" + "/{id.name}Z\?\022=/api/v1/tasks/org/{id.org}" + "/{id.project}/{id.domain}/{id.name}Z(\022&/" + "api/v1/tasks/{id.project}/{id.domain}Z5\022" + "3/api/v1/tasks/org/{id.org}/{id.project}" + "/{id.domain}\022}\n\016CreateWorkflow\022%.flyteid" + "l.admin.WorkflowCreateRequest\032&.flyteidl" + ".admin.WorkflowCreateResponse\"\034\202\323\344\223\002\026\"\021/" + "api/v1/workflows:\001*\022\350\001\n\013GetWorkflow\022 .fl" + "yteidl.admin.ObjectGetRequest\032\030.flyteidl" + ".admin.Workflow\"\234\001\202\323\344\223\002\225\001\022A/api/v1/workf" + "lows/{id.project}/{id.domain}/{id.name}/" + "{id.version}ZP\022N/api/v1/workflows/org/{i" + "d.org}/{id.project}/{id.domain}/{id.name" + "}/{id.version}\022\321\001\n\017ListWorkflowIds\0220.fly" + "teidl.admin.NamedEntityIdentifierListReq" + "uest\032).flyteidl.admin.NamedEntityIdentif" + "ierList\"a\202\323\344\223\002[\022\'/api/v1/workflow_ids/{p" + "roject}/{domain}Z0\022./api/v1/workflows/or" + "g/{org}/{project}/{domain}\022\300\002\n\rListWorkf" + "lows\022#.flyteidl.admin.ResourceListReques" + "t\032\034.flyteidl.admin.WorkflowList\"\353\001\202\323\344\223\002\344" + "\001\0224/api/v1/workflows/{id.project}/{id.do" + "main}/{id.name}ZC\022A/api/v1/workflows/org" + "/{id.org}/{id.project}/{id.domain}/{id.n" + "ame}Z,\022*/api/v1/workflows/{id.project}/{" + "id.domain}Z9\0227/api/v1/workflows/org/{id." + "org}/{id.project}/{id.domain}\022\206\001\n\020Create" + "LaunchPlan\022\'.flyteidl.admin.LaunchPlanCr" + "eateRequest\032(.flyteidl.admin.LaunchPlanC" + "reateResponse\"\037\202\323\344\223\002\031\"\024/api/v1/launch_pl" + "ans:\001*\022\362\001\n\rGetLaunchPlan\022 .flyteidl.admi" + "n.ObjectGetRequest\032\032.flyteidl.admin.Laun" + "chPlan\"\242\001\202\323\344\223\002\233\001\022D/api/v1/launch_plans/{" + "id.project}/{id.domain}/{id.name}/{id.ve" + "rsion}ZS\022Q/api/v1/launch_plans/org/{id.o" + "rg}/{id.project}/{id.domain}/{id.name}/{" + "id.version}\022\363\001\n\023GetActiveLaunchPlan\022\'.fl" + "yteidl.admin.ActiveLaunchPlanRequest\032\032.f" + "lyteidl.admin.LaunchPlan\"\226\001\202\323\344\223\002\217\001\022>/api" + "/v1/active_launch_plans/{id.project}/{id" + ".domain}/{id.name}ZM\022K/api/v1/active_lau" + "nch_plans/org/{id.org}/{id.project}/{id." "domain}/{id.name}\022\234\001\n\025ListActiveLaunchPl" "ans\022+.flyteidl.admin.ActiveLaunchPlanLis" "tRequest\032\036.flyteidl.admin.LaunchPlanList" "\"6\202\323\344\223\0020\022./api/v1/active_launch_plans/{p" - "roject}/{domain}\022\244\001\n\021ListLaunchPlanIds\0220" + "roject}/{domain}\022\334\001\n\021ListLaunchPlanIds\0220" ".flyteidl.admin.NamedEntityIdentifierLis" "tRequest\032).flyteidl.admin.NamedEntityIde" - "ntifierList\"2\202\323\344\223\002,\022*/api/v1/launch_plan" - "_ids/{project}/{domain}\022\310\001\n\017ListLaunchPl" - "ans\022#.flyteidl.admin.ResourceListRequest" - "\032\036.flyteidl.admin.LaunchPlanList\"p\202\323\344\223\002j" - "\0227/api/v1/launch_plans/{id.project}/{id." - "domain}/{id.name}Z/\022-/api/v1/launch_plan" - "s/{id.project}/{id.domain}\022\266\001\n\020UpdateLau" - "nchPlan\022\'.flyteidl.admin.LaunchPlanUpdat" - "eRequest\032(.flyteidl.admin.LaunchPlanUpda" - "teResponse\"O\202\323\344\223\002I\032D/api/v1/launch_plans" - "/{id.project}/{id.domain}/{id.name}/{id." - "version}:\001*\022\201\001\n\017CreateExecution\022&.flytei" - "dl.admin.ExecutionCreateRequest\032\'.flytei" - "dl.admin.ExecutionCreateResponse\"\035\202\323\344\223\002\027" - "\"\022/api/v1/executions:\001*\022\216\001\n\021RelaunchExec" - "ution\022(.flyteidl.admin.ExecutionRelaunch" - "Request\032\'.flyteidl.admin.ExecutionCreate" - "Response\"&\202\323\344\223\002 \"\033/api/v1/executions/rel" - "aunch:\001*\022\213\001\n\020RecoverExecution\022\'.flyteidl" - ".admin.ExecutionRecoverRequest\032\'.flyteid" - "l.admin.ExecutionCreateResponse\"%\202\323\344\223\002\037\"" - "\032/api/v1/executions/recover:\001*\022\225\001\n\014GetEx" - "ecution\022+.flyteidl.admin.WorkflowExecuti" - "onGetRequest\032\031.flyteidl.admin.Execution\"" - "=\202\323\344\223\0027\0225/api/v1/executions/{id.project}" - "/{id.domain}/{id.name}\022\244\001\n\017UpdateExecuti" - "on\022&.flyteidl.admin.ExecutionUpdateReque" - "st\032\'.flyteidl.admin.ExecutionUpdateRespo" - "nse\"@\202\323\344\223\002:\0325/api/v1/executions/{id.proj" - "ect}/{id.domain}/{id.name}:\001*\022\271\001\n\020GetExe" - "cutionData\022/.flyteidl.admin.WorkflowExec" - "utionGetDataRequest\0320.flyteidl.admin.Wor" - "kflowExecutionGetDataResponse\"B\202\323\344\223\002<\022:/" - "api/v1/data/executions/{id.project}/{id." - "domain}/{id.name}\022\211\001\n\016ListExecutions\022#.f" - "lyteidl.admin.ResourceListRequest\032\035.flyt" - "eidl.admin.ExecutionList\"3\202\323\344\223\002-\022+/api/v" - "1/executions/{id.project}/{id.domain}\022\255\001" - "\n\022TerminateExecution\022).flyteidl.admin.Ex" - "ecutionTerminateRequest\032*.flyteidl.admin" - ".ExecutionTerminateResponse\"@\202\323\344\223\002:*5/ap" - "i/v1/executions/{id.project}/{id.domain}" - "/{id.name}:\001*\022\322\001\n\020GetNodeExecution\022\'.fly" - "teidl.admin.NodeExecutionGetRequest\032\035.fl" - "yteidl.admin.NodeExecution\"v\202\323\344\223\002p\022n/api" - "/v1/node_executions/{id.execution_id.pro" - "ject}/{id.execution_id.domain}/{id.execu" - "tion_id.name}/{id.node_id}\022\336\001\n\022ListNodeE" - "xecutions\022(.flyteidl.admin.NodeExecution" - "ListRequest\032!.flyteidl.admin.NodeExecuti" - "onList\"{\202\323\344\223\002u\022s/api/v1/node_executions/" - "{workflow_execution_id.project}/{workflo" - "w_execution_id.domain}/{workflow_executi" - "on_id.name}\022\245\004\n\031ListNodeExecutionsForTas" - "k\022/.flyteidl.admin.NodeExecutionForTaskL" - "istRequest\032!.flyteidl.admin.NodeExecutio" - "nList\"\263\003\202\323\344\223\002\254\003\022\251\003/api/v1/children/task_" - "executions/{task_execution_id.node_execu" - "tion_id.execution_id.project}/{task_exec" - "ution_id.node_execution_id.execution_id." - "domain}/{task_execution_id.node_executio" - "n_id.execution_id.name}/{task_execution_" - "id.node_execution_id.node_id}/{task_exec" - "ution_id.task_id.project}/{task_executio" - "n_id.task_id.domain}/{task_execution_id." - "task_id.name}/{task_execution_id.task_id" - ".version}/{task_execution_id.retry_attem" - "pt}\022\356\001\n\024GetNodeExecutionData\022+.flyteidl." - "admin.NodeExecutionGetDataRequest\032,.flyt" - "eidl.admin.NodeExecutionGetDataResponse\"" - "{\202\323\344\223\002u\022s/api/v1/data/node_executions/{i" - "d.execution_id.project}/{id.execution_id" - ".domain}/{id.execution_id.name}/{id.node" - "_id}\022\177\n\017RegisterProject\022&.flyteidl.admin" - ".ProjectRegisterRequest\032\'.flyteidl.admin" - ".ProjectRegisterResponse\"\033\202\323\344\223\002\025\"\020/api/v" - "1/projects:\001*\022q\n\rUpdateProject\022\027.flyteid" - "l.admin.Project\032%.flyteidl.admin.Project" - "UpdateResponse\" \202\323\344\223\002\032\032\025/api/v1/projects" - "/{id}:\001*\022f\n\014ListProjects\022\".flyteidl.admi" - "n.ProjectListRequest\032\030.flyteidl.admin.Pr" - "ojects\"\030\202\323\344\223\002\022\022\020/api/v1/projects\022\231\001\n\023Cre" - "ateWorkflowEvent\022-.flyteidl.admin.Workfl" - "owExecutionEventRequest\032..flyteidl.admin" - ".WorkflowExecutionEventResponse\"#\202\323\344\223\002\035\"" - "\030/api/v1/events/workflows:\001*\022\211\001\n\017CreateN" - "odeEvent\022).flyteidl.admin.NodeExecutionE" - "ventRequest\032*.flyteidl.admin.NodeExecuti" - "onEventResponse\"\037\202\323\344\223\002\031\"\024/api/v1/events/" - "nodes:\001*\022\211\001\n\017CreateTaskEvent\022).flyteidl." - "admin.TaskExecutionEventRequest\032*.flytei" - "dl.admin.TaskExecutionEventResponse\"\037\202\323\344" - "\223\002\031\"\024/api/v1/events/tasks:\001*\022\200\003\n\020GetTask" - "Execution\022\'.flyteidl.admin.TaskExecution" - "GetRequest\032\035.flyteidl.admin.TaskExecutio" - "n\"\243\002\202\323\344\223\002\234\002\022\231\002/api/v1/task_executions/{i" - "d.node_execution_id.execution_id.project" - "}/{id.node_execution_id.execution_id.dom" - "ain}/{id.node_execution_id.execution_id." - "name}/{id.node_execution_id.node_id}/{id" - ".task_id.project}/{id.task_id.domain}/{i" - "d.task_id.name}/{id.task_id.version}/{id" - ".retry_attempt}\022\230\002\n\022ListTaskExecutions\022(" - ".flyteidl.admin.TaskExecutionListRequest" - "\032!.flyteidl.admin.TaskExecutionList\"\264\001\202\323" - "\344\223\002\255\001\022\252\001/api/v1/task_executions/{node_ex" - "ecution_id.execution_id.project}/{node_e" - "xecution_id.execution_id.domain}/{node_e" - "xecution_id.execution_id.name}/{node_exe" - "cution_id.node_id}\022\234\003\n\024GetTaskExecutionD" - "ata\022+.flyteidl.admin.TaskExecutionGetDat" - "aRequest\032,.flyteidl.admin.TaskExecutionG" - "etDataResponse\"\250\002\202\323\344\223\002\241\002\022\236\002/api/v1/data/" - "task_executions/{id.node_execution_id.ex" - "ecution_id.project}/{id.node_execution_i" - "d.execution_id.domain}/{id.node_executio" - "n_id.execution_id.name}/{id.node_executi" - "on_id.node_id}/{id.task_id.project}/{id." - "task_id.domain}/{id.task_id.name}/{id.ta" - "sk_id.version}/{id.retry_attempt}\022\343\001\n\035Up" - "dateProjectDomainAttributes\0224.flyteidl.a" - "dmin.ProjectDomainAttributesUpdateReques" - "t\0325.flyteidl.admin.ProjectDomainAttribut" - "esUpdateResponse\"U\202\323\344\223\002O\032J/api/v1/projec" - "t_domain_attributes/{attributes.project}" - "/{attributes.domain}:\001*\022\301\001\n\032GetProjectDo" - "mainAttributes\0221.flyteidl.admin.ProjectD" - "omainAttributesGetRequest\0322.flyteidl.adm" - "in.ProjectDomainAttributesGetResponse\"<\202" - "\323\344\223\0026\0224/api/v1/project_domain_attributes" - "/{project}/{domain}\022\315\001\n\035DeleteProjectDom" - "ainAttributes\0224.flyteidl.admin.ProjectDo" - "mainAttributesDeleteRequest\0325.flyteidl.a" - "dmin.ProjectDomainAttributesDeleteRespon" - "se\"\?\202\323\344\223\0029*4/api/v1/project_domain_attri" - "butes/{project}/{domain}:\001*\022\266\001\n\027UpdatePr" - "ojectAttributes\022..flyteidl.admin.Project" - "AttributesUpdateRequest\032/.flyteidl.admin" - ".ProjectAttributesUpdateResponse\":\202\323\344\223\0024" - "\032//api/v1/project_attributes/{attributes" - ".project}:\001*\022\237\001\n\024GetProjectAttributes\022+." - "flyteidl.admin.ProjectAttributesGetReque" - "st\032,.flyteidl.admin.ProjectAttributesGet" - "Response\",\202\323\344\223\002&\022$/api/v1/project_attrib" - "utes/{project}\022\253\001\n\027DeleteProjectAttribut" - "es\022..flyteidl.admin.ProjectAttributesDel" - "eteRequest\032/.flyteidl.admin.ProjectAttri" - "butesDeleteResponse\"/\202\323\344\223\002)*$/api/v1/pro" - "ject_attributes/{project}:\001*\022\344\001\n\030UpdateW" - "orkflowAttributes\022/.flyteidl.admin.Workf" - "lowAttributesUpdateRequest\0320.flyteidl.ad" - "min.WorkflowAttributesUpdateResponse\"e\202\323" - "\344\223\002_\032Z/api/v1/workflow_attributes/{attri" - "butes.project}/{attributes.domain}/{attr" - "ibutes.workflow}:\001*\022\267\001\n\025GetWorkflowAttri" - "butes\022,.flyteidl.admin.WorkflowAttribute" - "sGetRequest\032-.flyteidl.admin.WorkflowAtt" - "ributesGetResponse\"A\202\323\344\223\002;\0229/api/v1/work" - "flow_attributes/{project}/{domain}/{work" - "flow}\022\303\001\n\030DeleteWorkflowAttributes\022/.fly" - "teidl.admin.WorkflowAttributesDeleteRequ" - "est\0320.flyteidl.admin.WorkflowAttributesD" - "eleteResponse\"D\202\323\344\223\002>*9/api/v1/workflow_" - "attributes/{project}/{domain}/{workflow}" - ":\001*\022\240\001\n\027ListMatchableAttributes\022..flytei" - "dl.admin.ListMatchableAttributesRequest\032" - "/.flyteidl.admin.ListMatchableAttributes" - "Response\"$\202\323\344\223\002\036\022\034/api/v1/matchable_attr" - "ibutes\022\237\001\n\021ListNamedEntities\022&.flyteidl." - "admin.NamedEntityListRequest\032\037.flyteidl." - "admin.NamedEntityList\"A\202\323\344\223\002;\0229/api/v1/n" - "amed_entities/{resource_type}/{project}/" - "{domain}\022\247\001\n\016GetNamedEntity\022%.flyteidl.a" - "dmin.NamedEntityGetRequest\032\033.flyteidl.ad" - "min.NamedEntity\"Q\202\323\344\223\002K\022I/api/v1/named_e" - "ntities/{resource_type}/{id.project}/{id" - ".domain}/{id.name}\022\276\001\n\021UpdateNamedEntity" - "\022(.flyteidl.admin.NamedEntityUpdateReque" - "st\032).flyteidl.admin.NamedEntityUpdateRes" - "ponse\"T\202\323\344\223\002N\032I/api/v1/named_entities/{r" - "esource_type}/{id.project}/{id.domain}/{" - "id.name}:\001*\022l\n\nGetVersion\022!.flyteidl.adm" - "in.GetVersionRequest\032\".flyteidl.admin.Ge" - "tVersionResponse\"\027\202\323\344\223\002\021\022\017/api/v1/versio" - "n\022\304\001\n\024GetDescriptionEntity\022 .flyteidl.ad" - "min.ObjectGetRequest\032!.flyteidl.admin.De" - "scriptionEntity\"g\202\323\344\223\002a\022_/api/v1/descrip" - "tion_entities/{id.resource_type}/{id.pro" - "ject}/{id.domain}/{id.name}/{id.version}" - "\022\222\002\n\027ListDescriptionEntities\022,.flyteidl." - "admin.DescriptionEntityListRequest\032%.fly" - "teidl.admin.DescriptionEntityList\"\241\001\202\323\344\223" - "\002\232\001\022O/api/v1/description_entities/{resou" - "rce_type}/{id.project}/{id.domain}/{id.n" - "ame}ZG\022E/api/v1/description_entities/{re" - "source_type}/{id.project}/{id.domain}\022\305\001" - "\n\023GetExecutionMetrics\0222.flyteidl.admin.W" - "orkflowExecutionGetMetricsRequest\0323.flyt" - "eidl.admin.WorkflowExecutionGetMetricsRe" - "sponse\"E\202\323\344\223\002\?\022=/api/v1/metrics/executio" - "ns/{id.project}/{id.domain}/{id.name}B\?Z" - "=github.com/flyteorg/flyte/flyteidl/gen/" - "pb-go/flyteidl/serviceb\006proto3" + "ntifierList\"j\202\323\344\223\002d\022*/api/v1/launch_plan" + "_ids/{project}/{domain}Z6\0224/api/v1/launc" + "h_plan_ids/org/{org}/{project}/{domain}\022" + "\320\002\n\017ListLaunchPlans\022#.flyteidl.admin.Res" + "ourceListRequest\032\036.flyteidl.admin.Launch" + "PlanList\"\367\001\202\323\344\223\002\360\001\0227/api/v1/launch_plans" + "/{id.project}/{id.domain}/{id.name}ZF\022D/" + "api/v1/launch_plans/org/{id.org}/{id.pro" + "ject}/{id.domain}/{id.name}Z/\022-/api/v1/l" + "aunch_plans/{id.project}/{id.domain}Z<\022:" + "/api/v1/launch_plans/org/{id.org}/{id.pr" + "oject}/{id.domain}\022\215\002\n\020UpdateLaunchPlan\022" + "\'.flyteidl.admin.LaunchPlanUpdateRequest" + "\032(.flyteidl.admin.LaunchPlanUpdateRespon" + "se\"\245\001\202\323\344\223\002\236\001\032D/api/v1/launch_plans/{id.p" + "roject}/{id.domain}/{id.name}/{id.versio" + "n}:\001*ZS\032Q/api/v1/launch_plans/org/{id.or" + "g}/{id.project}/{id.domain}/{id.name}/{i" + "d.version}\022\201\001\n\017CreateExecution\022&.flyteid" + "l.admin.ExecutionCreateRequest\032\'.flyteid" + "l.admin.ExecutionCreateResponse\"\035\202\323\344\223\002\027\"" + "\022/api/v1/executions:\001*\022\216\001\n\021RelaunchExecu" + "tion\022(.flyteidl.admin.ExecutionRelaunchR" + "equest\032\'.flyteidl.admin.ExecutionCreateR" + "esponse\"&\202\323\344\223\002 \"\033/api/v1/executions/rela" + "unch:\001*\022\213\001\n\020RecoverExecution\022\'.flyteidl." + "admin.ExecutionRecoverRequest\032\'.flyteidl" + ".admin.ExecutionCreateResponse\"%\202\323\344\223\002\037\"\032" + "/api/v1/executions/recover:\001*\022\334\001\n\014GetExe" + "cution\022+.flyteidl.admin.WorkflowExecutio" + "nGetRequest\032\031.flyteidl.admin.Execution\"\203" + "\001\202\323\344\223\002}\0225/api/v1/executions/{id.project}" + "/{id.domain}/{id.name}ZD\022B/api/v1/execut" + "ions/org/{id.org}/{id.project}/{id.domai" + "n}/{id.name}\022\357\001\n\017UpdateExecution\022&.flyte" + "idl.admin.ExecutionUpdateRequest\032\'.flyte" + "idl.admin.ExecutionUpdateResponse\"\212\001\202\323\344\223" + "\002\203\001\0325/api/v1/executions/{id.project}/{id" + ".domain}/{id.name}:\001*ZG\032B/api/v1/executi" + "ons/org/{id.org}/{id.project}/{id.domain" + "}/{id.name}:\001*\022\206\002\n\020GetExecutionData\022/.fl" + "yteidl.admin.WorkflowExecutionGetDataReq" + "uest\0320.flyteidl.admin.WorkflowExecutionG" + "etDataResponse\"\216\001\202\323\344\223\002\207\001\022:/api/v1/data/e" + "xecutions/{id.project}/{id.domain}/{id.n" + "ame}ZI\022G/api/v1/data/executions/org/{id." + "org}/{id.project}/{id.domain}/{id.name}\022" + "\305\001\n\016ListExecutions\022#.flyteidl.admin.Reso" + "urceListRequest\032\035.flyteidl.admin.Executi" + "onList\"o\202\323\344\223\002i\022+/api/v1/executions/{id.p" + "roject}/{id.domain}Z:\0228/api/v1/execution" + "s/org/{id.org}/{id.project}/{id.domain}\022" + "\375\001\n\022TerminateExecution\022).flyteidl.admin." + "ExecutionTerminateRequest\032*.flyteidl.adm" + "in.ExecutionTerminateResponse\"\217\001\202\323\344\223\002\210\001*" + "5/api/v1/executions/{id.project}/{id.dom" + "ain}/{id.name}:\001*ZL*G/api/v1/data/execut" + "ions/org/{id.org}/{id.project}/{id.domai" + "n}/{id.name}:\001*\022\342\002\n\020GetNodeExecution\022\'.f" + "lyteidl.admin.NodeExecutionGetRequest\032\035." + "flyteidl.admin.NodeExecution\"\205\002\202\323\344\223\002\376\001\022n" + "/api/v1/node_executions/{id.execution_id" + ".project}/{id.execution_id.domain}/{id.e" + "xecution_id.name}/{id.node_id}Z\213\001\022\210\001/api" + "/v1/node_executions/org/{id.execution_id" + ".org}/{id.execution_id.project}/{id.exec" + "ution_id.domain}/{id.execution_id.name}/" + "{id.node_id}\022\371\002\n\022ListNodeExecutions\022(.fl" + "yteidl.admin.NodeExecutionListRequest\032!." + "flyteidl.admin.NodeExecutionList\"\225\002\202\323\344\223\002" + "\216\002\022s/api/v1/node_executions/{workflow_ex" + "ecution_id.project}/{workflow_execution_" + "id.domain}/{workflow_execution_id.name}Z" + "\226\001\022\223\001/api/v1/node_executions/org/{workfl" + "ow_execution_id.org}/{workflow_execution" + "_id.project}/{workflow_execution_id.doma" + "in}/{workflow_execution_id.name}\022\217\010\n\031Lis" + "tNodeExecutionsForTask\022/.flyteidl.admin." + "NodeExecutionForTaskListRequest\032!.flytei" + "dl.admin.NodeExecutionList\"\235\007\202\323\344\223\002\226\007\022\251\003/" + "api/v1/children/task_executions/{task_ex" + "ecution_id.node_execution_id.execution_i" + "d.project}/{task_execution_id.node_execu" + "tion_id.execution_id.domain}/{task_execu" + "tion_id.node_execution_id.execution_id.n" + "ame}/{task_execution_id.node_execution_i" + "d.node_id}/{task_execution_id.task_id.pr" + "oject}/{task_execution_id.task_id.domain" + "}/{task_execution_id.task_id.name}/{task" + "_execution_id.task_id.version}/{task_exe" + "cution_id.retry_attempt}Z\347\003\022\344\003/api/v1/ch" + "ildren/task_executions/org/{task_executi" + "on_id.node_execution_id.execution_id.org" + "}/{task_execution_id.node_execution_id.e" + "xecution_id.project}/{task_execution_id." + "node_execution_id.execution_id.domain}/{" + "task_execution_id.node_execution_id.exec" + "ution_id.name}/{task_execution_id.node_e" + "xecution_id.node_id}/{task_execution_id." + "task_id.project}/{task_execution_id.task" + "_id.domain}/{task_execution_id.task_id.n" + "ame}/{task_execution_id.task_id.version}" + "/{task_execution_id.retry_attempt}\022\203\003\n\024G" + "etNodeExecutionData\022+.flyteidl.admin.Nod" + "eExecutionGetDataRequest\032,.flyteidl.admi" + "n.NodeExecutionGetDataResponse\"\217\002\202\323\344\223\002\210\002" + "\022s/api/v1/data/node_executions/{id.execu" + "tion_id.project}/{id.execution_id.domain" + "}/{id.execution_id.name}/{id.node_id}Z\220\001" + "\022\215\001/api/v1/data/node_executions/org/{id." + "execution_id.org}/{id.execution_id.proje" + "ct}/{id.execution_id.domain}/{id.executi" + "on_id.name}/{id.node_id}\022\177\n\017RegisterProj" + "ect\022&.flyteidl.admin.ProjectRegisterRequ" + "est\032\'.flyteidl.admin.ProjectRegisterResp" + "onse\"\033\202\323\344\223\002\025\"\020/api/v1/projects:\001*\022\227\001\n\rUp" + "dateProject\022\027.flyteidl.admin.Project\032%.f" + "lyteidl.admin.ProjectUpdateResponse\"F\202\323\344" + "\223\002@\032\025/api/v1/projects/{id}:\001*Z$\032\037/api/v1" + "/projects/org/{org}/{id}:\001*\022f\n\014ListProje" + "cts\022\".flyteidl.admin.ProjectListRequest\032" + "\030.flyteidl.admin.Projects\"\030\202\323\344\223\002\022\022\020/api/" + "v1/projects\022\231\001\n\023CreateWorkflowEvent\022-.fl" + "yteidl.admin.WorkflowExecutionEventReque" + "st\032..flyteidl.admin.WorkflowExecutionEve" + "ntResponse\"#\202\323\344\223\002\035\"\030/api/v1/events/workf" + "lows:\001*\022\211\001\n\017CreateNodeEvent\022).flyteidl.a" + "dmin.NodeExecutionEventRequest\032*.flyteid" + "l.admin.NodeExecutionEventResponse\"\037\202\323\344\223" + "\002\031\"\024/api/v1/events/nodes:\001*\022\211\001\n\017CreateTa" + "skEvent\022).flyteidl.admin.TaskExecutionEv" + "entRequest\032*.flyteidl.admin.TaskExecutio" + "nEventResponse\"\037\202\323\344\223\002\031\"\024/api/v1/events/t" + "asks:\001*\022\313\005\n\020GetTaskExecution\022\'.flyteidl." + "admin.TaskExecutionGetRequest\032\035.flyteidl" + ".admin.TaskExecution\"\356\004\202\323\344\223\002\347\004\022\231\002/api/v1" + "/task_executions/{id.node_execution_id.e" + "xecution_id.project}/{id.node_execution_" + "id.execution_id.domain}/{id.node_executi" + "on_id.execution_id.name}/{id.node_execut" + "ion_id.node_id}/{id.task_id.project}/{id" + ".task_id.domain}/{id.task_id.name}/{id.t" + "ask_id.version}/{id.retry_attempt}Z\310\002\022\305\002" + "/api/v1/task_executions/org/{id.node_exe" + "cution_id.execution_id.org}/{id.node_exe" + "cution_id.execution_id.project}/{id.node" + "_execution_id.execution_id.domain}/{id.n" + "ode_execution_id.execution_id.name}/{id." + "node_execution_id.node_id}/{id.task_id.p" + "roject}/{id.task_id.domain}/{id.task_id." + "name}/{id.task_id.version}/{id.retry_att" + "empt}\022\361\003\n\022ListTaskExecutions\022(.flyteidl." + "admin.TaskExecutionListRequest\032!.flyteid" + "l.admin.TaskExecutionList\"\215\003\202\323\344\223\002\206\003\022\252\001/a" + "pi/v1/task_executions/{node_execution_id" + ".execution_id.project}/{node_execution_i" + "d.execution_id.domain}/{node_execution_i" + "d.execution_id.name}/{node_execution_id." + "node_id}Z\326\001\022\323\001/api/v1/task_executions/or" + "g/{node_execution_id.execution_id.org}/{" + "node_execution_id.execution_id.project}/" + "{node_execution_id.execution_id.domain}/" + "{node_execution_id.execution_id.name}/{n" + "ode_execution_id.node_id}\022\354\005\n\024GetTaskExe" + "cutionData\022+.flyteidl.admin.TaskExecutio" + "nGetDataRequest\032,.flyteidl.admin.TaskExe" + "cutionGetDataResponse\"\370\004\202\323\344\223\002\361\004\022\236\002/api/v" + "1/data/task_executions/{id.node_executio" + "n_id.execution_id.project}/{id.node_exec" + "ution_id.execution_id.domain}/{id.node_e" + "xecution_id.execution_id.name}/{id.node_" + "execution_id.node_id}/{id.task_id.projec" + "t}/{id.task_id.domain}/{id.task_id.name}" + "/{id.task_id.version}/{id.retry_attempt}" + "Z\315\002\022\312\002/api/v1/data/task_executions/org/{" + "id.node_execution_id.execution_id.org}/{" + "id.node_execution_id.execution_id.projec" + "t}/{id.node_execution_id.execution_id.do" + "main}/{id.node_execution_id.execution_id" + ".name}/{id.node_execution_id.node_id}/{i" + "d.task_id.project}/{id.task_id.domain}/{" + "id.task_id.name}/{id.task_id.version}/{i" + "d.retry_attempt}\022\313\002\n\035UpdateProjectDomain" + "Attributes\0224.flyteidl.admin.ProjectDomai" + "nAttributesUpdateRequest\0325.flyteidl.admi" + "n.ProjectDomainAttributesUpdateResponse\"" + "\274\001\202\323\344\223\002\265\001\032J/api/v1/project_domain_attrib" + "utes/{attributes.project}/{attributes.do" + "main}:\001*Zd\032_/api/v1/project_domain_attri" + "butes/org/{attributes.org}/{attributes.p" + "roject}/{attributes.domain}:\001*\022\203\002\n\032GetPr" + "ojectDomainAttributes\0221.flyteidl.admin.P" + "rojectDomainAttributesGetRequest\0322.flyte" + "idl.admin.ProjectDomainAttributesGetResp" + "onse\"~\202\323\344\223\002x\0224/api/v1/project_domain_att" + "ributes/{project}/{domain}Z@\022>/api/v1/pr" + "oject_domain_attributes/org/{org}/{proje" + "ct}/{domain}\022\223\002\n\035DeleteProjectDomainAttr" + "ibutes\0224.flyteidl.admin.ProjectDomainAtt" + "ributesDeleteRequest\0325.flyteidl.admin.Pr" + "ojectDomainAttributesDeleteResponse\"\204\001\202\323" + "\344\223\002~*4/api/v1/project_domain_attributes/" + "{project}/{domain}:\001*ZC*>/api/v1/project" + "_domain_attributes/org/{org}/{project}/{" + "domain}:\001*\022\212\002\n\027UpdateProjectAttributes\022." + ".flyteidl.admin.ProjectAttributesUpdateR" + "equest\032/.flyteidl.admin.ProjectAttribute" + "sUpdateResponse\"\215\001\202\323\344\223\002\206\001\032//api/v1/proje" + "ct_attributes/{attributes.project}:\001*ZP\032" + "K/api/v1/project_domain_attributes/org/{" + "attributes.org}/{attributes.project}:\001*\022" + "\330\001\n\024GetProjectAttributes\022+.flyteidl.admi" + "n.ProjectAttributesGetRequest\032,.flyteidl" + ".admin.ProjectAttributesGetResponse\"e\202\323\344" + "\223\002_\022$/api/v1/project_attributes/{project" + "}Z7\0225/api/v1/project_domain_attributes/o" + "rg/{org}/{project}\022\347\001\n\027DeleteProjectAttr" + "ibutes\022..flyteidl.admin.ProjectAttribute" + "sDeleteRequest\032/.flyteidl.admin.ProjectA" + "ttributesDeleteResponse\"k\202\323\344\223\002e*$/api/v1" + "/project_attributes/{project}:\001*Z:*5/api" + "/v1/project_domain_attributes/org/{org}/" + "{project}:\001*\022\334\002\n\030UpdateWorkflowAttribute" + "s\022/.flyteidl.admin.WorkflowAttributesUpd" + "ateRequest\0320.flyteidl.admin.WorkflowAttr" + "ibutesUpdateResponse\"\334\001\202\323\344\223\002\325\001\032Z/api/v1/" + "workflow_attributes/{attributes.project}" + "/{attributes.domain}/{attributes.workflo" + "w}:\001*Zt\032o/api/v1/workflow_attributes/org" + "/{attributes.org}/{attributes.project}/{" + "attributes.domain}/{attributes.workflow}" + ":\001*\022\200\002\n\025GetWorkflowAttributes\022,.flyteidl" + ".admin.WorkflowAttributesGetRequest\032-.fl" + "yteidl.admin.WorkflowAttributesGetRespon" + "se\"\211\001\202\323\344\223\002\202\001\0229/api/v1/workflow_attribute" + "s/{project}/{domain}/{workflow}ZE\022C/api/" + "v1/workflow_attributes/org/{org}/{projec" + "t}/{domain}/{workflow}\022\217\002\n\030DeleteWorkflo" + "wAttributes\022/.flyteidl.admin.WorkflowAtt" + "ributesDeleteRequest\0320.flyteidl.admin.Wo" + "rkflowAttributesDeleteResponse\"\217\001\202\323\344\223\002\210\001" + "*9/api/v1/workflow_attributes/{project}/" + "{domain}/{workflow}:\001*ZH*C/api/v1/workfl" + "ow_attributes/org/{org}/{project}/{domai" + "n}/{workflow}:\001*\022\240\001\n\027ListMatchableAttrib" + "utes\022..flyteidl.admin.ListMatchableAttri" + "butesRequest\032/.flyteidl.admin.ListMatcha" + "bleAttributesResponse\"$\202\323\344\223\002\036\022\034/api/v1/m" + "atchable_attributes\022\350\001\n\021ListNamedEntitie" + "s\022&.flyteidl.admin.NamedEntityListReques" + "t\032\037.flyteidl.admin.NamedEntityList\"\211\001\202\323\344" + "\223\002\202\001\0229/api/v1/named_entities/{resource_t" + "ype}/{project}/{domain}ZE\022C/api/v1/named" + "_entities/{resource_type}/org/{org}/{pro" + "ject}/{domain}\022\203\002\n\016GetNamedEntity\022%.flyt" + "eidl.admin.NamedEntityGetRequest\032\033.flyte" + "idl.admin.NamedEntity\"\254\001\202\323\344\223\002\245\001\022I/api/v1" + "/named_entities/{resource_type}/{id.proj" + "ect}/{id.domain}/{id.name}ZX\022V/api/v1/na" + "med_entities/{resource_type}/org/{id.org" + "}/{id.project}/{id.domain}/{id.name}\022\235\002\n" + "\021UpdateNamedEntity\022(.flyteidl.admin.Name" + "dEntityUpdateRequest\032).flyteidl.admin.Na" + "medEntityUpdateResponse\"\262\001\202\323\344\223\002\253\001\032I/api/" + "v1/named_entities/{resource_type}/{id.pr" + "oject}/{id.domain}/{id.name}:\001*Z[\032V/api/" + "v1/named_entities/{resource_type}/org/{i" + "d.org}/{id.project}/{id.domain}/{id.name" + "}:\001*\022l\n\nGetVersion\022!.flyteidl.admin.GetV" + "ersionRequest\032\".flyteidl.admin.GetVersio" + "nResponse\"\027\202\323\344\223\002\021\022\017/api/v1/version\022\266\002\n\024G" + "etDescriptionEntity\022 .flyteidl.admin.Obj" + "ectGetRequest\032!.flyteidl.admin.Descripti" + "onEntity\"\330\001\202\323\344\223\002\321\001\022_/api/v1/description_" + "entities/{id.resource_type}/{id.project}" + "/{id.domain}/{id.name}/{id.version}Zn\022l/" + "api/v1/description_entities/org/{id.org}" + "/{id.resource_type}/{id.project}/{id.dom" + "ain}/{id.name}/{id.version}\022\310\003\n\027ListDesc" + "riptionEntities\022,.flyteidl.admin.Descrip" + "tionEntityListRequest\032%.flyteidl.admin.D" + "escriptionEntityList\"\327\002\202\323\344\223\002\320\002\022O/api/v1/" + "description_entities/{resource_type}/{id" + ".project}/{id.domain}/{id.name}Z^\022\\/api/" + "v1/description_entities/{resource_type}/" + "org/{id.org}/{id.project}/{id.domain}/{i" + "d.name}ZG\022E/api/v1/description_entities/" + "{resource_type}/{id.project}/{id.domain}" + "ZT\022R/api/v1/description_entities/{resour" + "ce_type}/org/{id.org}/{id.project}/{id.d" + "omain}\022\225\002\n\023GetExecutionMetrics\0222.flyteid" + "l.admin.WorkflowExecutionGetMetricsReque" + "st\0323.flyteidl.admin.WorkflowExecutionGet" + "MetricsResponse\"\224\001\202\323\344\223\002\215\001\022=/api/v1/metri" + "cs/executions/{id.project}/{id.domain}/{" + "id.name}ZL\022J/api/v1/metrics/executions/o" + "rg/{id.org}/{id.project}/{id.domain}/{id" + ".name}B\?Z=github.com/flyteorg/flyte/flyt" + "eidl/gen/pb-go/flyteidl/serviceb\006proto3" ; ::google::protobuf::internal::DescriptorTable descriptor_table_flyteidl_2fservice_2fadmin_2eproto = { false, InitDefaults_flyteidl_2fservice_2fadmin_2eproto, descriptor_table_protodef_flyteidl_2fservice_2fadmin_2eproto, - "flyteidl/service/admin.proto", &assign_descriptors_table_flyteidl_2fservice_2fadmin_2eproto, 10670, + "flyteidl/service/admin.proto", &assign_descriptors_table_flyteidl_2fservice_2fadmin_2eproto, 15199, }; void AddDescriptors_flyteidl_2fservice_2fadmin_2eproto() { diff --git a/flyteidl/gen/pb-cpp/flyteidl/service/external_plugin_service.pb.cc b/flyteidl/gen/pb-cpp/flyteidl/service/external_plugin_service.pb.cc index 481be2619e..68b912f826 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/service/external_plugin_service.pb.cc +++ b/flyteidl/gen/pb-cpp/flyteidl/service/external_plugin_service.pb.cc @@ -216,45 +216,43 @@ const char descriptor_table_protodef_flyteidl_2fservice_2fexternal_5fplugin_5fse "\n.flyteidl/service/external_plugin_servi" "ce.proto\022\020flyteidl.service\032\034flyteidl/cor" "e/literals.proto\032\031flyteidl/core/tasks.pr" - "oto\032\035flyteidl/core/interface.proto\"\210\001\n\021T" - "askCreateRequest\022)\n\006inputs\030\001 \001(\0132\031.flyte" - "idl.core.LiteralMap\022-\n\010template\030\002 \001(\0132\033." - "flyteidl.core.TaskTemplate\022\025\n\routput_pre" - "fix\030\003 \001(\t:\002\030\001\"(\n\022TaskCreateResponse\022\016\n\006j" - "ob_id\030\001 \001(\t:\002\030\001\"7\n\016TaskGetRequest\022\021\n\ttas" - "k_type\030\001 \001(\t\022\016\n\006job_id\030\002 \001(\t:\002\030\001\"i\n\017Task" - "GetResponse\022&\n\005state\030\001 \001(\0162\027.flyteidl.se" - "rvice.State\022*\n\007outputs\030\002 \001(\0132\031.flyteidl." - "core.LiteralMap:\002\030\001\":\n\021TaskDeleteRequest" - "\022\021\n\ttask_type\030\001 \001(\t\022\016\n\006job_id\030\002 \001(\t:\002\030\001\"" - "\030\n\022TaskDeleteResponse:\002\030\001*b\n\005State\022\025\n\021RE" - "TRYABLE_FAILURE\020\000\022\025\n\021PERMANENT_FAILURE\020\001" - "\022\013\n\007PENDING\020\002\022\013\n\007RUNNING\020\003\022\r\n\tSUCCEEDED\020" - "\004\032\002\030\0012\250\002\n\025ExternalPluginService\022\\\n\nCreat" - "eTask\022#.flyteidl.service.TaskCreateReque" - "st\032$.flyteidl.service.TaskCreateResponse" - "\"\003\210\002\001\022S\n\007GetTask\022 .flyteidl.service.Task" - "GetRequest\032!.flyteidl.service.TaskGetRes" - "ponse\"\003\210\002\001\022\\\n\nDeleteTask\022#.flyteidl.serv" - "ice.TaskDeleteRequest\032$.flyteidl.service" - ".TaskDeleteResponse\"\003\210\002\001B\?Z=github.com/f" - "lyteorg/flyte/flyteidl/gen/pb-go/flyteid" - "l/serviceb\006proto3" + "oto\"\210\001\n\021TaskCreateRequest\022)\n\006inputs\030\001 \001(" + "\0132\031.flyteidl.core.LiteralMap\022-\n\010template" + "\030\002 \001(\0132\033.flyteidl.core.TaskTemplate\022\025\n\ro" + "utput_prefix\030\003 \001(\t:\002\030\001\"(\n\022TaskCreateResp" + "onse\022\016\n\006job_id\030\001 \001(\t:\002\030\001\"7\n\016TaskGetReque" + "st\022\021\n\ttask_type\030\001 \001(\t\022\016\n\006job_id\030\002 \001(\t:\002\030" + "\001\"i\n\017TaskGetResponse\022&\n\005state\030\001 \001(\0162\027.fl" + "yteidl.service.State\022*\n\007outputs\030\002 \001(\0132\031." + "flyteidl.core.LiteralMap:\002\030\001\":\n\021TaskDele" + "teRequest\022\021\n\ttask_type\030\001 \001(\t\022\016\n\006job_id\030\002" + " \001(\t:\002\030\001\"\030\n\022TaskDeleteResponse:\002\030\001*b\n\005St" + "ate\022\025\n\021RETRYABLE_FAILURE\020\000\022\025\n\021PERMANENT_" + "FAILURE\020\001\022\013\n\007PENDING\020\002\022\013\n\007RUNNING\020\003\022\r\n\tS" + "UCCEEDED\020\004\032\002\030\0012\250\002\n\025ExternalPluginService" + "\022\\\n\nCreateTask\022#.flyteidl.service.TaskCr" + "eateRequest\032$.flyteidl.service.TaskCreat" + "eResponse\"\003\210\002\001\022S\n\007GetTask\022 .flyteidl.ser" + "vice.TaskGetRequest\032!.flyteidl.service.T" + "askGetResponse\"\003\210\002\001\022\\\n\nDeleteTask\022#.flyt" + "eidl.service.TaskDeleteRequest\032$.flyteid" + "l.service.TaskDeleteResponse\"\003\210\002\001B\?Z=git" + "hub.com/flyteorg/flyte/flyteidl/gen/pb-g" + "o/flyteidl/serviceb\006proto3" ; ::google::protobuf::internal::DescriptorTable descriptor_table_flyteidl_2fservice_2fexternal_5fplugin_5fservice_2eproto = { false, InitDefaults_flyteidl_2fservice_2fexternal_5fplugin_5fservice_2eproto, descriptor_table_protodef_flyteidl_2fservice_2fexternal_5fplugin_5fservice_2eproto, - "flyteidl/service/external_plugin_service.proto", &assign_descriptors_table_flyteidl_2fservice_2fexternal_5fplugin_5fservice_2eproto, 1057, + "flyteidl/service/external_plugin_service.proto", &assign_descriptors_table_flyteidl_2fservice_2fexternal_5fplugin_5fservice_2eproto, 1026, }; void AddDescriptors_flyteidl_2fservice_2fexternal_5fplugin_5fservice_2eproto() { - static constexpr ::google::protobuf::internal::InitFunc deps[3] = + static constexpr ::google::protobuf::internal::InitFunc deps[2] = { ::AddDescriptors_flyteidl_2fcore_2fliterals_2eproto, ::AddDescriptors_flyteidl_2fcore_2ftasks_2eproto, - ::AddDescriptors_flyteidl_2fcore_2finterface_2eproto, }; - ::google::protobuf::internal::AddDescriptors(&descriptor_table_flyteidl_2fservice_2fexternal_5fplugin_5fservice_2eproto, deps, 3); + ::google::protobuf::internal::AddDescriptors(&descriptor_table_flyteidl_2fservice_2fexternal_5fplugin_5fservice_2eproto, deps, 2); } // Force running AddDescriptors() at dynamic initialization time. diff --git a/flyteidl/gen/pb-cpp/flyteidl/service/external_plugin_service.pb.h b/flyteidl/gen/pb-cpp/flyteidl/service/external_plugin_service.pb.h index 82d5616c5c..bd326d980e 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/service/external_plugin_service.pb.h +++ b/flyteidl/gen/pb-cpp/flyteidl/service/external_plugin_service.pb.h @@ -34,7 +34,6 @@ #include #include "flyteidl/core/literals.pb.h" #include "flyteidl/core/tasks.pb.h" -#include "flyteidl/core/interface.pb.h" // @@protoc_insertion_point(includes) #include #define PROTOBUF_INTERNAL_EXPORT_flyteidl_2fservice_2fexternal_5fplugin_5fservice_2eproto diff --git a/flyteidl/gen/pb-go/flyteidl/admin/common.pb.go b/flyteidl/gen/pb-go/flyteidl/admin/common.pb.go index 3703dfb22e..d5598fd1db 100644 --- a/flyteidl/gen/pb-go/flyteidl/admin/common.pb.go +++ b/flyteidl/gen/pb-go/flyteidl/admin/common.pb.go @@ -93,7 +93,9 @@ type NamedEntityIdentifier struct { // User provided value for the resource. // The combination of project + domain + name uniquely identifies the resource. // +optional - in certain contexts - like 'List API', 'Launch plans' - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + // Optional, org key applied to the resource. + Org string `protobuf:"bytes,4,opt,name=org,proto3" json:"org,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -145,6 +147,13 @@ func (m *NamedEntityIdentifier) GetName() string { return "" } +func (m *NamedEntityIdentifier) GetOrg() string { + if m != nil { + return m.Org + } + return "" +} + // Additional metadata around a named entity. type NamedEntityMetadata struct { // Common description across all versions of the entity @@ -329,7 +338,9 @@ type NamedEntityIdentifierListRequest struct { SortBy *Sort `protobuf:"bytes,5,opt,name=sort_by,json=sortBy,proto3" json:"sort_by,omitempty"` // Indicates a list of filters passed as string. // +optional - Filters string `protobuf:"bytes,6,opt,name=filters,proto3" json:"filters,omitempty"` + Filters string `protobuf:"bytes,6,opt,name=filters,proto3" json:"filters,omitempty"` + // Optional, org key applied to the resource. + Org string `protobuf:"bytes,7,opt,name=org,proto3" json:"org,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -402,6 +413,13 @@ func (m *NamedEntityIdentifierListRequest) GetFilters() string { return "" } +func (m *NamedEntityIdentifierListRequest) GetOrg() string { + if m != nil { + return m.Org + } + return "" +} + // Represents a request structure to list NamedEntity objects type NamedEntityListRequest struct { // Resource type of the metadata to query. One of Task, Workflow or LaunchPlan. @@ -423,7 +441,9 @@ type NamedEntityListRequest struct { SortBy *Sort `protobuf:"bytes,6,opt,name=sort_by,json=sortBy,proto3" json:"sort_by,omitempty"` // Indicates a list of filters passed as string. // +optional - Filters string `protobuf:"bytes,7,opt,name=filters,proto3" json:"filters,omitempty"` + Filters string `protobuf:"bytes,7,opt,name=filters,proto3" json:"filters,omitempty"` + // Optional, org key applied to the resource. + Org string `protobuf:"bytes,8,opt,name=org,proto3" json:"org,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -503,6 +523,13 @@ func (m *NamedEntityListRequest) GetFilters() string { return "" } +func (m *NamedEntityListRequest) GetOrg() string { + if m != nil { + return m.Org + } + return "" +} + // Represents a list of NamedEntityIdentifiers. type NamedEntityIdentifierList struct { // A list of identifiers. @@ -1484,80 +1511,81 @@ func init() { func init() { proto.RegisterFile("flyteidl/admin/common.proto", fileDescriptor_7c2cf612a185829c) } var fileDescriptor_7c2cf612a185829c = []byte{ - // 1192 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x57, 0xdf, 0x73, 0xdb, 0xc4, - 0x13, 0x8f, 0x1c, 0xc7, 0xa9, 0x37, 0x6d, 0xea, 0x5e, 0xd2, 0x7e, 0xdd, 0xe4, 0x4b, 0x09, 0x62, - 0xf8, 0xd1, 0x0e, 0xb5, 0x67, 0x52, 0x0a, 0xf4, 0x37, 0x4e, 0xac, 0xb6, 0x99, 0xa6, 0x6e, 0x90, - 0xd3, 0x32, 0x65, 0x60, 0xc4, 0x59, 0x3a, 0xbb, 0x47, 0x24, 0x9d, 0xb8, 0x3b, 0xb5, 0x15, 0x2f, - 0x0c, 0xbc, 0xf1, 0xc6, 0x03, 0xff, 0x10, 0x4f, 0x0c, 0xef, 0xfc, 0x41, 0xcc, 0x9d, 0x24, 0x5b, - 0x56, 0xdc, 0x42, 0xd3, 0xce, 0xf0, 0x76, 0x7b, 0xbb, 0x7b, 0xfb, 0xd9, 0xcf, 0xed, 0xae, 0x4e, - 0xb0, 0x3e, 0xf4, 0x13, 0x49, 0xa8, 0xe7, 0xb7, 0xb1, 0x17, 0xd0, 0xb0, 0xed, 0xb2, 0x20, 0x60, - 0x61, 0x2b, 0xe2, 0x4c, 0x32, 0xb4, 0x9c, 0x2b, 0x5b, 0x5a, 0xb9, 0xf6, 0xd6, 0xd8, 0xd8, 0x65, - 0x9c, 0xb4, 0xc9, 0x73, 0xe2, 0xc6, 0x92, 0xe6, 0xe6, 0x6b, 0xe7, 0xa6, 0xd5, 0xd4, 0x23, 0xa1, - 0xa4, 0x43, 0x4a, 0x78, 0xa6, 0xff, 0xff, 0xb4, 0xde, 0xa7, 0x92, 0x70, 0xec, 0x8b, 0x4c, 0xfb, - 0xf6, 0x88, 0xb1, 0x91, 0x4f, 0xda, 0x5a, 0x1a, 0xc4, 0xc3, 0xb6, 0xa4, 0x01, 0x11, 0x12, 0x07, - 0x51, 0x6a, 0x60, 0x7e, 0x03, 0xa7, 0x7b, 0x38, 0x20, 0x9e, 0x15, 0x4a, 0x2a, 0x93, 0x9d, 0xf1, - 0xe9, 0xa8, 0x09, 0x8b, 0x11, 0x67, 0xdf, 0x11, 0x57, 0x36, 0x8d, 0x0d, 0xe3, 0xc3, 0xba, 0x9d, - 0x8b, 0xe8, 0x0c, 0xd4, 0x3c, 0x16, 0x60, 0x1a, 0x36, 0x2b, 0x5a, 0x91, 0x49, 0x08, 0x41, 0x35, - 0xc4, 0x01, 0x69, 0xce, 0xeb, 0x5d, 0xbd, 0x36, 0x19, 0xac, 0x14, 0x8e, 0xbf, 0x4f, 0x24, 0xf6, - 0xb0, 0xc4, 0x68, 0x03, 0x96, 0x3c, 0x22, 0x5c, 0x4e, 0x23, 0x95, 0x69, 0x16, 0xa0, 0xb8, 0x85, - 0x3e, 0x81, 0x05, 0x21, 0xb1, 0x24, 0x3a, 0xc6, 0xf2, 0xe6, 0x46, 0x6b, 0x9a, 0xb5, 0x56, 0xe1, - 0xd4, 0xbe, 0xb2, 0xb3, 0x53, 0x73, 0xf3, 0x0f, 0x03, 0x96, 0x0a, 0x3a, 0xf4, 0x39, 0x9c, 0xe0, - 0x44, 0xb0, 0x98, 0xbb, 0xc4, 0x91, 0x49, 0x44, 0x74, 0xac, 0xe5, 0xcd, 0xf5, 0xc9, 0x79, 0x8a, - 0xb6, 0x96, 0x9d, 0xd9, 0xec, 0x27, 0x11, 0xb1, 0x8f, 0xf3, 0x82, 0x84, 0x2e, 0x43, 0x85, 0x7a, - 0x1a, 0xc6, 0xd2, 0xe6, 0x7b, 0x2f, 0x81, 0x31, 0xe1, 0xce, 0xae, 0x50, 0x0f, 0xdd, 0x82, 0x63, - 0x41, 0x96, 0xae, 0x66, 0x64, 0x69, 0xf3, 0xdd, 0x97, 0x38, 0xe7, 0xcc, 0xd8, 0x63, 0x27, 0xf3, - 0x67, 0x03, 0xaa, 0x7d, 0xc6, 0x25, 0x6a, 0xc0, 0xfc, 0x01, 0x49, 0x32, 0x92, 0xd4, 0x12, 0x5d, - 0x87, 0xba, 0x47, 0x39, 0x71, 0x35, 0x79, 0x29, 0x41, 0xe7, 0xca, 0x87, 0x2b, 0xd7, 0x56, 0x37, - 0xb7, 0xb2, 0x27, 0x0e, 0xe6, 0x05, 0xa8, 0x8f, 0xf7, 0xd1, 0x32, 0x40, 0xd7, 0xea, 0x6f, 0x5b, - 0xbd, 0xee, 0x4e, 0xef, 0x4e, 0x63, 0x0e, 0x9d, 0x80, 0x7a, 0x67, 0x2c, 0x1a, 0xe6, 0x9f, 0x06, - 0x6c, 0xcc, 0xcc, 0x71, 0x97, 0x0a, 0x69, 0x93, 0xef, 0x63, 0x22, 0xe4, 0x11, 0x4a, 0x65, 0x15, - 0x16, 0x7c, 0x1a, 0x50, 0xa9, 0x99, 0x39, 0x61, 0xa7, 0x82, 0xda, 0x95, 0xec, 0x80, 0x84, 0xcd, - 0xaa, 0x36, 0x4e, 0x05, 0x74, 0x11, 0x16, 0x05, 0xe3, 0xd2, 0x19, 0x24, 0xcd, 0x05, 0xcd, 0xe3, - 0xea, 0xac, 0x54, 0xed, 0x9a, 0x32, 0xda, 0x4a, 0x14, 0x98, 0x21, 0xf5, 0x25, 0xe1, 0xa2, 0x59, - 0x4b, 0xc1, 0x64, 0xa2, 0xf9, 0x53, 0x05, 0xce, 0x14, 0x72, 0x29, 0x66, 0xf0, 0xfa, 0x55, 0x52, - 0xe0, 0xa0, 0xf2, 0x22, 0x0e, 0xe6, 0x67, 0x73, 0x50, 0x9d, 0xc9, 0xc1, 0xc2, 0x0b, 0x38, 0xa8, - 0xbd, 0x1a, 0x07, 0x8b, 0xd3, 0x1c, 0x48, 0x38, 0xfb, 0xc2, 0xeb, 0x44, 0x1d, 0x38, 0xa6, 0x64, - 0x49, 0x89, 0x68, 0x1a, 0x1b, 0xf3, 0xff, 0xbe, 0xde, 0xc7, 0x6e, 0x13, 0xf8, 0x95, 0x02, 0x7c, - 0xf3, 0x5b, 0x38, 0x59, 0x22, 0x1e, 0x7d, 0x7a, 0x28, 0xd6, 0xfa, 0x4b, 0x62, 0xfd, 0x63, 0x84, - 0x5f, 0x8d, 0xa9, 0x39, 0x76, 0x87, 0xbc, 0xc1, 0xab, 0x3d, 0xda, 0x00, 0x30, 0xff, 0x32, 0xa0, - 0x59, 0xd0, 0x3e, 0x8c, 0x3c, 0x35, 0xa6, 0xfe, 0x63, 0x54, 0xaf, 0x3f, 0x96, 0xd6, 0xa7, 0x2a, - 0x28, 0xcf, 0x4a, 0x44, 0x2c, 0x14, 0xc4, 0xbc, 0x01, 0x8d, 0x07, 0x03, 0x55, 0xf5, 0x85, 0x0b, - 0x38, 0xaf, 0x81, 0x1a, 0x3a, 0xd6, 0xd9, 0x52, 0x7e, 0x25, 0xca, 0x7e, 0x37, 0x60, 0x25, 0x4f, - 0xb9, 0xd8, 0x9e, 0x97, 0x0b, 0x47, 0xbc, 0x42, 0xae, 0xe3, 0x0e, 0xab, 0xcc, 0xec, 0xb0, 0xf9, - 0x62, 0x87, 0x15, 0x5a, 0xa6, 0x3a, 0xd5, 0x32, 0xaf, 0x38, 0x7f, 0xcc, 0x9b, 0x70, 0xca, 0x0a, - 0x30, 0xf5, 0x7b, 0x4c, 0x21, 0x71, 0xb1, 0x9e, 0xb2, 0xe7, 0xa1, 0xc1, 0x89, 0x4b, 0x23, 0x4a, - 0x42, 0x29, 0x1c, 0xa2, 0xf4, 0xba, 0xea, 0xeb, 0xf6, 0xc9, 0xc9, 0xbe, 0x76, 0x33, 0xb7, 0xe0, - 0xf4, 0x1e, 0x1e, 0x11, 0xde, 0x8d, 0x65, 0x72, 0xd4, 0x33, 0x6e, 0xc2, 0xa9, 0xbe, 0x8f, 0xdd, - 0x83, 0xa3, 0xfa, 0xff, 0x56, 0x81, 0xe3, 0x53, 0xbe, 0x37, 0xa1, 0x16, 0x3d, 0xc1, 0x22, 0xeb, - 0xd5, 0xe5, 0xcd, 0xf7, 0x4b, 0xf7, 0xf8, 0x25, 0xe3, 0x07, 0x43, 0x9f, 0x3d, 0xb3, 0xc6, 0x8f, - 0x97, 0x3d, 0x65, 0x6e, 0x67, 0x5e, 0xe8, 0x0a, 0x2c, 0xa4, 0x01, 0xd3, 0x7a, 0x7d, 0xa7, 0xcc, - 0xe0, 0x21, 0xc6, 0xee, 0xce, 0xd9, 0xa9, 0x07, 0xba, 0x0d, 0x10, 0x29, 0x3e, 0x1c, 0x2f, 0x96, - 0x49, 0x56, 0xb2, 0x87, 0x6a, 0x60, 0x26, 0x63, 0x77, 0xe7, 0xec, 0x7a, 0x94, 0x2b, 0x14, 0x04, - 0xa1, 0x38, 0xd1, 0xd7, 0x3b, 0x03, 0xc2, 0x21, 0xc2, 0x14, 0x04, 0xed, 0xb1, 0x55, 0x83, 0xaa, - 0xea, 0x51, 0xf3, 0x32, 0x2c, 0x3e, 0xe4, 0xfe, 0x96, 0xcf, 0x06, 0xea, 0x9b, 0x1c, 0x73, 0x3f, - 0xff, 0x26, 0xc7, 0xdc, 0x57, 0x65, 0x35, 0x48, 0x24, 0x11, 0x3a, 0xc5, 0x79, 0x3b, 0x15, 0xae, - 0x56, 0x9a, 0x86, 0xf9, 0x23, 0xd4, 0x76, 0xf1, 0x80, 0xf8, 0x02, 0x5d, 0x85, 0xda, 0x53, 0xec, - 0xc7, 0xe3, 0x91, 0x67, 0x96, 0x41, 0xa4, 0x76, 0xad, 0x47, 0xda, 0xc8, 0x0a, 0x25, 0x4f, 0xec, - 0xcc, 0x63, 0xed, 0x0a, 0x2c, 0x15, 0xb6, 0x67, 0x3c, 0x0a, 0x56, 0x61, 0x41, 0x9b, 0xe6, 0x83, - 0x51, 0x0b, 0x57, 0x2b, 0x9f, 0x19, 0xe6, 0x2f, 0x06, 0x2c, 0x75, 0xc2, 0x90, 0x49, 0x9d, 0x97, - 0x40, 0xb7, 0x4a, 0x30, 0x3e, 0x28, 0xc3, 0x28, 0x18, 0xbf, 0x69, 0x2c, 0xd7, 0xa0, 0x6a, 0x85, - 0x4f, 0x05, 0xba, 0x54, 0xc2, 0x50, 0x9e, 0x7c, 0xf7, 0x48, 0xa2, 0x43, 0xec, 0x61, 0xca, 0xf3, - 0xb8, 0xe6, 0x0f, 0x70, 0xac, 0x13, 0xcb, 0x27, 0x36, 0xf3, 0x09, 0xfa, 0x08, 0x10, 0x16, 0x22, - 0x0e, 0xf0, 0xc0, 0x27, 0x0e, 0xc5, 0x81, 0xc3, 0x99, 0x4f, 0x32, 0x0c, 0x8d, 0xb1, 0x66, 0x07, - 0x07, 0xda, 0xfa, 0x3a, 0xac, 0x1d, 0xc4, 0x03, 0xc2, 0x43, 0x22, 0x89, 0x70, 0x04, 0xe1, 0x4f, - 0xa9, 0x4b, 0x1c, 0xec, 0xba, 0x2c, 0x0e, 0xf3, 0x2f, 0x76, 0x73, 0x62, 0xd1, 0x4f, 0x0d, 0x3a, - 0xa9, 0x5e, 0xdf, 0xe2, 0x3d, 0x58, 0xb1, 0xf1, 0xb3, 0x07, 0xb1, 0x8c, 0x62, 0xd9, 0xc5, 0x12, - 0x6f, 0xb3, 0x70, 0x48, 0x47, 0xe8, 0x63, 0x38, 0xc3, 0xf4, 0x9e, 0xe3, 0xb3, 0xb4, 0x6e, 0x9c, - 0x88, 0x93, 0x21, 0x7d, 0x9e, 0x41, 0x59, 0x4d, 0xb5, 0xbb, 0x99, 0x72, 0x4f, 0xeb, 0xcc, 0x2f, - 0xa0, 0x7e, 0x5b, 0xa5, 0xfb, 0xd0, 0xde, 0x15, 0xea, 0x81, 0x40, 0xc3, 0x28, 0x96, 0x22, 0x73, - 0xc9, 0x24, 0x35, 0x92, 0x52, 0x67, 0x91, 0x3f, 0x29, 0x32, 0x51, 0xbd, 0xb4, 0x3d, 0xe2, 0x1e, - 0xe4, 0x2f, 0x6d, 0xb5, 0xbe, 0xf0, 0x35, 0x34, 0xca, 0x6f, 0x62, 0xf4, 0x3f, 0x58, 0xe9, 0x75, - 0xee, 0x5b, 0x5d, 0xc7, 0xea, 0xed, 0xef, 0xec, 0x3f, 0x76, 0x3a, 0xdb, 0xfb, 0x3b, 0x8f, 0xac, - 0xc6, 0x1c, 0x3a, 0x0b, 0xa7, 0xa7, 0x15, 0xf6, 0xf6, 0xdd, 0x9d, 0x47, 0x56, 0xb7, 0x61, 0xa0, - 0x55, 0x68, 0xf4, 0x1f, 0xf7, 0xf7, 0xad, 0xfb, 0xce, 0x1d, 0xab, 0x67, 0xd9, 0x9d, 0x7d, 0xab, - 0xdb, 0xa8, 0x6c, 0xdd, 0xf8, 0xea, 0xda, 0x88, 0xca, 0x27, 0xf1, 0xa0, 0xe5, 0xb2, 0xa0, 0xad, - 0xaf, 0x8a, 0xf1, 0x51, 0xba, 0x68, 0x8f, 0xff, 0x40, 0x46, 0x24, 0x6c, 0x47, 0x83, 0x8b, 0x23, - 0xd6, 0x9e, 0xfe, 0x01, 0x1a, 0xd4, 0xf4, 0xcf, 0xc6, 0xa5, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, - 0x5a, 0xee, 0x56, 0xed, 0x19, 0x0d, 0x00, 0x00, + // 1207 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x57, 0x5f, 0x73, 0xdb, 0x44, + 0x10, 0x8f, 0x1c, 0xc7, 0x89, 0x37, 0x6d, 0xea, 0x5e, 0xd2, 0xe2, 0x26, 0x50, 0x82, 0x18, 0xfe, + 0xb4, 0x43, 0xed, 0x99, 0x94, 0x02, 0xfd, 0x8f, 0x13, 0xab, 0x6d, 0xa6, 0xa9, 0x1b, 0xe4, 0xb4, + 0x4c, 0x19, 0x66, 0xc4, 0x59, 0x3a, 0xbb, 0x87, 0x25, 0x9d, 0xb8, 0x3b, 0xb5, 0x35, 0x2f, 0xcc, + 0xf0, 0xc6, 0x1b, 0x33, 0xf0, 0x85, 0x78, 0xe2, 0x0b, 0xf0, 0xc6, 0x97, 0x61, 0xee, 0x24, 0xd9, + 0xb2, 0xe2, 0x16, 0x92, 0x76, 0x86, 0xb7, 0xdb, 0xdb, 0xdd, 0xdb, 0xdf, 0xfe, 0x6e, 0x77, 0x75, + 0x82, 0x8d, 0xbe, 0x3f, 0x92, 0x84, 0x7a, 0x7e, 0x13, 0x7b, 0x01, 0x0d, 0x9b, 0x2e, 0x0b, 0x02, + 0x16, 0x36, 0x22, 0xce, 0x24, 0x43, 0x2b, 0x99, 0xb2, 0xa1, 0x95, 0xeb, 0xef, 0x8c, 0x8d, 0x5d, + 0xc6, 0x49, 0x93, 0xbc, 0x20, 0x6e, 0x2c, 0x69, 0x66, 0xbe, 0x7e, 0x7e, 0x5a, 0x4d, 0x3d, 0x12, + 0x4a, 0xda, 0xa7, 0x84, 0xa7, 0xfa, 0xb7, 0xa7, 0xf5, 0x3e, 0x95, 0x84, 0x63, 0x5f, 0xa4, 0xda, + 0x77, 0x07, 0x8c, 0x0d, 0x7c, 0xd2, 0xd4, 0x52, 0x2f, 0xee, 0x37, 0x25, 0x0d, 0x88, 0x90, 0x38, + 0x88, 0x12, 0x03, 0x93, 0xc1, 0x99, 0x0e, 0x0e, 0x88, 0x67, 0x85, 0x92, 0xca, 0xd1, 0xee, 0xf8, + 0x74, 0x54, 0x87, 0xc5, 0x88, 0xb3, 0xef, 0x89, 0x2b, 0xeb, 0xc6, 0xa6, 0xf1, 0x71, 0xd5, 0xce, + 0x44, 0x74, 0x16, 0x2a, 0x1e, 0x0b, 0x30, 0x0d, 0xeb, 0x25, 0xad, 0x48, 0x25, 0x84, 0xa0, 0x1c, + 0xe2, 0x80, 0xd4, 0xe7, 0xf5, 0xae, 0x5e, 0xa3, 0x1a, 0xcc, 0x33, 0x3e, 0xa8, 0x97, 0xf5, 0x96, + 0x5a, 0x9a, 0x0c, 0x56, 0x73, 0x01, 0x1f, 0x10, 0x89, 0x3d, 0x2c, 0x31, 0xda, 0x84, 0x65, 0x8f, + 0x08, 0x97, 0xd3, 0x48, 0xe5, 0x9e, 0x86, 0xcc, 0x6f, 0xa1, 0xcf, 0x60, 0x41, 0x48, 0x2c, 0x89, + 0x8e, 0xba, 0xb2, 0xb5, 0xd9, 0x98, 0xe6, 0xb1, 0x91, 0x3b, 0xb5, 0xab, 0xec, 0xec, 0xc4, 0xdc, + 0xfc, 0xd3, 0x80, 0xe5, 0x9c, 0x0e, 0x7d, 0x09, 0x27, 0x39, 0x11, 0x2c, 0xe6, 0x2e, 0x71, 0xe4, + 0x28, 0x22, 0x3a, 0xd6, 0xca, 0xd6, 0xc6, 0xe4, 0x3c, 0x45, 0x64, 0xc3, 0x4e, 0x6d, 0x0e, 0x46, + 0x11, 0xb1, 0x4f, 0xf0, 0x9c, 0x84, 0xae, 0x40, 0x89, 0x7a, 0x1a, 0xc6, 0xf2, 0xd6, 0x07, 0xaf, + 0x80, 0x31, 0x61, 0xd3, 0x2e, 0x51, 0x0f, 0xdd, 0x86, 0xa5, 0x20, 0x4d, 0x57, 0x73, 0xb4, 0xbc, + 0xf5, 0xfe, 0x2b, 0x9c, 0x33, 0x66, 0xec, 0xb1, 0x93, 0xf9, 0xb3, 0x01, 0xe5, 0x2e, 0xe3, 0x52, + 0xb1, 0x3a, 0x24, 0xa3, 0x94, 0x24, 0xb5, 0x44, 0x37, 0xa0, 0xea, 0x51, 0x4e, 0x5c, 0x4d, 0x5e, + 0x42, 0xd0, 0xf9, 0xe2, 0xe1, 0xca, 0xb5, 0xd1, 0xce, 0xac, 0xec, 0x89, 0x83, 0x79, 0x11, 0xaa, + 0xe3, 0x7d, 0xb4, 0x02, 0xd0, 0xb6, 0xba, 0x3b, 0x56, 0xa7, 0xbd, 0xdb, 0xb9, 0x5b, 0x9b, 0x43, + 0x27, 0xa1, 0xda, 0x1a, 0x8b, 0x86, 0xf9, 0xb7, 0x01, 0x9b, 0x33, 0x73, 0xdc, 0xa3, 0x42, 0xda, + 0xe4, 0x87, 0x98, 0x08, 0x79, 0x8c, 0xe2, 0x59, 0x83, 0x05, 0x9f, 0x06, 0x54, 0x6a, 0x66, 0x4e, + 0xda, 0x89, 0xa0, 0x76, 0x25, 0x1b, 0x92, 0x30, 0x2d, 0xa0, 0x44, 0x40, 0x97, 0x60, 0x51, 0x30, + 0x2e, 0x9d, 0xde, 0xa8, 0xbe, 0xa0, 0x79, 0x5c, 0x9b, 0x95, 0xaa, 0x5d, 0x51, 0x46, 0xdb, 0x23, + 0x05, 0xa6, 0x4f, 0x7d, 0x49, 0xb8, 0xa8, 0x57, 0x12, 0x30, 0xa9, 0x98, 0x55, 0xe7, 0xe2, 0xa4, + 0x3a, 0x7f, 0x2b, 0xc1, 0xd9, 0x5c, 0x76, 0xf9, 0x9c, 0x5e, 0xbf, 0x6e, 0x72, 0xac, 0x94, 0x5e, + 0xc6, 0xca, 0xfc, 0x6c, 0x56, 0xca, 0x33, 0x59, 0x59, 0x78, 0x09, 0x2b, 0x95, 0xa3, 0xb1, 0xb2, + 0x38, 0x93, 0x95, 0xa5, 0x09, 0x2b, 0x12, 0xce, 0xbd, 0xf4, 0xca, 0x51, 0x0b, 0x96, 0x94, 0x2c, + 0x29, 0x11, 0x75, 0x63, 0x73, 0xfe, 0xbf, 0xf7, 0xc4, 0xd8, 0x6d, 0x92, 0x50, 0x29, 0x97, 0x90, + 0xf9, 0x1d, 0x9c, 0x2a, 0x5c, 0x05, 0xfa, 0xfc, 0x50, 0xac, 0x8d, 0x57, 0xc4, 0xfa, 0xd7, 0x08, + 0xbf, 0x1a, 0x53, 0xd3, 0xef, 0x2e, 0x79, 0x83, 0x97, 0x7d, 0xbc, 0x21, 0x61, 0xfe, 0x65, 0x40, + 0x3d, 0xa7, 0x7d, 0x14, 0x79, 0x6a, 0x94, 0xfd, 0xcf, 0xa8, 0x5e, 0x7f, 0x74, 0x6d, 0x4c, 0x55, + 0x50, 0x96, 0x95, 0x88, 0x58, 0x28, 0x88, 0x79, 0x13, 0x6a, 0x0f, 0x7b, 0xaa, 0x0f, 0x72, 0x17, + 0x70, 0x41, 0x03, 0x35, 0x74, 0xac, 0x73, 0x85, 0xfc, 0x0a, 0x94, 0xfd, 0x61, 0xc0, 0x6a, 0x96, + 0x72, 0xbe, 0x61, 0xaf, 0xe4, 0x8e, 0x38, 0x42, 0xae, 0xe3, 0x9e, 0x2b, 0xcd, 0xec, 0xb9, 0xf9, + 0x7c, 0xcf, 0xe5, 0x9a, 0xa8, 0x3c, 0xdd, 0x44, 0x47, 0x9b, 0x51, 0xe6, 0x2d, 0x38, 0x6d, 0x05, + 0x98, 0xfa, 0x1d, 0xa6, 0x90, 0xb8, 0x58, 0x4f, 0xe2, 0x0b, 0x50, 0xe3, 0xc4, 0xa5, 0x11, 0x25, + 0xa1, 0x14, 0x0e, 0x51, 0x7a, 0x5d, 0xf5, 0x55, 0xfb, 0xd4, 0x64, 0x5f, 0xbb, 0x99, 0xdb, 0x70, + 0x66, 0x1f, 0x0f, 0x08, 0x6f, 0xc7, 0x72, 0x74, 0xdc, 0x33, 0x6e, 0xc1, 0xe9, 0xae, 0x8f, 0xdd, + 0xe1, 0x71, 0xfd, 0x7f, 0x2f, 0xc1, 0x89, 0x29, 0xdf, 0x5b, 0x50, 0x89, 0x9e, 0x62, 0x91, 0xf6, + 0xea, 0xca, 0xd6, 0x87, 0x85, 0x7b, 0xfc, 0x9a, 0xf1, 0x61, 0xdf, 0x67, 0xcf, 0xad, 0xf1, 0x93, + 0x67, 0x5f, 0x99, 0xdb, 0xa9, 0x17, 0xba, 0x0a, 0x0b, 0x49, 0xc0, 0xa4, 0x5e, 0xdf, 0x2b, 0x32, + 0x78, 0x88, 0xb1, 0x7b, 0x73, 0x76, 0xe2, 0x81, 0xee, 0x00, 0x44, 0x8a, 0x0f, 0xc7, 0x8b, 0xe5, + 0x28, 0x2d, 0xd9, 0x43, 0x35, 0x30, 0x93, 0xb1, 0x7b, 0x73, 0x76, 0x35, 0xca, 0x14, 0x0a, 0x82, + 0x50, 0x9c, 0xe8, 0xeb, 0x9d, 0x01, 0xe1, 0x10, 0x61, 0x0a, 0x82, 0xf6, 0xd8, 0xae, 0x40, 0x59, + 0xf5, 0xa8, 0x79, 0x05, 0x16, 0x1f, 0x71, 0x7f, 0xdb, 0x67, 0x3d, 0x35, 0x59, 0x63, 0xee, 0x67, + 0xdf, 0xed, 0x98, 0xfb, 0xaa, 0xac, 0x7a, 0x23, 0x49, 0x84, 0x4e, 0x71, 0xde, 0x4e, 0x84, 0x6b, + 0xa5, 0xba, 0x61, 0xfe, 0x04, 0x95, 0x3d, 0xdc, 0x23, 0xbe, 0x40, 0xd7, 0xa0, 0xf2, 0x0c, 0xfb, + 0xf1, 0x78, 0xe4, 0x99, 0x45, 0x10, 0x89, 0x5d, 0xe3, 0xb1, 0x36, 0xb2, 0x42, 0xc9, 0x47, 0x76, + 0xea, 0xb1, 0x7e, 0x15, 0x96, 0x73, 0xdb, 0x33, 0x1e, 0x0e, 0x6b, 0xb0, 0xa0, 0x4d, 0xb3, 0xc1, + 0xa8, 0x85, 0x6b, 0xa5, 0x2f, 0x0c, 0xf3, 0x17, 0x03, 0x96, 0x5b, 0x61, 0xc8, 0xa4, 0xce, 0x4b, + 0xa0, 0xdb, 0x05, 0x18, 0x1f, 0x15, 0x61, 0xe4, 0x8c, 0xdf, 0x34, 0x96, 0xeb, 0x50, 0xb6, 0xc2, + 0x67, 0x02, 0x5d, 0x2e, 0x60, 0x28, 0x4e, 0xbe, 0xfb, 0x64, 0xa4, 0x43, 0xec, 0x63, 0xca, 0xb3, + 0xb8, 0xe6, 0x8f, 0xb0, 0xd4, 0x8a, 0xe5, 0x53, 0x9b, 0xf9, 0x04, 0x7d, 0x02, 0x08, 0x0b, 0x11, + 0x07, 0xb8, 0xe7, 0x13, 0x87, 0xe2, 0xc0, 0xe1, 0xcc, 0x27, 0x29, 0x86, 0xda, 0x58, 0xb3, 0x8b, + 0x03, 0x6d, 0x7d, 0x03, 0xd6, 0x87, 0x71, 0x8f, 0xf0, 0x90, 0x48, 0x22, 0x1c, 0x41, 0xf8, 0x33, + 0xea, 0x12, 0x07, 0xbb, 0x2e, 0x8b, 0xc3, 0xec, 0x1b, 0x5e, 0x9f, 0x58, 0x74, 0x13, 0x83, 0x56, + 0xa2, 0xd7, 0xb7, 0x78, 0x1f, 0x56, 0x6d, 0xfc, 0xfc, 0x61, 0x2c, 0xa3, 0x58, 0xb6, 0xb1, 0xc4, + 0x3b, 0x2c, 0xec, 0xd3, 0x01, 0xfa, 0x14, 0xce, 0x32, 0xbd, 0xe7, 0xf8, 0x2c, 0xa9, 0x1b, 0x27, + 0xe2, 0xa4, 0x4f, 0x5f, 0xa4, 0x50, 0xd6, 0x12, 0xed, 0x5e, 0xaa, 0xdc, 0xd7, 0x3a, 0xf3, 0x2b, + 0xa8, 0xde, 0x51, 0xe9, 0x3e, 0xb2, 0xf7, 0x84, 0x7a, 0x32, 0xd0, 0x30, 0x8a, 0xa5, 0x48, 0x5d, + 0x52, 0x49, 0x8d, 0xa4, 0xc4, 0x59, 0x64, 0x8f, 0x8c, 0x54, 0x54, 0xef, 0x73, 0x8f, 0xb8, 0xc3, + 0xec, 0x7d, 0xae, 0xd6, 0x17, 0xbf, 0x85, 0x5a, 0xf1, 0xdd, 0x8c, 0xde, 0x82, 0xd5, 0x4e, 0xeb, + 0x81, 0xd5, 0x76, 0xac, 0xce, 0xc1, 0xee, 0xc1, 0x13, 0xa7, 0xb5, 0x73, 0xb0, 0xfb, 0xd8, 0xaa, + 0xcd, 0xa1, 0x73, 0x70, 0x66, 0x5a, 0x61, 0xef, 0xdc, 0xdb, 0x7d, 0x6c, 0xb5, 0x6b, 0x06, 0x5a, + 0x83, 0x5a, 0xf7, 0x49, 0xf7, 0xc0, 0x7a, 0xe0, 0xdc, 0xb5, 0x3a, 0x96, 0xdd, 0x3a, 0xb0, 0xda, + 0xb5, 0xd2, 0xf6, 0xcd, 0x6f, 0xae, 0x0f, 0xa8, 0x7c, 0x1a, 0xf7, 0x1a, 0x2e, 0x0b, 0x9a, 0xfa, + 0xaa, 0x18, 0x1f, 0x24, 0x8b, 0xe6, 0xf8, 0xbf, 0x65, 0x40, 0xc2, 0x66, 0xd4, 0xbb, 0x34, 0x60, + 0xcd, 0xe9, 0xdf, 0xa6, 0x5e, 0x45, 0xff, 0xa2, 0x5c, 0xfe, 0x27, 0x00, 0x00, 0xff, 0xff, 0xa8, + 0x9c, 0xe3, 0x6a, 0x4f, 0x0d, 0x00, 0x00, } diff --git a/flyteidl/gen/pb-go/flyteidl/admin/execution.pb.go b/flyteidl/gen/pb-go/flyteidl/admin/execution.pb.go index 6ee9c5dc15..a77fcce08b 100644 --- a/flyteidl/gen/pb-go/flyteidl/admin/execution.pb.go +++ b/flyteidl/gen/pb-go/flyteidl/admin/execution.pb.go @@ -115,10 +115,12 @@ type ExecutionCreateRequest struct { // The inputs required to start the execution. All required inputs must be // included in this map. If not required and not provided, defaults apply. // +optional - Inputs *core.LiteralMap `protobuf:"bytes,5,opt,name=inputs,proto3" json:"inputs,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Inputs *core.LiteralMap `protobuf:"bytes,5,opt,name=inputs,proto3" json:"inputs,omitempty"` + // Optional, org key applied to the resource. + Org string `protobuf:"bytes,6,opt,name=org,proto3" json:"org,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *ExecutionCreateRequest) Reset() { *m = ExecutionCreateRequest{} } @@ -181,6 +183,13 @@ func (m *ExecutionCreateRequest) GetInputs() *core.LiteralMap { return nil } +func (m *ExecutionCreateRequest) GetOrg() string { + if m != nil { + return m.Org + } + return "" +} + // Request to relaunch the referenced execution. type ExecutionRelaunchRequest struct { // Identifier of the workflow execution to relaunch. @@ -1739,122 +1748,123 @@ func init() { func init() { proto.RegisterFile("flyteidl/admin/execution.proto", fileDescriptor_4e2785d91b3809ec) } var fileDescriptor_4e2785d91b3809ec = []byte{ - // 1862 bytes of a gzipped FileDescriptorProto + // 1874 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x58, 0x5b, 0x73, 0xdb, 0xc6, - 0x15, 0x16, 0x29, 0x52, 0xa2, 0x0e, 0x25, 0x8a, 0x5e, 0x29, 0x0a, 0x2c, 0x3b, 0xb6, 0x82, 0x4c, - 0x6b, 0x4f, 0x32, 0x25, 0x27, 0x4a, 0x3d, 0x9d, 0x38, 0x71, 0x26, 0x14, 0x45, 0x87, 0x4c, 0x75, - 0x71, 0x57, 0x17, 0xe7, 0x32, 0x19, 0x74, 0x09, 0x2c, 0x49, 0x34, 0xb8, 0x79, 0x77, 0x21, 0xd9, - 0xff, 0xa0, 0xd3, 0xa7, 0x3e, 0xb6, 0xff, 0xa0, 0x4f, 0x7d, 0xec, 0x2f, 0xe8, 0x8f, 0xea, 0x63, - 0x07, 0x8b, 0x05, 0x08, 0x80, 0x94, 0x25, 0x8f, 0xf5, 0x86, 0x3d, 0xe7, 0x3b, 0x67, 0xcf, 0x9e, - 0x3d, 0xb7, 0x05, 0x3c, 0x18, 0x39, 0x6f, 0x04, 0xb5, 0x2d, 0xa7, 0x4d, 0x2c, 0xd7, 0xf6, 0xda, - 0xf4, 0x35, 0x35, 0x43, 0x61, 0xfb, 0x5e, 0x2b, 0x60, 0xbe, 0xf0, 0x51, 0x23, 0xe1, 0xb7, 0x24, - 0x7f, 0xfb, 0x51, 0x01, 0x6f, 0x3a, 0x21, 0x17, 0x94, 0x19, 0x84, 0x73, 0x7b, 0xec, 0xb9, 0xd4, - 0x13, 0xb1, 0xe0, 0xf6, 0xbd, 0x22, 0xd0, 0x77, 0xdd, 0x44, 0xeb, 0xf6, 0xfd, 0x94, 0x69, 0xfa, - 0x8c, 0xb6, 0x1d, 0x5b, 0x50, 0x46, 0x1c, 0xae, 0xb8, 0x1f, 0xe5, 0xb9, 0x05, 0x93, 0xb6, 0x1f, - 0xe6, 0xd9, 0x84, 0x09, 0x7b, 0x44, 0x4c, 0x61, 0xd8, 0x96, 0x02, 0x3c, 0xc8, 0x03, 0x6c, 0x8b, - 0x7a, 0xc2, 0x1e, 0xd9, 0x94, 0xcd, 0x98, 0x26, 0xf9, 0x2e, 0x15, 0xcc, 0x36, 0xf9, 0x7c, 0xd3, - 0x38, 0x35, 0x43, 0x66, 0x8b, 0x37, 0x89, 0xea, 0xb1, 0xef, 0x8f, 0x1d, 0xda, 0x96, 0xab, 0x61, - 0x38, 0x6a, 0x5b, 0x21, 0x23, 0x59, 0xdb, 0x8a, 0x7c, 0x61, 0xbb, 0x94, 0x0b, 0xe2, 0x06, 0x57, - 0x29, 0xb8, 0x64, 0x24, 0x08, 0x28, 0x53, 0xdb, 0xeb, 0xff, 0x2d, 0xc1, 0x56, 0x2f, 0x39, 0x70, - 0x97, 0x51, 0x22, 0x28, 0xa6, 0xaf, 0x42, 0xca, 0x05, 0xd2, 0x60, 0x39, 0x60, 0xfe, 0x5f, 0xa8, - 0x29, 0xb4, 0xd2, 0x4e, 0xe9, 0xf1, 0x0a, 0x4e, 0x96, 0x68, 0x0b, 0x96, 0x2c, 0xdf, 0x25, 0xb6, - 0xa7, 0x95, 0x25, 0x43, 0xad, 0x10, 0x82, 0x8a, 0x47, 0x5c, 0xaa, 0x2d, 0x4a, 0xaa, 0xfc, 0x46, - 0x9f, 0x43, 0x85, 0x07, 0xd4, 0xd4, 0x2a, 0x3b, 0xa5, 0xc7, 0xf5, 0xdd, 0x8f, 0x5a, 0xf9, 0xfb, - 0x6d, 0xa5, 0x7b, 0x9f, 0x04, 0xd4, 0xc4, 0x12, 0x8a, 0x3e, 0x87, 0x25, 0xdb, 0x0b, 0x42, 0xc1, - 0xb5, 0xaa, 0x14, 0xba, 0x3b, 0x15, 0x8a, 0x7c, 0xd4, 0x3a, 0x88, 0xaf, 0xef, 0x90, 0x04, 0x58, - 0x01, 0xf5, 0x7f, 0x96, 0x40, 0x4b, 0x55, 0x61, 0xea, 0x90, 0xd0, 0x33, 0x27, 0xc9, 0x41, 0x9e, - 0x42, 0xd9, 0xb6, 0xe4, 0x19, 0xea, 0xbb, 0x9f, 0x16, 0x74, 0xbd, 0xf4, 0xd9, 0xaf, 0x23, 0xc7, - 0xbf, 0x4c, 0x85, 0x07, 0xe9, 0xed, 0xe1, 0xb2, 0x6d, 0xcd, 0x3d, 0xd2, 0x23, 0x58, 0xf7, 0x2f, - 0x28, 0xbb, 0x64, 0xb6, 0xa0, 0x86, 0x49, 0xcc, 0x09, 0x95, 0xa7, 0xab, 0xe1, 0x46, 0x4a, 0xee, - 0x46, 0xd4, 0xef, 0x2b, 0xb5, 0x72, 0x73, 0x51, 0xff, 0x57, 0x09, 0x3e, 0xcc, 0xd8, 0x66, 0x46, - 0xa0, 0xdb, 0x34, 0xad, 0x9c, 0x31, 0xed, 0x19, 0xd4, 0x5c, 0x2a, 0x88, 0x45, 0x04, 0x91, 0x26, - 0xd7, 0x77, 0x3f, 0xbe, 0xd2, 0xe3, 0x87, 0x0a, 0x88, 0x53, 0x11, 0xfd, 0x2c, 0x63, 0x69, 0x12, - 0x0c, 0x3c, 0xf0, 0x3d, 0x4e, 0xdf, 0xc7, 0x52, 0xfd, 0x47, 0xb8, 0x37, 0x03, 0xf9, 0x8e, 0x8a, - 0x5b, 0x70, 0x82, 0xfe, 0x9f, 0x12, 0xac, 0xa4, 0xbc, 0xf7, 0x72, 0x67, 0x12, 0xa8, 0xe5, 0x9b, - 0x07, 0xea, 0x53, 0x58, 0x36, 0x1d, 0x9f, 0x87, 0x8c, 0x2a, 0x67, 0xef, 0x5c, 0x29, 0xd5, 0x8d, - 0x71, 0x38, 0x11, 0xd0, 0xff, 0x0c, 0x6b, 0x29, 0xf3, 0xc0, 0xe6, 0x02, 0x7d, 0x09, 0x90, 0x56, - 0x1e, 0xae, 0x95, 0x76, 0x16, 0xf3, 0x91, 0x5f, 0xd0, 0x87, 0x33, 0x60, 0xb4, 0x09, 0x55, 0xe1, - 0xff, 0x4a, 0x93, 0x74, 0x8c, 0x17, 0x3a, 0x85, 0xc6, 0x34, 0x53, 0xf6, 0x1c, 0x7f, 0x88, 0xfe, - 0x00, 0x4b, 0x17, 0xc4, 0x09, 0x29, 0x57, 0x2e, 0xba, 0x3a, 0xb1, 0xf6, 0xca, 0x5a, 0xa9, 0xbf, - 0x80, 0x15, 0x1c, 0x21, 0x58, 0x0c, 0x99, 0x1d, 0xab, 0xef, 0x2f, 0xe0, 0x68, 0xb1, 0xb7, 0x04, - 0x15, 0x19, 0x33, 0x5d, 0x58, 0xeb, 0x0c, 0x7d, 0x26, 0x92, 0x70, 0x8a, 0xac, 0x31, 0x49, 0xc8, - 0xa9, 0xaa, 0x1a, 0xf1, 0x02, 0xdd, 0x87, 0x95, 0x80, 0xd9, 0x9e, 0x69, 0x07, 0xc4, 0x51, 0x76, - 0x4e, 0x09, 0xfa, 0x3f, 0x96, 0xa1, 0x59, 0xf4, 0x15, 0xfa, 0x06, 0x96, 0xfd, 0x50, 0xc8, 0x42, - 0x10, 0xdb, 0xfb, 0xa0, 0xe8, 0x8e, 0xfc, 0xf9, 0x94, 0xd1, 0x89, 0x10, 0x7a, 0x02, 0x55, 0xca, - 0x98, 0xcf, 0x66, 0xaf, 0x54, 0x9e, 0x36, 0xdd, 0xaf, 0x17, 0x81, 0xfa, 0x0b, 0x38, 0x46, 0xa3, - 0xdf, 0x40, 0x9d, 0x44, 0x07, 0x32, 0xe2, 0x53, 0x40, 0x64, 0xab, 0x52, 0x0d, 0x92, 0xd1, 0x95, - 0x07, 0x7a, 0x0e, 0x8d, 0x18, 0x96, 0x26, 0xdc, 0xea, 0xfc, 0xc8, 0xc9, 0x79, 0xa7, 0xbf, 0x80, - 0xd7, 0x48, 0xce, 0x5d, 0xdf, 0x42, 0x3d, 0x36, 0xd8, 0x90, 0x4a, 0xd6, 0x6e, 0x76, 0x33, 0x10, - 0xcb, 0xec, 0x47, 0x1a, 0x9e, 0xc3, 0xba, 0xe9, 0xbb, 0x41, 0x28, 0xa8, 0x65, 0xa8, 0xc2, 0xb9, - 0x78, 0x03, 0x2d, 0xb8, 0x91, 0x48, 0x0d, 0xa4, 0x10, 0xfa, 0x1a, 0xaa, 0xc1, 0x84, 0xf0, 0xb8, - 0x9a, 0x35, 0x76, 0x7f, 0x7b, 0x5d, 0x02, 0xb5, 0x5e, 0x44, 0x68, 0x1c, 0x0b, 0x45, 0xf1, 0xcb, - 0x05, 0x61, 0x91, 0x11, 0x44, 0xa8, 0xca, 0xbd, 0xdd, 0x8a, 0xdb, 0x4f, 0x2b, 0x69, 0x3f, 0xad, - 0xd3, 0xa4, 0x3f, 0xe1, 0x15, 0x85, 0xee, 0x08, 0xf4, 0x04, 0x6a, 0x49, 0x5f, 0xd3, 0x96, 0x94, - 0xe5, 0x45, 0xc1, 0x7d, 0x05, 0xc0, 0x29, 0x34, 0xda, 0xd1, 0x94, 0x45, 0x4a, 0xee, 0xb8, 0x7c, - 0xfd, 0x8e, 0x0a, 0xdd, 0x91, 0xc9, 0x16, 0x06, 0x56, 0x22, 0x5a, 0xbb, 0x5e, 0x54, 0xa1, 0x3b, - 0x02, 0xed, 0xc1, 0x9a, 0xe7, 0x47, 0x75, 0xc3, 0x24, 0x71, 0xaa, 0xae, 0xc8, 0x54, 0xbd, 0x5f, - 0xbc, 0xf6, 0xa3, 0x0c, 0x08, 0xe7, 0x45, 0xd0, 0x53, 0xa8, 0x5f, 0x2a, 0x6f, 0x1a, 0xb6, 0xa5, - 0xd5, 0xe7, 0xde, 0x56, 0xa6, 0x3e, 0x41, 0x82, 0x1e, 0x58, 0xe8, 0x17, 0xd8, 0xe4, 0x82, 0x44, - 0x9d, 0x67, 0x42, 0xbc, 0x31, 0x35, 0x2c, 0x2a, 0x88, 0xed, 0x70, 0xad, 0x21, 0x95, 0x7c, 0x76, - 0x75, 0xdd, 0x8a, 0x84, 0xba, 0x52, 0x66, 0x3f, 0x16, 0xc1, 0x88, 0xcf, 0xd0, 0xf6, 0xd6, 0x61, - 0x4d, 0x85, 0x23, 0xa3, 0x3c, 0x74, 0x84, 0xfe, 0x33, 0x34, 0x4e, 0xde, 0x70, 0x41, 0xdd, 0x34, - 0x62, 0x3f, 0x83, 0x3b, 0x69, 0xf1, 0x31, 0xd4, 0x40, 0xa6, 0x92, 0xbd, 0x49, 0xa7, 0x49, 0x2c, - 0xe9, 0x51, 0xde, 0x47, 0x9d, 0x89, 0x07, 0xc4, 0x4c, 0x5a, 0xd5, 0x94, 0xa0, 0xff, 0xaf, 0x02, - 0x77, 0x66, 0x1a, 0x12, 0xea, 0x42, 0xc5, 0xf5, 0xad, 0xb8, 0x80, 0x34, 0x76, 0xdb, 0xd7, 0x76, - 0xb0, 0x0c, 0xc5, 0xb7, 0x28, 0x96, 0xc2, 0x6f, 0x2f, 0x38, 0xd1, 0x70, 0xe3, 0x51, 0x2e, 0x6c, - 0x6f, 0x2c, 0x73, 0x65, 0x0d, 0x27, 0x4b, 0xf4, 0x0c, 0x56, 0xb9, 0x39, 0xa1, 0x56, 0xe8, 0xc4, - 0xc1, 0x51, 0xb9, 0x36, 0x38, 0xea, 0x29, 0xbe, 0x23, 0xd0, 0x4f, 0xf0, 0x41, 0x40, 0x18, 0xf5, - 0x84, 0xe1, 0xf9, 0x16, 0x35, 0x52, 0x7f, 0xa8, 0x8c, 0x28, 0x26, 0xd5, 0x91, 0x6f, 0xd1, 0x79, - 0x1d, 0x69, 0x23, 0x56, 0x92, 0x63, 0xa3, 0x9f, 0x61, 0x83, 0xd1, 0x11, 0x65, 0xd4, 0x33, 0xb3, - 0x9a, 0x9b, 0xef, 0xdc, 0xef, 0x50, 0xaa, 0x66, 0xaa, 0xfc, 0x3b, 0x58, 0xe7, 0xf2, 0x9e, 0xa7, - 0x05, 0xed, 0xce, 0xfc, 0xaa, 0x9b, 0x0f, 0x07, 0xdc, 0xe0, 0xf9, 0xf0, 0xf8, 0x1a, 0x56, 0x33, - 0x33, 0x32, 0xd7, 0x50, 0xb1, 0x95, 0x49, 0xf3, 0x3a, 0x0a, 0x32, 0xd8, 0xc7, 0xf5, 0x04, 0x3e, - 0xb0, 0xb8, 0x3e, 0xce, 0xf4, 0xc5, 0xe8, 0x36, 0x11, 0xc0, 0xd2, 0x61, 0xe7, 0xe8, 0xac, 0x73, - 0xd0, 0x5c, 0x40, 0x6b, 0xb0, 0x72, 0xd2, 0xed, 0xf7, 0xf6, 0xcf, 0x0e, 0x7a, 0xfb, 0xcd, 0x52, - 0xc4, 0x3a, 0xf9, 0xf1, 0xe4, 0xb4, 0x77, 0xd8, 0x2c, 0xa3, 0x55, 0xa8, 0xe1, 0xde, 0x41, 0xe7, - 0xec, 0xa8, 0xdb, 0x6f, 0x2e, 0x22, 0x04, 0x8d, 0x6e, 0x7f, 0x70, 0xb0, 0x6f, 0xbc, 0x3c, 0xc6, - 0x7f, 0x7c, 0x7e, 0x70, 0xfc, 0xb2, 0x59, 0x89, 0x84, 0x71, 0xaf, 0x7b, 0x7c, 0xde, 0xc3, 0xbd, - 0xfd, 0x66, 0x55, 0x3f, 0x87, 0x66, 0x36, 0x45, 0x65, 0x0f, 0x9e, 0xc9, 0xed, 0xd2, 0x3b, 0xe7, - 0xb6, 0xfe, 0xf7, 0x5a, 0xe6, 0x04, 0x27, 0xf1, 0x98, 0x50, 0x8f, 0x07, 0x52, 0x23, 0x70, 0x88, - 0x77, 0x45, 0xef, 0xcd, 0x66, 0x7b, 0x8c, 0x7e, 0xe1, 0x10, 0x0f, 0x3d, 0x49, 0x67, 0xe1, 0xf2, - 0x4d, 0x4a, 0xba, 0x02, 0xbf, 0xe7, 0x1c, 0x88, 0xfa, 0x45, 0x3f, 0x54, 0xe7, 0x8f, 0x37, 0x45, - 0x07, 0x46, 0xdd, 0x2d, 0x5f, 0xe9, 0x3e, 0x86, 0xba, 0x65, 0x73, 0x32, 0x74, 0xa8, 0x41, 0x1c, - 0x47, 0x56, 0xf7, 0x5a, 0xd4, 0xbe, 0x14, 0xb1, 0xe3, 0x38, 0xa8, 0x05, 0x4b, 0x0e, 0x19, 0x52, - 0x87, 0xab, 0x12, 0xbe, 0x35, 0xd3, 0xe5, 0x25, 0x17, 0x2b, 0x14, 0x7a, 0x06, 0x75, 0xe2, 0x79, - 0xbe, 0x50, 0xa6, 0xc5, 0xc5, 0xfb, 0xde, 0x4c, 0xd7, 0x9d, 0x42, 0x70, 0x16, 0x8f, 0x06, 0xd0, - 0x4c, 0x1e, 0x59, 0x86, 0xe9, 0x7b, 0x82, 0xbe, 0x16, 0xb2, 0xc7, 0xe7, 0x02, 0x5d, 0xfa, 0xf6, - 0x44, 0xc1, 0xba, 0x31, 0x0a, 0xaf, 0xf3, 0x3c, 0x01, 0x7d, 0x09, 0x2b, 0x24, 0x14, 0x13, 0x83, - 0xf9, 0x0e, 0x55, 0x59, 0xa8, 0xcd, 0xd8, 0x11, 0x8a, 0x09, 0xf6, 0x1d, 0x2a, 0xaf, 0xa7, 0x46, - 0xd4, 0x0a, 0x1d, 0x02, 0x7a, 0x15, 0x12, 0x27, 0x32, 0xc2, 0x1f, 0x19, 0x9c, 0xb2, 0x0b, 0xdb, - 0xa4, 0x2a, 0xe1, 0x1e, 0x16, 0xec, 0xf8, 0x53, 0x0c, 0x3c, 0x1e, 0x9d, 0xc4, 0x30, 0xdc, 0x7c, - 0x55, 0xa0, 0x44, 0x4f, 0x12, 0x97, 0xbc, 0x36, 0x02, 0xc2, 0x88, 0xe3, 0x50, 0xc7, 0xe6, 0xae, - 0x86, 0x76, 0x4a, 0x8f, 0xab, 0xb8, 0xe1, 0x92, 0xd7, 0x2f, 0xa6, 0x54, 0xf4, 0x03, 0x6c, 0x31, - 0x72, 0x69, 0x64, 0x26, 0x8e, 0xc8, 0x09, 0x23, 0x7b, 0xac, 0x6d, 0xc8, 0xbd, 0x3f, 0x29, 0xda, - 0x8f, 0xc9, 0xe5, 0x71, 0x3a, 0x6a, 0x74, 0x25, 0x14, 0x6f, 0xb0, 0x59, 0x22, 0x7a, 0x01, 0x68, - 0xf6, 0x71, 0xae, 0x6d, 0xce, 0x0f, 0x3e, 0xd5, 0x1d, 0x3a, 0x29, 0x10, 0xdf, 0x31, 0x8b, 0x24, - 0xf4, 0x2d, 0xac, 0xd9, 0x9e, 0xa0, 0x8c, 0x85, 0x81, 0xb0, 0x87, 0x0e, 0xd5, 0x3e, 0xb8, 0xa2, - 0x14, 0xef, 0xf9, 0xbe, 0x73, 0x1e, 0x4d, 0xaa, 0x38, 0x2f, 0x30, 0xef, 0xa5, 0xb6, 0x35, 0xef, - 0xa5, 0x86, 0x1e, 0x43, 0x85, 0x7a, 0x17, 0x5c, 0xfb, 0x50, 0xee, 0xb0, 0x39, 0x93, 0x2b, 0xde, - 0x05, 0xc7, 0x12, 0x11, 0xbd, 0xba, 0x04, 0x19, 0x73, 0x4d, 0xdb, 0x59, 0x8c, 0x5e, 0x5d, 0xd1, - 0xf7, 0x9e, 0x06, 0x5b, 0xd9, 0xa8, 0x37, 0x22, 0xe5, 0xcc, 0xb6, 0x28, 0xff, 0xbe, 0x52, 0xab, - 0x34, 0xab, 0xba, 0x0b, 0x77, 0xd3, 0x6c, 0x3b, 0xa5, 0xcc, 0xb5, 0xbd, 0xcc, 0x33, 0xfb, 0x7d, - 0xde, 0x2c, 0xe9, 0xa8, 0x5d, 0xce, 0x8c, 0xda, 0xfa, 0x7d, 0xd8, 0x9e, 0xb7, 0x5d, 0xfc, 0x90, - 0xd3, 0x7f, 0x81, 0x87, 0xf3, 0x1e, 0x63, 0xd1, 0x4d, 0xde, 0xc6, 0x83, 0xec, 0xaf, 0x65, 0xd8, - 0xb9, 0x5a, 0xbf, 0x7a, 0x4c, 0x3e, 0x29, 0x4e, 0xf6, 0x1f, 0x16, 0x3d, 0x7e, 0xc6, 0x9c, 0x64, - 0xa4, 0x9f, 0x0e, 0xf4, 0x5f, 0x14, 0x8a, 0xe1, 0x5b, 0xa5, 0x92, 0x52, 0xf8, 0x14, 0xea, 0xa3, - 0xd0, 0x71, 0x6e, 0x3a, 0x19, 0x63, 0x88, 0xd0, 0xe9, 0x44, 0xbc, 0x2a, 0x65, 0x13, 0x63, 0x2b, - 0xd7, 0x09, 0xcb, 0xad, 0xe2, 0xd4, 0xe0, 0xfa, 0xdf, 0xb2, 0xff, 0x56, 0xce, 0xe4, 0x00, 0x79, - 0x1b, 0x97, 0xfe, 0x7b, 0xa8, 0xca, 0xb9, 0x4d, 0x3a, 0xa1, 0x31, 0xdb, 0x9e, 0xf3, 0x13, 0x1f, - 0x8e, 0xc1, 0xfa, 0xbf, 0x4b, 0x70, 0xef, 0x2d, 0xb3, 0xe0, 0x54, 0x6b, 0xe9, 0x1d, 0xb4, 0xa2, - 0xaf, 0xa0, 0xee, 0x9b, 0x66, 0xc8, 0x58, 0x3c, 0x2b, 0x95, 0xaf, 0x9d, 0x95, 0x20, 0x81, 0x77, - 0x44, 0x7e, 0x42, 0x5b, 0x2c, 0x3e, 0x09, 0xef, 0x66, 0xfe, 0x45, 0x24, 0xce, 0x53, 0x21, 0x7c, - 0x01, 0xfa, 0xbc, 0x10, 0x3b, 0x8c, 0x7f, 0xac, 0xdd, 0x52, 0x62, 0x59, 0x34, 0x10, 0x13, 0x79, - 0xa2, 0x2a, 0x8e, 0x17, 0xfa, 0x11, 0x7c, 0xf2, 0xd6, 0x7d, 0x55, 0x74, 0x3f, 0x82, 0x0a, 0x0f, - 0xd2, 0x46, 0xbf, 0x51, 0xec, 0x2a, 0x01, 0xf1, 0xb0, 0x04, 0x7c, 0xfa, 0x0d, 0x34, 0xf2, 0x6e, - 0x45, 0x9b, 0xd0, 0xec, 0xfd, 0xd0, 0xeb, 0x9e, 0x9d, 0x0e, 0x8e, 0x8f, 0x8c, 0x4e, 0xf7, 0x74, - 0x70, 0xde, 0x6b, 0x2e, 0xa0, 0x2d, 0x40, 0x19, 0x2a, 0xee, 0xf6, 0x07, 0xe7, 0xd1, 0xfc, 0xb3, - 0xf7, 0xec, 0xa7, 0xaf, 0xc6, 0xb6, 0x98, 0x84, 0xc3, 0x96, 0xe9, 0xbb, 0x6d, 0xb9, 0x8d, 0xcf, - 0xc6, 0xf1, 0x47, 0x3b, 0xfd, 0xaf, 0x38, 0xa6, 0x5e, 0x3b, 0x18, 0xfe, 0x6e, 0xec, 0xb7, 0xf3, - 0xbf, 0x48, 0x87, 0x4b, 0xf2, 0x7e, 0xbe, 0xf8, 0x7f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xae, 0xc9, - 0xe4, 0xb3, 0x94, 0x15, 0x00, 0x00, + 0x15, 0x16, 0x29, 0x52, 0xa6, 0x0e, 0x2d, 0x8a, 0x5e, 0x29, 0x0a, 0x2c, 0x3b, 0xb6, 0x82, 0x4c, + 0x6b, 0x4f, 0x32, 0x25, 0x27, 0x4a, 0x3d, 0x9d, 0x38, 0x71, 0x26, 0x14, 0x45, 0x47, 0x4c, 0x75, + 0x71, 0x57, 0x17, 0xe7, 0x32, 0x19, 0x74, 0x05, 0x2c, 0x29, 0x34, 0xb8, 0x79, 0x77, 0x21, 0xd9, + 0xff, 0xa0, 0xd3, 0xa7, 0x3e, 0xb6, 0xff, 0xa0, 0x4f, 0x7d, 0xec, 0x4f, 0xe9, 0x6f, 0xe9, 0x63, + 0x67, 0x17, 0x0b, 0x10, 0x00, 0x29, 0x4b, 0x1e, 0xeb, 0x0d, 0x7b, 0xce, 0x77, 0xce, 0x9e, 0x3d, + 0x7b, 0x6e, 0x0b, 0x78, 0x30, 0xf2, 0xde, 0x08, 0xea, 0x3a, 0x5e, 0x97, 0x38, 0xbe, 0x1b, 0x74, + 0xe9, 0x6b, 0x6a, 0xc7, 0xc2, 0x0d, 0x83, 0x4e, 0xc4, 0x42, 0x11, 0xa2, 0x56, 0xca, 0xef, 0x28, + 0xfe, 0xfa, 0xa3, 0x12, 0xde, 0xf6, 0x62, 0x2e, 0x28, 0xb3, 0x08, 0xe7, 0xee, 0x38, 0xf0, 0x69, + 0x20, 0x12, 0xc1, 0xf5, 0x7b, 0x65, 0x60, 0xe8, 0xfb, 0xa9, 0xd6, 0xf5, 0xfb, 0x19, 0xd3, 0x0e, + 0x19, 0xed, 0x7a, 0xae, 0xa0, 0x8c, 0x78, 0x5c, 0x73, 0x3f, 0x2a, 0x72, 0x4b, 0x26, 0xad, 0x3f, + 0x2c, 0xb2, 0x09, 0x13, 0xee, 0x88, 0xd8, 0xc2, 0x72, 0x1d, 0x0d, 0x78, 0x50, 0x04, 0xb8, 0x0e, + 0x0d, 0x84, 0x3b, 0x72, 0x29, 0x9b, 0x32, 0x4d, 0xf1, 0x7d, 0x2a, 0x98, 0x6b, 0xf3, 0xd9, 0xa6, + 0x71, 0x6a, 0xc7, 0xcc, 0x15, 0x6f, 0x52, 0xd5, 0xe3, 0x30, 0x1c, 0x7b, 0xb4, 0xab, 0x56, 0xa7, + 0xf1, 0xa8, 0xeb, 0xc4, 0x8c, 0xe4, 0x6d, 0x2b, 0xf3, 0x85, 0xeb, 0x53, 0x2e, 0x88, 0x1f, 0x5d, + 0xa6, 0xe0, 0x82, 0x91, 0x28, 0xa2, 0x4c, 0x6f, 0x6f, 0xfe, 0xb7, 0x02, 0x6b, 0x83, 0xf4, 0xc0, + 0x7d, 0x46, 0x89, 0xa0, 0x98, 0xbe, 0x8a, 0x29, 0x17, 0xc8, 0x80, 0x5b, 0x11, 0x0b, 0xff, 0x42, + 0x6d, 0x61, 0x54, 0x36, 0x2a, 0x8f, 0x17, 0x71, 0xba, 0x44, 0x6b, 0xb0, 0xe0, 0x84, 0x3e, 0x71, + 0x03, 0xa3, 0xaa, 0x18, 0x7a, 0x85, 0x10, 0xd4, 0x02, 0xe2, 0x53, 0x63, 0x5e, 0x51, 0xd5, 0x37, + 0xfa, 0x1c, 0x6a, 0x3c, 0xa2, 0xb6, 0x51, 0xdb, 0xa8, 0x3c, 0x6e, 0x6e, 0x7e, 0xd4, 0x29, 0xde, + 0x6f, 0x27, 0xdb, 0xfb, 0x30, 0xa2, 0x36, 0x56, 0x50, 0xf4, 0x39, 0x2c, 0xb8, 0x41, 0x14, 0x0b, + 0x6e, 0xd4, 0x95, 0xd0, 0xdd, 0x89, 0x90, 0xf4, 0x51, 0x67, 0x37, 0xb9, 0xbe, 0x3d, 0x12, 0x61, + 0x0d, 0x44, 0x6d, 0x98, 0x0f, 0xd9, 0xd8, 0x58, 0x50, 0x1b, 0xcb, 0x4f, 0xf3, 0x9f, 0x15, 0x30, + 0x32, 0xe5, 0x98, 0x7a, 0x24, 0x0e, 0xec, 0xb3, 0xf4, 0x68, 0x4f, 0xa1, 0xea, 0x3a, 0xea, 0x54, + 0xcd, 0xcd, 0x4f, 0x4b, 0xda, 0x5f, 0x86, 0xec, 0xd7, 0x91, 0x17, 0x5e, 0x64, 0xc2, 0xc3, 0xec, + 0x3e, 0x71, 0xd5, 0x75, 0x66, 0x1e, 0xf2, 0x11, 0x2c, 0x87, 0xe7, 0x94, 0x5d, 0x30, 0x57, 0x50, + 0xcb, 0x26, 0xf6, 0x19, 0x55, 0xe7, 0x6d, 0xe0, 0x56, 0x46, 0xee, 0x4b, 0xea, 0xf7, 0xb5, 0x46, + 0xb5, 0x3d, 0x6f, 0xfe, 0xab, 0x02, 0x1f, 0xe6, 0x6c, 0xb3, 0x25, 0xe8, 0x26, 0x4d, 0xab, 0xe6, + 0x4c, 0x7b, 0x06, 0x0d, 0x9f, 0x0a, 0xe2, 0x10, 0x41, 0x94, 0xc9, 0xcd, 0xcd, 0x8f, 0x2f, 0xbd, + 0x83, 0x3d, 0x0d, 0xc4, 0x99, 0x88, 0x79, 0x9c, 0xb3, 0x34, 0x0d, 0x0f, 0x1e, 0x85, 0x01, 0xa7, + 0xef, 0x63, 0xa9, 0xf9, 0x23, 0xdc, 0x9b, 0x82, 0x7c, 0x47, 0xc5, 0x0d, 0x38, 0xc1, 0xfc, 0x4f, + 0x05, 0x16, 0x33, 0xde, 0x7b, 0xb9, 0x33, 0x0d, 0xdd, 0xea, 0xf5, 0x43, 0xf7, 0x29, 0xdc, 0xb2, + 0xbd, 0x90, 0xc7, 0x8c, 0x6a, 0x67, 0x6f, 0x5c, 0x2a, 0xd5, 0x4f, 0x70, 0x38, 0x15, 0x30, 0xff, + 0x0c, 0x4b, 0x19, 0x73, 0xd7, 0xe5, 0x02, 0x7d, 0x09, 0x90, 0xd5, 0x22, 0x6e, 0x54, 0x36, 0xe6, + 0x8b, 0xb9, 0x50, 0xd2, 0x87, 0x73, 0x60, 0xb4, 0x0a, 0x75, 0x11, 0xfe, 0x4a, 0xd3, 0x04, 0x4d, + 0x16, 0x26, 0x85, 0xd6, 0x24, 0x77, 0xb6, 0xbc, 0xf0, 0x14, 0xfd, 0x01, 0x16, 0xce, 0x89, 0x17, + 0x53, 0xae, 0x5d, 0x74, 0x79, 0xaa, 0x6d, 0x55, 0x8d, 0xca, 0xce, 0x1c, 0xd6, 0x70, 0x84, 0x60, + 0x3e, 0x66, 0x6e, 0xa2, 0x7e, 0x67, 0x0e, 0xcb, 0xc5, 0xd6, 0x02, 0xd4, 0x54, 0xcc, 0xf4, 0x61, + 0xa9, 0x77, 0x1a, 0x32, 0x91, 0x86, 0x93, 0xb4, 0xc6, 0x26, 0x31, 0xa7, 0xba, 0x8e, 0x24, 0x0b, + 0x74, 0x1f, 0x16, 0x23, 0xe6, 0x06, 0xb6, 0x1b, 0x11, 0x4f, 0xdb, 0x39, 0x21, 0x98, 0xff, 0xb8, + 0x05, 0xed, 0xb2, 0xaf, 0xd0, 0x37, 0x70, 0x2b, 0x8c, 0x85, 0x2a, 0x0d, 0x89, 0xbd, 0x0f, 0xca, + 0xee, 0x28, 0x9e, 0x4f, 0x1b, 0x9d, 0x0a, 0xa1, 0x27, 0x50, 0xa7, 0x8c, 0x85, 0x6c, 0xfa, 0x4a, + 0xd5, 0x69, 0xb3, 0xfd, 0x06, 0x12, 0xb4, 0x33, 0x87, 0x13, 0x34, 0xfa, 0x0d, 0x34, 0x89, 0x3c, + 0x90, 0x95, 0x9c, 0x02, 0xa4, 0xad, 0x5a, 0x35, 0x28, 0x46, 0x5f, 0x1d, 0xe8, 0x39, 0xb4, 0x12, + 0x58, 0x96, 0x70, 0xb7, 0x67, 0x47, 0x4e, 0xc1, 0x3b, 0x3b, 0x73, 0x78, 0x89, 0x14, 0xdc, 0xf5, + 0x2d, 0x34, 0x13, 0x83, 0x2d, 0xa5, 0x64, 0xe9, 0x7a, 0x37, 0x03, 0x89, 0xcc, 0xb6, 0xd4, 0xf0, + 0x1c, 0x96, 0xed, 0xd0, 0x8f, 0x62, 0x41, 0x1d, 0x4b, 0x97, 0xd2, 0xf9, 0x6b, 0x68, 0xc1, 0xad, + 0x54, 0x6a, 0x98, 0x94, 0xd5, 0xaf, 0xa1, 0x1e, 0x9d, 0x11, 0x9e, 0x54, 0xb3, 0xd6, 0xe6, 0x6f, + 0xaf, 0x4a, 0xa0, 0xce, 0x0b, 0x89, 0xc6, 0x89, 0x90, 0x8c, 0x5f, 0x2e, 0x08, 0x93, 0x46, 0x10, + 0xa1, 0x6b, 0xf9, 0x7a, 0x27, 0x69, 0x48, 0x9d, 0xb4, 0x21, 0x75, 0x8e, 0xd2, 0x8e, 0x85, 0x17, + 0x35, 0xba, 0x27, 0xd0, 0x13, 0x68, 0xa4, 0x9d, 0x4e, 0x15, 0x75, 0x69, 0x79, 0x59, 0x70, 0x5b, + 0x03, 0x70, 0x06, 0x95, 0x3b, 0xda, 0xaa, 0x48, 0xa9, 0x1d, 0x6f, 0x5d, 0xbd, 0xa3, 0x46, 0xf7, + 0x54, 0xb2, 0xc5, 0x91, 0x93, 0x8a, 0x36, 0xae, 0x16, 0xd5, 0xe8, 0x9e, 0x40, 0x5b, 0xb0, 0x14, + 0x84, 0xb2, 0x6e, 0xd8, 0x24, 0x49, 0xd5, 0x45, 0x95, 0xaa, 0xf7, 0xcb, 0xd7, 0xbe, 0x9f, 0x03, + 0xe1, 0xa2, 0x08, 0x7a, 0x0a, 0xcd, 0x0b, 0xed, 0x4d, 0xcb, 0x75, 0x8c, 0xe6, 0xcc, 0xdb, 0xca, + 0xd5, 0x27, 0x48, 0xd1, 0x43, 0x07, 0xfd, 0x02, 0xab, 0x5c, 0x10, 0xd9, 0x79, 0xce, 0x48, 0x30, + 0xa6, 0x96, 0x43, 0x05, 0x71, 0x3d, 0x6e, 0xb4, 0x94, 0x92, 0xcf, 0x2e, 0xaf, 0x5b, 0x52, 0xa8, + 0xaf, 0x64, 0xb6, 0x13, 0x11, 0x8c, 0xf8, 0x14, 0x6d, 0x6b, 0x19, 0x96, 0x74, 0x38, 0x32, 0xca, + 0x63, 0x4f, 0x98, 0x3f, 0x43, 0xeb, 0xf0, 0x0d, 0x17, 0xd4, 0xcf, 0x22, 0xf6, 0x33, 0xb8, 0x93, + 0x15, 0x1f, 0x4b, 0x8f, 0x68, 0x3a, 0xd9, 0xdb, 0x74, 0x92, 0xc4, 0x8a, 0x2e, 0xf3, 0x5e, 0x76, + 0x26, 0x1e, 0x11, 0x3b, 0x6d, 0x55, 0x13, 0x82, 0xf9, 0xbf, 0x1a, 0xdc, 0x99, 0x6a, 0x48, 0xa8, + 0x0f, 0x35, 0x3f, 0x74, 0x92, 0x02, 0xd2, 0xda, 0xec, 0x5e, 0xd9, 0xc1, 0x72, 0x94, 0xd0, 0xa1, + 0x58, 0x09, 0xbf, 0xbd, 0xe0, 0xc8, 0x71, 0x27, 0xa0, 0x5c, 0xb8, 0xc1, 0x58, 0xe5, 0xca, 0x12, + 0x4e, 0x97, 0xe8, 0x19, 0xdc, 0xe6, 0xf6, 0x19, 0x75, 0x62, 0x2f, 0x09, 0x8e, 0xda, 0x95, 0xc1, + 0xd1, 0xcc, 0xf0, 0x3d, 0x81, 0x7e, 0x82, 0x0f, 0x22, 0xc2, 0x68, 0x20, 0xac, 0x20, 0x74, 0xa8, + 0x95, 0xf9, 0x43, 0x67, 0x44, 0x39, 0xa9, 0xf6, 0x43, 0x87, 0xce, 0xea, 0x48, 0x2b, 0x89, 0x92, + 0x02, 0x1b, 0xfd, 0x0c, 0x2b, 0x8c, 0x8e, 0x28, 0xa3, 0x81, 0x9d, 0xd7, 0xdc, 0x7e, 0xe7, 0x7e, + 0x87, 0x32, 0x35, 0x13, 0xe5, 0xdf, 0xc1, 0x32, 0x57, 0xf7, 0x3c, 0x29, 0x68, 0x77, 0x66, 0x57, + 0xdd, 0x62, 0x38, 0xe0, 0x16, 0x2f, 0x86, 0xc7, 0xd7, 0x70, 0x3b, 0x37, 0x35, 0x73, 0x03, 0x95, + 0x5b, 0x99, 0x32, 0xaf, 0xa7, 0x21, 0xc3, 0x6d, 0xdc, 0x4c, 0xe1, 0x43, 0x87, 0x9b, 0xe3, 0x5c, + 0x5f, 0x94, 0xb7, 0x89, 0x00, 0x16, 0xf6, 0x7a, 0xfb, 0xc7, 0xbd, 0xdd, 0xf6, 0x1c, 0x5a, 0x82, + 0xc5, 0xc3, 0xfe, 0xce, 0x60, 0xfb, 0x78, 0x77, 0xb0, 0xdd, 0xae, 0x48, 0xd6, 0xe1, 0x8f, 0x87, + 0x47, 0x83, 0xbd, 0x76, 0x15, 0xdd, 0x86, 0x06, 0x1e, 0xec, 0xf6, 0x8e, 0xf7, 0xfb, 0x3b, 0xed, + 0x79, 0x84, 0xa0, 0xd5, 0xdf, 0x19, 0xee, 0x6e, 0x5b, 0x2f, 0x0f, 0xf0, 0x1f, 0x9f, 0xef, 0x1e, + 0xbc, 0x6c, 0xd7, 0xa4, 0x30, 0x1e, 0xf4, 0x0f, 0x4e, 0x06, 0x78, 0xb0, 0xdd, 0xae, 0x9b, 0x27, + 0xd0, 0xce, 0xa7, 0xa8, 0xea, 0xc1, 0x53, 0xb9, 0x5d, 0x79, 0xe7, 0xdc, 0x36, 0xff, 0xde, 0xc8, + 0x9d, 0xe0, 0x30, 0x19, 0x13, 0x9a, 0xc9, 0x40, 0x6a, 0x45, 0x1e, 0x09, 0x2e, 0xe9, 0xbd, 0xf9, + 0x6c, 0x4f, 0xd0, 0x2f, 0x3c, 0x12, 0xa0, 0x27, 0xd9, 0x74, 0x5c, 0xbd, 0x4e, 0x49, 0x4f, 0x27, + 0xe4, 0xf7, 0x9b, 0x03, 0xd1, 0x4e, 0xd9, 0x0f, 0xf5, 0xd9, 0xe3, 0x4d, 0xd9, 0x81, 0xb2, 0xbb, + 0x15, 0x2b, 0xdd, 0xc7, 0xd0, 0x74, 0x5c, 0x4e, 0x4e, 0x3d, 0x6a, 0x11, 0xcf, 0x53, 0xd5, 0xbd, + 0x21, 0xdb, 0x97, 0x26, 0xf6, 0x3c, 0x0f, 0x75, 0x60, 0xc1, 0x23, 0xa7, 0xd4, 0xe3, 0xba, 0x84, + 0xaf, 0x4d, 0x75, 0x79, 0xc5, 0xc5, 0x1a, 0x85, 0x9e, 0x41, 0x93, 0x04, 0x41, 0x28, 0xb4, 0x69, + 0x49, 0xf1, 0xbe, 0x37, 0xd5, 0x75, 0x27, 0x10, 0x9c, 0xc7, 0xa3, 0x21, 0xb4, 0xd3, 0x67, 0x97, + 0x65, 0x87, 0x81, 0xa0, 0xaf, 0x85, 0xea, 0xf1, 0x85, 0x40, 0x57, 0xbe, 0x3d, 0xd4, 0xb0, 0x7e, + 0x82, 0xc2, 0xcb, 0xbc, 0x48, 0x40, 0x5f, 0xc2, 0x22, 0x89, 0xc5, 0x99, 0xc5, 0x42, 0x8f, 0xea, + 0x2c, 0x34, 0xa6, 0xec, 0x88, 0xc5, 0x19, 0x0e, 0x3d, 0xaa, 0xae, 0xa7, 0x41, 0xf4, 0x0a, 0xed, + 0x01, 0x7a, 0x15, 0x13, 0x4f, 0x1a, 0x11, 0x8e, 0x2c, 0x4e, 0xd9, 0xb9, 0x6b, 0x53, 0x9d, 0x70, + 0x0f, 0x4b, 0x76, 0xfc, 0x29, 0x01, 0x1e, 0x8c, 0x0e, 0x13, 0x18, 0x6e, 0xbf, 0x2a, 0x51, 0xe4, + 0x93, 0xc4, 0x27, 0xaf, 0xad, 0x88, 0x30, 0xe2, 0x79, 0xd4, 0x73, 0xb9, 0x6f, 0xa0, 0x8d, 0xca, + 0xe3, 0x3a, 0x6e, 0xf9, 0xe4, 0xf5, 0x8b, 0x09, 0x15, 0xfd, 0x00, 0x6b, 0x8c, 0x5c, 0x58, 0xb9, + 0x89, 0x43, 0x3a, 0x61, 0xe4, 0x8e, 0x8d, 0x15, 0xb5, 0xf7, 0x27, 0x65, 0xfb, 0x31, 0xb9, 0x38, + 0xc8, 0x46, 0x8d, 0xbe, 0x82, 0xe2, 0x15, 0x36, 0x4d, 0x44, 0x2f, 0x00, 0x4d, 0x3f, 0xd7, 0x8d, + 0xd5, 0xd9, 0xc1, 0xa7, 0xbb, 0x43, 0x2f, 0x03, 0xe2, 0x3b, 0x76, 0x99, 0x84, 0xbe, 0x85, 0x25, + 0x37, 0x10, 0x94, 0xb1, 0x38, 0x12, 0xee, 0xa9, 0x47, 0x8d, 0x0f, 0x2e, 0x29, 0xc5, 0x5b, 0x61, + 0xe8, 0x9d, 0xc8, 0x49, 0x15, 0x17, 0x05, 0x66, 0xbd, 0xd4, 0xd6, 0x66, 0xbd, 0xd4, 0xd0, 0x63, + 0xa8, 0xd1, 0xe0, 0x9c, 0x1b, 0x1f, 0xaa, 0x1d, 0x56, 0xa7, 0x72, 0x25, 0x38, 0xe7, 0x58, 0x21, + 0xe4, 0xab, 0x4b, 0x90, 0x31, 0x37, 0x8c, 0x8d, 0x79, 0xf9, 0xea, 0x92, 0xdf, 0x5b, 0x06, 0xac, + 0xe5, 0xa3, 0xde, 0x92, 0xca, 0x99, 0xeb, 0x50, 0xfe, 0x7d, 0xad, 0x51, 0x6b, 0xd7, 0x4d, 0x1f, + 0xee, 0x66, 0xd9, 0x76, 0x44, 0x99, 0xef, 0x06, 0xb9, 0x87, 0xf7, 0xfb, 0xbc, 0x59, 0xb2, 0x51, + 0xbb, 0x9a, 0x1b, 0xb5, 0xcd, 0xfb, 0xb0, 0x3e, 0x6b, 0xbb, 0xe4, 0x21, 0x67, 0xfe, 0x02, 0x0f, + 0x67, 0x3d, 0xc6, 0xe4, 0x4d, 0xde, 0xc4, 0x83, 0xec, 0xaf, 0x55, 0xd8, 0xb8, 0x5c, 0xbf, 0x7e, + 0x4c, 0x3e, 0x29, 0x4f, 0xf6, 0x1f, 0x96, 0x3d, 0x7e, 0xcc, 0xbc, 0x74, 0xa4, 0x9f, 0x0c, 0xf4, + 0x5f, 0x94, 0x8a, 0xe1, 0x5b, 0xa5, 0xd2, 0x52, 0xf8, 0x14, 0x9a, 0xa3, 0xd8, 0xf3, 0xae, 0x3b, + 0x19, 0x63, 0x90, 0xe8, 0x6c, 0x22, 0xbe, 0xad, 0x64, 0x53, 0x63, 0x6b, 0x57, 0x09, 0xab, 0xad, + 0x92, 0xd4, 0xe0, 0xe6, 0xdf, 0xf2, 0x7f, 0x5b, 0x8e, 0xd5, 0x00, 0x79, 0x13, 0x97, 0xfe, 0x7b, + 0xa8, 0xab, 0xb9, 0x4d, 0x39, 0xa1, 0x35, 0xdd, 0x9e, 0x8b, 0x13, 0x1f, 0x4e, 0xc0, 0xe6, 0xbf, + 0x2b, 0x70, 0xef, 0x2d, 0xb3, 0xe0, 0x44, 0x6b, 0xe5, 0x1d, 0xb4, 0xa2, 0xaf, 0xa0, 0x19, 0xda, + 0x76, 0xcc, 0x58, 0x32, 0x2b, 0x55, 0xaf, 0x9c, 0x95, 0x20, 0x85, 0xf7, 0x44, 0x71, 0x42, 0x9b, + 0x2f, 0x3f, 0x09, 0xef, 0xe6, 0xfe, 0x45, 0xa4, 0xce, 0xd3, 0x21, 0x7c, 0x0e, 0xe6, 0xac, 0x10, + 0xdb, 0x4b, 0x7e, 0xb5, 0xdd, 0x50, 0x62, 0x39, 0x34, 0x12, 0x67, 0xea, 0x44, 0x75, 0x9c, 0x2c, + 0xcc, 0x7d, 0xf8, 0xe4, 0xad, 0xfb, 0xea, 0xe8, 0x7e, 0x04, 0x35, 0x1e, 0x65, 0x8d, 0x7e, 0xa5, + 0xdc, 0x55, 0x22, 0x12, 0x60, 0x05, 0xf8, 0xf4, 0x1b, 0x68, 0x15, 0xdd, 0x8a, 0x56, 0xa1, 0x3d, + 0xf8, 0x61, 0xd0, 0x3f, 0x3e, 0x1a, 0x1e, 0xec, 0x5b, 0xbd, 0xfe, 0xd1, 0xf0, 0x64, 0xd0, 0x9e, + 0x43, 0x6b, 0x80, 0x72, 0x54, 0xdc, 0xdf, 0x19, 0x9e, 0xc8, 0xf9, 0x67, 0xeb, 0xd9, 0x4f, 0x5f, + 0x8d, 0x5d, 0x71, 0x16, 0x9f, 0x76, 0xec, 0xd0, 0xef, 0xaa, 0x6d, 0x42, 0x36, 0x4e, 0x3e, 0xba, + 0xd9, 0x9f, 0xc6, 0x31, 0x0d, 0xba, 0xd1, 0xe9, 0xef, 0xc6, 0x61, 0xb7, 0xf8, 0xd3, 0xf4, 0x74, + 0x41, 0xdd, 0xcf, 0x17, 0xff, 0x0f, 0x00, 0x00, 0xff, 0xff, 0xd6, 0xfa, 0xb5, 0xe8, 0xa6, 0x15, + 0x00, 0x00, } diff --git a/flyteidl/gen/pb-go/flyteidl/admin/launch_plan.pb.go b/flyteidl/gen/pb-go/flyteidl/admin/launch_plan.pb.go index 5e7b95f8ca..1a5a48e613 100644 --- a/flyteidl/gen/pb-go/flyteidl/admin/launch_plan.pb.go +++ b/flyteidl/gen/pb-go/flyteidl/admin/launch_plan.pb.go @@ -757,7 +757,7 @@ func (m *ActiveLaunchPlanRequest) GetId() *NamedEntityIdentifier { return nil } -// Represents a request structure to list active launch plans within a project/domain. +// Represents a request structure to list active launch plans within a project/domain and optional org. // See :ref:`ref_flyteidl.admin.LaunchPlan` for more details type ActiveLaunchPlanListRequest struct { // Name of the project that contains the identifiers. @@ -775,7 +775,9 @@ type ActiveLaunchPlanListRequest struct { Token string `protobuf:"bytes,4,opt,name=token,proto3" json:"token,omitempty"` // Sort ordering. // +optional - SortBy *Sort `protobuf:"bytes,5,opt,name=sort_by,json=sortBy,proto3" json:"sort_by,omitempty"` + SortBy *Sort `protobuf:"bytes,5,opt,name=sort_by,json=sortBy,proto3" json:"sort_by,omitempty"` + // Optional, org key applied to the resource. + Org string `protobuf:"bytes,6,opt,name=org,proto3" json:"org,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -841,6 +843,13 @@ func (m *ActiveLaunchPlanListRequest) GetSortBy() *Sort { return nil } +func (m *ActiveLaunchPlanListRequest) GetOrg() string { + if m != nil { + return m.Org + } + return "" +} + func init() { proto.RegisterEnum("flyteidl.admin.LaunchPlanState", LaunchPlanState_name, LaunchPlanState_value) proto.RegisterType((*LaunchPlanCreateRequest)(nil), "flyteidl.admin.LaunchPlanCreateRequest") @@ -860,79 +869,80 @@ func init() { func init() { proto.RegisterFile("flyteidl/admin/launch_plan.proto", fileDescriptor_368a863574f5e699) } var fileDescriptor_368a863574f5e699 = []byte{ - // 1183 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0xdd, 0x8e, 0x1b, 0x35, - 0x14, 0x26, 0x69, 0xf6, 0xef, 0x6c, 0x37, 0x9b, 0xba, 0x65, 0x3b, 0x4d, 0x4b, 0xbb, 0x04, 0x21, - 0x16, 0x68, 0x13, 0xa9, 0xd0, 0x8b, 0xfe, 0x49, 0x64, 0xd3, 0xbd, 0x88, 0xe8, 0xcf, 0xe2, 0x2d, - 0x15, 0xe2, 0x66, 0xe4, 0xcc, 0x9c, 0x24, 0xa6, 0x9e, 0xf1, 0xd4, 0xf6, 0xec, 0x66, 0xc5, 0x0b, - 0x21, 0xde, 0x81, 0x47, 0xe0, 0x82, 0x37, 0x42, 0xe3, 0xf1, 0x4c, 0x92, 0xc9, 0x56, 0x05, 0x24, - 0xae, 0x66, 0xec, 0xf3, 0x7d, 0x9f, 0x7d, 0x8e, 0x8f, 0xcf, 0x31, 0xec, 0x8f, 0xc5, 0xb9, 0x41, - 0x1e, 0x8a, 0x1e, 0x0b, 0x23, 0x1e, 0xf7, 0x04, 0x4b, 0xe3, 0x60, 0xea, 0x27, 0x82, 0xc5, 0xdd, - 0x44, 0x49, 0x23, 0x49, 0xb3, 0x40, 0x74, 0x2d, 0xa2, 0xfd, 0x49, 0xc9, 0x08, 0xa4, 0xc2, 0x1e, - 0xce, 0x30, 0x48, 0x0d, 0x97, 0x0e, 0xde, 0xbe, 0xb5, 0x6c, 0x16, 0xdc, 0xa0, 0x62, 0x42, 0x3b, - 0xeb, 0xed, 0x65, 0x2b, 0x0f, 0x31, 0x36, 0x7c, 0xcc, 0x51, 0x39, 0x7b, 0x45, 0x9c, 0xc7, 0x06, - 0xd5, 0x98, 0x05, 0x78, 0xb1, 0xb8, 0xc6, 0x20, 0x55, 0xdc, 0x9c, 0xaf, 0x90, 0x73, 0x5f, 0x74, - 0x30, 0xc5, 0x30, 0x15, 0x05, 0xf9, 0x66, 0xc5, 0x1c, 0xc8, 0x28, 0x2a, 0xb7, 0x7d, 0x63, 0x22, - 0xe5, 0x44, 0x60, 0xcf, 0x8e, 0x46, 0xe9, 0xb8, 0xc7, 0xe2, 0x42, 0xf6, 0x4e, 0xd5, 0x64, 0x78, - 0x84, 0xda, 0xb0, 0x28, 0x29, 0x9c, 0xaa, 0x02, 0xce, 0x14, 0x4b, 0x12, 0x54, 0xce, 0xe9, 0xce, - 0x0c, 0xae, 0x3f, 0xb7, 0x61, 0x3d, 0x16, 0x2c, 0x1e, 0x28, 0x64, 0x06, 0x29, 0xbe, 0x4b, 0x51, - 0x1b, 0xf2, 0x25, 0xd4, 0x79, 0xe8, 0xd5, 0xf6, 0x6b, 0x07, 0xdb, 0xf7, 0x6f, 0x74, 0xcb, 0x48, - 0x67, 0xde, 0x75, 0x87, 0x65, 0x70, 0x68, 0x9d, 0x87, 0xe4, 0x3e, 0x34, 0x74, 0x82, 0x81, 0x57, - 0xb7, 0xe0, 0xdb, 0xdd, 0xe5, 0x63, 0xe9, 0xce, 0x57, 0x38, 0x49, 0x30, 0xa0, 0x16, 0xdb, 0x69, - 0x83, 0xb7, 0xba, 0xb2, 0x4e, 0x64, 0xac, 0xb1, 0xf3, 0x5b, 0x0d, 0x60, 0x6e, 0xfc, 0x9f, 0x77, - 0x42, 0x1e, 0xc3, 0x46, 0x20, 0xa4, 0x4e, 0x15, 0x7a, 0x97, 0x2c, 0xed, 0xd3, 0xf7, 0xd3, 0x06, - 0x39, 0x90, 0x16, 0x8c, 0x0e, 0x42, 0x73, 0x6e, 0x7d, 0xce, 0xb5, 0x21, 0x4f, 0xe1, 0xf2, 0x42, - 0xa6, 0x6a, 0xaf, 0xb6, 0x7f, 0xe9, 0x60, 0xfb, 0x7e, 0xfb, 0xfd, 0x9a, 0x74, 0x5b, 0x94, 0xff, - 0x9a, 0x5c, 0x83, 0x35, 0x23, 0xdf, 0x62, 0x6c, 0x5d, 0xd8, 0xa2, 0xf9, 0xa0, 0x73, 0x0a, 0x8d, - 0x7e, 0x6a, 0xa6, 0xe4, 0x2e, 0x10, 0xa6, 0x75, 0x1a, 0xb1, 0x91, 0x40, 0x9f, 0xb3, 0xc8, 0x57, - 0x52, 0xa0, 0x0d, 0xcd, 0x16, 0x6d, 0x95, 0x96, 0x21, 0x8b, 0xa8, 0x14, 0x48, 0x9e, 0x40, 0xfb, - 0x6d, 0x3a, 0x42, 0x15, 0xa3, 0x41, 0xed, 0x6b, 0x54, 0xa7, 0x3c, 0x40, 0x9f, 0x05, 0x81, 0x4c, - 0x63, 0xe3, 0x16, 0xf0, 0xe6, 0x88, 0x93, 0x1c, 0xd0, 0xcf, 0xed, 0x8f, 0xea, 0x5e, 0xad, 0xf3, - 0xc7, 0xc6, 0xa2, 0x7f, 0x59, 0xd0, 0xc8, 0x23, 0xd8, 0x3e, 0x93, 0xea, 0xed, 0x58, 0xc8, 0x33, - 0xff, 0x9f, 0x1c, 0x0b, 0x14, 0xe8, 0x61, 0x48, 0xbe, 0x87, 0xdd, 0x6c, 0xde, 0x9c, 0xfb, 0x11, - 0x1a, 0x16, 0x32, 0xc3, 0xdc, 0x49, 0x75, 0xde, 0x1f, 0x9e, 0x17, 0x0e, 0x49, 0x9b, 0x39, 0xb5, - 0x18, 0x93, 0x43, 0x68, 0x86, 0x38, 0x66, 0xa9, 0x30, 0x3e, 0x8f, 0x93, 0xd4, 0x68, 0x77, 0x7c, - 0x37, 0x2b, 0x7b, 0x39, 0x66, 0x8a, 0x45, 0x68, 0x50, 0xbd, 0x60, 0x09, 0xdd, 0x71, 0x94, 0xa1, - 0x65, 0x90, 0x27, 0x70, 0x79, 0xcc, 0x67, 0x18, 0x16, 0x0a, 0x8d, 0x0b, 0xbd, 0x79, 0x9e, 0x57, - 0x8a, 0x8c, 0xbf, 0x6d, 0xe1, 0x8e, 0xbd, 0x07, 0x0d, 0x1b, 0xff, 0xb5, 0x2c, 0x92, 0x87, 0x75, - 0xaf, 0x46, 0xed, 0x98, 0x74, 0x61, 0x5d, 0xb0, 0x11, 0x0a, 0xed, 0xad, 0x5b, 0xbd, 0xbd, 0x55, - 0xef, 0x32, 0x2b, 0x75, 0x28, 0xf2, 0x14, 0xb6, 0x59, 0x1c, 0x4b, 0xc3, 0xb2, 0x62, 0xa5, 0xbd, - 0x8d, 0xaa, 0x1b, 0x39, 0xa9, 0x3f, 0x87, 0xd0, 0x45, 0x3c, 0xb9, 0x0b, 0x0d, 0x96, 0x9a, 0xa9, - 0xb7, 0x69, 0x79, 0xd7, 0x56, 0x78, 0xa9, 0x99, 0xe6, 0x9b, 0xcb, 0x50, 0xe4, 0x21, 0x6c, 0x65, - 0xdf, 0x3c, 0x73, 0xb6, 0x2c, 0xc5, 0xbb, 0x88, 0x92, 0x65, 0x90, 0xa5, 0x6d, 0x32, 0x37, 0x22, - 0x43, 0x68, 0x15, 0x75, 0xcd, 0x0f, 0x64, 0x6c, 0x70, 0x66, 0x3c, 0xa8, 0xde, 0x34, 0x1b, 0xb1, - 0x13, 0x07, 0x1b, 0xe4, 0x28, 0xba, 0xab, 0x97, 0x27, 0xc8, 0x0b, 0x20, 0xef, 0x52, 0x26, 0x32, - 0x25, 0x39, 0x2e, 0x52, 0xd3, 0x6b, 0x59, 0xb1, 0x3b, 0x15, 0xb1, 0x1f, 0x72, 0xe0, 0xab, 0xb1, - 0x4b, 0x50, 0xda, 0x7a, 0x57, 0x99, 0x21, 0x3f, 0xc1, 0x9e, 0x62, 0x67, 0xbe, 0x4c, 0x4d, 0x92, - 0x1a, 0x3f, 0x4b, 0x8f, 0x6c, 0x83, 0x63, 0x3e, 0xf1, 0xae, 0x58, 0xc9, 0xcf, 0xaa, 0x1e, 0x52, - 0x76, 0xf6, 0xca, 0x82, 0x9f, 0x31, 0xc3, 0x06, 0x16, 0x4a, 0xaf, 0xaa, 0xd5, 0x49, 0xf2, 0x05, - 0xec, 0x46, 0x6c, 0xe6, 0x27, 0x4c, 0x31, 0x21, 0x50, 0x70, 0x1d, 0x79, 0x64, 0xbf, 0x76, 0xb0, - 0x46, 0x9b, 0x11, 0x9b, 0x1d, 0xcf, 0x67, 0xc9, 0x77, 0xb0, 0x63, 0x7b, 0x82, 0x4a, 0x13, 0xc3, - 0x47, 0x02, 0xbd, 0xab, 0x76, 0xe5, 0x76, 0x37, 0x2f, 0xc1, 0xdd, 0xa2, 0x04, 0x77, 0x0f, 0xa5, - 0x14, 0x6f, 0x98, 0x48, 0x91, 0x2e, 0x13, 0xb2, 0xa5, 0xe4, 0x29, 0xaa, 0x33, 0xc5, 0x0d, 0xfa, - 0x01, 0x0b, 0xa6, 0xe8, 0x5d, 0xdb, 0xaf, 0x1d, 0x6c, 0xd2, 0x66, 0x39, 0x3d, 0xc8, 0x66, 0xc9, - 0x01, 0x34, 0x30, 0x3e, 0xd5, 0xde, 0xc7, 0x17, 0x1f, 0xf8, 0x51, 0x7c, 0xaa, 0xa9, 0x45, 0x74, - 0xfe, 0xac, 0xc3, 0x95, 0x95, 0xea, 0x45, 0x1e, 0xc0, 0x9a, 0x36, 0xcc, 0xe4, 0x85, 0xa3, 0xb9, - 0x18, 0xef, 0x95, 0x32, 0x99, 0xc1, 0x68, 0x8e, 0x26, 0xcf, 0x60, 0x17, 0x67, 0x09, 0x06, 0x66, - 0x7e, 0x5f, 0xea, 0x1f, 0xbe, 0x71, 0xcd, 0x82, 0xe3, 0x2e, 0xcd, 0x11, 0xb4, 0x4a, 0x95, 0xfc, - 0xbc, 0x8a, 0x8b, 0xdb, 0xae, 0xc8, 0xbc, 0x61, 0x8a, 0x67, 0xe5, 0x2c, 0x53, 0x29, 0x57, 0xce, - 0x0f, 0x48, 0x93, 0x87, 0x00, 0x81, 0xed, 0x1a, 0xa1, 0xcf, 0x8c, 0xbb, 0xb7, 0xab, 0xb1, 0x7e, - 0x5d, 0xf4, 0x43, 0xba, 0xe5, 0xd0, 0x7d, 0x93, 0x51, 0xd3, 0x24, 0x2c, 0xa8, 0x6b, 0x1f, 0xa6, - 0x3a, 0x74, 0xdf, 0x74, 0xfe, 0xaa, 0x01, 0x59, 0x2d, 0x4d, 0xe4, 0x5b, 0xd8, 0x2c, 0x3a, 0xba, - 0x2b, 0x88, 0x2b, 0x57, 0xea, 0xc4, 0xd9, 0x69, 0x89, 0x24, 0x87, 0xb0, 0x13, 0xcb, 0xac, 0x4a, - 0x06, 0xee, 0xe2, 0xd7, 0x6d, 0xab, 0xb8, 0x55, 0xa5, 0xbe, 0x5c, 0x00, 0xd1, 0x65, 0x0a, 0xe9, - 0xc3, 0x15, 0xd7, 0x6d, 0x02, 0x19, 0x87, 0x3c, 0xd7, 0xb9, 0xe4, 0xf2, 0xa2, 0xea, 0x52, 0x3f, - 0x3e, 0xa7, 0xad, 0x1c, 0x3e, 0x28, 0xd1, 0x9d, 0x5f, 0x17, 0xdf, 0x00, 0x3f, 0x5a, 0x57, 0xff, - 0xc3, 0x1b, 0xa0, 0xcc, 0xa9, 0xfa, 0xbf, 0xc9, 0xa9, 0xe5, 0x67, 0x40, 0xb1, 0xb8, 0x7b, 0x06, - 0x1c, 0xc3, 0xf5, 0x7e, 0x60, 0xf8, 0x29, 0x2e, 0xf4, 0x4a, 0xb7, 0xb1, 0x07, 0x0b, 0x1b, 0xfb, - 0x7c, 0x25, 0x5e, 0x2c, 0xc2, 0xf0, 0xc8, 0x36, 0x8b, 0xe5, 0x4d, 0x76, 0x7e, 0xaf, 0xc1, 0xcd, - 0xaa, 0x64, 0xd6, 0xb4, 0x0b, 0x59, 0x0f, 0x36, 0x12, 0x25, 0x7f, 0xc1, 0xc0, 0xb8, 0x9e, 0x5a, - 0x0c, 0xc9, 0x1e, 0xac, 0x87, 0x32, 0x62, 0xbc, 0xe8, 0xcb, 0x6e, 0x94, 0xb5, 0x6b, 0xc1, 0x23, - 0x6e, 0x6c, 0xcc, 0x77, 0x68, 0x3e, 0x98, 0x37, 0xf1, 0xc6, 0x42, 0x13, 0x27, 0xf7, 0x60, 0x43, - 0x4b, 0x65, 0xfc, 0xd1, 0xb9, 0x4b, 0xba, 0x95, 0x9b, 0x7b, 0x22, 0x95, 0xa1, 0xeb, 0x19, 0xe8, - 0xf0, 0xfc, 0xab, 0xaf, 0x61, 0xb7, 0x12, 0x34, 0x72, 0x19, 0x36, 0x87, 0x2f, 0xfb, 0x83, 0xd7, - 0xc3, 0x37, 0x47, 0xad, 0x8f, 0x08, 0xc0, 0xba, 0xfb, 0xaf, 0x1d, 0x3e, 0xfd, 0xf9, 0xf1, 0x84, - 0x9b, 0x69, 0x3a, 0xea, 0x06, 0x32, 0xea, 0x59, 0x59, 0xa9, 0x26, 0xf9, 0x4f, 0xaf, 0x7c, 0x5d, - 0x4e, 0x30, 0xee, 0x25, 0xa3, 0x7b, 0x13, 0xd9, 0x5b, 0x7e, 0x70, 0x8e, 0xd6, 0x6d, 0x8e, 0x7c, - 0xf3, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0x0d, 0xba, 0x5e, 0x97, 0x74, 0x0b, 0x00, 0x00, + // 1195 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0xdb, 0x72, 0xdb, 0x36, + 0x13, 0xfe, 0x25, 0xcb, 0xa7, 0x75, 0x2c, 0x2b, 0x48, 0x7e, 0x87, 0x51, 0xf2, 0x27, 0xfe, 0xd5, + 0xe9, 0xd4, 0x6d, 0x13, 0x69, 0x26, 0x6d, 0x2e, 0x72, 0x9a, 0xa9, 0xac, 0xf8, 0x42, 0xd3, 0x1c, + 0x5c, 0x38, 0xcd, 0x74, 0x7a, 0xc3, 0x81, 0xc8, 0x95, 0x84, 0x06, 0x24, 0x18, 0x00, 0xb4, 0xe5, + 0xe9, 0x0b, 0xf5, 0x21, 0xda, 0x47, 0xe8, 0x45, 0xdf, 0xa8, 0x43, 0x10, 0xa4, 0x24, 0xca, 0x99, + 0xb4, 0x9d, 0xe9, 0x15, 0x09, 0xec, 0xf7, 0x2d, 0x76, 0x17, 0x7b, 0x00, 0x1c, 0x8c, 0xc5, 0x85, + 0x41, 0x1e, 0x8a, 0x1e, 0x0b, 0x23, 0x1e, 0xf7, 0x04, 0x4b, 0xe3, 0x60, 0xea, 0x27, 0x82, 0xc5, + 0xdd, 0x44, 0x49, 0x23, 0x49, 0xb3, 0x40, 0x74, 0x2d, 0xa2, 0xfd, 0xbf, 0x92, 0x11, 0x48, 0x85, + 0x3d, 0x9c, 0x61, 0x90, 0x1a, 0x2e, 0x1d, 0xbc, 0x7d, 0x7b, 0x59, 0x2c, 0xb8, 0x41, 0xc5, 0x84, + 0x76, 0xd2, 0x3b, 0xcb, 0x52, 0x1e, 0x62, 0x6c, 0xf8, 0x98, 0xa3, 0x72, 0xf2, 0x8a, 0x72, 0x1e, + 0x1b, 0x54, 0x63, 0x16, 0xe0, 0xe5, 0xca, 0x35, 0x06, 0xa9, 0xe2, 0xe6, 0x62, 0x85, 0x9c, 0xfb, + 0xa2, 0x83, 0x29, 0x86, 0xa9, 0x28, 0xc8, 0xb7, 0x2a, 0xe2, 0x40, 0x46, 0x51, 0x69, 0xf6, 0xcd, + 0x89, 0x94, 0x13, 0x81, 0x3d, 0xbb, 0x1a, 0xa5, 0xe3, 0x1e, 0x8b, 0x0b, 0xb5, 0x77, 0xab, 0x22, + 0xc3, 0x23, 0xd4, 0x86, 0x45, 0x49, 0xe1, 0x54, 0x15, 0x70, 0xae, 0x58, 0x92, 0xa0, 0x72, 0x4e, + 0x77, 0x66, 0x70, 0xe3, 0x85, 0x0d, 0xeb, 0x89, 0x60, 0xf1, 0x40, 0x21, 0x33, 0x48, 0xf1, 0x7d, + 0x8a, 0xda, 0x90, 0xcf, 0xa1, 0xce, 0x43, 0xaf, 0x76, 0x50, 0x3b, 0xdc, 0x79, 0x70, 0xb3, 0x5b, + 0x46, 0x3a, 0xf3, 0xae, 0x3b, 0x2c, 0x83, 0x43, 0xeb, 0x3c, 0x24, 0x0f, 0xa0, 0xa1, 0x13, 0x0c, + 0xbc, 0xba, 0x05, 0xdf, 0xe9, 0x2e, 0x5f, 0x4b, 0x77, 0x7e, 0xc2, 0x69, 0x82, 0x01, 0xb5, 0xd8, + 0x4e, 0x1b, 0xbc, 0xd5, 0x93, 0x75, 0x22, 0x63, 0x8d, 0x9d, 0x5f, 0x6a, 0x00, 0x73, 0xe1, 0xbf, + 0x6c, 0x09, 0x79, 0x02, 0x9b, 0x81, 0x90, 0x3a, 0x55, 0xe8, 0xad, 0x59, 0xda, 0xff, 0x3f, 0x4c, + 0x1b, 0xe4, 0x40, 0x5a, 0x30, 0x3a, 0x08, 0xcd, 0xb9, 0xf4, 0x05, 0xd7, 0x86, 0x3c, 0x83, 0x2b, + 0x0b, 0x99, 0xaa, 0xbd, 0xda, 0xc1, 0xda, 0xe1, 0xce, 0x83, 0xf6, 0x87, 0x75, 0xd2, 0x1d, 0x51, + 0xfe, 0x6b, 0x72, 0x1d, 0xd6, 0x8d, 0x7c, 0x87, 0xb1, 0x75, 0x61, 0x9b, 0xe6, 0x8b, 0xce, 0x19, + 0x34, 0xfa, 0xa9, 0x99, 0x92, 0x7b, 0x40, 0x98, 0xd6, 0x69, 0xc4, 0x46, 0x02, 0x7d, 0xce, 0x22, + 0x5f, 0x49, 0x81, 0x36, 0x34, 0xdb, 0xb4, 0x55, 0x4a, 0x86, 0x2c, 0xa2, 0x52, 0x20, 0x79, 0x0a, + 0xed, 0x77, 0xe9, 0x08, 0x55, 0x8c, 0x06, 0xb5, 0xaf, 0x51, 0x9d, 0xf1, 0x00, 0x7d, 0x16, 0x04, + 0x32, 0x8d, 0x8d, 0x3b, 0xc0, 0x9b, 0x23, 0x4e, 0x73, 0x40, 0x3f, 0x97, 0x3f, 0xae, 0x7b, 0xb5, + 0xce, 0x6f, 0x9b, 0x8b, 0xfe, 0x65, 0x41, 0x23, 0x8f, 0x61, 0xe7, 0x5c, 0xaa, 0x77, 0x63, 0x21, + 0xcf, 0xfd, 0xbf, 0x72, 0x2d, 0x50, 0xa0, 0x87, 0x21, 0xf9, 0x16, 0xf6, 0xb2, 0x7d, 0x73, 0xe1, + 0x47, 0x68, 0x58, 0xc8, 0x0c, 0x73, 0x37, 0xd5, 0xf9, 0x70, 0x78, 0x5e, 0x3a, 0x24, 0x6d, 0xe6, + 0xd4, 0x62, 0x4d, 0x8e, 0xa0, 0x19, 0xe2, 0x98, 0xa5, 0xc2, 0xf8, 0x3c, 0x4e, 0x52, 0xa3, 0xdd, + 0xf5, 0xdd, 0xaa, 0xd8, 0x72, 0xc2, 0x14, 0x8b, 0xd0, 0xa0, 0x7a, 0xc9, 0x12, 0xba, 0xeb, 0x28, + 0x43, 0xcb, 0x20, 0x4f, 0xe1, 0xca, 0x98, 0xcf, 0x30, 0x2c, 0x34, 0x34, 0x2e, 0xf5, 0xe6, 0x45, + 0xde, 0x29, 0x32, 0xfe, 0x8e, 0x85, 0x3b, 0xf6, 0x3e, 0x34, 0x6c, 0xfc, 0xd7, 0xb3, 0x48, 0x1e, + 0xd5, 0xbd, 0x1a, 0xb5, 0x6b, 0xd2, 0x85, 0x0d, 0xc1, 0x46, 0x28, 0xb4, 0xb7, 0x61, 0xf5, 0xed, + 0xaf, 0x7a, 0x97, 0x49, 0xa9, 0x43, 0x91, 0x67, 0xb0, 0xc3, 0xe2, 0x58, 0x1a, 0x96, 0x35, 0x2b, + 0xed, 0x6d, 0x56, 0xdd, 0xc8, 0x49, 0xfd, 0x39, 0x84, 0x2e, 0xe2, 0xc9, 0x3d, 0x68, 0xb0, 0xd4, + 0x4c, 0xbd, 0x2d, 0xcb, 0xbb, 0xbe, 0xc2, 0x4b, 0xcd, 0x34, 0x37, 0x2e, 0x43, 0x91, 0x47, 0xb0, + 0x9d, 0x7d, 0xf3, 0xcc, 0xd9, 0xb6, 0x14, 0xef, 0x32, 0x4a, 0x96, 0x41, 0x96, 0xb6, 0xc5, 0xdc, + 0x8a, 0x0c, 0xa1, 0x55, 0xf4, 0x35, 0x3f, 0x90, 0xb1, 0xc1, 0x99, 0xf1, 0xa0, 0x5a, 0x69, 0x36, + 0x62, 0xa7, 0x0e, 0x36, 0xc8, 0x51, 0x74, 0x4f, 0x2f, 0x6f, 0x90, 0x97, 0x40, 0xde, 0xa7, 0x4c, + 0x64, 0x9a, 0xe4, 0xb8, 0x48, 0x4d, 0xaf, 0x65, 0x95, 0xdd, 0xad, 0x28, 0xfb, 0x2e, 0x07, 0xbe, + 0x1e, 0xbb, 0x04, 0xa5, 0xad, 0xf7, 0x95, 0x1d, 0xf2, 0x03, 0xec, 0x2b, 0x76, 0xee, 0xcb, 0xd4, + 0x24, 0xa9, 0xf1, 0xb3, 0xf4, 0xc8, 0x0c, 0x1c, 0xf3, 0x89, 0x77, 0xd5, 0xaa, 0xfc, 0xa4, 0xea, + 0x21, 0x65, 0xe7, 0xaf, 0x2d, 0xf8, 0x39, 0x33, 0x6c, 0x60, 0xa1, 0xf4, 0x9a, 0x5a, 0xdd, 0x24, + 0x9f, 0xc1, 0x5e, 0xc4, 0x66, 0x7e, 0xc2, 0x14, 0x13, 0x02, 0x05, 0xd7, 0x91, 0x47, 0x0e, 0x6a, + 0x87, 0xeb, 0xb4, 0x19, 0xb1, 0xd9, 0xc9, 0x7c, 0x97, 0x7c, 0x03, 0xbb, 0x76, 0x26, 0xa8, 0x34, + 0x31, 0x7c, 0x24, 0xd0, 0xbb, 0x66, 0x4f, 0x6e, 0x77, 0xf3, 0x16, 0xdc, 0x2d, 0x5a, 0x70, 0xf7, + 0x48, 0x4a, 0xf1, 0x96, 0x89, 0x14, 0xe9, 0x32, 0x21, 0x3b, 0x4a, 0x9e, 0xa1, 0x3a, 0x57, 0xdc, + 0xa0, 0x1f, 0xb0, 0x60, 0x8a, 0xde, 0xf5, 0x83, 0xda, 0xe1, 0x16, 0x6d, 0x96, 0xdb, 0x83, 0x6c, + 0x97, 0x1c, 0x42, 0x03, 0xe3, 0x33, 0xed, 0xfd, 0xf7, 0xf2, 0x0b, 0x3f, 0x8e, 0xcf, 0x34, 0xb5, + 0x88, 0xce, 0xef, 0x75, 0xb8, 0xba, 0xd2, 0xbd, 0xc8, 0x43, 0x58, 0xd7, 0x86, 0x99, 0xbc, 0x71, + 0x34, 0x17, 0xe3, 0xbd, 0xd2, 0x26, 0x33, 0x18, 0xcd, 0xd1, 0xe4, 0x39, 0xec, 0xe1, 0x2c, 0xc1, + 0xc0, 0xcc, 0xeb, 0xa5, 0xfe, 0xf1, 0x8a, 0x6b, 0x16, 0x1c, 0x57, 0x34, 0xc7, 0xd0, 0x2a, 0xb5, + 0xe4, 0xf7, 0x55, 0x14, 0x6e, 0xbb, 0xa2, 0xe6, 0x2d, 0x53, 0x3c, 0x6b, 0x67, 0x99, 0x96, 0xf2, + 0xe4, 0xfc, 0x82, 0x34, 0x79, 0x04, 0x10, 0xd8, 0xa9, 0x11, 0xfa, 0xcc, 0xb8, 0xba, 0x5d, 0x8d, + 0xf5, 0x9b, 0x62, 0x1e, 0xd2, 0x6d, 0x87, 0xee, 0x9b, 0x8c, 0x9a, 0x26, 0x61, 0x41, 0x5d, 0xff, + 0x38, 0xd5, 0xa1, 0xfb, 0xa6, 0xf3, 0x47, 0x0d, 0xc8, 0x6a, 0x6b, 0x22, 0x5f, 0xc3, 0x56, 0x31, + 0xd1, 0x5d, 0x43, 0x5c, 0x29, 0xa9, 0x53, 0x27, 0xa7, 0x25, 0x92, 0x1c, 0xc1, 0x6e, 0x2c, 0xb3, + 0x2e, 0x19, 0xb8, 0xc2, 0xaf, 0xdb, 0x51, 0x71, 0xbb, 0x4a, 0x7d, 0xb5, 0x00, 0xa2, 0xcb, 0x14, + 0xd2, 0x87, 0xab, 0x6e, 0xda, 0x04, 0x32, 0x0e, 0x79, 0xae, 0x67, 0xcd, 0xe5, 0x45, 0xd5, 0xa5, + 0x7e, 0x7c, 0x41, 0x5b, 0x39, 0x7c, 0x50, 0xa2, 0x3b, 0x3f, 0x2f, 0xbe, 0x01, 0xbe, 0xb7, 0xae, + 0xfe, 0x83, 0x37, 0x40, 0x99, 0x53, 0xf5, 0xbf, 0x93, 0x53, 0xcb, 0xcf, 0x80, 0xe2, 0x70, 0xf7, + 0x0c, 0x38, 0x81, 0x1b, 0xfd, 0xc0, 0xf0, 0x33, 0x5c, 0x98, 0x95, 0xce, 0xb0, 0x87, 0x0b, 0x86, + 0x7d, 0xba, 0x12, 0x2f, 0x16, 0x61, 0x78, 0x6c, 0x87, 0xc5, 0xb2, 0x91, 0x9d, 0x5f, 0x6b, 0x70, + 0xab, 0xaa, 0x32, 0x1b, 0xda, 0x85, 0x5a, 0x0f, 0x36, 0x13, 0x25, 0x7f, 0xc2, 0xc0, 0xb8, 0x99, + 0x5a, 0x2c, 0xc9, 0x3e, 0x6c, 0x84, 0x32, 0x62, 0xbc, 0x98, 0xcb, 0x6e, 0x95, 0x8d, 0x6b, 0xc1, + 0x23, 0x6e, 0x6c, 0xcc, 0x77, 0x69, 0xbe, 0x98, 0x0f, 0xf1, 0xc6, 0xc2, 0x10, 0x27, 0xf7, 0x61, + 0x53, 0x4b, 0x65, 0xfc, 0xd1, 0x85, 0x4b, 0xba, 0x95, 0xca, 0x3d, 0x95, 0xca, 0xd0, 0x8d, 0x0c, + 0x74, 0x74, 0x41, 0x5a, 0xb0, 0x26, 0xd5, 0xc4, 0x8e, 0x90, 0x6d, 0x9a, 0xfd, 0x7e, 0xf1, 0x25, + 0xec, 0x55, 0xc2, 0x48, 0xae, 0xc0, 0xd6, 0xf0, 0x55, 0x7f, 0xf0, 0x66, 0xf8, 0xf6, 0xb8, 0xf5, + 0x1f, 0x02, 0xb0, 0xe1, 0xfe, 0x6b, 0x47, 0xcf, 0x7e, 0x7c, 0x32, 0xe1, 0x66, 0x9a, 0x8e, 0xba, + 0x81, 0x8c, 0x7a, 0xf6, 0x20, 0xa9, 0x26, 0xf9, 0x4f, 0xaf, 0x7c, 0x6f, 0x4e, 0x30, 0xee, 0x25, + 0xa3, 0xfb, 0x13, 0xd9, 0x5b, 0x7e, 0x82, 0x8e, 0x36, 0x6c, 0xd6, 0x7c, 0xf5, 0x67, 0x00, 0x00, + 0x00, 0xff, 0xff, 0x47, 0x12, 0xae, 0xfa, 0x86, 0x0b, 0x00, 0x00, } diff --git a/flyteidl/gen/pb-go/flyteidl/admin/matchable_resource.pb.go b/flyteidl/gen/pb-go/flyteidl/admin/matchable_resource.pb.go index b721e43d73..93810d4040 100644 --- a/flyteidl/gen/pb-go/flyteidl/admin/matchable_resource.pb.go +++ b/flyteidl/gen/pb-go/flyteidl/admin/matchable_resource.pb.go @@ -724,19 +724,21 @@ func (*MatchingAttributes) XXX_OneofWrappers() []interface{} { } } -// Represents a custom set of attributes applied for either a domain; a domain and project; or -// domain, project and workflow name. +// Represents a custom set of attributes applied for either a domain (and optional org); a domain and project (and optional org); +// or domain, project and workflow name (and optional org). // These are used to override system level defaults for kubernetes cluster resource management, // default execution values, and more all across different levels of specificity. type MatchableAttributesConfiguration struct { - Attributes *MatchingAttributes `protobuf:"bytes,1,opt,name=attributes,proto3" json:"attributes,omitempty"` - Domain string `protobuf:"bytes,2,opt,name=domain,proto3" json:"domain,omitempty"` - Project string `protobuf:"bytes,3,opt,name=project,proto3" json:"project,omitempty"` - Workflow string `protobuf:"bytes,4,opt,name=workflow,proto3" json:"workflow,omitempty"` - LaunchPlan string `protobuf:"bytes,5,opt,name=launch_plan,json=launchPlan,proto3" json:"launch_plan,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Attributes *MatchingAttributes `protobuf:"bytes,1,opt,name=attributes,proto3" json:"attributes,omitempty"` + Domain string `protobuf:"bytes,2,opt,name=domain,proto3" json:"domain,omitempty"` + Project string `protobuf:"bytes,3,opt,name=project,proto3" json:"project,omitempty"` + Workflow string `protobuf:"bytes,4,opt,name=workflow,proto3" json:"workflow,omitempty"` + LaunchPlan string `protobuf:"bytes,5,opt,name=launch_plan,json=launchPlan,proto3" json:"launch_plan,omitempty"` + // Optional, org key applied to the resource. + Org string `protobuf:"bytes,6,opt,name=org,proto3" json:"org,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *MatchableAttributesConfiguration) Reset() { *m = MatchableAttributesConfiguration{} } @@ -799,6 +801,13 @@ func (m *MatchableAttributesConfiguration) GetLaunchPlan() string { return "" } +func (m *MatchableAttributesConfiguration) GetOrg() string { + if m != nil { + return m.Org + } + return "" +} + // Request all matching resource attributes for a resource type. // See :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for more details type ListMatchableAttributesRequest struct { @@ -905,89 +914,90 @@ func init() { } var fileDescriptor_1d15bcabb02640f4 = []byte{ - // 1338 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x56, 0x59, 0x73, 0x1a, 0x47, - 0x10, 0x66, 0x75, 0x20, 0xd4, 0xc4, 0xb0, 0x1a, 0x5b, 0x12, 0x92, 0x62, 0x5b, 0xd9, 0x1c, 0x56, - 0x92, 0x32, 0xa4, 0x48, 0x1e, 0x9c, 0xc3, 0x55, 0x41, 0x78, 0x31, 0x94, 0x91, 0x90, 0x06, 0xf0, - 0x91, 0x97, 0xad, 0x61, 0x19, 0x96, 0x8d, 0xf6, 0xd2, 0xec, 0xac, 0x10, 0x95, 0x3f, 0x91, 0x87, - 0xe4, 0xa7, 0xe4, 0xa7, 0xe4, 0x3d, 0xef, 0xc9, 0x8f, 0x48, 0xed, 0x09, 0xac, 0xc0, 0xe5, 0xb7, - 0x99, 0x9e, 0xaf, 0x8f, 0xe9, 0xe9, 0xfe, 0x7a, 0xe0, 0xc9, 0xc8, 0x98, 0x72, 0xaa, 0x0f, 0x8d, - 0x0a, 0x19, 0x9a, 0xba, 0x55, 0x31, 0x09, 0x57, 0xc7, 0x64, 0x60, 0x50, 0x85, 0x51, 0xd7, 0xf6, - 0x98, 0x4a, 0xcb, 0x0e, 0xb3, 0xb9, 0x8d, 0x0a, 0x31, 0xb0, 0x1c, 0x00, 0x0f, 0x8f, 0x52, 0x8a, - 0xaa, 0x6d, 0x9a, 0xb6, 0x15, 0x82, 0x0f, 0xd3, 0x56, 0x55, 0xc3, 0x73, 0x39, 0x65, 0x0a, 0x71, - 0x5d, 0x5d, 0xb3, 0x4c, 0x6a, 0xf1, 0x08, 0xf8, 0x30, 0x01, 0xaa, 0x36, 0xa3, 0x15, 0x7a, 0x4b, - 0x55, 0x8f, 0xeb, 0x89, 0x9d, 0x8f, 0x17, 0x8f, 0x5d, 0xaa, 0x7a, 0x4c, 0xe7, 0xd3, 0xe8, 0xf4, - 0x91, 0x66, 0xdb, 0x9a, 0x41, 0x2b, 0xc1, 0x6e, 0xe0, 0x8d, 0x2a, 0x13, 0x46, 0x1c, 0x87, 0x32, - 0x37, 0x3c, 0x97, 0xfe, 0x14, 0x40, 0xec, 0x11, 0xf7, 0x0a, 0x47, 0x37, 0xe9, 0x3a, 0x54, 0x45, - 0x22, 0xac, 0xab, 0x8e, 0x57, 0x12, 0x8e, 0x85, 0x93, 0x6d, 0xec, 0x2f, 0x7d, 0x89, 0xe6, 0x78, - 0xa5, 0xb5, 0x50, 0xa2, 0x39, 0x1e, 0xda, 0x83, 0xac, 0x49, 0x4d, 0x9b, 0x4d, 0x4b, 0xeb, 0x81, - 0x30, 0xda, 0xa1, 0x12, 0x6c, 0xb9, 0xdc, 0x66, 0x44, 0xa3, 0xa5, 0x8d, 0xe0, 0x20, 0xde, 0xa2, - 0xaf, 0x61, 0x87, 0x3a, 0x63, 0x6a, 0x52, 0x46, 0x0c, 0x25, 0xc6, 0x6c, 0x06, 0x18, 0x31, 0x39, - 0xe8, 0x86, 0x72, 0xe9, 0x77, 0x01, 0xf6, 0xe6, 0xe3, 0xaa, 0x71, 0xce, 0xf4, 0x81, 0xc7, 0xa9, - 0x8b, 0x7e, 0x82, 0xdc, 0x90, 0x8e, 0x88, 0x67, 0x70, 0x37, 0x08, 0x31, 0x5f, 0x3d, 0x2e, 0x2f, - 0x26, 0xbe, 0x9c, 0xbe, 0x11, 0x4e, 0x34, 0xd0, 0x33, 0xc8, 0x1a, 0xba, 0xa9, 0x73, 0x37, 0xb8, - 0xcc, 0x87, 0xe8, 0x46, 0x78, 0xe9, 0x2f, 0x01, 0x0e, 0xea, 0xe1, 0x23, 0x2d, 0x89, 0xea, 0x1d, - 0x00, 0x49, 0x76, 0x25, 0xe1, 0x78, 0xfd, 0x24, 0x5f, 0xfd, 0x3e, 0x6d, 0x7b, 0xa5, 0x7a, 0x79, - 0xb6, 0x94, 0x2d, 0xce, 0xa6, 0x78, 0xce, 0xd8, 0xe1, 0x73, 0x28, 0xa6, 0x8e, 0xfd, 0xf7, 0xb8, - 0xa2, 0xd3, 0xf8, 0x85, 0xae, 0xe8, 0x14, 0x3d, 0x80, 0xcd, 0x1b, 0x62, 0x78, 0x34, 0x7a, 0xa3, - 0x70, 0xf3, 0xc3, 0xda, 0x33, 0x41, 0x2a, 0x43, 0x49, 0x8e, 0x6b, 0xe6, 0xd2, 0xa3, 0xde, 0x7c, - 0xd4, 0x08, 0x36, 0x38, 0xd1, 0xc2, 0x78, 0xb7, 0x71, 0xb0, 0x96, 0x9e, 0xc2, 0x6e, 0x82, 0x8f, - 0x02, 0x6e, 0x93, 0x01, 0x35, 0x66, 0x2e, 0x84, 0x39, 0x17, 0xd2, 0x7f, 0x02, 0x14, 0x2e, 0x0c, - 0x4f, 0xd3, 0xad, 0xce, 0x0d, 0x65, 0x4c, 0x1f, 0x52, 0x74, 0x04, 0xdb, 0x9c, 0xb8, 0x57, 0x0a, - 0x9f, 0x3a, 0x31, 0x38, 0xe7, 0x0b, 0x7a, 0x53, 0x27, 0x38, 0x74, 0x02, 0xb8, 0xa2, 0x0f, 0x4b, - 0x6b, 0x81, 0xdf, 0x5c, 0x28, 0x68, 0x0d, 0x91, 0x01, 0xfb, 0xa6, 0xee, 0xba, 0xba, 0xa5, 0x29, - 0x11, 0x68, 0x40, 0xc7, 0xe4, 0x46, 0xb7, 0x59, 0x50, 0x4d, 0x85, 0xea, 0x77, 0xe9, 0x94, 0x2e, - 0xba, 0x2e, 0x9f, 0x85, 0xda, 0xa1, 0xf4, 0x34, 0xd2, 0xc5, 0xbb, 0xe6, 0x32, 0xb1, 0x54, 0x85, - 0xdd, 0xa5, 0x78, 0x94, 0x83, 0x8d, 0x46, 0xad, 0xd5, 0x16, 0x33, 0xa8, 0x08, 0xf9, 0x7e, 0x57, - 0x56, 0x5e, 0xc8, 0x8d, 0x5a, 0xbf, 0xdd, 0x13, 0x05, 0xa9, 0x03, 0xc5, 0x45, 0x97, 0x7e, 0x41, - 0x6e, 0xdb, 0xf1, 0x26, 0x7a, 0xf9, 0x47, 0xef, 0x0f, 0x13, 0xcf, 0x14, 0xa4, 0x7f, 0xd7, 0x61, - 0xff, 0x8d, 0xcd, 0xae, 0x46, 0x86, 0x3d, 0x99, 0xe5, 0xdd, 0xb6, 0x46, 0xba, 0x86, 0x9e, 0x40, - 0xd1, 0x24, 0xb7, 0x8a, 0x43, 0x18, 0x31, 0x0c, 0x6a, 0xe8, 0xae, 0x19, 0xa4, 0x73, 0x13, 0x17, - 0x4c, 0x72, 0x7b, 0x31, 0x93, 0xa2, 0x16, 0x88, 0x71, 0xe3, 0x2b, 0xaa, 0x6d, 0x71, 0x7a, 0xcb, - 0xa3, 0xfa, 0x9e, 0x8b, 0xc4, 0xe7, 0x87, 0x72, 0x37, 0x82, 0xd5, 0x43, 0x14, 0x2e, 0xba, 0x8b, - 0x02, 0xf4, 0x16, 0xf6, 0x18, 0x99, 0x28, 0xb6, 0xc7, 0x1d, 0x8f, 0x2b, 0x43, 0xc2, 0x89, 0x6f, - 0x71, 0xa4, 0x6b, 0x41, 0xa3, 0xe7, 0xab, 0x9f, 0xa6, 0xaf, 0x86, 0xc9, 0xa4, 0x13, 0x80, 0x5f, - 0x10, 0x4e, 0xc2, 0xc0, 0xf1, 0x7d, 0x76, 0x57, 0x88, 0xca, 0x90, 0x35, 0xfc, 0x42, 0x72, 0x83, - 0xb7, 0xcc, 0x57, 0xf7, 0xd2, 0x96, 0x82, 0x32, 0x73, 0x71, 0x84, 0x42, 0xcf, 0x21, 0x4f, 0x2c, - 0xcb, 0xe6, 0xc4, 0xcf, 0x88, 0x1b, 0x50, 0x45, 0xbe, 0x7a, 0x94, 0x56, 0xaa, 0xcd, 0x20, 0x78, - 0x1e, 0x8f, 0x7e, 0x86, 0x7b, 0xba, 0xc5, 0x29, 0x63, 0x9e, 0xc3, 0xf5, 0x81, 0x41, 0x4b, 0xd9, - 0xc0, 0xc0, 0x61, 0x39, 0xa4, 0xc4, 0x72, 0x4c, 0x89, 0xe5, 0x53, 0xdb, 0x36, 0x5e, 0xfb, 0xb5, - 0x8c, 0x17, 0x15, 0xfc, 0xf4, 0xfb, 0xef, 0x34, 0x61, 0x3a, 0xa7, 0x8a, 0x4a, 0xd4, 0x31, 0x2d, - 0x6d, 0x1d, 0x0b, 0x27, 0x39, 0x5c, 0x48, 0xc4, 0x75, 0x5f, 0x8a, 0x4e, 0x60, 0x83, 0x5a, 0x37, - 0x6e, 0x29, 0x17, 0x78, 0x78, 0x90, 0x0e, 0x51, 0xb6, 0x6e, 0x5c, 0x1c, 0x20, 0xa4, 0x3f, 0xb2, - 0x80, 0xce, 0xfc, 0xf9, 0xa1, 0x5b, 0xda, 0x5c, 0x1f, 0x0e, 0xa0, 0x14, 0x74, 0x4c, 0x3c, 0x50, - 0x94, 0x05, 0x2e, 0xf1, 0x8d, 0x7e, 0xf1, 0x3e, 0x9e, 0x9a, 0x59, 0x6a, 0x66, 0xf0, 0x1e, 0x5f, - 0xce, 0x9b, 0x57, 0x70, 0x14, 0xcf, 0x98, 0x65, 0x6e, 0xc2, 0x72, 0xf9, 0xf2, 0x83, 0x29, 0xab, - 0x99, 0xc1, 0x07, 0xea, 0x4a, 0x3a, 0x1c, 0xc3, 0x61, 0x32, 0xa8, 0x94, 0x6b, 0x9f, 0x75, 0xe6, - 0x7d, 0x85, 0x95, 0x74, 0x72, 0x27, 0x4f, 0x2b, 0x68, 0xaa, 0x99, 0xc1, 0x25, 0xba, 0x8a, 0xc2, - 0x14, 0xd8, 0x9f, 0x79, 0x8a, 0x2f, 0x18, 0x54, 0x50, 0x54, 0x66, 0x9f, 0xaf, 0x74, 0x33, 0xcf, - 0x6e, 0xcd, 0x0c, 0xde, 0xa5, 0x4b, 0x69, 0xaf, 0x03, 0xe8, 0xda, 0x23, 0x86, 0xdf, 0x5a, 0xf6, - 0x48, 0x71, 0x29, 0xbb, 0xd1, 0x55, 0x1a, 0x55, 0xe3, 0xe3, 0x54, 0x77, 0x5d, 0x86, 0xc0, 0xce, - 0xa8, 0x1b, 0xc2, 0x9a, 0x19, 0x2c, 0x5e, 0xa7, 0x64, 0xa8, 0x0d, 0x62, 0x44, 0x6e, 0x33, 0xda, - 0xc8, 0xa6, 0xcd, 0x2d, 0xa3, 0x0d, 0x3f, 0x11, 0x45, 0x27, 0xc5, 0x3e, 0x14, 0x0e, 0x26, 0x11, - 0x7d, 0x28, 0x73, 0x89, 0x08, 0x5b, 0x76, 0x2b, 0x30, 0xfb, 0x24, 0x6d, 0x76, 0x05, 0xdf, 0x34, - 0x33, 0x78, 0x7f, 0xb2, 0x82, 0x8a, 0x30, 0xa0, 0xbb, 0x3f, 0x94, 0xa8, 0xe0, 0x3f, 0x59, 0x51, - 0x34, 0xb5, 0x04, 0xd8, 0xcc, 0xe0, 0x1d, 0x35, 0x2d, 0x3c, 0xcd, 0x41, 0x96, 0x13, 0xa6, 0x51, - 0x2e, 0xfd, 0x2d, 0xc0, 0xf1, 0x59, 0xfc, 0xad, 0x9a, 0x3d, 0x6e, 0xe8, 0xdb, 0x63, 0x41, 0x47, - 0xa3, 0xd3, 0xd4, 0x88, 0xf5, 0x5d, 0x4b, 0x69, 0xd7, 0x77, 0x9b, 0x6b, 0x7e, 0x96, 0xfa, 0xdf, - 0x96, 0xa1, 0x6d, 0x12, 0xdd, 0x8a, 0xe6, 0x64, 0xb4, 0xf3, 0xbf, 0x2d, 0x0e, 0xb3, 0x7f, 0xa5, - 0x2a, 0x8f, 0xfe, 0x33, 0xf1, 0x16, 0x1d, 0x42, 0x2e, 0xce, 0x49, 0xf4, 0xa3, 0x49, 0xf6, 0xe8, - 0x31, 0xe4, 0x0d, 0xe2, 0x59, 0xea, 0x58, 0x71, 0x0c, 0x62, 0x45, 0x9f, 0x19, 0x08, 0x45, 0x17, - 0x06, 0xb1, 0xa4, 0x31, 0x3c, 0x6a, 0xeb, 0x2e, 0x5f, 0x72, 0x35, 0x4c, 0xaf, 0x3d, 0xea, 0x72, - 0xd4, 0x80, 0x7b, 0x49, 0x37, 0x26, 0xf3, 0xb2, 0x70, 0x37, 0xa5, 0x89, 0x89, 0xb8, 0xd9, 0xf0, - 0x47, 0xb1, 0x9e, 0x3f, 0x56, 0xa5, 0xdf, 0xe0, 0xf1, 0x4a, 0x4f, 0xae, 0x63, 0x5b, 0x2e, 0x45, - 0x6f, 0xa1, 0xa0, 0xce, 0x27, 0x34, 0x1e, 0x56, 0xdf, 0xac, 0xf4, 0xb5, 0xe2, 0x25, 0x70, 0xca, - 0xce, 0x57, 0xff, 0x08, 0xb0, 0x73, 0x27, 0x40, 0xb4, 0x03, 0xf7, 0x7a, 0xb5, 0xee, 0x2b, 0x05, - 0xcb, 0xdd, 0x4e, 0x1f, 0xd7, 0x65, 0x31, 0x83, 0x1e, 0x80, 0x58, 0x6f, 0xf7, 0xbb, 0x3d, 0x19, - 0xcf, 0xa4, 0x02, 0xba, 0x0f, 0x45, 0xf9, 0xad, 0x5c, 0xef, 0xf7, 0x5a, 0x9d, 0x73, 0xe5, 0xb2, - 0x2f, 0xf7, 0x65, 0x71, 0x0d, 0x1d, 0xc1, 0xfe, 0x4c, 0x18, 0x2b, 0xb5, 0x6b, 0xa7, 0x72, 0x5b, - 0x5c, 0x47, 0x9f, 0xc1, 0xf1, 0x65, 0xbf, 0xd6, 0x6e, 0xf5, 0xde, 0x29, 0x9d, 0x86, 0xd2, 0x95, - 0xf1, 0xeb, 0x56, 0x5d, 0x56, 0xba, 0x17, 0x72, 0xbd, 0xd5, 0x68, 0xd5, 0x6b, 0xbe, 0x8e, 0xb8, - 0xe1, 0xdb, 0xbd, 0x68, 0xf7, 0x5f, 0xb6, 0xce, 0x95, 0xce, 0x6b, 0x19, 0xe3, 0xd6, 0x0b, 0x59, - 0xdc, 0x44, 0x0f, 0xe1, 0xe0, 0x4d, 0x07, 0xbf, 0x6a, 0xb4, 0x3b, 0x6f, 0x94, 0x39, 0x07, 0x9d, - 0xf3, 0x46, 0xeb, 0xa5, 0x98, 0x45, 0x7b, 0x80, 0x62, 0x67, 0xb5, 0x6e, 0xb7, 0xf5, 0xf2, 0xfc, - 0x4c, 0x3e, 0xef, 0x89, 0x5b, 0xa7, 0xcf, 0x7f, 0xf9, 0x51, 0xd3, 0xf9, 0xd8, 0x1b, 0x94, 0x55, - 0xdb, 0xac, 0x04, 0x09, 0xb3, 0x99, 0x16, 0x2e, 0x2a, 0xc9, 0x17, 0x5c, 0xa3, 0x56, 0xc5, 0x19, - 0x3c, 0xd5, 0xec, 0xca, 0xe2, 0xef, 0x7e, 0x90, 0x0d, 0xa6, 0xcd, 0xb7, 0xff, 0x07, 0x00, 0x00, - 0xff, 0xff, 0x9e, 0xa4, 0xff, 0x06, 0x4c, 0x0c, 0x00, 0x00, + // 1350 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x56, 0x5b, 0x53, 0xdb, 0x46, + 0x14, 0xb6, 0xb9, 0x18, 0x73, 0xdc, 0x80, 0xd8, 0x04, 0x30, 0xd0, 0x24, 0x54, 0xbd, 0x84, 0xb6, + 0x13, 0xbb, 0x43, 0xfb, 0x90, 0x5e, 0x32, 0x53, 0xe3, 0x88, 0xe0, 0x89, 0xc1, 0xb0, 0xb6, 0x73, + 0xe9, 0x8b, 0x66, 0x2d, 0xaf, 0x65, 0x15, 0x49, 0x2b, 0x56, 0x2b, 0xc0, 0xd3, 0x3f, 0xd1, 0x87, + 0xf6, 0xa7, 0xf4, 0xff, 0xf4, 0xad, 0x0f, 0xed, 0x8f, 0xe8, 0x68, 0x75, 0xb1, 0x2d, 0xec, 0x4c, + 0xde, 0x76, 0xcf, 0x7e, 0xe7, 0xb2, 0x67, 0xcf, 0xf9, 0xce, 0xc2, 0x93, 0x81, 0x3d, 0x12, 0xd4, + 0xea, 0xdb, 0x55, 0xd2, 0x77, 0x2c, 0xb7, 0xea, 0x10, 0x61, 0x0c, 0x49, 0xcf, 0xa6, 0x3a, 0xa7, + 0x3e, 0x0b, 0xb8, 0x41, 0x2b, 0x1e, 0x67, 0x82, 0xa1, 0xb5, 0x04, 0x58, 0x91, 0xc0, 0xdd, 0xbd, + 0x8c, 0xa2, 0xc1, 0x1c, 0x87, 0xb9, 0x11, 0x78, 0x37, 0x6b, 0xd5, 0xb0, 0x03, 0x5f, 0x50, 0xae, + 0x13, 0xdf, 0xb7, 0x4c, 0xd7, 0xa1, 0xae, 0x88, 0x81, 0x0f, 0x53, 0xa0, 0xc1, 0x38, 0xad, 0xd2, + 0x5b, 0x6a, 0x04, 0xc2, 0x4a, 0xed, 0x7c, 0x3c, 0x7d, 0xec, 0x53, 0x23, 0xe0, 0x96, 0x18, 0xc5, + 0xa7, 0x8f, 0x4c, 0xc6, 0x4c, 0x9b, 0x56, 0xe5, 0xae, 0x17, 0x0c, 0xaa, 0x37, 0x9c, 0x78, 0x1e, + 0xe5, 0x7e, 0x74, 0xae, 0xfe, 0x99, 0x07, 0xa5, 0x43, 0xfc, 0x4b, 0x1c, 0xdf, 0xa4, 0xed, 0x51, + 0x03, 0x29, 0xb0, 0x68, 0x78, 0x41, 0x39, 0xbf, 0x9f, 0x3f, 0x58, 0xc5, 0xe1, 0x32, 0x94, 0x98, + 0x5e, 0x50, 0x5e, 0x88, 0x24, 0xa6, 0x17, 0xa0, 0x2d, 0x28, 0x38, 0xd4, 0x61, 0x7c, 0x54, 0x5e, + 0x94, 0xc2, 0x78, 0x87, 0xca, 0xb0, 0xe2, 0x0b, 0xc6, 0x89, 0x49, 0xcb, 0x4b, 0xf2, 0x20, 0xd9, + 0xa2, 0xaf, 0x61, 0x83, 0x7a, 0x43, 0xea, 0x50, 0x4e, 0x6c, 0x3d, 0xc1, 0x2c, 0x4b, 0x8c, 0x92, + 0x1e, 0xb4, 0x23, 0xb9, 0xfa, 0x7b, 0x1e, 0xb6, 0x26, 0xe3, 0xaa, 0x09, 0xc1, 0xad, 0x5e, 0x20, + 0xa8, 0x8f, 0x7e, 0x82, 0x62, 0x9f, 0x0e, 0x48, 0x60, 0x0b, 0x5f, 0x86, 0x58, 0x3a, 0xdc, 0xaf, + 0x4c, 0x27, 0xbe, 0x92, 0xbd, 0x11, 0x4e, 0x35, 0xd0, 0x33, 0x28, 0xd8, 0x96, 0x63, 0x09, 0x5f, + 0x5e, 0xe6, 0x43, 0x74, 0x63, 0xbc, 0xfa, 0x57, 0x1e, 0x76, 0xea, 0xd1, 0x23, 0xcd, 0x88, 0xea, + 0x1d, 0x00, 0x49, 0x77, 0xe5, 0xfc, 0xfe, 0xe2, 0x41, 0xe9, 0xf0, 0xfb, 0xac, 0xed, 0xb9, 0xea, + 0x95, 0xf1, 0x52, 0x73, 0x05, 0x1f, 0xe1, 0x09, 0x63, 0xbb, 0xcf, 0x61, 0x3d, 0x73, 0x1c, 0xbe, + 0xc7, 0x25, 0x1d, 0x25, 0x2f, 0x74, 0x49, 0x47, 0xe8, 0x01, 0x2c, 0x5f, 0x13, 0x3b, 0xa0, 0xf1, + 0x1b, 0x45, 0x9b, 0x1f, 0x16, 0x9e, 0xe5, 0xd5, 0x0a, 0x94, 0xb5, 0xa4, 0x66, 0x2e, 0x02, 0x1a, + 0x4c, 0x46, 0x8d, 0x60, 0x49, 0x10, 0x33, 0x8a, 0x77, 0x15, 0xcb, 0xb5, 0xfa, 0x14, 0x36, 0x53, + 0x7c, 0x1c, 0x70, 0x93, 0xf4, 0xa8, 0x3d, 0x76, 0x91, 0x9f, 0x70, 0xa1, 0xfe, 0x97, 0x87, 0xb5, + 0x73, 0x3b, 0x30, 0x2d, 0xb7, 0x75, 0x4d, 0x39, 0xb7, 0xfa, 0x14, 0xed, 0xc1, 0xaa, 0x20, 0xfe, + 0xa5, 0x2e, 0x46, 0x5e, 0x02, 0x2e, 0x86, 0x82, 0xce, 0xc8, 0x93, 0x87, 0x9e, 0x84, 0xeb, 0x56, + 0xbf, 0xbc, 0x20, 0xfd, 0x16, 0x23, 0x41, 0xa3, 0x8f, 0x6c, 0xd8, 0x76, 0x2c, 0xdf, 0xb7, 0x5c, + 0x53, 0x8f, 0x41, 0x3d, 0x3a, 0x24, 0xd7, 0x16, 0xe3, 0xb2, 0x9a, 0xd6, 0x0e, 0xbf, 0xcb, 0xa6, + 0x74, 0xda, 0x75, 0xe5, 0x34, 0xd2, 0x8e, 0xa4, 0x47, 0xb1, 0x2e, 0xde, 0x74, 0x66, 0x89, 0xd5, + 0x43, 0xd8, 0x9c, 0x89, 0x47, 0x45, 0x58, 0x3a, 0xae, 0x35, 0x9a, 0x4a, 0x0e, 0xad, 0x43, 0xa9, + 0xdb, 0xd6, 0xf4, 0x17, 0xda, 0x71, 0xad, 0xdb, 0xec, 0x28, 0x79, 0xb5, 0x05, 0xeb, 0xd3, 0x2e, + 0xc3, 0x82, 0x5c, 0x65, 0xc9, 0x26, 0x7e, 0xf9, 0x47, 0xef, 0x0f, 0x13, 0x8f, 0x15, 0xd4, 0x7f, + 0x17, 0x61, 0xfb, 0x0d, 0xe3, 0x97, 0x03, 0x9b, 0xdd, 0x8c, 0xf3, 0xce, 0xdc, 0x81, 0x65, 0xa2, + 0x27, 0xb0, 0xee, 0x90, 0x5b, 0xdd, 0x23, 0x9c, 0xd8, 0x36, 0xb5, 0x2d, 0xdf, 0x91, 0xe9, 0x5c, + 0xc6, 0x6b, 0x0e, 0xb9, 0x3d, 0x1f, 0x4b, 0x51, 0x03, 0x94, 0xa4, 0xf1, 0x75, 0x83, 0xb9, 0x82, + 0xde, 0x8a, 0xb8, 0xbe, 0x27, 0x22, 0x09, 0xf9, 0xa1, 0xd2, 0x8e, 0x61, 0xf5, 0x08, 0x85, 0xd7, + 0xfd, 0x69, 0x01, 0x7a, 0x0b, 0x5b, 0x9c, 0xdc, 0xe8, 0x2c, 0x10, 0x5e, 0x20, 0xf4, 0x3e, 0x11, + 0x24, 0xb4, 0x38, 0xb0, 0x4c, 0xd9, 0xe8, 0xa5, 0xc3, 0x4f, 0xb3, 0x57, 0xc3, 0xe4, 0xa6, 0x25, + 0xc1, 0x2f, 0x88, 0x20, 0x51, 0xe0, 0xf8, 0x3e, 0xbf, 0x2b, 0x44, 0x15, 0x28, 0xd8, 0x61, 0x21, + 0xf9, 0xf2, 0x2d, 0x4b, 0x87, 0x5b, 0x59, 0x4b, 0xb2, 0xcc, 0x7c, 0x1c, 0xa3, 0xd0, 0x73, 0x28, + 0x11, 0xd7, 0x65, 0x82, 0x84, 0x19, 0xf1, 0x25, 0x55, 0x94, 0x0e, 0xf7, 0xb2, 0x4a, 0xb5, 0x31, + 0x04, 0x4f, 0xe2, 0xd1, 0xcf, 0x70, 0xcf, 0x72, 0x05, 0xe5, 0x3c, 0xf0, 0x84, 0xd5, 0xb3, 0x69, + 0xb9, 0x20, 0x0d, 0xec, 0x56, 0x22, 0x4a, 0xac, 0x24, 0x94, 0x58, 0x39, 0x62, 0xcc, 0x7e, 0x1d, + 0xd6, 0x32, 0x9e, 0x56, 0x08, 0xd3, 0x1f, 0xbe, 0xd3, 0x0d, 0xb7, 0x04, 0xd5, 0x0d, 0x62, 0x0c, + 0x69, 0x79, 0x65, 0x3f, 0x7f, 0x50, 0xc4, 0x6b, 0xa9, 0xb8, 0x1e, 0x4a, 0xd1, 0x01, 0x2c, 0x51, + 0xf7, 0xda, 0x2f, 0x17, 0xa5, 0x87, 0x07, 0xd9, 0x10, 0x35, 0xf7, 0xda, 0xc7, 0x12, 0xa1, 0xfe, + 0x51, 0x00, 0x74, 0x1a, 0xce, 0x0f, 0xcb, 0x35, 0x27, 0xfa, 0xb0, 0x07, 0x65, 0xd9, 0x31, 0xc9, + 0x40, 0xd1, 0xa7, 0xb8, 0x24, 0x34, 0xfa, 0xc5, 0xfb, 0x78, 0x6a, 0x6c, 0xe9, 0x24, 0x87, 0xb7, + 0xc4, 0x6c, 0xde, 0xbc, 0x84, 0xbd, 0x64, 0xc6, 0xcc, 0x72, 0x13, 0x95, 0xcb, 0x97, 0x1f, 0x4c, + 0x59, 0x27, 0x39, 0xbc, 0x63, 0xcc, 0xa5, 0xc3, 0x21, 0xec, 0xa6, 0x83, 0x4a, 0xbf, 0x0a, 0x59, + 0x67, 0xd2, 0x57, 0x54, 0x49, 0x07, 0x77, 0xf2, 0x34, 0x87, 0xa6, 0x4e, 0x72, 0xb8, 0x4c, 0xe7, + 0x51, 0x98, 0x0e, 0xdb, 0x63, 0x4f, 0xc9, 0x05, 0x65, 0x05, 0xc5, 0x65, 0xf6, 0xf9, 0x5c, 0x37, + 0x93, 0xec, 0x76, 0x92, 0xc3, 0x9b, 0x74, 0x26, 0xed, 0xb5, 0x00, 0x5d, 0x05, 0xc4, 0x0e, 0x5b, + 0x8b, 0x0d, 0x74, 0x9f, 0xf2, 0x6b, 0xcb, 0xa0, 0x71, 0x35, 0x3e, 0xce, 0x74, 0xd7, 0x45, 0x04, + 0x6c, 0x0d, 0xda, 0x11, 0xec, 0x24, 0x87, 0x95, 0xab, 0x8c, 0x0c, 0x35, 0x41, 0x89, 0xc9, 0x6d, + 0x4c, 0x1b, 0x85, 0xac, 0xb9, 0x59, 0xb4, 0x11, 0x26, 0x62, 0xdd, 0xcb, 0xb0, 0x0f, 0x85, 0x9d, + 0x9b, 0x98, 0x3e, 0xf4, 0x89, 0x44, 0x44, 0x2d, 0xbb, 0x22, 0xcd, 0x3e, 0xc9, 0x9a, 0x9d, 0xc3, + 0x37, 0x27, 0x39, 0xbc, 0x7d, 0x33, 0x87, 0x8a, 0x30, 0xa0, 0xbb, 0x3f, 0x94, 0xb8, 0xe0, 0x3f, + 0x99, 0x53, 0x34, 0xb5, 0x14, 0x78, 0x92, 0xc3, 0x1b, 0x46, 0x56, 0x78, 0x54, 0x84, 0x82, 0x20, + 0xdc, 0xa4, 0x42, 0xfd, 0x27, 0x0f, 0xfb, 0xa7, 0xc9, 0xb7, 0x6a, 0xfc, 0xb8, 0x91, 0xef, 0x80, + 0xcb, 0x8e, 0x46, 0x47, 0x99, 0x11, 0x1b, 0xba, 0x56, 0xb3, 0xae, 0xef, 0x36, 0xd7, 0xe4, 0x2c, + 0x0d, 0xbf, 0x2d, 0x7d, 0xe6, 0x10, 0xcb, 0x8d, 0xe7, 0x64, 0xbc, 0x0b, 0xbf, 0x2d, 0x1e, 0x67, + 0xbf, 0x52, 0x43, 0xc4, 0xff, 0x99, 0x64, 0x8b, 0x76, 0xa1, 0x98, 0xe4, 0x24, 0xfe, 0xd1, 0xa4, + 0x7b, 0xf4, 0x18, 0x4a, 0x36, 0x09, 0x5c, 0x63, 0xa8, 0x7b, 0x36, 0x71, 0xe3, 0xcf, 0x0c, 0x44, + 0xa2, 0x73, 0x9b, 0xb8, 0xe1, 0x9c, 0x66, 0xdc, 0x94, 0xaf, 0xbb, 0x8a, 0xc3, 0xa5, 0x3a, 0x84, + 0x47, 0x4d, 0xcb, 0x17, 0x33, 0x2e, 0x8b, 0xe9, 0x55, 0x40, 0x7d, 0x81, 0x8e, 0xe1, 0x5e, 0xda, + 0x9f, 0xe9, 0x04, 0x5d, 0xbb, 0x9b, 0xe4, 0xd4, 0x44, 0xd2, 0x7e, 0xf8, 0xa3, 0x44, 0x2f, 0x1c, + 0xb4, 0xea, 0x6f, 0xf0, 0x78, 0xae, 0x27, 0xdf, 0x63, 0xae, 0x4f, 0xd1, 0x5b, 0x58, 0x33, 0x26, + 0x53, 0x9c, 0x8c, 0xaf, 0x6f, 0xe6, 0xfa, 0x9a, 0xf3, 0x36, 0x38, 0x63, 0xe7, 0xab, 0xbf, 0xf3, + 0xb0, 0x71, 0x27, 0x40, 0xb4, 0x01, 0xf7, 0x3a, 0xb5, 0xf6, 0x2b, 0x1d, 0x6b, 0xed, 0x56, 0x17, + 0xd7, 0x35, 0x25, 0x87, 0x1e, 0x80, 0x52, 0x6f, 0x76, 0xdb, 0x1d, 0x0d, 0x8f, 0xa5, 0x79, 0x74, + 0x1f, 0xd6, 0xb5, 0xb7, 0x5a, 0xbd, 0xdb, 0x69, 0xb4, 0xce, 0xf4, 0x8b, 0xae, 0xd6, 0xd5, 0x94, + 0x05, 0xb4, 0x07, 0xdb, 0x63, 0x61, 0xa2, 0xd4, 0xac, 0x1d, 0x69, 0x4d, 0x65, 0x11, 0x7d, 0x06, + 0xfb, 0x17, 0xdd, 0x5a, 0xb3, 0xd1, 0x79, 0xa7, 0xb7, 0x8e, 0xf5, 0xb6, 0x86, 0x5f, 0x37, 0xea, + 0x9a, 0xde, 0x3e, 0xd7, 0xea, 0x8d, 0xe3, 0x46, 0xbd, 0x16, 0xea, 0x28, 0x4b, 0xa1, 0xdd, 0xf3, + 0x66, 0xf7, 0x65, 0xe3, 0x4c, 0x6f, 0xbd, 0xd6, 0x30, 0x6e, 0xbc, 0xd0, 0x94, 0x65, 0xf4, 0x10, + 0x76, 0xde, 0xb4, 0xf0, 0xab, 0xe3, 0x66, 0xeb, 0x8d, 0x3e, 0xe1, 0xa0, 0x75, 0x76, 0xdc, 0x78, + 0xa9, 0x14, 0xd0, 0x16, 0xa0, 0xc4, 0x59, 0xad, 0xdd, 0x6e, 0xbc, 0x3c, 0x3b, 0xd5, 0xce, 0x3a, + 0xca, 0xca, 0xd1, 0xf3, 0x5f, 0x7e, 0x34, 0x2d, 0x31, 0x0c, 0x7a, 0x15, 0x83, 0x39, 0x55, 0x99, + 0x30, 0xc6, 0xcd, 0x68, 0x51, 0x4d, 0x3f, 0xe5, 0x26, 0x75, 0xab, 0x5e, 0xef, 0xa9, 0xc9, 0xaa, + 0xd3, 0xff, 0xfd, 0x5e, 0x41, 0xce, 0x9f, 0x6f, 0xff, 0x0f, 0x00, 0x00, 0xff, 0xff, 0xeb, 0x2e, + 0x6f, 0x69, 0x5e, 0x0c, 0x00, 0x00, } diff --git a/flyteidl/gen/pb-go/flyteidl/admin/project.pb.go b/flyteidl/gen/pb-go/flyteidl/admin/project.pb.go index 662d2311ac..790ab90e6d 100644 --- a/flyteidl/gen/pb-go/flyteidl/admin/project.pb.go +++ b/flyteidl/gen/pb-go/flyteidl/admin/project.pb.go @@ -113,11 +113,13 @@ type Project struct { Description string `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"` // Leverage Labels from flyteidl.admin.common.proto to // tag projects with ownership information. - Labels *Labels `protobuf:"bytes,5,opt,name=labels,proto3" json:"labels,omitempty"` - State Project_ProjectState `protobuf:"varint,6,opt,name=state,proto3,enum=flyteidl.admin.Project_ProjectState" json:"state,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Labels *Labels `protobuf:"bytes,5,opt,name=labels,proto3" json:"labels,omitempty"` + State Project_ProjectState `protobuf:"varint,6,opt,name=state,proto3,enum=flyteidl.admin.Project_ProjectState" json:"state,omitempty"` + // Optional, org key applied to the resource. + Org string `protobuf:"bytes,7,opt,name=org,proto3" json:"org,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *Project) Reset() { *m = Project{} } @@ -187,6 +189,13 @@ func (m *Project) GetState() Project_ProjectState { return Project_ACTIVE } +func (m *Project) GetOrg() string { + if m != nil { + return m.Org + } + return "" +} + // Represents a list of projects. // See :ref:`ref_flyteidl.admin.Project` for more details type Projects struct { @@ -433,34 +442,35 @@ func init() { func init() { proto.RegisterFile("flyteidl/admin/project.proto", fileDescriptor_2db065ce03bf106d) } var fileDescriptor_2db065ce03bf106d = []byte{ - // 459 bytes of a gzipped FileDescriptorProto + // 468 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0xcd, 0x6e, 0xd3, 0x40, - 0x10, 0xc7, 0xb1, 0xdb, 0xd8, 0x61, 0x52, 0xa2, 0x68, 0x14, 0x1a, 0xf3, 0x71, 0xb0, 0x2c, 0x0e, - 0x39, 0x50, 0x1b, 0xd2, 0x1b, 0x08, 0xa4, 0xb4, 0xb1, 0xa0, 0xa2, 0x20, 0xb4, 0x49, 0x2b, 0xc1, - 0xa5, 0xf2, 0xc7, 0xd6, 0x2c, 0xd8, 0x5e, 0xe3, 0xdd, 0x1e, 0xf2, 0x08, 0x3c, 0x0c, 0xef, 0x88, - 0xbc, 0x5e, 0x57, 0x6d, 0x08, 0xa8, 0x27, 0xef, 0xcc, 0xfc, 0x76, 0xe6, 0x3f, 0x33, 0x5e, 0x78, - 0x7a, 0x99, 0xaf, 0x25, 0x65, 0x69, 0x1e, 0x44, 0x69, 0xc1, 0xca, 0xa0, 0xaa, 0xf9, 0x77, 0x9a, - 0x48, 0xbf, 0xaa, 0xb9, 0xe4, 0x38, 0xec, 0xa2, 0xbe, 0x8a, 0x3e, 0x7e, 0xb2, 0x41, 0x27, 0xbc, - 0x28, 0x78, 0xd9, 0xc2, 0xde, 0x73, 0xb0, 0x16, 0xbc, 0x88, 0x58, 0x89, 0x43, 0x30, 0x59, 0xea, - 0x18, 0xae, 0x31, 0xbd, 0x4f, 0x4c, 0x96, 0x22, 0xc2, 0x6e, 0x19, 0x15, 0xd4, 0x31, 0x95, 0x47, - 0x9d, 0xbd, 0xdf, 0x26, 0xd8, 0x9f, 0xdb, 0x62, 0x77, 0xe1, 0xf1, 0x05, 0xd8, 0xa9, 0xca, 0x2e, - 0x9c, 0x1d, 0x77, 0x67, 0x3a, 0x98, 0xed, 0xfb, 0xb7, 0xc5, 0xf9, 0x6d, 0x71, 0xd2, 0x61, 0xe8, - 0xc2, 0x20, 0xa5, 0x22, 0xa9, 0x59, 0x25, 0x19, 0x2f, 0x9d, 0x5d, 0x95, 0xec, 0xa6, 0x0b, 0x7d, - 0xb0, 0xf2, 0x28, 0xa6, 0xb9, 0x70, 0x7a, 0xae, 0xb1, 0x2d, 0xe5, 0xa9, 0x8a, 0x12, 0x4d, 0xe1, - 0x2b, 0xe8, 0x09, 0x19, 0x49, 0xea, 0x58, 0xae, 0x31, 0x1d, 0xce, 0x9e, 0x6d, 0xe2, 0xba, 0x9f, - 0xee, 0xbb, 0x6c, 0x58, 0xd2, 0x5e, 0xf1, 0xde, 0xc2, 0xde, 0x4d, 0x37, 0x02, 0x58, 0xf3, 0xe3, - 0xd5, 0xc9, 0x79, 0x38, 0xba, 0x87, 0x7b, 0xd0, 0x9f, 0x93, 0xe3, 0xf7, 0x27, 0xe7, 0xe1, 0x62, - 0x64, 0xe0, 0x18, 0x46, 0xcb, 0x2f, 0xcb, 0x55, 0xf8, 0xf1, 0xe2, 0x5d, 0xf8, 0x29, 0x24, 0xf3, - 0x55, 0xb8, 0x18, 0x99, 0xde, 0x19, 0xf4, 0xf5, 0x7d, 0x81, 0x87, 0xd0, 0xd7, 0x7b, 0x12, 0x8e, - 0xa1, 0x86, 0x31, 0xf9, 0x87, 0x14, 0x72, 0x0d, 0xe2, 0x18, 0x7a, 0x92, 0xff, 0xa0, 0xa5, 0x9e, - 0x6a, 0x6b, 0x78, 0xbf, 0x0c, 0x40, 0xcd, 0x9e, 0x32, 0x21, 0x09, 0xfd, 0x79, 0x45, 0x85, 0x6c, - 0xe0, 0x9c, 0x15, 0x4c, 0xaa, 0xa5, 0x3c, 0x20, 0xad, 0xb1, 0x3d, 0x05, 0x3a, 0x60, 0x5f, 0xb2, - 0x5c, 0xd2, 0xba, 0xd9, 0x4c, 0xe3, 0xef, 0x4c, 0x3c, 0x00, 0x5b, 0xf0, 0x5a, 0x5e, 0xc4, 0x6b, - 0x35, 0xfd, 0xc1, 0x6c, 0xbc, 0x29, 0x73, 0xc9, 0x6b, 0x49, 0xac, 0x06, 0x3a, 0x5a, 0x7b, 0x1f, - 0x60, 0xbf, 0x93, 0x4d, 0x33, 0x26, 0x24, 0xad, 0x3b, 0x39, 0x2f, 0xc1, 0xd6, 0x7d, 0x28, 0x41, - 0xff, 0xe9, 0xb7, 0xe3, 0xbc, 0x47, 0x30, 0xf9, 0x2b, 0x99, 0xa8, 0x78, 0x29, 0xa8, 0x37, 0x81, - 0x87, 0x3a, 0x74, 0x56, 0xa5, 0xcd, 0x8a, 0x74, 0xe0, 0xe8, 0xcd, 0xd7, 0xd7, 0x19, 0x93, 0xdf, - 0xae, 0x62, 0x3f, 0xe1, 0x45, 0xa0, 0x2a, 0xf0, 0x3a, 0x6b, 0x0f, 0xc1, 0xf5, 0xaf, 0x9f, 0xd1, - 0x32, 0xa8, 0xe2, 0x83, 0x8c, 0x07, 0xb7, 0x5f, 0x43, 0x6c, 0xa9, 0x77, 0x70, 0xf8, 0x27, 0x00, - 0x00, 0xff, 0xff, 0x33, 0x79, 0x69, 0x68, 0x54, 0x03, 0x00, 0x00, + 0x10, 0xc7, 0xb1, 0xd3, 0xd8, 0x61, 0x52, 0x22, 0x6b, 0x15, 0x9a, 0xe5, 0xe3, 0x60, 0x59, 0x1c, + 0x72, 0xa0, 0x36, 0xa4, 0x37, 0x10, 0x48, 0x69, 0x63, 0x41, 0x45, 0x41, 0x68, 0x93, 0x56, 0x82, + 0x4b, 0x65, 0xc7, 0x5b, 0xb3, 0x60, 0x7b, 0xcd, 0xee, 0xf6, 0x90, 0x47, 0xe0, 0xa9, 0x78, 0x35, + 0xe4, 0xf5, 0xba, 0x6a, 0x43, 0x41, 0x3d, 0x79, 0x3e, 0x7e, 0x9e, 0xf9, 0xcf, 0x8e, 0x06, 0x9e, + 0x5e, 0x14, 0x1b, 0x45, 0x59, 0x56, 0x44, 0x49, 0x56, 0xb2, 0x2a, 0xaa, 0x05, 0xff, 0x4e, 0xd7, + 0x2a, 0xac, 0x05, 0x57, 0x1c, 0x8d, 0xba, 0x6c, 0xa8, 0xb3, 0x8f, 0x9f, 0x6c, 0xd1, 0x6b, 0x5e, + 0x96, 0xbc, 0x6a, 0xe1, 0xe0, 0x39, 0x38, 0x0b, 0x5e, 0x26, 0xac, 0x42, 0x23, 0xb0, 0x59, 0x86, + 0x2d, 0xdf, 0x9a, 0xde, 0x27, 0x36, 0xcb, 0x10, 0x82, 0x9d, 0x2a, 0x29, 0x29, 0xb6, 0x75, 0x44, + 0xdb, 0xc1, 0x6f, 0x1b, 0xdc, 0xcf, 0x6d, 0xb3, 0xbb, 0xf0, 0xe8, 0x05, 0xb8, 0x99, 0xae, 0x2e, + 0x71, 0xcf, 0xef, 0x4d, 0x87, 0xb3, 0xbd, 0xf0, 0xa6, 0xb8, 0xb0, 0x6d, 0x4e, 0x3a, 0x0c, 0xf9, + 0x30, 0xcc, 0xa8, 0x5c, 0x0b, 0x56, 0x2b, 0xc6, 0x2b, 0xbc, 0xa3, 0x8b, 0x5d, 0x0f, 0xa1, 0x10, + 0x9c, 0x22, 0x49, 0x69, 0x21, 0x71, 0xdf, 0xb7, 0x6e, 0x2b, 0x79, 0xa2, 0xb3, 0xc4, 0x50, 0xe8, + 0x15, 0xf4, 0xa5, 0x4a, 0x14, 0xc5, 0x8e, 0x6f, 0x4d, 0x47, 0xb3, 0x67, 0xdb, 0xb8, 0x99, 0xa7, + 0xfb, 0x2e, 0x1b, 0x96, 0xb4, 0xbf, 0x20, 0x0f, 0x7a, 0x5c, 0xe4, 0xd8, 0xd5, 0x2a, 0x1a, 0x33, + 0x78, 0x0b, 0xbb, 0xd7, 0x41, 0x04, 0xe0, 0xcc, 0x8f, 0x56, 0xc7, 0x67, 0xb1, 0x77, 0x0f, 0xed, + 0xc2, 0x60, 0x4e, 0x8e, 0xde, 0x1f, 0x9f, 0xc5, 0x0b, 0xcf, 0x42, 0x63, 0xf0, 0x96, 0x5f, 0x96, + 0xab, 0xf8, 0xe3, 0xf9, 0xbb, 0xf8, 0x53, 0x4c, 0xe6, 0xab, 0x78, 0xe1, 0xd9, 0xc1, 0x29, 0x0c, + 0xcc, 0xff, 0x12, 0x1d, 0xc0, 0xc0, 0x6c, 0x4e, 0x62, 0x4b, 0x3f, 0xcf, 0xe4, 0x1f, 0xe2, 0xc8, + 0x15, 0x88, 0xc6, 0xd0, 0x57, 0xfc, 0x07, 0xad, 0xcc, 0x3b, 0xb7, 0x4e, 0xf0, 0xcb, 0x02, 0x64, + 0xd8, 0x13, 0x26, 0x15, 0xa1, 0x3f, 0x2f, 0xa9, 0x54, 0x0d, 0x5c, 0xb0, 0x92, 0x29, 0xbd, 0xa6, + 0x07, 0xa4, 0x75, 0x6e, 0x2f, 0x81, 0x30, 0xb8, 0x17, 0xac, 0x50, 0x54, 0x34, 0xbb, 0x6a, 0xe2, + 0x9d, 0x8b, 0xf6, 0xc1, 0x95, 0x5c, 0xa8, 0xf3, 0x74, 0xa3, 0xf7, 0x31, 0x9c, 0x8d, 0xb7, 0x65, + 0x2e, 0xb9, 0x50, 0xc4, 0x69, 0xa0, 0xc3, 0x4d, 0xf0, 0x01, 0xf6, 0x3a, 0xd9, 0x34, 0x67, 0x52, + 0x51, 0xd1, 0xc9, 0x79, 0x09, 0xae, 0x99, 0x43, 0x0b, 0xfa, 0xcf, 0xbc, 0x1d, 0x17, 0x3c, 0x82, + 0xc9, 0x5f, 0xc5, 0x64, 0xcd, 0x2b, 0x49, 0x83, 0x09, 0x3c, 0x34, 0xa9, 0xd3, 0x3a, 0x6b, 0x96, + 0x66, 0x12, 0x87, 0x6f, 0xbe, 0xbe, 0xce, 0x99, 0xfa, 0x76, 0x99, 0x86, 0x6b, 0x5e, 0x46, 0xba, + 0x03, 0x17, 0x79, 0x6b, 0x44, 0x57, 0xc7, 0x90, 0xd3, 0x2a, 0xaa, 0xd3, 0xfd, 0x9c, 0x47, 0x37, + 0xef, 0x23, 0x75, 0xf4, 0x65, 0x1c, 0xfc, 0x09, 0x00, 0x00, 0xff, 0xff, 0xb2, 0x1f, 0xe5, 0x14, + 0x66, 0x03, 0x00, 0x00, } diff --git a/flyteidl/gen/pb-go/flyteidl/admin/project_attributes.pb.go b/flyteidl/gen/pb-go/flyteidl/admin/project_attributes.pb.go index 349d2cfd85..befb738eb7 100644 --- a/flyteidl/gen/pb-go/flyteidl/admin/project_attributes.pb.go +++ b/flyteidl/gen/pb-go/flyteidl/admin/project_attributes.pb.go @@ -24,11 +24,13 @@ const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package // For more info on matchable attributes, see :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` type ProjectAttributes struct { // Unique project id for which this set of attributes will be applied. - Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` - MatchingAttributes *MatchingAttributes `protobuf:"bytes,2,opt,name=matching_attributes,json=matchingAttributes,proto3" json:"matching_attributes,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` + MatchingAttributes *MatchingAttributes `protobuf:"bytes,2,opt,name=matching_attributes,json=matchingAttributes,proto3" json:"matching_attributes,omitempty"` + // Optional, org key applied to the project. + Org string `protobuf:"bytes,3,opt,name=org,proto3" json:"org,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *ProjectAttributes) Reset() { *m = ProjectAttributes{} } @@ -70,6 +72,13 @@ func (m *ProjectAttributes) GetMatchingAttributes() *MatchingAttributes { return nil } +func (m *ProjectAttributes) GetOrg() string { + if m != nil { + return m.Org + } + return "" +} + // Sets custom attributes for a project // For more info on matchable attributes, see :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` type ProjectAttributesUpdateRequest struct { @@ -152,10 +161,12 @@ type ProjectAttributesGetRequest struct { Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` // Which type of matchable attributes to return. // +required - ResourceType MatchableResource `protobuf:"varint,2,opt,name=resource_type,json=resourceType,proto3,enum=flyteidl.admin.MatchableResource" json:"resource_type,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + ResourceType MatchableResource `protobuf:"varint,2,opt,name=resource_type,json=resourceType,proto3,enum=flyteidl.admin.MatchableResource" json:"resource_type,omitempty"` + // Optional, org key applied to the project. + Org string `protobuf:"bytes,3,opt,name=org,proto3" json:"org,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *ProjectAttributesGetRequest) Reset() { *m = ProjectAttributesGetRequest{} } @@ -197,6 +208,13 @@ func (m *ProjectAttributesGetRequest) GetResourceType() MatchableResource { return MatchableResource_TASK_RESOURCE } +func (m *ProjectAttributesGetRequest) GetOrg() string { + if m != nil { + return m.Org + } + return "" +} + // Response to get an individual project level attribute override. // For more info on matchable attributes, see :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` type ProjectAttributesGetResponse struct { @@ -246,10 +264,12 @@ type ProjectAttributesDeleteRequest struct { Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` // Which type of matchable attributes to delete. // +required - ResourceType MatchableResource `protobuf:"varint,2,opt,name=resource_type,json=resourceType,proto3,enum=flyteidl.admin.MatchableResource" json:"resource_type,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + ResourceType MatchableResource `protobuf:"varint,2,opt,name=resource_type,json=resourceType,proto3,enum=flyteidl.admin.MatchableResource" json:"resource_type,omitempty"` + // Optional, org key applied to the project. + Org string `protobuf:"bytes,3,opt,name=org,proto3" json:"org,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *ProjectAttributesDeleteRequest) Reset() { *m = ProjectAttributesDeleteRequest{} } @@ -291,6 +311,13 @@ func (m *ProjectAttributesDeleteRequest) GetResourceType() MatchableResource { return MatchableResource_TASK_RESOURCE } +func (m *ProjectAttributesDeleteRequest) GetOrg() string { + if m != nil { + return m.Org + } + return "" +} + // Purposefully empty, may be populated in the future. type ProjectAttributesDeleteResponse struct { XXX_NoUnkeyedLiteral struct{} `json:"-"` @@ -338,25 +365,26 @@ func init() { } var fileDescriptor_cb8dc9faa9640256 = []byte{ - // 317 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x92, 0x31, 0x4f, 0xc3, 0x30, - 0x10, 0x85, 0x65, 0x06, 0x10, 0x06, 0x2a, 0x11, 0x96, 0x0a, 0x10, 0xb4, 0x5e, 0xe8, 0x42, 0x2c, - 0xc1, 0x88, 0x18, 0x8a, 0x10, 0x4c, 0x95, 0x90, 0x81, 0x85, 0xa5, 0x72, 0xd2, 0x23, 0x0d, 0x4a, - 0x62, 0xe3, 0x5c, 0x86, 0x4c, 0x48, 0xfd, 0xe5, 0x48, 0x4e, 0xdc, 0xa6, 0x4d, 0xba, 0xc1, 0x96, - 0x58, 0xef, 0xde, 0xfb, 0xfc, 0x7c, 0xf4, 0xea, 0x33, 0x29, 0x11, 0xe2, 0x59, 0xc2, 0xe5, 0x2c, - 0x8d, 0x33, 0xae, 0x8d, 0xfa, 0x82, 0x10, 0xa7, 0x12, 0xd1, 0xc4, 0x41, 0x81, 0x90, 0xfb, 0xda, - 0x28, 0x54, 0x5e, 0xcf, 0x09, 0x7d, 0x2b, 0x3c, 0xdd, 0x1c, 0x4c, 0x25, 0x86, 0x73, 0x19, 0x24, - 0x30, 0x35, 0x90, 0xab, 0xc2, 0x84, 0x50, 0x0d, 0xb2, 0x05, 0xa1, 0xc7, 0x2f, 0x95, 0xeb, 0x78, - 0x69, 0xea, 0xf5, 0xe9, 0x5e, 0x1d, 0xd5, 0x27, 0x03, 0x32, 0xda, 0x17, 0xee, 0xd7, 0x7b, 0xa5, - 0x27, 0xd6, 0x2b, 0xce, 0xa2, 0x06, 0x45, 0x7f, 0x67, 0x40, 0x46, 0x07, 0x37, 0xcc, 0x5f, 0xc7, - 0xf0, 0x27, 0xb5, 0x74, 0x65, 0x2d, 0xbc, 0xb4, 0x75, 0xc6, 0x42, 0x7a, 0xd1, 0x62, 0x78, 0xd7, - 0x33, 0x89, 0x20, 0xe0, 0xbb, 0x80, 0x1c, 0xbd, 0x31, 0xa5, 0x8d, 0x34, 0x62, 0xd3, 0x86, 0x9b, - 0x69, 0x2d, 0x0f, 0xd1, 0x18, 0x62, 0x43, 0x7a, 0xb9, 0x35, 0x24, 0xd7, 0x2a, 0xcb, 0x81, 0xfd, - 0xd0, 0xb3, 0x96, 0xe4, 0x19, 0xd0, 0x41, 0x6c, 0x6f, 0xe5, 0x89, 0x1e, 0xb9, 0x5e, 0xa7, 0x58, - 0x6a, 0xb0, 0x7d, 0xf4, 0xda, 0x84, 0x13, 0xf7, 0x0c, 0xa2, 0x56, 0x8b, 0x43, 0x37, 0xf7, 0x56, - 0x6a, 0x60, 0x92, 0x9e, 0x77, 0x03, 0x54, 0x80, 0x7f, 0x51, 0xc3, 0x82, 0x74, 0x94, 0xfd, 0x08, - 0x09, 0xac, 0xca, 0xfe, 0xff, 0x7b, 0x76, 0xbd, 0x85, 0x63, 0xa8, 0xae, 0xfa, 0x70, 0xff, 0x71, - 0x17, 0xc5, 0x38, 0x2f, 0x02, 0x3f, 0x54, 0x29, 0xb7, 0xfe, 0xca, 0x44, 0xd5, 0x07, 0x5f, 0x6e, - 0x77, 0x04, 0x19, 0xd7, 0xc1, 0x75, 0xa4, 0xf8, 0xfa, 0xc2, 0x07, 0xbb, 0x76, 0xbd, 0x6f, 0x7f, - 0x03, 0x00, 0x00, 0xff, 0xff, 0xda, 0x8d, 0xf5, 0x81, 0x42, 0x03, 0x00, 0x00, + // 332 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x93, 0x4f, 0x4b, 0xc3, 0x40, + 0x10, 0xc5, 0x59, 0x0b, 0x8a, 0xa3, 0x16, 0x8d, 0x97, 0xa0, 0xa2, 0x6d, 0x2e, 0xf6, 0x62, 0x02, + 0x7a, 0x14, 0x0f, 0x15, 0xd1, 0x53, 0x41, 0xa2, 0x5e, 0xbc, 0x94, 0x4d, 0x3a, 0x6e, 0x23, 0x49, + 0x76, 0xdd, 0x4c, 0x0e, 0xfd, 0x18, 0x42, 0x3f, 0xb0, 0xb8, 0xe9, 0xf6, 0x5f, 0xd2, 0x9b, 0xe0, + 0x6d, 0x13, 0xde, 0xbc, 0xf7, 0xdb, 0xb7, 0x0c, 0x5c, 0x7e, 0xa4, 0x13, 0xc2, 0x64, 0x94, 0x06, + 0x7c, 0x94, 0x25, 0x79, 0xa0, 0xb4, 0xfc, 0xc4, 0x98, 0x86, 0x9c, 0x48, 0x27, 0x51, 0x49, 0x58, + 0xf8, 0x4a, 0x4b, 0x92, 0x4e, 0xdb, 0x0a, 0x7d, 0x23, 0x3c, 0x59, 0x1f, 0xcc, 0x38, 0xc5, 0x63, + 0x1e, 0xa5, 0x38, 0xd4, 0x58, 0xc8, 0x52, 0xc7, 0x58, 0x0d, 0x7a, 0x53, 0x06, 0x47, 0xcf, 0x95, + 0x6b, 0x7f, 0x6e, 0xea, 0xb8, 0xb0, 0x33, 0x8b, 0x72, 0x59, 0x87, 0xf5, 0x76, 0x43, 0xfb, 0xe9, + 0xbc, 0xc0, 0xb1, 0xf1, 0x4a, 0x72, 0xb1, 0x44, 0xe1, 0x6e, 0x75, 0x58, 0x6f, 0xef, 0xda, 0xf3, + 0x57, 0x31, 0xfc, 0xc1, 0x4c, 0xba, 0xb0, 0x0e, 0x9d, 0xac, 0xf6, 0xcf, 0x39, 0x84, 0x96, 0xd4, + 0xc2, 0x6d, 0x99, 0xa8, 0xdf, 0xa3, 0x17, 0xc3, 0x79, 0x8d, 0xea, 0x4d, 0x8d, 0x38, 0x61, 0x88, + 0x5f, 0x25, 0x16, 0xe4, 0xf4, 0x01, 0x96, 0xf2, 0x99, 0xc9, 0xef, 0xae, 0xe7, 0xd7, 0x3c, 0xc2, + 0xa5, 0x21, 0xaf, 0x0b, 0x17, 0x1b, 0x43, 0x0a, 0x25, 0xf3, 0x02, 0xbd, 0x6f, 0x06, 0xa7, 0x35, + 0xcd, 0x13, 0x92, 0xa5, 0xd8, 0x5c, 0xd4, 0x23, 0x1c, 0xd8, 0xaa, 0x87, 0x34, 0x51, 0x68, 0x2a, + 0x6a, 0xd7, 0x11, 0x07, 0xf6, 0x65, 0xc2, 0x99, 0x3a, 0xdc, 0xb7, 0x73, 0xaf, 0x13, 0x85, 0x0d, + 0xdd, 0x70, 0x38, 0x6b, 0x46, 0xaa, 0x98, 0xff, 0xa2, 0x99, 0x29, 0x6b, 0xe8, 0xff, 0x01, 0x53, + 0x5c, 0xf4, 0xff, 0x1f, 0x37, 0x6f, 0x7a, 0x30, 0x4b, 0x55, 0x5d, 0xfe, 0xfe, 0xee, 0xfd, 0x56, + 0x24, 0x34, 0x2e, 0x23, 0x3f, 0x96, 0x59, 0x60, 0x12, 0xa5, 0x16, 0xd5, 0x21, 0x98, 0x2f, 0x85, + 0xc0, 0x3c, 0x50, 0xd1, 0x95, 0x90, 0xc1, 0xea, 0x9e, 0x44, 0xdb, 0x66, 0x2b, 0x6e, 0x7e, 0x02, + 0x00, 0x00, 0xff, 0xff, 0x54, 0xae, 0x47, 0x2e, 0x79, 0x03, 0x00, 0x00, } diff --git a/flyteidl/gen/pb-go/flyteidl/admin/project_domain_attributes.pb.go b/flyteidl/gen/pb-go/flyteidl/admin/project_domain_attributes.pb.go index 4708ef1e5e..610eb7d08f 100644 --- a/flyteidl/gen/pb-go/flyteidl/admin/project_domain_attributes.pb.go +++ b/flyteidl/gen/pb-go/flyteidl/admin/project_domain_attributes.pb.go @@ -26,11 +26,13 @@ type ProjectDomainAttributes struct { // Unique project id for which this set of attributes will be applied. Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` // Unique domain id for which this set of attributes will be applied. - Domain string `protobuf:"bytes,2,opt,name=domain,proto3" json:"domain,omitempty"` - MatchingAttributes *MatchingAttributes `protobuf:"bytes,3,opt,name=matching_attributes,json=matchingAttributes,proto3" json:"matching_attributes,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Domain string `protobuf:"bytes,2,opt,name=domain,proto3" json:"domain,omitempty"` + MatchingAttributes *MatchingAttributes `protobuf:"bytes,3,opt,name=matching_attributes,json=matchingAttributes,proto3" json:"matching_attributes,omitempty"` + // Optional, org key applied to the attributes. + Org string `protobuf:"bytes,4,opt,name=org,proto3" json:"org,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *ProjectDomainAttributes) Reset() { *m = ProjectDomainAttributes{} } @@ -79,6 +81,13 @@ func (m *ProjectDomainAttributes) GetMatchingAttributes() *MatchingAttributes { return nil } +func (m *ProjectDomainAttributes) GetOrg() string { + if m != nil { + return m.Org + } + return "" +} + // Sets custom attributes for a project-domain combination. // For more info on matchable attributes, see :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` type ProjectDomainAttributesUpdateRequest struct { @@ -164,10 +173,12 @@ type ProjectDomainAttributesGetRequest struct { Domain string `protobuf:"bytes,2,opt,name=domain,proto3" json:"domain,omitempty"` // Which type of matchable attributes to return. // +required - ResourceType MatchableResource `protobuf:"varint,3,opt,name=resource_type,json=resourceType,proto3,enum=flyteidl.admin.MatchableResource" json:"resource_type,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + ResourceType MatchableResource `protobuf:"varint,3,opt,name=resource_type,json=resourceType,proto3,enum=flyteidl.admin.MatchableResource" json:"resource_type,omitempty"` + // Optional, org key applied to the attributes. + Org string `protobuf:"bytes,4,opt,name=org,proto3" json:"org,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *ProjectDomainAttributesGetRequest) Reset() { *m = ProjectDomainAttributesGetRequest{} } @@ -216,6 +227,13 @@ func (m *ProjectDomainAttributesGetRequest) GetResourceType() MatchableResource return MatchableResource_TASK_RESOURCE } +func (m *ProjectDomainAttributesGetRequest) GetOrg() string { + if m != nil { + return m.Org + } + return "" +} + // Response to get an individual project domain attribute override. // For more info on matchable attributes, see :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` type ProjectDomainAttributesGetResponse struct { @@ -268,10 +286,12 @@ type ProjectDomainAttributesDeleteRequest struct { Domain string `protobuf:"bytes,2,opt,name=domain,proto3" json:"domain,omitempty"` // Which type of matchable attributes to delete. // +required - ResourceType MatchableResource `protobuf:"varint,3,opt,name=resource_type,json=resourceType,proto3,enum=flyteidl.admin.MatchableResource" json:"resource_type,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + ResourceType MatchableResource `protobuf:"varint,3,opt,name=resource_type,json=resourceType,proto3,enum=flyteidl.admin.MatchableResource" json:"resource_type,omitempty"` + // Optional, org key applied to the attributes. + Org string `protobuf:"bytes,4,opt,name=org,proto3" json:"org,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *ProjectDomainAttributesDeleteRequest) Reset() { *m = ProjectDomainAttributesDeleteRequest{} } @@ -320,6 +340,13 @@ func (m *ProjectDomainAttributesDeleteRequest) GetResourceType() MatchableResour return MatchableResource_TASK_RESOURCE } +func (m *ProjectDomainAttributesDeleteRequest) GetOrg() string { + if m != nil { + return m.Org + } + return "" +} + // Purposefully empty, may be populated in the future. type ProjectDomainAttributesDeleteResponse struct { XXX_NoUnkeyedLiteral struct{} `json:"-"` @@ -367,27 +394,28 @@ func init() { } var fileDescriptor_e8ab0b551a649f05 = []byte{ - // 342 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x53, 0x4f, 0x4b, 0xfb, 0x40, - 0x10, 0x65, 0x7f, 0x3f, 0xa8, 0x38, 0x6a, 0x0f, 0x11, 0x34, 0x78, 0x6a, 0x17, 0xa5, 0xbd, 0x98, - 0x40, 0x3d, 0x8a, 0x07, 0xa5, 0xd8, 0x93, 0x20, 0x51, 0x2f, 0x5e, 0x42, 0xfe, 0x8c, 0x69, 0x24, - 0xc9, 0xae, 0xc9, 0xe4, 0xd0, 0x0f, 0x23, 0xf4, 0xa3, 0x8a, 0xbb, 0xd9, 0xfe, 0xd3, 0x28, 0x82, - 0xe0, 0x2d, 0x93, 0xbc, 0x79, 0xef, 0xe5, 0x3d, 0x06, 0x9c, 0xa7, 0x6c, 0x46, 0x98, 0xc6, 0x99, - 0x1b, 0xc4, 0x79, 0x5a, 0xb8, 0xb2, 0x14, 0xcf, 0x18, 0x91, 0x1f, 0x8b, 0x3c, 0x48, 0x0b, 0x3f, - 0x20, 0x2a, 0xd3, 0xb0, 0x26, 0xac, 0x1c, 0x59, 0x0a, 0x12, 0x56, 0xd7, 0xe0, 0x1d, 0x85, 0x3f, - 0x1a, 0x6c, 0xec, 0xe7, 0x01, 0x45, 0xd3, 0x20, 0xcc, 0xd0, 0x2f, 0xb1, 0x12, 0x75, 0x19, 0xa1, - 0x5e, 0xe4, 0x73, 0x06, 0x87, 0xb7, 0x9a, 0x7c, 0xac, 0xb8, 0x2f, 0x17, 0xd4, 0x96, 0x0d, 0x5b, - 0x8d, 0xae, 0xcd, 0x7a, 0x6c, 0xb8, 0xed, 0x99, 0xd1, 0x3a, 0x80, 0x8e, 0x76, 0x62, 0xff, 0x53, - 0x1f, 0x9a, 0xc9, 0xba, 0x83, 0x7d, 0xa5, 0x94, 0x16, 0xc9, 0x8a, 0x47, 0xfb, 0x7f, 0x8f, 0x0d, - 0x77, 0x46, 0xdc, 0x59, 0x37, 0xe9, 0xdc, 0x34, 0xd0, 0xa5, 0xa4, 0x67, 0xe5, 0x1f, 0xde, 0x71, - 0x01, 0xc7, 0x2d, 0x0e, 0x1f, 0x64, 0x1c, 0x10, 0x7a, 0xf8, 0x52, 0x63, 0x45, 0xd6, 0x04, 0x60, - 0x45, 0x93, 0x29, 0xcd, 0xc1, 0xa6, 0x66, 0x0b, 0x93, 0xb7, 0xb2, 0xca, 0x07, 0x70, 0xf2, 0x8d, - 0x60, 0x25, 0x45, 0x51, 0x21, 0x7f, 0x65, 0xd0, 0x6f, 0x41, 0x4e, 0x90, 0x8c, 0xaf, 0x9f, 0xc7, - 0x78, 0x0d, 0x7b, 0xa6, 0x26, 0x9f, 0x66, 0x12, 0x55, 0x80, 0xdd, 0x51, 0xff, 0xd3, 0x00, 0xdf, - 0x5b, 0xf5, 0x1a, 0xb4, 0xb7, 0x6b, 0xf6, 0xee, 0x67, 0x12, 0x79, 0x0e, 0xfc, 0x2b, 0x7b, 0xfa, - 0x2f, 0x7e, 0x2f, 0xb7, 0x39, 0x6b, 0x6d, 0x6a, 0x8c, 0x19, 0x2e, 0x9b, 0xfa, 0xbb, 0x44, 0xda, - 0xab, 0x35, 0x0e, 0x75, 0x28, 0x57, 0x17, 0x8f, 0xe7, 0x49, 0x4a, 0xd3, 0x3a, 0x74, 0x22, 0x91, - 0xbb, 0x4a, 0x45, 0x94, 0x89, 0x7e, 0x70, 0x17, 0xc7, 0x95, 0x60, 0xe1, 0xca, 0xf0, 0x34, 0x11, - 0xee, 0xfa, 0xbd, 0x85, 0x1d, 0x75, 0x5d, 0x67, 0x6f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xd5, 0x3f, - 0x53, 0x68, 0xc8, 0x03, 0x00, 0x00, + // 355 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x93, 0x4f, 0x4b, 0xc3, 0x40, + 0x10, 0xc5, 0x59, 0x2b, 0x15, 0x47, 0x2d, 0xb2, 0x82, 0x06, 0x4f, 0x6d, 0x50, 0xda, 0x8b, 0x09, + 0xd4, 0xa3, 0x78, 0x50, 0x8a, 0x3d, 0x09, 0x12, 0xf5, 0xe2, 0x25, 0xe4, 0xcf, 0x98, 0x46, 0x92, + 0xec, 0xba, 0xd9, 0x1c, 0xfa, 0xa9, 0x84, 0x7e, 0x42, 0xe9, 0x26, 0xdb, 0xa6, 0xb5, 0x51, 0x04, + 0x0f, 0xde, 0x76, 0x93, 0x99, 0x79, 0xbf, 0x7d, 0x8f, 0x01, 0xeb, 0x35, 0x99, 0x4a, 0x8c, 0xc3, + 0xc4, 0xf6, 0xc2, 0x34, 0xce, 0x6c, 0x2e, 0xd8, 0x1b, 0x06, 0xd2, 0x0d, 0x59, 0xea, 0xc5, 0x99, + 0xeb, 0x49, 0x29, 0x62, 0xbf, 0x90, 0x98, 0x5b, 0x5c, 0x30, 0xc9, 0x68, 0x47, 0xd7, 0x5b, 0xaa, + 0xfe, 0xb4, 0xbf, 0xd6, 0x9f, 0x7a, 0x32, 0x98, 0x78, 0x7e, 0x82, 0xae, 0xc0, 0x9c, 0x15, 0x22, + 0xc0, 0xb2, 0xd1, 0x9c, 0x11, 0x38, 0x79, 0x28, 0x87, 0x8f, 0xd4, 0xec, 0x9b, 0xc5, 0x68, 0x6a, + 0xc0, 0x4e, 0xa5, 0x6b, 0x90, 0x2e, 0x19, 0xec, 0x3a, 0xfa, 0x4a, 0x8f, 0xa1, 0x5d, 0x92, 0x18, + 0x5b, 0xea, 0x47, 0x75, 0xa3, 0x8f, 0x70, 0xa4, 0x94, 0xe2, 0x2c, 0xaa, 0x31, 0x1a, 0xad, 0x2e, + 0x19, 0xec, 0x0d, 0x4d, 0x6b, 0x15, 0xd2, 0xba, 0xaf, 0x4a, 0x97, 0x92, 0x0e, 0x4d, 0xbf, 0x7c, + 0xa3, 0x87, 0xd0, 0x62, 0x22, 0x32, 0xb6, 0x95, 0xd2, 0xfc, 0x68, 0x32, 0x38, 0x6b, 0x60, 0x7e, + 0xe6, 0xa1, 0x27, 0xd1, 0xc1, 0xf7, 0x02, 0x73, 0x49, 0xc7, 0x00, 0x35, 0x0a, 0xa2, 0x28, 0xfa, + 0xeb, 0x14, 0x0d, 0x93, 0x9c, 0x5a, 0xab, 0xd9, 0x87, 0xf3, 0x1f, 0x04, 0x73, 0xce, 0xb2, 0x1c, + 0xcd, 0x0f, 0x02, 0xbd, 0x86, 0xca, 0x31, 0x4a, 0xcd, 0xf5, 0x7b, 0x63, 0xef, 0xe0, 0x40, 0x07, + 0xe7, 0xca, 0x29, 0x47, 0x65, 0x69, 0x67, 0xd8, 0xdb, 0x68, 0xe9, 0x3c, 0x67, 0xa7, 0xaa, 0x76, + 0xf6, 0x75, 0xdf, 0xd3, 0x94, 0xe3, 0x06, 0x2f, 0x53, 0x30, 0xbf, 0x03, 0x2e, 0xdf, 0xf5, 0x77, + 0x4e, 0xce, 0x48, 0x63, 0x76, 0x23, 0x4c, 0x70, 0x99, 0xdd, 0x7f, 0xf2, 0xa8, 0x39, 0x7e, 0xcd, + 0x5c, 0xda, 0x74, 0x7b, 0xfd, 0x72, 0x15, 0xc5, 0x72, 0x52, 0xf8, 0x56, 0xc0, 0x52, 0x5b, 0xe9, + 0x32, 0x11, 0x95, 0x07, 0x7b, 0xb1, 0x92, 0x11, 0x66, 0x36, 0xf7, 0x2f, 0x22, 0x66, 0xaf, 0x6e, + 0xa9, 0xdf, 0x56, 0x3b, 0x79, 0xf9, 0x19, 0x00, 0x00, 0xff, 0xff, 0x21, 0xef, 0xc1, 0x38, 0xfe, + 0x03, 0x00, 0x00, } diff --git a/flyteidl/gen/pb-go/flyteidl/admin/workflow_attributes.pb.go b/flyteidl/gen/pb-go/flyteidl/admin/workflow_attributes.pb.go index 5b3d82dce6..7d7b831b1a 100644 --- a/flyteidl/gen/pb-go/flyteidl/admin/workflow_attributes.pb.go +++ b/flyteidl/gen/pb-go/flyteidl/admin/workflow_attributes.pb.go @@ -28,11 +28,13 @@ type WorkflowAttributes struct { // Unique domain id for which this set of attributes will be applied. Domain string `protobuf:"bytes,2,opt,name=domain,proto3" json:"domain,omitempty"` // Workflow name for which this set of attributes will be applied. - Workflow string `protobuf:"bytes,3,opt,name=workflow,proto3" json:"workflow,omitempty"` - MatchingAttributes *MatchingAttributes `protobuf:"bytes,4,opt,name=matching_attributes,json=matchingAttributes,proto3" json:"matching_attributes,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Workflow string `protobuf:"bytes,3,opt,name=workflow,proto3" json:"workflow,omitempty"` + MatchingAttributes *MatchingAttributes `protobuf:"bytes,4,opt,name=matching_attributes,json=matchingAttributes,proto3" json:"matching_attributes,omitempty"` + // Optional, org key applied to the attributes. + Org string `protobuf:"bytes,5,opt,name=org,proto3" json:"org,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *WorkflowAttributes) Reset() { *m = WorkflowAttributes{} } @@ -88,6 +90,13 @@ func (m *WorkflowAttributes) GetMatchingAttributes() *MatchingAttributes { return nil } +func (m *WorkflowAttributes) GetOrg() string { + if m != nil { + return m.Org + } + return "" +} + // Sets custom attributes for a project, domain and workflow combination. // For more info on matchable attributes, see :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` type WorkflowAttributesUpdateRequest struct { @@ -175,10 +184,12 @@ type WorkflowAttributesGetRequest struct { Workflow string `protobuf:"bytes,3,opt,name=workflow,proto3" json:"workflow,omitempty"` // Which type of matchable attributes to return. // +required - ResourceType MatchableResource `protobuf:"varint,4,opt,name=resource_type,json=resourceType,proto3,enum=flyteidl.admin.MatchableResource" json:"resource_type,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + ResourceType MatchableResource `protobuf:"varint,4,opt,name=resource_type,json=resourceType,proto3,enum=flyteidl.admin.MatchableResource" json:"resource_type,omitempty"` + // Optional, org key applied to the attributes. + Org string `protobuf:"bytes,5,opt,name=org,proto3" json:"org,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *WorkflowAttributesGetRequest) Reset() { *m = WorkflowAttributesGetRequest{} } @@ -234,6 +245,13 @@ func (m *WorkflowAttributesGetRequest) GetResourceType() MatchableResource { return MatchableResource_TASK_RESOURCE } +func (m *WorkflowAttributesGetRequest) GetOrg() string { + if m != nil { + return m.Org + } + return "" +} + // Response to get an individual workflow attribute override. type WorkflowAttributesGetResponse struct { Attributes *WorkflowAttributes `protobuf:"bytes,1,opt,name=attributes,proto3" json:"attributes,omitempty"` @@ -288,10 +306,12 @@ type WorkflowAttributesDeleteRequest struct { Workflow string `protobuf:"bytes,3,opt,name=workflow,proto3" json:"workflow,omitempty"` // Which type of matchable attributes to delete. // +required - ResourceType MatchableResource `protobuf:"varint,4,opt,name=resource_type,json=resourceType,proto3,enum=flyteidl.admin.MatchableResource" json:"resource_type,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + ResourceType MatchableResource `protobuf:"varint,4,opt,name=resource_type,json=resourceType,proto3,enum=flyteidl.admin.MatchableResource" json:"resource_type,omitempty"` + // Optional, org key applied to the attributes. + Org string `protobuf:"bytes,5,opt,name=org,proto3" json:"org,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *WorkflowAttributesDeleteRequest) Reset() { *m = WorkflowAttributesDeleteRequest{} } @@ -347,6 +367,13 @@ func (m *WorkflowAttributesDeleteRequest) GetResourceType() MatchableResource { return MatchableResource_TASK_RESOURCE } +func (m *WorkflowAttributesDeleteRequest) GetOrg() string { + if m != nil { + return m.Org + } + return "" +} + // Purposefully empty, may be populated in the future. type WorkflowAttributesDeleteResponse struct { XXX_NoUnkeyedLiteral struct{} `json:"-"` @@ -394,27 +421,28 @@ func init() { } var fileDescriptor_8ba8a51ab86bc38c = []byte{ - // 349 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x93, 0x4f, 0x4b, 0xc3, 0x40, - 0x10, 0xc5, 0x59, 0x95, 0xaa, 0xa3, 0xf6, 0xb0, 0x82, 0x84, 0xa2, 0x58, 0xf7, 0x62, 0x2f, 0x26, - 0x50, 0x8f, 0xe2, 0xc1, 0x22, 0x7a, 0xf2, 0x12, 0x15, 0xc1, 0x4b, 0xc9, 0x9f, 0x69, 0x1a, 0x4d, - 0xb2, 0xeb, 0x66, 0x43, 0xe9, 0xf7, 0x12, 0xfa, 0xf5, 0xc4, 0x4d, 0xb6, 0x7f, 0x4c, 0x7a, 0xeb, - 0xc1, 0x5b, 0xa7, 0xfb, 0x66, 0xe6, 0x97, 0xf7, 0x18, 0xe8, 0x8d, 0x92, 0xa9, 0xc2, 0x38, 0x4c, - 0x1c, 0x2f, 0x4c, 0xe3, 0xcc, 0x99, 0x70, 0xf9, 0x39, 0x4a, 0xf8, 0x64, 0xe8, 0x29, 0x25, 0x63, - 0xbf, 0x50, 0x98, 0xdb, 0x42, 0x72, 0xc5, 0x69, 0xdb, 0x28, 0x6d, 0xad, 0xec, 0x5c, 0xfe, 0xe9, - 0x4c, 0x3d, 0x15, 0x8c, 0x3d, 0x3f, 0xc1, 0xa1, 0xc4, 0x9c, 0x17, 0x32, 0xc0, 0xb2, 0x91, 0xcd, - 0x08, 0xd0, 0xb7, 0x6a, 0xec, 0xdd, 0x7c, 0x2a, 0xb5, 0x60, 0x57, 0x48, 0xfe, 0x81, 0x81, 0xb2, - 0x48, 0x97, 0xf4, 0xf6, 0x5d, 0x53, 0xd2, 0x13, 0x68, 0x85, 0x3c, 0xf5, 0xe2, 0xcc, 0xda, 0xd2, - 0x0f, 0x55, 0x45, 0x3b, 0xb0, 0x67, 0xf0, 0xac, 0x6d, 0xfd, 0x32, 0xaf, 0xe9, 0x33, 0x1c, 0x6b, - 0x80, 0x38, 0x8b, 0x96, 0xd0, 0xad, 0x9d, 0x2e, 0xe9, 0x1d, 0xf4, 0x99, 0xbd, 0xca, 0x6e, 0x3f, - 0x55, 0xd2, 0x05, 0x8e, 0x4b, 0xd3, 0xda, 0x7f, 0x0c, 0xe1, 0xbc, 0x0e, 0xfe, 0x2a, 0x42, 0x4f, - 0xa1, 0x8b, 0x5f, 0x05, 0xe6, 0x8a, 0x0e, 0x00, 0x96, 0xd6, 0x91, 0xe6, 0x75, 0xf5, 0x21, 0xee, - 0x52, 0x17, 0x63, 0xd0, 0x5d, 0xbf, 0x26, 0x17, 0x3c, 0xcb, 0x91, 0x7d, 0x13, 0x38, 0xad, 0x8b, - 0x1e, 0x51, 0x19, 0x90, 0xcd, 0xda, 0xf9, 0x00, 0x47, 0x26, 0xc5, 0xa1, 0x9a, 0x0a, 0xd4, 0x46, - 0xb6, 0xfb, 0x17, 0x8d, 0x46, 0xfe, 0x86, 0xee, 0x56, 0x6a, 0xf7, 0xd0, 0xf4, 0xbd, 0x4c, 0x05, - 0xb2, 0x00, 0xce, 0xd6, 0x50, 0x97, 0xdf, 0xb5, 0x11, 0xff, 0x66, 0xa4, 0x29, 0xa7, 0x7b, 0x4c, - 0x70, 0x91, 0xd3, 0xff, 0xb4, 0xa7, 0x31, 0x79, 0x03, 0x5e, 0x3a, 0x34, 0xb8, 0x7d, 0xbf, 0x89, - 0x62, 0x35, 0x2e, 0x7c, 0x3b, 0xe0, 0xa9, 0xa3, 0x17, 0x70, 0x19, 0x95, 0x3f, 0x9c, 0xf9, 0x0d, - 0x46, 0x98, 0x39, 0xc2, 0xbf, 0x8a, 0xb8, 0xb3, 0x7a, 0x96, 0x7e, 0x4b, 0x1f, 0xe1, 0xf5, 0x4f, - 0x00, 0x00, 0x00, 0xff, 0xff, 0x90, 0x9e, 0xe0, 0xf5, 0xe9, 0x03, 0x00, 0x00, + // 362 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x53, 0x4d, 0x4b, 0xc3, 0x40, + 0x10, 0x65, 0xad, 0x56, 0x1d, 0xb5, 0xc8, 0x0a, 0x12, 0x8a, 0x62, 0xcd, 0xc5, 0x5e, 0x4c, 0xa0, + 0x1e, 0xc5, 0x83, 0x45, 0xf4, 0xe4, 0x25, 0x2a, 0x82, 0x97, 0x92, 0x8f, 0x69, 0x1a, 0x4d, 0xb2, + 0xeb, 0x66, 0x43, 0xe9, 0x1f, 0x14, 0xfa, 0xaf, 0xa4, 0x9b, 0x6c, 0x3f, 0x4c, 0x7a, 0xeb, 0xc5, + 0xdb, 0xce, 0xee, 0x9b, 0x99, 0xf7, 0xde, 0xec, 0x40, 0x77, 0x18, 0x4f, 0x24, 0x46, 0x41, 0x6c, + 0xbb, 0x41, 0x12, 0xa5, 0xf6, 0x98, 0x89, 0xaf, 0x61, 0xcc, 0xc6, 0x03, 0x57, 0x4a, 0x11, 0x79, + 0xb9, 0xc4, 0xcc, 0xe2, 0x82, 0x49, 0x46, 0x5b, 0x1a, 0x69, 0x29, 0x64, 0xfb, 0xea, 0x4f, 0x66, + 0xe2, 0x4a, 0x7f, 0xe4, 0x7a, 0x31, 0x0e, 0x04, 0x66, 0x2c, 0x17, 0x3e, 0x16, 0x89, 0xe6, 0x94, + 0x00, 0x7d, 0x2f, 0xcb, 0xde, 0xcf, 0xab, 0x52, 0x03, 0x76, 0xb9, 0x60, 0x9f, 0xe8, 0x4b, 0x83, + 0x74, 0x48, 0x77, 0xdf, 0xd1, 0x21, 0x3d, 0x85, 0x66, 0xc0, 0x12, 0x37, 0x4a, 0x8d, 0x2d, 0xf5, + 0x50, 0x46, 0xb4, 0x0d, 0x7b, 0x9a, 0x9e, 0xd1, 0x50, 0x2f, 0xf3, 0x98, 0xbe, 0xc0, 0x89, 0x22, + 0x10, 0xa5, 0xe1, 0x12, 0x75, 0x63, 0xbb, 0x43, 0xba, 0x07, 0x3d, 0xd3, 0x5a, 0xe5, 0x6e, 0x3d, + 0x97, 0xd0, 0x05, 0x1d, 0x87, 0x26, 0x95, 0x3b, 0x7a, 0x0c, 0x0d, 0x26, 0x42, 0x63, 0x47, 0xf5, + 0x9a, 0x1d, 0x4d, 0x84, 0x8b, 0xaa, 0x94, 0x37, 0x1e, 0xb8, 0x12, 0x1d, 0xfc, 0xce, 0x31, 0x93, + 0xb4, 0x0f, 0xb0, 0x44, 0x80, 0xd4, 0x13, 0xa8, 0x16, 0x71, 0x96, 0xb2, 0x4c, 0x13, 0x3a, 0xeb, + 0xdb, 0x64, 0x9c, 0xa5, 0x19, 0x9a, 0x3f, 0x04, 0xce, 0xaa, 0xa0, 0x27, 0x94, 0x9a, 0xc8, 0x66, + 0x0d, 0x7e, 0x84, 0x23, 0x3d, 0xd7, 0x81, 0x9c, 0x70, 0x54, 0xd6, 0xb6, 0x7a, 0x97, 0xb5, 0xd6, + 0xce, 0xbe, 0x81, 0x53, 0xa2, 0x9d, 0x43, 0x9d, 0xf7, 0x3a, 0xe1, 0x58, 0xe3, 0xa9, 0x0f, 0xe7, + 0x6b, 0x74, 0x14, 0x4a, 0x37, 0xe2, 0xe8, 0x94, 0xd4, 0x4d, 0xee, 0x01, 0x63, 0x5c, 0x4c, 0xee, + 0xbf, 0x18, 0x56, 0xfb, 0x3b, 0xb4, 0x94, 0xc2, 0xb3, 0xfe, 0xdd, 0xc7, 0x6d, 0x18, 0xc9, 0x51, + 0xee, 0x59, 0x3e, 0x4b, 0x6c, 0xd5, 0x92, 0x89, 0xb0, 0x38, 0xd8, 0xf3, 0xcd, 0x0d, 0x31, 0xb5, + 0xb9, 0x77, 0x1d, 0x32, 0x7b, 0x75, 0x99, 0xbd, 0xa6, 0x5a, 0xdd, 0x9b, 0xdf, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xf4, 0x79, 0x1c, 0x80, 0x1f, 0x04, 0x00, 0x00, } diff --git a/flyteidl/gen/pb-go/flyteidl/artifact/artifacts.swagger.json b/flyteidl/gen/pb-go/flyteidl/artifact/artifacts.swagger.json index 7068db44ec..600dea3a01 100644 --- a/flyteidl/gen/pb-go/flyteidl/artifact/artifacts.swagger.json +++ b/flyteidl/gen/pb-go/flyteidl/artifact/artifacts.swagger.json @@ -109,6 +109,13 @@ "INPUTS", "OUTPUTS" ] + }, + { + "name": "exec_id.org", + "description": "Optional, org key applied to the resource.", + "in": "query", + "required": false, + "type": "string" } ], "tags": [ @@ -986,6 +993,10 @@ "version": { "type": "string", "description": "Specific version of the resource." + }, + "org": { + "type": "string", + "description": "Optional, org key applied to the resource." } }, "description": "Encapsulation of fields that uniquely identifies a Flyte resource." @@ -1581,6 +1592,10 @@ "name": { "type": "string", "description": "User or system provided value for the resource." + }, + "org": { + "type": "string", + "description": "Optional, org key applied to the resource." } }, "title": "Encapsulation of fields that uniquely identifies a Flyte workflow execution" diff --git a/flyteidl/gen/pb-go/flyteidl/core/identifier.pb.go b/flyteidl/gen/pb-go/flyteidl/core/identifier.pb.go index 4ea56b88f2..bb4d3264e4 100644 --- a/flyteidl/gen/pb-go/flyteidl/core/identifier.pb.go +++ b/flyteidl/gen/pb-go/flyteidl/core/identifier.pb.go @@ -70,7 +70,9 @@ type Identifier struct { // User provided value for the resource. Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` // Specific version of the resource. - Version string `protobuf:"bytes,5,opt,name=version,proto3" json:"version,omitempty"` + Version string `protobuf:"bytes,5,opt,name=version,proto3" json:"version,omitempty"` + // Optional, org key applied to the resource. + Org string `protobuf:"bytes,6,opt,name=org,proto3" json:"org,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -136,6 +138,13 @@ func (m *Identifier) GetVersion() string { return "" } +func (m *Identifier) GetOrg() string { + if m != nil { + return m.Org + } + return "" +} + // Encapsulation of fields that uniquely identifies a Flyte workflow execution type WorkflowExecutionIdentifier struct { // Name of the project the resource belongs to. @@ -144,7 +153,9 @@ type WorkflowExecutionIdentifier struct { // A domain can be considered as a subset within a specific project. Domain string `protobuf:"bytes,2,opt,name=domain,proto3" json:"domain,omitempty"` // User or system provided value for the resource. - Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` + Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` + // Optional, org key applied to the resource. + Org string `protobuf:"bytes,5,opt,name=org,proto3" json:"org,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -196,6 +207,13 @@ func (m *WorkflowExecutionIdentifier) GetName() string { return "" } +func (m *WorkflowExecutionIdentifier) GetOrg() string { + if m != nil { + return m.Org + } + return "" +} + // Encapsulation of fields that identify a Flyte node execution entity. type NodeExecutionIdentifier struct { NodeId string `protobuf:"bytes,1,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"` @@ -362,35 +380,36 @@ func init() { func init() { proto.RegisterFile("flyteidl/core/identifier.proto", fileDescriptor_adfa846a86e1fa0c) } var fileDescriptor_adfa846a86e1fa0c = []byte{ - // 467 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x53, 0x41, 0x8f, 0xd2, 0x50, - 0x10, 0xb6, 0x2c, 0x02, 0x3b, 0x05, 0xb7, 0xbe, 0x83, 0xd4, 0x90, 0x98, 0x4d, 0x4d, 0xcc, 0x66, - 0x13, 0xdb, 0x04, 0x6f, 0xc6, 0x83, 0x75, 0x97, 0x8d, 0xcd, 0x22, 0xbb, 0x29, 0x25, 0x24, 0x5e, - 0x48, 0x69, 0x87, 0xfa, 0x04, 0xfa, 0x9a, 0xd7, 0x87, 0xda, 0x8b, 0x89, 0x7f, 0xc8, 0x9f, 0xe1, - 0xef, 0x32, 0xaf, 0x94, 0xdd, 0x42, 0x40, 0x2f, 0x7b, 0xeb, 0xcc, 0xf7, 0xbd, 0xf9, 0xbe, 0x99, - 0xce, 0xc0, 0x8b, 0xd9, 0x22, 0x13, 0x48, 0xc3, 0x85, 0x15, 0x30, 0x8e, 0x16, 0x0d, 0x31, 0x16, - 0x74, 0x46, 0x91, 0x9b, 0x09, 0x67, 0x82, 0x91, 0xd6, 0x06, 0x37, 0x25, 0x6e, 0xfc, 0x56, 0x00, - 0x9c, 0x3b, 0x0e, 0x79, 0x0f, 0x2d, 0x8e, 0x29, 0x5b, 0xf1, 0x00, 0x27, 0x22, 0x4b, 0x50, 0x57, - 0x4e, 0x95, 0xb3, 0x27, 0xdd, 0x8e, 0xb9, 0xf5, 0xca, 0x74, 0x0b, 0x8e, 0x97, 0x25, 0xe8, 0x36, - 0x79, 0x29, 0x22, 0x3a, 0xd4, 0x13, 0xce, 0xbe, 0x62, 0x20, 0xf4, 0xca, 0xa9, 0x72, 0x76, 0xec, - 0x6e, 0x42, 0xf2, 0x0c, 0x6a, 0x21, 0x5b, 0xfa, 0x34, 0xd6, 0x8f, 0x72, 0xa0, 0x88, 0x08, 0x81, - 0x6a, 0xec, 0x2f, 0x51, 0xaf, 0xe6, 0xd9, 0xfc, 0x5b, 0x56, 0xf9, 0x86, 0x3c, 0xa5, 0x2c, 0xd6, - 0x1f, 0xaf, 0xab, 0x14, 0xa1, 0x11, 0x40, 0x67, 0xcc, 0xf8, 0x7c, 0xb6, 0x60, 0xdf, 0x7b, 0x3f, - 0x30, 0x58, 0x09, 0xca, 0xe2, 0x52, 0x03, 0x25, 0x79, 0xe5, 0x90, 0x7c, 0xe5, 0x7f, 0xf2, 0xc6, - 0x2f, 0x05, 0xda, 0x03, 0x16, 0xe2, 0x3e, 0x85, 0x36, 0xd4, 0x63, 0x16, 0xe2, 0x84, 0x86, 0x85, - 0x42, 0x4d, 0x86, 0x4e, 0x48, 0x3e, 0x41, 0x13, 0x37, 0x7c, 0x89, 0x4a, 0x19, 0xb5, 0x7b, 0xbe, - 0x33, 0xba, 0x7f, 0x98, 0x77, 0x55, 0xbc, 0x4f, 0x1a, 0x7f, 0x14, 0x68, 0x7b, 0x7e, 0x3a, 0xdf, - 0xe7, 0xa1, 0x0b, 0x75, 0xe1, 0xa7, 0xf3, 0x8d, 0x07, 0xb5, 0xfb, 0x7c, 0x47, 0xa5, 0x54, 0xb4, - 0x26, 0x99, 0x4e, 0x48, 0x5c, 0x78, 0x9a, 0xfb, 0xde, 0xe3, 0xf1, 0xd5, 0xce, 0xeb, 0x03, 0xad, - 0xbb, 0x27, 0xf1, 0x36, 0x40, 0x5e, 0xca, 0x75, 0x11, 0x3c, 0x9b, 0xf8, 0x42, 0xe0, 0x32, 0x11, - 0xf9, 0x9f, 0x6d, 0xc9, 0x8d, 0x10, 0x3c, 0xb3, 0xd7, 0x39, 0xe3, 0x27, 0x68, 0x43, 0x1a, 0xc5, - 0xfe, 0xa2, 0xd4, 0x40, 0x07, 0x8e, 0xd3, 0x3c, 0x77, 0x3f, 0xc6, 0x46, 0x5a, 0x90, 0x1e, 0x78, - 0x90, 0xe7, 0x23, 0x68, 0x96, 0xf7, 0x95, 0x9c, 0x80, 0x3a, 0x1a, 0x0c, 0x6f, 0x7b, 0x17, 0xce, - 0x95, 0xd3, 0xbb, 0xd4, 0x1e, 0x91, 0x06, 0x54, 0x3d, 0x7b, 0x78, 0xad, 0x29, 0xa4, 0x09, 0x8d, - 0xf1, 0x8d, 0x7b, 0x7d, 0xd5, 0xbf, 0x19, 0x6b, 0x15, 0x49, 0xec, 0xdb, 0xa3, 0xc1, 0xc5, 0xc7, - 0xc9, 0x6d, 0xdf, 0x1e, 0x68, 0x47, 0x44, 0x85, 0xfa, 0xa5, 0xed, 0xd9, 0xc3, 0x9e, 0xa7, 0x55, - 0x3f, 0xbc, 0xfb, 0xfc, 0x36, 0xa2, 0xe2, 0xcb, 0x6a, 0x6a, 0x06, 0x6c, 0x69, 0xe5, 0xde, 0x18, - 0x8f, 0xd6, 0x1f, 0xd6, 0xdd, 0x11, 0x46, 0x18, 0x5b, 0xc9, 0xf4, 0x75, 0xc4, 0xac, 0xad, 0xbb, - 0x9c, 0xd6, 0xf2, 0x6b, 0x7c, 0xf3, 0x37, 0x00, 0x00, 0xff, 0xff, 0x4a, 0x34, 0xd8, 0xe0, 0xaf, - 0x03, 0x00, 0x00, + // 481 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x53, 0xcf, 0x8f, 0xd2, 0x40, + 0x14, 0xb6, 0x0b, 0x5b, 0xd8, 0x57, 0x70, 0xeb, 0x1c, 0xa4, 0x86, 0xc4, 0x6c, 0x30, 0x31, 0x9b, + 0x4d, 0x6c, 0x13, 0xbc, 0x19, 0x0f, 0xd6, 0x5d, 0x36, 0x36, 0x8b, 0xec, 0xa6, 0x94, 0x90, 0x78, + 0x21, 0xa5, 0x7d, 0xd4, 0x11, 0xe8, 0x34, 0xd3, 0x41, 0xed, 0xc5, 0xc4, 0xff, 0xcc, 0x93, 0x7f, + 0x97, 0x99, 0x52, 0x96, 0x42, 0x58, 0xbd, 0x78, 0x7b, 0x3f, 0xbe, 0x79, 0xdf, 0xf7, 0xde, 0xbc, + 0x07, 0xcf, 0x67, 0x8b, 0x4c, 0x20, 0x0d, 0x17, 0x56, 0xc0, 0x38, 0x5a, 0x34, 0xc4, 0x58, 0xd0, + 0x19, 0x45, 0x6e, 0x26, 0x9c, 0x09, 0x46, 0x9a, 0x9b, 0xbc, 0x29, 0xf3, 0x9d, 0x5f, 0x0a, 0x80, + 0x73, 0x8f, 0x21, 0xef, 0xa0, 0xc9, 0x31, 0x65, 0x2b, 0x1e, 0xe0, 0x44, 0x64, 0x09, 0x1a, 0xca, + 0x99, 0x72, 0xfe, 0xb8, 0xdb, 0x36, 0x77, 0x5e, 0x99, 0x6e, 0x81, 0xf1, 0xb2, 0x04, 0xdd, 0x06, + 0x2f, 0x79, 0xc4, 0x80, 0x5a, 0xc2, 0xd9, 0x17, 0x0c, 0x84, 0x71, 0x74, 0xa6, 0x9c, 0x9f, 0xb8, + 0x1b, 0x97, 0x3c, 0x05, 0x35, 0x64, 0x4b, 0x9f, 0xc6, 0x46, 0x25, 0x4f, 0x14, 0x1e, 0x21, 0x50, + 0x8d, 0xfd, 0x25, 0x1a, 0xd5, 0x3c, 0x9a, 0xdb, 0xb2, 0xca, 0x57, 0xe4, 0x29, 0x65, 0xb1, 0x71, + 0xbc, 0xae, 0x52, 0xb8, 0x44, 0x87, 0x0a, 0xe3, 0x91, 0xa1, 0xe6, 0x51, 0x69, 0x76, 0x56, 0xd0, + 0x1e, 0x33, 0x3e, 0x9f, 0x2d, 0xd8, 0xb7, 0xde, 0x77, 0x0c, 0x56, 0x82, 0xb2, 0xb8, 0xd4, 0x52, + 0x49, 0x90, 0xf2, 0x90, 0xa0, 0xa3, 0x7f, 0x0a, 0x2a, 0x68, 0x8f, 0xb7, 0xb4, 0x3f, 0x15, 0x68, + 0x0d, 0x58, 0x88, 0x87, 0x38, 0x5b, 0x50, 0x8b, 0x59, 0x88, 0x13, 0x1a, 0x16, 0x9c, 0xaa, 0x74, + 0x9d, 0x90, 0x7c, 0x84, 0x06, 0x6e, 0xf0, 0x32, 0x2b, 0x89, 0xb5, 0xee, 0xc5, 0xde, 0x78, 0xff, + 0xd2, 0x8e, 0xab, 0xe1, 0x36, 0xd8, 0xf9, 0xad, 0x40, 0xcb, 0xf3, 0xd3, 0xf9, 0x21, 0x0d, 0x5d, + 0xa8, 0x09, 0x3f, 0x9d, 0x6f, 0x34, 0x68, 0xdd, 0x67, 0x7b, 0x2c, 0xa5, 0xa2, 0xaa, 0x44, 0x3a, + 0x21, 0x71, 0xe1, 0x49, 0xae, 0xfb, 0x80, 0xc6, 0x97, 0x7b, 0xaf, 0x1f, 0x68, 0xdd, 0x3d, 0x8d, + 0x77, 0x13, 0xe4, 0x85, 0x5c, 0x29, 0xc1, 0xb3, 0x89, 0x2f, 0x04, 0x2e, 0x13, 0x91, 0xff, 0x7e, + 0x53, 0x6e, 0x8d, 0xe0, 0x99, 0xbd, 0x8e, 0x75, 0x7e, 0x80, 0x3e, 0xa4, 0x51, 0xec, 0x2f, 0x4a, + 0x0d, 0xb4, 0xe1, 0x24, 0xcd, 0x63, 0xdb, 0x31, 0xd6, 0xd3, 0x02, 0xf4, 0x9f, 0x07, 0x79, 0x31, + 0x82, 0x46, 0x79, 0xa7, 0xc9, 0x29, 0x68, 0xa3, 0xc1, 0xf0, 0xae, 0x77, 0xe9, 0x5c, 0x3b, 0xbd, + 0x2b, 0xfd, 0x11, 0xa9, 0x43, 0xd5, 0xb3, 0x87, 0x37, 0xba, 0x42, 0x1a, 0x50, 0x1f, 0xdf, 0xba, + 0x37, 0xd7, 0xfd, 0xdb, 0xb1, 0x7e, 0x24, 0x81, 0x7d, 0x7b, 0x34, 0xb8, 0xfc, 0x30, 0xb9, 0xeb, + 0xdb, 0x03, 0xbd, 0x42, 0x34, 0xa8, 0x5d, 0xd9, 0x9e, 0x3d, 0xec, 0x79, 0x7a, 0xf5, 0xfd, 0xdb, + 0x4f, 0x6f, 0x22, 0x2a, 0x3e, 0xaf, 0xa6, 0x66, 0xc0, 0x96, 0x56, 0xae, 0x8d, 0xf1, 0x68, 0x6d, + 0x58, 0xf7, 0x87, 0x1a, 0x61, 0x6c, 0x25, 0xd3, 0x57, 0x11, 0xb3, 0x76, 0x6e, 0x77, 0xaa, 0xe6, + 0x17, 0xfb, 0xfa, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x03, 0xea, 0x9d, 0xb8, 0xd3, 0x03, 0x00, + 0x00, } diff --git a/flyteidl/gen/pb-go/flyteidl/datacatalog/datacatalog.pb.go b/flyteidl/gen/pb-go/flyteidl/datacatalog/datacatalog.pb.go index 1095091b5c..d1d623e792 100644 --- a/flyteidl/gen/pb-go/flyteidl/datacatalog/datacatalog.pb.go +++ b/flyteidl/gen/pb-go/flyteidl/datacatalog/datacatalog.pb.go @@ -1319,11 +1319,13 @@ func (m *Partition) GetValue() string { // // DatasetID message that is composed of several string fields. type DatasetID struct { - Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Domain string `protobuf:"bytes,3,opt,name=domain,proto3" json:"domain,omitempty"` - Version string `protobuf:"bytes,4,opt,name=version,proto3" json:"version,omitempty"` - UUID string `protobuf:"bytes,5,opt,name=UUID,proto3" json:"UUID,omitempty"` + Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Domain string `protobuf:"bytes,3,opt,name=domain,proto3" json:"domain,omitempty"` + Version string `protobuf:"bytes,4,opt,name=version,proto3" json:"version,omitempty"` + UUID string `protobuf:"bytes,5,opt,name=UUID,proto3" json:"UUID,omitempty"` + // Optional, org key applied to the resource. + Org string `protobuf:"bytes,6,opt,name=org,proto3" json:"org,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1389,6 +1391,13 @@ func (m *DatasetID) GetUUID() string { return "" } +func (m *DatasetID) GetOrg() string { + if m != nil { + return m.Org + } + return "" +} + // // Artifact message. It is composed of several string fields. type Artifact struct { @@ -2039,6 +2048,7 @@ type DatasetPropertyFilter struct { // *DatasetPropertyFilter_Name // *DatasetPropertyFilter_Domain // *DatasetPropertyFilter_Version + // *DatasetPropertyFilter_Org Property isDatasetPropertyFilter_Property `protobuf_oneof:"property"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -2090,6 +2100,10 @@ type DatasetPropertyFilter_Version struct { Version string `protobuf:"bytes,4,opt,name=version,proto3,oneof"` } +type DatasetPropertyFilter_Org struct { + Org string `protobuf:"bytes,5,opt,name=org,proto3,oneof"` +} + func (*DatasetPropertyFilter_Project) isDatasetPropertyFilter_Property() {} func (*DatasetPropertyFilter_Name) isDatasetPropertyFilter_Property() {} @@ -2098,6 +2112,8 @@ func (*DatasetPropertyFilter_Domain) isDatasetPropertyFilter_Property() {} func (*DatasetPropertyFilter_Version) isDatasetPropertyFilter_Property() {} +func (*DatasetPropertyFilter_Org) isDatasetPropertyFilter_Property() {} + func (m *DatasetPropertyFilter) GetProperty() isDatasetPropertyFilter_Property { if m != nil { return m.Property @@ -2133,6 +2149,13 @@ func (m *DatasetPropertyFilter) GetVersion() string { return "" } +func (m *DatasetPropertyFilter) GetOrg() string { + if x, ok := m.GetProperty().(*DatasetPropertyFilter_Org); ok { + return x.Org + } + return "" +} + // XXX_OneofWrappers is for the internal use of the proto package. func (*DatasetPropertyFilter) XXX_OneofWrappers() []interface{} { return []interface{}{ @@ -2140,6 +2163,7 @@ func (*DatasetPropertyFilter) XXX_OneofWrappers() []interface{} { (*DatasetPropertyFilter_Name)(nil), (*DatasetPropertyFilter_Domain)(nil), (*DatasetPropertyFilter_Version)(nil), + (*DatasetPropertyFilter_Org)(nil), } } @@ -2260,112 +2284,113 @@ func init() { } var fileDescriptor_275951237ff4368a = []byte{ - // 1675 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x58, 0x4b, 0x6f, 0xdb, 0xc6, - 0x13, 0x37, 0x25, 0x47, 0x32, 0x47, 0x96, 0x22, 0x6f, 0x6c, 0x47, 0x56, 0x12, 0x5b, 0x61, 0x02, - 0xff, 0x8d, 0xfc, 0x1b, 0x29, 0xb5, 0x93, 0xa0, 0x49, 0x8b, 0xb6, 0xb2, 0xa5, 0xd8, 0xaa, 0xe3, - 0x47, 0xe8, 0x07, 0xd0, 0x07, 0x20, 0xac, 0xcd, 0x35, 0xc3, 0x9a, 0x12, 0x19, 0x72, 0x9d, 0x5a, - 0xa7, 0xa2, 0x97, 0x1e, 0xda, 0xde, 0x0a, 0xf4, 0x0b, 0xf4, 0x83, 0xf4, 0x98, 0x5b, 0xbf, 0x50, - 0x2f, 0xc5, 0x92, 0xbb, 0x14, 0x49, 0x51, 0xb6, 0xe2, 0x43, 0x80, 0x5e, 0x08, 0xee, 0xee, 0xcc, - 0x6f, 0xe7, 0xb1, 0xb3, 0x33, 0xb3, 0xb0, 0x78, 0x62, 0xf6, 0x28, 0x31, 0x34, 0xb3, 0xa6, 0x61, - 0x8a, 0x8f, 0x31, 0xc5, 0xa6, 0xa5, 0x87, 0xff, 0xab, 0xb6, 0x63, 0x51, 0x0b, 0xe5, 0x42, 0x53, - 0xe5, 0xdb, 0x01, 0xd3, 0xb1, 0xe5, 0x90, 0x9a, 0x69, 0x50, 0xe2, 0x60, 0xd3, 0xf5, 0x49, 0xcb, - 0xf3, 0xba, 0x65, 0xe9, 0x26, 0xa9, 0x79, 0xa3, 0xa3, 0xb3, 0x93, 0x9a, 0x76, 0xe6, 0x60, 0x6a, - 0x58, 0x5d, 0xbe, 0xbe, 0x10, 0x5f, 0xa7, 0x46, 0x87, 0xb8, 0x14, 0x77, 0x6c, 0x9f, 0x40, 0x79, - 0x01, 0xd3, 0x6b, 0x0e, 0xc1, 0x94, 0x34, 0x30, 0xc5, 0x2e, 0xa1, 0x2a, 0x79, 0x73, 0x46, 0x5c, - 0x8a, 0xaa, 0x90, 0xd5, 0xfc, 0x99, 0x92, 0x54, 0x91, 0x96, 0x72, 0xcb, 0xd3, 0xd5, 0xb0, 0xa0, - 0x82, 0x5a, 0x10, 0x29, 0x37, 0x61, 0x26, 0x86, 0xe3, 0xda, 0x56, 0xd7, 0x25, 0x4a, 0x13, 0xa6, - 0xd6, 0x09, 0x8d, 0xa1, 0x3f, 0x8a, 0xa3, 0xcf, 0x26, 0xa1, 0xb7, 0x1a, 0x7d, 0xfc, 0x06, 0xa0, - 0x30, 0x8c, 0x0f, 0xfe, 0xde, 0x52, 0xfe, 0x21, 0x79, 0x30, 0x75, 0x87, 0x1a, 0x27, 0xf8, 0xf8, - 0xea, 0xe2, 0xa0, 0xbb, 0x90, 0xc3, 0x1c, 0xa4, 0x6d, 0x68, 0xa5, 0x54, 0x45, 0x5a, 0x92, 0x37, - 0xc6, 0x54, 0x10, 0x93, 0x2d, 0x0d, 0xdd, 0x82, 0x09, 0x8a, 0xf5, 0x76, 0x17, 0x77, 0x48, 0x29, - 0xcd, 0xd7, 0xb3, 0x14, 0xeb, 0xdb, 0xb8, 0x43, 0x56, 0x0b, 0x30, 0xf9, 0xe6, 0x8c, 0x38, 0xbd, - 0xf6, 0x6b, 0xdc, 0xd5, 0x4c, 0xa2, 0x6c, 0xc0, 0x8d, 0x88, 0x5c, 0x5c, 0xbf, 0x8f, 0x61, 0x42, - 0x20, 0x72, 0xc9, 0x66, 0x22, 0x92, 0x05, 0x0c, 0x01, 0x99, 0xf2, 0x95, 0x70, 0x44, 0x5c, 0xc9, - 0x2b, 0x60, 0x95, 0x60, 0x36, 0x8e, 0xc5, 0xbd, 0xba, 0x02, 0xf9, 0xba, 0xa6, 0xed, 0x63, 0x5d, - 0xa0, 0x2b, 0x90, 0xa6, 0x58, 0xe7, 0xc0, 0xc5, 0x08, 0x30, 0xa3, 0x62, 0x8b, 0x4a, 0x11, 0x0a, - 0x82, 0x89, 0xc3, 0xfc, 0x25, 0xc1, 0xf4, 0x4b, 0xc3, 0x0d, 0x14, 0x77, 0xaf, 0xee, 0x91, 0x27, - 0x90, 0x39, 0x31, 0x4c, 0x4a, 0x1c, 0xcf, 0x19, 0xb9, 0xe5, 0x3b, 0x11, 0x86, 0x17, 0xde, 0x52, - 0xf3, 0xdc, 0x76, 0x88, 0xeb, 0x1a, 0x56, 0x57, 0xe5, 0xc4, 0xe8, 0x73, 0x00, 0x1b, 0xeb, 0x46, - 0xd7, 0x0b, 0x1a, 0xcf, 0x4f, 0xb9, 0xe5, 0xf9, 0x08, 0xeb, 0x6e, 0xb0, 0xbc, 0x63, 0xb3, 0xaf, - 0xab, 0x86, 0x38, 0x94, 0x53, 0x98, 0x89, 0x29, 0xc0, 0x5d, 0xb7, 0x02, 0xb2, 0xb0, 0xa3, 0x5b, - 0x92, 0x2a, 0xe9, 0xe1, 0xf6, 0xee, 0xd3, 0xa1, 0x3b, 0x00, 0x5d, 0x72, 0x4e, 0xdb, 0xd4, 0x3a, - 0x25, 0x5d, 0xff, 0x54, 0xa9, 0x32, 0x9b, 0xd9, 0x67, 0x13, 0xca, 0x6f, 0x12, 0xdc, 0x60, 0xbb, - 0x71, 0xf5, 0x03, 0x6b, 0xf5, 0x75, 0x97, 0xae, 0xae, 0x7b, 0xea, 0xbd, 0x75, 0xd7, 0x7d, 0xe7, - 0xf5, 0xa5, 0xe1, 0xaa, 0x3f, 0x82, 0x09, 0xee, 0x15, 0xa1, 0x79, 0x72, 0x58, 0x06, 0x54, 0x97, - 0xe9, 0xfd, 0x8f, 0x04, 0x33, 0x07, 0xb6, 0x96, 0x70, 0xa8, 0x3f, 0x78, 0xe4, 0xa2, 0x87, 0x30, - 0xce, 0xa0, 0x4a, 0xe3, 0x9e, 0x62, 0x73, 0x89, 0x2e, 0x65, 0xdb, 0xaa, 0x1e, 0x19, 0x8b, 0xba, - 0x0e, 0xa1, 0xd8, 0x63, 0xb9, 0x96, 0x10, 0x75, 0x5b, 0x7c, 0x51, 0x0d, 0xc8, 0x06, 0xee, 0x86, - 0x67, 0x30, 0x1b, 0x57, 0x9e, 0x1b, 0x7a, 0x21, 0xaa, 0x8b, 0xe4, 0xd9, 0x2d, 0xa4, 0x89, 0x82, - 0x21, 0xaf, 0x12, 0x97, 0x38, 0x6f, 0x3d, 0x87, 0xb5, 0x1a, 0xe8, 0x09, 0x00, 0x37, 0x84, 0x60, - 0x18, 0x6e, 0x32, 0x99, 0x53, 0xb6, 0x34, 0x34, 0x17, 0xb2, 0x88, 0xef, 0x1d, 0x61, 0x0f, 0xe5, - 0x9d, 0x04, 0x77, 0xd6, 0x09, 0xdd, 0x71, 0x9a, 0xe7, 0x94, 0x74, 0xb5, 0xd0, 0x76, 0xc2, 0x47, - 0x75, 0x28, 0x38, 0xfd, 0xd9, 0xfe, 0xbe, 0xe5, 0xc8, 0xbe, 0x11, 0x39, 0xd5, 0x7c, 0x88, 0xc3, - 0xdf, 0xdf, 0xfa, 0xa1, 0x4b, 0x9c, 0xc0, 0x63, 0x6a, 0xd6, 0x1b, 0xb7, 0x34, 0xb4, 0x01, 0xe8, - 0x35, 0xc1, 0x0e, 0x3d, 0x22, 0x98, 0xb6, 0x8d, 0x2e, 0x65, 0x5c, 0x26, 0x0f, 0xe4, 0xb9, 0xaa, - 0x9f, 0xfe, 0xaa, 0x22, 0xfd, 0x55, 0x1b, 0x3c, 0x3d, 0xaa, 0x53, 0x01, 0x53, 0x8b, 0xf3, 0x28, - 0x7f, 0xa6, 0x20, 0x17, 0x92, 0xe2, 0xbf, 0x22, 0x37, 0x7a, 0x06, 0x40, 0xce, 0x6d, 0xc3, 0x21, - 0x6e, 0x1b, 0xd3, 0xd2, 0x38, 0x97, 0x31, 0x8e, 0xb0, 0x2f, 0x12, 0xbf, 0x2a, 0x73, 0xea, 0x3a, - 0x8d, 0x9c, 0xce, 0xcc, 0x48, 0xa7, 0x53, 0xf9, 0x0e, 0xe6, 0x87, 0xb9, 0x9b, 0x9f, 0xca, 0xe7, - 0x90, 0x0b, 0x59, 0x81, 0x1b, 0xad, 0x34, 0xcc, 0x68, 0x6a, 0x98, 0x58, 0xe9, 0xc1, 0x9c, 0x4a, - 0x4c, 0x82, 0x5d, 0xf2, 0xa1, 0x0f, 0x92, 0x72, 0x1b, 0xca, 0x49, 0x5b, 0xf3, 0x4c, 0xf5, 0x8b, - 0x04, 0x59, 0x1e, 0x1a, 0x68, 0x11, 0x52, 0x97, 0x06, 0x4f, 0xca, 0xd0, 0x22, 0xd6, 0x4d, 0x8d, - 0x64, 0x5d, 0x74, 0x1f, 0xf2, 0x36, 0x8b, 0x5f, 0xb6, 0xf7, 0x26, 0xe9, 0xb9, 0xa5, 0x74, 0x25, - 0xbd, 0x24, 0xab, 0xd1, 0x49, 0x65, 0x05, 0xe4, 0x5d, 0x31, 0x81, 0x8a, 0x90, 0x3e, 0x25, 0x3d, - 0x1e, 0xfc, 0xec, 0x17, 0x4d, 0xc3, 0xb5, 0xb7, 0xd8, 0x3c, 0x13, 0xa1, 0xea, 0x0f, 0x94, 0x1f, - 0x41, 0x0e, 0xc4, 0x43, 0x25, 0xc8, 0xda, 0x8e, 0xf5, 0x3d, 0xe1, 0xb5, 0x80, 0xac, 0x8a, 0x21, - 0x42, 0x30, 0x1e, 0x0a, 0x73, 0xef, 0x1f, 0xcd, 0x42, 0x46, 0xb3, 0x3a, 0xd8, 0xf0, 0x13, 0xa4, - 0xac, 0xf2, 0x11, 0x43, 0x79, 0x4b, 0x1c, 0x96, 0x53, 0xbc, 0x63, 0x27, 0xab, 0x62, 0xc8, 0x50, - 0x0e, 0x0e, 0x5a, 0x0d, 0xef, 0xca, 0x93, 0x55, 0xef, 0x5f, 0x79, 0x97, 0x82, 0x09, 0x71, 0x85, - 0xa1, 0x42, 0x60, 0x43, 0xd9, 0xb3, 0x55, 0xe8, 0x22, 0x4f, 0x8d, 0x76, 0x91, 0x8b, 0x8b, 0x38, - 0xfd, 0xfe, 0x17, 0xf1, 0xf8, 0x68, 0xce, 0x78, 0xca, 0xf2, 0x23, 0x37, 0xb3, 0x5b, 0xba, 0xe6, - 0xed, 0x33, 0x1b, 0xcb, 0x8f, 0x7c, 0x59, 0x0d, 0x51, 0xa2, 0xfb, 0x30, 0x4e, 0xb1, 0xee, 0x96, - 0x32, 0x1e, 0xc7, 0x60, 0x31, 0xe4, 0xad, 0xb2, 0xb0, 0x3d, 0xf6, 0x8a, 0x2b, 0x8d, 0x85, 0x6d, - 0xf6, 0xf2, 0xb0, 0xe5, 0xd4, 0x75, 0xaa, 0xec, 0xc2, 0x64, 0x58, 0xc3, 0xc0, 0x67, 0x52, 0xc8, - 0x67, 0x1f, 0x85, 0x0f, 0x01, 0x93, 0x5b, 0xf4, 0x11, 0x55, 0xd6, 0x47, 0x54, 0x5f, 0xfa, 0x7d, - 0x84, 0x38, 0x1c, 0x26, 0xa4, 0xf7, 0xb1, 0x9e, 0x08, 0xb4, 0x90, 0x90, 0x30, 0x23, 0xe9, 0x32, - 0xe4, 0xba, 0xf4, 0x68, 0xc5, 0xfc, 0x4f, 0x12, 0x4c, 0x08, 0x7b, 0xa3, 0xe7, 0x90, 0x3d, 0x25, - 0xbd, 0x76, 0x07, 0xdb, 0xbc, 0x58, 0xb8, 0x9b, 0xe8, 0x97, 0xea, 0x26, 0xe9, 0x6d, 0x61, 0xbb, - 0xd9, 0xa5, 0x4e, 0x4f, 0xcd, 0x9c, 0x7a, 0x83, 0xf2, 0x33, 0xc8, 0x85, 0xa6, 0x47, 0x0d, 0x85, - 0xe7, 0xa9, 0x4f, 0x24, 0x65, 0x07, 0x8a, 0xf1, 0xc2, 0x08, 0x7d, 0x0a, 0x59, 0xbf, 0x34, 0x72, - 0x13, 0x45, 0xd9, 0x33, 0xba, 0xba, 0x49, 0x76, 0x1d, 0xcb, 0x26, 0x0e, 0xed, 0xf9, 0xdc, 0xaa, - 0xe0, 0x50, 0xfe, 0x4e, 0xc3, 0x74, 0x12, 0x05, 0xfa, 0x02, 0x80, 0x25, 0xcf, 0x48, 0x85, 0x36, - 0x1f, 0x3f, 0x14, 0x51, 0x9e, 0x8d, 0x31, 0x55, 0xa6, 0x58, 0xe7, 0x00, 0xaf, 0xa0, 0x18, 0x9c, - 0xae, 0x76, 0xa4, 0xc8, 0xbd, 0x9f, 0x7c, 0x1a, 0x07, 0xc0, 0xae, 0x07, 0xfc, 0x1c, 0x72, 0x1b, - 0xae, 0x07, 0x4e, 0xe5, 0x88, 0xbe, 0xef, 0xee, 0x25, 0xc6, 0xd1, 0x00, 0x60, 0x41, 0x70, 0x73, - 0xbc, 0x4d, 0x28, 0x88, 0xba, 0x82, 0xc3, 0xf9, 0x31, 0xa6, 0x24, 0x1d, 0x85, 0x01, 0xb4, 0x3c, - 0xe7, 0xe5, 0x60, 0xbb, 0x30, 0xc1, 0x08, 0x30, 0xb5, 0x9c, 0x12, 0x54, 0xa4, 0xa5, 0xc2, 0xf2, - 0xe3, 0x4b, 0xfd, 0x50, 0x5d, 0xb3, 0x3a, 0x36, 0x76, 0x0c, 0x97, 0x95, 0xaa, 0x3e, 0xaf, 0x1a, - 0xa0, 0x28, 0x15, 0x40, 0x83, 0xeb, 0x08, 0x20, 0xd3, 0x7c, 0x75, 0x50, 0x7f, 0xb9, 0x57, 0x1c, - 0x5b, 0x9d, 0x82, 0xeb, 0x36, 0x07, 0xe4, 0x1a, 0x28, 0xeb, 0x30, 0x9b, 0xac, 0x7f, 0xbc, 0x86, - 0x94, 0x06, 0x6b, 0xc8, 0x55, 0x80, 0x09, 0x81, 0xa7, 0x7c, 0x06, 0x53, 0x03, 0x1e, 0x8e, 0x14, - 0x99, 0x52, 0xbc, 0x3d, 0x0c, 0x73, 0x7f, 0x0b, 0x37, 0x87, 0x38, 0x16, 0x3d, 0xf6, 0x43, 0x87, - 0x15, 0x0e, 0x12, 0x2f, 0x1c, 0xc2, 0x76, 0xda, 0x24, 0xbd, 0x43, 0x76, 0xde, 0x77, 0xb1, 0xc1, - 0xac, 0xcc, 0x82, 0xe6, 0x10, 0x9b, 0x11, 0xf0, 0xa7, 0x30, 0x19, 0xa6, 0x1a, 0x39, 0x99, 0xfc, - 0x2a, 0xc1, 0x4c, 0xa2, 0x37, 0x51, 0x39, 0x96, 0x59, 0x98, 0x5a, 0x22, 0xb7, 0x4c, 0x87, 0x73, - 0xcb, 0xc6, 0x18, 0xbf, 0x60, 0x4a, 0xd1, 0xec, 0xc2, 0x24, 0xe5, 0xf9, 0xa5, 0x1c, 0xcb, 0x2f, - 0x0c, 0x8b, 0x4f, 0x44, 0xb4, 0xf8, 0x3d, 0x05, 0x53, 0x03, 0xad, 0x0a, 0x93, 0xdc, 0x34, 0x3a, - 0x86, 0x2f, 0x47, 0x5e, 0xf5, 0x07, 0x6c, 0x36, 0xdc, 0x65, 0xf8, 0x03, 0xf4, 0x25, 0x64, 0x5d, - 0xcb, 0xa1, 0x9b, 0xa4, 0xe7, 0x09, 0x51, 0x58, 0x5e, 0xbc, 0xb8, 0x0f, 0xaa, 0xee, 0xf9, 0xd4, - 0xaa, 0x60, 0x43, 0x2f, 0x40, 0x66, 0xbf, 0x3b, 0x8e, 0xc6, 0x0f, 0x7f, 0x61, 0x79, 0x69, 0x04, - 0x0c, 0x8f, 0x5e, 0xed, 0xb3, 0x2a, 0x0f, 0x40, 0x0e, 0xe6, 0x51, 0x01, 0xa0, 0xd1, 0xdc, 0x5b, - 0x6b, 0x6e, 0x37, 0x5a, 0xdb, 0xeb, 0xc5, 0x31, 0x94, 0x07, 0xb9, 0x1e, 0x0c, 0x25, 0xe5, 0x36, - 0x64, 0xb9, 0x1c, 0x68, 0x0a, 0xf2, 0x6b, 0x6a, 0xb3, 0xbe, 0xdf, 0xda, 0xd9, 0x6e, 0xef, 0xb7, - 0xb6, 0x9a, 0xc5, 0xb1, 0xe5, 0x9f, 0xb3, 0x90, 0x63, 0x3e, 0x5a, 0xf3, 0x05, 0x40, 0x87, 0x90, - 0x8f, 0x3c, 0xd1, 0xa0, 0xe8, 0xed, 0x96, 0xf4, 0x0c, 0x54, 0x56, 0x2e, 0x22, 0xe1, 0xf5, 0xde, - 0x16, 0x40, 0xff, 0x69, 0x06, 0x45, 0x6f, 0xb6, 0x81, 0xa7, 0x9f, 0xf2, 0xc2, 0xd0, 0x75, 0x0e, - 0xf7, 0x35, 0x14, 0xa2, 0x8f, 0x0e, 0x28, 0x49, 0x88, 0x58, 0x23, 0x58, 0xbe, 0x77, 0x21, 0x0d, - 0x87, 0xde, 0x85, 0x5c, 0xe8, 0x95, 0x05, 0x0d, 0x88, 0x12, 0x07, 0xad, 0x0c, 0x27, 0xe0, 0x88, - 0x75, 0xc8, 0xf8, 0x4f, 0x1a, 0x28, 0x5a, 0x84, 0x46, 0x1e, 0x47, 0xca, 0xb7, 0x12, 0xd7, 0x38, - 0xc4, 0x21, 0xe4, 0x23, 0x2f, 0x08, 0x31, 0xb7, 0x24, 0x3d, 0x8f, 0xc4, 0xdc, 0x92, 0xfc, 0x00, - 0xb1, 0x07, 0x93, 0xe1, 0xee, 0x1c, 0x55, 0x06, 0x78, 0x62, 0xcf, 0x08, 0xe5, 0xbb, 0x17, 0x50, - 0xf4, 0x9d, 0x13, 0xed, 0x45, 0x63, 0xce, 0x49, 0xec, 0xd2, 0x63, 0xce, 0x19, 0xd2, 0xcc, 0xbe, - 0x81, 0xd9, 0xe4, 0xc6, 0x02, 0x3d, 0x88, 0xbb, 0x61, 0x78, 0xb3, 0x59, 0xfe, 0xff, 0x48, 0xb4, - 0x7c, 0x4b, 0x02, 0x68, 0xb0, 0xe4, 0x47, 0x8b, 0xb1, 0x76, 0x62, 0x48, 0x3b, 0x52, 0xfe, 0xdf, - 0xa5, 0x74, 0xfe, 0x36, 0xab, 0x6b, 0xdf, 0xd4, 0x75, 0x83, 0xbe, 0x3e, 0x3b, 0xaa, 0x1e, 0x5b, - 0x9d, 0x9a, 0x57, 0x87, 0x59, 0x8e, 0xee, 0xff, 0xd4, 0x82, 0xe7, 0x5d, 0x9d, 0x74, 0x6b, 0xf6, - 0xd1, 0x43, 0xdd, 0xaa, 0x25, 0x3d, 0x13, 0x1f, 0x65, 0xbc, 0x92, 0x70, 0xe5, 0xdf, 0x00, 0x00, - 0x00, 0xff, 0xff, 0x62, 0x68, 0x58, 0x86, 0x45, 0x16, 0x00, 0x00, + // 1694 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x58, 0xcd, 0x6f, 0xdb, 0xc6, + 0x12, 0x37, 0x25, 0x5b, 0x32, 0x47, 0x96, 0x22, 0x6f, 0x6c, 0x47, 0x56, 0x12, 0x5b, 0x61, 0x02, + 0x3f, 0x23, 0xef, 0x45, 0xca, 0xb3, 0x93, 0xe0, 0x25, 0xaf, 0x68, 0x2b, 0x5b, 0x8a, 0xad, 0x3a, + 0xfe, 0x08, 0xfd, 0x01, 0xf4, 0x03, 0x10, 0xd6, 0xe6, 0x9a, 0x61, 0x4d, 0x89, 0x0c, 0xb9, 0x4e, + 0xad, 0x63, 0x2f, 0x3d, 0x14, 0xbd, 0x14, 0x05, 0x7a, 0xed, 0xa1, 0x7f, 0x48, 0x8f, 0xb9, 0xf5, + 0x1f, 0xea, 0xa5, 0x58, 0x72, 0x97, 0x22, 0x29, 0xca, 0x56, 0x7c, 0x08, 0xd0, 0x0b, 0xc1, 0xdd, + 0x9d, 0xf9, 0xed, 0x7c, 0xec, 0xec, 0xcc, 0x2c, 0x2c, 0x9d, 0x9a, 0x3d, 0x4a, 0x0c, 0xcd, 0xac, + 0x69, 0x98, 0xe2, 0x13, 0x4c, 0xb1, 0x69, 0xe9, 0xe1, 0xff, 0xaa, 0xed, 0x58, 0xd4, 0x42, 0xb9, + 0xd0, 0x54, 0xf9, 0x4e, 0xc0, 0x74, 0x62, 0x39, 0xa4, 0x66, 0x1a, 0x94, 0x38, 0xd8, 0x74, 0x7d, + 0xd2, 0xf2, 0x82, 0x6e, 0x59, 0xba, 0x49, 0x6a, 0xde, 0xe8, 0xf8, 0xfc, 0xb4, 0xa6, 0x9d, 0x3b, + 0x98, 0x1a, 0x56, 0x97, 0xaf, 0x2f, 0xc6, 0xd7, 0xa9, 0xd1, 0x21, 0x2e, 0xc5, 0x1d, 0xdb, 0x27, + 0x50, 0x5e, 0xc2, 0xcc, 0xba, 0x43, 0x30, 0x25, 0x0d, 0x4c, 0xb1, 0x4b, 0xa8, 0x4a, 0xde, 0x9e, + 0x13, 0x97, 0xa2, 0x2a, 0x64, 0x35, 0x7f, 0xa6, 0x24, 0x55, 0xa4, 0xe5, 0xdc, 0xca, 0x4c, 0x35, + 0x2c, 0xa8, 0xa0, 0x16, 0x44, 0xca, 0x2d, 0x98, 0x8d, 0xe1, 0xb8, 0xb6, 0xd5, 0x75, 0x89, 0xd2, + 0x84, 0xe9, 0x0d, 0x42, 0x63, 0xe8, 0x8f, 0xe3, 0xe8, 0x73, 0x49, 0xe8, 0xad, 0x46, 0x1f, 0xbf, + 0x01, 0x28, 0x0c, 0xe3, 0x83, 0x7f, 0xb0, 0x94, 0xbf, 0x4a, 0x1e, 0x4c, 0xdd, 0xa1, 0xc6, 0x29, + 0x3e, 0xb9, 0xbe, 0x38, 0xe8, 0x1e, 0xe4, 0x30, 0x07, 0x69, 0x1b, 0x5a, 0x29, 0x55, 0x91, 0x96, + 0xe5, 0xcd, 0x31, 0x15, 0xc4, 0x64, 0x4b, 0x43, 0xb7, 0x61, 0x92, 0x62, 0xbd, 0xdd, 0xc5, 0x1d, + 0x52, 0x4a, 0xf3, 0xf5, 0x2c, 0xc5, 0xfa, 0x0e, 0xee, 0x90, 0xb5, 0x02, 0x4c, 0xbd, 0x3d, 0x27, + 0x4e, 0xaf, 0xfd, 0x06, 0x77, 0x35, 0x93, 0x28, 0x9b, 0x70, 0x33, 0x22, 0x17, 0xd7, 0xef, 0xbf, + 0x30, 0x29, 0x10, 0xb9, 0x64, 0xb3, 0x11, 0xc9, 0x02, 0x86, 0x80, 0x4c, 0xf9, 0x42, 0x38, 0x22, + 0xae, 0xe4, 0x35, 0xb0, 0x4a, 0x30, 0x17, 0xc7, 0xe2, 0x5e, 0x5d, 0x85, 0x7c, 0x5d, 0xd3, 0x0e, + 0xb0, 0x2e, 0xd0, 0x15, 0x48, 0x53, 0xac, 0x73, 0xe0, 0x62, 0x04, 0x98, 0x51, 0xb1, 0x45, 0xa5, + 0x08, 0x05, 0xc1, 0xc4, 0x61, 0xfe, 0x90, 0x60, 0xe6, 0x95, 0xe1, 0x06, 0x8a, 0xbb, 0xd7, 0xf7, + 0xc8, 0x53, 0xc8, 0x9c, 0x1a, 0x26, 0x25, 0x8e, 0xe7, 0x8c, 0xdc, 0xca, 0xdd, 0x08, 0xc3, 0x4b, + 0x6f, 0xa9, 0x79, 0x61, 0x3b, 0xc4, 0x75, 0x0d, 0xab, 0xab, 0x72, 0x62, 0xf4, 0x29, 0x80, 0x8d, + 0x75, 0xa3, 0xeb, 0x05, 0x8d, 0xe7, 0xa7, 0xdc, 0xca, 0x42, 0x84, 0x75, 0x2f, 0x58, 0xde, 0xb5, + 0xd9, 0xd7, 0x55, 0x43, 0x1c, 0xca, 0x19, 0xcc, 0xc6, 0x14, 0xe0, 0xae, 0x5b, 0x05, 0x59, 0xd8, + 0xd1, 0x2d, 0x49, 0x95, 0xf4, 0x70, 0x7b, 0xf7, 0xe9, 0xd0, 0x5d, 0x80, 0x2e, 0xb9, 0xa0, 0x6d, + 0x6a, 0x9d, 0x91, 0xae, 0x7f, 0xaa, 0x54, 0x99, 0xcd, 0x1c, 0xb0, 0x09, 0xe5, 0x27, 0x09, 0x6e, + 0xb2, 0xdd, 0xb8, 0xfa, 0x81, 0xb5, 0xfa, 0xba, 0x4b, 0xd7, 0xd7, 0x3d, 0xf5, 0xc1, 0xba, 0xeb, + 0xbe, 0xf3, 0xfa, 0xd2, 0x70, 0xd5, 0x1f, 0xc3, 0x24, 0xf7, 0x8a, 0xd0, 0x3c, 0x39, 0x2c, 0x03, + 0xaa, 0xab, 0xf4, 0xfe, 0x4b, 0x82, 0xd9, 0x43, 0x5b, 0x4b, 0x38, 0xd4, 0x1f, 0x3d, 0x72, 0xd1, + 0x23, 0x18, 0x67, 0x50, 0xa5, 0x71, 0x4f, 0xb1, 0xf9, 0x44, 0x97, 0xb2, 0x6d, 0x55, 0x8f, 0x8c, + 0x45, 0x5d, 0x87, 0x50, 0xec, 0xb1, 0x4c, 0x24, 0x44, 0xdd, 0x36, 0x5f, 0x54, 0x03, 0xb2, 0x81, + 0xbb, 0xe1, 0x39, 0xcc, 0xc5, 0x95, 0xe7, 0x86, 0x5e, 0x8c, 0xea, 0x22, 0x79, 0x76, 0x0b, 0x69, + 0xa2, 0x60, 0xc8, 0xab, 0xc4, 0x25, 0xce, 0x3b, 0xcf, 0x61, 0xad, 0x06, 0x7a, 0x0a, 0xc0, 0x0d, + 0x21, 0x18, 0x86, 0x9b, 0x4c, 0xe6, 0x94, 0x2d, 0x0d, 0xcd, 0x87, 0x2c, 0xe2, 0x7b, 0x47, 0xd8, + 0x43, 0x79, 0x2f, 0xc1, 0xdd, 0x0d, 0x42, 0x77, 0x9d, 0xe6, 0x05, 0x25, 0x5d, 0x2d, 0xb4, 0x9d, + 0xf0, 0x51, 0x1d, 0x0a, 0x4e, 0x7f, 0xb6, 0xbf, 0x6f, 0x39, 0xb2, 0x6f, 0x44, 0x4e, 0x35, 0x1f, + 0xe2, 0xf0, 0xf7, 0xb7, 0xbe, 0xeb, 0x12, 0x27, 0xf0, 0x98, 0x9a, 0xf5, 0xc6, 0x2d, 0x0d, 0x6d, + 0x02, 0x7a, 0x43, 0xb0, 0x43, 0x8f, 0x09, 0xa6, 0x6d, 0xa3, 0x4b, 0x19, 0x97, 0xc9, 0x03, 0x79, + 0xbe, 0xea, 0xa7, 0xbf, 0xaa, 0x48, 0x7f, 0xd5, 0x06, 0x4f, 0x8f, 0xea, 0x74, 0xc0, 0xd4, 0xe2, + 0x3c, 0xca, 0xef, 0x29, 0xc8, 0x85, 0xa4, 0xf8, 0xa7, 0xc8, 0x8d, 0x9e, 0x03, 0x90, 0x0b, 0xdb, + 0x70, 0x88, 0xdb, 0xc6, 0xb4, 0x34, 0xce, 0x65, 0x8c, 0x23, 0x1c, 0x88, 0xc4, 0xaf, 0xca, 0x9c, + 0xba, 0x4e, 0x23, 0xa7, 0x33, 0x33, 0xd2, 0xe9, 0x54, 0xbe, 0x81, 0x85, 0x61, 0xee, 0xe6, 0xa7, + 0xf2, 0x05, 0xe4, 0x42, 0x56, 0xe0, 0x46, 0x2b, 0x0d, 0x33, 0x9a, 0x1a, 0x26, 0x56, 0x7a, 0x30, + 0xaf, 0x12, 0x93, 0x60, 0x97, 0x7c, 0xec, 0x83, 0xa4, 0xdc, 0x81, 0x72, 0xd2, 0xd6, 0x3c, 0x53, + 0xfd, 0x28, 0x41, 0x96, 0x87, 0x06, 0x5a, 0x82, 0xd4, 0x95, 0xc1, 0x93, 0x32, 0xb4, 0x88, 0x75, + 0x53, 0x23, 0x59, 0x17, 0x3d, 0x80, 0xbc, 0xcd, 0xe2, 0x97, 0xed, 0xbd, 0x45, 0x7a, 0x6e, 0x29, + 0x5d, 0x49, 0x2f, 0xcb, 0x6a, 0x74, 0x52, 0x59, 0x05, 0x79, 0x4f, 0x4c, 0xa0, 0x22, 0xa4, 0xcf, + 0x48, 0x8f, 0x07, 0x3f, 0xfb, 0x45, 0x33, 0x30, 0xf1, 0x0e, 0x9b, 0xe7, 0x22, 0x54, 0xfd, 0x81, + 0xf2, 0xb3, 0x04, 0x72, 0x20, 0x1f, 0x2a, 0x41, 0xd6, 0x76, 0xac, 0x6f, 0x09, 0x2f, 0x06, 0x64, + 0x55, 0x0c, 0x11, 0x82, 0xf1, 0x50, 0x9c, 0x7b, 0xff, 0x68, 0x0e, 0x32, 0x9a, 0xd5, 0xc1, 0x86, + 0x9f, 0x21, 0x65, 0x95, 0x8f, 0x18, 0xca, 0x3b, 0xe2, 0xb0, 0xa4, 0xe2, 0x9d, 0x3b, 0x59, 0x15, + 0x43, 0x86, 0x72, 0x78, 0xd8, 0x6a, 0x78, 0x77, 0x9e, 0xac, 0x7a, 0xff, 0x4c, 0x52, 0xcb, 0xd1, + 0xbd, 0x83, 0x26, 0xab, 0xec, 0x57, 0x79, 0x9f, 0x82, 0x49, 0x71, 0xab, 0xa1, 0x42, 0x60, 0x56, + 0xd9, 0x33, 0x5f, 0xe8, 0x6e, 0x4f, 0x8d, 0x76, 0xb7, 0x8b, 0xbb, 0x39, 0xfd, 0xe1, 0x77, 0xf3, + 0xf8, 0x68, 0xfe, 0x79, 0xc6, 0x52, 0x26, 0xb7, 0xbc, 0x5b, 0x9a, 0xf0, 0xf6, 0x99, 0x8b, 0xa5, + 0x4c, 0xbe, 0xac, 0x86, 0x28, 0xd1, 0x03, 0x18, 0xa7, 0x58, 0x77, 0x4b, 0x19, 0x8f, 0x63, 0xb0, + 0x3e, 0xf2, 0x56, 0x59, 0x24, 0x9f, 0x78, 0xf5, 0x96, 0xc6, 0x22, 0x39, 0x7b, 0x75, 0x24, 0x73, + 0xea, 0x3a, 0x55, 0xf6, 0x60, 0x2a, 0xac, 0x61, 0xe0, 0x45, 0x29, 0xe4, 0xc5, 0xff, 0x84, 0xcf, + 0x05, 0x93, 0x5b, 0xb4, 0x16, 0x55, 0xd6, 0x5a, 0x54, 0x5f, 0xf9, 0xad, 0x85, 0x38, 0x2f, 0x26, + 0xa4, 0x0f, 0xb0, 0x9e, 0x08, 0xb4, 0x98, 0x90, 0x43, 0x23, 0x19, 0x34, 0xe4, 0xba, 0xf4, 0x68, + 0xf5, 0xfd, 0xf7, 0x12, 0x4c, 0x0a, 0x7b, 0xa3, 0x17, 0x90, 0x3d, 0x23, 0xbd, 0x76, 0x07, 0xdb, + 0xbc, 0x7e, 0xb8, 0x97, 0xe8, 0x97, 0xea, 0x16, 0xe9, 0x6d, 0x63, 0xbb, 0xd9, 0xa5, 0x4e, 0x4f, + 0xcd, 0x9c, 0x79, 0x83, 0xf2, 0x73, 0xc8, 0x85, 0xa6, 0x47, 0x8d, 0x8e, 0x17, 0xa9, 0xff, 0x49, + 0xca, 0x2e, 0x14, 0xe3, 0xb5, 0x12, 0xfa, 0x3f, 0x64, 0xfd, 0x6a, 0xc9, 0x4d, 0x14, 0x65, 0xdf, + 0xe8, 0xea, 0x26, 0xd9, 0x73, 0x2c, 0x9b, 0x38, 0xb4, 0xe7, 0x73, 0xab, 0x82, 0x43, 0xf9, 0x33, + 0x0d, 0x33, 0x49, 0x14, 0xe8, 0x33, 0x00, 0x96, 0x4f, 0x23, 0x45, 0xdb, 0x42, 0xfc, 0x50, 0x44, + 0x79, 0x36, 0xc7, 0x54, 0x99, 0x62, 0x9d, 0x03, 0xbc, 0x86, 0x62, 0x70, 0xba, 0xda, 0x91, 0xba, + 0xf7, 0x41, 0xf2, 0x69, 0x1c, 0x00, 0xbb, 0x11, 0xf0, 0x73, 0xc8, 0x1d, 0xb8, 0x11, 0x38, 0x95, + 0x23, 0xfa, 0xbe, 0xbb, 0x9f, 0x18, 0x47, 0x03, 0x80, 0x05, 0xc1, 0xcd, 0xf1, 0xb6, 0xa0, 0x20, + 0x4a, 0x0d, 0x0e, 0xe7, 0xc7, 0x98, 0x92, 0x74, 0x14, 0x06, 0xd0, 0xf2, 0x9c, 0x97, 0x83, 0xed, + 0xc1, 0x24, 0x23, 0xc0, 0xd4, 0x72, 0x4a, 0x50, 0x91, 0x96, 0x0b, 0x2b, 0x4f, 0xae, 0xf4, 0x43, + 0x75, 0xdd, 0xea, 0xd8, 0xd8, 0x31, 0x5c, 0x56, 0xbd, 0xfa, 0xbc, 0x6a, 0x80, 0xa2, 0x54, 0x00, + 0x0d, 0xae, 0x23, 0x80, 0x4c, 0xf3, 0xf5, 0x61, 0xfd, 0xd5, 0x7e, 0x71, 0x6c, 0x6d, 0x1a, 0x6e, + 0xd8, 0x1c, 0x90, 0x6b, 0xa0, 0x6c, 0xc0, 0x5c, 0xb2, 0xfe, 0xf1, 0xb2, 0x52, 0x1a, 0x2c, 0x2b, + 0xd7, 0x00, 0x26, 0x05, 0x9e, 0xf2, 0x09, 0x4c, 0x0f, 0x78, 0x38, 0x52, 0x77, 0x4a, 0xf1, 0x8e, + 0x31, 0xcc, 0xfd, 0x35, 0xdc, 0x1a, 0xe2, 0x58, 0xf4, 0xc4, 0x0f, 0x1d, 0x56, 0x4b, 0x48, 0xbc, + 0x96, 0x08, 0xdb, 0x69, 0x8b, 0xf4, 0x8e, 0xd8, 0x79, 0xdf, 0xc3, 0x06, 0xb3, 0x32, 0x0b, 0x9a, + 0x23, 0x6c, 0x46, 0xc0, 0x9f, 0xc1, 0x54, 0x98, 0x6a, 0xe4, 0xfc, 0xf2, 0x9b, 0x04, 0xb3, 0x89, + 0xde, 0x44, 0xe5, 0x58, 0xae, 0x61, 0x6a, 0x89, 0x6c, 0x33, 0x13, 0xce, 0x36, 0x9b, 0x63, 0xfc, + 0x82, 0x29, 0x45, 0xf3, 0x0d, 0x93, 0x94, 0x67, 0x9c, 0x72, 0x2c, 0xe3, 0x30, 0xac, 0x7e, 0xce, + 0xf1, 0xf2, 0xcb, 0x04, 0x9f, 0x67, 0x83, 0x88, 0x66, 0xbf, 0xa4, 0x60, 0x7a, 0xa0, 0xa3, 0x61, + 0xda, 0x98, 0x46, 0xc7, 0xf0, 0x65, 0xcb, 0xab, 0xfe, 0x80, 0xcd, 0x86, 0x9b, 0x11, 0x7f, 0x80, + 0x3e, 0x87, 0xac, 0x6b, 0x39, 0x74, 0x8b, 0xf4, 0x3c, 0xc1, 0x0a, 0x2b, 0x4b, 0x97, 0xb7, 0x4b, + 0xd5, 0x7d, 0x9f, 0x5a, 0x15, 0x6c, 0xe8, 0x25, 0xc8, 0xec, 0x77, 0xd7, 0xd1, 0x78, 0x40, 0x14, + 0x56, 0x96, 0x47, 0xc0, 0xf0, 0xe8, 0xd5, 0x3e, 0xab, 0xf2, 0x10, 0xe4, 0x60, 0x1e, 0x15, 0x00, + 0x1a, 0xcd, 0xfd, 0xf5, 0xe6, 0x4e, 0xa3, 0xb5, 0xb3, 0x51, 0x1c, 0x43, 0x79, 0x90, 0xeb, 0xc1, + 0x50, 0x52, 0xee, 0x40, 0x96, 0xcb, 0x81, 0xa6, 0x21, 0xbf, 0xae, 0x36, 0xeb, 0x07, 0xad, 0xdd, + 0x9d, 0xf6, 0x41, 0x6b, 0xbb, 0x59, 0x1c, 0x5b, 0xf9, 0x21, 0x0b, 0x39, 0xe6, 0xb7, 0x75, 0x5f, + 0x00, 0x74, 0x04, 0xf9, 0xc8, 0x4b, 0x0e, 0x8a, 0xde, 0x78, 0x49, 0xaf, 0x45, 0x65, 0xe5, 0x32, + 0x12, 0x5e, 0x16, 0x6e, 0x03, 0xf4, 0x5f, 0x70, 0x50, 0xf4, 0xb6, 0x1b, 0x78, 0x21, 0x2a, 0x2f, + 0x0e, 0x5d, 0xe7, 0x70, 0x5f, 0x42, 0x21, 0xfa, 0x36, 0x81, 0x92, 0x84, 0x88, 0xf5, 0x8b, 0xe5, + 0xfb, 0x97, 0xd2, 0x70, 0xe8, 0x3d, 0xc8, 0x85, 0x1e, 0x63, 0xd0, 0x80, 0x28, 0x71, 0xd0, 0xca, + 0x70, 0x02, 0x8e, 0x58, 0x87, 0x8c, 0xff, 0xf2, 0x81, 0xa2, 0xb5, 0x6a, 0xe4, 0x0d, 0xa5, 0x7c, + 0x3b, 0x71, 0x8d, 0x43, 0x1c, 0x41, 0x3e, 0xf2, 0xd0, 0x10, 0x73, 0x4b, 0xd2, 0x2b, 0x4a, 0xcc, + 0x2d, 0xc9, 0xef, 0x14, 0xfb, 0x30, 0x15, 0x6e, 0xe2, 0x51, 0x65, 0x80, 0x27, 0xf6, 0xda, 0x50, + 0xbe, 0x77, 0x09, 0x45, 0xdf, 0x39, 0xd1, 0x96, 0x35, 0xe6, 0x9c, 0xc4, 0x66, 0x3e, 0xe6, 0x9c, + 0x21, 0x3d, 0xef, 0x5b, 0x98, 0x4b, 0xee, 0x3f, 0xd0, 0xc3, 0xb8, 0x1b, 0x86, 0xf7, 0xa4, 0xe5, + 0x7f, 0x8f, 0x44, 0xcb, 0xb7, 0x24, 0x80, 0x06, 0x3b, 0x03, 0xb4, 0x14, 0xeb, 0x3a, 0x86, 0x74, + 0x2d, 0xe5, 0x7f, 0x5d, 0x49, 0xe7, 0x6f, 0xb3, 0xb6, 0xfe, 0x55, 0x5d, 0x37, 0xe8, 0x9b, 0xf3, + 0xe3, 0xea, 0x89, 0xd5, 0xa9, 0x79, 0xb5, 0x99, 0xe5, 0xe8, 0xfe, 0x4f, 0x2d, 0x78, 0x05, 0xd6, + 0x49, 0xb7, 0x66, 0x1f, 0x3f, 0xd2, 0xad, 0x5a, 0xd2, 0x6b, 0xf2, 0x71, 0xc6, 0x2b, 0x13, 0x57, + 0xff, 0x0e, 0x00, 0x00, 0xff, 0xff, 0xd3, 0xc0, 0xa3, 0x08, 0x6c, 0x16, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/flyteidl/gen/pb-go/flyteidl/service/admin.pb.go b/flyteidl/gen/pb-go/flyteidl/service/admin.pb.go index 60bc47c3ec..6b0eaa86a8 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/admin.pb.go +++ b/flyteidl/gen/pb-go/flyteidl/service/admin.pb.go @@ -29,143 +29,172 @@ const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package func init() { proto.RegisterFile("flyteidl/service/admin.proto", fileDescriptor_5cfa31da1d67295d) } var fileDescriptor_5cfa31da1d67295d = []byte{ - // 2165 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x9a, 0xdf, 0x6f, 0x1d, 0x47, - 0x15, 0xc7, 0x35, 0x36, 0x02, 0x31, 0x4d, 0x62, 0x7b, 0x9a, 0x60, 0x67, 0x63, 0x27, 0xe9, 0xba, - 0x8e, 0x7f, 0xdf, 0x75, 0x93, 0xb4, 0x55, 0x43, 0xd3, 0xd4, 0xad, 0x9d, 0x2b, 0x43, 0x9a, 0x14, - 0x93, 0x82, 0x64, 0x21, 0x5d, 0xad, 0xef, 0x4e, 0x9c, 0x4d, 0xee, 0xbd, 0x7b, 0xbb, 0x3b, 0x76, - 0xb1, 0x2c, 0x8b, 0x1f, 0x42, 0x88, 0x0a, 0x89, 0x07, 0x7e, 0x08, 0x0a, 0x11, 0xa5, 0x50, 0xc4, - 0xcf, 0xf2, 0x02, 0x2a, 0xe2, 0xa5, 0x12, 0x02, 0x24, 0x5e, 0x78, 0x81, 0x77, 0x5e, 0xe8, 0x33, - 0x7f, 0x03, 0xda, 0x33, 0x33, 0x7b, 0x77, 0x76, 0x77, 0x76, 0x67, 0x4d, 0xca, 0x13, 0x6f, 0xf6, - 0x3d, 0xdf, 0x99, 0xf9, 0x9c, 0x33, 0x67, 0xce, 0xcc, 0xee, 0x0e, 0x9e, 0xbc, 0xd3, 0xd9, 0x67, - 0xd4, 0xf7, 0x3a, 0x4e, 0x44, 0xc3, 0x3d, 0xbf, 0x4d, 0x1d, 0xd7, 0xeb, 0xfa, 0xbd, 0x46, 0x3f, - 0x0c, 0x58, 0x40, 0x46, 0xa5, 0xb5, 0x21, 0xac, 0xd6, 0xe4, 0x4e, 0x10, 0xec, 0x74, 0xa8, 0xe3, - 0xf6, 0x7d, 0xc7, 0xed, 0xf5, 0x02, 0xe6, 0x32, 0x3f, 0xe8, 0x45, 0x5c, 0x6f, 0x0d, 0x7a, 0x83, - 0x5e, 0x9c, 0x7e, 0x18, 0xdc, 0xa3, 0x6d, 0x26, 0xac, 0x8d, 0x62, 0x6b, 0xcb, 0x0b, 0xba, 0xae, - 0xdf, 0x6b, 0xb9, 0x8c, 0x85, 0xfe, 0xf6, 0x2e, 0xa3, 0xb2, 0xb7, 0x59, 0x8d, 0x3e, 0x27, 0x3c, - 0x9d, 0x11, 0x32, 0x37, 0xba, 0x2f, 0x4c, 0x53, 0x19, 0xd3, 0x6b, 0x41, 0x78, 0xff, 0x4e, 0x27, - 0x78, 0x4d, 0x98, 0xe7, 0x34, 0xe6, 0xfc, 0x18, 0xe7, 0x33, 0xca, 0x8e, 0xbb, 0xdb, 0x6b, 0xdf, - 0x6d, 0xf5, 0x3b, 0xae, 0x08, 0x96, 0x65, 0x65, 0x14, 0x74, 0x8f, 0xf6, 0xa4, 0xeb, 0x67, 0xb3, - 0xb6, 0xcf, 0xd3, 0xf6, 0x6e, 0x1c, 0x39, 0x8d, 0xab, 0x5d, 0x97, 0xb5, 0xef, 0xba, 0xdb, 0x1d, - 0xda, 0x0a, 0x69, 0x14, 0xec, 0x86, 0x6d, 0x2a, 0x84, 0xd3, 0x19, 0x61, 0x2f, 0xf0, 0x68, 0x2b, - 0xdb, 0xdb, 0x74, 0x41, 0x3c, 0x72, 0xa2, 0xec, 0x5c, 0xed, 0xd1, 0x30, 0x1a, 0x58, 0xcf, 0x64, - 0xac, 0xed, 0xa0, 0xdb, 0xd5, 0xd2, 0x7a, 0x34, 0x6a, 0x87, 0x7e, 0x3f, 0xee, 0xbc, 0x45, 0x7b, - 0xcc, 0x67, 0xfb, 0x5c, 0x78, 0xf1, 0x2b, 0x37, 0xf1, 0xb1, 0xd5, 0x58, 0xf2, 0x69, 0x9e, 0x3e, - 0xa4, 0x8b, 0xf1, 0x8b, 0x21, 0x75, 0x19, 0xbd, 0xed, 0x46, 0xf7, 0xc9, 0x63, 0x49, 0x46, 0x34, - 0x78, 0xd6, 0xc5, 0xbf, 0x72, 0xfb, 0x26, 0x7d, 0x75, 0x97, 0x46, 0xcc, 0xb2, 0xcb, 0x24, 0x51, - 0x3f, 0xe8, 0x45, 0xd4, 0x9e, 0xf8, 0xf2, 0x3f, 0xde, 0xff, 0xd6, 0x10, 0xb1, 0x8f, 0x43, 0x56, - 0xee, 0x3d, 0x01, 0xfe, 0x46, 0x57, 0xd0, 0x02, 0xf9, 0x1a, 0xc2, 0x1f, 0x69, 0x52, 0x06, 0x83, - 0x9d, 0xcf, 0xf6, 0x74, 0x6b, 0x3b, 0xce, 0xa6, 0x26, 0x65, 0x72, 0xac, 0x93, 0x45, 0x63, 0xd9, - 0xeb, 0xd0, 0xfb, 0x35, 0x72, 0x55, 0xe9, 0xdd, 0x39, 0xf0, 0xbd, 0x86, 0x48, 0xc8, 0x43, 0xf8, - 0x87, 0x67, 0x31, 0xff, 0xbb, 0xe7, 0x76, 0x29, 0xff, 0x4b, 0x44, 0xf5, 0x90, 0x7c, 0x17, 0xe1, - 0x47, 0x6e, 0xf8, 0x11, 0xb0, 0x6c, 0x78, 0x11, 0x59, 0xc9, 0x0e, 0x76, 0xd3, 0xed, 0x52, 0x6f, - 0x1d, 0xa2, 0xb7, 0xe1, 0xc5, 0x51, 0xbc, 0xe3, 0xd3, 0x30, 0x6e, 0x21, 0xf1, 0xe6, 0x8d, 0x5b, - 0xd8, 0x8b, 0xc0, 0x3c, 0x43, 0xa6, 0xd3, 0xcc, 0x2d, 0xdf, 0x8b, 0x9c, 0x83, 0x01, 0xb3, 0x00, - 0x26, 0xbf, 0x41, 0xf8, 0xa3, 0x92, 0x2c, 0x22, 0xd3, 0xd9, 0x51, 0x36, 0x45, 0x02, 0xa6, 0x51, - 0x26, 0x8a, 0x22, 0x05, 0x23, 0x6f, 0xc3, 0xc8, 0x9f, 0x23, 0x2b, 0x75, 0xa3, 0xb5, 0x35, 0x47, - 0x2e, 0x98, 0xb5, 0x21, 0x87, 0xf8, 0x04, 0xcf, 0x80, 0xcf, 0x8a, 0xd5, 0x4a, 0x66, 0xb2, 0x3c, - 0xd2, 0xa2, 0x26, 0xd3, 0x85, 0x2a, 0x99, 0x48, 0xa8, 0x49, 0x70, 0xe2, 0x63, 0xf6, 0x98, 0x04, - 0x92, 0x65, 0x01, 0x92, 0xea, 0xdb, 0x08, 0x3f, 0xd2, 0xa4, 0x2c, 0x19, 0xbc, 0x3a, 0xb1, 0x26, - 0x74, 0xe3, 0xda, 0x1b, 0x30, 0xd2, 0x8b, 0x64, 0x35, 0x37, 0x52, 0xed, 0x04, 0x7b, 0x13, 0xe1, - 0x91, 0x78, 0x0a, 0x64, 0xdf, 0x1f, 0x78, 0x92, 0x39, 0xc0, 0x3e, 0x4f, 0x66, 0xb3, 0xec, 0xba, - 0x44, 0x7b, 0x0f, 0xe1, 0xe3, 0x69, 0x42, 0xc3, 0x64, 0x9b, 0xd4, 0x45, 0x0f, 0x28, 0xee, 0x01, - 0x85, 0x47, 0x2e, 0x1f, 0x25, 0x82, 0x5b, 0x4b, 0x64, 0xc1, 0xbc, 0x1d, 0xf9, 0x2a, 0xc2, 0xa3, - 0x3c, 0x55, 0x6e, 0x40, 0xf5, 0x7f, 0xb9, 0xe3, 0xf6, 0xc8, 0x6c, 0x16, 0x6f, 0x60, 0x53, 0xb3, - 0x6f, 0xae, 0x5a, 0x28, 0xf2, 0xef, 0x1c, 0xf8, 0x74, 0xda, 0x3e, 0x29, 0xd9, 0x52, 0x9b, 0x0d, - 0xa4, 0xe0, 0x0f, 0x10, 0x3e, 0xde, 0xa4, 0x2c, 0x45, 0x51, 0x9d, 0x84, 0x96, 0x7e, 0x78, 0xfb, - 0x06, 0x0c, 0x78, 0x9d, 0xac, 0x15, 0x0d, 0x58, 0x3b, 0x13, 0x7f, 0x8c, 0xf0, 0xa3, 0x4d, 0xca, - 0x56, 0xdb, 0xcc, 0xdf, 0x2b, 0x8d, 0x54, 0x56, 0x61, 0x82, 0x7a, 0x1d, 0x50, 0x9f, 0x27, 0xcf, - 0x49, 0x54, 0x17, 0x3a, 0x69, 0xd5, 0x24, 0x26, 0x0f, 0x10, 0x3e, 0x15, 0x27, 0x50, 0x96, 0x21, - 0x22, 0x8b, 0x55, 0x98, 0xe9, 0xe4, 0x3c, 0xab, 0x47, 0x85, 0xf4, 0x7c, 0x0a, 0x70, 0x57, 0x48, - 0xa3, 0x14, 0x37, 0xbf, 0x56, 0xde, 0x46, 0x78, 0x2c, 0xee, 0x60, 0xd0, 0xdd, 0x07, 0xbe, 0x9e, - 0x2f, 0x02, 0x6a, 0x6a, 0x45, 0xa4, 0x18, 0x75, 0x4b, 0xfa, 0xaf, 0xa2, 0xe8, 0xa4, 0xe3, 0x67, - 0xb4, 0xa8, 0xab, 0xe2, 0xd6, 0x07, 0x98, 0x7b, 0xe4, 0xe9, 0x23, 0x66, 0xe4, 0x96, 0x43, 0x96, - 0x6b, 0x35, 0x25, 0xef, 0x22, 0x3c, 0xfa, 0x4a, 0xdf, 0x33, 0x5e, 0xdc, 0x5c, 0x6b, 0xb0, 0xb8, - 0xa5, 0x50, 0x2c, 0xee, 0x5b, 0xe0, 0xd9, 0x86, 0xf5, 0x50, 0xd6, 0x5a, 0x5c, 0x0c, 0xbe, 0x84, - 0xf0, 0x08, 0x2f, 0x20, 0xeb, 0xf2, 0x88, 0x47, 0x72, 0x3b, 0x5d, 0x62, 0x52, 0x6b, 0xd2, 0x6c, - 0xa5, 0x4e, 0x50, 0x4f, 0x01, 0xf5, 0xb8, 0x4d, 0x24, 0x75, 0x72, 0x9c, 0x84, 0x82, 0xf4, 0x0d, - 0x84, 0xc7, 0x36, 0x29, 0xf7, 0x64, 0x40, 0x31, 0xa7, 0xed, 0x5d, 0x6a, 0x6b, 0x73, 0x5c, 0x00, - 0x8e, 0xf3, 0xf6, 0x99, 0x3c, 0x87, 0x13, 0x8a, 0x4e, 0x63, 0xa0, 0xaf, 0x23, 0x3c, 0xba, 0x49, - 0xdb, 0xc1, 0x1e, 0x0d, 0x07, 0x3c, 0xb3, 0x25, 0x3c, 0x20, 0xad, 0x8d, 0x33, 0x03, 0x38, 0xe7, - 0x6c, 0xab, 0x10, 0x07, 0xfa, 0x8c, 0x69, 0xbe, 0x83, 0xf0, 0xb1, 0x26, 0x65, 0x03, 0x92, 0x45, - 0xdd, 0x9e, 0x96, 0x48, 0x52, 0x95, 0xfb, 0xb4, 0x96, 0xc6, 0xbe, 0x0a, 0xe3, 0x3f, 0x4d, 0x9e, - 0x2c, 0x18, 0xdf, 0xa0, 0x08, 0xbe, 0x8d, 0xf0, 0x08, 0x4f, 0x4f, 0x93, 0xd4, 0x51, 0x33, 0x7e, - 0xb6, 0x52, 0x27, 0x62, 0xf4, 0x3c, 0x30, 0x5e, 0xb1, 0x8e, 0xc6, 0x18, 0x87, 0xef, 0x0f, 0x08, - 0x8f, 0xa6, 0xc3, 0xb7, 0xe6, 0x32, 0x97, 0x38, 0x26, 0x21, 0x8c, 0x95, 0x12, 0x78, 0xc5, 0xbc, - 0x81, 0x20, 0x7f, 0x01, 0xc8, 0x9f, 0x25, 0x57, 0x24, 0xb9, 0xe7, 0x32, 0xb7, 0x66, 0x88, 0x5f, - 0x47, 0xf8, 0x44, 0x5c, 0xd1, 0x92, 0x41, 0x0c, 0x0b, 0xe4, 0x94, 0x36, 0xbc, 0x50, 0x1f, 0x2f, - 0x01, 0xda, 0x32, 0x59, 0xac, 0x11, 0x54, 0xf2, 0x0e, 0xc2, 0xe4, 0x36, 0x0d, 0xbb, 0x7e, 0x4f, - 0x99, 0xf1, 0x79, 0xed, 0x50, 0x89, 0x58, 0x52, 0x2d, 0x98, 0x48, 0xd5, 0x79, 0x5f, 0x38, 0xfa, - 0xbc, 0xff, 0x9d, 0xcf, 0xfb, 0xcd, 0xc0, 0xa3, 0x25, 0x8b, 0x58, 0x31, 0xa7, 0x96, 0xcd, 0x54, - 0xa9, 0xd0, 0xde, 0x03, 0xbc, 0x3e, 0xe9, 0x49, 0x3c, 0xf5, 0x51, 0x9a, 0x33, 0x26, 0xff, 0xb6, - 0xb2, 0xc0, 0x8a, 0x25, 0x4d, 0xaf, 0x18, 0x06, 0x15, 0x1b, 0x7a, 0xf7, 0xbd, 0x43, 0xf2, 0x4f, - 0x84, 0x49, 0x3c, 0x85, 0x0a, 0x4d, 0x94, 0xaf, 0x95, 0x8a, 0x3d, 0x9d, 0x19, 0x8f, 0x55, 0x2a, - 0xed, 0x03, 0xf0, 0x6d, 0x97, 0x44, 0x5a, 0xdf, 0x92, 0xb3, 0xba, 0xc6, 0xc3, 0x62, 0x7b, 0xe2, - 0x67, 0xb1, 0x99, 0x67, 0xfc, 0x4f, 0x3f, 0x84, 0x4f, 0xe7, 0x1d, 0xbc, 0x1e, 0x84, 0xf0, 0x18, - 0xee, 0x94, 0xd2, 0x0b, 0x55, 0x4d, 0x77, 0x7f, 0x3b, 0x0c, 0xfe, 0xfe, 0x7a, 0x98, 0xfc, 0x62, - 0x58, 0x7a, 0xdc, 0xbe, 0xeb, 0x77, 0xbc, 0x90, 0x66, 0x5f, 0x7e, 0x44, 0xce, 0x81, 0xfa, 0x43, - 0x4b, 0xce, 0x8d, 0xf2, 0x8b, 0x26, 0x2a, 0xb5, 0x9b, 0x26, 0x01, 0xab, 0xdd, 0x52, 0x64, 0x8e, - 0x49, 0x3b, 0x99, 0x5a, 0x45, 0x6a, 0xf1, 0xe0, 0x5f, 0xea, 0x83, 0xd4, 0x94, 0xc0, 0x4a, 0x89, - 0x96, 0x4a, 0x0a, 0xe4, 0xc1, 0xa4, 0x48, 0x13, 0x52, 0x16, 0xee, 0xb7, 0x5c, 0xc6, 0x68, 0xb7, - 0xcf, 0x0e, 0xc9, 0xbf, 0x11, 0x3e, 0x99, 0x5d, 0xdd, 0x50, 0xd9, 0x17, 0xab, 0x56, 0x78, 0xba, - 0xaa, 0x2f, 0x99, 0x89, 0x45, 0x4d, 0xca, 0x2d, 0x0c, 0xa8, 0xe8, 0xff, 0xa3, 0x95, 0xff, 0x05, - 0x3c, 0xb2, 0x49, 0x77, 0xfc, 0x88, 0xd1, 0xf0, 0x65, 0xde, 0x61, 0x7e, 0xb3, 0x15, 0x06, 0xa9, - 0xd3, 0x6e, 0xb6, 0x39, 0x9d, 0x70, 0xf0, 0x0c, 0x38, 0x78, 0xca, 0x1e, 0x95, 0x0e, 0x0a, 0x74, - 0x38, 0xa5, 0xbd, 0x8a, 0x8f, 0xf3, 0xbd, 0x59, 0x0e, 0x3f, 0xae, 0xe9, 0xd6, 0x9a, 0xd1, 0x18, - 0x32, 0x5b, 0xfb, 0x79, 0x18, 0xcd, 0xb2, 0x4e, 0x65, 0x47, 0x8b, 0x1d, 0x87, 0x12, 0x7e, 0x07, - 0x1f, 0x8b, 0x97, 0xa8, 0x68, 0x1e, 0x11, 0x5b, 0xd3, 0x71, 0xe9, 0xdb, 0x25, 0xd9, 0x5a, 0xbe, - 0xe9, 0x23, 0x39, 0xef, 0xc8, 0x1b, 0x08, 0x3f, 0xaa, 0xbe, 0x14, 0x5a, 0xdf, 0xa3, 0x3d, 0x46, - 0x96, 0x2b, 0x37, 0x7d, 0xd0, 0xc9, 0xa1, 0x1b, 0xa6, 0x72, 0x11, 0x80, 0x69, 0x00, 0x9a, 0xb2, - 0x27, 0x92, 0x3d, 0x2e, 0x36, 0x47, 0xea, 0x0b, 0xa3, 0xd7, 0x93, 0x03, 0x3a, 0xe4, 0x26, 0x70, - 0xcd, 0x97, 0xa6, 0xad, 0xc2, 0xb4, 0x60, 0x22, 0xd5, 0xbd, 0x39, 0x10, 0x3c, 0x71, 0x0e, 0x66, - 0x58, 0xe2, 0x3a, 0xab, 0x61, 0x01, 0x93, 0x19, 0x4b, 0x91, 0xb4, 0x82, 0x25, 0x79, 0x3b, 0xfb, - 0xc5, 0x61, 0xd8, 0xde, 0x95, 0x2e, 0xf2, 0xdb, 0xbb, 0x62, 0x2e, 0xdb, 0xde, 0x15, 0xa1, 0xfd, - 0x93, 0x21, 0x18, 0xfe, 0xc1, 0x10, 0x79, 0x63, 0x48, 0x79, 0x0b, 0x9a, 0x59, 0xe7, 0xc6, 0xb5, - 0xbf, 0x46, 0xb1, 0x37, 0xae, 0xee, 0x15, 0xe5, 0xbc, 0xb0, 0x7e, 0x17, 0x15, 0xec, 0x7c, 0x85, - 0x2e, 0x2c, 0xc9, 0xf9, 0x1a, 0xfc, 0xbd, 0x21, 0x7e, 0x18, 0x51, 0x62, 0x57, 0x70, 0x18, 0x51, - 0xec, 0xa5, 0xbb, 0x73, 0x4e, 0x69, 0xff, 0x0e, 0xc1, 0x4c, 0xbc, 0x83, 0xc8, 0x2f, 0x91, 0x76, - 0x26, 0x8c, 0xa7, 0xc1, 0x74, 0x0e, 0xcc, 0x26, 0x40, 0x1f, 0x7d, 0xf2, 0x60, 0x18, 0xb6, 0x27, - 0xc5, 0x9f, 0xe2, 0xed, 0x29, 0x9b, 0xa1, 0xa5, 0xdb, 0x53, 0xb1, 0x58, 0x2c, 0x99, 0x9f, 0xf3, - 0xa4, 0x7d, 0x6b, 0x88, 0xfc, 0x70, 0x48, 0xd9, 0xa1, 0xfe, 0x9f, 0xb9, 0xd9, 0xcc, 0xfd, 0x17, - 0xc2, 0x53, 0xca, 0x66, 0xb6, 0x06, 0x5d, 0xae, 0x26, 0xdf, 0xed, 0xc8, 0x65, 0xcd, 0x36, 0x92, - 0x15, 0xaa, 0x8f, 0xb5, 0x4f, 0xd6, 0x6c, 0x25, 0x66, 0xee, 0x15, 0x98, 0xb8, 0x5b, 0xd6, 0x27, - 0x32, 0x3b, 0x53, 0xfe, 0xe3, 0xa6, 0x73, 0xa0, 0x7e, 0x5b, 0x14, 0xc1, 0x49, 0xfd, 0x28, 0x82, - 0x13, 0x97, 0xc8, 0x3f, 0x22, 0x6c, 0x35, 0x29, 0xd3, 0xb9, 0xf8, 0x84, 0x21, 0x6c, 0xaa, 0x6c, - 0x5e, 0xac, 0xd3, 0x44, 0x38, 0xf7, 0x2c, 0x38, 0xf7, 0xd4, 0xe0, 0x1d, 0x7b, 0x89, 0x73, 0xf9, - 0x77, 0x84, 0x7f, 0x43, 0x78, 0x6a, 0x8d, 0x76, 0xe8, 0x7f, 0x3f, 0x53, 0xbc, 0x97, 0xba, 0x33, - 0x25, 0x5b, 0x09, 0x67, 0xae, 0x81, 0x33, 0xcf, 0x2c, 0x1c, 0xc9, 0x99, 0x78, 0x4e, 0xde, 0x45, - 0x78, 0x5c, 0xc9, 0xbc, 0x94, 0x27, 0x0d, 0x0d, 0x93, 0x2e, 0xdb, 0x1c, 0x63, 0xbd, 0xa0, 0xbf, - 0x02, 0xf4, 0x97, 0x2d, 0x27, 0x4b, 0x5f, 0x91, 0x60, 0x31, 0xf8, 0x9b, 0xfc, 0xc0, 0x9d, 0xa7, - 0x5e, 0xac, 0xa4, 0x48, 0x25, 0xd0, 0x92, 0x99, 0x58, 0xf0, 0x2e, 0x01, 0xef, 0x05, 0xf2, 0x78, - 0x19, 0xaf, 0x84, 0x24, 0xbf, 0x42, 0x78, 0x5c, 0x49, 0x95, 0x5a, 0xa1, 0x55, 0xd3, 0xc3, 0x31, - 0xd6, 0x0b, 0x54, 0xf1, 0x3d, 0x6b, 0xc1, 0x08, 0x35, 0x8e, 0xe7, 0xfb, 0x08, 0x4f, 0xf0, 0xe9, - 0x91, 0xa7, 0xc4, 0x14, 0xae, 0xf6, 0xf5, 0x94, 0x2e, 0x15, 0x56, 0xcc, 0x1b, 0x08, 0x60, 0x0a, - 0xc0, 0x2d, 0x6b, 0x2b, 0xf7, 0x01, 0xee, 0x08, 0xd5, 0x46, 0xf9, 0x4d, 0x76, 0x04, 0x6e, 0xfe, - 0x1e, 0xe1, 0x53, 0xa9, 0xef, 0x9d, 0x29, 0x1f, 0x97, 0xaa, 0x91, 0x53, 0x89, 0xb3, 0x6c, 0xa8, - 0x16, 0xde, 0xad, 0x82, 0x77, 0x1f, 0x27, 0xcf, 0x94, 0x7a, 0x97, 0x5b, 0xa1, 0x83, 0x77, 0x13, - 0x87, 0xe4, 0x4f, 0x08, 0x4f, 0xf0, 0x49, 0x3e, 0xda, 0x04, 0xa9, 0x09, 0xb5, 0x62, 0xde, 0x40, - 0xb8, 0xb0, 0x06, 0x2e, 0x3c, 0xb7, 0x70, 0x74, 0x17, 0xe2, 0xf8, 0xff, 0x08, 0xe1, 0xf1, 0xf8, - 0x20, 0xf5, 0x92, 0xbc, 0x13, 0x52, 0xb6, 0x28, 0x34, 0x42, 0xed, 0xa2, 0xd0, 0xea, 0x85, 0x0b, - 0x8f, 0x83, 0x0b, 0x67, 0xc9, 0xa4, 0x74, 0x61, 0x70, 0x33, 0x65, 0xe0, 0x43, 0x5c, 0x59, 0xe0, - 0x6b, 0xd5, 0xe0, 0xe3, 0x92, 0x4f, 0xa3, 0xfc, 0xc3, 0x6d, 0xea, 0xdb, 0x53, 0xfa, 0x0c, 0x79, - 0xae, 0x42, 0x97, 0x4f, 0x85, 0xf8, 0xa8, 0xe0, 0xf1, 0xab, 0x26, 0x7e, 0x1c, 0x42, 0x79, 0x49, - 0xa6, 0xc5, 0xf6, 0xfb, 0xf1, 0x19, 0x22, 0xbf, 0x09, 0xfd, 0x0c, 0xe1, 0x13, 0x4d, 0x9a, 0x02, - 0xdc, 0xcf, 0x5f, 0x1a, 0x48, 0x19, 0x53, 0x69, 0x7b, 0xa6, 0x44, 0x66, 0x7f, 0x0a, 0xc8, 0x3e, - 0x49, 0x36, 0x4c, 0xc9, 0xaa, 0x5f, 0x18, 0xbf, 0x87, 0xf0, 0x18, 0x5f, 0xe8, 0x69, 0xd8, 0xb9, - 0x12, 0x0a, 0xb5, 0x8e, 0xcc, 0x1b, 0x28, 0xc5, 0xe4, 0xde, 0x06, 0xfa, 0x9b, 0xd6, 0xc3, 0xa3, - 0x8f, 0xf3, 0xb5, 0x83, 0x71, 0x93, 0xb2, 0xcf, 0xf0, 0xb3, 0x5b, 0xfe, 0x8e, 0xcf, 0xc0, 0xa6, - 0xbd, 0xe3, 0x93, 0x96, 0x08, 0xd4, 0x71, 0x40, 0x1d, 0x23, 0x23, 0x12, 0x55, 0x9c, 0x0d, 0xc9, - 0x9f, 0xf9, 0xa6, 0xb6, 0x36, 0xb8, 0x82, 0x24, 0x22, 0x56, 0xfd, 0x45, 0x3c, 0x87, 0x96, 0xeb, - 0xc4, 0xde, 0x81, 0x61, 0x5d, 0xd2, 0x4a, 0x4e, 0xe3, 0xd9, 0xab, 0x4e, 0x10, 0x27, 0x38, 0x9e, - 0xd6, 0x0c, 0x95, 0xfa, 0xcd, 0xfc, 0x9b, 0x43, 0x7c, 0x91, 0x67, 0x11, 0xfc, 0xa2, 0x32, 0x9b, - 0xe3, 0x4c, 0xaf, 0xa6, 0x19, 0x23, 0xb5, 0xfd, 0x16, 0x7f, 0x2a, 0xfb, 0x3e, 0x22, 0xb7, 0xca, - 0x7d, 0xab, 0xed, 0xd8, 0x56, 0x93, 0xac, 0x3f, 0x94, 0x2e, 0xc9, 0x5f, 0xf8, 0x45, 0x82, 0xe4, - 0x71, 0xe9, 0x25, 0xca, 0x42, 0xbf, 0x1d, 0x91, 0x8b, 0x26, 0x5f, 0x72, 0x84, 0x58, 0x86, 0xe5, - 0x52, 0xad, 0x36, 0x22, 0xeb, 0x72, 0x77, 0xbf, 0xba, 0x5c, 0x50, 0xef, 0x53, 0xc6, 0x0b, 0xd7, - 0xb6, 0xae, 0xee, 0xf8, 0xec, 0xee, 0xee, 0x76, 0xa3, 0x1d, 0x74, 0x1d, 0xe0, 0x08, 0xc2, 0x1d, - 0xfe, 0x87, 0x93, 0xdc, 0xa5, 0xdb, 0xa1, 0x3d, 0xa7, 0xbf, 0xbd, 0xbc, 0x13, 0x38, 0xd9, 0x3b, - 0x99, 0xdb, 0x1f, 0x86, 0xeb, 0x74, 0x97, 0xfe, 0x13, 0x00, 0x00, 0xff, 0xff, 0x69, 0x42, 0xd8, - 0x48, 0xae, 0x29, 0x00, 0x00, + // 2633 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0x5b, 0x6c, 0x1c, 0x57, + 0x19, 0xd6, 0x19, 0xa7, 0x04, 0x4e, 0x73, 0x71, 0xfe, 0x26, 0xd8, 0x99, 0xc4, 0x49, 0x3a, 0xb9, + 0x38, 0x59, 0x27, 0x1e, 0x37, 0x69, 0x5a, 0x6a, 0x51, 0xda, 0x34, 0x76, 0x96, 0xb4, 0x49, 0x1a, + 0x9c, 0x50, 0x60, 0x8b, 0x58, 0x8d, 0x77, 0x4f, 0x9c, 0x69, 0x76, 0x77, 0xb6, 0x33, 0x63, 0xb7, + 0x56, 0xe4, 0x02, 0x35, 0x84, 0xb4, 0x95, 0x13, 0xa4, 0x90, 0xa0, 0x8a, 0xb6, 0x42, 0x48, 0x95, + 0xb8, 0x3d, 0x21, 0x95, 0x27, 0x1e, 0x78, 0x89, 0x54, 0x51, 0x21, 0xb5, 0x2a, 0x97, 0x4a, 0xe4, + 0x09, 0x45, 0x4a, 0x25, 0x10, 0x50, 0x78, 0x00, 0x1e, 0x40, 0x68, 0xce, 0x65, 0xe7, 0x7a, 0xe6, + 0xb2, 0xb6, 0xab, 0x4a, 0xe4, 0xcd, 0xde, 0xff, 0x3b, 0xff, 0xf9, 0xff, 0xef, 0xbf, 0x9c, 0x73, + 0x66, 0xce, 0xe0, 0xcd, 0x67, 0x1a, 0xb3, 0x2e, 0x31, 0xeb, 0x0d, 0xdd, 0x21, 0xf6, 0x8c, 0x59, + 0x23, 0xba, 0x51, 0x6f, 0x9a, 0xad, 0xe1, 0xb6, 0x6d, 0xb9, 0x16, 0xf4, 0x0a, 0xe9, 0x30, 0x97, + 0xaa, 0x9b, 0xa7, 0x2c, 0x6b, 0xaa, 0x41, 0x74, 0xa3, 0x6d, 0xea, 0x46, 0xab, 0x65, 0xb9, 0x86, + 0x6b, 0x5a, 0x2d, 0x87, 0xe1, 0x55, 0x5f, 0x1b, 0xd5, 0xa2, 0xb7, 0x6d, 0xeb, 0x29, 0x52, 0x73, + 0xb9, 0x74, 0x38, 0x59, 0x5a, 0xad, 0x5b, 0x4d, 0xc3, 0x6c, 0x55, 0x0d, 0xd7, 0xb5, 0xcd, 0xc9, + 0x69, 0x97, 0x08, 0x6d, 0x83, 0x12, 0x7c, 0x0c, 0xb8, 0x31, 0x02, 0x74, 0x0d, 0xe7, 0x1c, 0x17, + 0x0d, 0x44, 0x44, 0xcf, 0x58, 0xf6, 0xb9, 0x33, 0x0d, 0xeb, 0x19, 0x2e, 0xde, 0x2d, 0x11, 0xc7, + 0xe7, 0xd8, 0x16, 0x41, 0x36, 0x8c, 0xe9, 0x56, 0xed, 0x6c, 0xb5, 0xdd, 0x30, 0x38, 0x59, 0xaa, + 0x1a, 0x41, 0x90, 0x19, 0xd2, 0x12, 0xae, 0x6f, 0x89, 0xca, 0x9e, 0x25, 0xb5, 0x69, 0x8f, 0x39, + 0x89, 0xab, 0x4d, 0xc3, 0xad, 0x9d, 0x35, 0x26, 0x1b, 0xa4, 0x6a, 0x13, 0xc7, 0x9a, 0xb6, 0x6b, + 0x84, 0x03, 0xb7, 0x47, 0x80, 0x2d, 0xab, 0x4e, 0xaa, 0x51, 0x6d, 0xdb, 0x13, 0xf8, 0x88, 0x81, + 0xa2, 0xb1, 0x9a, 0x21, 0xb6, 0xe3, 0x4b, 0x37, 0x45, 0xa4, 0x35, 0xab, 0xd9, 0x94, 0x5a, 0x5b, + 0x27, 0x4e, 0xcd, 0x36, 0xdb, 0x9e, 0xf2, 0x2a, 0x69, 0xb9, 0xa6, 0x3b, 0xcb, 0x80, 0xfb, 0xdf, + 0x78, 0x1a, 0xaf, 0x3a, 0xe4, 0x41, 0x4e, 0xb1, 0xf4, 0x81, 0x26, 0xc6, 0x87, 0x6d, 0x62, 0xb8, + 0xe4, 0xb4, 0xe1, 0x9c, 0x83, 0xbb, 0x3b, 0x19, 0x31, 0xcc, 0xb2, 0xce, 0xfb, 0x95, 0xc9, 0x27, + 0xc8, 0xd3, 0xd3, 0xc4, 0x71, 0x55, 0x2d, 0x0d, 0xe2, 0xb4, 0xad, 0x96, 0x43, 0xb4, 0xfe, 0xe7, + 0xdf, 0xbd, 0x79, 0x45, 0x01, 0x6d, 0x35, 0xcd, 0xca, 0x99, 0x7b, 0xa8, 0xbf, 0xce, 0x28, 0x2a, + 0xc1, 0x7b, 0x08, 0xaf, 0x2c, 0x13, 0x97, 0x4e, 0xb6, 0x2d, 0xaa, 0xe9, 0xf1, 0x49, 0x2f, 0x9b, + 0xca, 0xc4, 0x15, 0x73, 0xad, 0x4f, 0x9a, 0x4b, 0xfb, 0x0e, 0xa2, 0xea, 0x17, 0x10, 0x3c, 0x18, + 0xd2, 0xaf, 0x9f, 0x37, 0xeb, 0xc3, 0x3c, 0x25, 0xe7, 0xe8, 0x3f, 0x2c, 0x8f, 0xd9, 0xdf, 0x2d, + 0xa3, 0x49, 0xd8, 0x5f, 0x9c, 0xd7, 0xb9, 0xca, 0x31, 0x78, 0x34, 0xac, 0xc0, 0xb2, 0xa7, 0x28, + 0xc2, 0xb2, 0xa7, 0xe6, 0x8a, 0x6a, 0x83, 0xeb, 0x08, 0xdf, 0x79, 0xcc, 0x74, 0xa8, 0x6f, 0x47, + 0xeb, 0x0e, 0x8c, 0x44, 0x8d, 0x3f, 0x61, 0x34, 0x49, 0x7d, 0x9c, 0x46, 0xe3, 0x68, 0xdd, 0x8b, + 0xca, 0x19, 0x93, 0xd8, 0xde, 0x08, 0xe1, 0xee, 0x9e, 0xdc, 0x23, 0xb4, 0x2f, 0x51, 0x0a, 0x4e, + 0xc1, 0xf6, 0xa0, 0x03, 0x55, 0xb3, 0xee, 0xe8, 0xe7, 0x7d, 0x9b, 0xb9, 0xc1, 0x95, 0xbd, 0x50, + 0x4a, 0xf0, 0x93, 0x39, 0x19, 0x43, 0xc3, 0x0f, 0x15, 0xfc, 0x09, 0xe1, 0x87, 0x03, 0xdb, 0xa3, + 0x36, 0x4d, 0xf0, 0xf4, 0x0f, 0x1a, 0xde, 0x9f, 0x14, 0x27, 0x6a, 0xe7, 0x1f, 0x58, 0xac, 0x7e, + 0x83, 0x60, 0xa4, 0x68, 0xac, 0x2a, 0x0f, 0x45, 0xe3, 0x5b, 0x30, 0x3c, 0x95, 0xdd, 0xb0, 0x2b, + 0xdf, 0xa4, 0x95, 0x83, 0x70, 0xa0, 0x8b, 0xa9, 0x60, 0x0e, 0xaf, 0x61, 0x99, 0xff, 0x05, 0xde, + 0xa5, 0x60, 0x67, 0x94, 0x09, 0x21, 0x09, 0x17, 0xd1, 0xae, 0x2c, 0x18, 0x2f, 0xa4, 0xcd, 0x94, + 0xbd, 0x4f, 0x6a, 0xeb, 0x84, 0x75, 0xa2, 0x1d, 0xd2, 0x62, 0x7a, 0x1f, 0xe1, 0x3b, 0xcb, 0xc4, + 0xed, 0x4c, 0x9e, 0x5d, 0x50, 0xfd, 0xb2, 0x79, 0xb5, 0x57, 0x58, 0xa0, 0xae, 0x22, 0x38, 0x14, + 0x9b, 0xab, 0x70, 0x61, 0x9d, 0x84, 0x13, 0x71, 0x25, 0x8b, 0x2a, 0xae, 0x77, 0x10, 0x5e, 0xeb, + 0x25, 0x94, 0xb0, 0x77, 0xd9, 0x0b, 0xcc, 0xa0, 0x74, 0x3c, 0x09, 0x83, 0x51, 0x47, 0x64, 0x45, + 0x36, 0x02, 0xc3, 0x12, 0x9f, 0x65, 0x85, 0xf6, 0x4b, 0x05, 0xaf, 0x0e, 0xfa, 0x94, 0xb3, 0xd8, + 0x36, 0xcb, 0x62, 0x48, 0xed, 0xfe, 0x13, 0x8b, 0xe3, 0x4d, 0x04, 0xf7, 0x76, 0x13, 0xc7, 0xca, + 0xe1, 0xa4, 0xf8, 0x17, 0x2d, 0xbc, 0x40, 0xc3, 0xc9, 0x9e, 0xbc, 0xf2, 0x00, 0xdc, 0xdf, 0xe5, + 0x94, 0x70, 0x01, 0xe1, 0x5e, 0x56, 0x32, 0xc7, 0xe8, 0xea, 0x7f, 0xb2, 0x61, 0xb4, 0x60, 0x30, + 0x4a, 0x90, 0x2f, 0x0b, 0x57, 0xe1, 0xee, 0x6c, 0x20, 0xaf, 0xc3, 0xad, 0x94, 0xd4, 0x8d, 0xda, + 0x7a, 0x61, 0x68, 0x60, 0xb3, 0x41, 0x4b, 0xf1, 0xef, 0x08, 0xaf, 0x2e, 0x13, 0x37, 0x60, 0x45, + 0x76, 0x31, 0xaa, 0xf2, 0xe9, 0xb5, 0x1f, 0xb0, 0x30, 0x7e, 0x0f, 0xc1, 0x58, 0xd2, 0x94, 0x85, + 0x2b, 0xf2, 0x14, 0x7c, 0x2e, 0x51, 0xcf, 0xa2, 0x8a, 0xf2, 0x1f, 0x08, 0xdf, 0x55, 0x26, 0xee, + 0xa1, 0x9a, 0x6b, 0xce, 0xa4, 0x06, 0x20, 0x8a, 0xc8, 0xc3, 0xc0, 0x35, 0xc6, 0xc0, 0x65, 0x04, + 0x9f, 0x11, 0x96, 0x1b, 0x54, 0x4d, 0xb5, 0x20, 0x11, 0x95, 0xe3, 0xf0, 0x58, 0x9a, 0x86, 0x82, + 0x14, 0xc0, 0x2b, 0x08, 0x6f, 0xf0, 0x4a, 0x2d, 0xea, 0x94, 0x03, 0x43, 0x59, 0x7e, 0x07, 0xcb, + 0x78, 0x8b, 0xdc, 0x77, 0x5a, 0xc8, 0xf7, 0x51, 0xf7, 0x03, 0x5d, 0x25, 0xd1, 0xfb, 0x78, 0x57, + 0xb9, 0x81, 0xf0, 0x3a, 0x4f, 0x81, 0xaf, 0x6e, 0xd9, 0x7b, 0xe5, 0x53, 0xd4, 0xd4, 0xba, 0x5f, + 0xf4, 0x01, 0x1b, 0x65, 0xed, 0xf2, 0x3e, 0xbf, 0x3f, 0x45, 0xd1, 0xa9, 0x4d, 0xf3, 0x6d, 0x85, + 0x2d, 0x04, 0x41, 0xde, 0x73, 0xb5, 0xcd, 0x2c, 0xbe, 0xff, 0xc9, 0xf2, 0xed, 0x6f, 0xc8, 0xef, + 0x46, 0x45, 0x13, 0xed, 0x88, 0xa4, 0x58, 0x8b, 0xb6, 0x4f, 0x1d, 0xf6, 0x15, 0x32, 0xa1, 0xf2, + 0x69, 0x18, 0xed, 0x7e, 0x62, 0x58, 0x50, 0x70, 0xef, 0xe7, 0xdb, 0xf5, 0xdc, 0x4d, 0x94, 0x61, + 0x73, 0x34, 0x51, 0x01, 0xe4, 0x4d, 0xf4, 0x75, 0xc6, 0xf0, 0x6b, 0x48, 0x5d, 0x92, 0x9e, 0x36, + 0x8a, 0x4a, 0x95, 0x53, 0xea, 0x32, 0xb4, 0xb5, 0xaf, 0x23, 0xbc, 0x96, 0xf5, 0xff, 0x71, 0x71, + 0x42, 0x83, 0xd8, 0x86, 0xad, 0x23, 0x0a, 0x2f, 0x29, 0x83, 0x99, 0x38, 0x4e, 0xc6, 0x00, 0xe5, + 0xa2, 0x4f, 0x03, 0x61, 0x7f, 0xe7, 0x34, 0x48, 0xd7, 0x93, 0x4b, 0x08, 0xaf, 0x9b, 0x20, 0xcc, + 0x27, 0xdf, 0x8a, 0xdd, 0x52, 0xed, 0x02, 0x5b, 0xd8, 0x8e, 0x5d, 0xd4, 0x8e, 0x6d, 0xda, 0xa6, + 0xb8, 0x1d, 0xba, 0xcd, 0x95, 0x7a, 0x06, 0xbd, 0x84, 0x70, 0xef, 0x04, 0xa9, 0x59, 0x33, 0xc4, + 0xf6, 0xed, 0x19, 0x4c, 0xb1, 0x87, 0x42, 0x0b, 0x9b, 0xb3, 0x93, 0x9a, 0xb3, 0x55, 0x53, 0x13, + 0xcd, 0xa1, 0x3a, 0x3d, 0x6b, 0x6e, 0x20, 0xbc, 0xaa, 0x4c, 0x5c, 0xdf, 0x92, 0x21, 0xd9, 0xa6, + 0xa8, 0x03, 0x09, 0x2c, 0xbc, 0x1b, 0xa5, 0xd6, 0x68, 0xf3, 0x2c, 0x47, 0xe7, 0xe0, 0x60, 0x82, + 0x01, 0x39, 0x4a, 0x77, 0x0c, 0x1e, 0x49, 0x18, 0x58, 0x74, 0x89, 0xf9, 0x2b, 0xc2, 0x6b, 0x59, + 0xf1, 0xe4, 0xc9, 0xc0, 0x70, 0x3d, 0x0e, 0x66, 0xe2, 0x38, 0xd5, 0x2f, 0x32, 0x57, 0xe7, 0x91, + 0xda, 0x9d, 0xaf, 0x5e, 0xfd, 0x95, 0xd5, 0x25, 0x70, 0xd7, 0x0b, 0xe8, 0x05, 0x05, 0xf7, 0x06, + 0x03, 0x3a, 0x66, 0xb8, 0x06, 0xe8, 0x79, 0x82, 0xea, 0x21, 0x85, 0xef, 0x23, 0xf9, 0x07, 0x70, + 0x12, 0x2e, 0x31, 0x12, 0xbe, 0x85, 0xfc, 0x0e, 0x5a, 0x37, 0x5c, 0xa3, 0x60, 0xd4, 0x8f, 0x42, + 0x59, 0x36, 0xba, 0x68, 0xe8, 0xaf, 0x23, 0xbc, 0xc6, 0x5b, 0x8f, 0x3a, 0x16, 0xe7, 0x5c, 0xde, + 0x06, 0xa4, 0x61, 0xa7, 0xab, 0x9b, 0x45, 0xdd, 0x34, 0x61, 0xa8, 0x40, 0xa8, 0x2b, 0xa3, 0xf0, + 0xa9, 0x6e, 0xa3, 0x0b, 0xff, 0x41, 0x18, 0x4e, 0x13, 0xbb, 0x69, 0xb6, 0x42, 0x59, 0xbc, 0x47, + 0x6a, 0x66, 0x07, 0x2c, 0x3c, 0x2a, 0xe5, 0x81, 0xf2, 0x30, 0x5e, 0x66, 0x61, 0xbc, 0x88, 0x4a, + 0xdd, 0xe7, 0xf2, 0xb1, 0xd2, 0x52, 0x05, 0xd1, 0x4b, 0xe8, 0x3f, 0xb2, 0x84, 0x3e, 0x61, 0xd5, + 0x49, 0x4a, 0xbf, 0x0c, 0x89, 0x03, 0x1d, 0x6a, 0x20, 0x15, 0xa8, 0x7d, 0x53, 0xa1, 0xee, 0xfe, + 0x17, 0x41, 0x4b, 0x98, 0x1c, 0x7e, 0xec, 0xc8, 0x7c, 0xee, 0xfc, 0x5b, 0x8d, 0x9a, 0x1c, 0x92, + 0x04, 0xed, 0x0f, 0x09, 0xfc, 0xb5, 0x91, 0x6a, 0x37, 0xeb, 0x73, 0x95, 0x97, 0x10, 0x5c, 0x44, + 0xb2, 0x39, 0x05, 0x4d, 0x21, 0x25, 0x1d, 0xce, 0x96, 0xde, 0x1a, 0xf8, 0xb7, 0x82, 0xc1, 0x4b, + 0xef, 0x10, 0x3b, 0x4e, 0x7c, 0x99, 0x0c, 0xc9, 0x83, 0x55, 0x73, 0x77, 0x26, 0x52, 0xbb, 0xca, + 0xb8, 0xbe, 0xa4, 0x80, 0x23, 0xe5, 0xba, 0xf3, 0x6c, 0x40, 0xe2, 0x63, 0xb2, 0xbc, 0xe3, 0x69, + 0xb2, 0x98, 0xb5, 0x96, 0x6b, 0x08, 0xae, 0xa4, 0x13, 0x9e, 0x3c, 0x9a, 0xd1, 0xbe, 0x7c, 0x86, + 0xc1, 0xe5, 0x8f, 0xe3, 0x8d, 0x71, 0xee, 0x8f, 0x58, 0x36, 0x7d, 0xb6, 0xab, 0xa7, 0x12, 0xcb, + 0x51, 0x05, 0x23, 0xf1, 0xea, 0x4a, 0x1a, 0x89, 0x6b, 0x2b, 0xe1, 0x47, 0x3d, 0x82, 0x91, 0xda, + 0x59, 0xb3, 0x51, 0xb7, 0x49, 0xf4, 0x89, 0xba, 0xa3, 0x9f, 0x0f, 0xff, 0x50, 0x15, 0x69, 0x13, + 0xfa, 0x45, 0xc2, 0x4a, 0xe1, 0xa1, 0x1d, 0xc2, 0x0a, 0x8f, 0xe4, 0x49, 0x9d, 0x67, 0x9c, 0xc8, + 0xfa, 0x24, 0x34, 0x7f, 0xfa, 0x9b, 0xea, 0x83, 0xc0, 0xa4, 0x18, 0x2b, 0x20, 0x52, 0xab, 0x04, + 0x40, 0xec, 0x95, 0x93, 0x30, 0x36, 0x71, 0xed, 0xd9, 0xaa, 0xe1, 0xba, 0xa4, 0xd9, 0x76, 0xe7, + 0x2a, 0xb7, 0x7a, 0xe0, 0x66, 0x76, 0xb8, 0x68, 0x26, 0x17, 0x66, 0x8f, 0x25, 0xf9, 0xed, 0x48, + 0x7f, 0x24, 0x22, 0x0d, 0xf3, 0x3d, 0x78, 0x7d, 0x74, 0xc9, 0xa3, 0xfb, 0xb8, 0xa1, 0xac, 0x65, + 0x2f, 0xb8, 0x87, 0xdb, 0x9b, 0x0f, 0x2c, 0x16, 0x7e, 0xd6, 0x9d, 0x2f, 0x06, 0xba, 0x33, 0x5d, + 0xbc, 0x3f, 0xa4, 0xe5, 0xf0, 0xdb, 0x08, 0x16, 0x50, 0xea, 0xc4, 0x1f, 0xfa, 0x9a, 0xf8, 0x55, + 0xbc, 0x76, 0x82, 0x4c, 0x99, 0x8e, 0x4b, 0xec, 0x93, 0x4c, 0x61, 0xfc, 0xe8, 0xc0, 0x05, 0x02, + 0x27, 0x3d, 0x3a, 0xc4, 0x70, 0x9c, 0xf5, 0x4d, 0x94, 0xf4, 0x0d, 0x5a, 0xaf, 0x70, 0x9d, 0x9b, + 0x4e, 0x8f, 0xae, 0xdf, 0x45, 0x78, 0x35, 0x3b, 0x6a, 0x88, 0xf9, 0xfb, 0x24, 0x7a, 0xd5, 0x9d, + 0x12, 0x41, 0xe4, 0xa4, 0x72, 0x84, 0x4e, 0xf7, 0xb0, 0xba, 0x21, 0x3a, 0x9d, 0xe7, 0x39, 0xdd, + 0xbb, 0xed, 0x50, 0xb7, 0xc6, 0x64, 0x81, 0xc7, 0x48, 0x0c, 0x05, 0x67, 0xf0, 0x2a, 0x6f, 0x21, + 0xe1, 0x93, 0x38, 0xa0, 0x49, 0xa6, 0x4f, 0x7d, 0xb5, 0x25, 0x46, 0x8b, 0x97, 0x9c, 0x10, 0x23, + 0x01, 0x5e, 0x46, 0xf8, 0xae, 0xf0, 0x7b, 0xa1, 0xf1, 0x19, 0xd2, 0x72, 0x61, 0x5f, 0xe6, 0xf1, + 0x84, 0xe2, 0xc4, 0xd4, 0xc3, 0x79, 0xe1, 0x9c, 0xa6, 0xed, 0xd4, 0xa0, 0x01, 0xad, 0xbf, 0xb3, + 0x05, 0xf6, 0xc4, 0x4e, 0xf8, 0x9d, 0xd1, 0x0b, 0x9d, 0x87, 0x1b, 0xb4, 0xae, 0xa8, 0x5d, 0x7b, + 0x52, 0x4b, 0x2e, 0x64, 0x53, 0x29, 0x0f, 0x54, 0xf6, 0xd0, 0x9c, 0xdb, 0xe3, 0xa5, 0x6a, 0xc4, + 0x16, 0x6f, 0x37, 0x20, 0xb1, 0x85, 0x8a, 0xf2, 0xd9, 0x92, 0x04, 0xcd, 0xb0, 0xa5, 0xf3, 0x62, + 0xfa, 0xad, 0x3b, 0xe8, 0x7e, 0x3d, 0xa4, 0x22, 0xbe, 0x5f, 0x0f, 0x89, 0xd3, 0xf6, 0xeb, 0x21, + 0xa0, 0xf6, 0x97, 0x15, 0x74, 0xfa, 0x5b, 0x2b, 0xe0, 0x65, 0x25, 0xf4, 0xc2, 0x36, 0xd2, 0xa1, + 0x72, 0xaf, 0x5b, 0x05, 0x16, 0xaa, 0xdc, 0x2b, 0x53, 0xc6, 0x52, 0x94, 0xb8, 0xf6, 0x24, 0x2d, + 0x36, 0xf1, 0xd5, 0x25, 0x71, 0x39, 0x89, 0xef, 0x14, 0xde, 0x54, 0xe0, 0xba, 0x94, 0x1e, 0xd1, + 0x47, 0x73, 0xed, 0x08, 0xfe, 0xdf, 0xa9, 0x84, 0x0f, 0x7a, 0xd8, 0xc1, 0x28, 0x94, 0x86, 0x09, + 0x07, 0xa3, 0x90, 0x3c, 0x75, 0x3b, 0x1e, 0x43, 0x6a, 0x0b, 0x3d, 0x34, 0xa9, 0x2f, 0xf4, 0xc0, + 0x8f, 0x91, 0x34, 0xa9, 0x73, 0x87, 0x21, 0x6f, 0x0c, 0xf2, 0x05, 0x40, 0xce, 0x7e, 0xe5, 0x77, + 0x08, 0xde, 0x45, 0xa9, 0x59, 0x96, 0x2b, 0xc5, 0x3e, 0x72, 0x8e, 0xc1, 0x9f, 0xef, 0xa0, 0xdb, + 0xaf, 0x50, 0xa0, 0x92, 0xb7, 0x5f, 0xd1, 0x2e, 0x96, 0xba, 0xfd, 0x4a, 0x06, 0xf3, 0xb6, 0xfa, + 0x2f, 0xd6, 0xd8, 0x3e, 0x58, 0x01, 0xaf, 0x29, 0xa1, 0x6d, 0xd0, 0xed, 0xee, 0x16, 0xed, 0x6e, + 0xbf, 0x56, 0xe0, 0x57, 0xe9, 0x1c, 0xdd, 0x6e, 0x71, 0x45, 0x5a, 0xdc, 0x5b, 0x0a, 0x1e, 0x08, + 0x6d, 0x33, 0xc7, 0xa8, 0xca, 0x43, 0x9d, 0x6b, 0x82, 0x70, 0xaf, 0x64, 0xeb, 0x16, 0x05, 0x86, + 0x9f, 0x9f, 0x1f, 0x2c, 0x38, 0x8a, 0x57, 0xc2, 0x2f, 0xd8, 0x13, 0xc8, 0x37, 0x90, 0xfa, 0x68, + 0x64, 0x3f, 0x18, 0xbf, 0x4d, 0xa9, 0x9f, 0x0f, 0x5f, 0x66, 0xe4, 0xf4, 0x04, 0x7e, 0xe4, 0xf4, + 0x78, 0x5b, 0xdb, 0xba, 0x5a, 0xcd, 0x56, 0x48, 0x53, 0x27, 0x30, 0x9e, 0xe5, 0x48, 0xfe, 0x59, + 0x60, 0x5e, 0xc1, 0x6a, 0x99, 0xb8, 0x32, 0x2a, 0xef, 0xc9, 0x49, 0x4a, 0x60, 0x4b, 0xb4, 0xbf, + 0xc8, 0x10, 0x4e, 0xe2, 0x73, 0x94, 0xc3, 0x67, 0xfd, 0x57, 0xc3, 0x29, 0x14, 0xc6, 0x5f, 0x29, + 0x3f, 0xec, 0xdf, 0x14, 0xc8, 0x60, 0x4a, 0xf6, 0x72, 0xf9, 0x8a, 0x82, 0x07, 0xc6, 0x48, 0x83, + 0x2c, 0x3e, 0xa7, 0x98, 0x96, 0xa2, 0x39, 0x25, 0x46, 0x71, 0x3a, 0xbe, 0xc1, 0x72, 0xea, 0xb9, + 0x52, 0x57, 0x7c, 0x78, 0xc9, 0x73, 0xb8, 0xb4, 0x48, 0x4a, 0xbc, 0xdc, 0x78, 0x51, 0xc1, 0x7d, + 0xa1, 0x4a, 0x0b, 0xf0, 0x31, 0x2c, 0xf1, 0x4c, 0x56, 0x5d, 0x7a, 0x6e, 0x3c, 0xe7, 0x60, 0x81, + 0x71, 0x70, 0x01, 0xa9, 0x7a, 0xd4, 0x93, 0x8c, 0x82, 0xf2, 0xfc, 0x3f, 0xa9, 0x3e, 0xb6, 0x84, + 0xc5, 0xc3, 0x2f, 0xb0, 0xae, 0xf7, 0x0b, 0x25, 0xc0, 0xc4, 0x50, 0xa6, 0x67, 0x81, 0xe2, 0xd8, + 0x9b, 0x0f, 0xcc, 0x39, 0x20, 0x94, 0x82, 0x2a, 0xec, 0x48, 0x63, 0x40, 0x18, 0x59, 0xb9, 0xdf, + 0x7f, 0x77, 0x59, 0x28, 0xe6, 0x70, 0x0b, 0xe1, 0xbe, 0x50, 0xf6, 0x17, 0x8a, 0x73, 0x38, 0xe3, + 0xf5, 0xdc, 0x78, 0xee, 0xe3, 0x39, 0xea, 0x23, 0x29, 0xe5, 0xf2, 0xd1, 0x0b, 0xed, 0x68, 0xa9, + 0x3b, 0x37, 0xe9, 0xeb, 0x63, 0x05, 0xf7, 0xb3, 0x3c, 0x13, 0x47, 0xea, 0x80, 0xab, 0xd2, 0xb7, + 0x8e, 0xb2, 0x9c, 0x1e, 0xc9, 0x3f, 0x80, 0x3b, 0x7b, 0x83, 0x25, 0xf5, 0x6f, 0x91, 0x5a, 0x89, + 0x5d, 0x2f, 0xec, 0x62, 0x99, 0x08, 0xfd, 0x26, 0x14, 0x51, 0x92, 0x5c, 0xd5, 0x4a, 0x9b, 0x60, + 0x51, 0xcb, 0x86, 0x74, 0x56, 0xf8, 0x9a, 0x82, 0x37, 0x04, 0xee, 0xa5, 0x06, 0xb8, 0xdd, 0x9b, + 0x4d, 0x55, 0xa0, 0x4a, 0xf6, 0xe5, 0x44, 0x73, 0x56, 0x5f, 0x60, 0xac, 0x3e, 0x8f, 0xe0, 0x81, + 0x54, 0x56, 0x63, 0x4d, 0xce, 0x7f, 0xd1, 0x31, 0x57, 0x19, 0x87, 0xc3, 0x99, 0x8c, 0x49, 0x7a, + 0x65, 0x40, 0x0d, 0x5c, 0x56, 0x70, 0x3f, 0xcb, 0xf0, 0xee, 0x32, 0x2c, 0x5c, 0x4d, 0x23, 0xf9, + 0x07, 0xc4, 0x5e, 0x88, 0x76, 0xcf, 0x85, 0x97, 0x40, 0x9f, 0x2d, 0x2d, 0x05, 0x1d, 0x5e, 0x52, + 0x7c, 0x1f, 0xe1, 0x3e, 0xef, 0xdc, 0x78, 0x5c, 0x7c, 0x48, 0x91, 0xd6, 0x5d, 0x24, 0x40, 0x69, + 0x77, 0x91, 0xe2, 0x39, 0x1d, 0x3b, 0x28, 0x1b, 0x5b, 0x60, 0xb3, 0x70, 0xc6, 0xff, 0x9c, 0xc3, + 0xf7, 0x06, 0xde, 0xe7, 0x57, 0xe7, 0xfc, 0x9b, 0x6e, 0x26, 0x71, 0xe2, 0x4f, 0x4f, 0x03, 0x17, + 0xe1, 0x82, 0x47, 0xe6, 0xad, 0x19, 0xb8, 0xa4, 0xfc, 0xf4, 0xb6, 0xbc, 0x75, 0xf6, 0x85, 0x86, + 0xe9, 0x85, 0x43, 0x7c, 0x5b, 0x52, 0x75, 0x67, 0xdb, 0x24, 0x89, 0xd4, 0x60, 0x7e, 0x66, 0x0c, + 0x4e, 0xdd, 0xe9, 0xcc, 0x2b, 0x78, 0x4d, 0x99, 0x04, 0x3c, 0x9d, 0x8d, 0x5f, 0x5d, 0x0f, 0x08, + 0x03, 0x45, 0xb9, 0x29, 0x05, 0xa6, 0xfd, 0x94, 0xb9, 0xf8, 0x3a, 0x82, 0xa3, 0x79, 0x5d, 0xcc, + 0xbe, 0x5d, 0xf1, 0x45, 0x78, 0xa2, 0x88, 0xcb, 0x05, 0x2e, 0x5b, 0xbc, 0xaa, 0xe0, 0x75, 0xac, + 0x35, 0x07, 0x89, 0xd8, 0x9d, 0xe2, 0x61, 0xb8, 0xf3, 0xef, 0xc9, 0x81, 0xe4, 0x19, 0xf8, 0x33, + 0xc6, 0xcc, 0x4f, 0x90, 0xba, 0x74, 0xcc, 0x78, 0x05, 0xfa, 0xa4, 0xba, 0x4c, 0xe4, 0x78, 0x35, + 0xdb, 0xc0, 0xb8, 0x4c, 0xdc, 0x27, 0xd8, 0x29, 0x2c, 0xfe, 0x71, 0x90, 0x2f, 0x93, 0x7e, 0x1c, + 0x14, 0x84, 0x70, 0x26, 0xfa, 0x28, 0x11, 0xeb, 0x60, 0xad, 0xb0, 0x9b, 0x9f, 0xf2, 0xe0, 0xe7, + 0x0a, 0xdd, 0x5a, 0x8d, 0xf9, 0xdf, 0x2e, 0xf1, 0x80, 0x64, 0x5f, 0xa5, 0x8e, 0x99, 0x16, 0x53, + 0xa2, 0xbd, 0xc7, 0x02, 0xf0, 0x0e, 0x82, 0xce, 0x79, 0x2a, 0xf6, 0x95, 0x14, 0xa5, 0x8d, 0x1e, + 0x35, 0x0b, 0x46, 0x22, 0x7c, 0xd9, 0xba, 0x05, 0x8d, 0xd4, 0x29, 0x62, 0x91, 0x58, 0xdc, 0x7c, + 0xf0, 0x66, 0x0f, 0x6b, 0xad, 0x51, 0xa7, 0xcd, 0xa4, 0x15, 0x37, 0xc6, 0x4c, 0xb0, 0x87, 0xed, + 0xcc, 0x85, 0xd6, 0x7e, 0xcf, 0xde, 0xba, 0xbd, 0xad, 0xc0, 0xe3, 0xe9, 0x5c, 0x16, 0x2f, 0xf6, + 0xaf, 0xc0, 0x97, 0x0b, 0xa9, 0x2c, 0x7a, 0xb7, 0xb6, 0x0c, 0xe3, 0x4b, 0x62, 0x72, 0xe5, 0x34, + 0x4c, 0x2c, 0xbd, 0xa1, 0x70, 0x55, 0xa1, 0x57, 0xea, 0x3b, 0x0f, 0xdc, 0x8e, 0x13, 0xd7, 0x36, + 0x6b, 0x0e, 0xec, 0xcf, 0x73, 0xb3, 0x8d, 0x83, 0x45, 0x30, 0x0f, 0x14, 0x1a, 0xc3, 0xab, 0x33, + 0xe1, 0xe3, 0xba, 0x26, 0x83, 0x14, 0xbc, 0x13, 0x17, 0xf8, 0xb8, 0x2e, 0x41, 0x41, 0xc1, 0xb0, + 0x3d, 0xf2, 0x50, 0xe5, 0xc1, 0x29, 0xd3, 0x3d, 0x3b, 0x3d, 0x39, 0x5c, 0xb3, 0x9a, 0x3a, 0xf5, + 0xcb, 0x53, 0x41, 0xff, 0xd0, 0x3b, 0x1f, 0x3f, 0x4e, 0x91, 0x96, 0xde, 0x9e, 0xdc, 0x37, 0x65, + 0xe9, 0xd1, 0x8f, 0x68, 0x27, 0x3f, 0x46, 0xbf, 0x7f, 0x3c, 0xf0, 0xbf, 0x00, 0x00, 0x00, 0xff, + 0xff, 0xfe, 0xfe, 0x7b, 0xca, 0x5f, 0x3b, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/flyteidl/gen/pb-go/flyteidl/service/admin.pb.gw.go b/flyteidl/gen/pb-go/flyteidl/service/admin.pb.gw.go index ea8c99459c..fcdbb30992 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/admin.pb.gw.go +++ b/flyteidl/gen/pb-go/flyteidl/service/admin.pb.gw.go @@ -119,11 +119,11 @@ func request_AdminService_GetTask_0(ctx context.Context, marshaler runtime.Marsh } var ( - filter_AdminService_ListTaskIds_0 = &utilities.DoubleArray{Encoding: map[string]int{"project": 0, "domain": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}} + filter_AdminService_GetTask_1 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "org": 1, "project": 2, "domain": 3, "name": 4, "version": 5}, Base: []int{1, 1, 1, 2, 3, 4, 5, 0, 0, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 2, 2, 3, 4, 5, 6, 7}} ) -func request_AdminService_ListTaskIds_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.NamedEntityIdentifierListRequest +func request_AdminService_GetTask_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.ObjectGetRequest var metadata runtime.ServerMetadata var ( @@ -133,46 +133,79 @@ func request_AdminService_ListTaskIds_0(ctx context.Context, marshaler runtime.M _ = err ) - val, ok = pathParams["project"] + val, ok = pathParams["id.org"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "project") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.org") } - protoReq.Project, err = runtime.String(val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.org", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "project", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.org", err) } - val, ok = pathParams["domain"] + val, ok = pathParams["id.project"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "domain") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.project") } - protoReq.Domain, err = runtime.String(val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.project", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "domain", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.project", err) + } + + val, ok = pathParams["id.domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.domain") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.domain", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.domain", err) + } + + val, ok = pathParams["id.name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.name") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.name", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.name", err) + } + + val, ok = pathParams["id.version"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.version") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.version", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.version", err) } if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListTaskIds_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_GetTask_1); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.ListTaskIds(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.GetTask(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } var ( - filter_AdminService_ListTasks_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "project": 1, "domain": 2, "name": 3}, Base: []int{1, 1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 3, 4, 5}} + filter_AdminService_ListTaskIds_0 = &utilities.DoubleArray{Encoding: map[string]int{"project": 0, "domain": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}} ) -func request_AdminService_ListTasks_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.ResourceListRequest +func request_AdminService_ListTaskIds_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.NamedEntityIdentifierListRequest var metadata runtime.ServerMetadata var ( @@ -182,57 +215,46 @@ func request_AdminService_ListTasks_0(ctx context.Context, marshaler runtime.Mar _ = err ) - val, ok = pathParams["id.project"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.project") - } - - err = runtime.PopulateFieldFromPath(&protoReq, "id.project", val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.project", err) - } - - val, ok = pathParams["id.domain"] + val, ok = pathParams["project"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.domain") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "project") } - err = runtime.PopulateFieldFromPath(&protoReq, "id.domain", val) + protoReq.Project, err = runtime.String(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.domain", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "project", err) } - val, ok = pathParams["id.name"] + val, ok = pathParams["domain"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.name") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "domain") } - err = runtime.PopulateFieldFromPath(&protoReq, "id.name", val) + protoReq.Domain, err = runtime.String(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.name", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "domain", err) } if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListTasks_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListTaskIds_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.ListTasks(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.ListTaskIds(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } var ( - filter_AdminService_ListTasks_1 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "project": 1, "domain": 2}, Base: []int{1, 1, 1, 2, 0, 0}, Check: []int{0, 1, 2, 2, 3, 4}} + filter_AdminService_ListTaskIds_1 = &utilities.DoubleArray{Encoding: map[string]int{"org": 0, "project": 1, "domain": 2}, Base: []int{1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 1, 1, 2, 3, 4}} ) -func request_AdminService_ListTasks_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.ResourceListRequest +func request_AdminService_ListTaskIds_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.NamedEntityIdentifierListRequest var metadata runtime.ServerMetadata var ( @@ -242,63 +264,57 @@ func request_AdminService_ListTasks_1(ctx context.Context, marshaler runtime.Mar _ = err ) - val, ok = pathParams["id.project"] + val, ok = pathParams["org"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.project") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "org") } - err = runtime.PopulateFieldFromPath(&protoReq, "id.project", val) + protoReq.Org, err = runtime.String(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.project", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "org", err) } - val, ok = pathParams["id.domain"] + val, ok = pathParams["project"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.domain") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "project") } - err = runtime.PopulateFieldFromPath(&protoReq, "id.domain", val) + protoReq.Project, err = runtime.String(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.domain", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "project", err) } - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListTasks_1); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + val, ok = pathParams["domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "domain") } - msg, err := client.ListTasks(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} + protoReq.Domain, err = runtime.String(val) -func request_AdminService_CreateWorkflow_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.WorkflowCreateRequest - var metadata runtime.ServerMetadata + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "domain", err) + } - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListTaskIds_1); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.CreateWorkflow(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.ListTaskIds(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } var ( - filter_AdminService_GetWorkflow_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "project": 1, "domain": 2, "name": 3, "version": 4}, Base: []int{1, 1, 1, 2, 3, 4, 0, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 2, 3, 4, 5, 6}} + filter_AdminService_ListTasks_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "project": 1, "domain": 2, "name": 3}, Base: []int{1, 1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 3, 4, 5}} ) -func request_AdminService_GetWorkflow_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.ObjectGetRequest +func request_AdminService_ListTasks_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.ResourceListRequest var metadata runtime.ServerMetadata var ( @@ -341,35 +357,24 @@ func request_AdminService_GetWorkflow_0(ctx context.Context, marshaler runtime.M return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.name", err) } - val, ok = pathParams["id.version"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.version") - } - - err = runtime.PopulateFieldFromPath(&protoReq, "id.version", val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.version", err) - } - if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_GetWorkflow_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListTasks_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.GetWorkflow(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.ListTasks(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } var ( - filter_AdminService_ListWorkflowIds_0 = &utilities.DoubleArray{Encoding: map[string]int{"project": 0, "domain": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}} + filter_AdminService_ListTasks_1 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "org": 1, "project": 2, "domain": 3, "name": 4}, Base: []int{1, 1, 1, 2, 3, 4, 0, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 2, 3, 4, 5, 6}} ) -func request_AdminService_ListWorkflowIds_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.NamedEntityIdentifierListRequest +func request_AdminService_ListTasks_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.ResourceListRequest var metadata runtime.ServerMetadata var ( @@ -379,45 +384,67 @@ func request_AdminService_ListWorkflowIds_0(ctx context.Context, marshaler runti _ = err ) - val, ok = pathParams["project"] + val, ok = pathParams["id.org"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "project") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.org") } - protoReq.Project, err = runtime.String(val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.org", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "project", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.org", err) } - val, ok = pathParams["domain"] + val, ok = pathParams["id.project"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "domain") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.project") } - protoReq.Domain, err = runtime.String(val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.project", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "domain", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.project", err) + } + + val, ok = pathParams["id.domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.domain") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.domain", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.domain", err) + } + + val, ok = pathParams["id.name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.name") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.name", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.name", err) } if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListWorkflowIds_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListTasks_1); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.ListWorkflowIds(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.ListTasks(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } var ( - filter_AdminService_ListWorkflows_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "project": 1, "domain": 2, "name": 3}, Base: []int{1, 1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 3, 4, 5}} + filter_AdminService_ListTasks_2 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "project": 1, "domain": 2}, Base: []int{1, 1, 1, 2, 0, 0}, Check: []int{0, 1, 2, 2, 3, 4}} ) -func request_AdminService_ListWorkflows_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func request_AdminService_ListTasks_2(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq admin.ResourceListRequest var metadata runtime.ServerMetadata @@ -450,34 +477,23 @@ func request_AdminService_ListWorkflows_0(ctx context.Context, marshaler runtime return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.domain", err) } - val, ok = pathParams["id.name"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.name") - } - - err = runtime.PopulateFieldFromPath(&protoReq, "id.name", val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.name", err) - } - if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListWorkflows_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListTasks_2); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.ListWorkflows(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.ListTasks(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } var ( - filter_AdminService_ListWorkflows_1 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "project": 1, "domain": 2}, Base: []int{1, 1, 1, 2, 0, 0}, Check: []int{0, 1, 2, 2, 3, 4}} + filter_AdminService_ListTasks_3 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "org": 1, "project": 2, "domain": 3}, Base: []int{1, 1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 3, 4, 5}} ) -func request_AdminService_ListWorkflows_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func request_AdminService_ListTasks_3(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq admin.ResourceListRequest var metadata runtime.ServerMetadata @@ -488,6 +504,17 @@ func request_AdminService_ListWorkflows_1(ctx context.Context, marshaler runtime _ = err ) + val, ok = pathParams["id.org"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.org") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.org", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.org", err) + } + val, ok = pathParams["id.project"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.project") @@ -513,17 +540,17 @@ func request_AdminService_ListWorkflows_1(ctx context.Context, marshaler runtime if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListWorkflows_1); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListTasks_3); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.ListWorkflows(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.ListTasks(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func request_AdminService_CreateLaunchPlan_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.LaunchPlanCreateRequest +func request_AdminService_CreateWorkflow_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.WorkflowCreateRequest var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -534,16 +561,16 @@ func request_AdminService_CreateLaunchPlan_0(ctx context.Context, marshaler runt return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.CreateLaunchPlan(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.CreateWorkflow(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } var ( - filter_AdminService_GetLaunchPlan_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "project": 1, "domain": 2, "name": 3, "version": 4}, Base: []int{1, 1, 1, 2, 3, 4, 0, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 2, 3, 4, 5, 6}} + filter_AdminService_GetWorkflow_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "project": 1, "domain": 2, "name": 3, "version": 4}, Base: []int{1, 1, 1, 2, 3, 4, 0, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 2, 3, 4, 5, 6}} ) -func request_AdminService_GetLaunchPlan_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func request_AdminService_GetWorkflow_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq admin.ObjectGetRequest var metadata runtime.ServerMetadata @@ -601,21 +628,21 @@ func request_AdminService_GetLaunchPlan_0(ctx context.Context, marshaler runtime if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_GetLaunchPlan_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_GetWorkflow_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.GetLaunchPlan(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.GetWorkflow(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } var ( - filter_AdminService_GetActiveLaunchPlan_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "project": 1, "domain": 2, "name": 3}, Base: []int{1, 1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 3, 4, 5}} + filter_AdminService_GetWorkflow_1 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "org": 1, "project": 2, "domain": 3, "name": 4, "version": 5}, Base: []int{1, 1, 1, 2, 3, 4, 5, 0, 0, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 2, 2, 3, 4, 5, 6, 7}} ) -func request_AdminService_GetActiveLaunchPlan_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.ActiveLaunchPlanRequest +func request_AdminService_GetWorkflow_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.ObjectGetRequest var metadata runtime.ServerMetadata var ( @@ -625,6 +652,17 @@ func request_AdminService_GetActiveLaunchPlan_0(ctx context.Context, marshaler r _ = err ) + val, ok = pathParams["id.org"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.org") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.org", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.org", err) + } + val, ok = pathParams["id.project"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.project") @@ -658,24 +696,35 @@ func request_AdminService_GetActiveLaunchPlan_0(ctx context.Context, marshaler r return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.name", err) } - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_GetActiveLaunchPlan_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + val, ok = pathParams["id.version"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.version") } - msg, err := client.GetActiveLaunchPlan(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + err = runtime.PopulateFieldFromPath(&protoReq, "id.version", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.version", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_GetWorkflow_1); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetWorkflow(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } var ( - filter_AdminService_ListActiveLaunchPlans_0 = &utilities.DoubleArray{Encoding: map[string]int{"project": 0, "domain": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}} + filter_AdminService_ListWorkflowIds_0 = &utilities.DoubleArray{Encoding: map[string]int{"project": 0, "domain": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}} ) -func request_AdminService_ListActiveLaunchPlans_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.ActiveLaunchPlanListRequest +func request_AdminService_ListWorkflowIds_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.NamedEntityIdentifierListRequest var metadata runtime.ServerMetadata var ( @@ -710,20 +759,20 @@ func request_AdminService_ListActiveLaunchPlans_0(ctx context.Context, marshaler if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListActiveLaunchPlans_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListWorkflowIds_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.ListActiveLaunchPlans(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.ListWorkflowIds(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } var ( - filter_AdminService_ListLaunchPlanIds_0 = &utilities.DoubleArray{Encoding: map[string]int{"project": 0, "domain": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}} + filter_AdminService_ListWorkflowIds_1 = &utilities.DoubleArray{Encoding: map[string]int{"org": 0, "project": 1, "domain": 2}, Base: []int{1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 1, 1, 2, 3, 4}} ) -func request_AdminService_ListLaunchPlanIds_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func request_AdminService_ListWorkflowIds_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq admin.NamedEntityIdentifierListRequest var metadata runtime.ServerMetadata @@ -734,6 +783,17 @@ func request_AdminService_ListLaunchPlanIds_0(ctx context.Context, marshaler run _ = err ) + val, ok = pathParams["org"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "org") + } + + protoReq.Org, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "org", err) + } + val, ok = pathParams["project"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "project") @@ -759,20 +819,20 @@ func request_AdminService_ListLaunchPlanIds_0(ctx context.Context, marshaler run if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListLaunchPlanIds_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListWorkflowIds_1); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.ListLaunchPlanIds(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.ListWorkflowIds(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } var ( - filter_AdminService_ListLaunchPlans_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "project": 1, "domain": 2, "name": 3}, Base: []int{1, 1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 3, 4, 5}} + filter_AdminService_ListWorkflows_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "project": 1, "domain": 2, "name": 3}, Base: []int{1, 1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 3, 4, 5}} ) -func request_AdminService_ListLaunchPlans_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func request_AdminService_ListWorkflows_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq admin.ResourceListRequest var metadata runtime.ServerMetadata @@ -819,20 +879,20 @@ func request_AdminService_ListLaunchPlans_0(ctx context.Context, marshaler runti if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListLaunchPlans_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListWorkflows_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.ListLaunchPlans(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.ListWorkflows(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } var ( - filter_AdminService_ListLaunchPlans_1 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "project": 1, "domain": 2}, Base: []int{1, 1, 1, 2, 0, 0}, Check: []int{0, 1, 2, 2, 3, 4}} + filter_AdminService_ListWorkflows_1 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "org": 1, "project": 2, "domain": 3, "name": 4}, Base: []int{1, 1, 1, 2, 3, 4, 0, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 2, 3, 4, 5, 6}} ) -func request_AdminService_ListLaunchPlans_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func request_AdminService_ListWorkflows_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq admin.ResourceListRequest var metadata runtime.ServerMetadata @@ -843,6 +903,17 @@ func request_AdminService_ListLaunchPlans_1(ctx context.Context, marshaler runti _ = err ) + val, ok = pathParams["id.org"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.org") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.org", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.org", err) + } + val, ok = pathParams["id.project"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.project") @@ -865,29 +936,36 @@ func request_AdminService_ListLaunchPlans_1(ctx context.Context, marshaler runti return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.domain", err) } + val, ok = pathParams["id.name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.name") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.name", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.name", err) + } + if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListLaunchPlans_1); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListWorkflows_1); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.ListLaunchPlans(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.ListWorkflows(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func request_AdminService_UpdateLaunchPlan_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.LaunchPlanUpdateRequest - var metadata runtime.ServerMetadata +var ( + filter_AdminService_ListWorkflows_2 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "project": 1, "domain": 2}, Base: []int{1, 1, 1, 2, 0, 0}, Check: []int{0, 1, 2, 2, 3, 4}} +) - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } +func request_AdminService_ListWorkflows_2(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.ResourceListRequest + var metadata runtime.ServerMetadata var ( val string @@ -918,69 +996,80 @@ func request_AdminService_UpdateLaunchPlan_0(ctx context.Context, marshaler runt return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.domain", err) } - val, ok = pathParams["id.name"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.name") + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListWorkflows_2); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - err = runtime.PopulateFieldFromPath(&protoReq, "id.name", val) + msg, err := client.ListWorkflows(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.name", err) - } +} - val, ok = pathParams["id.version"] +var ( + filter_AdminService_ListWorkflows_3 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "org": 1, "project": 2, "domain": 3}, Base: []int{1, 1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 3, 4, 5}} +) + +func request_AdminService_ListWorkflows_3(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.ResourceListRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id.org"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.version") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.org") } - err = runtime.PopulateFieldFromPath(&protoReq, "id.version", val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.org", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.version", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.org", err) } - msg, err := client.UpdateLaunchPlan(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} + val, ok = pathParams["id.project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.project") + } -func request_AdminService_CreateExecution_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.ExecutionCreateRequest - var metadata runtime.ServerMetadata + err = runtime.PopulateFieldFromPath(&protoReq, "id.project", val) - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.project", err) } - msg, err := client.CreateExecution(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err + val, ok = pathParams["id.domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.domain") + } -} + err = runtime.PopulateFieldFromPath(&protoReq, "id.domain", val) -func request_AdminService_RelaunchExecution_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.ExecutionRelaunchRequest - var metadata runtime.ServerMetadata + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.domain", err) + } - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListWorkflows_3); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.RelaunchExecution(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.ListWorkflows(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func request_AdminService_RecoverExecution_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.ExecutionRecoverRequest +func request_AdminService_CreateLaunchPlan_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.LaunchPlanCreateRequest var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -991,17 +1080,17 @@ func request_AdminService_RecoverExecution_0(ctx context.Context, marshaler runt return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.RecoverExecution(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.CreateLaunchPlan(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } var ( - filter_AdminService_GetExecution_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "project": 1, "domain": 2, "name": 3}, Base: []int{1, 1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 3, 4, 5}} + filter_AdminService_GetLaunchPlan_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "project": 1, "domain": 2, "name": 3, "version": 4}, Base: []int{1, 1, 1, 2, 3, 4, 0, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 2, 3, 4, 5, 6}} ) -func request_AdminService_GetExecution_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.WorkflowExecutionGetRequest +func request_AdminService_GetLaunchPlan_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.ObjectGetRequest var metadata runtime.ServerMetadata var ( @@ -1044,29 +1133,36 @@ func request_AdminService_GetExecution_0(ctx context.Context, marshaler runtime. return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.name", err) } + val, ok = pathParams["id.version"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.version") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.version", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.version", err) + } + if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_GetExecution_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_GetLaunchPlan_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.GetExecution(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.GetLaunchPlan(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func request_AdminService_UpdateExecution_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.ExecutionUpdateRequest - var metadata runtime.ServerMetadata +var ( + filter_AdminService_GetLaunchPlan_1 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "org": 1, "project": 2, "domain": 3, "name": 4, "version": 5}, Base: []int{1, 1, 1, 2, 3, 4, 5, 0, 0, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 2, 2, 3, 4, 5, 6, 7}} +) - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } +func request_AdminService_GetLaunchPlan_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.ObjectGetRequest + var metadata runtime.ServerMetadata var ( val string @@ -1075,6 +1171,17 @@ func request_AdminService_UpdateExecution_0(ctx context.Context, marshaler runti _ = err ) + val, ok = pathParams["id.org"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.org") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.org", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.org", err) + } + val, ok = pathParams["id.project"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.project") @@ -1108,17 +1215,35 @@ func request_AdminService_UpdateExecution_0(ctx context.Context, marshaler runti return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.name", err) } - msg, err := client.UpdateExecution(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + val, ok = pathParams["id.version"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.version") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.version", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.version", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_GetLaunchPlan_1); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetLaunchPlan(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } var ( - filter_AdminService_GetExecutionData_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "project": 1, "domain": 2, "name": 3}, Base: []int{1, 1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 3, 4, 5}} + filter_AdminService_GetActiveLaunchPlan_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "project": 1, "domain": 2, "name": 3}, Base: []int{1, 1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 3, 4, 5}} ) -func request_AdminService_GetExecutionData_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.WorkflowExecutionGetDataRequest +func request_AdminService_GetActiveLaunchPlan_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.ActiveLaunchPlanRequest var metadata runtime.ServerMetadata var ( @@ -1164,21 +1289,21 @@ func request_AdminService_GetExecutionData_0(ctx context.Context, marshaler runt if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_GetExecutionData_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_GetActiveLaunchPlan_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.GetExecutionData(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.GetActiveLaunchPlan(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } var ( - filter_AdminService_ListExecutions_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "project": 1, "domain": 2}, Base: []int{1, 1, 1, 2, 0, 0}, Check: []int{0, 1, 2, 2, 3, 4}} + filter_AdminService_GetActiveLaunchPlan_1 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "org": 1, "project": 2, "domain": 3, "name": 4}, Base: []int{1, 1, 1, 2, 3, 4, 0, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 2, 3, 4, 5, 6}} ) -func request_AdminService_ListExecutions_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.ResourceListRequest +func request_AdminService_GetActiveLaunchPlan_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.ActiveLaunchPlanRequest var metadata runtime.ServerMetadata var ( @@ -1188,6 +1313,17 @@ func request_AdminService_ListExecutions_0(ctx context.Context, marshaler runtim _ = err ) + val, ok = pathParams["id.org"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.org") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.org", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.org", err) + } + val, ok = pathParams["id.project"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.project") @@ -1210,29 +1346,36 @@ func request_AdminService_ListExecutions_0(ctx context.Context, marshaler runtim return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.domain", err) } + val, ok = pathParams["id.name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.name") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.name", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.name", err) + } + if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListExecutions_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_GetActiveLaunchPlan_1); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.ListExecutions(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.GetActiveLaunchPlan(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func request_AdminService_TerminateExecution_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.ExecutionTerminateRequest - var metadata runtime.ServerMetadata +var ( + filter_AdminService_ListActiveLaunchPlans_0 = &utilities.DoubleArray{Encoding: map[string]int{"project": 0, "domain": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}} +) - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } +func request_AdminService_ListActiveLaunchPlans_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.ActiveLaunchPlanListRequest + var metadata runtime.ServerMetadata var ( val string @@ -1241,50 +1384,46 @@ func request_AdminService_TerminateExecution_0(ctx context.Context, marshaler ru _ = err ) - val, ok = pathParams["id.project"] + val, ok = pathParams["project"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.project") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "project") } - err = runtime.PopulateFieldFromPath(&protoReq, "id.project", val) + protoReq.Project, err = runtime.String(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.project", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "project", err) } - val, ok = pathParams["id.domain"] + val, ok = pathParams["domain"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.domain") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "domain") } - err = runtime.PopulateFieldFromPath(&protoReq, "id.domain", val) + protoReq.Domain, err = runtime.String(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.domain", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "domain", err) } - val, ok = pathParams["id.name"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.name") + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - - err = runtime.PopulateFieldFromPath(&protoReq, "id.name", val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.name", err) + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListActiveLaunchPlans_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.TerminateExecution(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.ListActiveLaunchPlans(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } var ( - filter_AdminService_GetNodeExecution_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "execution_id": 1, "project": 2, "domain": 3, "name": 4, "node_id": 5}, Base: []int{1, 6, 1, 1, 2, 2, 5, 0, 0, 4, 0, 6, 0}, Check: []int{0, 1, 2, 3, 2, 5, 2, 4, 6, 7, 10, 2, 12}} + filter_AdminService_ListLaunchPlanIds_0 = &utilities.DoubleArray{Encoding: map[string]int{"project": 0, "domain": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}} ) -func request_AdminService_GetNodeExecution_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.NodeExecutionGetRequest +func request_AdminService_ListLaunchPlanIds_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.NamedEntityIdentifierListRequest var metadata runtime.ServerMetadata var ( @@ -1294,68 +1433,46 @@ func request_AdminService_GetNodeExecution_0(ctx context.Context, marshaler runt _ = err ) - val, ok = pathParams["id.execution_id.project"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.execution_id.project") - } - - err = runtime.PopulateFieldFromPath(&protoReq, "id.execution_id.project", val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.execution_id.project", err) - } - - val, ok = pathParams["id.execution_id.domain"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.execution_id.domain") - } - - err = runtime.PopulateFieldFromPath(&protoReq, "id.execution_id.domain", val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.execution_id.domain", err) - } - - val, ok = pathParams["id.execution_id.name"] + val, ok = pathParams["project"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.execution_id.name") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "project") } - err = runtime.PopulateFieldFromPath(&protoReq, "id.execution_id.name", val) + protoReq.Project, err = runtime.String(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.execution_id.name", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "project", err) } - val, ok = pathParams["id.node_id"] + val, ok = pathParams["domain"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.node_id") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "domain") } - err = runtime.PopulateFieldFromPath(&protoReq, "id.node_id", val) + protoReq.Domain, err = runtime.String(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.node_id", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "domain", err) } if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_GetNodeExecution_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListLaunchPlanIds_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.GetNodeExecution(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.ListLaunchPlanIds(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } var ( - filter_AdminService_ListNodeExecutions_0 = &utilities.DoubleArray{Encoding: map[string]int{"workflow_execution_id": 0, "project": 1, "domain": 2, "name": 3}, Base: []int{1, 1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 3, 4, 5}} + filter_AdminService_ListLaunchPlanIds_1 = &utilities.DoubleArray{Encoding: map[string]int{"org": 0, "project": 1, "domain": 2}, Base: []int{1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 1, 1, 2, 3, 4}} ) -func request_AdminService_ListNodeExecutions_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.NodeExecutionListRequest +func request_AdminService_ListLaunchPlanIds_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.NamedEntityIdentifierListRequest var metadata runtime.ServerMetadata var ( @@ -1365,57 +1482,57 @@ func request_AdminService_ListNodeExecutions_0(ctx context.Context, marshaler ru _ = err ) - val, ok = pathParams["workflow_execution_id.project"] + val, ok = pathParams["org"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "workflow_execution_id.project") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "org") } - err = runtime.PopulateFieldFromPath(&protoReq, "workflow_execution_id.project", val) + protoReq.Org, err = runtime.String(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "workflow_execution_id.project", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "org", err) } - val, ok = pathParams["workflow_execution_id.domain"] + val, ok = pathParams["project"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "workflow_execution_id.domain") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "project") } - err = runtime.PopulateFieldFromPath(&protoReq, "workflow_execution_id.domain", val) + protoReq.Project, err = runtime.String(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "workflow_execution_id.domain", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "project", err) } - val, ok = pathParams["workflow_execution_id.name"] + val, ok = pathParams["domain"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "workflow_execution_id.name") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "domain") } - err = runtime.PopulateFieldFromPath(&protoReq, "workflow_execution_id.name", val) + protoReq.Domain, err = runtime.String(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "workflow_execution_id.name", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "domain", err) } if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListNodeExecutions_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListLaunchPlanIds_1); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.ListNodeExecutions(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.ListLaunchPlanIds(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } var ( - filter_AdminService_ListNodeExecutionsForTask_0 = &utilities.DoubleArray{Encoding: map[string]int{"task_execution_id": 0, "node_execution_id": 1, "execution_id": 2, "project": 3, "domain": 4, "name": 5, "node_id": 6, "task_id": 7, "version": 8, "retry_attempt": 9}, Base: []int{1, 20, 1, 1, 1, 4, 3, 2, 7, 5, 3, 0, 0, 0, 9, 6, 0, 15, 9, 0, 17, 12, 0, 19, 15, 0, 19, 18, 0, 20, 0}, Check: []int{0, 1, 2, 3, 4, 2, 6, 7, 2, 9, 10, 5, 8, 11, 2, 15, 16, 2, 18, 19, 2, 21, 22, 2, 24, 25, 2, 27, 28, 2, 30}} + filter_AdminService_ListLaunchPlans_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "project": 1, "domain": 2, "name": 3}, Base: []int{1, 1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 3, 4, 5}} ) -func request_AdminService_ListNodeExecutionsForTask_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.NodeExecutionForTaskListRequest +func request_AdminService_ListLaunchPlans_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.ResourceListRequest var metadata runtime.ServerMetadata var ( @@ -1425,123 +1542,128 @@ func request_AdminService_ListNodeExecutionsForTask_0(ctx context.Context, marsh _ = err ) - val, ok = pathParams["task_execution_id.node_execution_id.execution_id.project"] + val, ok = pathParams["id.project"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "task_execution_id.node_execution_id.execution_id.project") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.project") } - err = runtime.PopulateFieldFromPath(&protoReq, "task_execution_id.node_execution_id.execution_id.project", val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.project", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "task_execution_id.node_execution_id.execution_id.project", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.project", err) } - val, ok = pathParams["task_execution_id.node_execution_id.execution_id.domain"] + val, ok = pathParams["id.domain"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "task_execution_id.node_execution_id.execution_id.domain") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.domain") } - err = runtime.PopulateFieldFromPath(&protoReq, "task_execution_id.node_execution_id.execution_id.domain", val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.domain", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "task_execution_id.node_execution_id.execution_id.domain", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.domain", err) } - val, ok = pathParams["task_execution_id.node_execution_id.execution_id.name"] + val, ok = pathParams["id.name"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "task_execution_id.node_execution_id.execution_id.name") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.name") } - err = runtime.PopulateFieldFromPath(&protoReq, "task_execution_id.node_execution_id.execution_id.name", val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.name", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "task_execution_id.node_execution_id.execution_id.name", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.name", err) } - val, ok = pathParams["task_execution_id.node_execution_id.node_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "task_execution_id.node_execution_id.node_id") + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListLaunchPlans_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - err = runtime.PopulateFieldFromPath(&protoReq, "task_execution_id.node_execution_id.node_id", val) + msg, err := client.ListLaunchPlans(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "task_execution_id.node_execution_id.node_id", err) - } +} - val, ok = pathParams["task_execution_id.task_id.project"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "task_execution_id.task_id.project") - } +var ( + filter_AdminService_ListLaunchPlans_1 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "org": 1, "project": 2, "domain": 3, "name": 4}, Base: []int{1, 1, 1, 2, 3, 4, 0, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 2, 3, 4, 5, 6}} +) - err = runtime.PopulateFieldFromPath(&protoReq, "task_execution_id.task_id.project", val) +func request_AdminService_ListLaunchPlans_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.ResourceListRequest + var metadata runtime.ServerMetadata - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "task_execution_id.task_id.project", err) - } + var ( + val string + ok bool + err error + _ = err + ) - val, ok = pathParams["task_execution_id.task_id.domain"] + val, ok = pathParams["id.org"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "task_execution_id.task_id.domain") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.org") } - err = runtime.PopulateFieldFromPath(&protoReq, "task_execution_id.task_id.domain", val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.org", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "task_execution_id.task_id.domain", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.org", err) } - val, ok = pathParams["task_execution_id.task_id.name"] + val, ok = pathParams["id.project"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "task_execution_id.task_id.name") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.project") } - err = runtime.PopulateFieldFromPath(&protoReq, "task_execution_id.task_id.name", val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.project", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "task_execution_id.task_id.name", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.project", err) } - val, ok = pathParams["task_execution_id.task_id.version"] + val, ok = pathParams["id.domain"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "task_execution_id.task_id.version") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.domain") } - err = runtime.PopulateFieldFromPath(&protoReq, "task_execution_id.task_id.version", val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.domain", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "task_execution_id.task_id.version", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.domain", err) } - val, ok = pathParams["task_execution_id.retry_attempt"] + val, ok = pathParams["id.name"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "task_execution_id.retry_attempt") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.name") } - err = runtime.PopulateFieldFromPath(&protoReq, "task_execution_id.retry_attempt", val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.name", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "task_execution_id.retry_attempt", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.name", err) } if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListNodeExecutionsForTask_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListLaunchPlans_1); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.ListNodeExecutionsForTask(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.ListLaunchPlans(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } var ( - filter_AdminService_GetNodeExecutionData_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "execution_id": 1, "project": 2, "domain": 3, "name": 4, "node_id": 5}, Base: []int{1, 6, 1, 1, 2, 2, 5, 0, 0, 4, 0, 6, 0}, Check: []int{0, 1, 2, 3, 2, 5, 2, 4, 6, 7, 10, 2, 12}} + filter_AdminService_ListLaunchPlans_2 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "project": 1, "domain": 2}, Base: []int{1, 1, 1, 2, 0, 0}, Check: []int{0, 1, 2, 2, 3, 4}} ) -func request_AdminService_GetNodeExecutionData_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.NodeExecutionGetDataRequest +func request_AdminService_ListLaunchPlans_2(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.ResourceListRequest var metadata runtime.ServerMetadata var ( @@ -1551,81 +1673,102 @@ func request_AdminService_GetNodeExecutionData_0(ctx context.Context, marshaler _ = err ) - val, ok = pathParams["id.execution_id.project"] + val, ok = pathParams["id.project"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.execution_id.project") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.project") } - err = runtime.PopulateFieldFromPath(&protoReq, "id.execution_id.project", val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.project", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.execution_id.project", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.project", err) } - val, ok = pathParams["id.execution_id.domain"] + val, ok = pathParams["id.domain"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.execution_id.domain") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.domain") } - err = runtime.PopulateFieldFromPath(&protoReq, "id.execution_id.domain", val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.domain", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.execution_id.domain", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.domain", err) } - val, ok = pathParams["id.execution_id.name"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.execution_id.name") + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - - err = runtime.PopulateFieldFromPath(&protoReq, "id.execution_id.name", val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.execution_id.name", err) + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListLaunchPlans_2); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - val, ok = pathParams["id.node_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.node_id") - } + msg, err := client.ListLaunchPlans(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err - err = runtime.PopulateFieldFromPath(&protoReq, "id.node_id", val) +} + +var ( + filter_AdminService_ListLaunchPlans_3 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "org": 1, "project": 2, "domain": 3}, Base: []int{1, 1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 3, 4, 5}} +) + +func request_AdminService_ListLaunchPlans_3(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.ResourceListRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id.org"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.org") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.org", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.node_id", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.org", err) } - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + val, ok = pathParams["id.project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.project") } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_GetNodeExecutionData_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + + err = runtime.PopulateFieldFromPath(&protoReq, "id.project", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.project", err) } - msg, err := client.GetNodeExecutionData(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err + val, ok = pathParams["id.domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.domain") + } -} + err = runtime.PopulateFieldFromPath(&protoReq, "id.domain", val) -func request_AdminService_RegisterProject_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.ProjectRegisterRequest - var metadata runtime.ServerMetadata + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.domain", err) + } - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListLaunchPlans_3); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.RegisterProject(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.ListLaunchPlans(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func request_AdminService_UpdateProject_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.Project +func request_AdminService_UpdateLaunchPlan_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.LaunchPlanUpdateRequest var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -1643,44 +1786,139 @@ func request_AdminService_UpdateProject_0(ctx context.Context, marshaler runtime _ = err ) - val, ok = pathParams["id"] + val, ok = pathParams["id.project"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.project") } - protoReq.Id, err = runtime.String(val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.project", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.project", err) } - msg, err := client.UpdateProject(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + val, ok = pathParams["id.domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.domain") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.domain", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.domain", err) + } + + val, ok = pathParams["id.name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.name") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.name", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.name", err) + } + + val, ok = pathParams["id.version"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.version") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.version", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.version", err) + } + + msg, err := client.UpdateLaunchPlan(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } var ( - filter_AdminService_ListProjects_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} + filter_AdminService_UpdateLaunchPlan_1 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "org": 1, "project": 2, "domain": 3, "name": 4, "version": 5}, Base: []int{1, 1, 1, 2, 3, 4, 5, 0, 0, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 2, 2, 3, 4, 5, 6, 7}} ) -func request_AdminService_ListProjects_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.ProjectListRequest +func request_AdminService_UpdateLaunchPlan_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.LaunchPlanUpdateRequest var metadata runtime.ServerMetadata + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id.org"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.org") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.org", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.org", err) + } + + val, ok = pathParams["id.project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.project") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.project", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.project", err) + } + + val, ok = pathParams["id.domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.domain") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.domain", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.domain", err) + } + + val, ok = pathParams["id.name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.name") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.name", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.name", err) + } + + val, ok = pathParams["id.version"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.version") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.version", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.version", err) + } + if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListProjects_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_UpdateLaunchPlan_1); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.ListProjects(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.UpdateLaunchPlan(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func request_AdminService_CreateWorkflowEvent_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.WorkflowExecutionEventRequest +func request_AdminService_CreateExecution_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.ExecutionCreateRequest var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -1691,13 +1929,13 @@ func request_AdminService_CreateWorkflowEvent_0(ctx context.Context, marshaler r return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.CreateWorkflowEvent(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.CreateExecution(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func request_AdminService_CreateNodeEvent_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.NodeExecutionEventRequest +func request_AdminService_RelaunchExecution_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.ExecutionRelaunchRequest var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -1708,13 +1946,13 @@ func request_AdminService_CreateNodeEvent_0(ctx context.Context, marshaler runti return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.CreateNodeEvent(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.RelaunchExecution(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func request_AdminService_CreateTaskEvent_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.TaskExecutionEventRequest +func request_AdminService_RecoverExecution_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.ExecutionRecoverRequest var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -1725,17 +1963,17 @@ func request_AdminService_CreateTaskEvent_0(ctx context.Context, marshaler runti return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.CreateTaskEvent(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.RecoverExecution(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } var ( - filter_AdminService_GetTaskExecution_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "node_execution_id": 1, "execution_id": 2, "project": 3, "domain": 4, "name": 5, "node_id": 6, "task_id": 7, "version": 8, "retry_attempt": 9}, Base: []int{1, 20, 1, 1, 1, 4, 3, 2, 7, 5, 3, 0, 0, 0, 9, 6, 0, 15, 9, 0, 17, 12, 0, 19, 15, 0, 19, 18, 0, 20, 0}, Check: []int{0, 1, 2, 3, 4, 2, 6, 7, 2, 9, 10, 5, 8, 11, 2, 15, 16, 2, 18, 19, 2, 21, 22, 2, 24, 25, 2, 27, 28, 2, 30}} + filter_AdminService_GetExecution_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "project": 1, "domain": 2, "name": 3}, Base: []int{1, 1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 3, 4, 5}} ) -func request_AdminService_GetTaskExecution_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.TaskExecutionGetRequest +func request_AdminService_GetExecution_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.WorkflowExecutionGetRequest var metadata runtime.ServerMetadata var ( @@ -1745,125 +1983,134 @@ func request_AdminService_GetTaskExecution_0(ctx context.Context, marshaler runt _ = err ) - val, ok = pathParams["id.node_execution_id.execution_id.project"] + val, ok = pathParams["id.project"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.node_execution_id.execution_id.project") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.project") } - err = runtime.PopulateFieldFromPath(&protoReq, "id.node_execution_id.execution_id.project", val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.project", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.node_execution_id.execution_id.project", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.project", err) } - val, ok = pathParams["id.node_execution_id.execution_id.domain"] + val, ok = pathParams["id.domain"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.node_execution_id.execution_id.domain") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.domain") } - err = runtime.PopulateFieldFromPath(&protoReq, "id.node_execution_id.execution_id.domain", val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.domain", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.node_execution_id.execution_id.domain", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.domain", err) } - val, ok = pathParams["id.node_execution_id.execution_id.name"] + val, ok = pathParams["id.name"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.node_execution_id.execution_id.name") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.name") } - err = runtime.PopulateFieldFromPath(&protoReq, "id.node_execution_id.execution_id.name", val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.name", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.node_execution_id.execution_id.name", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.name", err) } - val, ok = pathParams["id.node_execution_id.node_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.node_execution_id.node_id") + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_GetExecution_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - err = runtime.PopulateFieldFromPath(&protoReq, "id.node_execution_id.node_id", val) + msg, err := client.GetExecution(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.node_execution_id.node_id", err) - } +} - val, ok = pathParams["id.task_id.project"] +var ( + filter_AdminService_GetExecution_1 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "org": 1, "project": 2, "domain": 3, "name": 4}, Base: []int{1, 1, 1, 2, 3, 4, 0, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 2, 3, 4, 5, 6}} +) + +func request_AdminService_GetExecution_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.WorkflowExecutionGetRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id.org"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.task_id.project") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.org") } - err = runtime.PopulateFieldFromPath(&protoReq, "id.task_id.project", val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.org", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.task_id.project", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.org", err) } - val, ok = pathParams["id.task_id.domain"] + val, ok = pathParams["id.project"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.task_id.domain") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.project") } - err = runtime.PopulateFieldFromPath(&protoReq, "id.task_id.domain", val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.project", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.task_id.domain", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.project", err) } - val, ok = pathParams["id.task_id.name"] + val, ok = pathParams["id.domain"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.task_id.name") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.domain") } - err = runtime.PopulateFieldFromPath(&protoReq, "id.task_id.name", val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.task_id.name", err) - } - - val, ok = pathParams["id.task_id.version"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.task_id.version") - } - - err = runtime.PopulateFieldFromPath(&protoReq, "id.task_id.version", val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.domain", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.task_id.version", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.domain", err) } - val, ok = pathParams["id.retry_attempt"] + val, ok = pathParams["id.name"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.retry_attempt") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.name") } - err = runtime.PopulateFieldFromPath(&protoReq, "id.retry_attempt", val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.name", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.retry_attempt", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.name", err) } if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_GetTaskExecution_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_GetExecution_1); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.GetTaskExecution(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.GetExecution(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -var ( - filter_AdminService_ListTaskExecutions_0 = &utilities.DoubleArray{Encoding: map[string]int{"node_execution_id": 0, "execution_id": 1, "project": 2, "domain": 3, "name": 4, "node_id": 5}, Base: []int{1, 6, 1, 1, 2, 2, 5, 0, 0, 4, 0, 6, 0}, Check: []int{0, 1, 2, 3, 2, 5, 2, 4, 6, 7, 10, 2, 12}} -) - -func request_AdminService_ListTaskExecutions_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.TaskExecutionListRequest +func request_AdminService_UpdateExecution_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.ExecutionUpdateRequest var metadata runtime.ServerMetadata + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + var ( val string ok bool @@ -1871,70 +2118,56 @@ func request_AdminService_ListTaskExecutions_0(ctx context.Context, marshaler ru _ = err ) - val, ok = pathParams["node_execution_id.execution_id.project"] + val, ok = pathParams["id.project"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "node_execution_id.execution_id.project") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.project") } - err = runtime.PopulateFieldFromPath(&protoReq, "node_execution_id.execution_id.project", val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.project", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "node_execution_id.execution_id.project", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.project", err) } - val, ok = pathParams["node_execution_id.execution_id.domain"] + val, ok = pathParams["id.domain"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "node_execution_id.execution_id.domain") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.domain") } - err = runtime.PopulateFieldFromPath(&protoReq, "node_execution_id.execution_id.domain", val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.domain", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "node_execution_id.execution_id.domain", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.domain", err) } - val, ok = pathParams["node_execution_id.execution_id.name"] + val, ok = pathParams["id.name"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "node_execution_id.execution_id.name") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.name") } - err = runtime.PopulateFieldFromPath(&protoReq, "node_execution_id.execution_id.name", val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.name", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "node_execution_id.execution_id.name", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.name", err) } - val, ok = pathParams["node_execution_id.node_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "node_execution_id.node_id") - } + msg, err := client.UpdateExecution(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err - err = runtime.PopulateFieldFromPath(&protoReq, "node_execution_id.node_id", val) +} - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "node_execution_id.node_id", err) - } +func request_AdminService_UpdateExecution_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.ExecutionUpdateRequest + var metadata runtime.ServerMetadata - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListTaskExecutions_0); err != nil { + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.ListTaskExecutions(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -var ( - filter_AdminService_GetTaskExecutionData_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "node_execution_id": 1, "execution_id": 2, "project": 3, "domain": 4, "name": 5, "node_id": 6, "task_id": 7, "version": 8, "retry_attempt": 9}, Base: []int{1, 20, 1, 1, 1, 4, 3, 2, 7, 5, 3, 0, 0, 0, 9, 6, 0, 15, 9, 0, 17, 12, 0, 19, 15, 0, 19, 18, 0, 20, 0}, Check: []int{0, 1, 2, 3, 4, 2, 6, 7, 2, 9, 10, 5, 8, 11, 2, 15, 16, 2, 18, 19, 2, 21, 22, 2, 24, 25, 2, 27, 28, 2, 30}} -) - -func request_AdminService_GetTaskExecutionData_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.TaskExecutionGetDataRequest - var metadata runtime.ServerMetadata - var ( val string ok bool @@ -1942,128 +2175,122 @@ func request_AdminService_GetTaskExecutionData_0(ctx context.Context, marshaler _ = err ) - val, ok = pathParams["id.node_execution_id.execution_id.project"] + val, ok = pathParams["id.org"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.node_execution_id.execution_id.project") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.org") } - err = runtime.PopulateFieldFromPath(&protoReq, "id.node_execution_id.execution_id.project", val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.org", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.node_execution_id.execution_id.project", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.org", err) } - val, ok = pathParams["id.node_execution_id.execution_id.domain"] + val, ok = pathParams["id.project"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.node_execution_id.execution_id.domain") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.project") } - err = runtime.PopulateFieldFromPath(&protoReq, "id.node_execution_id.execution_id.domain", val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.project", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.node_execution_id.execution_id.domain", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.project", err) } - val, ok = pathParams["id.node_execution_id.execution_id.name"] + val, ok = pathParams["id.domain"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.node_execution_id.execution_id.name") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.domain") } - err = runtime.PopulateFieldFromPath(&protoReq, "id.node_execution_id.execution_id.name", val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.domain", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.node_execution_id.execution_id.name", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.domain", err) } - val, ok = pathParams["id.node_execution_id.node_id"] + val, ok = pathParams["id.name"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.node_execution_id.node_id") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.name") } - err = runtime.PopulateFieldFromPath(&protoReq, "id.node_execution_id.node_id", val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.name", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.node_execution_id.node_id", err) - } - - val, ok = pathParams["id.task_id.project"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.task_id.project") + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.name", err) } - err = runtime.PopulateFieldFromPath(&protoReq, "id.task_id.project", val) + msg, err := client.UpdateExecution(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.task_id.project", err) - } +} - val, ok = pathParams["id.task_id.domain"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.task_id.domain") - } +var ( + filter_AdminService_GetExecutionData_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "project": 1, "domain": 2, "name": 3}, Base: []int{1, 1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 3, 4, 5}} +) - err = runtime.PopulateFieldFromPath(&protoReq, "id.task_id.domain", val) +func request_AdminService_GetExecutionData_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.WorkflowExecutionGetDataRequest + var metadata runtime.ServerMetadata - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.task_id.domain", err) - } + var ( + val string + ok bool + err error + _ = err + ) - val, ok = pathParams["id.task_id.name"] + val, ok = pathParams["id.project"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.task_id.name") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.project") } - err = runtime.PopulateFieldFromPath(&protoReq, "id.task_id.name", val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.project", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.task_id.name", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.project", err) } - val, ok = pathParams["id.task_id.version"] + val, ok = pathParams["id.domain"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.task_id.version") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.domain") } - err = runtime.PopulateFieldFromPath(&protoReq, "id.task_id.version", val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.domain", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.task_id.version", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.domain", err) } - val, ok = pathParams["id.retry_attempt"] + val, ok = pathParams["id.name"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.retry_attempt") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.name") } - err = runtime.PopulateFieldFromPath(&protoReq, "id.retry_attempt", val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.name", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.retry_attempt", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.name", err) } if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_GetTaskExecutionData_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_GetExecutionData_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.GetTaskExecutionData(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.GetExecutionData(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func request_AdminService_UpdateProjectDomainAttributes_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.ProjectDomainAttributesUpdateRequest - var metadata runtime.ServerMetadata +var ( + filter_AdminService_GetExecutionData_1 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "org": 1, "project": 2, "domain": 3, "name": 4}, Base: []int{1, 1, 1, 2, 3, 4, 0, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 2, 3, 4, 5, 6}} +) - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } +func request_AdminService_GetExecutionData_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.WorkflowExecutionGetDataRequest + var metadata runtime.ServerMetadata var ( val string @@ -2072,93 +2299,69 @@ func request_AdminService_UpdateProjectDomainAttributes_0(ctx context.Context, m _ = err ) - val, ok = pathParams["attributes.project"] + val, ok = pathParams["id.org"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "attributes.project") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.org") } - err = runtime.PopulateFieldFromPath(&protoReq, "attributes.project", val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.org", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "attributes.project", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.org", err) } - val, ok = pathParams["attributes.domain"] + val, ok = pathParams["id.project"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "attributes.domain") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.project") } - err = runtime.PopulateFieldFromPath(&protoReq, "attributes.domain", val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.project", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "attributes.domain", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.project", err) } - msg, err := client.UpdateProjectDomainAttributes(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -var ( - filter_AdminService_GetProjectDomainAttributes_0 = &utilities.DoubleArray{Encoding: map[string]int{"project": 0, "domain": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}} -) - -func request_AdminService_GetProjectDomainAttributes_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.ProjectDomainAttributesGetRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["project"] + val, ok = pathParams["id.domain"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "project") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.domain") } - protoReq.Project, err = runtime.String(val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.domain", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "project", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.domain", err) } - val, ok = pathParams["domain"] + val, ok = pathParams["id.name"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "domain") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.name") } - protoReq.Domain, err = runtime.String(val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.name", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "domain", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.name", err) } if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_GetProjectDomainAttributes_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_GetExecutionData_1); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.GetProjectDomainAttributes(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.GetExecutionData(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func request_AdminService_DeleteProjectDomainAttributes_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.ProjectDomainAttributesDeleteRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } +var ( + filter_AdminService_ListExecutions_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "project": 1, "domain": 2}, Base: []int{1, 1, 1, 2, 0, 0}, Check: []int{0, 1, 2, 2, 3, 4}} +) + +func request_AdminService_ListExecutions_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.ResourceListRequest + var metadata runtime.ServerMetadata var ( val string @@ -2167,44 +2370,47 @@ func request_AdminService_DeleteProjectDomainAttributes_0(ctx context.Context, m _ = err ) - val, ok = pathParams["project"] + val, ok = pathParams["id.project"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "project") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.project") } - protoReq.Project, err = runtime.String(val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.project", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "project", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.project", err) } - val, ok = pathParams["domain"] + val, ok = pathParams["id.domain"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "domain") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.domain") } - protoReq.Domain, err = runtime.String(val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.domain", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "domain", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.domain", err) } - msg, err := client.DeleteProjectDomainAttributes(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListExecutions_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ListExecutions(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func request_AdminService_UpdateProjectAttributes_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.ProjectAttributesUpdateRequest - var metadata runtime.ServerMetadata +var ( + filter_AdminService_ListExecutions_1 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "org": 1, "project": 2, "domain": 3}, Base: []int{1, 1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 3, 4, 5}} +) - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } +func request_AdminService_ListExecutions_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.ResourceListRequest + var metadata runtime.ServerMetadata var ( val string @@ -2213,62 +2419,53 @@ func request_AdminService_UpdateProjectAttributes_0(ctx context.Context, marshal _ = err ) - val, ok = pathParams["attributes.project"] + val, ok = pathParams["id.org"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "attributes.project") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.org") } - err = runtime.PopulateFieldFromPath(&protoReq, "attributes.project", val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.org", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "attributes.project", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.org", err) } - msg, err := client.UpdateProjectAttributes(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -var ( - filter_AdminService_GetProjectAttributes_0 = &utilities.DoubleArray{Encoding: map[string]int{"project": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} -) + val, ok = pathParams["id.project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.project") + } -func request_AdminService_GetProjectAttributes_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.ProjectAttributesGetRequest - var metadata runtime.ServerMetadata + err = runtime.PopulateFieldFromPath(&protoReq, "id.project", val) - var ( - val string - ok bool - err error - _ = err - ) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.project", err) + } - val, ok = pathParams["project"] + val, ok = pathParams["id.domain"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "project") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.domain") } - protoReq.Project, err = runtime.String(val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.domain", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "project", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.domain", err) } if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_GetProjectAttributes_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListExecutions_1); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.GetProjectAttributes(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.ListExecutions(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func request_AdminService_DeleteProjectAttributes_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.ProjectAttributesDeleteRequest +func request_AdminService_TerminateExecution_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.ExecutionTerminateRequest var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -2286,24 +2483,46 @@ func request_AdminService_DeleteProjectAttributes_0(ctx context.Context, marshal _ = err ) - val, ok = pathParams["project"] + val, ok = pathParams["id.project"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "project") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.project") } - protoReq.Project, err = runtime.String(val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.project", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "project", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.project", err) } - msg, err := client.DeleteProjectAttributes(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + val, ok = pathParams["id.domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.domain") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.domain", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.domain", err) + } + + val, ok = pathParams["id.name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.name") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.name", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.name", err) + } + + msg, err := client.TerminateExecution(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func request_AdminService_UpdateWorkflowAttributes_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.WorkflowAttributesUpdateRequest +func request_AdminService_TerminateExecution_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.ExecutionTerminateRequest var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -2321,50 +2540,61 @@ func request_AdminService_UpdateWorkflowAttributes_0(ctx context.Context, marsha _ = err ) - val, ok = pathParams["attributes.project"] + val, ok = pathParams["id.org"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "attributes.project") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.org") } - err = runtime.PopulateFieldFromPath(&protoReq, "attributes.project", val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.org", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "attributes.project", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.org", err) } - val, ok = pathParams["attributes.domain"] + val, ok = pathParams["id.project"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "attributes.domain") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.project") } - err = runtime.PopulateFieldFromPath(&protoReq, "attributes.domain", val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.project", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "attributes.domain", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.project", err) } - val, ok = pathParams["attributes.workflow"] + val, ok = pathParams["id.domain"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "attributes.workflow") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.domain") } - err = runtime.PopulateFieldFromPath(&protoReq, "attributes.workflow", val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.domain", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "attributes.workflow", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.domain", err) } - msg, err := client.UpdateWorkflowAttributes(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + val, ok = pathParams["id.name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.name") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.name", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.name", err) + } + + msg, err := client.TerminateExecution(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } var ( - filter_AdminService_GetWorkflowAttributes_0 = &utilities.DoubleArray{Encoding: map[string]int{"project": 0, "domain": 1, "workflow": 2}, Base: []int{1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 1, 1, 2, 3, 4}} + filter_AdminService_GetNodeExecution_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "execution_id": 1, "project": 2, "domain": 3, "name": 4, "node_id": 5}, Base: []int{1, 6, 1, 1, 2, 2, 5, 0, 0, 4, 0, 6, 0}, Check: []int{0, 1, 2, 3, 2, 5, 2, 4, 6, 7, 10, 2, 12}} ) -func request_AdminService_GetWorkflowAttributes_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.WorkflowAttributesGetRequest +func request_AdminService_GetNodeExecution_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.NodeExecutionGetRequest var metadata runtime.ServerMetadata var ( @@ -2374,62 +2604,69 @@ func request_AdminService_GetWorkflowAttributes_0(ctx context.Context, marshaler _ = err ) - val, ok = pathParams["project"] + val, ok = pathParams["id.execution_id.project"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "project") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.execution_id.project") } - protoReq.Project, err = runtime.String(val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.execution_id.project", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "project", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.execution_id.project", err) } - val, ok = pathParams["domain"] + val, ok = pathParams["id.execution_id.domain"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "domain") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.execution_id.domain") } - protoReq.Domain, err = runtime.String(val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.execution_id.domain", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "domain", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.execution_id.domain", err) } - val, ok = pathParams["workflow"] + val, ok = pathParams["id.execution_id.name"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "workflow") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.execution_id.name") } - protoReq.Workflow, err = runtime.String(val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.execution_id.name", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "workflow", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.execution_id.name", err) + } + + val, ok = pathParams["id.node_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.node_id") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.node_id", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.node_id", err) } if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_GetWorkflowAttributes_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_GetNodeExecution_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.GetWorkflowAttributes(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.GetNodeExecution(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func request_AdminService_DeleteWorkflowAttributes_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.WorkflowAttributesDeleteRequest - var metadata runtime.ServerMetadata +var ( + filter_AdminService_GetNodeExecution_1 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "execution_id": 1, "org": 2, "project": 3, "domain": 4, "name": 5, "node_id": 6}, Base: []int{1, 8, 1, 1, 2, 2, 3, 3, 0, 0, 0, 7, 6, 0, 8, 0}, Check: []int{0, 1, 2, 3, 2, 5, 2, 7, 4, 6, 8, 2, 12, 13, 2, 15}} +) - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } +func request_AdminService_GetNodeExecution_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.NodeExecutionGetRequest + var metadata runtime.ServerMetadata var ( val string @@ -2438,602 +2675,4398 @@ func request_AdminService_DeleteWorkflowAttributes_0(ctx context.Context, marsha _ = err ) - val, ok = pathParams["project"] + val, ok = pathParams["id.execution_id.org"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "project") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.execution_id.org") } - protoReq.Project, err = runtime.String(val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.execution_id.org", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "project", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.execution_id.org", err) } - val, ok = pathParams["domain"] + val, ok = pathParams["id.execution_id.project"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "domain") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.execution_id.project") } - protoReq.Domain, err = runtime.String(val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.execution_id.project", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "domain", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.execution_id.project", err) } - val, ok = pathParams["workflow"] + val, ok = pathParams["id.execution_id.domain"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "workflow") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.execution_id.domain") } - protoReq.Workflow, err = runtime.String(val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.execution_id.domain", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "workflow", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.execution_id.domain", err) } - msg, err := client.DeleteWorkflowAttributes(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} + val, ok = pathParams["id.execution_id.name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.execution_id.name") + } -var ( - filter_AdminService_ListMatchableAttributes_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) + err = runtime.PopulateFieldFromPath(&protoReq, "id.execution_id.name", val) -func request_AdminService_ListMatchableAttributes_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.ListMatchableAttributesRequest - var metadata runtime.ServerMetadata + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.execution_id.name", err) + } + + val, ok = pathParams["id.node_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.node_id") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.node_id", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.node_id", err) + } if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListMatchableAttributes_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_GetNodeExecution_1); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.ListMatchableAttributes(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.GetNodeExecution(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } var ( - filter_AdminService_ListNamedEntities_0 = &utilities.DoubleArray{Encoding: map[string]int{"resource_type": 0, "project": 1, "domain": 2}, Base: []int{1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 1, 1, 2, 3, 4}} + filter_AdminService_ListNodeExecutions_0 = &utilities.DoubleArray{Encoding: map[string]int{"workflow_execution_id": 0, "project": 1, "domain": 2, "name": 3}, Base: []int{1, 1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 3, 4, 5}} ) -func request_AdminService_ListNamedEntities_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.NamedEntityListRequest +func request_AdminService_ListNodeExecutions_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.NodeExecutionListRequest var metadata runtime.ServerMetadata var ( val string - e int32 ok bool err error _ = err ) - val, ok = pathParams["resource_type"] + val, ok = pathParams["workflow_execution_id.project"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "resource_type") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "workflow_execution_id.project") } - e, err = runtime.Enum(val, core.ResourceType_value) + err = runtime.PopulateFieldFromPath(&protoReq, "workflow_execution_id.project", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "resource_type", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "workflow_execution_id.project", err) } - protoReq.ResourceType = core.ResourceType(e) - - val, ok = pathParams["project"] + val, ok = pathParams["workflow_execution_id.domain"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "project") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "workflow_execution_id.domain") } - protoReq.Project, err = runtime.String(val) + err = runtime.PopulateFieldFromPath(&protoReq, "workflow_execution_id.domain", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "project", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "workflow_execution_id.domain", err) } - val, ok = pathParams["domain"] + val, ok = pathParams["workflow_execution_id.name"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "domain") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "workflow_execution_id.name") } - protoReq.Domain, err = runtime.String(val) + err = runtime.PopulateFieldFromPath(&protoReq, "workflow_execution_id.name", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "domain", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "workflow_execution_id.name", err) } if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListNamedEntities_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListNodeExecutions_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.ListNamedEntities(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.ListNodeExecutions(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } var ( - filter_AdminService_GetNamedEntity_0 = &utilities.DoubleArray{Encoding: map[string]int{"resource_type": 0, "id": 1, "project": 2, "domain": 3, "name": 4}, Base: []int{1, 1, 1, 2, 3, 4, 0, 0, 0, 0}, Check: []int{0, 1, 1, 3, 3, 3, 2, 4, 5, 6}} + filter_AdminService_ListNodeExecutions_1 = &utilities.DoubleArray{Encoding: map[string]int{"workflow_execution_id": 0, "org": 1, "project": 2, "domain": 3, "name": 4}, Base: []int{1, 1, 1, 2, 3, 4, 0, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 2, 3, 4, 5, 6}} ) -func request_AdminService_GetNamedEntity_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.NamedEntityGetRequest +func request_AdminService_ListNodeExecutions_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.NodeExecutionListRequest var metadata runtime.ServerMetadata var ( val string - e int32 ok bool err error _ = err ) - val, ok = pathParams["resource_type"] + val, ok = pathParams["workflow_execution_id.org"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "resource_type") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "workflow_execution_id.org") } - e, err = runtime.Enum(val, core.ResourceType_value) + err = runtime.PopulateFieldFromPath(&protoReq, "workflow_execution_id.org", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "resource_type", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "workflow_execution_id.org", err) } - protoReq.ResourceType = core.ResourceType(e) - - val, ok = pathParams["id.project"] + val, ok = pathParams["workflow_execution_id.project"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.project") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "workflow_execution_id.project") } - err = runtime.PopulateFieldFromPath(&protoReq, "id.project", val) + err = runtime.PopulateFieldFromPath(&protoReq, "workflow_execution_id.project", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.project", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "workflow_execution_id.project", err) } - val, ok = pathParams["id.domain"] + val, ok = pathParams["workflow_execution_id.domain"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.domain") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "workflow_execution_id.domain") } - err = runtime.PopulateFieldFromPath(&protoReq, "id.domain", val) + err = runtime.PopulateFieldFromPath(&protoReq, "workflow_execution_id.domain", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.domain", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "workflow_execution_id.domain", err) } - val, ok = pathParams["id.name"] + val, ok = pathParams["workflow_execution_id.name"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.name") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "workflow_execution_id.name") } - err = runtime.PopulateFieldFromPath(&protoReq, "id.name", val) + err = runtime.PopulateFieldFromPath(&protoReq, "workflow_execution_id.name", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.name", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "workflow_execution_id.name", err) } if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_GetNamedEntity_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListNodeExecutions_1); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.GetNamedEntity(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.ListNodeExecutions(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func request_AdminService_UpdateNamedEntity_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.NamedEntityUpdateRequest - var metadata runtime.ServerMetadata +var ( + filter_AdminService_ListNodeExecutionsForTask_0 = &utilities.DoubleArray{Encoding: map[string]int{"task_execution_id": 0, "node_execution_id": 1, "execution_id": 2, "project": 3, "domain": 4, "name": 5, "node_id": 6, "task_id": 7, "version": 8, "retry_attempt": 9}, Base: []int{1, 20, 1, 1, 1, 4, 3, 2, 7, 5, 3, 0, 0, 0, 9, 6, 0, 15, 9, 0, 17, 12, 0, 19, 15, 0, 19, 18, 0, 20, 0}, Check: []int{0, 1, 2, 3, 4, 2, 6, 7, 2, 9, 10, 5, 8, 11, 2, 15, 16, 2, 18, 19, 2, 21, 22, 2, 24, 25, 2, 27, 28, 2, 30}} +) - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } +func request_AdminService_ListNodeExecutionsForTask_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.NodeExecutionForTaskListRequest + var metadata runtime.ServerMetadata var ( val string - e int32 ok bool err error _ = err ) - val, ok = pathParams["resource_type"] + val, ok = pathParams["task_execution_id.node_execution_id.execution_id.project"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "resource_type") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "task_execution_id.node_execution_id.execution_id.project") } - e, err = runtime.Enum(val, core.ResourceType_value) + err = runtime.PopulateFieldFromPath(&protoReq, "task_execution_id.node_execution_id.execution_id.project", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "resource_type", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "task_execution_id.node_execution_id.execution_id.project", err) } - protoReq.ResourceType = core.ResourceType(e) - - val, ok = pathParams["id.project"] + val, ok = pathParams["task_execution_id.node_execution_id.execution_id.domain"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.project") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "task_execution_id.node_execution_id.execution_id.domain") } - err = runtime.PopulateFieldFromPath(&protoReq, "id.project", val) + err = runtime.PopulateFieldFromPath(&protoReq, "task_execution_id.node_execution_id.execution_id.domain", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.project", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "task_execution_id.node_execution_id.execution_id.domain", err) } - val, ok = pathParams["id.domain"] + val, ok = pathParams["task_execution_id.node_execution_id.execution_id.name"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.domain") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "task_execution_id.node_execution_id.execution_id.name") } - err = runtime.PopulateFieldFromPath(&protoReq, "id.domain", val) + err = runtime.PopulateFieldFromPath(&protoReq, "task_execution_id.node_execution_id.execution_id.name", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.domain", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "task_execution_id.node_execution_id.execution_id.name", err) } - val, ok = pathParams["id.name"] + val, ok = pathParams["task_execution_id.node_execution_id.node_id"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.name") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "task_execution_id.node_execution_id.node_id") } - err = runtime.PopulateFieldFromPath(&protoReq, "id.name", val) + err = runtime.PopulateFieldFromPath(&protoReq, "task_execution_id.node_execution_id.node_id", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.name", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "task_execution_id.node_execution_id.node_id", err) } - msg, err := client.UpdateNamedEntity(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func request_AdminService_GetVersion_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.GetVersionRequest - var metadata runtime.ServerMetadata - - msg, err := client.GetVersion(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -var ( - filter_AdminService_GetDescriptionEntity_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "resource_type": 1, "project": 2, "domain": 3, "name": 4, "version": 5}, Base: []int{1, 1, 1, 2, 3, 4, 5, 0, 0, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 2, 2, 3, 4, 5, 6, 7}} -) - -func request_AdminService_GetDescriptionEntity_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.ObjectGetRequest - var metadata runtime.ServerMetadata - - var ( - val string - e int32 - ok bool - err error - _ = err - ) - - val, ok = pathParams["id.resource_type"] + val, ok = pathParams["task_execution_id.task_id.project"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.resource_type") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "task_execution_id.task_id.project") } - err = runtime.PopulateFieldFromPath(&protoReq, "id.resource_type", val) + err = runtime.PopulateFieldFromPath(&protoReq, "task_execution_id.task_id.project", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.resource_type", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "task_execution_id.task_id.project", err) } - protoReq.Id.ResourceType = core.ResourceType(e) - - val, ok = pathParams["id.project"] + val, ok = pathParams["task_execution_id.task_id.domain"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.project") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "task_execution_id.task_id.domain") } - err = runtime.PopulateFieldFromPath(&protoReq, "id.project", val) + err = runtime.PopulateFieldFromPath(&protoReq, "task_execution_id.task_id.domain", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.project", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "task_execution_id.task_id.domain", err) } - val, ok = pathParams["id.domain"] + val, ok = pathParams["task_execution_id.task_id.name"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.domain") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "task_execution_id.task_id.name") } - err = runtime.PopulateFieldFromPath(&protoReq, "id.domain", val) + err = runtime.PopulateFieldFromPath(&protoReq, "task_execution_id.task_id.name", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.domain", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "task_execution_id.task_id.name", err) } - val, ok = pathParams["id.name"] + val, ok = pathParams["task_execution_id.task_id.version"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.name") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "task_execution_id.task_id.version") } - err = runtime.PopulateFieldFromPath(&protoReq, "id.name", val) + err = runtime.PopulateFieldFromPath(&protoReq, "task_execution_id.task_id.version", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.name", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "task_execution_id.task_id.version", err) } - val, ok = pathParams["id.version"] + val, ok = pathParams["task_execution_id.retry_attempt"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.version") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "task_execution_id.retry_attempt") } - err = runtime.PopulateFieldFromPath(&protoReq, "id.version", val) + err = runtime.PopulateFieldFromPath(&protoReq, "task_execution_id.retry_attempt", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.version", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "task_execution_id.retry_attempt", err) } if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_GetDescriptionEntity_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListNodeExecutionsForTask_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.GetDescriptionEntity(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.ListNodeExecutionsForTask(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } var ( - filter_AdminService_ListDescriptionEntities_0 = &utilities.DoubleArray{Encoding: map[string]int{"resource_type": 0, "id": 1, "project": 2, "domain": 3, "name": 4}, Base: []int{1, 1, 1, 2, 3, 4, 0, 0, 0, 0}, Check: []int{0, 1, 1, 3, 3, 3, 2, 4, 5, 6}} + filter_AdminService_ListNodeExecutionsForTask_1 = &utilities.DoubleArray{Encoding: map[string]int{"task_execution_id": 0, "node_execution_id": 1, "execution_id": 2, "org": 3, "project": 4, "domain": 5, "name": 6, "node_id": 7, "task_id": 8, "version": 9, "retry_attempt": 10}, Base: []int{1, 23, 1, 1, 1, 4, 3, 2, 7, 5, 3, 13, 0, 0, 0, 10, 6, 0, 12, 9, 0, 18, 12, 0, 20, 15, 0, 22, 18, 0, 22, 21, 0, 23, 0}, Check: []int{0, 1, 2, 3, 4, 2, 6, 7, 2, 9, 10, 2, 5, 8, 11, 12, 16, 17, 2, 19, 20, 2, 22, 23, 2, 25, 26, 2, 28, 29, 2, 31, 32, 2, 34}} ) -func request_AdminService_ListDescriptionEntities_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.DescriptionEntityListRequest +func request_AdminService_ListNodeExecutionsForTask_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.NodeExecutionForTaskListRequest var metadata runtime.ServerMetadata var ( val string - e int32 ok bool err error _ = err ) - val, ok = pathParams["resource_type"] + val, ok = pathParams["task_execution_id.node_execution_id.execution_id.org"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "resource_type") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "task_execution_id.node_execution_id.execution_id.org") } - e, err = runtime.Enum(val, core.ResourceType_value) + err = runtime.PopulateFieldFromPath(&protoReq, "task_execution_id.node_execution_id.execution_id.org", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "resource_type", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "task_execution_id.node_execution_id.execution_id.org", err) } - protoReq.ResourceType = core.ResourceType(e) - - val, ok = pathParams["id.project"] + val, ok = pathParams["task_execution_id.node_execution_id.execution_id.project"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.project") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "task_execution_id.node_execution_id.execution_id.project") } - err = runtime.PopulateFieldFromPath(&protoReq, "id.project", val) + err = runtime.PopulateFieldFromPath(&protoReq, "task_execution_id.node_execution_id.execution_id.project", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.project", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "task_execution_id.node_execution_id.execution_id.project", err) } - val, ok = pathParams["id.domain"] + val, ok = pathParams["task_execution_id.node_execution_id.execution_id.domain"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.domain") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "task_execution_id.node_execution_id.execution_id.domain") } - err = runtime.PopulateFieldFromPath(&protoReq, "id.domain", val) + err = runtime.PopulateFieldFromPath(&protoReq, "task_execution_id.node_execution_id.execution_id.domain", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.domain", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "task_execution_id.node_execution_id.execution_id.domain", err) } - val, ok = pathParams["id.name"] + val, ok = pathParams["task_execution_id.node_execution_id.execution_id.name"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.name") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "task_execution_id.node_execution_id.execution_id.name") } - err = runtime.PopulateFieldFromPath(&protoReq, "id.name", val) + err = runtime.PopulateFieldFromPath(&protoReq, "task_execution_id.node_execution_id.execution_id.name", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.name", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "task_execution_id.node_execution_id.execution_id.name", err) + } + + val, ok = pathParams["task_execution_id.node_execution_id.node_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "task_execution_id.node_execution_id.node_id") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "task_execution_id.node_execution_id.node_id", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "task_execution_id.node_execution_id.node_id", err) + } + + val, ok = pathParams["task_execution_id.task_id.project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "task_execution_id.task_id.project") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "task_execution_id.task_id.project", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "task_execution_id.task_id.project", err) + } + + val, ok = pathParams["task_execution_id.task_id.domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "task_execution_id.task_id.domain") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "task_execution_id.task_id.domain", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "task_execution_id.task_id.domain", err) + } + + val, ok = pathParams["task_execution_id.task_id.name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "task_execution_id.task_id.name") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "task_execution_id.task_id.name", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "task_execution_id.task_id.name", err) + } + + val, ok = pathParams["task_execution_id.task_id.version"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "task_execution_id.task_id.version") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "task_execution_id.task_id.version", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "task_execution_id.task_id.version", err) + } + + val, ok = pathParams["task_execution_id.retry_attempt"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "task_execution_id.retry_attempt") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "task_execution_id.retry_attempt", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "task_execution_id.retry_attempt", err) } if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListDescriptionEntities_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListNodeExecutionsForTask_1); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.ListDescriptionEntities(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.ListNodeExecutionsForTask(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } var ( - filter_AdminService_ListDescriptionEntities_1 = &utilities.DoubleArray{Encoding: map[string]int{"resource_type": 0, "id": 1, "project": 2, "domain": 3}, Base: []int{1, 1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 1, 3, 3, 2, 4, 5}} + filter_AdminService_GetNodeExecutionData_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "execution_id": 1, "project": 2, "domain": 3, "name": 4, "node_id": 5}, Base: []int{1, 6, 1, 1, 2, 2, 5, 0, 0, 4, 0, 6, 0}, Check: []int{0, 1, 2, 3, 2, 5, 2, 4, 6, 7, 10, 2, 12}} ) -func request_AdminService_ListDescriptionEntities_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.DescriptionEntityListRequest +func request_AdminService_GetNodeExecutionData_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.NodeExecutionGetDataRequest var metadata runtime.ServerMetadata var ( val string - e int32 ok bool err error _ = err ) - val, ok = pathParams["resource_type"] + val, ok = pathParams["id.execution_id.project"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "resource_type") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.execution_id.project") } - e, err = runtime.Enum(val, core.ResourceType_value) + err = runtime.PopulateFieldFromPath(&protoReq, "id.execution_id.project", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "resource_type", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.execution_id.project", err) } - protoReq.ResourceType = core.ResourceType(e) + val, ok = pathParams["id.execution_id.domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.execution_id.domain") + } - val, ok = pathParams["id.project"] + err = runtime.PopulateFieldFromPath(&protoReq, "id.execution_id.domain", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.execution_id.domain", err) + } + + val, ok = pathParams["id.execution_id.name"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.project") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.execution_id.name") } - err = runtime.PopulateFieldFromPath(&protoReq, "id.project", val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.execution_id.name", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.project", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.execution_id.name", err) } - val, ok = pathParams["id.domain"] + val, ok = pathParams["id.node_id"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.domain") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.node_id") } - err = runtime.PopulateFieldFromPath(&protoReq, "id.domain", val) + err = runtime.PopulateFieldFromPath(&protoReq, "id.node_id", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.domain", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.node_id", err) } if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListDescriptionEntities_1); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_GetNodeExecutionData_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.ListDescriptionEntities(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.GetNodeExecutionData(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } var ( - filter_AdminService_GetExecutionMetrics_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "project": 1, "domain": 2, "name": 3}, Base: []int{1, 1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 3, 4, 5}} + filter_AdminService_GetNodeExecutionData_1 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "execution_id": 1, "org": 2, "project": 3, "domain": 4, "name": 5, "node_id": 6}, Base: []int{1, 8, 1, 1, 2, 2, 3, 3, 0, 0, 0, 7, 6, 0, 8, 0}, Check: []int{0, 1, 2, 3, 2, 5, 2, 7, 4, 6, 8, 2, 12, 13, 2, 15}} ) -func request_AdminService_GetExecutionMetrics_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.WorkflowExecutionGetMetricsRequest - var metadata runtime.ServerMetadata +func request_AdminService_GetNodeExecutionData_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.NodeExecutionGetDataRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id.execution_id.org"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.execution_id.org") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.execution_id.org", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.execution_id.org", err) + } + + val, ok = pathParams["id.execution_id.project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.execution_id.project") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.execution_id.project", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.execution_id.project", err) + } + + val, ok = pathParams["id.execution_id.domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.execution_id.domain") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.execution_id.domain", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.execution_id.domain", err) + } + + val, ok = pathParams["id.execution_id.name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.execution_id.name") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.execution_id.name", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.execution_id.name", err) + } + + val, ok = pathParams["id.node_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.node_id") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.node_id", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.node_id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_GetNodeExecutionData_1); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetNodeExecutionData(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_AdminService_RegisterProject_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.ProjectRegisterRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.RegisterProject(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_AdminService_UpdateProject_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.Project + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := client.UpdateProject(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_AdminService_UpdateProject_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.Project + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["org"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "org") + } + + protoReq.Org, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "org", err) + } + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := client.UpdateProject(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +var ( + filter_AdminService_ListProjects_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_AdminService_ListProjects_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.ProjectListRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListProjects_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ListProjects(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_AdminService_CreateWorkflowEvent_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.WorkflowExecutionEventRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.CreateWorkflowEvent(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_AdminService_CreateNodeEvent_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.NodeExecutionEventRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.CreateNodeEvent(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_AdminService_CreateTaskEvent_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.TaskExecutionEventRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.CreateTaskEvent(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +var ( + filter_AdminService_GetTaskExecution_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "node_execution_id": 1, "execution_id": 2, "project": 3, "domain": 4, "name": 5, "node_id": 6, "task_id": 7, "version": 8, "retry_attempt": 9}, Base: []int{1, 20, 1, 1, 1, 4, 3, 2, 7, 5, 3, 0, 0, 0, 9, 6, 0, 15, 9, 0, 17, 12, 0, 19, 15, 0, 19, 18, 0, 20, 0}, Check: []int{0, 1, 2, 3, 4, 2, 6, 7, 2, 9, 10, 5, 8, 11, 2, 15, 16, 2, 18, 19, 2, 21, 22, 2, 24, 25, 2, 27, 28, 2, 30}} +) + +func request_AdminService_GetTaskExecution_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.TaskExecutionGetRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id.node_execution_id.execution_id.project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.node_execution_id.execution_id.project") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.node_execution_id.execution_id.project", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.node_execution_id.execution_id.project", err) + } + + val, ok = pathParams["id.node_execution_id.execution_id.domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.node_execution_id.execution_id.domain") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.node_execution_id.execution_id.domain", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.node_execution_id.execution_id.domain", err) + } + + val, ok = pathParams["id.node_execution_id.execution_id.name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.node_execution_id.execution_id.name") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.node_execution_id.execution_id.name", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.node_execution_id.execution_id.name", err) + } + + val, ok = pathParams["id.node_execution_id.node_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.node_execution_id.node_id") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.node_execution_id.node_id", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.node_execution_id.node_id", err) + } + + val, ok = pathParams["id.task_id.project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.task_id.project") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.task_id.project", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.task_id.project", err) + } + + val, ok = pathParams["id.task_id.domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.task_id.domain") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.task_id.domain", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.task_id.domain", err) + } + + val, ok = pathParams["id.task_id.name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.task_id.name") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.task_id.name", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.task_id.name", err) + } + + val, ok = pathParams["id.task_id.version"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.task_id.version") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.task_id.version", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.task_id.version", err) + } + + val, ok = pathParams["id.retry_attempt"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.retry_attempt") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.retry_attempt", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.retry_attempt", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_GetTaskExecution_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetTaskExecution(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +var ( + filter_AdminService_GetTaskExecution_1 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "node_execution_id": 1, "execution_id": 2, "org": 3, "project": 4, "domain": 5, "name": 6, "node_id": 7, "task_id": 8, "version": 9, "retry_attempt": 10}, Base: []int{1, 23, 1, 1, 1, 4, 3, 2, 7, 5, 3, 13, 0, 0, 0, 10, 6, 0, 12, 9, 0, 18, 12, 0, 20, 15, 0, 22, 18, 0, 22, 21, 0, 23, 0}, Check: []int{0, 1, 2, 3, 4, 2, 6, 7, 2, 9, 10, 2, 5, 8, 11, 12, 16, 17, 2, 19, 20, 2, 22, 23, 2, 25, 26, 2, 28, 29, 2, 31, 32, 2, 34}} +) + +func request_AdminService_GetTaskExecution_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.TaskExecutionGetRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id.node_execution_id.execution_id.org"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.node_execution_id.execution_id.org") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.node_execution_id.execution_id.org", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.node_execution_id.execution_id.org", err) + } + + val, ok = pathParams["id.node_execution_id.execution_id.project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.node_execution_id.execution_id.project") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.node_execution_id.execution_id.project", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.node_execution_id.execution_id.project", err) + } + + val, ok = pathParams["id.node_execution_id.execution_id.domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.node_execution_id.execution_id.domain") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.node_execution_id.execution_id.domain", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.node_execution_id.execution_id.domain", err) + } + + val, ok = pathParams["id.node_execution_id.execution_id.name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.node_execution_id.execution_id.name") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.node_execution_id.execution_id.name", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.node_execution_id.execution_id.name", err) + } + + val, ok = pathParams["id.node_execution_id.node_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.node_execution_id.node_id") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.node_execution_id.node_id", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.node_execution_id.node_id", err) + } + + val, ok = pathParams["id.task_id.project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.task_id.project") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.task_id.project", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.task_id.project", err) + } + + val, ok = pathParams["id.task_id.domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.task_id.domain") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.task_id.domain", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.task_id.domain", err) + } + + val, ok = pathParams["id.task_id.name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.task_id.name") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.task_id.name", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.task_id.name", err) + } + + val, ok = pathParams["id.task_id.version"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.task_id.version") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.task_id.version", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.task_id.version", err) + } + + val, ok = pathParams["id.retry_attempt"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.retry_attempt") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.retry_attempt", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.retry_attempt", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_GetTaskExecution_1); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetTaskExecution(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +var ( + filter_AdminService_ListTaskExecutions_0 = &utilities.DoubleArray{Encoding: map[string]int{"node_execution_id": 0, "execution_id": 1, "project": 2, "domain": 3, "name": 4, "node_id": 5}, Base: []int{1, 6, 1, 1, 2, 2, 5, 0, 0, 4, 0, 6, 0}, Check: []int{0, 1, 2, 3, 2, 5, 2, 4, 6, 7, 10, 2, 12}} +) + +func request_AdminService_ListTaskExecutions_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.TaskExecutionListRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["node_execution_id.execution_id.project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "node_execution_id.execution_id.project") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "node_execution_id.execution_id.project", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "node_execution_id.execution_id.project", err) + } + + val, ok = pathParams["node_execution_id.execution_id.domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "node_execution_id.execution_id.domain") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "node_execution_id.execution_id.domain", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "node_execution_id.execution_id.domain", err) + } + + val, ok = pathParams["node_execution_id.execution_id.name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "node_execution_id.execution_id.name") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "node_execution_id.execution_id.name", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "node_execution_id.execution_id.name", err) + } + + val, ok = pathParams["node_execution_id.node_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "node_execution_id.node_id") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "node_execution_id.node_id", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "node_execution_id.node_id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListTaskExecutions_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ListTaskExecutions(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +var ( + filter_AdminService_ListTaskExecutions_1 = &utilities.DoubleArray{Encoding: map[string]int{"node_execution_id": 0, "execution_id": 1, "org": 2, "project": 3, "domain": 4, "name": 5, "node_id": 6}, Base: []int{1, 8, 1, 1, 2, 2, 3, 3, 0, 0, 0, 7, 6, 0, 8, 0}, Check: []int{0, 1, 2, 3, 2, 5, 2, 7, 4, 6, 8, 2, 12, 13, 2, 15}} +) + +func request_AdminService_ListTaskExecutions_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.TaskExecutionListRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["node_execution_id.execution_id.org"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "node_execution_id.execution_id.org") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "node_execution_id.execution_id.org", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "node_execution_id.execution_id.org", err) + } + + val, ok = pathParams["node_execution_id.execution_id.project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "node_execution_id.execution_id.project") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "node_execution_id.execution_id.project", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "node_execution_id.execution_id.project", err) + } + + val, ok = pathParams["node_execution_id.execution_id.domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "node_execution_id.execution_id.domain") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "node_execution_id.execution_id.domain", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "node_execution_id.execution_id.domain", err) + } + + val, ok = pathParams["node_execution_id.execution_id.name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "node_execution_id.execution_id.name") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "node_execution_id.execution_id.name", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "node_execution_id.execution_id.name", err) + } + + val, ok = pathParams["node_execution_id.node_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "node_execution_id.node_id") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "node_execution_id.node_id", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "node_execution_id.node_id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListTaskExecutions_1); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ListTaskExecutions(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +var ( + filter_AdminService_GetTaskExecutionData_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "node_execution_id": 1, "execution_id": 2, "project": 3, "domain": 4, "name": 5, "node_id": 6, "task_id": 7, "version": 8, "retry_attempt": 9}, Base: []int{1, 20, 1, 1, 1, 4, 3, 2, 7, 5, 3, 0, 0, 0, 9, 6, 0, 15, 9, 0, 17, 12, 0, 19, 15, 0, 19, 18, 0, 20, 0}, Check: []int{0, 1, 2, 3, 4, 2, 6, 7, 2, 9, 10, 5, 8, 11, 2, 15, 16, 2, 18, 19, 2, 21, 22, 2, 24, 25, 2, 27, 28, 2, 30}} +) + +func request_AdminService_GetTaskExecutionData_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.TaskExecutionGetDataRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id.node_execution_id.execution_id.project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.node_execution_id.execution_id.project") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.node_execution_id.execution_id.project", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.node_execution_id.execution_id.project", err) + } + + val, ok = pathParams["id.node_execution_id.execution_id.domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.node_execution_id.execution_id.domain") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.node_execution_id.execution_id.domain", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.node_execution_id.execution_id.domain", err) + } + + val, ok = pathParams["id.node_execution_id.execution_id.name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.node_execution_id.execution_id.name") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.node_execution_id.execution_id.name", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.node_execution_id.execution_id.name", err) + } + + val, ok = pathParams["id.node_execution_id.node_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.node_execution_id.node_id") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.node_execution_id.node_id", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.node_execution_id.node_id", err) + } + + val, ok = pathParams["id.task_id.project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.task_id.project") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.task_id.project", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.task_id.project", err) + } + + val, ok = pathParams["id.task_id.domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.task_id.domain") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.task_id.domain", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.task_id.domain", err) + } + + val, ok = pathParams["id.task_id.name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.task_id.name") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.task_id.name", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.task_id.name", err) + } + + val, ok = pathParams["id.task_id.version"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.task_id.version") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.task_id.version", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.task_id.version", err) + } + + val, ok = pathParams["id.retry_attempt"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.retry_attempt") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.retry_attempt", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.retry_attempt", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_GetTaskExecutionData_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetTaskExecutionData(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +var ( + filter_AdminService_GetTaskExecutionData_1 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "node_execution_id": 1, "execution_id": 2, "org": 3, "project": 4, "domain": 5, "name": 6, "node_id": 7, "task_id": 8, "version": 9, "retry_attempt": 10}, Base: []int{1, 23, 1, 1, 1, 4, 3, 2, 7, 5, 3, 13, 0, 0, 0, 10, 6, 0, 12, 9, 0, 18, 12, 0, 20, 15, 0, 22, 18, 0, 22, 21, 0, 23, 0}, Check: []int{0, 1, 2, 3, 4, 2, 6, 7, 2, 9, 10, 2, 5, 8, 11, 12, 16, 17, 2, 19, 20, 2, 22, 23, 2, 25, 26, 2, 28, 29, 2, 31, 32, 2, 34}} +) + +func request_AdminService_GetTaskExecutionData_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.TaskExecutionGetDataRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id.node_execution_id.execution_id.org"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.node_execution_id.execution_id.org") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.node_execution_id.execution_id.org", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.node_execution_id.execution_id.org", err) + } + + val, ok = pathParams["id.node_execution_id.execution_id.project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.node_execution_id.execution_id.project") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.node_execution_id.execution_id.project", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.node_execution_id.execution_id.project", err) + } + + val, ok = pathParams["id.node_execution_id.execution_id.domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.node_execution_id.execution_id.domain") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.node_execution_id.execution_id.domain", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.node_execution_id.execution_id.domain", err) + } + + val, ok = pathParams["id.node_execution_id.execution_id.name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.node_execution_id.execution_id.name") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.node_execution_id.execution_id.name", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.node_execution_id.execution_id.name", err) + } + + val, ok = pathParams["id.node_execution_id.node_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.node_execution_id.node_id") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.node_execution_id.node_id", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.node_execution_id.node_id", err) + } + + val, ok = pathParams["id.task_id.project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.task_id.project") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.task_id.project", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.task_id.project", err) + } + + val, ok = pathParams["id.task_id.domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.task_id.domain") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.task_id.domain", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.task_id.domain", err) + } + + val, ok = pathParams["id.task_id.name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.task_id.name") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.task_id.name", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.task_id.name", err) + } + + val, ok = pathParams["id.task_id.version"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.task_id.version") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.task_id.version", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.task_id.version", err) + } + + val, ok = pathParams["id.retry_attempt"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.retry_attempt") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.retry_attempt", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.retry_attempt", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_GetTaskExecutionData_1); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetTaskExecutionData(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_AdminService_UpdateProjectDomainAttributes_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.ProjectDomainAttributesUpdateRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["attributes.project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "attributes.project") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "attributes.project", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "attributes.project", err) + } + + val, ok = pathParams["attributes.domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "attributes.domain") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "attributes.domain", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "attributes.domain", err) + } + + msg, err := client.UpdateProjectDomainAttributes(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_AdminService_UpdateProjectDomainAttributes_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.ProjectDomainAttributesUpdateRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["attributes.org"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "attributes.org") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "attributes.org", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "attributes.org", err) + } + + val, ok = pathParams["attributes.project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "attributes.project") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "attributes.project", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "attributes.project", err) + } + + val, ok = pathParams["attributes.domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "attributes.domain") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "attributes.domain", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "attributes.domain", err) + } + + msg, err := client.UpdateProjectDomainAttributes(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +var ( + filter_AdminService_GetProjectDomainAttributes_0 = &utilities.DoubleArray{Encoding: map[string]int{"project": 0, "domain": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}} +) + +func request_AdminService_GetProjectDomainAttributes_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.ProjectDomainAttributesGetRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "project") + } + + protoReq.Project, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "project", err) + } + + val, ok = pathParams["domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "domain") + } + + protoReq.Domain, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "domain", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_GetProjectDomainAttributes_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetProjectDomainAttributes(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +var ( + filter_AdminService_GetProjectDomainAttributes_1 = &utilities.DoubleArray{Encoding: map[string]int{"org": 0, "project": 1, "domain": 2}, Base: []int{1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 1, 1, 2, 3, 4}} +) + +func request_AdminService_GetProjectDomainAttributes_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.ProjectDomainAttributesGetRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["org"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "org") + } + + protoReq.Org, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "org", err) + } + + val, ok = pathParams["project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "project") + } + + protoReq.Project, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "project", err) + } + + val, ok = pathParams["domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "domain") + } + + protoReq.Domain, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "domain", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_GetProjectDomainAttributes_1); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetProjectDomainAttributes(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_AdminService_DeleteProjectDomainAttributes_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.ProjectDomainAttributesDeleteRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "project") + } + + protoReq.Project, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "project", err) + } + + val, ok = pathParams["domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "domain") + } + + protoReq.Domain, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "domain", err) + } + + msg, err := client.DeleteProjectDomainAttributes(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_AdminService_DeleteProjectDomainAttributes_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.ProjectDomainAttributesDeleteRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["org"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "org") + } + + protoReq.Org, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "org", err) + } + + val, ok = pathParams["project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "project") + } + + protoReq.Project, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "project", err) + } + + val, ok = pathParams["domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "domain") + } + + protoReq.Domain, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "domain", err) + } + + msg, err := client.DeleteProjectDomainAttributes(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_AdminService_UpdateProjectAttributes_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.ProjectAttributesUpdateRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["attributes.project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "attributes.project") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "attributes.project", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "attributes.project", err) + } + + msg, err := client.UpdateProjectAttributes(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_AdminService_UpdateProjectAttributes_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.ProjectAttributesUpdateRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["attributes.org"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "attributes.org") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "attributes.org", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "attributes.org", err) + } + + val, ok = pathParams["attributes.project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "attributes.project") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "attributes.project", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "attributes.project", err) + } + + msg, err := client.UpdateProjectAttributes(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +var ( + filter_AdminService_GetProjectAttributes_0 = &utilities.DoubleArray{Encoding: map[string]int{"project": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_AdminService_GetProjectAttributes_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.ProjectAttributesGetRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "project") + } + + protoReq.Project, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "project", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_GetProjectAttributes_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetProjectAttributes(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +var ( + filter_AdminService_GetProjectAttributes_1 = &utilities.DoubleArray{Encoding: map[string]int{"org": 0, "project": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}} +) + +func request_AdminService_GetProjectAttributes_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.ProjectAttributesGetRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["org"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "org") + } + + protoReq.Org, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "org", err) + } + + val, ok = pathParams["project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "project") + } + + protoReq.Project, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "project", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_GetProjectAttributes_1); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetProjectAttributes(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_AdminService_DeleteProjectAttributes_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.ProjectAttributesDeleteRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "project") + } + + protoReq.Project, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "project", err) + } + + msg, err := client.DeleteProjectAttributes(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_AdminService_DeleteProjectAttributes_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.ProjectAttributesDeleteRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["org"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "org") + } + + protoReq.Org, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "org", err) + } + + val, ok = pathParams["project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "project") + } + + protoReq.Project, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "project", err) + } + + msg, err := client.DeleteProjectAttributes(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_AdminService_UpdateWorkflowAttributes_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.WorkflowAttributesUpdateRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["attributes.project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "attributes.project") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "attributes.project", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "attributes.project", err) + } + + val, ok = pathParams["attributes.domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "attributes.domain") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "attributes.domain", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "attributes.domain", err) + } + + val, ok = pathParams["attributes.workflow"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "attributes.workflow") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "attributes.workflow", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "attributes.workflow", err) + } + + msg, err := client.UpdateWorkflowAttributes(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_AdminService_UpdateWorkflowAttributes_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.WorkflowAttributesUpdateRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["attributes.org"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "attributes.org") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "attributes.org", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "attributes.org", err) + } + + val, ok = pathParams["attributes.project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "attributes.project") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "attributes.project", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "attributes.project", err) + } + + val, ok = pathParams["attributes.domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "attributes.domain") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "attributes.domain", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "attributes.domain", err) + } + + val, ok = pathParams["attributes.workflow"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "attributes.workflow") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "attributes.workflow", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "attributes.workflow", err) + } + + msg, err := client.UpdateWorkflowAttributes(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +var ( + filter_AdminService_GetWorkflowAttributes_0 = &utilities.DoubleArray{Encoding: map[string]int{"project": 0, "domain": 1, "workflow": 2}, Base: []int{1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 1, 1, 2, 3, 4}} +) + +func request_AdminService_GetWorkflowAttributes_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.WorkflowAttributesGetRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "project") + } + + protoReq.Project, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "project", err) + } + + val, ok = pathParams["domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "domain") + } + + protoReq.Domain, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "domain", err) + } + + val, ok = pathParams["workflow"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "workflow") + } + + protoReq.Workflow, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "workflow", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_GetWorkflowAttributes_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetWorkflowAttributes(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +var ( + filter_AdminService_GetWorkflowAttributes_1 = &utilities.DoubleArray{Encoding: map[string]int{"org": 0, "project": 1, "domain": 2, "workflow": 3}, Base: []int{1, 1, 2, 3, 4, 0, 0, 0, 0}, Check: []int{0, 1, 1, 1, 1, 2, 3, 4, 5}} +) + +func request_AdminService_GetWorkflowAttributes_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.WorkflowAttributesGetRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["org"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "org") + } + + protoReq.Org, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "org", err) + } + + val, ok = pathParams["project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "project") + } + + protoReq.Project, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "project", err) + } + + val, ok = pathParams["domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "domain") + } + + protoReq.Domain, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "domain", err) + } + + val, ok = pathParams["workflow"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "workflow") + } + + protoReq.Workflow, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "workflow", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_GetWorkflowAttributes_1); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetWorkflowAttributes(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_AdminService_DeleteWorkflowAttributes_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.WorkflowAttributesDeleteRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "project") + } + + protoReq.Project, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "project", err) + } + + val, ok = pathParams["domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "domain") + } + + protoReq.Domain, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "domain", err) + } + + val, ok = pathParams["workflow"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "workflow") + } + + protoReq.Workflow, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "workflow", err) + } + + msg, err := client.DeleteWorkflowAttributes(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_AdminService_DeleteWorkflowAttributes_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.WorkflowAttributesDeleteRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["org"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "org") + } + + protoReq.Org, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "org", err) + } + + val, ok = pathParams["project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "project") + } + + protoReq.Project, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "project", err) + } + + val, ok = pathParams["domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "domain") + } + + protoReq.Domain, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "domain", err) + } + + val, ok = pathParams["workflow"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "workflow") + } + + protoReq.Workflow, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "workflow", err) + } + + msg, err := client.DeleteWorkflowAttributes(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +var ( + filter_AdminService_ListMatchableAttributes_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_AdminService_ListMatchableAttributes_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.ListMatchableAttributesRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListMatchableAttributes_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ListMatchableAttributes(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +var ( + filter_AdminService_ListNamedEntities_0 = &utilities.DoubleArray{Encoding: map[string]int{"resource_type": 0, "project": 1, "domain": 2}, Base: []int{1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 1, 1, 2, 3, 4}} +) + +func request_AdminService_ListNamedEntities_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.NamedEntityListRequest + var metadata runtime.ServerMetadata + + var ( + val string + e int32 + ok bool + err error + _ = err + ) + + val, ok = pathParams["resource_type"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "resource_type") + } + + e, err = runtime.Enum(val, core.ResourceType_value) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "resource_type", err) + } + + protoReq.ResourceType = core.ResourceType(e) + + val, ok = pathParams["project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "project") + } + + protoReq.Project, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "project", err) + } + + val, ok = pathParams["domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "domain") + } + + protoReq.Domain, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "domain", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListNamedEntities_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ListNamedEntities(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +var ( + filter_AdminService_ListNamedEntities_1 = &utilities.DoubleArray{Encoding: map[string]int{"resource_type": 0, "org": 1, "project": 2, "domain": 3}, Base: []int{1, 1, 2, 3, 4, 0, 0, 0, 0}, Check: []int{0, 1, 1, 1, 1, 2, 3, 4, 5}} +) + +func request_AdminService_ListNamedEntities_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.NamedEntityListRequest + var metadata runtime.ServerMetadata + + var ( + val string + e int32 + ok bool + err error + _ = err + ) + + val, ok = pathParams["resource_type"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "resource_type") + } + + e, err = runtime.Enum(val, core.ResourceType_value) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "resource_type", err) + } + + protoReq.ResourceType = core.ResourceType(e) + + val, ok = pathParams["org"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "org") + } + + protoReq.Org, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "org", err) + } + + val, ok = pathParams["project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "project") + } + + protoReq.Project, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "project", err) + } + + val, ok = pathParams["domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "domain") + } + + protoReq.Domain, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "domain", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListNamedEntities_1); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ListNamedEntities(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +var ( + filter_AdminService_GetNamedEntity_0 = &utilities.DoubleArray{Encoding: map[string]int{"resource_type": 0, "id": 1, "project": 2, "domain": 3, "name": 4}, Base: []int{1, 1, 1, 2, 3, 4, 0, 0, 0, 0}, Check: []int{0, 1, 1, 3, 3, 3, 2, 4, 5, 6}} +) + +func request_AdminService_GetNamedEntity_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.NamedEntityGetRequest + var metadata runtime.ServerMetadata + + var ( + val string + e int32 + ok bool + err error + _ = err + ) + + val, ok = pathParams["resource_type"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "resource_type") + } + + e, err = runtime.Enum(val, core.ResourceType_value) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "resource_type", err) + } + + protoReq.ResourceType = core.ResourceType(e) + + val, ok = pathParams["id.project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.project") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.project", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.project", err) + } + + val, ok = pathParams["id.domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.domain") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.domain", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.domain", err) + } + + val, ok = pathParams["id.name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.name") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.name", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.name", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_GetNamedEntity_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetNamedEntity(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +var ( + filter_AdminService_GetNamedEntity_1 = &utilities.DoubleArray{Encoding: map[string]int{"resource_type": 0, "id": 1, "org": 2, "project": 3, "domain": 4, "name": 5}, Base: []int{1, 1, 1, 2, 3, 4, 5, 0, 0, 0, 0, 0}, Check: []int{0, 1, 1, 3, 3, 3, 3, 2, 4, 5, 6, 7}} +) + +func request_AdminService_GetNamedEntity_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.NamedEntityGetRequest + var metadata runtime.ServerMetadata + + var ( + val string + e int32 + ok bool + err error + _ = err + ) + + val, ok = pathParams["resource_type"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "resource_type") + } + + e, err = runtime.Enum(val, core.ResourceType_value) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "resource_type", err) + } + + protoReq.ResourceType = core.ResourceType(e) + + val, ok = pathParams["id.org"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.org") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.org", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.org", err) + } + + val, ok = pathParams["id.project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.project") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.project", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.project", err) + } + + val, ok = pathParams["id.domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.domain") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.domain", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.domain", err) + } + + val, ok = pathParams["id.name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.name") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.name", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.name", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_GetNamedEntity_1); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetNamedEntity(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_AdminService_UpdateNamedEntity_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.NamedEntityUpdateRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + e int32 + ok bool + err error + _ = err + ) + + val, ok = pathParams["resource_type"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "resource_type") + } + + e, err = runtime.Enum(val, core.ResourceType_value) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "resource_type", err) + } + + protoReq.ResourceType = core.ResourceType(e) + + val, ok = pathParams["id.project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.project") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.project", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.project", err) + } + + val, ok = pathParams["id.domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.domain") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.domain", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.domain", err) + } + + val, ok = pathParams["id.name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.name") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.name", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.name", err) + } + + msg, err := client.UpdateNamedEntity(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_AdminService_UpdateNamedEntity_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.NamedEntityUpdateRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + e int32 + ok bool + err error + _ = err + ) + + val, ok = pathParams["resource_type"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "resource_type") + } + + e, err = runtime.Enum(val, core.ResourceType_value) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "resource_type", err) + } + + protoReq.ResourceType = core.ResourceType(e) + + val, ok = pathParams["id.org"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.org") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.org", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.org", err) + } + + val, ok = pathParams["id.project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.project") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.project", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.project", err) + } + + val, ok = pathParams["id.domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.domain") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.domain", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.domain", err) + } + + val, ok = pathParams["id.name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.name") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.name", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.name", err) + } + + msg, err := client.UpdateNamedEntity(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_AdminService_GetVersion_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.GetVersionRequest + var metadata runtime.ServerMetadata + + msg, err := client.GetVersion(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +var ( + filter_AdminService_GetDescriptionEntity_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "resource_type": 1, "project": 2, "domain": 3, "name": 4, "version": 5}, Base: []int{1, 1, 1, 2, 3, 4, 5, 0, 0, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 2, 2, 3, 4, 5, 6, 7}} +) + +func request_AdminService_GetDescriptionEntity_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.ObjectGetRequest + var metadata runtime.ServerMetadata + + var ( + val string + e int32 + ok bool + err error + _ = err + ) + + val, ok = pathParams["id.resource_type"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.resource_type") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.resource_type", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.resource_type", err) + } + + protoReq.Id.ResourceType = core.ResourceType(e) + + val, ok = pathParams["id.project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.project") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.project", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.project", err) + } + + val, ok = pathParams["id.domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.domain") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.domain", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.domain", err) + } + + val, ok = pathParams["id.name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.name") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.name", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.name", err) + } + + val, ok = pathParams["id.version"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.version") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.version", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.version", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_GetDescriptionEntity_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetDescriptionEntity(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +var ( + filter_AdminService_GetDescriptionEntity_1 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "org": 1, "resource_type": 2, "project": 3, "domain": 4, "name": 5, "version": 6}, Base: []int{1, 1, 1, 2, 3, 4, 5, 6, 0, 0, 0, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 2, 2, 2, 3, 4, 5, 6, 7, 8}} +) + +func request_AdminService_GetDescriptionEntity_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.ObjectGetRequest + var metadata runtime.ServerMetadata + + var ( + val string + e int32 + ok bool + err error + _ = err + ) + + val, ok = pathParams["id.org"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.org") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.org", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.org", err) + } + + val, ok = pathParams["id.resource_type"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.resource_type") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.resource_type", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.resource_type", err) + } + + protoReq.Id.ResourceType = core.ResourceType(e) + + val, ok = pathParams["id.project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.project") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.project", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.project", err) + } + + val, ok = pathParams["id.domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.domain") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.domain", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.domain", err) + } + + val, ok = pathParams["id.name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.name") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.name", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.name", err) + } + + val, ok = pathParams["id.version"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.version") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.version", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.version", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_GetDescriptionEntity_1); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetDescriptionEntity(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +var ( + filter_AdminService_ListDescriptionEntities_0 = &utilities.DoubleArray{Encoding: map[string]int{"resource_type": 0, "id": 1, "project": 2, "domain": 3, "name": 4}, Base: []int{1, 1, 1, 2, 3, 4, 0, 0, 0, 0}, Check: []int{0, 1, 1, 3, 3, 3, 2, 4, 5, 6}} +) + +func request_AdminService_ListDescriptionEntities_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.DescriptionEntityListRequest + var metadata runtime.ServerMetadata + + var ( + val string + e int32 + ok bool + err error + _ = err + ) + + val, ok = pathParams["resource_type"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "resource_type") + } + + e, err = runtime.Enum(val, core.ResourceType_value) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "resource_type", err) + } + + protoReq.ResourceType = core.ResourceType(e) + + val, ok = pathParams["id.project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.project") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.project", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.project", err) + } + + val, ok = pathParams["id.domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.domain") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.domain", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.domain", err) + } + + val, ok = pathParams["id.name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.name") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.name", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.name", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListDescriptionEntities_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ListDescriptionEntities(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +var ( + filter_AdminService_ListDescriptionEntities_1 = &utilities.DoubleArray{Encoding: map[string]int{"resource_type": 0, "id": 1, "org": 2, "project": 3, "domain": 4, "name": 5}, Base: []int{1, 1, 1, 2, 3, 4, 5, 0, 0, 0, 0, 0}, Check: []int{0, 1, 1, 3, 3, 3, 3, 2, 4, 5, 6, 7}} +) + +func request_AdminService_ListDescriptionEntities_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.DescriptionEntityListRequest + var metadata runtime.ServerMetadata + + var ( + val string + e int32 + ok bool + err error + _ = err + ) + + val, ok = pathParams["resource_type"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "resource_type") + } + + e, err = runtime.Enum(val, core.ResourceType_value) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "resource_type", err) + } + + protoReq.ResourceType = core.ResourceType(e) + + val, ok = pathParams["id.org"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.org") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.org", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.org", err) + } + + val, ok = pathParams["id.project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.project") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.project", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.project", err) + } + + val, ok = pathParams["id.domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.domain") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.domain", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.domain", err) + } + + val, ok = pathParams["id.name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.name") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.name", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.name", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListDescriptionEntities_1); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ListDescriptionEntities(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +var ( + filter_AdminService_ListDescriptionEntities_2 = &utilities.DoubleArray{Encoding: map[string]int{"resource_type": 0, "id": 1, "project": 2, "domain": 3}, Base: []int{1, 1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 1, 3, 3, 2, 4, 5}} +) + +func request_AdminService_ListDescriptionEntities_2(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.DescriptionEntityListRequest + var metadata runtime.ServerMetadata + + var ( + val string + e int32 + ok bool + err error + _ = err + ) + + val, ok = pathParams["resource_type"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "resource_type") + } + + e, err = runtime.Enum(val, core.ResourceType_value) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "resource_type", err) + } + + protoReq.ResourceType = core.ResourceType(e) + + val, ok = pathParams["id.project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.project") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.project", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.project", err) + } + + val, ok = pathParams["id.domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.domain") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.domain", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.domain", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListDescriptionEntities_2); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ListDescriptionEntities(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +var ( + filter_AdminService_ListDescriptionEntities_3 = &utilities.DoubleArray{Encoding: map[string]int{"resource_type": 0, "id": 1, "org": 2, "project": 3, "domain": 4}, Base: []int{1, 1, 1, 2, 3, 4, 0, 0, 0, 0}, Check: []int{0, 1, 1, 3, 3, 3, 2, 4, 5, 6}} +) + +func request_AdminService_ListDescriptionEntities_3(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.DescriptionEntityListRequest + var metadata runtime.ServerMetadata + + var ( + val string + e int32 + ok bool + err error + _ = err + ) + + val, ok = pathParams["resource_type"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "resource_type") + } + + e, err = runtime.Enum(val, core.ResourceType_value) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "resource_type", err) + } + + protoReq.ResourceType = core.ResourceType(e) + + val, ok = pathParams["id.org"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.org") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.org", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.org", err) + } + + val, ok = pathParams["id.project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.project") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.project", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.project", err) + } + + val, ok = pathParams["id.domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.domain") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.domain", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.domain", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListDescriptionEntities_3); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ListDescriptionEntities(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +var ( + filter_AdminService_GetExecutionMetrics_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "project": 1, "domain": 2, "name": 3}, Base: []int{1, 1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 3, 4, 5}} +) + +func request_AdminService_GetExecutionMetrics_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.WorkflowExecutionGetMetricsRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id.project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.project") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.project", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.project", err) + } + + val, ok = pathParams["id.domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.domain") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.domain", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.domain", err) + } + + val, ok = pathParams["id.name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.name") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.name", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.name", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_GetExecutionMetrics_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetExecutionMetrics(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +var ( + filter_AdminService_GetExecutionMetrics_1 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "org": 1, "project": 2, "domain": 3, "name": 4}, Base: []int{1, 1, 1, 2, 3, 4, 0, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 2, 3, 4, 5, 6}} +) + +func request_AdminService_GetExecutionMetrics_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.WorkflowExecutionGetMetricsRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id.org"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.org") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.org", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.org", err) + } + + val, ok = pathParams["id.project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.project") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.project", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.project", err) + } + + val, ok = pathParams["id.domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.domain") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.domain", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.domain", err) + } + + val, ok = pathParams["id.name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.name") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.name", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.name", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_GetExecutionMetrics_1); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetExecutionMetrics(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +// RegisterAdminServiceHandlerFromEndpoint is same as RegisterAdminServiceHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterAdminServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterAdminServiceHandler(ctx, mux, conn) +} + +// RegisterAdminServiceHandler registers the http handlers for service AdminService to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterAdminServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterAdminServiceHandlerClient(ctx, mux, NewAdminServiceClient(conn)) +} + +// RegisterAdminServiceHandlerClient registers the http handlers for service AdminService +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "AdminServiceClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "AdminServiceClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "AdminServiceClient" to call the correct interceptors. +func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client AdminServiceClient) error { + + mux.Handle("POST", pattern_AdminService_CreateTask_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_CreateTask_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_CreateTask_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_AdminService_GetTask_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_GetTask_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_GetTask_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_AdminService_GetTask_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_GetTask_1(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_GetTask_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_AdminService_ListTaskIds_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_ListTaskIds_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_ListTaskIds_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_AdminService_ListTaskIds_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_ListTaskIds_1(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_ListTaskIds_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_AdminService_ListTasks_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_ListTasks_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_ListTasks_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_AdminService_ListTasks_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_ListTasks_1(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_ListTasks_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_AdminService_ListTasks_2, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_ListTasks_2(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_ListTasks_2(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_AdminService_ListTasks_3, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_ListTasks_3(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_ListTasks_3(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_AdminService_CreateWorkflow_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_CreateWorkflow_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_CreateWorkflow_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_AdminService_GetWorkflow_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_GetWorkflow_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_GetWorkflow_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_AdminService_GetWorkflow_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_GetWorkflow_1(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_GetWorkflow_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_AdminService_ListWorkflowIds_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_ListWorkflowIds_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_ListWorkflowIds_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_AdminService_ListWorkflowIds_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_ListWorkflowIds_1(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_ListWorkflowIds_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_AdminService_ListWorkflows_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_ListWorkflows_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_ListWorkflows_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_AdminService_ListWorkflows_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_ListWorkflows_1(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_ListWorkflows_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_AdminService_ListWorkflows_2, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_ListWorkflows_2(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_ListWorkflows_2(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_AdminService_ListWorkflows_3, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_ListWorkflows_3(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_ListWorkflows_3(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_AdminService_CreateLaunchPlan_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_CreateLaunchPlan_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_CreateLaunchPlan_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_AdminService_GetLaunchPlan_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_GetLaunchPlan_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_GetLaunchPlan_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_AdminService_GetLaunchPlan_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_GetLaunchPlan_1(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_GetLaunchPlan_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_AdminService_GetActiveLaunchPlan_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_GetActiveLaunchPlan_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_GetActiveLaunchPlan_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_AdminService_GetActiveLaunchPlan_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_GetActiveLaunchPlan_1(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_GetActiveLaunchPlan_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_AdminService_ListActiveLaunchPlans_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_ListActiveLaunchPlans_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_ListActiveLaunchPlans_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_AdminService_ListLaunchPlanIds_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_ListLaunchPlanIds_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_ListLaunchPlanIds_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_AdminService_ListLaunchPlanIds_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_ListLaunchPlanIds_1(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_ListLaunchPlanIds_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_AdminService_ListLaunchPlans_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_ListLaunchPlans_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_ListLaunchPlans_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_AdminService_ListLaunchPlans_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_ListLaunchPlans_1(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_ListLaunchPlans_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_AdminService_ListLaunchPlans_2, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_ListLaunchPlans_2(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_ListLaunchPlans_2(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_AdminService_ListLaunchPlans_3, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_ListLaunchPlans_3(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_ListLaunchPlans_3(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PUT", pattern_AdminService_UpdateLaunchPlan_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_UpdateLaunchPlan_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_UpdateLaunchPlan_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PUT", pattern_AdminService_UpdateLaunchPlan_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_UpdateLaunchPlan_1(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_UpdateLaunchPlan_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_AdminService_CreateExecution_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_CreateExecution_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_CreateExecution_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_AdminService_RelaunchExecution_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_RelaunchExecution_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_RelaunchExecution_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_AdminService_RecoverExecution_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_RecoverExecution_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_RecoverExecution_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_AdminService_GetExecution_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_GetExecution_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_GetExecution_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_AdminService_GetExecution_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_GetExecution_1(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_GetExecution_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PUT", pattern_AdminService_UpdateExecution_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_UpdateExecution_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_UpdateExecution_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - var ( - val string - ok bool - err error - _ = err - ) + }) - val, ok = pathParams["id.project"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.project") - } + mux.Handle("PUT", pattern_AdminService_UpdateExecution_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_UpdateExecution_1(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } - err = runtime.PopulateFieldFromPath(&protoReq, "id.project", val) + forward_AdminService_UpdateExecution_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.project", err) - } + }) - val, ok = pathParams["id.domain"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.domain") - } + mux.Handle("GET", pattern_AdminService_GetExecutionData_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_GetExecutionData_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } - err = runtime.PopulateFieldFromPath(&protoReq, "id.domain", val) + forward_AdminService_GetExecutionData_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.domain", err) - } + }) - val, ok = pathParams["id.name"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.name") - } + mux.Handle("GET", pattern_AdminService_GetExecutionData_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_GetExecutionData_1(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } - err = runtime.PopulateFieldFromPath(&protoReq, "id.name", val) + forward_AdminService_GetExecutionData_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.name", err) - } + }) - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_GetExecutionMetrics_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } + mux.Handle("GET", pattern_AdminService_ListExecutions_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_ListExecutions_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } - msg, err := client.GetExecutionMetrics(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err + forward_AdminService_ListExecutions_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) -} + }) -// RegisterAdminServiceHandlerFromEndpoint is same as RegisterAdminServiceHandler but -// automatically dials to "endpoint" and closes the connection when "ctx" gets done. -func RegisterAdminServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { - conn, err := grpc.Dial(endpoint, opts...) - if err != nil { - return err - } - defer func() { + mux.Handle("GET", pattern_AdminService_ListExecutions_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_ListExecutions_1(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - go func() { - <-ctx.Done() - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - }() - }() - - return RegisterAdminServiceHandler(ctx, mux, conn) -} -// RegisterAdminServiceHandler registers the http handlers for service AdminService to "mux". -// The handlers forward requests to the grpc endpoint over "conn". -func RegisterAdminServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { - return RegisterAdminServiceHandlerClient(ctx, mux, NewAdminServiceClient(conn)) -} + forward_AdminService_ListExecutions_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) -// RegisterAdminServiceHandlerClient registers the http handlers for service AdminService -// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "AdminServiceClient". -// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "AdminServiceClient" -// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in -// "AdminServiceClient" to call the correct interceptors. -func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client AdminServiceClient) error { + }) - mux.Handle("POST", pattern_AdminService_CreateTask_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("DELETE", pattern_AdminService_TerminateExecution_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -3042,18 +7075,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_CreateTask_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_TerminateExecution_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_CreateTask_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_TerminateExecution_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_AdminService_GetTask_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("DELETE", pattern_AdminService_TerminateExecution_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -3062,18 +7095,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_GetTask_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_TerminateExecution_1(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_GetTask_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_TerminateExecution_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_AdminService_ListTaskIds_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_AdminService_GetNodeExecution_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -3082,18 +7115,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_ListTaskIds_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_GetNodeExecution_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_ListTaskIds_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_GetNodeExecution_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_AdminService_ListTasks_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_AdminService_GetNodeExecution_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -3102,18 +7135,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_ListTasks_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_GetNodeExecution_1(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_ListTasks_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_GetNodeExecution_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_AdminService_ListTasks_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_AdminService_ListNodeExecutions_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -3122,18 +7155,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_ListTasks_1(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_ListNodeExecutions_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_ListTasks_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_ListNodeExecutions_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("POST", pattern_AdminService_CreateWorkflow_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_AdminService_ListNodeExecutions_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -3142,18 +7175,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_CreateWorkflow_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_ListNodeExecutions_1(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_CreateWorkflow_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_ListNodeExecutions_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_AdminService_GetWorkflow_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_AdminService_ListNodeExecutionsForTask_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -3162,18 +7195,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_GetWorkflow_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_ListNodeExecutionsForTask_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_GetWorkflow_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_ListNodeExecutionsForTask_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_AdminService_ListWorkflowIds_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_AdminService_ListNodeExecutionsForTask_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -3182,18 +7215,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_ListWorkflowIds_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_ListNodeExecutionsForTask_1(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_ListWorkflowIds_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_ListNodeExecutionsForTask_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_AdminService_ListWorkflows_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_AdminService_GetNodeExecutionData_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -3202,18 +7235,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_ListWorkflows_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_GetNodeExecutionData_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_ListWorkflows_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_GetNodeExecutionData_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_AdminService_ListWorkflows_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_AdminService_GetNodeExecutionData_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -3222,18 +7255,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_ListWorkflows_1(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_GetNodeExecutionData_1(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_ListWorkflows_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_GetNodeExecutionData_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("POST", pattern_AdminService_CreateLaunchPlan_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("POST", pattern_AdminService_RegisterProject_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -3242,18 +7275,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_CreateLaunchPlan_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_RegisterProject_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_CreateLaunchPlan_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_RegisterProject_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_AdminService_GetLaunchPlan_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("PUT", pattern_AdminService_UpdateProject_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -3262,18 +7295,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_GetLaunchPlan_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_UpdateProject_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_GetLaunchPlan_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_UpdateProject_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_AdminService_GetActiveLaunchPlan_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("PUT", pattern_AdminService_UpdateProject_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -3282,18 +7315,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_GetActiveLaunchPlan_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_UpdateProject_1(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_GetActiveLaunchPlan_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_UpdateProject_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_AdminService_ListActiveLaunchPlans_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_AdminService_ListProjects_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -3302,18 +7335,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_ListActiveLaunchPlans_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_ListProjects_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_ListActiveLaunchPlans_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_ListProjects_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_AdminService_ListLaunchPlanIds_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("POST", pattern_AdminService_CreateWorkflowEvent_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -3322,18 +7355,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_ListLaunchPlanIds_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_CreateWorkflowEvent_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_ListLaunchPlanIds_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_CreateWorkflowEvent_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_AdminService_ListLaunchPlans_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("POST", pattern_AdminService_CreateNodeEvent_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -3342,18 +7375,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_ListLaunchPlans_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_CreateNodeEvent_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_ListLaunchPlans_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_CreateNodeEvent_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_AdminService_ListLaunchPlans_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("POST", pattern_AdminService_CreateTaskEvent_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -3362,18 +7395,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_ListLaunchPlans_1(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_CreateTaskEvent_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_ListLaunchPlans_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_CreateTaskEvent_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("PUT", pattern_AdminService_UpdateLaunchPlan_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_AdminService_GetTaskExecution_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -3382,18 +7415,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_UpdateLaunchPlan_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_GetTaskExecution_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_UpdateLaunchPlan_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_GetTaskExecution_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("POST", pattern_AdminService_CreateExecution_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_AdminService_GetTaskExecution_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -3402,18 +7435,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_CreateExecution_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_GetTaskExecution_1(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_CreateExecution_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_GetTaskExecution_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("POST", pattern_AdminService_RelaunchExecution_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_AdminService_ListTaskExecutions_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -3422,18 +7455,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_RelaunchExecution_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_ListTaskExecutions_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_RelaunchExecution_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_ListTaskExecutions_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("POST", pattern_AdminService_RecoverExecution_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_AdminService_ListTaskExecutions_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -3442,18 +7475,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_RecoverExecution_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_ListTaskExecutions_1(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_RecoverExecution_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_ListTaskExecutions_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_AdminService_GetExecution_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_AdminService_GetTaskExecutionData_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -3462,18 +7495,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_GetExecution_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_GetTaskExecutionData_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_GetExecution_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_GetTaskExecutionData_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("PUT", pattern_AdminService_UpdateExecution_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_AdminService_GetTaskExecutionData_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -3482,18 +7515,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_UpdateExecution_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_GetTaskExecutionData_1(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_UpdateExecution_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_GetTaskExecutionData_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_AdminService_GetExecutionData_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("PUT", pattern_AdminService_UpdateProjectDomainAttributes_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -3502,18 +7535,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_GetExecutionData_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_UpdateProjectDomainAttributes_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_GetExecutionData_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_UpdateProjectDomainAttributes_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_AdminService_ListExecutions_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("PUT", pattern_AdminService_UpdateProjectDomainAttributes_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -3522,18 +7555,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_ListExecutions_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_UpdateProjectDomainAttributes_1(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_ListExecutions_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_UpdateProjectDomainAttributes_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("DELETE", pattern_AdminService_TerminateExecution_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_AdminService_GetProjectDomainAttributes_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -3542,18 +7575,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_TerminateExecution_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_GetProjectDomainAttributes_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_TerminateExecution_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_GetProjectDomainAttributes_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_AdminService_GetNodeExecution_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_AdminService_GetProjectDomainAttributes_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -3562,18 +7595,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_GetNodeExecution_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_GetProjectDomainAttributes_1(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_GetNodeExecution_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_GetProjectDomainAttributes_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_AdminService_ListNodeExecutions_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("DELETE", pattern_AdminService_DeleteProjectDomainAttributes_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -3582,18 +7615,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_ListNodeExecutions_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_DeleteProjectDomainAttributes_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_ListNodeExecutions_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_DeleteProjectDomainAttributes_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_AdminService_ListNodeExecutionsForTask_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("DELETE", pattern_AdminService_DeleteProjectDomainAttributes_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -3602,18 +7635,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_ListNodeExecutionsForTask_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_DeleteProjectDomainAttributes_1(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_ListNodeExecutionsForTask_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_DeleteProjectDomainAttributes_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_AdminService_GetNodeExecutionData_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("PUT", pattern_AdminService_UpdateProjectAttributes_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -3622,18 +7655,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_GetNodeExecutionData_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_UpdateProjectAttributes_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_GetNodeExecutionData_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_UpdateProjectAttributes_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("POST", pattern_AdminService_RegisterProject_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("PUT", pattern_AdminService_UpdateProjectAttributes_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -3642,18 +7675,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_RegisterProject_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_UpdateProjectAttributes_1(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_RegisterProject_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_UpdateProjectAttributes_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("PUT", pattern_AdminService_UpdateProject_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_AdminService_GetProjectAttributes_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -3662,18 +7695,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_UpdateProject_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_GetProjectAttributes_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_UpdateProject_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_GetProjectAttributes_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_AdminService_ListProjects_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_AdminService_GetProjectAttributes_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -3682,18 +7715,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_ListProjects_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_GetProjectAttributes_1(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_ListProjects_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_GetProjectAttributes_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("POST", pattern_AdminService_CreateWorkflowEvent_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("DELETE", pattern_AdminService_DeleteProjectAttributes_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -3702,18 +7735,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_CreateWorkflowEvent_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_DeleteProjectAttributes_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_CreateWorkflowEvent_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_DeleteProjectAttributes_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("POST", pattern_AdminService_CreateNodeEvent_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("DELETE", pattern_AdminService_DeleteProjectAttributes_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -3722,18 +7755,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_CreateNodeEvent_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_DeleteProjectAttributes_1(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_CreateNodeEvent_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_DeleteProjectAttributes_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("POST", pattern_AdminService_CreateTaskEvent_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("PUT", pattern_AdminService_UpdateWorkflowAttributes_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -3742,18 +7775,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_CreateTaskEvent_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_UpdateWorkflowAttributes_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_CreateTaskEvent_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_UpdateWorkflowAttributes_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_AdminService_GetTaskExecution_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("PUT", pattern_AdminService_UpdateWorkflowAttributes_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -3762,18 +7795,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_GetTaskExecution_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_UpdateWorkflowAttributes_1(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_GetTaskExecution_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_UpdateWorkflowAttributes_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_AdminService_ListTaskExecutions_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_AdminService_GetWorkflowAttributes_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -3782,18 +7815,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_ListTaskExecutions_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_GetWorkflowAttributes_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_ListTaskExecutions_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_GetWorkflowAttributes_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_AdminService_GetTaskExecutionData_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_AdminService_GetWorkflowAttributes_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -3802,18 +7835,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_GetTaskExecutionData_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_GetWorkflowAttributes_1(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_GetTaskExecutionData_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_GetWorkflowAttributes_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("PUT", pattern_AdminService_UpdateProjectDomainAttributes_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("DELETE", pattern_AdminService_DeleteWorkflowAttributes_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -3822,18 +7855,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_UpdateProjectDomainAttributes_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_DeleteWorkflowAttributes_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_UpdateProjectDomainAttributes_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_DeleteWorkflowAttributes_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_AdminService_GetProjectDomainAttributes_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("DELETE", pattern_AdminService_DeleteWorkflowAttributes_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -3842,18 +7875,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_GetProjectDomainAttributes_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_DeleteWorkflowAttributes_1(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_GetProjectDomainAttributes_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_DeleteWorkflowAttributes_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("DELETE", pattern_AdminService_DeleteProjectDomainAttributes_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_AdminService_ListMatchableAttributes_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -3862,18 +7895,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_DeleteProjectDomainAttributes_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_ListMatchableAttributes_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_DeleteProjectDomainAttributes_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_ListMatchableAttributes_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("PUT", pattern_AdminService_UpdateProjectAttributes_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_AdminService_ListNamedEntities_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -3882,18 +7915,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_UpdateProjectAttributes_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_ListNamedEntities_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_UpdateProjectAttributes_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_ListNamedEntities_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_AdminService_GetProjectAttributes_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_AdminService_ListNamedEntities_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -3902,18 +7935,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_GetProjectAttributes_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_ListNamedEntities_1(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_GetProjectAttributes_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_ListNamedEntities_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("DELETE", pattern_AdminService_DeleteProjectAttributes_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_AdminService_GetNamedEntity_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -3922,18 +7955,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_DeleteProjectAttributes_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_GetNamedEntity_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_DeleteProjectAttributes_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_GetNamedEntity_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("PUT", pattern_AdminService_UpdateWorkflowAttributes_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_AdminService_GetNamedEntity_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -3942,18 +7975,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_UpdateWorkflowAttributes_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_GetNamedEntity_1(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_UpdateWorkflowAttributes_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_GetNamedEntity_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_AdminService_GetWorkflowAttributes_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("PUT", pattern_AdminService_UpdateNamedEntity_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -3962,18 +7995,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_GetWorkflowAttributes_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_UpdateNamedEntity_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_GetWorkflowAttributes_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_UpdateNamedEntity_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("DELETE", pattern_AdminService_DeleteWorkflowAttributes_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("PUT", pattern_AdminService_UpdateNamedEntity_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -3982,18 +8015,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_DeleteWorkflowAttributes_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_UpdateNamedEntity_1(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_DeleteWorkflowAttributes_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_UpdateNamedEntity_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_AdminService_ListMatchableAttributes_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_AdminService_GetVersion_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -4002,18 +8035,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_ListMatchableAttributes_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_GetVersion_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_ListMatchableAttributes_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_GetVersion_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_AdminService_ListNamedEntities_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_AdminService_GetDescriptionEntity_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -4022,18 +8055,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_ListNamedEntities_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_GetDescriptionEntity_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_ListNamedEntities_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_GetDescriptionEntity_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_AdminService_GetNamedEntity_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_AdminService_GetDescriptionEntity_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -4042,18 +8075,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_GetNamedEntity_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_GetDescriptionEntity_1(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_GetNamedEntity_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_GetDescriptionEntity_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("PUT", pattern_AdminService_UpdateNamedEntity_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_AdminService_ListDescriptionEntities_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -4062,18 +8095,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_UpdateNamedEntity_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_ListDescriptionEntities_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_UpdateNamedEntity_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_ListDescriptionEntities_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_AdminService_GetVersion_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_AdminService_ListDescriptionEntities_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -4082,18 +8115,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_GetVersion_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_ListDescriptionEntities_1(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_GetVersion_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_ListDescriptionEntities_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_AdminService_GetDescriptionEntity_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_AdminService_ListDescriptionEntities_2, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -4102,18 +8135,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_GetDescriptionEntity_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_ListDescriptionEntities_2(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_GetDescriptionEntity_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_ListDescriptionEntities_2(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_AdminService_ListDescriptionEntities_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_AdminService_ListDescriptionEntities_3, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -4122,18 +8155,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_ListDescriptionEntities_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_ListDescriptionEntities_3(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_ListDescriptionEntities_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_ListDescriptionEntities_3(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_AdminService_ListDescriptionEntities_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_AdminService_GetExecutionMetrics_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -4142,18 +8175,18 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_ListDescriptionEntities_1(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_GetExecutionMetrics_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_ListDescriptionEntities_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_GetExecutionMetrics_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_AdminService_GetExecutionMetrics_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_AdminService_GetExecutionMetrics_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -4162,14 +8195,14 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_GetExecutionMetrics_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_GetExecutionMetrics_1(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_GetExecutionMetrics_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_GetExecutionMetrics_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -4181,38 +8214,66 @@ var ( pattern_AdminService_GetTask_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6}, []string{"api", "v1", "tasks", "id.project", "id.domain", "id.name", "id.version"}, "")) + pattern_AdminService_GetTask_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8}, []string{"api", "v1", "tasks", "org", "id.org", "id.project", "id.domain", "id.name", "id.version"}, "")) + pattern_AdminService_ListTaskIds_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{"api", "v1", "task_ids", "project", "domain"}, "")) + pattern_AdminService_ListTaskIds_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"api", "v1", "tasks", "org", "project", "domain"}, "")) + pattern_AdminService_ListTasks_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"api", "v1", "tasks", "id.project", "id.domain", "id.name"}, "")) - pattern_AdminService_ListTasks_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{"api", "v1", "tasks", "id.project", "id.domain"}, "")) + pattern_AdminService_ListTasks_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7}, []string{"api", "v1", "tasks", "org", "id.org", "id.project", "id.domain", "id.name"}, "")) + + pattern_AdminService_ListTasks_2 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{"api", "v1", "tasks", "id.project", "id.domain"}, "")) + + pattern_AdminService_ListTasks_3 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6}, []string{"api", "v1", "tasks", "org", "id.org", "id.project", "id.domain"}, "")) pattern_AdminService_CreateWorkflow_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"api", "v1", "workflows"}, "")) pattern_AdminService_GetWorkflow_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6}, []string{"api", "v1", "workflows", "id.project", "id.domain", "id.name", "id.version"}, "")) + pattern_AdminService_GetWorkflow_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8}, []string{"api", "v1", "workflows", "org", "id.org", "id.project", "id.domain", "id.name", "id.version"}, "")) + pattern_AdminService_ListWorkflowIds_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{"api", "v1", "workflow_ids", "project", "domain"}, "")) + pattern_AdminService_ListWorkflowIds_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"api", "v1", "workflows", "org", "project", "domain"}, "")) + pattern_AdminService_ListWorkflows_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"api", "v1", "workflows", "id.project", "id.domain", "id.name"}, "")) - pattern_AdminService_ListWorkflows_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{"api", "v1", "workflows", "id.project", "id.domain"}, "")) + pattern_AdminService_ListWorkflows_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7}, []string{"api", "v1", "workflows", "org", "id.org", "id.project", "id.domain", "id.name"}, "")) + + pattern_AdminService_ListWorkflows_2 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{"api", "v1", "workflows", "id.project", "id.domain"}, "")) + + pattern_AdminService_ListWorkflows_3 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6}, []string{"api", "v1", "workflows", "org", "id.org", "id.project", "id.domain"}, "")) pattern_AdminService_CreateLaunchPlan_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"api", "v1", "launch_plans"}, "")) pattern_AdminService_GetLaunchPlan_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6}, []string{"api", "v1", "launch_plans", "id.project", "id.domain", "id.name", "id.version"}, "")) + pattern_AdminService_GetLaunchPlan_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8}, []string{"api", "v1", "launch_plans", "org", "id.org", "id.project", "id.domain", "id.name", "id.version"}, "")) + pattern_AdminService_GetActiveLaunchPlan_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"api", "v1", "active_launch_plans", "id.project", "id.domain", "id.name"}, "")) + pattern_AdminService_GetActiveLaunchPlan_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7}, []string{"api", "v1", "active_launch_plans", "org", "id.org", "id.project", "id.domain", "id.name"}, "")) + pattern_AdminService_ListActiveLaunchPlans_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{"api", "v1", "active_launch_plans", "project", "domain"}, "")) pattern_AdminService_ListLaunchPlanIds_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{"api", "v1", "launch_plan_ids", "project", "domain"}, "")) + pattern_AdminService_ListLaunchPlanIds_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"api", "v1", "launch_plan_ids", "org", "project", "domain"}, "")) + pattern_AdminService_ListLaunchPlans_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"api", "v1", "launch_plans", "id.project", "id.domain", "id.name"}, "")) - pattern_AdminService_ListLaunchPlans_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{"api", "v1", "launch_plans", "id.project", "id.domain"}, "")) + pattern_AdminService_ListLaunchPlans_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7}, []string{"api", "v1", "launch_plans", "org", "id.org", "id.project", "id.domain", "id.name"}, "")) + + pattern_AdminService_ListLaunchPlans_2 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{"api", "v1", "launch_plans", "id.project", "id.domain"}, "")) + + pattern_AdminService_ListLaunchPlans_3 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6}, []string{"api", "v1", "launch_plans", "org", "id.org", "id.project", "id.domain"}, "")) pattern_AdminService_UpdateLaunchPlan_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6}, []string{"api", "v1", "launch_plans", "id.project", "id.domain", "id.name", "id.version"}, "")) + pattern_AdminService_UpdateLaunchPlan_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8}, []string{"api", "v1", "launch_plans", "org", "id.org", "id.project", "id.domain", "id.name", "id.version"}, "")) + pattern_AdminService_CreateExecution_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"api", "v1", "executions"}, "")) pattern_AdminService_RelaunchExecution_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"api", "v1", "executions", "relaunch"}, "")) @@ -4221,26 +8282,46 @@ var ( pattern_AdminService_GetExecution_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"api", "v1", "executions", "id.project", "id.domain", "id.name"}, "")) + pattern_AdminService_GetExecution_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7}, []string{"api", "v1", "executions", "org", "id.org", "id.project", "id.domain", "id.name"}, "")) + pattern_AdminService_UpdateExecution_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"api", "v1", "executions", "id.project", "id.domain", "id.name"}, "")) + pattern_AdminService_UpdateExecution_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7}, []string{"api", "v1", "executions", "org", "id.org", "id.project", "id.domain", "id.name"}, "")) + pattern_AdminService_GetExecutionData_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6}, []string{"api", "v1", "data", "executions", "id.project", "id.domain", "id.name"}, "")) + pattern_AdminService_GetExecutionData_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8}, []string{"api", "v1", "data", "executions", "org", "id.org", "id.project", "id.domain", "id.name"}, "")) + pattern_AdminService_ListExecutions_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{"api", "v1", "executions", "id.project", "id.domain"}, "")) + pattern_AdminService_ListExecutions_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6}, []string{"api", "v1", "executions", "org", "id.org", "id.project", "id.domain"}, "")) + pattern_AdminService_TerminateExecution_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"api", "v1", "executions", "id.project", "id.domain", "id.name"}, "")) + pattern_AdminService_TerminateExecution_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8}, []string{"api", "v1", "data", "executions", "org", "id.org", "id.project", "id.domain", "id.name"}, "")) + pattern_AdminService_GetNodeExecution_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6}, []string{"api", "v1", "node_executions", "id.execution_id.project", "id.execution_id.domain", "id.execution_id.name", "id.node_id"}, "")) + pattern_AdminService_GetNodeExecution_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8}, []string{"api", "v1", "node_executions", "org", "id.execution_id.org", "id.execution_id.project", "id.execution_id.domain", "id.execution_id.name", "id.node_id"}, "")) + pattern_AdminService_ListNodeExecutions_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"api", "v1", "node_executions", "workflow_execution_id.project", "workflow_execution_id.domain", "workflow_execution_id.name"}, "")) + pattern_AdminService_ListNodeExecutions_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7}, []string{"api", "v1", "node_executions", "org", "workflow_execution_id.org", "workflow_execution_id.project", "workflow_execution_id.domain", "workflow_execution_id.name"}, "")) + pattern_AdminService_ListNodeExecutionsForTask_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8, 1, 0, 4, 1, 5, 9, 1, 0, 4, 1, 5, 10, 1, 0, 4, 1, 5, 11, 1, 0, 4, 1, 5, 12}, []string{"api", "v1", "children", "task_executions", "task_execution_id.node_execution_id.execution_id.project", "task_execution_id.node_execution_id.execution_id.domain", "task_execution_id.node_execution_id.execution_id.name", "task_execution_id.node_execution_id.node_id", "task_execution_id.task_id.project", "task_execution_id.task_id.domain", "task_execution_id.task_id.name", "task_execution_id.task_id.version", "task_execution_id.retry_attempt"}, "")) + pattern_AdminService_ListNodeExecutionsForTask_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8, 1, 0, 4, 1, 5, 9, 1, 0, 4, 1, 5, 10, 1, 0, 4, 1, 5, 11, 1, 0, 4, 1, 5, 12, 1, 0, 4, 1, 5, 13, 1, 0, 4, 1, 5, 14}, []string{"api", "v1", "children", "task_executions", "org", "task_execution_id.node_execution_id.execution_id.org", "task_execution_id.node_execution_id.execution_id.project", "task_execution_id.node_execution_id.execution_id.domain", "task_execution_id.node_execution_id.execution_id.name", "task_execution_id.node_execution_id.node_id", "task_execution_id.task_id.project", "task_execution_id.task_id.domain", "task_execution_id.task_id.name", "task_execution_id.task_id.version", "task_execution_id.retry_attempt"}, "")) + pattern_AdminService_GetNodeExecutionData_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7}, []string{"api", "v1", "data", "node_executions", "id.execution_id.project", "id.execution_id.domain", "id.execution_id.name", "id.node_id"}, "")) + pattern_AdminService_GetNodeExecutionData_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8, 1, 0, 4, 1, 5, 9}, []string{"api", "v1", "data", "node_executions", "org", "id.execution_id.org", "id.execution_id.project", "id.execution_id.domain", "id.execution_id.name", "id.node_id"}, "")) + pattern_AdminService_RegisterProject_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"api", "v1", "projects"}, "")) pattern_AdminService_UpdateProject_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"api", "v1", "projects", "id"}, "")) + pattern_AdminService_UpdateProject_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{"api", "v1", "projects", "org", "id"}, "")) + pattern_AdminService_ListProjects_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"api", "v1", "projects"}, "")) pattern_AdminService_CreateWorkflowEvent_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"api", "v1", "events", "workflows"}, "")) @@ -4251,45 +8332,83 @@ var ( pattern_AdminService_GetTaskExecution_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8, 1, 0, 4, 1, 5, 9, 1, 0, 4, 1, 5, 10, 1, 0, 4, 1, 5, 11}, []string{"api", "v1", "task_executions", "id.node_execution_id.execution_id.project", "id.node_execution_id.execution_id.domain", "id.node_execution_id.execution_id.name", "id.node_execution_id.node_id", "id.task_id.project", "id.task_id.domain", "id.task_id.name", "id.task_id.version", "id.retry_attempt"}, "")) + pattern_AdminService_GetTaskExecution_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8, 1, 0, 4, 1, 5, 9, 1, 0, 4, 1, 5, 10, 1, 0, 4, 1, 5, 11, 1, 0, 4, 1, 5, 12, 1, 0, 4, 1, 5, 13}, []string{"api", "v1", "task_executions", "org", "id.node_execution_id.execution_id.org", "id.node_execution_id.execution_id.project", "id.node_execution_id.execution_id.domain", "id.node_execution_id.execution_id.name", "id.node_execution_id.node_id", "id.task_id.project", "id.task_id.domain", "id.task_id.name", "id.task_id.version", "id.retry_attempt"}, "")) + pattern_AdminService_ListTaskExecutions_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6}, []string{"api", "v1", "task_executions", "node_execution_id.execution_id.project", "node_execution_id.execution_id.domain", "node_execution_id.execution_id.name", "node_execution_id.node_id"}, "")) + pattern_AdminService_ListTaskExecutions_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8}, []string{"api", "v1", "task_executions", "org", "node_execution_id.execution_id.org", "node_execution_id.execution_id.project", "node_execution_id.execution_id.domain", "node_execution_id.execution_id.name", "node_execution_id.node_id"}, "")) + pattern_AdminService_GetTaskExecutionData_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8, 1, 0, 4, 1, 5, 9, 1, 0, 4, 1, 5, 10, 1, 0, 4, 1, 5, 11, 1, 0, 4, 1, 5, 12}, []string{"api", "v1", "data", "task_executions", "id.node_execution_id.execution_id.project", "id.node_execution_id.execution_id.domain", "id.node_execution_id.execution_id.name", "id.node_execution_id.node_id", "id.task_id.project", "id.task_id.domain", "id.task_id.name", "id.task_id.version", "id.retry_attempt"}, "")) + pattern_AdminService_GetTaskExecutionData_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8, 1, 0, 4, 1, 5, 9, 1, 0, 4, 1, 5, 10, 1, 0, 4, 1, 5, 11, 1, 0, 4, 1, 5, 12, 1, 0, 4, 1, 5, 13, 1, 0, 4, 1, 5, 14}, []string{"api", "v1", "data", "task_executions", "org", "id.node_execution_id.execution_id.org", "id.node_execution_id.execution_id.project", "id.node_execution_id.execution_id.domain", "id.node_execution_id.execution_id.name", "id.node_execution_id.node_id", "id.task_id.project", "id.task_id.domain", "id.task_id.name", "id.task_id.version", "id.retry_attempt"}, "")) + pattern_AdminService_UpdateProjectDomainAttributes_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{"api", "v1", "project_domain_attributes", "attributes.project", "attributes.domain"}, "")) + pattern_AdminService_UpdateProjectDomainAttributes_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6}, []string{"api", "v1", "project_domain_attributes", "org", "attributes.org", "attributes.project", "attributes.domain"}, "")) + pattern_AdminService_GetProjectDomainAttributes_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{"api", "v1", "project_domain_attributes", "project", "domain"}, "")) + pattern_AdminService_GetProjectDomainAttributes_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"api", "v1", "project_domain_attributes", "org", "project", "domain"}, "")) + pattern_AdminService_DeleteProjectDomainAttributes_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{"api", "v1", "project_domain_attributes", "project", "domain"}, "")) + pattern_AdminService_DeleteProjectDomainAttributes_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"api", "v1", "project_domain_attributes", "org", "project", "domain"}, "")) + pattern_AdminService_UpdateProjectAttributes_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"api", "v1", "project_attributes", "attributes.project"}, "")) + pattern_AdminService_UpdateProjectAttributes_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"api", "v1", "project_domain_attributes", "org", "attributes.org", "attributes.project"}, "")) + pattern_AdminService_GetProjectAttributes_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"api", "v1", "project_attributes", "project"}, "")) + pattern_AdminService_GetProjectAttributes_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{"api", "v1", "project_domain_attributes", "org", "project"}, "")) + pattern_AdminService_DeleteProjectAttributes_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"api", "v1", "project_attributes", "project"}, "")) + pattern_AdminService_DeleteProjectAttributes_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{"api", "v1", "project_domain_attributes", "org", "project"}, "")) + pattern_AdminService_UpdateWorkflowAttributes_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"api", "v1", "workflow_attributes", "attributes.project", "attributes.domain", "attributes.workflow"}, "")) + pattern_AdminService_UpdateWorkflowAttributes_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7}, []string{"api", "v1", "workflow_attributes", "org", "attributes.org", "attributes.project", "attributes.domain", "attributes.workflow"}, "")) + pattern_AdminService_GetWorkflowAttributes_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"api", "v1", "workflow_attributes", "project", "domain", "workflow"}, "")) + pattern_AdminService_GetWorkflowAttributes_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6}, []string{"api", "v1", "workflow_attributes", "org", "project", "domain", "workflow"}, "")) + pattern_AdminService_DeleteWorkflowAttributes_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"api", "v1", "workflow_attributes", "project", "domain", "workflow"}, "")) + pattern_AdminService_DeleteWorkflowAttributes_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6}, []string{"api", "v1", "workflow_attributes", "org", "project", "domain", "workflow"}, "")) + pattern_AdminService_ListMatchableAttributes_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"api", "v1", "matchable_attributes"}, "")) pattern_AdminService_ListNamedEntities_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"api", "v1", "named_entities", "resource_type", "project", "domain"}, "")) + pattern_AdminService_ListNamedEntities_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6}, []string{"api", "v1", "named_entities", "resource_type", "org", "project", "domain"}, "")) + pattern_AdminService_GetNamedEntity_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6}, []string{"api", "v1", "named_entities", "resource_type", "id.project", "id.domain", "id.name"}, "")) + pattern_AdminService_GetNamedEntity_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8}, []string{"api", "v1", "named_entities", "resource_type", "org", "id.org", "id.project", "id.domain", "id.name"}, "")) + pattern_AdminService_UpdateNamedEntity_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6}, []string{"api", "v1", "named_entities", "resource_type", "id.project", "id.domain", "id.name"}, "")) + pattern_AdminService_UpdateNamedEntity_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8}, []string{"api", "v1", "named_entities", "resource_type", "org", "id.org", "id.project", "id.domain", "id.name"}, "")) + pattern_AdminService_GetVersion_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"api", "v1", "version"}, "")) pattern_AdminService_GetDescriptionEntity_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7}, []string{"api", "v1", "description_entities", "id.resource_type", "id.project", "id.domain", "id.name", "id.version"}, "")) + pattern_AdminService_GetDescriptionEntity_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8, 1, 0, 4, 1, 5, 9}, []string{"api", "v1", "description_entities", "org", "id.org", "id.resource_type", "id.project", "id.domain", "id.name", "id.version"}, "")) + pattern_AdminService_ListDescriptionEntities_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6}, []string{"api", "v1", "description_entities", "resource_type", "id.project", "id.domain", "id.name"}, "")) - pattern_AdminService_ListDescriptionEntities_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"api", "v1", "description_entities", "resource_type", "id.project", "id.domain"}, "")) + pattern_AdminService_ListDescriptionEntities_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8}, []string{"api", "v1", "description_entities", "resource_type", "org", "id.org", "id.project", "id.domain", "id.name"}, "")) + + pattern_AdminService_ListDescriptionEntities_2 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"api", "v1", "description_entities", "resource_type", "id.project", "id.domain"}, "")) + + pattern_AdminService_ListDescriptionEntities_3 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7}, []string{"api", "v1", "description_entities", "resource_type", "org", "id.org", "id.project", "id.domain"}, "")) pattern_AdminService_GetExecutionMetrics_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6}, []string{"api", "v1", "metrics", "executions", "id.project", "id.domain", "id.name"}, "")) + + pattern_AdminService_GetExecutionMetrics_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8}, []string{"api", "v1", "metrics", "executions", "org", "id.org", "id.project", "id.domain", "id.name"}, "")) ) var ( @@ -4297,38 +8416,66 @@ var ( forward_AdminService_GetTask_0 = runtime.ForwardResponseMessage + forward_AdminService_GetTask_1 = runtime.ForwardResponseMessage + forward_AdminService_ListTaskIds_0 = runtime.ForwardResponseMessage + forward_AdminService_ListTaskIds_1 = runtime.ForwardResponseMessage + forward_AdminService_ListTasks_0 = runtime.ForwardResponseMessage forward_AdminService_ListTasks_1 = runtime.ForwardResponseMessage + forward_AdminService_ListTasks_2 = runtime.ForwardResponseMessage + + forward_AdminService_ListTasks_3 = runtime.ForwardResponseMessage + forward_AdminService_CreateWorkflow_0 = runtime.ForwardResponseMessage forward_AdminService_GetWorkflow_0 = runtime.ForwardResponseMessage + forward_AdminService_GetWorkflow_1 = runtime.ForwardResponseMessage + forward_AdminService_ListWorkflowIds_0 = runtime.ForwardResponseMessage + forward_AdminService_ListWorkflowIds_1 = runtime.ForwardResponseMessage + forward_AdminService_ListWorkflows_0 = runtime.ForwardResponseMessage forward_AdminService_ListWorkflows_1 = runtime.ForwardResponseMessage + forward_AdminService_ListWorkflows_2 = runtime.ForwardResponseMessage + + forward_AdminService_ListWorkflows_3 = runtime.ForwardResponseMessage + forward_AdminService_CreateLaunchPlan_0 = runtime.ForwardResponseMessage forward_AdminService_GetLaunchPlan_0 = runtime.ForwardResponseMessage + forward_AdminService_GetLaunchPlan_1 = runtime.ForwardResponseMessage + forward_AdminService_GetActiveLaunchPlan_0 = runtime.ForwardResponseMessage + forward_AdminService_GetActiveLaunchPlan_1 = runtime.ForwardResponseMessage + forward_AdminService_ListActiveLaunchPlans_0 = runtime.ForwardResponseMessage forward_AdminService_ListLaunchPlanIds_0 = runtime.ForwardResponseMessage + forward_AdminService_ListLaunchPlanIds_1 = runtime.ForwardResponseMessage + forward_AdminService_ListLaunchPlans_0 = runtime.ForwardResponseMessage forward_AdminService_ListLaunchPlans_1 = runtime.ForwardResponseMessage + forward_AdminService_ListLaunchPlans_2 = runtime.ForwardResponseMessage + + forward_AdminService_ListLaunchPlans_3 = runtime.ForwardResponseMessage + forward_AdminService_UpdateLaunchPlan_0 = runtime.ForwardResponseMessage + forward_AdminService_UpdateLaunchPlan_1 = runtime.ForwardResponseMessage + forward_AdminService_CreateExecution_0 = runtime.ForwardResponseMessage forward_AdminService_RelaunchExecution_0 = runtime.ForwardResponseMessage @@ -4337,26 +8484,46 @@ var ( forward_AdminService_GetExecution_0 = runtime.ForwardResponseMessage + forward_AdminService_GetExecution_1 = runtime.ForwardResponseMessage + forward_AdminService_UpdateExecution_0 = runtime.ForwardResponseMessage + forward_AdminService_UpdateExecution_1 = runtime.ForwardResponseMessage + forward_AdminService_GetExecutionData_0 = runtime.ForwardResponseMessage + forward_AdminService_GetExecutionData_1 = runtime.ForwardResponseMessage + forward_AdminService_ListExecutions_0 = runtime.ForwardResponseMessage + forward_AdminService_ListExecutions_1 = runtime.ForwardResponseMessage + forward_AdminService_TerminateExecution_0 = runtime.ForwardResponseMessage + forward_AdminService_TerminateExecution_1 = runtime.ForwardResponseMessage + forward_AdminService_GetNodeExecution_0 = runtime.ForwardResponseMessage + forward_AdminService_GetNodeExecution_1 = runtime.ForwardResponseMessage + forward_AdminService_ListNodeExecutions_0 = runtime.ForwardResponseMessage + forward_AdminService_ListNodeExecutions_1 = runtime.ForwardResponseMessage + forward_AdminService_ListNodeExecutionsForTask_0 = runtime.ForwardResponseMessage + forward_AdminService_ListNodeExecutionsForTask_1 = runtime.ForwardResponseMessage + forward_AdminService_GetNodeExecutionData_0 = runtime.ForwardResponseMessage + forward_AdminService_GetNodeExecutionData_1 = runtime.ForwardResponseMessage + forward_AdminService_RegisterProject_0 = runtime.ForwardResponseMessage forward_AdminService_UpdateProject_0 = runtime.ForwardResponseMessage + forward_AdminService_UpdateProject_1 = runtime.ForwardResponseMessage + forward_AdminService_ListProjects_0 = runtime.ForwardResponseMessage forward_AdminService_CreateWorkflowEvent_0 = runtime.ForwardResponseMessage @@ -4367,43 +8534,81 @@ var ( forward_AdminService_GetTaskExecution_0 = runtime.ForwardResponseMessage + forward_AdminService_GetTaskExecution_1 = runtime.ForwardResponseMessage + forward_AdminService_ListTaskExecutions_0 = runtime.ForwardResponseMessage + forward_AdminService_ListTaskExecutions_1 = runtime.ForwardResponseMessage + forward_AdminService_GetTaskExecutionData_0 = runtime.ForwardResponseMessage + forward_AdminService_GetTaskExecutionData_1 = runtime.ForwardResponseMessage + forward_AdminService_UpdateProjectDomainAttributes_0 = runtime.ForwardResponseMessage + forward_AdminService_UpdateProjectDomainAttributes_1 = runtime.ForwardResponseMessage + forward_AdminService_GetProjectDomainAttributes_0 = runtime.ForwardResponseMessage + forward_AdminService_GetProjectDomainAttributes_1 = runtime.ForwardResponseMessage + forward_AdminService_DeleteProjectDomainAttributes_0 = runtime.ForwardResponseMessage + forward_AdminService_DeleteProjectDomainAttributes_1 = runtime.ForwardResponseMessage + forward_AdminService_UpdateProjectAttributes_0 = runtime.ForwardResponseMessage + forward_AdminService_UpdateProjectAttributes_1 = runtime.ForwardResponseMessage + forward_AdminService_GetProjectAttributes_0 = runtime.ForwardResponseMessage + forward_AdminService_GetProjectAttributes_1 = runtime.ForwardResponseMessage + forward_AdminService_DeleteProjectAttributes_0 = runtime.ForwardResponseMessage + forward_AdminService_DeleteProjectAttributes_1 = runtime.ForwardResponseMessage + forward_AdminService_UpdateWorkflowAttributes_0 = runtime.ForwardResponseMessage + forward_AdminService_UpdateWorkflowAttributes_1 = runtime.ForwardResponseMessage + forward_AdminService_GetWorkflowAttributes_0 = runtime.ForwardResponseMessage + forward_AdminService_GetWorkflowAttributes_1 = runtime.ForwardResponseMessage + forward_AdminService_DeleteWorkflowAttributes_0 = runtime.ForwardResponseMessage + forward_AdminService_DeleteWorkflowAttributes_1 = runtime.ForwardResponseMessage + forward_AdminService_ListMatchableAttributes_0 = runtime.ForwardResponseMessage forward_AdminService_ListNamedEntities_0 = runtime.ForwardResponseMessage + forward_AdminService_ListNamedEntities_1 = runtime.ForwardResponseMessage + forward_AdminService_GetNamedEntity_0 = runtime.ForwardResponseMessage + forward_AdminService_GetNamedEntity_1 = runtime.ForwardResponseMessage + forward_AdminService_UpdateNamedEntity_0 = runtime.ForwardResponseMessage + forward_AdminService_UpdateNamedEntity_1 = runtime.ForwardResponseMessage + forward_AdminService_GetVersion_0 = runtime.ForwardResponseMessage forward_AdminService_GetDescriptionEntity_0 = runtime.ForwardResponseMessage + forward_AdminService_GetDescriptionEntity_1 = runtime.ForwardResponseMessage + forward_AdminService_ListDescriptionEntities_0 = runtime.ForwardResponseMessage forward_AdminService_ListDescriptionEntities_1 = runtime.ForwardResponseMessage + forward_AdminService_ListDescriptionEntities_2 = runtime.ForwardResponseMessage + + forward_AdminService_ListDescriptionEntities_3 = runtime.ForwardResponseMessage + forward_AdminService_GetExecutionMetrics_0 = runtime.ForwardResponseMessage + + forward_AdminService_GetExecutionMetrics_1 = runtime.ForwardResponseMessage ) diff --git a/flyteidl/gen/pb-go/flyteidl/service/admin.swagger.json b/flyteidl/gen/pb-go/flyteidl/service/admin.swagger.json index ecfd48e694..2d8da7eabf 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/admin.swagger.json +++ b/flyteidl/gen/pb-go/flyteidl/service/admin.swagger.json @@ -15,6 +15,53 @@ "application/json" ], "paths": { + "/api/v1/active_launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name}": { + "get": { + "summary": "Fetch the active version of a :ref:`ref_flyteidl.admin.LaunchPlan`.", + "operationId": "GetActiveLaunchPlan2", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminLaunchPlan" + } + } + }, + "parameters": [ + { + "name": "id.org", + "description": "Optional, org key applied to the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.project", + "description": "Name of the project the resource belongs to.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.domain", + "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.name", + "description": "User provided value for the resource.\nThe combination of project + domain + name uniquely identifies the resource.\n+optional - in certain contexts - like 'List API', 'Launch plans'", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "AdminService" + ] + } + }, "/api/v1/active_launch_plans/{id.project}/{id.domain}/{id.name}": { "get": { "summary": "Fetch the active version of a :ref:`ref_flyteidl.admin.LaunchPlan`.", @@ -48,6 +95,13 @@ "in": "path", "required": true, "type": "string" + }, + { + "name": "id.org", + "description": "Optional, org key applied to the resource.", + "in": "query", + "required": false, + "type": "string" } ], "tags": [ @@ -115,6 +169,13 @@ "ASCENDING" ], "default": "DESCENDING" + }, + { + "name": "org", + "description": "Optional, org key applied to the resource.", + "in": "query", + "required": false, + "type": "string" } ], "tags": [ @@ -122,10 +183,10 @@ ] } }, - "/api/v1/children/task_executions/{task_execution_id.node_execution_id.execution_id.project}/{task_execution_id.node_execution_id.execution_id.domain}/{task_execution_id.node_execution_id.execution_id.name}/{task_execution_id.node_execution_id.node_id}/{task_execution_id.task_id.project}/{task_execution_id.task_id.domain}/{task_execution_id.task_id.name}/{task_execution_id.task_id.version}/{task_execution_id.retry_attempt}": { + "/api/v1/children/task_executions/org/{task_execution_id.node_execution_id.execution_id.org}/{task_execution_id.node_execution_id.execution_id.project}/{task_execution_id.node_execution_id.execution_id.domain}/{task_execution_id.node_execution_id.execution_id.name}/{task_execution_id.node_execution_id.node_id}/{task_execution_id.task_id.project}/{task_execution_id.task_id.domain}/{task_execution_id.task_id.name}/{task_execution_id.task_id.version}/{task_execution_id.retry_attempt}": { "get": { "summary": "Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution` launched by the reference :ref:`ref_flyteidl.admin.TaskExecution`.", - "operationId": "ListNodeExecutionsForTask", + "operationId": "ListNodeExecutionsForTask2", "responses": { "200": { "description": "A successful response.", @@ -135,6 +196,13 @@ } }, "parameters": [ + { + "name": "task_execution_id.node_execution_id.execution_id.org", + "description": "Optional, org key applied to the resource.", + "in": "path", + "required": true, + "type": "string" + }, { "name": "task_execution_id.node_execution_id.execution_id.project", "description": "Name of the project the resource belongs to.", @@ -212,6 +280,13 @@ ], "default": "UNSPECIFIED" }, + { + "name": "task_execution_id.task_id.org", + "description": "Optional, org key applied to the resource.", + "in": "query", + "required": false, + "type": "string" + }, { "name": "limit", "description": "Indicates the number of resources to be returned.\n+required.", @@ -259,181 +334,150 @@ ] } }, - "/api/v1/data/executions/{id.project}/{id.domain}/{id.name}": { + "/api/v1/children/task_executions/{task_execution_id.node_execution_id.execution_id.project}/{task_execution_id.node_execution_id.execution_id.domain}/{task_execution_id.node_execution_id.execution_id.name}/{task_execution_id.node_execution_id.node_id}/{task_execution_id.task_id.project}/{task_execution_id.task_id.domain}/{task_execution_id.task_id.name}/{task_execution_id.task_id.version}/{task_execution_id.retry_attempt}": { "get": { - "summary": "Fetches input and output data for a :ref:`ref_flyteidl.admin.Execution`.", - "operationId": "GetExecutionData", + "summary": "Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution` launched by the reference :ref:`ref_flyteidl.admin.TaskExecution`.", + "operationId": "ListNodeExecutionsForTask", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/adminWorkflowExecutionGetDataResponse" + "$ref": "#/definitions/adminNodeExecutionList" } } }, "parameters": [ { - "name": "id.project", + "name": "task_execution_id.node_execution_id.execution_id.project", "description": "Name of the project the resource belongs to.", "in": "path", "required": true, "type": "string" }, { - "name": "id.domain", + "name": "task_execution_id.node_execution_id.execution_id.domain", "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", "in": "path", "required": true, "type": "string" }, { - "name": "id.name", + "name": "task_execution_id.node_execution_id.execution_id.name", "description": "User or system provided value for the resource.", "in": "path", "required": true, "type": "string" - } - ], - "tags": [ - "AdminService" - ] - } - }, - "/api/v1/data/node_executions/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}": { - "get": { - "summary": "Fetches input and output data for a :ref:`ref_flyteidl.admin.NodeExecution`.", - "operationId": "GetNodeExecutionData", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/adminNodeExecutionGetDataResponse" - } - } - }, - "parameters": [ + }, { - "name": "id.execution_id.project", - "description": "Name of the project the resource belongs to.", + "name": "task_execution_id.node_execution_id.node_id", "in": "path", "required": true, "type": "string" }, { - "name": "id.execution_id.domain", - "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "name": "task_execution_id.task_id.project", + "description": "Name of the project the resource belongs to.", "in": "path", "required": true, "type": "string" }, { - "name": "id.execution_id.name", - "description": "User or system provided value for the resource.", + "name": "task_execution_id.task_id.domain", + "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", "in": "path", "required": true, "type": "string" }, { - "name": "id.node_id", + "name": "task_execution_id.task_id.name", + "description": "User provided value for the resource.", "in": "path", "required": true, "type": "string" - } - ], - "tags": [ - "AdminService" - ] - } - }, - "/api/v1/data/task_executions/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}": { - "get": { - "summary": "Fetches input and output data for a :ref:`ref_flyteidl.admin.TaskExecution`.", - "operationId": "GetTaskExecutionData", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/adminTaskExecutionGetDataResponse" - } - } - }, - "parameters": [ + }, { - "name": "id.node_execution_id.execution_id.project", - "description": "Name of the project the resource belongs to.", + "name": "task_execution_id.task_id.version", + "description": "Specific version of the resource.", "in": "path", "required": true, "type": "string" }, { - "name": "id.node_execution_id.execution_id.domain", - "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "name": "task_execution_id.retry_attempt", "in": "path", "required": true, - "type": "string" + "type": "integer", + "format": "int64" }, { - "name": "id.node_execution_id.execution_id.name", - "description": "User or system provided value for the resource.", - "in": "path", - "required": true, - "type": "string" + "name": "task_execution_id.task_id.resource_type", + "description": "Identifies the specific type of resource that this identifier corresponds to.\n\n - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects.\nEventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects \nin a similar manner to other Flyte objects", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "UNSPECIFIED", + "TASK", + "WORKFLOW", + "LAUNCH_PLAN", + "DATASET" + ], + "default": "UNSPECIFIED" }, { - "name": "id.node_execution_id.node_id", - "in": "path", - "required": true, + "name": "task_execution_id.task_id.org", + "description": "Optional, org key applied to the resource.", + "in": "query", + "required": false, "type": "string" }, { - "name": "id.task_id.project", - "description": "Name of the project the resource belongs to.", - "in": "path", - "required": true, + "name": "task_execution_id.node_execution_id.execution_id.org", + "description": "Optional, org key applied to the resource.", + "in": "query", + "required": false, "type": "string" }, { - "name": "id.task_id.domain", - "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", - "in": "path", - "required": true, - "type": "string" + "name": "limit", + "description": "Indicates the number of resources to be returned.\n+required.", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" }, { - "name": "id.task_id.name", - "description": "User provided value for the resource.", - "in": "path", - "required": true, + "name": "token", + "description": "In the case of multiple pages of results, the, server-provided token can be used to fetch the next page\nin a query.\n+optional.", + "in": "query", + "required": false, "type": "string" }, { - "name": "id.task_id.version", - "description": "Specific version of the resource.", - "in": "path", - "required": true, + "name": "filters", + "description": "Indicates a list of filters passed as string.\nMore info on constructing filters : \u003cLink\u003e\n+optional.", + "in": "query", + "required": false, "type": "string" }, { - "name": "id.retry_attempt", - "in": "path", - "required": true, - "type": "integer", - "format": "int64" + "name": "sort_by.key", + "description": "Indicates an attribute to sort the response values.\n+required.", + "in": "query", + "required": false, + "type": "string" }, { - "name": "id.task_id.resource_type", - "description": "Identifies the specific type of resource that this identifier corresponds to.\n\n - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects.\nEventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects \nin a similar manner to other Flyte objects", + "name": "sort_by.direction", + "description": "Indicates the direction to apply sort key for response values.\n+optional.\n\n - DESCENDING: By default, fields are sorted in descending order.", "in": "query", "required": false, "type": "string", "enum": [ - "UNSPECIFIED", - "TASK", - "WORKFLOW", - "LAUNCH_PLAN", - "DATASET" + "DESCENDING", + "ASCENDING" ], - "default": "UNSPECIFIED" + "default": "DESCENDING" } ], "tags": [ @@ -441,32 +485,25 @@ ] } }, - "/api/v1/description_entities/{id.resource_type}/{id.project}/{id.domain}/{id.name}/{id.version}": { + "/api/v1/data/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}": { "get": { - "summary": "Fetch a :ref:`ref_flyteidl.admin.DescriptionEntity` object.", - "operationId": "GetDescriptionEntity", + "summary": "Fetches input and output data for a :ref:`ref_flyteidl.admin.Execution`.", + "operationId": "GetExecutionData2", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/adminDescriptionEntity" + "$ref": "#/definitions/adminWorkflowExecutionGetDataResponse" } } }, "parameters": [ { - "name": "id.resource_type", - "description": "Identifies the specific type of resource that this identifier corresponds to.", + "name": "id.org", + "description": "Optional, org key applied to the resource.", "in": "path", "required": true, - "type": "string", - "enum": [ - "UNSPECIFIED", - "TASK", - "WORKFLOW", - "LAUNCH_PLAN", - "DATASET" - ] + "type": "string" }, { "name": "id.project", @@ -484,14 +521,7 @@ }, { "name": "id.name", - "description": "User provided value for the resource.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "id.version", - "description": "Specific version of the resource.", + "description": "User or system provided value for the resource.", "in": "path", "required": true, "type": "string" @@ -500,154 +530,3773 @@ "tags": [ "AdminService" ] - } - }, - "/api/v1/description_entities/{resource_type}/{id.project}/{id.domain}": { - "get": { - "summary": "Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions.", - "operationId": "ListDescriptionEntities2", + }, + "delete": { + "summary": "Terminates an in-progress :ref:`ref_flyteidl.admin.Execution`.", + "operationId": "TerminateExecution2", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminExecutionTerminateResponse" + } + } + }, + "parameters": [ + { + "name": "id.org", + "description": "Optional, org key applied to the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.project", + "description": "Name of the project the resource belongs to.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.domain", + "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.name", + "description": "User or system provided value for the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/adminExecutionTerminateRequest" + } + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/data/executions/{id.project}/{id.domain}/{id.name}": { + "get": { + "summary": "Fetches input and output data for a :ref:`ref_flyteidl.admin.Execution`.", + "operationId": "GetExecutionData", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminWorkflowExecutionGetDataResponse" + } + } + }, + "parameters": [ + { + "name": "id.project", + "description": "Name of the project the resource belongs to.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.domain", + "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.name", + "description": "User or system provided value for the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.org", + "description": "Optional, org key applied to the resource.", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/data/node_executions/org/{id.execution_id.org}/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}": { + "get": { + "summary": "Fetches input and output data for a :ref:`ref_flyteidl.admin.NodeExecution`.", + "operationId": "GetNodeExecutionData2", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminNodeExecutionGetDataResponse" + } + } + }, + "parameters": [ + { + "name": "id.execution_id.org", + "description": "Optional, org key applied to the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.execution_id.project", + "description": "Name of the project the resource belongs to.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.execution_id.domain", + "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.execution_id.name", + "description": "User or system provided value for the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.node_id", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/data/node_executions/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}": { + "get": { + "summary": "Fetches input and output data for a :ref:`ref_flyteidl.admin.NodeExecution`.", + "operationId": "GetNodeExecutionData", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminNodeExecutionGetDataResponse" + } + } + }, + "parameters": [ + { + "name": "id.execution_id.project", + "description": "Name of the project the resource belongs to.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.execution_id.domain", + "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.execution_id.name", + "description": "User or system provided value for the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.node_id", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.execution_id.org", + "description": "Optional, org key applied to the resource.", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/data/task_executions/org/{id.node_execution_id.execution_id.org}/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}": { + "get": { + "summary": "Fetches input and output data for a :ref:`ref_flyteidl.admin.TaskExecution`.", + "operationId": "GetTaskExecutionData2", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminTaskExecutionGetDataResponse" + } + } + }, + "parameters": [ + { + "name": "id.node_execution_id.execution_id.org", + "description": "Optional, org key applied to the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.node_execution_id.execution_id.project", + "description": "Name of the project the resource belongs to.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.node_execution_id.execution_id.domain", + "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.node_execution_id.execution_id.name", + "description": "User or system provided value for the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.node_execution_id.node_id", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.task_id.project", + "description": "Name of the project the resource belongs to.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.task_id.domain", + "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.task_id.name", + "description": "User provided value for the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.task_id.version", + "description": "Specific version of the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.retry_attempt", + "in": "path", + "required": true, + "type": "integer", + "format": "int64" + }, + { + "name": "id.task_id.resource_type", + "description": "Identifies the specific type of resource that this identifier corresponds to.\n\n - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects.\nEventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects \nin a similar manner to other Flyte objects", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "UNSPECIFIED", + "TASK", + "WORKFLOW", + "LAUNCH_PLAN", + "DATASET" + ], + "default": "UNSPECIFIED" + }, + { + "name": "id.task_id.org", + "description": "Optional, org key applied to the resource.", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/data/task_executions/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}": { + "get": { + "summary": "Fetches input and output data for a :ref:`ref_flyteidl.admin.TaskExecution`.", + "operationId": "GetTaskExecutionData", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminTaskExecutionGetDataResponse" + } + } + }, + "parameters": [ + { + "name": "id.node_execution_id.execution_id.project", + "description": "Name of the project the resource belongs to.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.node_execution_id.execution_id.domain", + "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.node_execution_id.execution_id.name", + "description": "User or system provided value for the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.node_execution_id.node_id", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.task_id.project", + "description": "Name of the project the resource belongs to.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.task_id.domain", + "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.task_id.name", + "description": "User provided value for the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.task_id.version", + "description": "Specific version of the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.retry_attempt", + "in": "path", + "required": true, + "type": "integer", + "format": "int64" + }, + { + "name": "id.task_id.resource_type", + "description": "Identifies the specific type of resource that this identifier corresponds to.\n\n - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects.\nEventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects \nin a similar manner to other Flyte objects", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "UNSPECIFIED", + "TASK", + "WORKFLOW", + "LAUNCH_PLAN", + "DATASET" + ], + "default": "UNSPECIFIED" + }, + { + "name": "id.task_id.org", + "description": "Optional, org key applied to the resource.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "id.node_execution_id.execution_id.org", + "description": "Optional, org key applied to the resource.", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/description_entities/org/{id.org}/{id.resource_type}/{id.project}/{id.domain}/{id.name}/{id.version}": { + "get": { + "summary": "Fetch a :ref:`ref_flyteidl.admin.DescriptionEntity` object.", + "operationId": "GetDescriptionEntity2", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminDescriptionEntity" + } + } + }, + "parameters": [ + { + "name": "id.org", + "description": "Optional, org key applied to the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.resource_type", + "description": "Identifies the specific type of resource that this identifier corresponds to.", + "in": "path", + "required": true, + "type": "string", + "enum": [ + "UNSPECIFIED", + "TASK", + "WORKFLOW", + "LAUNCH_PLAN", + "DATASET" + ] + }, + { + "name": "id.project", + "description": "Name of the project the resource belongs to.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.domain", + "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.name", + "description": "User provided value for the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.version", + "description": "Specific version of the resource.", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/description_entities/{id.resource_type}/{id.project}/{id.domain}/{id.name}/{id.version}": { + "get": { + "summary": "Fetch a :ref:`ref_flyteidl.admin.DescriptionEntity` object.", + "operationId": "GetDescriptionEntity", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminDescriptionEntity" + } + } + }, + "parameters": [ + { + "name": "id.resource_type", + "description": "Identifies the specific type of resource that this identifier corresponds to.", + "in": "path", + "required": true, + "type": "string", + "enum": [ + "UNSPECIFIED", + "TASK", + "WORKFLOW", + "LAUNCH_PLAN", + "DATASET" + ] + }, + { + "name": "id.project", + "description": "Name of the project the resource belongs to.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.domain", + "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.name", + "description": "User provided value for the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.version", + "description": "Specific version of the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.org", + "description": "Optional, org key applied to the resource.", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/description_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain}": { + "get": { + "summary": "Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions.", + "operationId": "ListDescriptionEntities4", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminDescriptionEntityList" + } + } + }, + "parameters": [ + { + "name": "resource_type", + "description": "Identifies the specific type of resource that this identifier corresponds to.", + "in": "path", + "required": true, + "type": "string", + "enum": [ + "UNSPECIFIED", + "TASK", + "WORKFLOW", + "LAUNCH_PLAN", + "DATASET" + ] + }, + { + "name": "id.org", + "description": "Optional, org key applied to the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.project", + "description": "Name of the project the resource belongs to.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.domain", + "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.name", + "description": "User provided value for the resource.\nThe combination of project + domain + name uniquely identifies the resource.\n+optional - in certain contexts - like 'List API', 'Launch plans'.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "limit", + "description": "Indicates the number of resources to be returned.\n+required.", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "token", + "description": "In the case of multiple pages of results, the server-provided token can be used to fetch the next page\nin a query.\n+optional.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "filters", + "description": "Indicates a list of filters passed as string.\nMore info on constructing filters : \u003cLink\u003e\n+optional.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sort_by.key", + "description": "Indicates an attribute to sort the response values.\n+required.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sort_by.direction", + "description": "Indicates the direction to apply sort key for response values.\n+optional.\n\n - DESCENDING: By default, fields are sorted in descending order.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "DESCENDING", + "ASCENDING" + ], + "default": "DESCENDING" + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/description_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain}/{id.name}": { + "get": { + "summary": "Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions.", + "operationId": "ListDescriptionEntities2", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminDescriptionEntityList" + } + } + }, + "parameters": [ + { + "name": "resource_type", + "description": "Identifies the specific type of resource that this identifier corresponds to.", + "in": "path", + "required": true, + "type": "string", + "enum": [ + "UNSPECIFIED", + "TASK", + "WORKFLOW", + "LAUNCH_PLAN", + "DATASET" + ] + }, + { + "name": "id.org", + "description": "Optional, org key applied to the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.project", + "description": "Name of the project the resource belongs to.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.domain", + "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.name", + "description": "User provided value for the resource.\nThe combination of project + domain + name uniquely identifies the resource.\n+optional - in certain contexts - like 'List API', 'Launch plans'", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "limit", + "description": "Indicates the number of resources to be returned.\n+required.", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "token", + "description": "In the case of multiple pages of results, the server-provided token can be used to fetch the next page\nin a query.\n+optional.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "filters", + "description": "Indicates a list of filters passed as string.\nMore info on constructing filters : \u003cLink\u003e\n+optional.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sort_by.key", + "description": "Indicates an attribute to sort the response values.\n+required.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sort_by.direction", + "description": "Indicates the direction to apply sort key for response values.\n+optional.\n\n - DESCENDING: By default, fields are sorted in descending order.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "DESCENDING", + "ASCENDING" + ], + "default": "DESCENDING" + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/description_entities/{resource_type}/{id.project}/{id.domain}": { + "get": { + "summary": "Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions.", + "operationId": "ListDescriptionEntities3", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminDescriptionEntityList" + } + } + }, + "parameters": [ + { + "name": "resource_type", + "description": "Identifies the specific type of resource that this identifier corresponds to.", + "in": "path", + "required": true, + "type": "string", + "enum": [ + "UNSPECIFIED", + "TASK", + "WORKFLOW", + "LAUNCH_PLAN", + "DATASET" + ] + }, + { + "name": "id.project", + "description": "Name of the project the resource belongs to.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.domain", + "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.name", + "description": "User provided value for the resource.\nThe combination of project + domain + name uniquely identifies the resource.\n+optional - in certain contexts - like 'List API', 'Launch plans'.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "id.org", + "description": "Optional, org key applied to the resource.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "limit", + "description": "Indicates the number of resources to be returned.\n+required.", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "token", + "description": "In the case of multiple pages of results, the server-provided token can be used to fetch the next page\nin a query.\n+optional.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "filters", + "description": "Indicates a list of filters passed as string.\nMore info on constructing filters : \u003cLink\u003e\n+optional.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sort_by.key", + "description": "Indicates an attribute to sort the response values.\n+required.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sort_by.direction", + "description": "Indicates the direction to apply sort key for response values.\n+optional.\n\n - DESCENDING: By default, fields are sorted in descending order.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "DESCENDING", + "ASCENDING" + ], + "default": "DESCENDING" + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/description_entities/{resource_type}/{id.project}/{id.domain}/{id.name}": { + "get": { + "summary": "Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions.", + "operationId": "ListDescriptionEntities", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminDescriptionEntityList" + } + } + }, + "parameters": [ + { + "name": "resource_type", + "description": "Identifies the specific type of resource that this identifier corresponds to.", + "in": "path", + "required": true, + "type": "string", + "enum": [ + "UNSPECIFIED", + "TASK", + "WORKFLOW", + "LAUNCH_PLAN", + "DATASET" + ] + }, + { + "name": "id.project", + "description": "Name of the project the resource belongs to.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.domain", + "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.name", + "description": "User provided value for the resource.\nThe combination of project + domain + name uniquely identifies the resource.\n+optional - in certain contexts - like 'List API', 'Launch plans'", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.org", + "description": "Optional, org key applied to the resource.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "limit", + "description": "Indicates the number of resources to be returned.\n+required.", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "token", + "description": "In the case of multiple pages of results, the server-provided token can be used to fetch the next page\nin a query.\n+optional.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "filters", + "description": "Indicates a list of filters passed as string.\nMore info on constructing filters : \u003cLink\u003e\n+optional.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sort_by.key", + "description": "Indicates an attribute to sort the response values.\n+required.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sort_by.direction", + "description": "Indicates the direction to apply sort key for response values.\n+optional.\n\n - DESCENDING: By default, fields are sorted in descending order.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "DESCENDING", + "ASCENDING" + ], + "default": "DESCENDING" + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/events/nodes": { + "post": { + "summary": "Indicates a :ref:`ref_flyteidl.event.NodeExecutionEvent` has occurred.", + "operationId": "CreateNodeEvent", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminNodeExecutionEventResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/adminNodeExecutionEventRequest" + } + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/events/tasks": { + "post": { + "summary": "Indicates a :ref:`ref_flyteidl.event.TaskExecutionEvent` has occurred.", + "operationId": "CreateTaskEvent", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminTaskExecutionEventResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/adminTaskExecutionEventRequest" + } + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/events/workflows": { + "post": { + "summary": "Indicates a :ref:`ref_flyteidl.event.WorkflowExecutionEvent` has occurred.", + "operationId": "CreateWorkflowEvent", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminWorkflowExecutionEventResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/adminWorkflowExecutionEventRequest" + } + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/executions": { + "post": { + "summary": "Triggers the creation of a :ref:`ref_flyteidl.admin.Execution`", + "operationId": "CreateExecution", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminExecutionCreateResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/adminExecutionCreateRequest" + } + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/executions/org/{id.org}/{id.project}/{id.domain}": { + "get": { + "summary": "Fetch a list of :ref:`ref_flyteidl.admin.Execution`.", + "operationId": "ListExecutions2", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminExecutionList" + } + } + }, + "parameters": [ + { + "name": "id.org", + "description": "Optional, org key applied to the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.project", + "description": "Name of the project the resource belongs to.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.domain", + "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.name", + "description": "User provided value for the resource.\nThe combination of project + domain + name uniquely identifies the resource.\n+optional - in certain contexts - like 'List API', 'Launch plans'.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "limit", + "description": "Indicates the number of resources to be returned.\n+required.", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "token", + "description": "In the case of multiple pages of results, this server-provided token can be used to fetch the next page\nin a query.\n+optional.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "filters", + "description": "Indicates a list of filters passed as string.\nMore info on constructing filters : \u003cLink\u003e\n+optional.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sort_by.key", + "description": "Indicates an attribute to sort the response values.\n+required.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sort_by.direction", + "description": "Indicates the direction to apply sort key for response values.\n+optional.\n\n - DESCENDING: By default, fields are sorted in descending order.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "DESCENDING", + "ASCENDING" + ], + "default": "DESCENDING" + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}": { + "get": { + "summary": "Fetches a :ref:`ref_flyteidl.admin.Execution`.", + "operationId": "GetExecution2", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminExecution" + } + } + }, + "parameters": [ + { + "name": "id.org", + "description": "Optional, org key applied to the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.project", + "description": "Name of the project the resource belongs to.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.domain", + "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.name", + "description": "User or system provided value for the resource.", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "AdminService" + ] + }, + "put": { + "summary": "Update execution belonging to project domain :ref:`ref_flyteidl.admin.Execution`.", + "operationId": "UpdateExecution2", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminExecutionUpdateResponse" + } + } + }, + "parameters": [ + { + "name": "id.org", + "description": "Optional, org key applied to the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.project", + "description": "Name of the project the resource belongs to.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.domain", + "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.name", + "description": "User or system provided value for the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/adminExecutionUpdateRequest" + } + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/executions/recover": { + "post": { + "summary": "Recreates a previously-run workflow execution that will only start executing from the last known failure point.\nIn Recover mode, users cannot change any input parameters or update the version of the execution.\nThis is extremely useful to recover from system errors and byzantine faults like - Loss of K8s cluster, bugs in platform or instability, machine failures,\ndownstream system failures (downstream services), or simply to recover executions that failed because of retry exhaustion and should complete if tried again.\nSee :ref:`ref_flyteidl.admin.ExecutionRecoverRequest` for more details.", + "operationId": "RecoverExecution", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminExecutionCreateResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/adminExecutionRecoverRequest" + } + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/executions/relaunch": { + "post": { + "summary": "Triggers the creation of an identical :ref:`ref_flyteidl.admin.Execution`", + "operationId": "RelaunchExecution", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminExecutionCreateResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/adminExecutionRelaunchRequest" + } + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/executions/{id.project}/{id.domain}": { + "get": { + "summary": "Fetch a list of :ref:`ref_flyteidl.admin.Execution`.", + "operationId": "ListExecutions", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminExecutionList" + } + } + }, + "parameters": [ + { + "name": "id.project", + "description": "Name of the project the resource belongs to.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.domain", + "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.name", + "description": "User provided value for the resource.\nThe combination of project + domain + name uniquely identifies the resource.\n+optional - in certain contexts - like 'List API', 'Launch plans'.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "id.org", + "description": "Optional, org key applied to the resource.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "limit", + "description": "Indicates the number of resources to be returned.\n+required.", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "token", + "description": "In the case of multiple pages of results, this server-provided token can be used to fetch the next page\nin a query.\n+optional.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "filters", + "description": "Indicates a list of filters passed as string.\nMore info on constructing filters : \u003cLink\u003e\n+optional.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sort_by.key", + "description": "Indicates an attribute to sort the response values.\n+required.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sort_by.direction", + "description": "Indicates the direction to apply sort key for response values.\n+optional.\n\n - DESCENDING: By default, fields are sorted in descending order.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "DESCENDING", + "ASCENDING" + ], + "default": "DESCENDING" + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/executions/{id.project}/{id.domain}/{id.name}": { + "get": { + "summary": "Fetches a :ref:`ref_flyteidl.admin.Execution`.", + "operationId": "GetExecution", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminExecution" + } + } + }, + "parameters": [ + { + "name": "id.project", + "description": "Name of the project the resource belongs to.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.domain", + "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.name", + "description": "User or system provided value for the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.org", + "description": "Optional, org key applied to the resource.", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "AdminService" + ] + }, + "delete": { + "summary": "Terminates an in-progress :ref:`ref_flyteidl.admin.Execution`.", + "operationId": "TerminateExecution", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminExecutionTerminateResponse" + } + } + }, + "parameters": [ + { + "name": "id.project", + "description": "Name of the project the resource belongs to.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.domain", + "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.name", + "description": "User or system provided value for the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/adminExecutionTerminateRequest" + } + } + ], + "tags": [ + "AdminService" + ] + }, + "put": { + "summary": "Update execution belonging to project domain :ref:`ref_flyteidl.admin.Execution`.", + "operationId": "UpdateExecution", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminExecutionUpdateResponse" + } + } + }, + "parameters": [ + { + "name": "id.project", + "description": "Name of the project the resource belongs to.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.domain", + "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.name", + "description": "User or system provided value for the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/adminExecutionUpdateRequest" + } + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/launch_plan_ids/org/{org}/{project}/{domain}": { + "get": { + "summary": "Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of launch plan objects.", + "operationId": "ListLaunchPlanIds2", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminNamedEntityIdentifierList" + } + } + }, + "parameters": [ + { + "name": "org", + "description": "Optional, org key applied to the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "project", + "description": "Name of the project that contains the identifiers.\n+required", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "domain", + "description": "Name of the domain the identifiers belongs to within the project.\n+required", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "limit", + "description": "Indicates the number of resources to be returned.\n+required.", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "token", + "description": "In the case of multiple pages of results, the server-provided token can be used to fetch the next page\nin a query.\n+optional.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sort_by.key", + "description": "Indicates an attribute to sort the response values.\n+required.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sort_by.direction", + "description": "Indicates the direction to apply sort key for response values.\n+optional.\n\n - DESCENDING: By default, fields are sorted in descending order.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "DESCENDING", + "ASCENDING" + ], + "default": "DESCENDING" + }, + { + "name": "filters", + "description": "Indicates a list of filters passed as string.\n+optional.", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/launch_plan_ids/{project}/{domain}": { + "get": { + "summary": "Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of launch plan objects.", + "operationId": "ListLaunchPlanIds", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminNamedEntityIdentifierList" + } + } + }, + "parameters": [ + { + "name": "project", + "description": "Name of the project that contains the identifiers.\n+required", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "domain", + "description": "Name of the domain the identifiers belongs to within the project.\n+required", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "limit", + "description": "Indicates the number of resources to be returned.\n+required.", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "token", + "description": "In the case of multiple pages of results, the server-provided token can be used to fetch the next page\nin a query.\n+optional.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sort_by.key", + "description": "Indicates an attribute to sort the response values.\n+required.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sort_by.direction", + "description": "Indicates the direction to apply sort key for response values.\n+optional.\n\n - DESCENDING: By default, fields are sorted in descending order.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "DESCENDING", + "ASCENDING" + ], + "default": "DESCENDING" + }, + { + "name": "filters", + "description": "Indicates a list of filters passed as string.\n+optional.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "org", + "description": "Optional, org key applied to the resource.", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/launch_plans": { + "post": { + "summary": "Create and upload a :ref:`ref_flyteidl.admin.LaunchPlan` definition", + "operationId": "CreateLaunchPlan", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminLaunchPlanCreateResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/adminLaunchPlanCreateRequest" + } + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}": { + "get": { + "summary": "Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions.", + "operationId": "ListLaunchPlans4", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminLaunchPlanList" + } + } + }, + "parameters": [ + { + "name": "id.org", + "description": "Optional, org key applied to the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.project", + "description": "Name of the project the resource belongs to.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.domain", + "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.name", + "description": "User provided value for the resource.\nThe combination of project + domain + name uniquely identifies the resource.\n+optional - in certain contexts - like 'List API', 'Launch plans'.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "limit", + "description": "Indicates the number of resources to be returned.\n+required.", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "token", + "description": "In the case of multiple pages of results, this server-provided token can be used to fetch the next page\nin a query.\n+optional.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "filters", + "description": "Indicates a list of filters passed as string.\nMore info on constructing filters : \u003cLink\u003e\n+optional.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sort_by.key", + "description": "Indicates an attribute to sort the response values.\n+required.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sort_by.direction", + "description": "Indicates the direction to apply sort key for response values.\n+optional.\n\n - DESCENDING: By default, fields are sorted in descending order.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "DESCENDING", + "ASCENDING" + ], + "default": "DESCENDING" + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name}": { + "get": { + "summary": "Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions.", + "operationId": "ListLaunchPlans2", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminLaunchPlanList" + } + } + }, + "parameters": [ + { + "name": "id.org", + "description": "Optional, org key applied to the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.project", + "description": "Name of the project the resource belongs to.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.domain", + "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.name", + "description": "User provided value for the resource.\nThe combination of project + domain + name uniquely identifies the resource.\n+optional - in certain contexts - like 'List API', 'Launch plans'", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "limit", + "description": "Indicates the number of resources to be returned.\n+required.", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "token", + "description": "In the case of multiple pages of results, this server-provided token can be used to fetch the next page\nin a query.\n+optional.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "filters", + "description": "Indicates a list of filters passed as string.\nMore info on constructing filters : \u003cLink\u003e\n+optional.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sort_by.key", + "description": "Indicates an attribute to sort the response values.\n+required.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sort_by.direction", + "description": "Indicates the direction to apply sort key for response values.\n+optional.\n\n - DESCENDING: By default, fields are sorted in descending order.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "DESCENDING", + "ASCENDING" + ], + "default": "DESCENDING" + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version}": { + "get": { + "summary": "Fetch a :ref:`ref_flyteidl.admin.LaunchPlan` definition.", + "operationId": "GetLaunchPlan2", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminLaunchPlan" + } + } + }, + "parameters": [ + { + "name": "id.org", + "description": "Optional, org key applied to the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.project", + "description": "Name of the project the resource belongs to.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.domain", + "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.name", + "description": "User provided value for the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.version", + "description": "Specific version of the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.resource_type", + "description": "Identifies the specific type of resource that this identifier corresponds to.\n\n - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects.\nEventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects \nin a similar manner to other Flyte objects", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "UNSPECIFIED", + "TASK", + "WORKFLOW", + "LAUNCH_PLAN", + "DATASET" + ], + "default": "UNSPECIFIED" + } + ], + "tags": [ + "AdminService" + ] + }, + "put": { + "summary": "Updates the status of a registered :ref:`ref_flyteidl.admin.LaunchPlan`.", + "operationId": "UpdateLaunchPlan2", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminLaunchPlanUpdateResponse" + } + } + }, + "parameters": [ + { + "name": "id.org", + "description": "Optional, org key applied to the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.project", + "description": "Name of the project the resource belongs to.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.domain", + "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.name", + "description": "User provided value for the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.version", + "description": "Specific version of the resource.", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/launch_plans/{id.project}/{id.domain}": { + "get": { + "summary": "Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions.", + "operationId": "ListLaunchPlans3", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminLaunchPlanList" + } + } + }, + "parameters": [ + { + "name": "id.project", + "description": "Name of the project the resource belongs to.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.domain", + "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.name", + "description": "User provided value for the resource.\nThe combination of project + domain + name uniquely identifies the resource.\n+optional - in certain contexts - like 'List API', 'Launch plans'.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "id.org", + "description": "Optional, org key applied to the resource.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "limit", + "description": "Indicates the number of resources to be returned.\n+required.", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "token", + "description": "In the case of multiple pages of results, this server-provided token can be used to fetch the next page\nin a query.\n+optional.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "filters", + "description": "Indicates a list of filters passed as string.\nMore info on constructing filters : \u003cLink\u003e\n+optional.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sort_by.key", + "description": "Indicates an attribute to sort the response values.\n+required.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sort_by.direction", + "description": "Indicates the direction to apply sort key for response values.\n+optional.\n\n - DESCENDING: By default, fields are sorted in descending order.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "DESCENDING", + "ASCENDING" + ], + "default": "DESCENDING" + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/launch_plans/{id.project}/{id.domain}/{id.name}": { + "get": { + "summary": "Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions.", + "operationId": "ListLaunchPlans", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminLaunchPlanList" + } + } + }, + "parameters": [ + { + "name": "id.project", + "description": "Name of the project the resource belongs to.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.domain", + "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.name", + "description": "User provided value for the resource.\nThe combination of project + domain + name uniquely identifies the resource.\n+optional - in certain contexts - like 'List API', 'Launch plans'", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.org", + "description": "Optional, org key applied to the resource.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "limit", + "description": "Indicates the number of resources to be returned.\n+required.", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "token", + "description": "In the case of multiple pages of results, this server-provided token can be used to fetch the next page\nin a query.\n+optional.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "filters", + "description": "Indicates a list of filters passed as string.\nMore info on constructing filters : \u003cLink\u003e\n+optional.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sort_by.key", + "description": "Indicates an attribute to sort the response values.\n+required.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sort_by.direction", + "description": "Indicates the direction to apply sort key for response values.\n+optional.\n\n - DESCENDING: By default, fields are sorted in descending order.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "DESCENDING", + "ASCENDING" + ], + "default": "DESCENDING" + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/launch_plans/{id.project}/{id.domain}/{id.name}/{id.version}": { + "get": { + "summary": "Fetch a :ref:`ref_flyteidl.admin.LaunchPlan` definition.", + "operationId": "GetLaunchPlan", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminLaunchPlan" + } + } + }, + "parameters": [ + { + "name": "id.project", + "description": "Name of the project the resource belongs to.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.domain", + "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.name", + "description": "User provided value for the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.version", + "description": "Specific version of the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.resource_type", + "description": "Identifies the specific type of resource that this identifier corresponds to.\n\n - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects.\nEventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects \nin a similar manner to other Flyte objects", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "UNSPECIFIED", + "TASK", + "WORKFLOW", + "LAUNCH_PLAN", + "DATASET" + ], + "default": "UNSPECIFIED" + }, + { + "name": "id.org", + "description": "Optional, org key applied to the resource.", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "AdminService" + ] + }, + "put": { + "summary": "Updates the status of a registered :ref:`ref_flyteidl.admin.LaunchPlan`.", + "operationId": "UpdateLaunchPlan", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminLaunchPlanUpdateResponse" + } + } + }, + "parameters": [ + { + "name": "id.project", + "description": "Name of the project the resource belongs to.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.domain", + "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.name", + "description": "User provided value for the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.version", + "description": "Specific version of the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/adminLaunchPlanUpdateRequest" + } + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/matchable_attributes": { + "get": { + "summary": "Lists custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a specific resource type.", + "operationId": "ListMatchableAttributes", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminListMatchableAttributesResponse" + } + } + }, + "parameters": [ + { + "name": "resource_type", + "description": "+required.\n\n - TASK_RESOURCE: Applies to customizable task resource requests and limits.\n - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources.\n - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment.\n - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run\n - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec.\n - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type.\n - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides.\n - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "TASK_RESOURCE", + "CLUSTER_RESOURCE", + "EXECUTION_QUEUE", + "EXECUTION_CLUSTER_LABEL", + "QUALITY_OF_SERVICE_SPECIFICATION", + "PLUGIN_OVERRIDE", + "WORKFLOW_EXECUTION_CONFIG", + "CLUSTER_ASSIGNMENT" + ], + "default": "TASK_RESOURCE" + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/metrics/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}": { + "get": { + "summary": "Fetches runtime metrics for a :ref:`ref_flyteidl.admin.Execution`.", + "operationId": "GetExecutionMetrics2", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminWorkflowExecutionGetMetricsResponse" + } + } + }, + "parameters": [ + { + "name": "id.org", + "description": "Optional, org key applied to the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.project", + "description": "Name of the project the resource belongs to.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.domain", + "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.name", + "description": "User or system provided value for the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "depth", + "description": "depth defines the number of Flyte entity levels to traverse when breaking down execution details.", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/metrics/executions/{id.project}/{id.domain}/{id.name}": { + "get": { + "summary": "Fetches runtime metrics for a :ref:`ref_flyteidl.admin.Execution`.", + "operationId": "GetExecutionMetrics", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminWorkflowExecutionGetMetricsResponse" + } + } + }, + "parameters": [ + { + "name": "id.project", + "description": "Name of the project the resource belongs to.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.domain", + "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.name", + "description": "User or system provided value for the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.org", + "description": "Optional, org key applied to the resource.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "depth", + "description": "depth defines the number of Flyte entity levels to traverse when breaking down execution details.", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/named_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain}/{id.name}": { + "get": { + "summary": "Returns a :ref:`ref_flyteidl.admin.NamedEntity` object.", + "operationId": "GetNamedEntity2", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminNamedEntity" + } + } + }, + "parameters": [ + { + "name": "resource_type", + "description": "Resource type of the metadata to get. One of Task, Workflow or LaunchPlan.\n+required", + "in": "path", + "required": true, + "type": "string", + "enum": [ + "UNSPECIFIED", + "TASK", + "WORKFLOW", + "LAUNCH_PLAN", + "DATASET" + ] + }, + { + "name": "id.org", + "description": "Optional, org key applied to the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.project", + "description": "Name of the project the resource belongs to.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.domain", + "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.name", + "description": "User provided value for the resource.\nThe combination of project + domain + name uniquely identifies the resource.\n+optional - in certain contexts - like 'List API', 'Launch plans'", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "AdminService" + ] + }, + "put": { + "summary": "Updates a :ref:`ref_flyteidl.admin.NamedEntity` object.", + "operationId": "UpdateNamedEntity2", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminNamedEntityUpdateResponse" + } + } + }, + "parameters": [ + { + "name": "resource_type", + "description": "Resource type of the metadata to update\n+required", + "in": "path", + "required": true, + "type": "string", + "enum": [ + "UNSPECIFIED", + "TASK", + "WORKFLOW", + "LAUNCH_PLAN", + "DATASET" + ] + }, + { + "name": "id.org", + "description": "Optional, org key applied to the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.project", + "description": "Name of the project the resource belongs to.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.domain", + "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.name", + "description": "User provided value for the resource.\nThe combination of project + domain + name uniquely identifies the resource.\n+optional - in certain contexts - like 'List API', 'Launch plans'", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/adminNamedEntityUpdateRequest" + } + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/named_entities/{resource_type}/org/{org}/{project}/{domain}": { + "get": { + "summary": "Returns a list of :ref:`ref_flyteidl.admin.NamedEntity` objects.", + "operationId": "ListNamedEntities2", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminNamedEntityList" + } + } + }, + "parameters": [ + { + "name": "resource_type", + "description": "Resource type of the metadata to query. One of Task, Workflow or LaunchPlan.\n+required", + "in": "path", + "required": true, + "type": "string", + "enum": [ + "UNSPECIFIED", + "TASK", + "WORKFLOW", + "LAUNCH_PLAN", + "DATASET" + ] + }, + { + "name": "org", + "description": "Optional, org key applied to the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "project", + "description": "Name of the project that contains the identifiers.\n+required", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "domain", + "description": "Name of the domain the identifiers belongs to within the project.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "limit", + "description": "Indicates the number of resources to be returned.", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "token", + "description": "In the case of multiple pages of results, the server-provided token can be used to fetch the next page\nin a query.\n+optional.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sort_by.key", + "description": "Indicates an attribute to sort the response values.\n+required.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sort_by.direction", + "description": "Indicates the direction to apply sort key for response values.\n+optional.\n\n - DESCENDING: By default, fields are sorted in descending order.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "DESCENDING", + "ASCENDING" + ], + "default": "DESCENDING" + }, + { + "name": "filters", + "description": "Indicates a list of filters passed as string.\n+optional.", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/named_entities/{resource_type}/{id.project}/{id.domain}/{id.name}": { + "get": { + "summary": "Returns a :ref:`ref_flyteidl.admin.NamedEntity` object.", + "operationId": "GetNamedEntity", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminNamedEntity" + } + } + }, + "parameters": [ + { + "name": "resource_type", + "description": "Resource type of the metadata to get. One of Task, Workflow or LaunchPlan.\n+required", + "in": "path", + "required": true, + "type": "string", + "enum": [ + "UNSPECIFIED", + "TASK", + "WORKFLOW", + "LAUNCH_PLAN", + "DATASET" + ] + }, + { + "name": "id.project", + "description": "Name of the project the resource belongs to.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.domain", + "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.name", + "description": "User provided value for the resource.\nThe combination of project + domain + name uniquely identifies the resource.\n+optional - in certain contexts - like 'List API', 'Launch plans'", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.org", + "description": "Optional, org key applied to the resource.", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "AdminService" + ] + }, + "put": { + "summary": "Updates a :ref:`ref_flyteidl.admin.NamedEntity` object.", + "operationId": "UpdateNamedEntity", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminNamedEntityUpdateResponse" + } + } + }, + "parameters": [ + { + "name": "resource_type", + "description": "Resource type of the metadata to update\n+required", + "in": "path", + "required": true, + "type": "string", + "enum": [ + "UNSPECIFIED", + "TASK", + "WORKFLOW", + "LAUNCH_PLAN", + "DATASET" + ] + }, + { + "name": "id.project", + "description": "Name of the project the resource belongs to.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.domain", + "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.name", + "description": "User provided value for the resource.\nThe combination of project + domain + name uniquely identifies the resource.\n+optional - in certain contexts - like 'List API', 'Launch plans'", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/adminNamedEntityUpdateRequest" + } + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/named_entities/{resource_type}/{project}/{domain}": { + "get": { + "summary": "Returns a list of :ref:`ref_flyteidl.admin.NamedEntity` objects.", + "operationId": "ListNamedEntities", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminNamedEntityList" + } + } + }, + "parameters": [ + { + "name": "resource_type", + "description": "Resource type of the metadata to query. One of Task, Workflow or LaunchPlan.\n+required", + "in": "path", + "required": true, + "type": "string", + "enum": [ + "UNSPECIFIED", + "TASK", + "WORKFLOW", + "LAUNCH_PLAN", + "DATASET" + ] + }, + { + "name": "project", + "description": "Name of the project that contains the identifiers.\n+required", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "domain", + "description": "Name of the domain the identifiers belongs to within the project.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "limit", + "description": "Indicates the number of resources to be returned.", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "token", + "description": "In the case of multiple pages of results, the server-provided token can be used to fetch the next page\nin a query.\n+optional.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sort_by.key", + "description": "Indicates an attribute to sort the response values.\n+required.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sort_by.direction", + "description": "Indicates the direction to apply sort key for response values.\n+optional.\n\n - DESCENDING: By default, fields are sorted in descending order.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "DESCENDING", + "ASCENDING" + ], + "default": "DESCENDING" + }, + { + "name": "filters", + "description": "Indicates a list of filters passed as string.\n+optional.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "org", + "description": "Optional, org key applied to the resource.", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/node_executions/org/{id.execution_id.org}/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}": { + "get": { + "summary": "Fetches a :ref:`ref_flyteidl.admin.NodeExecution`.", + "operationId": "GetNodeExecution2", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/flyteidladminNodeExecution" + } + } + }, + "parameters": [ + { + "name": "id.execution_id.org", + "description": "Optional, org key applied to the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.execution_id.project", + "description": "Name of the project the resource belongs to.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.execution_id.domain", + "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.execution_id.name", + "description": "User or system provided value for the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.node_id", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/node_executions/org/{workflow_execution_id.org}/{workflow_execution_id.project}/{workflow_execution_id.domain}/{workflow_execution_id.name}": { + "get": { + "summary": "Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution`.", + "operationId": "ListNodeExecutions2", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminNodeExecutionList" + } + } + }, + "parameters": [ + { + "name": "workflow_execution_id.org", + "description": "Optional, org key applied to the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "workflow_execution_id.project", + "description": "Name of the project the resource belongs to.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "workflow_execution_id.domain", + "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "workflow_execution_id.name", + "description": "User or system provided value for the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "limit", + "description": "Indicates the number of resources to be returned.\n+required.", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "token", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "filters", + "description": "Indicates a list of filters passed as string.\nMore info on constructing filters : \u003cLink\u003e\n+optional.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sort_by.key", + "description": "Indicates an attribute to sort the response values.\n+required.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sort_by.direction", + "description": "Indicates the direction to apply sort key for response values.\n+optional.\n\n - DESCENDING: By default, fields are sorted in descending order.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "DESCENDING", + "ASCENDING" + ], + "default": "DESCENDING" + }, + { + "name": "unique_parent_id", + "description": "Unique identifier of the parent node in the execution\n+optional.", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/node_executions/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}": { + "get": { + "summary": "Fetches a :ref:`ref_flyteidl.admin.NodeExecution`.", + "operationId": "GetNodeExecution", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/flyteidladminNodeExecution" + } + } + }, + "parameters": [ + { + "name": "id.execution_id.project", + "description": "Name of the project the resource belongs to.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.execution_id.domain", + "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.execution_id.name", + "description": "User or system provided value for the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.node_id", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.execution_id.org", + "description": "Optional, org key applied to the resource.", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/node_executions/{workflow_execution_id.project}/{workflow_execution_id.domain}/{workflow_execution_id.name}": { + "get": { + "summary": "Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution`.", + "operationId": "ListNodeExecutions", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminNodeExecutionList" + } + } + }, + "parameters": [ + { + "name": "workflow_execution_id.project", + "description": "Name of the project the resource belongs to.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "workflow_execution_id.domain", + "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "workflow_execution_id.name", + "description": "User or system provided value for the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "workflow_execution_id.org", + "description": "Optional, org key applied to the resource.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "limit", + "description": "Indicates the number of resources to be returned.\n+required.", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "token", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "filters", + "description": "Indicates a list of filters passed as string.\nMore info on constructing filters : \u003cLink\u003e\n+optional.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sort_by.key", + "description": "Indicates an attribute to sort the response values.\n+required.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sort_by.direction", + "description": "Indicates the direction to apply sort key for response values.\n+optional.\n\n - DESCENDING: By default, fields are sorted in descending order.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "DESCENDING", + "ASCENDING" + ], + "default": "DESCENDING" + }, + { + "name": "unique_parent_id", + "description": "Unique identifier of the parent node in the execution\n+optional.", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/project_attributes/{attributes.project}": { + "put": { + "summary": "Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` at the project level", + "operationId": "UpdateProjectAttributes", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminProjectAttributesUpdateResponse" + } + } + }, + "parameters": [ + { + "name": "attributes.project", + "description": "Unique project id for which this set of attributes will be applied.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/adminProjectAttributesUpdateRequest" + } + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/project_attributes/{project}": { + "get": { + "summary": "Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain.", + "operationId": "GetProjectAttributes", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminProjectAttributesGetResponse" + } + } + }, + "parameters": [ + { + "name": "project", + "description": "Unique project id which this set of attributes references.\n+required", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "resource_type", + "description": "Which type of matchable attributes to return.\n+required.\n\n - TASK_RESOURCE: Applies to customizable task resource requests and limits.\n - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources.\n - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment.\n - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run\n - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec.\n - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type.\n - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides.\n - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "TASK_RESOURCE", + "CLUSTER_RESOURCE", + "EXECUTION_QUEUE", + "EXECUTION_CLUSTER_LABEL", + "QUALITY_OF_SERVICE_SPECIFICATION", + "PLUGIN_OVERRIDE", + "WORKFLOW_EXECUTION_CONFIG", + "CLUSTER_ASSIGNMENT" + ], + "default": "TASK_RESOURCE" + }, + { + "name": "org", + "description": "Optional, org key applied to the project.", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "AdminService" + ] + }, + "delete": { + "summary": "Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain.", + "operationId": "DeleteProjectAttributes", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminProjectAttributesDeleteResponse" + } + } + }, + "parameters": [ + { + "name": "project", + "description": "Unique project id which this set of attributes references.\n+required", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/adminProjectAttributesDeleteRequest" + } + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/project_domain_attributes/org/{attributes.org}/{attributes.project}": { + "put": { + "summary": "Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` at the project level", + "operationId": "UpdateProjectAttributes2", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminProjectAttributesUpdateResponse" + } + } + }, + "parameters": [ + { + "name": "attributes.org", + "description": "Optional, org key applied to the project.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "attributes.project", + "description": "Unique project id for which this set of attributes will be applied.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/adminProjectAttributesUpdateRequest" + } + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/project_domain_attributes/org/{attributes.org}/{attributes.project}/{attributes.domain}": { + "put": { + "summary": "Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain.", + "operationId": "UpdateProjectDomainAttributes2", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminProjectDomainAttributesUpdateResponse" + } + } + }, + "parameters": [ + { + "name": "attributes.org", + "description": "Optional, org key applied to the attributes.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "attributes.project", + "description": "Unique project id for which this set of attributes will be applied.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "attributes.domain", + "description": "Unique domain id for which this set of attributes will be applied.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/adminProjectDomainAttributesUpdateRequest" + } + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/project_domain_attributes/org/{org}/{project}": { + "get": { + "summary": "Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain.", + "operationId": "GetProjectAttributes2", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/adminDescriptionEntityList" + "$ref": "#/definitions/adminProjectAttributesGetResponse" } } }, "parameters": [ + { + "name": "org", + "description": "Optional, org key applied to the project.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "project", + "description": "Unique project id which this set of attributes references.\n+required", + "in": "path", + "required": true, + "type": "string" + }, { "name": "resource_type", - "description": "Identifies the specific type of resource that this identifier corresponds to.", + "description": "Which type of matchable attributes to return.\n+required.\n\n - TASK_RESOURCE: Applies to customizable task resource requests and limits.\n - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources.\n - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment.\n - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run\n - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec.\n - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type.\n - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides.\n - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "TASK_RESOURCE", + "CLUSTER_RESOURCE", + "EXECUTION_QUEUE", + "EXECUTION_CLUSTER_LABEL", + "QUALITY_OF_SERVICE_SPECIFICATION", + "PLUGIN_OVERRIDE", + "WORKFLOW_EXECUTION_CONFIG", + "CLUSTER_ASSIGNMENT" + ], + "default": "TASK_RESOURCE" + } + ], + "tags": [ + "AdminService" + ] + }, + "delete": { + "summary": "Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain.", + "operationId": "DeleteProjectAttributes2", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminProjectAttributesDeleteResponse" + } + } + }, + "parameters": [ + { + "name": "org", + "description": "Optional, org key applied to the project.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "project", + "description": "Unique project id which this set of attributes references.\n+required", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/adminProjectAttributesDeleteRequest" + } + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/project_domain_attributes/org/{org}/{project}/{domain}": { + "get": { + "summary": "Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain.", + "operationId": "GetProjectDomainAttributes2", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminProjectDomainAttributesGetResponse" + } + } + }, + "parameters": [ + { + "name": "org", + "description": "Optional, org key applied to the attributes.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "project", + "description": "Unique project id which this set of attributes references.\n+required", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "domain", + "description": "Unique domain id which this set of attributes references.\n+required", "in": "path", "required": true, + "type": "string" + }, + { + "name": "resource_type", + "description": "Which type of matchable attributes to return.\n+required.\n\n - TASK_RESOURCE: Applies to customizable task resource requests and limits.\n - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources.\n - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment.\n - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run\n - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec.\n - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type.\n - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides.\n - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run.", + "in": "query", + "required": false, "type": "string", "enum": [ - "UNSPECIFIED", - "TASK", - "WORKFLOW", - "LAUNCH_PLAN", - "DATASET" - ] + "TASK_RESOURCE", + "CLUSTER_RESOURCE", + "EXECUTION_QUEUE", + "EXECUTION_CLUSTER_LABEL", + "QUALITY_OF_SERVICE_SPECIFICATION", + "PLUGIN_OVERRIDE", + "WORKFLOW_EXECUTION_CONFIG", + "CLUSTER_ASSIGNMENT" + ], + "default": "TASK_RESOURCE" + } + ], + "tags": [ + "AdminService" + ] + }, + "delete": { + "summary": "Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain.", + "operationId": "DeleteProjectDomainAttributes2", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminProjectDomainAttributesDeleteResponse" + } + } + }, + "parameters": [ + { + "name": "org", + "description": "Optional, org key applied to the attributes.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "project", + "description": "Unique project id which this set of attributes references.\n+required", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "domain", + "description": "Unique domain id which this set of attributes references.\n+required", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/adminProjectDomainAttributesDeleteRequest" + } + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/project_domain_attributes/{attributes.project}/{attributes.domain}": { + "put": { + "summary": "Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain.", + "operationId": "UpdateProjectDomainAttributes", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminProjectDomainAttributesUpdateResponse" + } + } + }, + "parameters": [ + { + "name": "attributes.project", + "description": "Unique project id for which this set of attributes will be applied.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "attributes.domain", + "description": "Unique domain id for which this set of attributes will be applied.", + "in": "path", + "required": true, + "type": "string" }, { - "name": "id.project", - "description": "Name of the project the resource belongs to.", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/adminProjectDomainAttributesUpdateRequest" + } + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/project_domain_attributes/{project}/{domain}": { + "get": { + "summary": "Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain.", + "operationId": "GetProjectDomainAttributes", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminProjectDomainAttributesGetResponse" + } + } + }, + "parameters": [ + { + "name": "project", + "description": "Unique project id which this set of attributes references.\n+required", "in": "path", "required": true, "type": "string" }, { - "name": "id.domain", - "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "name": "domain", + "description": "Unique domain id which this set of attributes references.\n+required", "in": "path", "required": true, "type": "string" }, { - "name": "id.name", - "description": "User provided value for the resource.\nThe combination of project + domain + name uniquely identifies the resource.\n+optional - in certain contexts - like 'List API', 'Launch plans'.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "limit", - "description": "Indicates the number of resources to be returned.\n+required.", - "in": "query", - "required": false, - "type": "integer", - "format": "int64" - }, - { - "name": "token", - "description": "In the case of multiple pages of results, the server-provided token can be used to fetch the next page\nin a query.\n+optional.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "filters", - "description": "Indicates a list of filters passed as string.\nMore info on constructing filters : \u003cLink\u003e\n+optional.", + "name": "resource_type", + "description": "Which type of matchable attributes to return.\n+required.\n\n - TASK_RESOURCE: Applies to customizable task resource requests and limits.\n - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources.\n - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment.\n - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run\n - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec.\n - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type.\n - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides.\n - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run.", "in": "query", "required": false, - "type": "string" + "type": "string", + "enum": [ + "TASK_RESOURCE", + "CLUSTER_RESOURCE", + "EXECUTION_QUEUE", + "EXECUTION_CLUSTER_LABEL", + "QUALITY_OF_SERVICE_SPECIFICATION", + "PLUGIN_OVERRIDE", + "WORKFLOW_EXECUTION_CONFIG", + "CLUSTER_ASSIGNMENT" + ], + "default": "TASK_RESOURCE" }, { - "name": "sort_by.key", - "description": "Indicates an attribute to sort the response values.\n+required.", + "name": "org", + "description": "Optional, org key applied to the attributes.", "in": "query", "required": false, "type": "string" - }, - { - "name": "sort_by.direction", - "description": "Indicates the direction to apply sort key for response values.\n+optional.\n\n - DESCENDING: By default, fields are sorted in descending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "DESCENDING", - "ASCENDING" - ], - "default": "DESCENDING" } ], "tags": [ "AdminService" ] - } - }, - "/api/v1/description_entities/{resource_type}/{id.project}/{id.domain}/{id.name}": { - "get": { - "summary": "Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions.", - "operationId": "ListDescriptionEntities", + }, + "delete": { + "summary": "Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain.", + "operationId": "DeleteProjectDomainAttributes", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/adminDescriptionEntityList" + "$ref": "#/definitions/adminProjectDomainAttributesDeleteResponse" } } }, "parameters": [ { - "name": "resource_type", - "description": "Identifies the specific type of resource that this identifier corresponds to.", - "in": "path", - "required": true, - "type": "string", - "enum": [ - "UNSPECIFIED", - "TASK", - "WORKFLOW", - "LAUNCH_PLAN", - "DATASET" - ] - }, - { - "name": "id.project", - "description": "Name of the project the resource belongs to.", + "name": "project", + "description": "Unique project id which this set of attributes references.\n+required", "in": "path", "required": true, "type": "string" }, { - "name": "id.domain", - "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "name": "domain", + "description": "Unique domain id which this set of attributes references.\n+required", "in": "path", "required": true, "type": "string" }, { - "name": "id.name", - "description": "User provided value for the resource.\nThe combination of project + domain + name uniquely identifies the resource.\n+optional - in certain contexts - like 'List API', 'Launch plans'", - "in": "path", + "name": "body", + "in": "body", "required": true, - "type": "string" - }, + "schema": { + "$ref": "#/definitions/adminProjectDomainAttributesDeleteRequest" + } + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/projects": { + "get": { + "summary": "Fetches a list of :ref:`ref_flyteidl.admin.Project`", + "operationId": "ListProjects", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminProjects" + } + } + }, + "parameters": [ { "name": "limit", - "description": "Indicates the number of resources to be returned.\n+required.", + "description": "Indicates the number of projects to be returned.\n+required.", "in": "query", "required": false, "type": "integer", @@ -655,7 +4304,7 @@ }, { "name": "token", - "description": "In the case of multiple pages of results, the server-provided token can be used to fetch the next page\nin a query.\n+optional.", + "description": "In the case of multiple pages of results, this server-provided token can be used to fetch the next page\nin a query.\n+optional.", "in": "query", "required": false, "type": "string" @@ -690,17 +4339,15 @@ "tags": [ "AdminService" ] - } - }, - "/api/v1/events/nodes": { + }, "post": { - "summary": "Indicates a :ref:`ref_flyteidl.event.NodeExecutionEvent` has occurred.", - "operationId": "CreateNodeEvent", + "summary": "Registers a :ref:`ref_flyteidl.admin.Project` with the Flyte deployment.", + "operationId": "RegisterProject", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/adminNodeExecutionEventResponse" + "$ref": "#/definitions/adminProjectRegisterResponse" } } }, @@ -710,7 +4357,7 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/adminNodeExecutionEventRequest" + "$ref": "#/definitions/adminProjectRegisterRequest" } } ], @@ -719,79 +4366,39 @@ ] } }, - "/api/v1/events/tasks": { - "post": { - "summary": "Indicates a :ref:`ref_flyteidl.event.TaskExecutionEvent` has occurred.", - "operationId": "CreateTaskEvent", + "/api/v1/projects/org/{org}/{id}": { + "put": { + "summary": "Updates an existing :ref:`ref_flyteidl.admin.Project`\nflyteidl.admin.Project should be passed but the domains property should be empty;\nit will be ignored in the handler as domains cannot be updated via this API.", + "operationId": "UpdateProject2", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/adminTaskExecutionEventResponse" + "$ref": "#/definitions/adminProjectUpdateResponse" } } }, "parameters": [ { - "name": "body", - "in": "body", + "name": "org", + "description": "Optional, org key applied to the resource.", + "in": "path", "required": true, - "schema": { - "$ref": "#/definitions/adminTaskExecutionEventRequest" - } - } - ], - "tags": [ - "AdminService" - ] - } - }, - "/api/v1/events/workflows": { - "post": { - "summary": "Indicates a :ref:`ref_flyteidl.event.WorkflowExecutionEvent` has occurred.", - "operationId": "CreateWorkflowEvent", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/adminWorkflowExecutionEventResponse" - } - } - }, - "parameters": [ + "type": "string" + }, { - "name": "body", - "in": "body", + "name": "id", + "description": "Globally unique project name.", + "in": "path", "required": true, - "schema": { - "$ref": "#/definitions/adminWorkflowExecutionEventRequest" - } - } - ], - "tags": [ - "AdminService" - ] - } - }, - "/api/v1/executions": { - "post": { - "summary": "Triggers the creation of a :ref:`ref_flyteidl.admin.Execution`", - "operationId": "CreateExecution", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/adminExecutionCreateResponse" - } - } - }, - "parameters": [ + "type": "string" + }, { "name": "body", "in": "body", "required": true, "schema": { - "$ref": "#/definitions/adminExecutionCreateRequest" + "$ref": "#/definitions/adminProject" } } ], @@ -800,52 +4407,32 @@ ] } }, - "/api/v1/executions/recover": { - "post": { - "summary": "Recreates a previously-run workflow execution that will only start executing from the last known failure point.\nIn Recover mode, users cannot change any input parameters or update the version of the execution.\nThis is extremely useful to recover from system errors and byzantine faults like - Loss of K8s cluster, bugs in platform or instability, machine failures,\ndownstream system failures (downstream services), or simply to recover executions that failed because of retry exhaustion and should complete if tried again.\nSee :ref:`ref_flyteidl.admin.ExecutionRecoverRequest` for more details.", - "operationId": "RecoverExecution", + "/api/v1/projects/{id}": { + "put": { + "summary": "Updates an existing :ref:`ref_flyteidl.admin.Project`\nflyteidl.admin.Project should be passed but the domains property should be empty;\nit will be ignored in the handler as domains cannot be updated via this API.", + "operationId": "UpdateProject", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/adminExecutionCreateResponse" + "$ref": "#/definitions/adminProjectUpdateResponse" } } }, "parameters": [ { - "name": "body", - "in": "body", + "name": "id", + "description": "Globally unique project name.", + "in": "path", "required": true, - "schema": { - "$ref": "#/definitions/adminExecutionRecoverRequest" - } - } - ], - "tags": [ - "AdminService" - ] - } - }, - "/api/v1/executions/relaunch": { - "post": { - "summary": "Triggers the creation of an identical :ref:`ref_flyteidl.admin.Execution`", - "operationId": "RelaunchExecution", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/adminExecutionCreateResponse" - } - } - }, - "parameters": [ + "type": "string" + }, { "name": "body", "in": "body", "required": true, "schema": { - "$ref": "#/definitions/adminExecutionRelaunchRequest" + "$ref": "#/definitions/adminProject" } } ], @@ -854,80 +4441,109 @@ ] } }, - "/api/v1/executions/{id.project}/{id.domain}": { + "/api/v1/task_executions/org/{id.node_execution_id.execution_id.org}/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}": { "get": { - "summary": "Fetch a list of :ref:`ref_flyteidl.admin.Execution`.", - "operationId": "ListExecutions", + "summary": "Fetches a :ref:`ref_flyteidl.admin.TaskExecution`.", + "operationId": "GetTaskExecution2", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/adminExecutionList" + "$ref": "#/definitions/flyteidladminTaskExecution" } } }, "parameters": [ { - "name": "id.project", + "name": "id.node_execution_id.execution_id.org", + "description": "Optional, org key applied to the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.node_execution_id.execution_id.project", "description": "Name of the project the resource belongs to.", "in": "path", "required": true, "type": "string" }, { - "name": "id.domain", + "name": "id.node_execution_id.execution_id.domain", "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", "in": "path", "required": true, "type": "string" }, { - "name": "id.name", - "description": "User provided value for the resource.\nThe combination of project + domain + name uniquely identifies the resource.\n+optional - in certain contexts - like 'List API', 'Launch plans'.", - "in": "query", - "required": false, + "name": "id.node_execution_id.execution_id.name", + "description": "User or system provided value for the resource.", + "in": "path", + "required": true, "type": "string" }, { - "name": "limit", - "description": "Indicates the number of resources to be returned.\n+required.", - "in": "query", - "required": false, - "type": "integer", - "format": "int64" + "name": "id.node_execution_id.node_id", + "in": "path", + "required": true, + "type": "string" }, { - "name": "token", - "description": "In the case of multiple pages of results, this server-provided token can be used to fetch the next page\nin a query.\n+optional.", - "in": "query", - "required": false, + "name": "id.task_id.project", + "description": "Name of the project the resource belongs to.", + "in": "path", + "required": true, "type": "string" }, { - "name": "filters", - "description": "Indicates a list of filters passed as string.\nMore info on constructing filters : \u003cLink\u003e\n+optional.", - "in": "query", - "required": false, + "name": "id.task_id.domain", + "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "in": "path", + "required": true, "type": "string" }, { - "name": "sort_by.key", - "description": "Indicates an attribute to sort the response values.\n+required.", - "in": "query", - "required": false, + "name": "id.task_id.name", + "description": "User provided value for the resource.", + "in": "path", + "required": true, "type": "string" }, { - "name": "sort_by.direction", - "description": "Indicates the direction to apply sort key for response values.\n+optional.\n\n - DESCENDING: By default, fields are sorted in descending order.", + "name": "id.task_id.version", + "description": "Specific version of the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.retry_attempt", + "in": "path", + "required": true, + "type": "integer", + "format": "int64" + }, + { + "name": "id.task_id.resource_type", + "description": "Identifies the specific type of resource that this identifier corresponds to.\n\n - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects.\nEventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects \nin a similar manner to other Flyte objects", "in": "query", "required": false, "type": "string", "enum": [ - "DESCENDING", - "ASCENDING" + "UNSPECIFIED", + "TASK", + "WORKFLOW", + "LAUNCH_PLAN", + "DATASET" ], - "default": "DESCENDING" + "default": "UNSPECIFIED" + }, + { + "name": "id.task_id.org", + "description": "Optional, org key applied to the resource.", + "in": "query", + "required": false, + "type": "string" } ], "tags": [ @@ -935,232 +4551,203 @@ ] } }, - "/api/v1/executions/{id.project}/{id.domain}/{id.name}": { + "/api/v1/task_executions/org/{node_execution_id.execution_id.org}/{node_execution_id.execution_id.project}/{node_execution_id.execution_id.domain}/{node_execution_id.execution_id.name}/{node_execution_id.node_id}": { "get": { - "summary": "Fetches a :ref:`ref_flyteidl.admin.Execution`.", - "operationId": "GetExecution", + "summary": "Fetches a list of :ref:`ref_flyteidl.admin.TaskExecution`.", + "operationId": "ListTaskExecutions2", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/adminExecution" + "$ref": "#/definitions/adminTaskExecutionList" } } }, "parameters": [ { - "name": "id.project", + "name": "node_execution_id.execution_id.org", + "description": "Optional, org key applied to the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "node_execution_id.execution_id.project", "description": "Name of the project the resource belongs to.", "in": "path", "required": true, "type": "string" }, { - "name": "id.domain", + "name": "node_execution_id.execution_id.domain", "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", "in": "path", "required": true, "type": "string" }, { - "name": "id.name", + "name": "node_execution_id.execution_id.name", "description": "User or system provided value for the resource.", "in": "path", "required": true, "type": "string" - } - ], - "tags": [ - "AdminService" - ] - }, - "delete": { - "summary": "Terminates an in-progress :ref:`ref_flyteidl.admin.Execution`.", - "operationId": "TerminateExecution", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/adminExecutionTerminateResponse" - } - } - }, - "parameters": [ + }, { - "name": "id.project", - "description": "Name of the project the resource belongs to.", + "name": "node_execution_id.node_id", "in": "path", "required": true, "type": "string" }, { - "name": "id.domain", - "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", - "in": "path", - "required": true, + "name": "limit", + "description": "Indicates the number of resources to be returned.\n+required.", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "token", + "description": "In the case of multiple pages of results, the server-provided token can be used to fetch the next page\nin a query.\n+optional.", + "in": "query", + "required": false, "type": "string" }, { - "name": "id.name", - "description": "User or system provided value for the resource.", - "in": "path", - "required": true, + "name": "filters", + "description": "Indicates a list of filters passed as string.\nMore info on constructing filters : \u003cLink\u003e\n+optional.", + "in": "query", + "required": false, "type": "string" }, { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/adminExecutionTerminateRequest" - } + "name": "sort_by.key", + "description": "Indicates an attribute to sort the response values.\n+required.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sort_by.direction", + "description": "Indicates the direction to apply sort key for response values.\n+optional.\n\n - DESCENDING: By default, fields are sorted in descending order.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "DESCENDING", + "ASCENDING" + ], + "default": "DESCENDING" } ], "tags": [ "AdminService" ] - }, - "put": { - "summary": "Update execution belonging to project domain :ref:`ref_flyteidl.admin.Execution`.", - "operationId": "UpdateExecution", + } + }, + "/api/v1/task_executions/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}": { + "get": { + "summary": "Fetches a :ref:`ref_flyteidl.admin.TaskExecution`.", + "operationId": "GetTaskExecution", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/adminExecutionUpdateResponse" + "$ref": "#/definitions/flyteidladminTaskExecution" } } }, "parameters": [ { - "name": "id.project", + "name": "id.node_execution_id.execution_id.project", "description": "Name of the project the resource belongs to.", "in": "path", "required": true, "type": "string" }, { - "name": "id.domain", + "name": "id.node_execution_id.execution_id.domain", "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", "in": "path", "required": true, "type": "string" }, { - "name": "id.name", + "name": "id.node_execution_id.execution_id.name", "description": "User or system provided value for the resource.", "in": "path", "required": true, "type": "string" }, { - "name": "body", - "in": "body", + "name": "id.node_execution_id.node_id", + "in": "path", "required": true, - "schema": { - "$ref": "#/definitions/adminExecutionUpdateRequest" - } - } - ], - "tags": [ - "AdminService" - ] - } - }, - "/api/v1/launch_plan_ids/{project}/{domain}": { - "get": { - "summary": "Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of launch plan objects.", - "operationId": "ListLaunchPlanIds", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/adminNamedEntityIdentifierList" - } - } - }, - "parameters": [ + "type": "string" + }, { - "name": "project", - "description": "Name of the project that contains the identifiers.\n+required", + "name": "id.task_id.project", + "description": "Name of the project the resource belongs to.", "in": "path", "required": true, "type": "string" }, { - "name": "domain", - "description": "Name of the domain the identifiers belongs to within the project.\n+required", + "name": "id.task_id.domain", + "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", "in": "path", "required": true, "type": "string" }, { - "name": "limit", - "description": "Indicates the number of resources to be returned.\n+required.", - "in": "query", - "required": false, - "type": "integer", - "format": "int64" + "name": "id.task_id.name", + "description": "User provided value for the resource.", + "in": "path", + "required": true, + "type": "string" }, { - "name": "token", - "description": "In the case of multiple pages of results, the server-provided token can be used to fetch the next page\nin a query.\n+optional.", - "in": "query", - "required": false, + "name": "id.task_id.version", + "description": "Specific version of the resource.", + "in": "path", + "required": true, "type": "string" }, { - "name": "sort_by.key", - "description": "Indicates an attribute to sort the response values.\n+required.", - "in": "query", - "required": false, - "type": "string" + "name": "id.retry_attempt", + "in": "path", + "required": true, + "type": "integer", + "format": "int64" }, { - "name": "sort_by.direction", - "description": "Indicates the direction to apply sort key for response values.\n+optional.\n\n - DESCENDING: By default, fields are sorted in descending order.", + "name": "id.task_id.resource_type", + "description": "Identifies the specific type of resource that this identifier corresponds to.\n\n - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects.\nEventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects \nin a similar manner to other Flyte objects", "in": "query", "required": false, "type": "string", "enum": [ - "DESCENDING", - "ASCENDING" + "UNSPECIFIED", + "TASK", + "WORKFLOW", + "LAUNCH_PLAN", + "DATASET" ], - "default": "DESCENDING" + "default": "UNSPECIFIED" }, { - "name": "filters", - "description": "Indicates a list of filters passed as string.\n+optional.", + "name": "id.task_id.org", + "description": "Optional, org key applied to the resource.", "in": "query", "required": false, "type": "string" - } - ], - "tags": [ - "AdminService" - ] - } - }, - "/api/v1/launch_plans": { - "post": { - "summary": "Create and upload a :ref:`ref_flyteidl.admin.LaunchPlan` definition", - "operationId": "CreateLaunchPlan", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/adminLaunchPlanCreateResponse" - } - } - }, - "parameters": [ + }, { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/adminLaunchPlanCreateRequest" - } + "name": "id.node_execution_id.execution_id.org", + "description": "Optional, org key applied to the resource.", + "in": "query", + "required": false, + "type": "string" } ], "tags": [ @@ -1168,36 +4755,49 @@ ] } }, - "/api/v1/launch_plans/{id.project}/{id.domain}": { + "/api/v1/task_executions/{node_execution_id.execution_id.project}/{node_execution_id.execution_id.domain}/{node_execution_id.execution_id.name}/{node_execution_id.node_id}": { "get": { - "summary": "Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions.", - "operationId": "ListLaunchPlans2", + "summary": "Fetches a list of :ref:`ref_flyteidl.admin.TaskExecution`.", + "operationId": "ListTaskExecutions", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/adminLaunchPlanList" + "$ref": "#/definitions/adminTaskExecutionList" } } }, "parameters": [ { - "name": "id.project", + "name": "node_execution_id.execution_id.project", "description": "Name of the project the resource belongs to.", "in": "path", "required": true, "type": "string" }, { - "name": "id.domain", + "name": "node_execution_id.execution_id.domain", "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", "in": "path", "required": true, "type": "string" }, { - "name": "id.name", - "description": "User provided value for the resource.\nThe combination of project + domain + name uniquely identifies the resource.\n+optional - in certain contexts - like 'List API', 'Launch plans'.", + "name": "node_execution_id.execution_id.name", + "description": "User or system provided value for the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "node_execution_id.node_id", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "node_execution_id.execution_id.org", + "description": "Optional, org key applied to the resource.", "in": "query", "required": false, "type": "string" @@ -1212,7 +4812,7 @@ }, { "name": "token", - "description": "In the case of multiple pages of results, this server-provided token can be used to fetch the next page\nin a query.\n+optional.", + "description": "In the case of multiple pages of results, the server-provided token can be used to fetch the next page\nin a query.\n+optional.", "in": "query", "required": false, "type": "string" @@ -1249,36 +4849,29 @@ ] } }, - "/api/v1/launch_plans/{id.project}/{id.domain}/{id.name}": { + "/api/v1/task_ids/{project}/{domain}": { "get": { - "summary": "Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions.", - "operationId": "ListLaunchPlans", + "summary": "Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of task objects.", + "operationId": "ListTaskIds", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/adminLaunchPlanList" + "$ref": "#/definitions/adminNamedEntityIdentifierList" } } }, "parameters": [ { - "name": "id.project", - "description": "Name of the project the resource belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "id.domain", - "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "name": "project", + "description": "Name of the project that contains the identifiers.\n+required", "in": "path", "required": true, "type": "string" }, { - "name": "id.name", - "description": "User provided value for the resource.\nThe combination of project + domain + name uniquely identifies the resource.\n+optional - in certain contexts - like 'List API', 'Launch plans'", + "name": "domain", + "description": "Name of the domain the identifiers belongs to within the project.\n+required", "in": "path", "required": true, "type": "string" @@ -1293,14 +4886,7 @@ }, { "name": "token", - "description": "In the case of multiple pages of results, this server-provided token can be used to fetch the next page\nin a query.\n+optional.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "filters", - "description": "Indicates a list of filters passed as string.\nMore info on constructing filters : \u003cLink\u003e\n+optional.", + "description": "In the case of multiple pages of results, the server-provided token can be used to fetch the next page\nin a query.\n+optional.", "in": "query", "required": false, "type": "string" @@ -1323,120 +4909,46 @@ "ASCENDING" ], "default": "DESCENDING" - } - ], - "tags": [ - "AdminService" - ] - } - }, - "/api/v1/launch_plans/{id.project}/{id.domain}/{id.name}/{id.version}": { - "get": { - "summary": "Fetch a :ref:`ref_flyteidl.admin.LaunchPlan` definition.", - "operationId": "GetLaunchPlan", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/adminLaunchPlan" - } - } - }, - "parameters": [ - { - "name": "id.project", - "description": "Name of the project the resource belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "id.domain", - "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "id.name", - "description": "User provided value for the resource.", - "in": "path", - "required": true, - "type": "string" }, { - "name": "id.version", - "description": "Specific version of the resource.", - "in": "path", - "required": true, + "name": "filters", + "description": "Indicates a list of filters passed as string.\n+optional.", + "in": "query", + "required": false, "type": "string" }, { - "name": "id.resource_type", - "description": "Identifies the specific type of resource that this identifier corresponds to.\n\n - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects.\nEventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects \nin a similar manner to other Flyte objects", + "name": "org", + "description": "Optional, org key applied to the resource.", "in": "query", "required": false, - "type": "string", - "enum": [ - "UNSPECIFIED", - "TASK", - "WORKFLOW", - "LAUNCH_PLAN", - "DATASET" - ], - "default": "UNSPECIFIED" + "type": "string" } ], "tags": [ "AdminService" ] - }, - "put": { - "summary": "Updates the status of a registered :ref:`ref_flyteidl.admin.LaunchPlan`.", - "operationId": "UpdateLaunchPlan", + } + }, + "/api/v1/tasks": { + "post": { + "summary": "Create and upload a :ref:`ref_flyteidl.admin.Task` definition", + "operationId": "CreateTask", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/adminLaunchPlanUpdateResponse" + "$ref": "#/definitions/flyteidladminTaskCreateResponse" } } }, "parameters": [ - { - "name": "id.project", - "description": "Name of the project the resource belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "id.domain", - "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "id.name", - "description": "User provided value for the resource.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "id.version", - "description": "Specific version of the resource.", - "in": "path", - "required": true, - "type": "string" - }, { "name": "body", "in": "body", "required": true, "schema": { - "$ref": "#/definitions/adminLaunchPlanUpdateRequest" + "$ref": "#/definitions/flyteidladminTaskCreateRequest" } } ], @@ -1445,56 +4957,26 @@ ] } }, - "/api/v1/matchable_attributes": { + "/api/v1/tasks/org/{id.org}/{id.project}/{id.domain}": { "get": { - "summary": "Lists custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a specific resource type.", - "operationId": "ListMatchableAttributes", + "summary": "Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions.", + "operationId": "ListTasks4", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/adminListMatchableAttributesResponse" + "$ref": "#/definitions/adminTaskList" } } }, "parameters": [ { - "name": "resource_type", - "description": "+required.\n\n - TASK_RESOURCE: Applies to customizable task resource requests and limits.\n - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources.\n - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment.\n - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run\n - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec.\n - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type.\n - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides.\n - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "TASK_RESOURCE", - "CLUSTER_RESOURCE", - "EXECUTION_QUEUE", - "EXECUTION_CLUSTER_LABEL", - "QUALITY_OF_SERVICE_SPECIFICATION", - "PLUGIN_OVERRIDE", - "WORKFLOW_EXECUTION_CONFIG", - "CLUSTER_ASSIGNMENT" - ], - "default": "TASK_RESOURCE" - } - ], - "tags": [ - "AdminService" - ] - } - }, - "/api/v1/metrics/executions/{id.project}/{id.domain}/{id.name}": { - "get": { - "summary": "Fetches runtime metrics for a :ref:`ref_flyteidl.admin.Execution`.", - "operationId": "GetExecutionMetrics", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/adminWorkflowExecutionGetMetricsResponse" - } - } - }, - "parameters": [ + "name": "id.org", + "description": "Optional, org key applied to the resource.", + "in": "path", + "required": true, + "type": "string" + }, { "name": "id.project", "description": "Name of the project the resource belongs to.", @@ -1511,18 +4993,51 @@ }, { "name": "id.name", - "description": "User or system provided value for the resource.", - "in": "path", - "required": true, + "description": "User provided value for the resource.\nThe combination of project + domain + name uniquely identifies the resource.\n+optional - in certain contexts - like 'List API', 'Launch plans'.", + "in": "query", + "required": false, "type": "string" }, { - "name": "depth", - "description": "depth defines the number of Flyte entity levels to traverse when breaking down execution details.", + "name": "limit", + "description": "Indicates the number of resources to be returned.\n+required.", "in": "query", "required": false, "type": "integer", - "format": "int32" + "format": "int64" + }, + { + "name": "token", + "description": "In the case of multiple pages of results, this server-provided token can be used to fetch the next page\nin a query.\n+optional.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "filters", + "description": "Indicates a list of filters passed as string.\nMore info on constructing filters : \u003cLink\u003e\n+optional.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sort_by.key", + "description": "Indicates an attribute to sort the response values.\n+required.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sort_by.direction", + "description": "Indicates the direction to apply sort key for response values.\n+optional.\n\n - DESCENDING: By default, fields are sorted in descending order.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "DESCENDING", + "ASCENDING" + ], + "default": "DESCENDING" } ], "tags": [ @@ -1530,32 +5045,25 @@ ] } }, - "/api/v1/named_entities/{resource_type}/{id.project}/{id.domain}/{id.name}": { + "/api/v1/tasks/org/{id.org}/{id.project}/{id.domain}/{id.name}": { "get": { - "summary": "Returns a :ref:`ref_flyteidl.admin.NamedEntity` object.", - "operationId": "GetNamedEntity", + "summary": "Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions.", + "operationId": "ListTasks2", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/adminNamedEntity" + "$ref": "#/definitions/adminTaskList" } } }, "parameters": [ { - "name": "resource_type", - "description": "Resource type of the metadata to get. One of Task, Workflow or LaunchPlan.\n+required", + "name": "id.org", + "description": "Optional, org key applied to the resource.", "in": "path", "required": true, - "type": "string", - "enum": [ - "UNSPECIFIED", - "TASK", - "WORKFLOW", - "LAUNCH_PLAN", - "DATASET" - ] + "type": "string" }, { "name": "id.project", @@ -1577,37 +5085,73 @@ "in": "path", "required": true, "type": "string" + }, + { + "name": "limit", + "description": "Indicates the number of resources to be returned.\n+required.", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "token", + "description": "In the case of multiple pages of results, this server-provided token can be used to fetch the next page\nin a query.\n+optional.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "filters", + "description": "Indicates a list of filters passed as string.\nMore info on constructing filters : \u003cLink\u003e\n+optional.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sort_by.key", + "description": "Indicates an attribute to sort the response values.\n+required.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sort_by.direction", + "description": "Indicates the direction to apply sort key for response values.\n+optional.\n\n - DESCENDING: By default, fields are sorted in descending order.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "DESCENDING", + "ASCENDING" + ], + "default": "DESCENDING" } ], "tags": [ "AdminService" ] - }, - "put": { - "summary": "Updates a :ref:`ref_flyteidl.admin.NamedEntity` object.", - "operationId": "UpdateNamedEntity", + } + }, + "/api/v1/tasks/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version}": { + "get": { + "summary": "Fetch a :ref:`ref_flyteidl.admin.Task` definition.", + "operationId": "GetTask2", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/adminNamedEntityUpdateResponse" + "$ref": "#/definitions/adminTask" } } }, "parameters": [ { - "name": "resource_type", - "description": "Resource type of the metadata to update\n+required", + "name": "id.org", + "description": "Optional, org key applied to the resource.", "in": "path", "required": true, - "type": "string", - "enum": [ - "UNSPECIFIED", - "TASK", - "WORKFLOW", - "LAUNCH_PLAN", - "DATASET" - ] + "type": "string" }, { "name": "id.project", @@ -1625,18 +5169,32 @@ }, { "name": "id.name", - "description": "User provided value for the resource.\nThe combination of project + domain + name uniquely identifies the resource.\n+optional - in certain contexts - like 'List API', 'Launch plans'", + "description": "User provided value for the resource.", "in": "path", "required": true, "type": "string" }, { - "name": "body", - "in": "body", + "name": "id.version", + "description": "Specific version of the resource.", + "in": "path", "required": true, - "schema": { - "$ref": "#/definitions/adminNamedEntityUpdateRequest" - } + "type": "string" + }, + { + "name": "id.resource_type", + "description": "Identifies the specific type of resource that this identifier corresponds to.\n\n - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects.\nEventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects \nin a similar manner to other Flyte objects", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "UNSPECIFIED", + "TASK", + "WORKFLOW", + "LAUNCH_PLAN", + "DATASET" + ], + "default": "UNSPECIFIED" } ], "tags": [ @@ -1644,32 +5202,25 @@ ] } }, - "/api/v1/named_entities/{resource_type}/{project}/{domain}": { + "/api/v1/tasks/org/{org}/{project}/{domain}": { "get": { - "summary": "Returns a list of :ref:`ref_flyteidl.admin.NamedEntity` objects.", - "operationId": "ListNamedEntities", + "summary": "Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of task objects.", + "operationId": "ListTaskIds2", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/adminNamedEntityList" + "$ref": "#/definitions/adminNamedEntityIdentifierList" } } }, "parameters": [ { - "name": "resource_type", - "description": "Resource type of the metadata to query. One of Task, Workflow or LaunchPlan.\n+required", + "name": "org", + "description": "Optional, org key applied to the resource.", "in": "path", "required": true, - "type": "string", - "enum": [ - "UNSPECIFIED", - "TASK", - "WORKFLOW", - "LAUNCH_PLAN", - "DATASET" - ] + "type": "string" }, { "name": "project", @@ -1680,14 +5231,14 @@ }, { "name": "domain", - "description": "Name of the domain the identifiers belongs to within the project.", + "description": "Name of the domain the identifiers belongs to within the project.\n+required", "in": "path", "required": true, "type": "string" }, { "name": "limit", - "description": "Indicates the number of resources to be returned.", + "description": "Indicates the number of resources to be returned.\n+required.", "in": "query", "required": false, "type": "integer", @@ -1732,45 +5283,87 @@ ] } }, - "/api/v1/node_executions/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}": { + "/api/v1/tasks/{id.project}/{id.domain}": { "get": { - "summary": "Fetches a :ref:`ref_flyteidl.admin.NodeExecution`.", - "operationId": "GetNodeExecution", + "summary": "Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions.", + "operationId": "ListTasks3", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/flyteidladminNodeExecution" + "$ref": "#/definitions/adminTaskList" } } }, "parameters": [ { - "name": "id.execution_id.project", + "name": "id.project", "description": "Name of the project the resource belongs to.", "in": "path", "required": true, "type": "string" }, { - "name": "id.execution_id.domain", + "name": "id.domain", "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", "in": "path", "required": true, "type": "string" }, { - "name": "id.execution_id.name", - "description": "User or system provided value for the resource.", - "in": "path", - "required": true, + "name": "id.name", + "description": "User provided value for the resource.\nThe combination of project + domain + name uniquely identifies the resource.\n+optional - in certain contexts - like 'List API', 'Launch plans'.", + "in": "query", + "required": false, "type": "string" }, { - "name": "id.node_id", - "in": "path", - "required": true, + "name": "id.org", + "description": "Optional, org key applied to the resource.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "limit", + "description": "Indicates the number of resources to be returned.\n+required.", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "token", + "description": "In the case of multiple pages of results, this server-provided token can be used to fetch the next page\nin a query.\n+optional.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "filters", + "description": "Indicates a list of filters passed as string.\nMore info on constructing filters : \u003cLink\u003e\n+optional.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sort_by.key", + "description": "Indicates an attribute to sort the response values.\n+required.", + "in": "query", + "required": false, "type": "string" + }, + { + "name": "sort_by.direction", + "description": "Indicates the direction to apply sort key for response values.\n+optional.\n\n - DESCENDING: By default, fields are sorted in descending order.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "DESCENDING", + "ASCENDING" + ], + "default": "DESCENDING" } ], "tags": [ @@ -1778,40 +5371,47 @@ ] } }, - "/api/v1/node_executions/{workflow_execution_id.project}/{workflow_execution_id.domain}/{workflow_execution_id.name}": { + "/api/v1/tasks/{id.project}/{id.domain}/{id.name}": { "get": { - "summary": "Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution`.", - "operationId": "ListNodeExecutions", + "summary": "Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions.", + "operationId": "ListTasks", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/adminNodeExecutionList" + "$ref": "#/definitions/adminTaskList" } } }, "parameters": [ { - "name": "workflow_execution_id.project", + "name": "id.project", "description": "Name of the project the resource belongs to.", "in": "path", "required": true, "type": "string" }, { - "name": "workflow_execution_id.domain", + "name": "id.domain", "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", "in": "path", "required": true, "type": "string" }, { - "name": "workflow_execution_id.name", - "description": "User or system provided value for the resource.", + "name": "id.name", + "description": "User provided value for the resource.\nThe combination of project + domain + name uniquely identifies the resource.\n+optional - in certain contexts - like 'List API', 'Launch plans'", "in": "path", "required": true, "type": "string" }, + { + "name": "id.org", + "description": "Optional, org key applied to the resource.", + "in": "query", + "required": false, + "type": "string" + }, { "name": "limit", "description": "Indicates the number of resources to be returned.\n+required.", @@ -1822,6 +5422,7 @@ }, { "name": "token", + "description": "In the case of multiple pages of results, this server-provided token can be used to fetch the next page\nin a query.\n+optional.", "in": "query", "required": false, "type": "string" @@ -1851,13 +5452,6 @@ "ASCENDING" ], "default": "DESCENDING" - }, - { - "name": "unique_parent_id", - "description": "Unique identifier of the parent node in the execution\n+optional.", - "in": "query", - "required": false, - "type": "string" } ], "tags": [ @@ -1865,129 +5459,111 @@ ] } }, - "/api/v1/project_attributes/{attributes.project}": { - "put": { - "summary": "Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` at the project level", - "operationId": "UpdateProjectAttributes", + "/api/v1/tasks/{id.project}/{id.domain}/{id.name}/{id.version}": { + "get": { + "summary": "Fetch a :ref:`ref_flyteidl.admin.Task` definition.", + "operationId": "GetTask", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/adminProjectAttributesUpdateResponse" + "$ref": "#/definitions/adminTask" } } }, "parameters": [ { - "name": "attributes.project", - "description": "Unique project id for which this set of attributes will be applied.", + "name": "id.project", + "description": "Name of the project the resource belongs to.", "in": "path", "required": true, "type": "string" }, { - "name": "body", - "in": "body", + "name": "id.domain", + "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "in": "path", "required": true, - "schema": { - "$ref": "#/definitions/adminProjectAttributesUpdateRequest" - } - } - ], - "tags": [ - "AdminService" - ] - } - }, - "/api/v1/project_attributes/{project}": { - "get": { - "summary": "Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain.", - "operationId": "GetProjectAttributes", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/adminProjectAttributesGetResponse" - } - } - }, - "parameters": [ + "type": "string" + }, { - "name": "project", - "description": "Unique project id which this set of attributes references.\n+required", + "name": "id.name", + "description": "User provided value for the resource.", "in": "path", "required": true, "type": "string" }, { - "name": "resource_type", - "description": "Which type of matchable attributes to return.\n+required.\n\n - TASK_RESOURCE: Applies to customizable task resource requests and limits.\n - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources.\n - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment.\n - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run\n - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec.\n - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type.\n - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides.\n - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run.", + "name": "id.version", + "description": "Specific version of the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.resource_type", + "description": "Identifies the specific type of resource that this identifier corresponds to.\n\n - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects.\nEventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects \nin a similar manner to other Flyte objects", "in": "query", "required": false, "type": "string", "enum": [ - "TASK_RESOURCE", - "CLUSTER_RESOURCE", - "EXECUTION_QUEUE", - "EXECUTION_CLUSTER_LABEL", - "QUALITY_OF_SERVICE_SPECIFICATION", - "PLUGIN_OVERRIDE", - "WORKFLOW_EXECUTION_CONFIG", - "CLUSTER_ASSIGNMENT" + "UNSPECIFIED", + "TASK", + "WORKFLOW", + "LAUNCH_PLAN", + "DATASET" ], - "default": "TASK_RESOURCE" + "default": "UNSPECIFIED" + }, + { + "name": "id.org", + "description": "Optional, org key applied to the resource.", + "in": "query", + "required": false, + "type": "string" } ], "tags": [ "AdminService" ] - }, - "delete": { - "summary": "Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain.", - "operationId": "DeleteProjectAttributes", + } + }, + "/api/v1/version": { + "get": { + "operationId": "GetVersion", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/adminProjectAttributesDeleteResponse" + "$ref": "#/definitions/adminGetVersionResponse" } } }, - "parameters": [ - { - "name": "project", - "description": "Unique project id which this set of attributes references.\n+required", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/adminProjectAttributesDeleteRequest" - } - } - ], "tags": [ "AdminService" ] } }, - "/api/v1/project_domain_attributes/{attributes.project}/{attributes.domain}": { + "/api/v1/workflow_attributes/org/{attributes.org}/{attributes.project}/{attributes.domain}/{attributes.workflow}": { "put": { - "summary": "Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain.", - "operationId": "UpdateProjectDomainAttributes", + "summary": "Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow.", + "operationId": "UpdateWorkflowAttributes2", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/adminProjectDomainAttributesUpdateResponse" + "$ref": "#/definitions/adminWorkflowAttributesUpdateResponse" } } }, "parameters": [ + { + "name": "attributes.org", + "description": "Optional, org key applied to the attributes.", + "in": "path", + "required": true, + "type": "string" + }, { "name": "attributes.project", "description": "Unique project id for which this set of attributes will be applied.", @@ -2002,12 +5578,19 @@ "required": true, "type": "string" }, + { + "name": "attributes.workflow", + "description": "Workflow name for which this set of attributes will be applied.", + "in": "path", + "required": true, + "type": "string" + }, { "name": "body", "in": "body", "required": true, "schema": { - "$ref": "#/definitions/adminProjectDomainAttributesUpdateRequest" + "$ref": "#/definitions/adminWorkflowAttributesUpdateRequest" } } ], @@ -2016,19 +5599,26 @@ ] } }, - "/api/v1/project_domain_attributes/{project}/{domain}": { + "/api/v1/workflow_attributes/org/{org}/{project}/{domain}/{workflow}": { "get": { - "summary": "Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain.", - "operationId": "GetProjectDomainAttributes", + "summary": "Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow.", + "operationId": "GetWorkflowAttributes2", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/adminProjectDomainAttributesGetResponse" + "$ref": "#/definitions/adminWorkflowAttributesGetResponse" } } }, "parameters": [ + { + "name": "org", + "description": "Optional, org key applied to the attributes.", + "in": "path", + "required": true, + "type": "string" + }, { "name": "project", "description": "Unique project id which this set of attributes references.\n+required", @@ -2043,6 +5633,13 @@ "required": true, "type": "string" }, + { + "name": "workflow", + "description": "Workflow name which this set of attributes references.\n+required", + "in": "path", + "required": true, + "type": "string" + }, { "name": "resource_type", "description": "Which type of matchable attributes to return.\n+required.\n\n - TASK_RESOURCE: Applies to customizable task resource requests and limits.\n - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources.\n - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment.\n - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run\n - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec.\n - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type.\n - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides.\n - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run.", @@ -2059,130 +5656,59 @@ "WORKFLOW_EXECUTION_CONFIG", "CLUSTER_ASSIGNMENT" ], - "default": "TASK_RESOURCE" - } - ], - "tags": [ - "AdminService" - ] - }, - "delete": { - "summary": "Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain.", - "operationId": "DeleteProjectDomainAttributes", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/adminProjectDomainAttributesDeleteResponse" - } - } - }, - "parameters": [ - { - "name": "project", - "description": "Unique project id which this set of attributes references.\n+required", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "domain", - "description": "Unique domain id which this set of attributes references.\n+required", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/adminProjectDomainAttributesDeleteRequest" - } - } - ], - "tags": [ - "AdminService" - ] - } - }, - "/api/v1/projects": { - "get": { - "summary": "Fetches a list of :ref:`ref_flyteidl.admin.Project`", - "operationId": "ListProjects", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/adminProjects" - } - } - }, - "parameters": [ - { - "name": "limit", - "description": "Indicates the number of projects to be returned.\n+required.", - "in": "query", - "required": false, - "type": "integer", - "format": "int64" - }, - { - "name": "token", - "description": "In the case of multiple pages of results, this server-provided token can be used to fetch the next page\nin a query.\n+optional.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "filters", - "description": "Indicates a list of filters passed as string.\nMore info on constructing filters : \u003cLink\u003e\n+optional.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "sort_by.key", - "description": "Indicates an attribute to sort the response values.\n+required.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "sort_by.direction", - "description": "Indicates the direction to apply sort key for response values.\n+optional.\n\n - DESCENDING: By default, fields are sorted in descending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "DESCENDING", - "ASCENDING" - ], - "default": "DESCENDING" + "default": "TASK_RESOURCE" } ], "tags": [ "AdminService" ] }, - "post": { - "summary": "Registers a :ref:`ref_flyteidl.admin.Project` with the Flyte deployment.", - "operationId": "RegisterProject", + "delete": { + "summary": "Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow.", + "operationId": "DeleteWorkflowAttributes2", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/adminProjectRegisterResponse" + "$ref": "#/definitions/adminWorkflowAttributesDeleteResponse" } } }, "parameters": [ + { + "name": "org", + "description": "Optional, org key applied to the attributes.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "project", + "description": "Unique project id which this set of attributes references.\n+required", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "domain", + "description": "Unique domain id which this set of attributes references.\n+required", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "workflow", + "description": "Workflow name which this set of attributes references.\n+required", + "in": "path", + "required": true, + "type": "string" + }, { "name": "body", "in": "body", "required": true, "schema": { - "$ref": "#/definitions/adminProjectRegisterRequest" + "$ref": "#/definitions/adminWorkflowAttributesDeleteRequest" } } ], @@ -2191,22 +5717,36 @@ ] } }, - "/api/v1/projects/{id}": { + "/api/v1/workflow_attributes/{attributes.project}/{attributes.domain}/{attributes.workflow}": { "put": { - "summary": "Updates an existing :ref:`ref_flyteidl.admin.Project` \nflyteidl.admin.Project should be passed but the domains property should be empty;\nit will be ignored in the handler as domains cannot be updated via this API.", - "operationId": "UpdateProject", + "summary": "Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow.", + "operationId": "UpdateWorkflowAttributes", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/adminProjectUpdateResponse" + "$ref": "#/definitions/adminWorkflowAttributesUpdateResponse" } } }, "parameters": [ { - "name": "id", - "description": "Globally unique project name.", + "name": "attributes.project", + "description": "Unique project id for which this set of attributes will be applied.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "attributes.domain", + "description": "Unique domain id for which this set of attributes will be applied.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "attributes.workflow", + "description": "Workflow name for which this set of attributes will be applied.", "in": "path", "required": true, "type": "string" @@ -2216,7 +5756,7 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/adminProject" + "$ref": "#/definitions/adminWorkflowAttributesUpdateRequest" } } ], @@ -2225,182 +5765,110 @@ ] } }, - "/api/v1/task_executions/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}": { + "/api/v1/workflow_attributes/{project}/{domain}/{workflow}": { "get": { - "summary": "Fetches a :ref:`ref_flyteidl.admin.TaskExecution`.", - "operationId": "GetTaskExecution", + "summary": "Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow.", + "operationId": "GetWorkflowAttributes", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/flyteidladminTaskExecution" + "$ref": "#/definitions/adminWorkflowAttributesGetResponse" } } }, "parameters": [ { - "name": "id.node_execution_id.execution_id.project", - "description": "Name of the project the resource belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "id.node_execution_id.execution_id.domain", - "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "id.node_execution_id.execution_id.name", - "description": "User or system provided value for the resource.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "id.node_execution_id.node_id", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "id.task_id.project", - "description": "Name of the project the resource belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "id.task_id.domain", - "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "name": "project", + "description": "Unique project id which this set of attributes references.\n+required", "in": "path", "required": true, "type": "string" }, { - "name": "id.task_id.name", - "description": "User provided value for the resource.", + "name": "domain", + "description": "Unique domain id which this set of attributes references.\n+required", "in": "path", "required": true, "type": "string" }, { - "name": "id.task_id.version", - "description": "Specific version of the resource.", + "name": "workflow", + "description": "Workflow name which this set of attributes references.\n+required", "in": "path", "required": true, "type": "string" }, { - "name": "id.retry_attempt", - "in": "path", - "required": true, - "type": "integer", - "format": "int64" - }, - { - "name": "id.task_id.resource_type", - "description": "Identifies the specific type of resource that this identifier corresponds to.\n\n - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects.\nEventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects \nin a similar manner to other Flyte objects", + "name": "resource_type", + "description": "Which type of matchable attributes to return.\n+required.\n\n - TASK_RESOURCE: Applies to customizable task resource requests and limits.\n - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources.\n - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment.\n - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run\n - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec.\n - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type.\n - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides.\n - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run.", "in": "query", "required": false, "type": "string", "enum": [ - "UNSPECIFIED", - "TASK", - "WORKFLOW", - "LAUNCH_PLAN", - "DATASET" + "TASK_RESOURCE", + "CLUSTER_RESOURCE", + "EXECUTION_QUEUE", + "EXECUTION_CLUSTER_LABEL", + "QUALITY_OF_SERVICE_SPECIFICATION", + "PLUGIN_OVERRIDE", + "WORKFLOW_EXECUTION_CONFIG", + "CLUSTER_ASSIGNMENT" ], - "default": "UNSPECIFIED" + "default": "TASK_RESOURCE" + }, + { + "name": "org", + "description": "Optional, org key applied to the attributes.", + "in": "query", + "required": false, + "type": "string" } ], "tags": [ "AdminService" ] - } - }, - "/api/v1/task_executions/{node_execution_id.execution_id.project}/{node_execution_id.execution_id.domain}/{node_execution_id.execution_id.name}/{node_execution_id.node_id}": { - "get": { - "summary": "Fetches a list of :ref:`ref_flyteidl.admin.TaskExecution`.", - "operationId": "ListTaskExecutions", + }, + "delete": { + "summary": "Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow.", + "operationId": "DeleteWorkflowAttributes", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/adminTaskExecutionList" + "$ref": "#/definitions/adminWorkflowAttributesDeleteResponse" } } }, "parameters": [ { - "name": "node_execution_id.execution_id.project", - "description": "Name of the project the resource belongs to.", + "name": "project", + "description": "Unique project id which this set of attributes references.\n+required", "in": "path", "required": true, "type": "string" }, { - "name": "node_execution_id.execution_id.domain", - "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "name": "domain", + "description": "Unique domain id which this set of attributes references.\n+required", "in": "path", "required": true, "type": "string" }, { - "name": "node_execution_id.execution_id.name", - "description": "User or system provided value for the resource.", + "name": "workflow", + "description": "Workflow name which this set of attributes references.\n+required", "in": "path", "required": true, "type": "string" }, { - "name": "node_execution_id.node_id", - "in": "path", + "name": "body", + "in": "body", "required": true, - "type": "string" - }, - { - "name": "limit", - "description": "Indicates the number of resources to be returned.\n+required.", - "in": "query", - "required": false, - "type": "integer", - "format": "int64" - }, - { - "name": "token", - "description": "In the case of multiple pages of results, the server-provided token can be used to fetch the next page\nin a query.\n+optional.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "filters", - "description": "Indicates a list of filters passed as string.\nMore info on constructing filters : \u003cLink\u003e\n+optional.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "sort_by.key", - "description": "Indicates an attribute to sort the response values.\n+required.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "sort_by.direction", - "description": "Indicates the direction to apply sort key for response values.\n+optional.\n\n - DESCENDING: By default, fields are sorted in descending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "DESCENDING", - "ASCENDING" - ], - "default": "DESCENDING" + "schema": { + "$ref": "#/definitions/adminWorkflowAttributesDeleteRequest" + } } ], "tags": [ @@ -2408,10 +5876,10 @@ ] } }, - "/api/v1/task_ids/{project}/{domain}": { + "/api/v1/workflow_ids/{project}/{domain}": { "get": { - "summary": "Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of task objects.", - "operationId": "ListTaskIds", + "summary": "Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of workflow objects.", + "operationId": "ListWorkflowIds", "responses": { "200": { "description": "A successful response.", @@ -2475,6 +5943,13 @@ "in": "query", "required": false, "type": "string" + }, + { + "name": "org", + "description": "Optional, org key applied to the resource.", + "in": "query", + "required": false, + "type": "string" } ], "tags": [ @@ -2482,15 +5957,15 @@ ] } }, - "/api/v1/tasks": { + "/api/v1/workflows": { "post": { - "summary": "Create and upload a :ref:`ref_flyteidl.admin.Task` definition", - "operationId": "CreateTask", + "summary": "Create and upload a :ref:`ref_flyteidl.admin.Workflow` definition", + "operationId": "CreateWorkflow", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/flyteidladminTaskCreateResponse" + "$ref": "#/definitions/adminWorkflowCreateResponse" } } }, @@ -2500,7 +5975,7 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/flyteidladminTaskCreateRequest" + "$ref": "#/definitions/adminWorkflowCreateRequest" } } ], @@ -2509,19 +5984,26 @@ ] } }, - "/api/v1/tasks/{id.project}/{id.domain}": { + "/api/v1/workflows/org/{id.org}/{id.project}/{id.domain}": { "get": { - "summary": "Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions.", - "operationId": "ListTasks2", + "summary": "Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions.", + "operationId": "ListWorkflows4", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/adminTaskList" + "$ref": "#/definitions/adminWorkflowList" } } }, "parameters": [ + { + "name": "id.org", + "description": "Optional, org key applied to the resource.", + "in": "path", + "required": true, + "type": "string" + }, { "name": "id.project", "description": "Name of the project the resource belongs to.", @@ -2590,19 +6072,26 @@ ] } }, - "/api/v1/tasks/{id.project}/{id.domain}/{id.name}": { + "/api/v1/workflows/org/{id.org}/{id.project}/{id.domain}/{id.name}": { "get": { - "summary": "Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions.", - "operationId": "ListTasks", + "summary": "Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions.", + "operationId": "ListWorkflows2", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/adminTaskList" + "$ref": "#/definitions/adminWorkflowList" } } }, "parameters": [ + { + "name": "id.org", + "description": "Optional, org key applied to the resource.", + "in": "path", + "required": true, + "type": "string" + }, { "name": "id.project", "description": "Name of the project the resource belongs to.", @@ -2671,19 +6160,26 @@ ] } }, - "/api/v1/tasks/{id.project}/{id.domain}/{id.name}/{id.version}": { + "/api/v1/workflows/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version}": { "get": { - "summary": "Fetch a :ref:`ref_flyteidl.admin.Task` definition.", - "operationId": "GetTask", + "summary": "Fetch a :ref:`ref_flyteidl.admin.Workflow` definition.", + "operationId": "GetWorkflow2", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/adminTask" + "$ref": "#/definitions/adminWorkflow" } } }, "parameters": [ + { + "name": "id.org", + "description": "Optional, org key applied to the resource.", + "in": "path", + "required": true, + "type": "string" + }, { "name": "id.project", "description": "Name of the project the resource belongs to.", @@ -2733,187 +6229,26 @@ ] } }, - "/api/v1/version": { - "get": { - "operationId": "GetVersion", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/adminGetVersionResponse" - } - } - }, - "tags": [ - "AdminService" - ] - } - }, - "/api/v1/workflow_attributes/{attributes.project}/{attributes.domain}/{attributes.workflow}": { - "put": { - "summary": "Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow.", - "operationId": "UpdateWorkflowAttributes", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/adminWorkflowAttributesUpdateResponse" - } - } - }, - "parameters": [ - { - "name": "attributes.project", - "description": "Unique project id for which this set of attributes will be applied.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "attributes.domain", - "description": "Unique domain id for which this set of attributes will be applied.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "attributes.workflow", - "description": "Workflow name for which this set of attributes will be applied.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/adminWorkflowAttributesUpdateRequest" - } - } - ], - "tags": [ - "AdminService" - ] - } - }, - "/api/v1/workflow_attributes/{project}/{domain}/{workflow}": { + "/api/v1/workflows/org/{org}/{project}/{domain}": { "get": { - "summary": "Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow.", - "operationId": "GetWorkflowAttributes", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/adminWorkflowAttributesGetResponse" - } - } - }, - "parameters": [ - { - "name": "project", - "description": "Unique project id which this set of attributes references.\n+required", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "domain", - "description": "Unique domain id which this set of attributes references.\n+required", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "workflow", - "description": "Workflow name which this set of attributes references.\n+required", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "resource_type", - "description": "Which type of matchable attributes to return.\n+required.\n\n - TASK_RESOURCE: Applies to customizable task resource requests and limits.\n - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources.\n - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment.\n - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run\n - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec.\n - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type.\n - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides.\n - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "TASK_RESOURCE", - "CLUSTER_RESOURCE", - "EXECUTION_QUEUE", - "EXECUTION_CLUSTER_LABEL", - "QUALITY_OF_SERVICE_SPECIFICATION", - "PLUGIN_OVERRIDE", - "WORKFLOW_EXECUTION_CONFIG", - "CLUSTER_ASSIGNMENT" - ], - "default": "TASK_RESOURCE" - } - ], - "tags": [ - "AdminService" - ] - }, - "delete": { - "summary": "Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow.", - "operationId": "DeleteWorkflowAttributes", + "summary": "Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of workflow objects.", + "operationId": "ListWorkflowIds2", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/adminWorkflowAttributesDeleteResponse" + "$ref": "#/definitions/adminNamedEntityIdentifierList" } } }, "parameters": [ { - "name": "project", - "description": "Unique project id which this set of attributes references.\n+required", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "domain", - "description": "Unique domain id which this set of attributes references.\n+required", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "workflow", - "description": "Workflow name which this set of attributes references.\n+required", + "name": "org", + "description": "Optional, org key applied to the resource.", "in": "path", "required": true, "type": "string" }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/adminWorkflowAttributesDeleteRequest" - } - } - ], - "tags": [ - "AdminService" - ] - } - }, - "/api/v1/workflow_ids/{project}/{domain}": { - "get": { - "summary": "Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of workflow objects.", - "operationId": "ListWorkflowIds", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/adminNamedEntityIdentifierList" - } - } - }, - "parameters": [ { "name": "project", "description": "Name of the project that contains the identifiers.\n+required", @@ -2975,37 +6310,10 @@ ] } }, - "/api/v1/workflows": { - "post": { - "summary": "Create and upload a :ref:`ref_flyteidl.admin.Workflow` definition", - "operationId": "CreateWorkflow", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/adminWorkflowCreateResponse" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/adminWorkflowCreateRequest" - } - } - ], - "tags": [ - "AdminService" - ] - } - }, "/api/v1/workflows/{id.project}/{id.domain}": { "get": { "summary": "Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions.", - "operationId": "ListWorkflows2", + "operationId": "ListWorkflows3", "responses": { "200": { "description": "A successful response.", @@ -3036,6 +6344,13 @@ "required": false, "type": "string" }, + { + "name": "id.org", + "description": "Optional, org key applied to the resource.", + "in": "query", + "required": false, + "type": "string" + }, { "name": "limit", "description": "Indicates the number of resources to be returned.\n+required.", @@ -3117,6 +6432,13 @@ "required": true, "type": "string" }, + { + "name": "id.org", + "description": "Optional, org key applied to the resource.", + "in": "query", + "required": false, + "type": "string" + }, { "name": "limit", "description": "Indicates the number of resources to be returned.\n+required.", @@ -3219,6 +6541,13 @@ "DATASET" ], "default": "UNSPECIFIED" + }, + { + "name": "id.org", + "description": "Optional, org key applied to the resource.", + "in": "query", + "required": false, + "type": "string" } ], "tags": [ @@ -3839,6 +7168,10 @@ "inputs": { "$ref": "#/definitions/coreLiteralMap", "title": "The inputs required to start the execution. All required inputs must be\nincluded in this map. If not required and not provided, defaults apply.\n+optional" + }, + "org": { + "type": "string", + "description": "Optional, org key applied to the resource." } }, "description": "Request to launch an execution with the given project, domain and optionally-assigned name." @@ -4403,9 +7736,13 @@ }, "launch_plan": { "type": "string" + }, + "org": { + "type": "string", + "description": "Optional, org key applied to the resource." } }, - "description": "Represents a custom set of attributes applied for either a domain; a domain and project; or\ndomain, project and workflow name.\nThese are used to override system level defaults for kubernetes cluster resource management,\ndefault execution values, and more all across different levels of specificity." + "description": "Represents a custom set of attributes applied for either a domain (and optional org); a domain and project (and optional org);\nor domain, project and workflow name (and optional org).\nThese are used to override system level defaults for kubernetes cluster resource management,\ndefault execution values, and more all across different levels of specificity." }, "adminMatchableResource": { "type": "string", @@ -4483,6 +7820,10 @@ "name": { "type": "string", "title": "User provided value for the resource.\nThe combination of project + domain + name uniquely identifies the resource.\n+optional - in certain contexts - like 'List API', 'Launch plans'" + }, + "org": { + "type": "string", + "description": "Optional, org key applied to the resource." } }, "description": "Encapsulation of fields that identifies a Flyte resource.\nA Flyte resource can be a task, workflow or launch plan.\nA resource can internally have multiple versions and is uniquely identified\nby project, domain, and name." @@ -4817,6 +8158,10 @@ }, "state": { "$ref": "#/definitions/ProjectProjectState" + }, + "org": { + "type": "string", + "description": "Optional, org key applied to the resource." } }, "description": "Top-level namespace used to classify different entities like workflows and executions." @@ -4830,6 +8175,10 @@ }, "matching_attributes": { "$ref": "#/definitions/adminMatchingAttributes" + }, + "org": { + "type": "string", + "description": "Optional, org key applied to the project." } }, "title": "Defines a set of custom matching attributes at the project level.\nFor more info on matchable attributes, see :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration`" @@ -4844,6 +8193,10 @@ "resource_type": { "$ref": "#/definitions/adminMatchableResource", "title": "Which type of matchable attributes to delete.\n+required" + }, + "org": { + "type": "string", + "description": "Optional, org key applied to the project." } }, "title": "Request to delete a set matchable project level attribute override.\nFor more info on matchable attributes, see :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration`" @@ -4888,6 +8241,10 @@ }, "matching_attributes": { "$ref": "#/definitions/adminMatchingAttributes" + }, + "org": { + "type": "string", + "description": "Optional, org key applied to the attributes." } }, "title": "Defines a set of custom matching attributes which defines resource defaults for a project and domain.\nFor more info on matchable attributes, see :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration`" @@ -4906,6 +8263,10 @@ "resource_type": { "$ref": "#/definitions/adminMatchableResource", "title": "Which type of matchable attributes to delete.\n+required" + }, + "org": { + "type": "string", + "description": "Optional, org key applied to the attributes." } }, "title": "Request to delete a set matchable project domain attribute override.\nFor more info on matchable attributes, see :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration`" @@ -5366,6 +8727,10 @@ }, "matching_attributes": { "$ref": "#/definitions/adminMatchingAttributes" + }, + "org": { + "type": "string", + "description": "Optional, org key applied to the attributes." } }, "title": "Defines a set of custom matching attributes which defines resource defaults for a project, domain and workflow.\nFor more info on matchable attributes, see :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration`" @@ -5388,6 +8753,10 @@ "resource_type": { "$ref": "#/definitions/adminMatchableResource", "title": "Which type of matchable attributes to delete.\n+required" + }, + "org": { + "type": "string", + "description": "Optional, org key applied to the attributes." } }, "title": "Request to delete a set matchable workflow attribute override.\nFor more info on matchable attributes, see :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration`" @@ -6201,6 +9570,10 @@ "version": { "type": "string", "description": "Specific version of the resource." + }, + "org": { + "type": "string", + "description": "Optional, org key applied to the resource." } }, "description": "Encapsulation of fields that uniquely identifies a Flyte resource." @@ -7371,6 +10744,10 @@ "name": { "type": "string", "description": "User or system provided value for the resource." + }, + "org": { + "type": "string", + "description": "Optional, org key applied to the resource." } }, "title": "Encapsulation of fields that uniquely identifies a Flyte workflow execution" diff --git a/flyteidl/gen/pb-go/flyteidl/service/agent.swagger.json b/flyteidl/gen/pb-go/flyteidl/service/agent.swagger.json index 3311e69e38..33eb5cf445 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/agent.swagger.json +++ b/flyteidl/gen/pb-go/flyteidl/service/agent.swagger.json @@ -641,6 +641,10 @@ "version": { "type": "string", "description": "Specific version of the resource." + }, + "org": { + "type": "string", + "description": "Optional, org key applied to the resource." } }, "description": "Encapsulation of fields that uniquely identifies a Flyte resource." @@ -1451,6 +1455,10 @@ "name": { "type": "string", "description": "User or system provided value for the resource." + }, + "org": { + "type": "string", + "description": "Optional, org key applied to the resource." } }, "title": "Encapsulation of fields that uniquely identifies a Flyte workflow execution" diff --git a/flyteidl/gen/pb-go/flyteidl/service/dataproxy.swagger.json b/flyteidl/gen/pb-go/flyteidl/service/dataproxy.swagger.json index 0fd08544b3..939f94f862 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/dataproxy.swagger.json +++ b/flyteidl/gen/pb-go/flyteidl/service/dataproxy.swagger.json @@ -579,6 +579,10 @@ "name": { "type": "string", "description": "User or system provided value for the resource." + }, + "org": { + "type": "string", + "description": "Optional, org key applied to the resource." } }, "title": "Encapsulation of fields that uniquely identifies a Flyte workflow execution" diff --git a/flyteidl/gen/pb-go/flyteidl/service/external_plugin_service.pb.go b/flyteidl/gen/pb-go/flyteidl/service/external_plugin_service.pb.go index ab64516b19..ddd75fa855 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/external_plugin_service.pb.go +++ b/flyteidl/gen/pb-go/flyteidl/service/external_plugin_service.pb.go @@ -371,41 +371,41 @@ func init() { } var fileDescriptor_74cbdb08eef5b1d1 = []byte{ - // 544 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0x51, 0x6f, 0xd2, 0x50, - 0x14, 0xb6, 0x9d, 0x1b, 0xe3, 0xcc, 0x4d, 0x76, 0x13, 0x62, 0xc7, 0x34, 0x41, 0xe6, 0xc3, 0x62, - 0xb2, 0x36, 0xb2, 0x07, 0x13, 0x13, 0x63, 0x18, 0x54, 0x24, 0xb2, 0x86, 0x14, 0x78, 0xd0, 0x2c, - 0x69, 0x5a, 0x38, 0x60, 0xb7, 0xae, 0xbd, 0xb6, 0xb7, 0x66, 0xfc, 0x03, 0x7f, 0xca, 0x7e, 0xa6, - 0xb9, 0xf7, 0xb6, 0x1d, 0x30, 0xe5, 0xc1, 0x37, 0x7a, 0xce, 0x77, 0xbe, 0x73, 0xbe, 0xef, 0x9c, - 0x0b, 0xe8, 0xb3, 0x60, 0xc1, 0xd0, 0x9f, 0x06, 0x46, 0x82, 0xf1, 0x2f, 0x7f, 0x82, 0x06, 0xde, - 0x31, 0x8c, 0x43, 0x37, 0x70, 0x68, 0x90, 0xce, 0xfd, 0xd0, 0xc9, 0xe2, 0x3a, 0x8d, 0x23, 0x16, - 0x91, 0x4a, 0x8e, 0xd7, 0xb3, 0x78, 0xed, 0x65, 0xc1, 0x30, 0x89, 0x62, 0x34, 0x02, 0x9f, 0x61, - 0xec, 0x06, 0x89, 0xc4, 0xd7, 0x8e, 0x56, 0xb3, 0xcc, 0x4d, 0x6e, 0xf2, 0xd4, 0xab, 0xd5, 0x94, - 0x1f, 0x32, 0x8c, 0x67, 0x6e, 0xde, 0xa9, 0x71, 0xaf, 0xc0, 0xe1, 0xc8, 0x4d, 0x6e, 0xda, 0x31, - 0xba, 0x0c, 0x6d, 0xfc, 0x99, 0x62, 0xc2, 0xc8, 0x3b, 0xd8, 0xf1, 0x43, 0x9a, 0xb2, 0x44, 0x53, - 0xea, 0xca, 0xe9, 0x5e, 0xf3, 0xa8, 0x10, 0xa0, 0x73, 0x16, 0xbd, 0x2f, 0xdb, 0x5f, 0xba, 0xd4, - 0xce, 0x80, 0xe4, 0x3d, 0xec, 0x32, 0xbc, 0xa5, 0x81, 0xcb, 0x50, 0x53, 0x45, 0xd1, 0xf1, 0x5a, - 0x11, 0x6f, 0x33, 0xca, 0x20, 0x76, 0x01, 0x26, 0x27, 0xb0, 0x1f, 0xa5, 0x8c, 0xa6, 0xcc, 0xa1, - 0x31, 0xce, 0xfc, 0x3b, 0x6d, 0xab, 0xae, 0x9c, 0x96, 0xed, 0x67, 0x32, 0x38, 0x10, 0xb1, 0x0f, - 0xaa, 0xa6, 0x34, 0x0c, 0x20, 0xcb, 0x93, 0x26, 0x34, 0x0a, 0x13, 0x24, 0x55, 0xd8, 0xb9, 0x8e, - 0x3c, 0xc7, 0x9f, 0x8a, 0x51, 0xcb, 0xf6, 0xf6, 0x75, 0xe4, 0xf5, 0xa6, 0xa2, 0xe0, 0x0b, 0x1c, - 0xf0, 0x82, 0x2e, 0xb2, 0x5c, 0xd7, 0x31, 0x94, 0xb9, 0x37, 0x0e, 0x5b, 0x50, 0xcc, 0xf0, 0xbb, - 0x3c, 0x30, 0x5a, 0xd0, 0x65, 0x26, 0x75, 0x9d, 0x69, 0x01, 0xcf, 0x0b, 0xa6, 0xac, 0xef, 0x19, - 0x6c, 0x27, 0x8c, 0x8b, 0xe5, 0x34, 0x07, 0xcd, 0x17, 0xfa, 0xfa, 0xca, 0xf4, 0x21, 0x4f, 0xdb, - 0x12, 0x45, 0xce, 0xa1, 0x24, 0x05, 0x25, 0x99, 0x3b, 0x1b, 0x2c, 0xcd, 0x91, 0xa2, 0xf5, 0x57, - 0xb9, 0x9f, 0x0e, 0x06, 0xf8, 0xb0, 0x9f, 0xff, 0xd5, 0xa1, 0x49, 0x0b, 0x73, 0x32, 0x29, 0x85, - 0x67, 0xde, 0x7a, 0xb0, 0x2d, 0xe6, 0x25, 0x55, 0x38, 0xb4, 0xcd, 0x91, 0xfd, 0xad, 0x75, 0xd1, - 0x37, 0x9d, 0xcf, 0xad, 0x5e, 0x7f, 0x6c, 0x9b, 0x95, 0x27, 0x3c, 0x3c, 0x30, 0xed, 0xcb, 0x96, - 0x65, 0x5a, 0xa3, 0x22, 0xac, 0x90, 0x3d, 0x28, 0x0d, 0x4c, 0xab, 0xd3, 0xb3, 0xba, 0x15, 0x95, - 0x7f, 0xd8, 0x63, 0xcb, 0xe2, 0x1f, 0x5b, 0x64, 0x1f, 0xca, 0xc3, 0x71, 0xbb, 0x6d, 0x9a, 0x1d, - 0xb3, 0x53, 0x79, 0x5a, 0x53, 0x35, 0xa5, 0x79, 0xaf, 0x42, 0xd5, 0xcc, 0xee, 0x7e, 0x20, 0xce, - 0x7e, 0x28, 0xad, 0x22, 0x57, 0x00, 0x72, 0xad, 0x7c, 0x3a, 0x72, 0xf2, 0xd8, 0xcb, 0x47, 0x27, - 0x5a, 0x7b, 0xb3, 0x19, 0x24, 0xa5, 0x35, 0xb6, 0x7e, 0xab, 0x0a, 0x19, 0x42, 0xa9, 0x8b, 0x4c, - 0x50, 0xd7, 0xff, 0x5e, 0xf5, 0x70, 0x22, 0xb5, 0xd7, 0x1b, 0x10, 0xcb, 0xa4, 0x57, 0x00, 0xd2, - 0xc6, 0x4d, 0x23, 0xaf, 0x6c, 0xed, 0x5f, 0x23, 0xaf, 0x6e, 0x43, 0xb0, 0x5f, 0x7c, 0xfa, 0xfe, - 0x71, 0xee, 0xb3, 0x1f, 0xa9, 0xa7, 0x4f, 0xa2, 0x5b, 0x43, 0x94, 0x45, 0xf1, 0x5c, 0xfe, 0x30, - 0x8a, 0x17, 0x3d, 0xc7, 0xd0, 0xa0, 0xde, 0xd9, 0x3c, 0x32, 0xd6, 0xff, 0x5f, 0xbc, 0x1d, 0xf1, - 0xbc, 0xcf, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0xda, 0xdb, 0x38, 0x09, 0x7a, 0x04, 0x00, 0x00, + // 534 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0x41, 0x6f, 0xda, 0x4c, + 0x10, 0xfd, 0xec, 0x7c, 0x40, 0x98, 0x34, 0x29, 0x59, 0x09, 0xd5, 0x21, 0x3d, 0x50, 0xd2, 0x43, + 0x54, 0x29, 0xb6, 0x4a, 0x0e, 0x95, 0x2a, 0x55, 0x15, 0x01, 0x97, 0xa2, 0x12, 0x0b, 0x2d, 0x70, + 0x68, 0x15, 0xc9, 0xb2, 0x61, 0x42, 0x9d, 0x38, 0x78, 0x6b, 0xaf, 0xab, 0xf0, 0x0f, 0xfa, 0x53, + 0xf2, 0x33, 0xab, 0xdd, 0x35, 0x0e, 0x90, 0x96, 0x43, 0x6f, 0xde, 0x99, 0x37, 0x6f, 0xdf, 0x9b, + 0x99, 0x35, 0x98, 0xd7, 0xe1, 0x82, 0x63, 0x30, 0x0d, 0xad, 0x04, 0xe3, 0x9f, 0xc1, 0x04, 0x2d, + 0xbc, 0xe7, 0x18, 0xcf, 0xbd, 0xd0, 0x65, 0x61, 0x3a, 0x0b, 0xe6, 0x6e, 0x16, 0x37, 0x59, 0x1c, + 0xf1, 0x88, 0x54, 0x96, 0x78, 0x33, 0x8b, 0xd7, 0x5e, 0xe6, 0x0c, 0x93, 0x28, 0x46, 0x2b, 0x0c, + 0x38, 0xc6, 0x5e, 0x98, 0x28, 0x7c, 0xed, 0x68, 0x3d, 0xcb, 0xbd, 0xe4, 0x36, 0x4b, 0x35, 0x1e, + 0x34, 0x38, 0x1c, 0x79, 0xc9, 0x6d, 0x3b, 0x46, 0x8f, 0x23, 0xc5, 0x1f, 0x29, 0x26, 0x9c, 0xbc, + 0x85, 0x62, 0x30, 0x67, 0x29, 0x4f, 0x0c, 0xad, 0xae, 0x9d, 0xee, 0x35, 0x8f, 0x72, 0x85, 0xa6, + 0x60, 0x30, 0xfb, 0x8a, 0xff, 0xd2, 0x63, 0x34, 0x03, 0x92, 0x77, 0xb0, 0xcb, 0xf1, 0x8e, 0x85, + 0x1e, 0x47, 0x43, 0x97, 0x45, 0xc7, 0x1b, 0x45, 0xe2, 0x9a, 0x51, 0x06, 0xa1, 0x39, 0x98, 0x9c, + 0xc0, 0x7e, 0x94, 0x72, 0x96, 0x72, 0x97, 0xc5, 0x78, 0x1d, 0xdc, 0x1b, 0x3b, 0x75, 0xed, 0xb4, + 0x4c, 0x9f, 0xa9, 0xe0, 0x40, 0xc6, 0xde, 0xeb, 0x86, 0xd6, 0xb0, 0x80, 0xac, 0x2a, 0x4d, 0x58, + 0x34, 0x4f, 0x90, 0x54, 0xa1, 0x78, 0x13, 0xf9, 0x6e, 0x30, 0x95, 0x52, 0xcb, 0xb4, 0x70, 0x13, + 0xf9, 0xbd, 0xa9, 0x2c, 0xf8, 0x0c, 0x07, 0xa2, 0xa0, 0x8b, 0x7c, 0xe9, 0xeb, 0x18, 0xca, 0xc2, + 0xbc, 0xcb, 0x17, 0x0c, 0x33, 0xfc, 0xae, 0x08, 0x8c, 0x16, 0x6c, 0x95, 0x49, 0xdf, 0x64, 0x5a, + 0xc0, 0xf3, 0x9c, 0x29, 0xbb, 0xf7, 0x0c, 0x0a, 0x09, 0x17, 0x66, 0x05, 0xcd, 0x41, 0xf3, 0x85, + 0xb9, 0x39, 0x13, 0x73, 0x28, 0xd2, 0x54, 0xa1, 0xc8, 0x39, 0x94, 0x94, 0xa1, 0x24, 0xeb, 0xce, + 0x96, 0x96, 0x2e, 0x91, 0xf2, 0xea, 0x2f, 0x6a, 0x3e, 0x1d, 0x0c, 0xf1, 0x71, 0x3e, 0xff, 0xea, + 0xc3, 0x50, 0x2d, 0x5c, 0x92, 0x29, 0x2b, 0x22, 0xf3, 0xc6, 0x87, 0x82, 0xd4, 0x4b, 0xaa, 0x70, + 0x48, 0xed, 0x11, 0xfd, 0xda, 0xba, 0xe8, 0xdb, 0xee, 0xa7, 0x56, 0xaf, 0x3f, 0xa6, 0x76, 0xe5, + 0x3f, 0x11, 0x1e, 0xd8, 0xf4, 0xb2, 0xe5, 0xd8, 0xce, 0x28, 0x0f, 0x6b, 0x64, 0x0f, 0x4a, 0x03, + 0xdb, 0xe9, 0xf4, 0x9c, 0x6e, 0x45, 0x17, 0x07, 0x3a, 0x76, 0x1c, 0x71, 0xd8, 0x21, 0xfb, 0x50, + 0x1e, 0x8e, 0xdb, 0x6d, 0xdb, 0xee, 0xd8, 0x9d, 0xca, 0xff, 0x35, 0xdd, 0xd0, 0x9a, 0x0f, 0x3a, + 0x54, 0xed, 0x6c, 0xb1, 0x07, 0x72, 0xaf, 0x87, 0xaa, 0x55, 0xe4, 0x0a, 0x40, 0x8d, 0x55, 0xa8, + 0x23, 0x27, 0x4f, 0x7b, 0xf9, 0x64, 0x45, 0x6b, 0xaf, 0xb7, 0x83, 0x94, 0xb5, 0xc6, 0xce, 0x2f, + 0x5d, 0x23, 0x43, 0x28, 0x75, 0x91, 0x4b, 0xea, 0xfa, 0x9f, 0xab, 0x1e, 0x57, 0xa4, 0xf6, 0x6a, + 0x0b, 0x62, 0x95, 0xf4, 0x0a, 0x40, 0xb5, 0x71, 0x9b, 0xe4, 0xb5, 0xa9, 0xfd, 0x4d, 0xf2, 0xfa, + 0x34, 0x24, 0xfb, 0xc5, 0xc7, 0x6f, 0x1f, 0x66, 0x01, 0xff, 0x9e, 0xfa, 0xe6, 0x24, 0xba, 0xb3, + 0x64, 0x59, 0x14, 0xcf, 0xd4, 0x87, 0x95, 0xbf, 0xe6, 0x19, 0xce, 0x2d, 0xe6, 0x9f, 0xcd, 0x22, + 0x6b, 0xf3, 0x07, 0xe2, 0x17, 0xe5, 0xf3, 0x3e, 0xff, 0x1d, 0x00, 0x00, 0xff, 0xff, 0xd9, 0xdd, + 0xd7, 0x35, 0x5b, 0x04, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/flyteidl/gen/pb-go/flyteidl/service/external_plugin_service.swagger.json b/flyteidl/gen/pb-go/flyteidl/service/external_plugin_service.swagger.json index adf61a5c1f..1abbb6085d 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/external_plugin_service.swagger.json +++ b/flyteidl/gen/pb-go/flyteidl/service/external_plugin_service.swagger.json @@ -449,6 +449,10 @@ "version": { "type": "string", "description": "Specific version of the resource." + }, + "org": { + "type": "string", + "description": "Optional, org key applied to the resource." } }, "description": "Encapsulation of fields that uniquely identifies a Flyte resource." diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/README.md b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/README.md index 5a4f66f46a..11a3a648af 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/README.md +++ b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/README.md @@ -29,55 +29,98 @@ Class | Method | HTTP request | Description *AdminServiceApi* | [**CreateWorkflow**](docs/AdminServiceApi.md#createworkflow) | **Post** /api/v1/workflows | Create and upload a :ref:`ref_flyteidl.admin.Workflow` definition *AdminServiceApi* | [**CreateWorkflowEvent**](docs/AdminServiceApi.md#createworkflowevent) | **Post** /api/v1/events/workflows | Indicates a :ref:`ref_flyteidl.event.WorkflowExecutionEvent` has occurred. *AdminServiceApi* | [**DeleteProjectAttributes**](docs/AdminServiceApi.md#deleteprojectattributes) | **Delete** /api/v1/project_attributes/{project} | Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. +*AdminServiceApi* | [**DeleteProjectAttributes2**](docs/AdminServiceApi.md#deleteprojectattributes2) | **Delete** /api/v1/project_domain_attributes/org/{org}/{project} | Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. *AdminServiceApi* | [**DeleteProjectDomainAttributes**](docs/AdminServiceApi.md#deleteprojectdomainattributes) | **Delete** /api/v1/project_domain_attributes/{project}/{domain} | Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. +*AdminServiceApi* | [**DeleteProjectDomainAttributes2**](docs/AdminServiceApi.md#deleteprojectdomainattributes2) | **Delete** /api/v1/project_domain_attributes/org/{org}/{project}/{domain} | Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. *AdminServiceApi* | [**DeleteWorkflowAttributes**](docs/AdminServiceApi.md#deleteworkflowattributes) | **Delete** /api/v1/workflow_attributes/{project}/{domain}/{workflow} | Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. +*AdminServiceApi* | [**DeleteWorkflowAttributes2**](docs/AdminServiceApi.md#deleteworkflowattributes2) | **Delete** /api/v1/workflow_attributes/org/{org}/{project}/{domain}/{workflow} | Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. *AdminServiceApi* | [**GetActiveLaunchPlan**](docs/AdminServiceApi.md#getactivelaunchplan) | **Get** /api/v1/active_launch_plans/{id.project}/{id.domain}/{id.name} | Fetch the active version of a :ref:`ref_flyteidl.admin.LaunchPlan`. +*AdminServiceApi* | [**GetActiveLaunchPlan2**](docs/AdminServiceApi.md#getactivelaunchplan2) | **Get** /api/v1/active_launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name} | Fetch the active version of a :ref:`ref_flyteidl.admin.LaunchPlan`. *AdminServiceApi* | [**GetDescriptionEntity**](docs/AdminServiceApi.md#getdescriptionentity) | **Get** /api/v1/description_entities/{id.resource_type}/{id.project}/{id.domain}/{id.name}/{id.version} | Fetch a :ref:`ref_flyteidl.admin.DescriptionEntity` object. +*AdminServiceApi* | [**GetDescriptionEntity2**](docs/AdminServiceApi.md#getdescriptionentity2) | **Get** /api/v1/description_entities/org/{id.org}/{id.resource_type}/{id.project}/{id.domain}/{id.name}/{id.version} | Fetch a :ref:`ref_flyteidl.admin.DescriptionEntity` object. *AdminServiceApi* | [**GetExecution**](docs/AdminServiceApi.md#getexecution) | **Get** /api/v1/executions/{id.project}/{id.domain}/{id.name} | Fetches a :ref:`ref_flyteidl.admin.Execution`. +*AdminServiceApi* | [**GetExecution2**](docs/AdminServiceApi.md#getexecution2) | **Get** /api/v1/executions/org/{id.org}/{id.project}/{id.domain}/{id.name} | Fetches a :ref:`ref_flyteidl.admin.Execution`. *AdminServiceApi* | [**GetExecutionData**](docs/AdminServiceApi.md#getexecutiondata) | **Get** /api/v1/data/executions/{id.project}/{id.domain}/{id.name} | Fetches input and output data for a :ref:`ref_flyteidl.admin.Execution`. +*AdminServiceApi* | [**GetExecutionData2**](docs/AdminServiceApi.md#getexecutiondata2) | **Get** /api/v1/data/executions/org/{id.org}/{id.project}/{id.domain}/{id.name} | Fetches input and output data for a :ref:`ref_flyteidl.admin.Execution`. *AdminServiceApi* | [**GetExecutionMetrics**](docs/AdminServiceApi.md#getexecutionmetrics) | **Get** /api/v1/metrics/executions/{id.project}/{id.domain}/{id.name} | Fetches runtime metrics for a :ref:`ref_flyteidl.admin.Execution`. +*AdminServiceApi* | [**GetExecutionMetrics2**](docs/AdminServiceApi.md#getexecutionmetrics2) | **Get** /api/v1/metrics/executions/org/{id.org}/{id.project}/{id.domain}/{id.name} | Fetches runtime metrics for a :ref:`ref_flyteidl.admin.Execution`. *AdminServiceApi* | [**GetLaunchPlan**](docs/AdminServiceApi.md#getlaunchplan) | **Get** /api/v1/launch_plans/{id.project}/{id.domain}/{id.name}/{id.version} | Fetch a :ref:`ref_flyteidl.admin.LaunchPlan` definition. +*AdminServiceApi* | [**GetLaunchPlan2**](docs/AdminServiceApi.md#getlaunchplan2) | **Get** /api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version} | Fetch a :ref:`ref_flyteidl.admin.LaunchPlan` definition. *AdminServiceApi* | [**GetNamedEntity**](docs/AdminServiceApi.md#getnamedentity) | **Get** /api/v1/named_entities/{resource_type}/{id.project}/{id.domain}/{id.name} | Returns a :ref:`ref_flyteidl.admin.NamedEntity` object. +*AdminServiceApi* | [**GetNamedEntity2**](docs/AdminServiceApi.md#getnamedentity2) | **Get** /api/v1/named_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain}/{id.name} | Returns a :ref:`ref_flyteidl.admin.NamedEntity` object. *AdminServiceApi* | [**GetNodeExecution**](docs/AdminServiceApi.md#getnodeexecution) | **Get** /api/v1/node_executions/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id} | Fetches a :ref:`ref_flyteidl.admin.NodeExecution`. +*AdminServiceApi* | [**GetNodeExecution2**](docs/AdminServiceApi.md#getnodeexecution2) | **Get** /api/v1/node_executions/org/{id.execution_id.org}/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id} | Fetches a :ref:`ref_flyteidl.admin.NodeExecution`. *AdminServiceApi* | [**GetNodeExecutionData**](docs/AdminServiceApi.md#getnodeexecutiondata) | **Get** /api/v1/data/node_executions/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id} | Fetches input and output data for a :ref:`ref_flyteidl.admin.NodeExecution`. +*AdminServiceApi* | [**GetNodeExecutionData2**](docs/AdminServiceApi.md#getnodeexecutiondata2) | **Get** /api/v1/data/node_executions/org/{id.execution_id.org}/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id} | Fetches input and output data for a :ref:`ref_flyteidl.admin.NodeExecution`. *AdminServiceApi* | [**GetProjectAttributes**](docs/AdminServiceApi.md#getprojectattributes) | **Get** /api/v1/project_attributes/{project} | Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. +*AdminServiceApi* | [**GetProjectAttributes2**](docs/AdminServiceApi.md#getprojectattributes2) | **Get** /api/v1/project_domain_attributes/org/{org}/{project} | Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. *AdminServiceApi* | [**GetProjectDomainAttributes**](docs/AdminServiceApi.md#getprojectdomainattributes) | **Get** /api/v1/project_domain_attributes/{project}/{domain} | Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. +*AdminServiceApi* | [**GetProjectDomainAttributes2**](docs/AdminServiceApi.md#getprojectdomainattributes2) | **Get** /api/v1/project_domain_attributes/org/{org}/{project}/{domain} | Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. *AdminServiceApi* | [**GetTask**](docs/AdminServiceApi.md#gettask) | **Get** /api/v1/tasks/{id.project}/{id.domain}/{id.name}/{id.version} | Fetch a :ref:`ref_flyteidl.admin.Task` definition. +*AdminServiceApi* | [**GetTask2**](docs/AdminServiceApi.md#gettask2) | **Get** /api/v1/tasks/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version} | Fetch a :ref:`ref_flyteidl.admin.Task` definition. *AdminServiceApi* | [**GetTaskExecution**](docs/AdminServiceApi.md#gettaskexecution) | **Get** /api/v1/task_executions/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt} | Fetches a :ref:`ref_flyteidl.admin.TaskExecution`. +*AdminServiceApi* | [**GetTaskExecution2**](docs/AdminServiceApi.md#gettaskexecution2) | **Get** /api/v1/task_executions/org/{id.node_execution_id.execution_id.org}/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt} | Fetches a :ref:`ref_flyteidl.admin.TaskExecution`. *AdminServiceApi* | [**GetTaskExecutionData**](docs/AdminServiceApi.md#gettaskexecutiondata) | **Get** /api/v1/data/task_executions/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt} | Fetches input and output data for a :ref:`ref_flyteidl.admin.TaskExecution`. +*AdminServiceApi* | [**GetTaskExecutionData2**](docs/AdminServiceApi.md#gettaskexecutiondata2) | **Get** /api/v1/data/task_executions/org/{id.node_execution_id.execution_id.org}/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt} | Fetches input and output data for a :ref:`ref_flyteidl.admin.TaskExecution`. *AdminServiceApi* | [**GetVersion**](docs/AdminServiceApi.md#getversion) | **Get** /api/v1/version | *AdminServiceApi* | [**GetWorkflow**](docs/AdminServiceApi.md#getworkflow) | **Get** /api/v1/workflows/{id.project}/{id.domain}/{id.name}/{id.version} | Fetch a :ref:`ref_flyteidl.admin.Workflow` definition. +*AdminServiceApi* | [**GetWorkflow2**](docs/AdminServiceApi.md#getworkflow2) | **Get** /api/v1/workflows/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version} | Fetch a :ref:`ref_flyteidl.admin.Workflow` definition. *AdminServiceApi* | [**GetWorkflowAttributes**](docs/AdminServiceApi.md#getworkflowattributes) | **Get** /api/v1/workflow_attributes/{project}/{domain}/{workflow} | Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. +*AdminServiceApi* | [**GetWorkflowAttributes2**](docs/AdminServiceApi.md#getworkflowattributes2) | **Get** /api/v1/workflow_attributes/org/{org}/{project}/{domain}/{workflow} | Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. *AdminServiceApi* | [**ListActiveLaunchPlans**](docs/AdminServiceApi.md#listactivelaunchplans) | **Get** /api/v1/active_launch_plans/{project}/{domain} | List active versions of :ref:`ref_flyteidl.admin.LaunchPlan`. *AdminServiceApi* | [**ListDescriptionEntities**](docs/AdminServiceApi.md#listdescriptionentities) | **Get** /api/v1/description_entities/{resource_type}/{id.project}/{id.domain}/{id.name} | Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. -*AdminServiceApi* | [**ListDescriptionEntities2**](docs/AdminServiceApi.md#listdescriptionentities2) | **Get** /api/v1/description_entities/{resource_type}/{id.project}/{id.domain} | Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. +*AdminServiceApi* | [**ListDescriptionEntities2**](docs/AdminServiceApi.md#listdescriptionentities2) | **Get** /api/v1/description_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain}/{id.name} | Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. +*AdminServiceApi* | [**ListDescriptionEntities3**](docs/AdminServiceApi.md#listdescriptionentities3) | **Get** /api/v1/description_entities/{resource_type}/{id.project}/{id.domain} | Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. +*AdminServiceApi* | [**ListDescriptionEntities4**](docs/AdminServiceApi.md#listdescriptionentities4) | **Get** /api/v1/description_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain} | Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. *AdminServiceApi* | [**ListExecutions**](docs/AdminServiceApi.md#listexecutions) | **Get** /api/v1/executions/{id.project}/{id.domain} | Fetch a list of :ref:`ref_flyteidl.admin.Execution`. +*AdminServiceApi* | [**ListExecutions2**](docs/AdminServiceApi.md#listexecutions2) | **Get** /api/v1/executions/org/{id.org}/{id.project}/{id.domain} | Fetch a list of :ref:`ref_flyteidl.admin.Execution`. *AdminServiceApi* | [**ListLaunchPlanIds**](docs/AdminServiceApi.md#listlaunchplanids) | **Get** /api/v1/launch_plan_ids/{project}/{domain} | Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of launch plan objects. +*AdminServiceApi* | [**ListLaunchPlanIds2**](docs/AdminServiceApi.md#listlaunchplanids2) | **Get** /api/v1/launch_plan_ids/org/{org}/{project}/{domain} | Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of launch plan objects. *AdminServiceApi* | [**ListLaunchPlans**](docs/AdminServiceApi.md#listlaunchplans) | **Get** /api/v1/launch_plans/{id.project}/{id.domain}/{id.name} | Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. -*AdminServiceApi* | [**ListLaunchPlans2**](docs/AdminServiceApi.md#listlaunchplans2) | **Get** /api/v1/launch_plans/{id.project}/{id.domain} | Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. +*AdminServiceApi* | [**ListLaunchPlans2**](docs/AdminServiceApi.md#listlaunchplans2) | **Get** /api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name} | Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. +*AdminServiceApi* | [**ListLaunchPlans3**](docs/AdminServiceApi.md#listlaunchplans3) | **Get** /api/v1/launch_plans/{id.project}/{id.domain} | Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. +*AdminServiceApi* | [**ListLaunchPlans4**](docs/AdminServiceApi.md#listlaunchplans4) | **Get** /api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain} | Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. *AdminServiceApi* | [**ListMatchableAttributes**](docs/AdminServiceApi.md#listmatchableattributes) | **Get** /api/v1/matchable_attributes | Lists custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a specific resource type. *AdminServiceApi* | [**ListNamedEntities**](docs/AdminServiceApi.md#listnamedentities) | **Get** /api/v1/named_entities/{resource_type}/{project}/{domain} | Returns a list of :ref:`ref_flyteidl.admin.NamedEntity` objects. +*AdminServiceApi* | [**ListNamedEntities2**](docs/AdminServiceApi.md#listnamedentities2) | **Get** /api/v1/named_entities/{resource_type}/org/{org}/{project}/{domain} | Returns a list of :ref:`ref_flyteidl.admin.NamedEntity` objects. *AdminServiceApi* | [**ListNodeExecutions**](docs/AdminServiceApi.md#listnodeexecutions) | **Get** /api/v1/node_executions/{workflow_execution_id.project}/{workflow_execution_id.domain}/{workflow_execution_id.name} | Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution`. +*AdminServiceApi* | [**ListNodeExecutions2**](docs/AdminServiceApi.md#listnodeexecutions2) | **Get** /api/v1/node_executions/org/{workflow_execution_id.org}/{workflow_execution_id.project}/{workflow_execution_id.domain}/{workflow_execution_id.name} | Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution`. *AdminServiceApi* | [**ListNodeExecutionsForTask**](docs/AdminServiceApi.md#listnodeexecutionsfortask) | **Get** /api/v1/children/task_executions/{task_execution_id.node_execution_id.execution_id.project}/{task_execution_id.node_execution_id.execution_id.domain}/{task_execution_id.node_execution_id.execution_id.name}/{task_execution_id.node_execution_id.node_id}/{task_execution_id.task_id.project}/{task_execution_id.task_id.domain}/{task_execution_id.task_id.name}/{task_execution_id.task_id.version}/{task_execution_id.retry_attempt} | Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution` launched by the reference :ref:`ref_flyteidl.admin.TaskExecution`. +*AdminServiceApi* | [**ListNodeExecutionsForTask2**](docs/AdminServiceApi.md#listnodeexecutionsfortask2) | **Get** /api/v1/children/task_executions/org/{task_execution_id.node_execution_id.execution_id.org}/{task_execution_id.node_execution_id.execution_id.project}/{task_execution_id.node_execution_id.execution_id.domain}/{task_execution_id.node_execution_id.execution_id.name}/{task_execution_id.node_execution_id.node_id}/{task_execution_id.task_id.project}/{task_execution_id.task_id.domain}/{task_execution_id.task_id.name}/{task_execution_id.task_id.version}/{task_execution_id.retry_attempt} | Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution` launched by the reference :ref:`ref_flyteidl.admin.TaskExecution`. *AdminServiceApi* | [**ListProjects**](docs/AdminServiceApi.md#listprojects) | **Get** /api/v1/projects | Fetches a list of :ref:`ref_flyteidl.admin.Project` *AdminServiceApi* | [**ListTaskExecutions**](docs/AdminServiceApi.md#listtaskexecutions) | **Get** /api/v1/task_executions/{node_execution_id.execution_id.project}/{node_execution_id.execution_id.domain}/{node_execution_id.execution_id.name}/{node_execution_id.node_id} | Fetches a list of :ref:`ref_flyteidl.admin.TaskExecution`. +*AdminServiceApi* | [**ListTaskExecutions2**](docs/AdminServiceApi.md#listtaskexecutions2) | **Get** /api/v1/task_executions/org/{node_execution_id.execution_id.org}/{node_execution_id.execution_id.project}/{node_execution_id.execution_id.domain}/{node_execution_id.execution_id.name}/{node_execution_id.node_id} | Fetches a list of :ref:`ref_flyteidl.admin.TaskExecution`. *AdminServiceApi* | [**ListTaskIds**](docs/AdminServiceApi.md#listtaskids) | **Get** /api/v1/task_ids/{project}/{domain} | Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of task objects. +*AdminServiceApi* | [**ListTaskIds2**](docs/AdminServiceApi.md#listtaskids2) | **Get** /api/v1/tasks/org/{org}/{project}/{domain} | Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of task objects. *AdminServiceApi* | [**ListTasks**](docs/AdminServiceApi.md#listtasks) | **Get** /api/v1/tasks/{id.project}/{id.domain}/{id.name} | Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions. -*AdminServiceApi* | [**ListTasks2**](docs/AdminServiceApi.md#listtasks2) | **Get** /api/v1/tasks/{id.project}/{id.domain} | Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions. +*AdminServiceApi* | [**ListTasks2**](docs/AdminServiceApi.md#listtasks2) | **Get** /api/v1/tasks/org/{id.org}/{id.project}/{id.domain}/{id.name} | Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions. +*AdminServiceApi* | [**ListTasks3**](docs/AdminServiceApi.md#listtasks3) | **Get** /api/v1/tasks/{id.project}/{id.domain} | Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions. +*AdminServiceApi* | [**ListTasks4**](docs/AdminServiceApi.md#listtasks4) | **Get** /api/v1/tasks/org/{id.org}/{id.project}/{id.domain} | Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions. *AdminServiceApi* | [**ListWorkflowIds**](docs/AdminServiceApi.md#listworkflowids) | **Get** /api/v1/workflow_ids/{project}/{domain} | Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of workflow objects. +*AdminServiceApi* | [**ListWorkflowIds2**](docs/AdminServiceApi.md#listworkflowids2) | **Get** /api/v1/workflows/org/{org}/{project}/{domain} | Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of workflow objects. *AdminServiceApi* | [**ListWorkflows**](docs/AdminServiceApi.md#listworkflows) | **Get** /api/v1/workflows/{id.project}/{id.domain}/{id.name} | Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. -*AdminServiceApi* | [**ListWorkflows2**](docs/AdminServiceApi.md#listworkflows2) | **Get** /api/v1/workflows/{id.project}/{id.domain} | Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. +*AdminServiceApi* | [**ListWorkflows2**](docs/AdminServiceApi.md#listworkflows2) | **Get** /api/v1/workflows/org/{id.org}/{id.project}/{id.domain}/{id.name} | Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. +*AdminServiceApi* | [**ListWorkflows3**](docs/AdminServiceApi.md#listworkflows3) | **Get** /api/v1/workflows/{id.project}/{id.domain} | Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. +*AdminServiceApi* | [**ListWorkflows4**](docs/AdminServiceApi.md#listworkflows4) | **Get** /api/v1/workflows/org/{id.org}/{id.project}/{id.domain} | Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. *AdminServiceApi* | [**RecoverExecution**](docs/AdminServiceApi.md#recoverexecution) | **Post** /api/v1/executions/recover | Recreates a previously-run workflow execution that will only start executing from the last known failure point. In Recover mode, users cannot change any input parameters or update the version of the execution. This is extremely useful to recover from system errors and byzantine faults like - Loss of K8s cluster, bugs in platform or instability, machine failures, downstream system failures (downstream services), or simply to recover executions that failed because of retry exhaustion and should complete if tried again. See :ref:`ref_flyteidl.admin.ExecutionRecoverRequest` for more details. *AdminServiceApi* | [**RegisterProject**](docs/AdminServiceApi.md#registerproject) | **Post** /api/v1/projects | Registers a :ref:`ref_flyteidl.admin.Project` with the Flyte deployment. *AdminServiceApi* | [**RelaunchExecution**](docs/AdminServiceApi.md#relaunchexecution) | **Post** /api/v1/executions/relaunch | Triggers the creation of an identical :ref:`ref_flyteidl.admin.Execution` *AdminServiceApi* | [**TerminateExecution**](docs/AdminServiceApi.md#terminateexecution) | **Delete** /api/v1/executions/{id.project}/{id.domain}/{id.name} | Terminates an in-progress :ref:`ref_flyteidl.admin.Execution`. +*AdminServiceApi* | [**TerminateExecution2**](docs/AdminServiceApi.md#terminateexecution2) | **Delete** /api/v1/data/executions/org/{id.org}/{id.project}/{id.domain}/{id.name} | Terminates an in-progress :ref:`ref_flyteidl.admin.Execution`. *AdminServiceApi* | [**UpdateExecution**](docs/AdminServiceApi.md#updateexecution) | **Put** /api/v1/executions/{id.project}/{id.domain}/{id.name} | Update execution belonging to project domain :ref:`ref_flyteidl.admin.Execution`. +*AdminServiceApi* | [**UpdateExecution2**](docs/AdminServiceApi.md#updateexecution2) | **Put** /api/v1/executions/org/{id.org}/{id.project}/{id.domain}/{id.name} | Update execution belonging to project domain :ref:`ref_flyteidl.admin.Execution`. *AdminServiceApi* | [**UpdateLaunchPlan**](docs/AdminServiceApi.md#updatelaunchplan) | **Put** /api/v1/launch_plans/{id.project}/{id.domain}/{id.name}/{id.version} | Updates the status of a registered :ref:`ref_flyteidl.admin.LaunchPlan`. +*AdminServiceApi* | [**UpdateLaunchPlan2**](docs/AdminServiceApi.md#updatelaunchplan2) | **Put** /api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version} | Updates the status of a registered :ref:`ref_flyteidl.admin.LaunchPlan`. *AdminServiceApi* | [**UpdateNamedEntity**](docs/AdminServiceApi.md#updatenamedentity) | **Put** /api/v1/named_entities/{resource_type}/{id.project}/{id.domain}/{id.name} | Updates a :ref:`ref_flyteidl.admin.NamedEntity` object. -*AdminServiceApi* | [**UpdateProject**](docs/AdminServiceApi.md#updateproject) | **Put** /api/v1/projects/{id} | Updates an existing :ref:`ref_flyteidl.admin.Project` flyteidl.admin.Project should be passed but the domains property should be empty; it will be ignored in the handler as domains cannot be updated via this API. +*AdminServiceApi* | [**UpdateNamedEntity2**](docs/AdminServiceApi.md#updatenamedentity2) | **Put** /api/v1/named_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain}/{id.name} | Updates a :ref:`ref_flyteidl.admin.NamedEntity` object. +*AdminServiceApi* | [**UpdateProject**](docs/AdminServiceApi.md#updateproject) | **Put** /api/v1/projects/{id} | Updates an existing :ref:`ref_flyteidl.admin.Project` flyteidl.admin.Project should be passed but the domains property should be empty; it will be ignored in the handler as domains cannot be updated via this API. +*AdminServiceApi* | [**UpdateProject2**](docs/AdminServiceApi.md#updateproject2) | **Put** /api/v1/projects/org/{org}/{id} | Updates an existing :ref:`ref_flyteidl.admin.Project` flyteidl.admin.Project should be passed but the domains property should be empty; it will be ignored in the handler as domains cannot be updated via this API. *AdminServiceApi* | [**UpdateProjectAttributes**](docs/AdminServiceApi.md#updateprojectattributes) | **Put** /api/v1/project_attributes/{attributes.project} | Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` at the project level +*AdminServiceApi* | [**UpdateProjectAttributes2**](docs/AdminServiceApi.md#updateprojectattributes2) | **Put** /api/v1/project_domain_attributes/org/{attributes.org}/{attributes.project} | Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` at the project level *AdminServiceApi* | [**UpdateProjectDomainAttributes**](docs/AdminServiceApi.md#updateprojectdomainattributes) | **Put** /api/v1/project_domain_attributes/{attributes.project}/{attributes.domain} | Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. +*AdminServiceApi* | [**UpdateProjectDomainAttributes2**](docs/AdminServiceApi.md#updateprojectdomainattributes2) | **Put** /api/v1/project_domain_attributes/org/{attributes.org}/{attributes.project}/{attributes.domain} | Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. *AdminServiceApi* | [**UpdateWorkflowAttributes**](docs/AdminServiceApi.md#updateworkflowattributes) | **Put** /api/v1/workflow_attributes/{attributes.project}/{attributes.domain}/{attributes.workflow} | Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. +*AdminServiceApi* | [**UpdateWorkflowAttributes2**](docs/AdminServiceApi.md#updateworkflowattributes2) | **Put** /api/v1/workflow_attributes/org/{attributes.org}/{attributes.project}/{attributes.domain}/{attributes.workflow} | Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. ## Documentation For Models diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api/swagger.yaml b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api/swagger.yaml index 42d3dac5c9..3170fbe45f 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api/swagger.yaml +++ b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api/swagger.yaml @@ -11,6 +11,45 @@ consumes: produces: - "application/json" paths: + /api/v1/active_launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name}: + get: + tags: + - "AdminService" + summary: "Fetch the active version of a :ref:`ref_flyteidl.admin.LaunchPlan`." + operationId: "GetActiveLaunchPlan2" + parameters: + - name: "id.org" + in: "path" + description: "Optional, org key applied to the resource." + required: true + type: "string" + x-exportParamName: "IdOrg" + - name: "id.project" + in: "path" + description: "Name of the project the resource belongs to." + required: true + type: "string" + x-exportParamName: "IdProject" + - name: "id.domain" + in: "path" + description: "Name of the domain the resource belongs to.\nA domain can be\ + \ considered as a subset within a specific project." + required: true + type: "string" + x-exportParamName: "IdDomain" + - name: "id.name" + in: "path" + description: "User provided value for the resource.\nThe combination of project\ + \ + domain + name uniquely identifies the resource.\n+optional - in certain\ + \ contexts - like 'List API', 'Launch plans'" + required: true + type: "string" + x-exportParamName: "IdName" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminLaunchPlan" /api/v1/active_launch_plans/{id.project}/{id.domain}/{id.name}: get: tags: @@ -39,6 +78,13 @@ paths: required: true type: "string" x-exportParamName: "IdName" + - name: "id.org" + in: "query" + description: "Optional, org key applied to the resource." + required: false + type: "string" + x-exportParamName: "IdOrg" + x-optionalDataType: "String" responses: 200: description: "A successful response." @@ -100,11 +146,163 @@ paths: - "ASCENDING" x-exportParamName: "SortByDirection" x-optionalDataType: "String" + - name: "org" + in: "query" + description: "Optional, org key applied to the resource." + required: false + type: "string" + x-exportParamName: "Org" + x-optionalDataType: "String" responses: 200: description: "A successful response." schema: $ref: "#/definitions/adminLaunchPlanList" + ? /api/v1/children/task_executions/org/{task_execution_id.node_execution_id.execution_id.org}/{task_execution_id.node_execution_id.execution_id.project}/{task_execution_id.node_execution_id.execution_id.domain}/{task_execution_id.node_execution_id.execution_id.name}/{task_execution_id.node_execution_id.node_id}/{task_execution_id.task_id.project}/{task_execution_id.task_id.domain}/{task_execution_id.task_id.name}/{task_execution_id.task_id.version}/{task_execution_id.retry_attempt} + : get: + tags: + - "AdminService" + summary: "Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution` launched by\ + \ the reference :ref:`ref_flyteidl.admin.TaskExecution`." + operationId: "ListNodeExecutionsForTask2" + parameters: + - name: "task_execution_id.node_execution_id.execution_id.org" + in: "path" + description: "Optional, org key applied to the resource." + required: true + type: "string" + x-exportParamName: "TaskExecutionIdNodeExecutionIdExecutionIdOrg" + - name: "task_execution_id.node_execution_id.execution_id.project" + in: "path" + description: "Name of the project the resource belongs to." + required: true + type: "string" + x-exportParamName: "TaskExecutionIdNodeExecutionIdExecutionIdProject" + - name: "task_execution_id.node_execution_id.execution_id.domain" + in: "path" + description: "Name of the domain the resource belongs to.\nA domain can be\ + \ considered as a subset within a specific project." + required: true + type: "string" + x-exportParamName: "TaskExecutionIdNodeExecutionIdExecutionIdDomain" + - name: "task_execution_id.node_execution_id.execution_id.name" + in: "path" + description: "User or system provided value for the resource." + required: true + type: "string" + x-exportParamName: "TaskExecutionIdNodeExecutionIdExecutionIdName" + - name: "task_execution_id.node_execution_id.node_id" + in: "path" + required: true + type: "string" + x-exportParamName: "TaskExecutionIdNodeExecutionIdNodeId" + - name: "task_execution_id.task_id.project" + in: "path" + description: "Name of the project the resource belongs to." + required: true + type: "string" + x-exportParamName: "TaskExecutionIdTaskIdProject" + - name: "task_execution_id.task_id.domain" + in: "path" + description: "Name of the domain the resource belongs to.\nA domain can be\ + \ considered as a subset within a specific project." + required: true + type: "string" + x-exportParamName: "TaskExecutionIdTaskIdDomain" + - name: "task_execution_id.task_id.name" + in: "path" + description: "User provided value for the resource." + required: true + type: "string" + x-exportParamName: "TaskExecutionIdTaskIdName" + - name: "task_execution_id.task_id.version" + in: "path" + description: "Specific version of the resource." + required: true + type: "string" + x-exportParamName: "TaskExecutionIdTaskIdVersion" + - name: "task_execution_id.retry_attempt" + in: "path" + required: true + type: "integer" + format: "int64" + x-exportParamName: "TaskExecutionIdRetryAttempt" + - name: "task_execution_id.task_id.resource_type" + in: "query" + description: "Identifies the specific type of resource that this identifier\ + \ corresponds to.\n\n - DATASET: A dataset represents an entity modeled\ + \ in Flyte DataCatalog. A Dataset is also a versioned entity and can be\ + \ a compilation of multiple individual objects.\nEventually all Catalog\ + \ objects should be modeled similar to Flyte Objects. The Dataset entities\ + \ makes it possible for the UI and CLI to act on the objects \nin a similar\ + \ manner to other Flyte objects" + required: false + type: "string" + default: "UNSPECIFIED" + enum: + - "UNSPECIFIED" + - "TASK" + - "WORKFLOW" + - "LAUNCH_PLAN" + - "DATASET" + x-exportParamName: "TaskExecutionIdTaskIdResourceType" + x-optionalDataType: "String" + - name: "task_execution_id.task_id.org" + in: "query" + description: "Optional, org key applied to the resource." + required: false + type: "string" + x-exportParamName: "TaskExecutionIdTaskIdOrg" + x-optionalDataType: "String" + - name: "limit" + in: "query" + description: "Indicates the number of resources to be returned.\n+required." + required: false + type: "integer" + format: "int64" + x-exportParamName: "Limit" + x-optionalDataType: "Int64" + - name: "token" + in: "query" + description: "In the case of multiple pages of results, the, server-provided\ + \ token can be used to fetch the next page\nin a query.\n+optional." + required: false + type: "string" + x-exportParamName: "Token" + x-optionalDataType: "String" + - name: "filters" + in: "query" + description: "Indicates a list of filters passed as string.\nMore info on\ + \ constructing filters : \n+optional." + required: false + type: "string" + x-exportParamName: "Filters" + x-optionalDataType: "String" + - name: "sort_by.key" + in: "query" + description: "Indicates an attribute to sort the response values.\n+required." + required: false + type: "string" + x-exportParamName: "SortByKey" + x-optionalDataType: "String" + - name: "sort_by.direction" + in: "query" + description: "Indicates the direction to apply sort key for response values.\n\ + +optional.\n\n - DESCENDING: By default, fields are sorted in descending\ + \ order." + required: false + type: "string" + default: "DESCENDING" + enum: + - "DESCENDING" + - "ASCENDING" + x-exportParamName: "SortByDirection" + x-optionalDataType: "String" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminNodeExecutionList" ? /api/v1/children/task_executions/{task_execution_id.node_execution_id.execution_id.project}/{task_execution_id.node_execution_id.execution_id.domain}/{task_execution_id.node_execution_id.execution_id.name}/{task_execution_id.node_execution_id.node_id}/{task_execution_id.task_id.project}/{task_execution_id.task_id.domain}/{task_execution_id.task_id.name}/{task_execution_id.task_id.version}/{task_execution_id.retry_attempt} : get: tags: @@ -188,6 +386,20 @@ paths: - "DATASET" x-exportParamName: "TaskExecutionIdTaskIdResourceType" x-optionalDataType: "String" + - name: "task_execution_id.task_id.org" + in: "query" + description: "Optional, org key applied to the resource." + required: false + type: "string" + x-exportParamName: "TaskExecutionIdTaskIdOrg" + x-optionalDataType: "String" + - name: "task_execution_id.node_execution_id.execution_id.org" + in: "query" + description: "Optional, org key applied to the resource." + required: false + type: "string" + x-exportParamName: "TaskExecutionIdNodeExecutionIdExecutionIdOrg" + x-optionalDataType: "String" - name: "limit" in: "query" description: "Indicates the number of resources to be returned.\n+required." @@ -237,6 +449,85 @@ paths: description: "A successful response." schema: $ref: "#/definitions/adminNodeExecutionList" + /api/v1/data/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}: + get: + tags: + - "AdminService" + summary: "Fetches input and output data for a :ref:`ref_flyteidl.admin.Execution`." + operationId: "GetExecutionData2" + parameters: + - name: "id.org" + in: "path" + description: "Optional, org key applied to the resource." + required: true + type: "string" + x-exportParamName: "IdOrg" + - name: "id.project" + in: "path" + description: "Name of the project the resource belongs to." + required: true + type: "string" + x-exportParamName: "IdProject" + - name: "id.domain" + in: "path" + description: "Name of the domain the resource belongs to.\nA domain can be\ + \ considered as a subset within a specific project." + required: true + type: "string" + x-exportParamName: "IdDomain" + - name: "id.name" + in: "path" + description: "User or system provided value for the resource." + required: true + type: "string" + x-exportParamName: "IdName" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminWorkflowExecutionGetDataResponse" + delete: + tags: + - "AdminService" + summary: "Terminates an in-progress :ref:`ref_flyteidl.admin.Execution`." + operationId: "TerminateExecution2" + parameters: + - name: "id.org" + in: "path" + description: "Optional, org key applied to the resource." + required: true + type: "string" + x-exportParamName: "IdOrg" + - name: "id.project" + in: "path" + description: "Name of the project the resource belongs to." + required: true + type: "string" + x-exportParamName: "IdProject" + - name: "id.domain" + in: "path" + description: "Name of the domain the resource belongs to.\nA domain can be\ + \ considered as a subset within a specific project." + required: true + type: "string" + x-exportParamName: "IdDomain" + - name: "id.name" + in: "path" + description: "User or system provided value for the resource." + required: true + type: "string" + x-exportParamName: "IdName" + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/adminExecutionTerminateRequest" + x-exportParamName: "Body" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminExecutionTerminateResponse" /api/v1/data/executions/{id.project}/{id.domain}/{id.name}: get: tags: @@ -263,11 +554,60 @@ paths: required: true type: "string" x-exportParamName: "IdName" + - name: "id.org" + in: "query" + description: "Optional, org key applied to the resource." + required: false + type: "string" + x-exportParamName: "IdOrg" + x-optionalDataType: "String" responses: 200: description: "A successful response." schema: $ref: "#/definitions/adminWorkflowExecutionGetDataResponse" + ? /api/v1/data/node_executions/org/{id.execution_id.org}/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id} + : get: + tags: + - "AdminService" + summary: "Fetches input and output data for a :ref:`ref_flyteidl.admin.NodeExecution`." + operationId: "GetNodeExecutionData2" + parameters: + - name: "id.execution_id.org" + in: "path" + description: "Optional, org key applied to the resource." + required: true + type: "string" + x-exportParamName: "IdExecutionIdOrg" + - name: "id.execution_id.project" + in: "path" + description: "Name of the project the resource belongs to." + required: true + type: "string" + x-exportParamName: "IdExecutionIdProject" + - name: "id.execution_id.domain" + in: "path" + description: "Name of the domain the resource belongs to.\nA domain can be\ + \ considered as a subset within a specific project." + required: true + type: "string" + x-exportParamName: "IdExecutionIdDomain" + - name: "id.execution_id.name" + in: "path" + description: "User or system provided value for the resource." + required: true + type: "string" + x-exportParamName: "IdExecutionIdName" + - name: "id.node_id" + in: "path" + required: true + type: "string" + x-exportParamName: "IdNodeId" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminNodeExecutionGetDataResponse" /api/v1/data/node_executions/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}: get: tags: @@ -299,11 +639,118 @@ paths: required: true type: "string" x-exportParamName: "IdNodeId" + - name: "id.execution_id.org" + in: "query" + description: "Optional, org key applied to the resource." + required: false + type: "string" + x-exportParamName: "IdExecutionIdOrg" + x-optionalDataType: "String" responses: 200: description: "A successful response." schema: $ref: "#/definitions/adminNodeExecutionGetDataResponse" + ? /api/v1/data/task_executions/org/{id.node_execution_id.execution_id.org}/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt} + : get: + tags: + - "AdminService" + summary: "Fetches input and output data for a :ref:`ref_flyteidl.admin.TaskExecution`." + operationId: "GetTaskExecutionData2" + parameters: + - name: "id.node_execution_id.execution_id.org" + in: "path" + description: "Optional, org key applied to the resource." + required: true + type: "string" + x-exportParamName: "IdNodeExecutionIdExecutionIdOrg" + - name: "id.node_execution_id.execution_id.project" + in: "path" + description: "Name of the project the resource belongs to." + required: true + type: "string" + x-exportParamName: "IdNodeExecutionIdExecutionIdProject" + - name: "id.node_execution_id.execution_id.domain" + in: "path" + description: "Name of the domain the resource belongs to.\nA domain can be\ + \ considered as a subset within a specific project." + required: true + type: "string" + x-exportParamName: "IdNodeExecutionIdExecutionIdDomain" + - name: "id.node_execution_id.execution_id.name" + in: "path" + description: "User or system provided value for the resource." + required: true + type: "string" + x-exportParamName: "IdNodeExecutionIdExecutionIdName" + - name: "id.node_execution_id.node_id" + in: "path" + required: true + type: "string" + x-exportParamName: "IdNodeExecutionIdNodeId" + - name: "id.task_id.project" + in: "path" + description: "Name of the project the resource belongs to." + required: true + type: "string" + x-exportParamName: "IdTaskIdProject" + - name: "id.task_id.domain" + in: "path" + description: "Name of the domain the resource belongs to.\nA domain can be\ + \ considered as a subset within a specific project." + required: true + type: "string" + x-exportParamName: "IdTaskIdDomain" + - name: "id.task_id.name" + in: "path" + description: "User provided value for the resource." + required: true + type: "string" + x-exportParamName: "IdTaskIdName" + - name: "id.task_id.version" + in: "path" + description: "Specific version of the resource." + required: true + type: "string" + x-exportParamName: "IdTaskIdVersion" + - name: "id.retry_attempt" + in: "path" + required: true + type: "integer" + format: "int64" + x-exportParamName: "IdRetryAttempt" + - name: "id.task_id.resource_type" + in: "query" + description: "Identifies the specific type of resource that this identifier\ + \ corresponds to.\n\n - DATASET: A dataset represents an entity modeled\ + \ in Flyte DataCatalog. A Dataset is also a versioned entity and can be\ + \ a compilation of multiple individual objects.\nEventually all Catalog\ + \ objects should be modeled similar to Flyte Objects. The Dataset entities\ + \ makes it possible for the UI and CLI to act on the objects \nin a similar\ + \ manner to other Flyte objects" + required: false + type: "string" + default: "UNSPECIFIED" + enum: + - "UNSPECIFIED" + - "TASK" + - "WORKFLOW" + - "LAUNCH_PLAN" + - "DATASET" + x-exportParamName: "IdTaskIdResourceType" + x-optionalDataType: "String" + - name: "id.task_id.org" + in: "query" + description: "Optional, org key applied to the resource." + required: false + type: "string" + x-exportParamName: "IdTaskIdOrg" + x-optionalDataType: "String" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminTaskExecutionGetDataResponse" ? /api/v1/data/task_executions/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt} : get: tags: @@ -386,11 +833,81 @@ paths: - "DATASET" x-exportParamName: "IdTaskIdResourceType" x-optionalDataType: "String" + - name: "id.task_id.org" + in: "query" + description: "Optional, org key applied to the resource." + required: false + type: "string" + x-exportParamName: "IdTaskIdOrg" + x-optionalDataType: "String" + - name: "id.node_execution_id.execution_id.org" + in: "query" + description: "Optional, org key applied to the resource." + required: false + type: "string" + x-exportParamName: "IdNodeExecutionIdExecutionIdOrg" + x-optionalDataType: "String" responses: 200: description: "A successful response." schema: $ref: "#/definitions/adminTaskExecutionGetDataResponse" + /api/v1/description_entities/org/{id.org}/{id.resource_type}/{id.project}/{id.domain}/{id.name}/{id.version}: + get: + tags: + - "AdminService" + summary: "Fetch a :ref:`ref_flyteidl.admin.DescriptionEntity` object." + operationId: "GetDescriptionEntity2" + parameters: + - name: "id.org" + in: "path" + description: "Optional, org key applied to the resource." + required: true + type: "string" + x-exportParamName: "IdOrg" + - name: "id.resource_type" + in: "path" + description: "Identifies the specific type of resource that this identifier\ + \ corresponds to." + required: true + type: "string" + enum: + - "UNSPECIFIED" + - "TASK" + - "WORKFLOW" + - "LAUNCH_PLAN" + - "DATASET" + x-exportParamName: "IdResourceType" + - name: "id.project" + in: "path" + description: "Name of the project the resource belongs to." + required: true + type: "string" + x-exportParamName: "IdProject" + - name: "id.domain" + in: "path" + description: "Name of the domain the resource belongs to.\nA domain can be\ + \ considered as a subset within a specific project." + required: true + type: "string" + x-exportParamName: "IdDomain" + - name: "id.name" + in: "path" + description: "User provided value for the resource." + required: true + type: "string" + x-exportParamName: "IdName" + - name: "id.version" + in: "path" + description: "Specific version of the resource." + required: true + type: "string" + x-exportParamName: "IdVersion" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminDescriptionEntity" /api/v1/description_entities/{id.resource_type}/{id.project}/{id.domain}/{id.name}/{id.version}: get: tags: @@ -436,17 +953,24 @@ paths: required: true type: "string" x-exportParamName: "IdVersion" + - name: "id.org" + in: "query" + description: "Optional, org key applied to the resource." + required: false + type: "string" + x-exportParamName: "IdOrg" + x-optionalDataType: "String" responses: 200: description: "A successful response." schema: $ref: "#/definitions/adminDescriptionEntity" - /api/v1/description_entities/{resource_type}/{id.project}/{id.domain}: + /api/v1/description_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain}: get: tags: - "AdminService" summary: "Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions." - operationId: "ListDescriptionEntities2" + operationId: "ListDescriptionEntities4" parameters: - name: "resource_type" in: "path" @@ -461,6 +985,12 @@ paths: - "LAUNCH_PLAN" - "DATASET" x-exportParamName: "ResourceType" + - name: "id.org" + in: "path" + description: "Optional, org key applied to the resource." + required: true + type: "string" + x-exportParamName: "IdOrg" - name: "id.project" in: "path" description: "Name of the project the resource belongs to." @@ -532,12 +1062,12 @@ paths: description: "A successful response." schema: $ref: "#/definitions/adminDescriptionEntityList" - /api/v1/description_entities/{resource_type}/{id.project}/{id.domain}/{id.name}: + /api/v1/description_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain}/{id.name}: get: tags: - "AdminService" summary: "Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions." - operationId: "ListDescriptionEntities" + operationId: "ListDescriptionEntities2" parameters: - name: "resource_type" in: "path" @@ -552,6 +1082,12 @@ paths: - "LAUNCH_PLAN" - "DATASET" x-exportParamName: "ResourceType" + - name: "id.org" + in: "path" + description: "Optional, org key applied to the resource." + required: true + type: "string" + x-exportParamName: "IdOrg" - name: "id.project" in: "path" description: "Name of the project the resource belongs to." @@ -622,37 +1158,232 @@ paths: description: "A successful response." schema: $ref: "#/definitions/adminDescriptionEntityList" - /api/v1/events/nodes: - post: + /api/v1/description_entities/{resource_type}/{id.project}/{id.domain}: + get: tags: - "AdminService" - summary: "Indicates a :ref:`ref_flyteidl.event.NodeExecutionEvent` has occurred." - operationId: "CreateNodeEvent" + summary: "Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions." + operationId: "ListDescriptionEntities3" parameters: - - in: "body" - name: "body" + - name: "resource_type" + in: "path" + description: "Identifies the specific type of resource that this identifier\ + \ corresponds to." required: true - schema: - $ref: "#/definitions/adminNodeExecutionEventRequest" - x-exportParamName: "Body" - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/adminNodeExecutionEventResponse" - /api/v1/events/tasks: - post: - tags: - - "AdminService" - summary: "Indicates a :ref:`ref_flyteidl.event.TaskExecutionEvent` has occurred." - operationId: "CreateTaskEvent" - parameters: - - in: "body" - name: "body" + type: "string" + enum: + - "UNSPECIFIED" + - "TASK" + - "WORKFLOW" + - "LAUNCH_PLAN" + - "DATASET" + x-exportParamName: "ResourceType" + - name: "id.project" + in: "path" + description: "Name of the project the resource belongs to." required: true - schema: - $ref: "#/definitions/adminTaskExecutionEventRequest" - x-exportParamName: "Body" + type: "string" + x-exportParamName: "IdProject" + - name: "id.domain" + in: "path" + description: "Name of the domain the resource belongs to.\nA domain can be\ + \ considered as a subset within a specific project." + required: true + type: "string" + x-exportParamName: "IdDomain" + - name: "id.name" + in: "query" + description: "User provided value for the resource.\nThe combination of project\ + \ + domain + name uniquely identifies the resource.\n+optional - in certain\ + \ contexts - like 'List API', 'Launch plans'." + required: false + type: "string" + x-exportParamName: "IdName" + x-optionalDataType: "String" + - name: "id.org" + in: "query" + description: "Optional, org key applied to the resource." + required: false + type: "string" + x-exportParamName: "IdOrg" + x-optionalDataType: "String" + - name: "limit" + in: "query" + description: "Indicates the number of resources to be returned.\n+required." + required: false + type: "integer" + format: "int64" + x-exportParamName: "Limit" + x-optionalDataType: "Int64" + - name: "token" + in: "query" + description: "In the case of multiple pages of results, the server-provided\ + \ token can be used to fetch the next page\nin a query.\n+optional." + required: false + type: "string" + x-exportParamName: "Token" + x-optionalDataType: "String" + - name: "filters" + in: "query" + description: "Indicates a list of filters passed as string.\nMore info on\ + \ constructing filters : \n+optional." + required: false + type: "string" + x-exportParamName: "Filters" + x-optionalDataType: "String" + - name: "sort_by.key" + in: "query" + description: "Indicates an attribute to sort the response values.\n+required." + required: false + type: "string" + x-exportParamName: "SortByKey" + x-optionalDataType: "String" + - name: "sort_by.direction" + in: "query" + description: "Indicates the direction to apply sort key for response values.\n\ + +optional.\n\n - DESCENDING: By default, fields are sorted in descending\ + \ order." + required: false + type: "string" + default: "DESCENDING" + enum: + - "DESCENDING" + - "ASCENDING" + x-exportParamName: "SortByDirection" + x-optionalDataType: "String" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminDescriptionEntityList" + /api/v1/description_entities/{resource_type}/{id.project}/{id.domain}/{id.name}: + get: + tags: + - "AdminService" + summary: "Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions." + operationId: "ListDescriptionEntities" + parameters: + - name: "resource_type" + in: "path" + description: "Identifies the specific type of resource that this identifier\ + \ corresponds to." + required: true + type: "string" + enum: + - "UNSPECIFIED" + - "TASK" + - "WORKFLOW" + - "LAUNCH_PLAN" + - "DATASET" + x-exportParamName: "ResourceType" + - name: "id.project" + in: "path" + description: "Name of the project the resource belongs to." + required: true + type: "string" + x-exportParamName: "IdProject" + - name: "id.domain" + in: "path" + description: "Name of the domain the resource belongs to.\nA domain can be\ + \ considered as a subset within a specific project." + required: true + type: "string" + x-exportParamName: "IdDomain" + - name: "id.name" + in: "path" + description: "User provided value for the resource.\nThe combination of project\ + \ + domain + name uniquely identifies the resource.\n+optional - in certain\ + \ contexts - like 'List API', 'Launch plans'" + required: true + type: "string" + x-exportParamName: "IdName" + - name: "id.org" + in: "query" + description: "Optional, org key applied to the resource." + required: false + type: "string" + x-exportParamName: "IdOrg" + x-optionalDataType: "String" + - name: "limit" + in: "query" + description: "Indicates the number of resources to be returned.\n+required." + required: false + type: "integer" + format: "int64" + x-exportParamName: "Limit" + x-optionalDataType: "Int64" + - name: "token" + in: "query" + description: "In the case of multiple pages of results, the server-provided\ + \ token can be used to fetch the next page\nin a query.\n+optional." + required: false + type: "string" + x-exportParamName: "Token" + x-optionalDataType: "String" + - name: "filters" + in: "query" + description: "Indicates a list of filters passed as string.\nMore info on\ + \ constructing filters : \n+optional." + required: false + type: "string" + x-exportParamName: "Filters" + x-optionalDataType: "String" + - name: "sort_by.key" + in: "query" + description: "Indicates an attribute to sort the response values.\n+required." + required: false + type: "string" + x-exportParamName: "SortByKey" + x-optionalDataType: "String" + - name: "sort_by.direction" + in: "query" + description: "Indicates the direction to apply sort key for response values.\n\ + +optional.\n\n - DESCENDING: By default, fields are sorted in descending\ + \ order." + required: false + type: "string" + default: "DESCENDING" + enum: + - "DESCENDING" + - "ASCENDING" + x-exportParamName: "SortByDirection" + x-optionalDataType: "String" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminDescriptionEntityList" + /api/v1/events/nodes: + post: + tags: + - "AdminService" + summary: "Indicates a :ref:`ref_flyteidl.event.NodeExecutionEvent` has occurred." + operationId: "CreateNodeEvent" + parameters: + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/adminNodeExecutionEventRequest" + x-exportParamName: "Body" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminNodeExecutionEventResponse" + /api/v1/events/tasks: + post: + tags: + - "AdminService" + summary: "Indicates a :ref:`ref_flyteidl.event.TaskExecutionEvent` has occurred." + operationId: "CreateTaskEvent" + parameters: + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/adminTaskExecutionEventRequest" + x-exportParamName: "Body" responses: 200: description: "A successful response." @@ -694,6 +1425,169 @@ paths: description: "A successful response." schema: $ref: "#/definitions/adminExecutionCreateResponse" + /api/v1/executions/org/{id.org}/{id.project}/{id.domain}: + get: + tags: + - "AdminService" + summary: "Fetch a list of :ref:`ref_flyteidl.admin.Execution`." + operationId: "ListExecutions2" + parameters: + - name: "id.org" + in: "path" + description: "Optional, org key applied to the resource." + required: true + type: "string" + x-exportParamName: "IdOrg" + - name: "id.project" + in: "path" + description: "Name of the project the resource belongs to." + required: true + type: "string" + x-exportParamName: "IdProject" + - name: "id.domain" + in: "path" + description: "Name of the domain the resource belongs to.\nA domain can be\ + \ considered as a subset within a specific project." + required: true + type: "string" + x-exportParamName: "IdDomain" + - name: "id.name" + in: "query" + description: "User provided value for the resource.\nThe combination of project\ + \ + domain + name uniquely identifies the resource.\n+optional - in certain\ + \ contexts - like 'List API', 'Launch plans'." + required: false + type: "string" + x-exportParamName: "IdName" + x-optionalDataType: "String" + - name: "limit" + in: "query" + description: "Indicates the number of resources to be returned.\n+required." + required: false + type: "integer" + format: "int64" + x-exportParamName: "Limit" + x-optionalDataType: "Int64" + - name: "token" + in: "query" + description: "In the case of multiple pages of results, this server-provided\ + \ token can be used to fetch the next page\nin a query.\n+optional." + required: false + type: "string" + x-exportParamName: "Token" + x-optionalDataType: "String" + - name: "filters" + in: "query" + description: "Indicates a list of filters passed as string.\nMore info on\ + \ constructing filters : \n+optional." + required: false + type: "string" + x-exportParamName: "Filters" + x-optionalDataType: "String" + - name: "sort_by.key" + in: "query" + description: "Indicates an attribute to sort the response values.\n+required." + required: false + type: "string" + x-exportParamName: "SortByKey" + x-optionalDataType: "String" + - name: "sort_by.direction" + in: "query" + description: "Indicates the direction to apply sort key for response values.\n\ + +optional.\n\n - DESCENDING: By default, fields are sorted in descending\ + \ order." + required: false + type: "string" + default: "DESCENDING" + enum: + - "DESCENDING" + - "ASCENDING" + x-exportParamName: "SortByDirection" + x-optionalDataType: "String" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminExecutionList" + /api/v1/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}: + get: + tags: + - "AdminService" + summary: "Fetches a :ref:`ref_flyteidl.admin.Execution`." + operationId: "GetExecution2" + parameters: + - name: "id.org" + in: "path" + description: "Optional, org key applied to the resource." + required: true + type: "string" + x-exportParamName: "IdOrg" + - name: "id.project" + in: "path" + description: "Name of the project the resource belongs to." + required: true + type: "string" + x-exportParamName: "IdProject" + - name: "id.domain" + in: "path" + description: "Name of the domain the resource belongs to.\nA domain can be\ + \ considered as a subset within a specific project." + required: true + type: "string" + x-exportParamName: "IdDomain" + - name: "id.name" + in: "path" + description: "User or system provided value for the resource." + required: true + type: "string" + x-exportParamName: "IdName" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminExecution" + put: + tags: + - "AdminService" + summary: "Update execution belonging to project domain :ref:`ref_flyteidl.admin.Execution`." + operationId: "UpdateExecution2" + parameters: + - name: "id.org" + in: "path" + description: "Optional, org key applied to the resource." + required: true + type: "string" + x-exportParamName: "IdOrg" + - name: "id.project" + in: "path" + description: "Name of the project the resource belongs to." + required: true + type: "string" + x-exportParamName: "IdProject" + - name: "id.domain" + in: "path" + description: "Name of the domain the resource belongs to.\nA domain can be\ + \ considered as a subset within a specific project." + required: true + type: "string" + x-exportParamName: "IdDomain" + - name: "id.name" + in: "path" + description: "User or system provided value for the resource." + required: true + type: "string" + x-exportParamName: "IdName" + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/adminExecutionUpdateRequest" + x-exportParamName: "Body" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminExecutionUpdateResponse" /api/v1/executions/recover: post: tags: @@ -766,6 +1660,13 @@ paths: type: "string" x-exportParamName: "IdName" x-optionalDataType: "String" + - name: "id.org" + in: "query" + description: "Optional, org key applied to the resource." + required: false + type: "string" + x-exportParamName: "IdOrg" + x-optionalDataType: "String" - name: "limit" in: "query" description: "Indicates the number of resources to be returned.\n+required." @@ -841,6 +1742,13 @@ paths: required: true type: "string" x-exportParamName: "IdName" + - name: "id.org" + in: "query" + description: "Optional, org key applied to the resource." + required: false + type: "string" + x-exportParamName: "IdOrg" + x-optionalDataType: "String" responses: 200: description: "A successful response." @@ -918,6 +1826,81 @@ paths: description: "A successful response." schema: $ref: "#/definitions/adminExecutionTerminateResponse" + /api/v1/launch_plan_ids/org/{org}/{project}/{domain}: + get: + tags: + - "AdminService" + summary: "Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of\ + \ launch plan objects." + operationId: "ListLaunchPlanIds2" + parameters: + - name: "org" + in: "path" + description: "Optional, org key applied to the resource." + required: true + type: "string" + x-exportParamName: "Org" + - name: "project" + in: "path" + description: "Name of the project that contains the identifiers.\n+required" + required: true + type: "string" + x-exportParamName: "Project" + - name: "domain" + in: "path" + description: "Name of the domain the identifiers belongs to within the project.\n\ + +required" + required: true + type: "string" + x-exportParamName: "Domain" + - name: "limit" + in: "query" + description: "Indicates the number of resources to be returned.\n+required." + required: false + type: "integer" + format: "int64" + x-exportParamName: "Limit" + x-optionalDataType: "Int64" + - name: "token" + in: "query" + description: "In the case of multiple pages of results, the server-provided\ + \ token can be used to fetch the next page\nin a query.\n+optional." + required: false + type: "string" + x-exportParamName: "Token" + x-optionalDataType: "String" + - name: "sort_by.key" + in: "query" + description: "Indicates an attribute to sort the response values.\n+required." + required: false + type: "string" + x-exportParamName: "SortByKey" + x-optionalDataType: "String" + - name: "sort_by.direction" + in: "query" + description: "Indicates the direction to apply sort key for response values.\n\ + +optional.\n\n - DESCENDING: By default, fields are sorted in descending\ + \ order." + required: false + type: "string" + default: "DESCENDING" + enum: + - "DESCENDING" + - "ASCENDING" + x-exportParamName: "SortByDirection" + x-optionalDataType: "String" + - name: "filters" + in: "query" + description: "Indicates a list of filters passed as string.\n+optional." + required: false + type: "string" + x-exportParamName: "Filters" + x-optionalDataType: "String" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminNamedEntityIdentifierList" /api/v1/launch_plan_ids/{project}/{domain}: get: tags: @@ -982,6 +1965,13 @@ paths: type: "string" x-exportParamName: "Filters" x-optionalDataType: "String" + - name: "org" + in: "query" + description: "Optional, org key applied to the resource." + required: false + type: "string" + x-exportParamName: "Org" + x-optionalDataType: "String" responses: 200: description: "A successful response." @@ -1005,13 +1995,19 @@ paths: description: "A successful response." schema: $ref: "#/definitions/adminLaunchPlanCreateResponse" - /api/v1/launch_plans/{id.project}/{id.domain}: + /api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}: get: tags: - "AdminService" summary: "Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions." - operationId: "ListLaunchPlans2" + operationId: "ListLaunchPlans4" parameters: + - name: "id.org" + in: "path" + description: "Optional, org key applied to the resource." + required: true + type: "string" + x-exportParamName: "IdOrg" - name: "id.project" in: "path" description: "Name of the project the resource belongs to." @@ -1083,13 +2079,19 @@ paths: description: "A successful response." schema: $ref: "#/definitions/adminLaunchPlanList" - /api/v1/launch_plans/{id.project}/{id.domain}/{id.name}: + /api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name}: get: tags: - "AdminService" summary: "Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions." - operationId: "ListLaunchPlans" + operationId: "ListLaunchPlans2" parameters: + - name: "id.org" + in: "path" + description: "Optional, org key applied to the resource." + required: true + type: "string" + x-exportParamName: "IdOrg" - name: "id.project" in: "path" description: "Name of the project the resource belongs to." @@ -1160,13 +2162,19 @@ paths: description: "A successful response." schema: $ref: "#/definitions/adminLaunchPlanList" - /api/v1/launch_plans/{id.project}/{id.domain}/{id.name}/{id.version}: + /api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version}: get: tags: - "AdminService" summary: "Fetch a :ref:`ref_flyteidl.admin.LaunchPlan` definition." - operationId: "GetLaunchPlan" + operationId: "GetLaunchPlan2" parameters: + - name: "id.org" + in: "path" + description: "Optional, org key applied to the resource." + required: true + type: "string" + x-exportParamName: "IdOrg" - name: "id.project" in: "path" description: "Name of the project the resource belongs to." @@ -1221,8 +2229,14 @@ paths: tags: - "AdminService" summary: "Updates the status of a registered :ref:`ref_flyteidl.admin.LaunchPlan`." - operationId: "UpdateLaunchPlan" + operationId: "UpdateLaunchPlan2" parameters: + - name: "id.org" + in: "path" + description: "Optional, org key applied to the resource." + required: true + type: "string" + x-exportParamName: "IdOrg" - name: "id.project" in: "path" description: "Name of the project the resource belongs to." @@ -1248,63 +2262,17 @@ paths: required: true type: "string" x-exportParamName: "IdVersion" - - in: "body" - name: "body" - required: true - schema: - $ref: "#/definitions/adminLaunchPlanUpdateRequest" - x-exportParamName: "Body" responses: 200: description: "A successful response." schema: $ref: "#/definitions/adminLaunchPlanUpdateResponse" - /api/v1/matchable_attributes: - get: - tags: - - "AdminService" - summary: "Lists custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration`\ - \ for a specific resource type." - operationId: "ListMatchableAttributes" - parameters: - - name: "resource_type" - in: "query" - description: "+required.\n\n - TASK_RESOURCE: Applies to customizable task\ - \ resource requests and limits.\n - CLUSTER_RESOURCE: Applies to configuring\ - \ templated kubernetes cluster resources.\n - EXECUTION_QUEUE: Configures\ - \ task and dynamic task execution queue assignment.\n - EXECUTION_CLUSTER_LABEL:\ - \ Configures the K8s cluster label to be used for execution to be run\n\ - \ - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service\ - \ when undefined in an execution spec.\n - PLUGIN_OVERRIDE: Selects configurable\ - \ plugin implementation behavior for a given task type.\n - WORKFLOW_EXECUTION_CONFIG:\ - \ Adds defaults for customizable workflow-execution specifications and overrides.\n\ - \ - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which\ - \ this execution should run." - required: false - type: "string" - default: "TASK_RESOURCE" - enum: - - "TASK_RESOURCE" - - "CLUSTER_RESOURCE" - - "EXECUTION_QUEUE" - - "EXECUTION_CLUSTER_LABEL" - - "QUALITY_OF_SERVICE_SPECIFICATION" - - "PLUGIN_OVERRIDE" - - "WORKFLOW_EXECUTION_CONFIG" - - "CLUSTER_ASSIGNMENT" - x-exportParamName: "ResourceType" - x-optionalDataType: "String" - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/adminListMatchableAttributesResponse" - /api/v1/metrics/executions/{id.project}/{id.domain}/{id.name}: + /api/v1/launch_plans/{id.project}/{id.domain}: get: tags: - "AdminService" - summary: "Fetches runtime metrics for a :ref:`ref_flyteidl.admin.Execution`." - operationId: "GetExecutionMetrics" + summary: "Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions." + operationId: "ListLaunchPlans3" parameters: - name: "id.project" in: "path" @@ -1320,18 +2288,339 @@ paths: type: "string" x-exportParamName: "IdDomain" - name: "id.name" - in: "path" - description: "User or system provided value for the resource." - required: true + in: "query" + description: "User provided value for the resource.\nThe combination of project\ + \ + domain + name uniquely identifies the resource.\n+optional - in certain\ + \ contexts - like 'List API', 'Launch plans'." + required: false type: "string" x-exportParamName: "IdName" - - name: "depth" + x-optionalDataType: "String" + - name: "id.org" in: "query" - description: "depth defines the number of Flyte entity levels to traverse\ - \ when breaking down execution details." + description: "Optional, org key applied to the resource." required: false - type: "integer" - format: "int32" + type: "string" + x-exportParamName: "IdOrg" + x-optionalDataType: "String" + - name: "limit" + in: "query" + description: "Indicates the number of resources to be returned.\n+required." + required: false + type: "integer" + format: "int64" + x-exportParamName: "Limit" + x-optionalDataType: "Int64" + - name: "token" + in: "query" + description: "In the case of multiple pages of results, this server-provided\ + \ token can be used to fetch the next page\nin a query.\n+optional." + required: false + type: "string" + x-exportParamName: "Token" + x-optionalDataType: "String" + - name: "filters" + in: "query" + description: "Indicates a list of filters passed as string.\nMore info on\ + \ constructing filters : \n+optional." + required: false + type: "string" + x-exportParamName: "Filters" + x-optionalDataType: "String" + - name: "sort_by.key" + in: "query" + description: "Indicates an attribute to sort the response values.\n+required." + required: false + type: "string" + x-exportParamName: "SortByKey" + x-optionalDataType: "String" + - name: "sort_by.direction" + in: "query" + description: "Indicates the direction to apply sort key for response values.\n\ + +optional.\n\n - DESCENDING: By default, fields are sorted in descending\ + \ order." + required: false + type: "string" + default: "DESCENDING" + enum: + - "DESCENDING" + - "ASCENDING" + x-exportParamName: "SortByDirection" + x-optionalDataType: "String" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminLaunchPlanList" + /api/v1/launch_plans/{id.project}/{id.domain}/{id.name}: + get: + tags: + - "AdminService" + summary: "Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions." + operationId: "ListLaunchPlans" + parameters: + - name: "id.project" + in: "path" + description: "Name of the project the resource belongs to." + required: true + type: "string" + x-exportParamName: "IdProject" + - name: "id.domain" + in: "path" + description: "Name of the domain the resource belongs to.\nA domain can be\ + \ considered as a subset within a specific project." + required: true + type: "string" + x-exportParamName: "IdDomain" + - name: "id.name" + in: "path" + description: "User provided value for the resource.\nThe combination of project\ + \ + domain + name uniquely identifies the resource.\n+optional - in certain\ + \ contexts - like 'List API', 'Launch plans'" + required: true + type: "string" + x-exportParamName: "IdName" + - name: "id.org" + in: "query" + description: "Optional, org key applied to the resource." + required: false + type: "string" + x-exportParamName: "IdOrg" + x-optionalDataType: "String" + - name: "limit" + in: "query" + description: "Indicates the number of resources to be returned.\n+required." + required: false + type: "integer" + format: "int64" + x-exportParamName: "Limit" + x-optionalDataType: "Int64" + - name: "token" + in: "query" + description: "In the case of multiple pages of results, this server-provided\ + \ token can be used to fetch the next page\nin a query.\n+optional." + required: false + type: "string" + x-exportParamName: "Token" + x-optionalDataType: "String" + - name: "filters" + in: "query" + description: "Indicates a list of filters passed as string.\nMore info on\ + \ constructing filters : \n+optional." + required: false + type: "string" + x-exportParamName: "Filters" + x-optionalDataType: "String" + - name: "sort_by.key" + in: "query" + description: "Indicates an attribute to sort the response values.\n+required." + required: false + type: "string" + x-exportParamName: "SortByKey" + x-optionalDataType: "String" + - name: "sort_by.direction" + in: "query" + description: "Indicates the direction to apply sort key for response values.\n\ + +optional.\n\n - DESCENDING: By default, fields are sorted in descending\ + \ order." + required: false + type: "string" + default: "DESCENDING" + enum: + - "DESCENDING" + - "ASCENDING" + x-exportParamName: "SortByDirection" + x-optionalDataType: "String" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminLaunchPlanList" + /api/v1/launch_plans/{id.project}/{id.domain}/{id.name}/{id.version}: + get: + tags: + - "AdminService" + summary: "Fetch a :ref:`ref_flyteidl.admin.LaunchPlan` definition." + operationId: "GetLaunchPlan" + parameters: + - name: "id.project" + in: "path" + description: "Name of the project the resource belongs to." + required: true + type: "string" + x-exportParamName: "IdProject" + - name: "id.domain" + in: "path" + description: "Name of the domain the resource belongs to.\nA domain can be\ + \ considered as a subset within a specific project." + required: true + type: "string" + x-exportParamName: "IdDomain" + - name: "id.name" + in: "path" + description: "User provided value for the resource." + required: true + type: "string" + x-exportParamName: "IdName" + - name: "id.version" + in: "path" + description: "Specific version of the resource." + required: true + type: "string" + x-exportParamName: "IdVersion" + - name: "id.resource_type" + in: "query" + description: "Identifies the specific type of resource that this identifier\ + \ corresponds to.\n\n - DATASET: A dataset represents an entity modeled\ + \ in Flyte DataCatalog. A Dataset is also a versioned entity and can be\ + \ a compilation of multiple individual objects.\nEventually all Catalog\ + \ objects should be modeled similar to Flyte Objects. The Dataset entities\ + \ makes it possible for the UI and CLI to act on the objects \nin a similar\ + \ manner to other Flyte objects" + required: false + type: "string" + default: "UNSPECIFIED" + enum: + - "UNSPECIFIED" + - "TASK" + - "WORKFLOW" + - "LAUNCH_PLAN" + - "DATASET" + x-exportParamName: "IdResourceType" + x-optionalDataType: "String" + - name: "id.org" + in: "query" + description: "Optional, org key applied to the resource." + required: false + type: "string" + x-exportParamName: "IdOrg" + x-optionalDataType: "String" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminLaunchPlan" + put: + tags: + - "AdminService" + summary: "Updates the status of a registered :ref:`ref_flyteidl.admin.LaunchPlan`." + operationId: "UpdateLaunchPlan" + parameters: + - name: "id.project" + in: "path" + description: "Name of the project the resource belongs to." + required: true + type: "string" + x-exportParamName: "IdProject" + - name: "id.domain" + in: "path" + description: "Name of the domain the resource belongs to.\nA domain can be\ + \ considered as a subset within a specific project." + required: true + type: "string" + x-exportParamName: "IdDomain" + - name: "id.name" + in: "path" + description: "User provided value for the resource." + required: true + type: "string" + x-exportParamName: "IdName" + - name: "id.version" + in: "path" + description: "Specific version of the resource." + required: true + type: "string" + x-exportParamName: "IdVersion" + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/adminLaunchPlanUpdateRequest" + x-exportParamName: "Body" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminLaunchPlanUpdateResponse" + /api/v1/matchable_attributes: + get: + tags: + - "AdminService" + summary: "Lists custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration`\ + \ for a specific resource type." + operationId: "ListMatchableAttributes" + parameters: + - name: "resource_type" + in: "query" + description: "+required.\n\n - TASK_RESOURCE: Applies to customizable task\ + \ resource requests and limits.\n - CLUSTER_RESOURCE: Applies to configuring\ + \ templated kubernetes cluster resources.\n - EXECUTION_QUEUE: Configures\ + \ task and dynamic task execution queue assignment.\n - EXECUTION_CLUSTER_LABEL:\ + \ Configures the K8s cluster label to be used for execution to be run\n\ + \ - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service\ + \ when undefined in an execution spec.\n - PLUGIN_OVERRIDE: Selects configurable\ + \ plugin implementation behavior for a given task type.\n - WORKFLOW_EXECUTION_CONFIG:\ + \ Adds defaults for customizable workflow-execution specifications and overrides.\n\ + \ - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which\ + \ this execution should run." + required: false + type: "string" + default: "TASK_RESOURCE" + enum: + - "TASK_RESOURCE" + - "CLUSTER_RESOURCE" + - "EXECUTION_QUEUE" + - "EXECUTION_CLUSTER_LABEL" + - "QUALITY_OF_SERVICE_SPECIFICATION" + - "PLUGIN_OVERRIDE" + - "WORKFLOW_EXECUTION_CONFIG" + - "CLUSTER_ASSIGNMENT" + x-exportParamName: "ResourceType" + x-optionalDataType: "String" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminListMatchableAttributesResponse" + /api/v1/metrics/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}: + get: + tags: + - "AdminService" + summary: "Fetches runtime metrics for a :ref:`ref_flyteidl.admin.Execution`." + operationId: "GetExecutionMetrics2" + parameters: + - name: "id.org" + in: "path" + description: "Optional, org key applied to the resource." + required: true + type: "string" + x-exportParamName: "IdOrg" + - name: "id.project" + in: "path" + description: "Name of the project the resource belongs to." + required: true + type: "string" + x-exportParamName: "IdProject" + - name: "id.domain" + in: "path" + description: "Name of the domain the resource belongs to.\nA domain can be\ + \ considered as a subset within a specific project." + required: true + type: "string" + x-exportParamName: "IdDomain" + - name: "id.name" + in: "path" + description: "User or system provided value for the resource." + required: true + type: "string" + x-exportParamName: "IdName" + - name: "depth" + in: "query" + description: "depth defines the number of Flyte entity levels to traverse\ + \ when breaking down execution details." + required: false + type: "integer" + format: "int32" x-exportParamName: "Depth" x-optionalDataType: "Int32" responses: @@ -1339,12 +2628,59 @@ paths: description: "A successful response." schema: $ref: "#/definitions/adminWorkflowExecutionGetMetricsResponse" - /api/v1/named_entities/{resource_type}/{id.project}/{id.domain}/{id.name}: + /api/v1/metrics/executions/{id.project}/{id.domain}/{id.name}: + get: + tags: + - "AdminService" + summary: "Fetches runtime metrics for a :ref:`ref_flyteidl.admin.Execution`." + operationId: "GetExecutionMetrics" + parameters: + - name: "id.project" + in: "path" + description: "Name of the project the resource belongs to." + required: true + type: "string" + x-exportParamName: "IdProject" + - name: "id.domain" + in: "path" + description: "Name of the domain the resource belongs to.\nA domain can be\ + \ considered as a subset within a specific project." + required: true + type: "string" + x-exportParamName: "IdDomain" + - name: "id.name" + in: "path" + description: "User or system provided value for the resource." + required: true + type: "string" + x-exportParamName: "IdName" + - name: "id.org" + in: "query" + description: "Optional, org key applied to the resource." + required: false + type: "string" + x-exportParamName: "IdOrg" + x-optionalDataType: "String" + - name: "depth" + in: "query" + description: "depth defines the number of Flyte entity levels to traverse\ + \ when breaking down execution details." + required: false + type: "integer" + format: "int32" + x-exportParamName: "Depth" + x-optionalDataType: "Int32" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminWorkflowExecutionGetMetricsResponse" + /api/v1/named_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain}/{id.name}: get: tags: - "AdminService" summary: "Returns a :ref:`ref_flyteidl.admin.NamedEntity` object." - operationId: "GetNamedEntity" + operationId: "GetNamedEntity2" parameters: - name: "resource_type" in: "path" @@ -1359,6 +2695,12 @@ paths: - "LAUNCH_PLAN" - "DATASET" x-exportParamName: "ResourceType" + - name: "id.org" + in: "path" + description: "Optional, org key applied to the resource." + required: true + type: "string" + x-exportParamName: "IdOrg" - name: "id.project" in: "path" description: "Name of the project the resource belongs to." @@ -1389,7 +2731,7 @@ paths: tags: - "AdminService" summary: "Updates a :ref:`ref_flyteidl.admin.NamedEntity` object." - operationId: "UpdateNamedEntity" + operationId: "UpdateNamedEntity2" parameters: - name: "resource_type" in: "path" @@ -1403,6 +2745,12 @@ paths: - "LAUNCH_PLAN" - "DATASET" x-exportParamName: "ResourceType" + - name: "id.org" + in: "path" + description: "Optional, org key applied to the resource." + required: true + type: "string" + x-exportParamName: "IdOrg" - name: "id.project" in: "path" description: "Name of the project the resource belongs to." @@ -1435,12 +2783,12 @@ paths: description: "A successful response." schema: $ref: "#/definitions/adminNamedEntityUpdateResponse" - /api/v1/named_entities/{resource_type}/{project}/{domain}: + /api/v1/named_entities/{resource_type}/org/{org}/{project}/{domain}: get: tags: - "AdminService" summary: "Returns a list of :ref:`ref_flyteidl.admin.NamedEntity` objects." - operationId: "ListNamedEntities" + operationId: "ListNamedEntities2" parameters: - name: "resource_type" in: "path" @@ -1455,6 +2803,12 @@ paths: - "LAUNCH_PLAN" - "DATASET" x-exportParamName: "ResourceType" + - name: "org" + in: "path" + description: "Optional, org key applied to the resource." + required: true + type: "string" + x-exportParamName: "Org" - name: "project" in: "path" description: "Name of the project that contains the identifiers.\n+required" @@ -1515,71 +2869,144 @@ paths: description: "A successful response." schema: $ref: "#/definitions/adminNamedEntityList" - /api/v1/node_executions/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}: + /api/v1/named_entities/{resource_type}/{id.project}/{id.domain}/{id.name}: get: tags: - "AdminService" - summary: "Fetches a :ref:`ref_flyteidl.admin.NodeExecution`." - operationId: "GetNodeExecution" + summary: "Returns a :ref:`ref_flyteidl.admin.NamedEntity` object." + operationId: "GetNamedEntity" parameters: - - name: "id.execution_id.project" + - name: "resource_type" + in: "path" + description: "Resource type of the metadata to get. One of Task, Workflow\ + \ or LaunchPlan.\n+required" + required: true + type: "string" + enum: + - "UNSPECIFIED" + - "TASK" + - "WORKFLOW" + - "LAUNCH_PLAN" + - "DATASET" + x-exportParamName: "ResourceType" + - name: "id.project" in: "path" description: "Name of the project the resource belongs to." required: true type: "string" - x-exportParamName: "IdExecutionIdProject" - - name: "id.execution_id.domain" + x-exportParamName: "IdProject" + - name: "id.domain" in: "path" description: "Name of the domain the resource belongs to.\nA domain can be\ \ considered as a subset within a specific project." required: true type: "string" - x-exportParamName: "IdExecutionIdDomain" - - name: "id.execution_id.name" + x-exportParamName: "IdDomain" + - name: "id.name" in: "path" - description: "User or system provided value for the resource." + description: "User provided value for the resource.\nThe combination of project\ + \ + domain + name uniquely identifies the resource.\n+optional - in certain\ + \ contexts - like 'List API', 'Launch plans'" required: true type: "string" - x-exportParamName: "IdExecutionIdName" - - name: "id.node_id" - in: "path" - required: true + x-exportParamName: "IdName" + - name: "id.org" + in: "query" + description: "Optional, org key applied to the resource." + required: false type: "string" - x-exportParamName: "IdNodeId" + x-exportParamName: "IdOrg" + x-optionalDataType: "String" responses: 200: description: "A successful response." schema: - $ref: "#/definitions/flyteidladminNodeExecution" - /api/v1/node_executions/{workflow_execution_id.project}/{workflow_execution_id.domain}/{workflow_execution_id.name}: - get: + $ref: "#/definitions/adminNamedEntity" + put: tags: - "AdminService" - summary: "Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution`." - operationId: "ListNodeExecutions" + summary: "Updates a :ref:`ref_flyteidl.admin.NamedEntity` object." + operationId: "UpdateNamedEntity" parameters: - - name: "workflow_execution_id.project" + - name: "resource_type" + in: "path" + description: "Resource type of the metadata to update\n+required" + required: true + type: "string" + enum: + - "UNSPECIFIED" + - "TASK" + - "WORKFLOW" + - "LAUNCH_PLAN" + - "DATASET" + x-exportParamName: "ResourceType" + - name: "id.project" in: "path" description: "Name of the project the resource belongs to." required: true type: "string" - x-exportParamName: "WorkflowExecutionIdProject" - - name: "workflow_execution_id.domain" + x-exportParamName: "IdProject" + - name: "id.domain" in: "path" description: "Name of the domain the resource belongs to.\nA domain can be\ \ considered as a subset within a specific project." required: true type: "string" - x-exportParamName: "WorkflowExecutionIdDomain" - - name: "workflow_execution_id.name" + x-exportParamName: "IdDomain" + - name: "id.name" in: "path" - description: "User or system provided value for the resource." + description: "User provided value for the resource.\nThe combination of project\ + \ + domain + name uniquely identifies the resource.\n+optional - in certain\ + \ contexts - like 'List API', 'Launch plans'" required: true type: "string" - x-exportParamName: "WorkflowExecutionIdName" + x-exportParamName: "IdName" + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/adminNamedEntityUpdateRequest" + x-exportParamName: "Body" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminNamedEntityUpdateResponse" + /api/v1/named_entities/{resource_type}/{project}/{domain}: + get: + tags: + - "AdminService" + summary: "Returns a list of :ref:`ref_flyteidl.admin.NamedEntity` objects." + operationId: "ListNamedEntities" + parameters: + - name: "resource_type" + in: "path" + description: "Resource type of the metadata to query. One of Task, Workflow\ + \ or LaunchPlan.\n+required" + required: true + type: "string" + enum: + - "UNSPECIFIED" + - "TASK" + - "WORKFLOW" + - "LAUNCH_PLAN" + - "DATASET" + x-exportParamName: "ResourceType" + - name: "project" + in: "path" + description: "Name of the project that contains the identifiers.\n+required" + required: true + type: "string" + x-exportParamName: "Project" + - name: "domain" + in: "path" + description: "Name of the domain the identifiers belongs to within the project." + required: true + type: "string" + x-exportParamName: "Domain" - name: "limit" in: "query" - description: "Indicates the number of resources to be returned.\n+required." + description: "Indicates the number of resources to be returned." required: false type: "integer" format: "int64" @@ -1587,18 +3014,12 @@ paths: x-optionalDataType: "Int64" - name: "token" in: "query" + description: "In the case of multiple pages of results, the server-provided\ + \ token can be used to fetch the next page\nin a query.\n+optional." required: false type: "string" x-exportParamName: "Token" x-optionalDataType: "String" - - name: "filters" - in: "query" - description: "Indicates a list of filters passed as string.\nMore info on\ - \ constructing filters : \n+optional." - required: false - type: "string" - x-exportParamName: "Filters" - x-optionalDataType: "String" - name: "sort_by.key" in: "query" description: "Indicates an attribute to sort the response values.\n+required." @@ -1613,57 +3034,1976 @@ paths: \ order." required: false type: "string" - default: "DESCENDING" + default: "DESCENDING" + enum: + - "DESCENDING" + - "ASCENDING" + x-exportParamName: "SortByDirection" + x-optionalDataType: "String" + - name: "filters" + in: "query" + description: "Indicates a list of filters passed as string.\n+optional." + required: false + type: "string" + x-exportParamName: "Filters" + x-optionalDataType: "String" + - name: "org" + in: "query" + description: "Optional, org key applied to the resource." + required: false + type: "string" + x-exportParamName: "Org" + x-optionalDataType: "String" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminNamedEntityList" + ? /api/v1/node_executions/org/{id.execution_id.org}/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id} + : get: + tags: + - "AdminService" + summary: "Fetches a :ref:`ref_flyteidl.admin.NodeExecution`." + operationId: "GetNodeExecution2" + parameters: + - name: "id.execution_id.org" + in: "path" + description: "Optional, org key applied to the resource." + required: true + type: "string" + x-exportParamName: "IdExecutionIdOrg" + - name: "id.execution_id.project" + in: "path" + description: "Name of the project the resource belongs to." + required: true + type: "string" + x-exportParamName: "IdExecutionIdProject" + - name: "id.execution_id.domain" + in: "path" + description: "Name of the domain the resource belongs to.\nA domain can be\ + \ considered as a subset within a specific project." + required: true + type: "string" + x-exportParamName: "IdExecutionIdDomain" + - name: "id.execution_id.name" + in: "path" + description: "User or system provided value for the resource." + required: true + type: "string" + x-exportParamName: "IdExecutionIdName" + - name: "id.node_id" + in: "path" + required: true + type: "string" + x-exportParamName: "IdNodeId" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/flyteidladminNodeExecution" + ? /api/v1/node_executions/org/{workflow_execution_id.org}/{workflow_execution_id.project}/{workflow_execution_id.domain}/{workflow_execution_id.name} + : get: + tags: + - "AdminService" + summary: "Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution`." + operationId: "ListNodeExecutions2" + parameters: + - name: "workflow_execution_id.org" + in: "path" + description: "Optional, org key applied to the resource." + required: true + type: "string" + x-exportParamName: "WorkflowExecutionIdOrg" + - name: "workflow_execution_id.project" + in: "path" + description: "Name of the project the resource belongs to." + required: true + type: "string" + x-exportParamName: "WorkflowExecutionIdProject" + - name: "workflow_execution_id.domain" + in: "path" + description: "Name of the domain the resource belongs to.\nA domain can be\ + \ considered as a subset within a specific project." + required: true + type: "string" + x-exportParamName: "WorkflowExecutionIdDomain" + - name: "workflow_execution_id.name" + in: "path" + description: "User or system provided value for the resource." + required: true + type: "string" + x-exportParamName: "WorkflowExecutionIdName" + - name: "limit" + in: "query" + description: "Indicates the number of resources to be returned.\n+required." + required: false + type: "integer" + format: "int64" + x-exportParamName: "Limit" + x-optionalDataType: "Int64" + - name: "token" + in: "query" + required: false + type: "string" + x-exportParamName: "Token" + x-optionalDataType: "String" + - name: "filters" + in: "query" + description: "Indicates a list of filters passed as string.\nMore info on\ + \ constructing filters : \n+optional." + required: false + type: "string" + x-exportParamName: "Filters" + x-optionalDataType: "String" + - name: "sort_by.key" + in: "query" + description: "Indicates an attribute to sort the response values.\n+required." + required: false + type: "string" + x-exportParamName: "SortByKey" + x-optionalDataType: "String" + - name: "sort_by.direction" + in: "query" + description: "Indicates the direction to apply sort key for response values.\n\ + +optional.\n\n - DESCENDING: By default, fields are sorted in descending\ + \ order." + required: false + type: "string" + default: "DESCENDING" + enum: + - "DESCENDING" + - "ASCENDING" + x-exportParamName: "SortByDirection" + x-optionalDataType: "String" + - name: "unique_parent_id" + in: "query" + description: "Unique identifier of the parent node in the execution\n+optional." + required: false + type: "string" + x-exportParamName: "UniqueParentId" + x-optionalDataType: "String" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminNodeExecutionList" + /api/v1/node_executions/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}: + get: + tags: + - "AdminService" + summary: "Fetches a :ref:`ref_flyteidl.admin.NodeExecution`." + operationId: "GetNodeExecution" + parameters: + - name: "id.execution_id.project" + in: "path" + description: "Name of the project the resource belongs to." + required: true + type: "string" + x-exportParamName: "IdExecutionIdProject" + - name: "id.execution_id.domain" + in: "path" + description: "Name of the domain the resource belongs to.\nA domain can be\ + \ considered as a subset within a specific project." + required: true + type: "string" + x-exportParamName: "IdExecutionIdDomain" + - name: "id.execution_id.name" + in: "path" + description: "User or system provided value for the resource." + required: true + type: "string" + x-exportParamName: "IdExecutionIdName" + - name: "id.node_id" + in: "path" + required: true + type: "string" + x-exportParamName: "IdNodeId" + - name: "id.execution_id.org" + in: "query" + description: "Optional, org key applied to the resource." + required: false + type: "string" + x-exportParamName: "IdExecutionIdOrg" + x-optionalDataType: "String" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/flyteidladminNodeExecution" + /api/v1/node_executions/{workflow_execution_id.project}/{workflow_execution_id.domain}/{workflow_execution_id.name}: + get: + tags: + - "AdminService" + summary: "Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution`." + operationId: "ListNodeExecutions" + parameters: + - name: "workflow_execution_id.project" + in: "path" + description: "Name of the project the resource belongs to." + required: true + type: "string" + x-exportParamName: "WorkflowExecutionIdProject" + - name: "workflow_execution_id.domain" + in: "path" + description: "Name of the domain the resource belongs to.\nA domain can be\ + \ considered as a subset within a specific project." + required: true + type: "string" + x-exportParamName: "WorkflowExecutionIdDomain" + - name: "workflow_execution_id.name" + in: "path" + description: "User or system provided value for the resource." + required: true + type: "string" + x-exportParamName: "WorkflowExecutionIdName" + - name: "workflow_execution_id.org" + in: "query" + description: "Optional, org key applied to the resource." + required: false + type: "string" + x-exportParamName: "WorkflowExecutionIdOrg" + x-optionalDataType: "String" + - name: "limit" + in: "query" + description: "Indicates the number of resources to be returned.\n+required." + required: false + type: "integer" + format: "int64" + x-exportParamName: "Limit" + x-optionalDataType: "Int64" + - name: "token" + in: "query" + required: false + type: "string" + x-exportParamName: "Token" + x-optionalDataType: "String" + - name: "filters" + in: "query" + description: "Indicates a list of filters passed as string.\nMore info on\ + \ constructing filters : \n+optional." + required: false + type: "string" + x-exportParamName: "Filters" + x-optionalDataType: "String" + - name: "sort_by.key" + in: "query" + description: "Indicates an attribute to sort the response values.\n+required." + required: false + type: "string" + x-exportParamName: "SortByKey" + x-optionalDataType: "String" + - name: "sort_by.direction" + in: "query" + description: "Indicates the direction to apply sort key for response values.\n\ + +optional.\n\n - DESCENDING: By default, fields are sorted in descending\ + \ order." + required: false + type: "string" + default: "DESCENDING" + enum: + - "DESCENDING" + - "ASCENDING" + x-exportParamName: "SortByDirection" + x-optionalDataType: "String" + - name: "unique_parent_id" + in: "query" + description: "Unique identifier of the parent node in the execution\n+optional." + required: false + type: "string" + x-exportParamName: "UniqueParentId" + x-optionalDataType: "String" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminNodeExecutionList" + /api/v1/project_attributes/{attributes.project}: + put: + tags: + - "AdminService" + summary: "Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration`\ + \ at the project level" + operationId: "UpdateProjectAttributes" + parameters: + - name: "attributes.project" + in: "path" + description: "Unique project id for which this set of attributes will be applied." + required: true + type: "string" + x-exportParamName: "AttributesProject" + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/adminProjectAttributesUpdateRequest" + x-exportParamName: "Body" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminProjectAttributesUpdateResponse" + /api/v1/project_attributes/{project}: + get: + tags: + - "AdminService" + summary: "Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration`\ + \ for a project and domain." + operationId: "GetProjectAttributes" + parameters: + - name: "project" + in: "path" + description: "Unique project id which this set of attributes references.\n\ + +required" + required: true + type: "string" + x-exportParamName: "Project" + - name: "resource_type" + in: "query" + description: "Which type of matchable attributes to return.\n+required.\n\n\ + \ - TASK_RESOURCE: Applies to customizable task resource requests and limits.\n\ + \ - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster\ + \ resources.\n - EXECUTION_QUEUE: Configures task and dynamic task execution\ + \ queue assignment.\n - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster\ + \ label to be used for execution to be run\n - QUALITY_OF_SERVICE_SPECIFICATION:\ + \ Configures default quality of service when undefined in an execution spec.\n\ + \ - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior\ + \ for a given task type.\n - WORKFLOW_EXECUTION_CONFIG: Adds defaults for\ + \ customizable workflow-execution specifications and overrides.\n - CLUSTER_ASSIGNMENT:\ + \ Controls how to select an available cluster on which this execution should\ + \ run." + required: false + type: "string" + default: "TASK_RESOURCE" + enum: + - "TASK_RESOURCE" + - "CLUSTER_RESOURCE" + - "EXECUTION_QUEUE" + - "EXECUTION_CLUSTER_LABEL" + - "QUALITY_OF_SERVICE_SPECIFICATION" + - "PLUGIN_OVERRIDE" + - "WORKFLOW_EXECUTION_CONFIG" + - "CLUSTER_ASSIGNMENT" + x-exportParamName: "ResourceType" + x-optionalDataType: "String" + - name: "org" + in: "query" + description: "Optional, org key applied to the project." + required: false + type: "string" + x-exportParamName: "Org" + x-optionalDataType: "String" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminProjectAttributesGetResponse" + delete: + tags: + - "AdminService" + summary: "Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration`\ + \ for a project and domain." + operationId: "DeleteProjectAttributes" + parameters: + - name: "project" + in: "path" + description: "Unique project id which this set of attributes references.\n\ + +required" + required: true + type: "string" + x-exportParamName: "Project" + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/adminProjectAttributesDeleteRequest" + x-exportParamName: "Body" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminProjectAttributesDeleteResponse" + /api/v1/project_domain_attributes/org/{attributes.org}/{attributes.project}: + put: + tags: + - "AdminService" + summary: "Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration`\ + \ at the project level" + operationId: "UpdateProjectAttributes2" + parameters: + - name: "attributes.org" + in: "path" + description: "Optional, org key applied to the project." + required: true + type: "string" + x-exportParamName: "AttributesOrg" + - name: "attributes.project" + in: "path" + description: "Unique project id for which this set of attributes will be applied." + required: true + type: "string" + x-exportParamName: "AttributesProject" + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/adminProjectAttributesUpdateRequest" + x-exportParamName: "Body" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminProjectAttributesUpdateResponse" + /api/v1/project_domain_attributes/org/{attributes.org}/{attributes.project}/{attributes.domain}: + put: + tags: + - "AdminService" + summary: "Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration`\ + \ for a project and domain." + operationId: "UpdateProjectDomainAttributes2" + parameters: + - name: "attributes.org" + in: "path" + description: "Optional, org key applied to the attributes." + required: true + type: "string" + x-exportParamName: "AttributesOrg" + - name: "attributes.project" + in: "path" + description: "Unique project id for which this set of attributes will be applied." + required: true + type: "string" + x-exportParamName: "AttributesProject" + - name: "attributes.domain" + in: "path" + description: "Unique domain id for which this set of attributes will be applied." + required: true + type: "string" + x-exportParamName: "AttributesDomain" + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/adminProjectDomainAttributesUpdateRequest" + x-exportParamName: "Body" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminProjectDomainAttributesUpdateResponse" + /api/v1/project_domain_attributes/org/{org}/{project}: + get: + tags: + - "AdminService" + summary: "Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration`\ + \ for a project and domain." + operationId: "GetProjectAttributes2" + parameters: + - name: "org" + in: "path" + description: "Optional, org key applied to the project." + required: true + type: "string" + x-exportParamName: "Org" + - name: "project" + in: "path" + description: "Unique project id which this set of attributes references.\n\ + +required" + required: true + type: "string" + x-exportParamName: "Project" + - name: "resource_type" + in: "query" + description: "Which type of matchable attributes to return.\n+required.\n\n\ + \ - TASK_RESOURCE: Applies to customizable task resource requests and limits.\n\ + \ - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster\ + \ resources.\n - EXECUTION_QUEUE: Configures task and dynamic task execution\ + \ queue assignment.\n - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster\ + \ label to be used for execution to be run\n - QUALITY_OF_SERVICE_SPECIFICATION:\ + \ Configures default quality of service when undefined in an execution spec.\n\ + \ - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior\ + \ for a given task type.\n - WORKFLOW_EXECUTION_CONFIG: Adds defaults for\ + \ customizable workflow-execution specifications and overrides.\n - CLUSTER_ASSIGNMENT:\ + \ Controls how to select an available cluster on which this execution should\ + \ run." + required: false + type: "string" + default: "TASK_RESOURCE" + enum: + - "TASK_RESOURCE" + - "CLUSTER_RESOURCE" + - "EXECUTION_QUEUE" + - "EXECUTION_CLUSTER_LABEL" + - "QUALITY_OF_SERVICE_SPECIFICATION" + - "PLUGIN_OVERRIDE" + - "WORKFLOW_EXECUTION_CONFIG" + - "CLUSTER_ASSIGNMENT" + x-exportParamName: "ResourceType" + x-optionalDataType: "String" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminProjectAttributesGetResponse" + delete: + tags: + - "AdminService" + summary: "Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration`\ + \ for a project and domain." + operationId: "DeleteProjectAttributes2" + parameters: + - name: "org" + in: "path" + description: "Optional, org key applied to the project." + required: true + type: "string" + x-exportParamName: "Org" + - name: "project" + in: "path" + description: "Unique project id which this set of attributes references.\n\ + +required" + required: true + type: "string" + x-exportParamName: "Project" + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/adminProjectAttributesDeleteRequest" + x-exportParamName: "Body" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminProjectAttributesDeleteResponse" + /api/v1/project_domain_attributes/org/{org}/{project}/{domain}: + get: + tags: + - "AdminService" + summary: "Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration`\ + \ for a project and domain." + operationId: "GetProjectDomainAttributes2" + parameters: + - name: "org" + in: "path" + description: "Optional, org key applied to the attributes." + required: true + type: "string" + x-exportParamName: "Org" + - name: "project" + in: "path" + description: "Unique project id which this set of attributes references.\n\ + +required" + required: true + type: "string" + x-exportParamName: "Project" + - name: "domain" + in: "path" + description: "Unique domain id which this set of attributes references.\n\ + +required" + required: true + type: "string" + x-exportParamName: "Domain" + - name: "resource_type" + in: "query" + description: "Which type of matchable attributes to return.\n+required.\n\n\ + \ - TASK_RESOURCE: Applies to customizable task resource requests and limits.\n\ + \ - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster\ + \ resources.\n - EXECUTION_QUEUE: Configures task and dynamic task execution\ + \ queue assignment.\n - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster\ + \ label to be used for execution to be run\n - QUALITY_OF_SERVICE_SPECIFICATION:\ + \ Configures default quality of service when undefined in an execution spec.\n\ + \ - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior\ + \ for a given task type.\n - WORKFLOW_EXECUTION_CONFIG: Adds defaults for\ + \ customizable workflow-execution specifications and overrides.\n - CLUSTER_ASSIGNMENT:\ + \ Controls how to select an available cluster on which this execution should\ + \ run." + required: false + type: "string" + default: "TASK_RESOURCE" + enum: + - "TASK_RESOURCE" + - "CLUSTER_RESOURCE" + - "EXECUTION_QUEUE" + - "EXECUTION_CLUSTER_LABEL" + - "QUALITY_OF_SERVICE_SPECIFICATION" + - "PLUGIN_OVERRIDE" + - "WORKFLOW_EXECUTION_CONFIG" + - "CLUSTER_ASSIGNMENT" + x-exportParamName: "ResourceType" + x-optionalDataType: "String" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminProjectDomainAttributesGetResponse" + delete: + tags: + - "AdminService" + summary: "Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration`\ + \ for a project and domain." + operationId: "DeleteProjectDomainAttributes2" + parameters: + - name: "org" + in: "path" + description: "Optional, org key applied to the attributes." + required: true + type: "string" + x-exportParamName: "Org" + - name: "project" + in: "path" + description: "Unique project id which this set of attributes references.\n\ + +required" + required: true + type: "string" + x-exportParamName: "Project" + - name: "domain" + in: "path" + description: "Unique domain id which this set of attributes references.\n\ + +required" + required: true + type: "string" + x-exportParamName: "Domain" + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/adminProjectDomainAttributesDeleteRequest" + x-exportParamName: "Body" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminProjectDomainAttributesDeleteResponse" + /api/v1/project_domain_attributes/{attributes.project}/{attributes.domain}: + put: + tags: + - "AdminService" + summary: "Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration`\ + \ for a project and domain." + operationId: "UpdateProjectDomainAttributes" + parameters: + - name: "attributes.project" + in: "path" + description: "Unique project id for which this set of attributes will be applied." + required: true + type: "string" + x-exportParamName: "AttributesProject" + - name: "attributes.domain" + in: "path" + description: "Unique domain id for which this set of attributes will be applied." + required: true + type: "string" + x-exportParamName: "AttributesDomain" + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/adminProjectDomainAttributesUpdateRequest" + x-exportParamName: "Body" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminProjectDomainAttributesUpdateResponse" + /api/v1/project_domain_attributes/{project}/{domain}: + get: + tags: + - "AdminService" + summary: "Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration`\ + \ for a project and domain." + operationId: "GetProjectDomainAttributes" + parameters: + - name: "project" + in: "path" + description: "Unique project id which this set of attributes references.\n\ + +required" + required: true + type: "string" + x-exportParamName: "Project" + - name: "domain" + in: "path" + description: "Unique domain id which this set of attributes references.\n\ + +required" + required: true + type: "string" + x-exportParamName: "Domain" + - name: "resource_type" + in: "query" + description: "Which type of matchable attributes to return.\n+required.\n\n\ + \ - TASK_RESOURCE: Applies to customizable task resource requests and limits.\n\ + \ - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster\ + \ resources.\n - EXECUTION_QUEUE: Configures task and dynamic task execution\ + \ queue assignment.\n - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster\ + \ label to be used for execution to be run\n - QUALITY_OF_SERVICE_SPECIFICATION:\ + \ Configures default quality of service when undefined in an execution spec.\n\ + \ - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior\ + \ for a given task type.\n - WORKFLOW_EXECUTION_CONFIG: Adds defaults for\ + \ customizable workflow-execution specifications and overrides.\n - CLUSTER_ASSIGNMENT:\ + \ Controls how to select an available cluster on which this execution should\ + \ run." + required: false + type: "string" + default: "TASK_RESOURCE" + enum: + - "TASK_RESOURCE" + - "CLUSTER_RESOURCE" + - "EXECUTION_QUEUE" + - "EXECUTION_CLUSTER_LABEL" + - "QUALITY_OF_SERVICE_SPECIFICATION" + - "PLUGIN_OVERRIDE" + - "WORKFLOW_EXECUTION_CONFIG" + - "CLUSTER_ASSIGNMENT" + x-exportParamName: "ResourceType" + x-optionalDataType: "String" + - name: "org" + in: "query" + description: "Optional, org key applied to the attributes." + required: false + type: "string" + x-exportParamName: "Org" + x-optionalDataType: "String" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminProjectDomainAttributesGetResponse" + delete: + tags: + - "AdminService" + summary: "Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration`\ + \ for a project and domain." + operationId: "DeleteProjectDomainAttributes" + parameters: + - name: "project" + in: "path" + description: "Unique project id which this set of attributes references.\n\ + +required" + required: true + type: "string" + x-exportParamName: "Project" + - name: "domain" + in: "path" + description: "Unique domain id which this set of attributes references.\n\ + +required" + required: true + type: "string" + x-exportParamName: "Domain" + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/adminProjectDomainAttributesDeleteRequest" + x-exportParamName: "Body" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminProjectDomainAttributesDeleteResponse" + /api/v1/projects: + get: + tags: + - "AdminService" + summary: "Fetches a list of :ref:`ref_flyteidl.admin.Project`" + operationId: "ListProjects" + parameters: + - name: "limit" + in: "query" + description: "Indicates the number of projects to be returned.\n+required." + required: false + type: "integer" + format: "int64" + x-exportParamName: "Limit" + x-optionalDataType: "Int64" + - name: "token" + in: "query" + description: "In the case of multiple pages of results, this server-provided\ + \ token can be used to fetch the next page\nin a query.\n+optional." + required: false + type: "string" + x-exportParamName: "Token" + x-optionalDataType: "String" + - name: "filters" + in: "query" + description: "Indicates a list of filters passed as string.\nMore info on\ + \ constructing filters : \n+optional." + required: false + type: "string" + x-exportParamName: "Filters" + x-optionalDataType: "String" + - name: "sort_by.key" + in: "query" + description: "Indicates an attribute to sort the response values.\n+required." + required: false + type: "string" + x-exportParamName: "SortByKey" + x-optionalDataType: "String" + - name: "sort_by.direction" + in: "query" + description: "Indicates the direction to apply sort key for response values.\n\ + +optional.\n\n - DESCENDING: By default, fields are sorted in descending\ + \ order." + required: false + type: "string" + default: "DESCENDING" + enum: + - "DESCENDING" + - "ASCENDING" + x-exportParamName: "SortByDirection" + x-optionalDataType: "String" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminProjects" + post: + tags: + - "AdminService" + summary: "Registers a :ref:`ref_flyteidl.admin.Project` with the Flyte deployment." + operationId: "RegisterProject" + parameters: + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/adminProjectRegisterRequest" + x-exportParamName: "Body" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminProjectRegisterResponse" + /api/v1/projects/org/{org}/{id}: + put: + tags: + - "AdminService" + summary: "Updates an existing :ref:`ref_flyteidl.admin.Project`\nflyteidl.admin.Project\ + \ should be passed but the domains property should be empty;\nit will be ignored\ + \ in the handler as domains cannot be updated via this API." + operationId: "UpdateProject2" + parameters: + - name: "org" + in: "path" + description: "Optional, org key applied to the resource." + required: true + type: "string" + x-exportParamName: "Org" + - name: "id" + in: "path" + description: "Globally unique project name." + required: true + type: "string" + x-exportParamName: "Id" + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/adminProject" + x-exportParamName: "Body" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminProjectUpdateResponse" + /api/v1/projects/{id}: + put: + tags: + - "AdminService" + summary: "Updates an existing :ref:`ref_flyteidl.admin.Project`\nflyteidl.admin.Project\ + \ should be passed but the domains property should be empty;\nit will be ignored\ + \ in the handler as domains cannot be updated via this API." + operationId: "UpdateProject" + parameters: + - name: "id" + in: "path" + description: "Globally unique project name." + required: true + type: "string" + x-exportParamName: "Id" + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/adminProject" + x-exportParamName: "Body" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminProjectUpdateResponse" + ? /api/v1/task_executions/org/{id.node_execution_id.execution_id.org}/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt} + : get: + tags: + - "AdminService" + summary: "Fetches a :ref:`ref_flyteidl.admin.TaskExecution`." + operationId: "GetTaskExecution2" + parameters: + - name: "id.node_execution_id.execution_id.org" + in: "path" + description: "Optional, org key applied to the resource." + required: true + type: "string" + x-exportParamName: "IdNodeExecutionIdExecutionIdOrg" + - name: "id.node_execution_id.execution_id.project" + in: "path" + description: "Name of the project the resource belongs to." + required: true + type: "string" + x-exportParamName: "IdNodeExecutionIdExecutionIdProject" + - name: "id.node_execution_id.execution_id.domain" + in: "path" + description: "Name of the domain the resource belongs to.\nA domain can be\ + \ considered as a subset within a specific project." + required: true + type: "string" + x-exportParamName: "IdNodeExecutionIdExecutionIdDomain" + - name: "id.node_execution_id.execution_id.name" + in: "path" + description: "User or system provided value for the resource." + required: true + type: "string" + x-exportParamName: "IdNodeExecutionIdExecutionIdName" + - name: "id.node_execution_id.node_id" + in: "path" + required: true + type: "string" + x-exportParamName: "IdNodeExecutionIdNodeId" + - name: "id.task_id.project" + in: "path" + description: "Name of the project the resource belongs to." + required: true + type: "string" + x-exportParamName: "IdTaskIdProject" + - name: "id.task_id.domain" + in: "path" + description: "Name of the domain the resource belongs to.\nA domain can be\ + \ considered as a subset within a specific project." + required: true + type: "string" + x-exportParamName: "IdTaskIdDomain" + - name: "id.task_id.name" + in: "path" + description: "User provided value for the resource." + required: true + type: "string" + x-exportParamName: "IdTaskIdName" + - name: "id.task_id.version" + in: "path" + description: "Specific version of the resource." + required: true + type: "string" + x-exportParamName: "IdTaskIdVersion" + - name: "id.retry_attempt" + in: "path" + required: true + type: "integer" + format: "int64" + x-exportParamName: "IdRetryAttempt" + - name: "id.task_id.resource_type" + in: "query" + description: "Identifies the specific type of resource that this identifier\ + \ corresponds to.\n\n - DATASET: A dataset represents an entity modeled\ + \ in Flyte DataCatalog. A Dataset is also a versioned entity and can be\ + \ a compilation of multiple individual objects.\nEventually all Catalog\ + \ objects should be modeled similar to Flyte Objects. The Dataset entities\ + \ makes it possible for the UI and CLI to act on the objects \nin a similar\ + \ manner to other Flyte objects" + required: false + type: "string" + default: "UNSPECIFIED" + enum: + - "UNSPECIFIED" + - "TASK" + - "WORKFLOW" + - "LAUNCH_PLAN" + - "DATASET" + x-exportParamName: "IdTaskIdResourceType" + x-optionalDataType: "String" + - name: "id.task_id.org" + in: "query" + description: "Optional, org key applied to the resource." + required: false + type: "string" + x-exportParamName: "IdTaskIdOrg" + x-optionalDataType: "String" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/flyteidladminTaskExecution" + ? /api/v1/task_executions/org/{node_execution_id.execution_id.org}/{node_execution_id.execution_id.project}/{node_execution_id.execution_id.domain}/{node_execution_id.execution_id.name}/{node_execution_id.node_id} + : get: + tags: + - "AdminService" + summary: "Fetches a list of :ref:`ref_flyteidl.admin.TaskExecution`." + operationId: "ListTaskExecutions2" + parameters: + - name: "node_execution_id.execution_id.org" + in: "path" + description: "Optional, org key applied to the resource." + required: true + type: "string" + x-exportParamName: "NodeExecutionIdExecutionIdOrg" + - name: "node_execution_id.execution_id.project" + in: "path" + description: "Name of the project the resource belongs to." + required: true + type: "string" + x-exportParamName: "NodeExecutionIdExecutionIdProject" + - name: "node_execution_id.execution_id.domain" + in: "path" + description: "Name of the domain the resource belongs to.\nA domain can be\ + \ considered as a subset within a specific project." + required: true + type: "string" + x-exportParamName: "NodeExecutionIdExecutionIdDomain" + - name: "node_execution_id.execution_id.name" + in: "path" + description: "User or system provided value for the resource." + required: true + type: "string" + x-exportParamName: "NodeExecutionIdExecutionIdName" + - name: "node_execution_id.node_id" + in: "path" + required: true + type: "string" + x-exportParamName: "NodeExecutionIdNodeId" + - name: "limit" + in: "query" + description: "Indicates the number of resources to be returned.\n+required." + required: false + type: "integer" + format: "int64" + x-exportParamName: "Limit" + x-optionalDataType: "Int64" + - name: "token" + in: "query" + description: "In the case of multiple pages of results, the server-provided\ + \ token can be used to fetch the next page\nin a query.\n+optional." + required: false + type: "string" + x-exportParamName: "Token" + x-optionalDataType: "String" + - name: "filters" + in: "query" + description: "Indicates a list of filters passed as string.\nMore info on\ + \ constructing filters : \n+optional." + required: false + type: "string" + x-exportParamName: "Filters" + x-optionalDataType: "String" + - name: "sort_by.key" + in: "query" + description: "Indicates an attribute to sort the response values.\n+required." + required: false + type: "string" + x-exportParamName: "SortByKey" + x-optionalDataType: "String" + - name: "sort_by.direction" + in: "query" + description: "Indicates the direction to apply sort key for response values.\n\ + +optional.\n\n - DESCENDING: By default, fields are sorted in descending\ + \ order." + required: false + type: "string" + default: "DESCENDING" + enum: + - "DESCENDING" + - "ASCENDING" + x-exportParamName: "SortByDirection" + x-optionalDataType: "String" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminTaskExecutionList" + ? /api/v1/task_executions/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt} + : get: + tags: + - "AdminService" + summary: "Fetches a :ref:`ref_flyteidl.admin.TaskExecution`." + operationId: "GetTaskExecution" + parameters: + - name: "id.node_execution_id.execution_id.project" + in: "path" + description: "Name of the project the resource belongs to." + required: true + type: "string" + x-exportParamName: "IdNodeExecutionIdExecutionIdProject" + - name: "id.node_execution_id.execution_id.domain" + in: "path" + description: "Name of the domain the resource belongs to.\nA domain can be\ + \ considered as a subset within a specific project." + required: true + type: "string" + x-exportParamName: "IdNodeExecutionIdExecutionIdDomain" + - name: "id.node_execution_id.execution_id.name" + in: "path" + description: "User or system provided value for the resource." + required: true + type: "string" + x-exportParamName: "IdNodeExecutionIdExecutionIdName" + - name: "id.node_execution_id.node_id" + in: "path" + required: true + type: "string" + x-exportParamName: "IdNodeExecutionIdNodeId" + - name: "id.task_id.project" + in: "path" + description: "Name of the project the resource belongs to." + required: true + type: "string" + x-exportParamName: "IdTaskIdProject" + - name: "id.task_id.domain" + in: "path" + description: "Name of the domain the resource belongs to.\nA domain can be\ + \ considered as a subset within a specific project." + required: true + type: "string" + x-exportParamName: "IdTaskIdDomain" + - name: "id.task_id.name" + in: "path" + description: "User provided value for the resource." + required: true + type: "string" + x-exportParamName: "IdTaskIdName" + - name: "id.task_id.version" + in: "path" + description: "Specific version of the resource." + required: true + type: "string" + x-exportParamName: "IdTaskIdVersion" + - name: "id.retry_attempt" + in: "path" + required: true + type: "integer" + format: "int64" + x-exportParamName: "IdRetryAttempt" + - name: "id.task_id.resource_type" + in: "query" + description: "Identifies the specific type of resource that this identifier\ + \ corresponds to.\n\n - DATASET: A dataset represents an entity modeled\ + \ in Flyte DataCatalog. A Dataset is also a versioned entity and can be\ + \ a compilation of multiple individual objects.\nEventually all Catalog\ + \ objects should be modeled similar to Flyte Objects. The Dataset entities\ + \ makes it possible for the UI and CLI to act on the objects \nin a similar\ + \ manner to other Flyte objects" + required: false + type: "string" + default: "UNSPECIFIED" + enum: + - "UNSPECIFIED" + - "TASK" + - "WORKFLOW" + - "LAUNCH_PLAN" + - "DATASET" + x-exportParamName: "IdTaskIdResourceType" + x-optionalDataType: "String" + - name: "id.task_id.org" + in: "query" + description: "Optional, org key applied to the resource." + required: false + type: "string" + x-exportParamName: "IdTaskIdOrg" + x-optionalDataType: "String" + - name: "id.node_execution_id.execution_id.org" + in: "query" + description: "Optional, org key applied to the resource." + required: false + type: "string" + x-exportParamName: "IdNodeExecutionIdExecutionIdOrg" + x-optionalDataType: "String" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/flyteidladminTaskExecution" + ? /api/v1/task_executions/{node_execution_id.execution_id.project}/{node_execution_id.execution_id.domain}/{node_execution_id.execution_id.name}/{node_execution_id.node_id} + : get: + tags: + - "AdminService" + summary: "Fetches a list of :ref:`ref_flyteidl.admin.TaskExecution`." + operationId: "ListTaskExecutions" + parameters: + - name: "node_execution_id.execution_id.project" + in: "path" + description: "Name of the project the resource belongs to." + required: true + type: "string" + x-exportParamName: "NodeExecutionIdExecutionIdProject" + - name: "node_execution_id.execution_id.domain" + in: "path" + description: "Name of the domain the resource belongs to.\nA domain can be\ + \ considered as a subset within a specific project." + required: true + type: "string" + x-exportParamName: "NodeExecutionIdExecutionIdDomain" + - name: "node_execution_id.execution_id.name" + in: "path" + description: "User or system provided value for the resource." + required: true + type: "string" + x-exportParamName: "NodeExecutionIdExecutionIdName" + - name: "node_execution_id.node_id" + in: "path" + required: true + type: "string" + x-exportParamName: "NodeExecutionIdNodeId" + - name: "node_execution_id.execution_id.org" + in: "query" + description: "Optional, org key applied to the resource." + required: false + type: "string" + x-exportParamName: "NodeExecutionIdExecutionIdOrg" + x-optionalDataType: "String" + - name: "limit" + in: "query" + description: "Indicates the number of resources to be returned.\n+required." + required: false + type: "integer" + format: "int64" + x-exportParamName: "Limit" + x-optionalDataType: "Int64" + - name: "token" + in: "query" + description: "In the case of multiple pages of results, the server-provided\ + \ token can be used to fetch the next page\nin a query.\n+optional." + required: false + type: "string" + x-exportParamName: "Token" + x-optionalDataType: "String" + - name: "filters" + in: "query" + description: "Indicates a list of filters passed as string.\nMore info on\ + \ constructing filters : \n+optional." + required: false + type: "string" + x-exportParamName: "Filters" + x-optionalDataType: "String" + - name: "sort_by.key" + in: "query" + description: "Indicates an attribute to sort the response values.\n+required." + required: false + type: "string" + x-exportParamName: "SortByKey" + x-optionalDataType: "String" + - name: "sort_by.direction" + in: "query" + description: "Indicates the direction to apply sort key for response values.\n\ + +optional.\n\n - DESCENDING: By default, fields are sorted in descending\ + \ order." + required: false + type: "string" + default: "DESCENDING" + enum: + - "DESCENDING" + - "ASCENDING" + x-exportParamName: "SortByDirection" + x-optionalDataType: "String" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminTaskExecutionList" + /api/v1/task_ids/{project}/{domain}: + get: + tags: + - "AdminService" + summary: "Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of\ + \ task objects." + operationId: "ListTaskIds" + parameters: + - name: "project" + in: "path" + description: "Name of the project that contains the identifiers.\n+required" + required: true + type: "string" + x-exportParamName: "Project" + - name: "domain" + in: "path" + description: "Name of the domain the identifiers belongs to within the project.\n\ + +required" + required: true + type: "string" + x-exportParamName: "Domain" + - name: "limit" + in: "query" + description: "Indicates the number of resources to be returned.\n+required." + required: false + type: "integer" + format: "int64" + x-exportParamName: "Limit" + x-optionalDataType: "Int64" + - name: "token" + in: "query" + description: "In the case of multiple pages of results, the server-provided\ + \ token can be used to fetch the next page\nin a query.\n+optional." + required: false + type: "string" + x-exportParamName: "Token" + x-optionalDataType: "String" + - name: "sort_by.key" + in: "query" + description: "Indicates an attribute to sort the response values.\n+required." + required: false + type: "string" + x-exportParamName: "SortByKey" + x-optionalDataType: "String" + - name: "sort_by.direction" + in: "query" + description: "Indicates the direction to apply sort key for response values.\n\ + +optional.\n\n - DESCENDING: By default, fields are sorted in descending\ + \ order." + required: false + type: "string" + default: "DESCENDING" + enum: + - "DESCENDING" + - "ASCENDING" + x-exportParamName: "SortByDirection" + x-optionalDataType: "String" + - name: "filters" + in: "query" + description: "Indicates a list of filters passed as string.\n+optional." + required: false + type: "string" + x-exportParamName: "Filters" + x-optionalDataType: "String" + - name: "org" + in: "query" + description: "Optional, org key applied to the resource." + required: false + type: "string" + x-exportParamName: "Org" + x-optionalDataType: "String" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminNamedEntityIdentifierList" + /api/v1/tasks: + post: + tags: + - "AdminService" + summary: "Create and upload a :ref:`ref_flyteidl.admin.Task` definition" + operationId: "CreateTask" + parameters: + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/flyteidladminTaskCreateRequest" + x-exportParamName: "Body" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/flyteidladminTaskCreateResponse" + /api/v1/tasks/org/{id.org}/{id.project}/{id.domain}: + get: + tags: + - "AdminService" + summary: "Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions." + operationId: "ListTasks4" + parameters: + - name: "id.org" + in: "path" + description: "Optional, org key applied to the resource." + required: true + type: "string" + x-exportParamName: "IdOrg" + - name: "id.project" + in: "path" + description: "Name of the project the resource belongs to." + required: true + type: "string" + x-exportParamName: "IdProject" + - name: "id.domain" + in: "path" + description: "Name of the domain the resource belongs to.\nA domain can be\ + \ considered as a subset within a specific project." + required: true + type: "string" + x-exportParamName: "IdDomain" + - name: "id.name" + in: "query" + description: "User provided value for the resource.\nThe combination of project\ + \ + domain + name uniquely identifies the resource.\n+optional - in certain\ + \ contexts - like 'List API', 'Launch plans'." + required: false + type: "string" + x-exportParamName: "IdName" + x-optionalDataType: "String" + - name: "limit" + in: "query" + description: "Indicates the number of resources to be returned.\n+required." + required: false + type: "integer" + format: "int64" + x-exportParamName: "Limit" + x-optionalDataType: "Int64" + - name: "token" + in: "query" + description: "In the case of multiple pages of results, this server-provided\ + \ token can be used to fetch the next page\nin a query.\n+optional." + required: false + type: "string" + x-exportParamName: "Token" + x-optionalDataType: "String" + - name: "filters" + in: "query" + description: "Indicates a list of filters passed as string.\nMore info on\ + \ constructing filters : \n+optional." + required: false + type: "string" + x-exportParamName: "Filters" + x-optionalDataType: "String" + - name: "sort_by.key" + in: "query" + description: "Indicates an attribute to sort the response values.\n+required." + required: false + type: "string" + x-exportParamName: "SortByKey" + x-optionalDataType: "String" + - name: "sort_by.direction" + in: "query" + description: "Indicates the direction to apply sort key for response values.\n\ + +optional.\n\n - DESCENDING: By default, fields are sorted in descending\ + \ order." + required: false + type: "string" + default: "DESCENDING" + enum: + - "DESCENDING" + - "ASCENDING" + x-exportParamName: "SortByDirection" + x-optionalDataType: "String" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminTaskList" + /api/v1/tasks/org/{id.org}/{id.project}/{id.domain}/{id.name}: + get: + tags: + - "AdminService" + summary: "Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions." + operationId: "ListTasks2" + parameters: + - name: "id.org" + in: "path" + description: "Optional, org key applied to the resource." + required: true + type: "string" + x-exportParamName: "IdOrg" + - name: "id.project" + in: "path" + description: "Name of the project the resource belongs to." + required: true + type: "string" + x-exportParamName: "IdProject" + - name: "id.domain" + in: "path" + description: "Name of the domain the resource belongs to.\nA domain can be\ + \ considered as a subset within a specific project." + required: true + type: "string" + x-exportParamName: "IdDomain" + - name: "id.name" + in: "path" + description: "User provided value for the resource.\nThe combination of project\ + \ + domain + name uniquely identifies the resource.\n+optional - in certain\ + \ contexts - like 'List API', 'Launch plans'" + required: true + type: "string" + x-exportParamName: "IdName" + - name: "limit" + in: "query" + description: "Indicates the number of resources to be returned.\n+required." + required: false + type: "integer" + format: "int64" + x-exportParamName: "Limit" + x-optionalDataType: "Int64" + - name: "token" + in: "query" + description: "In the case of multiple pages of results, this server-provided\ + \ token can be used to fetch the next page\nin a query.\n+optional." + required: false + type: "string" + x-exportParamName: "Token" + x-optionalDataType: "String" + - name: "filters" + in: "query" + description: "Indicates a list of filters passed as string.\nMore info on\ + \ constructing filters : \n+optional." + required: false + type: "string" + x-exportParamName: "Filters" + x-optionalDataType: "String" + - name: "sort_by.key" + in: "query" + description: "Indicates an attribute to sort the response values.\n+required." + required: false + type: "string" + x-exportParamName: "SortByKey" + x-optionalDataType: "String" + - name: "sort_by.direction" + in: "query" + description: "Indicates the direction to apply sort key for response values.\n\ + +optional.\n\n - DESCENDING: By default, fields are sorted in descending\ + \ order." + required: false + type: "string" + default: "DESCENDING" + enum: + - "DESCENDING" + - "ASCENDING" + x-exportParamName: "SortByDirection" + x-optionalDataType: "String" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminTaskList" + /api/v1/tasks/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version}: + get: + tags: + - "AdminService" + summary: "Fetch a :ref:`ref_flyteidl.admin.Task` definition." + operationId: "GetTask2" + parameters: + - name: "id.org" + in: "path" + description: "Optional, org key applied to the resource." + required: true + type: "string" + x-exportParamName: "IdOrg" + - name: "id.project" + in: "path" + description: "Name of the project the resource belongs to." + required: true + type: "string" + x-exportParamName: "IdProject" + - name: "id.domain" + in: "path" + description: "Name of the domain the resource belongs to.\nA domain can be\ + \ considered as a subset within a specific project." + required: true + type: "string" + x-exportParamName: "IdDomain" + - name: "id.name" + in: "path" + description: "User provided value for the resource." + required: true + type: "string" + x-exportParamName: "IdName" + - name: "id.version" + in: "path" + description: "Specific version of the resource." + required: true + type: "string" + x-exportParamName: "IdVersion" + - name: "id.resource_type" + in: "query" + description: "Identifies the specific type of resource that this identifier\ + \ corresponds to.\n\n - DATASET: A dataset represents an entity modeled\ + \ in Flyte DataCatalog. A Dataset is also a versioned entity and can be\ + \ a compilation of multiple individual objects.\nEventually all Catalog\ + \ objects should be modeled similar to Flyte Objects. The Dataset entities\ + \ makes it possible for the UI and CLI to act on the objects \nin a similar\ + \ manner to other Flyte objects" + required: false + type: "string" + default: "UNSPECIFIED" + enum: + - "UNSPECIFIED" + - "TASK" + - "WORKFLOW" + - "LAUNCH_PLAN" + - "DATASET" + x-exportParamName: "IdResourceType" + x-optionalDataType: "String" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminTask" + /api/v1/tasks/org/{org}/{project}/{domain}: + get: + tags: + - "AdminService" + summary: "Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of\ + \ task objects." + operationId: "ListTaskIds2" + parameters: + - name: "org" + in: "path" + description: "Optional, org key applied to the resource." + required: true + type: "string" + x-exportParamName: "Org" + - name: "project" + in: "path" + description: "Name of the project that contains the identifiers.\n+required" + required: true + type: "string" + x-exportParamName: "Project" + - name: "domain" + in: "path" + description: "Name of the domain the identifiers belongs to within the project.\n\ + +required" + required: true + type: "string" + x-exportParamName: "Domain" + - name: "limit" + in: "query" + description: "Indicates the number of resources to be returned.\n+required." + required: false + type: "integer" + format: "int64" + x-exportParamName: "Limit" + x-optionalDataType: "Int64" + - name: "token" + in: "query" + description: "In the case of multiple pages of results, the server-provided\ + \ token can be used to fetch the next page\nin a query.\n+optional." + required: false + type: "string" + x-exportParamName: "Token" + x-optionalDataType: "String" + - name: "sort_by.key" + in: "query" + description: "Indicates an attribute to sort the response values.\n+required." + required: false + type: "string" + x-exportParamName: "SortByKey" + x-optionalDataType: "String" + - name: "sort_by.direction" + in: "query" + description: "Indicates the direction to apply sort key for response values.\n\ + +optional.\n\n - DESCENDING: By default, fields are sorted in descending\ + \ order." + required: false + type: "string" + default: "DESCENDING" + enum: + - "DESCENDING" + - "ASCENDING" + x-exportParamName: "SortByDirection" + x-optionalDataType: "String" + - name: "filters" + in: "query" + description: "Indicates a list of filters passed as string.\n+optional." + required: false + type: "string" + x-exportParamName: "Filters" + x-optionalDataType: "String" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminNamedEntityIdentifierList" + /api/v1/tasks/{id.project}/{id.domain}: + get: + tags: + - "AdminService" + summary: "Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions." + operationId: "ListTasks3" + parameters: + - name: "id.project" + in: "path" + description: "Name of the project the resource belongs to." + required: true + type: "string" + x-exportParamName: "IdProject" + - name: "id.domain" + in: "path" + description: "Name of the domain the resource belongs to.\nA domain can be\ + \ considered as a subset within a specific project." + required: true + type: "string" + x-exportParamName: "IdDomain" + - name: "id.name" + in: "query" + description: "User provided value for the resource.\nThe combination of project\ + \ + domain + name uniquely identifies the resource.\n+optional - in certain\ + \ contexts - like 'List API', 'Launch plans'." + required: false + type: "string" + x-exportParamName: "IdName" + x-optionalDataType: "String" + - name: "id.org" + in: "query" + description: "Optional, org key applied to the resource." + required: false + type: "string" + x-exportParamName: "IdOrg" + x-optionalDataType: "String" + - name: "limit" + in: "query" + description: "Indicates the number of resources to be returned.\n+required." + required: false + type: "integer" + format: "int64" + x-exportParamName: "Limit" + x-optionalDataType: "Int64" + - name: "token" + in: "query" + description: "In the case of multiple pages of results, this server-provided\ + \ token can be used to fetch the next page\nin a query.\n+optional." + required: false + type: "string" + x-exportParamName: "Token" + x-optionalDataType: "String" + - name: "filters" + in: "query" + description: "Indicates a list of filters passed as string.\nMore info on\ + \ constructing filters : \n+optional." + required: false + type: "string" + x-exportParamName: "Filters" + x-optionalDataType: "String" + - name: "sort_by.key" + in: "query" + description: "Indicates an attribute to sort the response values.\n+required." + required: false + type: "string" + x-exportParamName: "SortByKey" + x-optionalDataType: "String" + - name: "sort_by.direction" + in: "query" + description: "Indicates the direction to apply sort key for response values.\n\ + +optional.\n\n - DESCENDING: By default, fields are sorted in descending\ + \ order." + required: false + type: "string" + default: "DESCENDING" + enum: + - "DESCENDING" + - "ASCENDING" + x-exportParamName: "SortByDirection" + x-optionalDataType: "String" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminTaskList" + /api/v1/tasks/{id.project}/{id.domain}/{id.name}: + get: + tags: + - "AdminService" + summary: "Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions." + operationId: "ListTasks" + parameters: + - name: "id.project" + in: "path" + description: "Name of the project the resource belongs to." + required: true + type: "string" + x-exportParamName: "IdProject" + - name: "id.domain" + in: "path" + description: "Name of the domain the resource belongs to.\nA domain can be\ + \ considered as a subset within a specific project." + required: true + type: "string" + x-exportParamName: "IdDomain" + - name: "id.name" + in: "path" + description: "User provided value for the resource.\nThe combination of project\ + \ + domain + name uniquely identifies the resource.\n+optional - in certain\ + \ contexts - like 'List API', 'Launch plans'" + required: true + type: "string" + x-exportParamName: "IdName" + - name: "id.org" + in: "query" + description: "Optional, org key applied to the resource." + required: false + type: "string" + x-exportParamName: "IdOrg" + x-optionalDataType: "String" + - name: "limit" + in: "query" + description: "Indicates the number of resources to be returned.\n+required." + required: false + type: "integer" + format: "int64" + x-exportParamName: "Limit" + x-optionalDataType: "Int64" + - name: "token" + in: "query" + description: "In the case of multiple pages of results, this server-provided\ + \ token can be used to fetch the next page\nin a query.\n+optional." + required: false + type: "string" + x-exportParamName: "Token" + x-optionalDataType: "String" + - name: "filters" + in: "query" + description: "Indicates a list of filters passed as string.\nMore info on\ + \ constructing filters : \n+optional." + required: false + type: "string" + x-exportParamName: "Filters" + x-optionalDataType: "String" + - name: "sort_by.key" + in: "query" + description: "Indicates an attribute to sort the response values.\n+required." + required: false + type: "string" + x-exportParamName: "SortByKey" + x-optionalDataType: "String" + - name: "sort_by.direction" + in: "query" + description: "Indicates the direction to apply sort key for response values.\n\ + +optional.\n\n - DESCENDING: By default, fields are sorted in descending\ + \ order." + required: false + type: "string" + default: "DESCENDING" + enum: + - "DESCENDING" + - "ASCENDING" + x-exportParamName: "SortByDirection" + x-optionalDataType: "String" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminTaskList" + /api/v1/tasks/{id.project}/{id.domain}/{id.name}/{id.version}: + get: + tags: + - "AdminService" + summary: "Fetch a :ref:`ref_flyteidl.admin.Task` definition." + operationId: "GetTask" + parameters: + - name: "id.project" + in: "path" + description: "Name of the project the resource belongs to." + required: true + type: "string" + x-exportParamName: "IdProject" + - name: "id.domain" + in: "path" + description: "Name of the domain the resource belongs to.\nA domain can be\ + \ considered as a subset within a specific project." + required: true + type: "string" + x-exportParamName: "IdDomain" + - name: "id.name" + in: "path" + description: "User provided value for the resource." + required: true + type: "string" + x-exportParamName: "IdName" + - name: "id.version" + in: "path" + description: "Specific version of the resource." + required: true + type: "string" + x-exportParamName: "IdVersion" + - name: "id.resource_type" + in: "query" + description: "Identifies the specific type of resource that this identifier\ + \ corresponds to.\n\n - DATASET: A dataset represents an entity modeled\ + \ in Flyte DataCatalog. A Dataset is also a versioned entity and can be\ + \ a compilation of multiple individual objects.\nEventually all Catalog\ + \ objects should be modeled similar to Flyte Objects. The Dataset entities\ + \ makes it possible for the UI and CLI to act on the objects \nin a similar\ + \ manner to other Flyte objects" + required: false + type: "string" + default: "UNSPECIFIED" enum: - - "DESCENDING" - - "ASCENDING" - x-exportParamName: "SortByDirection" + - "UNSPECIFIED" + - "TASK" + - "WORKFLOW" + - "LAUNCH_PLAN" + - "DATASET" + x-exportParamName: "IdResourceType" x-optionalDataType: "String" - - name: "unique_parent_id" + - name: "id.org" in: "query" - description: "Unique identifier of the parent node in the execution\n+optional." + description: "Optional, org key applied to the resource." required: false type: "string" - x-exportParamName: "UniqueParentId" + x-exportParamName: "IdOrg" x-optionalDataType: "String" responses: 200: description: "A successful response." schema: - $ref: "#/definitions/adminNodeExecutionList" - /api/v1/project_attributes/{attributes.project}: + $ref: "#/definitions/adminTask" + /api/v1/version: + get: + tags: + - "AdminService" + operationId: "GetVersion" + parameters: [] + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminGetVersionResponse" + /api/v1/workflow_attributes/org/{attributes.org}/{attributes.project}/{attributes.domain}/{attributes.workflow}: put: tags: - "AdminService" summary: "Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration`\ - \ at the project level" - operationId: "UpdateProjectAttributes" + \ for a project, domain and workflow." + operationId: "UpdateWorkflowAttributes2" parameters: + - name: "attributes.org" + in: "path" + description: "Optional, org key applied to the attributes." + required: true + type: "string" + x-exportParamName: "AttributesOrg" - name: "attributes.project" in: "path" description: "Unique project id for which this set of attributes will be applied." required: true type: "string" x-exportParamName: "AttributesProject" + - name: "attributes.domain" + in: "path" + description: "Unique domain id for which this set of attributes will be applied." + required: true + type: "string" + x-exportParamName: "AttributesDomain" + - name: "attributes.workflow" + in: "path" + description: "Workflow name for which this set of attributes will be applied." + required: true + type: "string" + x-exportParamName: "AttributesWorkflow" - in: "body" name: "body" required: true schema: - $ref: "#/definitions/adminProjectAttributesUpdateRequest" + $ref: "#/definitions/adminWorkflowAttributesUpdateRequest" x-exportParamName: "Body" responses: 200: description: "A successful response." schema: - $ref: "#/definitions/adminProjectAttributesUpdateResponse" - /api/v1/project_attributes/{project}: + $ref: "#/definitions/adminWorkflowAttributesUpdateResponse" + /api/v1/workflow_attributes/org/{org}/{project}/{domain}/{workflow}: get: tags: - "AdminService" summary: "Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration`\ - \ for a project and domain." - operationId: "GetProjectAttributes" + \ for a project, domain and workflow." + operationId: "GetWorkflowAttributes2" parameters: + - name: "org" + in: "path" + description: "Optional, org key applied to the attributes." + required: true + type: "string" + x-exportParamName: "Org" - name: "project" in: "path" description: "Unique project id which this set of attributes references.\n\ @@ -1671,6 +5011,19 @@ paths: required: true type: "string" x-exportParamName: "Project" + - name: "domain" + in: "path" + description: "Unique domain id which this set of attributes references.\n\ + +required" + required: true + type: "string" + x-exportParamName: "Domain" + - name: "workflow" + in: "path" + description: "Workflow name which this set of attributes references.\n+required" + required: true + type: "string" + x-exportParamName: "Workflow" - name: "resource_type" in: "query" description: "Which type of matchable attributes to return.\n+required.\n\n\ @@ -1703,14 +5056,20 @@ paths: 200: description: "A successful response." schema: - $ref: "#/definitions/adminProjectAttributesGetResponse" + $ref: "#/definitions/adminWorkflowAttributesGetResponse" delete: tags: - "AdminService" summary: "Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration`\ - \ for a project and domain." - operationId: "DeleteProjectAttributes" + \ for a project, domain and workflow." + operationId: "DeleteWorkflowAttributes2" parameters: + - name: "org" + in: "path" + description: "Optional, org key applied to the attributes." + required: true + type: "string" + x-exportParamName: "Org" - name: "project" in: "path" description: "Unique project id which this set of attributes references.\n\ @@ -1718,24 +5077,37 @@ paths: required: true type: "string" x-exportParamName: "Project" + - name: "domain" + in: "path" + description: "Unique domain id which this set of attributes references.\n\ + +required" + required: true + type: "string" + x-exportParamName: "Domain" + - name: "workflow" + in: "path" + description: "Workflow name which this set of attributes references.\n+required" + required: true + type: "string" + x-exportParamName: "Workflow" - in: "body" name: "body" required: true schema: - $ref: "#/definitions/adminProjectAttributesDeleteRequest" + $ref: "#/definitions/adminWorkflowAttributesDeleteRequest" x-exportParamName: "Body" responses: 200: description: "A successful response." schema: - $ref: "#/definitions/adminProjectAttributesDeleteResponse" - /api/v1/project_domain_attributes/{attributes.project}/{attributes.domain}: + $ref: "#/definitions/adminWorkflowAttributesDeleteResponse" + /api/v1/workflow_attributes/{attributes.project}/{attributes.domain}/{attributes.workflow}: put: tags: - "AdminService" summary: "Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration`\ - \ for a project and domain." - operationId: "UpdateProjectDomainAttributes" + \ for a project, domain and workflow." + operationId: "UpdateWorkflowAttributes" parameters: - name: "attributes.project" in: "path" @@ -1749,24 +5121,30 @@ paths: required: true type: "string" x-exportParamName: "AttributesDomain" + - name: "attributes.workflow" + in: "path" + description: "Workflow name for which this set of attributes will be applied." + required: true + type: "string" + x-exportParamName: "AttributesWorkflow" - in: "body" name: "body" required: true schema: - $ref: "#/definitions/adminProjectDomainAttributesUpdateRequest" + $ref: "#/definitions/adminWorkflowAttributesUpdateRequest" x-exportParamName: "Body" responses: 200: description: "A successful response." schema: - $ref: "#/definitions/adminProjectDomainAttributesUpdateResponse" - /api/v1/project_domain_attributes/{project}/{domain}: + $ref: "#/definitions/adminWorkflowAttributesUpdateResponse" + /api/v1/workflow_attributes/{project}/{domain}/{workflow}: get: tags: - "AdminService" summary: "Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration`\ - \ for a project and domain." - operationId: "GetProjectDomainAttributes" + \ for a project, domain and workflow." + operationId: "GetWorkflowAttributes" parameters: - name: "project" in: "path" @@ -1782,6 +5160,12 @@ paths: required: true type: "string" x-exportParamName: "Domain" + - name: "workflow" + in: "path" + description: "Workflow name which this set of attributes references.\n+required" + required: true + type: "string" + x-exportParamName: "Workflow" - name: "resource_type" in: "query" description: "Which type of matchable attributes to return.\n+required.\n\n\ @@ -1810,17 +5194,24 @@ paths: - "CLUSTER_ASSIGNMENT" x-exportParamName: "ResourceType" x-optionalDataType: "String" + - name: "org" + in: "query" + description: "Optional, org key applied to the attributes." + required: false + type: "string" + x-exportParamName: "Org" + x-optionalDataType: "String" responses: 200: description: "A successful response." schema: - $ref: "#/definitions/adminProjectDomainAttributesGetResponse" + $ref: "#/definitions/adminWorkflowAttributesGetResponse" delete: tags: - "AdminService" summary: "Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration`\ - \ for a project and domain." - operationId: "DeleteProjectDomainAttributes" + \ for a project, domain and workflow." + operationId: "DeleteWorkflowAttributes" parameters: - name: "project" in: "path" @@ -1836,290 +5227,30 @@ paths: required: true type: "string" x-exportParamName: "Domain" - - in: "body" - name: "body" - required: true - schema: - $ref: "#/definitions/adminProjectDomainAttributesDeleteRequest" - x-exportParamName: "Body" - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/adminProjectDomainAttributesDeleteResponse" - /api/v1/projects: - get: - tags: - - "AdminService" - summary: "Fetches a list of :ref:`ref_flyteidl.admin.Project`" - operationId: "ListProjects" - parameters: - - name: "limit" - in: "query" - description: "Indicates the number of projects to be returned.\n+required." - required: false - type: "integer" - format: "int64" - x-exportParamName: "Limit" - x-optionalDataType: "Int64" - - name: "token" - in: "query" - description: "In the case of multiple pages of results, this server-provided\ - \ token can be used to fetch the next page\nin a query.\n+optional." - required: false - type: "string" - x-exportParamName: "Token" - x-optionalDataType: "String" - - name: "filters" - in: "query" - description: "Indicates a list of filters passed as string.\nMore info on\ - \ constructing filters : \n+optional." - required: false - type: "string" - x-exportParamName: "Filters" - x-optionalDataType: "String" - - name: "sort_by.key" - in: "query" - description: "Indicates an attribute to sort the response values.\n+required." - required: false - type: "string" - x-exportParamName: "SortByKey" - x-optionalDataType: "String" - - name: "sort_by.direction" - in: "query" - description: "Indicates the direction to apply sort key for response values.\n\ - +optional.\n\n - DESCENDING: By default, fields are sorted in descending\ - \ order." - required: false - type: "string" - default: "DESCENDING" - enum: - - "DESCENDING" - - "ASCENDING" - x-exportParamName: "SortByDirection" - x-optionalDataType: "String" - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/adminProjects" - post: - tags: - - "AdminService" - summary: "Registers a :ref:`ref_flyteidl.admin.Project` with the Flyte deployment." - operationId: "RegisterProject" - parameters: - - in: "body" - name: "body" - required: true - schema: - $ref: "#/definitions/adminProjectRegisterRequest" - x-exportParamName: "Body" - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/adminProjectRegisterResponse" - /api/v1/projects/{id}: - put: - tags: - - "AdminService" - summary: "Updates an existing :ref:`ref_flyteidl.admin.Project` \nflyteidl.admin.Project\ - \ should be passed but the domains property should be empty;\nit will be ignored\ - \ in the handler as domains cannot be updated via this API." - operationId: "UpdateProject" - parameters: - - name: "id" + - name: "workflow" in: "path" - description: "Globally unique project name." + description: "Workflow name which this set of attributes references.\n+required" required: true type: "string" - x-exportParamName: "Id" + x-exportParamName: "Workflow" - in: "body" name: "body" required: true schema: - $ref: "#/definitions/adminProject" + $ref: "#/definitions/adminWorkflowAttributesDeleteRequest" x-exportParamName: "Body" responses: 200: description: "A successful response." schema: - $ref: "#/definitions/adminProjectUpdateResponse" - ? /api/v1/task_executions/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt} - : get: - tags: - - "AdminService" - summary: "Fetches a :ref:`ref_flyteidl.admin.TaskExecution`." - operationId: "GetTaskExecution" - parameters: - - name: "id.node_execution_id.execution_id.project" - in: "path" - description: "Name of the project the resource belongs to." - required: true - type: "string" - x-exportParamName: "IdNodeExecutionIdExecutionIdProject" - - name: "id.node_execution_id.execution_id.domain" - in: "path" - description: "Name of the domain the resource belongs to.\nA domain can be\ - \ considered as a subset within a specific project." - required: true - type: "string" - x-exportParamName: "IdNodeExecutionIdExecutionIdDomain" - - name: "id.node_execution_id.execution_id.name" - in: "path" - description: "User or system provided value for the resource." - required: true - type: "string" - x-exportParamName: "IdNodeExecutionIdExecutionIdName" - - name: "id.node_execution_id.node_id" - in: "path" - required: true - type: "string" - x-exportParamName: "IdNodeExecutionIdNodeId" - - name: "id.task_id.project" - in: "path" - description: "Name of the project the resource belongs to." - required: true - type: "string" - x-exportParamName: "IdTaskIdProject" - - name: "id.task_id.domain" - in: "path" - description: "Name of the domain the resource belongs to.\nA domain can be\ - \ considered as a subset within a specific project." - required: true - type: "string" - x-exportParamName: "IdTaskIdDomain" - - name: "id.task_id.name" - in: "path" - description: "User provided value for the resource." - required: true - type: "string" - x-exportParamName: "IdTaskIdName" - - name: "id.task_id.version" - in: "path" - description: "Specific version of the resource." - required: true - type: "string" - x-exportParamName: "IdTaskIdVersion" - - name: "id.retry_attempt" - in: "path" - required: true - type: "integer" - format: "int64" - x-exportParamName: "IdRetryAttempt" - - name: "id.task_id.resource_type" - in: "query" - description: "Identifies the specific type of resource that this identifier\ - \ corresponds to.\n\n - DATASET: A dataset represents an entity modeled\ - \ in Flyte DataCatalog. A Dataset is also a versioned entity and can be\ - \ a compilation of multiple individual objects.\nEventually all Catalog\ - \ objects should be modeled similar to Flyte Objects. The Dataset entities\ - \ makes it possible for the UI and CLI to act on the objects \nin a similar\ - \ manner to other Flyte objects" - required: false - type: "string" - default: "UNSPECIFIED" - enum: - - "UNSPECIFIED" - - "TASK" - - "WORKFLOW" - - "LAUNCH_PLAN" - - "DATASET" - x-exportParamName: "IdTaskIdResourceType" - x-optionalDataType: "String" - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/flyteidladminTaskExecution" - ? /api/v1/task_executions/{node_execution_id.execution_id.project}/{node_execution_id.execution_id.domain}/{node_execution_id.execution_id.name}/{node_execution_id.node_id} - : get: - tags: - - "AdminService" - summary: "Fetches a list of :ref:`ref_flyteidl.admin.TaskExecution`." - operationId: "ListTaskExecutions" - parameters: - - name: "node_execution_id.execution_id.project" - in: "path" - description: "Name of the project the resource belongs to." - required: true - type: "string" - x-exportParamName: "NodeExecutionIdExecutionIdProject" - - name: "node_execution_id.execution_id.domain" - in: "path" - description: "Name of the domain the resource belongs to.\nA domain can be\ - \ considered as a subset within a specific project." - required: true - type: "string" - x-exportParamName: "NodeExecutionIdExecutionIdDomain" - - name: "node_execution_id.execution_id.name" - in: "path" - description: "User or system provided value for the resource." - required: true - type: "string" - x-exportParamName: "NodeExecutionIdExecutionIdName" - - name: "node_execution_id.node_id" - in: "path" - required: true - type: "string" - x-exportParamName: "NodeExecutionIdNodeId" - - name: "limit" - in: "query" - description: "Indicates the number of resources to be returned.\n+required." - required: false - type: "integer" - format: "int64" - x-exportParamName: "Limit" - x-optionalDataType: "Int64" - - name: "token" - in: "query" - description: "In the case of multiple pages of results, the server-provided\ - \ token can be used to fetch the next page\nin a query.\n+optional." - required: false - type: "string" - x-exportParamName: "Token" - x-optionalDataType: "String" - - name: "filters" - in: "query" - description: "Indicates a list of filters passed as string.\nMore info on\ - \ constructing filters : \n+optional." - required: false - type: "string" - x-exportParamName: "Filters" - x-optionalDataType: "String" - - name: "sort_by.key" - in: "query" - description: "Indicates an attribute to sort the response values.\n+required." - required: false - type: "string" - x-exportParamName: "SortByKey" - x-optionalDataType: "String" - - name: "sort_by.direction" - in: "query" - description: "Indicates the direction to apply sort key for response values.\n\ - +optional.\n\n - DESCENDING: By default, fields are sorted in descending\ - \ order." - required: false - type: "string" - default: "DESCENDING" - enum: - - "DESCENDING" - - "ASCENDING" - x-exportParamName: "SortByDirection" - x-optionalDataType: "String" - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/adminTaskExecutionList" - /api/v1/task_ids/{project}/{domain}: + $ref: "#/definitions/adminWorkflowAttributesDeleteResponse" + /api/v1/workflow_ids/{project}/{domain}: get: tags: - "AdminService" summary: "Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of\ - \ task objects." - operationId: "ListTaskIds" + \ workflow objects." + operationId: "ListWorkflowIds" parameters: - name: "project" in: "path" @@ -2177,36 +5308,49 @@ paths: type: "string" x-exportParamName: "Filters" x-optionalDataType: "String" + - name: "org" + in: "query" + description: "Optional, org key applied to the resource." + required: false + type: "string" + x-exportParamName: "Org" + x-optionalDataType: "String" responses: 200: description: "A successful response." schema: $ref: "#/definitions/adminNamedEntityIdentifierList" - /api/v1/tasks: + /api/v1/workflows: post: tags: - "AdminService" - summary: "Create and upload a :ref:`ref_flyteidl.admin.Task` definition" - operationId: "CreateTask" + summary: "Create and upload a :ref:`ref_flyteidl.admin.Workflow` definition" + operationId: "CreateWorkflow" parameters: - in: "body" name: "body" required: true schema: - $ref: "#/definitions/flyteidladminTaskCreateRequest" + $ref: "#/definitions/adminWorkflowCreateRequest" x-exportParamName: "Body" responses: 200: description: "A successful response." schema: - $ref: "#/definitions/flyteidladminTaskCreateResponse" - /api/v1/tasks/{id.project}/{id.domain}: + $ref: "#/definitions/adminWorkflowCreateResponse" + /api/v1/workflows/org/{id.org}/{id.project}/{id.domain}: get: tags: - "AdminService" - summary: "Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions." - operationId: "ListTasks2" + summary: "Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions." + operationId: "ListWorkflows4" parameters: + - name: "id.org" + in: "path" + description: "Optional, org key applied to the resource." + required: true + type: "string" + x-exportParamName: "IdOrg" - name: "id.project" in: "path" description: "Name of the project the resource belongs to." @@ -2277,91 +5421,20 @@ paths: 200: description: "A successful response." schema: - $ref: "#/definitions/adminTaskList" - /api/v1/tasks/{id.project}/{id.domain}/{id.name}: - get: - tags: - - "AdminService" - summary: "Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions." - operationId: "ListTasks" - parameters: - - name: "id.project" - in: "path" - description: "Name of the project the resource belongs to." - required: true - type: "string" - x-exportParamName: "IdProject" - - name: "id.domain" - in: "path" - description: "Name of the domain the resource belongs to.\nA domain can be\ - \ considered as a subset within a specific project." - required: true - type: "string" - x-exportParamName: "IdDomain" - - name: "id.name" - in: "path" - description: "User provided value for the resource.\nThe combination of project\ - \ + domain + name uniquely identifies the resource.\n+optional - in certain\ - \ contexts - like 'List API', 'Launch plans'" - required: true - type: "string" - x-exportParamName: "IdName" - - name: "limit" - in: "query" - description: "Indicates the number of resources to be returned.\n+required." - required: false - type: "integer" - format: "int64" - x-exportParamName: "Limit" - x-optionalDataType: "Int64" - - name: "token" - in: "query" - description: "In the case of multiple pages of results, this server-provided\ - \ token can be used to fetch the next page\nin a query.\n+optional." - required: false - type: "string" - x-exportParamName: "Token" - x-optionalDataType: "String" - - name: "filters" - in: "query" - description: "Indicates a list of filters passed as string.\nMore info on\ - \ constructing filters : \n+optional." - required: false - type: "string" - x-exportParamName: "Filters" - x-optionalDataType: "String" - - name: "sort_by.key" - in: "query" - description: "Indicates an attribute to sort the response values.\n+required." - required: false - type: "string" - x-exportParamName: "SortByKey" - x-optionalDataType: "String" - - name: "sort_by.direction" - in: "query" - description: "Indicates the direction to apply sort key for response values.\n\ - +optional.\n\n - DESCENDING: By default, fields are sorted in descending\ - \ order." - required: false - type: "string" - default: "DESCENDING" - enum: - - "DESCENDING" - - "ASCENDING" - x-exportParamName: "SortByDirection" - x-optionalDataType: "String" - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/adminTaskList" - /api/v1/tasks/{id.project}/{id.domain}/{id.name}/{id.version}: + $ref: "#/definitions/adminWorkflowList" + /api/v1/workflows/org/{id.org}/{id.project}/{id.domain}/{id.name}: get: tags: - "AdminService" - summary: "Fetch a :ref:`ref_flyteidl.admin.Task` definition." - operationId: "GetTask" + summary: "Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions." + operationId: "ListWorkflows2" parameters: + - name: "id.org" + in: "path" + description: "Optional, org key applied to the resource." + required: true + type: "string" + x-exportParamName: "IdOrg" - name: "id.project" in: "path" description: "Name of the project the resource belongs to." @@ -2377,196 +5450,138 @@ paths: x-exportParamName: "IdDomain" - name: "id.name" in: "path" - description: "User provided value for the resource." + description: "User provided value for the resource.\nThe combination of project\ + \ + domain + name uniquely identifies the resource.\n+optional - in certain\ + \ contexts - like 'List API', 'Launch plans'" required: true type: "string" x-exportParamName: "IdName" - - name: "id.version" - in: "path" - description: "Specific version of the resource." - required: true + - name: "limit" + in: "query" + description: "Indicates the number of resources to be returned.\n+required." + required: false + type: "integer" + format: "int64" + x-exportParamName: "Limit" + x-optionalDataType: "Int64" + - name: "token" + in: "query" + description: "In the case of multiple pages of results, this server-provided\ + \ token can be used to fetch the next page\nin a query.\n+optional." + required: false type: "string" - x-exportParamName: "IdVersion" - - name: "id.resource_type" + x-exportParamName: "Token" + x-optionalDataType: "String" + - name: "filters" in: "query" - description: "Identifies the specific type of resource that this identifier\ - \ corresponds to.\n\n - DATASET: A dataset represents an entity modeled\ - \ in Flyte DataCatalog. A Dataset is also a versioned entity and can be\ - \ a compilation of multiple individual objects.\nEventually all Catalog\ - \ objects should be modeled similar to Flyte Objects. The Dataset entities\ - \ makes it possible for the UI and CLI to act on the objects \nin a similar\ - \ manner to other Flyte objects" + description: "Indicates a list of filters passed as string.\nMore info on\ + \ constructing filters : \n+optional." required: false type: "string" - default: "UNSPECIFIED" + x-exportParamName: "Filters" + x-optionalDataType: "String" + - name: "sort_by.key" + in: "query" + description: "Indicates an attribute to sort the response values.\n+required." + required: false + type: "string" + x-exportParamName: "SortByKey" + x-optionalDataType: "String" + - name: "sort_by.direction" + in: "query" + description: "Indicates the direction to apply sort key for response values.\n\ + +optional.\n\n - DESCENDING: By default, fields are sorted in descending\ + \ order." + required: false + type: "string" + default: "DESCENDING" enum: - - "UNSPECIFIED" - - "TASK" - - "WORKFLOW" - - "LAUNCH_PLAN" - - "DATASET" - x-exportParamName: "IdResourceType" + - "DESCENDING" + - "ASCENDING" + x-exportParamName: "SortByDirection" x-optionalDataType: "String" responses: 200: description: "A successful response." schema: - $ref: "#/definitions/adminTask" - /api/v1/version: + $ref: "#/definitions/adminWorkflowList" + /api/v1/workflows/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version}: get: tags: - "AdminService" - operationId: "GetVersion" - parameters: [] - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/adminGetVersionResponse" - /api/v1/workflow_attributes/{attributes.project}/{attributes.domain}/{attributes.workflow}: - put: - tags: - - "AdminService" - summary: "Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration`\ - \ for a project, domain and workflow." - operationId: "UpdateWorkflowAttributes" + summary: "Fetch a :ref:`ref_flyteidl.admin.Workflow` definition." + operationId: "GetWorkflow2" parameters: - - name: "attributes.project" + - name: "id.org" in: "path" - description: "Unique project id for which this set of attributes will be applied." + description: "Optional, org key applied to the resource." required: true type: "string" - x-exportParamName: "AttributesProject" - - name: "attributes.domain" - in: "path" - description: "Unique domain id for which this set of attributes will be applied." - required: true - type: "string" - x-exportParamName: "AttributesDomain" - - name: "attributes.workflow" + x-exportParamName: "IdOrg" + - name: "id.project" in: "path" - description: "Workflow name for which this set of attributes will be applied." + description: "Name of the project the resource belongs to." required: true type: "string" - x-exportParamName: "AttributesWorkflow" - - in: "body" - name: "body" - required: true - schema: - $ref: "#/definitions/adminWorkflowAttributesUpdateRequest" - x-exportParamName: "Body" - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/adminWorkflowAttributesUpdateResponse" - /api/v1/workflow_attributes/{project}/{domain}/{workflow}: - get: - tags: - - "AdminService" - summary: "Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration`\ - \ for a project, domain and workflow." - operationId: "GetWorkflowAttributes" - parameters: - - name: "project" + x-exportParamName: "IdProject" + - name: "id.domain" in: "path" - description: "Unique project id which this set of attributes references.\n\ - +required" + description: "Name of the domain the resource belongs to.\nA domain can be\ + \ considered as a subset within a specific project." required: true type: "string" - x-exportParamName: "Project" - - name: "domain" + x-exportParamName: "IdDomain" + - name: "id.name" in: "path" - description: "Unique domain id which this set of attributes references.\n\ - +required" + description: "User provided value for the resource." required: true type: "string" - x-exportParamName: "Domain" - - name: "workflow" + x-exportParamName: "IdName" + - name: "id.version" in: "path" - description: "Workflow name which this set of attributes references.\n+required" + description: "Specific version of the resource." required: true type: "string" - x-exportParamName: "Workflow" - - name: "resource_type" + x-exportParamName: "IdVersion" + - name: "id.resource_type" in: "query" - description: "Which type of matchable attributes to return.\n+required.\n\n\ - \ - TASK_RESOURCE: Applies to customizable task resource requests and limits.\n\ - \ - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster\ - \ resources.\n - EXECUTION_QUEUE: Configures task and dynamic task execution\ - \ queue assignment.\n - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster\ - \ label to be used for execution to be run\n - QUALITY_OF_SERVICE_SPECIFICATION:\ - \ Configures default quality of service when undefined in an execution spec.\n\ - \ - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior\ - \ for a given task type.\n - WORKFLOW_EXECUTION_CONFIG: Adds defaults for\ - \ customizable workflow-execution specifications and overrides.\n - CLUSTER_ASSIGNMENT:\ - \ Controls how to select an available cluster on which this execution should\ - \ run." + description: "Identifies the specific type of resource that this identifier\ + \ corresponds to.\n\n - DATASET: A dataset represents an entity modeled\ + \ in Flyte DataCatalog. A Dataset is also a versioned entity and can be\ + \ a compilation of multiple individual objects.\nEventually all Catalog\ + \ objects should be modeled similar to Flyte Objects. The Dataset entities\ + \ makes it possible for the UI and CLI to act on the objects \nin a similar\ + \ manner to other Flyte objects" required: false type: "string" - default: "TASK_RESOURCE" + default: "UNSPECIFIED" enum: - - "TASK_RESOURCE" - - "CLUSTER_RESOURCE" - - "EXECUTION_QUEUE" - - "EXECUTION_CLUSTER_LABEL" - - "QUALITY_OF_SERVICE_SPECIFICATION" - - "PLUGIN_OVERRIDE" - - "WORKFLOW_EXECUTION_CONFIG" - - "CLUSTER_ASSIGNMENT" - x-exportParamName: "ResourceType" + - "UNSPECIFIED" + - "TASK" + - "WORKFLOW" + - "LAUNCH_PLAN" + - "DATASET" + x-exportParamName: "IdResourceType" x-optionalDataType: "String" responses: 200: description: "A successful response." schema: - $ref: "#/definitions/adminWorkflowAttributesGetResponse" - delete: - tags: - - "AdminService" - summary: "Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration`\ - \ for a project, domain and workflow." - operationId: "DeleteWorkflowAttributes" - parameters: - - name: "project" - in: "path" - description: "Unique project id which this set of attributes references.\n\ - +required" - required: true - type: "string" - x-exportParamName: "Project" - - name: "domain" - in: "path" - description: "Unique domain id which this set of attributes references.\n\ - +required" - required: true - type: "string" - x-exportParamName: "Domain" - - name: "workflow" - in: "path" - description: "Workflow name which this set of attributes references.\n+required" - required: true - type: "string" - x-exportParamName: "Workflow" - - in: "body" - name: "body" - required: true - schema: - $ref: "#/definitions/adminWorkflowAttributesDeleteRequest" - x-exportParamName: "Body" - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/adminWorkflowAttributesDeleteResponse" - /api/v1/workflow_ids/{project}/{domain}: + $ref: "#/definitions/adminWorkflow" + /api/v1/workflows/org/{org}/{project}/{domain}: get: tags: - "AdminService" summary: "Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of\ \ workflow objects." - operationId: "ListWorkflowIds" + operationId: "ListWorkflowIds2" parameters: + - name: "org" + in: "path" + description: "Optional, org key applied to the resource." + required: true + type: "string" + x-exportParamName: "Org" - name: "project" in: "path" description: "Name of the project that contains the identifiers.\n+required" @@ -2628,30 +5643,12 @@ paths: description: "A successful response." schema: $ref: "#/definitions/adminNamedEntityIdentifierList" - /api/v1/workflows: - post: - tags: - - "AdminService" - summary: "Create and upload a :ref:`ref_flyteidl.admin.Workflow` definition" - operationId: "CreateWorkflow" - parameters: - - in: "body" - name: "body" - required: true - schema: - $ref: "#/definitions/adminWorkflowCreateRequest" - x-exportParamName: "Body" - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/adminWorkflowCreateResponse" /api/v1/workflows/{id.project}/{id.domain}: get: tags: - "AdminService" summary: "Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions." - operationId: "ListWorkflows2" + operationId: "ListWorkflows3" parameters: - name: "id.project" in: "path" @@ -2675,6 +5672,13 @@ paths: type: "string" x-exportParamName: "IdName" x-optionalDataType: "String" + - name: "id.org" + in: "query" + description: "Optional, org key applied to the resource." + required: false + type: "string" + x-exportParamName: "IdOrg" + x-optionalDataType: "String" - name: "limit" in: "query" description: "Indicates the number of resources to be returned.\n+required." @@ -2752,6 +5756,13 @@ paths: required: true type: "string" x-exportParamName: "IdName" + - name: "id.org" + in: "query" + description: "Optional, org key applied to the resource." + required: false + type: "string" + x-exportParamName: "IdOrg" + x-optionalDataType: "String" - name: "limit" in: "query" description: "Indicates the number of resources to be returned.\n+required." @@ -2853,6 +5864,13 @@ paths: - "DATASET" x-exportParamName: "IdResourceType" x-optionalDataType: "String" + - name: "id.org" + in: "query" + description: "Optional, org key applied to the resource." + required: false + type: "string" + x-exportParamName: "IdOrg" + x-optionalDataType: "String" responses: 200: description: "A successful response." @@ -3300,6 +6318,7 @@ definitions: example: short_description: "short_description" id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -3334,6 +6353,7 @@ definitions: descriptionEntities: - short_description: "short_description" id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -3351,6 +6371,7 @@ definitions: - "tags" - short_description: "short_description" id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -3441,6 +6462,7 @@ definitions: \ Get and List execution requests." example: id: + org: "org" domain: "domain" name: "name" project: "project" @@ -3451,6 +6473,7 @@ definitions: uri: "uri" phase: {} workflow_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -3514,11 +6537,13 @@ definitions: principal: "principal" parent_node_execution: execution_id: + org: "org" domain: "domain" name: "name" project: "project" node_id: "node_id" reference_execution: + org: "org" domain: "domain" name: "name" project: "project" @@ -3579,6 +6604,7 @@ definitions: - "tags" - "tags" launch_plan: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -3738,6 +6764,7 @@ definitions: uri: "uri" phase: {} workflow_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -3825,6 +6852,9 @@ definitions: \ be\nincluded in this map. If not required and not provided, defaults apply.\n\ +optional" $ref: "#/definitions/coreLiteralMap" + org: + type: "string" + description: "Optional, org key applied to the resource." description: "Request to launch an execution with the given project, domain and\ \ optionally-assigned name." adminExecutionCreateResponse: @@ -3837,6 +6867,7 @@ definitions: \ a generated name." example: id: + org: "org" domain: "domain" name: "name" project: "project" @@ -3857,6 +6888,7 @@ definitions: example: executions: - id: + org: "org" domain: "domain" name: "name" project: "project" @@ -3867,6 +6899,7 @@ definitions: uri: "uri" phase: {} workflow_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -3930,11 +6963,13 @@ definitions: principal: "principal" parent_node_execution: execution_id: + org: "org" domain: "domain" name: "name" project: "project" node_id: "node_id" reference_execution: + org: "org" domain: "domain" name: "name" project: "project" @@ -3995,6 +7030,7 @@ definitions: - "tags" - "tags" launch_plan: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -4089,6 +7125,7 @@ definitions: kubernetes_service_account: "kubernetes_service_account" assumable_iam_role: "assumable_iam_role" - id: + org: "org" domain: "domain" name: "name" project: "project" @@ -4099,6 +7136,7 @@ definitions: uri: "uri" phase: {} workflow_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -4162,11 +7200,13 @@ definitions: principal: "principal" parent_node_execution: execution_id: + org: "org" domain: "domain" name: "name" project: "project" node_id: "node_id" reference_execution: + org: "org" domain: "domain" name: "name" project: "project" @@ -4227,6 +7267,7 @@ definitions: - "tags" - "tags" launch_plan: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -4370,11 +7411,13 @@ definitions: principal: "principal" parent_node_execution: execution_id: + org: "org" domain: "domain" name: "name" project: "project" node_id: "node_id" reference_execution: + org: "org" domain: "domain" name: "name" project: "project" @@ -4546,11 +7589,13 @@ definitions: principal: "principal" parent_node_execution: execution_id: + org: "org" domain: "domain" name: "name" project: "project" node_id: "node_id" reference_execution: + org: "org" domain: "domain" name: "name" project: "project" @@ -4611,6 +7656,7 @@ definitions: - "tags" - "tags" launch_plan: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -4843,6 +7889,7 @@ definitions: \ have a default value for said input." example: id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -5190,6 +8237,7 @@ definitions: required: true spec: workflow_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -5964,6 +9012,7 @@ definitions: example: launch_plans: - id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -6311,6 +9360,7 @@ definitions: required: true spec: workflow_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -6686,6 +9736,7 @@ definitions: kubernetes_service_account: "kubernetes_service_account" assumable_iam_role: "assumable_iam_role" - id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -7033,6 +10084,7 @@ definitions: required: true spec: workflow_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -7539,6 +10591,7 @@ definitions: description: "User-provided launch plan definition and configuration values." example: workflow_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -7953,6 +11006,7 @@ definitions: configurations: - launch_plan: "launch_plan" workflow: "workflow" + org: "org" domain: "domain" project: "project" attributes: @@ -8060,6 +11114,7 @@ definitions: task_type: "task_type" - launch_plan: "launch_plan" workflow: "workflow" + org: "org" domain: "domain" project: "project" attributes: @@ -8193,13 +11248,18 @@ definitions: type: "string" launch_plan: type: "string" - description: "Represents a custom set of attributes applied for either a domain;\ - \ a domain and project; or\ndomain, project and workflow name.\nThese are used\ - \ to override system level defaults for kubernetes cluster resource management,\n\ - default execution values, and more all across different levels of specificity." + org: + type: "string" + description: "Optional, org key applied to the resource." + description: "Represents a custom set of attributes applied for either a domain\ + \ (and optional org); a domain and project (and optional org);\nor domain, project\ + \ and workflow name (and optional org).\nThese are used to override system level\ + \ defaults for kubernetes cluster resource management,\ndefault execution values,\ + \ and more all across different levels of specificity." example: launch_plan: "launch_plan" workflow: "workflow" + org: "org" domain: "domain" project: "project" attributes: @@ -8473,6 +11533,7 @@ definitions: state: {} resource_type: {} id: + org: "org" domain: "domain" name: "name" project: "project" @@ -8491,11 +11552,15 @@ definitions: title: "User provided value for the resource.\nThe combination of project\ \ + domain + name uniquely identifies the resource.\n+optional - in certain\ \ contexts - like 'List API', 'Launch plans'" + org: + type: "string" + description: "Optional, org key applied to the resource." description: "Encapsulation of fields that identifies a Flyte resource.\nA Flyte\ \ resource can be a task, workflow or launch plan.\nA resource can internally\ \ have multiple versions and is uniquely identified\nby project, domain, and\ \ name." example: + org: "org" domain: "domain" name: "name" project: "project" @@ -8515,10 +11580,12 @@ definitions: description: "Represents a list of NamedEntityIdentifiers." example: entities: - - domain: "domain" + - org: "org" + domain: "domain" name: "name" project: "project" - - domain: "domain" + - org: "org" + domain: "domain" name: "name" project: "project" token: "token" @@ -8543,6 +11610,7 @@ definitions: state: {} resource_type: {} id: + org: "org" domain: "domain" name: "name" project: "project" @@ -8551,6 +11619,7 @@ definitions: state: {} resource_type: {} id: + org: "org" domain: "domain" name: "name" project: "project" @@ -8652,6 +11721,7 @@ definitions: duration: "duration" workflow_node_metadata: executionId: + org: "org" domain: "domain" name: "name" project: "project" @@ -8660,6 +11730,7 @@ definitions: catalog_key: source_task_execution: task_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -8667,12 +11738,14 @@ definitions: version: "version" node_execution_id: execution_id: + org: "org" domain: "domain" name: "name" project: "project" node_id: "node_id" retry_attempt: 0 dataset_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -10222,6 +13295,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -10247,12 +13321,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -11378,6 +14454,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -11403,12 +14480,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -12533,6 +15612,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -12558,12 +15638,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -12572,6 +15654,7 @@ definitions: metadata_defaults: interruptible: true id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -14233,6 +17316,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -14258,12 +17342,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -15389,6 +18475,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -15414,12 +18501,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -16544,6 +19633,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -16569,12 +19659,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -16583,6 +19675,7 @@ definitions: metadata_defaults: interruptible: true id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -16876,6 +19969,7 @@ definitions: enabled: true input_path: "input_path" id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -17207,6 +20301,7 @@ definitions: enabled: true input_path: "input_path" id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -18908,6 +22003,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -18933,12 +22029,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -20064,6 +23162,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -20089,12 +23188,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -21219,6 +24320,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -21244,12 +24346,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -21258,6 +24362,7 @@ definitions: metadata_defaults: interruptible: true id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -21447,6 +24552,7 @@ definitions: - "ids" dynamic_job_spec_uri: "dynamic_job_spec_uri" id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -21482,6 +24588,7 @@ definitions: input_uri: "input_uri" id: execution_id: + org: "org" domain: "domain" name: "name" project: "project" @@ -21491,6 +24598,7 @@ definitions: duration: "duration" workflow_node_metadata: executionId: + org: "org" domain: "domain" name: "name" project: "project" @@ -21499,6 +24607,7 @@ definitions: catalog_key: source_task_execution: task_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -21506,12 +24615,14 @@ definitions: version: "version" node_execution_id: execution_id: + org: "org" domain: "domain" name: "name" project: "project" node_id: "node_id" retry_attempt: 0 dataset_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -21543,6 +24654,7 @@ definitions: input_uri: "input_uri" id: execution_id: + org: "org" domain: "domain" name: "name" project: "project" @@ -21552,6 +24664,7 @@ definitions: duration: "duration" workflow_node_metadata: executionId: + org: "org" domain: "domain" name: "name" project: "project" @@ -21560,6 +24673,7 @@ definitions: catalog_key: source_task_execution: task_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -21567,12 +24681,14 @@ definitions: version: "version" node_execution_id: execution_id: + org: "org" domain: "domain" name: "name" project: "project" node_id: "node_id" retry_attempt: 0 dataset_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -21786,9 +24902,13 @@ definitions: $ref: "#/definitions/adminLabels" state: $ref: "#/definitions/ProjectProjectState" + org: + type: "string" + description: "Optional, org key applied to the resource." description: "Top-level namespace used to classify different entities like workflows\ \ and executions." example: + org: "org" name: "name" domains: - name: "name" @@ -21809,9 +24929,13 @@ definitions: description: "Unique project id for which this set of attributes will be applied." matching_attributes: $ref: "#/definitions/adminMatchingAttributes" + org: + type: "string" + description: "Optional, org key applied to the project." title: "Defines a set of custom matching attributes at the project level.\nFor\ \ more info on matchable attributes, see :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration`" example: + org: "org" project: "project" matching_attributes: quality_of_service: @@ -21925,6 +25049,9 @@ definitions: resource_type: title: "Which type of matchable attributes to delete.\n+required" $ref: "#/definitions/adminMatchableResource" + org: + type: "string" + description: "Optional, org key applied to the project." title: "Request to delete a set matchable project level attribute override.\n\ For more info on matchable attributes, see :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration`" adminProjectAttributesDeleteResponse: @@ -21939,6 +25066,7 @@ definitions: \ info on matchable attributes, see :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration`" example: attributes: + org: "org" project: "project" matching_attributes: quality_of_service: @@ -22065,9 +25193,13 @@ definitions: description: "Unique domain id for which this set of attributes will be applied." matching_attributes: $ref: "#/definitions/adminMatchingAttributes" + org: + type: "string" + description: "Optional, org key applied to the attributes." title: "Defines a set of custom matching attributes which defines resource defaults\ \ for a project and domain.\nFor more info on matchable attributes, see :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration`" example: + org: "org" domain: "domain" project: "project" matching_attributes: @@ -22185,6 +25317,9 @@ definitions: resource_type: title: "Which type of matchable attributes to delete.\n+required" $ref: "#/definitions/adminMatchableResource" + org: + type: "string" + description: "Optional, org key applied to the attributes." title: "Request to delete a set matchable project domain attribute override.\n\ For more info on matchable attributes, see :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration`" adminProjectDomainAttributesDeleteResponse: @@ -22199,6 +25334,7 @@ definitions: \ more info on matchable attributes, see :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration`" example: attributes: + org: "org" domain: "domain" project: "project" matching_attributes: @@ -22345,7 +25481,8 @@ definitions: \ for more details" example: projects: - - name: "name" + - org: "org" + name: "name" domains: - name: "name" id: "id" @@ -22357,7 +25494,8 @@ definitions: labels: values: key: "values" - - name: "name" + - org: "org" + name: "name" domains: - name: "name" id: "id" @@ -22490,6 +25628,7 @@ definitions: example: short_description: "short_description" id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -22603,6 +25742,7 @@ definitions: enabled: true input_path: "input_path" id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -22950,6 +26090,7 @@ definitions: enabled: true input_path: "input_path" id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -23392,6 +26533,7 @@ definitions: - input_uri: "input_uri" id: task_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -23399,6 +26541,7 @@ definitions: version: "version" node_execution_id: execution_id: + org: "org" domain: "domain" name: "name" project: "project" @@ -23486,6 +26629,7 @@ definitions: - input_uri: "input_uri" id: task_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -23493,6 +26637,7 @@ definitions: version: "version" node_execution_id: execution_id: + org: "org" domain: "domain" name: "name" project: "project" @@ -23597,6 +26742,7 @@ definitions: tasks: - short_description: "short_description" id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -23710,6 +26856,7 @@ definitions: enabled: true input_path: "input_path" id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -23938,6 +27085,7 @@ definitions: statement: "statement" - short_description: "short_description" id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -24051,6 +27199,7 @@ definitions: enabled: true input_path: "input_path" id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -24384,6 +27533,7 @@ definitions: example: short_description: "short_description" id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -25866,6 +29016,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -25891,12 +29042,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -27022,6 +30175,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -27047,12 +30201,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -28177,6 +31333,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -28202,12 +31359,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -28216,6 +31375,7 @@ definitions: metadata_defaults: interruptible: true id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -29877,6 +33037,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -29902,12 +33063,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -31033,6 +34196,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -31058,12 +34222,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -32188,6 +35354,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -32213,12 +35380,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -32227,6 +35396,7 @@ definitions: metadata_defaults: interruptible: true id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -32520,6 +35690,7 @@ definitions: enabled: true input_path: "input_path" id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -32851,6 +36022,7 @@ definitions: enabled: true input_path: "input_path" id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -34552,6 +37724,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -34577,12 +37750,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -35708,6 +38883,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -35733,12 +38909,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -36863,6 +40041,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -36888,12 +40067,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -36902,6 +40083,7 @@ definitions: metadata_defaults: interruptible: true id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -37104,11 +40286,15 @@ definitions: description: "Workflow name for which this set of attributes will be applied." matching_attributes: $ref: "#/definitions/adminMatchingAttributes" + org: + type: "string" + description: "Optional, org key applied to the attributes." title: "Defines a set of custom matching attributes which defines resource defaults\ \ for a project, domain and workflow.\nFor more info on matchable attributes,\ \ see :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration`" example: workflow: "workflow" + org: "org" domain: "domain" project: "project" matching_attributes: @@ -37229,6 +40415,9 @@ definitions: resource_type: title: "Which type of matchable attributes to delete.\n+required" $ref: "#/definitions/adminMatchableResource" + org: + type: "string" + description: "Optional, org key applied to the attributes." title: "Request to delete a set matchable workflow attribute override.\nFor more\ \ info on matchable attributes, see :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration`" adminWorkflowAttributesDeleteResponse: @@ -37243,6 +40432,7 @@ definitions: example: attributes: workflow: "workflow" + org: "org" domain: "domain" project: "project" matching_attributes: @@ -38848,6 +42038,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -38873,12 +42064,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -40004,6 +43197,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -40029,12 +43223,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -41159,6 +44355,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -41184,12 +44381,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -41198,6 +44397,7 @@ definitions: metadata_defaults: interruptible: true id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -42859,6 +46059,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -42884,12 +46085,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -44015,6 +47218,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -44040,12 +47244,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -45170,6 +48376,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -45195,12 +48402,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -45209,6 +48418,7 @@ definitions: metadata_defaults: interruptible: true id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -45502,6 +48712,7 @@ definitions: enabled: true input_path: "input_path" id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -45833,6 +49044,7 @@ definitions: enabled: true input_path: "input_path" id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -47534,6 +50746,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -47559,12 +50772,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -48690,6 +51905,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -48715,12 +51931,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -49845,6 +53063,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -49870,12 +53089,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -49884,6 +53105,7 @@ definitions: metadata_defaults: interruptible: true id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -50251,12 +53473,14 @@ definitions: - null - null workflow_id: + org: "org" domain: "domain" name: "name" project: "project" end_time: "2000-01-23T04:56:07.000+00:00" task_id: task_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -50264,6 +53488,7 @@ definitions: version: "version" node_execution_id: execution_id: + org: "org" domain: "domain" name: "name" project: "project" @@ -50272,6 +53497,7 @@ definitions: operation_id: "operation_id" node_id: execution_id: + org: "org" domain: "domain" name: "name" project: "project" @@ -50295,6 +53521,7 @@ definitions: workflows: - short_description: "short_description" id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -51777,6 +55004,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -51802,12 +55030,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -52933,6 +56163,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -52958,12 +56189,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -54088,6 +57321,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -54113,12 +57347,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -54127,6 +57363,7 @@ definitions: metadata_defaults: interruptible: true id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -55788,6 +59025,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -55813,12 +59051,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -56944,6 +60184,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -56969,12 +60210,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -58099,6 +61342,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -58124,12 +61368,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -58138,6 +61384,7 @@ definitions: metadata_defaults: interruptible: true id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -58431,6 +61678,7 @@ definitions: enabled: true input_path: "input_path" id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -58762,6 +62010,7 @@ definitions: enabled: true input_path: "input_path" id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -60463,6 +63712,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -60488,12 +63738,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -61619,6 +64871,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -61644,12 +64897,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -62774,6 +66029,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -62799,12 +66055,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -62813,6 +66071,7 @@ definitions: metadata_defaults: interruptible: true id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -63003,6 +66262,7 @@ definitions: created_at: "2000-01-23T04:56:07.000+00:00" - short_description: "short_description" id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -64485,6 +67745,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -64510,12 +67771,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -65641,6 +68904,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -65666,12 +68930,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -66796,6 +70062,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -66821,12 +70088,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -66835,6 +70104,7 @@ definitions: metadata_defaults: interruptible: true id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -68496,6 +71766,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -68521,12 +71792,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -69652,6 +72925,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -69677,12 +72951,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -70807,6 +74083,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -70832,12 +74109,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -70846,6 +74125,7 @@ definitions: metadata_defaults: interruptible: true id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -71139,6 +74419,7 @@ definitions: enabled: true input_path: "input_path" id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -71470,6 +74751,7 @@ definitions: enabled: true input_path: "input_path" id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -73171,6 +76453,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -73196,12 +76479,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -74327,6 +77612,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -74352,12 +77638,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -75482,6 +78770,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -75507,12 +78796,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -75521,6 +78812,7 @@ definitions: metadata_defaults: interruptible: true id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -77367,6 +80659,7 @@ definitions: example: source_task_execution: task_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -77374,12 +80667,14 @@ definitions: version: "version" node_execution_id: execution_id: + org: "org" domain: "domain" name: "name" project: "project" node_id: "node_id" retry_attempt: 0 dataset_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -77740,6 +81035,7 @@ definitions: enabled: true input_path: "input_path" id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -79453,6 +82749,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -79478,12 +82775,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -80609,6 +83908,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -80634,12 +83934,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -81764,6 +85066,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -81789,12 +85092,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -81803,6 +85108,7 @@ definitions: metadata_defaults: interruptible: true id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -83491,6 +86797,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -83516,12 +86823,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -84647,6 +87956,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -84672,12 +87982,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -85802,6 +89114,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -85827,12 +89140,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -85841,6 +89156,7 @@ definitions: metadata_defaults: interruptible: true id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -87502,6 +90818,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -87527,12 +90844,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -88658,6 +91977,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -88683,12 +92003,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -89813,6 +93135,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -89838,12 +93161,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -89852,6 +93177,7 @@ definitions: metadata_defaults: interruptible: true id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -90145,6 +93471,7 @@ definitions: enabled: true input_path: "input_path" id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -90476,6 +93803,7 @@ definitions: enabled: true input_path: "input_path" id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -92177,6 +95505,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -92202,12 +95531,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -93333,6 +96664,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -93358,12 +96690,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -94488,6 +97822,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -94513,12 +97848,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -94527,6 +97864,7 @@ definitions: metadata_defaults: interruptible: true id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -95104,8 +98442,12 @@ definitions: version: type: "string" description: "Specific version of the resource." + org: + type: "string" + description: "Optional, org key applied to the resource." description: "Encapsulation of fields that uniquely identifies a Flyte resource." example: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -97628,6 +100970,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -97653,12 +100996,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -97674,6 +101019,7 @@ definitions: description: "Encapsulation of fields that identify a Flyte node execution entity." example: execution_id: + org: "org" domain: "domain" name: "name" project: "project" @@ -99017,12 +102363,14 @@ definitions: - null - null workflow_id: + org: "org" domain: "domain" name: "name" project: "project" end_time: "2000-01-23T04:56:07.000+00:00" task_id: task_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -99030,6 +102378,7 @@ definitions: version: "version" node_execution_id: execution_id: + org: "org" domain: "domain" name: "name" project: "project" @@ -99038,6 +102387,7 @@ definitions: operation_id: "operation_id" node_id: execution_id: + org: "org" domain: "domain" name: "name" project: "project" @@ -99142,6 +102492,7 @@ definitions: description: "Encapsulation of fields that identify a Flyte task execution entity." example: task_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -99149,6 +102500,7 @@ definitions: version: "version" node_execution_id: execution_id: + org: "org" domain: "domain" name: "name" project: "project" @@ -99278,6 +102630,7 @@ definitions: description: "Refers to the task that the Node is to execute." example: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -99488,6 +102841,7 @@ definitions: enabled: true input_path: "input_path" id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -100287,8 +103641,12 @@ definitions: name: type: "string" description: "User or system provided value for the resource." + org: + type: "string" + description: "Optional, org key applied to the resource." title: "Encapsulation of fields that uniquely identifies a Flyte workflow execution" example: + org: "org" domain: "domain" name: "name" project: "project" @@ -100363,12 +103721,14 @@ definitions: description: "Refers to a the workflow the node is to execute." example: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -101891,6 +105251,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -101916,12 +105277,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -103047,6 +106410,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -103072,12 +106436,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -104202,6 +107568,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -104227,12 +107594,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -104241,6 +107610,7 @@ definitions: metadata_defaults: interruptible: true id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -106202,6 +109572,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -106227,12 +109598,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -107358,6 +110731,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -107383,12 +110757,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -108513,6 +111889,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -108538,12 +111915,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -108552,6 +111931,7 @@ definitions: metadata_defaults: interruptible: true id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -110213,6 +113593,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -110238,12 +113619,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -111369,6 +114752,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -111394,12 +114778,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -112524,6 +115910,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -112549,12 +115936,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -112563,6 +115952,7 @@ definitions: metadata_defaults: interruptible: true id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -112856,6 +116246,7 @@ definitions: enabled: true input_path: "input_path" id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -113187,6 +116578,7 @@ definitions: enabled: true input_path: "input_path" id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -114888,6 +118280,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -114913,12 +118306,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -116044,6 +119439,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -116069,12 +119465,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -117199,6 +120597,7 @@ definitions: alias: "alias" task_node: reference_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -117224,12 +120623,14 @@ definitions: id: "id" workflow_node: launchplan_ref: + org: "org" domain: "domain" resource_type: {} name: "name" project: "project" version: "version" sub_workflow_ref: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -117238,6 +120639,7 @@ definitions: metadata_defaults: interruptible: true id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -117427,6 +120829,7 @@ definitions: - "ids" dynamic_job_spec_uri: "dynamic_job_spec_uri" id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -117462,6 +120865,7 @@ definitions: input_uri: "input_uri" id: execution_id: + org: "org" domain: "domain" name: "name" project: "project" @@ -117471,6 +120875,7 @@ definitions: duration: "duration" workflow_node_metadata: executionId: + org: "org" domain: "domain" name: "name" project: "project" @@ -117479,6 +120884,7 @@ definitions: catalog_key: source_task_execution: task_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -117486,12 +120892,14 @@ definitions: version: "version" node_execution_id: execution_id: + org: "org" domain: "domain" name: "name" project: "project" node_id: "node_id" retry_attempt: 0 dataset_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -117552,6 +120960,7 @@ definitions: input_uri: "input_uri" id: task_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -117559,6 +120968,7 @@ definitions: version: "version" node_execution_id: execution_id: + org: "org" domain: "domain" name: "name" project: "project" @@ -117660,6 +121070,7 @@ definitions: catalog_key: source_task_execution: task_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -117667,12 +121078,14 @@ definitions: version: "version" node_execution_id: execution_id: + org: "org" domain: "domain" name: "name" project: "project" node_id: "node_id" retry_attempt: 0 dataset_id: + org: "org" domain: "domain" resource_type: {} name: "name" @@ -117692,6 +121105,7 @@ definitions: title: "Metadata for a WorkflowNode" example: executionId: + org: "org" domain: "domain" name: "name" project: "project" diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api_admin_service.go b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api_admin_service.go index 1ad9e1f583..e106763b6c 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api_admin_service.go +++ b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api_admin_service.go @@ -743,25 +743,25 @@ func (a *AdminServiceApiService) DeleteProjectAttributes(ctx context.Context, pr /* AdminServiceApiService Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param org Optional, org key applied to the project. * @param project Unique project id which this set of attributes references. +required - * @param domain Unique domain id which this set of attributes references. +required * @param body -@return AdminProjectDomainAttributesDeleteResponse +@return AdminProjectAttributesDeleteResponse */ -func (a *AdminServiceApiService) DeleteProjectDomainAttributes(ctx context.Context, project string, domain string, body AdminProjectDomainAttributesDeleteRequest) (AdminProjectDomainAttributesDeleteResponse, *http.Response, error) { +func (a *AdminServiceApiService) DeleteProjectAttributes2(ctx context.Context, org string, project string, body AdminProjectAttributesDeleteRequest) (AdminProjectAttributesDeleteResponse, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Delete") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminProjectDomainAttributesDeleteResponse + localVarReturnValue AdminProjectAttributesDeleteResponse ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/project_domain_attributes/{project}/{domain}" + localVarPath := a.client.cfg.BasePath + "/api/v1/project_domain_attributes/org/{org}/{project}" + localVarPath = strings.Replace(localVarPath, "{"+"org"+"}", fmt.Sprintf("%v", org), -1) localVarPath = strings.Replace(localVarPath, "{"+"project"+"}", fmt.Sprintf("%v", project), -1) - localVarPath = strings.Replace(localVarPath, "{"+"domain"+"}", fmt.Sprintf("%v", domain), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -817,7 +817,7 @@ func (a *AdminServiceApiService) DeleteProjectDomainAttributes(ctx context.Conte } if localVarHttpResponse.StatusCode == 200 { - var v AdminProjectDomainAttributesDeleteResponse + var v AdminProjectAttributesDeleteResponse err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -834,29 +834,27 @@ func (a *AdminServiceApiService) DeleteProjectDomainAttributes(ctx context.Conte } /* -AdminServiceApiService Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. +AdminServiceApiService Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). * @param project Unique project id which this set of attributes references. +required * @param domain Unique domain id which this set of attributes references. +required - * @param workflow Workflow name which this set of attributes references. +required * @param body -@return AdminWorkflowAttributesDeleteResponse +@return AdminProjectDomainAttributesDeleteResponse */ -func (a *AdminServiceApiService) DeleteWorkflowAttributes(ctx context.Context, project string, domain string, workflow string, body AdminWorkflowAttributesDeleteRequest) (AdminWorkflowAttributesDeleteResponse, *http.Response, error) { +func (a *AdminServiceApiService) DeleteProjectDomainAttributes(ctx context.Context, project string, domain string, body AdminProjectDomainAttributesDeleteRequest) (AdminProjectDomainAttributesDeleteResponse, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Delete") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminWorkflowAttributesDeleteResponse + localVarReturnValue AdminProjectDomainAttributesDeleteResponse ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/workflow_attributes/{project}/{domain}/{workflow}" + localVarPath := a.client.cfg.BasePath + "/api/v1/project_domain_attributes/{project}/{domain}" localVarPath = strings.Replace(localVarPath, "{"+"project"+"}", fmt.Sprintf("%v", project), -1) localVarPath = strings.Replace(localVarPath, "{"+"domain"+"}", fmt.Sprintf("%v", domain), -1) - localVarPath = strings.Replace(localVarPath, "{"+"workflow"+"}", fmt.Sprintf("%v", workflow), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -912,7 +910,7 @@ func (a *AdminServiceApiService) DeleteWorkflowAttributes(ctx context.Context, p } if localVarHttpResponse.StatusCode == 200 { - var v AdminWorkflowAttributesDeleteResponse + var v AdminProjectDomainAttributesDeleteResponse err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -929,28 +927,29 @@ func (a *AdminServiceApiService) DeleteWorkflowAttributes(ctx context.Context, p } /* -AdminServiceApiService Fetch the active version of a :ref:`ref_flyteidl.admin.LaunchPlan`. +AdminServiceApiService Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param idProject Name of the project the resource belongs to. - * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. - * @param idName User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' + * @param org Optional, org key applied to the attributes. + * @param project Unique project id which this set of attributes references. +required + * @param domain Unique domain id which this set of attributes references. +required + * @param body -@return AdminLaunchPlan +@return AdminProjectDomainAttributesDeleteResponse */ -func (a *AdminServiceApiService) GetActiveLaunchPlan(ctx context.Context, idProject string, idDomain string, idName string) (AdminLaunchPlan, *http.Response, error) { +func (a *AdminServiceApiService) DeleteProjectDomainAttributes2(ctx context.Context, org string, project string, domain string, body AdminProjectDomainAttributesDeleteRequest) (AdminProjectDomainAttributesDeleteResponse, *http.Response, error) { var ( - localVarHttpMethod = strings.ToUpper("Get") + localVarHttpMethod = strings.ToUpper("Delete") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminLaunchPlan + localVarReturnValue AdminProjectDomainAttributesDeleteResponse ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/active_launch_plans/{id.project}/{id.domain}/{id.name}" - localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) + localVarPath := a.client.cfg.BasePath + "/api/v1/project_domain_attributes/org/{org}/{project}/{domain}" + localVarPath = strings.Replace(localVarPath, "{"+"org"+"}", fmt.Sprintf("%v", org), -1) + localVarPath = strings.Replace(localVarPath, "{"+"project"+"}", fmt.Sprintf("%v", project), -1) + localVarPath = strings.Replace(localVarPath, "{"+"domain"+"}", fmt.Sprintf("%v", domain), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -973,6 +972,8 @@ func (a *AdminServiceApiService) GetActiveLaunchPlan(ctx context.Context, idProj if localVarHttpHeaderAccept != "" { localVarHeaderParams["Accept"] = localVarHttpHeaderAccept } + // body params + localVarPostBody = &body r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) if err != nil { return localVarReturnValue, nil, err @@ -1004,7 +1005,7 @@ func (a *AdminServiceApiService) GetActiveLaunchPlan(ctx context.Context, idProj } if localVarHttpResponse.StatusCode == 200 { - var v AdminLaunchPlan + var v AdminProjectDomainAttributesDeleteResponse err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -1021,32 +1022,29 @@ func (a *AdminServiceApiService) GetActiveLaunchPlan(ctx context.Context, idProj } /* -AdminServiceApiService Fetch a :ref:`ref_flyteidl.admin.DescriptionEntity` object. +AdminServiceApiService Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param idResourceType Identifies the specific type of resource that this identifier corresponds to. - * @param idProject Name of the project the resource belongs to. - * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. - * @param idName User provided value for the resource. - * @param idVersion Specific version of the resource. + * @param project Unique project id which this set of attributes references. +required + * @param domain Unique domain id which this set of attributes references. +required + * @param workflow Workflow name which this set of attributes references. +required + * @param body -@return AdminDescriptionEntity +@return AdminWorkflowAttributesDeleteResponse */ -func (a *AdminServiceApiService) GetDescriptionEntity(ctx context.Context, idResourceType string, idProject string, idDomain string, idName string, idVersion string) (AdminDescriptionEntity, *http.Response, error) { +func (a *AdminServiceApiService) DeleteWorkflowAttributes(ctx context.Context, project string, domain string, workflow string, body AdminWorkflowAttributesDeleteRequest) (AdminWorkflowAttributesDeleteResponse, *http.Response, error) { var ( - localVarHttpMethod = strings.ToUpper("Get") + localVarHttpMethod = strings.ToUpper("Delete") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminDescriptionEntity + localVarReturnValue AdminWorkflowAttributesDeleteResponse ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/description_entities/{id.resource_type}/{id.project}/{id.domain}/{id.name}/{id.version}" - localVarPath = strings.Replace(localVarPath, "{"+"id.resource_type"+"}", fmt.Sprintf("%v", idResourceType), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.version"+"}", fmt.Sprintf("%v", idVersion), -1) + localVarPath := a.client.cfg.BasePath + "/api/v1/workflow_attributes/{project}/{domain}/{workflow}" + localVarPath = strings.Replace(localVarPath, "{"+"project"+"}", fmt.Sprintf("%v", project), -1) + localVarPath = strings.Replace(localVarPath, "{"+"domain"+"}", fmt.Sprintf("%v", domain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"workflow"+"}", fmt.Sprintf("%v", workflow), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -1069,6 +1067,8 @@ func (a *AdminServiceApiService) GetDescriptionEntity(ctx context.Context, idRes if localVarHttpHeaderAccept != "" { localVarHeaderParams["Accept"] = localVarHttpHeaderAccept } + // body params + localVarPostBody = &body r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) if err != nil { return localVarReturnValue, nil, err @@ -1100,7 +1100,7 @@ func (a *AdminServiceApiService) GetDescriptionEntity(ctx context.Context, idRes } if localVarHttpResponse.StatusCode == 200 { - var v AdminDescriptionEntity + var v AdminWorkflowAttributesDeleteResponse err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -1117,28 +1117,31 @@ func (a *AdminServiceApiService) GetDescriptionEntity(ctx context.Context, idRes } /* -AdminServiceApiService Fetches a :ref:`ref_flyteidl.admin.Execution`. +AdminServiceApiService Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param idProject Name of the project the resource belongs to. - * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. - * @param idName User or system provided value for the resource. + * @param org Optional, org key applied to the attributes. + * @param project Unique project id which this set of attributes references. +required + * @param domain Unique domain id which this set of attributes references. +required + * @param workflow Workflow name which this set of attributes references. +required + * @param body -@return AdminExecution +@return AdminWorkflowAttributesDeleteResponse */ -func (a *AdminServiceApiService) GetExecution(ctx context.Context, idProject string, idDomain string, idName string) (AdminExecution, *http.Response, error) { +func (a *AdminServiceApiService) DeleteWorkflowAttributes2(ctx context.Context, org string, project string, domain string, workflow string, body AdminWorkflowAttributesDeleteRequest) (AdminWorkflowAttributesDeleteResponse, *http.Response, error) { var ( - localVarHttpMethod = strings.ToUpper("Get") + localVarHttpMethod = strings.ToUpper("Delete") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminExecution + localVarReturnValue AdminWorkflowAttributesDeleteResponse ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/executions/{id.project}/{id.domain}/{id.name}" - localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) + localVarPath := a.client.cfg.BasePath + "/api/v1/workflow_attributes/org/{org}/{project}/{domain}/{workflow}" + localVarPath = strings.Replace(localVarPath, "{"+"org"+"}", fmt.Sprintf("%v", org), -1) + localVarPath = strings.Replace(localVarPath, "{"+"project"+"}", fmt.Sprintf("%v", project), -1) + localVarPath = strings.Replace(localVarPath, "{"+"domain"+"}", fmt.Sprintf("%v", domain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"workflow"+"}", fmt.Sprintf("%v", workflow), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -1161,6 +1164,8 @@ func (a *AdminServiceApiService) GetExecution(ctx context.Context, idProject str if localVarHttpHeaderAccept != "" { localVarHeaderParams["Accept"] = localVarHttpHeaderAccept } + // body params + localVarPostBody = &body r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) if err != nil { return localVarReturnValue, nil, err @@ -1192,7 +1197,7 @@ func (a *AdminServiceApiService) GetExecution(ctx context.Context, idProject str } if localVarHttpResponse.StatusCode == 200 { - var v AdminExecution + var v AdminWorkflowAttributesDeleteResponse err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -1209,25 +1214,32 @@ func (a *AdminServiceApiService) GetExecution(ctx context.Context, idProject str } /* -AdminServiceApiService Fetches input and output data for a :ref:`ref_flyteidl.admin.Execution`. +AdminServiceApiService Fetch the active version of a :ref:`ref_flyteidl.admin.LaunchPlan`. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). * @param idProject Name of the project the resource belongs to. * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. - * @param idName User or system provided value for the resource. + * @param idName User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' + * @param optional nil or *GetActiveLaunchPlanOpts - Optional Parameters: + * @param "IdOrg" (optional.String) - Optional, org key applied to the resource. -@return AdminWorkflowExecutionGetDataResponse +@return AdminLaunchPlan */ -func (a *AdminServiceApiService) GetExecutionData(ctx context.Context, idProject string, idDomain string, idName string) (AdminWorkflowExecutionGetDataResponse, *http.Response, error) { + +type GetActiveLaunchPlanOpts struct { + IdOrg optional.String +} + +func (a *AdminServiceApiService) GetActiveLaunchPlan(ctx context.Context, idProject string, idDomain string, idName string, localVarOptionals *GetActiveLaunchPlanOpts) (AdminLaunchPlan, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminWorkflowExecutionGetDataResponse + localVarReturnValue AdminLaunchPlan ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/data/executions/{id.project}/{id.domain}/{id.name}" + localVarPath := a.client.cfg.BasePath + "/api/v1/active_launch_plans/{id.project}/{id.domain}/{id.name}" localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) @@ -1236,6 +1248,9 @@ func (a *AdminServiceApiService) GetExecutionData(ctx context.Context, idProject localVarQueryParams := url.Values{} localVarFormParams := url.Values{} + if localVarOptionals != nil && localVarOptionals.IdOrg.IsSet() { + localVarQueryParams.Add("id.org", parameterToString(localVarOptionals.IdOrg.Value(), "")) + } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json"} @@ -1284,7 +1299,7 @@ func (a *AdminServiceApiService) GetExecutionData(ctx context.Context, idProject } if localVarHttpResponse.StatusCode == 200 { - var v AdminWorkflowExecutionGetDataResponse + var v AdminLaunchPlan err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -1301,32 +1316,27 @@ func (a *AdminServiceApiService) GetExecutionData(ctx context.Context, idProject } /* -AdminServiceApiService Fetches runtime metrics for a :ref:`ref_flyteidl.admin.Execution`. +AdminServiceApiService Fetch the active version of a :ref:`ref_flyteidl.admin.LaunchPlan`. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param idOrg Optional, org key applied to the resource. * @param idProject Name of the project the resource belongs to. * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. - * @param idName User or system provided value for the resource. - * @param optional nil or *GetExecutionMetricsOpts - Optional Parameters: - * @param "Depth" (optional.Int32) - depth defines the number of Flyte entity levels to traverse when breaking down execution details. + * @param idName User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' -@return AdminWorkflowExecutionGetMetricsResponse +@return AdminLaunchPlan */ - -type GetExecutionMetricsOpts struct { - Depth optional.Int32 -} - -func (a *AdminServiceApiService) GetExecutionMetrics(ctx context.Context, idProject string, idDomain string, idName string, localVarOptionals *GetExecutionMetricsOpts) (AdminWorkflowExecutionGetMetricsResponse, *http.Response, error) { +func (a *AdminServiceApiService) GetActiveLaunchPlan2(ctx context.Context, idOrg string, idProject string, idDomain string, idName string) (AdminLaunchPlan, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminWorkflowExecutionGetMetricsResponse + localVarReturnValue AdminLaunchPlan ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/metrics/executions/{id.project}/{id.domain}/{id.name}" + localVarPath := a.client.cfg.BasePath + "/api/v1/active_launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name}" + localVarPath = strings.Replace(localVarPath, "{"+"id.org"+"}", fmt.Sprintf("%v", idOrg), -1) localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) @@ -1335,9 +1345,6 @@ func (a *AdminServiceApiService) GetExecutionMetrics(ctx context.Context, idProj localVarQueryParams := url.Values{} localVarFormParams := url.Values{} - if localVarOptionals != nil && localVarOptionals.Depth.IsSet() { - localVarQueryParams.Add("depth", parameterToString(localVarOptionals.Depth.Value(), "")) - } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json"} @@ -1386,7 +1393,7 @@ func (a *AdminServiceApiService) GetExecutionMetrics(ctx context.Context, idProj } if localVarHttpResponse.StatusCode == 200 { - var v AdminWorkflowExecutionGetMetricsResponse + var v AdminLaunchPlan err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -1403,33 +1410,35 @@ func (a *AdminServiceApiService) GetExecutionMetrics(ctx context.Context, idProj } /* -AdminServiceApiService Fetch a :ref:`ref_flyteidl.admin.LaunchPlan` definition. +AdminServiceApiService Fetch a :ref:`ref_flyteidl.admin.DescriptionEntity` object. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param idResourceType Identifies the specific type of resource that this identifier corresponds to. * @param idProject Name of the project the resource belongs to. * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. * @param idName User provided value for the resource. * @param idVersion Specific version of the resource. - * @param optional nil or *GetLaunchPlanOpts - Optional Parameters: - * @param "IdResourceType" (optional.String) - Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + * @param optional nil or *GetDescriptionEntityOpts - Optional Parameters: + * @param "IdOrg" (optional.String) - Optional, org key applied to the resource. -@return AdminLaunchPlan +@return AdminDescriptionEntity */ -type GetLaunchPlanOpts struct { - IdResourceType optional.String +type GetDescriptionEntityOpts struct { + IdOrg optional.String } -func (a *AdminServiceApiService) GetLaunchPlan(ctx context.Context, idProject string, idDomain string, idName string, idVersion string, localVarOptionals *GetLaunchPlanOpts) (AdminLaunchPlan, *http.Response, error) { +func (a *AdminServiceApiService) GetDescriptionEntity(ctx context.Context, idResourceType string, idProject string, idDomain string, idName string, idVersion string, localVarOptionals *GetDescriptionEntityOpts) (AdminDescriptionEntity, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminLaunchPlan + localVarReturnValue AdminDescriptionEntity ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/launch_plans/{id.project}/{id.domain}/{id.name}/{id.version}" + localVarPath := a.client.cfg.BasePath + "/api/v1/description_entities/{id.resource_type}/{id.project}/{id.domain}/{id.name}/{id.version}" + localVarPath = strings.Replace(localVarPath, "{"+"id.resource_type"+"}", fmt.Sprintf("%v", idResourceType), -1) localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) @@ -1439,8 +1448,8 @@ func (a *AdminServiceApiService) GetLaunchPlan(ctx context.Context, idProject st localVarQueryParams := url.Values{} localVarFormParams := url.Values{} - if localVarOptionals != nil && localVarOptionals.IdResourceType.IsSet() { - localVarQueryParams.Add("id.resource_type", parameterToString(localVarOptionals.IdResourceType.Value(), "")) + if localVarOptionals != nil && localVarOptionals.IdOrg.IsSet() { + localVarQueryParams.Add("id.org", parameterToString(localVarOptionals.IdOrg.Value(), "")) } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json"} @@ -1490,7 +1499,7 @@ func (a *AdminServiceApiService) GetLaunchPlan(ctx context.Context, idProject st } if localVarHttpResponse.StatusCode == 200 { - var v AdminLaunchPlan + var v AdminDescriptionEntity err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -1507,30 +1516,34 @@ func (a *AdminServiceApiService) GetLaunchPlan(ctx context.Context, idProject st } /* -AdminServiceApiService Returns a :ref:`ref_flyteidl.admin.NamedEntity` object. +AdminServiceApiService Fetch a :ref:`ref_flyteidl.admin.DescriptionEntity` object. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param resourceType Resource type of the metadata to get. One of Task, Workflow or LaunchPlan. +required + * @param idOrg Optional, org key applied to the resource. + * @param idResourceType Identifies the specific type of resource that this identifier corresponds to. * @param idProject Name of the project the resource belongs to. * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. - * @param idName User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' + * @param idName User provided value for the resource. + * @param idVersion Specific version of the resource. -@return AdminNamedEntity +@return AdminDescriptionEntity */ -func (a *AdminServiceApiService) GetNamedEntity(ctx context.Context, resourceType string, idProject string, idDomain string, idName string) (AdminNamedEntity, *http.Response, error) { +func (a *AdminServiceApiService) GetDescriptionEntity2(ctx context.Context, idOrg string, idResourceType string, idProject string, idDomain string, idName string, idVersion string) (AdminDescriptionEntity, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminNamedEntity + localVarReturnValue AdminDescriptionEntity ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/named_entities/{resource_type}/{id.project}/{id.domain}/{id.name}" - localVarPath = strings.Replace(localVarPath, "{"+"resource_type"+"}", fmt.Sprintf("%v", resourceType), -1) + localVarPath := a.client.cfg.BasePath + "/api/v1/description_entities/org/{id.org}/{id.resource_type}/{id.project}/{id.domain}/{id.name}/{id.version}" + localVarPath = strings.Replace(localVarPath, "{"+"id.org"+"}", fmt.Sprintf("%v", idOrg), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.resource_type"+"}", fmt.Sprintf("%v", idResourceType), -1) localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.version"+"}", fmt.Sprintf("%v", idVersion), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -1584,7 +1597,7 @@ func (a *AdminServiceApiService) GetNamedEntity(ctx context.Context, resourceTyp } if localVarHttpResponse.StatusCode == 200 { - var v AdminNamedEntity + var v AdminDescriptionEntity err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -1601,35 +1614,43 @@ func (a *AdminServiceApiService) GetNamedEntity(ctx context.Context, resourceTyp } /* -AdminServiceApiService Fetches a :ref:`ref_flyteidl.admin.NodeExecution`. +AdminServiceApiService Fetches a :ref:`ref_flyteidl.admin.Execution`. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param idExecutionIdProject Name of the project the resource belongs to. - * @param idExecutionIdDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. - * @param idExecutionIdName User or system provided value for the resource. - * @param idNodeId + * @param idProject Name of the project the resource belongs to. + * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param idName User or system provided value for the resource. + * @param optional nil or *GetExecutionOpts - Optional Parameters: + * @param "IdOrg" (optional.String) - Optional, org key applied to the resource. -@return FlyteidladminNodeExecution +@return AdminExecution */ -func (a *AdminServiceApiService) GetNodeExecution(ctx context.Context, idExecutionIdProject string, idExecutionIdDomain string, idExecutionIdName string, idNodeId string) (FlyteidladminNodeExecution, *http.Response, error) { + +type GetExecutionOpts struct { + IdOrg optional.String +} + +func (a *AdminServiceApiService) GetExecution(ctx context.Context, idProject string, idDomain string, idName string, localVarOptionals *GetExecutionOpts) (AdminExecution, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue FlyteidladminNodeExecution + localVarReturnValue AdminExecution ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/node_executions/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}" - localVarPath = strings.Replace(localVarPath, "{"+"id.execution_id.project"+"}", fmt.Sprintf("%v", idExecutionIdProject), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.execution_id.domain"+"}", fmt.Sprintf("%v", idExecutionIdDomain), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.execution_id.name"+"}", fmt.Sprintf("%v", idExecutionIdName), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.node_id"+"}", fmt.Sprintf("%v", idNodeId), -1) + localVarPath := a.client.cfg.BasePath + "/api/v1/executions/{id.project}/{id.domain}/{id.name}" + localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} localVarFormParams := url.Values{} + if localVarOptionals != nil && localVarOptionals.IdOrg.IsSet() { + localVarQueryParams.Add("id.org", parameterToString(localVarOptionals.IdOrg.Value(), "")) + } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json"} @@ -1678,7 +1699,7 @@ func (a *AdminServiceApiService) GetNodeExecution(ctx context.Context, idExecuti } if localVarHttpResponse.StatusCode == 200 { - var v FlyteidladminNodeExecution + var v AdminExecution err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -1695,30 +1716,30 @@ func (a *AdminServiceApiService) GetNodeExecution(ctx context.Context, idExecuti } /* -AdminServiceApiService Fetches input and output data for a :ref:`ref_flyteidl.admin.NodeExecution`. +AdminServiceApiService Fetches a :ref:`ref_flyteidl.admin.Execution`. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param idExecutionIdProject Name of the project the resource belongs to. - * @param idExecutionIdDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. - * @param idExecutionIdName User or system provided value for the resource. - * @param idNodeId + * @param idOrg Optional, org key applied to the resource. + * @param idProject Name of the project the resource belongs to. + * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param idName User or system provided value for the resource. -@return AdminNodeExecutionGetDataResponse +@return AdminExecution */ -func (a *AdminServiceApiService) GetNodeExecutionData(ctx context.Context, idExecutionIdProject string, idExecutionIdDomain string, idExecutionIdName string, idNodeId string) (AdminNodeExecutionGetDataResponse, *http.Response, error) { +func (a *AdminServiceApiService) GetExecution2(ctx context.Context, idOrg string, idProject string, idDomain string, idName string) (AdminExecution, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminNodeExecutionGetDataResponse + localVarReturnValue AdminExecution ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/data/node_executions/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}" - localVarPath = strings.Replace(localVarPath, "{"+"id.execution_id.project"+"}", fmt.Sprintf("%v", idExecutionIdProject), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.execution_id.domain"+"}", fmt.Sprintf("%v", idExecutionIdDomain), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.execution_id.name"+"}", fmt.Sprintf("%v", idExecutionIdName), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.node_id"+"}", fmt.Sprintf("%v", idNodeId), -1) + localVarPath := a.client.cfg.BasePath + "/api/v1/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}" + localVarPath = strings.Replace(localVarPath, "{"+"id.org"+"}", fmt.Sprintf("%v", idOrg), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -1772,7 +1793,7 @@ func (a *AdminServiceApiService) GetNodeExecutionData(ctx context.Context, idExe } if localVarHttpResponse.StatusCode == 200 { - var v AdminNodeExecutionGetDataResponse + var v AdminExecution err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -1789,38 +1810,42 @@ func (a *AdminServiceApiService) GetNodeExecutionData(ctx context.Context, idExe } /* -AdminServiceApiService Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. +AdminServiceApiService Fetches input and output data for a :ref:`ref_flyteidl.admin.Execution`. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param project Unique project id which this set of attributes references. +required - * @param optional nil or *GetProjectAttributesOpts - Optional Parameters: - * @param "ResourceType" (optional.String) - Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. + * @param idProject Name of the project the resource belongs to. + * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param idName User or system provided value for the resource. + * @param optional nil or *GetExecutionDataOpts - Optional Parameters: + * @param "IdOrg" (optional.String) - Optional, org key applied to the resource. -@return AdminProjectAttributesGetResponse +@return AdminWorkflowExecutionGetDataResponse */ -type GetProjectAttributesOpts struct { - ResourceType optional.String +type GetExecutionDataOpts struct { + IdOrg optional.String } -func (a *AdminServiceApiService) GetProjectAttributes(ctx context.Context, project string, localVarOptionals *GetProjectAttributesOpts) (AdminProjectAttributesGetResponse, *http.Response, error) { +func (a *AdminServiceApiService) GetExecutionData(ctx context.Context, idProject string, idDomain string, idName string, localVarOptionals *GetExecutionDataOpts) (AdminWorkflowExecutionGetDataResponse, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminProjectAttributesGetResponse + localVarReturnValue AdminWorkflowExecutionGetDataResponse ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/project_attributes/{project}" - localVarPath = strings.Replace(localVarPath, "{"+"project"+"}", fmt.Sprintf("%v", project), -1) + localVarPath := a.client.cfg.BasePath + "/api/v1/data/executions/{id.project}/{id.domain}/{id.name}" + localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} localVarFormParams := url.Values{} - if localVarOptionals != nil && localVarOptionals.ResourceType.IsSet() { - localVarQueryParams.Add("resource_type", parameterToString(localVarOptionals.ResourceType.Value(), "")) + if localVarOptionals != nil && localVarOptionals.IdOrg.IsSet() { + localVarQueryParams.Add("id.org", parameterToString(localVarOptionals.IdOrg.Value(), "")) } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json"} @@ -1870,7 +1895,7 @@ func (a *AdminServiceApiService) GetProjectAttributes(ctx context.Context, proje } if localVarHttpResponse.StatusCode == 200 { - var v AdminProjectAttributesGetResponse + var v AdminWorkflowExecutionGetDataResponse err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -1887,41 +1912,35 @@ func (a *AdminServiceApiService) GetProjectAttributes(ctx context.Context, proje } /* -AdminServiceApiService Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. +AdminServiceApiService Fetches input and output data for a :ref:`ref_flyteidl.admin.Execution`. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param project Unique project id which this set of attributes references. +required - * @param domain Unique domain id which this set of attributes references. +required - * @param optional nil or *GetProjectDomainAttributesOpts - Optional Parameters: - * @param "ResourceType" (optional.String) - Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. + * @param idOrg Optional, org key applied to the resource. + * @param idProject Name of the project the resource belongs to. + * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param idName User or system provided value for the resource. -@return AdminProjectDomainAttributesGetResponse +@return AdminWorkflowExecutionGetDataResponse */ - -type GetProjectDomainAttributesOpts struct { - ResourceType optional.String -} - -func (a *AdminServiceApiService) GetProjectDomainAttributes(ctx context.Context, project string, domain string, localVarOptionals *GetProjectDomainAttributesOpts) (AdminProjectDomainAttributesGetResponse, *http.Response, error) { +func (a *AdminServiceApiService) GetExecutionData2(ctx context.Context, idOrg string, idProject string, idDomain string, idName string) (AdminWorkflowExecutionGetDataResponse, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminProjectDomainAttributesGetResponse + localVarReturnValue AdminWorkflowExecutionGetDataResponse ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/project_domain_attributes/{project}/{domain}" - localVarPath = strings.Replace(localVarPath, "{"+"project"+"}", fmt.Sprintf("%v", project), -1) - localVarPath = strings.Replace(localVarPath, "{"+"domain"+"}", fmt.Sprintf("%v", domain), -1) + localVarPath := a.client.cfg.BasePath + "/api/v1/data/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}" + localVarPath = strings.Replace(localVarPath, "{"+"id.org"+"}", fmt.Sprintf("%v", idOrg), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} localVarFormParams := url.Values{} - if localVarOptionals != nil && localVarOptionals.ResourceType.IsSet() { - localVarQueryParams.Add("resource_type", parameterToString(localVarOptionals.ResourceType.Value(), "")) - } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json"} @@ -1970,7 +1989,7 @@ func (a *AdminServiceApiService) GetProjectDomainAttributes(ctx context.Context, } if localVarHttpResponse.StatusCode == 200 { - var v AdminProjectDomainAttributesGetResponse + var v AdminWorkflowExecutionGetDataResponse err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -1987,44 +2006,47 @@ func (a *AdminServiceApiService) GetProjectDomainAttributes(ctx context.Context, } /* -AdminServiceApiService Fetch a :ref:`ref_flyteidl.admin.Task` definition. +AdminServiceApiService Fetches runtime metrics for a :ref:`ref_flyteidl.admin.Execution`. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). * @param idProject Name of the project the resource belongs to. * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. - * @param idName User provided value for the resource. - * @param idVersion Specific version of the resource. - * @param optional nil or *GetTaskOpts - Optional Parameters: - * @param "IdResourceType" (optional.String) - Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + * @param idName User or system provided value for the resource. + * @param optional nil or *GetExecutionMetricsOpts - Optional Parameters: + * @param "IdOrg" (optional.String) - Optional, org key applied to the resource. + * @param "Depth" (optional.Int32) - depth defines the number of Flyte entity levels to traverse when breaking down execution details. -@return AdminTask +@return AdminWorkflowExecutionGetMetricsResponse */ -type GetTaskOpts struct { - IdResourceType optional.String +type GetExecutionMetricsOpts struct { + IdOrg optional.String + Depth optional.Int32 } -func (a *AdminServiceApiService) GetTask(ctx context.Context, idProject string, idDomain string, idName string, idVersion string, localVarOptionals *GetTaskOpts) (AdminTask, *http.Response, error) { +func (a *AdminServiceApiService) GetExecutionMetrics(ctx context.Context, idProject string, idDomain string, idName string, localVarOptionals *GetExecutionMetricsOpts) (AdminWorkflowExecutionGetMetricsResponse, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminTask + localVarReturnValue AdminWorkflowExecutionGetMetricsResponse ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/tasks/{id.project}/{id.domain}/{id.name}/{id.version}" + localVarPath := a.client.cfg.BasePath + "/api/v1/metrics/executions/{id.project}/{id.domain}/{id.name}" localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.version"+"}", fmt.Sprintf("%v", idVersion), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} localVarFormParams := url.Values{} - if localVarOptionals != nil && localVarOptionals.IdResourceType.IsSet() { - localVarQueryParams.Add("id.resource_type", parameterToString(localVarOptionals.IdResourceType.Value(), "")) + if localVarOptionals != nil && localVarOptionals.IdOrg.IsSet() { + localVarQueryParams.Add("id.org", parameterToString(localVarOptionals.IdOrg.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Depth.IsSet() { + localVarQueryParams.Add("depth", parameterToString(localVarOptionals.Depth.Value(), "")) } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json"} @@ -2074,7 +2096,7 @@ func (a *AdminServiceApiService) GetTask(ctx context.Context, idProject string, } if localVarHttpResponse.StatusCode == 200 { - var v AdminTask + var v AdminWorkflowExecutionGetMetricsResponse err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -2091,54 +2113,44 @@ func (a *AdminServiceApiService) GetTask(ctx context.Context, idProject string, } /* -AdminServiceApiService Fetches a :ref:`ref_flyteidl.admin.TaskExecution`. +AdminServiceApiService Fetches runtime metrics for a :ref:`ref_flyteidl.admin.Execution`. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param idNodeExecutionIdExecutionIdProject Name of the project the resource belongs to. - * @param idNodeExecutionIdExecutionIdDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. - * @param idNodeExecutionIdExecutionIdName User or system provided value for the resource. - * @param idNodeExecutionIdNodeId - * @param idTaskIdProject Name of the project the resource belongs to. - * @param idTaskIdDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. - * @param idTaskIdName User provided value for the resource. - * @param idTaskIdVersion Specific version of the resource. - * @param idRetryAttempt - * @param optional nil or *GetTaskExecutionOpts - Optional Parameters: - * @param "IdTaskIdResourceType" (optional.String) - Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + * @param idOrg Optional, org key applied to the resource. + * @param idProject Name of the project the resource belongs to. + * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param idName User or system provided value for the resource. + * @param optional nil or *GetExecutionMetrics2Opts - Optional Parameters: + * @param "Depth" (optional.Int32) - depth defines the number of Flyte entity levels to traverse when breaking down execution details. -@return FlyteidladminTaskExecution +@return AdminWorkflowExecutionGetMetricsResponse */ -type GetTaskExecutionOpts struct { - IdTaskIdResourceType optional.String +type GetExecutionMetrics2Opts struct { + Depth optional.Int32 } -func (a *AdminServiceApiService) GetTaskExecution(ctx context.Context, idNodeExecutionIdExecutionIdProject string, idNodeExecutionIdExecutionIdDomain string, idNodeExecutionIdExecutionIdName string, idNodeExecutionIdNodeId string, idTaskIdProject string, idTaskIdDomain string, idTaskIdName string, idTaskIdVersion string, idRetryAttempt int64, localVarOptionals *GetTaskExecutionOpts) (FlyteidladminTaskExecution, *http.Response, error) { +func (a *AdminServiceApiService) GetExecutionMetrics2(ctx context.Context, idOrg string, idProject string, idDomain string, idName string, localVarOptionals *GetExecutionMetrics2Opts) (AdminWorkflowExecutionGetMetricsResponse, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue FlyteidladminTaskExecution + localVarReturnValue AdminWorkflowExecutionGetMetricsResponse ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/task_executions/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}" - localVarPath = strings.Replace(localVarPath, "{"+"id.node_execution_id.execution_id.project"+"}", fmt.Sprintf("%v", idNodeExecutionIdExecutionIdProject), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.node_execution_id.execution_id.domain"+"}", fmt.Sprintf("%v", idNodeExecutionIdExecutionIdDomain), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.node_execution_id.execution_id.name"+"}", fmt.Sprintf("%v", idNodeExecutionIdExecutionIdName), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.node_execution_id.node_id"+"}", fmt.Sprintf("%v", idNodeExecutionIdNodeId), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.task_id.project"+"}", fmt.Sprintf("%v", idTaskIdProject), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.task_id.domain"+"}", fmt.Sprintf("%v", idTaskIdDomain), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.task_id.name"+"}", fmt.Sprintf("%v", idTaskIdName), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.task_id.version"+"}", fmt.Sprintf("%v", idTaskIdVersion), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.retry_attempt"+"}", fmt.Sprintf("%v", idRetryAttempt), -1) + localVarPath := a.client.cfg.BasePath + "/api/v1/metrics/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}" + localVarPath = strings.Replace(localVarPath, "{"+"id.org"+"}", fmt.Sprintf("%v", idOrg), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} localVarFormParams := url.Values{} - if localVarOptionals != nil && localVarOptionals.IdTaskIdResourceType.IsSet() { - localVarQueryParams.Add("id.task_id.resource_type", parameterToString(localVarOptionals.IdTaskIdResourceType.Value(), "")) + if localVarOptionals != nil && localVarOptionals.Depth.IsSet() { + localVarQueryParams.Add("depth", parameterToString(localVarOptionals.Depth.Value(), "")) } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json"} @@ -2188,7 +2200,7 @@ func (a *AdminServiceApiService) GetTaskExecution(ctx context.Context, idNodeExe } if localVarHttpResponse.StatusCode == 200 { - var v FlyteidladminTaskExecution + var v AdminWorkflowExecutionGetMetricsResponse err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -2205,54 +2217,49 @@ func (a *AdminServiceApiService) GetTaskExecution(ctx context.Context, idNodeExe } /* -AdminServiceApiService Fetches input and output data for a :ref:`ref_flyteidl.admin.TaskExecution`. +AdminServiceApiService Fetch a :ref:`ref_flyteidl.admin.LaunchPlan` definition. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param idNodeExecutionIdExecutionIdProject Name of the project the resource belongs to. - * @param idNodeExecutionIdExecutionIdDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. - * @param idNodeExecutionIdExecutionIdName User or system provided value for the resource. - * @param idNodeExecutionIdNodeId - * @param idTaskIdProject Name of the project the resource belongs to. - * @param idTaskIdDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. - * @param idTaskIdName User provided value for the resource. - * @param idTaskIdVersion Specific version of the resource. - * @param idRetryAttempt - * @param optional nil or *GetTaskExecutionDataOpts - Optional Parameters: - * @param "IdTaskIdResourceType" (optional.String) - Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + * @param idProject Name of the project the resource belongs to. + * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param idName User provided value for the resource. + * @param idVersion Specific version of the resource. + * @param optional nil or *GetLaunchPlanOpts - Optional Parameters: + * @param "IdResourceType" (optional.String) - Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + * @param "IdOrg" (optional.String) - Optional, org key applied to the resource. -@return AdminTaskExecutionGetDataResponse +@return AdminLaunchPlan */ -type GetTaskExecutionDataOpts struct { - IdTaskIdResourceType optional.String +type GetLaunchPlanOpts struct { + IdResourceType optional.String + IdOrg optional.String } -func (a *AdminServiceApiService) GetTaskExecutionData(ctx context.Context, idNodeExecutionIdExecutionIdProject string, idNodeExecutionIdExecutionIdDomain string, idNodeExecutionIdExecutionIdName string, idNodeExecutionIdNodeId string, idTaskIdProject string, idTaskIdDomain string, idTaskIdName string, idTaskIdVersion string, idRetryAttempt int64, localVarOptionals *GetTaskExecutionDataOpts) (AdminTaskExecutionGetDataResponse, *http.Response, error) { +func (a *AdminServiceApiService) GetLaunchPlan(ctx context.Context, idProject string, idDomain string, idName string, idVersion string, localVarOptionals *GetLaunchPlanOpts) (AdminLaunchPlan, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminTaskExecutionGetDataResponse + localVarReturnValue AdminLaunchPlan ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/data/task_executions/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}" - localVarPath = strings.Replace(localVarPath, "{"+"id.node_execution_id.execution_id.project"+"}", fmt.Sprintf("%v", idNodeExecutionIdExecutionIdProject), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.node_execution_id.execution_id.domain"+"}", fmt.Sprintf("%v", idNodeExecutionIdExecutionIdDomain), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.node_execution_id.execution_id.name"+"}", fmt.Sprintf("%v", idNodeExecutionIdExecutionIdName), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.node_execution_id.node_id"+"}", fmt.Sprintf("%v", idNodeExecutionIdNodeId), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.task_id.project"+"}", fmt.Sprintf("%v", idTaskIdProject), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.task_id.domain"+"}", fmt.Sprintf("%v", idTaskIdDomain), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.task_id.name"+"}", fmt.Sprintf("%v", idTaskIdName), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.task_id.version"+"}", fmt.Sprintf("%v", idTaskIdVersion), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.retry_attempt"+"}", fmt.Sprintf("%v", idRetryAttempt), -1) + localVarPath := a.client.cfg.BasePath + "/api/v1/launch_plans/{id.project}/{id.domain}/{id.name}/{id.version}" + localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.version"+"}", fmt.Sprintf("%v", idVersion), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} localVarFormParams := url.Values{} - if localVarOptionals != nil && localVarOptionals.IdTaskIdResourceType.IsSet() { - localVarQueryParams.Add("id.task_id.resource_type", parameterToString(localVarOptionals.IdTaskIdResourceType.Value(), "")) + if localVarOptionals != nil && localVarOptionals.IdResourceType.IsSet() { + localVarQueryParams.Add("id.resource_type", parameterToString(localVarOptionals.IdResourceType.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.IdOrg.IsSet() { + localVarQueryParams.Add("id.org", parameterToString(localVarOptionals.IdOrg.Value(), "")) } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json"} @@ -2302,7 +2309,7 @@ func (a *AdminServiceApiService) GetTaskExecutionData(ctx context.Context, idNod } if localVarHttpResponse.StatusCode == 200 { - var v AdminTaskExecutionGetDataResponse + var v AdminLaunchPlan err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -2319,27 +2326,47 @@ func (a *AdminServiceApiService) GetTaskExecutionData(ctx context.Context, idNod } /* -AdminServiceApiService +AdminServiceApiService Fetch a :ref:`ref_flyteidl.admin.LaunchPlan` definition. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param idOrg Optional, org key applied to the resource. + * @param idProject Name of the project the resource belongs to. + * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param idName User provided value for the resource. + * @param idVersion Specific version of the resource. + * @param optional nil or *GetLaunchPlan2Opts - Optional Parameters: + * @param "IdResourceType" (optional.String) - Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects -@return AdminGetVersionResponse +@return AdminLaunchPlan */ -func (a *AdminServiceApiService) GetVersion(ctx context.Context) (AdminGetVersionResponse, *http.Response, error) { + +type GetLaunchPlan2Opts struct { + IdResourceType optional.String +} + +func (a *AdminServiceApiService) GetLaunchPlan2(ctx context.Context, idOrg string, idProject string, idDomain string, idName string, idVersion string, localVarOptionals *GetLaunchPlan2Opts) (AdminLaunchPlan, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminGetVersionResponse + localVarReturnValue AdminLaunchPlan ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/version" + localVarPath := a.client.cfg.BasePath + "/api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version}" + localVarPath = strings.Replace(localVarPath, "{"+"id.org"+"}", fmt.Sprintf("%v", idOrg), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.version"+"}", fmt.Sprintf("%v", idVersion), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} localVarFormParams := url.Values{} + if localVarOptionals != nil && localVarOptionals.IdResourceType.IsSet() { + localVarQueryParams.Add("id.resource_type", parameterToString(localVarOptionals.IdResourceType.Value(), "")) + } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json"} @@ -2388,7 +2415,7 @@ func (a *AdminServiceApiService) GetVersion(ctx context.Context) (AdminGetVersio } if localVarHttpResponse.StatusCode == 200 { - var v AdminGetVersionResponse + var v AdminLaunchPlan err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -2405,44 +2432,44 @@ func (a *AdminServiceApiService) GetVersion(ctx context.Context) (AdminGetVersio } /* -AdminServiceApiService Fetch a :ref:`ref_flyteidl.admin.Workflow` definition. +AdminServiceApiService Returns a :ref:`ref_flyteidl.admin.NamedEntity` object. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param resourceType Resource type of the metadata to get. One of Task, Workflow or LaunchPlan. +required * @param idProject Name of the project the resource belongs to. * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. - * @param idName User provided value for the resource. - * @param idVersion Specific version of the resource. - * @param optional nil or *GetWorkflowOpts - Optional Parameters: - * @param "IdResourceType" (optional.String) - Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + * @param idName User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' + * @param optional nil or *GetNamedEntityOpts - Optional Parameters: + * @param "IdOrg" (optional.String) - Optional, org key applied to the resource. -@return AdminWorkflow +@return AdminNamedEntity */ -type GetWorkflowOpts struct { - IdResourceType optional.String +type GetNamedEntityOpts struct { + IdOrg optional.String } -func (a *AdminServiceApiService) GetWorkflow(ctx context.Context, idProject string, idDomain string, idName string, idVersion string, localVarOptionals *GetWorkflowOpts) (AdminWorkflow, *http.Response, error) { +func (a *AdminServiceApiService) GetNamedEntity(ctx context.Context, resourceType string, idProject string, idDomain string, idName string, localVarOptionals *GetNamedEntityOpts) (AdminNamedEntity, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminWorkflow + localVarReturnValue AdminNamedEntity ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/workflows/{id.project}/{id.domain}/{id.name}/{id.version}" + localVarPath := a.client.cfg.BasePath + "/api/v1/named_entities/{resource_type}/{id.project}/{id.domain}/{id.name}" + localVarPath = strings.Replace(localVarPath, "{"+"resource_type"+"}", fmt.Sprintf("%v", resourceType), -1) localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.version"+"}", fmt.Sprintf("%v", idVersion), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} localVarFormParams := url.Values{} - if localVarOptionals != nil && localVarOptionals.IdResourceType.IsSet() { - localVarQueryParams.Add("id.resource_type", parameterToString(localVarOptionals.IdResourceType.Value(), "")) + if localVarOptionals != nil && localVarOptionals.IdOrg.IsSet() { + localVarQueryParams.Add("id.org", parameterToString(localVarOptionals.IdOrg.Value(), "")) } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json"} @@ -2492,7 +2519,7 @@ func (a *AdminServiceApiService) GetWorkflow(ctx context.Context, idProject stri } if localVarHttpResponse.StatusCode == 200 { - var v AdminWorkflow + var v AdminNamedEntity err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -2509,43 +2536,37 @@ func (a *AdminServiceApiService) GetWorkflow(ctx context.Context, idProject stri } /* -AdminServiceApiService Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. +AdminServiceApiService Returns a :ref:`ref_flyteidl.admin.NamedEntity` object. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param project Unique project id which this set of attributes references. +required - * @param domain Unique domain id which this set of attributes references. +required - * @param workflow Workflow name which this set of attributes references. +required - * @param optional nil or *GetWorkflowAttributesOpts - Optional Parameters: - * @param "ResourceType" (optional.String) - Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. + * @param resourceType Resource type of the metadata to get. One of Task, Workflow or LaunchPlan. +required + * @param idOrg Optional, org key applied to the resource. + * @param idProject Name of the project the resource belongs to. + * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param idName User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' -@return AdminWorkflowAttributesGetResponse +@return AdminNamedEntity */ - -type GetWorkflowAttributesOpts struct { - ResourceType optional.String -} - -func (a *AdminServiceApiService) GetWorkflowAttributes(ctx context.Context, project string, domain string, workflow string, localVarOptionals *GetWorkflowAttributesOpts) (AdminWorkflowAttributesGetResponse, *http.Response, error) { +func (a *AdminServiceApiService) GetNamedEntity2(ctx context.Context, resourceType string, idOrg string, idProject string, idDomain string, idName string) (AdminNamedEntity, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminWorkflowAttributesGetResponse + localVarReturnValue AdminNamedEntity ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/workflow_attributes/{project}/{domain}/{workflow}" - localVarPath = strings.Replace(localVarPath, "{"+"project"+"}", fmt.Sprintf("%v", project), -1) - localVarPath = strings.Replace(localVarPath, "{"+"domain"+"}", fmt.Sprintf("%v", domain), -1) - localVarPath = strings.Replace(localVarPath, "{"+"workflow"+"}", fmt.Sprintf("%v", workflow), -1) + localVarPath := a.client.cfg.BasePath + "/api/v1/named_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain}/{id.name}" + localVarPath = strings.Replace(localVarPath, "{"+"resource_type"+"}", fmt.Sprintf("%v", resourceType), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.org"+"}", fmt.Sprintf("%v", idOrg), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} localVarFormParams := url.Values{} - if localVarOptionals != nil && localVarOptionals.ResourceType.IsSet() { - localVarQueryParams.Add("resource_type", parameterToString(localVarOptionals.ResourceType.Value(), "")) - } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json"} @@ -2594,7 +2615,7 @@ func (a *AdminServiceApiService) GetWorkflowAttributes(ctx context.Context, proj } if localVarHttpResponse.StatusCode == 200 { - var v AdminWorkflowAttributesGetResponse + var v AdminNamedEntity err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -2611,55 +2632,44 @@ func (a *AdminServiceApiService) GetWorkflowAttributes(ctx context.Context, proj } /* -AdminServiceApiService List active versions of :ref:`ref_flyteidl.admin.LaunchPlan`. +AdminServiceApiService Fetches a :ref:`ref_flyteidl.admin.NodeExecution`. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param project Name of the project that contains the identifiers. +required. - * @param domain Name of the domain the identifiers belongs to within the project. +required. - * @param optional nil or *ListActiveLaunchPlansOpts - Optional Parameters: - * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. - * @param "Token" (optional.String) - In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. - * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. - * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + * @param idExecutionIdProject Name of the project the resource belongs to. + * @param idExecutionIdDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param idExecutionIdName User or system provided value for the resource. + * @param idNodeId + * @param optional nil or *GetNodeExecutionOpts - Optional Parameters: + * @param "IdExecutionIdOrg" (optional.String) - Optional, org key applied to the resource. -@return AdminLaunchPlanList +@return FlyteidladminNodeExecution */ -type ListActiveLaunchPlansOpts struct { - Limit optional.Int64 - Token optional.String - SortByKey optional.String - SortByDirection optional.String +type GetNodeExecutionOpts struct { + IdExecutionIdOrg optional.String } -func (a *AdminServiceApiService) ListActiveLaunchPlans(ctx context.Context, project string, domain string, localVarOptionals *ListActiveLaunchPlansOpts) (AdminLaunchPlanList, *http.Response, error) { +func (a *AdminServiceApiService) GetNodeExecution(ctx context.Context, idExecutionIdProject string, idExecutionIdDomain string, idExecutionIdName string, idNodeId string, localVarOptionals *GetNodeExecutionOpts) (FlyteidladminNodeExecution, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminLaunchPlanList + localVarReturnValue FlyteidladminNodeExecution ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/active_launch_plans/{project}/{domain}" - localVarPath = strings.Replace(localVarPath, "{"+"project"+"}", fmt.Sprintf("%v", project), -1) - localVarPath = strings.Replace(localVarPath, "{"+"domain"+"}", fmt.Sprintf("%v", domain), -1) + localVarPath := a.client.cfg.BasePath + "/api/v1/node_executions/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}" + localVarPath = strings.Replace(localVarPath, "{"+"id.execution_id.project"+"}", fmt.Sprintf("%v", idExecutionIdProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.execution_id.domain"+"}", fmt.Sprintf("%v", idExecutionIdDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.execution_id.name"+"}", fmt.Sprintf("%v", idExecutionIdName), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.node_id"+"}", fmt.Sprintf("%v", idNodeId), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} localVarFormParams := url.Values{} - if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { - localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Token.IsSet() { - localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { - localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { - localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + if localVarOptionals != nil && localVarOptionals.IdExecutionIdOrg.IsSet() { + localVarQueryParams.Add("id.execution_id.org", parameterToString(localVarOptionals.IdExecutionIdOrg.Value(), "")) } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json"} @@ -2709,7 +2719,7 @@ func (a *AdminServiceApiService) ListActiveLaunchPlans(ctx context.Context, proj } if localVarHttpResponse.StatusCode == 200 { - var v AdminLaunchPlanList + var v FlyteidladminNodeExecution err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -2726,65 +2736,37 @@ func (a *AdminServiceApiService) ListActiveLaunchPlans(ctx context.Context, proj } /* -AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. +AdminServiceApiService Fetches a :ref:`ref_flyteidl.admin.NodeExecution`. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param resourceType Identifies the specific type of resource that this identifier corresponds to. - * @param idProject Name of the project the resource belongs to. - * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. - * @param idName User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' - * @param optional nil or *ListDescriptionEntitiesOpts - Optional Parameters: - * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. - * @param "Token" (optional.String) - In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. - * @param "Filters" (optional.String) - Indicates a list of filters passed as string. More info on constructing filters : <Link> +optional. - * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. - * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + * @param idExecutionIdOrg Optional, org key applied to the resource. + * @param idExecutionIdProject Name of the project the resource belongs to. + * @param idExecutionIdDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param idExecutionIdName User or system provided value for the resource. + * @param idNodeId -@return AdminDescriptionEntityList +@return FlyteidladminNodeExecution */ - -type ListDescriptionEntitiesOpts struct { - Limit optional.Int64 - Token optional.String - Filters optional.String - SortByKey optional.String - SortByDirection optional.String -} - -func (a *AdminServiceApiService) ListDescriptionEntities(ctx context.Context, resourceType string, idProject string, idDomain string, idName string, localVarOptionals *ListDescriptionEntitiesOpts) (AdminDescriptionEntityList, *http.Response, error) { +func (a *AdminServiceApiService) GetNodeExecution2(ctx context.Context, idExecutionIdOrg string, idExecutionIdProject string, idExecutionIdDomain string, idExecutionIdName string, idNodeId string) (FlyteidladminNodeExecution, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminDescriptionEntityList + localVarReturnValue FlyteidladminNodeExecution ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/description_entities/{resource_type}/{id.project}/{id.domain}/{id.name}" - localVarPath = strings.Replace(localVarPath, "{"+"resource_type"+"}", fmt.Sprintf("%v", resourceType), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) + localVarPath := a.client.cfg.BasePath + "/api/v1/node_executions/org/{id.execution_id.org}/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}" + localVarPath = strings.Replace(localVarPath, "{"+"id.execution_id.org"+"}", fmt.Sprintf("%v", idExecutionIdOrg), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.execution_id.project"+"}", fmt.Sprintf("%v", idExecutionIdProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.execution_id.domain"+"}", fmt.Sprintf("%v", idExecutionIdDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.execution_id.name"+"}", fmt.Sprintf("%v", idExecutionIdName), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.node_id"+"}", fmt.Sprintf("%v", idNodeId), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} localVarFormParams := url.Values{} - if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { - localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Token.IsSet() { - localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { - localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { - localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { - localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) - } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json"} @@ -2833,7 +2815,7 @@ func (a *AdminServiceApiService) ListDescriptionEntities(ctx context.Context, re } if localVarHttpResponse.StatusCode == 200 { - var v AdminDescriptionEntityList + var v FlyteidladminNodeExecution err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -2850,67 +2832,44 @@ func (a *AdminServiceApiService) ListDescriptionEntities(ctx context.Context, re } /* -AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. +AdminServiceApiService Fetches input and output data for a :ref:`ref_flyteidl.admin.NodeExecution`. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param resourceType Identifies the specific type of resource that this identifier corresponds to. - * @param idProject Name of the project the resource belongs to. - * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. - * @param optional nil or *ListDescriptionEntities2Opts - Optional Parameters: - * @param "IdName" (optional.String) - User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. - * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. - * @param "Token" (optional.String) - In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. - * @param "Filters" (optional.String) - Indicates a list of filters passed as string. More info on constructing filters : <Link> +optional. - * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. - * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + * @param idExecutionIdProject Name of the project the resource belongs to. + * @param idExecutionIdDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param idExecutionIdName User or system provided value for the resource. + * @param idNodeId + * @param optional nil or *GetNodeExecutionDataOpts - Optional Parameters: + * @param "IdExecutionIdOrg" (optional.String) - Optional, org key applied to the resource. -@return AdminDescriptionEntityList +@return AdminNodeExecutionGetDataResponse */ -type ListDescriptionEntities2Opts struct { - IdName optional.String - Limit optional.Int64 - Token optional.String - Filters optional.String - SortByKey optional.String - SortByDirection optional.String +type GetNodeExecutionDataOpts struct { + IdExecutionIdOrg optional.String } -func (a *AdminServiceApiService) ListDescriptionEntities2(ctx context.Context, resourceType string, idProject string, idDomain string, localVarOptionals *ListDescriptionEntities2Opts) (AdminDescriptionEntityList, *http.Response, error) { +func (a *AdminServiceApiService) GetNodeExecutionData(ctx context.Context, idExecutionIdProject string, idExecutionIdDomain string, idExecutionIdName string, idNodeId string, localVarOptionals *GetNodeExecutionDataOpts) (AdminNodeExecutionGetDataResponse, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminDescriptionEntityList + localVarReturnValue AdminNodeExecutionGetDataResponse ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/description_entities/{resource_type}/{id.project}/{id.domain}" - localVarPath = strings.Replace(localVarPath, "{"+"resource_type"+"}", fmt.Sprintf("%v", resourceType), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) + localVarPath := a.client.cfg.BasePath + "/api/v1/data/node_executions/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}" + localVarPath = strings.Replace(localVarPath, "{"+"id.execution_id.project"+"}", fmt.Sprintf("%v", idExecutionIdProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.execution_id.domain"+"}", fmt.Sprintf("%v", idExecutionIdDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.execution_id.name"+"}", fmt.Sprintf("%v", idExecutionIdName), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.node_id"+"}", fmt.Sprintf("%v", idNodeId), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} localVarFormParams := url.Values{} - if localVarOptionals != nil && localVarOptionals.IdName.IsSet() { - localVarQueryParams.Add("id.name", parameterToString(localVarOptionals.IdName.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { - localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Token.IsSet() { - localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { - localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { - localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { - localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + if localVarOptionals != nil && localVarOptionals.IdExecutionIdOrg.IsSet() { + localVarQueryParams.Add("id.execution_id.org", parameterToString(localVarOptionals.IdExecutionIdOrg.Value(), "")) } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json"} @@ -2960,7 +2919,7 @@ func (a *AdminServiceApiService) ListDescriptionEntities2(ctx context.Context, r } if localVarHttpResponse.StatusCode == 200 { - var v AdminDescriptionEntityList + var v AdminNodeExecutionGetDataResponse err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -2977,66 +2936,37 @@ func (a *AdminServiceApiService) ListDescriptionEntities2(ctx context.Context, r } /* -AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.Execution`. +AdminServiceApiService Fetches input and output data for a :ref:`ref_flyteidl.admin.NodeExecution`. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param idProject Name of the project the resource belongs to. - * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. - * @param optional nil or *ListExecutionsOpts - Optional Parameters: - * @param "IdName" (optional.String) - User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. - * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. - * @param "Token" (optional.String) - In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. - * @param "Filters" (optional.String) - Indicates a list of filters passed as string. More info on constructing filters : <Link> +optional. - * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. - * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + * @param idExecutionIdOrg Optional, org key applied to the resource. + * @param idExecutionIdProject Name of the project the resource belongs to. + * @param idExecutionIdDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param idExecutionIdName User or system provided value for the resource. + * @param idNodeId -@return AdminExecutionList +@return AdminNodeExecutionGetDataResponse */ - -type ListExecutionsOpts struct { - IdName optional.String - Limit optional.Int64 - Token optional.String - Filters optional.String - SortByKey optional.String - SortByDirection optional.String -} - -func (a *AdminServiceApiService) ListExecutions(ctx context.Context, idProject string, idDomain string, localVarOptionals *ListExecutionsOpts) (AdminExecutionList, *http.Response, error) { +func (a *AdminServiceApiService) GetNodeExecutionData2(ctx context.Context, idExecutionIdOrg string, idExecutionIdProject string, idExecutionIdDomain string, idExecutionIdName string, idNodeId string) (AdminNodeExecutionGetDataResponse, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminExecutionList + localVarReturnValue AdminNodeExecutionGetDataResponse ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/executions/{id.project}/{id.domain}" - localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) + localVarPath := a.client.cfg.BasePath + "/api/v1/data/node_executions/org/{id.execution_id.org}/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}" + localVarPath = strings.Replace(localVarPath, "{"+"id.execution_id.org"+"}", fmt.Sprintf("%v", idExecutionIdOrg), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.execution_id.project"+"}", fmt.Sprintf("%v", idExecutionIdProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.execution_id.domain"+"}", fmt.Sprintf("%v", idExecutionIdDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.execution_id.name"+"}", fmt.Sprintf("%v", idExecutionIdName), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.node_id"+"}", fmt.Sprintf("%v", idNodeId), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} localVarFormParams := url.Values{} - if localVarOptionals != nil && localVarOptionals.IdName.IsSet() { - localVarQueryParams.Add("id.name", parameterToString(localVarOptionals.IdName.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { - localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Token.IsSet() { - localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { - localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { - localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { - localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) - } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json"} @@ -3085,7 +3015,7 @@ func (a *AdminServiceApiService) ListExecutions(ctx context.Context, idProject s } if localVarHttpResponse.StatusCode == 200 { - var v AdminExecutionList + var v AdminNodeExecutionGetDataResponse err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -3102,60 +3032,43 @@ func (a *AdminServiceApiService) ListExecutions(ctx context.Context, idProject s } /* -AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of launch plan objects. +AdminServiceApiService Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param project Name of the project that contains the identifiers. +required - * @param domain Name of the domain the identifiers belongs to within the project. +required - * @param optional nil or *ListLaunchPlanIdsOpts - Optional Parameters: - * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. - * @param "Token" (optional.String) - In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. - * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. - * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - * @param "Filters" (optional.String) - Indicates a list of filters passed as string. +optional. + * @param project Unique project id which this set of attributes references. +required + * @param optional nil or *GetProjectAttributesOpts - Optional Parameters: + * @param "ResourceType" (optional.String) - Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. + * @param "Org" (optional.String) - Optional, org key applied to the project. -@return AdminNamedEntityIdentifierList +@return AdminProjectAttributesGetResponse */ -type ListLaunchPlanIdsOpts struct { - Limit optional.Int64 - Token optional.String - SortByKey optional.String - SortByDirection optional.String - Filters optional.String +type GetProjectAttributesOpts struct { + ResourceType optional.String + Org optional.String } -func (a *AdminServiceApiService) ListLaunchPlanIds(ctx context.Context, project string, domain string, localVarOptionals *ListLaunchPlanIdsOpts) (AdminNamedEntityIdentifierList, *http.Response, error) { +func (a *AdminServiceApiService) GetProjectAttributes(ctx context.Context, project string, localVarOptionals *GetProjectAttributesOpts) (AdminProjectAttributesGetResponse, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminNamedEntityIdentifierList + localVarReturnValue AdminProjectAttributesGetResponse ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/launch_plan_ids/{project}/{domain}" + localVarPath := a.client.cfg.BasePath + "/api/v1/project_attributes/{project}" localVarPath = strings.Replace(localVarPath, "{"+"project"+"}", fmt.Sprintf("%v", project), -1) - localVarPath = strings.Replace(localVarPath, "{"+"domain"+"}", fmt.Sprintf("%v", domain), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} localVarFormParams := url.Values{} - if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { - localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Token.IsSet() { - localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { - localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { - localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + if localVarOptionals != nil && localVarOptionals.ResourceType.IsSet() { + localVarQueryParams.Add("resource_type", parameterToString(localVarOptionals.ResourceType.Value(), "")) } - if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { - localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) + if localVarOptionals != nil && localVarOptionals.Org.IsSet() { + localVarQueryParams.Add("org", parameterToString(localVarOptionals.Org.Value(), "")) } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json"} @@ -3205,7 +3118,7 @@ func (a *AdminServiceApiService) ListLaunchPlanIds(ctx context.Context, project } if localVarHttpResponse.StatusCode == 200 { - var v AdminNamedEntityIdentifierList + var v AdminProjectAttributesGetResponse err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -3222,62 +3135,40 @@ func (a *AdminServiceApiService) ListLaunchPlanIds(ctx context.Context, project } /* -AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. +AdminServiceApiService Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param idProject Name of the project the resource belongs to. - * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. - * @param idName User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' - * @param optional nil or *ListLaunchPlansOpts - Optional Parameters: - * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. - * @param "Token" (optional.String) - In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. - * @param "Filters" (optional.String) - Indicates a list of filters passed as string. More info on constructing filters : <Link> +optional. - * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. - * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + * @param org Optional, org key applied to the project. + * @param project Unique project id which this set of attributes references. +required + * @param optional nil or *GetProjectAttributes2Opts - Optional Parameters: + * @param "ResourceType" (optional.String) - Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. -@return AdminLaunchPlanList +@return AdminProjectAttributesGetResponse */ -type ListLaunchPlansOpts struct { - Limit optional.Int64 - Token optional.String - Filters optional.String - SortByKey optional.String - SortByDirection optional.String +type GetProjectAttributes2Opts struct { + ResourceType optional.String } -func (a *AdminServiceApiService) ListLaunchPlans(ctx context.Context, idProject string, idDomain string, idName string, localVarOptionals *ListLaunchPlansOpts) (AdminLaunchPlanList, *http.Response, error) { +func (a *AdminServiceApiService) GetProjectAttributes2(ctx context.Context, org string, project string, localVarOptionals *GetProjectAttributes2Opts) (AdminProjectAttributesGetResponse, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminLaunchPlanList + localVarReturnValue AdminProjectAttributesGetResponse ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/launch_plans/{id.project}/{id.domain}/{id.name}" - localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) + localVarPath := a.client.cfg.BasePath + "/api/v1/project_domain_attributes/org/{org}/{project}" + localVarPath = strings.Replace(localVarPath, "{"+"org"+"}", fmt.Sprintf("%v", org), -1) + localVarPath = strings.Replace(localVarPath, "{"+"project"+"}", fmt.Sprintf("%v", project), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} localVarFormParams := url.Values{} - if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { - localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Token.IsSet() { - localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { - localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { - localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { - localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + if localVarOptionals != nil && localVarOptionals.ResourceType.IsSet() { + localVarQueryParams.Add("resource_type", parameterToString(localVarOptionals.ResourceType.Value(), "")) } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json"} @@ -3327,7 +3218,7 @@ func (a *AdminServiceApiService) ListLaunchPlans(ctx context.Context, idProject } if localVarHttpResponse.StatusCode == 200 { - var v AdminLaunchPlanList + var v AdminProjectAttributesGetResponse err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -3344,65 +3235,45 @@ func (a *AdminServiceApiService) ListLaunchPlans(ctx context.Context, idProject } /* -AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. +AdminServiceApiService Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param idProject Name of the project the resource belongs to. - * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. - * @param optional nil or *ListLaunchPlans2Opts - Optional Parameters: - * @param "IdName" (optional.String) - User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. - * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. - * @param "Token" (optional.String) - In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. - * @param "Filters" (optional.String) - Indicates a list of filters passed as string. More info on constructing filters : <Link> +optional. - * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. - * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + * @param project Unique project id which this set of attributes references. +required + * @param domain Unique domain id which this set of attributes references. +required + * @param optional nil or *GetProjectDomainAttributesOpts - Optional Parameters: + * @param "ResourceType" (optional.String) - Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. + * @param "Org" (optional.String) - Optional, org key applied to the attributes. -@return AdminLaunchPlanList +@return AdminProjectDomainAttributesGetResponse */ -type ListLaunchPlans2Opts struct { - IdName optional.String - Limit optional.Int64 - Token optional.String - Filters optional.String - SortByKey optional.String - SortByDirection optional.String +type GetProjectDomainAttributesOpts struct { + ResourceType optional.String + Org optional.String } -func (a *AdminServiceApiService) ListLaunchPlans2(ctx context.Context, idProject string, idDomain string, localVarOptionals *ListLaunchPlans2Opts) (AdminLaunchPlanList, *http.Response, error) { +func (a *AdminServiceApiService) GetProjectDomainAttributes(ctx context.Context, project string, domain string, localVarOptionals *GetProjectDomainAttributesOpts) (AdminProjectDomainAttributesGetResponse, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminLaunchPlanList + localVarReturnValue AdminProjectDomainAttributesGetResponse ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/launch_plans/{id.project}/{id.domain}" - localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) + localVarPath := a.client.cfg.BasePath + "/api/v1/project_domain_attributes/{project}/{domain}" + localVarPath = strings.Replace(localVarPath, "{"+"project"+"}", fmt.Sprintf("%v", project), -1) + localVarPath = strings.Replace(localVarPath, "{"+"domain"+"}", fmt.Sprintf("%v", domain), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} localVarFormParams := url.Values{} - if localVarOptionals != nil && localVarOptionals.IdName.IsSet() { - localVarQueryParams.Add("id.name", parameterToString(localVarOptionals.IdName.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { - localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Token.IsSet() { - localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { - localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { - localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) + if localVarOptionals != nil && localVarOptionals.ResourceType.IsSet() { + localVarQueryParams.Add("resource_type", parameterToString(localVarOptionals.ResourceType.Value(), "")) } - if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { - localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + if localVarOptionals != nil && localVarOptionals.Org.IsSet() { + localVarQueryParams.Add("org", parameterToString(localVarOptionals.Org.Value(), "")) } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json"} @@ -3452,7 +3323,7 @@ func (a *AdminServiceApiService) ListLaunchPlans2(ctx context.Context, idProject } if localVarHttpResponse.StatusCode == 200 { - var v AdminLaunchPlanList + var v AdminProjectDomainAttributesGetResponse err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -3469,29 +3340,35 @@ func (a *AdminServiceApiService) ListLaunchPlans2(ctx context.Context, idProject } /* -AdminServiceApiService Lists custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a specific resource type. +AdminServiceApiService Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param optional nil or *ListMatchableAttributesOpts - Optional Parameters: - * @param "ResourceType" (optional.String) - +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. + * @param org Optional, org key applied to the attributes. + * @param project Unique project id which this set of attributes references. +required + * @param domain Unique domain id which this set of attributes references. +required + * @param optional nil or *GetProjectDomainAttributes2Opts - Optional Parameters: + * @param "ResourceType" (optional.String) - Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. -@return AdminListMatchableAttributesResponse +@return AdminProjectDomainAttributesGetResponse */ -type ListMatchableAttributesOpts struct { +type GetProjectDomainAttributes2Opts struct { ResourceType optional.String } -func (a *AdminServiceApiService) ListMatchableAttributes(ctx context.Context, localVarOptionals *ListMatchableAttributesOpts) (AdminListMatchableAttributesResponse, *http.Response, error) { +func (a *AdminServiceApiService) GetProjectDomainAttributes2(ctx context.Context, org string, project string, domain string, localVarOptionals *GetProjectDomainAttributes2Opts) (AdminProjectDomainAttributesGetResponse, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminListMatchableAttributesResponse + localVarReturnValue AdminProjectDomainAttributesGetResponse ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/matchable_attributes" + localVarPath := a.client.cfg.BasePath + "/api/v1/project_domain_attributes/org/{org}/{project}/{domain}" + localVarPath = strings.Replace(localVarPath, "{"+"org"+"}", fmt.Sprintf("%v", org), -1) + localVarPath = strings.Replace(localVarPath, "{"+"project"+"}", fmt.Sprintf("%v", project), -1) + localVarPath = strings.Replace(localVarPath, "{"+"domain"+"}", fmt.Sprintf("%v", domain), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -3548,7 +3425,7 @@ func (a *AdminServiceApiService) ListMatchableAttributes(ctx context.Context, lo } if localVarHttpResponse.StatusCode == 200 { - var v AdminListMatchableAttributesResponse + var v AdminProjectDomainAttributesGetResponse err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -3565,62 +3442,49 @@ func (a *AdminServiceApiService) ListMatchableAttributes(ctx context.Context, lo } /* -AdminServiceApiService Returns a list of :ref:`ref_flyteidl.admin.NamedEntity` objects. +AdminServiceApiService Fetch a :ref:`ref_flyteidl.admin.Task` definition. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param resourceType Resource type of the metadata to query. One of Task, Workflow or LaunchPlan. +required - * @param project Name of the project that contains the identifiers. +required - * @param domain Name of the domain the identifiers belongs to within the project. - * @param optional nil or *ListNamedEntitiesOpts - Optional Parameters: - * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. - * @param "Token" (optional.String) - In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. - * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. - * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - * @param "Filters" (optional.String) - Indicates a list of filters passed as string. +optional. + * @param idProject Name of the project the resource belongs to. + * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param idName User provided value for the resource. + * @param idVersion Specific version of the resource. + * @param optional nil or *GetTaskOpts - Optional Parameters: + * @param "IdResourceType" (optional.String) - Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + * @param "IdOrg" (optional.String) - Optional, org key applied to the resource. -@return AdminNamedEntityList +@return AdminTask */ -type ListNamedEntitiesOpts struct { - Limit optional.Int64 - Token optional.String - SortByKey optional.String - SortByDirection optional.String - Filters optional.String +type GetTaskOpts struct { + IdResourceType optional.String + IdOrg optional.String } -func (a *AdminServiceApiService) ListNamedEntities(ctx context.Context, resourceType string, project string, domain string, localVarOptionals *ListNamedEntitiesOpts) (AdminNamedEntityList, *http.Response, error) { +func (a *AdminServiceApiService) GetTask(ctx context.Context, idProject string, idDomain string, idName string, idVersion string, localVarOptionals *GetTaskOpts) (AdminTask, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminNamedEntityList + localVarReturnValue AdminTask ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/named_entities/{resource_type}/{project}/{domain}" - localVarPath = strings.Replace(localVarPath, "{"+"resource_type"+"}", fmt.Sprintf("%v", resourceType), -1) - localVarPath = strings.Replace(localVarPath, "{"+"project"+"}", fmt.Sprintf("%v", project), -1) - localVarPath = strings.Replace(localVarPath, "{"+"domain"+"}", fmt.Sprintf("%v", domain), -1) + localVarPath := a.client.cfg.BasePath + "/api/v1/tasks/{id.project}/{id.domain}/{id.name}/{id.version}" + localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.version"+"}", fmt.Sprintf("%v", idVersion), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} localVarFormParams := url.Values{} - if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { - localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Token.IsSet() { - localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { - localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { - localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + if localVarOptionals != nil && localVarOptionals.IdResourceType.IsSet() { + localVarQueryParams.Add("id.resource_type", parameterToString(localVarOptionals.IdResourceType.Value(), "")) } - if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { - localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) + if localVarOptionals != nil && localVarOptionals.IdOrg.IsSet() { + localVarQueryParams.Add("id.org", parameterToString(localVarOptionals.IdOrg.Value(), "")) } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json"} @@ -3670,7 +3534,7 @@ func (a *AdminServiceApiService) ListNamedEntities(ctx context.Context, resource } if localVarHttpResponse.StatusCode == 200 { - var v AdminNamedEntityList + var v AdminTask err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -3687,67 +3551,46 @@ func (a *AdminServiceApiService) ListNamedEntities(ctx context.Context, resource } /* -AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution`. +AdminServiceApiService Fetch a :ref:`ref_flyteidl.admin.Task` definition. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param workflowExecutionIdProject Name of the project the resource belongs to. - * @param workflowExecutionIdDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. - * @param workflowExecutionIdName User or system provided value for the resource. - * @param optional nil or *ListNodeExecutionsOpts - Optional Parameters: - * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. - * @param "Token" (optional.String) - - * @param "Filters" (optional.String) - Indicates a list of filters passed as string. More info on constructing filters : <Link> +optional. - * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. - * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - * @param "UniqueParentId" (optional.String) - Unique identifier of the parent node in the execution +optional. + * @param idOrg Optional, org key applied to the resource. + * @param idProject Name of the project the resource belongs to. + * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param idName User provided value for the resource. + * @param idVersion Specific version of the resource. + * @param optional nil or *GetTask2Opts - Optional Parameters: + * @param "IdResourceType" (optional.String) - Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects -@return AdminNodeExecutionList +@return AdminTask */ -type ListNodeExecutionsOpts struct { - Limit optional.Int64 - Token optional.String - Filters optional.String - SortByKey optional.String - SortByDirection optional.String - UniqueParentId optional.String +type GetTask2Opts struct { + IdResourceType optional.String } -func (a *AdminServiceApiService) ListNodeExecutions(ctx context.Context, workflowExecutionIdProject string, workflowExecutionIdDomain string, workflowExecutionIdName string, localVarOptionals *ListNodeExecutionsOpts) (AdminNodeExecutionList, *http.Response, error) { +func (a *AdminServiceApiService) GetTask2(ctx context.Context, idOrg string, idProject string, idDomain string, idName string, idVersion string, localVarOptionals *GetTask2Opts) (AdminTask, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminNodeExecutionList + localVarReturnValue AdminTask ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/node_executions/{workflow_execution_id.project}/{workflow_execution_id.domain}/{workflow_execution_id.name}" - localVarPath = strings.Replace(localVarPath, "{"+"workflow_execution_id.project"+"}", fmt.Sprintf("%v", workflowExecutionIdProject), -1) - localVarPath = strings.Replace(localVarPath, "{"+"workflow_execution_id.domain"+"}", fmt.Sprintf("%v", workflowExecutionIdDomain), -1) - localVarPath = strings.Replace(localVarPath, "{"+"workflow_execution_id.name"+"}", fmt.Sprintf("%v", workflowExecutionIdName), -1) + localVarPath := a.client.cfg.BasePath + "/api/v1/tasks/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version}" + localVarPath = strings.Replace(localVarPath, "{"+"id.org"+"}", fmt.Sprintf("%v", idOrg), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.version"+"}", fmt.Sprintf("%v", idVersion), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} localVarFormParams := url.Values{} - if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { - localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Token.IsSet() { - localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { - localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { - localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { - localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.UniqueParentId.IsSet() { - localVarQueryParams.Add("unique_parent_id", parameterToString(localVarOptionals.UniqueParentId.Value(), "")) + if localVarOptionals != nil && localVarOptionals.IdResourceType.IsSet() { + localVarQueryParams.Add("id.resource_type", parameterToString(localVarOptionals.IdResourceType.Value(), "")) } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json"} @@ -3797,7 +3640,7 @@ func (a *AdminServiceApiService) ListNodeExecutions(ctx context.Context, workflo } if localVarHttpResponse.StatusCode == 200 { - var v AdminNodeExecutionList + var v AdminTask err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -3814,79 +3657,64 @@ func (a *AdminServiceApiService) ListNodeExecutions(ctx context.Context, workflo } /* -AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution` launched by the reference :ref:`ref_flyteidl.admin.TaskExecution`. +AdminServiceApiService Fetches a :ref:`ref_flyteidl.admin.TaskExecution`. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param taskExecutionIdNodeExecutionIdExecutionIdProject Name of the project the resource belongs to. - * @param taskExecutionIdNodeExecutionIdExecutionIdDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. - * @param taskExecutionIdNodeExecutionIdExecutionIdName User or system provided value for the resource. - * @param taskExecutionIdNodeExecutionIdNodeId - * @param taskExecutionIdTaskIdProject Name of the project the resource belongs to. - * @param taskExecutionIdTaskIdDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. - * @param taskExecutionIdTaskIdName User provided value for the resource. - * @param taskExecutionIdTaskIdVersion Specific version of the resource. - * @param taskExecutionIdRetryAttempt - * @param optional nil or *ListNodeExecutionsForTaskOpts - Optional Parameters: - * @param "TaskExecutionIdTaskIdResourceType" (optional.String) - Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects - * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. - * @param "Token" (optional.String) - In the case of multiple pages of results, the, server-provided token can be used to fetch the next page in a query. +optional. - * @param "Filters" (optional.String) - Indicates a list of filters passed as string. More info on constructing filters : <Link> +optional. - * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. - * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + * @param idNodeExecutionIdExecutionIdProject Name of the project the resource belongs to. + * @param idNodeExecutionIdExecutionIdDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param idNodeExecutionIdExecutionIdName User or system provided value for the resource. + * @param idNodeExecutionIdNodeId + * @param idTaskIdProject Name of the project the resource belongs to. + * @param idTaskIdDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param idTaskIdName User provided value for the resource. + * @param idTaskIdVersion Specific version of the resource. + * @param idRetryAttempt + * @param optional nil or *GetTaskExecutionOpts - Optional Parameters: + * @param "IdTaskIdResourceType" (optional.String) - Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + * @param "IdTaskIdOrg" (optional.String) - Optional, org key applied to the resource. + * @param "IdNodeExecutionIdExecutionIdOrg" (optional.String) - Optional, org key applied to the resource. -@return AdminNodeExecutionList +@return FlyteidladminTaskExecution */ -type ListNodeExecutionsForTaskOpts struct { - TaskExecutionIdTaskIdResourceType optional.String - Limit optional.Int64 - Token optional.String - Filters optional.String - SortByKey optional.String - SortByDirection optional.String +type GetTaskExecutionOpts struct { + IdTaskIdResourceType optional.String + IdTaskIdOrg optional.String + IdNodeExecutionIdExecutionIdOrg optional.String } -func (a *AdminServiceApiService) ListNodeExecutionsForTask(ctx context.Context, taskExecutionIdNodeExecutionIdExecutionIdProject string, taskExecutionIdNodeExecutionIdExecutionIdDomain string, taskExecutionIdNodeExecutionIdExecutionIdName string, taskExecutionIdNodeExecutionIdNodeId string, taskExecutionIdTaskIdProject string, taskExecutionIdTaskIdDomain string, taskExecutionIdTaskIdName string, taskExecutionIdTaskIdVersion string, taskExecutionIdRetryAttempt int64, localVarOptionals *ListNodeExecutionsForTaskOpts) (AdminNodeExecutionList, *http.Response, error) { +func (a *AdminServiceApiService) GetTaskExecution(ctx context.Context, idNodeExecutionIdExecutionIdProject string, idNodeExecutionIdExecutionIdDomain string, idNodeExecutionIdExecutionIdName string, idNodeExecutionIdNodeId string, idTaskIdProject string, idTaskIdDomain string, idTaskIdName string, idTaskIdVersion string, idRetryAttempt int64, localVarOptionals *GetTaskExecutionOpts) (FlyteidladminTaskExecution, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminNodeExecutionList + localVarReturnValue FlyteidladminTaskExecution ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/children/task_executions/{task_execution_id.node_execution_id.execution_id.project}/{task_execution_id.node_execution_id.execution_id.domain}/{task_execution_id.node_execution_id.execution_id.name}/{task_execution_id.node_execution_id.node_id}/{task_execution_id.task_id.project}/{task_execution_id.task_id.domain}/{task_execution_id.task_id.name}/{task_execution_id.task_id.version}/{task_execution_id.retry_attempt}" - localVarPath = strings.Replace(localVarPath, "{"+"task_execution_id.node_execution_id.execution_id.project"+"}", fmt.Sprintf("%v", taskExecutionIdNodeExecutionIdExecutionIdProject), -1) - localVarPath = strings.Replace(localVarPath, "{"+"task_execution_id.node_execution_id.execution_id.domain"+"}", fmt.Sprintf("%v", taskExecutionIdNodeExecutionIdExecutionIdDomain), -1) - localVarPath = strings.Replace(localVarPath, "{"+"task_execution_id.node_execution_id.execution_id.name"+"}", fmt.Sprintf("%v", taskExecutionIdNodeExecutionIdExecutionIdName), -1) - localVarPath = strings.Replace(localVarPath, "{"+"task_execution_id.node_execution_id.node_id"+"}", fmt.Sprintf("%v", taskExecutionIdNodeExecutionIdNodeId), -1) - localVarPath = strings.Replace(localVarPath, "{"+"task_execution_id.task_id.project"+"}", fmt.Sprintf("%v", taskExecutionIdTaskIdProject), -1) - localVarPath = strings.Replace(localVarPath, "{"+"task_execution_id.task_id.domain"+"}", fmt.Sprintf("%v", taskExecutionIdTaskIdDomain), -1) - localVarPath = strings.Replace(localVarPath, "{"+"task_execution_id.task_id.name"+"}", fmt.Sprintf("%v", taskExecutionIdTaskIdName), -1) - localVarPath = strings.Replace(localVarPath, "{"+"task_execution_id.task_id.version"+"}", fmt.Sprintf("%v", taskExecutionIdTaskIdVersion), -1) - localVarPath = strings.Replace(localVarPath, "{"+"task_execution_id.retry_attempt"+"}", fmt.Sprintf("%v", taskExecutionIdRetryAttempt), -1) + localVarPath := a.client.cfg.BasePath + "/api/v1/task_executions/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}" + localVarPath = strings.Replace(localVarPath, "{"+"id.node_execution_id.execution_id.project"+"}", fmt.Sprintf("%v", idNodeExecutionIdExecutionIdProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.node_execution_id.execution_id.domain"+"}", fmt.Sprintf("%v", idNodeExecutionIdExecutionIdDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.node_execution_id.execution_id.name"+"}", fmt.Sprintf("%v", idNodeExecutionIdExecutionIdName), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.node_execution_id.node_id"+"}", fmt.Sprintf("%v", idNodeExecutionIdNodeId), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.task_id.project"+"}", fmt.Sprintf("%v", idTaskIdProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.task_id.domain"+"}", fmt.Sprintf("%v", idTaskIdDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.task_id.name"+"}", fmt.Sprintf("%v", idTaskIdName), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.task_id.version"+"}", fmt.Sprintf("%v", idTaskIdVersion), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.retry_attempt"+"}", fmt.Sprintf("%v", idRetryAttempt), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} localVarFormParams := url.Values{} - if localVarOptionals != nil && localVarOptionals.TaskExecutionIdTaskIdResourceType.IsSet() { - localVarQueryParams.Add("task_execution_id.task_id.resource_type", parameterToString(localVarOptionals.TaskExecutionIdTaskIdResourceType.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { - localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Token.IsSet() { - localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { - localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) + if localVarOptionals != nil && localVarOptionals.IdTaskIdResourceType.IsSet() { + localVarQueryParams.Add("id.task_id.resource_type", parameterToString(localVarOptionals.IdTaskIdResourceType.Value(), "")) } - if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { - localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) + if localVarOptionals != nil && localVarOptionals.IdTaskIdOrg.IsSet() { + localVarQueryParams.Add("id.task_id.org", parameterToString(localVarOptionals.IdTaskIdOrg.Value(), "")) } - if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { - localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + if localVarOptionals != nil && localVarOptionals.IdNodeExecutionIdExecutionIdOrg.IsSet() { + localVarQueryParams.Add("id.node_execution_id.execution_id.org", parameterToString(localVarOptionals.IdNodeExecutionIdExecutionIdOrg.Value(), "")) } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json"} @@ -3936,7 +3764,7 @@ func (a *AdminServiceApiService) ListNodeExecutionsForTask(ctx context.Context, } if localVarHttpResponse.StatusCode == 200 { - var v AdminNodeExecutionList + var v FlyteidladminTaskExecution err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -3953,56 +3781,61 @@ func (a *AdminServiceApiService) ListNodeExecutionsForTask(ctx context.Context, } /* -AdminServiceApiService Fetches a list of :ref:`ref_flyteidl.admin.Project` +AdminServiceApiService Fetches a :ref:`ref_flyteidl.admin.TaskExecution`. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param optional nil or *ListProjectsOpts - Optional Parameters: - * @param "Limit" (optional.Int64) - Indicates the number of projects to be returned. +required. - * @param "Token" (optional.String) - In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. - * @param "Filters" (optional.String) - Indicates a list of filters passed as string. More info on constructing filters : <Link> +optional. - * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. - * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + * @param idNodeExecutionIdExecutionIdOrg Optional, org key applied to the resource. + * @param idNodeExecutionIdExecutionIdProject Name of the project the resource belongs to. + * @param idNodeExecutionIdExecutionIdDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param idNodeExecutionIdExecutionIdName User or system provided value for the resource. + * @param idNodeExecutionIdNodeId + * @param idTaskIdProject Name of the project the resource belongs to. + * @param idTaskIdDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param idTaskIdName User provided value for the resource. + * @param idTaskIdVersion Specific version of the resource. + * @param idRetryAttempt + * @param optional nil or *GetTaskExecution2Opts - Optional Parameters: + * @param "IdTaskIdResourceType" (optional.String) - Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + * @param "IdTaskIdOrg" (optional.String) - Optional, org key applied to the resource. -@return AdminProjects +@return FlyteidladminTaskExecution */ -type ListProjectsOpts struct { - Limit optional.Int64 - Token optional.String - Filters optional.String - SortByKey optional.String - SortByDirection optional.String +type GetTaskExecution2Opts struct { + IdTaskIdResourceType optional.String + IdTaskIdOrg optional.String } -func (a *AdminServiceApiService) ListProjects(ctx context.Context, localVarOptionals *ListProjectsOpts) (AdminProjects, *http.Response, error) { +func (a *AdminServiceApiService) GetTaskExecution2(ctx context.Context, idNodeExecutionIdExecutionIdOrg string, idNodeExecutionIdExecutionIdProject string, idNodeExecutionIdExecutionIdDomain string, idNodeExecutionIdExecutionIdName string, idNodeExecutionIdNodeId string, idTaskIdProject string, idTaskIdDomain string, idTaskIdName string, idTaskIdVersion string, idRetryAttempt int64, localVarOptionals *GetTaskExecution2Opts) (FlyteidladminTaskExecution, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminProjects + localVarReturnValue FlyteidladminTaskExecution ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/projects" + localVarPath := a.client.cfg.BasePath + "/api/v1/task_executions/org/{id.node_execution_id.execution_id.org}/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}" + localVarPath = strings.Replace(localVarPath, "{"+"id.node_execution_id.execution_id.org"+"}", fmt.Sprintf("%v", idNodeExecutionIdExecutionIdOrg), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.node_execution_id.execution_id.project"+"}", fmt.Sprintf("%v", idNodeExecutionIdExecutionIdProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.node_execution_id.execution_id.domain"+"}", fmt.Sprintf("%v", idNodeExecutionIdExecutionIdDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.node_execution_id.execution_id.name"+"}", fmt.Sprintf("%v", idNodeExecutionIdExecutionIdName), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.node_execution_id.node_id"+"}", fmt.Sprintf("%v", idNodeExecutionIdNodeId), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.task_id.project"+"}", fmt.Sprintf("%v", idTaskIdProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.task_id.domain"+"}", fmt.Sprintf("%v", idTaskIdDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.task_id.name"+"}", fmt.Sprintf("%v", idTaskIdName), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.task_id.version"+"}", fmt.Sprintf("%v", idTaskIdVersion), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.retry_attempt"+"}", fmt.Sprintf("%v", idRetryAttempt), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} localVarFormParams := url.Values{} - if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { - localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Token.IsSet() { - localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { - localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { - localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) + if localVarOptionals != nil && localVarOptionals.IdTaskIdResourceType.IsSet() { + localVarQueryParams.Add("id.task_id.resource_type", parameterToString(localVarOptionals.IdTaskIdResourceType.Value(), "")) } - if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { - localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + if localVarOptionals != nil && localVarOptionals.IdTaskIdOrg.IsSet() { + localVarQueryParams.Add("id.task_id.org", parameterToString(localVarOptionals.IdTaskIdOrg.Value(), "")) } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json"} @@ -4052,7 +3885,7 @@ func (a *AdminServiceApiService) ListProjects(ctx context.Context, localVarOptio } if localVarHttpResponse.StatusCode == 200 { - var v AdminProjects + var v FlyteidladminTaskExecution err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -4069,64 +3902,64 @@ func (a *AdminServiceApiService) ListProjects(ctx context.Context, localVarOptio } /* -AdminServiceApiService Fetches a list of :ref:`ref_flyteidl.admin.TaskExecution`. +AdminServiceApiService Fetches input and output data for a :ref:`ref_flyteidl.admin.TaskExecution`. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param nodeExecutionIdExecutionIdProject Name of the project the resource belongs to. - * @param nodeExecutionIdExecutionIdDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. - * @param nodeExecutionIdExecutionIdName User or system provided value for the resource. - * @param nodeExecutionIdNodeId - * @param optional nil or *ListTaskExecutionsOpts - Optional Parameters: - * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. - * @param "Token" (optional.String) - In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. - * @param "Filters" (optional.String) - Indicates a list of filters passed as string. More info on constructing filters : <Link> +optional. - * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. - * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + * @param idNodeExecutionIdExecutionIdProject Name of the project the resource belongs to. + * @param idNodeExecutionIdExecutionIdDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param idNodeExecutionIdExecutionIdName User or system provided value for the resource. + * @param idNodeExecutionIdNodeId + * @param idTaskIdProject Name of the project the resource belongs to. + * @param idTaskIdDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param idTaskIdName User provided value for the resource. + * @param idTaskIdVersion Specific version of the resource. + * @param idRetryAttempt + * @param optional nil or *GetTaskExecutionDataOpts - Optional Parameters: + * @param "IdTaskIdResourceType" (optional.String) - Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + * @param "IdTaskIdOrg" (optional.String) - Optional, org key applied to the resource. + * @param "IdNodeExecutionIdExecutionIdOrg" (optional.String) - Optional, org key applied to the resource. -@return AdminTaskExecutionList +@return AdminTaskExecutionGetDataResponse */ -type ListTaskExecutionsOpts struct { - Limit optional.Int64 - Token optional.String - Filters optional.String - SortByKey optional.String - SortByDirection optional.String +type GetTaskExecutionDataOpts struct { + IdTaskIdResourceType optional.String + IdTaskIdOrg optional.String + IdNodeExecutionIdExecutionIdOrg optional.String } -func (a *AdminServiceApiService) ListTaskExecutions(ctx context.Context, nodeExecutionIdExecutionIdProject string, nodeExecutionIdExecutionIdDomain string, nodeExecutionIdExecutionIdName string, nodeExecutionIdNodeId string, localVarOptionals *ListTaskExecutionsOpts) (AdminTaskExecutionList, *http.Response, error) { +func (a *AdminServiceApiService) GetTaskExecutionData(ctx context.Context, idNodeExecutionIdExecutionIdProject string, idNodeExecutionIdExecutionIdDomain string, idNodeExecutionIdExecutionIdName string, idNodeExecutionIdNodeId string, idTaskIdProject string, idTaskIdDomain string, idTaskIdName string, idTaskIdVersion string, idRetryAttempt int64, localVarOptionals *GetTaskExecutionDataOpts) (AdminTaskExecutionGetDataResponse, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminTaskExecutionList + localVarReturnValue AdminTaskExecutionGetDataResponse ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/task_executions/{node_execution_id.execution_id.project}/{node_execution_id.execution_id.domain}/{node_execution_id.execution_id.name}/{node_execution_id.node_id}" - localVarPath = strings.Replace(localVarPath, "{"+"node_execution_id.execution_id.project"+"}", fmt.Sprintf("%v", nodeExecutionIdExecutionIdProject), -1) - localVarPath = strings.Replace(localVarPath, "{"+"node_execution_id.execution_id.domain"+"}", fmt.Sprintf("%v", nodeExecutionIdExecutionIdDomain), -1) - localVarPath = strings.Replace(localVarPath, "{"+"node_execution_id.execution_id.name"+"}", fmt.Sprintf("%v", nodeExecutionIdExecutionIdName), -1) - localVarPath = strings.Replace(localVarPath, "{"+"node_execution_id.node_id"+"}", fmt.Sprintf("%v", nodeExecutionIdNodeId), -1) + localVarPath := a.client.cfg.BasePath + "/api/v1/data/task_executions/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}" + localVarPath = strings.Replace(localVarPath, "{"+"id.node_execution_id.execution_id.project"+"}", fmt.Sprintf("%v", idNodeExecutionIdExecutionIdProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.node_execution_id.execution_id.domain"+"}", fmt.Sprintf("%v", idNodeExecutionIdExecutionIdDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.node_execution_id.execution_id.name"+"}", fmt.Sprintf("%v", idNodeExecutionIdExecutionIdName), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.node_execution_id.node_id"+"}", fmt.Sprintf("%v", idNodeExecutionIdNodeId), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.task_id.project"+"}", fmt.Sprintf("%v", idTaskIdProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.task_id.domain"+"}", fmt.Sprintf("%v", idTaskIdDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.task_id.name"+"}", fmt.Sprintf("%v", idTaskIdName), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.task_id.version"+"}", fmt.Sprintf("%v", idTaskIdVersion), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.retry_attempt"+"}", fmt.Sprintf("%v", idRetryAttempt), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} localVarFormParams := url.Values{} - if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { - localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Token.IsSet() { - localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { - localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) + if localVarOptionals != nil && localVarOptionals.IdTaskIdResourceType.IsSet() { + localVarQueryParams.Add("id.task_id.resource_type", parameterToString(localVarOptionals.IdTaskIdResourceType.Value(), "")) } - if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { - localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) + if localVarOptionals != nil && localVarOptionals.IdTaskIdOrg.IsSet() { + localVarQueryParams.Add("id.task_id.org", parameterToString(localVarOptionals.IdTaskIdOrg.Value(), "")) } - if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { - localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + if localVarOptionals != nil && localVarOptionals.IdNodeExecutionIdExecutionIdOrg.IsSet() { + localVarQueryParams.Add("id.node_execution_id.execution_id.org", parameterToString(localVarOptionals.IdNodeExecutionIdExecutionIdOrg.Value(), "")) } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json"} @@ -4176,7 +4009,7 @@ func (a *AdminServiceApiService) ListTaskExecutions(ctx context.Context, nodeExe } if localVarHttpResponse.StatusCode == 200 { - var v AdminTaskExecutionList + var v AdminTaskExecutionGetDataResponse err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -4193,60 +4026,61 @@ func (a *AdminServiceApiService) ListTaskExecutions(ctx context.Context, nodeExe } /* -AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of task objects. +AdminServiceApiService Fetches input and output data for a :ref:`ref_flyteidl.admin.TaskExecution`. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param project Name of the project that contains the identifiers. +required - * @param domain Name of the domain the identifiers belongs to within the project. +required - * @param optional nil or *ListTaskIdsOpts - Optional Parameters: - * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. - * @param "Token" (optional.String) - In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. - * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. - * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - * @param "Filters" (optional.String) - Indicates a list of filters passed as string. +optional. + * @param idNodeExecutionIdExecutionIdOrg Optional, org key applied to the resource. + * @param idNodeExecutionIdExecutionIdProject Name of the project the resource belongs to. + * @param idNodeExecutionIdExecutionIdDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param idNodeExecutionIdExecutionIdName User or system provided value for the resource. + * @param idNodeExecutionIdNodeId + * @param idTaskIdProject Name of the project the resource belongs to. + * @param idTaskIdDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param idTaskIdName User provided value for the resource. + * @param idTaskIdVersion Specific version of the resource. + * @param idRetryAttempt + * @param optional nil or *GetTaskExecutionData2Opts - Optional Parameters: + * @param "IdTaskIdResourceType" (optional.String) - Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + * @param "IdTaskIdOrg" (optional.String) - Optional, org key applied to the resource. -@return AdminNamedEntityIdentifierList +@return AdminTaskExecutionGetDataResponse */ -type ListTaskIdsOpts struct { - Limit optional.Int64 - Token optional.String - SortByKey optional.String - SortByDirection optional.String - Filters optional.String +type GetTaskExecutionData2Opts struct { + IdTaskIdResourceType optional.String + IdTaskIdOrg optional.String } -func (a *AdminServiceApiService) ListTaskIds(ctx context.Context, project string, domain string, localVarOptionals *ListTaskIdsOpts) (AdminNamedEntityIdentifierList, *http.Response, error) { +func (a *AdminServiceApiService) GetTaskExecutionData2(ctx context.Context, idNodeExecutionIdExecutionIdOrg string, idNodeExecutionIdExecutionIdProject string, idNodeExecutionIdExecutionIdDomain string, idNodeExecutionIdExecutionIdName string, idNodeExecutionIdNodeId string, idTaskIdProject string, idTaskIdDomain string, idTaskIdName string, idTaskIdVersion string, idRetryAttempt int64, localVarOptionals *GetTaskExecutionData2Opts) (AdminTaskExecutionGetDataResponse, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminNamedEntityIdentifierList + localVarReturnValue AdminTaskExecutionGetDataResponse ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/task_ids/{project}/{domain}" - localVarPath = strings.Replace(localVarPath, "{"+"project"+"}", fmt.Sprintf("%v", project), -1) - localVarPath = strings.Replace(localVarPath, "{"+"domain"+"}", fmt.Sprintf("%v", domain), -1) + localVarPath := a.client.cfg.BasePath + "/api/v1/data/task_executions/org/{id.node_execution_id.execution_id.org}/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}" + localVarPath = strings.Replace(localVarPath, "{"+"id.node_execution_id.execution_id.org"+"}", fmt.Sprintf("%v", idNodeExecutionIdExecutionIdOrg), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.node_execution_id.execution_id.project"+"}", fmt.Sprintf("%v", idNodeExecutionIdExecutionIdProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.node_execution_id.execution_id.domain"+"}", fmt.Sprintf("%v", idNodeExecutionIdExecutionIdDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.node_execution_id.execution_id.name"+"}", fmt.Sprintf("%v", idNodeExecutionIdExecutionIdName), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.node_execution_id.node_id"+"}", fmt.Sprintf("%v", idNodeExecutionIdNodeId), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.task_id.project"+"}", fmt.Sprintf("%v", idTaskIdProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.task_id.domain"+"}", fmt.Sprintf("%v", idTaskIdDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.task_id.name"+"}", fmt.Sprintf("%v", idTaskIdName), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.task_id.version"+"}", fmt.Sprintf("%v", idTaskIdVersion), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.retry_attempt"+"}", fmt.Sprintf("%v", idRetryAttempt), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} localVarFormParams := url.Values{} - if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { - localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Token.IsSet() { - localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { - localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { - localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + if localVarOptionals != nil && localVarOptionals.IdTaskIdResourceType.IsSet() { + localVarQueryParams.Add("id.task_id.resource_type", parameterToString(localVarOptionals.IdTaskIdResourceType.Value(), "")) } - if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { - localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) + if localVarOptionals != nil && localVarOptionals.IdTaskIdOrg.IsSet() { + localVarQueryParams.Add("id.task_id.org", parameterToString(localVarOptionals.IdTaskIdOrg.Value(), "")) } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json"} @@ -4296,7 +4130,7 @@ func (a *AdminServiceApiService) ListTaskIds(ctx context.Context, project string } if localVarHttpResponse.StatusCode == 200 { - var v AdminNamedEntityIdentifierList + var v AdminTaskExecutionGetDataResponse err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -4313,62 +4147,135 @@ func (a *AdminServiceApiService) ListTaskIds(ctx context.Context, project string } /* -AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions. +AdminServiceApiService * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param idProject Name of the project the resource belongs to. - * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. - * @param idName User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' - * @param optional nil or *ListTasksOpts - Optional Parameters: - * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. - * @param "Token" (optional.String) - In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. - * @param "Filters" (optional.String) - Indicates a list of filters passed as string. More info on constructing filters : <Link> +optional. - * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. - * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. -@return AdminTaskList +@return AdminGetVersionResponse */ +func (a *AdminServiceApiService) GetVersion(ctx context.Context) (AdminGetVersionResponse, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminGetVersionResponse + ) -type ListTasksOpts struct { - Limit optional.Int64 - Token optional.String - Filters optional.String - SortByKey optional.String - SortByDirection optional.String + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/version" + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminGetVersionResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil } -func (a *AdminServiceApiService) ListTasks(ctx context.Context, idProject string, idDomain string, idName string, localVarOptionals *ListTasksOpts) (AdminTaskList, *http.Response, error) { +/* +AdminServiceApiService Fetch a :ref:`ref_flyteidl.admin.Workflow` definition. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param idProject Name of the project the resource belongs to. + * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param idName User provided value for the resource. + * @param idVersion Specific version of the resource. + * @param optional nil or *GetWorkflowOpts - Optional Parameters: + * @param "IdResourceType" (optional.String) - Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + * @param "IdOrg" (optional.String) - Optional, org key applied to the resource. + +@return AdminWorkflow +*/ + +type GetWorkflowOpts struct { + IdResourceType optional.String + IdOrg optional.String +} + +func (a *AdminServiceApiService) GetWorkflow(ctx context.Context, idProject string, idDomain string, idName string, idVersion string, localVarOptionals *GetWorkflowOpts) (AdminWorkflow, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminTaskList + localVarReturnValue AdminWorkflow ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/tasks/{id.project}/{id.domain}/{id.name}" + localVarPath := a.client.cfg.BasePath + "/api/v1/workflows/{id.project}/{id.domain}/{id.name}/{id.version}" localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.version"+"}", fmt.Sprintf("%v", idVersion), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} localVarFormParams := url.Values{} - if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { - localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Token.IsSet() { - localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { - localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { - localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) + if localVarOptionals != nil && localVarOptionals.IdResourceType.IsSet() { + localVarQueryParams.Add("id.resource_type", parameterToString(localVarOptionals.IdResourceType.Value(), "")) } - if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { - localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + if localVarOptionals != nil && localVarOptionals.IdOrg.IsSet() { + localVarQueryParams.Add("id.org", parameterToString(localVarOptionals.IdOrg.Value(), "")) } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json"} @@ -4418,7 +4325,7 @@ func (a *AdminServiceApiService) ListTasks(ctx context.Context, idProject string } if localVarHttpResponse.StatusCode == 200 { - var v AdminTaskList + var v AdminWorkflow err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -4435,65 +4342,46 @@ func (a *AdminServiceApiService) ListTasks(ctx context.Context, idProject string } /* -AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions. +AdminServiceApiService Fetch a :ref:`ref_flyteidl.admin.Workflow` definition. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param idOrg Optional, org key applied to the resource. * @param idProject Name of the project the resource belongs to. * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. - * @param optional nil or *ListTasks2Opts - Optional Parameters: - * @param "IdName" (optional.String) - User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. - * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. - * @param "Token" (optional.String) - In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. - * @param "Filters" (optional.String) - Indicates a list of filters passed as string. More info on constructing filters : <Link> +optional. - * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. - * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + * @param idName User provided value for the resource. + * @param idVersion Specific version of the resource. + * @param optional nil or *GetWorkflow2Opts - Optional Parameters: + * @param "IdResourceType" (optional.String) - Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects -@return AdminTaskList +@return AdminWorkflow */ -type ListTasks2Opts struct { - IdName optional.String - Limit optional.Int64 - Token optional.String - Filters optional.String - SortByKey optional.String - SortByDirection optional.String +type GetWorkflow2Opts struct { + IdResourceType optional.String } -func (a *AdminServiceApiService) ListTasks2(ctx context.Context, idProject string, idDomain string, localVarOptionals *ListTasks2Opts) (AdminTaskList, *http.Response, error) { +func (a *AdminServiceApiService) GetWorkflow2(ctx context.Context, idOrg string, idProject string, idDomain string, idName string, idVersion string, localVarOptionals *GetWorkflow2Opts) (AdminWorkflow, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminTaskList + localVarReturnValue AdminWorkflow ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/tasks/{id.project}/{id.domain}" + localVarPath := a.client.cfg.BasePath + "/api/v1/workflows/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version}" + localVarPath = strings.Replace(localVarPath, "{"+"id.org"+"}", fmt.Sprintf("%v", idOrg), -1) localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.version"+"}", fmt.Sprintf("%v", idVersion), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} localVarFormParams := url.Values{} - if localVarOptionals != nil && localVarOptionals.IdName.IsSet() { - localVarQueryParams.Add("id.name", parameterToString(localVarOptionals.IdName.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { - localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Token.IsSet() { - localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { - localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { - localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { - localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + if localVarOptionals != nil && localVarOptionals.IdResourceType.IsSet() { + localVarQueryParams.Add("id.resource_type", parameterToString(localVarOptionals.IdResourceType.Value(), "")) } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json"} @@ -4543,7 +4431,7 @@ func (a *AdminServiceApiService) ListTasks2(ctx context.Context, idProject strin } if localVarHttpResponse.StatusCode == 200 { - var v AdminTaskList + var v AdminWorkflow err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -4560,60 +4448,47 @@ func (a *AdminServiceApiService) ListTasks2(ctx context.Context, idProject strin } /* -AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of workflow objects. +AdminServiceApiService Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param project Name of the project that contains the identifiers. +required - * @param domain Name of the domain the identifiers belongs to within the project. +required - * @param optional nil or *ListWorkflowIdsOpts - Optional Parameters: - * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. - * @param "Token" (optional.String) - In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. - * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. - * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - * @param "Filters" (optional.String) - Indicates a list of filters passed as string. +optional. + * @param project Unique project id which this set of attributes references. +required + * @param domain Unique domain id which this set of attributes references. +required + * @param workflow Workflow name which this set of attributes references. +required + * @param optional nil or *GetWorkflowAttributesOpts - Optional Parameters: + * @param "ResourceType" (optional.String) - Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. + * @param "Org" (optional.String) - Optional, org key applied to the attributes. -@return AdminNamedEntityIdentifierList +@return AdminWorkflowAttributesGetResponse */ -type ListWorkflowIdsOpts struct { - Limit optional.Int64 - Token optional.String - SortByKey optional.String - SortByDirection optional.String - Filters optional.String +type GetWorkflowAttributesOpts struct { + ResourceType optional.String + Org optional.String } -func (a *AdminServiceApiService) ListWorkflowIds(ctx context.Context, project string, domain string, localVarOptionals *ListWorkflowIdsOpts) (AdminNamedEntityIdentifierList, *http.Response, error) { +func (a *AdminServiceApiService) GetWorkflowAttributes(ctx context.Context, project string, domain string, workflow string, localVarOptionals *GetWorkflowAttributesOpts) (AdminWorkflowAttributesGetResponse, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminNamedEntityIdentifierList + localVarReturnValue AdminWorkflowAttributesGetResponse ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/workflow_ids/{project}/{domain}" + localVarPath := a.client.cfg.BasePath + "/api/v1/workflow_attributes/{project}/{domain}/{workflow}" localVarPath = strings.Replace(localVarPath, "{"+"project"+"}", fmt.Sprintf("%v", project), -1) localVarPath = strings.Replace(localVarPath, "{"+"domain"+"}", fmt.Sprintf("%v", domain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"workflow"+"}", fmt.Sprintf("%v", workflow), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} localVarFormParams := url.Values{} - if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { - localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Token.IsSet() { - localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { - localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { - localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + if localVarOptionals != nil && localVarOptionals.ResourceType.IsSet() { + localVarQueryParams.Add("resource_type", parameterToString(localVarOptionals.ResourceType.Value(), "")) } - if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { - localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) + if localVarOptionals != nil && localVarOptionals.Org.IsSet() { + localVarQueryParams.Add("org", parameterToString(localVarOptionals.Org.Value(), "")) } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json"} @@ -4663,7 +4538,7 @@ func (a *AdminServiceApiService) ListWorkflowIds(ctx context.Context, project st } if localVarHttpResponse.StatusCode == 200 { - var v AdminNamedEntityIdentifierList + var v AdminWorkflowAttributesGetResponse err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -4680,56 +4555,287 @@ func (a *AdminServiceApiService) ListWorkflowIds(ctx context.Context, project st } /* -AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. +AdminServiceApiService Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param idProject Name of the project the resource belongs to. - * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. - * @param idName User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' - * @param optional nil or *ListWorkflowsOpts - Optional Parameters: - * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. - * @param "Token" (optional.String) - In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. - * @param "Filters" (optional.String) - Indicates a list of filters passed as string. More info on constructing filters : <Link> +optional. - * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. - * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + * @param org Optional, org key applied to the attributes. + * @param project Unique project id which this set of attributes references. +required + * @param domain Unique domain id which this set of attributes references. +required + * @param workflow Workflow name which this set of attributes references. +required + * @param optional nil or *GetWorkflowAttributes2Opts - Optional Parameters: + * @param "ResourceType" (optional.String) - Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. -@return AdminWorkflowList +@return AdminWorkflowAttributesGetResponse */ -type ListWorkflowsOpts struct { - Limit optional.Int64 - Token optional.String - Filters optional.String - SortByKey optional.String - SortByDirection optional.String +type GetWorkflowAttributes2Opts struct { + ResourceType optional.String } -func (a *AdminServiceApiService) ListWorkflows(ctx context.Context, idProject string, idDomain string, idName string, localVarOptionals *ListWorkflowsOpts) (AdminWorkflowList, *http.Response, error) { +func (a *AdminServiceApiService) GetWorkflowAttributes2(ctx context.Context, org string, project string, domain string, workflow string, localVarOptionals *GetWorkflowAttributes2Opts) (AdminWorkflowAttributesGetResponse, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminWorkflowList + localVarReturnValue AdminWorkflowAttributesGetResponse ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/workflows/{id.project}/{id.domain}/{id.name}" - localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) + localVarPath := a.client.cfg.BasePath + "/api/v1/workflow_attributes/org/{org}/{project}/{domain}/{workflow}" + localVarPath = strings.Replace(localVarPath, "{"+"org"+"}", fmt.Sprintf("%v", org), -1) + localVarPath = strings.Replace(localVarPath, "{"+"project"+"}", fmt.Sprintf("%v", project), -1) + localVarPath = strings.Replace(localVarPath, "{"+"domain"+"}", fmt.Sprintf("%v", domain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"workflow"+"}", fmt.Sprintf("%v", workflow), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} localVarFormParams := url.Values{} - if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { - localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Token.IsSet() { - localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { - localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) + if localVarOptionals != nil && localVarOptionals.ResourceType.IsSet() { + localVarQueryParams.Add("resource_type", parameterToString(localVarOptionals.ResourceType.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminWorkflowAttributesGetResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService List active versions of :ref:`ref_flyteidl.admin.LaunchPlan`. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param project Name of the project that contains the identifiers. +required. + * @param domain Name of the domain the identifiers belongs to within the project. +required. + * @param optional nil or *ListActiveLaunchPlansOpts - Optional Parameters: + * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. + * @param "Token" (optional.String) - In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. + * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + * @param "Org" (optional.String) - Optional, org key applied to the resource. + +@return AdminLaunchPlanList +*/ + +type ListActiveLaunchPlansOpts struct { + Limit optional.Int64 + Token optional.String + SortByKey optional.String + SortByDirection optional.String + Org optional.String +} + +func (a *AdminServiceApiService) ListActiveLaunchPlans(ctx context.Context, project string, domain string, localVarOptionals *ListActiveLaunchPlansOpts) (AdminLaunchPlanList, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminLaunchPlanList + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/active_launch_plans/{project}/{domain}" + localVarPath = strings.Replace(localVarPath, "{"+"project"+"}", fmt.Sprintf("%v", project), -1) + localVarPath = strings.Replace(localVarPath, "{"+"domain"+"}", fmt.Sprintf("%v", domain), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { + localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Token.IsSet() { + localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { + localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { + localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Org.IsSet() { + localVarQueryParams.Add("org", parameterToString(localVarOptionals.Org.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminLaunchPlanList + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param resourceType Identifies the specific type of resource that this identifier corresponds to. + * @param idProject Name of the project the resource belongs to. + * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param idName User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' + * @param optional nil or *ListDescriptionEntitiesOpts - Optional Parameters: + * @param "IdOrg" (optional.String) - Optional, org key applied to the resource. + * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. + * @param "Token" (optional.String) - In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + * @param "Filters" (optional.String) - Indicates a list of filters passed as string. More info on constructing filters : <Link> +optional. + * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. + * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + +@return AdminDescriptionEntityList +*/ + +type ListDescriptionEntitiesOpts struct { + IdOrg optional.String + Limit optional.Int64 + Token optional.String + Filters optional.String + SortByKey optional.String + SortByDirection optional.String +} + +func (a *AdminServiceApiService) ListDescriptionEntities(ctx context.Context, resourceType string, idProject string, idDomain string, idName string, localVarOptionals *ListDescriptionEntitiesOpts) (AdminDescriptionEntityList, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminDescriptionEntityList + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/description_entities/{resource_type}/{id.project}/{id.domain}/{id.name}" + localVarPath = strings.Replace(localVarPath, "{"+"resource_type"+"}", fmt.Sprintf("%v", resourceType), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.IdOrg.IsSet() { + localVarQueryParams.Add("id.org", parameterToString(localVarOptionals.IdOrg.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { + localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Token.IsSet() { + localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { + localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) } if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) @@ -4785,7 +4891,4841 @@ func (a *AdminServiceApiService) ListWorkflows(ctx context.Context, idProject st } if localVarHttpResponse.StatusCode == 200 { - var v AdminWorkflowList + var v AdminDescriptionEntityList + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param resourceType Identifies the specific type of resource that this identifier corresponds to. + * @param idOrg Optional, org key applied to the resource. + * @param idProject Name of the project the resource belongs to. + * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param idName User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' + * @param optional nil or *ListDescriptionEntities2Opts - Optional Parameters: + * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. + * @param "Token" (optional.String) - In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + * @param "Filters" (optional.String) - Indicates a list of filters passed as string. More info on constructing filters : <Link> +optional. + * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. + * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + +@return AdminDescriptionEntityList +*/ + +type ListDescriptionEntities2Opts struct { + Limit optional.Int64 + Token optional.String + Filters optional.String + SortByKey optional.String + SortByDirection optional.String +} + +func (a *AdminServiceApiService) ListDescriptionEntities2(ctx context.Context, resourceType string, idOrg string, idProject string, idDomain string, idName string, localVarOptionals *ListDescriptionEntities2Opts) (AdminDescriptionEntityList, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminDescriptionEntityList + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/description_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain}/{id.name}" + localVarPath = strings.Replace(localVarPath, "{"+"resource_type"+"}", fmt.Sprintf("%v", resourceType), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.org"+"}", fmt.Sprintf("%v", idOrg), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { + localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Token.IsSet() { + localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { + localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { + localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { + localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminDescriptionEntityList + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param resourceType Identifies the specific type of resource that this identifier corresponds to. + * @param idProject Name of the project the resource belongs to. + * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param optional nil or *ListDescriptionEntities3Opts - Optional Parameters: + * @param "IdName" (optional.String) - User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. + * @param "IdOrg" (optional.String) - Optional, org key applied to the resource. + * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. + * @param "Token" (optional.String) - In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + * @param "Filters" (optional.String) - Indicates a list of filters passed as string. More info on constructing filters : <Link> +optional. + * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. + * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + +@return AdminDescriptionEntityList +*/ + +type ListDescriptionEntities3Opts struct { + IdName optional.String + IdOrg optional.String + Limit optional.Int64 + Token optional.String + Filters optional.String + SortByKey optional.String + SortByDirection optional.String +} + +func (a *AdminServiceApiService) ListDescriptionEntities3(ctx context.Context, resourceType string, idProject string, idDomain string, localVarOptionals *ListDescriptionEntities3Opts) (AdminDescriptionEntityList, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminDescriptionEntityList + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/description_entities/{resource_type}/{id.project}/{id.domain}" + localVarPath = strings.Replace(localVarPath, "{"+"resource_type"+"}", fmt.Sprintf("%v", resourceType), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.IdName.IsSet() { + localVarQueryParams.Add("id.name", parameterToString(localVarOptionals.IdName.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.IdOrg.IsSet() { + localVarQueryParams.Add("id.org", parameterToString(localVarOptionals.IdOrg.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { + localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Token.IsSet() { + localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { + localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { + localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { + localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminDescriptionEntityList + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param resourceType Identifies the specific type of resource that this identifier corresponds to. + * @param idOrg Optional, org key applied to the resource. + * @param idProject Name of the project the resource belongs to. + * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param optional nil or *ListDescriptionEntities4Opts - Optional Parameters: + * @param "IdName" (optional.String) - User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. + * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. + * @param "Token" (optional.String) - In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + * @param "Filters" (optional.String) - Indicates a list of filters passed as string. More info on constructing filters : <Link> +optional. + * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. + * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + +@return AdminDescriptionEntityList +*/ + +type ListDescriptionEntities4Opts struct { + IdName optional.String + Limit optional.Int64 + Token optional.String + Filters optional.String + SortByKey optional.String + SortByDirection optional.String +} + +func (a *AdminServiceApiService) ListDescriptionEntities4(ctx context.Context, resourceType string, idOrg string, idProject string, idDomain string, localVarOptionals *ListDescriptionEntities4Opts) (AdminDescriptionEntityList, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminDescriptionEntityList + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/description_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain}" + localVarPath = strings.Replace(localVarPath, "{"+"resource_type"+"}", fmt.Sprintf("%v", resourceType), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.org"+"}", fmt.Sprintf("%v", idOrg), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.IdName.IsSet() { + localVarQueryParams.Add("id.name", parameterToString(localVarOptionals.IdName.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { + localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Token.IsSet() { + localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { + localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { + localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { + localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminDescriptionEntityList + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.Execution`. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param idProject Name of the project the resource belongs to. + * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param optional nil or *ListExecutionsOpts - Optional Parameters: + * @param "IdName" (optional.String) - User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. + * @param "IdOrg" (optional.String) - Optional, org key applied to the resource. + * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. + * @param "Token" (optional.String) - In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + * @param "Filters" (optional.String) - Indicates a list of filters passed as string. More info on constructing filters : <Link> +optional. + * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. + * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + +@return AdminExecutionList +*/ + +type ListExecutionsOpts struct { + IdName optional.String + IdOrg optional.String + Limit optional.Int64 + Token optional.String + Filters optional.String + SortByKey optional.String + SortByDirection optional.String +} + +func (a *AdminServiceApiService) ListExecutions(ctx context.Context, idProject string, idDomain string, localVarOptionals *ListExecutionsOpts) (AdminExecutionList, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminExecutionList + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/executions/{id.project}/{id.domain}" + localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.IdName.IsSet() { + localVarQueryParams.Add("id.name", parameterToString(localVarOptionals.IdName.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.IdOrg.IsSet() { + localVarQueryParams.Add("id.org", parameterToString(localVarOptionals.IdOrg.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { + localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Token.IsSet() { + localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { + localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { + localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { + localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminExecutionList + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.Execution`. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param idOrg Optional, org key applied to the resource. + * @param idProject Name of the project the resource belongs to. + * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param optional nil or *ListExecutions2Opts - Optional Parameters: + * @param "IdName" (optional.String) - User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. + * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. + * @param "Token" (optional.String) - In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + * @param "Filters" (optional.String) - Indicates a list of filters passed as string. More info on constructing filters : <Link> +optional. + * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. + * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + +@return AdminExecutionList +*/ + +type ListExecutions2Opts struct { + IdName optional.String + Limit optional.Int64 + Token optional.String + Filters optional.String + SortByKey optional.String + SortByDirection optional.String +} + +func (a *AdminServiceApiService) ListExecutions2(ctx context.Context, idOrg string, idProject string, idDomain string, localVarOptionals *ListExecutions2Opts) (AdminExecutionList, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminExecutionList + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/executions/org/{id.org}/{id.project}/{id.domain}" + localVarPath = strings.Replace(localVarPath, "{"+"id.org"+"}", fmt.Sprintf("%v", idOrg), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.IdName.IsSet() { + localVarQueryParams.Add("id.name", parameterToString(localVarOptionals.IdName.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { + localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Token.IsSet() { + localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { + localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { + localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { + localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminExecutionList + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of launch plan objects. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param project Name of the project that contains the identifiers. +required + * @param domain Name of the domain the identifiers belongs to within the project. +required + * @param optional nil or *ListLaunchPlanIdsOpts - Optional Parameters: + * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. + * @param "Token" (optional.String) - In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. + * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + * @param "Filters" (optional.String) - Indicates a list of filters passed as string. +optional. + * @param "Org" (optional.String) - Optional, org key applied to the resource. + +@return AdminNamedEntityIdentifierList +*/ + +type ListLaunchPlanIdsOpts struct { + Limit optional.Int64 + Token optional.String + SortByKey optional.String + SortByDirection optional.String + Filters optional.String + Org optional.String +} + +func (a *AdminServiceApiService) ListLaunchPlanIds(ctx context.Context, project string, domain string, localVarOptionals *ListLaunchPlanIdsOpts) (AdminNamedEntityIdentifierList, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminNamedEntityIdentifierList + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/launch_plan_ids/{project}/{domain}" + localVarPath = strings.Replace(localVarPath, "{"+"project"+"}", fmt.Sprintf("%v", project), -1) + localVarPath = strings.Replace(localVarPath, "{"+"domain"+"}", fmt.Sprintf("%v", domain), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { + localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Token.IsSet() { + localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { + localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { + localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { + localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Org.IsSet() { + localVarQueryParams.Add("org", parameterToString(localVarOptionals.Org.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminNamedEntityIdentifierList + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of launch plan objects. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param org Optional, org key applied to the resource. + * @param project Name of the project that contains the identifiers. +required + * @param domain Name of the domain the identifiers belongs to within the project. +required + * @param optional nil or *ListLaunchPlanIds2Opts - Optional Parameters: + * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. + * @param "Token" (optional.String) - In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. + * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + * @param "Filters" (optional.String) - Indicates a list of filters passed as string. +optional. + +@return AdminNamedEntityIdentifierList +*/ + +type ListLaunchPlanIds2Opts struct { + Limit optional.Int64 + Token optional.String + SortByKey optional.String + SortByDirection optional.String + Filters optional.String +} + +func (a *AdminServiceApiService) ListLaunchPlanIds2(ctx context.Context, org string, project string, domain string, localVarOptionals *ListLaunchPlanIds2Opts) (AdminNamedEntityIdentifierList, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminNamedEntityIdentifierList + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/launch_plan_ids/org/{org}/{project}/{domain}" + localVarPath = strings.Replace(localVarPath, "{"+"org"+"}", fmt.Sprintf("%v", org), -1) + localVarPath = strings.Replace(localVarPath, "{"+"project"+"}", fmt.Sprintf("%v", project), -1) + localVarPath = strings.Replace(localVarPath, "{"+"domain"+"}", fmt.Sprintf("%v", domain), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { + localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Token.IsSet() { + localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { + localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { + localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { + localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminNamedEntityIdentifierList + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param idProject Name of the project the resource belongs to. + * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param idName User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' + * @param optional nil or *ListLaunchPlansOpts - Optional Parameters: + * @param "IdOrg" (optional.String) - Optional, org key applied to the resource. + * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. + * @param "Token" (optional.String) - In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + * @param "Filters" (optional.String) - Indicates a list of filters passed as string. More info on constructing filters : <Link> +optional. + * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. + * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + +@return AdminLaunchPlanList +*/ + +type ListLaunchPlansOpts struct { + IdOrg optional.String + Limit optional.Int64 + Token optional.String + Filters optional.String + SortByKey optional.String + SortByDirection optional.String +} + +func (a *AdminServiceApiService) ListLaunchPlans(ctx context.Context, idProject string, idDomain string, idName string, localVarOptionals *ListLaunchPlansOpts) (AdminLaunchPlanList, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminLaunchPlanList + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/launch_plans/{id.project}/{id.domain}/{id.name}" + localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.IdOrg.IsSet() { + localVarQueryParams.Add("id.org", parameterToString(localVarOptionals.IdOrg.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { + localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Token.IsSet() { + localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { + localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { + localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { + localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminLaunchPlanList + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param idOrg Optional, org key applied to the resource. + * @param idProject Name of the project the resource belongs to. + * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param idName User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' + * @param optional nil or *ListLaunchPlans2Opts - Optional Parameters: + * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. + * @param "Token" (optional.String) - In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + * @param "Filters" (optional.String) - Indicates a list of filters passed as string. More info on constructing filters : <Link> +optional. + * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. + * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + +@return AdminLaunchPlanList +*/ + +type ListLaunchPlans2Opts struct { + Limit optional.Int64 + Token optional.String + Filters optional.String + SortByKey optional.String + SortByDirection optional.String +} + +func (a *AdminServiceApiService) ListLaunchPlans2(ctx context.Context, idOrg string, idProject string, idDomain string, idName string, localVarOptionals *ListLaunchPlans2Opts) (AdminLaunchPlanList, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminLaunchPlanList + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name}" + localVarPath = strings.Replace(localVarPath, "{"+"id.org"+"}", fmt.Sprintf("%v", idOrg), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { + localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Token.IsSet() { + localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { + localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { + localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { + localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminLaunchPlanList + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param idProject Name of the project the resource belongs to. + * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param optional nil or *ListLaunchPlans3Opts - Optional Parameters: + * @param "IdName" (optional.String) - User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. + * @param "IdOrg" (optional.String) - Optional, org key applied to the resource. + * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. + * @param "Token" (optional.String) - In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + * @param "Filters" (optional.String) - Indicates a list of filters passed as string. More info on constructing filters : <Link> +optional. + * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. + * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + +@return AdminLaunchPlanList +*/ + +type ListLaunchPlans3Opts struct { + IdName optional.String + IdOrg optional.String + Limit optional.Int64 + Token optional.String + Filters optional.String + SortByKey optional.String + SortByDirection optional.String +} + +func (a *AdminServiceApiService) ListLaunchPlans3(ctx context.Context, idProject string, idDomain string, localVarOptionals *ListLaunchPlans3Opts) (AdminLaunchPlanList, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminLaunchPlanList + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/launch_plans/{id.project}/{id.domain}" + localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.IdName.IsSet() { + localVarQueryParams.Add("id.name", parameterToString(localVarOptionals.IdName.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.IdOrg.IsSet() { + localVarQueryParams.Add("id.org", parameterToString(localVarOptionals.IdOrg.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { + localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Token.IsSet() { + localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { + localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { + localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { + localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminLaunchPlanList + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param idOrg Optional, org key applied to the resource. + * @param idProject Name of the project the resource belongs to. + * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param optional nil or *ListLaunchPlans4Opts - Optional Parameters: + * @param "IdName" (optional.String) - User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. + * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. + * @param "Token" (optional.String) - In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + * @param "Filters" (optional.String) - Indicates a list of filters passed as string. More info on constructing filters : <Link> +optional. + * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. + * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + +@return AdminLaunchPlanList +*/ + +type ListLaunchPlans4Opts struct { + IdName optional.String + Limit optional.Int64 + Token optional.String + Filters optional.String + SortByKey optional.String + SortByDirection optional.String +} + +func (a *AdminServiceApiService) ListLaunchPlans4(ctx context.Context, idOrg string, idProject string, idDomain string, localVarOptionals *ListLaunchPlans4Opts) (AdminLaunchPlanList, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminLaunchPlanList + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}" + localVarPath = strings.Replace(localVarPath, "{"+"id.org"+"}", fmt.Sprintf("%v", idOrg), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.IdName.IsSet() { + localVarQueryParams.Add("id.name", parameterToString(localVarOptionals.IdName.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { + localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Token.IsSet() { + localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { + localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { + localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { + localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminLaunchPlanList + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Lists custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a specific resource type. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param optional nil or *ListMatchableAttributesOpts - Optional Parameters: + * @param "ResourceType" (optional.String) - +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. + +@return AdminListMatchableAttributesResponse +*/ + +type ListMatchableAttributesOpts struct { + ResourceType optional.String +} + +func (a *AdminServiceApiService) ListMatchableAttributes(ctx context.Context, localVarOptionals *ListMatchableAttributesOpts) (AdminListMatchableAttributesResponse, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminListMatchableAttributesResponse + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/matchable_attributes" + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.ResourceType.IsSet() { + localVarQueryParams.Add("resource_type", parameterToString(localVarOptionals.ResourceType.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminListMatchableAttributesResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Returns a list of :ref:`ref_flyteidl.admin.NamedEntity` objects. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param resourceType Resource type of the metadata to query. One of Task, Workflow or LaunchPlan. +required + * @param project Name of the project that contains the identifiers. +required + * @param domain Name of the domain the identifiers belongs to within the project. + * @param optional nil or *ListNamedEntitiesOpts - Optional Parameters: + * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. + * @param "Token" (optional.String) - In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. + * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + * @param "Filters" (optional.String) - Indicates a list of filters passed as string. +optional. + * @param "Org" (optional.String) - Optional, org key applied to the resource. + +@return AdminNamedEntityList +*/ + +type ListNamedEntitiesOpts struct { + Limit optional.Int64 + Token optional.String + SortByKey optional.String + SortByDirection optional.String + Filters optional.String + Org optional.String +} + +func (a *AdminServiceApiService) ListNamedEntities(ctx context.Context, resourceType string, project string, domain string, localVarOptionals *ListNamedEntitiesOpts) (AdminNamedEntityList, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminNamedEntityList + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/named_entities/{resource_type}/{project}/{domain}" + localVarPath = strings.Replace(localVarPath, "{"+"resource_type"+"}", fmt.Sprintf("%v", resourceType), -1) + localVarPath = strings.Replace(localVarPath, "{"+"project"+"}", fmt.Sprintf("%v", project), -1) + localVarPath = strings.Replace(localVarPath, "{"+"domain"+"}", fmt.Sprintf("%v", domain), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { + localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Token.IsSet() { + localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { + localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { + localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { + localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Org.IsSet() { + localVarQueryParams.Add("org", parameterToString(localVarOptionals.Org.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminNamedEntityList + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Returns a list of :ref:`ref_flyteidl.admin.NamedEntity` objects. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param resourceType Resource type of the metadata to query. One of Task, Workflow or LaunchPlan. +required + * @param org Optional, org key applied to the resource. + * @param project Name of the project that contains the identifiers. +required + * @param domain Name of the domain the identifiers belongs to within the project. + * @param optional nil or *ListNamedEntities2Opts - Optional Parameters: + * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. + * @param "Token" (optional.String) - In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. + * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + * @param "Filters" (optional.String) - Indicates a list of filters passed as string. +optional. + +@return AdminNamedEntityList +*/ + +type ListNamedEntities2Opts struct { + Limit optional.Int64 + Token optional.String + SortByKey optional.String + SortByDirection optional.String + Filters optional.String +} + +func (a *AdminServiceApiService) ListNamedEntities2(ctx context.Context, resourceType string, org string, project string, domain string, localVarOptionals *ListNamedEntities2Opts) (AdminNamedEntityList, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminNamedEntityList + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/named_entities/{resource_type}/org/{org}/{project}/{domain}" + localVarPath = strings.Replace(localVarPath, "{"+"resource_type"+"}", fmt.Sprintf("%v", resourceType), -1) + localVarPath = strings.Replace(localVarPath, "{"+"org"+"}", fmt.Sprintf("%v", org), -1) + localVarPath = strings.Replace(localVarPath, "{"+"project"+"}", fmt.Sprintf("%v", project), -1) + localVarPath = strings.Replace(localVarPath, "{"+"domain"+"}", fmt.Sprintf("%v", domain), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { + localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Token.IsSet() { + localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { + localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { + localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { + localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminNamedEntityList + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution`. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param workflowExecutionIdProject Name of the project the resource belongs to. + * @param workflowExecutionIdDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param workflowExecutionIdName User or system provided value for the resource. + * @param optional nil or *ListNodeExecutionsOpts - Optional Parameters: + * @param "WorkflowExecutionIdOrg" (optional.String) - Optional, org key applied to the resource. + * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. + * @param "Token" (optional.String) - + * @param "Filters" (optional.String) - Indicates a list of filters passed as string. More info on constructing filters : <Link> +optional. + * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. + * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + * @param "UniqueParentId" (optional.String) - Unique identifier of the parent node in the execution +optional. + +@return AdminNodeExecutionList +*/ + +type ListNodeExecutionsOpts struct { + WorkflowExecutionIdOrg optional.String + Limit optional.Int64 + Token optional.String + Filters optional.String + SortByKey optional.String + SortByDirection optional.String + UniqueParentId optional.String +} + +func (a *AdminServiceApiService) ListNodeExecutions(ctx context.Context, workflowExecutionIdProject string, workflowExecutionIdDomain string, workflowExecutionIdName string, localVarOptionals *ListNodeExecutionsOpts) (AdminNodeExecutionList, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminNodeExecutionList + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/node_executions/{workflow_execution_id.project}/{workflow_execution_id.domain}/{workflow_execution_id.name}" + localVarPath = strings.Replace(localVarPath, "{"+"workflow_execution_id.project"+"}", fmt.Sprintf("%v", workflowExecutionIdProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"workflow_execution_id.domain"+"}", fmt.Sprintf("%v", workflowExecutionIdDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"workflow_execution_id.name"+"}", fmt.Sprintf("%v", workflowExecutionIdName), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.WorkflowExecutionIdOrg.IsSet() { + localVarQueryParams.Add("workflow_execution_id.org", parameterToString(localVarOptionals.WorkflowExecutionIdOrg.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { + localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Token.IsSet() { + localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { + localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { + localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { + localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.UniqueParentId.IsSet() { + localVarQueryParams.Add("unique_parent_id", parameterToString(localVarOptionals.UniqueParentId.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminNodeExecutionList + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution`. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param workflowExecutionIdOrg Optional, org key applied to the resource. + * @param workflowExecutionIdProject Name of the project the resource belongs to. + * @param workflowExecutionIdDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param workflowExecutionIdName User or system provided value for the resource. + * @param optional nil or *ListNodeExecutions2Opts - Optional Parameters: + * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. + * @param "Token" (optional.String) - + * @param "Filters" (optional.String) - Indicates a list of filters passed as string. More info on constructing filters : <Link> +optional. + * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. + * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + * @param "UniqueParentId" (optional.String) - Unique identifier of the parent node in the execution +optional. + +@return AdminNodeExecutionList +*/ + +type ListNodeExecutions2Opts struct { + Limit optional.Int64 + Token optional.String + Filters optional.String + SortByKey optional.String + SortByDirection optional.String + UniqueParentId optional.String +} + +func (a *AdminServiceApiService) ListNodeExecutions2(ctx context.Context, workflowExecutionIdOrg string, workflowExecutionIdProject string, workflowExecutionIdDomain string, workflowExecutionIdName string, localVarOptionals *ListNodeExecutions2Opts) (AdminNodeExecutionList, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminNodeExecutionList + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/node_executions/org/{workflow_execution_id.org}/{workflow_execution_id.project}/{workflow_execution_id.domain}/{workflow_execution_id.name}" + localVarPath = strings.Replace(localVarPath, "{"+"workflow_execution_id.org"+"}", fmt.Sprintf("%v", workflowExecutionIdOrg), -1) + localVarPath = strings.Replace(localVarPath, "{"+"workflow_execution_id.project"+"}", fmt.Sprintf("%v", workflowExecutionIdProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"workflow_execution_id.domain"+"}", fmt.Sprintf("%v", workflowExecutionIdDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"workflow_execution_id.name"+"}", fmt.Sprintf("%v", workflowExecutionIdName), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { + localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Token.IsSet() { + localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { + localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { + localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { + localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.UniqueParentId.IsSet() { + localVarQueryParams.Add("unique_parent_id", parameterToString(localVarOptionals.UniqueParentId.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminNodeExecutionList + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution` launched by the reference :ref:`ref_flyteidl.admin.TaskExecution`. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param taskExecutionIdNodeExecutionIdExecutionIdProject Name of the project the resource belongs to. + * @param taskExecutionIdNodeExecutionIdExecutionIdDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param taskExecutionIdNodeExecutionIdExecutionIdName User or system provided value for the resource. + * @param taskExecutionIdNodeExecutionIdNodeId + * @param taskExecutionIdTaskIdProject Name of the project the resource belongs to. + * @param taskExecutionIdTaskIdDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param taskExecutionIdTaskIdName User provided value for the resource. + * @param taskExecutionIdTaskIdVersion Specific version of the resource. + * @param taskExecutionIdRetryAttempt + * @param optional nil or *ListNodeExecutionsForTaskOpts - Optional Parameters: + * @param "TaskExecutionIdTaskIdResourceType" (optional.String) - Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + * @param "TaskExecutionIdTaskIdOrg" (optional.String) - Optional, org key applied to the resource. + * @param "TaskExecutionIdNodeExecutionIdExecutionIdOrg" (optional.String) - Optional, org key applied to the resource. + * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. + * @param "Token" (optional.String) - In the case of multiple pages of results, the, server-provided token can be used to fetch the next page in a query. +optional. + * @param "Filters" (optional.String) - Indicates a list of filters passed as string. More info on constructing filters : <Link> +optional. + * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. + * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + +@return AdminNodeExecutionList +*/ + +type ListNodeExecutionsForTaskOpts struct { + TaskExecutionIdTaskIdResourceType optional.String + TaskExecutionIdTaskIdOrg optional.String + TaskExecutionIdNodeExecutionIdExecutionIdOrg optional.String + Limit optional.Int64 + Token optional.String + Filters optional.String + SortByKey optional.String + SortByDirection optional.String +} + +func (a *AdminServiceApiService) ListNodeExecutionsForTask(ctx context.Context, taskExecutionIdNodeExecutionIdExecutionIdProject string, taskExecutionIdNodeExecutionIdExecutionIdDomain string, taskExecutionIdNodeExecutionIdExecutionIdName string, taskExecutionIdNodeExecutionIdNodeId string, taskExecutionIdTaskIdProject string, taskExecutionIdTaskIdDomain string, taskExecutionIdTaskIdName string, taskExecutionIdTaskIdVersion string, taskExecutionIdRetryAttempt int64, localVarOptionals *ListNodeExecutionsForTaskOpts) (AdminNodeExecutionList, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminNodeExecutionList + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/children/task_executions/{task_execution_id.node_execution_id.execution_id.project}/{task_execution_id.node_execution_id.execution_id.domain}/{task_execution_id.node_execution_id.execution_id.name}/{task_execution_id.node_execution_id.node_id}/{task_execution_id.task_id.project}/{task_execution_id.task_id.domain}/{task_execution_id.task_id.name}/{task_execution_id.task_id.version}/{task_execution_id.retry_attempt}" + localVarPath = strings.Replace(localVarPath, "{"+"task_execution_id.node_execution_id.execution_id.project"+"}", fmt.Sprintf("%v", taskExecutionIdNodeExecutionIdExecutionIdProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"task_execution_id.node_execution_id.execution_id.domain"+"}", fmt.Sprintf("%v", taskExecutionIdNodeExecutionIdExecutionIdDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"task_execution_id.node_execution_id.execution_id.name"+"}", fmt.Sprintf("%v", taskExecutionIdNodeExecutionIdExecutionIdName), -1) + localVarPath = strings.Replace(localVarPath, "{"+"task_execution_id.node_execution_id.node_id"+"}", fmt.Sprintf("%v", taskExecutionIdNodeExecutionIdNodeId), -1) + localVarPath = strings.Replace(localVarPath, "{"+"task_execution_id.task_id.project"+"}", fmt.Sprintf("%v", taskExecutionIdTaskIdProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"task_execution_id.task_id.domain"+"}", fmt.Sprintf("%v", taskExecutionIdTaskIdDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"task_execution_id.task_id.name"+"}", fmt.Sprintf("%v", taskExecutionIdTaskIdName), -1) + localVarPath = strings.Replace(localVarPath, "{"+"task_execution_id.task_id.version"+"}", fmt.Sprintf("%v", taskExecutionIdTaskIdVersion), -1) + localVarPath = strings.Replace(localVarPath, "{"+"task_execution_id.retry_attempt"+"}", fmt.Sprintf("%v", taskExecutionIdRetryAttempt), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.TaskExecutionIdTaskIdResourceType.IsSet() { + localVarQueryParams.Add("task_execution_id.task_id.resource_type", parameterToString(localVarOptionals.TaskExecutionIdTaskIdResourceType.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.TaskExecutionIdTaskIdOrg.IsSet() { + localVarQueryParams.Add("task_execution_id.task_id.org", parameterToString(localVarOptionals.TaskExecutionIdTaskIdOrg.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.TaskExecutionIdNodeExecutionIdExecutionIdOrg.IsSet() { + localVarQueryParams.Add("task_execution_id.node_execution_id.execution_id.org", parameterToString(localVarOptionals.TaskExecutionIdNodeExecutionIdExecutionIdOrg.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { + localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Token.IsSet() { + localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { + localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { + localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { + localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminNodeExecutionList + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution` launched by the reference :ref:`ref_flyteidl.admin.TaskExecution`. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param taskExecutionIdNodeExecutionIdExecutionIdOrg Optional, org key applied to the resource. + * @param taskExecutionIdNodeExecutionIdExecutionIdProject Name of the project the resource belongs to. + * @param taskExecutionIdNodeExecutionIdExecutionIdDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param taskExecutionIdNodeExecutionIdExecutionIdName User or system provided value for the resource. + * @param taskExecutionIdNodeExecutionIdNodeId + * @param taskExecutionIdTaskIdProject Name of the project the resource belongs to. + * @param taskExecutionIdTaskIdDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param taskExecutionIdTaskIdName User provided value for the resource. + * @param taskExecutionIdTaskIdVersion Specific version of the resource. + * @param taskExecutionIdRetryAttempt + * @param optional nil or *ListNodeExecutionsForTask2Opts - Optional Parameters: + * @param "TaskExecutionIdTaskIdResourceType" (optional.String) - Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + * @param "TaskExecutionIdTaskIdOrg" (optional.String) - Optional, org key applied to the resource. + * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. + * @param "Token" (optional.String) - In the case of multiple pages of results, the, server-provided token can be used to fetch the next page in a query. +optional. + * @param "Filters" (optional.String) - Indicates a list of filters passed as string. More info on constructing filters : <Link> +optional. + * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. + * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + +@return AdminNodeExecutionList +*/ + +type ListNodeExecutionsForTask2Opts struct { + TaskExecutionIdTaskIdResourceType optional.String + TaskExecutionIdTaskIdOrg optional.String + Limit optional.Int64 + Token optional.String + Filters optional.String + SortByKey optional.String + SortByDirection optional.String +} + +func (a *AdminServiceApiService) ListNodeExecutionsForTask2(ctx context.Context, taskExecutionIdNodeExecutionIdExecutionIdOrg string, taskExecutionIdNodeExecutionIdExecutionIdProject string, taskExecutionIdNodeExecutionIdExecutionIdDomain string, taskExecutionIdNodeExecutionIdExecutionIdName string, taskExecutionIdNodeExecutionIdNodeId string, taskExecutionIdTaskIdProject string, taskExecutionIdTaskIdDomain string, taskExecutionIdTaskIdName string, taskExecutionIdTaskIdVersion string, taskExecutionIdRetryAttempt int64, localVarOptionals *ListNodeExecutionsForTask2Opts) (AdminNodeExecutionList, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminNodeExecutionList + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/children/task_executions/org/{task_execution_id.node_execution_id.execution_id.org}/{task_execution_id.node_execution_id.execution_id.project}/{task_execution_id.node_execution_id.execution_id.domain}/{task_execution_id.node_execution_id.execution_id.name}/{task_execution_id.node_execution_id.node_id}/{task_execution_id.task_id.project}/{task_execution_id.task_id.domain}/{task_execution_id.task_id.name}/{task_execution_id.task_id.version}/{task_execution_id.retry_attempt}" + localVarPath = strings.Replace(localVarPath, "{"+"task_execution_id.node_execution_id.execution_id.org"+"}", fmt.Sprintf("%v", taskExecutionIdNodeExecutionIdExecutionIdOrg), -1) + localVarPath = strings.Replace(localVarPath, "{"+"task_execution_id.node_execution_id.execution_id.project"+"}", fmt.Sprintf("%v", taskExecutionIdNodeExecutionIdExecutionIdProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"task_execution_id.node_execution_id.execution_id.domain"+"}", fmt.Sprintf("%v", taskExecutionIdNodeExecutionIdExecutionIdDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"task_execution_id.node_execution_id.execution_id.name"+"}", fmt.Sprintf("%v", taskExecutionIdNodeExecutionIdExecutionIdName), -1) + localVarPath = strings.Replace(localVarPath, "{"+"task_execution_id.node_execution_id.node_id"+"}", fmt.Sprintf("%v", taskExecutionIdNodeExecutionIdNodeId), -1) + localVarPath = strings.Replace(localVarPath, "{"+"task_execution_id.task_id.project"+"}", fmt.Sprintf("%v", taskExecutionIdTaskIdProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"task_execution_id.task_id.domain"+"}", fmt.Sprintf("%v", taskExecutionIdTaskIdDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"task_execution_id.task_id.name"+"}", fmt.Sprintf("%v", taskExecutionIdTaskIdName), -1) + localVarPath = strings.Replace(localVarPath, "{"+"task_execution_id.task_id.version"+"}", fmt.Sprintf("%v", taskExecutionIdTaskIdVersion), -1) + localVarPath = strings.Replace(localVarPath, "{"+"task_execution_id.retry_attempt"+"}", fmt.Sprintf("%v", taskExecutionIdRetryAttempt), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.TaskExecutionIdTaskIdResourceType.IsSet() { + localVarQueryParams.Add("task_execution_id.task_id.resource_type", parameterToString(localVarOptionals.TaskExecutionIdTaskIdResourceType.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.TaskExecutionIdTaskIdOrg.IsSet() { + localVarQueryParams.Add("task_execution_id.task_id.org", parameterToString(localVarOptionals.TaskExecutionIdTaskIdOrg.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { + localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Token.IsSet() { + localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { + localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { + localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { + localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminNodeExecutionList + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Fetches a list of :ref:`ref_flyteidl.admin.Project` + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param optional nil or *ListProjectsOpts - Optional Parameters: + * @param "Limit" (optional.Int64) - Indicates the number of projects to be returned. +required. + * @param "Token" (optional.String) - In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + * @param "Filters" (optional.String) - Indicates a list of filters passed as string. More info on constructing filters : <Link> +optional. + * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. + * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + +@return AdminProjects +*/ + +type ListProjectsOpts struct { + Limit optional.Int64 + Token optional.String + Filters optional.String + SortByKey optional.String + SortByDirection optional.String +} + +func (a *AdminServiceApiService) ListProjects(ctx context.Context, localVarOptionals *ListProjectsOpts) (AdminProjects, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminProjects + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/projects" + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { + localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Token.IsSet() { + localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { + localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { + localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { + localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminProjects + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Fetches a list of :ref:`ref_flyteidl.admin.TaskExecution`. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param nodeExecutionIdExecutionIdProject Name of the project the resource belongs to. + * @param nodeExecutionIdExecutionIdDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param nodeExecutionIdExecutionIdName User or system provided value for the resource. + * @param nodeExecutionIdNodeId + * @param optional nil or *ListTaskExecutionsOpts - Optional Parameters: + * @param "NodeExecutionIdExecutionIdOrg" (optional.String) - Optional, org key applied to the resource. + * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. + * @param "Token" (optional.String) - In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + * @param "Filters" (optional.String) - Indicates a list of filters passed as string. More info on constructing filters : <Link> +optional. + * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. + * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + +@return AdminTaskExecutionList +*/ + +type ListTaskExecutionsOpts struct { + NodeExecutionIdExecutionIdOrg optional.String + Limit optional.Int64 + Token optional.String + Filters optional.String + SortByKey optional.String + SortByDirection optional.String +} + +func (a *AdminServiceApiService) ListTaskExecutions(ctx context.Context, nodeExecutionIdExecutionIdProject string, nodeExecutionIdExecutionIdDomain string, nodeExecutionIdExecutionIdName string, nodeExecutionIdNodeId string, localVarOptionals *ListTaskExecutionsOpts) (AdminTaskExecutionList, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminTaskExecutionList + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/task_executions/{node_execution_id.execution_id.project}/{node_execution_id.execution_id.domain}/{node_execution_id.execution_id.name}/{node_execution_id.node_id}" + localVarPath = strings.Replace(localVarPath, "{"+"node_execution_id.execution_id.project"+"}", fmt.Sprintf("%v", nodeExecutionIdExecutionIdProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"node_execution_id.execution_id.domain"+"}", fmt.Sprintf("%v", nodeExecutionIdExecutionIdDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"node_execution_id.execution_id.name"+"}", fmt.Sprintf("%v", nodeExecutionIdExecutionIdName), -1) + localVarPath = strings.Replace(localVarPath, "{"+"node_execution_id.node_id"+"}", fmt.Sprintf("%v", nodeExecutionIdNodeId), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.NodeExecutionIdExecutionIdOrg.IsSet() { + localVarQueryParams.Add("node_execution_id.execution_id.org", parameterToString(localVarOptionals.NodeExecutionIdExecutionIdOrg.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { + localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Token.IsSet() { + localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { + localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { + localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { + localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminTaskExecutionList + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Fetches a list of :ref:`ref_flyteidl.admin.TaskExecution`. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param nodeExecutionIdExecutionIdOrg Optional, org key applied to the resource. + * @param nodeExecutionIdExecutionIdProject Name of the project the resource belongs to. + * @param nodeExecutionIdExecutionIdDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param nodeExecutionIdExecutionIdName User or system provided value for the resource. + * @param nodeExecutionIdNodeId + * @param optional nil or *ListTaskExecutions2Opts - Optional Parameters: + * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. + * @param "Token" (optional.String) - In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + * @param "Filters" (optional.String) - Indicates a list of filters passed as string. More info on constructing filters : <Link> +optional. + * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. + * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + +@return AdminTaskExecutionList +*/ + +type ListTaskExecutions2Opts struct { + Limit optional.Int64 + Token optional.String + Filters optional.String + SortByKey optional.String + SortByDirection optional.String +} + +func (a *AdminServiceApiService) ListTaskExecutions2(ctx context.Context, nodeExecutionIdExecutionIdOrg string, nodeExecutionIdExecutionIdProject string, nodeExecutionIdExecutionIdDomain string, nodeExecutionIdExecutionIdName string, nodeExecutionIdNodeId string, localVarOptionals *ListTaskExecutions2Opts) (AdminTaskExecutionList, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminTaskExecutionList + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/task_executions/org/{node_execution_id.execution_id.org}/{node_execution_id.execution_id.project}/{node_execution_id.execution_id.domain}/{node_execution_id.execution_id.name}/{node_execution_id.node_id}" + localVarPath = strings.Replace(localVarPath, "{"+"node_execution_id.execution_id.org"+"}", fmt.Sprintf("%v", nodeExecutionIdExecutionIdOrg), -1) + localVarPath = strings.Replace(localVarPath, "{"+"node_execution_id.execution_id.project"+"}", fmt.Sprintf("%v", nodeExecutionIdExecutionIdProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"node_execution_id.execution_id.domain"+"}", fmt.Sprintf("%v", nodeExecutionIdExecutionIdDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"node_execution_id.execution_id.name"+"}", fmt.Sprintf("%v", nodeExecutionIdExecutionIdName), -1) + localVarPath = strings.Replace(localVarPath, "{"+"node_execution_id.node_id"+"}", fmt.Sprintf("%v", nodeExecutionIdNodeId), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { + localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Token.IsSet() { + localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { + localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { + localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { + localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminTaskExecutionList + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of task objects. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param project Name of the project that contains the identifiers. +required + * @param domain Name of the domain the identifiers belongs to within the project. +required + * @param optional nil or *ListTaskIdsOpts - Optional Parameters: + * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. + * @param "Token" (optional.String) - In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. + * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + * @param "Filters" (optional.String) - Indicates a list of filters passed as string. +optional. + * @param "Org" (optional.String) - Optional, org key applied to the resource. + +@return AdminNamedEntityIdentifierList +*/ + +type ListTaskIdsOpts struct { + Limit optional.Int64 + Token optional.String + SortByKey optional.String + SortByDirection optional.String + Filters optional.String + Org optional.String +} + +func (a *AdminServiceApiService) ListTaskIds(ctx context.Context, project string, domain string, localVarOptionals *ListTaskIdsOpts) (AdminNamedEntityIdentifierList, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminNamedEntityIdentifierList + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/task_ids/{project}/{domain}" + localVarPath = strings.Replace(localVarPath, "{"+"project"+"}", fmt.Sprintf("%v", project), -1) + localVarPath = strings.Replace(localVarPath, "{"+"domain"+"}", fmt.Sprintf("%v", domain), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { + localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Token.IsSet() { + localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { + localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { + localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { + localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Org.IsSet() { + localVarQueryParams.Add("org", parameterToString(localVarOptionals.Org.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminNamedEntityIdentifierList + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of task objects. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param org Optional, org key applied to the resource. + * @param project Name of the project that contains the identifiers. +required + * @param domain Name of the domain the identifiers belongs to within the project. +required + * @param optional nil or *ListTaskIds2Opts - Optional Parameters: + * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. + * @param "Token" (optional.String) - In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. + * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + * @param "Filters" (optional.String) - Indicates a list of filters passed as string. +optional. + +@return AdminNamedEntityIdentifierList +*/ + +type ListTaskIds2Opts struct { + Limit optional.Int64 + Token optional.String + SortByKey optional.String + SortByDirection optional.String + Filters optional.String +} + +func (a *AdminServiceApiService) ListTaskIds2(ctx context.Context, org string, project string, domain string, localVarOptionals *ListTaskIds2Opts) (AdminNamedEntityIdentifierList, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminNamedEntityIdentifierList + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/tasks/org/{org}/{project}/{domain}" + localVarPath = strings.Replace(localVarPath, "{"+"org"+"}", fmt.Sprintf("%v", org), -1) + localVarPath = strings.Replace(localVarPath, "{"+"project"+"}", fmt.Sprintf("%v", project), -1) + localVarPath = strings.Replace(localVarPath, "{"+"domain"+"}", fmt.Sprintf("%v", domain), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { + localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Token.IsSet() { + localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { + localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { + localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { + localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminNamedEntityIdentifierList + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param idProject Name of the project the resource belongs to. + * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param idName User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' + * @param optional nil or *ListTasksOpts - Optional Parameters: + * @param "IdOrg" (optional.String) - Optional, org key applied to the resource. + * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. + * @param "Token" (optional.String) - In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + * @param "Filters" (optional.String) - Indicates a list of filters passed as string. More info on constructing filters : <Link> +optional. + * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. + * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + +@return AdminTaskList +*/ + +type ListTasksOpts struct { + IdOrg optional.String + Limit optional.Int64 + Token optional.String + Filters optional.String + SortByKey optional.String + SortByDirection optional.String +} + +func (a *AdminServiceApiService) ListTasks(ctx context.Context, idProject string, idDomain string, idName string, localVarOptionals *ListTasksOpts) (AdminTaskList, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminTaskList + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/tasks/{id.project}/{id.domain}/{id.name}" + localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.IdOrg.IsSet() { + localVarQueryParams.Add("id.org", parameterToString(localVarOptionals.IdOrg.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { + localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Token.IsSet() { + localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { + localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { + localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { + localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminTaskList + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param idOrg Optional, org key applied to the resource. + * @param idProject Name of the project the resource belongs to. + * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param idName User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' + * @param optional nil or *ListTasks2Opts - Optional Parameters: + * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. + * @param "Token" (optional.String) - In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + * @param "Filters" (optional.String) - Indicates a list of filters passed as string. More info on constructing filters : <Link> +optional. + * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. + * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + +@return AdminTaskList +*/ + +type ListTasks2Opts struct { + Limit optional.Int64 + Token optional.String + Filters optional.String + SortByKey optional.String + SortByDirection optional.String +} + +func (a *AdminServiceApiService) ListTasks2(ctx context.Context, idOrg string, idProject string, idDomain string, idName string, localVarOptionals *ListTasks2Opts) (AdminTaskList, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminTaskList + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/tasks/org/{id.org}/{id.project}/{id.domain}/{id.name}" + localVarPath = strings.Replace(localVarPath, "{"+"id.org"+"}", fmt.Sprintf("%v", idOrg), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { + localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Token.IsSet() { + localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { + localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { + localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { + localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminTaskList + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param idProject Name of the project the resource belongs to. + * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param optional nil or *ListTasks3Opts - Optional Parameters: + * @param "IdName" (optional.String) - User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. + * @param "IdOrg" (optional.String) - Optional, org key applied to the resource. + * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. + * @param "Token" (optional.String) - In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + * @param "Filters" (optional.String) - Indicates a list of filters passed as string. More info on constructing filters : <Link> +optional. + * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. + * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + +@return AdminTaskList +*/ + +type ListTasks3Opts struct { + IdName optional.String + IdOrg optional.String + Limit optional.Int64 + Token optional.String + Filters optional.String + SortByKey optional.String + SortByDirection optional.String +} + +func (a *AdminServiceApiService) ListTasks3(ctx context.Context, idProject string, idDomain string, localVarOptionals *ListTasks3Opts) (AdminTaskList, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminTaskList + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/tasks/{id.project}/{id.domain}" + localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.IdName.IsSet() { + localVarQueryParams.Add("id.name", parameterToString(localVarOptionals.IdName.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.IdOrg.IsSet() { + localVarQueryParams.Add("id.org", parameterToString(localVarOptionals.IdOrg.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { + localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Token.IsSet() { + localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { + localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { + localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { + localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminTaskList + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param idOrg Optional, org key applied to the resource. + * @param idProject Name of the project the resource belongs to. + * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param optional nil or *ListTasks4Opts - Optional Parameters: + * @param "IdName" (optional.String) - User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. + * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. + * @param "Token" (optional.String) - In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + * @param "Filters" (optional.String) - Indicates a list of filters passed as string. More info on constructing filters : <Link> +optional. + * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. + * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + +@return AdminTaskList +*/ + +type ListTasks4Opts struct { + IdName optional.String + Limit optional.Int64 + Token optional.String + Filters optional.String + SortByKey optional.String + SortByDirection optional.String +} + +func (a *AdminServiceApiService) ListTasks4(ctx context.Context, idOrg string, idProject string, idDomain string, localVarOptionals *ListTasks4Opts) (AdminTaskList, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminTaskList + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/tasks/org/{id.org}/{id.project}/{id.domain}" + localVarPath = strings.Replace(localVarPath, "{"+"id.org"+"}", fmt.Sprintf("%v", idOrg), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.IdName.IsSet() { + localVarQueryParams.Add("id.name", parameterToString(localVarOptionals.IdName.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { + localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Token.IsSet() { + localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { + localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { + localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { + localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminTaskList + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of workflow objects. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param project Name of the project that contains the identifiers. +required + * @param domain Name of the domain the identifiers belongs to within the project. +required + * @param optional nil or *ListWorkflowIdsOpts - Optional Parameters: + * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. + * @param "Token" (optional.String) - In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. + * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + * @param "Filters" (optional.String) - Indicates a list of filters passed as string. +optional. + * @param "Org" (optional.String) - Optional, org key applied to the resource. + +@return AdminNamedEntityIdentifierList +*/ + +type ListWorkflowIdsOpts struct { + Limit optional.Int64 + Token optional.String + SortByKey optional.String + SortByDirection optional.String + Filters optional.String + Org optional.String +} + +func (a *AdminServiceApiService) ListWorkflowIds(ctx context.Context, project string, domain string, localVarOptionals *ListWorkflowIdsOpts) (AdminNamedEntityIdentifierList, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminNamedEntityIdentifierList + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/workflow_ids/{project}/{domain}" + localVarPath = strings.Replace(localVarPath, "{"+"project"+"}", fmt.Sprintf("%v", project), -1) + localVarPath = strings.Replace(localVarPath, "{"+"domain"+"}", fmt.Sprintf("%v", domain), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { + localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Token.IsSet() { + localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { + localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { + localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { + localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Org.IsSet() { + localVarQueryParams.Add("org", parameterToString(localVarOptionals.Org.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminNamedEntityIdentifierList + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of workflow objects. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param org Optional, org key applied to the resource. + * @param project Name of the project that contains the identifiers. +required + * @param domain Name of the domain the identifiers belongs to within the project. +required + * @param optional nil or *ListWorkflowIds2Opts - Optional Parameters: + * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. + * @param "Token" (optional.String) - In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. + * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + * @param "Filters" (optional.String) - Indicates a list of filters passed as string. +optional. + +@return AdminNamedEntityIdentifierList +*/ + +type ListWorkflowIds2Opts struct { + Limit optional.Int64 + Token optional.String + SortByKey optional.String + SortByDirection optional.String + Filters optional.String +} + +func (a *AdminServiceApiService) ListWorkflowIds2(ctx context.Context, org string, project string, domain string, localVarOptionals *ListWorkflowIds2Opts) (AdminNamedEntityIdentifierList, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminNamedEntityIdentifierList + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/workflows/org/{org}/{project}/{domain}" + localVarPath = strings.Replace(localVarPath, "{"+"org"+"}", fmt.Sprintf("%v", org), -1) + localVarPath = strings.Replace(localVarPath, "{"+"project"+"}", fmt.Sprintf("%v", project), -1) + localVarPath = strings.Replace(localVarPath, "{"+"domain"+"}", fmt.Sprintf("%v", domain), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { + localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Token.IsSet() { + localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { + localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { + localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { + localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminNamedEntityIdentifierList + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param idProject Name of the project the resource belongs to. + * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param idName User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' + * @param optional nil or *ListWorkflowsOpts - Optional Parameters: + * @param "IdOrg" (optional.String) - Optional, org key applied to the resource. + * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. + * @param "Token" (optional.String) - In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + * @param "Filters" (optional.String) - Indicates a list of filters passed as string. More info on constructing filters : <Link> +optional. + * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. + * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + +@return AdminWorkflowList +*/ + +type ListWorkflowsOpts struct { + IdOrg optional.String + Limit optional.Int64 + Token optional.String + Filters optional.String + SortByKey optional.String + SortByDirection optional.String +} + +func (a *AdminServiceApiService) ListWorkflows(ctx context.Context, idProject string, idDomain string, idName string, localVarOptionals *ListWorkflowsOpts) (AdminWorkflowList, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminWorkflowList + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/workflows/{id.project}/{id.domain}/{id.name}" + localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.IdOrg.IsSet() { + localVarQueryParams.Add("id.org", parameterToString(localVarOptionals.IdOrg.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { + localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Token.IsSet() { + localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { + localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { + localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { + localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminWorkflowList + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param idOrg Optional, org key applied to the resource. + * @param idProject Name of the project the resource belongs to. + * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param idName User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' + * @param optional nil or *ListWorkflows2Opts - Optional Parameters: + * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. + * @param "Token" (optional.String) - In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + * @param "Filters" (optional.String) - Indicates a list of filters passed as string. More info on constructing filters : <Link> +optional. + * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. + * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + +@return AdminWorkflowList +*/ + +type ListWorkflows2Opts struct { + Limit optional.Int64 + Token optional.String + Filters optional.String + SortByKey optional.String + SortByDirection optional.String +} + +func (a *AdminServiceApiService) ListWorkflows2(ctx context.Context, idOrg string, idProject string, idDomain string, idName string, localVarOptionals *ListWorkflows2Opts) (AdminWorkflowList, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminWorkflowList + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/workflows/org/{id.org}/{id.project}/{id.domain}/{id.name}" + localVarPath = strings.Replace(localVarPath, "{"+"id.org"+"}", fmt.Sprintf("%v", idOrg), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { + localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Token.IsSet() { + localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { + localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { + localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { + localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminWorkflowList + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param idProject Name of the project the resource belongs to. + * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param optional nil or *ListWorkflows3Opts - Optional Parameters: + * @param "IdName" (optional.String) - User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. + * @param "IdOrg" (optional.String) - Optional, org key applied to the resource. + * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. + * @param "Token" (optional.String) - In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + * @param "Filters" (optional.String) - Indicates a list of filters passed as string. More info on constructing filters : <Link> +optional. + * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. + * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + +@return AdminWorkflowList +*/ + +type ListWorkflows3Opts struct { + IdName optional.String + IdOrg optional.String + Limit optional.Int64 + Token optional.String + Filters optional.String + SortByKey optional.String + SortByDirection optional.String +} + +func (a *AdminServiceApiService) ListWorkflows3(ctx context.Context, idProject string, idDomain string, localVarOptionals *ListWorkflows3Opts) (AdminWorkflowList, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminWorkflowList + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/workflows/{id.project}/{id.domain}" + localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.IdName.IsSet() { + localVarQueryParams.Add("id.name", parameterToString(localVarOptionals.IdName.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.IdOrg.IsSet() { + localVarQueryParams.Add("id.org", parameterToString(localVarOptionals.IdOrg.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { + localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Token.IsSet() { + localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { + localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { + localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { + localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminWorkflowList + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param idOrg Optional, org key applied to the resource. + * @param idProject Name of the project the resource belongs to. + * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param optional nil or *ListWorkflows4Opts - Optional Parameters: + * @param "IdName" (optional.String) - User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. + * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. + * @param "Token" (optional.String) - In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + * @param "Filters" (optional.String) - Indicates a list of filters passed as string. More info on constructing filters : <Link> +optional. + * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. + * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + +@return AdminWorkflowList +*/ + +type ListWorkflows4Opts struct { + IdName optional.String + Limit optional.Int64 + Token optional.String + Filters optional.String + SortByKey optional.String + SortByDirection optional.String +} + +func (a *AdminServiceApiService) ListWorkflows4(ctx context.Context, idOrg string, idProject string, idDomain string, localVarOptionals *ListWorkflows4Opts) (AdminWorkflowList, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminWorkflowList + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/workflows/org/{id.org}/{id.project}/{id.domain}" + localVarPath = strings.Replace(localVarPath, "{"+"id.org"+"}", fmt.Sprintf("%v", idOrg), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.IdName.IsSet() { + localVarQueryParams.Add("id.name", parameterToString(localVarOptionals.IdName.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { + localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Token.IsSet() { + localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { + localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { + localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { + localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminWorkflowList + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Recreates a previously-run workflow execution that will only start executing from the last known failure point. In Recover mode, users cannot change any input parameters or update the version of the execution. This is extremely useful to recover from system errors and byzantine faults like - Loss of K8s cluster, bugs in platform or instability, machine failures, downstream system failures (downstream services), or simply to recover executions that failed because of retry exhaustion and should complete if tried again. See :ref:`ref_flyteidl.admin.ExecutionRecoverRequest` for more details. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param body + +@return AdminExecutionCreateResponse +*/ +func (a *AdminServiceApiService) RecoverExecution(ctx context.Context, body AdminExecutionRecoverRequest) (AdminExecutionCreateResponse, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Post") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminExecutionCreateResponse + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/executions/recover" + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + // body params + localVarPostBody = &body + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminExecutionCreateResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Registers a :ref:`ref_flyteidl.admin.Project` with the Flyte deployment. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param body + +@return AdminProjectRegisterResponse +*/ +func (a *AdminServiceApiService) RegisterProject(ctx context.Context, body AdminProjectRegisterRequest) (AdminProjectRegisterResponse, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Post") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminProjectRegisterResponse + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/projects" + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + // body params + localVarPostBody = &body + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminProjectRegisterResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Triggers the creation of an identical :ref:`ref_flyteidl.admin.Execution` + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param body + +@return AdminExecutionCreateResponse +*/ +func (a *AdminServiceApiService) RelaunchExecution(ctx context.Context, body AdminExecutionRelaunchRequest) (AdminExecutionCreateResponse, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Post") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminExecutionCreateResponse + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/executions/relaunch" + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + // body params + localVarPostBody = &body + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminExecutionCreateResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Terminates an in-progress :ref:`ref_flyteidl.admin.Execution`. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param idProject Name of the project the resource belongs to. + * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param idName User or system provided value for the resource. + * @param body + +@return AdminExecutionTerminateResponse +*/ +func (a *AdminServiceApiService) TerminateExecution(ctx context.Context, idProject string, idDomain string, idName string, body AdminExecutionTerminateRequest) (AdminExecutionTerminateResponse, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Delete") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminExecutionTerminateResponse + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/executions/{id.project}/{id.domain}/{id.name}" + localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + // body params + localVarPostBody = &body + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminExecutionTerminateResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Terminates an in-progress :ref:`ref_flyteidl.admin.Execution`. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param idOrg Optional, org key applied to the resource. + * @param idProject Name of the project the resource belongs to. + * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param idName User or system provided value for the resource. + * @param body + +@return AdminExecutionTerminateResponse +*/ +func (a *AdminServiceApiService) TerminateExecution2(ctx context.Context, idOrg string, idProject string, idDomain string, idName string, body AdminExecutionTerminateRequest) (AdminExecutionTerminateResponse, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Delete") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminExecutionTerminateResponse + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/data/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}" + localVarPath = strings.Replace(localVarPath, "{"+"id.org"+"}", fmt.Sprintf("%v", idOrg), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + // body params + localVarPostBody = &body + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminExecutionTerminateResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Update execution belonging to project domain :ref:`ref_flyteidl.admin.Execution`. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param idProject Name of the project the resource belongs to. + * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param idName User or system provided value for the resource. + * @param body + +@return AdminExecutionUpdateResponse +*/ +func (a *AdminServiceApiService) UpdateExecution(ctx context.Context, idProject string, idDomain string, idName string, body AdminExecutionUpdateRequest) (AdminExecutionUpdateResponse, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Put") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminExecutionUpdateResponse + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/executions/{id.project}/{id.domain}/{id.name}" + localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + // body params + localVarPostBody = &body + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminExecutionUpdateResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Update execution belonging to project domain :ref:`ref_flyteidl.admin.Execution`. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param idOrg Optional, org key applied to the resource. + * @param idProject Name of the project the resource belongs to. + * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param idName User or system provided value for the resource. + * @param body + +@return AdminExecutionUpdateResponse +*/ +func (a *AdminServiceApiService) UpdateExecution2(ctx context.Context, idOrg string, idProject string, idDomain string, idName string, body AdminExecutionUpdateRequest) (AdminExecutionUpdateResponse, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Put") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminExecutionUpdateResponse + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}" + localVarPath = strings.Replace(localVarPath, "{"+"id.org"+"}", fmt.Sprintf("%v", idOrg), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + // body params + localVarPostBody = &body + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminExecutionUpdateResponse err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -4802,66 +9742,36 @@ func (a *AdminServiceApiService) ListWorkflows(ctx context.Context, idProject st } /* -AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. +AdminServiceApiService Updates the status of a registered :ref:`ref_flyteidl.admin.LaunchPlan`. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). * @param idProject Name of the project the resource belongs to. * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. - * @param optional nil or *ListWorkflows2Opts - Optional Parameters: - * @param "IdName" (optional.String) - User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. - * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. - * @param "Token" (optional.String) - In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. - * @param "Filters" (optional.String) - Indicates a list of filters passed as string. More info on constructing filters : <Link> +optional. - * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. - * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + * @param idName User provided value for the resource. + * @param idVersion Specific version of the resource. + * @param body -@return AdminWorkflowList +@return AdminLaunchPlanUpdateResponse */ - -type ListWorkflows2Opts struct { - IdName optional.String - Limit optional.Int64 - Token optional.String - Filters optional.String - SortByKey optional.String - SortByDirection optional.String -} - -func (a *AdminServiceApiService) ListWorkflows2(ctx context.Context, idProject string, idDomain string, localVarOptionals *ListWorkflows2Opts) (AdminWorkflowList, *http.Response, error) { +func (a *AdminServiceApiService) UpdateLaunchPlan(ctx context.Context, idProject string, idDomain string, idName string, idVersion string, body AdminLaunchPlanUpdateRequest) (AdminLaunchPlanUpdateResponse, *http.Response, error) { var ( - localVarHttpMethod = strings.ToUpper("Get") + localVarHttpMethod = strings.ToUpper("Put") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminWorkflowList + localVarReturnValue AdminLaunchPlanUpdateResponse ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/workflows/{id.project}/{id.domain}" + localVarPath := a.client.cfg.BasePath + "/api/v1/launch_plans/{id.project}/{id.domain}/{id.name}/{id.version}" localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.version"+"}", fmt.Sprintf("%v", idVersion), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} localVarFormParams := url.Values{} - if localVarOptionals != nil && localVarOptionals.IdName.IsSet() { - localVarQueryParams.Add("id.name", parameterToString(localVarOptionals.IdName.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { - localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Token.IsSet() { - localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { - localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { - localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { - localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) - } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json"} @@ -4879,6 +9789,8 @@ func (a *AdminServiceApiService) ListWorkflows2(ctx context.Context, idProject s if localVarHttpHeaderAccept != "" { localVarHeaderParams["Accept"] = localVarHttpHeaderAccept } + // body params + localVarPostBody = &body r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) if err != nil { return localVarReturnValue, nil, err @@ -4910,7 +9822,7 @@ func (a *AdminServiceApiService) ListWorkflows2(ctx context.Context, idProject s } if localVarHttpResponse.StatusCode == 200 { - var v AdminWorkflowList + var v AdminLaunchPlanUpdateResponse err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -4927,23 +9839,32 @@ func (a *AdminServiceApiService) ListWorkflows2(ctx context.Context, idProject s } /* -AdminServiceApiService Recreates a previously-run workflow execution that will only start executing from the last known failure point. In Recover mode, users cannot change any input parameters or update the version of the execution. This is extremely useful to recover from system errors and byzantine faults like - Loss of K8s cluster, bugs in platform or instability, machine failures, downstream system failures (downstream services), or simply to recover executions that failed because of retry exhaustion and should complete if tried again. See :ref:`ref_flyteidl.admin.ExecutionRecoverRequest` for more details. +AdminServiceApiService Updates the status of a registered :ref:`ref_flyteidl.admin.LaunchPlan`. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param body + * @param idOrg Optional, org key applied to the resource. + * @param idProject Name of the project the resource belongs to. + * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param idName User provided value for the resource. + * @param idVersion Specific version of the resource. -@return AdminExecutionCreateResponse +@return AdminLaunchPlanUpdateResponse */ -func (a *AdminServiceApiService) RecoverExecution(ctx context.Context, body AdminExecutionRecoverRequest) (AdminExecutionCreateResponse, *http.Response, error) { +func (a *AdminServiceApiService) UpdateLaunchPlan2(ctx context.Context, idOrg string, idProject string, idDomain string, idName string, idVersion string) (AdminLaunchPlanUpdateResponse, *http.Response, error) { var ( - localVarHttpMethod = strings.ToUpper("Post") + localVarHttpMethod = strings.ToUpper("Put") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminExecutionCreateResponse + localVarReturnValue AdminLaunchPlanUpdateResponse ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/executions/recover" + localVarPath := a.client.cfg.BasePath + "/api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version}" + localVarPath = strings.Replace(localVarPath, "{"+"id.org"+"}", fmt.Sprintf("%v", idOrg), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.version"+"}", fmt.Sprintf("%v", idVersion), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -4966,8 +9887,6 @@ func (a *AdminServiceApiService) RecoverExecution(ctx context.Context, body Admi if localVarHttpHeaderAccept != "" { localVarHeaderParams["Accept"] = localVarHttpHeaderAccept } - // body params - localVarPostBody = &body r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) if err != nil { return localVarReturnValue, nil, err @@ -4999,7 +9918,7 @@ func (a *AdminServiceApiService) RecoverExecution(ctx context.Context, body Admi } if localVarHttpResponse.StatusCode == 200 { - var v AdminExecutionCreateResponse + var v AdminLaunchPlanUpdateResponse err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -5016,23 +9935,31 @@ func (a *AdminServiceApiService) RecoverExecution(ctx context.Context, body Admi } /* -AdminServiceApiService Registers a :ref:`ref_flyteidl.admin.Project` with the Flyte deployment. +AdminServiceApiService Updates a :ref:`ref_flyteidl.admin.NamedEntity` object. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param resourceType Resource type of the metadata to update +required + * @param idProject Name of the project the resource belongs to. + * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param idName User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' * @param body -@return AdminProjectRegisterResponse +@return AdminNamedEntityUpdateResponse */ -func (a *AdminServiceApiService) RegisterProject(ctx context.Context, body AdminProjectRegisterRequest) (AdminProjectRegisterResponse, *http.Response, error) { +func (a *AdminServiceApiService) UpdateNamedEntity(ctx context.Context, resourceType string, idProject string, idDomain string, idName string, body AdminNamedEntityUpdateRequest) (AdminNamedEntityUpdateResponse, *http.Response, error) { var ( - localVarHttpMethod = strings.ToUpper("Post") + localVarHttpMethod = strings.ToUpper("Put") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminProjectRegisterResponse + localVarReturnValue AdminNamedEntityUpdateResponse ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/projects" + localVarPath := a.client.cfg.BasePath + "/api/v1/named_entities/{resource_type}/{id.project}/{id.domain}/{id.name}" + localVarPath = strings.Replace(localVarPath, "{"+"resource_type"+"}", fmt.Sprintf("%v", resourceType), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -5088,7 +10015,7 @@ func (a *AdminServiceApiService) RegisterProject(ctx context.Context, body Admin } if localVarHttpResponse.StatusCode == 200 { - var v AdminProjectRegisterResponse + var v AdminNamedEntityUpdateResponse err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -5105,23 +10032,33 @@ func (a *AdminServiceApiService) RegisterProject(ctx context.Context, body Admin } /* -AdminServiceApiService Triggers the creation of an identical :ref:`ref_flyteidl.admin.Execution` +AdminServiceApiService Updates a :ref:`ref_flyteidl.admin.NamedEntity` object. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param resourceType Resource type of the metadata to update +required + * @param idOrg Optional, org key applied to the resource. + * @param idProject Name of the project the resource belongs to. + * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param idName User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' * @param body -@return AdminExecutionCreateResponse +@return AdminNamedEntityUpdateResponse */ -func (a *AdminServiceApiService) RelaunchExecution(ctx context.Context, body AdminExecutionRelaunchRequest) (AdminExecutionCreateResponse, *http.Response, error) { +func (a *AdminServiceApiService) UpdateNamedEntity2(ctx context.Context, resourceType string, idOrg string, idProject string, idDomain string, idName string, body AdminNamedEntityUpdateRequest) (AdminNamedEntityUpdateResponse, *http.Response, error) { var ( - localVarHttpMethod = strings.ToUpper("Post") + localVarHttpMethod = strings.ToUpper("Put") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminExecutionCreateResponse + localVarReturnValue AdminNamedEntityUpdateResponse ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/executions/relaunch" + localVarPath := a.client.cfg.BasePath + "/api/v1/named_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain}/{id.name}" + localVarPath = strings.Replace(localVarPath, "{"+"resource_type"+"}", fmt.Sprintf("%v", resourceType), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.org"+"}", fmt.Sprintf("%v", idOrg), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -5177,7 +10114,7 @@ func (a *AdminServiceApiService) RelaunchExecution(ctx context.Context, body Adm } if localVarHttpResponse.StatusCode == 200 { - var v AdminExecutionCreateResponse + var v AdminNamedEntityUpdateResponse err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -5194,29 +10131,25 @@ func (a *AdminServiceApiService) RelaunchExecution(ctx context.Context, body Adm } /* -AdminServiceApiService Terminates an in-progress :ref:`ref_flyteidl.admin.Execution`. +AdminServiceApiService Updates an existing :ref:`ref_flyteidl.admin.Project` flyteidl.admin.Project should be passed but the domains property should be empty; it will be ignored in the handler as domains cannot be updated via this API. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param idProject Name of the project the resource belongs to. - * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. - * @param idName User or system provided value for the resource. + * @param id Globally unique project name. * @param body -@return AdminExecutionTerminateResponse +@return AdminProjectUpdateResponse */ -func (a *AdminServiceApiService) TerminateExecution(ctx context.Context, idProject string, idDomain string, idName string, body AdminExecutionTerminateRequest) (AdminExecutionTerminateResponse, *http.Response, error) { +func (a *AdminServiceApiService) UpdateProject(ctx context.Context, id string, body AdminProject) (AdminProjectUpdateResponse, *http.Response, error) { var ( - localVarHttpMethod = strings.ToUpper("Delete") + localVarHttpMethod = strings.ToUpper("Put") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminExecutionTerminateResponse + localVarReturnValue AdminProjectUpdateResponse ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/executions/{id.project}/{id.domain}/{id.name}" - localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) + localVarPath := a.client.cfg.BasePath + "/api/v1/projects/{id}" + localVarPath = strings.Replace(localVarPath, "{"+"id"+"}", fmt.Sprintf("%v", id), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -5272,7 +10205,7 @@ func (a *AdminServiceApiService) TerminateExecution(ctx context.Context, idProje } if localVarHttpResponse.StatusCode == 200 { - var v AdminExecutionTerminateResponse + var v AdminProjectUpdateResponse err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -5289,29 +10222,27 @@ func (a *AdminServiceApiService) TerminateExecution(ctx context.Context, idProje } /* -AdminServiceApiService Update execution belonging to project domain :ref:`ref_flyteidl.admin.Execution`. +AdminServiceApiService Updates an existing :ref:`ref_flyteidl.admin.Project` flyteidl.admin.Project should be passed but the domains property should be empty; it will be ignored in the handler as domains cannot be updated via this API. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param idProject Name of the project the resource belongs to. - * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. - * @param idName User or system provided value for the resource. + * @param org Optional, org key applied to the resource. + * @param id Globally unique project name. * @param body -@return AdminExecutionUpdateResponse +@return AdminProjectUpdateResponse */ -func (a *AdminServiceApiService) UpdateExecution(ctx context.Context, idProject string, idDomain string, idName string, body AdminExecutionUpdateRequest) (AdminExecutionUpdateResponse, *http.Response, error) { +func (a *AdminServiceApiService) UpdateProject2(ctx context.Context, org string, id string, body AdminProject) (AdminProjectUpdateResponse, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Put") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminExecutionUpdateResponse + localVarReturnValue AdminProjectUpdateResponse ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/executions/{id.project}/{id.domain}/{id.name}" - localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) + localVarPath := a.client.cfg.BasePath + "/api/v1/projects/org/{org}/{id}" + localVarPath = strings.Replace(localVarPath, "{"+"org"+"}", fmt.Sprintf("%v", org), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id"+"}", fmt.Sprintf("%v", id), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -5367,7 +10298,7 @@ func (a *AdminServiceApiService) UpdateExecution(ctx context.Context, idProject } if localVarHttpResponse.StatusCode == 200 { - var v AdminExecutionUpdateResponse + var v AdminProjectUpdateResponse err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -5384,31 +10315,25 @@ func (a *AdminServiceApiService) UpdateExecution(ctx context.Context, idProject } /* -AdminServiceApiService Updates the status of a registered :ref:`ref_flyteidl.admin.LaunchPlan`. +AdminServiceApiService Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` at the project level * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param idProject Name of the project the resource belongs to. - * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. - * @param idName User provided value for the resource. - * @param idVersion Specific version of the resource. + * @param attributesProject Unique project id for which this set of attributes will be applied. * @param body -@return AdminLaunchPlanUpdateResponse +@return AdminProjectAttributesUpdateResponse */ -func (a *AdminServiceApiService) UpdateLaunchPlan(ctx context.Context, idProject string, idDomain string, idName string, idVersion string, body AdminLaunchPlanUpdateRequest) (AdminLaunchPlanUpdateResponse, *http.Response, error) { +func (a *AdminServiceApiService) UpdateProjectAttributes(ctx context.Context, attributesProject string, body AdminProjectAttributesUpdateRequest) (AdminProjectAttributesUpdateResponse, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Put") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminLaunchPlanUpdateResponse + localVarReturnValue AdminProjectAttributesUpdateResponse ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/launch_plans/{id.project}/{id.domain}/{id.name}/{id.version}" - localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.version"+"}", fmt.Sprintf("%v", idVersion), -1) + localVarPath := a.client.cfg.BasePath + "/api/v1/project_attributes/{attributes.project}" + localVarPath = strings.Replace(localVarPath, "{"+"attributes.project"+"}", fmt.Sprintf("%v", attributesProject), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -5464,7 +10389,7 @@ func (a *AdminServiceApiService) UpdateLaunchPlan(ctx context.Context, idProject } if localVarHttpResponse.StatusCode == 200 { - var v AdminLaunchPlanUpdateResponse + var v AdminProjectAttributesUpdateResponse err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -5481,31 +10406,27 @@ func (a *AdminServiceApiService) UpdateLaunchPlan(ctx context.Context, idProject } /* -AdminServiceApiService Updates a :ref:`ref_flyteidl.admin.NamedEntity` object. +AdminServiceApiService Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` at the project level * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param resourceType Resource type of the metadata to update +required - * @param idProject Name of the project the resource belongs to. - * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. - * @param idName User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' + * @param attributesOrg Optional, org key applied to the project. + * @param attributesProject Unique project id for which this set of attributes will be applied. * @param body -@return AdminNamedEntityUpdateResponse +@return AdminProjectAttributesUpdateResponse */ -func (a *AdminServiceApiService) UpdateNamedEntity(ctx context.Context, resourceType string, idProject string, idDomain string, idName string, body AdminNamedEntityUpdateRequest) (AdminNamedEntityUpdateResponse, *http.Response, error) { +func (a *AdminServiceApiService) UpdateProjectAttributes2(ctx context.Context, attributesOrg string, attributesProject string, body AdminProjectAttributesUpdateRequest) (AdminProjectAttributesUpdateResponse, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Put") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminNamedEntityUpdateResponse + localVarReturnValue AdminProjectAttributesUpdateResponse ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/named_entities/{resource_type}/{id.project}/{id.domain}/{id.name}" - localVarPath = strings.Replace(localVarPath, "{"+"resource_type"+"}", fmt.Sprintf("%v", resourceType), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) + localVarPath := a.client.cfg.BasePath + "/api/v1/project_domain_attributes/org/{attributes.org}/{attributes.project}" + localVarPath = strings.Replace(localVarPath, "{"+"attributes.org"+"}", fmt.Sprintf("%v", attributesOrg), -1) + localVarPath = strings.Replace(localVarPath, "{"+"attributes.project"+"}", fmt.Sprintf("%v", attributesProject), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -5561,7 +10482,7 @@ func (a *AdminServiceApiService) UpdateNamedEntity(ctx context.Context, resource } if localVarHttpResponse.StatusCode == 200 { - var v AdminNamedEntityUpdateResponse + var v AdminProjectAttributesUpdateResponse err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -5578,25 +10499,27 @@ func (a *AdminServiceApiService) UpdateNamedEntity(ctx context.Context, resource } /* -AdminServiceApiService Updates an existing :ref:`ref_flyteidl.admin.Project` flyteidl.admin.Project should be passed but the domains property should be empty; it will be ignored in the handler as domains cannot be updated via this API. +AdminServiceApiService Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param id Globally unique project name. + * @param attributesProject Unique project id for which this set of attributes will be applied. + * @param attributesDomain Unique domain id for which this set of attributes will be applied. * @param body -@return AdminProjectUpdateResponse +@return AdminProjectDomainAttributesUpdateResponse */ -func (a *AdminServiceApiService) UpdateProject(ctx context.Context, id string, body AdminProject) (AdminProjectUpdateResponse, *http.Response, error) { +func (a *AdminServiceApiService) UpdateProjectDomainAttributes(ctx context.Context, attributesProject string, attributesDomain string, body AdminProjectDomainAttributesUpdateRequest) (AdminProjectDomainAttributesUpdateResponse, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Put") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminProjectUpdateResponse + localVarReturnValue AdminProjectDomainAttributesUpdateResponse ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/projects/{id}" - localVarPath = strings.Replace(localVarPath, "{"+"id"+"}", fmt.Sprintf("%v", id), -1) + localVarPath := a.client.cfg.BasePath + "/api/v1/project_domain_attributes/{attributes.project}/{attributes.domain}" + localVarPath = strings.Replace(localVarPath, "{"+"attributes.project"+"}", fmt.Sprintf("%v", attributesProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"attributes.domain"+"}", fmt.Sprintf("%v", attributesDomain), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -5652,7 +10575,7 @@ func (a *AdminServiceApiService) UpdateProject(ctx context.Context, id string, b } if localVarHttpResponse.StatusCode == 200 { - var v AdminProjectUpdateResponse + var v AdminProjectDomainAttributesUpdateResponse err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -5669,25 +10592,29 @@ func (a *AdminServiceApiService) UpdateProject(ctx context.Context, id string, b } /* -AdminServiceApiService Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` at the project level +AdminServiceApiService Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param attributesOrg Optional, org key applied to the attributes. * @param attributesProject Unique project id for which this set of attributes will be applied. + * @param attributesDomain Unique domain id for which this set of attributes will be applied. * @param body -@return AdminProjectAttributesUpdateResponse +@return AdminProjectDomainAttributesUpdateResponse */ -func (a *AdminServiceApiService) UpdateProjectAttributes(ctx context.Context, attributesProject string, body AdminProjectAttributesUpdateRequest) (AdminProjectAttributesUpdateResponse, *http.Response, error) { +func (a *AdminServiceApiService) UpdateProjectDomainAttributes2(ctx context.Context, attributesOrg string, attributesProject string, attributesDomain string, body AdminProjectDomainAttributesUpdateRequest) (AdminProjectDomainAttributesUpdateResponse, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Put") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminProjectAttributesUpdateResponse + localVarReturnValue AdminProjectDomainAttributesUpdateResponse ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/project_attributes/{attributes.project}" + localVarPath := a.client.cfg.BasePath + "/api/v1/project_domain_attributes/org/{attributes.org}/{attributes.project}/{attributes.domain}" + localVarPath = strings.Replace(localVarPath, "{"+"attributes.org"+"}", fmt.Sprintf("%v", attributesOrg), -1) localVarPath = strings.Replace(localVarPath, "{"+"attributes.project"+"}", fmt.Sprintf("%v", attributesProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"attributes.domain"+"}", fmt.Sprintf("%v", attributesDomain), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -5743,7 +10670,7 @@ func (a *AdminServiceApiService) UpdateProjectAttributes(ctx context.Context, at } if localVarHttpResponse.StatusCode == 200 { - var v AdminProjectAttributesUpdateResponse + var v AdminProjectDomainAttributesUpdateResponse err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -5760,27 +10687,29 @@ func (a *AdminServiceApiService) UpdateProjectAttributes(ctx context.Context, at } /* -AdminServiceApiService Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. +AdminServiceApiService Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). * @param attributesProject Unique project id for which this set of attributes will be applied. * @param attributesDomain Unique domain id for which this set of attributes will be applied. + * @param attributesWorkflow Workflow name for which this set of attributes will be applied. * @param body -@return AdminProjectDomainAttributesUpdateResponse +@return AdminWorkflowAttributesUpdateResponse */ -func (a *AdminServiceApiService) UpdateProjectDomainAttributes(ctx context.Context, attributesProject string, attributesDomain string, body AdminProjectDomainAttributesUpdateRequest) (AdminProjectDomainAttributesUpdateResponse, *http.Response, error) { +func (a *AdminServiceApiService) UpdateWorkflowAttributes(ctx context.Context, attributesProject string, attributesDomain string, attributesWorkflow string, body AdminWorkflowAttributesUpdateRequest) (AdminWorkflowAttributesUpdateResponse, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Put") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminProjectDomainAttributesUpdateResponse + localVarReturnValue AdminWorkflowAttributesUpdateResponse ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/project_domain_attributes/{attributes.project}/{attributes.domain}" + localVarPath := a.client.cfg.BasePath + "/api/v1/workflow_attributes/{attributes.project}/{attributes.domain}/{attributes.workflow}" localVarPath = strings.Replace(localVarPath, "{"+"attributes.project"+"}", fmt.Sprintf("%v", attributesProject), -1) localVarPath = strings.Replace(localVarPath, "{"+"attributes.domain"+"}", fmt.Sprintf("%v", attributesDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"attributes.workflow"+"}", fmt.Sprintf("%v", attributesWorkflow), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -5836,7 +10765,7 @@ func (a *AdminServiceApiService) UpdateProjectDomainAttributes(ctx context.Conte } if localVarHttpResponse.StatusCode == 200 { - var v AdminProjectDomainAttributesUpdateResponse + var v AdminWorkflowAttributesUpdateResponse err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -5855,6 +10784,7 @@ func (a *AdminServiceApiService) UpdateProjectDomainAttributes(ctx context.Conte /* AdminServiceApiService Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param attributesOrg Optional, org key applied to the attributes. * @param attributesProject Unique project id for which this set of attributes will be applied. * @param attributesDomain Unique domain id for which this set of attributes will be applied. * @param attributesWorkflow Workflow name for which this set of attributes will be applied. @@ -5862,7 +10792,7 @@ AdminServiceApiService Creates or updates custom :ref:`ref_flyteidl.admin.M @return AdminWorkflowAttributesUpdateResponse */ -func (a *AdminServiceApiService) UpdateWorkflowAttributes(ctx context.Context, attributesProject string, attributesDomain string, attributesWorkflow string, body AdminWorkflowAttributesUpdateRequest) (AdminWorkflowAttributesUpdateResponse, *http.Response, error) { +func (a *AdminServiceApiService) UpdateWorkflowAttributes2(ctx context.Context, attributesOrg string, attributesProject string, attributesDomain string, attributesWorkflow string, body AdminWorkflowAttributesUpdateRequest) (AdminWorkflowAttributesUpdateResponse, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Put") localVarPostBody interface{} @@ -5872,7 +10802,8 @@ func (a *AdminServiceApiService) UpdateWorkflowAttributes(ctx context.Context, a ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/workflow_attributes/{attributes.project}/{attributes.domain}/{attributes.workflow}" + localVarPath := a.client.cfg.BasePath + "/api/v1/workflow_attributes/org/{attributes.org}/{attributes.project}/{attributes.domain}/{attributes.workflow}" + localVarPath = strings.Replace(localVarPath, "{"+"attributes.org"+"}", fmt.Sprintf("%v", attributesOrg), -1) localVarPath = strings.Replace(localVarPath, "{"+"attributes.project"+"}", fmt.Sprintf("%v", attributesProject), -1) localVarPath = strings.Replace(localVarPath, "{"+"attributes.domain"+"}", fmt.Sprintf("%v", attributesDomain), -1) localVarPath = strings.Replace(localVarPath, "{"+"attributes.workflow"+"}", fmt.Sprintf("%v", attributesWorkflow), -1) diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_admin_execution_create_request.go b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_admin_execution_create_request.go index b8da1d4fca..c7eff0aded 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_admin_execution_create_request.go +++ b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_admin_execution_create_request.go @@ -16,4 +16,6 @@ type AdminExecutionCreateRequest struct { Name string `json:"name,omitempty"` Spec *AdminExecutionSpec `json:"spec,omitempty"` Inputs *CoreLiteralMap `json:"inputs,omitempty"` + // Optional, org key applied to the resource. + Org string `json:"org,omitempty"` } diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_admin_matchable_attributes_configuration.go b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_admin_matchable_attributes_configuration.go index df6a99884c..a9381abc9b 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_admin_matchable_attributes_configuration.go +++ b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_admin_matchable_attributes_configuration.go @@ -9,11 +9,13 @@ package flyteadmin -// Represents a custom set of attributes applied for either a domain; a domain and project; or domain, project and workflow name. These are used to override system level defaults for kubernetes cluster resource management, default execution values, and more all across different levels of specificity. +// Represents a custom set of attributes applied for either a domain (and optional org); a domain and project (and optional org); or domain, project and workflow name (and optional org). These are used to override system level defaults for kubernetes cluster resource management, default execution values, and more all across different levels of specificity. type AdminMatchableAttributesConfiguration struct { Attributes *AdminMatchingAttributes `json:"attributes,omitempty"` Domain string `json:"domain,omitempty"` Project string `json:"project,omitempty"` Workflow string `json:"workflow,omitempty"` LaunchPlan string `json:"launch_plan,omitempty"` + // Optional, org key applied to the resource. + Org string `json:"org,omitempty"` } diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_admin_named_entity_identifier.go b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_admin_named_entity_identifier.go index 9fa96c57b2..ac55ee330b 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_admin_named_entity_identifier.go +++ b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_admin_named_entity_identifier.go @@ -16,4 +16,6 @@ type AdminNamedEntityIdentifier struct { // Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. Domain string `json:"domain,omitempty"` Name string `json:"name,omitempty"` + // Optional, org key applied to the resource. + Org string `json:"org,omitempty"` } diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_admin_project.go b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_admin_project.go index 59da87f6cc..fafa42e708 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_admin_project.go +++ b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_admin_project.go @@ -20,4 +20,6 @@ type AdminProject struct { // Leverage Labels from flyteidl.admin.common.proto to tag projects with ownership information. Labels *AdminLabels `json:"labels,omitempty"` State *ProjectProjectState `json:"state,omitempty"` + // Optional, org key applied to the resource. + Org string `json:"org,omitempty"` } diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_admin_project_attributes.go b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_admin_project_attributes.go index a719e4737b..7772a1b781 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_admin_project_attributes.go +++ b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_admin_project_attributes.go @@ -13,4 +13,6 @@ type AdminProjectAttributes struct { // Unique project id for which this set of attributes will be applied. Project string `json:"project,omitempty"` MatchingAttributes *AdminMatchingAttributes `json:"matching_attributes,omitempty"` + // Optional, org key applied to the project. + Org string `json:"org,omitempty"` } diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_admin_project_attributes_delete_request.go b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_admin_project_attributes_delete_request.go index 3081254e92..c94bdf8d78 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_admin_project_attributes_delete_request.go +++ b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_admin_project_attributes_delete_request.go @@ -12,4 +12,6 @@ package flyteadmin type AdminProjectAttributesDeleteRequest struct { Project string `json:"project,omitempty"` ResourceType *AdminMatchableResource `json:"resource_type,omitempty"` + // Optional, org key applied to the project. + Org string `json:"org,omitempty"` } diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_admin_project_domain_attributes.go b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_admin_project_domain_attributes.go index 8cc141bc42..7f25ab536c 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_admin_project_domain_attributes.go +++ b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_admin_project_domain_attributes.go @@ -15,4 +15,6 @@ type AdminProjectDomainAttributes struct { // Unique domain id for which this set of attributes will be applied. Domain string `json:"domain,omitempty"` MatchingAttributes *AdminMatchingAttributes `json:"matching_attributes,omitempty"` + // Optional, org key applied to the attributes. + Org string `json:"org,omitempty"` } diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_admin_project_domain_attributes_delete_request.go b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_admin_project_domain_attributes_delete_request.go index 00b251417d..6431b0ffc9 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_admin_project_domain_attributes_delete_request.go +++ b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_admin_project_domain_attributes_delete_request.go @@ -13,4 +13,6 @@ type AdminProjectDomainAttributesDeleteRequest struct { Project string `json:"project,omitempty"` Domain string `json:"domain,omitempty"` ResourceType *AdminMatchableResource `json:"resource_type,omitempty"` + // Optional, org key applied to the attributes. + Org string `json:"org,omitempty"` } diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_admin_workflow_attributes.go b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_admin_workflow_attributes.go index dba5c88346..f8fdf30748 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_admin_workflow_attributes.go +++ b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_admin_workflow_attributes.go @@ -17,4 +17,6 @@ type AdminWorkflowAttributes struct { // Workflow name for which this set of attributes will be applied. Workflow string `json:"workflow,omitempty"` MatchingAttributes *AdminMatchingAttributes `json:"matching_attributes,omitempty"` + // Optional, org key applied to the attributes. + Org string `json:"org,omitempty"` } diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_admin_workflow_attributes_delete_request.go b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_admin_workflow_attributes_delete_request.go index 31bca658db..26df12fc94 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_admin_workflow_attributes_delete_request.go +++ b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_admin_workflow_attributes_delete_request.go @@ -14,4 +14,6 @@ type AdminWorkflowAttributesDeleteRequest struct { Domain string `json:"domain,omitempty"` Workflow string `json:"workflow,omitempty"` ResourceType *AdminMatchableResource `json:"resource_type,omitempty"` + // Optional, org key applied to the attributes. + Org string `json:"org,omitempty"` } diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_identifier.go b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_identifier.go index 36a08549cb..33cc281aa9 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_identifier.go +++ b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_identifier.go @@ -21,4 +21,6 @@ type CoreIdentifier struct { Name string `json:"name,omitempty"` // Specific version of the resource. Version string `json:"version,omitempty"` + // Optional, org key applied to the resource. + Org string `json:"org,omitempty"` } diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_workflow_execution_identifier.go b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_workflow_execution_identifier.go index cf61bea6ca..92f6945956 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_workflow_execution_identifier.go +++ b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_workflow_execution_identifier.go @@ -16,4 +16,6 @@ type CoreWorkflowExecutionIdentifier struct { Domain string `json:"domain,omitempty"` // User or system provided value for the resource. Name string `json:"name,omitempty"` + // Optional, org key applied to the resource. + Org string `json:"org,omitempty"` } diff --git a/flyteidl/gen/pb-go/flyteidl/service/openapi.go b/flyteidl/gen/pb-go/flyteidl/service/openapi.go index e0479d7a27..2629dfb916 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/openapi.go +++ b/flyteidl/gen/pb-go/flyteidl/service/openapi.go @@ -78,7 +78,7 @@ func (fi bindataFileInfo) Sys() interface{} { return nil } -var _adminSwaggerJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\x7b\x73\xeb\xb8\x95\x2f\x0c\xff\x3f\x9f\x02\x67\xcf\xa9\xea\xee\x44\xb6\x3b\xc9\x4c\xde\x94\xa7\x4e\xbd\x8f\xda\xd6\xde\xad\xd3\xbe\xc5\x97\xee\xe9\x67\x94\x52\x43\x24\x24\x21\x26\x01\x06\x00\xed\xad\x4e\xe5\xbb\x3f\x85\x85\x0b\x41\x8a\x94\xa8\x8b\x6d\x79\x37\x67\xaa\xd2\xde\x22\x89\xeb\xc2\xc2\xba\xfe\xd6\x3f\xff\x0d\xa1\x0f\xf2\x19\xcf\x66\x44\x7c\x38\x45\x1f\xfe\x78\xfc\xed\x87\x9e\xfe\x8d\xb2\x29\xff\x70\x8a\xf4\x73\x84\x3e\x28\xaa\x12\xa2\x9f\x4f\x93\x85\x22\x34\x4e\x4e\x24\x11\x4f\x34\x22\x27\x38\x4e\x29\x3b\xce\x04\x57\x1c\x3e\x44\xe8\xc3\x13\x11\x92\x72\xa6\x5f\xb7\x7f\x22\xc6\x15\x92\x44\x7d\xf8\x37\x84\xfe\x05\xcd\xcb\x68\x4e\x52\x22\x3f\x9c\xa2\xff\x31\x1f\xcd\x95\xca\x5c\x03\xfa\x6f\xa9\xdf\xfd\x1b\xbc\x1b\x71\x26\xf3\xd2\xcb\x38\xcb\x12\x1a\x61\x45\x39\x3b\xf9\xbb\xe4\xac\x78\x37\x13\x3c\xce\xa3\x96\xef\x62\x35\x97\xc5\x1c\x4f\x70\x46\x4f\x9e\xfe\x70\x82\x23\x45\x9f\xc8\x38\xc1\x39\x8b\xe6\xe3\x2c\xc1\x4c\x9e\xfc\x93\xc6\x7a\x8e\x7f\x27\x91\xfa\x17\xfc\x23\xe6\x29\xa6\xcc\xfc\xcd\x70\x4a\xfe\xe5\xdb\x41\xe8\xc3\x8c\xa8\xe0\x9f\x7a\xb6\x79\x9a\x62\xb1\xd0\x2b\xf2\x91\xa8\x68\x8e\xd4\x9c\x20\xd3\x0f\x72\x4b\xc4\xa7\x08\xa3\x53\x41\xa6\xa7\xbf\x08\x32\x1d\xbb\x85\x3e\x36\x0b\x7c\x01\xa3\xb9\x49\x30\xfb\xe5\xd8\x2e\x13\xb4\xcc\x33\x22\x60\x6e\xc3\x58\xb7\xfe\x89\xa8\x3e\x34\x5b\xbc\x1f\xbe\x2d\x88\xcc\x38\x93\x44\x96\x86\x87\xd0\x87\x3f\x7e\xfb\x6d\xe5\x27\x84\x3e\xc4\x44\x46\x82\x66\xca\xee\x65\x1f\xc9\x3c\x8a\x88\x94\xd3\x3c\x41\xae\xa5\x70\x30\x66\xaa\x7a\x63\xf1\x52\x63\x08\x7d\xf8\xdf\x82\x4c\x75\x3b\xff\x7e\x12\x93\x29\x65\x54\xb7\x2b\x0d\xfd\x04\xa3\x2d\x7d\xf5\xaf\x7f\xab\xfb\xfb\x5f\xc1\x8c\x32\x2c\x70\x4a\x14\x11\xc5\x8e\x9b\xff\xab\xcc\x45\xef\x91\xee\xbc\xd8\xc7\xea\xc0\x2b\xb3\xbd\xc2\x29\xd1\x7b\xa2\x77\xca\x7e\x01\x7f\x0b\x22\x79\x2e\x22\x82\x26\x24\xe1\x6c\x26\x91\xe2\x4b\x6b\x40\xa1\x05\x4d\x5e\xd5\x27\x82\xfc\x23\xa7\x82\xe8\xbd\x52\x22\x27\x95\xa7\x6a\x91\xc1\x20\xa5\x12\x94\xcd\xc2\xa5\xf8\x57\xaf\xd5\xd4\x0c\x55\x6e\x30\x33\xf3\x41\xe3\xc4\x46\xac\xef\x5e\x89\x30\x43\x13\x82\xf4\x59\xa4\x31\x11\x24\x46\x58\x22\x8c\x64\x3e\x91\x44\xa1\x67\xaa\xe6\x94\xe9\x7f\x67\x24\xa2\x53\x1a\xb9\x35\x3b\x9c\xb5\x81\x3f\x57\xaf\xcc\x83\x24\x42\x0f\xfc\x89\xc6\x24\x46\x4f\x38\xc9\x09\x9a\x72\x51\x5a\x9e\xe3\x11\xbb\x9f\xeb\x75\x48\x27\x94\xc1\xc9\xd3\x6b\xe9\x28\xe4\xf7\x6e\xb9\x7e\x8f\x74\x7f\x28\x67\xf4\x1f\x39\x49\x16\x88\xc6\x84\x29\x3a\xa5\x44\x56\x5b\xfb\x3d\x87\xfe\x71\x82\x8e\x90\x5e\x67\x22\x14\xac\x37\x67\x8a\x7c\x56\x12\x1d\xa1\x84\x3e\x12\xf4\xd5\x05\x95\x0a\xf5\x6f\x86\x5f\xf5\xd0\x57\xe6\xbc\x20\xe0\x4d\x5f\xbd\xc2\x0a\xfb\xbf\xff\x16\x1c\x3d\x85\x67\xd5\x43\xf7\xa1\xaf\x4f\xf3\x9d\xb9\x1a\x8a\x16\xfe\xf6\x6f\x61\x3b\x76\xbf\x56\xf3\xdb\x82\xd9\x5a\x4e\xdb\x96\xbf\xc2\x32\x95\x59\xab\xd4\x3b\xb4\x2b\x67\xd5\xed\x56\x59\xab\x7c\x5f\xbc\x55\x4f\xe1\xa5\xf9\xeb\x2e\xcc\x15\x2b\xa0\x7a\x4c\x99\x39\x24\xfe\xcc\x08\xa9\xcf\x89\xa3\xde\x03\x61\x29\xbb\xf0\xda\x60\x66\x01\xbb\x75\x5c\x34\x58\x95\x03\x9c\x77\x42\x53\xba\x6e\x7f\x87\x2c\xd6\x22\x97\x65\x76\x2c\x4f\x27\x44\xe8\x65\x70\x6c\x0f\x66\x3b\xd1\x6c\x50\xe5\x82\x91\xb8\xc5\x34\xff\x91\x13\xb1\x58\x31\xcf\x29\x4e\x64\xd3\x44\x29\x53\x44\xcb\xb7\x95\xc7\x53\x2e\x52\xac\xec\x0b\x7f\xfe\x8f\x4d\x17\x42\xf1\x47\xb2\x6e\xff\x87\x66\x37\x23\x2c\x81\x0c\xd2\x3c\x51\x34\x4b\x08\xca\xf0\x8c\x48\xbb\x22\x79\xa2\x64\x0f\x5e\xd3\x32\x35\x11\x47\xfe\x06\x82\x1e\xdc\xcd\x9b\x4b\xf8\x05\x4d\xbd\x00\xc9\xc8\x67\x05\x2d\x8d\x18\xdc\xbd\xb0\x44\xe1\x8d\xf2\x02\x4b\xb9\x1d\xcd\x48\x2e\xd4\x78\xb2\x38\x7e\x24\x4b\xfd\x36\x52\x0e\x66\x08\x2b\x25\xe8\x24\x57\x44\xcf\x5b\xb7\xe1\xee\x4e\x60\x8f\xe6\x82\x6e\xc3\x1a\xde\x6e\xc2\x31\x15\x24\x82\xb9\x6d\x72\x60\xfc\x57\x7a\xde\x5a\x7f\x59\x98\xd9\x3f\x92\x05\xc8\x23\x35\x2b\xe0\xb7\x7c\xc4\x46\x0c\x1d\xa1\xf3\xc1\xdd\xd9\xe0\xea\x7c\x78\xf5\xe9\x14\x7d\xb7\x40\x31\x99\xe2\x3c\x51\x3d\x34\xa5\x24\x89\x25\xc2\x82\x40\x93\x24\xd6\x32\x87\x1e\x0c\x61\x31\x65\x33\xc4\x45\x4c\xc4\xcb\x2d\x63\xe5\x29\x61\x79\x5a\xb9\x57\xe0\xf7\x62\xf4\x95\x2f\xb4\x88\xe1\x1f\x95\x9e\xfc\x6d\x69\x81\x61\xc6\xba\xef\xa0\xb5\x57\x13\x6a\xa2\x39\x4d\x62\x41\xd8\x89\xc2\xf2\x71\x4c\x3e\x93\x28\x37\x77\xf2\x3f\xcb\x3f\x8c\xb5\x64\xca\x63\x52\xfe\xa5\xf4\x8f\x42\x14\xda\xf8\x53\xaf\xa5\x6e\xfc\x25\xe8\xb4\xed\xbe\x83\x5f\x68\x5c\xfb\x36\xfc\xb2\x66\x0e\xee\x9d\x15\x83\x75\xaf\x34\x8e\xca\xbd\x60\x25\xbe\xda\x77\x04\x51\x62\x31\xc6\x4a\x91\x34\x53\x1b\xea\xeb\x18\x25\x5a\xae\x5c\x25\x47\x5e\xf1\x98\x0c\x5c\x7f\xbf\x20\x23\xce\x92\x18\x4d\x16\x96\x6b\x4d\x89\x20\x2c\x22\xcd\x2d\xdc\x63\xf9\x58\xb4\xb0\x4e\x18\x2d\xf5\x27\x3f\x72\xa1\x3f\x7f\x0f\x02\x69\x69\xe0\xaf\x21\x93\x6e\x7b\xe2\xbe\x38\x0b\xc1\x96\xfc\xa3\xb3\x27\xec\xbe\x92\x6d\xad\x0f\x5c\x20\xb9\x90\x8a\xa4\x6b\xed\x10\xef\x67\x21\xec\x05\x71\xa8\x03\xae\xdc\x51\xbf\x81\x53\x5f\xbe\x71\xbb\xe3\xbd\xc1\x92\xed\xcb\x8a\x78\xe8\xf3\x74\x3e\x9c\xd5\x53\xbd\x73\xdb\x17\x38\x31\xde\xc5\x34\x4b\xb2\xe0\xbe\x07\xf9\x42\xe6\x86\xc6\xbd\x72\xab\x3d\x86\x01\xac\x51\x34\xcb\x76\x68\x7f\xfe\xf4\xa7\xa1\x85\xc6\x98\xe3\xd4\x9c\xca\xc0\x58\x85\x22\x2e\x8c\x2c\x18\xdb\xf3\x6e\x74\xcd\xfe\x7d\xff\x6e\x70\x7f\x8a\xfa\x28\xc6\x0a\xeb\x03\x2e\x48\x26\x88\x24\x4c\x81\x1e\xaf\xbf\x57\x0b\x94\xf2\x98\x24\x46\xe3\xfc\xa8\x25\x5f\x74\x8e\x15\x3e\xc3\x0a\x27\x7c\x76\x8c\xfa\xf0\x4f\xfd\x31\x95\x08\x27\x92\x23\xec\xc8\x8a\xc4\xae\x09\xcc\x62\xc7\x5a\x30\x8a\x78\x9a\xd1\xc4\xdb\xe0\xbd\x71\x85\xb2\x98\x3e\xd1\x38\xc7\x09\xe2\x13\xcd\x55\xb4\x86\x3c\x78\x22\x4c\xe5\x38\x49\x16\x08\x27\x09\xb2\xdd\xba\x17\x90\x9c\xf3\x3c\x89\x75\xbb\x6e\x94\x92\xa6\x34\xc1\x42\xab\xe0\x66\xb4\xd7\xb6\x2d\x74\x3f\x27\x7e\xac\x30\x2e\xbd\x9a\x29\x7e\x24\x12\x51\x85\x32\x2e\x25\x9d\x24\xc5\x99\x7f\x18\x22\x18\xf7\xd9\xc5\x10\xf4\xf9\x48\x21\x6e\x78\xa8\xeb\xdc\xda\x6f\x5c\x8f\x29\x66\x8c\x40\xc7\x5c\xcd\x89\xb0\xdd\xdb\x97\xdf\x5a\x35\x7f\xb8\xba\xbb\x19\x9c\x0d\x3f\x0e\x07\xe7\xcb\xba\xf9\x7d\xff\xee\x87\xe5\x5f\x7f\xba\xbe\xfd\xe1\xe3\xc5\xf5\x4f\xcb\x4f\x2e\xfa\x0f\x57\x67\xdf\x8f\x6f\x2e\xfa\x57\xcb\x0f\x2d\x59\xb5\x56\xf3\xc3\x91\x6d\x78\xb6\x3a\x9b\xe6\x4b\xd9\x34\x7b\x5f\xae\x51\x73\x4a\x13\xd0\x41\x5b\x1b\x34\xbd\x0d\xc1\x7e\x89\x32\x2c\xa5\x91\x8c\xcc\x08\x8e\x47\xec\x92\x0b\xcd\xc0\xa6\x5c\xf3\x08\x2d\x3d\x29\x91\x47\x8a\xb2\x99\xff\xe8\x14\x8d\xf2\x6f\xbf\xfd\x53\x74\x41\xd9\x23\xfc\x45\x0e\x71\x71\x3a\x8b\x6f\x67\xf1\xfd\x6d\x59\x7c\xb5\xe8\x73\x12\x1a\x7a\xf7\x1b\x32\xa4\x85\x0b\x96\xe5\x0a\x44\x09\x9e\x2b\xfd\xa7\xee\x12\xc8\x63\x45\xe0\x50\x3b\x83\xe2\x27\xa2\xfc\x8b\x5a\xb4\x79\x0f\x76\xc4\x9f\xb8\x78\x9c\x26\xfc\xd9\x0f\xfc\x13\x51\x7a\xec\xb7\xb6\x97\x2e\x94\xa8\x0b\x25\x7a\xdb\x50\xa2\x83\x32\xe6\xbd\x3c\xf3\x2b\x5b\xfe\x0c\x07\x6c\xf0\x64\x35\x3a\xaa\x1a\xfc\x50\x81\x9b\xe9\x55\xb8\x66\xd9\x99\xb3\x86\x73\x96\x5e\x7e\x2f\xdc\xb3\x34\xe8\xd7\xe7\x9c\xbf\x09\x7f\x4b\xe7\x4e\xd9\x72\xa1\xde\x25\x83\x6d\x79\x77\xbc\x9a\x33\xe4\xe5\x19\xfe\x52\x6c\xc3\x26\xc1\x0c\x1b\x44\x2f\xb4\x0e\x57\x58\x13\x9f\x50\x1b\x90\x50\x17\x81\xb0\x1c\x72\x50\x1b\x63\xb0\x5b\x50\xc1\xb6\x77\x53\xfb\x30\x81\x4f\x44\x95\x5e\x7e\x2f\x77\x53\x69\xd0\xaf\x7f\x37\xfd\x46\xa3\x03\xba\x70\x80\x17\x5c\xba\x2f\xfd\x46\x3b\x5c\x87\xff\x6f\xc0\xc3\xdf\xb9\xf4\x37\x5a\xa3\x2f\xcb\x87\xff\xa5\x3a\xed\xdf\xa7\x97\xbe\x73\xcb\x77\x6e\xf9\xb7\xf0\x9f\xbc\x3f\xb7\xfc\xcb\xaa\xa7\xc5\xf1\x1a\x3b\x5a\xb0\xfa\x5a\x70\x28\xff\xd5\xc2\x49\x03\x7f\x39\x95\x6f\xd3\xa0\xf1\x46\x1d\xee\xbc\x18\xdf\x00\x8e\xd0\x2f\x96\x90\xd6\xa8\x73\x4b\xdf\xbd\x07\x75\x6e\x79\xd0\x2f\xaf\xc3\xbd\x19\xf3\x7d\xa1\xcb\xf3\x9d\xb0\x81\xcd\x6f\xcb\x2f\x58\x26\xef\x64\xf1\x97\xcf\xc6\x3f\x98\x09\xbd\x1f\xd9\xfb\x0d\x2e\xde\x96\xb7\xee\xde\x73\xb2\x6a\xae\xd9\xe0\x76\x5a\x97\x61\x55\xfd\x9a\x12\xf9\xc7\x77\x79\xdf\xbe\x46\x92\x55\x77\xe1\x76\x17\xae\x6d\xaa\xbb\x70\xbf\xe0\x0b\xf7\xe0\xe0\x6f\x0e\x26\x02\xb4\x0b\x22\xef\x80\x31\xba\x18\xf2\x3d\x2e\x4e\x17\x43\xde\xc5\x90\xff\xc6\x62\xc8\x77\xd1\x9e\xb6\xc5\xa2\x7c\x0b\x3d\xaa\x53\xa3\x3a\x35\x2a\xfc\xbd\x53\xa3\x3a\x35\xaa\x53\xa3\xbe\x70\x14\xd1\x4e\x87\x6a\xbf\x10\x9d\x0e\xd5\x7a\xa9\x3a\x1d\x6a\xc5\xe2\x74\x3a\x54\xa7\x43\xfd\xb6\x74\x28\xf2\x44\x98\x92\x90\x8c\x16\x6a\x14\x1f\x32\x2e\x9b\x35\xa1\x90\x3b\xd4\x68\x41\xd0\x66\x39\x29\x0c\x02\x97\x7e\x41\x73\x2c\x11\x8f\xa2\x5c\x54\xce\x40\x55\x0f\x3a\x13\x04\x2b\x02\x2d\xe8\x0f\xdf\x83\xfe\xb3\x3c\xdd\xd7\x8a\xc1\x9f\xf0\x78\x89\xda\xcd\x41\xa8\x7b\xb2\x5a\x1e\xd9\xdb\xd4\xff\x91\x93\x76\xea\xdf\x0b\x12\xb5\xc2\xf2\x71\xcf\x44\x5d\xca\xb5\xd8\x8a\xa8\xa1\x85\xf7\x42\xd4\xcb\xd3\xfd\xcd\x10\x75\xdd\xd4\x0f\x81\xa8\x9f\x6d\x1e\xff\x9e\x09\x7b\x09\x1e\x60\x2b\xe2\xf6\xad\xbc\x17\x02\xaf\x9f\xf6\x6f\x86\xc8\x9b\xa6\xff\xb6\x84\xee\x53\x24\x5b\x93\xf8\xbd\xa0\xb3\x99\x56\x33\x40\xc3\xd3\xa4\xb8\xbe\x46\x50\x91\x14\xb8\x96\xac\xfd\xab\xef\x81\xa4\xfd\x60\xcd\xd8\x7f\x33\xb4\xbc\x34\xef\x03\x21\xe2\x13\x41\x22\xfe\x04\xf5\xc2\xda\x11\xf3\x2d\x01\x0a\x06\x7e\x9d\x09\xf2\x44\x79\x2e\x93\xc5\x91\xc8\x19\x72\xcc\x1f\xf9\xe6\x8d\xb5\xfa\x99\x26\x09\xe2\x4c\xeb\x5f\x0a\x0b\xe5\x1e\x6b\xfd\x5b\xf0\x14\x4e\x45\x82\xa5\x42\x8f\x8c\x3f\x33\x34\xc5\x34\xc9\x05\x41\x19\xa7\x4c\x1d\x8f\xd8\x90\xa1\x5b\x33\x46\xc8\x1b\xe8\xa1\x5c\xea\xb3\x14\x61\xc6\xb8\x42\xd1\x1c\xb3\x19\x41\x98\x2d\x6c\x02\x6e\x41\x19\x88\x0b\x94\x67\x31\xd6\x8a\xef\x9c\x54\xa3\xf4\xfc\x18\xc1\x7c\x47\x25\xa2\x12\x91\xcf\x4a\x90\x94\x24\x0b\xdd\x87\xa6\x7d\xc5\x91\x5d\x1f\x33\x54\x9b\xce\x47\x84\xe0\x42\x42\xc6\xc1\x64\xf1\x2b\x66\x8a\x32\x82\x40\x51\x92\xc6\x34\x77\x84\x2e\xb8\x04\xb3\xcd\x0f\x7f\x91\x28\x4a\x72\xa9\x88\xe8\xa1\x49\x3e\x93\x5a\x53\xcc\x12\xac\xa6\x5c\xa4\x7a\x84\x94\x49\x85\x27\x34\xa1\x6a\xd1\x43\x29\x8e\xe6\xa6\x2d\x58\x03\xd9\x1b\xb1\x98\x3f\x33\xa9\x04\xc1\xbe\x77\xf7\x10\x7d\x1d\x3e\x33\x04\x20\xbf\xe9\x41\xda\x21\x4d\xb5\xba\x1b\x0c\xbf\xd8\x71\xb3\x27\xba\x11\x12\xa3\x09\x89\x70\x2e\xad\x87\x41\x89\x05\x22\x9f\xe7\x38\x97\xb0\x77\x7a\x7a\x36\x67\x23\xe2\x69\x96\x10\x45\x10\x9d\x22\x25\x28\x89\x11\x9e\x61\xaa\x97\xee\x8e\xac\x00\x41\xf7\x44\x6f\x37\xd0\x52\xfd\x2f\xa0\x7e\xa7\x5c\x10\x14\x13\x85\x69\xb2\xd2\xeb\x64\xbf\xed\xb8\xdc\x7b\xe2\x72\xe5\x0d\x3f\x08\x36\x67\x40\xfc\xf7\x70\x69\x33\x6b\xba\x8f\x70\xb2\xe3\xfd\x7d\x6b\x07\xd5\xd1\xf6\xfb\xa2\x6d\xb3\x6b\x87\x43\xdc\xaf\x16\x83\xdd\xbe\xa2\x45\x51\xcd\xe2\x5d\xd1\xf4\x6b\x84\x05\x74\x0e\xe7\xce\xe1\xdc\xb8\x32\xef\xd3\xe1\x7c\x30\x1e\xa3\xce\xe7\xfc\x42\x3e\x67\x2a\x3b\xa7\x73\xe7\x74\x6e\xbb\x40\x9d\xd3\xb9\x73\x3a\xbf\x5f\xa7\xf3\x4b\xe2\x3e\xef\x15\xdd\xf9\x5d\x89\xd6\x9d\x58\xdd\x89\xd5\x1d\x84\xb3\x9f\xda\xbe\x58\x98\xfb\xfa\x43\x4c\x12\xa2\x48\xb3\x3d\x8b\x88\x54\x6b\x0b\xe6\x7a\xa6\x4c\xcb\x71\x33\x41\xa4\xdc\x95\x21\xf9\x86\xdf\x27\x5b\xf2\xc3\xef\xa0\xe6\x3b\x3e\xd5\xf1\xa9\x6d\xa6\x76\x38\xa6\xd9\xe0\x30\xbf\x96\x6d\xd6\xf3\xdf\x2c\x6f\x96\xfe\x1e\x8c\x1b\xb2\xf0\x8b\x1a\x0a\xd7\x52\xbb\xe2\xfe\x70\x5b\x3a\xdf\x91\x1f\x9b\xbe\xde\x27\x33\x36\x63\xef\x38\x71\xc7\x89\x3b\x4e\xfc\xbe\x39\xb1\x3b\xc9\x6f\xea\x22\x33\x7e\xba\x71\x96\x60\x36\xa6\xb1\x3c\xf9\x67\xa1\xcb\xbf\x94\x87\x4c\x1f\xa8\xd8\xa4\x98\xfa\x94\x4e\xf1\x8b\xfe\x24\x29\x0c\xe6\x1e\x33\x73\x8d\x13\xcd\xd8\xd8\x6f\x12\xcc\x86\xf1\xbb\xf0\xa3\xd5\xce\xfe\x35\x7c\x6a\xbb\xf0\x71\xac\xc0\xd3\x81\x29\x33\x26\xbc\x22\xaf\xb6\x64\xa0\x3c\x8c\x13\xbe\x0b\x57\x0f\x26\x16\x30\x76\xc7\xaf\x83\x45\x39\xbc\x69\x77\x7e\x9d\x2e\x97\xb0\xf3\x5c\xb4\x9c\x70\xe7\xb9\x38\x5c\xcf\xc5\x5b\xb9\x23\x5f\xf9\x78\xbe\x96\x58\xd7\x3e\x08\xdf\x44\xab\x41\x50\x6b\x9e\x25\x1c\xc7\xab\x5c\x31\x85\xe0\x15\x82\xa3\xac\x8d\xc4\x2f\x3e\x7b\x0f\xc2\x5a\x31\xda\xdf\x58\x24\xdf\xf2\xc4\x0f\x45\x4b\x79\xc5\x50\xbe\x7a\x12\xdf\x40\x25\x79\x1f\xf8\xa9\xc5\x78\xbb\xd0\xbe\xce\xa2\xf4\xf6\x16\xa5\x2e\xb4\xaf\x53\x01\x0f\x4c\x05\xec\x42\xfb\xba\xd0\xbe\x4e\x41\x5e\x3d\xed\x4e\x41\xfe\x22\x42\xfb\x5a\x89\xda\x2f\x88\xbd\xb9\xbb\xd0\xdd\xc9\xdc\xee\xbd\x4e\xe6\xee\x64\xee\x2f\x54\xe6\x3e\x8c\x15\xee\x04\xee\x4e\xe0\xee\x04\xee\x4e\xe0\xee\x04\xee\xbd\x2f\x63\x27\x70\xbf\x66\x81\xce\x7a\xa9\x7b\x4d\x92\xcd\x7b\xf5\xe5\x74\xe2\x76\x27\x6e\x1f\xb6\xb8\x7d\x30\x13\x7a\x3f\x65\x1e\xdb\xcd\xa7\x2b\x52\xde\x15\x29\xef\x8a\x94\xbf\x78\x91\x72\xf7\x75\x8b\x8c\x0f\x7b\xb8\x14\x56\xb9\x34\x80\x8f\x82\xcc\xa8\x54\xc0\xfe\xdb\xc8\x2b\xeb\x13\x3d\xde\xab\x9c\xd2\xa5\x7a\xf8\xa7\x9d\xd4\xd2\x49\x2d\xbf\x51\xa9\xe5\x80\x62\xc1\x0e\x22\x63\x25\xc5\x2a\x9a\xe3\x49\x42\xc6\xde\xe8\x23\xdb\xea\xc1\x17\x54\x2a\x89\xa2\x5c\x2a\x9e\x36\x5f\x2e\x97\xae\x87\xbe\xef\xe0\x8c\xb3\x29\x9d\xe5\xe6\x6e\x31\xe0\x9c\xc1\x89\x2e\x24\xc1\x45\x46\xd6\x79\xaa\x6a\x5a\x7f\x17\xd7\x52\xfd\xd0\x5f\xeb\x76\xda\x44\x70\x2f\x8c\x7c\x56\xea\xd6\xb2\xd6\xf8\x76\x70\x77\xfd\x70\x7b\x36\x38\x45\xfd\x2c\x4b\xa8\xb1\xbb\x1b\x52\xa0\xbf\xea\x49\x21\x85\xe5\x63\xb1\x97\xc2\x90\xb9\xc1\xb0\x05\x43\xbf\x96\x8d\xd1\x11\x3a\xbb\x78\xb8\xbb\x1f\xdc\x36\x34\x68\x09\x05\xf2\x56\x49\x9a\x25\x58\x91\x18\x3d\xe6\x13\x22\x18\xd1\xd2\x8e\x45\xba\x2d\xcc\xff\xa6\xd1\xc1\x7f\x0f\xce\x1e\xee\x87\xd7\x57\xe3\xbf\x3e\x0c\x1e\x06\xa7\xc8\x51\x9c\x6e\x56\x8f\x4b\x8f\x22\x5e\x30\x9c\x6a\x0d\x44\xff\x50\x64\xca\xfe\x23\x27\x39\x41\x58\x4a\x3a\x63\x29\x01\x44\xe0\x52\x8b\x6e\xc0\x17\xfd\xef\x06\x17\xe5\x96\xe7\x24\x84\xdf\x45\x09\x9e\x90\xc4\xfa\x23\xc0\xc4\xae\x09\x3d\x80\x2a\x36\x8e\x8a\xdc\xac\xea\x5f\x1f\xfa\x17\xc3\xfb\x9f\xc7\xd7\x1f\xc7\x77\x83\xdb\x1f\x87\x67\x83\xb1\x95\x2a\xcf\xfa\xba\xdf\x52\x4f\x56\xf8\x44\xff\xc8\x71\xa2\xb5\x13\x3e\x75\x78\xbc\xe8\x79\x4e\x18\xca\x19\x50\x9c\x51\x79\xb4\x1e\xe4\x3b\xd5\xa7\xcc\xcc\xe8\xe6\xe2\xe1\xd3\xf0\x6a\x7c\xfd\xe3\xe0\xf6\x76\x78\x3e\x38\x45\x77\x24\x01\xa5\xc0\x2d\x3a\xec\x62\x96\xe4\x33\xca\x10\x4d\xb3\x84\xe8\xd5\xc0\x36\x9b\x78\x8e\x9f\x28\x17\xf6\xe8\xce\xe8\x13\x61\x66\x1d\xe1\xcc\x42\xfb\x4e\xf8\x1e\x07\x4b\x77\x7d\xf5\x71\xf8\xe9\x14\xf5\xe3\xd8\xcf\x41\x42\x1b\x25\xca\x71\xb0\xce\x47\xe5\x61\x6b\xe6\x00\xdd\x1b\x22\xe2\x4f\x44\x08\x1a\x93\x0a\x1d\xf5\xef\xee\x86\x9f\xae\x2e\x07\x57\xf7\xb0\x62\x4a\xf0\x44\xa2\x39\x7f\x06\x53\x36\xcc\x10\x2c\xdc\x4f\x98\x26\xd0\x99\xdb\x2c\xce\xd0\xf3\x9c\x82\xfb\x03\x80\x99\x7d\xcf\x46\x3f\x13\x39\x7b\x73\xeb\x6c\xe9\xe0\x2d\xab\x2d\xd5\x93\xb4\xfc\x46\xe5\x58\xac\x7a\xa1\x44\xe5\xcb\x2f\xae\xa3\xd6\xe5\x2f\x2a\xe4\xd6\xac\xac\x2d\xd1\x4b\xf3\x4c\x8b\xbd\x6e\xad\xab\x95\xd7\xf0\xf5\xae\x59\xa2\x04\x8d\xe4\xcb\x42\x3d\x89\x9c\x29\x9a\x12\x64\x3b\xb3\x87\x73\x8f\xf0\x4f\x97\xa6\xe1\xf7\x70\xc1\x2e\x95\x72\xf8\x44\x94\x1d\x7e\xa7\x02\x76\x2a\xe0\x61\xa8\x80\xef\x2d\xdb\x3f\x26\xd9\x72\x87\x95\x89\xc1\x3b\xc6\xeb\xb5\x14\xa4\x61\xec\x89\xd6\xa2\x9a\x90\x27\x92\x80\x94\xa7\x04\xd6\x4a\xa3\x95\x5d\x26\x82\xe0\x47\x2d\xf0\xc5\xfc\x39\x94\x5c\x6a\x90\xfb\xd1\x7e\x6e\xe1\x36\x41\x1c\x7f\xfa\xe3\xeb\x5d\x16\x7a\xb9\xe3\xd7\x28\xe1\x7d\x0b\x41\x32\x2b\x31\x02\x83\x04\xfb\x5f\xac\x25\x78\xcd\x6d\x11\x7c\xf1\x1e\x2e\x8a\x70\xb8\x07\xa4\x75\xdd\x86\x4a\xb0\x63\xa1\x29\x51\x38\xc6\x0a\xeb\x43\x33\x23\xea\x18\x5d\x33\x78\x76\x8f\xe5\x63\x0f\xb9\x2b\x4f\xb3\x95\xc2\xca\xf0\x0a\xa9\xf5\xef\xc4\x80\xbf\x39\x1f\xef\xae\xef\xee\xfa\xae\x5f\x99\x2e\xcc\xb3\x61\x85\xf7\x75\x31\x6e\xe4\xf3\xda\xdf\xfd\x65\x5a\x7c\xbf\x57\xd8\xeb\x3a\xb9\xf6\x7a\xa1\x99\xca\x59\xdd\x6d\x65\xfe\xaf\xbb\xad\xba\xdb\xaa\xbb\xad\x0e\x60\x85\xdf\xdc\x61\x58\xc3\xdd\xdf\xd4\x63\xb8\x4e\x3b\xdd\x1a\xf2\xae\xd0\x46\x37\x01\xbd\xfb\xa5\x2d\xb6\x5d\xf1\x0d\x7d\x1f\x3e\xc2\x60\x92\xaf\x91\xd6\xb6\xd7\xcb\xdc\xe4\x8b\x74\xfa\xe9\x0b\xde\xf8\x1d\x02\xe1\x5e\x11\x08\x0f\x63\xae\x2f\x92\x02\xf7\x36\x16\xd3\xb7\x4f\x7b\xeb\xa0\x06\xbb\xc4\xae\x2e\xb1\x0b\x7e\xef\xa0\x06\xf7\x47\xad\x2f\x2b\x5d\xf3\x98\x8c\x2b\x51\x02\xfe\x9f\xe3\xaa\xe7\xa7\xf4\x24\x74\x03\x95\x1e\x14\x99\x6e\xd0\x3a\x8d\xf7\x59\x44\xea\x8a\xc7\xa4\x75\x24\x41\xe9\xe5\x03\x97\xc1\xdd\x3c\x8d\x2c\x5e\x1a\xf8\x0b\x4b\xe2\x0d\x5b\xfe\x25\x1a\x76\x6a\x08\xb8\xb3\xf2\xac\x5d\xa8\x2f\x35\xbe\xa0\xe0\x50\xef\xc8\x53\xd1\x8e\x8d\xbb\x98\xc6\x71\x03\x33\xaf\x7f\xee\x59\x7a\xfd\xe3\x97\xc1\x0c\x6a\xcf\xd1\xc1\xac\x12\xbe\xfd\x3e\xec\x2a\xe1\x88\x5f\xc3\xb2\xb2\x72\xef\xbf\x38\xae\xbe\x8a\x92\x3b\xde\xde\x72\xb9\xbe\x54\x0e\xdf\x41\xfc\xac\xb2\x75\x74\x18\x3a\x9d\xa9\xe5\x70\x26\xdc\x99\x5a\xde\xb5\xa9\xc5\xb8\x68\xc7\x19\x16\x84\xa9\x1a\x91\xba\x7a\x9d\xc0\xeb\x21\xe6\x82\x93\x3a\xa0\x01\xa4\x25\x5a\x64\x2f\x64\x7f\x55\x7d\x59\xb6\x17\x2b\x18\x04\x99\x90\x27\xff\x2c\xfe\xf6\xc2\x7a\xa9\x02\xc4\x8a\xe8\x24\x83\xf5\x2f\xf5\x1d\x9d\xdb\x40\xa5\xdd\x73\x25\xb1\x2a\x89\x82\x10\x44\xbd\x36\x9e\xe9\xc6\xbc\xfd\xbe\x52\x24\x97\x06\xfd\xba\xb1\x4d\xcb\x1b\xdf\xee\x00\xb9\x9d\xa1\x26\xdd\x2f\xc8\x29\xd3\xd2\x28\x9f\x16\x17\x83\x44\xcf\x34\x49\x00\x51\x04\x32\x1e\x9b\x6e\x80\xdf\x5c\xc4\x43\xe3\xce\xbf\x69\xdc\x43\x1d\x77\xa8\x63\x09\x6d\xec\xa9\xfb\xca\x99\x76\xc4\x06\xe9\xac\xa0\x0d\xad\x31\xc0\x7e\x19\x9c\xe0\x13\x51\xaf\xc5\x06\xb6\x3d\xfb\x2b\xcf\xbd\x20\x53\x22\x08\x8b\xc8\x01\x7a\xdb\x37\x09\x03\xf9\xc9\x4c\xd2\xc6\x80\x78\x28\x81\x70\xaa\x8a\x5b\x3d\xad\x24\xea\x76\x99\xe4\x5d\x26\x79\x97\x49\x5e\x3d\xea\x5d\x26\x79\x97\x49\x5e\x9b\x03\x11\x93\x84\x28\xd2\x28\x55\x9c\xc3\xe3\xb7\x92\x2a\x4c\xef\x5f\x86\x60\x61\xe6\xd2\xc9\x16\xbf\x19\xcd\xc2\x6d\xf8\x41\x68\x16\xe6\xac\xad\x33\x3f\x94\x7e\xac\x09\xb1\x7e\x75\x93\xc4\x36\x4c\xa3\x64\x97\x38\x87\xd7\xdf\x25\xeb\xa8\x0e\xbd\xb3\x51\xa0\x60\xeb\x5e\x8e\x93\x2c\x1d\x81\x76\x13\xb7\x1e\xc3\xf7\x3b\xef\x43\xe1\xa0\x4d\x74\x7f\xa8\x7c\x74\xeb\xa4\x94\x43\xb1\xd8\x7c\x41\x3c\xb2\xb3\xde\xbc\x71\xae\xc4\x12\x33\x7c\xb7\xd3\xed\x8c\x55\x9d\xb1\xaa\x33\x56\x75\xc6\xaa\xce\x58\x85\x3a\x63\xd5\xc6\xc6\xaa\x2f\x48\xa6\xea\x0c\x57\x9d\x58\xb5\xbf\xe9\x1e\xaa\x96\x79\x48\xd6\xba\xd6\x28\xe9\x45\x0e\xd5\xda\xc8\x7b\x3b\xed\x5f\xd6\x84\xdc\xdf\xb8\x11\xbc\x1f\x7e\x25\x5f\x9a\x25\xed\x12\x58\xec\x76\xf4\x8b\x8d\x2b\xee\x4a\x87\xd6\xae\x55\x17\xf6\xbc\x62\x71\xba\xb0\xe7\x2e\xec\xf9\xe0\xc2\x9e\xf7\xae\xac\x64\x5c\xae\x02\x24\x32\xa5\xb3\x56\xe6\x3f\xbb\x3b\x1b\x12\x8d\x80\x14\x0c\xca\x71\x4c\xb2\x84\x2f\xc0\x92\xb2\xe2\x3a\x77\x5d\xdc\x2c\x49\xd4\x87\x7e\xa3\xbb\x91\xbf\x96\xce\x71\x28\x32\x69\x31\xef\x83\x90\x42\x4f\xfe\x59\x49\xe7\x6f\x85\x97\xc9\x10\xf9\x4c\x25\xdc\x4a\xeb\x09\x7b\xc4\xea\x9f\x04\xa5\x0b\xed\x3d\x38\xc9\x55\x90\xbb\x27\xb5\x60\x95\x11\xa1\x16\xc1\x9b\x24\xcd\xd4\xe2\xbf\x46\x8c\x2a\xef\x61\xa3\x33\xc6\x85\xe1\x6a\xfa\xe3\x39\x66\x71\x42\x84\xbe\x54\x5d\x3b\x11\x66\x8c\x2b\x10\x37\x60\x06\x31\x7a\xa2\xd8\x08\x27\xfd\x9b\x61\x6b\x3f\xf3\x3b\x3a\x5d\xaf\x5d\xac\x6e\xcd\x5d\xf7\x29\xe1\x13\xa8\x60\x99\x97\x75\x7a\xdd\x40\xe7\x19\x2d\xed\xdc\x5b\x31\x04\x85\xe5\x63\x15\x38\xa4\x9c\x85\x3e\x5e\x09\x25\xb2\xe6\xdd\x12\xc6\xfc\xea\x57\x2b\x70\x23\xe5\x67\x16\x80\x04\x1e\xc3\x90\xab\xe3\x70\x3f\x86\x1d\xba\xdf\x8a\x96\xdd\x2f\xae\x74\x37\xfc\x28\x88\x12\x8b\x31\x56\x4a\x33\x99\x7d\x62\x9c\xdc\x63\xf9\xd8\x1a\xe3\xa4\xf4\xf2\x81\xb3\x9c\x12\xc6\x49\x79\xe0\x2f\xce\x72\x5a\x52\xe7\x1a\xce\xf4\xfe\xf2\xe3\xdb\x9e\xb5\x0d\x26\xfe\x5b\xc9\x95\x6f\xc7\x7b\xd6\x99\x69\xdf\x63\xde\xfc\x2a\x66\x7a\x30\x23\xac\xf0\xf3\x2f\xf1\xe4\x96\x6f\xa7\xee\x88\xae\x5a\xa3\x2f\xae\x10\x6e\x45\xe8\x58\x33\xb7\x77\x52\x10\xb7\x2a\x37\xed\x7b\x54\x2f\x63\xe6\x0e\x76\x63\x93\x18\xa0\x61\x19\xad\xdc\x9f\x21\x17\x15\x54\x94\x9e\x9d\x43\xa2\x35\x95\x61\x42\x7c\xc4\x85\x91\xbc\x62\x7b\x66\x8d\xd9\xce\x80\xf9\x9e\xa2\x3e\x8a\x6d\x6d\x7e\x41\x32\x41\x24\x61\xca\xa8\xda\xa6\xde\x95\x2b\xef\x4f\x99\xb5\x10\x9d\x63\x85\xcf\xb0\xc2\x09\x9f\x1d\xa3\xbe\x2f\xec\x4f\x25\xc2\x89\xe4\x08\x3b\xc2\x21\xb1\x6b\x02\xb3\xd8\xb1\x07\x8c\x22\x9e\x66\x34\xf1\x48\xed\xde\x8a\x4f\x59\x4c\x9f\x68\x9c\xe3\xc4\x23\x63\x8f\xd8\xe0\x89\x30\x95\x83\x0a\x87\x93\x04\xd9\x6e\xdd\x0b\x81\x7e\xee\x46\x29\x69\x4a\x13\x2c\x90\xe2\x76\xb4\xd7\xb6\x2d\x74\x3f\x27\x7e\xac\x0e\x05\x1c\xa5\xf8\x91\x48\x44\x15\xca\xb8\x94\x74\x92\x14\xc7\xf8\x61\x88\x60\xdc\x67\x17\x43\x30\x8d\x46\x0a\x71\xc3\x07\x5d\xe7\xd6\x4f\xe0\x7a\x4c\x31\x63\x04\x3a\xe6\x6a\x4e\x84\xed\xde\xbe\xfc\xd6\x56\xce\xb7\xc6\x88\x6e\xb6\x98\x86\x23\x7b\x3b\xa5\xb3\xb5\xc6\xd9\x56\xdd\x6c\xa7\x6b\x36\x2b\x9a\x2f\xe0\xa5\x6d\xaf\x0d\x5e\x50\x59\x56\x07\xdf\x85\xcb\xb6\x34\xe2\xd7\xc0\x47\xfb\x8d\x2a\x82\x9d\x16\xf8\x22\xeb\xf6\xa5\xaa\x80\x07\xae\xff\x75\xc8\x6e\x1d\x8a\x7d\x17\x80\xb1\xc7\xc5\xe9\x02\x30\xba\x00\x8c\x2f\x36\x00\xa3\x59\x9b\xa0\xf1\xce\xe9\x7a\x1b\x56\x90\xf2\x46\x01\xf1\x0b\x88\x52\x58\x3e\xb6\xad\x29\xa5\x45\xe5\x61\xfc\x2e\xa4\xfa\xda\x09\xbf\x86\x74\xdf\xd5\x29\xda\x6b\x9d\xa2\x83\x9b\x76\x27\xf8\x75\x82\x5f\x27\xdb\xb4\x9c\x70\x27\xdb\x1c\xae\x6c\xf3\x56\x0a\xcb\x97\x04\xa1\xab\x85\xa7\x52\x66\xcc\xca\x00\x5b\x03\x47\x03\xee\x81\x3c\x4b\x38\x8e\xd7\x05\xe1\xfc\x82\x0a\xb9\x66\x85\x68\x66\xda\xd5\x1f\x1c\xb8\x64\xb6\x14\x7f\x63\x46\xfe\x5b\x88\xa9\x6d\x9c\xfa\x9b\x86\xd5\x02\xfd\x42\x30\x59\x29\x28\xed\xa5\xb4\x90\x2a\x4d\xb7\x52\x38\xe4\x1f\x0f\x9c\xaa\xfd\x96\xbe\x86\x7a\xf1\x05\x3b\x08\x3a\x27\xc0\x6f\xb3\xf0\xf9\xc1\x48\xad\x9d\x6a\xd7\x65\x55\x76\x46\xfd\x4e\xf1\xed\x14\xdf\xbd\x2f\xe3\x21\x29\xbe\x6f\x28\x51\x9b\x34\x91\x17\x29\x63\xb8\x9d\x6c\xdd\x89\xd6\x9d\x68\xdd\x89\xd6\x5f\xac\x68\x7d\x18\x2b\xdc\xc9\xd5\x9d\x5c\xdd\xc9\xd5\x9d\x5c\xdd\xc9\xd5\x7b\x5f\xc6\x4e\xae\xae\xc8\xd5\xf0\x97\x4b\x93\xde\x54\xc8\x6e\x2d\x5c\xb7\xc8\x89\x7e\x2f\x92\x75\x27\x55\x77\x52\xf5\x61\x4b\xd5\x07\x33\xa1\x2f\x2f\x11\xb2\x4b\x25\xec\x52\x09\xbb\x54\xc2\xb7\x48\x25\x74\xbc\x64\x95\x84\xb2\x2c\x58\xfc\xb8\xc4\x81\x0e\x56\xb6\x28\x46\xbb\x6d\x78\xc7\xbe\x96\xda\x01\xcd\x6f\x53\x69\xaa\xf4\x9b\x6b\xe8\x80\xea\x4f\xf5\x9c\xb4\xa0\x19\x85\x1b\xdf\x7a\x84\xb0\x9f\xec\x9b\xef\x0b\x0c\x7c\x79\xd4\x5d\xfd\x29\x14\xec\x5a\x57\x7f\xea\x05\xe7\xed\x0e\xd7\x9a\x99\x3b\x1a\x35\x36\xde\x77\x3a\xed\x37\x07\x97\x6b\x3e\xe9\x6f\x1a\x2e\x57\x7b\x93\x2c\x25\xef\x9c\xfc\xb3\xf6\xa2\x78\x83\xb2\x5b\x1b\xdf\x0e\x9f\x88\xfa\x52\xae\x86\xae\xec\x56\x57\x1f\x62\x4f\xd3\xdd\x8a\xf5\xbf\xdb\xd9\x76\x45\xc6\xba\x22\x63\x5d\x91\xb1\xae\xc8\x58\x57\x64\x0c\xfd\xc6\x8b\x8c\x6d\x2c\x3e\x9a\x71\x7c\x29\x12\x64\x57\x64\xac\x13\x22\xf7\x37\xdd\xdf\x96\x10\x79\x80\x16\x84\x83\xa8\xa6\xe6\x2d\x08\x6f\x8e\xfb\xe1\x46\xd2\x16\xfb\xc3\x2d\x68\x87\xff\x61\xff\xaf\xc3\xff\xe8\xf0\x3f\x1a\x66\xdd\x05\xb3\x76\xf8\x1f\xa8\x0b\xd7\xec\xc2\x35\x0f\x39\x5c\xb3\xc5\x36\x76\xf8\x1f\x2d\xc5\xb9\x17\xc2\x00\x71\x32\xd7\x46\x38\x20\x3f\x2d\x2b\x1a\x07\x2b\xa5\xb9\xb1\xfe\x76\x70\x40\x6a\xa7\x7d\x10\x2a\xc9\x2b\xe2\x80\xd4\xd1\x75\x6b\x05\xe4\x7d\xe0\x81\xb8\xd1\x76\x89\x8b\x5d\x88\xf5\xe1\x87\x58\x1f\x5c\xe2\xe2\xc1\x48\xb2\x9d\xba\xd7\xe5\x2e\x76\xb9\x8b\x9d\x32\xdc\x29\xc3\x7b\x5f\xc6\x43\x52\x86\xdf\x58\xc2\x7e\x41\x5c\x90\xdd\x64\xed\x4e\xd4\x36\xef\x75\xa2\x76\x27\x6a\x7f\xa1\xa2\xf6\x61\xac\x70\x27\x67\x77\x72\x76\x27\x67\x77\x72\x76\x27\x67\xef\x7d\x19\x3b\x39\xfb\xd5\x70\x42\xea\x84\xed\x96\xf9\x36\xef\x49\xd2\xee\xa4\xec\x4e\xca\x3e\x6c\x29\xfb\x60\x26\xd4\x61\x86\x74\x98\x21\x1d\x66\x48\x87\x19\xb2\x95\x7c\xf3\x6f\xf6\x58\x7e\x08\x6e\x62\x7f\x65\x7f\xf8\x2e\xe1\x93\xfb\x45\x46\xf4\x7f\xcf\x69\x4a\x98\x04\x69\x94\xaa\x45\x28\xcf\x34\xac\xfc\xf2\x9a\x7f\xb8\x1b\x5e\x7d\xba\x08\xb3\x69\x3e\x5c\x3e\x5c\xdc\x0f\x6f\xfa\xb7\x7e\x5d\xfc\xac\xc2\xb5\xb0\xdf\x95\x44\x32\x4b\xf2\xb7\x44\xeb\x9e\x70\x6a\xee\x14\x56\xb9\xdc\x6e\x64\xb7\x83\xbb\xc1\xed\x8f\x90\x0d\x34\x3e\x1f\xde\xf5\xbf\xbb\x28\x11\x44\xe9\x79\xff\xec\xaf\x0f\xc3\xdb\xe6\xe7\x83\xff\x1e\xde\xdd\xdf\x35\x3d\xbd\x1d\x5c\x0c\xfa\x77\xcd\x5f\x7f\xec\x0f\x2f\x1e\x6e\x07\x2b\xd7\x63\xe5\x68\x57\x2b\x21\x12\x16\x09\xe2\xfc\x51\x64\xb9\x86\x28\xd6\x10\x79\xf1\xd1\xb1\xc3\xba\xbe\x4e\xd1\x83\xd5\xe9\xa9\x6d\xdc\x30\xd8\xa0\x21\xa3\x8c\xc4\x54\xe2\x49\x42\xe2\xa5\x96\xdc\x1a\x36\xb5\x84\x4b\x83\x7a\xd6\xda\xb3\x17\x39\x35\xcf\x8b\x0c\x2f\x40\x90\xa3\xa8\x08\x8b\x6b\xfa\x30\xfb\xd0\xd8\x03\xd3\xbc\x8b\x3e\x91\x52\x4f\x51\x2e\x04\x61\x2a\x59\x20\xf2\x99\x4a\x25\x97\x1a\x75\xdb\xd7\xd4\xac\xbd\x53\x7d\x83\x73\x2c\xd1\x84\x10\x56\x1e\xbf\x20\x09\xc1\xb2\x66\xcc\x76\xf7\xdb\x2d\x8b\xdf\x2b\x6b\x8d\x31\x97\xd1\x14\xd3\x24\x17\xa4\x72\x5a\x78\x9a\x61\x41\x25\x67\x83\xcf\xfa\x2e\xd3\x07\xf9\x1a\x3e\xe7\x62\xbb\x13\x33\xf8\x6b\x48\xc1\x57\xe5\x7f\x7e\xba\x2f\xff\xab\x74\xe6\x2f\xee\xcb\xff\x5a\x4d\xeb\x41\xc3\x55\xca\x3e\x42\x9f\xee\x4f\xd1\x27\x08\x71\x12\xe8\x7e\x8e\x0d\xc5\x5e\xdc\x9f\xa2\x0b\x22\x25\xfc\x52\x7c\xac\xa8\x4a\x60\x6e\xdf\x51\x86\xc5\x02\xb9\xe9\x9b\x44\x57\x1c\xcd\x11\xf1\x4b\x53\x5d\x3c\xf6\xf7\x9c\x81\xea\x5e\xac\xde\x05\x9f\xd1\x08\x27\xbb\x2d\x62\xff\xaa\xc4\x07\xae\x6f\x57\x2e\x45\xf8\xf6\xf2\x5a\xf4\xaf\xce\x21\x89\xd4\x0d\xb5\x66\xe6\x57\x44\x6a\x22\x89\x38\x8b\xad\x97\x46\xdf\xfe\x8b\x40\xa8\xff\x3b\x87\x44\xdc\x5c\x52\x36\xd3\x2d\xa2\x13\x74\x7d\x3b\x62\xd7\x22\x36\x86\x50\xa2\xa5\x61\x43\x73\x54\x22\xc6\x15\xa2\x69\xc6\x85\xc2\x4c\x69\x45\x00\xc4\x00\xbb\x22\x86\x03\x9c\xf1\x34\xcd\x15\xd6\x07\x6d\x69\x51\x99\x31\x87\xdc\x11\x35\x8c\xc1\xb5\x52\xb3\x86\x46\x4e\x28\xe6\x92\x09\xdd\xbe\x96\x51\xca\x3a\x34\x8d\x97\x54\x59\xd7\x04\x16\x02\x97\xa5\x89\x0f\x54\x91\xb4\xfa\x7e\xcb\x20\xcf\x7f\xd5\x1a\x08\xce\x4c\x52\x05\x11\x7d\x11\xcd\xa9\x22\x91\xd2\x47\x70\x2b\x9a\x78\xb8\xfa\xe1\xea\xfa\xa7\x50\x82\xf8\xd0\xbf\x3c\xff\xf3\x7f\x94\x7e\xb8\xbd\x5c\xfa\x61\xfc\xe3\x9f\x97\x7e\xf9\xff\xad\xa4\xa7\x6a\x4f\x4b\x7a\x7e\x30\x97\x23\x10\xa9\xc1\x26\xec\xa6\x8a\x68\x8a\x67\x04\xc9\x3c\xd3\x14\x20\x8f\xcb\xfb\xab\x45\xca\x0b\x8e\x63\xca\x66\x26\x03\xf4\x82\x2a\x22\x70\x72\x89\xb3\x8f\xce\x7e\xbd\xc5\xea\xfc\xdf\xbb\x52\xbe\xee\x87\x9f\xfb\x97\x61\xc6\xef\x87\x9b\xdb\xeb\xfb\xeb\x95\xb3\x2e\xb5\xb0\x7c\x8c\xf4\xe3\x53\xf8\x5f\x74\x82\x74\xeb\x5e\xf2\x4d\x89\xc2\x5a\x23\x40\x5f\x9b\xa4\x39\x9f\x48\x43\x59\x02\xa7\x26\x13\x34\xa5\x70\xa5\x18\x0b\xde\x37\x46\xb8\xf6\xda\x83\x3f\x37\xe6\x03\xd0\x96\xdd\xa5\xcc\x62\x2c\x62\xf4\x77\x59\x4d\x1f\x07\xc3\xb1\xf9\x81\xc4\xe8\x08\xcd\x95\xca\xe4\xe9\xc9\xc9\xf3\xf3\xf3\xb1\x7e\xfb\x98\x8b\xd9\x89\xfe\xe3\x88\xb0\xe3\xb9\x4a\x13\x93\x2e\xaf\x57\xe1\x14\xdd\x08\xae\xaf\x10\x50\xd0\x89\xa0\x38\xa1\xbf\x92\x18\x4d\x0c\xff\xe3\x53\xf4\x4b\xc4\x05\x39\x2e\x36\xc6\x1a\x95\xec\x3d\x62\x0d\x4f\x27\xfa\xa5\x1a\x66\x52\xdd\x4f\x14\x93\x88\xc6\x56\xcc\x20\x2c\xe2\x60\x79\x34\xbe\x0a\xdd\x9e\xcb\x34\xd4\x1a\x4d\x96\xab\x62\x39\x03\x65\x05\xc7\x24\xc8\x76\x57\xbc\x4c\x70\x5a\xf1\x19\x1a\xb5\x35\xd7\x2a\xba\xbe\x5b\x31\xdc\xaa\xee\xd5\x4c\x4f\x38\xe2\x09\x9a\xe4\xd3\x29\x11\xa1\x43\xba\xa7\xb5\x19\x2a\x91\x20\x11\x4f\x53\x90\x18\xf4\x57\xb9\x34\x54\x0d\x2b\x66\x47\x7b\x3c\x62\xb0\xff\x5a\xcd\x01\x0a\x88\x39\xb0\x3a\x46\x48\x8c\x30\x5b\x98\x6e\x26\xf9\x34\x6c\xdf\xc0\x50\xe0\x18\x51\x35\x62\xfd\x24\x41\x82\xa4\x5c\x91\x20\x87\x12\x9c\x67\xe5\x05\x07\x16\x29\x48\x96\xe0\x88\xc4\x86\x1e\x12\x1e\xe1\x04\x4d\x69\x42\xe4\x42\x2a\x92\x86\x0d\x7c\x0d\xb6\x1a\xbd\x66\x54\xa2\x98\x3f\xb3\x84\x63\x3b\x8f\xea\x67\xdf\x94\x4f\xe3\xc0\x41\x04\x0c\x84\xe0\x02\xfe\xe7\x07\xca\xe2\xbd\x71\xa8\x87\xbb\xc1\x6d\xf8\xef\xbb\x9f\xef\xee\x07\x97\x9b\x71\x1f\x4f\x59\x30\x3c\xd0\xe1\x4f\xd1\x9d\x59\x04\x2e\xb4\x44\x24\x1a\x26\x75\x69\x49\xa9\xf8\x81\xc7\x5b\x72\xdf\xcb\xfe\xd5\x43\xbf\xc4\x51\xee\xce\xbe\x1f\x9c\x3f\x54\xf4\x01\x3b\xbf\x92\x0c\x6f\xd4\xbf\xf0\xb7\xb3\xef\x87\x17\xe7\xe3\x1a\x85\xf1\xc3\xed\xe0\xec\xfa\xc7\xc1\x6d\xa1\xdb\xd5\x2e\x51\x65\x30\x55\x66\x75\x6f\x98\xd2\x9c\xc7\x68\xb2\xa8\x07\x84\xd0\x92\x73\x02\xbe\xd8\x02\x12\xc5\xb4\x7a\x0a\xbc\xc9\x61\x73\x14\x5f\xa4\x3c\x26\x3d\xfb\x0e\x20\x69\x18\xe3\x8a\x91\x98\xeb\x1b\xd6\xbd\x63\x16\x18\x2a\x0c\xc8\x85\x5f\xb8\x53\xd4\x47\x52\xbf\x98\xeb\x43\x2d\xe8\x6c\x06\x86\xc3\xca\x50\x4d\x6b\xf6\x53\x58\x5e\xf8\xce\xec\x7f\x26\x38\x9c\x73\xdd\xad\xb5\x38\x7b\xab\x84\xf9\x10\x50\x57\xca\x2d\x0a\x0c\x06\x87\x9a\xa1\xb9\xcd\xd2\x8b\xd0\xb8\x5e\xe6\x3c\x1a\x7b\x91\x3e\x5c\xc0\xb6\xa4\xb1\x77\x66\x82\x3c\x51\x9e\x07\x9f\x5a\x60\x8f\xd2\x8e\xd7\x36\x5f\x2c\x00\x2c\x9b\x31\x8a\x54\x9a\xf1\xe4\x51\xdb\x82\x66\x61\x4f\xd0\xc2\x54\xf0\xb4\xa6\x8d\xf2\x31\x19\x5e\xdf\x29\x81\x15\x99\x2d\xce\x2d\xcb\xd8\xfe\x78\x9c\x5f\xff\x74\x75\x71\xdd\x3f\x1f\x0f\xfa\x9f\xca\x27\xde\x3f\xb9\xbb\xbf\x1d\xf4\x2f\xcb\x8f\xc6\x57\xd7\xf7\x63\xf7\xc6\x4a\x92\x6f\xe8\x60\xf9\x9e\x2e\xbf\x78\x8a\x34\xcb\x05\xd6\xe8\x00\xef\x02\xfe\x38\x21\x53\x2e\x0c\x9f\x4f\x5d\xe8\x82\x15\x61\xdc\xda\x5a\x5d\xac\x32\x8b\x53\xb0\x8c\xd5\x35\x69\xac\xde\x4a\x10\x9c\xc2\x3d\x81\x19\x1a\xb0\xf8\xe8\x7a\x7a\x74\x67\x7e\x4c\xb1\x78\x24\xc2\x7f\xfa\x2c\xa8\x52\x84\x95\x54\x3a\xec\x86\xec\x95\xc4\xa2\x83\x63\x74\xab\xf9\xbe\x7e\xdf\x5f\x6a\x9a\xd8\x63\xa2\x30\x4d\xa4\x1d\x6c\x69\x5d\x4f\xd1\x05\x16\xb3\xc2\x0e\xf7\x35\x9f\x4e\x4d\x63\xdf\x98\x61\xe8\x3b\xac\x34\x8b\x1a\xde\xab\x49\xc3\xdd\x8b\xd0\x9f\x7d\xd9\xcb\xc3\xcb\x54\xf5\x90\xed\x46\x53\x0f\x37\xb0\xe2\x46\x63\x2f\xe9\x86\xf6\x49\x0d\xad\xc1\xc4\xcd\xe3\xd5\x97\x4c\x7d\xdb\xcb\xe4\x54\x7e\xb1\x86\x9c\x4c\x2e\x95\xde\xf9\xa9\xd6\x36\x6b\x68\x89\x7c\xa6\xd6\x60\x10\x8e\xbb\x42\x42\x45\x33\x60\x5e\xc5\x59\x46\xb0\x90\x75\xbb\x5d\x16\x03\x1b\xf6\xde\xf4\x14\xf6\x61\x37\xd9\xf5\xd3\x43\x9c\x81\xc1\xc1\x0b\x11\x15\x8a\x6c\x41\x03\xa6\xad\x25\x0a\xb8\x01\xb4\xa5\x6b\x8b\x6c\x74\x49\xa5\x56\x1a\xcd\x8f\xdf\x59\xc8\xa5\xed\x08\xe2\x63\x7f\x78\x51\x11\x2e\xc6\xe7\x83\x8f\xfd\x87\x8b\xd5\x66\xc2\xd2\x77\xd5\x2d\x46\x47\x48\x3f\x2f\xfb\xcd\xe9\xd4\xdc\x19\x0e\x38\xca\xa8\xb4\x84\x81\xd1\xca\x42\xd5\x18\x7b\x75\x4c\xb2\x84\x2f\x52\xc2\xc0\xc4\x53\xba\x09\xf5\x7a\x4e\x31\xb5\x57\x4b\x30\x58\xb0\xe2\x58\xb3\x1b\x5c\x63\x47\x0e\xad\x8a\xc4\xfe\xe6\x2d\x83\x55\x55\x58\xf7\x8d\xf1\x9e\xd9\xff\xdc\x29\xac\xb6\x3c\x63\xfd\xb3\xfb\xe1\x8f\x83\xb2\x7e\x78\xf6\xfd\xf0\xc7\x3a\xa9\x66\xfc\x69\x70\x35\xb8\xed\xdf\xaf\x11\x4e\x2a\x4d\xd6\x09\x27\x52\x0f\xb8\xea\x3d\xa5\xd2\x47\x04\x45\x06\xf2\x0a\x51\x25\xd1\x13\x95\x74\x42\x01\x20\xcc\x7a\x22\x1f\x86\xc0\x59\x9f\x70\x42\x63\xaa\x16\x4e\x7c\x31\xfd\x96\xf7\x51\x73\x52\xdb\xbe\x31\x3b\x84\xfe\x49\xb0\xf2\x99\xcd\x71\x93\x3e\x45\xa0\xdb\x3e\x81\xd2\x16\x7c\xc6\xb4\x20\xcd\x66\x44\x98\xe1\x80\xf7\x25\x1c\x4b\xf0\x5c\x8f\x2a\x14\x56\x8a\x55\xf3\x42\xeb\x8c\x30\x22\x00\x04\xce\x77\x62\x04\x29\x41\xd8\x57\x5a\xe6\xca\x12\x1a\x51\x95\x2c\x50\x04\x36\x2c\x30\x67\xa6\x98\xe1\x99\x15\x0e\x40\xcd\xa9\x90\xc4\x5f\x0d\x8a\xda\xf5\xd4\x9a\xf6\xef\x29\xd9\xf2\x98\x3d\x5c\x9d\x0f\x3e\x0e\xaf\xca\x24\xf0\xfd\xf0\x53\x49\x84\xbd\x1c\x9c\x0f\x1f\x4a\xb7\xb9\x96\x64\x57\xcb\xf5\xd5\x66\x6b\x8e\xa2\x7f\xe9\x14\x9d\x9b\x4f\x4f\xf5\xe2\xd6\x40\xc4\x79\xe5\xb7\xb2\x0e\xb7\x2e\x24\xcf\xfd\x31\x60\x4a\xd4\xfa\x25\xda\x9a\x90\xac\x0f\xb2\x64\x43\xaa\x0f\x55\x58\xea\xfb\xaa\xea\x54\xae\x4e\xd9\xbd\x08\x41\x97\xc7\x85\x65\x29\x8c\x61\x00\xa3\x41\x93\x11\xab\xc6\xad\x55\x30\xec\x1f\xc1\x45\x9d\xe6\x52\x19\x57\x22\x10\x27\x7a\xfc\x8b\xd4\x0b\x0a\xae\xc6\x63\x74\x47\xc8\x88\x39\xeb\xc1\x8c\xaa\x79\x3e\x39\x8e\x78\x7a\x52\xe0\x13\x9e\xe0\x8c\xa6\x58\x4b\xd2\x44\x2c\x4e\x26\x09\x9f\x9c\xa4\x58\x2a\x22\x4e\xb2\xc7\x19\x44\xc0\x38\x77\xea\x89\x6f\x76\xc6\xff\xfd\xe2\x4f\xdf\x1e\x5d\xfc\xe5\xdb\x0f\xcb\x16\xb2\xa6\xfd\x1f\xb0\x08\x67\x32\x4f\x6c\xc4\x9c\x08\xd7\xc6\x1d\xf9\x9c\xac\xdb\xef\xab\xf2\x76\xed\xa6\xbf\x9e\xdd\x3c\x94\x2c\xd6\xe5\x7f\x5e\x0e\x2e\xaf\x6f\x7f\x2e\x71\xca\xfb\xeb\xdb\xfe\xa7\x12\x43\x1d\xdc\x7c\x3f\xb8\x1c\xdc\xf6\x2f\xc6\xee\xe1\x2e\xb6\xb7\x1f\x18\x7f\x66\xe5\xa5\x91\x8e\x03\x2e\xf5\x74\x8a\x3e\x72\x81\x7e\xf0\x3b\x79\x34\xc1\x12\xae\x18\x77\x67\xc9\x1e\xca\x78\x0c\x8c\x17\x91\x6c\x4e\x52\x22\x70\x62\x6d\x06\x52\x71\x81\x67\xe6\xa6\x97\x91\xc0\x2a\x9a\x23\x99\xe1\x88\xf4\x50\x04\xd4\x30\xeb\xc1\xa6\x80\xaa\xc5\x67\x55\x3b\xdf\x6d\xce\x14\x4d\x89\x53\xc1\xed\x3f\xef\xcd\x66\x6c\xb1\x39\xd7\xf7\xdf\x97\x85\xbd\x8f\x17\x3f\xdf\x0f\xc6\x77\xe7\x3f\xac\x5c\x4f\xf3\x59\x69\x64\x77\x10\x80\x74\xc6\x93\x3c\x65\xe1\xdf\xdb\x8f\x6d\x78\x75\x3f\xf8\x54\x1d\xdd\x75\xff\xbe\x4c\x19\xb7\xe5\x00\xb7\x0f\xdf\x5d\x5f\x5f\x0c\x4a\x2e\xe1\x0f\xe7\xfd\xfb\xc1\xfd\xf0\xb2\x44\x3f\xe7\x0f\xb7\x06\x8d\x70\xd5\x34\xdd\x08\x6a\x26\xaa\xa7\x15\x4e\x73\xdf\xac\xb0\x15\x27\xea\xdb\x80\x72\x73\x96\x8f\x02\xb8\x1d\x13\x0e\x06\x56\x9d\x23\x6f\x52\x8d\xcc\x48\x6b\xd9\xa1\x2a\x6f\x13\x6a\x66\xc7\x2b\x37\x7a\x15\x57\xbe\xf7\x43\x30\x50\xa0\x46\xd9\xc6\x49\xc2\x9f\x4d\x28\x6f\x4a\xf5\xad\x6c\x81\xd1\xf4\x2b\xb2\xf0\x10\x1e\xd7\x70\xbc\xf2\xb6\x90\x48\x10\x75\xc9\x73\xa6\xb6\x27\xb9\xfe\x55\x89\xef\x0c\xae\x7e\x1c\xff\xd8\x2f\x53\xe0\xf0\x62\x35\xab\x09\x9b\xa8\xb9\x8a\xfb\x57\x3f\xfb\x4b\x18\x02\xbe\x7b\x5e\x43\x35\xb2\x6b\x94\x50\x2d\xf6\x46\x58\x6b\xaf\x09\x48\x34\x88\x50\x30\x39\xa4\x7a\x72\x10\x60\x9a\x19\x7f\x92\xe1\x4f\x66\x90\xa7\xee\x8f\x4a\x7b\x12\xd6\x05\xac\xa9\x2e\x9e\x1e\xda\xb1\x5a\x35\x43\x84\x3d\x51\xc1\x01\xcf\x16\x3d\x61\x41\xb5\x34\x6e\x5a\xd6\x73\x3d\x85\xff\xdd\xac\x4d\x30\x8c\x56\x18\xd7\x1d\x17\xea\xdc\x07\xf2\x6e\x67\x0d\xa9\x0b\x68\x5d\x0e\x65\xad\x37\x74\x2c\x7f\x5b\xb3\x39\x3b\x06\xfc\x96\x27\xfc\x8f\xe4\x9c\xe2\x44\x33\x80\xfd\xc9\x8b\xfd\xab\xbb\x61\x59\x7e\x2c\xab\x19\x01\x5f\xde\x5a\x5e\x04\x43\xa5\x19\xb9\x53\x26\xee\xfe\x7a\x61\xb4\x0b\x00\x3d\x36\xe7\x36\x50\x2c\x40\x00\x72\x28\x28\x19\x16\xb2\xf2\x85\x44\x00\x84\x56\x04\x5c\xe9\x3b\x0b\xc2\x99\x9e\x38\x8d\x47\x8c\x7c\xce\x08\x93\x10\x1c\x60\xee\xb3\xc2\xd7\x2e\x8f\xd1\x70\x0a\x2c\x41\xbf\xce\x50\xce\xac\x03\x4c\x5f\xb8\x66\x90\x3d\x2d\xca\xda\x21\x78\x0d\x11\x0c\x2f\x8c\xb8\x60\xa9\x62\xf0\x23\xf6\x93\x77\xa2\xc1\xa3\x29\xd7\x0c\x48\xef\xa2\x6d\xef\x14\x61\x26\x69\x0f\x69\x85\xa5\xba\xa7\x90\x3a\xa0\x15\x4a\x1b\xc2\xa5\x39\x8d\xfd\xf3\xf5\xaf\x81\xa5\x38\xe1\xf0\x32\xa8\xbf\x0b\x2a\x57\x41\x83\x68\x9c\x18\x8f\xc9\xb8\xfd\x9d\x10\x71\x41\xac\x9f\x65\xe3\x6b\x60\x1d\x63\xbf\xc7\xf2\x71\xc9\xf7\x30\x64\x52\x61\x16\x91\xb3\x04\xcb\x2d\x83\x90\x9c\x8d\xa3\x57\x96\x38\x6e\x6f\x1f\x6e\xee\x87\xdf\xad\xe1\xf2\xd5\x8f\x97\xc3\x80\xa2\x24\x77\xee\xb9\x89\xe0\x38\x46\x9a\x7d\xce\xb8\x71\x05\x5a\xc1\xbf\x80\xfe\x36\x79\x3d\x3e\xa0\xb2\x04\x3b\x5e\xa4\x23\x58\x3b\x47\xe8\x4a\xa0\x76\x21\x50\xa4\x57\x02\x05\x26\x0f\xb7\xd5\xe0\x59\x34\x05\x49\xac\x75\x2b\x4b\xb0\x9a\x72\x91\x1a\x2e\x5f\x9a\xb4\x69\x7c\x75\xa3\x94\x29\x22\x44\x9e\x29\xea\xb0\xdc\xab\x52\x2a\x54\x78\xe7\xb3\x4b\x22\x25\x9e\x91\x5d\x1c\xd0\x75\xca\xc3\xdd\x8f\xe1\x3f\xc1\xc1\xdc\x46\xf6\x2f\x8d\xd0\x45\xbe\x3b\x7a\xba\x66\x1f\x4d\x20\xcf\x0d\x4f\x68\xb4\x65\xc0\xdd\xc7\xfe\xf0\x62\x3c\xbc\xd4\x4a\x7c\xff\x7e\x70\x51\x12\x25\xe0\x59\xff\xe3\xfd\xe0\xd6\x82\x58\xf7\xbf\xbb\x18\x8c\xaf\xae\xcf\x07\x77\xe3\xb3\xeb\xcb\x9b\x8b\xc1\x9a\xc8\x9c\xc6\xc6\x97\xad\xab\xd5\x57\x4f\x97\x7e\x81\x1d\xd6\xbc\x2c\xb4\x97\x41\xd6\x18\xa6\x09\x38\xc1\xb9\x71\x86\x63\xc4\x78\x4c\xe0\x67\xe9\xac\x33\x1e\x39\x1a\x0d\xd5\x57\x49\x82\x70\xae\x78\x8a\xc1\x6b\x93\x2c\x46\x0c\x4f\x34\x6b\xc5\x49\x12\x84\x77\x89\x9c\x31\xcd\x62\x75\x63\x06\xa2\x3d\x4a\x88\x66\xe7\x59\x90\xec\x67\xfd\x06\x53\xca\x20\xd2\x36\xc5\xe2\xd1\xb8\x99\x8a\x2e\x8b\x43\x21\x11\x96\x23\xa6\xc7\x45\xac\x61\xa8\xcd\x0a\x9f\xb6\x7a\xab\x71\x75\x52\xfc\x48\xf4\xaa\xa4\x79\x34\x47\x99\xe0\x33\x41\xa4\xb4\xb6\xe5\x08\x33\x13\x80\x60\x5f\xd7\xd7\xd0\x88\x31\xae\x97\xc2\x99\xb0\x63\x92\x11\x16\x13\x16\x51\x93\xd6\x07\xbe\x7b\x6f\xda\x9c\x09\x9c\xcd\x91\xe4\xe0\xf4\x86\x65\x07\xfb\x95\xf9\xc8\xdd\x64\x66\xc6\xe6\x71\x68\x81\x16\xb9\xe6\x13\xd7\x20\x27\x9a\x55\x86\x8f\xdd\x65\xe8\xdc\x2e\xc6\x0e\x98\x66\x09\x51\x06\xac\x1f\x96\x1c\x36\x43\xaf\x75\x69\x3f\xf4\x36\xd5\x6d\x82\xbe\xb0\xdd\x98\xb1\xb4\x23\x3a\xae\xb1\x6c\xdb\x23\x85\xbe\xc7\x2c\x4e\x74\x2b\xce\x87\x51\x3e\x8b\x90\x8a\xd2\xd7\x54\xe3\x4e\xe3\x2e\xb7\x68\x84\x73\xb9\xcb\x35\x5a\xc9\xc5\x34\x56\xc1\xa3\x22\x28\x04\xc8\xdb\x26\x62\xc2\xea\x66\x9a\x45\xe2\x84\xdb\x55\x32\xaf\xe7\xa6\xfe\x13\x82\xd1\x34\x5c\xb3\x99\xa0\x2c\xa2\x19\x4e\xb6\xd2\xfd\x2a\xc1\xf8\x36\xc6\xfd\x6b\x3a\xd5\xe4\xf3\xcd\x92\xdb\x56\x11\x91\x42\x82\xb2\x1d\xa6\xdf\xc2\x0d\x2c\x49\x36\xab\x81\xc8\x22\x9a\x04\x0b\x9e\x1b\x7f\x1c\xac\x0b\x89\x6b\x8e\xea\x71\xdd\x76\xeb\x93\x81\xcb\x01\xd0\x5b\x6c\xb6\x89\xfc\x69\x5a\xbf\x4a\x2b\xb6\x77\x13\x8c\x87\x93\x9b\xfa\x36\xeb\x76\x20\x78\xf8\xaf\x55\xb4\x73\x89\x33\x4d\x33\x16\xb6\x1f\x17\x73\xb4\x4a\x92\xad\x0a\xe6\xe2\x67\x02\xdf\xb9\xcf\x0b\x69\xbf\x1b\xc5\x12\xda\x00\xa8\xe5\x4e\x4a\x31\x04\x41\x8e\xb9\xa5\xf1\x69\xae\x65\x59\x84\x21\x0a\x01\x7d\x4d\x8e\x67\xc7\xc8\x15\x61\xe8\xa1\xfe\xcd\xcd\xe0\xea\xbc\x87\x88\x8a\xbe\x71\x31\x8b\x36\x60\x69\xc4\x14\xb7\xd2\xca\xc2\x15\xd0\x48\x89\x98\x91\xd2\x9c\x5d\x74\x13\x84\x2a\xcf\xa8\x54\x36\x7c\x56\xf3\x95\xa0\xd4\x09\x4d\xab\x62\xb6\xa1\x90\x5c\xcd\x77\x21\x0d\x2c\x65\x9e\x6a\x5d\x76\x4c\x71\x3a\x16\x3c\xd9\x85\x29\x9c\xc3\x54\x40\x5d\xf6\xe9\xf9\x14\xa7\x48\x37\x6b\x43\x41\xbc\xcb\xd1\x8b\x74\x5a\x30\xd2\x7c\x59\xdf\x9b\xc1\xbd\xe5\xbc\x0f\x36\x1e\x8d\xba\x10\x08\x48\xdf\x6f\x60\x15\x85\xd9\x78\x6c\x2d\xf5\x63\x1c\x45\x5a\xe5\xde\xf3\xa4\x82\xfa\x39\xce\x25\x60\x3b\x7a\xb1\x69\xae\xa3\x73\x37\xcc\x4c\x73\x30\x08\x06\xd6\x57\xae\xe4\x11\x2d\xda\xaf\xe9\x77\xb2\x58\xea\xd5\x55\xb8\x79\x90\xde\xa4\x62\x2e\x61\x49\x60\x27\xa5\xa9\x90\xa3\xe6\x64\x81\xe6\xf8\x89\x94\xba\x74\x09\x31\xba\xe1\x05\xcf\x45\x1d\xa3\x1b\xb1\x73\x92\x09\xa2\x25\xfd\xaa\x03\xc5\xd3\xf4\x6d\x99\x12\x3b\xba\xee\xe8\xfa\xdd\xd3\xf5\x99\x29\x94\xd4\xf7\x85\xb1\x76\x12\xe0\x4c\x63\xe3\x8c\xf3\x64\xdc\xc2\x26\xd2\x7e\xc5\x4b\x9e\xb0\x4a\xd9\x28\x80\x04\xe0\x39\xc8\x47\xa5\x6b\x93\xeb\xbb\x2e\x48\xb1\xb5\xc3\x5b\xb1\x0c\xce\x65\x16\xd4\xcb\xd9\xe5\xbc\xd7\xb5\xb2\xaa\x25\xf4\xe2\x62\xce\x99\x91\x6f\xbc\xbb\x2c\xac\x7f\x5a\x3a\x4c\x4e\x14\xa1\x6c\xa9\x1a\x9b\xa1\x67\xbd\xc0\x46\xee\xf8\x47\xce\x15\x96\xdf\x1c\x8f\x98\x16\xa2\x1e\xc9\xc2\x98\x5b\xb5\x98\xf2\x3b\x2d\x8b\x1f\x49\xc2\x24\x84\x7b\xff\xce\xb8\xe7\x34\x89\x3b\x73\xb5\x51\x4d\x4d\x11\x38\x08\xba\xf6\xbd\x40\x88\xae\x6d\xd4\x4a\x49\x45\x00\x34\xc8\xf9\x66\x2e\xf6\x99\x19\xfe\x8c\x28\x48\xb1\x56\x54\x81\xce\x14\x9b\x2a\x73\x4b\x43\x5f\x6b\xba\x32\x54\x21\x38\xf8\x49\xe2\x7c\x37\xc6\x2f\x97\xdb\x58\xcb\x19\xbd\xb6\x70\x67\x63\xde\x4f\x9c\xdd\x28\x12\x7c\xa9\x74\x1b\x96\xc8\xec\xf4\xc4\xb0\x03\xe7\xbf\x26\xec\xf8\x99\x3e\xd2\x8c\xc4\x14\x43\x04\xbc\xfe\xd7\x89\x9e\xd7\xbf\x9f\xdd\x5e\x5f\x8d\x8b\x4c\x9e\xff\x1a\xb1\x7e\x22\xb9\xcf\x52\x40\x8c\x33\x1f\x6e\x9f\x09\xe2\x44\x42\x3b\x17\xb0\xba\x16\x66\xc4\x11\x6b\x1a\x41\xcc\x23\x79\x8c\x9f\xe5\x31\x4e\xf1\xaf\x9c\x81\x2b\xbd\x0f\x7f\x9e\x25\x3c\x8f\x7f\xc2\x2a\x9a\x9f\xc0\xb9\x56\x27\xe4\x89\x30\x65\xdc\x54\x7a\xb9\x62\x48\xde\x95\x10\xad\xff\xef\x7a\xcc\x45\x52\x91\xd4\x9a\x6c\x44\x32\x85\xfe\x1f\x41\x26\x9c\xab\xfa\x4b\x8a\x4f\xa7\x92\x6c\x74\x21\x15\x4a\xda\xdd\x35\xfa\xcb\x9f\xbf\xfd\x83\x26\xa1\x6d\xd6\x78\x78\x77\x3d\xd6\xdf\xff\xfb\xb9\xfd\x5e\x6e\xc0\xee\xae\xb3\x82\xb5\x39\xe2\x31\x81\xf3\x39\x83\xdb\x4f\x80\xf3\x02\xd8\x1b\x90\x43\xb1\x8f\x75\xdc\xed\xbc\xd4\xfa\x6e\x2a\xdb\x56\x8b\x09\x2a\x76\x30\x47\x74\x84\x18\x47\xa9\x89\x35\xc5\x0c\xfd\xc7\x0f\xdf\xd5\x6f\x60\x2e\xe8\x56\x1d\x52\x0b\xd7\x10\x74\x29\xe9\xaf\x44\x22\x4d\x35\x9a\x8a\x79\xaa\xbb\x16\x44\xce\x79\x12\xa3\x67\x02\x6a\x92\x8d\x03\xf5\x5a\xb9\x20\x23\x16\x36\x01\x21\x87\x08\x27\x8a\xcf\x08\xdc\xd5\x4e\x51\x53\x44\x68\x51\xc5\x64\x69\x28\x2e\x48\xcf\x40\x7d\xdd\xfd\xc9\xc5\x56\xc3\x34\xe1\x91\x4b\x6a\xb1\x26\xb9\x78\x52\x3f\xf3\x69\xd5\xf4\x8a\x9a\x6d\xf8\xd5\x4d\xb6\x66\xdb\xfa\xa5\xb1\x49\x28\xd6\x86\x55\xdd\x99\xfa\xc1\xd0\x88\xb3\x71\x42\xd9\xe3\x56\x9b\x71\xed\x44\x39\xdd\x82\x5d\x33\xdd\xa2\xb7\x73\x1b\x0b\xc8\x06\xe7\xe3\x63\x9e\x24\x26\xb5\x25\xdc\x1e\x90\xbb\xcc\xba\x81\x30\x90\x99\x1c\x50\x12\x5b\xbf\x97\xd5\x84\x05\x61\x10\xf0\x36\x62\x93\x85\xf5\xd9\xca\x1e\x92\x79\x34\x77\x99\x79\x11\x67\x52\x8b\xd1\x5c\xa0\x88\xa7\xa9\x29\x6e\xca\x08\x52\x9c\x27\xd2\x46\xbb\xb3\x23\x85\x23\x35\x62\x45\x7f\x6b\x4e\x9e\xa9\x80\xb4\x5b\xea\x5e\x7b\x97\x4e\x51\x69\x69\xa5\xc0\x4d\xe3\x10\xb3\x01\x8c\x60\xc6\x13\x15\xa0\x3f\xf0\xe5\xb3\x64\x36\xac\x41\x33\x90\x73\x2e\xd4\x38\xae\xe5\x39\x6b\x89\xa6\xca\x08\x19\x39\x4a\x20\x68\x98\x3f\x69\xe1\x9f\x3c\x7b\xe3\xeb\xaa\x21\x68\xaa\x5e\x35\x82\x76\xc7\x68\xe5\xc8\x36\x25\xc1\x86\xb5\x32\x08\x1e\x51\x39\x26\x7c\xdd\x18\xef\xe0\xab\x33\xfd\xd1\xca\xc5\xab\x9e\x3b\x27\x04\xf1\xb8\x00\x9b\x33\xf7\xba\xcd\x08\x59\xb5\xa6\x16\x3a\xe1\xe5\x32\x47\x57\x4d\xe5\xa1\x6c\xc9\xd5\x63\x01\x93\xbd\x24\x20\x6b\x62\x31\xa1\x4a\x60\x51\x42\x0a\xf1\xfa\xa0\x24\x58\x40\x7c\xd6\x88\x19\xdc\x38\xa3\x29\xc4\x28\xa6\x12\x12\x44\xe0\x2e\x0d\x9c\x61\xa8\x9d\x12\x58\x39\xda\x45\x9e\xa3\x89\x3f\x87\xc0\xb2\x82\x34\x1c\xb3\xd3\x1d\x79\x7c\x2c\xad\x9f\xf1\x28\x2f\x04\xb9\x08\x24\x5c\x8b\xa9\x83\x28\x93\x74\x36\x57\x88\x32\x6b\x77\xc4\xc9\x8c\x0b\xaa\xe6\xa9\xec\xa1\x49\x2e\xb5\x16\x6a\x82\xd5\x4c\x3c\x0a\x51\x51\x2b\x2e\xb4\x6b\x12\x71\x5c\x69\x70\x59\x45\xd9\x82\x34\xda\x1d\xca\x41\xe5\xae\x58\x43\x38\x7d\x8f\x33\x58\x6d\x83\x42\xdd\x46\x03\x4f\x89\x4c\x1c\x20\x77\xc8\x4e\x50\x05\xa4\xe9\x1c\x00\x2a\xe4\xde\xbc\x14\xaf\x51\x88\x0b\x99\x64\x50\x41\x5c\xec\x36\x48\x5e\x65\x64\x4a\x83\xde\xe4\x9d\x4e\x69\xa6\x6a\x03\xb7\x96\x5d\x45\xb7\x01\xe6\x4f\xbb\xc5\x86\x64\x2c\xa0\x66\x40\x6a\x1b\xb1\x3b\x42\x9a\x81\xdc\x96\xf6\xde\x94\xc6\x85\x29\xd8\x44\x8f\xd5\x24\xbf\x8b\x13\xfb\x7c\x70\x77\x76\x3b\xbc\x31\x90\x13\xd7\xb7\x97\xfd\xfb\x71\x8d\x5f\xbb\xe6\xad\xcb\xfe\xed\x0f\xe7\xeb\x5f\xfb\xfe\xbe\x9c\x95\x5d\xf3\xca\xed\xdd\xea\x64\x8e\x16\x43\xac\x49\x0a\xab\xed\xe7\x14\x65\x0b\x35\xe7\xcc\x87\x28\xc4\x25\xde\x74\x84\x4c\x46\xb0\x82\x10\x22\x21\x55\x8d\xe3\xf0\x1e\xe2\x72\xd6\x4b\x98\xe5\xcd\x32\x30\x6c\x7b\x15\x8d\x36\x38\x91\x9f\x12\x3e\x01\xbf\x75\x5e\x2a\x71\xbb\x22\x02\x7d\xc7\x78\x9f\x73\x2a\xb3\x04\x2f\x96\x7a\x58\x77\xe5\x5c\xe1\x94\x40\xc4\x71\x81\x1f\xe7\x92\x45\xf4\xce\x40\x02\x93\xbf\xd7\xe9\x14\x32\x99\x14\xc5\x8a\xa0\x09\x51\xcf\x90\x37\xe7\x7e\xf5\xb6\x54\x17\x30\x22\x8f\x47\x0c\xcc\x39\x23\xbd\xc8\x71\x0e\xd1\x7e\xa3\x0f\x3d\x34\xfa\x10\x93\x27\x92\xf0\x4c\xef\xbc\xfe\xa1\xe1\x92\x19\xa4\x98\x26\x57\x5c\x79\xcb\xdc\x2e\xfb\x29\x48\x44\x33\x90\xcc\xc7\x44\xb7\xfb\x7a\x82\x47\x89\x92\x1d\x3b\x83\x31\x20\x1c\xc7\x5a\xc9\x06\x56\xe6\x86\x57\x84\x00\xb1\x60\xea\xa5\x5a\x99\x9b\x88\x14\xde\xfc\x6d\x7a\x0c\xdb\x2c\x9b\x3d\x6b\x77\x80\x3d\xbd\xa0\x4b\x76\xd7\x8b\x5c\x6b\x25\x3f\x90\x05\xa4\x60\xdc\x60\x2a\xb6\x74\xcd\xd6\xc5\xbc\xbe\x88\x93\x76\x50\xd3\xd1\x01\xb9\x6b\xeb\xd7\x61\x37\xc7\xad\x8f\xd5\x7b\x2d\x2d\xd5\xc5\x72\xf9\x8e\x5b\xaa\xad\x0f\x4d\x4a\x6a\x63\x08\x03\xaa\x2a\x5e\x19\x89\x36\xd0\xb8\xfc\x00\xef\xf4\x77\x6b\x35\x15\x2f\xae\x45\x61\x4d\x7f\xd8\x05\x9b\x1c\x5f\xcd\xc7\x27\x6b\x47\x1c\x25\x5c\x96\xb1\x72\x5a\x0f\xfa\xcc\x7e\xba\x6a\xdc\x83\x90\x7c\xb5\x5c\xb8\x51\x40\x43\xcd\xc2\x57\xc0\x20\xcd\x3d\xa3\xac\x87\xcc\xbe\xdd\x43\x14\xa2\x2d\x41\x21\x4b\x0a\xe4\x00\x16\xa3\xc2\x0d\x32\x62\x45\xcc\x8a\x44\xcf\x24\x81\x30\xb7\x88\xa7\x19\x98\xf8\xed\x70\x6d\x4b\x24\x36\x11\xc3\x3d\xc4\x73\xa5\x1b\x33\x39\x39\xce\x88\x6b\x13\x7e\x0a\xb7\x87\xf1\xbd\xd9\xe0\x77\x0f\x2c\x6d\x68\xdd\xdc\xa5\x94\xa1\x4f\x44\x41\x2b\x00\xdc\x1f\x4e\x10\xf4\x84\x6a\x08\x65\xfd\xda\xef\x70\xa2\xec\x4c\x36\xd8\xf9\x02\x38\xe5\xbb\x84\x4f\x56\x1b\x09\xa0\x71\xf4\x70\x3b\x74\x16\xc9\x22\x7e\x2a\x40\x2f\x2e\x79\x14\x07\x37\xb7\x83\xb3\xfe\xfd\xe0\xfc\x18\x3d\x48\xa2\x97\xc7\x4f\x17\xf2\xab\xbd\x4a\x62\x46\x6e\x91\x58\x98\x54\x04\x37\x19\x42\x88\x10\xa5\x2c\xe8\x35\x8c\xa3\x0c\xd3\xb2\x9a\xb0\x01\x24\x85\x5a\x43\x1d\x00\x0b\x55\xe7\x69\x23\xf3\xd6\x9d\x40\x88\x93\x1a\xbf\x9f\x28\x35\x33\xde\x74\x39\x32\x6f\x1d\xf9\x94\x23\xfa\x5e\x7a\x32\x70\xb4\xd4\x9c\x50\x81\x5a\x4d\xcb\x10\xd5\xb8\xfd\x9c\x82\x10\xf7\x4b\x9c\xad\x4e\x3f\xc5\xcf\x25\xa2\x35\xa2\x70\xe0\xbb\x7f\xe9\x73\xe0\xd8\xda\xd8\xb0\xc2\xdd\x27\x58\x38\xb4\x0c\x6f\xf5\x7c\xd3\x64\x7c\x48\x67\x24\x0b\x27\x56\x19\x84\x8d\x63\x95\x08\xce\x0e\xfc\x42\x19\x2a\x5d\x89\x3d\x34\xa5\x9f\x6d\xa3\x45\x7c\xbb\x7b\x35\x08\x78\x68\x88\xa7\x9c\xe3\xe5\x33\xb5\x81\xd8\x70\x03\xdf\xaf\x14\x22\xb9\xd4\x22\x51\xa4\xc5\x25\x41\x22\x2e\xf4\x4d\x01\xdd\x16\x5e\x88\x75\x22\x83\xc2\x42\x2f\xca\xb2\x57\x66\xd5\xe9\x2f\x6a\x90\xc4\x58\x91\x23\x2d\x7a\xad\x49\x80\xb6\x39\x32\x90\x4d\x83\x55\x00\x07\x56\xdc\x3c\x13\x32\xc3\xcc\x85\x66\x37\x0c\xd7\x5d\x79\x3b\xb0\x2a\xad\x02\x61\x48\x0f\x03\xf9\x0a\x52\x7f\x4a\xe3\x90\x19\xac\xe7\xca\x71\xd8\xe8\x97\x43\x58\xb6\x67\xec\x83\x71\x1a\x06\x9b\x67\xf1\x21\x0d\x36\xc1\x52\x21\x3b\xa6\x26\x53\x44\xa0\x22\xbe\xac\x11\xb6\xa4\xdb\xb7\x55\xde\x34\x09\x95\xb5\x58\x02\x9e\x11\xe9\x70\x53\x0c\x4a\x8c\xd6\x69\x9c\x20\x6c\x4a\x31\xfb\xb3\x6d\x6b\x32\xbb\x5b\x22\x64\x26\x10\xa4\xbf\xdc\xf4\x31\xea\xb3\x25\xbc\x2c\x17\x97\x55\x5a\x2f\x73\x27\xe1\xe4\x19\x2f\x24\xca\x84\x81\x96\x31\x91\xfb\x6e\xf2\xa0\x81\x95\x3f\xf2\xa1\x10\xca\xa5\x4e\x20\xb0\xc5\xac\x0f\x9a\x73\x72\xef\xf8\x05\x5c\x79\x95\xa8\x72\x2f\x90\x17\xcd\x15\xb6\x8a\x16\xac\x4e\x91\x71\x34\xc7\x6c\x46\xc6\xce\xc8\xba\x8d\xb6\xa4\xdb\x39\x83\x66\xce\x6d\x2b\xf5\x97\xd3\x8d\x51\x98\x6c\xfd\x17\xf3\xaa\x37\x20\xea\x43\x20\x15\x9e\x11\x64\x46\xd4\xca\x2c\x5d\x8a\x18\xb3\x60\xc3\xa0\x27\xd8\x56\x07\xe5\x28\xfa\x26\xe1\x1d\x42\x9f\x2e\xf0\x84\x24\x6f\x13\x39\x01\x5d\x5b\xe3\x3c\x78\xeb\x4c\x36\x00\x41\xcf\x60\xcf\xaf\xb0\x0c\x6b\xbd\x17\x79\x5d\x6e\xc0\xaa\x79\x96\xaa\x9f\xef\x30\x51\x57\x2b\x64\x9b\xa9\x36\x55\x10\x09\xaf\xbd\xa0\xd2\x46\x9d\x81\x2d\xbc\xfe\xaa\x36\xe5\xed\x06\x12\x14\xfc\x68\x18\xc7\xce\x15\x3f\xd6\x4e\x65\x6b\x90\x81\x96\x55\xf0\x86\x53\xc4\x38\x23\x88\xca\xe2\x65\x55\x4e\x87\xf2\x10\x3d\x5a\xc4\x37\xc6\x17\x5f\xa5\xcb\x17\x5f\x7a\x69\x4b\x4b\x01\x9e\xe0\x6d\x03\x2e\xbf\x9b\x11\xad\xa8\x62\xb1\x00\x88\x4f\xc3\x87\xcb\x32\xdd\xda\x71\xee\x5d\xe0\xbe\x77\x08\xae\x41\xa4\xae\xe2\x08\xc4\xc8\xca\xe0\x90\xc1\x41\xb5\x2f\xd9\x8f\x2c\x4c\xcd\x88\x79\xcb\x06\x10\x22\x95\x28\xc5\x19\xf8\xf4\x18\x57\xc5\x57\x06\x76\x49\xf9\x2d\xec\x39\x41\x5c\x9a\x1a\x5a\x0d\x2b\xb0\xce\xb4\xe3\xae\xdf\x62\x5d\xcb\xf0\x96\x0e\x9a\x77\x46\x9f\x08\x73\x34\xdd\x73\x67\x42\x0f\xca\x75\x9a\x2c\x8e\x30\x84\x19\x93\x38\xf4\x7c\xac\xe6\x48\xc6\x20\x73\x08\xf6\xc8\xf6\x4b\x76\x5f\x1b\x46\x63\x40\xd2\x4a\xe8\xf6\x2e\x30\x3c\xa4\x52\x8b\xdb\x6b\x32\xc1\xb1\x44\xbf\x63\x5c\xfd\x2e\x40\x36\x76\xc6\x0b\xf8\xd4\x99\xa0\x7a\x4b\x25\x5b\xe0\xd0\x5a\xc2\x41\x38\x40\xd8\x5a\xbb\xf2\xbb\xc6\x06\x14\x81\xef\x2f\x2a\x8d\x0e\x96\xb3\xe0\x9a\x6a\x5e\x75\x1e\x7b\x54\xbd\x16\xaa\x06\x4f\x53\x56\xaf\x38\xe9\x25\x43\xa7\x5c\xe7\xa2\xf7\x7b\xd1\xca\x35\xbf\x84\x08\xb0\x0b\xb5\xa5\xad\x23\xa7\xd6\x80\x20\xd7\xdb\x25\xb6\xc9\xf3\x6c\x92\xcb\x45\x39\x74\xcd\x96\xc1\x68\x40\xf9\x3d\x1e\xb1\x8f\x5c\xd8\x2b\x58\xda\x3a\x03\x13\x1c\x3d\x1e\x11\x16\x23\x9c\xab\xb9\x41\xdb\xb5\x7e\x85\x85\xa5\x06\x2d\x69\x00\xd9\x78\x28\x0d\x2a\x23\x2c\x62\x57\xf1\xe2\x89\xbb\x51\x8c\x58\xd0\x08\x54\x32\x80\x42\x4f\x50\xaa\xb6\x49\xd5\x24\x52\xeb\x57\x4d\x6b\x51\x57\x84\x75\xa9\x04\xeb\xea\x73\x56\x2a\x2a\x0b\x35\x18\x20\xc0\x89\x4f\x97\x57\x67\xe8\xac\x8d\x4e\xbf\xd3\xf4\xbc\xec\x85\xe8\x59\x8d\xc2\x98\xa4\xec\x0c\xb4\xa4\xf3\xad\xe3\xb5\x25\xd4\xe0\x69\x2e\x20\x5c\xb7\xae\xcd\xaf\xa3\x39\x4d\x0a\xdf\xc5\x37\x3d\x3f\x4c\xdd\x64\x42\x9e\x48\x62\x30\xeb\x23\x01\x91\xf9\xc6\x6a\xf8\x2d\xfa\x3f\xa6\x30\x29\xfa\xc3\x88\x7d\x02\x36\x9c\x24\x0b\x40\xd4\xf4\x2d\x63\x55\x69\xe6\xb1\x76\x00\xca\xa6\x02\xa1\xf2\x40\xcc\x5e\xcf\xf1\x13\x19\x31\xd7\xcc\xff\x41\x8f\xe8\xf7\xe8\x0f\x4d\xea\x9d\x0b\xb0\x7f\x61\x3b\xc7\xc7\x20\x7c\x3d\xb8\xe5\x2c\xa3\xb4\xfc\xc6\x99\x41\x4a\x46\xc8\x1a\x64\x0d\x0f\x8c\x4d\xd9\x13\x8f\x96\xb2\x38\xc2\x53\x8b\x05\x61\x6a\xcc\x78\x4c\xc6\xa4\xc6\xa5\xb9\x82\x49\x68\x21\xe0\x8a\xc7\x64\xad\x43\xd2\x33\xd3\x9f\xc0\x74\x23\xf3\x89\xdf\x0e\x48\xf0\xf7\xd9\xdc\xde\xfa\x50\xa6\xb4\xfa\x91\x7b\xf4\xd9\x6d\xc6\xbd\xad\x33\xd5\x85\x89\xf6\xe0\x42\xb0\x03\xa8\x77\xe8\x25\x58\x39\xf7\x7a\xf5\x38\x56\x1d\x01\xfa\x65\x3d\x73\x7b\x59\x05\xb8\xba\x50\xfb\x44\xd0\x19\xd5\xf2\x7b\x7b\x87\x2d\x70\xc2\x6d\xbc\x19\x06\x64\xb4\x95\x3b\xa3\x58\x0a\x07\xb4\x72\xe4\xe9\xaf\x70\x42\x4e\x78\x5e\x15\xe0\xed\x02\x50\x19\xba\xfb\xad\xac\xbe\xd0\x7c\x78\x66\x32\x00\xc9\x9c\x9a\x9c\xfb\xfe\xd9\x05\xd2\xa7\x83\xa7\x06\x98\x0a\x16\x2d\x57\x73\x2e\xe8\xaf\xab\x68\x1b\x0b\x45\xa7\x38\x52\xe3\xbd\xd4\x71\x69\x26\xa6\xbe\xed\x67\x78\xde\xda\xd4\x77\x87\x9f\x48\x10\x02\x08\x01\x7e\xb6\x15\xe9\x5d\xa9\x55\x7e\xcb\x05\x62\xfc\xb9\x00\xa6\x72\xdf\x03\x16\x73\x90\x3a\x81\xb5\xd2\x93\x41\x0c\xaf\xa4\x40\x9f\x00\x13\xf5\x95\x32\x69\x91\x00\x31\x6e\x00\x9e\x34\x79\xce\x31\x8b\x13\x77\x85\x20\x6e\x62\x6a\x16\xcf\x78\xb1\x91\x57\x3b\x8c\x6c\x2c\xf2\xe4\xcc\xf6\x97\x95\x20\xe0\x01\x46\x52\x53\x25\x65\xaf\x4e\x15\x45\x93\x1c\xa0\x6d\xf5\x9a\x4c\xf3\xc4\xd4\xc3\x88\xb8\x88\x4d\x41\x7a\x59\xca\xca\x83\xe8\x66\xa7\x35\x61\xe5\x1b\xa4\x16\x01\xd4\x56\xdc\x30\x86\xb1\x95\x72\xfd\x5f\x73\x92\xef\x29\xb1\xf1\x4d\x43\xc1\xef\xf1\x4c\x16\xb1\xdd\x66\x6d\xf4\x95\x57\xac\xef\x3f\xf4\x4c\x65\x90\x0a\xec\x0c\xb6\x1e\x59\xcb\x58\x3a\x4c\xbd\xd5\x8d\x0c\x65\xb7\xa6\xa2\xc0\x1e\x2c\x65\xaf\x11\x26\xb3\x2c\x7a\xd6\x70\x75\x4b\x7e\x4f\x3e\x31\x16\xbd\x8e\xf9\xc9\x95\x66\xa8\x08\x75\x2f\x68\x89\xda\xe2\xee\x58\xd6\x55\x56\x06\x9b\x17\x76\x29\x7f\x5b\xd4\xe4\xa8\x2b\x0e\xd9\x2c\xcf\x82\x02\xf0\xde\xa2\x78\xd9\x97\x16\x76\xb7\x70\xc8\x63\xb4\xf0\x67\xb4\x05\x08\x97\x71\x4b\xb8\xa8\xbf\x3a\x37\xb0\xeb\xd8\x86\xca\x5d\x2f\x87\x43\x34\x9d\x08\xc3\x92\x0e\xf5\x48\x2c\xa3\xee\xac\x3d\x0c\xbe\xc0\xca\xdb\xd8\x65\xbd\xc4\xf8\x7a\x27\xc3\x93\xe3\x38\xc2\xd1\xbc\x71\x52\x13\xce\x13\x82\x59\x93\x52\x50\xfb\xb8\x7a\x44\x0c\x66\x2c\xb0\xee\x24\x01\xe0\x64\xb7\x04\xb6\xd8\x66\xa1\x15\xb1\x18\x00\xef\x0d\x0f\x37\x21\x97\x6e\xa0\x8a\x30\x67\x50\xa3\x6c\x96\x90\xea\x5a\xd9\xca\x04\x3d\xdb\x49\x12\xe5\x49\x50\x6d\x33\x23\x42\x8f\x5a\x2f\xf1\x13\x61\x5a\x15\xb3\xe3\x70\x3e\xa2\x67\x97\x67\xee\x6b\x6c\xf5\x7c\xd7\xce\x4d\x09\xc9\x9c\xf1\x88\xc1\xc1\xe5\xe5\xc3\xaa\x69\x55\x6a\xed\x2d\x34\xf7\x6d\x7d\x3a\x03\x21\x62\xe3\xe3\x79\x57\xb6\xbe\x6f\x7c\x26\x4d\xdf\x63\x08\xdd\xd8\xd9\x63\x19\x78\xb5\x0a\x04\x0c\xb3\xb1\x0e\xe5\xec\x95\x6c\xf3\x10\x0c\x53\x8e\xe6\x0d\x62\x61\x9a\x50\xb6\x5e\xf4\x2e\x29\xaa\x8a\xb8\xdb\xa0\xe5\x50\x56\x46\x00\xb4\xf4\xe7\x83\xd1\x77\xd5\xb9\xbd\xb0\x52\x7d\xd9\x13\xee\xd3\xa6\x8a\xe8\x51\x5b\x37\x57\x09\x0c\xa0\x0f\x90\xaa\xff\x93\x31\x5c\x50\x69\x84\x7b\x57\x3d\x24\xcd\xd4\xc2\x16\x9b\x83\x7b\xb1\x24\xef\x03\x90\x5e\x9d\xd7\xbd\x7a\x47\xc6\x25\xbf\x7b\x5d\x67\xd0\x91\xb5\xd6\xd4\x36\xe9\x16\x3a\x04\x66\xa9\x00\x61\x34\x05\xd9\x98\xba\xbd\x63\x9c\x34\x9a\x08\xf7\xc0\x34\x41\x39\x2a\xc0\x2f\x2c\xa6\xae\x12\x39\xd1\xbc\x0b\x27\x49\x65\x5e\x18\xb2\xcc\x95\xaf\xdd\x37\x29\x0a\x0c\xb7\x8f\x01\x48\xf0\x84\x6c\xe4\xf5\xbf\x30\x1f\xac\xa4\x22\x78\x05\x02\xe6\xb3\x2c\x59\xb4\x0b\xd4\x0f\xb5\xdf\x5a\xec\xb9\x75\x03\x0b\x11\xeb\x56\xde\x4d\x65\xd4\xb7\xed\x86\x28\x49\x94\x0b\xaa\x16\x63\x6b\x4b\x6d\xcf\xb4\xee\xec\x97\x67\xf6\xc3\x36\x86\x8a\x53\xe4\xfa\x73\xb6\x5b\xb8\xa7\x04\x35\x85\x89\xec\x14\xda\x6c\x37\xce\xd5\xbc\x16\x93\x6a\xd5\xc2\x3a\x50\xac\x76\x43\xd5\x5d\x6c\x3b\x3c\x5b\xf0\x64\xcc\xa7\x0e\x6e\xaa\xfd\xc2\x56\x2b\xc1\x6c\x60\x84\x76\xa8\xd6\x99\xa0\x5c\xd8\x82\x2b\x6d\x62\x05\x53\xfc\x79\x9c\x61\x81\x93\x84\x24\x54\xa6\xdb\x9b\xcc\xff\xf4\xc7\x95\xa3\x3d\x33\x85\x81\xa4\x2d\xb3\xf5\x99\xa6\x79\x8a\x58\x9e\x4e\xac\x94\x8b\xe5\x63\x88\x29\xea\x10\x10\x0c\x34\x96\x1b\x60\x09\x87\x41\x04\x28\xb1\x23\x16\xe0\x85\x5b\x53\x05\x8e\xe6\x94\x3c\x01\x9a\xa9\x60\x44\xca\x63\x74\xc5\x15\x39\x45\x97\x38\xbb\x07\x41\xcd\x54\xea\x9c\x19\xa7\x03\x96\x48\x4b\xad\x39\xa3\xaa\x37\x62\x16\x64\xdc\xad\xca\x49\xc4\x99\x01\x9a\x8d\x60\x61\x7d\x13\x60\x45\x77\x88\xab\xca\xe5\x8b\x52\xd9\xb0\xd8\x02\x3f\x8f\x83\xa0\xe0\xb1\x49\xba\xd8\x80\x8e\x6f\xf1\xb3\x09\x83\x3f\xc7\x0a\x9b\x22\xbc\xab\x24\x77\x1b\x67\x66\x0b\x33\x19\x7c\x65\x17\x8f\xc3\x2d\xc8\x87\x2f\x29\x67\x82\x7e\xbf\xa6\xc7\xe4\x18\x7d\x97\xf0\x89\xec\x15\xa6\x2a\xf3\x50\x12\x25\x7b\xc6\xef\x07\xff\x36\x19\x76\xdf\xb8\xd5\x2f\xf8\x3e\x54\x53\x9c\xd2\xcf\x06\x5b\x44\xfe\xe9\xf4\xe4\x24\x5d\x1c\x4d\xf2\xe8\x91\x28\xfd\x17\xc8\x14\xb5\x2b\xe4\x80\xb9\x70\x1d\xcc\xd7\xba\xd5\x59\x86\x08\x6b\x45\x91\x36\x5b\x49\x12\x80\xa3\xd7\x57\xba\xaf\x57\xeb\x10\xa5\x38\xab\x2f\xc6\x69\xa7\x2c\xf2\xa6\xe3\x55\xc2\xb1\x7e\x1d\x6d\xc5\xd4\xe3\x0d\xe1\xb3\xa7\x09\x9e\x55\x54\x96\x0d\x94\x94\xeb\x94\x5a\x2a\xd2\x73\x87\x30\x16\x7d\xca\xca\xc1\x7b\x5f\x39\x2f\x2f\x78\x6b\xad\x17\xeb\x78\xc4\xfa\x12\x3d\x13\x53\x66\x17\x52\x3d\xc1\xe9\x93\x53\x39\xf7\x89\x9e\x60\x86\x86\x46\x0d\xca\xb0\x01\xa3\xb0\x8a\xa3\xd3\xac\x9c\x5b\xcc\x6a\xa0\x38\x91\xa4\xa7\x1b\x06\x93\xaa\x8b\xcf\x44\xcf\x02\x67\x19\x11\x23\x66\x11\x63\x01\x17\x9d\x73\x1b\x7b\xd3\x14\xa4\xdf\x69\x94\xaf\xab\x51\x06\x6b\x4f\xca\x79\xa0\xeb\xce\x37\xa4\x8d\xae\x5a\xe1\xba\x4c\x48\xb7\x7c\x5a\x16\x6d\x1b\x40\xff\xf6\x66\xe3\x96\x63\x5e\xa7\x9d\xf7\x2b\xd9\x0f\x50\xc5\x3b\x05\x05\x52\x16\xc5\x4a\x9d\xad\xcf\xab\xef\x25\x31\x07\x00\xc7\xe1\xe3\x98\x13\x19\x18\xf1\x91\xb7\xc5\x25\x74\x4a\xb4\xf4\x31\x62\x9a\x8c\x43\x87\x83\xc1\x2d\x77\x30\xe6\xba\xd3\x48\x70\x29\x6d\x42\x83\x69\x67\x75\x5a\xda\x0e\x25\x12\x0d\xf8\xfa\xf0\xfa\x6a\xbc\x5c\x2c\x31\x78\xe6\xca\x26\xda\x87\xb5\xd8\x05\x8d\x4d\xad\x2d\x92\x58\xac\xc5\x06\x65\x12\x4f\xce\x2e\x86\xbe\x36\x58\xa5\xeb\xe5\x3a\x89\x21\x60\x7d\x73\xa5\xc4\xe5\x19\x07\x35\x13\x2b\x4d\xac\xa8\x9a\xb8\x7e\xb3\xca\x61\xd4\xbb\xa0\x11\x56\xb6\x7e\x2d\x7f\x28\xd3\xcc\xba\x68\xff\x3d\x6d\x53\xc3\xb5\x12\x81\xc0\xf8\xd2\x81\x0b\x20\x78\xe9\xb7\xa4\xc2\x69\x16\x66\xb2\x3a\x38\x56\x3b\x4d\x73\xd4\x9a\x2e\xc1\x57\x85\x89\x8f\xb0\x09\x12\xaa\x0e\x6e\x69\x2b\x36\xf3\x78\xdd\x5b\xf4\xf9\x7d\x44\x87\xbf\x5e\x6a\x78\xb2\x28\x82\x21\xa5\x95\xdd\x5c\x65\xf3\x06\xbb\xff\x84\x78\xa4\xfd\xc6\x0d\xdd\x35\xf7\xd3\x23\x72\x09\x82\xa5\x75\x7f\x43\x8a\x64\x25\x7d\x6a\x03\xf3\xb0\x1f\xb3\x49\xb2\x3e\xf2\xb5\x2d\x82\xab\xc6\x96\x6b\x8b\xdc\x41\xa4\x42\x90\x27\x22\x80\x76\x6c\x28\x15\x2b\x1f\x55\x9c\x08\x82\xe3\x45\xb0\x22\x3e\x8e\xc3\xf4\x0c\xe6\x31\x49\x53\xad\xc0\x83\x6a\xc2\xf8\x11\xcf\x9c\xce\x52\x7a\x0b\x0a\x93\xd0\xa9\xbe\xb1\x82\x28\x10\xfd\x05\x3b\x22\x9f\xa9\x54\x5a\xae\xa8\x09\x81\x75\x8d\x80\xc4\x03\xe5\xca\xe6\xc4\xde\x70\xa3\x0f\xfd\xef\xae\x6f\xef\x07\xe7\xa3\x0f\x45\xd2\x83\xcb\xea\xf3\x40\x5b\xae\x6e\x02\x67\x23\xe6\xe3\x94\x3d\xae\x34\xec\x25\xc2\x71\x5c\x00\x46\x58\x25\xd2\xc8\x6c\x2b\x39\x72\x70\x2a\xd6\x46\x28\xaf\x68\xe6\x01\x52\xbb\x0e\xf5\x64\xad\x70\x9d\x95\x4e\x8e\x49\x50\x5b\x91\x49\xb4\xa7\xcb\x26\x84\xc4\x55\x46\xd7\x26\xca\x61\x36\x32\xf2\xec\x74\x25\xb8\x9d\x4f\xb0\xb9\x84\x37\xe3\x76\x6e\x43\xb6\xd8\xd4\x8f\xf4\x33\x89\x6f\x1b\xa4\xaa\xbd\x24\x0a\xb5\x0a\xb0\xac\xdd\x85\x9c\xd1\x4d\x34\x7e\x3f\x95\x07\xfd\x5d\x7b\xb6\x74\x5d\x20\xdd\x15\xa8\xb5\x00\x59\xab\x10\x46\x11\x11\x0a\x53\x86\xa6\x70\xb0\x59\xb4\x40\x80\x83\x42\xc0\x87\xfd\x47\x94\x52\x06\x80\x0c\xab\x96\xf6\xa1\x3c\x8f\x0d\x84\xd6\xcb\xe1\xd5\xc3\x7d\x49\x54\xfd\xfe\xfa\xa1\x5c\x2b\xbf\xff\xf3\x4a\x59\xb5\xd2\xc2\xaa\x60\xa1\x60\x8a\x45\x72\xa7\x05\xef\xf5\x2b\x53\x3b\xd1\x64\xa1\xc8\xc3\xed\xc5\x4e\xf2\x5d\xbd\xb3\xac\x11\x7a\x3d\x94\xae\xea\x81\x26\xda\x7c\x1a\x93\x68\x1d\x38\x6c\x7b\x3a\x32\x51\x50\x7a\x1d\xac\x35\xd1\x02\xc7\x61\x89\x32\x2c\xac\x1f\x2a\x36\x01\x50\xe5\x82\x6b\x46\xf3\x5a\x05\xcc\xf1\x89\xa8\x1f\xf5\xd5\xc7\xd9\x3e\x92\x4b\xac\x28\x0b\xfe\x51\x32\x7e\x32\x0d\x6f\x70\xd2\xec\x50\x56\x64\x10\x39\x61\x19\x7a\x40\xb6\x87\x10\xce\xe2\xd8\x14\xde\xef\xeb\xe6\x60\x45\x5c\x98\xa6\x56\x49\x39\xd3\x14\x69\x50\x6a\x1d\xb4\x6d\xd0\x1c\x9f\x9a\x8f\x5b\x02\xfd\x05\xc9\x02\xba\xad\x62\x29\x51\xff\x66\x58\xb3\xd6\x17\x55\x17\xd2\x97\x55\x25\x28\xf1\xde\xac\x7d\x63\x4f\x05\x59\x9f\x07\x01\x36\x65\x67\xba\x1b\xba\x94\x71\xfa\xdf\x94\x23\x09\x0e\x01\x04\xb9\x4e\x65\x28\x65\x73\xaf\xc1\x3b\xde\x2c\xc1\xb1\x58\x86\x0d\xb1\xa4\xc2\x01\xd9\xec\x9a\x10\x3f\x69\x39\x74\xbb\x17\xe2\x29\x71\x53\x87\xd8\xc6\x16\xec\x0d\x63\xaa\x98\x4d\x1b\x90\xa9\x1f\x0d\x45\x7b\x0c\x12\x40\x55\x71\x75\x2e\x5d\xc8\xb5\x85\x04\x08\xa7\x1b\x52\xdb\x66\xb8\x54\xc5\xf8\x9c\xf9\xdb\x42\x7c\xe3\x0c\x5b\xbb\x03\x28\x51\xae\x00\x45\x5d\xbd\xc2\xe3\x11\x0b\x02\x56\xa4\x51\x7b\xf4\x19\x71\x35\x5f\xa0\x90\x30\x03\xbc\x70\xc8\x7d\xf2\xc2\x4f\x69\x07\xaa\xc8\x03\x6a\x5e\xae\xda\xb2\xd4\x8f\x3d\x9d\x72\x8e\x5d\x7e\xa7\xb3\xa0\xd8\x38\xc0\xd0\xbe\x04\xed\x05\x75\x1a\x6c\xc7\x60\x8e\x06\xa3\x05\x0e\xaa\x00\x06\x98\x00\x31\x27\x92\x7d\xa5\x7c\x06\x2d\x4d\x16\x2e\xa4\xba\xe2\x1e\xd0\x52\x1d\xa6\xb6\xe5\xd5\x07\x7c\x0f\xa0\x57\x9b\x2a\x0e\xc1\xb1\x5a\x6b\xa6\x72\x3e\x5e\xa0\x84\x30\x16\x09\x3a\x6d\xb2\xaa\x7f\xce\x48\xb4\x0d\x32\xcf\x0d\x16\x38\x25\x8a\x88\x55\xe1\x48\xe5\x1a\xdd\x20\xe2\xb8\x1d\xb4\xfd\x9a\x5d\x34\x05\x4c\xaa\x95\x6e\xbc\x76\x7b\xb1\x0e\x69\xc7\xcf\x62\x23\x50\x31\x3d\x8d\x1f\xad\xe5\x7f\xc3\x59\xd8\x7e\x8a\x69\xd8\x68\xab\x00\x58\x69\xd7\x39\xbd\x0e\xc2\xcc\xfd\x12\x56\x4b\x29\x5c\xe8\x40\xa0\x65\xd6\x8f\xb2\x09\x53\x66\x1d\x2f\xdd\x0b\xef\x76\x19\x0e\x2e\x33\xb9\x72\xa8\x4a\xb9\x13\x40\x25\xa0\x52\x19\x78\x95\x7a\x5c\x18\x10\x5a\xea\x22\x24\x03\xb7\x9f\x45\x0d\x2c\x0c\xba\x56\xb2\xaa\xd6\xec\xaa\x2c\xd7\x1a\x1e\xb7\x2f\xcc\x8c\x4e\xa2\xd9\xb7\x44\xb3\x8e\x94\x4b\xd1\xb5\x9a\x3a\x89\xa8\xc0\xf7\xd8\x5a\xda\x16\x77\xa1\x3c\x41\x48\xe9\xb2\x57\xa4\x2d\xc8\x0b\x57\x3f\x65\xfe\x5f\x65\x0e\xee\x88\x3a\x24\xd5\xba\x5c\xd5\xe3\xc0\x05\x05\x1e\xa8\x24\x94\x06\x6c\x5c\x0d\x8c\xd6\x84\x41\x1a\x2b\xff\xf0\xca\x38\xb0\x20\x67\x7c\xc1\x73\xf4\x4c\xe5\x1c\x29\x3e\x62\x10\x27\xe8\xbd\x01\x8a\x23\xf3\x62\x0f\xde\x02\x74\x09\x99\x4f\x52\xaa\x10\x0e\x66\x58\x32\x49\xf6\xec\x79\xd6\x1f\xc0\x8c\x6b\xe1\x0b\xea\x90\x8f\xd6\x1c\x9a\x2d\xec\x6b\x45\x23\xbb\x22\x14\x04\x31\xcd\x2f\x8b\x51\x10\x68\x3c\xa1\x86\x59\x7b\xe6\x3a\x90\x02\x54\x6f\x6d\xb0\x58\xac\x00\x98\x4b\xa5\xaa\xdc\x2d\xd6\xd0\xb3\x06\xa0\xa0\xd8\x88\x56\x08\x05\xc5\xeb\xfb\x80\x28\x68\xaa\xfe\xb6\x2a\x65\xd5\x7d\xd2\x60\xff\x76\xa9\xd0\x8a\xbb\xc0\xf9\x50\x52\xba\x69\x94\x94\x0e\x0d\x2c\xae\x48\x08\xd8\x3e\xbc\xbc\x29\x7a\x19\xce\x78\xc4\x59\x4c\x37\x88\x17\x86\x0a\x5f\x93\x7c\xda\x67\x8b\xf5\xd8\x43\x69\x18\xa8\x6f\xed\x25\x81\x24\x52\x8f\x7a\xb9\x56\x65\x2d\xda\x0f\x29\x3d\x48\x09\x2d\xc3\x01\x91\xea\xed\xc4\xb8\x82\xbc\x9f\x08\xaa\xf7\x2f\xe5\xa2\x8e\x58\xbd\x94\xb4\x9a\x6f\xef\x9a\x46\xb2\x57\xe0\xbb\x80\x47\xb8\x59\x58\xab\xdb\x4f\x3e\x10\xcf\x28\xf4\xb6\x0e\x7f\x55\x0c\x2e\xdc\x90\x4d\x01\x54\x5a\x38\xda\x26\xd7\xbc\x86\x73\xd4\x0f\x7d\x29\xc9\x63\xed\xd9\xb5\x82\xc1\x1e\xd5\xcf\xa5\x1b\xa4\x75\x4e\x8c\x97\xe3\xed\x8d\x61\x83\xba\x63\x6f\x6b\xa8\xb8\x93\xb7\x29\x30\x0c\x80\xb2\x7b\x83\xc1\xad\x22\x53\xe8\xc6\x7b\xe0\x82\xb6\x63\xc7\x26\x1c\xc7\x83\xb3\x57\xf6\xa4\x34\x63\x13\x52\xf9\x22\xb3\xde\xb4\x2a\x74\xe0\x13\x15\x36\x26\x99\x86\xd6\x0d\x28\x07\x6d\x43\x39\x2b\xb7\x85\x17\x40\x73\x16\x13\xc1\x08\x56\xf3\xd7\xcb\x04\x39\xdb\xd5\x84\x1e\x8c\xef\x65\xb3\x42\xec\x48\x71\x39\x39\x64\x97\xe1\x96\xcb\xe3\xaf\x1d\xa7\x7e\xbd\x8d\x35\xcb\x06\x48\xf8\x02\xd1\x4b\xea\x6d\x8d\x69\x33\xc0\x1f\xda\x84\x4a\x77\x4a\x16\xa9\x57\x39\x5f\x26\x6d\xa6\xc6\x36\xb5\x94\x30\xa3\x4f\x7b\x58\x56\x7b\xcd\x92\x7c\x11\xf9\x29\x2f\x9f\x32\xb1\xaa\x80\x77\x1e\x64\x51\x40\x15\x75\x85\x29\xb3\xdc\x6b\x55\xe2\x84\x96\x7b\x53\x5c\x97\x2b\x71\xf0\x59\x38\x5f\x7c\x12\x4e\x97\x92\xd1\xa5\x64\xd4\xec\x51\x97\x92\x81\xd0\xa1\xa5\x64\xac\x53\x41\x57\x19\x69\xbd\xdf\x10\x0a\xad\x96\xaa\x1b\x99\xfd\x5d\xa3\x47\x6e\x9f\x76\xe0\xec\x9c\x61\xcc\x96\xfd\xc5\xfe\x50\x1b\xb6\xb5\xf4\x59\x75\xb6\xa1\xcd\x95\x2d\xaa\xae\x0b\x2c\xe2\xc4\x42\x10\xda\xa0\xea\xb2\x8d\x6c\x95\x39\x77\xc4\xbe\xe7\xcf\xe4\x89\x88\x1e\xc2\x0a\xa5\x1c\x70\xad\x8a\x18\x1e\x38\x08\x25\x34\x7b\x13\xab\x81\xd1\x15\x4e\x49\x6c\x8a\x5d\x06\xa1\x97\xd6\xa8\x6c\xdd\xc1\x75\x48\xbb\x00\x1a\x6b\xb6\xc1\xc5\x76\x8c\x98\x09\x87\x34\x21\x78\x20\x2b\x50\x37\x31\x20\x98\xdf\x79\x67\xf5\xef\x8e\xd1\xbd\xbe\x9f\xa8\x2c\x8f\x37\x00\xde\x6b\x1a\xdb\x88\xcd\x04\xcf\x33\x6f\xe7\xe3\x13\x53\xf5\xd8\x44\x68\x2d\x3b\xab\x61\x30\xce\x53\x1d\xe1\x58\xeb\xe2\xab\x09\xe7\x4d\x22\x65\xb7\x82\x59\x0a\x09\x48\x1f\x43\x1f\xfe\x67\xc3\xf1\x8d\x8f\x39\x00\x97\x59\x85\xc1\xff\x42\x0e\xf0\x73\x22\xc1\x2a\xe4\x3d\x03\xa5\x5c\xf7\x32\x9e\x42\xed\x38\x57\xd9\x6d\xbd\x6f\xc5\xf9\x1f\xea\xa1\x1a\x8a\xce\x6d\x5c\x9a\x49\xa4\xb5\xf7\xc4\x8b\x59\x74\x5b\x47\xf8\x36\xf1\x8b\x9b\x5c\x64\x1c\x24\xb1\x64\xe1\xa0\x25\x2c\xc8\x5f\xc6\xb3\xdc\xc4\xde\xd1\x30\x14\xab\x96\xb2\xa9\x54\x97\x58\x45\x73\xcd\xb9\x0b\x54\xb6\x3d\xc5\x24\x16\x5c\xf9\x65\xad\xbc\x35\x33\x38\x0b\x7b\x6f\x70\x7b\xac\xa2\x9e\x20\xc6\xd0\x07\x72\x7a\x49\x22\xd5\xfd\x19\xd7\xa0\xad\x65\x1e\xd8\x45\xdd\x27\xf6\x89\x9e\xe8\x3a\x2a\x5a\x37\xfe\x76\xb4\x55\x2e\xb6\xb6\xf7\x68\xc7\x1d\x60\x6e\xce\x2d\xa8\x58\xf1\xa2\x2d\xce\xdb\x10\xa2\x20\xe8\x76\x99\x4a\xb6\x40\xc2\x93\x16\x47\xbc\xc5\x35\xc5\x99\x56\x22\x14\xd7\xb7\xa4\x98\x19\x39\xd6\xc4\xf2\x22\x8c\x72\x41\xdd\xd9\xaf\xe4\xad\x37\x53\x07\x58\x28\x4f\xc2\x62\x5a\x11\x0e\xea\x0c\x9a\xa0\x04\x1c\xa9\x1c\xfb\xe0\x49\xa0\x09\x57\xff\xde\xe4\xe8\x3b\xe7\xbf\x70\xe2\x5d\xcd\x9e\xae\x25\xec\x1d\x76\x19\xd7\x61\x30\xb6\x3a\x69\x94\xcd\x02\x00\xc7\x7a\x2b\x71\x9b\xb2\x17\xb5\x5f\xb6\x2b\xdd\x51\xfb\xa9\x93\x7d\xb6\xf9\x76\x05\xc0\xd4\xd6\xf1\xe3\xa5\x58\x7c\x1b\xac\x6b\xa5\xa7\x10\x5a\xd3\xda\xef\x00\x78\x98\x42\x30\x01\xb6\xd2\xd4\x7f\xf9\xbf\x4c\x99\x34\xb3\x34\xff\x85\xb8\x18\x31\xf3\x7b\xcf\x97\x28\xd1\x2f\x14\xd8\xbf\x38\x25\x05\x8c\xa7\x28\x03\xfe\x01\xec\x89\x05\x6c\x33\x38\xcf\xbe\x42\x83\x1e\xc3\x63\x3e\x21\x82\x11\x3d\x34\x07\x90\xe0\x99\x59\x8a\x19\x9e\x01\xaa\x74\x0f\xa2\xf7\x40\x5c\x2d\x54\x11\x43\xd2\xa6\xd4\x25\x70\x2b\xcd\x2c\x6d\x4e\x70\x51\xf2\x19\xfa\x34\xa2\xac\x05\xb5\x2d\x42\x40\xea\xa9\xff\xd6\xf6\xbf\x9d\xc4\x7e\xdf\xbf\xfb\x61\x7c\x3b\xb8\xbb\x7e\xb8\x3d\x2b\x89\xed\x67\x17\x0f\x77\xf7\x83\xdb\xda\x67\x45\x3e\xed\x5f\x1f\x06\x0f\x0d\x8f\x5c\x03\x17\xfd\xef\x06\xa5\xfa\xe9\x7f\x7d\xe8\x5f\x0c\xef\x7f\x1e\x5f\x7f\x1c\xdf\x0d\x6e\x7f\x1c\x9e\x0d\xc6\x77\x37\x83\xb3\xe1\xc7\xe1\x59\x5f\x7f\x19\xbe\x7b\x73\xf1\xf0\x69\x78\x35\x76\xa1\xd1\xe1\xa3\x9f\xae\x6f\x7f\xf8\x78\x71\xfd\xd3\x38\xe8\xf2\xfa\xea\xe3\xf0\x53\xdd\x2c\xfa\x77\x77\xc3\x4f\x57\x97\x83\xab\xd5\x75\xda\xeb\x57\xa3\xb1\x04\x74\x70\x91\x05\x46\xa3\x40\x4c\x9a\x2c\x2c\x69\xd3\x5f\xc1\x77\x71\x63\xe8\xf1\xa8\xe7\xfe\x32\x55\xd5\x8f\x34\x0b\x74\x7e\xb1\x82\x7b\x8c\x98\x77\xae\xfa\x4b\x55\xe1\x99\x74\xe9\xd1\xa5\xd1\x9e\xa2\x3e\x9c\x15\x50\x18\x4a\x9d\x42\xf6\x85\x1f\xa9\x73\xc7\x03\x1d\x26\x34\xa5\xe0\x99\x47\x47\xa8\xba\xe1\xe5\x06\xed\x9c\x60\x08\xd6\x6f\x17\xaf\x3a\x0d\xb2\x9a\x79\x0d\x94\x72\x8a\x1c\x87\x26\xc6\x9c\x60\xf0\x71\x17\x0c\xa7\x34\xaa\xa6\x89\x00\x44\x2c\x2a\xe0\x50\xaa\x2d\x96\x08\xac\xdc\xf2\x9c\xa0\x1f\xfe\x52\x0c\x0a\x3c\x18\x56\xf3\xce\x97\x8a\x29\xda\x07\x22\x37\xab\xba\x8e\x3c\x4b\x3d\xb9\x63\x6e\x4d\xcb\x70\x6e\x6d\xd1\x76\x70\x37\xe5\x2c\x80\x44\x2b\xf9\x9e\xf4\xf1\x36\x33\xaa\xd0\xf8\x29\xba\x03\x38\x16\x59\xa8\xee\x7a\x17\xb3\x24\x9f\x51\x86\x68\x9a\x25\xc0\x63\x8c\x3e\x3f\x21\x73\xfc\x44\xb9\xab\x5c\x62\x0a\xbc\xc0\x3a\x5a\xd1\x0a\x1d\xa1\xc6\x83\x72\x8a\xfa\x71\x2c\xcb\x0c\xae\x44\x39\x8e\x65\x1e\x95\x87\x1d\xa2\x98\xb1\xd8\xb3\xcd\x0a\x1d\x15\x47\x0e\x56\x6c\xff\x80\x33\xcb\xec\xb0\x7c\xf7\xee\x70\xfd\xeb\x15\x1c\x3b\x52\x1e\x6f\x25\x0c\xdc\x63\xf9\xe8\x58\xf3\x3a\x81\xc0\x41\xff\xec\xd6\xa3\xc5\x00\x6a\xdb\xa9\x5f\xd9\x31\x1c\xb4\xed\xfa\x6c\x44\xae\x5e\xd3\xa5\x9b\x71\x52\xa9\xda\xd6\xba\xbf\x52\xd5\xb7\xda\xce\xf6\xea\xed\xa9\x97\xc6\xe0\x48\x8e\x3d\xfd\x6f\x30\x8f\x1b\xf8\xf4\xda\x7f\xb9\x52\x64\x1b\x07\xeb\xb6\xa9\x0f\x68\x29\x91\xd8\xfa\x81\x56\xd2\xe1\x9e\x20\xa8\xda\x0b\x83\x50\x73\x83\x46\xe0\xee\xc3\x94\xd9\x4a\x4c\xc4\xfb\xa3\x5c\xed\x71\x7d\x8e\x7d\x75\x40\x3c\xe1\x4f\x25\xe5\x32\x25\x52\xe2\x06\x50\x95\xc0\x24\xb6\x0b\x63\xf0\x27\xd4\x7e\xd8\x92\x9e\xdc\x99\xbc\xd7\x5f\xad\x32\xfa\xdc\x86\x9a\xb1\x9b\xa8\x16\x58\x63\x17\x0d\x8c\xae\x4d\x4e\xa0\xe6\x2f\xbd\x22\x98\x86\x8b\x20\xc6\xa8\xc9\xfd\xd3\xd2\xac\x56\x5d\xb0\xda\x02\x5b\xa1\x0b\x6f\xf3\x18\x9c\xa0\xf5\xad\x51\xbb\xad\x5f\x05\x97\xd7\x67\x03\xaa\x2b\xf9\x3b\xc3\xe2\xe3\x11\x4f\x53\x23\x17\x94\x6c\xa9\x3d\x84\x4d\x2a\x66\x21\x4d\xc9\x3c\x9a\x1b\x2f\x93\xbe\x32\x7a\x23\xf6\x1c\x6c\x48\x29\x58\xb9\x1f\xb6\x04\x88\xa7\x9f\xf5\x71\xa3\x4f\xa5\x10\x70\x10\x19\x29\xc4\x23\x07\x84\x60\x1c\x82\x45\xe5\xb0\x35\x04\x1e\xec\xd7\x0e\xa4\xbe\x45\x99\xc8\xca\xfa\x36\x15\x8b\xf4\x73\x0b\x6a\x34\xee\xa0\x29\xb7\x1d\x42\x50\x26\xb2\x6e\x04\x7b\xa8\x12\xf9\xaa\x10\xe4\x3e\xa5\xd4\x64\x20\xa7\x13\x8b\xa3\xa1\xa7\xeb\x56\xfb\xf7\x6e\x46\xbf\x37\x7e\x87\xbc\x01\x78\x25\x68\xcd\xa3\x90\xa3\x23\x2d\xb3\x3a\x40\x00\x1b\x88\x21\xd1\x91\x41\x36\xfc\x0a\xa2\x41\xfb\x37\xc3\xaf\x7a\xe8\xab\x30\x23\xee\xab\xad\x0e\xa0\x1d\xb7\xad\x14\x09\xda\x54\x29\x2d\xa2\x7c\xec\x60\xaf\x2a\x27\xd1\xee\x99\x3d\x88\xa8\xe9\x1c\xea\x2f\x4b\xdf\x80\x73\x1a\x2a\x1f\x1a\xff\xad\x0f\xca\xb6\x2e\x20\x23\xe3\x52\x59\xb3\x76\xf1\x88\x4d\x16\x55\x27\x4f\xcf\x7b\x79\x5a\x9f\xd2\x9d\xab\xf9\xe9\xf6\x96\x53\xa8\xf7\x1c\x2c\xbc\xfa\x3e\x58\x93\x94\xdd\xf7\x25\x67\x0a\x2e\xd6\x14\xa5\xd0\x45\xd9\xd7\xcd\xaa\x64\x2f\x73\x8b\x59\xbb\x29\xeb\xe4\x9f\xf7\x46\x6e\x2d\x42\xd3\xfb\x75\x2b\x62\xb3\x12\x1a\x84\xeb\x8e\xca\x5e\x96\xca\xf6\x91\x95\x51\x1e\xdc\xe6\x17\xe8\x99\x91\xe3\x82\x66\x9c\xc1\x55\x2b\x13\x9e\xc1\x97\x4a\x3e\xae\xaf\x95\xbc\xa1\xcf\x37\x58\x93\xf5\x4e\xdf\x3b\x13\x38\x60\xdc\xae\xcb\x63\xad\x0e\xb5\xaf\x6c\xa1\x24\x4e\x4d\x06\xa6\xa2\x29\xe9\x99\xca\x5c\x45\xb0\x83\x3d\xaf\x40\x6e\x26\x46\x69\x4e\xa8\x70\x9d\x58\x1c\xc4\x8d\x52\xf6\x37\x94\xc6\x9b\x68\x64\x87\x48\x93\xab\xfe\xe5\xe0\x7c\x3c\xb8\xba\x1f\xde\xff\x5c\x83\x71\x59\x7e\xec\x60\x2e\x83\x17\xee\x7e\xbe\xbb\x1f\x5c\x8e\x3f\x0d\xae\x06\xb7\xfd\xfb\x35\x10\x98\xab\x3a\x6b\x82\x57\xcc\x65\x9d\xfa\xb6\x09\xc4\xa2\x33\xf3\xd6\xf4\xbe\x0c\x84\x19\x74\x42\x49\x03\x18\xa6\x81\x27\x60\x31\x11\x28\x26\x4f\x24\xe1\x59\x61\x56\xad\x5d\xb0\x00\x25\xb3\xa6\xfd\x55\x48\x99\xd0\x66\x75\x8d\x4f\x91\x29\xf3\x17\x54\x3a\xf6\x0d\x82\xc8\x87\x05\x61\x5f\x29\x44\x3e\x67\x09\x8d\xa8\x0a\xd2\x17\xb9\xb0\xee\x15\xe3\x3e\x84\xe8\xd4\x35\xc4\xb5\xb7\x68\x94\xbd\xeb\xfc\xa1\x27\x7d\x59\xdb\xf7\x27\xca\xa3\xb6\xad\x2d\x72\xb4\x07\xc5\xbe\xc1\x69\xbc\x04\x2a\xb7\xc5\xe8\x5e\xc2\x3c\xb0\x9c\xa3\x63\x53\x10\x1b\x00\xe7\xea\x07\xb9\xfe\x36\x5c\x15\x27\x53\x3a\xd7\xab\x03\x65\xda\x51\xea\x1b\x87\xbb\x94\x6a\xaa\xee\x01\x1d\xc4\xc6\xae\x6f\x18\xb0\xb0\x54\xd3\x86\x99\x98\x53\x8c\x04\x49\xb9\xd2\x0a\x98\x89\x08\xe8\x69\xa1\x8a\xe2\x84\xfe\x0a\x38\x5a\x82\x1c\x07\x11\x14\x0e\x7d\xac\x70\x1f\x58\x8c\x8b\xe3\x11\x3b\x1f\xdc\xdc\x0e\xce\x34\x43\x3a\x46\x0f\x12\x20\xb2\x4a\x53\x3f\xb7\xe4\x6d\xc4\xb1\x30\x92\x81\x32\xa9\x08\x6e\x0a\x06\x23\x42\x70\xd1\x9e\x3f\xf8\xfe\x06\xf0\x5d\x3d\x79\xc3\xb3\x92\x6d\xca\x19\x00\xae\x1a\x0b\x62\x07\x39\x03\x7b\xcf\xc9\xba\xc5\xcf\xa5\x15\x09\x21\x42\x40\x12\x29\xaf\xfa\x0b\xae\x36\x80\x8c\xb6\x9f\x5f\xa9\xcf\x1b\xf8\x76\xd5\x3c\xef\x21\xc4\x4e\xaa\x02\xb1\xd4\x80\x9a\xfa\xca\x3c\x95\x79\x36\x8a\x8a\xe2\x2d\xe0\x44\x2a\xa4\x3f\x21\x33\xcc\x90\xc8\x19\xab\x40\xd8\x86\x96\xb6\xe5\xa0\x99\x4d\x8f\xaa\x5e\x33\x9c\xf2\x9c\x99\xd2\xb2\x7a\x54\x35\x83\x91\x19\x61\x6a\xcd\x60\xde\x0a\x2c\xa6\x32\xd4\xc3\xc5\x8b\xa9\x19\x68\x13\x64\x4c\x9d\x3f\x09\xaa\x6e\x6f\x76\x2d\xbb\xa0\xbc\x92\x53\x49\x1f\x2a\x7f\x3f\xd7\x6b\xd9\x58\x3e\xee\xdc\xdd\x3d\x96\x8f\xeb\xbb\x8a\x49\xf4\xb8\xe9\x65\x53\xcd\xcc\x4c\x6c\xd1\xf2\x25\x63\xdf\x42\x3f\xb5\xe5\x63\xa0\x56\x7d\xf4\x88\xbe\xbf\xbf\xbc\x40\x53\xaa\xe5\x5e\x7d\xad\x5c\x61\x2d\x63\x3f\x88\xc4\xd9\x85\xad\x6d\x35\x17\x89\xbf\x7b\x61\xe3\x9d\x28\x15\x48\x09\xfa\x46\xc3\x33\xe2\x8c\xbd\xc2\x22\x02\x56\xca\xc7\x08\xcc\x62\x9e\x9a\x79\x9c\xc8\x7c\x3a\xa5\x9f\x8f\x15\x16\xdf\x34\xac\x87\x89\xaa\x18\xff\x9d\x4f\xc6\x7a\x44\x3b\x5e\xc4\x75\xcd\x21\x5b\x4b\xdb\x2f\x9b\x9d\xd9\xb9\x79\xf7\xff\xf2\x09\x64\xbb\x43\xc2\xbe\xf3\xce\xd9\x48\x05\xfb\x8a\xa3\xa4\xa2\xb8\x74\x09\x88\x25\xe2\x42\x10\x9b\x24\x6f\xea\x9f\x66\x58\x28\x0a\xd6\x5a\x07\xe4\x52\x42\xf0\x2f\xb6\x28\xac\xf6\x3e\xc7\x05\x5a\xf6\x84\x10\x70\xf0\x64\x34\xd9\x4c\xe9\x3d\x2b\xf9\x26\x2b\x27\xd0\x46\x9e\x5a\x6c\x4f\x30\xc8\xac\x15\xb1\x06\x4f\x84\xa9\xbd\xe8\x27\xd0\x44\x4d\xda\x7e\x3b\x2f\x83\x29\x43\x3a\x3c\x2f\x2e\x37\x17\xd2\x1b\x46\x35\x29\x81\xe1\x9e\xb7\x89\x52\xd6\xa5\xde\xe4\xe8\x7f\x6a\xed\x3b\x86\x57\x97\xd7\x65\x4d\x68\xbc\x5d\xed\xa2\xca\x7b\x11\xd6\xea\xca\x0f\x6c\x09\x36\x24\x89\xb1\x62\x04\x20\x17\x56\x39\xad\xee\xb9\xe9\x53\xd3\x56\xa5\xcb\xb5\x5b\xbe\x05\xb2\x4e\xa9\x99\x4f\x04\x52\x3a\xf7\x11\x88\xbe\x49\xee\x3e\x0c\xe4\x41\x24\x10\x42\xbd\xd2\x8a\x65\x4a\xa1\x6b\xce\xe7\x25\x3b\xdc\x42\x46\x37\x83\xd1\x42\x23\xc9\x04\x89\xf4\x55\x76\x8a\x6e\x12\xa2\x25\xaf\x5c\x4b\x5f\x79\x92\x38\x14\xb2\xd5\xd2\xe1\x46\xc8\x79\x2f\x3e\xaf\x40\xf7\x58\x31\x31\x87\xc2\xb7\x7a\x66\xc1\x1a\xec\x1f\x71\x21\x58\x5f\x30\x21\x83\x21\xb1\xac\x45\x02\x87\x5f\x98\xb8\x59\x30\x25\xe1\xd2\x45\x46\x7f\xd5\xec\x57\x10\x39\xe7\x8d\x49\x8e\xe1\x6c\x5f\x66\x0e\x6e\x29\x5f\x70\x12\xee\x3e\x6c\x8a\xab\x6e\x21\xd7\x54\xee\xc0\x92\x88\xb3\x6a\x8a\xbe\x42\x85\x8f\xfe\xb0\x98\xb0\xf6\x6e\xb5\x43\x83\x5b\xb2\x30\xb5\x85\xf8\x6c\x85\xeb\xa2\x50\x66\x16\xc6\xf7\xea\x3f\x2f\x0c\xc8\x45\x4a\x00\x55\xb2\xa8\x8c\x87\xf4\x5d\xdb\xb4\xc5\x7a\x9e\xe3\x5c\x6c\x04\x49\x51\x20\xab\x6f\xc2\xb9\x6d\x32\x4a\x31\x2c\xbd\x08\xf5\xec\xd2\x16\xbc\x00\x31\xda\x86\x1a\xc9\x12\x5a\x9d\x25\x1b\xb3\x8c\xb5\x2a\x5e\x33\x53\xde\xd5\xad\x06\x52\x72\x21\xca\xbc\x94\x77\xad\x44\x81\xa5\x09\x74\xf8\x67\x9b\xe3\x9f\xd9\xea\x27\x9e\xf6\x00\xad\x50\x09\x48\xfc\x2f\x1c\x68\x55\xc1\xc1\x1a\xbd\xd7\x65\x3e\x95\x76\xa7\x55\x9a\x53\xe9\x0b\xcd\x4b\xce\x77\xf4\xc0\xe9\xc9\x2c\xc6\x90\x38\xba\x4b\x14\x4e\x69\xfe\xc6\x7b\x00\x6d\x92\x18\x19\xf4\x02\x83\xce\x6c\xd7\xce\x7b\x4e\x32\x2c\x08\x53\x23\x76\xab\x47\x61\xbe\x28\x22\x31\x5c\x1c\x8e\x43\xcc\x87\xba\xba\x53\x84\xed\x57\xb0\xe8\x4d\x81\x70\x72\x6c\x5e\x02\xd5\xf4\x05\x93\xec\xbf\x33\xef\x18\xcc\x03\x8b\xf9\xa3\xa7\x4a\xa7\x85\x1a\xaf\x05\xc8\x68\x4e\x01\x72\x20\x26\xd2\x5e\x48\x54\x59\x4c\x09\x2f\x7e\xe7\xc4\x61\x44\xc3\x67\x9e\x7f\xd5\x31\x6c\x67\x28\x60\xce\x40\x27\x47\x2c\xe8\x63\x05\xa4\xa8\x51\xd6\xb7\x54\x25\x60\x9f\x69\xec\x1d\x5f\xf0\x4f\xb3\x43\x5c\xd0\x19\x65\x41\x61\x27\x3b\xbd\x14\x67\x60\xde\x35\x67\x90\x4f\xfd\x9d\x76\x6f\xb3\x0c\x8e\x61\xc4\xff\xf3\xdf\x7f\x3b\xa6\x4d\xde\x0f\x39\xb6\x2b\x70\x08\x3b\xb9\xd9\xb6\x84\x3b\x1f\xa0\x88\x34\xa0\x53\x04\x3a\xad\x2c\x65\x4e\x14\xbf\xda\xcb\x4d\x13\x0d\x57\x73\xe3\xee\x2d\x93\x3b\xf8\x46\x44\xbe\xe2\x6c\x98\x2b\xe6\x6d\xd7\x92\x4a\xc8\x0e\xd0\x23\x31\x27\xd9\x1b\x08\xc2\xa2\xe9\x4b\x66\x9a\x11\x2b\x3e\x91\x06\x0f\xc5\x40\xd0\x9a\x1f\x8a\xd5\x69\xb9\x30\xab\x78\x7f\x11\x29\x51\xb8\xc3\x83\x68\x64\x57\xe2\xc3\x44\x91\xea\xf6\x2b\x37\x6d\x85\x73\x07\x58\x8c\xbb\x44\x6d\xce\xb1\x7c\xb9\xd0\x9c\xda\xd2\x54\xc6\x9a\x1e\x0a\x0f\xeb\x82\x74\xcc\x20\x4d\xb6\xa7\xde\x90\x5c\x12\x61\x38\x9d\x87\xc3\xb2\x94\x10\x22\x4d\x42\x8c\xe6\x1a\x5f\x23\x49\x31\xdd\x28\x9f\x40\xbf\x5f\x8f\x83\x59\x72\x36\xe0\x19\x11\xe3\x38\x57\x4b\xc7\x62\x55\x8c\xbf\xfe\xe8\x3c\x57\x8b\xf5\xed\xcb\x04\x2f\x97\xe6\x59\x85\x3d\xaa\xdf\x6f\x68\x76\xbd\xc4\x1c\x84\xf8\x94\xa5\xe6\x06\x64\x4f\x52\x41\xf6\xb4\x31\xa7\x25\x13\x09\xdc\xc0\x4c\x01\xa4\x5e\xa1\x49\xd9\x2b\xda\xe0\x8f\xc3\xc8\xd1\x24\x2f\x4c\x4a\xbe\xa2\x43\x7c\x3c\x62\x1f\x4d\x49\x14\xd0\xf2\xcc\x00\x22\x48\xf8\x21\x9f\x33\x2e\x49\x29\x03\xad\xa6\x4a\x83\xcd\x20\xb5\xc3\xa8\x17\xd6\x8b\x8f\x76\x97\xd5\xdf\x1c\xa3\x75\x79\xc3\x97\xa7\x5c\x4f\x81\x3b\x89\x83\x11\xcd\xa8\xa6\x9d\x71\xed\x49\x7b\xb9\x4a\xc1\x45\x4c\x17\xe0\x60\xa9\x64\xd1\x43\x7e\x7a\x15\x82\x48\xc8\x13\x01\x73\x3a\x8c\x31\xac\xc5\x51\xb6\xeb\x35\xb0\x93\x75\x07\xa8\x48\xff\x04\xb6\x80\xe2\xea\x08\xca\x49\x72\x75\xb4\x58\x4e\xff\xd9\x39\x53\xad\x2e\x30\x65\x03\xf1\xbc\x1f\xd6\x24\x59\x10\x85\xc8\x67\x45\x6c\xd5\xd2\x7b\x97\x4b\xb8\x9c\x7e\x80\xea\xd3\xa1\x9a\x65\xc7\x17\xaf\x1f\xdd\x77\x19\xe4\x2e\x59\x32\x76\x57\xbe\x4d\x1e\x9c\x63\x16\xdb\x8c\x58\xab\x64\x68\x61\x0b\x66\x67\x8c\x6e\x3e\x57\xc0\xe6\x75\x06\x60\xee\xa6\x4d\x83\x3a\x0f\x17\x99\x53\x18\xb5\xca\x02\xe1\x15\x5c\x68\xc9\x3d\x67\x8a\x26\x9a\x38\xec\x18\x24\x9a\x42\x64\x9c\x05\x2a\x84\xc8\xf6\x26\x2c\x3c\x2a\x25\x65\xb3\xb1\x5d\x49\x97\xdc\xd9\xee\x62\x28\xd3\xd4\xa5\x69\xca\xfc\xf8\x9d\x6b\x68\xb5\x51\xdd\x90\x35\xe0\x94\xb9\xb4\x52\xd0\x38\x18\x77\x93\xb1\x00\x73\x2e\x1b\x75\x4c\x63\xb3\x14\xd4\x14\xc7\x86\x89\x6e\x62\x77\x07\x99\x6e\x19\xc7\xa1\xb8\x42\xa4\x4d\x15\x35\x09\x60\x10\xa9\xaf\x1a\x72\x61\x65\x63\x0e\xec\x90\x79\x11\xcd\x96\xe6\xf2\x99\xfe\x95\x74\x5a\xec\xba\xb3\xe9\x08\x38\x49\x26\x38\x7a\xf4\x5a\x98\xb7\x45\x70\xe1\x4a\x1b\x68\xb9\x12\x6a\xb7\x19\xe2\xd2\x03\x8d\x40\xba\x09\xbd\x85\x06\xc9\xc7\x0e\xbb\xe8\xdc\xac\x9a\x85\x48\x33\xd0\x4d\x66\xf4\x26\xb7\x21\x26\x59\xc2\x17\x69\xc3\x7d\x56\x4d\x21\xdc\x25\x52\xa7\x29\x83\x71\xaf\x57\x59\x85\xe9\x6d\x7c\x99\x2d\xe5\x23\xed\x01\x57\x6a\x03\x2e\xf9\x29\xe1\x13\x30\xa9\x5a\xf3\x83\xcb\xb1\x09\x52\x3d\xaa\xe7\x79\xd3\xcc\x9f\xea\x89\xa4\x32\x4b\xb4\x32\xd3\xdc\x83\xc9\x39\x79\xd9\x7d\x33\x18\x05\xeb\xad\x83\xed\xa3\xb5\x6b\x3f\x7f\x09\x04\xe3\x0b\x27\x09\x98\x77\x0d\xff\xaa\x58\xd9\x4c\xb2\xdf\xb1\x71\x52\x2b\x3e\x62\x0a\xcf\xdc\xe6\x5a\xe1\x92\x3f\x33\x22\xe4\x9c\x66\xa5\x9a\x8e\x3b\x87\x87\x5b\x8a\xb6\xff\x31\xc1\xd0\x1b\xf0\x4e\x9e\x1d\x19\x84\x12\x4d\x1f\x32\xc3\x51\x61\x15\x8d\x12\x2c\x25\x9d\x2e\x02\x60\x11\x1f\x69\x0b\xe9\x5b\x65\x33\x42\x50\x46\xad\x8e\xd1\x98\xf1\xed\x27\xb3\x7e\xf7\xac\xc2\x87\xf2\xf1\xa3\x71\x88\xe0\xa6\xef\x93\x65\x14\x19\x77\x53\x5b\x34\x99\x46\x24\x5a\x03\x21\xb0\x5d\x26\xfc\x4a\xf0\x9f\x66\x33\x42\x21\x4c\xda\x61\x5b\x45\xc6\x03\x7e\x84\x60\x38\xaa\x94\x4a\x09\x9b\xaf\x15\x27\x67\x17\xd6\xc4\xe9\xc1\x42\x00\x53\xa1\xf8\xb8\x87\xe4\x4e\x20\x5b\x6d\xe8\xe2\x9c\x24\x64\x2f\x11\xd7\x5b\x10\x49\x35\x9c\x21\x20\x8f\x95\xa4\x51\x94\x19\x58\x6f\x5c\xd8\x22\x10\xbc\x01\xaa\xa7\x7e\xe8\x3f\x99\x81\xda\x58\xf0\xba\x5d\x04\xc3\x20\xac\x72\x5b\xdd\xa5\x0e\xf3\xcf\xb4\x60\x49\xae\xe8\xa6\x44\x57\x45\xa7\x5e\x5e\x39\x44\x52\x7b\xe3\x90\xe9\xa5\x71\x7d\x22\x6d\xc2\x3b\xd6\x1e\x80\xad\x38\xd0\x32\x9f\x6e\x47\x17\xd6\x81\xaa\x38\x9a\x11\xc0\x64\xa1\x2c\xa6\x4f\x34\xce\x71\xf2\xae\x68\x62\x6f\x09\x1f\x7b\x5a\xfd\xfa\x43\xbe\xd9\xa9\xbd\x23\x4a\xba\x2b\x61\x09\x46\xd1\x6e\xce\x01\x6e\xc1\x61\x1c\x4b\x23\xb8\x7e\xf1\x72\xcb\xce\x20\x09\x76\x64\x16\x2a\xe0\x37\x24\x50\x99\x39\xc6\xf6\x0b\x0f\x0b\x50\x02\xc4\xc2\x25\x10\x41\xb3\x46\x6f\xcf\xf5\xaa\xa4\xfd\xa5\x8b\x5e\x9b\xd3\x78\x75\x54\x05\x75\x77\xf2\xe0\x66\xf2\xa0\x03\xd9\x3c\xc0\xcb\xbf\xe9\x18\x1c\xe6\xfd\x73\x00\xc2\xe1\xd2\x95\xb8\x3f\x11\xf1\x1d\x91\xc9\x41\x48\x8a\x4b\x5b\xf1\x5a\xf2\xe2\x91\x43\x39\x2a\x30\x83\x0e\x77\x8b\x0e\xe3\x24\xdf\x5a\x37\xd0\xcb\x5d\xb0\xeb\xe9\x65\x2f\xf4\x01\x80\x9f\x18\xf2\xa2\x73\x5b\x41\x04\x0e\x6f\x10\x4b\xb7\xe4\x7b\x58\x13\xa5\x68\x87\xd7\x2a\x3e\x71\x69\x39\x5f\x62\x7b\x6d\x12\x5c\xeb\xcd\x7d\x49\x52\xdb\x74\x2c\xfb\xd0\x51\x5e\xd8\x8b\x63\xa9\x31\xf8\xa0\x0b\x16\x6e\x77\x8b\xd6\x40\xeb\xb8\x2d\xdb\xe7\x21\xab\x2b\xfb\xb6\x7b\x1a\xbf\xcb\xf1\x1b\x67\x82\x4c\xe9\xe7\xad\x44\xf1\x1b\xf8\xd4\xaa\x97\x7a\x99\x2b\x85\xe4\xc0\x3d\x03\x85\xe7\x82\x80\x46\xbb\xd2\xb6\xd8\xd4\x88\x15\x99\x91\x36\x2d\xf2\x91\x2c\x10\x17\xa5\x9f\xb6\x05\x81\xdc\x7f\xd1\x3b\xb3\xaf\x73\xa5\x32\x79\x7a\x72\x32\xa3\x6a\x9e\x4f\x8e\x23\x9e\x9a\x38\x7c\x2e\x66\xe6\x8f\x13\x2a\x65\x4e\xe4\xc9\x1f\xff\xf0\x87\x62\x8b\x27\x38\x7a\x9c\x19\x58\x9d\x65\xbf\x53\x79\xcb\x09\x96\xbb\x45\xf6\xb8\x14\xb6\x17\x4e\x65\x0e\xba\x71\xc9\xa3\xfa\x1b\xa9\x70\x9a\x85\xa1\xa0\xa6\x6c\x9c\x54\xb8\x28\x56\x01\x79\x89\x7a\x9a\x68\x8e\xb3\x8c\xb0\x66\xb3\x83\x49\x34\xdd\x81\xf5\xb8\x54\x55\x3b\x42\xf2\x39\x4b\x30\x2b\xc3\x2f\x40\xe5\x25\x41\x22\xc2\x94\x85\x06\x28\xca\x5d\x03\x35\x1a\x08\x20\xc3\xff\x37\x4b\x45\x84\x39\x52\x59\x94\x54\x73\xc3\xb1\xe5\x4d\x5d\xd1\x4b\x1c\x2c\x5d\xb5\xa4\x6c\xb1\x76\xc4\xad\xda\xaa\x24\xc5\xbb\xe5\xf2\xe7\x9b\x97\xb4\x11\x9c\x8d\xc9\x67\xcd\xe4\xe4\xb6\x80\x5d\x0f\x92\x48\xd4\xff\xe9\x0e\xc9\x05\x53\xf8\xf3\x29\xba\xa4\x0c\x04\xd8\xef\x79\x2e\x24\x3a\xc7\x8b\x23\x3e\x3d\x4a\x39\x53\x73\x74\x09\xff\x6b\x7f\x7a\x26\xe4\x11\xfd\x4c\xb0\xb0\xfc\xc1\x96\xa4\xf3\x35\xd8\x35\x09\x89\x9c\x49\x44\x9e\xf4\x09\xfd\xc3\x7f\xa2\xd4\xb4\x7c\x8a\xbe\x3d\xf9\xc3\x7f\xa2\xdf\xc1\xff\xff\xff\xd1\xef\x1a\x34\xfd\xcd\x20\xbf\xa0\x72\xf1\x6d\xd9\x9d\xdb\xab\xac\xd4\x16\x15\xe7\xcf\x04\x2f\x76\xaa\xb6\xe5\x47\x1a\x3d\xf2\xe9\x74\xac\x09\xc3\x24\xf2\x8d\xb1\x58\x82\x8b\xde\x12\x3f\x95\xda\xda\xd3\xa6\x92\x5d\x51\x43\xc6\x76\x6a\x10\x1f\x1c\xbb\x96\x79\x51\x79\x17\x82\x88\x4a\xd5\x8c\xa9\x84\xaf\x48\xac\xb9\xea\x26\xa7\xc3\x59\xf7\x5c\xf2\xb7\xb3\xe0\x84\x08\x29\x61\x3d\x75\x1f\xf8\x17\x46\xb1\x9a\x40\x1f\xbb\x90\xb5\xc7\x61\x29\xbc\xf6\x8b\x89\x99\x84\xa9\xbd\x55\xbc\xa4\x5c\xea\x7c\x7d\xa8\xe4\x1d\x17\x3b\xe9\x5b\x8f\xa4\x31\x95\x61\x4d\xbd\x24\x57\xc3\x37\xac\xec\x0f\x19\xe2\x5c\x78\x1c\x63\x63\x17\xb1\x55\x15\xd7\x5b\x31\xa9\x30\xc1\x65\xed\x0e\xbd\x9e\xfa\xb9\xff\x64\xdd\x30\x21\xd2\xcc\xbd\x5d\xd4\x8b\x83\xd1\x6a\x11\x49\xb3\xc4\x9a\x11\xd7\x80\x1d\xae\xdb\xd0\x3b\x8f\x6f\x01\x8d\x43\xd8\x23\xe4\x6f\x30\x27\xd9\x5a\x00\x81\xfa\xfd\xcc\x45\x44\xce\xf8\x6e\x61\xaf\x09\x65\x4b\xf1\xf2\xed\x4b\x11\xf9\xd5\xbb\xb0\x45\xa7\x1c\x1e\x30\x8f\x0b\x65\xc1\xb8\x05\x6c\x15\x8a\x00\x88\xb4\x3c\x1b\x00\xb4\xdb\x07\xd6\xe5\x52\x6d\x84\x1d\xb8\xb6\x31\x1c\x17\x0c\xcf\x95\xd6\xa8\x54\xd4\x10\x58\xf3\xc2\x15\xb1\x6b\x10\x54\xb4\xf3\x38\x82\x2a\x31\x45\xa4\x52\xa5\x1a\x3b\x36\xa5\x52\xc4\x96\x58\xa5\xa6\x60\x53\x0f\x09\x0c\x41\x99\x6a\xae\xdb\x93\x44\x1c\x4d\x71\x44\xd9\xac\x17\xc0\x54\x02\x64\x44\x78\x1d\xd4\x11\xe9\x3d\x96\x8f\xfb\x0d\x34\xdc\xb9\x80\x25\x8d\x8b\x22\x6a\x16\x58\xc6\x38\x36\xe8\x12\x46\x9f\xc2\xf2\xb1\x09\x59\x69\x09\xd6\x6d\xc5\xe8\xfc\x52\x38\x30\xb8\x55\xe3\x73\x29\xe8\x24\xd4\xa7\xa0\x66\x83\x2b\xa9\x6c\x41\x1e\x5d\xc6\x1f\xf6\x28\x2c\x55\x74\xd3\x15\xe3\x97\x73\x2e\xd4\x78\x4b\x5c\xd8\x6a\x1a\x3d\x23\x47\x09\x00\xba\xf0\x27\x22\x9e\x28\x79\x2e\xc3\xab\x6e\x42\x8b\xc6\x68\x16\x44\xd5\x01\xfe\x66\x9a\x71\x48\xa1\x99\xa2\x14\xb3\x85\x61\x94\x9a\xb9\x60\xf9\x28\x7d\x21\x57\x24\x53\x9c\x24\x3d\x24\x48\x2e\x4d\x81\x63\x49\x92\xe9\x91\x2b\x85\x11\xa3\x84\xcf\x68\x84\x13\x34\x49\x78\xf4\x28\x4d\x86\x1b\x9b\x19\x26\x95\x09\x1e\x11\x29\x03\xc9\xaa\xc8\x66\xb7\x39\x86\x50\xc5\x55\x11\x91\x52\x46\xa5\xa2\x91\x13\x99\x0a\x50\x0a\x53\x4b\x3c\xc2\x60\x12\x86\x8c\x4d\x18\xae\x96\xf4\x88\x01\xe7\xcc\x99\x2d\x9a\x04\xd7\xb5\xc5\xdc\x73\x41\xe2\x4d\x07\x68\x0f\x10\x82\x8e\x42\xc6\xaa\x7c\x20\xd7\x1c\xa9\x33\xfb\x19\x1c\xe3\x55\x24\x70\x5b\x3e\x51\x9e\x20\xfd\x49\x2b\xc1\x1a\x41\x4c\xb9\x0f\x81\x2f\x49\x2e\x3e\x32\xfc\xc0\x10\xcd\x60\xc8\x0d\x38\x66\xeb\x68\x5a\xaf\x22\x88\x3c\x50\xa7\xab\xea\x35\xa7\x2c\x4a\xf2\xd8\x57\x6a\xd4\x22\xc0\x93\x26\x12\xb7\x3c\x7a\xed\xb5\xa0\xd0\x43\x58\xa2\x67\x92\x24\xfa\xbf\x26\x02\xfe\xc8\x17\x4e\xd0\x2c\xd9\x14\xb7\x80\x4e\x1c\x97\x6e\xa2\xa8\x83\x43\xa7\xbc\xc1\x6a\x6e\x72\xfe\x53\xae\x4c\x91\x4c\x83\x4e\xe9\xec\x5b\x06\xce\x70\x92\xf0\x09\x9c\x74\x00\xae\x74\x79\xae\x41\x5a\x5d\x1e\x45\x84\xc4\x24\x46\x5f\x07\x07\xd7\xe3\x51\x7c\x53\x0f\xa3\x58\x5a\x91\x03\x00\xad\xac\x1a\xd6\x1a\xa1\x2b\xcb\x75\xde\x8e\xd1\x4d\x05\x98\x25\xac\xdf\x8e\xab\x30\x5d\xbd\xa5\x2d\x7c\x1b\xa0\xcb\xca\x24\x5e\x6e\x87\x36\x04\xba\x2c\xf5\xb9\x07\xa0\xcb\xca\x3c\x1b\x62\xf7\xf9\xec\x45\x73\x8e\xf5\xa4\x2e\x78\xfb\x44\x30\x03\x10\x66\xee\xce\x12\x09\xba\x03\xb9\xa8\x23\xc4\xc3\x02\xf1\xac\x54\x43\x7c\x5b\x10\xcf\xca\x60\x0e\x19\xc4\xb3\x32\xd4\xc3\x05\xf1\xac\x19\x68\x0b\x10\x4f\xe3\xdc\x1f\x6b\xa2\x6e\xc7\x14\x20\xb1\x65\x92\x4f\xef\x20\xd5\x7b\xe5\x18\xcf\x4c\xe0\x80\xb9\xc6\xdc\x1d\x6d\x31\xad\x61\xb4\x36\x07\xb2\x29\x1c\xaa\xe2\x84\xd8\x94\xf6\xbc\xf7\xcd\x80\x3f\x6c\x6a\x76\xef\x85\xd6\x6e\xb0\x43\x46\x38\xb3\x39\xe5\x4d\xa5\x66\x0e\x27\x7b\x76\x3b\x7c\x54\xc0\x20\x2c\xb1\xfc\x56\x08\x62\x97\x95\xaa\x0d\x73\xfe\x6c\x2b\x27\x01\x19\x1a\xa2\x6c\x24\x41\xe8\x74\x6c\x95\xb6\xa6\x95\xa3\x4c\x91\x59\x55\xa7\x2d\x0e\x0d\x65\xea\x4f\x7f\x5c\xcb\x89\x0c\xc4\xa2\x53\x0f\x83\xda\x09\xde\xd9\x61\x9f\x91\x18\x45\x73\xad\x15\x49\xad\xbe\xe8\xe9\x98\x9b\x55\xa2\x14\x53\xa7\x48\xe5\xd2\xb8\x96\xa8\x1c\xb1\x12\x26\xe9\x31\xfa\x08\x05\x61\x71\x9a\x69\xfd\xcb\xcf\x8f\x6a\x4a\x1a\xe5\xdf\x7e\xfb\x27\x82\xbe\x45\x29\xc1\xac\xa4\xc3\x82\xda\xa4\xaf\x3e\xc0\xf0\x53\x73\x32\x62\xb5\x5b\x81\x06\x9f\x4d\x8d\x29\x17\xef\x37\x64\x53\xee\x74\x62\x28\x74\x88\xa3\x39\x92\xf9\xc4\x54\xea\x0d\x6c\x18\x4e\x90\xbe\xe0\x33\x70\x54\xc3\x8d\xec\x06\xbd\xea\x14\xbe\x6c\x0c\x80\x75\x37\xb6\xbd\x8d\xfb\x70\x8f\x1c\x49\x52\xc2\x76\xaa\x71\x9a\x19\xce\x17\x1e\x7c\x69\x70\x5f\x7a\xc6\x87\xa0\xf5\x33\x6c\x2d\xfb\x5a\x96\x86\x70\x5e\xf0\x92\xe5\x09\x16\xf6\xe8\x8f\x98\x56\x34\x04\x79\xa2\x3c\x97\xc9\x02\xc5\x9c\x91\x1e\x50\x42\x1e\xcd\x8d\x63\x55\xeb\x2c\xd8\x16\xac\x78\xa2\x32\xd7\x0a\x2d\xb4\xe5\xea\x63\x48\x85\x0d\x26\xd5\x9c\x42\x3f\x5a\xfd\x26\xf0\x55\x98\x25\x87\xda\x69\x51\x21\x6c\x6c\x85\xe7\xb7\x84\x8d\x2d\x51\x55\x07\x1b\xeb\x61\x63\x97\xd7\xe5\x10\x61\x63\x2b\x7b\xde\x0e\x36\xb6\x6e\xcb\xb7\x80\x8d\x2d\x35\xf3\xc5\xc0\xc6\x56\x56\xf4\x8b\x81\x8d\xad\xcc\xab\x83\x8d\xfd\xf2\x60\x63\x77\x04\x46\xad\xe7\xc5\x06\x5f\x49\x51\xb6\xd8\x98\xc8\xbe\x92\x68\x78\xad\x09\x2c\x7a\x2c\x07\xb5\xf9\xeb\x6a\x77\x30\xd6\x7a\x26\xb4\x19\x18\x6b\xad\xaa\xde\xcc\xea\x76\x05\x78\x02\xc5\xe0\x95\xc1\x58\x4b\x13\xe8\xe2\x2b\x37\x8f\xaf\xac\x25\x3e\xdb\xb7\x1e\x9e\x0b\xba\xac\x5e\xc8\x2d\xe1\x58\x4b\xfb\xd3\x2a\x12\x13\x44\xf7\x3d\x50\xe2\xcb\x4a\xf3\xf7\xa5\x43\xbe\x56\x96\x0f\x57\x51\x5a\x60\x68\x2d\xe1\x39\xb4\x38\xa3\x84\x87\xfe\xff\x8e\x72\xb7\x88\x0c\xae\x2c\xaf\xf7\xab\x18\x5a\x6c\x41\xaa\xad\x29\xd4\x69\xa5\xfb\x49\x94\x75\xc9\x93\x1b\xba\x98\xdd\x20\xee\x32\x12\x35\xd8\x98\x69\x4a\xf7\xd5\xec\xba\x8b\xcc\x63\x61\x81\x42\xbe\x94\x17\xaa\xaf\x27\x33\x1c\x23\xe3\x57\xd2\x61\x01\xa8\xc3\x7c\x39\xa3\x52\x89\xc6\xd8\xa6\xa5\x11\xee\xe2\x2a\xcd\xf2\xd6\x01\x31\xc1\xaa\xce\xb6\xfb\x2c\x25\x29\x17\xeb\x02\xab\x6a\xbf\xb4\xa5\x6e\xb6\xf9\x94\x64\x73\x92\x6a\x49\x66\xbc\x69\x23\x6d\xf7\xdb\x27\x0d\xdb\xdc\x35\x13\xe8\x58\x22\x82\xc0\x11\xaa\xdf\x8d\x0d\x22\x65\xeb\xed\xde\x75\x9b\x2d\x66\xe6\x86\x0e\x21\x07\xa6\xbc\xda\xe0\x66\x5f\x2a\xb9\xbb\x81\xbe\x6b\x63\x3a\x7c\x48\xcd\xfa\xa8\x8d\x15\xf1\x1a\xab\x70\xa7\x8a\xaf\x6c\x21\xe8\x0d\x5c\xf9\x65\xef\xbc\xe6\x84\x61\x15\xe0\xcd\x03\x3c\x1a\x50\x53\x97\x97\x07\x22\x73\x24\x11\x47\xa1\x66\x50\x1a\xcc\xf2\x7a\x95\xa8\xc4\x69\x94\x3b\x10\x49\x2e\x1a\xa3\x4c\xdb\x18\xb4\x23\x95\xe3\x04\x34\x89\xb0\x7a\x65\x75\x53\x27\x8b\x9a\xb4\xc7\x76\x1e\x13\xca\xd4\x9f\xff\x63\xa3\xdd\xd4\xaa\x95\x5d\x37\xa8\xb8\x85\xa3\x88\x48\x63\x63\xb7\x51\xc8\x78\xc2\x9f\xa0\xd8\xd6\x2e\xbb\xaa\x8f\xb2\x9e\xb7\x66\xf0\x1e\x8a\x38\x2e\x48\xdd\x88\x0b\x73\xc1\xf3\xd9\xdc\xd9\x90\xf4\x99\xd1\x53\xab\xdb\xcb\x1f\x97\x6c\xe4\x1b\xef\xe5\x77\x39\x4d\xb6\xb3\xd0\xdd\x95\xca\x90\x7d\x1a\xde\x23\x39\xf7\xa7\x75\x02\xcd\xd6\x6e\xec\xf2\xa0\xdb\xf7\x69\xbf\xf5\xfe\x1a\xe8\xa6\xe7\xe0\x37\xa7\x3c\x49\xc0\xd3\x20\x49\xfa\x44\x44\x7d\xf7\x30\xe1\x7b\xba\x19\x72\x9e\x1f\x00\x7c\x5d\x24\x46\xb4\x92\xbf\x6e\x8c\x68\x28\x91\x1b\x7d\x35\x68\xc1\x84\xaa\x71\x46\x58\x9d\x8d\xed\xa7\xe5\x0a\x30\xef\x2c\x60\xd0\x45\x8f\xed\x2d\x68\xd0\x2d\xc9\x2b\x07\x0e\xae\x99\xc7\xa1\x06\x0f\x56\x98\x9d\x8f\xe5\x2b\xae\x19\x17\x38\x64\x14\x9f\xbe\x5e\xe2\x11\xeb\x97\xf2\x29\x5c\xa5\xec\xc9\xa2\x08\xc8\x36\x3a\x44\xc8\xcc\xa0\xce\x86\x35\xac\x80\x1b\x4d\xff\x05\x9a\x8e\x01\xaf\x35\x21\x85\x2e\x6c\x10\xa2\xc9\x49\x7c\x84\xa3\x45\x94\xd0\x28\xd0\x99\x67\x02\x67\xf3\x3a\x8e\xe7\x76\xbe\x43\xdd\x79\x2b\xd4\x9d\xa6\x82\x54\x9b\xc4\x6d\x3b\xba\x62\x38\x25\x1d\x1a\x50\x1d\x1a\x50\xcf\xe3\x5d\xb0\xa2\xb4\xd6\x1b\xc2\x28\x2c\x9f\xbb\x0e\x12\xe8\x0d\x20\x81\xb6\x39\x7c\x05\xde\x4f\xe9\xd8\x75\x30\x45\x1f\x5a\xc1\x14\xf9\x4b\xf0\xa0\x90\x67\x9a\xcf\xe3\x1b\x23\x9a\x2c\x0f\xec\x2d\x61\x89\x6a\xc4\x85\x4d\xe4\xa6\x55\xb8\x44\xab\xe8\xa2\xd5\xba\xbc\x2d\x4a\xd0\x66\x2b\xb3\x11\x00\x50\xed\xdd\x75\x20\x70\x40\xcd\xdb\x70\x20\xe7\x66\x9f\x59\x2d\x9b\xd5\x0e\x0d\x33\x5b\x36\x51\xb0\x36\x4b\x72\xf1\xf4\xf0\xbe\x12\x5d\x8a\x22\x6b\xdb\x25\xbb\xf4\x9d\x0f\x9a\x08\x34\xe7\x49\xec\x40\x28\xfc\x6a\xf9\x0e\x7c\x26\x80\x5f\x20\xb7\x19\x50\xec\x1c\xb4\xad\xa2\x20\xd8\xaa\x94\x16\xbf\x89\x30\xdc\x3d\x30\x9a\x7d\x58\x11\x3c\x27\xd9\xc6\x7e\xb0\x56\x16\x91\x65\xf3\xf7\x8a\x31\x96\x56\x08\xac\xe6\xf5\xc3\x5c\x6b\xf7\x5d\x33\xb8\x55\xa2\x47\x60\x1c\x14\x75\xa5\x3e\x0d\x9d\xc1\xd3\x27\xea\x0c\x11\x38\xec\x71\xa5\x97\xce\xcd\xae\x95\xa7\xae\x4a\x2c\x5b\x04\x83\x2d\x55\x6e\xdb\x1d\x1c\x28\xc5\x9f\xc7\x19\x16\x38\x49\x48\x42\x65\xfa\x62\xc1\xc0\x67\x65\x77\xad\x3e\xab\x82\x1b\x13\x11\xcb\xd3\x89\x21\x45\x37\x10\x5b\xec\x4f\x71\x24\x72\x16\x42\x9b\xf9\x8d\xf1\xc5\x04\x73\xb8\x17\xc0\xaa\x14\xcd\xa1\x6a\xeb\x14\x53\xc1\x88\x6c\xac\x91\x49\xa2\x5c\x50\xb5\x18\xdb\x92\xa3\xed\x0f\xdc\x9d\xfd\xf2\xcc\x7e\xb8\xda\xc3\xed\xb2\xfa\x5d\x7f\xbe\xc4\x69\x46\x04\x94\x09\x72\x05\x6f\x82\xb2\xaa\x16\xb5\x81\xf8\x5a\x43\x10\xfe\xbc\x74\x6d\x37\x05\x0e\xe3\xe7\x71\x90\x51\x35\x8e\xaa\xc4\xb1\xee\xb0\xd6\xe1\x4e\xad\x9a\xe4\x0b\x23\x2f\x35\x78\x91\x5f\xa0\xca\x88\x4d\x9b\x30\x4d\xeb\x01\x07\xae\x60\xb0\x57\x16\x1b\x13\xa4\xbc\x5b\xa5\xaa\x61\x9c\x16\xeb\xa7\x2e\xf8\x68\xc5\x60\xfb\xc1\x57\x2d\x46\x1c\x74\xb2\xa7\x61\xeb\x83\x2e\x44\x9e\x29\x3a\x59\x86\xb6\x51\xfb\x2b\x21\xda\x4f\x20\xcd\xda\xb9\x19\x4a\xdd\x9a\xba\xa2\x25\x4e\x6c\x67\xa7\xe5\x7f\x8b\x23\xe6\x10\x82\x0c\xc2\x52\x98\xc7\x77\x9d\x52\xa5\x5c\xa2\x80\x31\x40\x6b\xea\x2c\xdb\x66\xbf\x72\xe1\x1e\x18\x2a\xbd\x1a\x13\xd1\xf1\x88\xf5\x25\x7a\x26\x88\x11\x0b\x21\x51\x53\xc3\xd5\x5b\xb5\xa1\xf6\xd3\x84\xe8\x9e\x7c\x6c\x8a\x16\x1e\xa8\x92\xbe\xfc\x98\xe9\x63\x8a\x13\x49\x7a\xba\x61\xa8\x5a\xaa\x38\x04\x7f\x62\xf4\x2c\x70\x96\x11\x31\x62\x36\x8b\x03\x1c\x2e\x9c\x27\xa6\xfd\xa6\x10\x57\xbb\x06\x64\x1c\xe1\x68\xfe\x4a\x7b\x84\x21\x19\x27\x9a\x93\xd8\xe5\x0b\x97\xb7\xc7\xcd\xdb\x18\xac\x37\xd8\xac\xe1\xd4\x95\xcf\xea\xd9\x4e\x92\x48\x73\x14\x5f\x66\x3a\x23\x42\x8f\x5a\xd3\xf0\x13\x61\x88\x4e\xdd\x38\x6c\xec\x0e\x7a\x06\xcf\x94\x26\xfd\x27\x4c\x13\x93\x80\xef\xba\x76\x42\xa0\x31\xbf\x8f\x98\x71\x77\xb3\xa8\x94\xa1\x4a\x19\x95\x73\xcd\xa9\x73\xf0\x49\x82\x9a\xd1\x94\x38\xc3\x9e\x36\x39\xcd\x03\xfd\xfa\x6a\x0e\xfa\x44\x05\x67\x29\x24\xc9\x58\x5c\x26\xb7\x7c\x92\x28\x7f\x3c\x6a\x53\x1c\xd7\x4a\xc4\x71\x2c\xcb\xc6\x4f\xa3\x56\xd2\x5f\x4b\x66\x97\xa3\x52\x56\x60\x14\xc0\x0a\x41\x10\xa7\xab\x2c\xb6\x4a\xfe\xed\x52\x1b\x96\x53\x1b\xea\xd7\xe6\x10\xd3\x1b\xfc\x21\xde\x34\xc5\xa1\x69\xfb\xf7\x21\xd9\xee\x31\xd5\xe1\x8d\x73\x02\x5e\x26\x1d\xe0\x6d\xf3\x37\x5e\x22\x75\xa3\x4b\x70\x78\xc3\x04\x87\xd6\x96\xda\x72\x6c\x76\xf3\xb1\xdd\x28\x39\x60\x0d\x98\x53\x5d\x2f\x97\x44\x09\x1a\xc9\x7d\xf0\x07\x99\xe1\x96\x51\x6d\xa0\x05\x66\x6b\xa4\x26\xfd\x82\x77\x42\x42\x9c\x98\xaf\xf3\x37\x11\x04\x3f\xc6\xfc\x79\xc9\x56\x27\x43\x34\x8d\x4b\xae\xc5\x1e\x41\x22\x2a\x49\x29\x92\x85\x4a\xc4\x88\xb4\xc6\x4e\x3c\x62\x73\x4a\x04\x16\xd1\x1c\xb2\x1b\x8b\x8d\x31\x59\xb2\x06\xd0\xc8\xc4\x32\x84\xde\xa6\x0d\x36\xbd\xc5\xba\x57\x2d\x4c\x1e\x9f\xce\xee\xb9\x1e\x49\x6a\x3e\xf1\xc2\x8c\x95\x32\x42\x93\x5c\xab\xed\xdf\x35\x10\xdf\x2f\xf6\x8b\x06\xe3\xfb\x60\xa2\xe0\x8b\x96\x01\xf9\x05\x35\x74\x41\xf9\x2f\x14\x94\x5f\xb3\xc4\x9b\x05\xe6\x6f\x65\xf2\x7b\xfd\x98\x61\xd7\xf3\x6b\xc4\x0d\xaf\x0b\xda\xca\x27\xe3\x17\x3f\x7a\xb5\x73\x6e\x7b\x02\x7f\xf2\x44\x61\x24\x62\xa1\xe9\x6c\x42\xe2\x18\x38\xad\xe2\xb6\x52\x74\x41\x3b\xce\x3c\xa0\xef\x5e\x2c\x35\xb1\xe3\x84\xb3\x99\xa4\xb1\x01\x5b\xc9\x30\x54\x6c\x0d\x8d\x17\x00\x2e\x00\xfb\x9b\x24\x44\x38\xaf\x84\x40\x5f\x4b\xca\x2c\x9a\xa2\xff\x2d\xe6\x44\xb2\xaf\x94\x31\x16\x60\xb6\x40\x8f\x8c\x3f\x27\x24\x9e\xc1\x0e\x55\x07\x73\x84\x28\xe9\x21\xaa\xfc\x67\x02\xd0\x08\x78\xae\x46\x7a\xec\x10\x6b\x66\x34\x00\x62\xbf\x0d\x6a\xa2\xfb\x66\xbe\x39\x46\x68\xc8\xd0\x14\x47\xaa\x87\x64\x3e\x29\xda\x8f\xb9\x29\x72\xad\xb5\xef\x60\xe2\x45\x23\x5d\xcc\x78\x4d\xe7\xf5\x67\xc3\x71\x07\x4d\xae\xfd\x84\xe2\x9d\x62\xeb\x9e\xf0\x2e\x10\xa3\x97\xb9\xb4\x41\x18\x88\x33\x7f\xf4\x2d\xbc\x92\xc7\x88\x06\xbc\x4f\x83\xb7\xcc\x78\xdc\x68\xeb\xac\x4c\x65\xd3\xb1\x14\x81\x90\x56\x50\xb2\x8e\x2a\x68\xd7\x2c\xb7\x96\x9a\xa4\x12\x04\xa7\xd6\x39\xa0\xaf\x1a\x10\x6b\x4c\x18\xa4\x1e\x3d\x15\x46\xc2\xdc\x64\x8b\x2f\x28\x7b\xd4\xbb\x5b\xa0\x62\x43\x7d\x79\xe8\xb9\x6e\xd3\x32\x7d\xe3\x91\x33\xce\x8c\x83\x70\x27\xb9\x93\xce\x18\x4e\x36\xb4\x71\x2c\xad\xdc\xb2\x4f\xcf\xc9\x59\x56\x5c\xd0\x52\x84\x31\xf6\x21\xd3\xe3\x46\x36\xa4\xca\x7c\x43\x79\x0f\xa3\x98\x64\x84\xc5\x84\x45\x0b\x20\x11\x06\xc8\x39\x82\xe1\x04\x61\xf8\x0e\x27\xc7\xe8\xdc\xe4\xd7\x78\x09\xcf\x5e\xeb\x70\xa1\xa7\x98\xd1\xa9\xd6\x13\xc0\x08\x6b\x47\x39\x62\x66\x98\xce\x07\x12\x14\xed\xf7\x2b\x56\xb7\x33\xfa\x06\xb9\xda\x11\x95\x98\x95\xbf\x47\xab\x2f\x1c\xe8\x6d\xd5\xee\xe8\xe6\x5c\x0d\x02\x99\x4f\x8e\xe0\xdf\xa5\x84\x33\x07\xd4\x53\xa0\xc8\x90\x84\x80\x39\xd0\x7a\xbc\xe0\x62\x6c\x02\x96\xdb\x87\xdf\x6e\x4d\x1e\x47\xd0\x47\x49\xa9\x49\x29\xa3\x69\x9e\x06\xce\x3b\x53\xb1\x20\xb2\xf6\x4b\x93\x89\x91\x69\x3d\x20\x72\xe0\xe5\x48\x5f\xae\x6c\x81\x66\xf4\x89\xb0\x11\xcb\x38\x65\xea\x18\x5d\x71\x45\x82\x12\x11\x06\x3a\x8a\x67\x8a\xa6\x06\xed\x54\x10\x7d\x0e\x0c\x28\x36\x00\x4d\xce\xb1\xea\xa1\x38\x87\xa3\xca\x88\xd2\xac\x43\xdf\xb8\x0a\x76\x06\xe2\xa3\xc5\x88\x99\x9b\x6e\x8a\x69\x92\x0b\x62\x65\x56\x6c\xf2\x62\x8a\x21\x17\x23\xb3\x48\x68\xc1\x24\x52\x3a\x9b\x2b\xbd\x45\x5a\xc6\xb3\xfe\xc6\xb9\xe6\x46\x7c\xc4\x26\x04\x61\x94\x71\x49\x15\x7d\xf2\xfe\x4b\x3a\x45\x58\x4a\xb0\xa0\x1c\xa3\xf3\x92\xfd\x9f\x4a\x50\xbd\x9b\xe2\x6a\x29\x1b\x5b\xdb\x73\x73\x3e\xce\xce\x1b\x59\xea\xc5\xae\x32\x9e\x48\x9e\xe4\x2a\x74\xc1\xd6\xef\x6d\x61\x1a\x77\xc0\xfd\x60\x20\xe6\xd3\x11\x73\x74\x2d\x8f\x51\x5f\x22\xc9\xf5\x2e\x49\xb3\x95\x91\xa0\x8a\x08\x6a\x50\x9c\x88\x32\x9b\xe0\xcf\xa9\x3f\x03\x29\x16\x8f\x5a\x84\x0a\x2d\xf0\x06\x53\xb4\x64\xed\x98\x18\x09\x09\x60\xad\xc2\xed\x00\xd3\x3f\x62\x9c\x1d\x31\x32\xc3\xeb\x76\x64\xc4\x4a\x5b\x82\xbe\xa6\xd3\x42\x21\x6d\xf2\x39\x06\x6b\x37\x86\xc8\xa7\xa6\x5d\x32\x1d\x37\x6d\xd2\x34\xe1\x78\x8d\xdb\x78\x5a\x1c\x7a\xf4\x77\x3e\x31\x63\xd4\x7a\x3f\x57\x20\x05\x6a\xf5\x6a\xca\x05\x99\x63\x16\xf7\xdc\x66\x95\xc7\x06\x37\xa3\x35\xb5\x39\x65\x0c\x24\x41\x07\x22\x4c\x0c\x16\x13\x66\xc1\x5e\x58\xc5\xcd\x6e\x45\xb1\x0f\x1b\xdd\x15\xbe\x35\xa8\x7d\x62\x0c\x10\x86\xe5\x2d\x32\x7b\xc4\x25\x4d\xb3\xa4\xc8\x69\x0a\x6c\xa3\x53\x2d\x62\x39\x1e\xc9\x9f\xc0\x74\xe5\xb4\x36\xb8\xd5\xed\xce\x69\x3a\xab\x19\xb9\x67\xa4\x70\x6b\x38\x9b\x97\x29\x83\x19\xb0\xb0\xaf\x25\xd1\xff\x54\xa4\x50\xfb\x8c\xb0\x3e\x62\x4e\x04\xf9\x06\xb8\x8c\x6d\x36\x30\x9e\x69\x11\xda\xc0\xbc\xda\xf5\x43\x91\x71\x72\x97\xce\x89\x3d\x0c\xee\xd5\xda\x8b\x4a\x51\x2d\x66\x7f\x47\x01\xa1\xea\x7c\x47\xd8\x79\xca\x62\xd2\x58\xcc\xa9\x15\xd7\x68\xba\x5b\x0c\x43\x1d\x6f\x5b\x7f\xe1\x7e\x4e\x24\x41\xea\xd9\x03\xa5\x69\xbd\x0a\x4c\x96\x82\x24\xe4\x09\x17\x77\x9c\xef\xcb\xb2\xcb\x08\xcb\x86\xf2\x28\x80\x36\xa6\xc7\xbf\x7d\xe2\xb0\x1f\xdf\xb5\x1e\xca\x13\x4e\x6c\xe2\x86\xf5\x95\xcb\xe6\x0d\x1b\x9e\xef\x14\x43\x6a\x5b\xa9\x5b\xcf\x66\x11\xc3\xf5\xfd\x03\x59\xd4\xaf\xc8\x1a\x10\xbf\x55\xd9\xd8\x7e\xd9\x37\xb0\x55\xdf\x14\xdf\x2c\xaf\x71\xe3\xca\xfd\x50\x9a\xf2\x1b\x24\x11\xdd\x2c\x55\x80\x86\x3f\x65\x3e\x9d\xd2\xcf\xa0\xd5\xba\x9b\xc4\x69\x1e\x91\xe0\x52\x73\x31\x90\x55\x90\xdb\x3c\xe3\x48\xde\x25\xa1\xa8\xf6\x4b\xad\x65\x6d\x4c\xd1\x8d\xab\xfd\xd7\x9c\x88\x9d\xd6\xdb\x93\xea\x26\xe1\x88\xc1\x29\xa9\xd7\x11\x5d\xa3\x0a\xb7\x8c\x49\x0a\x5b\xbd\xc7\x0d\x4b\xb7\x1e\xfe\xbb\xf6\xb3\x89\x61\xbe\x9b\x0f\x24\xe4\xda\x2b\x6d\x6a\x45\x7c\x9a\x8f\x4d\x76\x45\x79\x34\x7f\xeb\x59\x80\x71\x6c\x03\xa7\x7c\xaa\x2f\x76\x31\x23\xc6\x31\x62\x6a\x36\x29\x5b\x69\x20\xd0\xd4\x6d\x63\x94\xcd\x46\xcc\xad\xad\xec\x21\x13\x26\x5e\x61\xa8\x25\x6c\x77\x1c\x7c\xea\x09\xbb\x9d\x49\xd5\xf8\xd5\x19\x91\x52\x5f\x8c\x52\x09\x4c\x99\xf5\xe1\xb8\xf5\x91\x23\x86\x8e\xaa\x71\xea\x3d\xb0\x23\xf4\x5c\xb6\x67\xaf\x18\xa0\x1c\xb1\x6b\x63\x9d\xf9\x23\xfa\x5a\xe1\x99\xb9\x25\x00\xbd\x11\x27\x80\xfb\x08\x5a\x82\xd5\xca\x83\xe4\x00\x7f\x22\x69\xfc\xcd\xe9\xaa\x3e\x8d\x0d\xe1\x6b\x68\x06\x0e\xb9\x5e\xc3\x62\x81\xe8\xb4\xf8\x07\x89\xbf\x59\xd5\x52\xf1\xd1\x23\x59\xf4\xaa\x8b\xdc\x7c\x6f\xdc\xe3\x9d\x22\x34\x5f\xea\xe2\x80\x41\xb7\x77\x52\xe2\x09\x49\x7e\x2c\x26\x8a\x56\xb2\xa2\xef\x28\xc3\xbb\xf1\xa0\xda\xe1\xb5\x8b\x40\x9f\x2c\x9a\xea\xb6\xd5\xb0\x9e\xad\x11\x47\xfa\x46\x96\x25\x48\x77\x67\x25\x76\x57\xd5\x0f\x43\xd4\xe3\x9c\x24\x19\x8a\xe9\x14\x5c\x6f\x0a\xe8\xc5\x83\xa7\x9a\x7a\x37\x5a\xa1\x49\x73\x66\x80\x70\x4d\xd4\xc7\xb3\x3d\xe9\x96\x65\x14\x8d\x1f\x8f\xd8\x50\x7d\x25\x91\x54\x82\xb3\x99\x56\xa6\xe3\x27\x2a\x8b\x42\x6e\xfa\x40\xe6\x29\x11\xb6\x0b\x2a\x8d\xd4\x6d\x8b\x20\x61\x77\xb1\xe9\xb1\xe9\xab\x0f\x04\x1f\x57\x6c\x50\xff\x68\xf4\x0a\x3d\x4a\xe9\xa2\xa6\x6a\xc2\xde\xed\xe6\x56\x78\xe7\x2b\x9b\x2e\x7f\x0c\xad\x93\x28\x2d\x0c\x99\x8e\x5f\x9e\x54\xcd\x98\x76\xd5\x57\x98\x30\x37\xbe\x10\xda\x5e\x04\xae\x6a\x40\x6e\xd2\x9c\x74\x3f\xce\xb1\x65\x06\xb7\x91\x8a\x55\x99\xa0\x1d\xb5\xd1\x9e\x42\x13\x26\xa1\x60\xff\x90\x0a\x2b\x1a\xd9\x5b\x80\x0b\x6b\xc5\xb5\x7a\x75\xf3\xd6\xee\xaa\x93\xc8\x08\x27\xcb\x3b\xbc\xc2\xa7\x6e\xde\x5f\x6d\xe8\xb4\xc7\xcd\xb4\xbd\x12\xd8\x24\xe2\x49\xb2\x49\x99\xb6\xca\xcc\xcf\x8a\xcf\x57\x8f\xa8\xe8\x47\x6f\x80\xdb\x0b\x38\x35\xc6\x40\x81\x13\xeb\x2e\x92\xca\xee\x52\xf8\x92\xb9\xd4\x16\x56\x7d\x1c\x31\x3e\x85\x42\x7e\x49\x53\xe4\x7a\x26\x78\x4a\x37\xa9\x24\x61\x82\xb9\x6f\x9d\xef\x7f\x8d\x27\xc5\x45\x08\x80\xf9\xcd\x90\x97\xed\x11\x30\x09\xb0\x35\xa9\xad\x38\x43\x29\xce\xb6\x5a\xf0\x75\x91\x2f\x7d\x94\x9a\xb0\x23\xbb\x7a\x80\x29\x4d\xa0\x26\x1e\x2c\xf2\x33\x5e\x14\xf0\x2f\x4d\x35\x02\xd8\x46\xe4\xf0\xa0\x5f\x1f\xb2\x29\xdf\xe0\x70\x16\x70\x2d\xf6\xf4\x61\x47\xb3\xc1\xf9\xf3\x91\x18\x66\xf7\xcd\x9a\xb6\x39\x8f\x67\x75\x44\xbd\xf1\xc9\x74\x2b\xf8\x92\x7e\xd8\x90\x89\x04\xdf\xfc\x6b\x93\xbb\xb5\x7c\xb4\x82\x16\x11\x0c\x67\xf5\x52\x5d\x96\xe8\x70\xef\x6b\x54\x69\x07\x9e\x15\x09\x63\x37\xf5\xad\xbe\xc2\x9a\xd9\x43\xd2\x6a\xb1\x76\xc4\xa7\xda\xac\xd6\x81\xeb\xd1\x57\x36\xd8\x59\x93\x5b\xb7\x18\xc0\xcd\xa4\xd5\x1a\x8a\xec\x13\x9b\x86\x3f\xa5\x09\x91\xc7\x68\x58\xe3\xc4\x75\x49\xf0\x3e\x68\xdc\xa4\x03\x3a\xe9\x29\x17\x34\x28\x7e\xee\x64\x24\x44\xa1\x08\x5b\x18\xc8\x12\x38\x2d\xc0\x7d\x3a\xe7\xcf\x26\x03\x4f\x50\xcd\xb3\x8c\xb0\xaa\xc0\xa5\xa5\x79\x01\xb5\x1e\x21\xe3\x50\xf3\x1f\x70\x93\x17\xa1\xd5\x1c\xef\x0c\x0b\x2d\x10\xd5\x2d\xdd\x47\x19\xcb\xf6\x18\x03\xae\xd7\x7b\xfd\x45\x1b\xa5\xc0\xbd\xbb\xc3\xe8\xbc\x94\xbf\xb9\x3d\xf2\x23\x7c\xea\x0c\xbb\x18\x4d\x05\x01\x2d\x3b\xf5\xb8\x61\xa6\x70\x00\xe7\x70\xdf\xdd\x9d\xff\x70\xf2\x30\x44\x44\x45\x28\xa1\x8f\x64\xc4\x22\xf9\x04\x4a\xdf\x3f\x72\xa2\xf4\xcf\x0d\x46\x20\x9a\x12\x26\x81\x13\x50\xd5\x52\x5f\x73\x0b\xa3\xff\x7b\x5e\xfe\xbe\x8d\x56\xee\xb1\x2e\x35\xed\xba\x9a\x7e\x40\xa6\x50\xb6\xcc\x2c\x6d\x8d\x5d\xf3\x3b\xe3\x6f\x1d\xd4\x55\xfc\xde\x22\x25\x9a\xfd\x3d\x67\x1b\x0a\x5d\x67\xc5\x47\xc1\x28\x1a\x64\xba\x34\xc3\x50\xcf\x63\xb3\x5c\x6b\xf3\x4d\x6d\xeb\xeb\x98\x48\x01\x3d\xe3\xfc\xe7\x45\x71\x74\xa4\x04\x21\xc0\x42\x3c\x3d\xd9\xbb\xde\xa2\x8d\xf9\x89\x05\x1f\x1d\x8f\xd8\xa5\x8b\xaa\x2b\x7e\x95\x85\xaf\x21\x9d\x04\x65\x4e\xca\xad\x40\xb3\x31\x95\xfe\x07\x28\x5a\x27\xf3\x44\x99\xaa\xbd\x53\xca\x70\xe2\x07\x6a\x9e\xd4\x71\x09\x81\x59\x34\xdf\xd5\x4d\x4e\xa7\x63\x92\x6c\x22\x89\x0e\xa7\x83\x44\x6a\xfa\x8e\x1e\x1b\x4e\xe7\x36\x75\xa9\x8b\xc9\xd8\x6a\xfb\xa6\xb6\x25\x2a\xdc\xec\x38\x31\x55\x73\x09\x82\x38\xac\x6a\x86\xbc\x01\xc1\xd2\xbb\x68\x25\x75\x13\x86\x65\x52\x53\x7d\xda\x19\xf4\x82\xb0\x1a\x31\x91\x33\x28\xa8\xe5\xa3\x32\x31\x2a\x6a\xa2\x44\x2e\x46\xc2\x46\xac\xcc\x34\x9b\x30\x25\x47\xcc\xcb\x5a\x3f\xe3\xb9\x04\x7f\x54\x4a\x94\xbe\xa0\xbe\x86\x5a\xf7\x26\x2c\xba\x87\x32\x41\x53\x70\x29\xcb\x6f\x6a\xb6\xee\x0c\x2b\x9c\xf0\xd9\xbe\xad\x4a\x5b\xa6\xd8\xb8\x61\xa0\xe1\xb9\x5e\xfc\x19\x61\x44\xc0\x44\xc1\x96\x5d\x7b\x84\x5b\x58\xb9\x1b\x38\x37\x78\x12\xad\xf3\x57\x7a\x8b\x05\xce\x15\x4f\xb5\x7e\x8b\x93\x64\xd1\x33\x5e\x67\x82\xe6\x58\xce\xdd\x46\x1b\x87\x61\x9b\xbb\xc9\x2e\xee\x19\x8e\xe6\xe4\x4e\x61\x95\xd7\x46\x66\x55\x46\xf9\x81\xb0\x3c\xfd\x70\x8a\xfe\xa7\x98\xe3\x59\xff\xec\xfb\xc1\xf8\x7c\x78\xd7\xff\xee\x62\x70\x1e\xcc\xc7\x3e\xb9\x1c\xde\xdd\x2d\xff\xfa\xfd\xf0\x7e\xf9\xc7\x9b\xeb\x9b\x87\x8b\xfe\x7d\x5d\x2b\x17\xd7\xd7\x3f\x3c\xdc\x8c\x3f\xf6\x87\x17\x0f\xb7\x83\x9a\x4f\x1f\xee\x9b\x1f\xde\xfd\x30\xbc\xb9\xa9\x6b\x75\xf0\xe3\xf0\x4c\x77\x67\x7f\xff\x5b\x70\xec\xc0\x75\xae\x57\xa0\x61\x7e\xd5\x93\x79\x84\xca\x2f\x9e\xa2\x87\x6a\xdd\x27\x9b\x88\x65\x40\xbc\x9e\xb1\xd4\xcc\x0d\xf2\x00\xc1\x04\x5b\xac\x56\xd3\xa7\x26\x56\x39\x9a\x13\x94\x70\xfe\x98\x67\x96\xe7\x19\x6b\x3b\xe3\xc6\x22\x44\x64\xd0\xda\xf7\xc3\xfb\xd3\xe5\xfa\x53\xbe\xb1\x00\x2e\xd4\x1b\x97\x9f\xb1\x81\x0e\x00\x3e\x0b\x46\x16\x57\x97\xa8\x70\x5d\x07\x3d\xf8\x2d\x5b\xd5\x8f\x69\x0d\x33\x55\xe9\x26\x36\x61\xd4\xc5\xc4\x82\x86\xcb\x1b\xbe\x6a\x35\xfd\x72\x98\xc2\x9b\x68\x42\x22\x9c\x9b\x88\x6e\x7d\x81\x09\xc1\x45\x38\xe0\x82\x50\xf6\xd7\xa8\x25\xb0\xda\x06\x2b\x7b\xa6\x27\x2e\x1f\x69\x96\x95\xb6\xdd\x12\xe2\xfa\x9d\x87\x52\x67\x4f\x34\x52\x24\xfe\xb0\x2c\x17\x95\x2b\xeb\x4b\x38\xd5\x7a\xc8\xc1\x59\xa7\x6c\x66\x6c\x09\xae\xe8\xdc\x7c\xe1\xa3\x90\x20\xe8\xb5\x08\x03\x86\x22\x18\xfa\xae\xf1\x45\xc1\x28\x84\x15\x61\x85\x9e\x09\xc0\xd1\xe4\xb6\xea\xa6\xd1\xe9\x35\xcf\x80\xee\x4c\x3c\x80\xab\xa1\x5b\x82\xa9\x69\x64\xf2\xfb\x10\xe4\xf5\xf7\x92\x6c\xe6\xc4\x5b\x8b\x29\x72\x6e\x1a\x05\xae\xef\xf2\x05\x60\xc4\xfb\x74\xfa\xd5\xdc\x74\x6b\x2e\x21\x7d\x1d\xb4\x19\x8f\xc3\x51\x2b\x15\x07\x69\x3f\xb0\x52\x01\x89\xb5\x6b\x75\xcf\x63\xbc\xd0\xc4\x01\x41\x0f\x32\xcf\x32\x2e\x14\x6a\x68\xc3\x84\x40\x9a\xf1\xc1\x5d\x66\xe7\xe1\x59\x24\x34\xa2\x25\x17\x59\x53\x87\xac\x1d\xb4\x94\x5d\xd7\xc0\x77\x16\x24\x17\x81\x82\xe9\x6b\x46\xa6\x25\x55\xbd\x44\xa1\x75\x42\xf5\x2e\xd9\x99\x99\x16\x1c\xda\x96\x30\xae\xeb\xfd\xda\xb5\x50\xbb\xe5\x09\x99\xaa\xf1\x86\xce\x2e\x68\x91\x35\xa1\xf1\xd1\xd9\x7c\x0f\x2d\xb6\xd7\x3e\xfe\x68\x83\xa2\xb5\xca\x11\x58\x1e\x04\xe7\xca\xc8\xbd\x85\x6e\x84\xdc\x6a\x82\xd9\xc2\x76\x6a\xf3\xe8\xbd\x70\xa9\x75\x09\x13\x4b\xe6\x53\xce\x8f\x47\x6c\x00\xc1\xa7\x85\x82\xe3\xd2\xeb\x41\xbb\x58\xab\x57\x94\x0a\xb6\xbf\x6a\xa6\x4b\x33\x3a\x7e\x41\xf7\x26\x64\x91\x24\x0b\x54\x14\xe5\x2f\x7d\xd7\xe6\xf4\x18\x6b\xba\x13\x2d\xcd\x84\xcd\xd1\x91\x8a\x64\xd6\xe2\x6f\xe6\x59\x44\x49\x83\xb7\x59\x77\x75\x8c\x7e\x72\x16\x25\x48\x1a\xf2\x49\x34\x2e\xee\x35\xc1\x0b\x07\xa8\x5d\xb7\xb0\xfb\xc0\xa8\xde\x77\x1a\xd1\xea\x05\xf6\x60\x98\x35\xab\x5c\x52\xec\x19\x33\x96\xde\x0d\xc2\x90\xce\xfc\x47\x77\x64\x75\x44\xe5\x47\x28\x61\x6e\xa3\xd2\x41\x66\x61\xc9\xe2\x7f\x99\xcd\x32\x28\x1e\x2e\x48\xc3\x96\x94\xb6\x9e\x59\x7d\x7e\xc0\xb3\x68\x40\x3e\xd0\x94\x26\x09\xc8\x01\xc7\xa8\xcf\x16\x0e\x04\x43\x5f\x85\x2e\x38\x95\xce\x18\x5f\x97\x9f\xdf\x40\x4c\x51\x40\x4c\x77\xcd\xc4\x64\xe2\x3f\x0a\x0c\xa4\xfd\x50\xd4\x1e\xf0\xf0\x34\x6f\xc1\xcb\xd5\x44\xda\xa3\xe0\x6d\x60\x14\x08\x6f\xf3\xd7\xca\x2c\x5b\x1a\x6e\xf0\xe1\xbf\xea\x87\xfe\x29\xc7\x02\x33\x05\xf9\x52\x56\x68\x15\x24\x48\xdb\x26\x9f\x21\xb6\x95\x19\x03\x33\xfc\x14\x6e\xae\x0b\x25\x30\xe1\x67\x34\xee\x21\x7a\x4c\x8e\xa1\xb2\xad\xd0\xb2\xc4\xa4\x78\x73\xae\x25\x87\x11\x5b\xca\x03\x39\x46\xfd\x44\x72\xfb\x05\x61\x51\xc2\x25\x84\xf6\x4e\x42\xd0\x71\xa0\x7c\xeb\xae\x9a\x2c\x40\xbf\x81\xad\x2c\x9a\xe7\xf6\x41\xf0\x21\x14\x68\x05\x5f\x7b\x02\x27\xbd\xf8\xfd\xf7\x3c\x33\x5e\x90\xa6\xf8\x8b\x17\x2c\x85\xb5\x74\x0d\xbd\xd8\x26\x99\x32\xcb\xab\x36\x08\xde\x80\x8d\x29\xf2\x73\x02\xf4\x3a\xf4\x35\x56\x28\x21\x58\x2a\xf4\x87\x6f\x36\x8a\x39\x71\x13\x2c\xb8\xab\x3d\xbe\x45\x92\xbd\x4b\xd3\x0c\x85\x3b\xdf\x31\xd4\xdd\xc5\x42\x21\x8c\x18\x79\x0e\xb3\x72\x38\x24\x52\xb9\x62\xba\x24\xc0\x05\x31\xb1\xf8\x06\xd5\x08\x32\x5d\x8d\xca\xd4\xc0\x47\x5c\xa9\x08\xeb\x96\xb5\xc3\xaa\xa1\xac\x9e\x8f\x6a\x83\x30\x76\xfd\x52\x91\x30\x39\xc7\x6a\xc4\x2c\x67\x75\xe1\x28\x41\x8a\x7c\x3f\x49\xca\x49\x8a\x18\xf2\x70\x99\x9e\xb0\x1e\x7d\x7c\xec\x17\xe8\x0a\xd4\x2f\x9f\x29\x56\xb2\xff\x15\x87\xc5\xe4\x32\x78\xac\xc8\xb0\xed\x5a\x69\xa7\xce\x6e\xfd\x8a\x42\x70\x4d\xf7\x17\x7c\x46\x23\x9c\xb4\x10\x86\x49\xdd\x90\xd7\x1c\xac\x65\x5f\xc1\x0a\xd9\x78\xdf\x1d\xb4\x17\x95\xeb\xed\xee\x70\xcd\x3e\xf3\x1a\x33\x7e\xc3\xe6\x06\xb2\xc5\x2e\x0a\xb8\x4f\x59\x7c\x2d\x4f\x72\x69\xe8\xc3\x18\x00\x13\xd6\x73\xc1\x02\x80\xc0\xb1\x0e\x93\xb7\x16\x07\xf9\xd0\x41\xfa\xa5\x0d\x22\x35\x8c\xcf\xbe\xd9\xe0\xd1\xcd\xde\xf7\xf4\x7b\xc5\xfc\xdd\x54\x7c\x70\xdd\xf2\xc4\x9b\x85\xbd\x7e\xfc\x77\x1c\x41\x96\x24\xf4\xe4\xf2\x33\x97\xc1\x2c\x5d\x09\x10\x0c\x4e\x82\x5a\xf1\x30\x13\x3c\x22\x52\x1e\xa3\x01\x5c\x34\xf6\x9f\x08\x4f\x9d\xa3\x23\x78\x79\xc4\xb4\x66\xe2\xb0\xef\x82\xf6\xcb\x24\x5e\x77\x02\x0c\x90\xee\x4e\x3e\xa2\x74\x7d\x7d\xb7\x26\x6d\xc2\xe1\xf8\x42\x1b\x50\x12\x0a\x0d\x66\xa7\x28\xe6\xd1\x23\x11\x27\x82\xc4\x54\x9e\x82\xcf\x5e\x35\x3a\x0b\x53\xad\x6d\xef\x2c\x69\x34\x05\x20\xac\x01\x14\x38\x33\xfd\xdb\x94\x02\x97\x9a\xd4\x43\x74\x0a\xea\x84\xcb\x67\x35\x09\x5c\x0e\x2a\x90\x30\x25\x16\x26\xda\xd9\x99\xb2\x2a\x0b\xe1\x34\x0d\x2d\xb4\x35\x65\x62\x8b\x7d\xc4\xf6\x6c\x39\x6d\x93\xf1\x63\x03\x19\xcc\xa4\x14\xb7\x79\x60\x86\x5d\x64\x58\xcd\x25\xc0\x7e\x94\xd7\xc0\x2a\x5d\xf0\xa9\x5e\x21\x9c\x41\x1c\x84\xb1\x52\x14\x1f\x79\x70\x0a\xa9\x68\x92\x8c\x98\x49\xdc\x00\x84\x8e\xaf\x6a\xd1\x85\xf4\xa7\x3d\x84\xe3\x18\xfd\xef\xaf\x3f\x5e\xfc\x7c\x3f\x18\x0f\xaf\xc0\xe6\x3d\xbc\x18\x7c\xd3\xf3\x3f\x5e\x3f\xdc\xfb\x5f\x8d\x85\xe5\x89\x08\x94\xe2\x47\x50\xf1\x98\x24\x36\xf1\x94\x8c\x58\x38\x52\x87\xbb\xa4\x9f\x48\xe2\x22\x68\xad\x98\xe2\xe1\xa7\xed\x1e\x36\x81\xb6\x5a\x38\xce\x0d\x94\xdf\x5b\xff\xc9\x6a\x1a\x74\xc4\xe3\xbb\x70\x62\x20\xe4\x17\x63\x19\x00\xf1\x58\xdd\xb7\x20\x38\xc2\x66\x94\x35\xc5\xf9\x11\xf6\xf4\x92\x42\xfc\x0f\x64\x01\x81\xe6\x37\x98\x8a\xd6\xb4\x57\x8f\xa4\xe8\x4e\x8c\xd6\xd3\xb1\xac\x1e\x2a\x69\x64\x61\x93\xa9\xdc\x18\x4b\x5a\x07\xa2\xfb\xe6\xd3\xb5\xd0\x9c\xe4\xb3\x12\x0e\xe1\xcb\xe7\xc2\x3a\x18\x4c\x7f\xd1\x14\x34\x38\x62\xf7\xd7\xe7\xd7\xa7\x88\x24\x78\xc2\x21\x0d\xd2\x86\x1a\xb9\x26\xec\x82\x45\x3c\x0d\x1a\x2a\xa1\xbb\xf5\x50\x56\xa0\xbb\x85\x46\xb4\x63\xd3\xc6\x1a\x94\xb7\x8c\x8b\x65\x6c\xb4\xfd\xaa\x80\x76\xb2\x37\x5c\xb4\xb9\xfe\xf5\x6b\x26\x2f\x24\xd3\x8a\x5c\x85\xf3\xda\xbb\x79\x4a\x30\x20\x7f\x58\xb7\x90\xb5\xe5\xdb\xc0\xd8\x24\x29\xd5\xa2\xd6\x07\x47\x1e\x5b\xd7\x7e\xf1\x26\x67\xe8\x87\xbf\x48\x34\xc9\xd5\x88\x95\xdb\xe0\x0c\xf5\x7f\xba\x43\xdf\x61\x15\xcd\xbf\x19\x31\xc8\x4b\xfc\xe1\x2f\x0d\x30\x94\x1b\x23\x3b\xeb\x35\x39\xc7\x0a\x5f\x70\x1c\x53\x36\xab\x83\x75\x2e\x6a\xef\x0d\xee\xfb\xa7\xe8\xda\xea\xf0\x45\x16\xad\x72\x70\x2a\x41\x43\xc0\x90\x61\x22\x8e\x8b\x00\x2b\x67\x65\xe8\x5b\xa3\x99\xc1\x85\x35\x62\xf7\x06\xcf\x5a\x73\x55\xaa\x50\xc6\x6d\xfd\x47\xad\x95\x19\xa4\x6f\xec\xb2\xcb\x49\xb2\x40\x7a\x75\x80\x8c\xfd\x66\x58\x79\x0c\xe4\x99\x65\x66\x3f\x62\xa0\xa0\xfb\xbc\xde\x84\x47\x38\x81\x58\xbf\xa3\xc0\xa6\xa7\xd5\x76\x9e\x03\xb6\x0e\x04\xd9\xb0\x45\x39\x24\xd7\xc3\x3d\x79\xa1\x2c\xdc\x28\x30\x00\xc0\x3e\x5a\x3f\x64\xca\x35\xc7\x31\x38\xb6\x60\x7c\x4b\xcc\xea\xe8\x0f\x3d\xae\xad\x59\x16\xfd\xd4\xa7\xbc\xf3\x9c\x39\x1c\xb7\x08\xcc\xf7\x6c\x01\x61\xe1\x50\xb0\x8d\x43\x48\x49\xc1\x9d\x2d\x51\x2e\xed\xa2\xbf\x13\x83\xcf\x46\xcc\x44\x20\x96\xf6\x25\x44\x3e\x0c\x7a\xe7\x0c\x02\x24\x97\xf3\xec\xf3\xcc\x06\x4c\x5a\x59\x3f\x13\xe4\xc8\x67\x8f\xc7\xa5\x35\xd5\x37\xec\x31\xba\x0d\xd5\xeb\x98\x47\x79\xea\xaa\x52\x40\xe6\xb9\x8d\xac\xb3\x97\xa8\xa7\x10\x73\xb1\xaf\xa3\x78\x40\xb8\x53\x04\xa0\x77\x5a\xeb\xc7\x86\x60\xfa\xe1\xa7\xcb\x92\x7a\xb3\xe0\x0b\xbc\x63\xb7\x68\x38\xd3\xd0\x38\x2b\xb7\x54\x6a\x6d\x67\x4c\x87\xab\x02\x39\x9f\x0b\x10\xb6\xc8\xe7\x8c\x83\x91\xdb\x24\x56\xf3\xf8\x2b\x89\x86\x37\x5a\x02\xd2\x1a\xaf\x3f\x83\xb9\x54\x26\x68\xcd\xe4\x3f\xc3\xd7\x26\x0d\xa1\x87\xbe\x45\xa3\xfc\xdb\x6f\xff\x14\xa1\xcf\xee\x8f\x3f\xff\xe7\x7f\xfe\xe9\xcf\x9b\xa4\xa9\x38\x85\x1c\xda\x2d\xd6\xc8\x97\xe2\x2c\x8b\x44\xe1\x0e\x2c\x73\xaa\x1d\x76\xc1\x1e\xc0\xa6\xe5\xdf\x06\x21\x3b\x88\x49\xc2\x33\x7b\xc2\x65\x78\x32\x51\xe9\x68\x16\x91\x04\x92\xa8\x5e\x99\x43\x78\x61\xd7\x4a\xf4\xff\x6b\x05\xd0\xeb\x58\x1f\x95\xed\x62\xa7\x68\xe2\xc5\x6b\xdd\x08\xfa\xda\xda\xff\x14\x38\x10\xbf\x71\x17\x1c\x4f\x62\x22\xcc\x98\xbc\xc9\xce\x1b\x12\x81\x39\x90\xcf\x59\xc2\x63\x07\x2d\x5f\xe0\x28\x50\x10\x10\x06\x9f\xb1\xe6\xdc\x3d\x0b\x41\x6a\xf3\x56\xc1\xf3\x32\xc5\x11\xb1\x39\xd6\x5f\x7f\x3e\xd5\xbf\xf5\xd0\xe2\x14\x82\x53\x7b\xe8\xd7\x53\x8b\x34\x88\x85\x1a\xeb\x9f\xbe\x71\xb2\xb6\x6d\x02\x06\x4d\x25\xfa\xea\xe4\x09\x8b\x13\x60\xcf\x27\x66\x44\x5f\x59\xce\xea\x6b\x0a\x87\xb2\x79\xc2\xf9\xa3\x0d\xdc\x5d\xfa\xf0\xc4\x81\xd6\x02\x79\x7b\xbf\x89\xd9\x7a\x0f\x6a\xa4\xd0\x11\xbc\x40\xd0\x71\x36\x41\xc7\x7f\x97\x9c\xa1\xe3\x05\x4e\x13\xfb\xab\x7b\x6a\xe3\x8a\xb1\xb4\xb9\x76\xb1\x8f\x11\x4a\x16\xc6\x52\xfa\x5d\xc2\x27\x30\xab\x4b\x37\x53\x13\x99\x0b\x03\x2d\x6e\x9f\xe2\xc2\xb2\x13\x71\x20\x1e\x80\xbd\x98\x72\x65\x5e\xb1\x69\xb3\xcb\xb3\xfa\xec\x87\xf4\xdf\xc6\x2f\x0c\x8b\xe2\x92\x03\x8d\x71\xd8\x47\xc5\xe9\x46\x3f\xa3\xaf\x2d\x0b\xfa\x46\xdf\x31\x36\x0c\xda\x2c\x43\x5d\x07\x0b\xdf\xc1\xcf\x41\x07\x94\x21\x93\xee\xb9\xe2\xcb\x5f\x4f\x8e\x8f\x8f\xfd\xd7\x80\xf8\xf3\xff\x22\xaa\x24\x49\xa6\xa6\x25\x77\x83\x2d\x46\xec\xd2\x15\xad\x72\xc6\xeb\x02\x0e\x3b\x13\x5c\xf1\x88\x27\xe8\xa8\x30\xe8\xc6\x3c\x92\xe8\xdf\xb5\x58\x1b\x2c\x25\xfc\xa8\xf5\xb8\x06\x08\x7d\x53\x25\xe3\x95\x0e\x95\x35\x88\x57\x8f\x55\x88\x80\xeb\x15\x5b\x2c\xc3\x24\x67\xa0\x05\x4d\x39\x27\x16\x25\x57\x08\xfd\x32\xf9\xac\xe0\x51\x03\x08\x71\x6d\x88\x7c\xfd\x4d\xb9\xc4\x6e\x0b\x2c\x62\x43\xd6\x0d\x0b\x60\xb1\x42\x2d\x67\x30\xf3\xec\x85\xee\x13\x7d\xb9\xb0\xb0\x8c\x92\xcc\xd3\x14\x8b\xc5\x49\x71\xda\x96\x89\xb3\x40\xa9\x05\x1e\x93\xb8\x05\x00\x17\x6e\x62\x8f\x96\x8d\x62\xb0\xe2\xa5\xbb\xd1\xfc\xd9\x8d\xa0\x0e\x74\x80\xf6\x44\x58\xc4\x63\x4b\xd7\x45\x56\x6b\x59\x62\xf1\xef\x2c\xcb\x2a\x2e\x22\x46\x16\xc6\x38\xa6\x0c\xfc\x99\x7d\xc3\x7d\xdc\xc0\xbe\xf9\x58\x2a\xcd\x28\x67\x1b\xb8\x47\x87\xd7\x77\xee\x9b\xf6\x97\x2e\xac\x43\x59\x64\xc7\x49\x88\x2d\xcc\x66\x48\xe0\xe7\xe2\xfa\x85\xd8\x0e\x63\x9d\xc9\x7d\xce\xaf\xf9\xf7\x19\xbf\xa1\x89\xbe\xb5\x80\xc6\x8f\x47\xac\xf4\x73\x0f\x91\x84\xa6\x94\xf9\xd8\x3a\xc3\xdc\xf9\xd4\x48\xcf\x8f\x54\xe9\x2d\x93\xf1\xa3\xe6\x60\x0e\x13\x33\x50\xa9\xfa\x6c\xf1\xff\xb1\xf7\xa6\xdd\x6d\x1c\x49\xda\xe8\xf7\xfe\x15\x79\xfd\x7e\x90\xf4\x0e\x08\x5a\xee\x99\x39\x1e\xcd\xf1\x39\x17\xa6\x28\x9b\x6d\x8a\x62\x73\xb1\x7b\x6e\xa3\x0f\x94\xa8\x4a\x00\x39\x2c\x64\x96\x6b\x21\x8d\x5e\xfe\xfb\x3d\x19\x11\xb9\xd4\x8a\x2a\x82\x94\x3c\x3d\xfe\x30\xd3\x16\x01\xe4\xbe\x44\x46\x3c\xf1\x3c\x76\xe9\xb8\xc0\x14\x79\x20\xca\xdc\xb4\xcb\xbf\xd1\x81\x0d\x40\xc6\xe2\x88\x0c\x52\x19\x2c\x3c\xd8\xbf\x73\x65\x4a\xb3\x7b\xc9\xc3\x90\x83\xf2\x82\xe2\x8e\xac\x98\x50\x70\x02\x40\x1d\x15\x2c\xb1\xb3\x7f\x5b\x0c\x94\x53\x55\x6e\x0f\x4d\x62\x21\x58\xf2\xe7\x72\xd3\x5d\x66\xc2\xde\x54\x94\x10\x25\x54\xb9\xb5\x1b\x6a\xc4\x8a\x3b\x25\xf3\x27\x16\x51\xc2\x91\xe5\xcf\x14\x04\xc8\xc7\x09\x06\x48\xd3\xa0\x2e\xbc\x5e\xb0\x1a\xd4\x27\x4c\x84\x7a\x89\xff\x7e\xc5\xe8\x6e\xf8\x72\x42\xf7\x79\x96\x3b\xf6\x34\x9c\x73\xd0\xb7\x16\x31\xfa\xd0\x41\xd1\x61\xcd\xb3\x18\xbd\xe5\xe1\xab\x02\x33\x83\x8d\xfd\xb5\xd3\x25\x7b\x90\xf9\x66\xae\x6e\xb4\x75\x38\x32\xa5\x9d\x26\xc6\x04\x1e\xa3\x8d\xfa\x78\x0e\x87\x00\xb4\xba\x6d\x05\x98\x43\xf8\xa0\x1c\x26\x00\xd1\x2e\x94\x8e\xc5\x61\xe4\x8f\x37\x3e\x56\x61\xe3\xd7\x99\xc0\x3c\x33\xb8\x29\xba\xd2\x74\x45\x9e\x8f\xf4\xcd\xd7\x27\x1e\xee\x21\x2a\xc7\xd4\xaa\x1f\x46\x29\x93\x84\xbc\xaa\xee\x56\x83\x52\xec\x8b\x33\xc8\x32\xae\x8c\xbd\x53\x9a\x38\x74\x12\xa2\x16\xa6\xc7\x41\x77\x3f\xf6\x3d\x82\x61\x77\x00\x63\xce\xd6\x99\x2e\x53\x97\x8a\x6f\xd3\x08\x71\x1a\xc8\xa6\x39\x53\x2b\xfd\x86\xde\x54\xe7\x52\xdd\xe1\x8a\x7f\xae\x39\x42\x31\x11\x11\x57\x28\x70\xad\xc2\x3d\xf4\xe1\x88\x49\x15\x25\x25\x5c\x7c\x79\xc1\xa3\x3b\x14\x44\xe9\x72\xfa\x9a\xdf\x2c\xf6\x27\x69\x76\x58\x4c\x65\x92\x50\xb5\xfe\x02\x05\x92\x39\x70\x01\xdd\x4b\xce\x38\xbb\xbd\x3a\x6b\xaf\xfb\x4e\x36\x83\x39\xed\xb7\x67\x75\x81\xc0\xff\xfb\x41\x8e\xc2\x5d\xd6\x28\x85\x45\x65\xa9\x3b\xe7\x52\x17\x61\x3d\x2e\xd2\xc2\x3c\x20\xe2\xab\x16\xd7\xfe\xe8\x75\xba\x4e\xcb\x85\x19\xa8\x64\x0c\x40\xc0\xb4\xe2\xbb\xcb\xdb\x59\xf0\xbb\xbe\xa5\xf2\xdd\xe5\x2d\x0b\xea\x40\xb2\xe8\x44\x44\x85\x43\x1a\x4f\xd9\x89\xd7\x70\xa8\x5b\xe6\xb1\xb8\x97\x11\xa6\xce\x4e\x8c\x55\x34\x57\x40\x8d\x6e\xde\x3a\x47\x96\x4f\x93\x7d\x77\x79\x4b\x2c\x9c\x9e\x37\x07\xe5\x28\x80\x1a\x63\xdc\xb5\x53\x23\x25\x57\x5a\x1d\x21\x65\x50\x16\xfb\x68\xc7\x04\x1e\xd7\x11\x4f\x8b\x92\x0c\x8c\xfb\xd7\x53\x3b\x27\x57\x3e\x12\x62\x9a\xa5\xe7\xca\xd8\x4a\x98\x63\x00\xca\x69\xa6\xd3\xcd\xa9\xad\x0d\xea\x21\xe0\x00\x18\xb4\x83\x0e\x7f\xe9\x32\x07\xb9\xda\x31\x9e\x2d\x65\x91\x99\x67\x18\xfe\x78\x82\x0c\x67\x1b\xab\x8e\x85\xf3\xe6\x2d\x23\x12\xbb\x83\x09\x96\xaa\xc8\xe7\x2a\x48\x80\x71\xd9\xc6\x98\xbc\x20\x15\x03\x2a\x61\xc0\xde\x58\x6a\xd3\x28\xd1\x65\x6c\xaf\xd5\xcc\x89\xe7\xed\x52\x34\xa2\xe6\x0a\x18\x4f\xcc\xdd\xaa\x8d\x19\xea\xef\xfe\x37\xec\xa3\xba\x97\xb1\xe4\x47\x85\xc8\x13\x7e\x54\xfc\xeb\xc7\x49\xed\x4f\xfc\xf5\x97\x5f\x7e\x44\x1d\xc0\x2e\x3a\x87\x80\xb5\xe9\x40\x07\x4f\x7b\x9c\xc2\xf1\x1f\x9a\x55\x7a\xc0\x3c\x9d\xcb\x3b\xc1\x3e\xe2\x74\x7f\x24\xf2\xe3\xc7\x4d\xdb\x5c\xb5\xcd\x1b\x7b\xcc\xb4\x01\x15\x7d\xfb\xbc\xb1\x9e\x69\x7b\xbd\x9e\xfe\xdb\x7a\x69\x66\xeb\xab\xf5\xf4\xf5\x97\xf0\x9f\xb5\x39\xda\xb7\x79\x5d\xf6\x4c\x5b\xb3\x5b\x0e\xa2\x96\x6d\xe9\xce\xa2\xb9\xda\x7f\x18\xb1\x71\x67\x11\xac\xda\xb6\x8d\xcf\x0b\x71\x68\xd6\x2c\x72\x62\x8f\x40\x5f\x37\xc8\xc6\x7b\x23\x82\x07\x32\x75\x7b\x96\x6d\x80\x7b\x76\x53\x86\x87\x00\x5c\xf8\x70\x04\xcf\x0f\x7c\x7f\x58\x7f\x6a\xdf\xdd\xd3\x9d\xfe\x66\x26\x42\x8c\x60\xa6\xb9\x36\x5f\x1f\xd8\xc8\xca\x57\xfb\xda\xf8\xc0\x51\x8d\xb0\x29\x82\x13\xd3\x6b\x7d\xcc\x2e\xb2\xcb\x11\x5d\x26\xb9\x4b\x1b\x74\x2d\xb1\xd0\x4a\xf7\xbe\xb6\xf5\xae\x69\x2f\x85\x62\x87\x2e\xea\xd6\xb2\xf0\x03\x57\xc4\x81\x50\x38\xf3\xa4\x5e\x6c\x07\x13\xac\xfb\x8a\xdf\xd2\x8f\xdf\x37\xe8\xd6\x9d\x79\xf9\x1e\x32\xbe\x1d\xc9\xd6\x96\x2b\x63\xad\xd9\x5a\x3b\x02\x4b\xf8\xca\x7f\x54\x93\x6e\xd3\x47\x35\x08\x6b\x1c\x96\xac\x65\xab\xb2\xa5\x3c\x60\x6c\x95\x27\x18\x3b\x28\x36\xe0\x56\xf6\xfa\xb9\xf6\x98\xf3\xee\x65\xd4\xda\x4d\x78\xb6\x46\xa7\x57\x2e\x8a\xfc\x55\xcb\x0c\xfb\x3c\xb6\x03\x66\xd8\x9a\x5d\x8b\x71\xfc\x21\xd6\x1e\x03\x97\x4a\xdf\x4e\x73\xad\xac\x8a\x6d\xb8\x97\x96\xad\x3f\x64\x92\xf7\xc9\x75\x91\xce\x50\x99\x0a\x78\x5e\xbb\xf9\xb5\x0e\xa4\x99\xbd\xe0\x5b\xc7\x1e\x43\xa5\xd9\x94\x5f\x6c\xdc\x52\x80\x4e\x4c\x77\x1b\x06\x71\xc8\x0e\x6d\x02\x31\xdd\x76\xb5\x60\xae\x66\xf6\x2b\x9e\xed\x3a\x97\xe8\x65\xc1\x74\xc4\x72\x89\x19\x2e\xe0\x33\xe3\x7e\xd4\xa9\x73\x1d\x9d\x18\x9b\xe8\x5f\xeb\xc2\x6d\x2e\x32\x7f\x1b\x79\x36\xd4\xb0\x1f\x1d\x35\x0f\x63\x43\xee\x3d\xd1\x6d\x17\xa9\x28\x3b\x96\x6d\x15\x0f\x7f\xa8\x50\x41\x44\x84\x8d\x28\x06\xc8\x0b\x48\x76\x7e\x99\x7a\xd2\xf4\x5a\x65\xcd\xdd\x5a\x1c\x74\x1a\x4b\xbe\x5d\x64\xba\x5b\xde\x79\xc0\x30\xd9\x22\x2a\x3e\xfb\x0d\xca\x3d\xee\xd8\xcf\x25\x4f\xf0\x72\x53\xb4\x1c\x6d\xb3\xc1\xfd\xf1\xd5\xbf\xb3\x19\xdc\x3e\xec\x3d\x9c\x8b\x00\xda\x82\xd2\x0a\xcd\xe4\x36\x15\x59\xae\x15\xef\xd4\x39\xbf\xfb\x3a\x5f\x90\x56\xab\x79\x1a\xeb\xb2\xa9\xcb\x3a\xa2\x27\x2d\xa5\x85\x9d\xe2\xec\xae\x5c\x8a\x4c\x09\xd4\x72\x87\xef\x31\xfb\xbd\x41\xcd\xd5\xbc\x2c\x36\x5f\x2d\xa2\x44\x0e\x16\x90\x85\x8c\xd1\x99\xf9\xd9\x09\xfe\xaa\xaf\x03\x95\xf2\x2b\x4d\x57\x0c\x3f\x63\xf8\xd9\x94\x7d\xcb\xa3\x3b\xa1\x62\x96\x26\xe5\x5a\x12\xf1\x0c\x9a\xfb\xb2\xfa\xb0\xaf\x76\x0c\x6d\x0b\x2c\xdf\x5c\x43\x73\xb5\xe5\x77\x28\xea\x42\x46\xa4\x79\x39\x74\xd1\x16\x3a\x57\xc9\x42\x36\xd7\xee\xde\xd9\x72\xf7\x61\xb3\x98\xfa\xda\xcb\x4b\xcc\x97\x7b\xd8\x68\x42\x19\x55\x3c\x35\x23\x36\xae\x5b\xad\x0d\x7e\x30\xcb\xe1\xe2\x54\xfd\xa9\x31\xb8\x7b\x21\x84\x07\xc2\x44\xa5\x62\x1c\x28\xc6\x5e\xe4\xac\x4c\xad\x7d\x06\xb1\xa5\x04\x90\x3e\x38\x05\xe6\x83\x54\x46\x77\x88\x2d\x85\xec\x09\xe6\xba\xd7\x10\x7f\x66\xc2\x83\x1c\xdb\x8e\x86\x15\x12\xec\x1c\x86\x5b\x69\xe8\x1a\xed\x59\xa7\x03\x33\x43\x8a\x8d\x50\x8b\x47\xc8\xeb\x0c\x9f\xb4\x4a\x16\x08\x99\xc1\x2e\x46\xe7\x86\xb0\x54\x92\xe8\xb4\xfd\x1b\xdb\x69\x47\xc8\x55\xcd\x8c\x96\x39\xcb\x79\x21\x73\x73\x96\xb5\x8e\xb8\xa7\x35\x3a\x64\xd4\xf9\x38\x2e\xa5\x16\x1e\xa5\xda\x58\xb8\x4c\xb3\x29\x7b\x07\x91\x8d\xe0\x65\xa0\x1d\x2b\x51\xd7\x81\x55\x6c\x44\x27\x3d\xef\x53\x40\x34\x6d\x0f\x82\xef\xf7\x06\xac\x5c\x56\xe1\x94\xcd\x7c\x44\x19\x79\x99\x30\x56\xbc\xa7\x47\x22\xc9\xc5\x63\x16\xdf\xa0\xe0\x0b\xa0\xae\x60\x01\x31\xb0\xa4\x72\xf3\x77\xcf\xd3\xee\x9a\xf9\x00\x89\xfb\xfc\x4e\xa8\x3e\x0f\xfb\xf0\x16\x62\x08\xa4\xd7\x25\xe0\x62\x2b\x1a\xc3\x2b\x8f\x69\xe0\xf0\x6d\xe7\xa9\xb0\xe4\xea\xd8\x0c\xb9\x79\x86\x44\x77\x94\x2e\x88\x11\x36\x22\xd3\x7a\xd8\xe8\x3c\xdc\x67\x76\xfe\xf0\x25\x9b\x95\x4e\x35\x0b\xd2\x2d\xdd\x00\x23\xce\x52\xe9\x90\x6b\x0b\x5a\xed\x36\x29\xba\x75\xdc\x7c\x33\x7b\x84\xc2\x30\x00\x32\xc1\x16\xd5\xb2\x9b\x55\x5a\x3e\x95\x2a\xcb\x7e\x82\xeb\xe6\x08\x37\x1a\xf4\xc3\xd7\xf9\x07\xa8\xef\x29\xe8\x60\xd0\xcf\xf7\xf4\xa9\x58\x8f\x0c\x42\x3b\x90\xb1\xf5\x3f\x6a\x48\xd3\xa0\x8b\x32\xd5\x31\xf3\xeb\xbd\x2b\xd7\x45\x29\x8d\x20\xd3\x5f\x61\xb7\x82\xc6\x0d\xee\xdb\xbe\xad\xf6\x3e\x40\xaa\xb1\x65\x29\x93\x18\x79\x02\x03\x0b\x55\x5b\x13\x08\x04\x8a\xc0\x1e\x91\xb9\xbb\xe0\x5a\x16\xfd\x0f\x5f\xe7\x97\x3a\x3e\x64\x61\x8d\xe7\x82\x6d\xae\xeb\x01\x89\x2c\x79\x88\x26\xda\xee\x1f\x89\x54\x77\xa7\x20\xc4\x8b\xbc\xaa\xc8\xdb\xd3\x60\xc0\x9c\x2d\xcb\xd5\x35\xc8\x7f\x76\xd1\x22\x05\xca\x78\x36\xcf\xd9\xcc\xb3\xa9\xc6\x65\xdd\x75\x4d\x0a\x41\x98\xbc\x3d\xc2\xd9\x1f\xae\x3f\x5c\x1c\x6d\x79\x96\x6f\x38\xd0\x4e\xd8\xb2\x26\x56\x51\x1d\xdf\xeb\x16\x5a\x21\xd5\x5c\x1d\xb1\xb5\x9e\x20\x90\xe7\x0d\xdb\x14\x45\x9a\xbf\x39\x3e\x5e\xcb\x62\x53\x2e\xa7\x91\xde\x1e\xfb\xa1\x39\xe6\xa9\x3c\x5e\x26\x7a\x79\x9c\x09\x48\xe5\x38\x7a\x3d\xfd\xea\x35\xcc\xcc\xf1\xfd\xeb\x63\x80\x6f\x4c\xd7\xfa\xff\x9c\x7f\xf5\x1f\xbf\xff\x77\x53\x70\xba\x2b\x36\x5a\xbd\x21\x94\x50\x6f\xd9\x47\xf8\x4c\x38\xc6\x9f\xd4\x6a\xf9\x8f\xe9\x97\x61\x33\xe8\xab\x5b\x1d\x8b\x24\x3f\xbe\x7f\xbd\xb0\x13\x33\x4d\x3b\x34\x2b\x7e\x4b\x7e\xf8\x04\xc9\x0f\x77\xb2\xf8\x2d\xf9\xe1\xb3\x26\x3f\x0c\x37\xb9\xdc\x19\x03\x2c\xd5\xfe\x7c\x34\x7f\x77\x67\xa4\x8d\x05\xec\x3b\x87\x5a\x2e\x87\x30\x35\xed\x80\x2b\x62\xa4\x84\x5c\xad\xbb\xee\x2d\xd3\xe1\xf3\x1b\xab\x14\xd3\xf9\xba\x18\xc5\xc4\x01\x50\x43\x19\x81\x0a\x01\xfa\x28\x53\x2e\xdb\x52\x1a\x02\xe5\x9c\x03\x86\x10\x95\x3c\xda\x69\xc7\x86\x08\x5e\x91\xe6\x93\x88\x17\x4f\x22\x7d\xd5\x5a\x07\xa2\x32\x47\x97\xdf\xb0\xbb\x07\x98\xc6\x84\x53\x3e\x68\x44\x9f\x51\xa4\xe4\xa9\xd5\x49\xa8\xbb\x8f\x54\x26\x49\xf0\xd7\x16\x55\xad\x1f\xac\x22\xc9\x53\xe8\x78\x78\xc4\xf8\x30\x0d\x0f\x5c\xa4\xd0\x16\xdb\xae\x8e\x66\x6c\x78\xfe\x38\x78\xfe\x0c\x49\x80\x5d\x34\x16\xb1\xcd\x32\xb7\x15\xda\xdb\xd8\xf2\x1f\x99\xcb\xdd\xd2\x2c\xa6\x65\x96\xea\x5c\xe4\x53\xf6\x4e\x67\x48\xac\x45\xac\x37\x3e\xe5\xe0\xea\xdd\x09\x7b\xfd\xf5\x7f\xfc\x7e\xae\x5e\xb6\x18\x43\x70\x89\xea\x6c\x4d\x19\x10\x60\x02\x6d\x79\x5e\x88\xec\x38\x5b\x45\xc7\x78\x75\x1c\x9b\xdf\x1f\x51\xa5\x47\x7a\x75\xe4\x44\x0a\x8e\x88\xaf\x7d\xba\x8d\x5f\x75\x61\x03\xdb\x0d\xee\xcf\xf6\xe8\x99\x75\x18\xe6\x6d\xf3\xbb\xff\x60\xad\x6c\x21\x34\x44\xc8\x0a\xc9\xc1\x62\x41\x32\x44\xbd\x72\xb2\x3a\x98\x69\x8b\x0a\x5c\x7a\xd5\xf2\x1f\xdf\x26\x7a\x99\xbf\x72\x14\xac\x3c\xb7\x75\x78\x4e\xc4\xb6\x73\xbb\xb1\xe7\x0e\x79\x7d\xd3\x50\x3c\xa7\x5b\xcd\x9e\x89\xe1\xb4\x8d\x19\xf8\xf6\x43\xc3\xdb\x82\xc8\x08\xc5\x33\x5d\x2a\xab\x5b\xa1\x95\xd0\x2b\x00\x1a\xc1\x33\xc9\xe2\x24\x21\xb2\x00\xe8\x3b\xc7\xfe\x94\x89\x14\xad\x0f\x88\x81\x75\x0f\xf7\x81\xda\x2d\xfb\xc6\xf9\x39\xb4\x5b\x0e\x1d\x77\x3a\x18\x3f\xd3\x80\x1f\x9a\xcc\x80\x5b\x69\x0c\x06\xc8\x7c\x7f\x6f\xbc\xdf\x9d\x03\x5e\x3b\xda\xcb\x24\xa4\x3c\x03\x0b\x5e\x1c\x15\xfa\x08\x68\xf3\x80\x8c\x0d\xd5\x94\xba\x40\x40\x80\x93\x18\x73\xdd\x9b\xef\x0f\x68\x27\xbe\xda\x7e\x09\x1a\x4a\x06\x6b\x8e\x1c\xe4\x04\x0a\x97\x4a\x89\x8c\x22\xc0\x7b\x2d\x83\x91\x28\x8a\x70\x2a\xfb\x31\xe1\xde\x4d\x11\x2a\xdd\xb8\x8c\x40\x1e\x1c\x02\x53\x06\x4f\x93\x8d\xde\x6a\x63\xeb\xea\x32\x0f\x3e\xc4\xa7\x2d\x18\x13\x9d\x86\xf9\x96\xa7\x68\xaf\x7e\xbe\xde\x98\xad\x65\x3e\x42\x17\x74\xf8\xa5\x51\xe2\x61\xcb\xaa\x5c\xd2\x9e\xf6\x3b\x9d\x9b\xfe\x75\x03\x18\x9d\x2d\x84\xfc\x36\xfc\x5e\x58\xf5\x0a\xf9\x57\xf3\xe8\x35\x4b\xca\x3d\x23\x9d\x05\x82\x90\x32\x64\x83\x0e\x01\x94\xf6\xd6\xed\xe4\x6b\x29\xb7\x23\xe7\xc0\xa5\x39\x0d\x99\x00\xae\x30\xf1\xc7\x66\xfc\x1c\xb5\xa6\xfc\x74\xed\x4b\xf0\xab\x95\xe6\x65\x62\x19\xcb\xc7\x35\xf5\xda\x15\x40\xe4\xe4\xcd\x76\x7b\xc2\x47\xc8\x0f\xc3\x31\xc6\x03\xc1\xda\x16\x5d\x30\xe3\xf1\x9b\x11\xa4\xe3\xc6\x8c\x1d\x54\x82\x8b\xb3\x31\x82\xc1\x5e\xe8\x1a\xc0\x71\xfe\xd7\x3e\x77\x66\x1b\xc2\x1c\x39\x72\x7d\xfe\xb0\x69\x65\xc3\xb3\xe0\x7e\x78\xef\xe5\x89\x01\x80\xbb\x2c\xe1\xf3\x8b\x0f\x37\x21\xb6\x48\x62\x6f\x8f\xa2\x8d\x88\xee\xc0\x9b\x86\x57\x1e\x6e\x06\x4a\x87\x07\xc0\xb3\x17\x35\x2d\xb4\x05\xca\xec\x9c\xce\x8b\xd3\x3a\xd2\x19\x8b\x65\x9e\x26\x7c\x07\x90\x04\x85\x99\x82\x1e\xce\xe0\x52\x6c\xcd\x51\xb0\x2f\x98\x30\x7c\xa6\xcd\xac\xcc\xfc\xef\xc6\x8e\xa5\x87\x7e\xfb\xc1\x6c\x9e\x07\x2c\x17\x5b\xae\x0a\x19\xcd\xd5\x56\x70\x15\x62\x48\x09\x92\x61\x06\x39\xd6\x82\x14\x0b\x56\x2b\x11\x15\x9e\xf2\x18\x1e\x21\x6e\xa4\xf6\xed\xc1\x71\x7d\x77\x3b\xaf\xb7\xeb\xdf\x5b\xe1\x65\xb9\x05\x84\x32\xad\x21\xba\x1a\x1f\x19\x6a\x04\x11\x5c\xba\x72\xed\xa3\x16\xfe\x65\xd7\x14\x5b\x8a\xe2\x41\x00\xa3\x0f\x51\x10\xb4\xd9\xf8\x07\x0b\x21\x1d\x92\xbe\x37\x73\x0c\x80\x44\xf0\xde\xa0\xf0\xa5\x0d\x16\x42\x1f\x1d\xf5\xa0\xaa\x71\x08\xbe\x20\x52\x04\x70\x05\xbe\x20\xa7\xe6\x0b\xb8\xa6\xcd\x2b\x38\xbb\x17\xf1\x5c\x55\x89\x1d\xc9\x66\xf4\x1b\x8e\x79\x89\xcf\xa7\x39\x6d\xec\x18\x0f\x0a\xf4\x9c\x02\x99\x95\xa7\xb1\x76\x69\xff\x3d\x92\xa3\xd8\xe9\xe7\x7c\x55\x59\xb5\xe3\xa1\x8f\x61\xaf\x02\x4a\x12\x7e\xa4\xf8\x5b\x41\xff\xb8\x45\xe9\x68\xeb\x90\xd3\xd6\xc1\xb5\xc9\x69\xdd\x70\x83\xb7\x95\x31\x57\x96\xcf\x65\x55\x26\xc8\x53\xde\x95\x35\x43\x2c\x96\x36\xf7\xf4\xf3\xe5\x20\x3b\xa7\x2b\x0b\x54\x53\x1d\x48\x27\x80\xce\xe3\x59\x67\x57\xbd\x50\x79\x09\x26\x85\x15\x4c\x84\xa8\xc4\x5a\x14\x70\x9b\xc7\x65\x82\xf4\x24\x10\x4e\x01\x46\x4c\x9e\x24\x4c\x16\xf9\x5c\x39\x02\x4f\x4c\x8d\x81\x13\xd6\xc6\x5b\x62\x7a\x72\x41\x15\x50\x2c\x7c\xcc\x15\xd8\x61\x32\x92\x45\x23\xe1\x60\x17\x8a\x8c\xa5\xa9\xe0\x98\x4d\x8f\xd3\x36\x57\xe1\x9b\xab\x3e\x09\x94\x7a\x0e\xba\xf4\x4f\x91\x05\xde\xe3\xb8\x35\x55\x3c\x0a\x65\x83\xbd\x33\x0f\x2e\xab\x1f\x8e\xad\x25\x06\x1f\xc2\x05\x9b\x57\x4d\x91\xdb\x00\x8a\x7f\xb7\x42\x56\x4d\x54\x26\x3c\xc3\x74\xa2\x55\x99\x30\xb9\x0a\xa4\xd0\x61\x0e\x90\xbe\xd1\x4c\x57\xa4\xe1\xae\xb6\x21\x94\x9c\x6f\x45\xc0\x1c\x43\xee\x9d\x24\x40\xfc\xa0\x26\x05\x42\x49\x4c\x59\xaf\xa6\xec\xad\x27\xa8\xc5\x19\x86\x3d\x11\xd0\x3e\xcb\x1c\x8f\x3f\xd7\xde\x80\xf4\x00\x7a\x67\x9a\xa8\x95\xd9\x91\x6e\xd7\x75\xcc\x20\xc8\xc7\x8c\x83\x13\x59\xf1\xa0\x7e\x8c\x7b\x2b\xe9\x89\xf9\x69\x0d\x64\xe4\x36\x44\x47\x03\xed\xad\x30\xb2\x91\x21\x65\xf6\x23\x1a\xea\x28\xc9\x5b\x1a\xbb\xed\x51\x5e\x87\x79\x1c\xd9\xd4\x40\xc7\x70\x7c\x43\x83\x95\x13\x82\xc7\x86\x8c\xec\x9a\x17\x63\x91\x64\x2e\x75\x6c\x7c\x43\x5b\x51\x7b\x43\x9a\x09\xa7\xc7\xc8\x76\xce\xcc\x6f\x1e\xd9\xd0\xbc\x5c\x1e\xe1\x01\xed\x14\x89\xe0\xa8\x10\x3c\xda\x54\x59\x1c\x2c\xd7\xb2\xeb\x01\x64\xf1\xc1\x7e\x1c\x4f\x40\x31\xf3\x6b\x0e\xa4\x1c\x99\x69\xfe\x94\x7d\x50\x02\x71\x9e\x7a\x15\x5c\x2a\xd4\x00\xd2\x7c\x04\xb9\x1b\x77\xca\x2d\x4d\xc3\xd4\x9d\x25\xb7\x32\x5b\x6e\xc2\xb8\x2f\x1d\x4e\x3d\x5c\x36\x78\x8a\x74\xd8\x92\x6d\xe2\x50\x07\x98\x97\xc3\x28\x22\xda\xdf\xfc\x01\x5c\x7a\xfc\x09\xd0\xd6\x8f\xe1\xd3\xd2\x9b\xf7\xe0\x5e\x71\x36\xd9\xa1\xba\x6e\x18\x82\x9f\xf7\x8d\xef\xe5\xa6\x8a\x99\x1d\x21\xd1\x78\x7b\xf1\xf6\xf4\xdd\xd9\x45\x55\x01\xf1\x8f\xb7\xa7\xb7\xd5\xbf\x5c\xdd\x5e\x5c\x9c\x5d\x7c\x17\xfe\xe9\xfa\xf6\xe4\xe4\xf4\xf4\x6d\xf5\x7b\xef\x66\x67\xe7\xb5\xef\x99\x3f\x55\xbf\x34\xfb\xf6\xc3\x55\x4d\xc9\xb1\x45\x86\xf1\xe6\xec\xfd\xe9\xdb\xc5\x87\xdb\x8a\x18\xe4\xdb\xff\xba\x98\xbd\x3f\x3b\x59\xb4\xb4\xe7\xea\xf4\xe4\xc3\x8f\xa7\x57\x7b\x24\x1b\x7d\x7f\x5b\x87\xf4\x29\xb0\x85\x8f\x56\xf6\x9c\xb1\x55\x26\x85\x8a\x93\x1d\x66\x8a\xd8\x97\x6d\x0d\xfa\x1d\xde\xbd\x72\x2b\x74\x79\x48\xc2\xc7\xcd\x46\x30\x7d\x2f\x32\xe0\xe1\xc2\xd2\x88\xb4\xc3\xe7\xfc\xd7\x6b\xcd\x44\x91\x35\xa3\x02\xbd\x79\x6d\x45\xb6\x73\x99\x93\x7d\xcd\xf1\x1c\x8e\x54\x09\x4b\x45\xd6\xd7\x16\xb0\x8c\xb2\x32\x2d\xe4\xb2\x3b\x85\x67\x74\xea\xfb\xd0\xb7\x37\x32\x0e\xb7\xd3\xb3\x5d\xb4\x1f\x8c\x95\x4c\x96\x43\x60\xf2\x50\xc2\x63\x05\x6b\xdd\xaf\x2d\xb4\x38\x2d\x97\x89\x8c\x98\x8c\xeb\xfe\x14\x62\xa4\x00\x97\x71\x9d\x98\x3c\x15\x19\x98\xaa\xe6\x05\x90\x66\xe2\x88\x97\xc5\x06\x49\x34\x29\x71\x86\x64\x64\xe6\x2a\x17\x51\x26\x30\x16\x20\x72\x70\xd2\xa2\x20\x69\x50\x13\x34\x86\x38\x64\x62\xa0\xab\x9b\x06\x22\x31\x1d\x31\x02\xfc\x25\x96\x3e\xc2\x49\x8a\xdf\xef\x1d\x1a\x6a\xb1\x44\xc9\xd3\x00\x16\x06\x37\x3c\x7e\x68\x65\x4d\x4d\xbf\xcd\x49\xed\x64\x3d\x71\x92\x6d\xa6\x51\x7b\x37\xf6\xad\xb1\x70\xa1\x54\x53\x6f\xa8\x74\xfa\xe8\x24\x13\x70\x89\x10\xa4\xc1\xfa\x2f\x00\xd7\x44\x99\x49\x90\x90\x64\x9e\x6a\x4b\xb1\xe1\xc9\x0a\x2d\x0e\x33\x35\xed\xbc\x1e\x58\xfe\x8d\xbe\x13\xea\x0a\x27\xec\xb3\x1c\x87\x0a\x5f\x3e\x9e\x55\xc8\x79\x84\xbc\x0b\xd3\xb4\xd1\xae\x2a\x9b\x99\x09\xc6\x54\x81\xef\x84\xe0\x63\x4c\x40\xf2\x9a\x01\x36\xa9\x73\xb5\x92\xbf\x98\x02\xe7\x4a\xb4\xb2\xa6\x03\x98\xcc\xf2\x3b\xba\x73\x19\x80\x73\x48\x92\x77\x27\x14\x28\x9a\x02\x3d\xdf\xfe\x35\x3b\xce\x7f\xde\x9c\x8b\x1e\x87\x3e\xf8\xfc\x64\x45\xe8\x35\x8c\xf2\xd8\x71\x2a\x30\x23\xcc\xb1\x60\xc0\xba\x39\x39\x3f\x3b\xbd\xb8\x59\x9c\x5c\x9d\xbe\x3d\xbd\xb8\x39\x9b\x9d\x5f\x0f\xdd\x7e\x4f\x91\xc5\x57\xdb\x7d\xf5\x64\x36\x77\x42\x1c\xd3\xce\xf3\xc9\xe4\xae\x53\x7e\xdb\xc1\x94\xec\x6f\xbd\x8c\xd3\x45\x2c\xf3\xc8\x5c\x7f\xbb\x85\x50\x31\xc8\x4d\x3c\x6a\xa9\xb6\x17\x55\xef\x85\xfb\x06\x73\xdf\xb0\x27\x08\xde\x76\xf7\x76\x45\xbb\xcf\x01\x92\x09\x6e\xc8\x4c\x98\xcd\x1f\x57\x58\x3e\xa6\xfb\x35\xc6\x4c\x71\x87\xf5\xad\x5a\x44\xbd\x4f\xd8\x5e\x99\xe7\x25\x90\x89\xd8\xaf\x01\x1e\xb5\x63\x54\x88\x03\x38\xd4\xbc\x90\x81\x0e\x3c\x93\xf9\x5c\x6d\xb9\x8a\x79\xa1\xb3\x5d\x47\x17\x87\x1d\x9e\xe1\xb6\xa9\x1e\xa1\xe1\x95\xad\x84\x88\xed\x2c\xe0\x57\xb9\xaa\x2f\x25\x54\xc6\xb8\xf9\xf0\xc3\xe9\xc5\xf5\xe2\xf4\xe2\xc7\xc5\xe5\xd5\xe9\xbb\xb3\x3f\x39\x98\x6c\xca\xf3\x36\x79\xe7\x34\x13\xe6\x74\xb1\x44\x63\xad\xe7\x0b\x8a\x26\xdb\x72\x48\x28\x53\xae\xe6\xca\x9e\x2c\x99\x2f\x7e\x93\xe9\x72\xbd\x69\x2f\xa8\xde\xca\xcb\xd9\xcd\xf7\x8f\x6a\x26\xd0\x40\xa2\xb2\x2a\xee\xb6\x26\x5c\x58\xae\xe8\xdc\x43\x8c\x71\xad\x79\x40\x66\x0a\x5f\x6d\x8b\x32\x74\x9c\x68\x8f\x7a\xbd\x34\x0f\xad\x5e\xe3\xbf\xe5\xeb\x5d\x0b\xe8\x26\x38\x37\x2b\xd7\x08\xc0\xd7\x51\x9e\xbb\x51\xda\x9b\x96\xbf\x55\x6e\xb0\xaf\x8e\x12\xb1\x5e\x8b\x18\x97\x57\xbd\x60\xf2\xc1\xd1\x11\x18\xf9\x7b\xbd\x6d\x14\x49\x42\xf7\x80\x8b\xd9\xe1\xbd\x86\x1f\xe0\x97\xee\x27\xed\x67\xc5\x09\x51\x39\x41\x7c\xb3\xe0\xaa\x23\x90\xbc\x3f\x1f\xac\xbd\xf8\x0f\x19\x73\xa9\x7a\xe4\x30\xb1\x21\x03\xbf\x0f\xba\x00\x2f\x87\xe3\x5b\x5d\x3b\xae\x44\x9a\xf0\x48\xb8\x04\x17\xe4\xe0\x85\x77\xfd\x63\x02\x78\x24\x54\xac\xc8\xdf\x12\x08\x18\x7b\x6d\xb6\xb6\x25\x00\x9e\xdb\x2b\x7b\x1e\x3f\xbf\x6b\xa5\xf7\xe1\x46\xcc\x9b\xe0\x68\x46\xa5\x48\xca\x8b\x40\x5f\x14\xc8\xaf\x76\x62\xd6\x47\x2d\x87\x5a\xcd\x3f\xd2\xc4\xe3\x9b\xb9\xea\xe8\xe6\x96\xdb\xd6\x2d\x0f\x67\x3a\xf6\xf9\x0b\x8b\x22\xeb\xa5\xc3\x7e\x8a\x70\xc4\x65\xa6\xb7\x32\x17\xb3\xa2\xc8\xe4\xb2\x0c\xf5\x80\x47\x02\xe6\x2a\x8f\x13\xdf\xe1\x34\xd3\x71\x19\x59\x02\x2b\xe8\xad\x87\xfd\x90\x97\xcf\x5a\x1d\x31\x3b\x32\xab\x8f\x5e\x6e\x22\x3e\x82\x6c\x0f\x64\x58\x6b\x8b\xb1\xd9\x83\xb1\xc3\xf7\x77\x69\xaf\xf2\x27\xce\x19\xed\x1e\x4c\xbb\x06\x86\xa5\x81\x33\xfb\x75\xb0\x80\x3b\x50\x53\xb4\x5c\x96\x1c\x03\xe8\x55\x1b\xa5\x8b\xaf\xc6\x5d\x35\xe3\xc0\x5d\xc3\xb0\x31\xd5\x74\x2a\xb4\x1b\x36\x3c\x47\x73\xbe\x88\x36\xd5\x86\x43\x6f\xaa\xbc\xbd\xf5\xe6\x3a\xf3\xf8\x30\xb7\xc9\xa0\x30\xda\x04\x1d\x0d\x92\x1c\xdb\x15\x0d\x56\x27\x28\xdd\xe9\xbf\xc7\x94\x8b\xc5\xcf\xa5\x18\xa3\xab\x6c\x53\x35\xfe\x08\x3f\xdb\x0b\x48\x91\x88\xdd\x72\xbe\xd7\x42\x6e\x8d\x05\xc4\xb3\x68\xc3\x96\x3c\x27\x42\xc0\x90\x2d\x01\x05\xe0\x99\x34\xbf\xe2\x51\x41\x82\xb8\xb6\x5a\x2b\x8a\x7b\x63\xa1\x90\xc6\xac\xf5\x5e\x8f\xb6\xe5\xb6\x6f\x00\xc6\x78\xaf\x6d\x33\xce\xde\x8e\x8a\x21\x84\x76\xb8\x7b\x27\xe3\x15\x0b\xb7\x53\xc2\x4b\x15\x6d\x58\x9a\x70\x24\x94\xd8\xf0\x1c\x0f\x0a\x8b\xd0\xe1\x4b\x99\xc8\x02\x98\xba\x30\x70\x5c\x5b\xb7\xe6\xf1\xcc\xb3\x3b\x2b\x78\xc0\x3d\x2d\x5b\xdf\x51\x72\x20\x12\xda\xf5\xea\x93\x62\xa1\xfd\x41\x18\x1e\xee\xc3\x36\x3b\xe1\xa0\xfd\x74\x98\xeb\x0d\x36\xbb\xef\xcb\xb8\xe8\x10\x95\x78\x59\xff\x79\x6d\xbc\x91\x02\xf2\x20\x9a\xde\xde\xbc\xac\x67\x01\x9d\xfb\xac\xb2\xfe\x6b\xb4\xd9\xe1\x16\x23\x78\x3c\xf0\x89\xa4\x8b\x46\x18\x31\x75\x61\xa3\xd6\x7d\xbf\x4a\x34\x2f\xfa\xb3\xdc\x50\xa7\xa8\xab\xec\x58\x97\xcb\x2e\x65\x0c\x6c\xd5\xe3\x73\xe8\xec\xf1\xff\x54\x3e\xf7\xf0\x1e\xe5\x85\x30\xa7\xef\xe3\x06\xd4\xfc\xfa\x08\x7e\xde\x5e\x38\x65\x31\x8f\x66\xa4\x70\xcb\xc0\xab\xe5\x39\xdb\x1f\x20\xa9\x2d\xdb\xa9\x6e\xe4\x1d\x94\xf3\x78\xd8\x7c\x49\xb5\x67\x29\xed\x17\xe0\xfa\xfd\x57\x43\xb2\x11\xff\x58\x72\x73\x01\x7c\x58\x5d\x23\x41\xd8\x21\x9d\x2e\x64\x73\x5b\xb5\x1f\x03\xf5\x5a\x6f\xaa\x51\xda\x70\xe1\x0f\x66\x3b\x68\xeb\xcd\xb5\xf9\xf5\xf0\x63\xf7\xac\xe2\x8d\x4d\x33\xa9\x81\x28\x4b\xaf\x2a\xb6\x46\xcb\x49\xdc\x5a\xef\x01\x23\xf9\x73\x29\x4a\x61\x16\xd0\xb2\x8c\xd7\xcd\x60\xc9\x88\x07\x97\xef\xd2\x46\x3f\xb0\x6d\x19\x6d\x98\x2d\x9c\xc5\x22\xe1\xbb\xaa\x19\x65\xde\x1a\x85\x06\x12\xe3\x51\x7c\x81\x01\xf5\x7c\x54\xe6\x85\xde\x02\x4e\xdd\x97\x9b\x95\x0a\x76\x39\xe3\x76\x77\xb5\x5d\x68\x15\x4a\xcd\x47\x46\xc8\xaf\x2f\x4f\x4f\xce\xde\x9d\xd5\xc2\xd3\xb3\xeb\x1f\xc2\x7f\xff\xf4\xe1\xea\x87\x77\xe7\x1f\x7e\x0a\xff\x76\x3e\xbb\xbd\x38\xf9\x7e\x71\x79\x3e\xbb\xa8\x04\xb1\x67\x37\xb3\xeb\xd3\x9b\x3d\x71\xea\x66\xad\xdd\x13\xc1\x03\xc6\x4f\x8b\x9c\xb7\x72\x36\xd6\x5d\x45\xb5\xbe\x61\x33\xcb\x7f\x5a\x61\xe8\xb5\x58\x03\x00\x27\x25\x88\xb1\x44\x48\xc2\x5b\x5e\xf0\x13\x5e\xf0\x44\xaf\xa7\x6c\xc6\x28\xaf\x00\xf3\x45\x72\x63\x12\x12\x39\xa4\x99\x1d\x2c\xc2\xd8\x85\x91\x77\x05\x79\xbd\x6e\xbd\x22\x5a\xd6\x44\x84\xca\x4e\x36\xc9\x73\xae\x4e\xef\x85\x2a\x4a\x30\xb4\x79\x92\x30\xaa\xd6\x7e\x21\x60\x05\xb1\xad\xcc\xe5\x56\x26\x3c\xf3\xd2\xca\x1f\xa8\x2c\x78\xec\xda\xb6\x3a\x56\xba\x26\xe5\x84\xf5\x07\xdc\x9e\x31\x68\xf7\xc9\xf9\x19\x18\xba\x51\x61\x75\x03\x6d\xe5\x73\x85\xb4\x9f\x54\xe3\x96\x43\x0e\x53\xa1\xc9\x41\x8f\xd5\xd3\x97\xbb\x17\xe2\x41\x86\x95\x0d\x65\x3d\x97\x63\xc2\x35\xd2\xfe\xc7\xa9\x2a\xb2\xdd\x60\xeb\xf5\x06\x18\x1d\x72\x78\xd7\x11\x24\xb2\x2a\xb7\x8c\xfe\x53\x66\x4b\xbf\x00\x93\xd6\xe2\x75\x29\xbc\xe7\xa2\x78\x08\x8f\xea\x78\x12\x25\xe6\xe6\xfd\xb5\x8e\x43\xc8\x02\x06\xa3\xb0\xd4\xa5\x8a\x73\x02\x6f\x6e\xa5\x3a\xde\xf2\x5f\x5e\xd9\x9e\x22\x89\x8d\x13\x3d\x03\xc6\x44\x91\x98\xf7\xe0\xce\x1c\x72\xfd\xc3\x35\x57\x3d\xe3\xb5\xff\x4d\x60\x4f\x56\x70\x19\x78\xff\x0e\xc2\x50\xef\xc5\xae\x6d\xfe\x1a\xc2\x95\x2c\x54\x5f\x80\x42\xd2\x4c\x98\x2f\x3a\x8c\x6b\x82\xd0\x65\xf7\x6f\xc8\x65\xa9\x88\x6b\xb7\x9f\xdd\x21\x6c\xe4\xa0\x6d\xd3\x0a\x58\x19\x6e\xf8\x0c\x56\x1e\xa5\x9a\xcc\x9c\x21\x7c\xc5\x46\x4e\x28\x77\x87\xe2\xf2\x66\xb2\xfe\x5b\x2f\xd9\x0a\x12\xd9\xc8\x4f\x90\x09\x88\x94\xc1\x54\x58\xa9\x1c\xe0\xd5\x6b\x60\x62\xec\x12\x48\x44\x0e\xf1\x23\x65\x1e\xd5\xe2\xe7\x92\x20\x00\xaf\xbf\x1c\x77\xcf\x16\xa8\xb7\x80\x04\xdb\x75\x25\x02\x77\x97\x43\xbb\x4a\x25\xdb\xc8\x36\xaf\x4a\x65\xae\xe2\xa7\x40\x4f\x0d\x0f\x8f\xd7\x2a\xa5\x7f\xee\xcd\x35\xb3\x91\x9d\x0c\xbf\xff\x6c\xdc\xc9\x3f\xd6\x28\x93\xa9\x3a\xc8\x6c\xa0\xd2\xc3\x0b\x6d\xc9\xa3\xbb\x07\x9e\xc5\xe8\xfe\x07\x38\xd3\x94\x7d\xaf\x1f\xc4\xbd\xc8\x26\x2c\x12\x59\xc1\x89\xaf\x30\x07\x3c\x07\x6c\x28\x2a\x67\xae\x20\xd1\x07\xc9\x1f\x55\x5e\x66\x82\x15\x72\xbd\x29\x44\x16\xa2\x71\x74\x66\x8e\xa3\x02\xa9\x6a\x53\x11\x11\x21\x5b\xc7\x00\xac\x12\x7e\xdf\x24\x60\x7c\x0c\x93\x0c\x3b\x73\xd9\xca\x36\xdc\x6d\xe5\xc7\xfa\xf0\x53\x34\x60\x74\x68\x22\x85\xd6\x84\xad\x75\xc2\xd5\x7a\x3a\x9d\x82\xd4\xc6\xab\x51\x0b\x9d\x0a\x0c\x03\xe8\x0e\xa5\x9f\x68\x9d\x8b\x64\xe7\x48\xc4\x5c\x1e\x15\x00\x77\x7f\x29\x84\xca\x25\x3a\xb6\x5a\x96\xff\x75\x3d\xb8\xf4\x69\x63\x71\xed\xcf\xf3\xd1\x59\xba\x1d\xe5\x80\x9a\xe9\x88\x92\xf0\xfb\xed\x2f\xaf\x47\x65\x9d\xb7\x97\xa5\xb4\x1a\x9b\x4a\xfd\xa3\x96\x1d\x50\x90\x47\x91\x8d\xb6\x96\x44\x44\x48\x8f\x4a\x3f\x6d\x1f\xb3\x46\x46\xf0\x01\xc9\xc0\x3d\x79\xbd\x23\x53\x7a\x87\x38\x02\xae\xeb\xd3\x3d\x7a\x5b\xec\x17\x58\x6b\xed\xd0\xc8\x94\x69\xcf\x6d\x30\xc6\x74\xc2\xac\xcb\x64\x07\x2f\x2e\x97\x40\x0d\xe1\x81\x38\x88\x2a\x55\x82\x66\x90\xca\xe7\xa3\x6e\x8e\xa0\x2e\x08\xb2\xe5\x85\xce\xf8\x5a\xb0\xad\x88\x65\xb9\x6d\x3d\x6c\x5c\x73\x0f\x81\x8f\xea\xa4\xdc\x76\x53\x85\x1e\x6a\x40\xfb\x46\xe2\x7f\x9d\x40\x75\xc3\x39\x74\x5c\x66\x84\xd5\xb9\xa4\xf6\x62\x08\x89\xc6\xda\xdc\x94\x99\xcc\x81\x65\xf7\x31\x99\xb3\xae\x18\x2c\x1a\x02\xf0\xbb\x14\x9d\xec\x95\xd9\x3d\xb2\x91\x51\xfa\x49\x8e\xb3\x0a\x51\xfb\xee\x4b\xa1\x0e\x4a\x1d\xaf\x76\x97\xe9\xb2\xc1\x3d\x35\x08\x28\x01\x66\x63\xa0\x7d\x41\xa8\x39\x28\x90\xa0\x3d\x85\x66\x2b\x9b\x8b\x79\x27\x02\xea\xc3\x18\x54\x31\x1e\x90\xf2\xe9\x87\xaf\x73\x0b\x02\x22\x9c\x96\xb7\x58\x0a\x5f\x09\x46\x80\xee\x5f\x5b\x78\x1e\xf6\x10\x8b\x00\x82\xc2\x98\xab\xa2\xb5\x00\x8f\x5e\x85\xb2\xf0\x27\x3f\xf2\x32\x69\xff\x3a\x95\x0f\x5f\x45\xd5\xd4\xd9\x4f\xd7\x0c\x87\x9a\xf4\x13\xb2\xbe\x86\x06\x85\xec\x07\x08\xc2\x70\x2d\x1e\x61\x09\x56\xe6\x01\x07\xdd\x0a\x68\x98\x61\x17\x45\xb4\xf1\x96\x07\x10\x34\x3a\x62\x49\x92\xc4\xa6\x7e\x6e\xbd\x22\x04\x62\xaf\x43\x10\xab\x5c\x2b\x1d\x8a\x19\x69\x25\x20\x14\x67\x0e\x20\x1d\x16\xcb\x64\xb1\x1f\x29\x38\x92\x95\x70\xdf\x52\x2b\x34\x22\xc0\xa8\x9f\x95\x38\x35\x3c\x29\x24\xd2\x55\x59\x98\x35\xbe\x89\x48\x61\xb9\xae\x14\x50\x25\x00\x99\xab\x6a\x55\x8d\x41\xb2\x50\x3e\x99\x09\x24\xf8\xce\x8d\xf5\x56\xc8\x7b\xb3\x51\x9b\xcb\xda\x2d\x50\x38\x01\x9a\x6b\x8f\xc2\xb6\x2c\x60\x09\xbf\x13\xbb\x3c\x94\x73\xa6\x15\xc5\xba\x16\xa4\x34\xfd\xa1\xf9\xda\x3f\x15\x30\x70\x8b\xcc\x8b\x32\x0e\xbb\xcb\xb0\xd2\xf7\xe6\xc7\x3d\x18\xe1\x46\xe1\x66\x0d\xfa\x64\x57\xef\x53\xa4\x63\xc2\x8f\x33\xcd\xa1\x87\x01\x02\xc8\x33\x84\x71\x86\x99\x4b\xf0\xf0\x35\xef\xdb\xb9\x22\x21\x81\xe0\x92\x33\x07\x4e\x73\xda\x28\x03\x1f\xe9\xcb\x77\x15\xf6\x20\xa0\x56\xb5\x34\xb3\xd5\x2a\x6d\x74\x19\x94\xf1\x60\x79\x40\xd5\x98\xa3\x6c\x7d\x78\xad\x15\x3e\x12\x5b\x4a\x93\xdb\x89\x27\x0d\x12\x01\xf1\x9b\xc4\x2e\x8a\xba\xe0\xf8\xfa\x89\x84\x19\xbe\x99\x6a\x85\x72\x5a\x20\xe7\xf5\xe9\xc9\xd5\xe9\xcd\x27\xc3\x9b\x5a\xb0\xe7\x68\xc0\xa9\x6d\xe7\xdb\xd3\x77\xb3\xdb\xf3\x9b\xc5\xdb\xb3\xab\xe7\x40\x9c\xd2\x47\x8f\x80\x9c\x5e\x93\x3e\xc9\x89\x56\x85\xf8\xe5\xa0\x3b\x39\x2b\xd5\x82\x8f\x48\x7d\x72\x0a\x45\x7d\xe6\x0e\x16\xda\xd4\x57\x71\xe2\x27\xc4\x6d\x4b\xa8\x13\x2b\xa7\xb2\xf2\x4e\xc3\x95\x4c\x12\xc8\x04\x77\xee\x75\xca\x32\x34\x83\x0a\xe7\x8f\xa5\xf3\xa5\x33\x75\xae\x96\x15\xf9\x1b\x70\xf9\x6d\xcc\x23\x18\x73\xc0\x53\x33\x00\x99\x84\x0c\xdb\x3e\x09\x96\xb5\x54\xc2\x37\x03\x66\xcd\xb4\xaf\x93\xa6\x9e\x26\xf1\x39\x91\x75\x64\x78\x0d\xb5\x35\xed\x8a\xab\xac\x4f\x6b\x7e\xda\x0f\x5d\x0f\x71\x13\x4b\x85\x86\x69\x65\x37\x5f\xb7\x2f\xdd\x63\xbf\x05\x60\xdc\xcd\x4c\x72\x88\x41\xe4\x05\xcf\x0a\x3f\x91\x34\x11\x28\xcd\xe6\x83\x13\x77\x12\x11\x68\x7a\x55\x1b\x67\x73\x14\x9a\xb1\x96\x10\xa9\xe0\x44\x6e\x13\x25\x65\x5e\x88\x8c\xdc\x26\xb3\x9f\xae\xe7\xea\x5b\x73\x7d\xbd\xa2\x5b\x88\xe4\xbb\xb0\x0a\x44\xea\xe8\x4a\xfd\xd6\x42\x09\x4f\xb0\x97\xe8\xa3\xde\x0a\xae\x72\x06\x5b\x23\x49\x44\xe6\x57\x06\xb6\x47\x88\x98\x64\xac\x81\xea\xd9\xff\xfe\x15\x23\x70\xab\x19\x0a\xd3\x5e\xfa\x34\x13\x5b\x5d\x34\xd7\x53\x17\xd1\x00\x20\xce\x9f\x73\xe5\xb4\x24\x3e\x0d\x5d\x45\x04\xd6\x6f\x5d\x44\xd5\x34\xa4\x41\x6b\xe9\x06\x8b\xfb\x6d\x29\x3d\xe1\x52\x1a\x70\xaf\x87\xb7\x04\xdb\x68\x73\x80\x3a\x6d\x2b\x1f\x66\x76\x44\x27\x09\xa0\xdc\xcc\x30\xb6\xde\x3a\x35\x7d\xd7\x43\xb0\x1f\x50\xd4\x61\x08\xed\x59\x0b\xa3\x92\x17\x12\xb4\xb1\x9d\x5e\xe9\xd8\xe7\x61\x2e\x9c\x59\xac\xaa\xd2\x85\xe5\x20\x71\xf0\x50\xc2\xba\x9a\x2f\x38\xf2\x9b\xde\x36\x12\xa1\x8c\xb5\x52\x16\x07\xca\x2f\xde\x84\x98\xda\x4a\x56\x36\xb6\x22\xe4\x73\xb0\x1c\x0e\x8e\x03\x66\xcc\xe2\x7b\xbc\xc0\x6f\x75\xcd\x39\x3e\xd1\x47\x81\x1d\x2e\x3e\x5c\x9c\x86\x50\x85\xb3\x8b\x9b\xd3\xef\x4e\xaf\x2a\xf9\xfc\xe7\x1f\x66\x95\x9c\xfc\xeb\x9b\xab\x5a\x2a\xfe\xb7\x1f\x3e\x9c\x9f\x36\x30\x0f\xa7\x37\x67\xef\x2b\x85\xbf\xbd\xbd\x9a\xdd\x9c\x7d\xa8\x7c\xef\xdb\xb3\x8b\xd9\xd5\x7f\x85\x7f\x39\xbd\xba\xfa\x70\x55\xab\xef\xf6\xa4\x1f\x3d\x51\xe9\x46\xbb\xfb\xc7\x07\x67\x03\x6a\xd5\xd6\x6d\x5c\x15\x40\x3e\x60\x17\x0f\x44\x9e\xed\x5b\x8e\x36\x5d\x3f\x0e\xe5\x38\x70\x63\x98\xa6\x8e\x5a\x75\x4f\xaf\xd8\x5c\x19\xba\x94\x1f\x76\xec\x99\x5b\x6d\xf1\x14\x48\xc0\x5e\x03\xd0\xd5\x52\x73\xdc\x92\x40\x3a\x0e\x6d\x0a\x11\xac\x35\xef\xd4\x2b\x53\xf1\xb3\xb7\xd4\xd6\xb1\xaf\x9d\x9e\xca\x6b\x0f\x23\xd2\x53\xb1\xa1\xf4\x35\x3a\xa8\xcc\x92\x0d\xc8\xd8\x1a\x0a\xf6\xc3\x10\x76\x6f\xba\x61\x56\x4e\xb0\x1c\xbb\xa4\x75\xdb\xd3\x96\xfa\xd9\xf7\xc6\xb6\x9f\x2a\x69\xb6\xbd\x46\xd5\x32\xa2\xdd\x40\x99\x35\xa6\xdd\x37\x3c\xbf\x1b\xdb\x6e\xaa\xa4\xd9\x6e\x30\xfb\x1e\xd5\x6e\x70\x78\x17\xed\x34\x3a\x23\x0e\xb1\xb0\x98\x6a\xf3\x5c\x8e\xbf\xfb\x4a\xa0\x60\x3d\xac\x8d\x66\x03\x3c\xef\xf3\x32\xe5\xc3\x03\x19\xd0\x1a\xb7\x5d\x79\x8d\x55\xfe\x1a\x3e\x85\x1e\x2e\x33\xc1\xef\x62\xfd\x40\xf3\x51\x47\x86\xb2\x41\xa7\x79\x75\x80\xcc\x19\x6e\xaf\x88\x22\xa3\x08\x14\xa2\xd4\x7c\xf1\x00\x93\x93\xc4\x8b\x8e\x36\x58\x20\xbd\x5c\x27\x22\x02\xea\x27\xe5\x67\x67\xae\xd0\x9a\x6f\x93\x6f\x36\xb3\x6a\x5a\x44\xd4\x21\xd0\x55\x67\x43\x63\x70\x3d\x0f\x26\x96\xf2\x80\xca\x0c\xc0\x74\xcb\x0c\xde\x4c\x30\x20\x52\x81\x33\x39\x33\x0f\x9e\x4c\x44\x32\x17\x81\x62\x5c\xeb\x8d\xfd\xf3\x61\x52\x28\x05\x2f\x5a\xdd\xae\x83\xfd\xe1\x3c\x2a\x4a\x9e\x30\x48\x57\x22\x06\x46\xf4\x55\xe2\x5f\x22\xae\x30\x35\xa6\x10\xdb\x14\xb2\xfa\xc3\x9c\x8e\xb9\xfa\x09\x80\x12\x38\x05\x2f\x72\xf6\x1d\x40\x1e\xec\x97\xe9\x12\xde\xf2\x02\xee\xe2\x3f\x62\x1d\xee\xb3\xe9\x5c\x55\x14\x98\x82\x5f\x55\xc4\x98\xa6\x73\x65\xd5\x3a\x62\x1d\xe5\x53\x78\xf1\x4d\x75\xb6\x3e\x26\x35\x73\xb3\xd8\xf5\xdd\x52\xeb\xbb\x63\xa1\x8e\xc1\x27\x55\x1c\xf3\xb2\xd0\xc7\x00\x97\xc2\xf9\xcf\x8f\xad\xe8\xb1\x55\x8d\xce\x8f\x37\xf2\x5e\xc0\xff\x9b\x6e\x8a\x6d\xf2\x7f\xf2\x74\xf3\xcb\xd1\x3a\xc9\x8e\xcc\x6f\x8f\xc2\xdf\x1e\xd9\xdf\x1e\xd9\xdf\x1e\x99\x9f\xe1\xff\x4b\x77\x18\xde\x11\xbf\x70\x73\x97\x4d\xe6\x4a\xaa\x5c\x64\x05\x58\x3f\x0f\x99\x2c\xbc\xd4\xd5\x8e\xbd\xf8\xdb\xdf\xd8\x34\xe3\x0f\x98\x11\xfb\x96\x17\xfc\x12\xfd\x8b\xff\xf8\xc7\x0b\x08\xa8\x62\x16\x53\xca\xb3\x9f\x4b\x51\xcc\x55\x2e\xcc\x26\x64\xff\x77\xae\x20\x02\xbb\xdd\x2d\x0a\xf4\xbb\xa2\x0f\x32\xce\xd9\x37\x58\xe6\x19\xb2\x91\xc6\xb9\x29\xa9\x23\x9d\x40\xf2\xa4\x45\x27\xbf\xc3\x45\xff\x73\xf2\x96\xbe\x3f\x62\x5b\xff\x9c\x54\x77\xb5\x15\x5b\xca\x7f\x4e\xe0\x02\x4d\x34\xb7\x60\x2d\xe6\x16\x2f\xbc\x93\xa9\x71\x6d\x7b\xa4\x01\x0d\x78\xd6\x30\x7d\xfb\x5e\xb9\x46\x46\x74\xeb\xb9\x6f\x1c\x23\x10\x2b\xf0\x71\x08\x88\x9e\x4b\xb3\x43\xae\xd1\x13\x0a\x96\x1b\xf6\x1c\x6c\x52\x0a\x9d\xbb\xf2\xd0\x71\x91\xff\xfe\xcd\xf1\xf1\x84\xad\x73\xf8\x9f\xe5\xcf\xf0\x3f\x80\x1e\x7a\x2a\x52\xdf\xc6\x60\x3a\x20\x5c\x73\x96\xf7\xcf\xc4\x53\xa0\xe8\x3e\x05\x8f\x7c\x6d\x99\x7e\x5b\xaa\x38\x11\x3e\xb5\xb1\x12\x12\x49\xb4\x99\x49\x3b\x51\x4d\xe5\x21\x98\xe3\xa5\x88\xb8\x39\xf8\x1a\x75\x23\xb8\x54\xaf\x0a\xa1\xd0\x1b\x96\x79\xb5\x47\x8e\x9e\x2b\x30\x8b\x01\x0a\xc9\x0b\x82\x9c\x0b\xf8\x23\x54\x02\xc4\xec\x93\xfa\x47\x6c\xa7\x4b\xe2\x18\x07\xe6\xdc\x58\x44\x09\x08\x39\x58\xf6\x20\x96\x89\xa2\xcc\x14\xe3\x2c\xe5\x2a\xe6\x39\xac\xc0\x55\x06\xd1\xce\x8c\xf1\x66\x43\x27\x08\xc7\xd5\x65\x01\x9c\x58\x88\x2c\x08\x47\x02\x49\xe0\x83\x36\x4f\x82\x46\xe0\x9d\x00\x5c\xd4\x8d\x1f\x4e\xe7\xca\xea\x11\x12\x16\x0e\x3d\x65\x91\x4e\x77\xc4\x78\x54\x1f\x74\x69\x3d\x67\x34\xdc\x13\x8f\x37\xa9\x7f\x77\xc2\x64\x35\xb4\x06\x7c\xf3\x45\x20\xf1\x6e\x45\xf2\x5f\x0a\x15\xe9\x58\x64\xf9\x2b\xb3\x0d\xa5\x7b\x77\xa0\xfd\x20\x73\x3f\x19\x70\x4a\x99\xcb\x8d\xbc\x85\xa6\x78\x27\x30\x65\x46\xa7\xc2\x50\xde\x66\xe7\xec\xdf\x2a\xbf\x76\x14\x4c\x5b\x7b\xe9\x3f\x3f\x29\x22\x26\xc4\x75\xda\x37\xe7\xe3\x5d\x10\xb8\x65\xc3\x13\x17\x0b\x45\x1b\x87\x8c\x13\xab\xa7\x2d\x0b\x50\xc8\xcc\x44\x5e\xcc\x15\xdd\xc0\x13\xb6\x12\xdc\xd8\x79\x13\x16\xe5\xf7\x78\x18\xe3\x75\x5f\x3c\x68\x8f\xc1\xb1\xf2\x36\x00\x86\xad\x14\xee\x9d\xc4\xf8\x35\x4e\x19\xd8\x08\x30\xe8\x7a\xa1\x3b\x53\x05\x06\xab\xf5\x40\x7c\xc4\x38\x58\xb5\x94\xba\xc2\x5a\x28\xd6\x03\x23\xb1\xc3\x40\x31\xab\xb7\x03\x3f\x30\x07\x0f\xf6\x0e\x61\x20\xc1\xe1\x08\x16\x37\x61\x69\x71\x9f\xf9\x18\x6e\x48\x59\x0f\xbe\x99\xae\x4d\xd5\x33\x10\xd0\x80\xc7\xf9\x2d\xcc\x4f\xf7\x3a\xac\x72\x91\x59\x29\x17\xec\x2b\x12\x4c\x6e\x64\x16\x1f\xa5\x3c\x2b\x76\x76\xf9\x26\x72\x09\x0a\x10\x89\xbc\x13\x6c\x96\x65\xfa\xe1\xa9\x47\xa1\xf3\x68\xe9\x7a\x61\x1f\x82\x64\x1f\xfb\xca\x6f\xa5\x97\xad\xbb\x3b\x1e\x47\x65\xdb\xe5\xf8\x68\xad\x27\x13\x45\xb6\x5b\x98\x85\xb8\x4d\x3b\x4f\x8a\x41\x49\x13\xc3\x8d\xdc\x71\x2c\xb9\x35\x17\x46\x27\x4b\x6e\x65\x56\x7f\x3d\x2c\xb9\x2d\x04\xb8\x4d\x96\xdc\xb3\x8b\xb3\x9b\xb3\xd9\xf9\xd9\xff\x57\x2b\xf1\xa7\xd9\xd9\xcd\xd9\xc5\x77\x8b\x77\x1f\xae\x16\x57\xa7\xd7\x1f\x6e\xaf\x4e\x4e\xfb\x69\xaf\x9a\xad\xf7\x26\xf8\x11\x0b\xeb\x79\xc3\x6e\x02\xa0\x06\x26\x1b\x90\xfd\x4d\xfa\xb8\xb0\xaa\xcc\x66\x96\x6a\x3d\x81\x8d\xfa\x86\x9d\x66\xd9\xd9\x96\xaf\xc5\x65\x99\x24\x00\xa7\xc2\xcc\x9e\x93\x4c\xc0\xc3\x73\xc2\x2e\x75\x7c\x16\xfc\x0e\xd2\x11\x5b\xbb\x01\xf5\xf3\x38\xce\x44\x9e\x63\xf5\x13\xaa\x3f\x00\x0f\xb9\x54\x47\x02\xcf\xf1\x7b\x2e\x13\xf3\x7e\x7b\xc3\xbe\xe5\xd1\x9d\x5e\xad\x30\x7d\x66\xe2\x12\xa7\xd8\xcf\xa5\x2e\x38\x13\xbf\x44\x40\xf5\xd6\xbe\x4e\xce\xf5\xfa\x33\x40\x95\x07\x84\xa7\x3a\x1e\x29\x20\x75\xb7\x68\xbf\xce\xdb\x0f\x02\xea\xe5\x7b\xfc\xe9\x3b\xfc\x65\xbb\x83\xb2\x48\x9e\x20\x3d\xfe\x5c\xaf\xdb\x85\x87\xc0\xba\x26\xb5\x24\x0a\x24\x44\xc4\x2e\xa2\xd7\x2c\x97\xea\x6e\xae\x7e\xda\x08\xc5\x74\x99\xe1\x9f\xe0\x99\x6f\xcc\xcc\xa4\xcc\x37\x02\x64\xaa\x27\xec\x41\xb0\x2d\xdf\xa1\xd9\x0c\x6f\x02\xa7\x96\x02\x4b\x06\x6e\x11\xf3\xeb\x44\x2a\x73\x5a\xa4\xd2\xe6\x25\xd4\xa7\xfe\x29\x5e\x5c\x96\xe8\x90\x1f\xce\x43\xdc\x77\x9f\x56\xf0\x79\xe0\x2a\xf3\xb8\x49\x0b\x10\xa2\x93\x1b\x44\x65\xb5\xbe\x2b\x53\x4f\x89\xfa\xc2\x06\x27\x61\xb8\xef\xb5\x8c\x59\x5c\xa6\x89\x8c\xdc\xb9\xfb\xa0\xb3\x4e\xde\x67\x4c\xa0\x19\x7e\xeb\xd4\xd3\xc2\xfa\x3a\xd6\x92\x9d\x13\x20\xe9\x7a\x18\xa0\x9f\x99\x03\x9b\x49\x15\x25\x25\xc8\xcc\x95\xb9\xc8\x8e\x9c\x74\xb4\xcb\xf5\xfb\xf5\x93\x64\x7b\x12\xce\xc3\xd3\xda\xc2\xa4\xf3\x44\xaf\x65\xc4\x93\x10\xdc\xec\x51\x11\x8e\x85\xd7\x6e\x7b\x12\x13\x86\x3c\x08\xdb\xa0\x4e\x22\xad\x34\x13\x40\x04\xbd\x80\xa3\x7c\x41\xc7\xdd\x21\xed\x5e\x31\xf3\x40\xc7\x76\x85\x1c\xb9\x36\xbc\x60\x6f\x38\x5f\xb7\x55\x62\x03\x13\x13\x25\xfc\x99\x7e\x50\x22\x03\x0b\x16\x60\x1f\xa6\xa7\x4a\x83\x6d\xe2\xd4\xd9\x1c\x3e\xd9\xaa\x13\xae\x1c\x10\x1b\x33\x67\xd7\xf2\x5e\xa8\x4f\x4f\x6a\x1e\x54\x10\xf1\x68\x23\x16\xd6\x2e\x7f\xea\x23\xcb\x5d\x00\x23\x0f\x2b\x2b\x93\x12\x1e\xa5\x2e\xbc\x09\x4f\x27\x6c\x71\xf3\xec\xc2\x40\x62\x4f\x46\x96\x69\xc4\x22\x16\xd1\xdd\x27\x3f\x9a\x3d\xc8\xca\x36\x84\x71\xf6\x56\x44\x77\xec\xf6\xea\x0c\xb3\x81\x65\xc1\xcc\x51\x90\x6f\xbc\xec\x53\xe7\xdb\xad\xe0\xeb\x67\xa0\xb0\x1a\xaa\x5b\xe5\xa5\x0a\x9c\x5a\x9f\x69\x10\x01\xa2\x20\x5f\xd2\x1c\x92\x94\x4b\x03\x40\x30\x5e\x58\x35\x23\x70\xc4\xb3\x7c\x0b\xe2\x45\x65\x11\x28\xfe\x25\x7c\x29\x92\x0e\xe2\xce\x54\xc7\x0b\x1b\x27\x39\x14\xcc\xd3\x28\xcb\xfa\x31\x28\xea\x68\xf3\x18\xb8\xb1\x58\x6f\xe8\x8b\xec\xee\xeb\x3c\xa0\xd7\xd0\x21\x7f\x38\xbc\xeb\x79\x0e\xe9\xdd\x2b\xb9\xb6\xd1\x36\xb9\x22\x89\x25\x4c\xe8\x37\x76\x30\x9c\x97\xa6\xa4\x4b\x1d\x13\x4c\xcf\x71\xe1\x19\x2b\x48\x90\xf7\xc4\xe3\x2a\xc2\x26\x58\x1c\x20\xd4\x6b\x76\x84\xe0\x31\xd3\x2b\xf2\x26\xa6\x69\x22\x81\x19\x3a\x46\x12\x7a\x60\xcf\xc8\xab\xe8\xf8\xb0\x34\xdb\xd8\x80\xe4\xe3\xd2\x02\xf1\xba\xc4\x78\xe1\xc0\xc0\x0c\x86\x05\xb0\xc1\x2d\xee\x79\x37\x99\xda\xb3\x2b\xa6\x75\xb4\xc7\x45\x93\xab\x94\xb0\x15\xd2\x3e\xf2\x15\xe0\xb5\x6e\x13\xf2\x23\x9e\x44\x25\xc5\xc9\x40\x2e\xdf\xaa\xe0\xf7\x23\x08\x7d\xd4\xcf\x4c\x74\xd5\xeb\x5f\x37\x32\x0f\x55\x57\x74\x09\x5a\x8f\xf5\x29\xf4\xbb\x17\xd7\x89\x5e\xc2\xca\xe9\x46\x09\xf6\xdc\x58\xe6\xb8\xce\x64\x3c\xc6\xde\xb1\x63\xf2\xc1\xfd\xb4\xaf\x81\x1f\xac\xeb\xc7\xd5\x64\xd7\x3d\x23\x21\x83\x1a\x73\xe3\x38\x0a\x84\x15\xa9\xaa\x56\x9f\x27\x05\xc9\x78\xc0\xb2\x72\xf7\x53\x87\x9f\xa1\xda\x97\x83\x26\xba\xc9\x14\xb3\x67\x2c\x3d\xb9\x4c\xff\x24\x1f\x40\xf7\x81\x47\x99\xe3\xfc\xe8\xf6\x2c\xaa\x58\xc4\x8b\x47\xf4\xe1\x94\x7e\x3b\xac\x2f\x6e\xa4\xb1\x79\xe0\x03\x54\x47\xc6\x54\x88\x79\x16\xfb\x7e\x4c\x60\xbf\x47\x3c\x05\x37\x3c\x84\x35\xee\x5f\x4f\x6d\x1d\x57\x3e\xbb\xc8\x9c\x97\x98\xf3\x8f\xf8\x6d\xdd\xa2\x81\xb3\x6f\x1d\xb9\x45\x8a\xf0\x6e\xb3\x72\xfc\x72\xad\xe4\xdd\x0c\x5a\xbb\xf5\x15\x66\x0f\xf0\x43\x16\xd7\x73\x9c\x1d\x65\xa1\x7d\xb4\x07\xfa\x73\x06\xb4\xc3\x61\x46\x1f\x1c\x90\x67\x71\x07\x52\xc4\x9a\xdf\xf6\x10\x1a\x81\x3f\x1e\x85\x80\x4e\x33\x61\xe3\x86\x3b\x51\x38\x5e\x87\xc4\xea\x0a\x42\x58\xcc\xf5\xba\x4a\x6c\x63\xb9\x2b\x1c\x19\x19\x04\xb1\xc8\xd4\x8f\xf4\x36\xd5\x0a\x60\x49\x98\xa5\x36\x57\x54\xb8\x55\x87\x77\x91\xb5\x4a\xaa\xe3\x84\x1c\x9a\x98\x38\x23\x72\x9d\xdc\x53\x08\x35\x10\x31\x01\x5d\x49\xd3\xc0\x13\xf3\x36\xd4\x19\x12\x6c\xd9\x9b\x1d\x32\x01\x6a\x12\xe9\x99\x58\xcb\xbc\x10\x61\x76\x68\xf8\xfb\x27\x53\xb3\xad\x38\x4f\xfa\x86\xbe\x53\xcd\x76\xdf\x2b\xc8\x9c\x4f\x23\xda\xb3\x4b\x45\x7c\xe6\x7e\xd7\xbf\x18\x6a\x09\xfc\xfe\x38\xac\xdc\x77\xb8\x06\xf0\xf5\x97\x23\xd5\x57\xee\xe4\x47\xdc\x24\x11\x09\x13\xf7\x80\x46\x33\x45\xeb\x92\x67\x5c\x15\x42\xe4\x73\x45\x81\x67\xa4\xac\x0b\x59\x59\x6a\x40\x48\xf7\xb6\x89\x74\x5e\x20\x03\x14\xfc\x64\xc5\x65\x52\x66\x9d\xee\x06\x5c\x95\x8f\xa2\x9d\xe8\x1b\xa5\x13\x28\x96\xb5\x4d\x9a\x4b\x60\x0e\x76\x91\x63\x4d\xa9\x87\x8d\xab\xf9\xbd\x1d\x5d\xb0\x97\xcb\xf0\xf9\x76\xbe\xe6\x8e\x9c\xe6\xaf\xf3\x45\xaa\x47\x9c\x78\x3f\x7c\x9d\x5f\xea\x8e\x6c\xf0\xfc\xe7\x86\x4f\xb4\x07\x3e\xf1\x73\x97\x20\x0b\xcf\xef\x20\xf2\xb8\xcf\x15\x33\x88\x8d\x73\x6f\x7c\xb2\xf3\xec\x82\x55\xbb\xe1\x2a\x4e\x8c\xc9\xcb\x8b\x3a\xef\xb5\xc3\x79\x9b\x27\x51\x61\x0f\xc7\xee\xa4\x3e\xc8\x91\x59\x44\x8d\x04\xcb\x7d\xe3\x54\xcb\xcc\xec\xc5\x52\xd6\x6a\xa9\xe6\x4b\xb6\xe5\xe9\x78\x1b\x86\x64\x90\xdd\x86\xfd\xec\xf6\xcb\x69\xd8\xf6\x4f\x64\xbe\x54\xf7\xda\x4a\xae\x7f\x05\x8e\x84\xf7\xcd\x2b\x21\xa2\x33\x87\x2e\x6a\x97\xdd\x70\xe0\xa9\x03\x89\x64\xe6\xd4\x0e\x19\xc7\xe7\x8a\xe4\xe0\x11\x5d\x00\x61\x65\xe4\x5b\xcb\xd9\x6b\x97\x5d\xfc\xfa\xdf\x2c\xdb\xd6\x8e\xad\x60\x51\x01\xa5\x9d\x8e\xa2\x32\x83\xd0\x3f\xb9\x27\x99\xc0\x4b\x38\x1f\x45\x24\x03\xa6\x87\x03\x6c\xa1\x9d\xd8\x66\x26\x39\x7f\x74\xa5\x53\x37\xe0\x86\x44\x61\x7b\x77\xe9\x93\x5e\x59\x96\x17\x2c\x2f\x44\xda\x7a\xfc\x56\xac\xcb\x5d\x2a\x66\x4a\xe9\xa2\x9e\x9f\x32\xda\xbe\xe4\xae\x94\x81\x5b\x67\xc4\x65\x34\x0b\x5c\x46\x7f\xb8\xfe\x70\xc1\x52\xbe\x03\xec\x63\xa1\x19\x7e\x15\x08\x47\xeb\x07\xd5\xbe\x19\xa8\x76\xbe\x7a\xaa\xe0\x98\x5a\x10\x75\x7b\x7c\x82\x6a\x6c\x1a\x8b\xb0\x66\x68\x49\x9a\x33\x2b\xd3\xc9\x51\x9a\x70\x15\xc0\xdb\xf3\x29\xab\x55\x1f\xe2\x19\x5c\x64\x93\x10\x63\xd0\x00\xf0\x57\xd0\x5a\xc8\xca\x56\x00\x34\xf0\xee\xd8\x05\x75\x18\x84\xa1\xf3\x8c\xe8\x05\x76\xbe\x47\x15\x18\xd4\x44\x40\xf6\x0c\x0b\xcb\x70\xc8\x1e\x9e\x03\xe8\xb6\x93\x01\x9c\x47\x09\xcf\xf3\x5e\x94\xce\xb3\x50\xc9\x07\x59\x8b\xfb\x8f\xaf\x6a\x3b\x11\x46\x08\xdc\x26\xf8\x2e\x75\x1f\x03\x5b\x82\x3d\xba\xbc\xe8\x5b\x60\xef\x07\x6a\x10\x04\x7d\x20\xbe\x28\xf8\x3d\x32\x41\xde\x89\x9d\xf5\x70\xd1\x51\xc5\xb7\x62\xe2\x9c\xad\xce\x9b\x18\x80\xfe\x9a\x05\xcf\x15\xa0\x62\xdf\x85\xcd\x63\xef\xb4\x9e\x20\x3e\x93\x2a\xe7\x58\x2c\x0f\x11\x4e\x73\xf5\x4e\xeb\x29\x77\x8f\x58\x6a\x3f\x1d\x37\xf5\x0a\x09\x15\x05\x98\xc3\xda\x74\x0e\xdf\x9b\xdf\x4b\x85\xf2\x84\x72\x6b\x1e\x50\x34\x4e\xb0\xa2\xa0\x41\x56\x0d\x5f\x3f\xe4\x2c\x46\x4a\x99\x52\xe6\x1b\x08\xbb\x60\x9c\x13\xea\xa7\x2b\x05\x01\x59\x19\x57\xb9\xd9\xc3\x10\xaa\x11\xf7\x82\xfc\xb5\x15\x8c\xc1\xd9\xdb\x73\x07\x5b\xc2\x7d\x49\xd2\x1d\x1d\xbb\x2d\x78\x74\x1c\xf2\x38\x07\xb8\xf9\x08\x42\x3b\x72\x70\xbe\xe7\x69\x5f\x32\xec\xc1\x25\xee\x9b\x25\x47\xa8\x55\x7f\x51\x81\x92\x39\x68\x18\x56\x32\x62\xc3\xd1\xbb\x55\x07\xde\x38\xad\x9c\xf6\xfb\x25\x77\x06\x3b\x18\x46\x1e\x15\xfb\xaf\x9b\x80\xdb\xd2\x41\x06\xdd\x5b\xd0\x1c\xec\xa0\x10\x07\xa4\x7c\xb8\xa5\xa7\xec\x5a\x08\xf6\x11\x46\xca\x54\xf6\x91\x14\x48\x01\x05\x5d\x70\xd9\x2a\x10\x07\xdf\x3e\x53\x2b\x7d\xd8\xf9\x9f\xad\x1b\x28\xdb\x83\x46\xa5\xbd\x9d\x87\xe2\x78\xc1\xd3\xaf\x9e\x97\x56\x64\xd0\xc5\x50\x9b\xeb\x4b\xef\x6f\xa2\x64\x63\xdb\x52\x63\x92\xc1\x14\x3f\x86\xb8\xae\xb6\x48\x4c\x2f\x27\x48\xc6\x7e\xa7\xf4\x83\xc2\xf3\x98\x6a\x62\x2f\xcd\xfe\x03\x9b\x05\xe3\x42\x68\x09\x96\x78\x1a\xbe\x02\x76\xf8\x99\xfb\x37\xbb\xc6\x10\x38\xb6\x19\xa4\xc3\x72\xb0\x77\x49\xf4\x0b\x2e\xf0\x97\xb3\x09\xfb\x76\xc2\x4e\x26\x6c\x3a\x9d\xbe\x9a\x30\xc1\xa3\x8d\x6d\x11\xfe\x04\x8f\xfe\x82\xaf\x4d\xd9\x24\xfb\xb3\x0a\x2a\x00\x79\x40\x63\x9f\x58\x12\x44\xee\xbf\x15\x78\xd5\x6c\x17\x30\x35\x9b\xf2\xc8\x08\x2e\x14\x6d\xb4\xf4\x8d\x02\xe4\xb9\x88\x74\x66\xb1\xeb\x79\xa1\x33\x8b\xc3\xbd\xe7\x19\x97\x0a\x18\x2b\x78\x33\x0b\x81\x6a\x0e\x38\xeb\xc5\x2f\x7c\x0b\xfd\x97\xca\xd1\xf6\x9a\x61\xba\x71\xed\x2f\x76\x29\xc5\xd9\x1e\x32\x59\x14\xc6\x20\xcb\xe7\xea\x9a\xbd\xf9\x86\xcd\xd2\x34\x11\x6c\xc6\xfe\xce\xbe\xe5\x8a\x2b\xce\xbe\x65\x7f\x67\x27\x5c\x15\x3c\xd1\x65\x2a\xd8\x09\xfb\xbb\x19\x36\x53\xde\x85\x36\x16\xd0\x6e\xc2\x38\x53\x65\x82\x86\xde\x4b\x8b\x71\x7d\xe5\xfa\xc5\xfd\xec\x2c\x45\xf1\x20\x84\x62\xb9\xde\xd2\x55\xf8\x27\x77\xfb\xe7\x52\xad\x13\x51\xd0\x7a\xa8\xa2\x91\xb1\x82\x23\xe8\xe9\x9b\xb9\x72\x7e\xea\x3f\x99\x16\xff\x89\xfd\x9d\x5d\x94\x49\x62\x9a\x64\x0e\x1a\xb3\x90\xde\x30\x9b\x1d\x26\xd4\xf4\x41\xde\xc9\x54\xc4\x92\x43\x7e\x98\xf9\xd7\xf1\x0d\xcc\xf6\xa2\xf4\x54\xa0\xe1\x9e\x76\x72\x6c\x87\x1c\x3d\xcf\xc2\x35\xe1\xc4\x02\x43\x6b\xa5\x13\x84\x12\xfe\x74\xbc\x11\xec\x09\x90\x69\x3f\xd0\x1b\x05\xa5\xf4\xc2\x00\x65\x7b\xfd\x4e\xf5\x2b\x35\xff\xd5\x4a\xff\x31\x48\xfd\xab\x6f\x3c\x7c\x1b\xc1\x38\xc5\xc9\xf1\xc9\x99\xf0\x90\x81\x5c\x42\xdc\x77\x3b\x90\xfc\xb0\x65\xe3\xb3\x13\xc3\xdb\xe6\x29\x8d\xd6\x68\xc1\xd7\x13\x96\x3a\x1d\x29\xbb\xa9\x5c\x60\x1b\xf7\x31\x6a\x26\x90\xb1\xf9\xd2\x02\x88\xcc\x5a\xa6\xfc\xc3\xe3\x58\x6f\xb9\x54\xaf\xa0\x0e\x4b\x9d\xb7\x67\xa0\x5a\x9e\x2b\xfb\x47\xe8\x86\xf7\xa2\x19\xbb\xa9\xfd\xab\xc6\x4e\x4d\xc2\xad\x6d\x3b\x1c\xa8\x61\xe6\x15\x4e\x3f\xe1\x73\xe8\xc7\xc6\x12\x1d\xac\x7d\x40\x7a\x63\x15\xf6\x14\xb0\xe5\x3d\x83\xdc\xa0\xd8\xba\x53\x2e\xfb\xb1\x2a\xf1\x5a\x19\x62\x2d\x07\x69\xe1\xd6\x1a\x7b\x4b\x2f\x31\xcc\x7b\x36\xc7\xa4\x4c\x8e\xcd\x51\x79\x7c\xa1\x95\x60\x3c\xcf\xe5\x1a\x59\xef\xc0\xa1\x86\x22\xb2\xd6\x28\xbb\xa9\x3e\x19\x82\x23\x08\xec\x33\xd3\x24\x44\x4c\x17\xe6\x14\x36\x53\x90\xec\xe6\xca\xfc\x82\x2c\x02\xc8\x9e\x92\x8e\x1c\x1d\x6b\x23\xee\x71\x5b\x17\x5d\x88\x41\xe1\x2d\x0b\xac\x8f\x9a\xe1\x80\x05\x47\x3b\xf1\x80\x88\xdb\x45\x40\x0c\x4a\xa5\x59\xd6\x28\x84\xd3\x2c\x45\xa2\xd5\xda\xac\x8a\xae\x43\x18\x4e\x81\x27\x6a\x02\x16\xd6\xd9\x02\x63\xac\xd0\x57\x68\x4a\x8c\x9d\x22\x63\xef\x52\xcb\xcb\xa5\xb1\xe3\x5c\xb4\xc7\x59\x23\xd4\xb9\x2e\x9e\x8a\xc3\x60\x4b\xb7\xe6\x0c\xd6\x99\x05\xce\xb9\x48\x22\x1a\x2e\x9e\xc3\x09\x7b\x34\x6c\x53\xf5\xe6\x5b\xb4\x7b\x1f\x29\x52\xd9\x60\xec\x18\xb0\x1e\x3f\x67\xea\xc5\x90\x84\x8c\x77\xb3\xb3\xf3\xda\xf7\x9a\x09\x19\x2d\x59\x1b\x37\x67\xef\x4f\xdf\x2e\x3e\xdc\xde\x34\xbe\x67\x4a\xa3\x3f\xed\xc9\xc9\xe8\x1c\xbd\xa7\x40\xa5\xff\x8c\x2a\x62\x0b\xbd\xb2\x09\xfa\xc3\x2f\xc8\x86\x8e\xdb\x30\xf0\x63\x11\xbc\x6f\x43\xbd\xb3\xe6\xc2\xe9\xa4\x19\x51\x0b\x8a\x76\x0e\x6b\x6c\x7d\xc0\x3e\xa8\x77\xf8\xf3\x4b\x9d\xc8\xa8\x1f\x4b\x6d\xaf\x2b\x63\xd7\x34\xc1\xa9\x4b\x01\xc9\x05\xe4\x72\xa5\x46\xe1\x0b\xa9\x10\x51\xe1\xa3\xf9\xcd\xce\xfd\xaf\xc6\x6f\xee\xf7\x81\xa0\x27\xd4\x0d\x1b\xc8\x83\x3b\x7c\x00\xdc\xad\xc0\xdb\x0c\x72\x25\x68\x67\x82\x6f\x15\x70\x33\x11\xa7\xa8\x4f\x65\xe4\xe1\x80\x7e\xd8\xe8\x84\x3c\xa2\xc8\x81\x3d\x57\xa9\xc8\x22\x0d\xb8\x47\xa4\x57\xd1\x2c\xda\xc8\x24\xf6\x9a\x60\x2f\x21\x51\x04\xe0\xdc\xaf\x48\xde\x56\x38\xfc\x8a\x2d\xbe\xe7\xd6\xb5\xcb\xee\x2d\xee\xee\x83\xb0\x5f\x4f\x89\xfc\xee\x5b\xf6\x3f\x11\x42\x19\x87\x82\x58\xeb\x6a\x48\x04\x30\xbc\xc3\xf6\x8c\x0a\xaa\x98\xeb\x96\xe4\x9e\x22\xff\x70\x2d\x6a\xf3\x4a\xcb\xac\x3e\x94\xc0\x65\x8e\x9e\x6c\x84\xe1\xe5\x02\x9a\xb3\x15\x1c\x6d\x31\xcf\x2c\x4c\x93\x3a\x57\x1e\x7b\xf1\x22\x0f\xed\xb2\xd6\x79\x46\xff\xb7\xc5\x96\x4f\xd8\x8b\x4a\x47\x5f\x00\xd7\xb5\xd2\x50\x1f\xc5\xc7\x2b\x43\x03\xcb\x75\xc2\x64\x31\x57\xe6\xd5\x64\x56\x66\x26\x12\x71\x6f\x5a\x17\xc6\x67\x08\x31\x68\x7d\x17\xb6\xdb\x90\x9e\xc4\x2d\xab\x05\x2d\x1b\xda\x84\x59\xc8\x99\x8c\x81\xe1\x58\xe4\xc6\x6e\x04\xb5\x27\xf1\x8b\xd9\x00\x12\xc2\x8f\x08\x2d\x8b\x85\xb2\xed\x03\xc4\x19\x2a\xed\xcf\xd5\xd9\x0a\xa8\x05\x80\xd0\x20\x8e\xd1\x0b\x60\xf5\x7f\x1c\x81\xa5\xa4\x78\x8c\x26\x9f\x88\x9d\x08\x52\x67\xc6\x9d\x24\xee\x45\xb6\x2b\xc0\xa9\x0e\xe3\xaa\x04\x2f\x36\x4c\x16\x13\x60\x1e\xb5\x27\xe5\x5c\xf1\x38\xa6\x8c\x6c\x2c\x2e\x78\x50\x76\xce\x33\x7d\xbe\xd4\xf7\x7d\x86\xed\xa1\xd8\x59\xdc\xd5\x69\xc2\xd5\x02\x6f\x90\xcf\x80\x9e\x0d\x84\xb3\xbb\x60\x14\xe5\x72\xe1\xd8\xd2\x9e\xa4\x9d\xee\xbc\xbf\xb2\xe0\x61\x7a\x5c\x94\x4b\x5b\xd1\xa4\x02\x8e\x5e\x7a\x62\x0d\xe7\x27\x23\xe4\x52\xc6\x2c\xba\x63\xf8\x29\xe0\x81\xb5\xbc\x86\x72\xb2\xab\x75\x1f\xb2\xd6\xae\x80\x5f\x2b\xf6\x71\xc8\xcc\xd7\xee\x90\xfa\xb4\x8f\x87\xdd\x35\x2c\xc4\x47\x41\xef\xf6\x34\xeb\x79\xe1\x77\x9d\x7e\x94\x26\x0c\xcf\xf6\x36\x88\xb0\x13\x78\x1f\xfd\xa0\xce\x85\xd5\x2e\x8c\x1e\xbe\xc3\x74\x0b\x42\xfd\x29\x63\x04\x70\x4e\x0d\xf5\x94\x78\x4a\x0f\x68\xd7\x94\x9d\x29\x66\xcd\xbd\x09\x7b\x81\x0b\x2b\x7f\x41\x2e\x60\x52\xd7\x27\xb8\x4a\x4c\xbb\x87\x48\x10\xea\x30\x2f\x4c\x45\xf3\xdb\x0d\x23\x71\xbd\x8c\xb9\xcf\x3a\x2e\xdf\x4a\x48\x85\x7b\x0c\xdb\x09\x46\x71\x97\x58\x80\xcd\xe4\x08\x9c\x91\xd4\x5d\x88\x26\xf8\x0e\xdb\x78\x23\xfb\xd6\xfe\xd0\x0c\x51\x5a\xd2\x7d\x6a\x3f\x67\x3a\x9b\x2b\x5b\x1a\xb9\x84\x73\x94\xe8\xab\x17\x15\x64\xe6\x90\xcd\x1f\xac\x54\x08\xc6\x5b\x55\x46\x10\xfb\xf4\xb4\xde\xf5\x53\x00\x70\x48\x4b\x87\x01\x05\x1d\x08\x5f\x9b\x31\x3c\xcc\x02\xdf\xe2\x35\x5f\xa7\xfe\x4d\x12\x33\x28\xb2\xb0\x4c\xc3\x41\xd6\x5c\x5e\x02\x5f\xf6\xaa\x34\x87\x51\x40\x2a\x3e\x57\x66\xf0\xd8\x4a\x42\xf6\x04\x8d\xcb\x5c\xbd\xd7\xb9\x25\x69\xc9\xfd\x78\xd8\xd0\x3e\x0d\xdb\x0b\x27\x4e\x49\x7f\x78\x0b\x97\x36\xc5\x5c\x90\x6e\xcd\x5d\x2d\x90\x2e\x49\x4c\x4b\x3b\x5d\x66\xbe\x53\x11\x57\x73\xf5\xdf\x66\x78\xe0\x39\xc5\x95\x9d\x56\xbd\xc2\x2d\x0c\x33\x08\xc1\xaa\x8f\x58\xe8\xcb\x7f\x7b\xf5\xf1\x15\xa6\x37\x95\x39\xe8\x01\x4f\xaa\x17\x88\xd3\x97\x28\x93\x04\x90\x00\xb6\x07\x8e\xe3\xc8\x57\xd1\x8b\x84\xa3\x47\xdd\x42\x55\x4d\x8c\x21\x1b\x7d\x98\x63\x7d\xc6\x22\x5e\x44\x9b\x23\x6b\xcb\xd1\x31\x66\x6f\x3f\x9a\x3e\xcc\x43\x32\x96\x56\xbb\xc4\x82\x79\x70\x66\x5b\x47\xfa\x5a\x59\x2f\xa6\x0b\xe0\x80\xbf\xa9\xeb\x8d\x39\x4e\x6a\x5c\x9c\x88\xc4\xa9\xda\x79\xee\xeb\x56\xed\xd3\xbf\x38\x29\x4a\xa1\xf8\x56\xc4\xec\x05\x24\xe2\xbe\xb0\x93\x3f\x57\xe9\x72\x9a\xec\x56\x05\x31\x07\x9a\x41\x99\x82\x2e\xde\x9e\x5b\x6e\x11\x37\x9f\x49\x7b\x06\xbb\xf3\xa1\xd5\x6e\xeb\xb8\xb1\x71\x35\x0d\x37\x58\xd0\xc7\xe5\x46\xe7\xba\x8a\xca\xab\x0a\x74\xf0\xfc\x6e\xc2\x96\x19\x57\x20\x69\x14\x87\x46\x95\xdf\x9d\xf0\x78\x46\x5a\x3e\x9b\x99\xa7\x78\xb2\x83\x0c\x9c\xc9\x5c\x21\x87\x21\x90\xdd\xef\xa2\x44\x46\x6c\x9d\xf1\x74\x53\xb3\x83\xc4\xbd\x50\x05\x28\x63\x5f\x09\x9e\x1f\x86\x96\xc8\xea\x25\xb0\xc1\xf1\xac\x99\x82\xd7\x07\x57\x35\xd6\x69\x68\x5e\xc7\xd5\x02\x08\x49\x11\x2f\xc6\x31\x4e\xed\xe5\x45\xae\xb0\x6d\x12\xf5\x1b\x44\x80\x4d\xe7\x98\xad\x75\x1f\xfc\x00\xc7\x95\xc8\x90\x2c\xa6\xf6\x50\xc8\x84\x23\x57\x3a\x88\x22\xf7\xac\x6a\x45\x72\xcf\x1a\xe5\x3d\xd7\x14\x78\x43\x4f\x85\x4d\x44\x70\x07\xc7\x84\x94\x4b\x81\x3e\x93\xfd\xb1\x5c\xea\xc4\xf2\x8f\x9e\xbd\x65\x3a\x03\xe9\x9f\x42\xd3\x9f\x64\xdc\x65\x1d\x48\x15\x8b\x5f\x0e\x22\x01\xea\xbf\xe8\xad\xd9\x6c\xaa\x09\x14\x66\xea\x9d\x85\xd3\x29\x13\xe6\x12\x2e\xec\xcb\xb8\xf1\xad\xbc\x0e\x16\x9e\x25\xc5\x06\x10\xbc\x98\x24\xe3\x07\x75\xcb\x77\x2c\xda\x70\xb5\x0e\x5c\x13\x00\xa8\x14\xa9\xce\x50\x22\xf7\x1e\xd8\x36\x75\x66\x49\x16\x88\x3a\x80\x32\x75\x5c\x20\x01\x01\xf2\xda\xf2\x03\xf0\xf5\x3a\x13\x6b\x48\x24\x9d\xab\x0a\xf9\x09\x30\x8d\x5a\x75\x1e\xac\xa7\x8f\x3b\xe2\x69\x08\x98\xba\x5e\x83\x45\xb6\x73\x99\xf7\xa4\x2f\xed\xf7\x73\x7d\x58\x27\x4c\x8a\xe9\x84\x7d\xe5\x93\x02\x44\xa4\x95\x4b\xdd\xef\xc8\xdb\xae\xb9\xfc\xd9\x9e\xa7\x43\x93\xa9\xa9\xbd\xed\xf0\x59\x43\xa5\xba\x75\xd1\xf4\x72\x1f\x14\xbc\x28\x47\xdc\x41\x27\xbc\xe0\x89\x5e\x9f\x98\x1f\x5f\xe3\x6f\xfb\xd6\xf5\x09\x22\xf6\x2d\x4b\x9e\xf9\xbe\xb9\x39\x4d\xdd\x9e\x45\xbf\x6d\xac\xf7\x3a\x90\x13\xdd\xed\x40\x7e\x0a\x53\xdd\x52\x21\xed\xf7\x21\x27\x1d\xf4\x3e\x3d\x7d\x1a\xeb\x22\xb6\xb8\x7a\x4a\x0d\xca\xeb\xcf\xd8\x96\x13\x20\xcd\x74\x5c\x46\x22\x36\x3b\x17\xde\x43\x88\x48\x72\x2c\x43\x95\x43\xb2\xed\xa2\xad\x50\xa5\xc1\xad\xfb\xa9\x7c\x0e\x83\xd8\xe9\xdd\xf0\xdf\x76\xf8\x1b\xac\xc5\xd7\x36\xe8\xe1\xfe\xc4\x71\xca\x46\xde\x53\xae\xfa\x2a\xa7\xbc\xce\xe4\x5a\x2a\x5e\xe8\x8c\xbd\x74\x5c\x02\xaf\x9c\x10\x5d\xb7\x85\x30\xf2\x98\xa8\x0c\x11\x1e\x13\x9f\xd4\xf0\x68\x5b\xa4\xe6\x5b\x79\xc1\xb7\x69\xc8\xd2\xec\x64\xfe\x69\x64\x12\x1c\x04\x67\x9b\x80\xef\x54\xe6\x3e\x6f\x76\xae\x28\xe2\x80\xf3\xa6\xb3\x50\x66\xa0\xf3\x6e\x4e\xcb\x62\xf1\x48\xe6\x31\xfc\xf1\x38\xc7\x13\xc1\x10\xde\xf3\xb4\x9f\xcb\x89\x93\xcb\x01\x13\x07\xc9\x1d\xe1\x2d\x95\xea\xfa\xec\x17\xf2\x19\xc9\x2d\x5d\x0f\x9d\x5f\x9d\xdb\x40\x91\x7f\x0f\x56\x1e\x58\x30\x11\x48\x6a\x8b\x89\x58\xf8\xb4\x77\xc7\x9a\xb9\xc5\x2d\x01\xd4\x49\xa2\xcb\x98\xd1\xa1\x46\x61\xf8\x6c\x8a\xb7\x23\xb0\x4c\x4f\xa7\x5d\x89\x65\x23\x05\xc6\xdd\xf9\x03\xbf\x6b\xdf\x81\xf0\x59\xc7\x09\xdc\xbb\xf5\x69\x64\x9f\x6d\xea\x69\xa4\x61\xee\xdd\x71\x3c\x6a\xee\x9d\x17\x1c\x28\x2f\xc7\x39\x48\xe1\x3d\x2a\xe3\x04\xf6\x5b\x18\x40\x68\x21\xe5\xae\x04\x66\xf3\xbb\x83\xab\xb3\x3c\x10\xfd\x55\xa5\x3c\x13\xaa\x58\x40\x8d\xe3\x2a\x83\x4a\x2e\xe1\xe7\x15\x83\x69\x90\x23\xf8\xcf\x37\x1a\xfd\xfb\x96\xdf\xea\x2f\xec\x9a\x7c\x5a\xe6\xbc\x92\x00\xe2\xcd\xef\xd8\x4b\x09\x98\xa3\x20\x16\xea\x26\xae\x63\xba\xa8\x43\x8f\x18\xbd\xa0\x43\x95\xa3\x7d\x50\x87\x7c\xeb\x21\x54\x0d\xa5\x90\x7b\x8f\xb2\xf2\xcd\x51\x6b\xff\x16\x68\x5e\x5c\x54\xfe\x0d\xfc\xc4\x66\xfe\x12\xf6\x57\x91\x69\x9f\x81\x85\xce\xaa\xb0\xe0\x5e\x7b\xfd\xf1\x72\xdd\x68\x8f\xa3\x50\x74\xa8\x94\x0a\x7f\x21\x0a\x31\xf4\x28\x2c\x77\xf6\x39\xd2\x11\x42\x4a\x45\xb4\xe8\x90\xc5\x19\xd4\x94\xe0\xe1\x19\xca\xdc\xc8\xda\x65\x66\x37\xe8\x31\xf8\x2b\x28\xb5\x69\xcb\x53\xc2\xf7\x11\x94\xbb\x1e\xbc\x99\x42\x27\xfe\xfc\xa7\xbf\x4c\x65\x47\x92\x35\x34\x7d\x2c\x5c\xca\x35\xfe\x5d\x26\x85\x8a\x21\x18\xcb\xe3\xa6\x62\x9b\xaa\x78\xe7\x2b\xc7\xb3\x59\x86\x4f\x92\x91\xdd\x7e\xd5\xe6\x0b\x5c\x44\x9f\x20\xa2\xef\x0f\x59\xb7\x7d\x2b\xf1\xbe\x2e\x53\x22\x5f\xc4\x3b\xc5\xb7\x32\xfa\xa4\x6d\xdc\x49\x91\xc4\xd0\x44\xaa\x7d\x5f\x54\x2a\x16\xd1\xdd\x58\x9b\xe0\xd1\x7a\x13\x22\xba\x63\xdf\xdf\xbc\x3f\x47\x79\x61\x99\xcf\xd5\x05\x2f\xe4\xbd\xb8\xcd\x12\x17\x0e\x20\x98\x74\x96\xd8\x3d\x52\xe5\x3f\x0f\xb8\xb6\x2c\x59\xba\x35\x1c\x42\x79\x8a\xed\xee\x68\x59\x46\x77\xa2\x38\xce\xb8\x8a\xf5\x16\xbb\x71\x9c\x97\xab\x95\xfc\x65\x5a\xf0\xac\x43\xab\x02\xfd\x08\x9f\xd1\xce\xf5\x0a\x64\x85\xb7\x79\xd1\xd4\x7d\x80\x44\x6b\xd2\xb5\xaf\x18\xb7\x98\x17\xc8\xb7\x02\xc8\x46\x59\x55\xe7\x05\x4a\xc1\xdc\x65\x90\x43\xcd\x73\xca\x60\xd0\x24\xb6\xfe\x31\x30\xee\x3f\x06\xad\xf2\x21\xec\xb0\x51\x5e\x62\x74\xcb\xef\xf0\x7d\xb8\xce\x44\x9e\x4f\x58\xae\xa1\xc5\x73\x65\x73\x01\x6c\xbe\x1a\xe0\x5e\x80\xae\x38\xd9\xb1\x48\xa7\x0e\xb4\x8e\xfd\xda\xe8\x07\xf0\xd3\x87\x99\xba\x20\xa2\x5d\xaa\x42\x26\x8c\xaf\x0a\x72\xe2\x83\x36\x83\xd5\x62\xcb\xa7\x73\x05\xa1\xd8\x08\xba\x0f\x10\x09\x17\x7e\x71\x9d\xc8\xd9\x8a\x47\x32\x91\x05\x31\xc6\x41\x92\x17\x37\xfd\x35\xf7\x81\x19\xcb\x8c\xef\x78\xe2\x1f\x56\x3c\x29\x7d\x72\xf2\x51\x2e\x7a\x18\x49\x65\xbe\x40\x07\xc1\xf3\x6d\x70\x8f\x02\x94\x61\xf0\x01\xd9\xdb\x67\xa6\xf2\x8b\xda\x2d\xfa\xbb\xf0\x7f\x2b\xef\xf0\x3e\xab\xe0\x80\x07\xf9\x21\x97\x63\xf3\xc9\xed\x04\xcc\xbd\x9d\x21\x63\x8b\x0f\xae\x98\xe2\x3e\xfd\xd7\x5d\x8f\x10\x33\xe9\x78\xf4\x4f\xad\xec\x5c\xb3\x86\x11\xa3\xd7\x6e\x24\x7e\x22\x77\x46\x17\xa5\xfe\x90\xe6\x5b\x6f\xfc\xa5\xd6\xc9\xa1\x1e\x79\x22\xc5\x90\x5a\x2d\x40\x89\xf9\x90\xe7\x24\x2e\x00\xe7\xd8\x3a\x7b\xeb\x62\xee\x8e\xa3\xbe\xaa\xdf\x46\x70\x30\x6a\x02\x1c\x64\xd0\x88\x1e\xa4\x78\x9e\xb6\x80\x2e\x46\x22\xde\xa1\x0c\x44\x6b\x59\xd3\xbe\x19\x22\x08\xf8\x51\xb8\x6f\x23\xf0\xf8\xd6\x5a\x38\xca\x59\x87\xba\xc9\xb5\xaa\x9c\xe3\x2e\xe4\xfb\x76\xe3\x18\xd4\x6d\xc7\x73\xcb\x15\x79\xfe\xc8\x8a\x9f\xab\xc0\x62\x47\x4e\x3a\x9b\x52\xe0\x46\xad\xcd\x9f\x57\x59\x86\x07\xfb\xf3\x0e\x11\x75\xe8\x3d\x39\xdf\x86\xf2\x8c\x80\x05\x89\xf4\x76\x29\x95\x65\x85\x20\x27\x37\x3c\x35\x66\x96\x33\xd7\x05\x24\xec\x93\x01\x45\x7b\x6a\x63\xef\xcc\x9c\x90\x7e\x38\x3c\xb2\xf6\x3d\xc7\xc3\xf7\xdd\xd3\xea\x4f\x74\x44\x1a\xeb\x3d\x30\x17\x48\xf2\xc0\x77\x39\x48\x98\x0b\x73\x2a\xae\xd0\xb1\x5b\x6d\xff\x24\x30\x3f\x2c\x1f\xf3\x5c\xc1\x08\x21\x5f\x97\x3d\x48\xcd\xc9\x0a\x0b\x30\xb1\x62\xed\x9e\x6b\xed\x45\xde\x3e\x38\x9f\x27\x56\x93\xf5\xc6\x6a\x30\x08\xfd\x3f\x23\x3c\xd3\xe3\x04\x3e\xd0\x17\x1d\x5c\x93\x68\x31\x12\x4c\x08\x12\xb7\x5c\x88\x7a\xc2\xb6\x5c\x2a\xda\x06\x28\x88\x19\x8b\x65\xb9\x5e\x77\xba\x48\x7f\xfd\xb1\x96\xea\x3e\xf9\xa7\xf7\x85\xf7\xb2\x05\x3e\x85\xb7\xf8\xcc\xd6\x84\xee\x6b\xf3\xee\xfb\x34\x0e\xe2\xcf\xe8\x8d\x6f\x0d\x89\x35\x16\xd1\xd3\x78\xe3\xcf\x86\x78\xe3\x2d\xb6\x0b\x52\xec\xe8\x39\x6d\xf1\x37\xbf\xb9\xe9\x3f\x8d\x9b\x7e\xd0\xa2\x40\x5a\x9d\x85\xac\x1a\xe8\x3d\x2d\x7c\x24\xf3\xa4\x23\x63\x86\x56\x21\xbb\x9b\x39\xdd\xe3\x9c\x2d\x79\xf4\x0c\x54\x94\x70\x3b\x1e\xee\x0f\xdc\x03\x7e\xb9\xd6\x5b\xc1\xa0\xaa\x1c\xa5\x94\x18\x65\x31\x4e\x00\xad\x6a\x3a\xe8\x11\x23\x84\x47\x81\xeb\x14\x91\x2b\xb1\x37\xaa\x5f\x2a\xf1\xc0\xcc\x6d\x35\x09\xe1\x7b\xc1\xf4\x80\xc6\xde\x2b\x63\x1d\x56\xb0\xfe\x8e\x32\x23\x13\x6b\x9e\xc5\x90\x61\x42\x5b\x32\xe1\xd1\x9d\xf9\x6f\x68\x1f\xd5\x48\x10\x43\x9b\xad\x8f\xb0\x57\x5f\x9a\x54\x11\x92\x11\x5a\x56\x75\xd7\x3e\xfc\x79\xce\x78\x94\xe9\x1c\x9d\x46\x4e\x9a\x1a\x32\x9c\xc1\x80\xbd\x97\x71\xc9\x13\xac\xb1\xd3\xd3\x3e\x16\xbe\x56\x07\x1c\x05\x2a\x72\x4d\x34\x1b\x4d\x07\x72\x44\xc1\x30\x4e\xe7\xea\xad\x0b\x98\xbc\x61\xb7\xb9\x20\x94\x59\x6e\x79\xf8\x7b\x5b\xfa\x6c\xe6\x43\x03\x13\xd8\x69\x43\xf4\x0c\x80\x05\x59\x07\x03\x91\x77\x8f\xc4\x1e\x42\xd3\x43\x26\x65\x34\x31\xf3\x59\x20\x65\xef\x87\x05\xdf\x09\x99\xe0\xf1\x2e\x64\x43\x94\x8a\x41\x94\x8e\xf1\x78\x2b\x95\xd9\x04\x56\x2e\xd5\xdd\x34\x56\x39\x01\x21\xc7\xa0\x2a\x96\x24\xb5\x43\x30\x67\x4a\x18\xe3\x92\x67\x32\xd9\xc1\x7b\x22\xcd\xc4\x51\x50\x4f\x30\x3f\x94\xf1\x04\x1a\x10\x44\xe3\x52\xe6\x62\x55\x26\xf8\xea\x80\x77\xb9\xeb\x00\x9d\x48\xb7\x67\x13\x63\x70\x14\xa4\xe5\x13\x54\x8c\x0a\x99\x4f\x91\x3d\xd2\x88\x56\x8e\x8b\xb8\x79\xb6\xce\x0c\x40\xee\x1b\xfd\x60\x53\xdd\x1e\xb8\xc7\x32\x77\xdd\xae\x4f\x16\x65\xe9\xb7\x43\xed\x0b\xd0\x9e\x53\x01\xe5\x9e\x0b\xad\xd1\x67\x22\x76\x67\x93\x54\xd0\x1d\x12\x99\xf6\x9e\xeb\x32\xc7\x8c\x39\x33\x97\x70\x7f\x59\x47\x47\xd5\x71\xcd\x5c\xef\x64\xae\x15\x9b\x97\x5f\x7e\xf9\x7b\xc1\xbe\x84\x14\x42\x7a\x8f\x60\x7c\x0c\xf8\x3a\xb1\x74\x38\xb2\x5d\x05\x02\xc9\x3c\x1b\x33\xc2\xda\x20\xaa\x36\x5f\x1f\x40\x9e\x3c\xda\xb0\xbc\x5c\x22\x82\x91\x53\x88\x85\x2b\xc7\xfb\x7d\xae\x01\x8c\x88\x37\xbb\x6d\xfd\xff\x92\x80\x02\xca\xae\xcc\x55\xaa\x91\x9a\x1e\xa0\x9f\x4b\xc1\xb6\x3c\xbb\x03\x15\x5d\x74\xcf\x03\x15\xff\x4b\x29\xa6\xd5\xf0\xc2\xab\x4a\x7b\x28\xa0\x83\x94\xd3\x2c\x2b\x95\xb2\xb2\x60\xcc\x18\xa6\xde\xd7\x3f\x99\xab\x65\x19\xbe\x3d\x2b\xc1\x02\xbf\xb4\x20\x60\x00\x87\xad\x06\xae\x10\x6a\x14\xcf\x7d\xbb\xa6\x6c\x40\xd4\x60\xae\x9e\x38\x6c\xb0\xcf\xe1\x77\x49\x36\x98\x75\xe6\x05\xf9\x0a\xd0\xdd\x50\xb9\x1a\xa6\x03\x97\x3d\x18\x39\x97\x20\x5f\x3d\x61\xdf\xcb\x7b\x31\x61\xd7\x29\xcf\xee\x26\xec\x2d\x86\xff\xfe\xa0\x97\x6d\x3e\xbc\x06\xa1\xc4\xc1\x7e\xbc\xc7\xb9\xb1\xfa\x88\x56\xda\xad\xff\x9f\x1a\xc4\x00\xac\x2b\xf6\xfd\x3f\x13\x91\xd7\xc1\xf5\xf1\xcf\xee\x89\xd8\x13\xa6\xfe\x0d\xbc\xf6\x4f\xf9\x2a\xee\xa7\xf9\xf8\x5d\xf8\xbf\xf6\xfc\xb2\x16\x17\xd8\x9e\x74\xca\xb5\xa2\xd2\x7e\x5d\x89\xcd\x32\xae\x5f\xca\xcd\xfc\xe6\x61\x5b\x81\xd2\xc7\x63\x97\xda\x3e\x02\x74\x4f\x3f\xb5\xe3\x75\x92\xe8\xbc\xcc\xfa\x37\xff\x55\xb5\xd5\xb6\xf6\x16\xaa\x55\x58\x6c\xdb\xa5\x00\xd6\x82\xa1\xf0\x13\xfc\xda\xe2\xbf\xf5\x72\x01\x58\xab\xc3\x76\x78\x5b\x71\x8e\xc0\x59\x47\x95\xa6\xfa\x1b\xf2\x3a\x15\xc0\x38\xe5\x4d\x51\x1f\x10\xa8\xad\x30\xe7\x1a\x99\x2b\xcb\x79\x8f\x19\xb3\x59\x26\x80\x9c\x3b\x13\x20\xb5\xc8\x88\x63\x30\xd9\x05\x16\x51\xf0\xf2\xf1\xa0\x98\x30\xcb\x0d\x92\x55\xe9\xbd\xb5\x14\x42\xb9\xd1\x1e\x63\x4a\x00\x11\x75\x6d\xf4\x09\xed\xf6\x20\xac\xf4\x41\x87\x2c\x6c\xe3\x77\xc1\x5b\x10\x4c\xee\xb5\x28\x82\xd3\xbc\x66\x5a\x54\xb6\x66\x25\x42\xf5\xab\x42\xfc\xb7\xc6\xa0\x6b\xe4\x5c\x15\x07\xca\xa0\x98\xde\x53\xf8\xcb\x2f\x79\xb1\xc1\x07\xed\x56\x17\x02\xcf\x4c\x64\x09\xc2\xf5\x82\x5e\xe7\x65\xa2\x97\xa0\x71\x58\xf4\x70\x38\x46\xb4\xb5\x07\x0d\x5d\x73\xc2\x86\x9c\x0c\xe6\x34\x81\x4c\xdb\x4c\xe4\x40\xb8\xd2\x8c\x52\x0d\xc5\x27\x8f\x7b\x74\x37\x9b\x6b\x0e\xfd\xb7\x8d\xc7\x76\x53\x14\xc3\x6c\x6b\x00\xab\x9e\x3e\x22\x83\xa6\x21\x31\x42\x64\xd1\x14\x06\x46\xbe\xd8\x5a\x7f\xad\x94\xfe\x5c\xcd\xf0\x93\xe0\x12\xe0\x5e\xe5\xca\xe1\x41\x49\x35\xd9\xed\x3f\x4c\x5f\x65\xb3\x10\x81\x48\x1e\x82\x89\xf7\x65\xc2\x63\x60\x02\x59\x8d\xaa\x90\x99\x60\x0a\x50\x08\x73\x95\x97\xcb\x23\x4f\x4c\x62\x5e\x71\xf7\x40\xa6\x93\x8b\x94\xc3\x53\x06\xf8\x8a\x8e\x5a\xae\x61\xf4\x4c\x7a\xb5\x1a\x4b\xe0\xc7\x13\x3a\xfc\x21\x57\x12\x33\xe3\x5d\xdf\x5d\x39\xe6\xb1\x06\xaf\x68\x0b\x57\xc2\xcb\xae\xef\xbc\x00\x3d\x2d\xc8\xc0\xbc\x42\x14\xc5\xe7\xbe\xc0\xc3\x68\xe8\xd0\xab\x1b\xe2\x69\x73\xf5\x2f\xf6\x6e\xe8\x06\x15\x8f\x58\xe9\x66\x64\xcc\x15\xd5\x09\x76\xae\xb4\xcd\x3e\x21\x03\x23\xb0\xbb\x51\x8d\x25\xdf\x56\x2a\xb7\xb8\x96\x50\x54\x45\x53\xba\x2c\x7c\x7a\x2f\xf3\x80\x6e\x1d\x6a\xbb\x16\x82\xbd\xc9\xc4\xea\xcd\xc7\x4c\xac\x16\x76\xa6\xa7\xd0\xa1\xa9\xe9\x51\x93\x74\x7d\xe0\xe2\xc8\x53\xad\xda\xc9\x0f\xf7\x90\x93\xd6\xba\x84\xe5\x04\x7d\x92\x2b\xe6\xf5\x65\x4d\x7f\x80\x01\x42\xc4\x75\x36\xf8\x46\xcb\x3e\xf9\x35\xd7\x85\x04\x1b\x00\xb5\xea\x90\x21\xfd\xe7\xbf\xde\x2a\x63\x36\xe4\x7a\xbb\xa9\x42\x66\xec\x61\xcf\x95\xbb\xf0\xba\x71\xa1\x9f\x16\x9d\x0e\x13\x98\xa7\xfc\x41\x11\x8f\xcd\x28\xd7\xd3\xb0\x6b\xad\x06\x20\x0a\xae\xb5\x06\x06\xce\xef\x32\x65\x3d\x7d\xd2\x29\x59\x4e\x02\xfd\x7f\x9e\x24\xa1\xa6\x85\x8f\xb4\xcd\x95\xcf\x4b\x35\x56\x6b\x92\x58\x17\x5e\xc5\xde\x70\x92\xc3\x79\xc1\x0b\x31\xb1\xa4\x2b\x44\x57\x48\xf1\xb0\xa3\x25\x07\x71\x69\xa7\x62\xb6\x6f\x37\x3f\xd5\x23\xf2\x57\x96\x17\xbd\x27\xf2\x8c\xd5\x2e\xee\x44\x03\xce\xbc\xb7\xad\xed\x91\x8e\x80\x52\x02\x36\xb3\x3d\x65\x23\x9e\x65\x16\xe5\x4f\xb5\x32\x4b\x38\x1e\xbe\x4a\x3a\xda\xb9\x11\xd1\x5d\xaa\xa5\x1a\x7d\x16\x55\x28\x2e\x60\xb1\x17\xcc\x97\xe6\x5e\x87\x83\x2e\xc7\x8a\x3d\x89\x1d\xc9\x01\x5e\x61\xa1\xa1\x9e\x8c\x8d\x33\xa7\x55\xdd\xbd\xec\x9e\xda\x7f\x21\xfc\xdd\xf0\x0c\xbe\xd8\x96\xf8\x50\xed\x56\xe1\x2d\x8e\x9d\x0a\x13\x28\x6f\x64\x7f\x0d\x1c\x6c\xce\x2a\x14\x86\xad\x43\x0a\x2e\xc8\xdf\x3c\x43\xbf\x79\x86\xfe\x87\x7b\x86\x3e\xa5\x5b\x08\xb0\x31\xcf\xe9\x13\xea\x09\x90\x1f\xb0\x1d\x5d\xad\xa3\x73\x1c\x5b\xad\xe3\x49\x20\xbb\x1d\x64\x3a\x36\x81\xfe\x96\x08\xc3\x8c\xcf\x92\x47\x77\x42\x75\xc6\xe8\x2d\x7d\x51\xa7\x02\xea\xd3\x22\x58\xda\xd8\x97\x82\x5f\xf7\x43\x59\x3c\xd4\x89\x48\x83\xdb\x08\x41\xcc\x3e\x01\xdb\xd3\x74\xfc\x08\x40\x63\x3a\x73\xc4\xd6\x39\x65\xe1\x61\x30\x12\x69\x92\x10\x2c\x55\xa3\x82\x1e\x8a\x89\xb3\x15\x2f\x52\xad\x93\x56\x68\xdc\x93\x0e\x60\x23\x51\x66\xe8\xe0\x9d\xa1\x31\x9a\x87\x80\x31\x3b\x8a\x3e\xe9\xc2\xa7\x68\x60\x3e\x06\x68\x61\xc0\x6a\x8a\x4b\xc8\xa5\xf4\xc3\x11\x08\x1c\x72\xe7\x70\x21\x8c\xd8\x52\x44\x1c\xa4\x57\x2d\x78\x2f\xe2\x2e\xfb\x24\x24\x45\x6a\xa4\x83\xe4\xcd\x7a\x3a\xa2\x96\x50\xee\x42\xb6\x09\x5f\x8c\xdd\x5c\x35\x0b\xc1\x42\xcb\xb1\xe5\x16\x49\x62\x69\x17\xf7\x49\x0a\x5b\x8e\xe9\x05\xe8\x1f\x0e\xbb\xe1\x5a\xcf\x9d\x33\x2a\xe8\x04\xca\x19\x7e\x90\x7e\x0f\xe9\x38\xdb\x81\xc8\x9d\xb9\x9a\x39\xa5\x59\x8f\xfd\x72\xc8\x3d\x0c\x97\x22\x66\xb1\x31\x35\xc8\xe5\xe8\x5f\x2e\x13\x96\x97\xd1\x06\xd8\x2a\xab\xe7\x54\x78\x6e\x35\x77\xec\x64\xae\xcc\x83\x08\x5c\x2d\x5b\x0e\x79\xf1\x0f\xc6\x58\xcd\xe5\x5f\x85\x83\x67\x11\x79\x57\x88\xc8\xc2\x87\x93\x56\xad\xe8\x35\x4b\x1c\x8a\x00\x0b\x8f\x29\x29\xd3\x98\x17\x62\x3a\xf7\x68\x1b\x89\x9e\x4e\x8b\xf2\x20\x93\x39\x0f\x3b\x16\xe2\x18\x6b\x27\x6d\x22\x57\x22\xda\x45\x0d\x1d\xa0\x7e\x9a\x88\xdf\x9e\x6d\xbf\xae\x67\x1b\xb2\xec\x62\xce\xe0\x98\xa1\xa5\xa6\x5e\xf9\x9f\x1f\x36\xb8\x82\x05\x2d\xc9\x47\x8c\xf3\x27\x7c\x76\xb6\xd8\xc0\xe3\xec\xf9\xc1\xef\xa0\xfe\xeb\xcc\x3f\x6c\xfd\x65\x1d\x50\x20\x34\xcc\xc2\x30\xb8\x58\x84\x4b\xc7\x18\xb4\x83\xc3\xfa\xdd\x2c\x33\xbf\x2a\x70\xd2\x90\x87\xab\xb1\xb8\x1d\x5c\xe9\xc2\x5a\xda\x4a\xe0\x7d\xd7\x63\x71\x07\xac\xee\xbc\x78\x91\xbb\x51\xaf\x9e\x80\x16\xfb\x3f\x53\xbb\x83\x12\x30\x77\xa9\x58\x94\x59\x72\x10\xdc\xf8\xf6\xea\xfc\xd8\x59\x1b\x60\x39\x77\xea\x1e\x15\x35\x71\x66\xab\x0a\x2c\x62\x82\x83\x46\x3a\x61\xcb\x72\xb5\x02\xfd\x12\x02\x86\xda\xc3\x08\xb4\xe1\xcb\xbc\xb0\xf7\x09\x32\xcd\xf0\xbc\x98\x2b\xad\x04\x9b\x7f\x71\x3c\xff\xc2\x5c\x65\x19\x8f\x0a\x91\x21\xc9\x40\xc2\xf3\x82\xe5\x62\x0d\xa6\x16\x55\x7a\x7b\x75\x0e\x59\x89\xc5\x06\x8b\x73\x4f\x56\xcc\xf7\x44\xce\x67\xd0\xfa\x01\x82\x6a\x15\x68\x5e\x41\xdb\x5f\xf2\x9c\x49\x35\x57\x1f\x4d\x11\xc7\x6b\xad\xd7\x89\x98\xda\x09\x99\xbe\x25\xd7\xe3\xc7\x57\xd8\x02\xf8\x79\x08\xeb\x37\x17\x22\x57\x5a\xc9\x88\x27\x90\x90\x33\x57\x60\x35\x4f\x4c\x67\xc0\x35\x3a\xff\x62\x3a\xff\x82\x41\xf8\xb4\x60\x3c\x8a\x44\x5a\x88\x18\xc5\x45\xcf\x14\x4b\x01\xbf\x18\x89\x09\x2b\x04\xdf\xe6\x96\xd2\x99\xa5\xe6\x8d\x09\x4f\x43\x26\x15\x21\x9d\x96\x52\xf1\x6c\x87\x60\x26\x94\x0b\xa7\xe4\x8f\xdd\x5c\x89\x5f\x80\xfe\x53\x02\x03\x68\x99\x3b\x5a\x1a\x12\x26\x30\x5d\x9e\xa9\xdd\x94\x7d\x8f\x0c\x0d\x48\x81\x7a\x7b\x75\x6e\xe9\x8d\x28\x07\x74\xae\xf2\x68\x23\xb6\x82\x7d\xdc\x14\x45\xfa\x71\x82\xff\x9b\x7f\x84\x88\xa3\xd2\x0c\x3f\x9d\x30\x33\x45\xc6\x50\xb5\x78\xf9\x64\x07\x2a\xae\x65\x4a\x92\xef\x73\x05\x5c\xec\x59\x88\xee\x35\xa3\x0d\x35\x06\x4f\xf0\x0a\x2e\xdc\x9c\xe2\x20\xaf\xf8\xc6\x0c\xce\xff\x65\x67\x2b\x5f\xa5\x19\x40\xab\xee\xe5\x5a\x05\x06\x49\x0e\x29\x5b\x53\xf3\x83\x99\x62\xdf\xdf\xdc\x5c\xb2\xef\x4e\x6f\xac\xb1\x73\x7b\x75\x8e\xeb\x02\xe8\x54\x18\x67\x7f\xae\x4f\xf1\xcd\x2e\x15\x7f\xf9\xf3\x5f\xe6\x8a\x59\x95\x70\x65\x47\x1a\x77\xf4\x04\x29\x61\x01\xef\x04\x81\x59\xa0\x72\x86\xfa\x50\x72\x87\x9a\x9f\xa1\x75\xfe\x40\xde\x02\xb8\xa3\x12\xad\xef\xca\xd4\xb9\xb9\x43\x3b\xcc\x54\x78\x7b\x75\x0e\xa5\x03\x9d\x52\xb1\x01\x05\x33\xe1\xbc\x2f\x30\xf1\xdc\x36\xc6\xfc\xf7\xbd\x96\x31\xe3\x6a\x67\x7e\x8b\x45\xc3\xb2\xcc\xc4\x4a\x67\x62\x62\xbf\x69\x0a\xe0\x85\x5c\xca\x44\x16\x3b\x38\xa5\xac\xb2\x7c\x6a\x39\xf2\x4d\x01\xe6\x35\x43\x00\x6f\xb3\xc0\x50\x48\xf6\xe5\x6d\x1e\x22\xc0\x61\xd2\x9c\x3a\x21\x3e\x74\xcc\x6f\x97\x99\xe0\x77\x66\x75\x53\x09\xd3\x57\xa4\xda\x2a\xde\xe0\x1d\xb3\x2a\x55\x84\x4b\xc3\xb4\x81\x56\x3f\xbd\x9c\x92\x5d\x20\xdf\x6f\xc3\xe5\xab\x95\x8c\x24\x4f\xe8\xe4\x58\x96\x2b\x90\x8d\xe1\x39\x49\x16\x21\xf8\xd0\x14\x02\xaf\x0c\x2b\x99\x8f\x0b\x6a\x29\xd6\x12\x01\xc7\x0f\xb2\xd8\x60\x5e\xc1\x14\xe7\x99\xa7\x32\x9f\x46\x7a\x0b\xfb\xed\x1a\x96\x52\x4e\x8f\x5e\xc0\x81\xd7\xd6\x39\x7b\x69\xa1\x76\xdb\xb4\xd8\xd1\xda\x7b\xc5\xb6\x72\xbd\x29\x40\xc8\x05\x6a\x07\x48\x84\xdc\xa6\x09\x3c\xfa\x28\xc2\x68\xf1\xbe\xb9\xd8\x72\x55\xc8\xa8\x2b\xa6\xd4\x2a\xca\x3d\x0c\xe3\xb9\xdc\x15\xfd\x7e\xbc\xf7\xc4\xb3\xcf\x91\x42\x3f\x38\x91\x59\xfd\x40\xa6\x33\x10\xe4\x65\x02\x02\xff\xba\xe8\xeb\xbe\x27\xd4\xc7\x99\xda\x7d\xf4\x24\xa4\x5c\x05\xda\x57\x3d\xb5\xdb\xfd\xcf\x13\x4d\xb3\xc6\xf8\x5c\x01\xaa\xd3\x1c\x18\x24\x07\xdb\x7b\xc7\xb8\x2b\xc5\xcc\xec\xa5\x5d\x34\x89\x5c\x42\xdd\x74\x56\xe4\x2c\x2f\x53\xc8\x27\x28\x34\x4b\x79\x74\x77\x5c\x2a\xf3\x3f\xe6\x30\xc4\xed\x9e\x87\xe4\x44\x73\xa5\x57\xac\x2c\x70\xe3\xd8\x25\x0c\x4e\x91\xc0\x15\xe0\x1f\x68\x5b\x51\x6c\x74\xec\xf2\xc2\x4c\x99\x30\x7e\xa6\x45\xa7\x44\x2f\xfd\xfa\x0d\xbb\x34\x15\x9a\x45\x4c\x75\x73\xd7\x7d\xa9\xd8\xc9\xbf\xfc\x0b\x7c\xdf\x0c\xee\x3b\xad\xd9\x4a\x6b\xf6\x0d\x9b\x4e\xa7\xff\x89\x7f\x33\x85\x72\xb5\xa3\x7f\x71\xb5\x9b\x9a\xe2\xde\x65\x7a\xfb\x72\xa5\xf5\x2b\xfa\x3b\xc8\x26\x9b\xff\x90\x2b\xf6\xd2\x7c\xe9\x16\xaa\xba\xd1\x2f\xe7\xe5\x97\x5f\x7e\xf5\xef\xe6\xab\xaf\xd8\xdf\xf0\x3b\xc1\xd7\xff\x11\x36\xf5\xab\x3d\x4d\xfd\x03\xbf\xe7\x43\xda\xca\xbe\x81\xbb\xc6\x14\xd0\xdb\x46\x99\xbf\x7c\xa7\xf5\x14\x5e\xff\x61\xeb\xb0\x58\xf3\x0d\x6c\x45\xf0\xad\xff\x0c\x9a\xcd\x6c\xbb\x7f\xbf\xa7\xdd\x88\xaa\x77\x2d\xc7\xe2\xdf\x69\xfd\x72\x3a\x35\xe7\x16\x8d\x2b\xb6\xfa\xe5\xab\xea\x40\x43\x07\x9a\xed\x37\x1f\x9f\x61\xf3\xdf\x9e\x5e\x9f\x5c\x9d\x5d\xde\x7c\xb8\x7a\xf5\xc6\xf6\xc0\xcf\x40\xf0\x7b\x66\xc5\xad\x5d\xc3\xff\x75\x4f\xc3\xbf\xd3\xb6\xcd\xd0\xe8\x37\xdf\x30\x9c\xcd\x74\x39\x7d\xa7\xf5\xdf\xa6\xd3\xe9\x3f\xe8\x63\xae\x76\x13\x73\x31\x99\xef\xa4\x78\x94\xbf\xe7\x59\xbe\xe1\x89\xe9\x53\xd0\x06\xd7\x89\xd6\x12\x6d\x71\x72\x55\x2b\xec\x56\x6d\x7d\x71\x50\x19\x4c\x2c\x7c\xeb\xff\xf9\x86\x29\x99\xf8\xe9\x0b\xea\x80\x79\xba\x01\x6a\x89\xe8\xce\x6d\x17\xa7\xd2\xb9\xdc\xb1\xb4\xbe\x71\x31\xef\x6c\x67\x15\x0a\xcc\x71\x3f\x57\x2f\x5a\x4e\xf4\x63\x63\xda\x4d\xe1\x03\x73\x41\xbd\xb0\xfa\xed\xf6\x5a\x70\xca\x5a\x38\xb2\x10\x88\xc6\xdd\xaa\x28\x47\xad\xcd\x3e\x74\x17\x5e\x40\x56\x05\x66\xe7\x8b\xe3\x17\x94\x28\xe4\xab\xa8\x12\xc9\xcf\xbf\x58\x69\x3d\x5d\xf2\x0c\x5a\xf7\xcb\xf1\x6e\xfa\xd7\xf9\x17\xd8\x1f\x34\x3e\xd0\x30\x82\xc2\xe7\x5f\xc0\xa7\xb0\x1c\xe6\xea\x0f\xd7\x1f\x2e\xe6\xea\x9b\x6f\xbe\xf9\x06\x47\xcb\xfc\xbb\x25\xf6\x62\xae\x2b\x38\x6e\xd1\x4e\x29\x73\x2b\x29\x29\xd6\x65\xc2\xb3\xb9\x6a\x0f\xd7\xc4\xc2\x1f\x9a\x13\x1f\xbc\xa1\x75\x36\xb1\xea\x16\x20\x52\x66\xcf\x38\xf4\x4d\x7e\xfc\x7f\x4d\x93\x3f\x92\x89\xe8\x0e\xf9\x70\x08\xa6\x76\x31\xbf\xb1\x4b\xd5\x0c\xb6\x59\xbf\xde\xce\x5a\xc9\x44\xd0\xc6\xb5\x8b\xfb\x52\x64\xb9\x56\x7e\xcd\xd0\x83\x00\xb8\xcd\x20\x00\xc0\xbe\x61\xaf\xff\xb3\xf6\xa9\x99\x07\xfb\xe1\x57\x95\x93\x80\x31\x5f\xd4\xfc\x0b\x68\xf5\xfc\x8b\x37\x6c\xfe\x45\xdb\xba\xa9\x36\x6c\x8a\x4d\x99\x7f\x31\xf1\x05\x40\x33\x2e\xf8\x16\x0b\x29\xbf\xfc\xf2\xf7\x11\x36\x01\x53\xd7\x82\x6f\x9a\x26\x75\x7f\x31\x68\xe2\x59\x2d\x74\x66\x07\xc2\xa6\x40\x3e\x88\x24\x39\xba\x53\xfa\x01\x95\xbe\x21\x4e\x44\x59\xca\x0c\x97\x47\x75\x72\x49\x9b\xac\x36\xe3\x36\x69\xd3\x55\xe3\xe4\xed\x60\x42\xe7\xea\x23\x2c\x1d\x3b\xa3\x44\x47\x04\x74\xa0\xae\x26\x78\xd4\xd0\x4a\xb0\x39\x16\xb4\x10\xe6\x0a\x8a\x71\x73\xce\x5e\x02\xf0\x8b\xba\xd2\xb0\xac\xed\xe3\xe9\x2f\x7f\xfe\xcb\xab\x37\x87\xcc\x53\xb5\xb8\xca\x54\x41\x7f\xb0\x8c\xd7\xd3\xaf\x5e\x7f\x95\xcf\xbf\xa0\x51\x6f\x7f\x62\x9f\xcb\xbc\xf8\xb1\x66\x81\x3d\x42\x6e\xdc\x18\x0e\xcf\x15\xbc\xb0\x4d\xc5\x66\x0e\x0d\x5a\x5c\x55\xc3\x0a\x7a\x65\xdd\x3a\xf0\x38\xb3\x42\xec\xa6\xdd\xa3\xcc\x3b\x37\x5e\xf8\xd8\x62\x0f\x19\x4f\x53\x91\x59\x5f\x79\x23\x9c\x01\xaa\xe6\x50\x8b\x3d\xfa\xdb\x0e\x33\xb3\x6c\x6a\x45\xc3\xd7\x60\xe8\xa6\xed\x33\x77\x51\x26\x49\xe7\xcc\xed\x17\x4b\xbe\xb8\x3d\x3f\x5f\xfc\x38\x3b\xbf\x3d\xb5\xdd\x6f\x15\x1f\x0e\xbe\xd6\x39\x26\xae\x25\x34\x26\x88\xab\x2a\x00\x4b\x55\x6e\x45\x66\x99\xc2\x7c\xaf\x11\x47\x52\x26\x49\x55\x98\x7a\xae\x3e\x52\x39\x70\x0c\x94\x4a\x5a\x33\xa5\x77\xe0\xaa\xf5\xc3\xd7\x3e\x9a\xc2\x3f\xe2\x6f\x8f\x98\xef\xc4\x1b\x76\xe1\x6a\xed\x18\x57\x22\x9c\x38\x60\x3b\x60\xbe\x6d\xd7\x76\x78\x6a\xe9\xfd\xc7\x6d\x8f\x5b\x05\xa2\x5f\xe6\xe4\x45\xc5\xfc\x27\xd9\x1d\x38\x76\x1f\xab\x50\x70\xe7\x2e\x8d\x31\x6a\x08\xe5\x4e\x50\x30\x3d\x2f\x88\xb3\x18\xc7\x6c\xae\xf0\x20\x36\x6d\x2a\x74\x77\x9b\xd8\x19\x45\x90\x12\xae\xd6\x25\x5f\x8b\x7c\xc2\x6c\xe5\x73\x65\x5f\xa7\xf6\xad\xe3\x80\x39\xc0\xc8\x5a\x5b\x42\xb5\x14\x60\xa9\xe6\x8a\xfa\x04\x37\x2c\x15\x8f\xe9\xa8\x7f\xb8\x76\xdd\xa1\xbc\x6f\x2c\x88\x34\xdf\xd5\x5c\xe1\xe4\xa2\x6f\xcc\x82\x0d\xc1\xec\x68\xde\x4d\x1c\xe0\xc1\xf8\xae\x8b\x59\xa1\xd7\x00\x7b\x9c\x2b\xc7\x82\x85\xe0\x0c\xfb\x5e\xf3\xda\xa0\xd8\xa4\xfd\xe7\x89\x9d\x0c\xbb\x27\xa8\x6d\xed\xab\xfe\xe0\x3b\xc0\x6c\xb8\x45\xeb\x5b\xbe\x7f\xd9\xfa\x63\x6c\x20\x20\x87\x07\x07\x47\x17\x35\x22\x50\x9f\xb5\xb7\xc6\xf6\x0b\xbf\xd3\x99\x3d\xaa\xcb\x65\x32\xa2\x49\xf8\xfd\xde\x46\xe1\x91\xdc\xdf\xa8\x01\x1e\xe9\xab\xda\xd6\x32\xcb\xb4\xaf\xda\xa5\xd6\x1d\xf3\xf2\x84\x98\xdd\x4a\xa3\xe8\x07\xfb\x06\xa3\x8c\x8a\xc7\xac\x97\x01\x7c\x40\xf5\x21\xb2\xa7\x4f\x5f\x83\x12\x99\x3f\xaa\x39\xde\x7e\x1a\xdc\x22\x67\x21\xd0\x65\x37\xea\x84\xa5\x7b\xae\x72\xc0\x76\x1c\x93\xf6\x99\x82\xe9\x2d\x42\xe2\xf1\x62\x36\xcf\x04\x36\x91\x59\xff\x13\xb7\x88\x26\x7e\xe6\x26\xd0\xc8\xa8\xcc\x72\x73\x5c\xd2\x79\x47\xa7\xb6\xce\x18\x9f\x2b\xcb\x06\x63\x8f\xe3\x99\xf5\x07\x67\xee\xaf\xc8\xb1\x94\xa2\x64\x1d\x04\x85\x0a\xf0\x92\xd3\x69\x38\x57\xf7\x3c\x93\x5c\x01\xa6\x79\x99\x83\xde\x30\x3c\xe9\x76\x8c\x3e\x70\x04\x1c\x79\xe8\x64\xde\x73\xe6\xd5\xcc\x80\xca\x3d\xff\x3b\xf3\x7f\xff\xf8\xdd\xff\x1f\x00\x00\xff\xff\x0c\x0f\x01\xd5\x9d\xd9\x04\x00") +var _adminSwaggerJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\x7b\x73\xe3\xb8\xb5\x2f\x0c\xff\xbf\x3f\x05\xaa\xf7\x5b\xd5\x33\x89\xed\x9e\x5c\xce\x7e\x53\xde\x75\xea\x79\x34\xb6\xba\x47\x67\xdc\xb6\x63\xcb\xd3\x7b\xea\x68\x97\x06\x22\x21\x09\x31\x05\x68\x00\xd0\x6e\x65\x57\xbe\xfb\x53\x58\x00\x48\x90\x22\x29\xea\x66\x4b\x6e\x24\x55\x89\x5b\x24\x71\x59\x00\x16\xd6\xf5\xb7\xfe\xe7\xdf\x10\x7a\x27\x9f\xf1\x64\x42\xc4\xbb\x73\xf4\xee\xcf\x67\x3f\xbc\x3b\xd1\xbf\x51\x36\xe6\xef\xce\x91\x7e\x8e\xd0\x3b\x45\x55\x42\xf4\xf3\x71\xb2\x50\x84\xc6\xc9\x07\x49\xc4\x13\x8d\xc8\x07\x1c\xcf\x28\x3b\x9b\x0b\xae\x38\x7c\x88\xd0\xbb\x27\x22\x24\xe5\x4c\xbf\x6e\xff\x44\x8c\x2b\x24\x89\x7a\xf7\x6f\x08\xfd\x0b\x9a\x97\xd1\x94\xcc\x88\x7c\x77\x8e\xfe\xaf\xf9\x68\xaa\xd4\xdc\x35\xa0\xff\x96\xfa\xdd\xff\x86\x77\x23\xce\x64\x5a\x78\x19\xcf\xe7\x09\x8d\xb0\xa2\x9c\x7d\xf8\x87\xe4\x2c\x7f\x77\x2e\x78\x9c\x46\x2d\xdf\xc5\x6a\x2a\xf3\x39\x7e\xc0\x73\xfa\xe1\xe9\x4f\x1f\x70\xa4\xe8\x13\x19\x26\x38\x65\xd1\x74\x38\x4f\x30\x93\x1f\xb8\x98\x7c\xf8\x1f\x1a\x9f\x71\x31\xf9\x17\xfc\x31\x17\xfc\x1f\x24\x52\xe6\x1f\x31\x9f\x61\xca\xcc\xdf\x0c\xcf\xc8\xbf\xb2\x46\x11\x7a\x37\x21\xca\xfb\xa7\x9e\x7a\x3a\x9b\x61\xb1\xd0\xe4\xf9\x48\x54\x34\x45\x6a\x4a\x90\xe9\x14\x39\x7a\xf1\x31\xc2\xe8\x5c\x90\xf1\xf9\x6f\x82\x8c\x87\x8e\xea\x67\x86\xda\x57\x30\xb4\xdb\x04\xb3\xdf\xce\x2c\xcd\xa0\x65\x3e\x27\x02\x26\xda\x8b\x75\xeb\x9f\x88\xea\x40\xb3\xf9\xfb\x7f\xf6\x5f\x17\x44\xce\x39\x93\x44\x16\xc6\x87\xd0\xbb\x3f\xff\xf0\x43\xe9\x27\x84\xde\xc5\x44\x46\x82\xce\x95\x5d\xd9\x0e\x92\x69\x14\x11\x29\xc7\x69\x82\x5c\x4b\xfe\x68\xcc\x5c\xf5\x32\xe3\xa5\xc6\x10\x7a\xf7\xff\x13\x64\xac\xdb\xf9\xf7\x0f\x31\x19\x53\x46\x75\xbb\xd2\xec\xa6\x7c\xb8\xef\x0a\x5f\xfd\xeb\xdf\xaa\xfe\xfe\x97\x37\xa3\x39\x16\x78\x46\x14\x11\xf9\xfa\x9b\xff\x94\xe6\xa2\x17\x49\x77\x6e\x56\xb4\x3c\xe8\xd2\x4c\x6f\xe0\x2f\x9c\x9c\x20\x2e\x26\xe8\x91\x2c\x10\x6c\x29\x12\x23\xc5\x61\xed\x04\x91\x3c\x15\xd1\xf2\xec\x29\x7c\xaf\xb7\x59\xf9\x89\x20\xbf\xa7\x54\x10\xbd\x4c\x4a\xa4\xa4\xf4\x54\x2d\xe6\x30\x3c\xa9\x04\x65\x13\x9f\x08\xff\x3a\x69\x35\x29\xbb\x3b\x57\x4c\xec\x1a\xcf\x88\xde\x69\x7a\x0e\xf6\x8b\xc2\x7c\xd0\x88\x24\x9c\x4d\x24\x52\xfc\x70\xa6\x66\xce\xda\x1a\x33\x33\x1f\xd4\x4e\x6c\xc0\x3a\xee\x95\x08\x33\x34\x22\x48\xb3\x1b\x1a\x13\x41\x62\x84\x25\xc2\x48\xa6\x23\x49\x14\x7a\xa6\x6a\x4a\x99\xfe\xf7\x9c\x44\x74\x4c\x23\x47\xb3\xc3\xa1\x0d\xfc\xd9\x4c\x99\x07\x49\x84\x1e\xf8\x13\x8d\x49\x8c\x9e\x70\x92\x12\x34\xe6\xa2\xb8\x8f\x07\xac\x3f\xd5\x74\x98\x8d\x28\x03\x7e\xa2\x69\xe9\x76\xc8\x1f\x1d\xb9\xfe\x88\x74\x7f\x28\x65\xf4\xf7\x94\x24\x0b\x44\x63\xc2\x14\x1d\x53\x22\xcb\xad\xfd\x91\xdb\x23\x84\x4e\x91\xa6\x33\x11\x0a\xe8\xcd\x99\x22\x5f\x95\x44\xa7\x28\xa1\x8f\x04\xbd\xbf\xa2\x52\xa1\xce\x6d\xef\xfd\x09\x7a\x6f\x98\x00\x02\xf6\xfb\xfe\x05\x28\x9c\xfd\xfd\xdf\x1e\x3f\x51\x78\x52\xe6\x24\xef\x3a\x9a\x45\xdd\x9b\xdb\x2f\x6f\xe1\xbf\xff\xcd\x6f\xc7\xae\x57\xe3\x95\x72\xc4\xb7\x48\xb8\x44\x02\xbf\x0d\xfc\x36\xf0\xdb\xfd\x53\x78\xff\xd2\xd9\xef\x29\x11\x8b\x86\x59\x8d\x71\x22\x0f\xfa\x1a\xc9\xef\x10\x7b\x81\xb4\xbd\x36\x60\xf5\x8b\x37\x86\xd4\x1b\x6f\xdb\x0b\x43\xb7\x5b\xbe\x31\xe4\x71\x5d\x19\x7a\x0a\xfb\xbe\x36\xb6\xb9\x33\xb0\x82\xc3\x8c\x29\x33\x67\x3f\x63\x05\x42\xea\xe3\xef\xb6\xef\x81\x70\xca\x6d\xae\x10\x6f\x66\xde\x2d\xe2\x2e\x07\x8f\x2a\x07\x38\xef\x84\xce\xe8\xaa\xf5\xed\xb1\x98\x46\x58\x59\x1e\xce\xd2\xd9\x88\x08\x4d\x06\xc7\xb5\x60\xb6\x23\xcd\xc5\x54\x2a\x18\x89\x5b\x4c\x73\x1b\x8e\x46\x99\x22\x13\x22\xca\x5f\x8f\xb9\x98\x61\x65\x5f\xf8\x8f\xbf\xae\x4b\x08\xc5\x1f\xc9\xaa\xf5\xef\x99\xd5\x8c\xb0\x84\x6d\x30\x4b\x13\x45\xe7\x09\x41\x73\x3c\x21\xd2\x52\x24\x4d\x94\x3c\x81\xd7\x24\x11\x4f\x44\x9c\x66\x17\x2b\xf4\xe0\x04\x8a\x54\x1a\xee\x3f\xce\xe4\x62\x46\xbe\x2a\x68\x69\xc0\x40\xa4\x00\x12\xf9\x17\xe5\xcb\x5c\x0e\x2d\x48\x25\xb9\x50\xc3\xd1\xe2\xec\x91\x2c\xf5\x5b\xbb\x73\x30\x43\x58\x29\x41\x47\xa9\x22\x7a\xde\xba\x0d\x77\xf5\x01\x7b\x34\x72\x47\x1b\xd6\xf0\x7a\x13\x8e\xa9\x20\x11\xcc\x6d\x9d\x03\x93\x7d\xa5\xe7\xad\x2f\xfe\x85\x99\xbd\x96\x03\xb4\x98\x55\x41\x81\x6c\xc9\x07\x6c\xc0\xd0\x29\xba\xec\xde\x5f\x74\xaf\x2f\x7b\xd7\x9f\xce\xd1\x8f\x0b\x14\x93\x31\x4e\x13\x75\x82\xc6\x94\x24\xb1\x44\x58\x10\x68\x92\xc4\x5a\x94\xd2\x83\x21\x2c\xa6\x6c\x82\xb8\x88\x89\xd8\x1f\x19\x4b\x4f\x09\x4b\x67\xa5\x7b\x05\x7e\xcf\x47\x5f\xfa\x42\x8b\x18\xd9\xa3\xc2\x93\xff\x5e\x22\x30\xcc\x58\xf7\xed\xb5\xb6\xe6\x32\x06\x41\xcd\x17\xd4\xa2\x29\x4d\x62\x41\xd8\x07\x85\xe5\xe3\x90\x7c\x25\x51\x6a\xe4\x0c\xb0\x23\x17\x7f\x1c\x6a\x45\x82\xc7\xa4\xf8\x4b\xe1\x1f\xc6\xea\xbc\xf6\x67\xb9\x64\xb8\xf6\xa7\x99\x2d\x62\xed\x2f\xc1\x72\xd1\xee\x3b\xf8\x85\xc6\x95\x6f\xc3\x2f\x2b\xe6\xe0\xde\x69\x18\xac\x7b\xa5\x76\x54\xee\x05\x2b\x00\x57\xbe\x23\x88\x12\x8b\x21\x56\x8a\xcc\xe6\x6a\x4d\xab\x0c\x46\x89\x16\xb3\x9b\xc4\xea\x6b\x1e\x93\xae\xeb\xef\x37\x64\xa4\x7b\x12\xa3\xd1\xc2\x1e\x8b\x31\x11\x84\x45\xa4\xbe\x85\x3e\x96\x8f\x79\x0b\xab\x64\xf3\x42\x7f\xf2\x23\x17\xfa\xf3\xa3\x70\x0c\x14\x46\xfe\x12\x32\xfa\x26\x27\xf5\x8d\x79\x13\x36\xe5\x3a\x6f\xce\x16\xb6\x21\x0f\x0d\x96\xb3\xed\x29\xd9\xd6\xce\xc6\x05\x92\x0b\xa9\xc8\x6c\xa5\xc5\xed\x78\x08\x61\x2f\xc9\x43\x1d\x70\xe9\x9e\xfe\x06\x4e\x7d\x51\xea\x08\xc7\x7b\x0d\x92\xed\xca\x5e\x7e\xe8\xf3\x74\x01\x30\xcd\x53\xbd\x77\xcb\xe7\xb9\xeb\x8e\x62\x9a\x05\x79\x78\xd7\x83\xdc\x93\x05\xaa\x76\xad\x1c\xb5\x87\x30\x80\x15\xb6\x87\xa2\xc7\x25\x3b\x7f\xfa\x53\xdf\x68\x67\x2c\xb4\x6a\x4a\xa5\x67\xbf\x44\x11\x17\x46\x1c\x8e\xed\x79\x37\xe6\x87\x4e\xbf\x73\xdf\xed\x9f\xa3\x0e\x8a\xb1\xc2\xfa\x80\x0b\x32\x17\x44\x12\xa6\xc0\xb4\xa3\xbf\x57\x0b\x34\xe3\x31\x49\x8c\x11\xe2\xa3\x96\xfe\xd1\x25\x56\xf8\x02\x2b\x9c\xf0\xc9\x19\xea\xc0\x3f\xf5\xc7\x54\x22\x9c\x48\x8e\xb0\xdb\x56\x24\x76\x4d\x60\x16\x3b\xd6\x82\x51\xc4\x67\x73\x9a\x64\xde\xa6\xcc\xde\x46\x59\x4c\x9f\x68\x9c\xe2\x04\xf1\x91\xe6\x2a\xf2\x6c\xc0\xba\x4f\x84\xa9\x14\x27\xc9\x02\xe1\x24\x41\xb6\x5b\xf7\x02\x92\x53\x9e\x26\xb1\x6e\xd7\x8d\x52\xd2\x19\x4d\xb0\xd0\x32\xad\x19\xed\x8d\x6d\x0b\xf5\xa7\x24\x1b\x2b\x8c\x4b\x53\x73\x86\x1f\x89\x44\x54\xa1\x39\x97\x92\x8e\x92\xfc\xcc\x3f\xf4\x10\x8c\xfb\xe2\xaa\x07\x26\x9e\x48\x21\x6e\x78\xa8\xeb\xdc\x9a\xf4\x5c\x8f\x33\xcc\x18\x81\x8e\xb9\x9a\x12\x61\xbb\xb7\x2f\xbf\xb6\xb5\xe6\xe1\xfa\xfe\xb6\x7b\xd1\xfb\xd8\xeb\x5e\x2e\x9b\x6b\xfa\x9d\xfb\x9f\x97\x7f\xfd\x72\x73\xf7\xf3\xc7\xab\x9b\x2f\xcb\x4f\xae\x3a\x0f\xd7\x17\x3f\x0d\x6f\xaf\x3a\xd7\xcb\x0f\xed\xb6\x6a\x6d\xf9\xf1\x47\xb6\xb3\xb3\x75\x74\x46\xa1\x60\xd4\x5f\x63\xd9\x77\x6d\xd4\x3f\x79\xbb\x56\xfd\x31\x4d\xc0\xe8\xd0\xda\xa2\x9f\x59\x8d\xec\x97\x68\x8e\xa5\x34\x72\xa0\x19\xc1\xd9\x80\x7d\xe6\x42\xb3\xeb\x31\xd7\x1c\x51\xcb\x8a\x4a\xa4\x91\xa2\x6c\x92\x7d\x74\x8e\x06\xe9\x0f\x3f\xfc\x25\xba\xa2\xec\x11\xfe\x22\x87\x48\x9c\xe0\xf2\x08\x2e\x8f\x83\x73\x79\xfc\x5b\xc5\xa7\xfb\x77\x0f\x04\x1b\x7f\xb0\xf1\xef\xcf\xc6\x1f\x4c\xfc\xde\x18\x82\x7d\x7b\x5b\x42\x04\x03\x58\xb0\x6f\x6f\x4f\x88\x60\xdf\x3e\xd0\x19\x87\xe3\x1d\xec\xdb\xc1\xbe\x1d\xec\xdb\xc1\xbe\x1d\xec\xdb\xc1\xbe\xfd\xcd\xd8\xb7\x0f\x30\xe4\x29\x18\xf9\x83\x91\x3f\x18\xf9\x83\x91\x3f\x18\xf9\x83\x91\xff\x78\x8c\xfc\x5a\xda\xfd\x50\x0e\xfd\xdf\x13\x84\x8c\x16\x2e\xd9\x3c\x55\x20\x4a\xf2\x54\xe9\x3f\x75\xff\xb0\x57\x1a\x20\x00\xda\x19\x94\x3f\x11\x95\xbd\xa8\x45\xdb\xa3\x88\x15\xff\xc2\xc5\xe3\x38\xe1\xcf\xd9\xc8\x3f\x11\xa5\x07\x7f\x67\x7b\x09\xd0\x32\x01\x5a\x06\x05\xa8\x83\x5d\x43\x1d\x1c\x94\x89\x7a\x57\xfc\xdd\x7d\xfd\x4e\x2b\xff\x8a\xd4\xf2\xe2\x3e\x11\x33\xca\x9c\xec\x42\x99\x16\x72\x27\x82\x48\xb9\x2d\x07\xce\x1a\xce\x5e\x3f\x0a\x1e\x9c\x8d\x36\x1b\x7f\xe0\xbe\x81\xfb\xd6\x4c\x2d\x70\xdf\x37\xc6\x7d\x5b\x4c\x6d\xc4\xe3\x25\x75\xc2\x8c\xa4\xea\x49\xf3\x48\x76\xc6\xa1\x7e\x4f\x49\xbb\xb0\x83\x97\xd0\x1a\x8e\x5a\x51\x38\x86\x3b\xea\x00\xf4\x84\xc0\xd4\x03\x53\xaf\xa6\xcc\x51\x32\xf5\x63\xf4\x09\xec\x9f\xa7\x17\xbd\x28\xb9\x39\xa8\x02\xe8\xa1\x3e\xc6\xb3\x36\x84\xb3\x26\x42\xd3\x0b\xc0\x7c\x91\x6b\xa2\x18\xe6\xb8\xe2\xaa\x28\xbc\x7c\x34\x76\xa5\xc2\xa8\x5f\xfe\xae\x78\xe3\x68\x03\xdf\x4a\xb0\x65\x88\xa5\xdc\x90\x50\x6f\xf8\xd2\x7c\xb9\x48\xc8\x97\xbf\xed\xbe\xd9\x3b\x2d\x5c\x69\xf6\x3f\x81\xe1\x07\x86\x1f\x18\xfe\x2b\x31\xfc\x0d\xe8\x1e\x54\xb8\xa5\x4b\xad\x12\xcc\xaf\x2d\x7a\xdf\x3a\xa9\x7c\x6b\xe4\xee\xb5\x4e\xd6\x5b\x91\x9d\x57\x99\x8e\x57\x95\x7f\xb7\x9c\x70\x57\x99\x61\xb7\x5d\x4a\xdd\xa6\x77\x75\xfb\x24\xb9\x4f\x44\x15\x5e\x3e\x1a\xfd\xb3\x30\xea\x97\xbf\xac\x5f\x3d\x18\xf4\xb5\xf8\xf4\xb7\x97\x10\x18\x32\x00\xf7\x48\xba\xb7\x2e\xd6\x1c\x6e\x8e\xdf\x37\x90\xd4\x17\xb2\xf8\xd6\xa2\xd1\xdb\x4a\xdb\x7b\xab\x79\x7a\xc7\x99\x98\x17\x32\xf1\x42\x26\xde\x4e\x55\xde\xd2\xd3\x6f\x2a\x13\xef\x98\x53\xef\x5e\xde\x3c\x11\x4c\x0e\x87\x6f\x72\x08\x16\x07\xfb\x9f\xa0\x7d\xaf\x3d\xf3\x20\xda\x07\xed\xbb\xcd\xcc\x83\xf6\x1d\xb4\xef\x03\x3c\xa2\x41\xfb\x0e\xda\x77\xd0\xbe\x83\xf6\x1d\xb4\x6f\x14\xb4\x6f\xaf\xa1\xd7\x02\x6c\x38\x04\xe7\xe6\x51\xd9\x1c\xf2\xa9\x0f\xdd\x01\x5f\x06\x39\x28\xb0\xdd\x36\xb8\x07\xf0\x97\x53\xea\xd7\xc5\xe1\xad\xd5\xd2\x2f\xf3\xc1\x76\x81\x49\xfe\x66\x59\xc5\x0a\x85\x7d\xe9\xbb\xa3\x88\x11\x58\x1a\x75\x48\xb7\xdd\x54\xe4\x79\x25\xa1\x61\x4f\x14\x38\x92\xeb\x6b\xfd\x85\x7a\xc3\xba\x64\xd0\x21\xb7\x4f\xa1\x3b\x1a\xdd\xf1\x78\x74\xc6\x97\x97\x2d\xde\xa2\x38\x11\xa4\x09\x6f\x0c\xe1\xe2\x0d\x17\x6f\xb8\x78\xc3\xc5\x1b\x2e\xde\x90\x81\x6f\xdf\xdf\xab\x3c\x51\x12\x26\x5a\x01\x34\xee\xbc\x32\x50\x85\x28\xe1\xdd\xc0\xab\xea\xfc\x94\xbf\xa6\x44\xfe\xf5\x28\x65\x8a\x97\x28\xf5\x13\x84\x8a\x23\x11\x2a\xde\xa4\x2d\x29\x48\x4a\x41\x52\xaa\xa6\x4c\x2b\x49\x69\xc0\xfa\x53\x4d\x87\xd9\x88\xb2\xcc\x9b\xe7\x76\xc8\x1f\x1d\xb9\xfe\x88\x74\x7f\x28\x65\xf4\xf7\x94\x24\x8b\x9c\x27\xc9\x72\x6b\x19\x5e\x34\x3a\x45\x9a\xce\x44\x28\xa0\x37\x67\x8a\x7c\x55\x12\x9d\xa2\x84\x3e\x12\xf4\x5e\x33\x66\xd4\xb9\xed\xbd\x3f\x41\xef\xaf\xa0\x6c\x1d\x9a\x27\x98\xc9\xf7\x07\xe3\xb8\x09\x60\xfd\xfb\x02\xeb\x0f\x58\xfd\x01\xab\xbf\x2d\x81\x02\x56\x7f\xc0\xea\x3f\x5e\xac\xfe\x9d\xe9\x87\x1b\xe2\x72\xbe\x8a\xa6\x78\x9c\xbe\xec\xa0\x29\xa2\xa0\x29\x06\x4d\x31\x68\x8a\x41\x53\x3c\x12\x4d\xf1\x30\x28\x1c\xd4\xc4\xa0\x26\x06\x35\x71\x87\xc4\x09\x6a\x62\x50\x13\x83\x9a\xb8\xa4\x26\x1e\xaf\xe7\xf0\x2f\x41\x1f\x0c\xfa\xa0\xff\xfb\xf1\xe9\x83\x41\x75\x0a\xaa\x53\x35\x65\x8e\x53\x75\x3a\x18\xd9\xe7\x18\x43\x8a\x82\x52\xd8\x9e\x10\x41\x29\x6c\x4d\xaa\xa0\x14\x36\x10\x27\x28\x85\x41\x29\x0c\x4a\x61\x6b\xa5\xf0\x98\xdc\x85\x41\x3b\x0c\xda\xa1\xff\x7b\xd0\x0e\x83\x76\x18\xb4\xc3\xe0\x58\x0b\xaa\x61\x50\x0d\x83\x6a\x18\x54\xc3\x55\xc4\x09\xaa\x61\x50\x0d\xbf\x2d\xd5\x90\x3c\x11\xa6\x24\x14\x43\xf4\x15\xa5\x77\x73\x2e\xeb\x15\x3c\x9f\x3b\x54\x28\x77\xd0\x66\xb1\x28\x21\xa0\xb6\xfd\x86\xa6\x58\x22\x1e\x45\xa9\x28\x9d\x81\xb2\x7a\x77\x21\x08\x56\x04\x5a\xd0\x1f\x1e\x83\x5a\xb7\x3c\xdd\x97\x02\x20\x1e\xf1\x78\x69\xb7\x9b\x83\x50\xf5\xa4\x59\xcc\xda\xd9\xd4\x7f\x4f\x49\x3b\xad\x76\x8f\x9b\x5a\x61\xf9\xb8\xe3\x4d\x5d\x00\x9a\xde\x68\x53\x43\x0b\xc7\xb2\xa9\x97\xa7\xfb\xcd\x6c\xea\xaa\xa9\x1f\xc2\xa6\x7e\xe6\xe2\x71\x9c\xf0\xe7\x1d\x6f\xec\x2f\xb6\xd9\xed\x36\x77\xd6\xca\xb1\x6c\xf0\xea\x69\x7f\x33\x9b\xbc\x6e\xfa\xaf\xbb\xd1\xb3\xfa\x10\xad\xb7\x78\x5f\xd0\xc9\x44\xab\x19\xa0\xe1\xe9\xad\x68\x4d\x1f\x0d\x00\x49\x79\x45\x84\x95\xdb\x3a\x7b\xf5\x18\xb6\x74\x36\x58\x33\xf6\x6f\x66\x2f\x2f\xcd\xfb\x40\x36\xf1\x2b\x81\x76\xb4\x2b\xf8\x71\x45\xa5\xca\xde\x3c\x8e\x6c\xab\x6c\xb8\x2f\xe1\x37\x09\xf9\x3b\xc1\xcd\x10\xdc\x0c\x87\xef\x66\x38\x18\x83\x5a\x30\xc9\xef\xc9\x24\x4f\x65\xb0\xc9\x07\x9b\x7c\x5b\x02\x05\x9b\x7c\xb0\xc9\x1f\xaf\x4d\x7e\x4d\xdd\x61\xc3\x08\xad\x3a\x83\xd0\x3a\xfa\xc3\x27\x92\xab\x0f\xc7\xa5\x3d\x04\xcd\x21\x68\x0e\x41\x73\xd8\xb9\xe6\x70\x50\xe5\x08\x77\xc5\xa5\xdd\xd7\xef\xe6\x69\x3d\x4f\x7d\x98\xc7\x58\x11\x94\x31\x6f\xbb\x13\xf4\xc5\xa8\x78\x76\x08\xec\x7e\xd8\x92\xed\x9a\xbe\x8e\x94\xf3\x9a\xc1\xbf\x60\x79\xd6\xc0\x87\x03\x1f\x0e\x7c\xf8\xb0\xf1\xcd\x0f\xc7\x7d\xe0\xd8\xd3\xa1\xb8\x0f\x04\x89\xf8\x13\x11\xad\x7d\x61\x77\x04\x1c\x60\x20\xdd\xcf\x05\x79\xa2\x3c\x95\xc9\xe2\x54\xa4\x0c\x39\xdf\xb1\x77\x49\x41\x0c\xff\x33\x4d\x12\xc4\x99\x56\x15\x15\x16\xca\x3d\x66\x13\x34\x16\x7c\x06\xdb\x25\xc1\x52\xa1\x47\xc6\x9f\x19\x1a\x63\x9a\xa4\x82\xa0\x39\xa7\x4c\x9d\x0d\x58\x8f\xa1\x3b\x33\x46\xa8\xb9\x78\x82\x52\x49\x84\xd4\x47\x8d\x71\x85\xa2\x29\x66\x13\x82\x30\x5b\xd8\xe2\xe5\x39\x03\xd7\x9b\x34\x35\xb7\xa6\xee\xa2\x04\x58\x9f\x8d\x11\xac\x8d\x54\x22\x2a\x11\xf9\xaa\x04\x99\x91\x64\xa1\xfb\xd0\x57\x94\xe2\xc8\xd2\xc7\x0c\xd5\xee\x79\x22\x04\x17\x12\xaa\x35\x8e\x16\xff\xc4\x4c\x51\x46\x10\xe8\x74\xd2\x58\x12\x4f\xd1\x15\x97\x60\x62\xfa\xf9\x6f\x12\x45\x49\x2a\x15\x11\x27\x68\x94\x4e\xa4\x56\x6a\xe7\x09\x56\x63\x2e\x66\x7a\x84\x94\x49\x85\x47\x34\xa1\x6a\x71\x82\x66\x38\x9a\x9a\xb6\x80\x06\xf2\x64\xc0\x62\xfe\xcc\xa4\x12\x04\x67\xbd\xbb\x87\xe8\x3b\xff\x99\xd9\x00\xf2\xfb\x13\x38\x9b\x74\xa6\x35\x73\x6f\xf8\xf9\x8a\x9b\x35\xd1\x8d\x90\x18\x8d\x48\x84\x53\x69\xf3\x2e\x94\x58\x20\xf2\x75\x8a\x53\x09\x6b\xa7\xa7\x67\xeb\x5d\x46\x7c\x36\x4f\x88\x22\x88\x8e\x91\x12\xfa\xe2\xc2\x13\x4c\x35\xe9\xee\x09\x69\x21\x6d\xd8\x05\xb4\xbb\xfe\x37\xe0\x12\x33\x2e\x08\x8a\x89\xc2\x34\x69\xcc\xc5\xb1\xdf\x06\x27\xe9\x31\x71\xb9\xe2\x82\x1f\x04\x9b\x4b\xc0\xa0\xbf\x03\x9f\x3f\xb3\x9e\x86\x08\x27\x5b\xba\xff\xef\xec\xa0\xc2\xde\x3e\xae\xbd\x6d\x56\xed\x70\x36\xf7\x41\x7b\xfd\x8f\x6a\x4f\xbf\x90\xd3\x3f\x68\x57\x41\xbb\xaa\xa6\x4c\xf0\x8f\x87\x4c\xbc\xe5\x69\x05\xb7\x7f\x70\xfb\x07\xb7\xff\x2e\x89\x13\xdc\xfe\xc1\xed\xff\xcd\xba\xfd\x0f\xdc\xd3\x7f\x54\x1a\x43\xd0\x16\x82\xb6\x10\x7c\x31\x6b\x4e\xed\xe8\x64\xf4\x5d\x71\xe6\xcc\xd5\x1f\x93\x84\x28\x52\x6f\x7d\x24\x62\xa6\x75\x3b\x23\x75\x50\xa6\xc5\xd3\x89\x20\x52\x6e\xcb\x67\xb3\x86\x8f\x93\xdb\x66\xc3\x7f\x41\xff\x7e\x60\xbf\x81\xfd\x56\x53\xe6\x28\xd9\xef\xe1\x18\xd2\xbd\xc3\xfc\x52\x96\xf4\x8c\xff\x1e\x68\xa8\xd5\x51\x31\xe3\x17\x8f\xb4\x0a\x9c\x38\x70\xe2\x6a\xca\x04\x4e\x7c\xfc\x41\x49\xc6\xab\x3a\x9c\x27\x98\x0d\x69\x6c\x93\x13\x4c\x66\x42\x6e\xac\xd8\x97\x67\x53\x1f\xad\xd8\x00\xa6\x66\x00\xa5\xe2\x37\xfd\x49\x92\x3b\x3a\x10\x1f\xe9\x61\xac\x84\x8e\x35\xbe\x91\xdb\x04\xb3\x5e\x7c\x1c\x59\xcf\x95\xd3\x7f\x09\x67\xe8\xdb\x0b\x9e\xdd\xe6\x92\xc2\x0a\x9c\x6e\x98\x32\x63\x76\xcd\x81\x6f\x0b\x46\xe5\xc3\x98\xe8\x36\x57\x96\x37\x31\xef\xd6\x72\x97\x91\x47\x94\xc3\x9b\x76\xf0\xc5\x05\x54\xcc\xe0\x6d\x6a\x39\xe1\xe0\x6d\x3a\x5c\x6f\x53\x8b\x65\xdc\x8b\x0b\xf9\x85\x8f\xe7\x8b\xca\xac\x47\x2d\xa9\x06\x41\x15\x05\xb1\x2e\x88\x75\xf5\xb3\x0e\x62\x5d\x10\xeb\x82\x58\x17\xc4\xba\x20\xd6\xbd\xbe\x58\xd7\x62\x9a\xdf\x6c\x94\xc1\x2a\x51\xb5\x3d\xf2\xa9\xc9\xf1\x81\x54\xc0\x74\x9e\x70\x1c\x37\x45\x7a\xe5\xc2\xa4\x5f\x68\xab\x41\x02\x35\xad\xe7\x9f\x1d\x83\x00\x9a\x8f\xf6\x1b\xcb\x7f\x5a\x9e\xf8\xa1\x78\x0b\x5e\x0b\x03\xb5\x7a\xbf\xaf\xa1\x73\xc9\xbf\x1e\xd7\x8e\x0f\x90\xa8\x01\x50\xa3\x62\x6a\xc1\x77\x1d\x52\xbe\x42\x6e\xd4\x9b\x53\xdc\x43\x6e\x54\xc8\x8d\x0a\x66\x8d\xe6\x69\x07\xb3\xc6\x9b\xc8\x8d\x5a\x5f\x99\xd8\x63\xd9\xea\xed\xd5\x8a\xa3\x08\x39\x0a\x6a\x45\x50\x2b\x82\x5a\x11\xd4\x8a\x43\x2c\xe8\x1c\x74\x8a\xa0\x53\x04\x9d\x22\xe8\x14\x41\xa7\xd8\x39\x19\x83\x4e\xd1\x42\xa7\x80\xbf\x2c\x60\xe9\xda\x0a\xc6\x9a\x8a\xc5\x0a\x54\x86\xfc\xa3\x23\xd3\x2a\x82\x46\x11\x34\x8a\xa0\x51\xbc\xb8\x46\x71\x30\x13\xb2\xec\x73\xc5\x9c\xee\xdd\x82\x94\xe0\xa1\x0f\x6f\x3e\x6e\x44\x43\x68\x69\x85\x30\x51\x54\xd0\xb2\x5d\xa7\x3f\xf5\x75\x14\x13\x9b\x0a\x62\x79\x1e\xba\x89\x22\x2e\x0c\x53\x8e\xed\x2e\x37\xf2\x44\xa7\xdf\xb9\xef\xf6\xcf\x51\x07\xc5\x58\x61\xbd\xad\x05\x99\x0b\x22\x09\x53\x20\xab\x11\x88\xca\x05\x90\xee\xc4\x48\x15\x1f\xf5\xfd\x83\x2e\xb1\xc2\x17\x58\xe1\x84\x4f\xce\x50\x07\xfe\xa9\x3f\xa6\x12\xe1\x44\x72\x84\x1d\xe9\x49\xec\x9a\xc0\x2c\x76\x07\x0a\x03\xf6\x34\x4d\x32\xe5\x34\x53\x2f\x28\x8b\xe9\x13\x8d\x53\x9c\x64\xc1\xce\x03\x53\x60\x38\xc5\x49\xb2\x40\x38\x49\x90\xed\xd6\xbd\xe0\xe0\xac\x47\x24\x1b\xa5\xa4\x33\x9a\x60\xa1\xd9\xb1\x19\xed\x8d\x6d\x0b\x69\xc5\xd8\x8d\x15\xc6\xa5\xa9\x39\xc3\x8f\x44\x22\xaa\xd0\x9c\x4b\x49\x47\x49\x7e\x00\x1e\x7a\x08\xc6\x7d\x71\xd5\x03\x99\x2d\x52\x88\x1b\xce\xe1\x3a\xb7\x0a\x8c\xeb\x71\x86\x19\x23\xd0\x31\x57\x53\x22\x6c\xf7\xf6\xe5\xd7\x16\xbf\x1e\xae\xef\x6f\xbb\x17\xbd\x8f\xbd\xee\xe5\xb2\xfc\xd5\xef\xdc\xff\xbc\xfc\xeb\x97\x9b\xbb\x9f\x3f\x5e\xdd\x7c\x59\x7e\x72\xd5\x79\xb8\xbe\xf8\x69\x78\x7b\xd5\xb9\x5e\x7e\x68\xb7\x55\x6b\x51\xce\x1f\xd9\x3e\x64\x39\xf7\x75\x0b\x84\x00\x7b\xb8\x14\x56\xa9\x34\xd5\xa0\x05\x99\x50\xa9\x80\xfd\xb7\x91\xc2\x56\x03\x03\x1c\xad\xf4\x15\xaa\xb0\x04\x59\x2c\xc8\x62\x41\x16\x3b\x36\x59\xec\xe5\x4c\x02\x47\x14\xa6\xf8\x97\xe3\xba\x7b\x02\x88\x7b\x60\xce\x87\xcf\x9c\x0f\xce\xf5\x76\x30\xa6\xf3\x63\x04\x88\x0c\x4e\xc5\xf6\x84\x08\x4e\xc5\xf6\xb4\x0a\x4e\xc5\x06\xe2\x04\xa7\x62\x70\x2a\x7e\xc3\x4e\xc5\xa3\x8c\x4d\x0c\xaa\x84\x7b\x2f\xa8\x12\x41\x95\x78\xa3\xaa\xc4\xc1\x50\x38\xe8\x11\x41\x8f\x08\x7a\x44\xd0\x23\x9a\x89\x13\xf4\x88\xa0\x47\x04\x3d\xe2\xd8\xe2\x11\x8f\x4b\x93\x08\x5a\x44\xd0\x22\x0e\x5b\x8b\x38\x98\x09\x1d\x8f\xb7\xb8\xdd\x7c\x42\xe4\x5e\x88\xdc\x0b\x91\x7b\xb5\x91\x7b\x6f\x54\x93\xdf\x95\xfc\xe6\xbe\x3e\xb4\x80\xc4\xe3\x12\xbf\x42\xad\xa2\xec\x69\x10\xc6\x82\x30\xf6\x8d\x0a\x63\x07\x04\xa2\x78\x10\x25\x97\x66\x58\x45\x53\x3c\x4a\xc8\x30\xb3\x65\xc9\xb6\xea\xfd\x15\x95\x4a\xa2\x28\x95\x8a\xcf\xea\x2f\x97\xcf\xae\x87\x4e\xd6\xc1\x05\x67\x63\x3a\x49\xcd\xdd\xf2\x1b\x6c\x7d\xef\x44\xe7\x02\xee\x62\x4e\x56\xf9\x15\x2b\x5a\x3f\x8a\x6b\xa9\x7a\xe8\x2f\x75\x3b\xad\xa3\x8f\xe4\xb6\x4b\xab\x4c\x68\x11\x72\x78\xd7\xbd\xbf\x79\xb8\xbb\xe8\x9e\xa3\x0e\x88\x58\xe0\x4e\x30\x5b\x81\xfe\x53\x4f\x0a\x29\x2c\x1f\xf3\xb5\x14\x66\x9b\x4b\x90\xb3\xc1\x7f\xa1\x45\x7e\x74\x8a\x2e\xae\x1e\xee\xfb\xdd\xbb\x9a\x06\xed\x46\x81\xc2\x8b\x64\x36\x4f\xb0\x22\x31\x7a\x4c\x47\x44\x30\xa2\xa5\x9d\x28\x49\xb5\x70\x93\x7b\x35\x4c\xa3\xdd\xff\xea\x5e\x3c\xf4\x7b\x37\xd7\xc3\xbf\x3f\x74\x1f\xba\xe7\xc8\xed\x38\xdd\xac\x1e\x97\x1e\x45\xbc\x60\x78\xa6\x15\x2b\xfd\x43\x5e\xea\xf1\xf7\x94\xa4\x04\x61\x29\xe9\x84\xcd\x08\x53\xe5\x16\xdd\x80\xaf\x3a\x3f\x76\xaf\x8a\x2d\x4f\x09\xfa\xf9\x6f\xf9\xa0\x12\x3c\x22\x89\x75\xb3\x80\xe7\x40\x6f\xf4\xbc\x23\xeb\x7f\x49\x0d\x55\xff\xfe\xd0\xb9\xea\xf5\x7f\x1d\xde\x7c\x1c\xde\x77\xef\x7e\xe9\x5d\x74\x87\x56\x58\xbe\xe8\xe8\x7e\x0b\x3d\x59\x99\x1a\xfd\x9e\xe2\x44\x2b\x5d\x7c\x0c\x7e\x0b\x1a\x11\xf4\x3c\x25\x0c\xa5\x0c\x76\x9c\xd1\xe4\xb4\x7a\x97\x75\xaa\x4f\x99\x99\xd1\xed\xd5\xc3\xa7\xde\xf5\xf0\xe6\x97\xee\xdd\x5d\xef\xb2\x7b\x8e\xee\x49\x02\xba\x8e\x23\x3a\xac\xe2\x3c\x49\x27\x94\x21\x3a\x9b\x27\x44\x53\xc3\xe8\x72\x23\x32\xc5\x4f\x94\x0b\x7b\x74\x27\xf4\x89\x30\x43\x47\x38\xb3\xd0\xbe\xd3\x29\x86\x1e\xe9\x6e\xae\x3f\xf6\x3e\x9d\xa3\x4e\x1c\x67\x73\x90\xd0\x46\x61\xe7\x3c\x73\xf1\x38\x4e\xf8\xf3\x69\x71\xd8\x9a\x39\x40\xf7\x66\x13\xf1\x27\x22\x04\x8d\x49\x69\x1f\x75\xee\xef\x7b\x9f\xae\x3f\x77\xaf\xfb\x40\x31\x25\x78\x22\xd1\x94\x3f\x83\x85\x1e\x66\x08\x86\xfb\x27\x4c\x13\xe8\xcc\x2d\x16\x67\xe8\x79\x4a\xc1\xab\x43\xa5\x4f\x30\xa3\x76\x8a\x94\xbd\xba\xd1\xb9\x70\xf0\x96\xb5\xb1\xf2\x49\x5a\x7e\xa3\x74\x2c\x9a\x5e\x28\xec\xf2\xe5\x17\x57\xed\xd6\xe5\x2f\x4a\xdb\xad\x5e\x07\x5d\xda\x2f\xf5\x33\xcd\xd7\xba\xb5\x0a\x5a\xa4\xe1\xcb\x5d\xb3\x44\x09\x1a\xc9\x0f\xd9\xbe\xda\x2f\xc8\x18\x91\x7a\xc3\x2a\x3a\x23\xc8\xf6\x6c\x4f\xea\x96\xb5\x6a\x3f\x11\x95\xbd\xf8\xd9\x34\x7c\x14\x59\x69\x5f\x2c\x47\xc9\x06\xff\x89\x28\x3b\xfe\x90\xa0\x16\x12\xd4\x6a\xa6\x16\xb4\xdc\xed\xb5\xdc\x63\xab\xc8\x1b\x93\xf9\x72\x87\xa5\x89\xc1\x3b\xc6\x5f\xb9\x14\x5e\x63\x2c\xc1\xd6\x16\x9e\x90\x27\x92\x80\x20\xab\x04\xd6\x7a\xb1\x15\xcf\x46\x82\xe0\x47\x2d\xd3\xc6\xfc\xd9\x17\xce\x62\xa2\x30\x4d\xe4\x2b\x85\xdf\xfc\xe5\xcf\xaf\x7a\x1f\x1e\xef\x15\x18\x6e\xc0\x60\x12\x0d\x97\xc5\x37\x78\x59\x1c\xa3\x53\x2a\xdc\x81\x87\x72\x07\x6a\x72\xc7\x43\xe7\x9e\xfe\xf0\x3f\x05\xa3\xdc\xbf\xf6\xa5\x1f\xde\x41\xbc\xaf\x6c\xba\x08\xbd\x0a\x9b\xbf\x59\xa7\xf6\x8a\x1b\xd1\xfb\xe2\x28\xf4\x41\x6f\xbc\x87\x64\x6a\xbd\xf3\x2d\xdf\xee\x9e\x98\x11\x85\x63\xac\xb0\x3e\x42\x13\xa2\xce\xd0\x0d\x83\x67\x7d\x2c\x1f\x4f\x90\xbb\xd7\x35\xef\xcc\x5d\x0b\x2f\x50\x5c\xb3\xa5\xcd\xea\xb5\x83\x11\x0e\x91\xa3\x07\x2d\x7d\x97\x53\x0b\x82\x57\x48\x2f\x3a\x64\x1c\x18\xf7\x75\xab\xe8\x9d\xdd\xdd\xca\xa6\xc5\x23\xbe\x98\x5f\x36\x5e\x67\xa7\xd7\x74\x0a\x43\x0f\x77\xb0\xf9\x4f\xb8\x83\xc3\x1d\x1c\xee\xe0\x26\xca\x84\x3b\xf8\x88\x03\xba\x2a\xae\xac\x57\x8d\xe8\x6a\x63\x56\x30\x36\x85\xdc\xa0\xb0\x26\xf0\x5c\x6e\x43\x58\x09\x17\x51\x21\xb5\xac\xc4\x8a\xc8\xbf\xa1\xe4\x38\xfc\xcb\xde\x2c\x5f\x02\x2f\x62\xa7\xc2\x8a\xc9\x58\x0e\x56\x85\x3d\x4a\x34\x6f\x4f\x9c\xd9\x46\x96\xc1\x0a\x2e\x19\x4c\x99\xb9\x93\xf2\xec\x25\xf9\x02\x3b\x6c\xcd\x89\x6e\x23\xd9\x78\x13\xf3\x84\x1b\x27\xb3\x78\x44\x39\x90\x45\xdd\x0b\xac\xc4\xeb\xd8\xf1\x5f\x1f\x4a\x82\xbc\x5d\x24\x89\x00\x96\xb0\xd6\x21\x09\x60\x09\x2f\x01\x96\xd0\x62\x19\xf7\x82\x80\xf2\xc2\xc7\xf3\x35\x55\x87\xe3\x71\x42\x1e\x99\xce\x70\x54\xfa\x42\xf0\x41\xee\xdf\xfe\x19\x4c\x85\xc1\x54\x58\x4d\x99\x60\x2a\xfc\xb6\xc2\xb5\x76\x75\xdf\xbb\xaf\x5f\xdb\x0b\x79\x64\x37\x73\x70\x42\x86\x4b\x38\x5c\xc2\xe1\x12\x0e\x97\xf0\xae\x28\x1c\xfc\x75\x6b\x2a\xdd\x47\xe1\xa5\x3b\xb2\x6b\x3d\x38\xe9\xc2\x8d\xef\x3e\x0e\x2e\xad\x55\xf3\x0c\x2e\xad\xe0\xd2\x0a\x2e\xad\xe0\xd2\x0a\x2e\xad\xec\xf7\xe0\xd2\x7a\xd1\xdd\xfa\xcd\x9a\xed\xaa\x35\x06\x1e\x93\x61\x05\x92\x4c\xf6\xd3\xd0\x4f\x1b\x2c\xfc\x5a\x70\xdf\x15\x9e\xf8\xbe\xbc\xc2\x83\x1c\xfe\x1d\xfa\xa5\xf1\xda\x79\xf8\x4d\xe6\x44\x1e\x93\xd6\x79\xf7\x85\x97\x0f\x3d\x2e\xd0\x4d\xd4\xa8\x1e\xfe\xc8\x5f\x20\xcf\xbe\xbc\x13\xde\x58\xf4\x59\xcd\xae\x7e\x8b\x96\xba\x8a\x33\x1a\xcc\x76\x2b\x09\xf5\x86\x01\x07\x2c\x13\x7e\x81\xf1\xbc\xfc\x1d\xe6\x80\xff\x86\x15\x37\x59\xf5\xb3\xfc\x3e\xab\x7e\x9e\xdd\x6a\xd5\x8f\xf7\x53\x22\xb1\xfd\xa5\x06\x76\x34\xff\xed\x23\x09\x77\xf7\x87\xfc\x12\xb6\xb4\xda\x8d\xf1\xc6\x2e\xb6\xc6\x4d\xfe\xe6\xae\xb7\xa6\x23\x1b\x2e\xb9\x96\xe4\x7a\xab\x57\x5d\xa8\x71\xd8\x64\xc5\x0b\x45\x04\x0f\xd0\x4a\x11\x8c\x88\xc1\x88\x78\x8c\x46\x44\x13\x7c\x30\x9c\x63\x41\x98\xaa\xd0\x2d\xca\xd7\x09\xbc\xee\x17\x9d\x72\x52\x07\x34\x80\xb4\x68\x8f\xec\x85\x9c\x5d\x55\x6f\x2c\x50\xbe\xa4\xbd\xbc\x61\x3b\xdb\x81\xeb\x23\x87\x63\x66\x7b\xab\x52\x7a\x30\x42\x05\x23\x54\x79\x9e\x2f\x67\x84\xda\x80\xee\xc1\x59\xd4\x78\x55\x7d\x23\x86\xb4\x03\xbf\xb7\x0e\xc9\x8e\xf6\x56\x6f\xae\x60\x5f\xda\x01\xb9\xde\xea\x2d\xf6\x5a\x26\xe5\x97\xd7\xd2\x83\x25\x2d\x58\xd2\x82\x25\x2d\x58\xd2\x82\x25\xcd\xff\x3d\x58\xd2\x9a\xe8\xfe\x62\xea\x89\x15\x81\xbc\xea\xa3\x1f\xfe\x27\xff\x3b\x53\x4b\x7c\xd5\xa2\x29\x83\xf5\x42\x10\x38\x15\x5c\xd8\xfc\xc7\x5d\xd4\x27\xc5\xaa\x20\xf4\x42\x45\x83\x06\x5d\xc4\x64\x15\xdd\x9a\xb7\x8f\xab\x2c\xe9\xd2\xa0\x5f\x36\xff\x75\x79\xe1\xdb\x1d\x20\xb7\x32\xd4\x94\xd8\xf4\xea\x38\x6a\xb9\x9b\x8f\xf3\x8b\x41\xa2\x67\x9a\x24\x5a\x92\xb1\x52\xdb\x81\x48\xa3\xaf\x9e\x15\x57\xbb\xf2\xaf\x9a\x1b\x57\xc5\x1d\xaa\x58\x42\x1b\xeb\xf8\xae\xea\x14\xbb\xcd\x06\x25\x64\x41\xef\x5b\x61\x4e\x7f\x1b\x9c\xe0\x13\x51\x2f\xc5\x06\x36\x3d\xfb\x8d\xe7\x5e\x90\x31\x11\x84\x45\xe4\x00\x33\xb2\xd6\x49\x15\xfc\x62\x26\x69\xf3\x04\xb3\xf2\xdd\xfe\x54\x15\xb7\x7a\x5a\x41\xd4\x0d\xd5\x9b\x43\xf5\xe6\x50\xbd\xb9\x7c\xd4\x43\xf5\xe6\xb7\x51\xbd\xb9\x05\x97\xdd\x81\x6d\xaf\xd9\x60\x7b\xa0\x7a\x97\xfb\xfa\x5d\x4c\x12\xa2\x48\xad\xa0\x74\x09\x8f\x5f\x4b\x50\x32\xbd\xbf\x0d\x59\xc9\xcc\x25\x88\x4b\xdf\x8c\xb2\xe4\x16\xfc\x20\x94\x25\x73\xd6\x7c\x9d\x09\x92\x2b\x3c\xe5\xda\x64\x54\xbc\x4d\x33\xcb\x51\x24\x50\x1c\x8e\x9d\x65\xef\x97\xe2\x4b\x33\x87\x60\x43\x5a\x1e\x49\xb0\x21\x6d\xc7\x16\x0b\x3f\x56\xa0\x30\xbd\x38\xab\xdc\x44\xc0\x2a\xf0\xcb\x4b\x78\xfd\x38\xb9\x66\x79\xec\xc7\xcc\x3b\xbd\xd6\x0e\x83\x89\x7c\xbb\xec\x73\xe9\x88\xb7\x9b\xb8\x0d\xfd\x39\xde\x79\x1f\xca\xb5\x51\x77\xac\x0f\xf9\xf2\x28\xd6\xd1\x3a\x5e\x8f\xc4\x31\xb1\xff\x57\x71\x49\xbc\x39\x31\xf9\x9b\x33\x1a\x04\x1f\x4b\xf0\xb1\x04\x1f\x4b\xf0\xb1\x04\x1f\x0b\xda\xd4\xc7\xb2\x2b\x49\xeb\xa8\x1d\x12\xc7\x29\x2a\xbd\xac\x47\x22\x48\x4b\xc7\x2e\x2d\x1d\x8a\x52\x78\x5c\x2e\x96\x2d\xcb\x2a\x1f\x8a\x5e\xf8\x96\x8c\x83\xc7\xa5\x23\x1e\x9c\x39\xf0\x9b\x63\x7c\x9b\x99\xfe\x8e\x76\xba\x41\x2b\x0e\x5a\x71\xd0\x8a\x83\x56\x1c\xb4\x62\x14\xb4\xe2\xb5\xb5\xe2\xb7\x24\x28\x1e\x9d\x86\x1c\x64\xc5\xd7\x9e\xf0\x37\x26\x2b\x1e\x8a\x4d\xa0\xee\xe4\x1e\xa8\x65\xe0\xdb\x0c\x28\x3a\xe2\x9b\x20\xe4\xbc\x22\x6f\xe9\x42\xc0\xcd\xb7\xc2\x47\x0f\x3c\xe0\xe6\xed\xd9\x55\x8f\x98\x47\x86\x6c\xe0\x20\x56\xee\x68\xba\xc1\x04\x19\x4c\x90\xc1\x04\x19\x4c\x90\xc1\x04\x89\x0e\x3b\xf9\x79\xa5\xc1\x29\xe4\x3f\xef\xcb\xb0\x7a\xc4\x92\x62\xc8\x85\x0e\xc2\xe2\xee\xa6\x7b\xa8\xba\xf3\x21\xd9\x20\xe5\xfa\x75\x23\x56\x22\x71\xdb\x69\xff\xd6\xc0\xc0\xae\xa8\x74\x8a\xee\x31\xf1\x2b\xb9\x6f\x96\xb4\x0d\xfc\xae\x5b\xd1\x37\x8b\xbe\xbb\x45\x35\x7a\xe0\x5d\x6f\xb4\x1c\x7d\x00\x07\x6e\x20\x4e\x00\x07\x5e\x8b\x9b\x04\x70\xe0\x97\x00\x07\xde\xb9\xb2\x32\xe7\xb2\xfe\xe6\xbe\x23\x13\x2a\xe1\xc8\x36\xd4\x7c\x72\x77\x36\x14\x1e\x80\xad\xf0\x51\xbf\x80\x62\x32\x4f\xf8\x02\xec\x43\x0d\xd7\xb9\xeb\xe2\x76\x49\xa2\x3e\xf4\x1b\xdd\x8d\xfc\xa5\x74\x8e\x43\x91\x49\xf3\x79\x1f\x84\x14\xea\x87\xc4\x97\x8a\x99\x35\xb9\xb7\x1f\xac\x4f\x1b\x4c\x7f\x54\xc2\xfd\xb4\x72\x8b\x0f\x58\xf5\x03\x67\x02\x1b\x11\x77\x21\x8e\x52\xe5\x15\xf5\x90\x5a\xc2\x9a\x13\xa1\x16\xde\x9b\x64\x36\x57\x8b\xff\x1c\x30\xaa\x32\x07\x22\x9d\x30\x2e\x0c\x7b\xd3\x1f\x4f\x31\x8b\x13\x22\xf4\xed\xea\xda\x89\x30\x63\x5c\x81\xdc\x01\x13\x88\xd1\x13\xc5\x46\x4a\xe9\xdc\xf6\x5a\xbb\xd1\x8f\x29\x82\xea\x65\xfd\xe4\x6f\xaf\xd8\xf3\x4a\x78\xf8\x4f\x09\x1f\xe1\x24\x59\xa0\xb4\x68\xaf\xd0\x0d\x1c\xc8\x1c\x0e\x85\xf7\xbd\x3a\xb3\x0b\x2c\xae\x2d\x8b\x0b\x1c\x2e\xf0\x83\x56\x23\x39\x46\x7e\xa0\xb0\x7c\xf4\xab\xed\x81\x0c\xe4\x0a\x26\x16\x2a\x4d\x95\xcb\x4e\xfd\xab\xcd\x7b\x85\xb2\xb2\x2b\xde\xf5\x0b\xcd\xae\x78\xb5\x54\x7a\xb6\xf8\xcc\x16\xa3\x85\xc7\x30\xbd\xf2\x38\xdc\x8f\x7e\x87\xee\xb7\xbc\x65\xf7\xcb\x13\x11\x92\x72\xfb\x9a\x20\x4a\x2c\x86\x58\x29\xcd\x90\x76\x59\xef\xb6\x8f\xe5\x63\xeb\x7a\xb7\x85\x97\x0f\x5d\x02\x2b\x14\xbc\x2d\x8c\xfc\x05\x0a\xde\xae\xde\xc6\x6f\x4e\x46\x6b\x79\x24\x57\xcc\xfb\xf8\x8a\x27\xb6\x65\x30\x6b\x4c\xfc\x5b\x29\xa4\xd8\x8e\xe1\xae\xf2\xd9\x1d\x63\x51\xc5\xa6\x1b\xe4\x60\x46\x58\xba\xc4\xde\xe2\xc9\x2d\x5e\xc9\xe1\x88\x36\xd1\xa8\xed\x59\x3c\x9a\x13\x58\x92\xb4\x56\xcc\xed\xde\x2d\x90\x7d\xdd\xed\x84\xc3\x9b\x57\x41\x58\xdc\xf5\xa8\xf6\xe3\xf3\xf4\x56\x63\x9d\x30\xd7\x9e\x2b\x08\x68\x3c\x38\xd9\x19\x72\x81\xaf\xd9\xd1\x54\x53\x00\x4d\xa7\xd2\xaf\x21\x18\x71\x61\xa4\xcd\xd8\x9e\x59\xe3\xc3\xe9\xf4\x3b\xf7\xdd\xfe\x39\xea\xa0\x18\x2b\xac\x0f\xa9\x20\x73\x41\x24\x61\xca\x98\x22\x98\xa2\x6a\x81\x66\x3c\x26\x89\xb1\x03\x18\x77\xc1\x25\x56\xf8\x02\x2b\x9c\xf0\xc9\x19\xea\xc0\x3f\xf5\xc7\x54\x22\x9c\x48\x8e\xb0\xdb\x38\x24\x76\x4d\x60\x16\x3b\xf6\x80\x51\xc4\x67\x73\x9a\x98\xd8\x4b\xdf\xa5\x4b\x59\x4c\x9f\x68\x9c\xe2\x04\xf1\x11\xd8\x50\xce\x06\xac\xfb\x44\x98\x4a\x41\xc7\xc5\x49\x82\x6c\xb7\xee\x05\xcf\x80\xe1\x46\x29\xe9\x8c\x26\x58\x68\xe9\xd1\x8c\xf6\xc6\xb6\x85\xfa\x53\x92\x8d\x15\xc6\xa5\xa9\x39\xc3\x8f\x44\x22\xaa\xd0\x9c\x4b\x49\x47\x49\x7e\x8c\x1f\x7a\x08\xc6\x7d\x71\xd5\x03\x3f\x59\xa4\x10\x37\x7c\xd0\x75\x6e\x9d\xc6\xae\xc7\x19\x66\x8c\x40\xc7\x5c\x4d\x89\xb0\xdd\xdb\x97\x5f\xdb\xe5\xf5\x70\x6d\x43\x1a\xbb\x97\xcb\x3e\xaf\x7e\xe7\xfe\xe7\xfa\x18\xc6\xe5\x27\x57\x9d\x87\xeb\x8b\x9f\x86\xb7\x57\x9d\x8a\xd8\x48\xbb\xad\x5a\xbb\xcf\xfc\x91\x6d\x7e\x98\x8e\xae\x4c\xf3\xcb\x1b\x1d\x5a\x59\x1c\x5a\x9b\x1b\xda\xda\x1a\xda\x19\x1a\xea\xad\x0c\x7b\x08\x5d\x6a\x6f\x0a\xb8\xa2\xb2\x68\x0b\x38\x8e\x84\xf6\xc2\x90\xf5\x1c\xf6\x6d\x08\xf8\xe6\xac\x00\xdf\xa8\x09\x20\xe8\xff\x7b\xa1\xdb\x5b\x55\xfe\x0f\x5c\xf3\xdf\x26\x0e\x33\xcb\xd1\x0a\x81\x98\xcb\x81\x98\x24\xc4\x61\x86\x38\xcc\xb6\x04\x0a\x71\x98\x21\x0e\xf3\x18\xe2\x30\x5b\x29\x5a\xc1\x63\x7b\x08\x1e\xdb\x03\xd7\xd1\x0e\xd9\x61\xfb\x56\x35\x97\xe0\xbc\x0c\xce\xcb\xe0\xbc\x3c\xd2\x93\x1b\x9c\x97\xed\x69\x14\x9c\x97\xc1\x79\x19\x9c\x97\xc1\x79\x19\x9c\x97\xc1\x79\xf9\x9a\xa6\x91\x43\x88\x0d\x3d\x66\x97\x6d\xf0\xc4\xae\xf0\xc4\x1e\xb8\x92\x7f\x90\x8e\xd8\xb7\xaa\x23\x04\xd5\x3e\xf8\x25\xb7\x9a\xf6\x41\x29\xf5\x6f\xed\xde\x0c\xae\xd8\xf6\x84\x08\xae\xd8\xd6\xa4\x0a\xae\xd8\x06\xe2\x04\x57\x6c\x70\xc5\x7e\x83\xae\x58\x1a\x6f\x0d\x0b\xdf\x46\x6f\xd1\xb2\x62\xdc\x05\xf3\x50\x66\xdc\x12\xbf\x81\xf4\x88\xe5\x63\x66\x01\x6a\xa1\xcf\xf4\xe2\xa3\x50\x64\x2a\x27\xfc\x12\x0a\xcd\x36\x1a\x0b\x56\x9a\x83\x2b\x80\x2a\xd0\x4f\x72\xa3\xe2\x01\xe2\x58\x6e\xa3\xa3\x78\x13\xf3\xd4\x14\xa7\x7d\xf8\xc5\x93\x0f\x6e\xda\x41\xf0\x0b\x82\x5f\x90\x6d\x5a\x4e\x38\xc8\x36\x87\x2b\xdb\xbc\x96\xc2\x72\x78\xc7\xf3\xe8\xec\x13\x7b\x17\x4b\x0b\xf8\xcb\x8d\x30\x8e\xa6\x94\x1b\xb8\xee\xd2\x79\xc2\x71\xbc\x2a\x40\xee\x37\x94\xcb\x6a\x0d\xe2\xa6\x69\x57\x7f\x70\xe0\xd2\xe6\x52\x6c\x9c\x19\xf9\xb7\x80\xdc\x58\x3b\xf5\x57\x05\x6f\x84\xfd\x9b\xa1\x16\x65\xb0\x44\x85\xe8\xd1\x7d\xa9\x59\xe5\x0d\xde\x4a\xa3\x92\x7f\x3d\xf0\x2d\x9e\xad\xef\x4b\xe8\x4f\x6f\x32\xfb\xee\x0d\x7b\xb2\x82\xb7\xaa\x39\xa4\x60\x47\xd1\x6d\x03\xd6\xd7\x8a\x14\x9f\x8d\x28\xcb\x82\x79\xdc\x0e\xf9\xa3\x23\xd7\x1f\x01\x48\xcf\x82\xeb\x25\x8b\x5c\xcf\x96\xe5\xd6\x32\x29\x0c\x9d\x6a\x11\x38\x22\x42\x01\xbd\x39\x53\xe4\xab\x92\xe8\x14\x25\xf4\x91\xa0\xf7\xfa\xc8\xa3\xce\x6d\xef\xfd\x09\x7a\x7f\x85\x53\x16\x4d\xd1\x3c\xc1\x4c\xbe\x3f\x18\xe9\x2d\x28\xe4\xa1\x3a\x41\x70\xc5\xec\x43\x7b\x0f\xe6\x8a\x95\xd3\x0e\xe6\x8a\x37\xe3\x8a\x69\xa9\x33\x98\x8c\x35\x3c\x23\x87\xa2\x3d\x1c\x0d\xc0\x47\xd0\x1e\x82\xf6\x50\x31\xb5\xa0\x3d\x7c\x83\xda\xc3\x61\x50\x38\xa8\x0e\x41\x75\x08\xaa\x43\x50\x1d\x82\xea\xb0\x73\x32\x06\xd5\xa1\x49\x75\x80\xbf\x1c\x28\xc5\xba\x7a\x44\x6b\xfd\xa1\x05\x02\xc5\xd1\x28\x0f\x41\x71\x08\x8a\x43\x50\x1c\x5e\x5c\x71\x38\x98\x09\xbd\xbd\x64\xfa\x90\x8e\x1e\xd2\xd1\x43\x3a\x7a\x4d\x3a\xfa\x4b\x89\x6c\x46\x5e\x3b\xb2\xf8\xfb\xa3\x10\xda\x5e\x2d\x00\xff\xed\x89\x71\x21\xa5\x20\xa4\x14\x04\x33\x64\x48\x29\x08\x86\xb6\x60\x68\x3b\x68\x43\xdb\x6b\x59\xcf\x5f\xf8\x78\xbe\x80\x70\x7a\xe0\x11\xcb\x7f\x39\x06\x09\xf4\x05\x63\x0e\x82\x95\x2d\x58\xd9\xaa\x29\x73\x9c\xee\xf9\x83\xb9\xf5\x03\x7a\x4c\x90\xf8\x43\xe0\x41\x08\x3c\x58\x49\x9c\xa0\x0f\x05\x7d\xe8\xe0\xf4\xa1\x57\x54\x14\x0e\x2e\x4c\x39\x68\x0c\x41\x63\x08\x1a\xc3\x9b\xd5\x18\x0e\x86\xc2\x41\x5d\x08\xea\x42\x50\x17\x82\xba\xd0\x4c\x9c\xa0\x2e\x04\x75\x21\xa8\x0b\x07\x1d\x9a\x7c\x2c\x0a\x43\x50\x16\x82\xb2\x70\xd8\xca\xc2\xc1\x4c\x28\x04\xf1\x86\x20\xde\x10\xc4\xfb\xcd\x04\xf1\xbe\x51\x85\x7d\xaf\x62\x9a\x63\x91\x4d\x82\xd7\xb2\xbc\xf4\xcb\x12\x63\x3d\x58\x91\x29\x1f\xed\xa6\x10\x89\xbb\x22\xf5\x33\x17\x8f\xe3\x84\x3f\x0f\x33\xad\xce\x06\x85\xe7\xff\xb6\xf9\x7c\xde\x0f\xb9\xf0\xec\xfd\x98\x09\xd1\xde\x6f\xae\xf5\x82\x0c\x3d\x4f\x57\x21\x69\x4a\xc4\x05\x4a\xe7\x31\xfc\x19\xa5\x52\xf1\x59\xbd\x54\xfd\x19\xab\x68\x8a\x47\x09\xe9\x64\xfd\x5e\x70\x36\xa6\x93\xd4\xec\x8f\xdf\x80\x15\x62\x27\xd9\x9c\x38\xc9\x48\x33\x45\x37\xbe\x26\x49\xfc\x01\xc6\xf1\xc5\xbe\x99\x77\x72\x14\x01\xe8\xcb\xc3\x36\xd3\x79\x29\x64\xce\xe2\x2e\xda\x96\xc5\x79\xad\x1d\x86\xf8\xb3\x7c\x26\x56\x89\xaa\x60\x85\xce\x34\x13\x1a\xc3\xe6\x7c\x9e\x52\xb0\xac\x81\x25\x0e\xac\x4f\x79\xc3\xe8\x99\x26\x09\x48\x1c\x86\x16\x87\x37\xf3\x56\xda\x8b\x9d\xb8\x3d\x7b\x6f\x62\xde\x8e\x79\xac\x98\xb9\x3b\x82\xc6\x0d\x71\xa4\xd3\x7e\x4d\x84\xdd\x15\x8c\xec\x55\x71\x76\x6b\xaf\xcf\x9a\x9c\xaa\x0f\xff\x53\x79\x25\xb6\x29\xcc\xf8\xda\xf7\xe0\x27\xa2\xde\xcc\x25\xf8\x89\xa8\x97\xba\x01\xdf\xe2\xb5\xb7\xe9\x5d\xd7\xc8\xf8\x04\x19\x13\x41\x58\x44\x8e\x35\x27\x6b\xe9\x8a\x3b\xda\xe9\x6e\x74\xb3\x1d\xed\x6c\xd7\x31\x60\x7d\x31\x93\xb4\xe6\xaa\x99\x63\xb9\xfe\x54\x15\xb7\xee\xe5\x82\x0b\xcc\x1a\xab\xfa\x9d\xfb\x9f\x87\x77\xdd\xfb\x9b\x87\xbb\x8b\xee\x39\xea\xc0\x41\x87\x6f\x0c\x7b\xa7\xff\x84\xe6\x20\x1f\x36\x33\x86\x09\x73\xc7\x49\x60\xd5\xe0\x06\xd7\x54\x44\xa7\xe8\xe2\xea\xe1\xbe\xdf\xbd\xab\x69\xd0\x32\x7f\xca\x26\x48\x91\xd9\x3c\xc1\x8a\xc4\xe8\x31\x1d\x11\xc1\x08\x28\x56\x49\x2a\x15\x11\xb9\x73\xdc\x34\xda\xfd\xaf\xee\xc5\x43\xbf\x77\x73\x3d\xfc\xfb\x43\xf7\xa1\x7b\x8e\xdc\x2d\xa2\x9b\xd5\xe3\xd2\xa3\x88\x17\x0c\xcf\x68\x64\x7e\xc8\xea\x5c\xa2\xdf\x53\x92\x12\x84\xa5\xa4\x13\x36\x23\x4c\x95\x5b\x74\x03\xbe\xea\xfc\xd8\xbd\x2a\xb6\x3c\x25\xe8\xe7\xbf\xe5\x83\x4a\xf0\x88\x24\xd6\x5b\x0f\x0e\x68\x7d\x79\xe5\x1d\x59\x37\x7e\x6a\xa8\xfa\xf7\x87\xce\x55\xaf\xff\xeb\xf0\xe6\xe3\xf0\xbe\x7b\xf7\x4b\xef\xa2\x3b\xb4\xc6\x98\x8b\x8e\xee\xb7\xd0\x93\xb5\xd9\xa0\xdf\x53\x9c\x50\xb5\xd0\xeb\x28\xcd\xa5\x8f\x9e\xa7\x84\xa1\x94\xc1\x05\x62\x2c\x85\x98\x79\x9d\xca\x39\x89\xcc\x8c\x6e\xaf\x1e\x3e\xf5\xae\x87\x37\xbf\x74\xef\xee\x7a\x97\xdd\x73\x74\x4f\x12\xb0\xa5\x39\xa2\xc3\x2a\xce\x93\x74\xa2\x39\xc1\x6c\x9e\x10\x4d\x0d\x63\x2b\x1c\x91\x29\x7e\xa2\x5c\xd8\xeb\x78\x42\x9f\x08\x33\x74\xd4\xdb\xca\xb4\xef\x6c\x56\x43\x8f\x74\x37\xd7\x1f\x7b\x9f\xce\x51\x27\x8e\xb3\x39\x48\x68\xa3\xb0\x73\xdc\xd1\x3d\x2d\x0e\x9b\x8e\x69\x04\xdd\x9b\x4d\xc4\x9f\x88\x10\x34\x26\xa5\x7d\xd4\xb9\xbf\xef\x7d\xba\xfe\xdc\xbd\xee\x03\xc5\x94\xe0\x89\x44\x53\xfe\x0c\x8e\x5e\x98\x21\xf8\x7f\x9f\x30\x4d\xa0\x33\xb7\x58\x9c\xf9\xa7\xdf\xeb\xd9\x98\x35\x45\xca\x5e\xdd\x77\x59\x38\x78\xcb\xd6\xbe\xf2\x49\x5a\x7e\xa3\x74\x2c\x9a\x5e\x28\xec\xf2\xe5\x17\x57\xed\xd6\xe5\x2f\x4a\xdb\xad\xde\xc6\xb9\xb4\x5f\xea\x67\x9a\xaf\x75\x6b\x13\x67\x91\x86\xfb\x90\xb1\xdd\xd7\xef\x62\x92\x10\x45\x6a\x65\xe2\x4b\x78\xfc\xfa\x32\xb1\x19\xc7\x9b\x11\x8b\xcd\x74\x82\x64\x1c\x24\xe3\xd6\x13\x0e\x92\x71\xd5\x84\xdf\x88\x64\x7c\x80\x56\x1f\xc7\xa2\x0e\xce\xea\x13\xfc\x23\xa5\x95\x3a\xce\x2b\xf0\xd5\xdc\x23\xc1\x7f\xb0\xde\x15\x72\xfc\xf3\x0e\xfe\x83\xe0\x3f\xa8\xbc\x49\xde\xbc\xd7\xe0\x38\xaf\x86\x17\x74\x1a\x04\x35\xa2\x61\xbe\x41\x8d\x38\xb2\xd9\x06\x03\x7b\x30\xb0\x07\x03\x7b\x30\xb0\x07\x03\x3b\xda\xd4\xc0\xde\x82\xcb\xbe\x84\x39\xf5\x40\x83\x88\xdf\x8a\xdb\xe0\x38\xe5\xe2\x97\xf5\x1a\x04\xd1\xb8\x61\xbe\x41\x34\x3e\xb2\xd9\x1e\xa0\x5d\xe4\xb0\x2c\xec\x34\xae\x32\x88\xbc\x20\x34\xbd\x1b\x49\x5b\x78\x7a\x47\xd0\x5e\x7c\x14\xec\xfc\xd5\x10\xea\x03\x9e\x7b\xc0\x73\x0f\x70\x2d\x01\xcf\x1d\x05\x40\x92\x00\x48\x72\xc8\x80\x24\x2d\x96\xf1\x2d\xe0\xb9\xbf\x8c\x85\xe1\x0d\x25\x29\x3b\xc1\x50\x16\x62\x37\xb8\x5c\x15\xbc\x01\x56\x82\x74\x9e\x70\x1c\x37\x81\xc5\x38\x39\xd2\x07\x8c\x69\x10\x3d\x4d\xdb\x5f\x96\x95\xa7\x83\x95\x3c\xdd\x58\xcd\xc8\x5f\xca\x7c\x70\x30\x0a\x97\x9b\xf6\x41\xa8\x59\x2d\x6b\xb7\xee\x5c\xed\xaa\xda\xe4\xad\x35\x2c\xf9\xd7\x63\xda\xe6\x2f\x04\xa9\xfa\xf6\x0a\x7f\x05\xe8\xa7\x00\xfd\x54\x4b\x99\xe3\xc4\x89\x3d\x18\x89\x2e\x28\xe9\x01\x53\x35\x60\xaa\xee\x43\xa3\x0f\x26\x8c\x95\xd3\x0e\x26\x8c\x37\x81\xa9\xba\xa6\x0e\xb1\xc7\x9a\x0c\xdb\x69\x13\x47\x95\xb3\x17\xb4\x89\xa0\x4d\x54\x4c\x2d\x68\x13\xdf\xa0\x36\x71\x18\x14\x0e\xaa\x44\x50\x25\x82\x2a\x11\x54\x89\xa0\x4a\xec\x9c\x8c\x41\x95\x78\x9d\x7a\x0d\x55\xfa\x44\xcb\x5c\xb7\xa3\x52\x26\x82\x22\x11\x14\x89\xa0\x48\x84\x8a\x14\xcd\x73\x0a\x15\x29\x42\x45\x8a\x50\x91\xe2\x0d\x54\xa4\x78\x49\x11\xae\x06\x06\xf9\x38\xe2\xf7\x8f\x42\x88\x7b\xb5\x00\xfe\xb7\x27\xd2\x85\x94\x84\x90\x92\x10\x4c\x94\x21\x25\x21\x18\xe1\x82\x11\xee\xa0\x8d\x70\xaf\x65\x59\x7f\xe1\xe3\xf9\x42\x82\xea\x91\x44\x3b\xff\xe5\x18\xa4\xd1\x17\x8e\x4f\x08\x16\xb8\x60\x81\xab\xa6\xcc\x71\xba\xf2\x0f\x46\x0a\x38\xc6\x92\x94\x41\x03\x68\x4f\x88\x10\xa4\xd0\x9e\x56\x21\x48\xa1\x81\x38\x41\x3f\x0a\xfa\xd1\xc1\xe9\x47\xaf\xac\x38\x1c\x6c\x88\x73\xd0\x20\xcc\x7b\x41\x83\x08\x1a\xc4\x1b\xd5\x20\x0e\x86\xc2\x41\x7d\x08\xea\x43\x50\x1f\x82\xfa\xd0\x4c\x9c\xa0\x3e\x04\xf5\x21\xa8\x0f\x47\x13\xd6\x7c\x4c\x0a\x44\x50\x1e\x82\xf2\x70\xd8\xca\xc3\xc1\x4c\x28\x04\x00\x87\x00\xe0\x10\x00\xfc\xcd\x04\x00\xbf\x51\x05\x7e\xb7\x62\xdb\xbf\x59\x42\xbd\xf3\x04\x8c\x4c\x12\x79\xf7\x63\xc2\x47\xfd\xc5\x9c\xe8\xff\xbf\xa4\x33\xc2\x24\x50\x82\xaa\x85\x2f\xa6\xd5\x6c\xa8\xe5\xad\xf4\xee\xbe\x77\xfd\xe9\xca\xaf\x3b\xf2\xee\xf3\xc3\x55\xbf\x77\xdb\xb9\xcb\x96\x3b\x9b\x95\xbf\xc4\xf6\xbb\x82\xa4\x69\x4f\xf2\x1d\xd1\x2a\x35\x30\x83\x7b\x85\x55\x2a\x37\x1b\xd9\x5d\xf7\xbe\x7b\xf7\x0b\xd4\x4d\x19\x5e\xf6\xee\x3b\x3f\x5e\x15\xf6\x79\xe1\x79\xe7\xe2\xef\x0f\xbd\xbb\xfa\xe7\xdd\xff\xea\xdd\xf7\xef\xeb\x9e\xde\x75\xaf\xba\x9d\xfb\xfa\xaf\x3f\x76\x7a\x57\x0f\x77\xdd\x46\x7a\x34\x8e\xb6\x59\xb7\x92\x40\x24\xa8\x1d\x80\x22\xcb\x0c\x45\x4e\x43\x94\x49\xc5\x8e\xcb\x57\xf5\x75\x8e\x1e\xac\xa9\x82\xda\xc6\xcd\xbd\xe1\x35\x64\x74\xac\x98\x4a\x3c\x4a\x48\xbc\xd4\x92\xa3\x61\x5d\x4b\xb8\x30\xa8\x67\x2c\x3d\x49\x5a\xb3\xf2\xc8\x1c\x1f\x04\xd5\x9c\x14\x61\x71\x45\x1f\x66\x1d\x6a\x7b\x60\x9a\x25\xd3\x27\x52\xe8\x29\x4a\x85\x20\x4c\x25\x0b\x44\xbe\x52\xa9\xe4\x52\xa3\x6e\xf9\xea\x9a\xb5\x0c\x21\x6b\x70\x8a\x25\x1a\x11\xc2\x8a\xe3\x17\x24\x21\x58\x56\x8c\xd9\xae\x7e\x3b\xb2\x64\x6b\x65\x8d\x4c\xe6\x8e\x1d\x63\x9a\xa4\x82\x94\x4e\x0b\x9f\xcd\xb1\xa0\x92\xb3\xee\x57\x7d\x45\xeb\x83\x7c\x03\x9f\x73\xb1\xd9\x89\xe9\xfe\xdd\xdf\xc1\xd7\xc5\x7f\x7e\xea\x17\xff\x55\x38\xf3\x57\xfd\xe2\xbf\x9a\xf7\xba\xd7\x70\x79\x67\x9f\xa2\x4f\xfd\x73\xf4\x09\x20\x46\x05\xea\x4f\xb1\xd9\xb1\x57\xfd\x73\x74\x45\xa4\x84\x5f\xf2\x8f\x15\x55\x09\xcc\xed\x47\xca\xb0\x58\x20\x37\x7d\x53\x12\x0c\x47\x53\x44\x32\xd2\x94\x89\xc7\xfe\x91\x32\xb0\x48\xe4\xd4\xbb\xe2\x13\x1a\xe1\x64\x3b\x22\x76\xae\x0b\x7c\xe0\xe6\xae\x91\x14\xfe\xdb\xcb\xb4\xe8\x5c\x5f\x42\xb9\x2d\x37\xd4\x8a\x99\x5f\x13\xa9\x37\x49\xc4\x59\x6c\x7d\x6a\x5a\xa8\x59\x78\xba\xca\x3f\x38\x94\x2c\x4b\x25\x65\x13\xdd\x22\xfa\x80\x6e\xee\x06\xec\x46\xc4\xc6\xbe\x4b\xb4\x90\x6f\xf6\x1c\x95\x88\x71\x85\xe8\x6c\xce\x85\xc2\x4c\x69\xfd\x06\xa4\x1b\x4b\x11\xc3\x01\x2e\xf8\x6c\x96\x2a\xac\x0f\xda\x12\x51\x99\xb1\xf2\xdc\x13\xd5\x8b\xc1\x11\x56\x41\x43\x23\xfe\xe4\x73\x99\x0b\xdd\xbe\x16\xbd\x8a\xa6\x01\x1a\x2f\x69\xe8\xae\x09\x2c\x04\x2e\x5e\xc0\xef\xa8\x22\xb3\xf2\xfb\x2d\xaf\xdd\x7f\x55\xda\x3d\x2e\x4c\x56\x04\x11\x1d\x11\x4d\xa9\x22\x91\xd2\x47\x70\xa3\x3d\xf1\x70\xfd\xf3\xf5\xcd\x17\x5f\x30\x7a\xd7\xf9\x7c\xf9\x1f\x05\x18\xd8\xce\xdd\xe7\xa5\x1f\x86\xbf\xfc\xc7\xd2\x2f\xff\xff\xc6\xfd\x54\xee\x69\xc9\x7c\xe1\xcd\xe5\x14\x34\x05\x30\x75\xbb\xa9\x22\x3a\xc3\x13\x82\x64\x3a\xd7\x3b\x40\x9e\x15\xd7\x57\x4b\xca\x57\x1c\xc7\x94\x4d\x4c\x55\xa9\x2b\xaa\x88\xc0\xc9\x67\x3c\xff\xe8\xcc\xf2\x1b\x50\xe7\xff\xdc\x17\x2a\x9b\xbd\xfb\xb5\xf3\xd9\xaf\x8d\xf6\xee\xf6\xee\xa6\x7f\xd3\x38\xeb\x42\x0b\xcb\xc7\x48\x3f\x3e\x87\xff\x45\x1f\x90\x6e\x3d\x13\xe8\x67\x44\x61\xad\xe8\xa0\xef\x4c\x21\x9e\x2c\x13\x86\xb2\x04\x4e\xcd\x5c\xd0\x19\x85\x2b\xc5\x18\x26\xbf\x37\x3a\x43\xa6\x14\x65\xe7\xc6\x7c\x00\x46\x00\x77\x29\xb3\x18\x8b\x18\xfd\x43\x96\x0b\xed\x81\x3d\xdc\xfc\x40\x62\x74\x8a\xa6\x4a\xcd\xe5\xf9\x87\x0f\xcf\xcf\xcf\x67\xfa\x6d\x2d\xc0\x7e\xd0\x7f\x9c\x12\x76\x36\x55\xb3\xc4\x14\x16\xd4\x54\x38\x47\xb7\x82\xeb\x2b\x04\xec\x0e\x44\x50\x9c\xd0\x7f\x92\x18\x8d\x0c\xff\xe3\x63\xf4\x5b\xc4\x05\x39\xcb\x17\xc6\xda\xca\xec\x3d\x62\xed\x69\x1f\xf4\x4b\x15\xcc\xa4\xbc\x9e\x28\x26\x11\x8d\xad\x98\x41\x58\xc4\xc1\xa0\x6a\x5c\x30\xba\x3d\x57\xbd\x48\x2b\x6a\xf3\x54\xe5\xe4\xf4\x74\x30\x1c\x13\xaf\x2e\xa0\x95\xaf\xb3\x0d\xa7\xf5\xb9\x9e\xd1\xc6\x53\x49\x04\xdc\xad\x18\x6e\x55\xf7\xea\x5c\x4f\x38\xe2\x09\x1a\xa5\xe3\x31\x11\x7e\xf8\xc0\x89\x56\xd2\xa8\x44\x82\x44\x7c\x36\x03\x89\x41\x7f\x95\x4a\xb3\xab\x81\x62\x76\xb4\x67\x03\x06\xeb\xaf\xb5\x37\xd8\x01\x31\x07\x56\xc7\x08\x89\x11\x66\x0b\xd3\xcd\x28\x1d\xfb\xed\x9b\x82\x9d\x38\x46\x54\x0d\x58\x27\x49\x90\x20\x33\xae\x88\x57\x97\x09\x5c\x9d\x45\x82\x03\x8b\x14\x64\x9e\xe0\x88\xc4\x66\x3f\x24\x3c\xc2\x09\x1a\xd3\x84\xc8\x85\x54\x64\xe6\x37\xf0\x1d\x98\xa0\x34\xcd\xa8\x44\x31\x7f\x66\x09\xc7\x76\x1e\xe5\xcf\xbe\x2f\x9e\xc6\xae\x2b\xa6\xd8\x15\x82\x0b\xf8\x9f\x9f\x29\x8b\x77\xc6\xa1\x1e\xee\xbb\x77\xfe\xbf\xef\x7f\xbd\xef\x77\x3f\xaf\xc7\x7d\xb2\x9d\x05\xc3\x03\xd3\xc4\x39\xba\x37\x44\xe0\x42\x4b\x44\xa2\x66\x52\x9f\xed\x56\xca\x7f\xe0\xf1\x86\xdc\xf7\x73\xe7\xfa\xa1\x53\xe0\x28\xf7\x17\x3f\x75\x2f\x1f\x4a\xfa\x80\x9d\x5f\x41\x86\x37\x5a\xad\xff\xdb\xc5\x4f\xbd\xab\xcb\x61\x85\x1e\xfc\xee\xae\x7b\x71\xf3\x4b\xf7\x2e\x57\x59\x2b\x49\x54\x1a\x4c\x99\x59\xf5\x0d\x53\x9a\xf2\x18\x8d\x16\xd5\xa5\x33\xb5\xe4\x9c\x80\xe7\x3c\x2f\x1e\x6b\x5a\x3d\x07\xde\xe4\xaa\x98\xe6\x5f\xcc\x78\x4c\x4e\xec\x3b\x50\x73\xd4\xd8\x8c\x8c\xc4\x5c\xdd\xb0\xee\x1d\x33\xcf\xfe\x62\xca\x81\x66\x84\x3b\x47\x1d\x24\xf5\x8b\xa9\x3e\xd4\x82\x4e\x26\x60\x0f\x2d\x0d\xd5\xb4\x66\x3f\x05\xf2\xc2\x77\x66\xfd\xe7\x82\xc3\x39\xd7\xdd\x5a\x43\x7a\x66\x6c\x31\x1f\x42\x7d\xda\x62\x8b\x02\x83\x1d\xa5\x62\x68\x6e\xb1\x34\x11\x6a\xe9\x65\xce\xa3\x31\x83\xe9\xc3\x05\x6c\x4b\x1a\x33\xee\x5c\x90\x27\xca\x53\xef\x53\x5b\x02\xb5\xb0\xe2\x95\xcd\xe7\x04\x00\xb2\x19\x5b\x4f\xa9\x99\x6c\x7b\x54\xb6\xa0\x59\xd8\x13\xb4\x30\x16\x7c\x56\xd1\x46\xf1\x98\xf4\x6e\xee\x95\xc0\x8a\x4c\x16\x97\x96\x65\x6c\x7e\x3c\x2e\x6f\xbe\x5c\x5f\xdd\x74\x2e\x87\xdd\xce\xa7\xe2\x89\xcf\x9e\xdc\xf7\xef\xba\x9d\xcf\xc5\x47\xc3\xeb\x9b\xfe\xd0\xbd\xd1\xb8\xe5\x6b\x3a\x58\xbe\xa7\x8b\x2f\x9e\x23\xcd\x72\x81\x35\x3e\xd3\x24\xd1\x97\x89\xc7\x1f\x47\x64\xcc\x85\xe1\xf3\x33\x17\x68\x62\x45\x18\x47\x5b\xab\x8b\x95\x66\x71\x0e\x06\xbf\xaa\x26\x8d\x31\x5f\x09\x82\x67\x70\x4f\x60\x86\xba\x2c\x3e\xbd\x19\x9f\xde\x9b\x1f\x67\x58\x3c\x12\x91\x7d\xfa\x2c\xa8\x52\x84\x15\x54\x3a\xec\x86\x9c\x29\x89\x79\x07\x67\xe8\x4e\xf3\x7d\xfd\x7e\x76\xa9\xe9\xcd\x1e\x13\x85\x69\x22\xed\x60\x0b\x74\x3d\x47\x57\x58\x4c\x72\xf3\xe2\x77\x7c\x3c\x36\x8d\x7d\x6f\x86\xa1\xef\xb0\xc2\x2c\x2a\x78\xaf\xde\x1a\xee\x5e\x84\xfe\xec\xcb\x99\x3c\xbc\xbc\xab\x1e\xe6\xdb\xed\xa9\x87\x5b\xa0\xb8\xd1\xd8\x0b\xba\xa1\x7d\x52\xb1\xd7\x60\xe2\xe6\x71\xf3\x25\x53\xdd\xf6\xf2\x76\x2a\xbe\x58\xb1\x9d\x4c\x2d\x13\xbd\xf2\x63\xad\x6d\x56\xec\x25\xf2\x95\x5a\x83\x81\x3f\xee\xd2\x16\xca\x9b\x01\xab\x31\x9e\xcf\x09\x16\xb2\x6a\xb5\x8b\x62\x60\xcd\xda\x9b\x9e\xfc\x3e\xec\x22\xbb\x7e\x4e\x10\x67\x60\x70\xc8\x84\x88\xd2\x8e\x6c\xb1\x07\x4c\x5b\x4b\x3b\xe0\x16\xea\x52\xdf\xd8\x1a\xd0\x9f\xa9\xd4\x4a\xa3\xf9\xf1\x47\x5b\x9c\x7a\xb3\x0d\xf1\xb1\xd3\xbb\x2a\x09\x17\xc3\xcb\xee\xc7\xce\xc3\x55\xb3\x99\xb0\xf0\x5d\x79\x89\xd1\x29\xd2\xcf\x8b\xe1\x00\x74\x6c\xee\x0c\x57\x62\xdb\xa8\xb4\x84\x81\xd1\xca\x96\xbf\x35\x66\xf8\x98\xcc\x13\xbe\x98\x11\x06\x26\x9e\xc2\x4d\xa8\xe9\x39\xc6\xd4\x5e\x2d\xde\x60\xc1\x8a\x63\xcd\x6e\x70\x8d\x9d\xba\xba\xde\x24\xce\x6e\xde\x62\x59\xef\x12\xeb\xbe\x35\x4e\x41\xfb\x7f\xf7\x0a\xab\x0d\xcf\x58\xe7\xa2\xdf\xfb\xa5\x5b\xd4\x0f\x2f\x7e\xea\xfd\x52\x25\xd5\x0c\x3f\x75\xaf\xbb\x77\x9d\xfe\x0a\xe1\xa4\xd4\x64\x95\x70\x22\xf5\x80\xcb\x4e\x61\x2a\xb3\x40\xa7\xc8\x14\x07\x47\x54\x49\xf4\x44\x25\x1d\x51\x28\xa5\x6e\x1d\xac\x0f\x3d\xe0\xac\x4f\x38\xa1\x31\x55\x0b\x27\xbe\x98\x7e\x8b\xeb\xa8\x39\xa9\x6d\xdf\x98\x1d\x7c\xb7\x2b\x58\xf9\xcc\xe2\xb8\x49\x9f\x23\xd0\x6d\x9f\x40\x69\xf3\x3e\x63\x5a\x90\x66\x13\x22\xcc\x70\xc0\xa9\xe4\x8f\xc5\x7b\xae\x47\xe5\x0b\x2b\x39\xd5\x32\xa1\x75\x42\x18\x11\x50\x2e\x3f\xeb\xc4\x08\x52\x82\xb0\xf7\x5a\xe6\x9a\x27\x34\xa2\x2a\x59\xa0\x08\x6c\x58\x60\xce\x9c\x61\x86\x27\x56\x38\x00\x35\xa7\xb4\x25\xfe\x6e\xea\xcd\xdf\x8c\xad\x69\xbf\x4f\xc9\x86\xc7\xec\xe1\xfa\xb2\xfb\xb1\x77\x5d\xdc\x02\x3f\xf5\x3e\x15\x44\xd8\xcf\xdd\xcb\xde\x43\xe1\x36\xd7\x92\x6c\xb3\x5c\x5f\x6e\xb6\xe2\x28\x66\x2f\x9d\xa3\x4b\xf3\xe9\xb9\x26\x6e\x45\x31\xfd\x4c\xf9\x2d\xd1\xe1\xce\x45\x1a\xba\x3f\xba\x4c\x89\x4a\xbf\x44\x5b\x13\x92\xf5\x0a\x15\x6c\x48\xd5\x11\x18\x4b\x7d\x5f\x97\x7d\xe5\xe5\x29\xbb\x17\x21\x44\xf6\x2c\xb7\x2c\xf9\xa1\x19\x60\x34\xa8\x33\x62\x55\x78\xeb\x72\x86\xfd\x0b\x78\xde\x67\xa9\x54\xc6\x43\x0a\x9b\x13\x3d\xfe\x4d\x6a\x82\x82\x07\xf5\x0c\xdd\x13\x32\x60\xce\x7a\x30\xa1\x6a\x9a\x8e\xce\x22\x3e\xfb\xf0\x98\x8e\x88\x60\x44\x11\xf9\x01\xcf\xe9\x0c\x6b\x49\x9a\x88\xc5\x87\x51\xc2\x47\x1f\x66\x58\x2a\x22\x3e\xcc\x1f\x27\x10\xd8\xe3\x3c\x5d\x1f\xb2\x66\x27\xfc\xdf\xaf\xfe\xf2\xc3\xe9\xd5\xdf\x7e\x78\xb7\x6c\x21\xab\x5b\xff\x2e\x8b\xf0\x5c\xa6\x89\x0d\x04\x14\x3e\x6d\xdc\x91\x4f\xc9\xaa\xf5\xbe\x2e\x2e\xd7\x76\xfa\xeb\xc5\xed\x43\xc1\x62\x5d\xfc\xe7\xe7\xee\xe7\x9b\xbb\x5f\x0b\x9c\xb2\x7f\x73\xd7\xf9\x54\x60\xa8\xdd\xdb\x9f\xba\x9f\xbb\x77\x9d\xab\xa1\x7b\xb8\x8d\xed\xed\x67\xc6\x9f\x59\x91\x34\xd2\x71\xc0\xa5\x9e\xce\xd1\x47\x2e\xd0\xcf\xd9\x4a\x9e\x8e\xb0\x84\x2b\xc6\xdd\x59\xf2\x04\xcd\x79\x0c\x8c\x17\x91\xf9\x94\xcc\x88\xc0\x89\xb5\x19\x48\xc5\x05\x9e\x98\x9b\x5e\x46\x02\xab\x68\x8a\xe4\x1c\x47\xe4\x04\x45\xb0\x1b\x26\x27\xb0\x28\xa0\x6a\xf1\x49\xd9\xce\x77\x97\x32\x45\x67\xc4\xa9\xe0\xf6\x9f\x7d\xb3\x18\x1b\x2c\xce\x4d\xff\xa7\xa2\xb0\xf7\xf1\xea\xd7\x7e\x77\x78\x7f\xf9\x73\x23\x3d\xcd\x67\x85\x91\xdd\x43\x5c\xd5\x05\x4f\xd2\x19\xf3\xff\xde\x7c\x6c\xbd\xeb\x7e\xf7\x53\x79\x74\x37\x9d\x7e\x71\x67\xdc\x15\xe3\xf6\xde\xfd\x78\x73\x73\xd5\x2d\x78\xba\xdf\x5d\x76\xfa\xdd\x7e\xef\x73\x61\xff\x5c\x3e\xdc\x81\x0f\xa8\x71\x9a\x6e\x04\x15\x13\xd5\xd3\xf2\xa7\xb9\x6b\x56\xd8\x8a\x13\x75\x6c\xf8\xbf\x39\xcb\xa7\x1e\x5e\x8e\x89\x72\x03\xab\xce\x69\x66\x52\x8d\xcc\x48\x2b\xd9\xa1\x2a\x2e\x13\xaa\x67\xc7\x8d\x0b\xdd\xc4\x95\xfb\xd9\x10\x60\x5c\x67\x46\xd9\xc6\x49\xc2\x9f\x4d\x84\xf2\x8c\xea\x5b\xd9\x16\x5b\xd7\xaf\xc8\xdc\x43\x78\x56\xc1\xf1\x8a\xcb\x42\x22\x41\xd4\x67\x9e\x32\xb5\xf9\x96\xeb\x5c\x17\xf8\x4e\xf7\xfa\x97\xe1\x2f\x9d\xe2\x0e\xec\x5d\x35\xb3\x1a\xbf\x89\x8a\xab\xb8\x73\xfd\x6b\x76\x09\x43\x1c\xfb\x49\xa6\xa1\x1a\xd9\x35\x4a\xa8\x16\x7b\x23\xac\xb5\xd7\x04\x24\x1a\x44\x28\x98\x1c\x66\x7a\x72\x10\x37\x3b\x37\xfe\x24\xc3\x9f\xcc\x20\xcf\xdd\x1f\xa5\xf6\x24\xd0\x05\xac\xa9\x2e\x4d\x00\xda\xb1\x5a\x35\x43\x84\x3d\x51\xc1\x19\x08\xdb\x4f\x58\x50\x2d\x8d\x9b\x96\xf5\x5c\xcf\xe1\x7f\xd7\x6b\x13\x0c\xa3\x25\xc6\x75\xcf\x85\xba\xcc\xe2\x93\x37\xb3\x86\x54\xc5\xe9\x2e\x47\xe8\x56\x1b\x3a\x96\xbf\xad\x58\x9c\x2d\xe3\x98\x8b\x13\xfe\x3d\xb9\xa4\x38\xd1\x0c\x60\x77\xf2\x62\xe7\xfa\xbe\x57\x94\x1f\x8b\x6a\x86\xc7\x97\x37\x96\x17\xc1\x50\x69\x46\xee\x94\x89\xfb\xbf\x5f\x19\xed\x42\x6f\x12\x7b\x6e\x3d\xc5\x02\x04\x20\x57\x85\x74\x8e\x85\x2c\x7d\x21\x11\x20\x99\xe5\x71\x64\xfa\xce\x82\x28\xad\x27\x4e\xe3\x01\x23\x5f\xe7\x84\x49\x08\x0e\x30\xf7\x59\xee\x6b\x97\x67\xa8\x37\x06\x96\xa0\x5f\x67\x28\x65\xd6\x01\xa6\x2f\x5c\x33\xc8\x13\x2d\xca\xda\x21\x64\x1a\x22\x18\x5e\x18\x71\x31\x60\xf9\xe0\x07\xec\x4b\xe6\x44\x83\x47\x63\xae\x19\x90\x5e\x45\xdb\xde\x39\xc2\x4c\xd2\x13\xa4\x15\x96\xf2\x9a\x42\x46\x84\x56\x28\x6d\x64\x9a\xe6\x34\xf6\xcf\x97\xbf\x06\x96\xc2\x9f\xfd\xcb\xa0\xfa\x2e\x28\x5d\x05\x35\xa2\x71\x62\x3c\x26\xc3\xf6\x77\x42\xc4\x05\xb1\x7e\x96\xb5\xaf\x81\x55\x8c\xbd\x8f\xe5\xe3\x92\xef\xa1\xc7\xa4\xc2\x2c\x22\x17\x09\x96\x1b\x06\x21\x39\x1b\xc7\x49\x51\xe2\xb8\xbb\x7b\xb8\xed\xf7\x7e\x5c\xc1\xe5\xcb\x1f\x2f\x87\x01\x45\x49\xea\xdc\x73\x23\xc1\x71\x8c\x34\xfb\x9c\x70\xe3\x0a\xb4\x82\xbf\x39\x41\x66\x4d\xa8\xf4\xe2\x44\xb1\x7c\x2c\x18\xa9\x6d\x96\x85\xb5\x73\xf8\xae\x04\x6a\x09\x81\x22\x4d\x09\xe4\x99\x3c\xdc\x52\x83\x67\xd1\x44\xd1\x59\xeb\xd6\x3c\xc1\x6a\xcc\xc5\xcc\x70\xf9\xc2\xa4\x4d\xe3\xcd\x8d\x52\xa6\x88\x10\xe9\x5c\x81\xca\xae\xc7\x5a\x96\x52\xf5\x92\x5d\xf1\xc9\x67\x22\x25\x9e\x90\x6d\x1c\xd0\x55\xca\xc3\xfd\x2f\xfe\x3f\xc1\xc1\xdc\x46\xf6\x2f\x8c\xd0\x05\xf4\xbb\xfd\x74\xc3\x3e\x9a\x40\x9e\x5b\x9e\xd0\x68\xc3\x80\xbb\x8f\x9d\xde\xd5\xb0\xf7\x59\x2b\xf1\x9d\x7e\xf7\xaa\x20\x4a\xc0\xb3\xce\xc7\x7e\xf7\x6e\xd8\xfd\xaf\xee\xc5\x43\xbf\xf3\xe3\x55\x77\x78\x7d\x73\xd9\xbd\x1f\x5e\xdc\x7c\xbe\xbd\xea\xae\x88\xcc\xa9\x6d\x7c\xd9\xba\x5a\x7e\xf5\x7c\xe9\x17\x58\x61\xcd\xcb\x7c\x7b\x19\x24\xc3\x61\x9a\x80\x13\x9c\x1b\x67\x38\x46\x8c\xc7\x04\x7e\x96\xce\x3a\xe3\xb2\x4d\xce\x50\x4f\xbd\x4f\x12\x84\x53\xc5\x67\x18\xbc\x36\xc9\x62\xc0\xf0\x48\xb3\x56\x9c\x24\x5e\x78\x97\x48\x19\xd3\x2c\x56\x37\x26\x4d\x7c\x71\x42\x34\x3b\x9f\x7b\x39\x8c\xd6\x6f\x30\xa6\x0c\x02\x88\x67\x58\x3c\x1a\x37\x53\xde\x65\x7e\x28\x24\xc2\x72\xc0\xf4\xb8\x88\x35\x0c\xb5\xa1\xf0\x79\xab\xb7\x6a\xa9\x33\xc3\x8f\x44\x53\x65\x96\x46\x53\x34\x17\x7c\x22\x88\x94\xd6\xb6\x1c\x61\x66\x02\x10\xec\xeb\xfa\x1a\x1a\x30\xc6\x35\x29\x9c\x09\x3b\x26\x73\xc2\x62\xc2\x22\x6a\xb2\x15\xc1\x77\x9f\x99\x36\x27\x02\xcf\xa7\x48\x72\x70\x7a\x03\xd9\xc1\x7e\x65\x3e\x72\x37\x99\x99\xb1\x79\xec\x5b\xa0\x45\xaa\xf9\xc4\x0d\xc8\x89\x86\xca\xf0\xb1\xbb\x0c\x9d\xdb\xc5\xd8\x01\x67\xf3\x84\x40\x97\x96\xe4\xb0\x18\x9a\xd6\x85\xf5\xd0\xcb\x54\xb5\x08\xfa\xc2\x76\x63\xc6\xd2\x8e\xe8\xac\xc2\xb2\x6d\x8f\x14\xfa\x09\xb3\x38\xd1\xad\x38\x1f\x46\xf1\x2c\x42\x86\x4d\x47\xef\x1a\x77\x1a\xb7\xb9\x45\x23\x9c\xca\x6d\xae\xd1\x52\x8a\xa9\xb1\x0a\x9e\xe6\x41\x21\xb0\xbd\x6d\x7e\x29\x50\x77\xae\x59\x24\x4e\xb8\xa5\x92\x79\x3d\xb5\x41\xcb\x30\x9a\x9a\x6b\x76\x2e\x28\x8b\xe8\x1c\x27\x1b\xe9\x7e\xa5\x1c\x03\x1b\xba\xff\x1d\x1d\xeb\xed\xf3\xfd\x92\xdb\x56\x11\x31\x83\x74\x72\x3b\xcc\x6c\x09\xd7\xb0\x24\xd9\x64\x0d\x22\xf3\x68\x12\x2c\x78\x6a\xfc\x71\x40\x17\x12\x57\x1c\xd5\xb3\xaa\xe5\xd6\x27\x03\x17\x03\xa0\x37\x58\x6c\x13\xf9\x53\x47\xbf\x52\x2b\xb6\x77\x13\x8c\x87\x93\xdb\xea\x36\xab\x56\xc0\x7b\xf8\xaf\xa6\xbd\xf3\x19\xcf\xf5\x9e\x89\x52\xa9\xc0\x53\x9c\xcd\xd1\x2a\x49\xa5\x50\x76\xcf\x77\x9e\x05\xb5\xb7\x5f\x8d\x9c\x84\x36\x00\x6a\xb9\x93\x42\x0c\x81\x87\x08\x60\xf7\xf8\x38\xd5\xb2\x2c\xc2\x10\x85\x80\xbe\x23\x67\x93\x33\x74\xf3\x4b\xf7\xee\xae\x77\xd9\x3d\x41\x9d\xdb\xdb\xee\xf5\xe5\x09\x22\x2a\xfa\xde\xc5\x2c\xda\x80\xa5\x01\x53\xdc\x4a\x2b\x0b\x34\xe5\xcf\xc0\x1b\x89\x98\x90\xc2\x9c\x5d\x74\x13\x84\x2a\x4f\xa8\x54\x36\x7c\x56\xf3\x95\x7c\x58\x5a\xde\xaf\xdc\x21\xa9\x9a\x6e\xb3\x35\xb0\x94\xe9\x4c\xeb\xb2\x43\x8a\x67\x43\xc1\x93\x6d\x98\xc2\x25\x4c\x05\xd4\xe5\x0c\x4c\x81\xe2\x19\xd2\xcd\xda\x50\x90\xcc\xe5\x98\x89\x74\x5a\x30\xd2\x7c\x59\xdf\x9b\xde\xbd\xe5\xbc\x0f\x36\x1e\x8d\xba\x10\x08\x00\x5b\xa8\x61\x15\xb9\xd9\x78\x68\x2d\xf5\x43\x1c\x45\x5a\xe5\xde\xf1\xa4\xf2\x8e\x32\x97\x80\xed\x68\x6f\xd3\x5c\xb5\xcf\xdd\x30\xe7\x9a\x83\x41\x30\xb0\xbe\x72\x25\x8f\x68\xde\x7e\x45\xbf\xa3\xc5\x52\xaf\xb0\x65\xcf\x06\xec\x41\x66\x26\x15\x73\x09\x4b\x02\x2b\x29\xd1\xf3\x94\xc0\xd1\x58\xa0\x29\x7e\x22\x85\x2e\x5d\x0e\x89\x6e\x78\xc1\x53\x51\xc5\xe8\x06\xec\x92\xcc\x05\xd1\x92\x7e\xd9\x81\x92\xed\xe9\xbb\xe2\x4e\x0c\xfb\x3a\xec\xeb\xa3\xdf\xd7\x17\x49\x2a\x15\x11\x1d\x29\xe9\x04\x0c\x89\x5b\x09\x70\xa6\xb1\xe1\x9c\xf3\x64\xd8\xc2\x26\xd2\x9e\xe2\x05\x4f\x58\x21\xe0\x43\x1a\xa4\x03\x9e\x82\x7c\x54\xb8\x36\xb9\xbe\xeb\xbc\xcc\x61\x3b\xbc\x06\x32\x38\x97\x59\xc7\x01\x4a\x6c\x25\xe2\xe0\xaa\x56\x9a\x5a\x42\x7b\x17\x73\x2e\x8c\x7c\x93\xb9\xcb\xf2\x21\x96\x0e\x93\x13\x45\x28\x73\x64\xcb\x3f\x82\xfd\xac\x09\x6c\xe4\x8e\xdf\x53\xae\xb0\xfc\xfe\x6c\xc0\xb4\x10\xf5\x48\x16\xc6\xdc\xaa\xc5\x94\x3f\x68\x59\xfc\x54\x12\x26\x21\xdc\xfb\x0f\xc6\x3d\xa7\xb7\xb8\x33\x57\x1b\xd5\x94\xcc\xe6\x09\x56\x10\x74\x9d\xf5\x02\x21\xba\xb6\x51\x2b\x25\xe5\x01\xd0\x20\xe7\x9b\xb9\xd8\x67\x66\xf8\x13\xa2\x20\x73\x5c\x51\x05\x3a\x53\x9c\x6a\xf2\x2c\x0f\x7d\xa5\xe9\xca\xec\x0a\xc1\xc1\x4f\x12\xa7\xdb\x31\x7e\xb9\xdc\xc6\x4a\xce\x98\x69\x0b\xf7\x36\xe6\xfd\x83\xb3\x1b\x45\x82\xb3\x52\x34\x8c\x56\xe6\xcc\x4a\x8f\x0c\x3b\x70\xfe\x6b\xc2\xce\x9e\xe9\x23\x9d\x93\x98\x62\x88\x80\xd7\xff\xfa\xa0\xe7\xf5\xef\x17\x77\x37\xd7\xc3\x3c\x93\xe7\x3f\x07\xac\x93\x48\x9e\x65\x29\x20\xc6\x59\x16\x6e\x3f\x17\xc4\x89\x84\x76\x2e\x60\x75\xcd\xcd\x88\x03\x56\x37\x82\x98\x47\xf2\x0c\x3f\xcb\x33\x3c\xc3\xff\xe4\x0c\x5c\xe9\x1d\xf8\xf3\x22\xe1\x69\xfc\x05\xab\x68\xfa\x01\xce\xb5\xfa\x40\x9e\x08\x53\xc6\x4d\xa5\xc9\x15\x43\x4e\xb2\x84\x68\xfd\x7f\xd7\x63\xce\x93\x8a\xa4\xd6\x64\x23\x32\x57\xe8\xff\x15\x64\xc4\xb9\xaa\xbe\xa4\xf8\x78\x2c\xc9\x5a\x17\x52\xae\xa4\xdd\xdf\xa0\xbf\xfd\xc7\x0f\x7f\xd2\x5b\x68\x13\x1a\xf7\xee\x6f\x86\xfa\xfb\x7f\xbf\xb4\xdf\xcb\x35\xd8\x9d\x49\xa5\x95\xd6\xd5\x6c\xa8\x61\x02\xe7\x53\x06\xb7\x9f\x00\xe7\x05\xb0\x37\xd8\x0e\xf9\x3a\x56\x71\xb7\xcb\x42\xeb\xdb\xa9\x6c\x1b\x11\x13\x54\x6c\x6f\x8e\xe8\x14\x31\x8e\x66\x26\xd6\x14\x33\xf4\xd7\x9f\x7f\xac\x5e\xc0\x54\xd0\x8d\x3a\xa4\x16\x85\xc2\xeb\x52\xd2\x7f\x12\x89\xf4\xae\xd1\xbb\x98\xcf\x74\xd7\x82\xc8\x29\x4f\x62\xf4\x4c\x40\x4d\xb2\x71\xa0\x99\x56\x2e\xc8\x80\xf9\x4d\x40\xc8\x21\xc2\x89\xe2\x13\x02\x77\xb5\x53\xd4\x14\x11\x5a\x54\x31\x59\x1a\x8a\x0b\x72\x62\x80\xd9\xee\xff\xe2\x62\xab\x61\x9a\xf0\xc8\x25\xb5\x58\x93\x5c\x3c\xaa\x9e\xf9\xb8\x6c\x7a\x45\xf5\x36\xfc\xf2\x22\x5b\xb3\x6d\x35\x69\x6c\x12\x8a\xb5\x61\x95\x57\xa6\x7a\x30\x34\xe2\x6c\x98\x50\xf6\xb8\xd1\x62\xb8\xc4\x70\xa4\x5b\xb0\x34\xd3\x2d\x66\x76\x6e\x63\x01\x59\xe3\x7c\x7c\x4c\x93\xc4\xa4\xb6\xf8\xcb\x03\x72\x97\xa1\x1b\x08\x03\x73\x93\x03\x4a\x62\xeb\xf7\xb2\x9a\xb0\x20\x0c\x02\xde\x06\x6c\xb4\xb0\x3e\x5b\x79\x82\x64\x1a\x4d\x5d\x66\x5e\xc4\x99\xd4\x62\x34\x17\x28\xe2\xb3\x99\xd6\x7a\x61\xc9\x14\xe7\x89\xb4\xd1\xee\xec\x54\xe1\x48\x0d\x58\xde\xdf\x8a\x93\x67\x8a\x32\x6d\x97\xba\xd7\xde\xa5\x93\x17\x7f\x6a\x14\xb8\x69\xec\x43\x51\x80\x11\xcc\x78\xa2\x3c\x50\x0b\xbe\x7c\x96\xcc\x82\xd5\x68\x06\x72\xca\x85\x1a\xc6\x95\x3c\x67\xe5\xa6\x29\x33\x42\x46\x4e\x13\x08\x1a\xe6\x4f\x5a\xf8\x27\xcf\x99\xf1\xb5\x69\x08\x7a\x57\x37\x8d\xa0\xdd\x31\x6a\x1c\xd9\xba\x5b\xb0\x86\x56\x06\x98\x24\x2a\xc6\x84\xaf\x1a\xe3\x3d\x7c\x75\xa1\x3f\x6a\x24\x5e\xf9\xdc\x39\x21\x88\xc7\x39\x86\x9e\xb9\xd7\x6d\x46\x48\x13\x4d\x2d\x74\xc2\xfe\x32\x47\x9b\xa6\xf2\x50\xb4\xe4\xea\xb1\x80\xc9\x5e\x12\x90\x35\xb1\x18\x51\x25\xb0\x28\x00\xa0\x64\xfa\xa0\x24\x58\x40\x7c\xd6\x80\x19\x38\x3c\xa3\x29\xc4\x28\xa6\x12\x12\x44\xe0\x2e\xf5\x9c\x61\xa8\x9d\x12\x58\x3a\xda\x79\x9e\xa3\x89\x3f\x87\xc0\xb2\x7c\x6b\x38\x66\xa7\x3b\xca\x60\xbf\xb4\x7e\xc6\xa3\x34\x17\xe4\x22\x90\x70\x2d\x54\x10\xa2\x4c\xd2\xc9\x54\x21\xca\xac\xdd\x11\x27\x13\x2e\xa8\x9a\xce\xe4\x09\x1a\xa5\x52\x6b\xa1\x26\x58\xcd\xc4\xa3\x10\x15\xb5\xe2\x42\xdb\x26\x11\xc7\xa5\x06\x97\x55\x94\x0d\xb6\x46\xbb\x43\xd9\x2d\xdd\x15\x2b\x36\x4e\x27\x83\x4f\x2c\xb7\x41\x89\xcc\x50\x37\x91\x89\x03\xe4\x0e\xb0\xea\xf7\x94\x48\x55\x77\x0e\x00\xec\x72\x67\x5e\x8a\x97\xa8\xa4\x85\x4c\x32\xa8\x20\x2e\x76\x1b\x24\xaf\x22\xe0\xa6\x01\xa5\xca\x9c\x4e\xb3\xb9\xaa\x0c\xdc\x5a\x76\x15\xdd\x79\x50\x46\xed\x88\x0d\xc9\x58\xb0\x9b\x01\x80\x6e\xc0\xee\x09\xa9\xc7\xa7\x5b\x5a\xfb\xdf\xe0\x28\xc1\x14\x6c\xa2\x47\xf3\x96\xdf\xc6\x89\x7d\xd9\xbd\xbf\xb8\xeb\xdd\x1a\xc8\x89\x9b\xbb\xcf\x9d\xfe\xb0\xc2\xaf\x5d\xf1\xd6\xe7\xce\xdd\xcf\x97\xab\x5f\xfb\xa9\x5f\xcc\xca\xae\x78\xe5\xee\xbe\x39\x99\xa3\xc5\x10\x2b\x92\xc2\x2a\xfb\x39\x47\xf3\x85\x9a\x72\x96\x85\x28\xc4\x05\xde\x74\x8a\x4c\x46\xb0\x82\x10\x22\x21\x55\x85\xe3\xb0\x0f\x71\x39\xab\x25\xcc\xe2\x62\x19\x74\xb9\x9d\x8a\x46\x6b\x9c\xc8\x4f\x09\x1f\x81\xdf\xda\xca\x3e\x16\x98\xae\x21\x02\x7d\xcb\x78\x9f\x4b\x2a\xe7\x09\x5e\x2c\xf5\xb0\xea\xca\xb9\xc6\x33\x02\x11\xc7\x39\x2c\x9e\x4b\x16\xd1\x2b\x03\x09\x4c\xd9\xbd\x4e\xc7\x90\xc9\xa4\x28\x56\x04\x8d\x88\x7a\x86\xbc\x39\xf7\x6b\x66\x4b\x75\x01\x23\xf2\x6c\xc0\xc0\x9c\x33\xd0\x44\x8e\x53\x88\xf6\x1b\xbc\x3b\x41\x83\x77\x31\x79\x22\x09\x9f\xeb\x95\xd7\x3f\xd4\x5c\x32\xdd\x19\xa6\xc9\x35\x57\x99\x65\x6e\x9b\xf5\x14\x24\xa2\x73\x90\xcc\x87\x44\xb7\xfb\x72\x82\x47\x61\x27\x3b\x76\x06\x63\x40\x38\x8e\xb5\x92\x0d\xac\xcc\x0d\x2f\x0f\x01\x62\xde\xd4\x0b\xc5\x2e\xd7\x11\x29\x32\xf3\xb7\xe9\xd1\x6f\xb3\x68\xf6\xac\x5c\x01\xf6\xb4\x47\x97\xec\xb6\x17\xb9\xd6\x4a\x7e\x26\x0b\x48\xc1\xb8\xc5\x54\x6c\xe8\x9a\xad\x8a\x79\xdd\x8b\x93\xb6\x5b\xd1\xd1\x01\xb9\x6b\xab\xe9\xb0\x9d\xe3\x36\x8b\xd5\x7b\x29\x2d\xd5\xc5\x72\x65\x1d\xb7\x54\x5b\x1f\xea\x94\xd4\xda\x10\x06\x54\x56\xbc\xe6\x24\x5a\x43\xe3\xca\x06\x78\xaf\xbf\x5b\xa9\xa9\x64\xe2\x9a\x8b\xbf\xcb\x57\xc1\x26\xc7\x97\xf3\xf1\xc9\xca\x11\x47\x09\x97\x45\xac\x9c\xd6\x83\xbe\xb0\x9f\x36\x8d\xbb\xeb\x6f\x5f\x2d\x17\xae\x15\xd0\x50\x41\xf8\x12\xc6\xa5\xb9\x67\x94\xf5\x90\xd9\xb7\x4f\x10\x85\x68\x4b\x50\xc8\x92\x1c\x39\x80\xc5\x28\x77\x83\x0c\x58\x1e\xb3\x22\xd1\x33\x49\x20\xcc\x2d\xe2\xb3\x39\x98\xf8\xed\x70\x6d\x4b\x24\x36\x11\xc3\x27\x88\xa7\x4a\x37\x66\x72\x72\x9c\x11\xd7\x26\xfc\xe4\x6e\x0f\xe3\x7b\xb3\xc1\xef\x19\x5e\xb6\xd9\xeb\xe6\x2e\xa5\x0c\x7d\x22\x0a\x5a\x81\x32\x0b\xfe\x04\x41\x4f\x28\x87\x50\x56\xd3\x7e\x8b\x13\x65\x67\xb2\xc6\xca\xe7\xc0\x29\x3f\x26\x7c\xd4\x6c\x24\x80\xc6\xd1\xc3\x5d\xcf\x59\x24\xf3\xf8\x29\x0f\x94\xb9\xe0\x51\xec\xde\xde\x75\x2f\x3a\xfd\xee\xe5\x19\x7a\x90\x44\x93\x27\x9b\x2e\xe4\x57\x67\x2a\x89\x19\xb9\x45\x62\x61\x52\x11\x5c\x67\x08\x21\x42\x14\xb2\xa0\x57\x30\x8e\x22\x4c\x4b\xf3\xc6\x06\x90\x14\x6a\x0d\x75\x00\x2c\x54\x9e\xa7\x8d\xcc\x5b\x75\x02\x21\x4e\x6a\x78\x3c\x51\x6a\x66\xbc\xb3\xe5\xc8\xbc\x55\xdb\xa7\x18\xd1\xb7\xef\xc9\xc0\xd1\x52\x53\x42\x05\x6a\x35\x2d\xb3\xa9\x86\xed\xe7\xe4\x85\xb8\x7f\xc6\xf3\xe6\xf4\x53\xfc\x5c\xd8\xb4\x46\x14\xf6\x7c\xf7\xfb\x3e\x07\x8e\xad\x0d\x0d\x2b\xdc\x7e\x82\xb9\x43\xcb\xf0\xd6\x8c\x6f\x9a\x8c\x0f\xe9\x8c\x64\xfe\xc4\x4a\x83\xb0\x71\xac\x12\xc1\xd9\x81\x5f\x28\x43\x85\x2b\xf1\x04\x8d\xe9\x57\xdb\x68\x1e\xdf\xee\x5e\xf5\x02\x1e\x6a\xe2\x29\xa7\x78\xf9\x4c\xad\x21\x36\xdc\xc2\xf7\x8d\x42\x24\x97\x5a\x24\x8a\xb4\xb8\x24\x48\xc4\x85\xbe\x29\xa0\xdb\xdc\x0b\xb1\x4a\x64\x50\x58\x68\xa2\x2c\x7b\x65\x9a\x4e\x7f\x5e\x5a\x25\xc6\x8a\x9c\x6a\xd1\x6b\x45\x02\xb4\xcd\x91\x81\x6c\x1a\xac\x3c\x38\xb0\xfc\xe6\x19\x91\x09\x66\x2e\x34\xbb\x66\xb8\xee\xca\xdb\x82\x55\x69\x15\x08\x43\x7a\x18\xc8\x57\x90\xfa\x53\x18\x87\x9c\x03\x3d\x1b\xc7\x61\xa3\x5f\x0e\x81\x6c\xcf\x38\x0b\xc6\xa9\x19\x6c\x3a\x8f\x0f\x69\xb0\x09\x96\x0a\xd9\x31\xd5\x99\x22\x3c\x15\x71\xbf\x46\xd8\x82\x6e\xdf\x56\x79\xd3\x5b\xa8\xa8\xc5\x12\xf0\x8c\x48\x87\x9b\x62\x50\x62\xb4\x4e\xe3\x04\xe1\x0b\x58\xa1\xec\x6c\xdf\x19\x29\xcb\xdd\x12\x3e\x33\x81\x20\xfd\xe5\xa6\xcf\x50\x87\x2d\xe1\x65\xb9\xb8\xac\x02\xbd\xcc\x9d\x84\x93\x67\xbc\x90\x68\x2e\x0c\xb4\x8c\x89\xdc\x77\x93\x07\x0d\xac\xf8\x51\x16\x0a\xa1\x5c\xea\x04\x02\x5b\xcc\xea\xa0\x39\x27\xf7\x0e\xf7\xe0\xca\x2b\x45\x95\x67\x02\x79\xde\x5c\x6e\xab\x68\xc1\xea\x14\x19\x46\x53\xcc\x26\x64\xe8\x8c\xac\x9b\x68\x4b\xba\x9d\x0b\x68\xe6\xd2\xb6\x52\x7d\x39\xdd\x1a\x85\xc9\x96\xb5\x31\xaf\x66\x06\x44\x7d\x08\xa4\xc2\x13\x82\xcc\x88\x5a\x99\xa5\x0b\x11\x63\x16\x6c\x18\xf4\x04\xdb\x6a\xb7\x18\x45\x5f\x27\xbc\x43\xe8\xd3\x15\x1e\x91\xe4\x75\x22\x27\xa0\x6b\x6b\x9c\x07\x6f\x9d\xc9\x06\x20\xe8\x19\xec\xf9\x25\x96\x61\xad\xf7\x22\xad\xca\x0d\x68\x9a\x27\x1c\x39\x7b\xd2\xb6\x99\xa8\x2b\x81\xb2\xc9\x54\xeb\x0a\xa3\xf8\xd7\x9e\x57\x40\xa4\xca\xc0\xe6\x5f\x7f\x65\x9b\xf2\x66\x03\xf1\xea\x98\xd4\x8c\x63\xeb\x42\x26\x2b\xa7\xb2\x31\xc8\x40\xcb\x9a\x85\xbd\x31\x62\x9c\x11\x44\x65\xfe\xb2\x2a\xa6\x43\x65\x10\x3d\x5a\xc4\x37\xc6\x97\xac\xf8\x58\x56\x53\x6a\xdf\x96\x96\x1c\x3c\x21\xb3\x0d\xb8\xfc\x6e\x46\xb4\xa2\x8a\xc5\x02\x20\x3e\x0d\x1f\x2e\xca\x74\x2b\xc7\xb9\x73\x81\xbb\xef\x10\x5c\xbd\x48\x5d\xc5\x11\x88\x91\xa5\xc1\x21\x83\x83\x6a\x5f\xb2\x1f\x59\x98\x9a\x01\xcb\x2c\x1b\xb0\x11\xa9\x44\x33\x3c\x07\x9f\x1e\xe3\x2a\xff\xca\xc0\x2e\xa9\x6c\x09\x4f\x9c\x20\x2e\x4d\x69\xb0\xd5\x14\xe0\x62\xb2\x4d\xa8\x46\xfb\xf2\x0f\xed\x0d\x4b\xee\xf2\xcf\x57\xb5\x08\xae\xe9\x80\x81\x27\xf4\x89\x30\x77\xa2\x4e\xdc\x89\xd4\x24\x71\x53\x4e\x16\xa7\x18\x82\x9c\x49\xec\xfb\x5d\x9a\xf9\xa1\x31\x07\x1d\x82\x35\xb4\x3d\xc9\xfa\x95\x41\x3c\x06\xa2\xad\x80\xad\xef\xc2\xd2\xfd\x33\x62\x51\x83\x4d\x1e\x3a\x96\xe8\x0f\x8c\xab\x3f\x78\xb8\xca\xce\x74\x02\x9f\x3a\x03\xd8\xc9\x52\x1d\x1c\x60\x19\x76\xdb\x22\xec\xe1\x7b\xad\xa4\xfc\xb6\x91\x09\x79\xd8\xfd\x5e\x65\xe1\xee\x72\x0e\x5e\x5d\x21\xb1\x10\x2f\x80\xca\x97\x52\xd9\xdc\x6a\x6a\x15\xe6\x27\xbd\x60\x66\x95\xab\x02\x04\xb2\xb5\x68\x15\x18\xb0\x84\x47\xb0\xcd\x6e\x9b\xb5\x8e\xdb\x5a\x01\xc1\x5c\x6d\x15\xd9\x24\xcb\xb4\x4e\x2b\x10\xc5\xc0\x39\x5b\x84\xa3\x06\x63\xf8\x6c\xc0\x3e\x72\x61\x05\x00\x69\xab\x1c\x8c\x70\xf4\x78\x4a\x58\x8c\x70\xaa\xa6\x06\xeb\xd7\x7a\x35\x16\x76\x37\x68\x39\x07\xb6\x4d\x06\xe4\x41\x65\x84\x45\xec\xea\x6d\x3c\x71\x37\x8a\x01\xf3\x1a\x81\x3a\x0a\x50\x3d\x0b\xca\x1a\xd7\x29\xba\x44\x6a\xed\xae\x8e\x16\x55\x95\x6d\x97\xea\xda\x36\x9f\xb3\x42\xa5\x5e\xa8\x00\x01\xe1\x55\x7c\xbc\x4c\x9d\x9e\xb3\x75\x3a\xed\x52\xef\xe7\x65\x1f\xc8\x89\xd5\x67\x8c\x41\xcc\xce\x40\xcb\x59\x3f\x38\x5e\x5b\xc0\x2c\x1e\xa7\x02\x82\x85\xab\xda\xfc\x2e\x9a\xd2\x24\xf7\x9c\x7c\x7f\x92\x0d\x53\x37\x99\x90\x27\x92\x18\xc4\xfc\x48\x40\x5e\x80\xb1\x59\xfe\x80\xfe\xb7\xa9\xf6\x8a\xfe\x34\x60\x9f\x80\x0d\x27\xc9\x02\xf0\x3c\xb3\x96\xb1\x2a\x35\xf3\x58\x39\x00\x65\x13\x91\x50\x71\x20\x66\xad\xa7\xf8\x89\x0c\x98\x6b\xe6\x7f\xa3\x47\xf4\x47\xf4\xa7\x3a\xe5\xd2\x85\xf7\xef\xd9\xca\xf2\xd1\x0b\x9e\xf7\x6e\x39\xcb\x28\x2d\xbf\x71\x46\x98\x82\x09\xb4\x02\xd7\x23\x83\xe5\xa6\xec\x89\x47\x4b\x39\x24\xfe\xa9\xc5\x82\x30\x35\x64\x3c\x26\x43\x52\xe1\x50\x6d\x60\x12\x5a\x08\xb8\xe6\x31\x59\xe9\x0e\xcd\x98\xe9\x17\x30\x1c\xc9\x74\x94\x2d\x07\xc0\x0b\x64\xb9\xe4\x99\xed\xa3\xb8\xd3\xaa\x47\x9e\x61\xdf\x6e\x32\xee\x4d\x5d\xb9\xb9\xd8\x88\x73\xf0\xdd\x6a\x77\x62\x82\x95\x93\x26\xcb\xc7\xb1\xec\x86\xd0\x2f\xeb\x99\xdb\xcb\xca\x43\xf5\x85\xca\x2b\x82\x4e\xa8\xd6\x1e\xda\xbb\x8b\x81\x13\x6e\xe2\x4b\x31\x10\xa7\xad\x9c\x29\x39\x29\x1c\xcc\xcb\x69\xb6\xff\x72\x17\xe8\x88\xa7\x65\xf5\xc1\x12\x80\x4a\x3f\xd8\xc0\x6a\x0a\x0b\xcd\x87\x27\x26\xff\x90\x4c\xa9\xc9\xf8\xef\x5c\x5c\x21\x7d\x3a\xf8\xcc\xc0\x62\x01\xd1\x52\x35\xe5\x82\xfe\xb3\x69\x6f\x63\xa1\xe8\x18\x47\x6a\xb8\x93\x2a\x32\xf5\x9b\xa9\x63\xfb\xe9\xd5\x57\xaa\x5b\x42\x38\xc0\x4f\xc4\x0b\x40\x84\xf0\x42\xdb\x8a\xcc\x1c\xb9\x65\x7e\xcb\x05\x62\xfc\x39\x87\xc5\x72\xdf\x03\x12\xb4\x97\xb8\x81\xb5\xca\x35\x87\x08\x62\x49\x61\x7f\x02\x48\xd5\x7b\x65\x92\x32\x01\xe0\xdc\xc0\x4b\xe9\xed\x39\xc5\x2c\x4e\xdc\x15\x82\xb8\x89\xe8\x59\x3c\xe3\xc5\x5a\x3e\x75\x3f\xae\x32\xcf\xd2\x33\xcb\x5f\x54\x82\x80\x07\x18\x49\x4d\x15\x54\xcd\x2a\x45\x18\x8d\x52\x00\xd6\xd5\x34\x19\xa7\x89\xa9\xc6\x11\x71\x11\x9f\x0d\x98\x0d\xa8\xf6\x7a\xd3\x22\xa0\xd3\x9a\xb0\xca\x1a\xa4\x16\x7f\xd4\xd6\xfb\x30\x66\xb9\x46\xb9\xfe\xef\x29\x49\x77\x94\x56\xf9\xaa\x81\xe8\x7d\x3c\x91\x79\x64\xb9\xa1\x8d\xbe\xf2\x72\xfa\xfe\xae\x67\x2a\xbd\x44\x64\x67\x2e\xce\x70\xbd\x8c\x9d\xc5\x14\xb1\x5d\xcb\x4c\x77\x67\xea\x19\xec\xc0\x4e\xf7\x12\x41\x3a\xcb\xa2\x67\x05\x57\xb7\xdb\xef\x29\x4b\xcb\x45\x2f\x63\xfc\x72\x85\x21\x4a\x42\xdd\x1e\xed\x60\x1b\xdc\x1d\xcb\xba\x4a\x63\xa8\x7b\x6e\x15\xcb\x6e\x8b\x8a\x0c\x79\xc5\x21\x97\xe6\x59\x50\x80\xfd\x5b\xe4\x2f\x67\xf5\x9a\xdd\x2d\xec\xf3\x18\x2d\xfc\x19\x6d\x01\x82\x75\x1c\x09\x17\xd5\x57\xe7\x1a\x76\x1d\xdb\x50\xb1\xeb\xe5\x60\x8c\xba\x13\x61\x58\xd2\xa1\x1e\x89\x65\xcc\x9f\x95\x87\x21\x2b\xef\xf2\x3a\x56\xe1\x4c\x62\x7c\xb9\x93\x91\x6d\xc7\x61\x84\xa3\x69\xed\xa4\x46\x9c\x27\x04\xb3\x3a\xa5\xa0\xf2\x71\xf9\x88\x18\xc4\x5a\x60\xdd\x49\x02\xb0\xcd\x8e\x04\xb6\xd4\x67\xae\x15\xb1\x18\xe0\xf6\x0d\x0f\x37\x01\x9f\x6e\xa0\x8a\x30\x67\x50\xa3\x6c\x92\x90\x32\xad\x6c\x5d\x84\x13\xdb\x49\x12\xa5\x89\x57\xeb\x73\x4e\x84\x1e\xb5\x26\xf1\x13\x61\x5a\x15\xb3\xe3\x70\x1e\xaa\x67\x97\xe5\x9e\x55\xf8\x3a\xc9\xba\x76\x4e\x52\x48\x25\x8d\x07\x0c\x0e\x2e\x2f\x1e\x56\xbd\x57\xa5\xd6\xde\x7c\x73\xdf\xc6\xa7\xd3\x13\x22\xd6\x3e\x9e\xf7\x45\xdb\xff\xda\x67\xd2\xf4\x3d\x84\xc0\x91\xad\xfd\xa5\x9e\x4f\x2d\xc7\xdf\x30\x0b\xeb\x30\xd6\x5e\xc8\x33\x00\xa1\x38\xc5\x58\x62\x2f\x12\xa7\x0e\xe3\x6b\xaf\x77\x49\x5e\xd3\xc4\xdd\x06\x2d\x87\xd2\x18\x7f\xd0\x32\x9a\x00\x8c\xbe\x4d\xe7\xf6\xca\x4a\xf5\x45\x3f\x7c\x96\xb4\x95\xc7\xae\xda\xaa\xbd\x4a\x60\x80\x9c\x00\xa0\x80\x2f\xc6\x70\x41\xa5\x11\xee\x5d\xed\x92\xd9\x5c\x2d\x6c\xa9\x3b\xb8\x17\x0b\xf2\x3e\xc0\xf8\x55\xf9\xfc\xcb\x77\x64\x5c\xf0\xfa\x57\x75\x06\x1d\x59\x6b\x4d\x65\x93\x8e\xd0\x3e\x2c\x4c\x09\x86\xa3\x2e\xc4\xc7\x54\x0d\x1e\xe2\xa4\xd6\x44\xb8\x03\xa6\x09\xca\x51\x0e\xbd\x61\x11\x7d\x95\x48\x89\xe6\x5d\x38\x49\x4a\xf3\xc2\x90\xe3\xae\xb2\xca\x81\xa3\xbc\xbc\x71\xfb\x08\x84\x04\x8f\xc8\x5a\x31\x07\x57\xe6\x83\xc6\x5d\x04\xaf\x40\xb8\xfe\x7c\x9e\x2c\xda\xa5\x09\xf8\xda\x6f\x25\xf2\xdd\xaa\x81\xf9\x78\x79\x8d\x77\x53\x11\x73\x6e\xb3\x21\x4a\x12\xa5\x82\xaa\xc5\xd0\xda\x52\xdb\x33\xad\x7b\xfb\xe5\x85\xfd\xb0\x8d\xa1\xe2\x1c\xb9\xfe\x9c\xed\x16\xee\x29\x41\x4d\x59\x24\x3b\x85\x36\xcb\x8d\x53\x35\xad\x44\xc4\x6a\x22\xac\x83\xe4\x6a\x37\x54\xdd\xc5\xa6\xc3\xb3\xe5\x56\x86\x7c\xec\xc0\xae\xda\x13\xb6\x5c\x87\x66\x0d\x23\xb4\xc3\xd4\x9e\x0b\xca\x85\x2d\xf7\xd2\x26\x52\x71\x86\xbf\x0e\xe7\x58\xe0\x24\x21\x09\x95\xb3\xcd\x4d\xe6\x7f\xf9\x73\xe3\x68\x2f\x4c\x59\x22\x33\xd8\x19\xfe\x4a\x67\xe9\x0c\xb1\x74\x36\xb2\x52\x2e\x96\x8f\x3e\xa2\xa9\xc3\x5f\x30\xc0\x5c\x6e\x80\x05\x14\x08\xe1\x61\xd4\x0e\x98\x87\x56\x6e\x4d\x15\x38\x9a\x52\xf2\x04\x58\xaa\x82\x11\x29\xcf\xd0\x35\x57\xe4\x1c\x7d\xc6\xf3\x3e\x08\x6a\xa6\x4e\xe8\xc4\x38\x1d\xb0\x44\x5a\x6a\x4d\x19\x55\x27\x03\x66\x21\xce\x1d\x55\x3e\x44\x9c\x19\x98\xdb\x08\x08\x9b\x35\x01\x56\x74\x87\xf7\xaa\x5c\xb6\x2a\x95\x35\xc4\x16\xf8\x79\xe8\x85\x24\x0f\x4d\xca\xc7\x1a\xfb\xf8\x0e\x3f\x9b\x20\xfc\x4b\xac\xb0\x29\x01\xdc\x24\xb9\xdb\x28\x37\x5b\x16\xca\xa0\x3b\xbb\x68\x20\x6e\x21\x46\xb2\x82\x76\x26\xe4\xf8\x3b\x7a\x46\xce\xd0\x8f\x09\x1f\xc9\x93\xdc\x54\x65\x1e\x4a\xa2\xe4\x89\xf1\xfb\xc1\xbf\x4d\x7e\xdf\xf7\x8e\xfa\x39\xdf\x87\x5a\x8e\x63\xfa\xd5\x20\x9b\xc8\xbf\x9c\x7f\xf8\x30\x5b\x9c\x8e\xd2\xe8\x91\x28\xfd\x17\xc8\x14\x95\x14\x72\xb0\x60\xb8\x0a\x64\x6c\x15\x75\x96\x01\xca\x5a\xed\x48\x9b\x2b\x25\x09\x80\xe1\xeb\x2b\x3d\xab\x96\xeb\xf0\xac\x38\xab\x2e\x05\x6a\xa7\x2c\xd2\xba\xe3\x55\x40\xd1\x7e\x19\x6d\xc5\x54\x03\xf6\xc1\xbb\xc7\x09\x9e\x94\x54\x96\x35\x94\x94\x9b\x19\xb5\xbb\x48\xcf\x1d\x82\x68\xf4\x29\x2b\x86\x0e\xbe\x77\x5e\x5e\xf0\xd6\x5a\x2f\xd6\xd9\x80\x75\x24\x7a\x26\xa6\xc8\x2f\x24\x9a\x82\xd3\x27\xa5\x72\x9a\xa5\x99\x82\x19\x1a\x1a\x35\x18\xc7\x06\x0a\xc3\x2a\x8e\x4e\xb3\x72\x6e\x31\xab\x81\xe2\x44\x92\x13\xdd\x30\x98\x54\x5d\x74\x28\x7a\x16\x78\x3e\x27\x62\xc0\x2c\x5e\x2d\xa0\xb2\x73\x6e\x23\x7f\xea\x52\x04\x82\x46\xf9\xb2\x1a\xa5\x47\x7b\x52\xcc\x42\x5d\x75\xbe\x21\x69\xb5\x89\xc2\x55\x79\x98\x8e\x7c\x5a\x16\x6d\x1b\xbe\xff\xfa\x66\xe3\x96\x63\x5e\xa5\x9d\x77\x4a\xb9\x17\x50\x43\x7c\x06\x0a\xa4\xcc\x4b\xa5\x3a\x5b\x5f\xa6\xbe\x17\xc4\x1c\x80\x3b\x87\x8f\x63\x4e\xa4\x67\xc4\x47\x99\x2d\x2e\xa1\x63\xa2\xa5\x8f\x01\xd3\xdb\xd8\x77\x38\x18\xd4\x74\x07\xa2\xae\x3b\x8d\x04\x97\xd2\xa6\x53\x98\x76\x9a\x93\xe2\xb6\x28\xd0\x68\xa0\xdf\x7b\x37\xd7\xc3\xe5\x52\x8d\xde\x33\x57\xb4\xd1\x3e\xac\x44\x4e\xa8\x6d\x6a\x65\x89\xc6\x9c\x16\x6b\x14\x69\xfc\x70\x71\xd5\xcb\x2a\x93\x95\xba\x5e\xae\xd2\xe8\xc3\xe5\xd7\xd7\x69\x5c\x9e\xb1\x57\xb1\xb1\xd4\x44\x43\xcd\xc6\xd5\x8b\x55\x0c\xe2\xde\x06\x0b\xb1\xb4\xf4\x2b\xf9\x43\x71\xcf\xac\xca\x35\xd8\xd1\x32\xd5\x5c\x2b\x11\x08\x8c\xfb\x0e\x5c\x00\xc1\x4b\xbf\x25\x15\x9e\xcd\xfd\x3c\x5a\x07\x06\x6b\xa7\x69\x8e\x5a\xdd\x25\xf8\xa2\x20\xf5\x11\x36\x41\x42\xe5\xc1\x2d\x2d\xc5\x7a\x1e\xaf\xbe\xc5\xbe\xdf\x45\x6c\xfa\xcb\x25\xa6\x27\x8b\x3c\x18\x52\x5a\xd9\xcd\xd5\x55\xaf\xb1\xfb\x8f\x48\x86\xf3\x5f\xbb\xa0\xdb\x66\x9e\x66\x78\x60\x82\x60\x69\xdd\xdf\x90\xa0\x59\x4a\xde\x5a\xc3\x3c\x9c\x8d\xd9\xa4\x78\x9f\x66\x95\x35\xbc\xab\xc6\x16\x8b\x8b\xdc\x41\xa4\x42\x90\x27\x22\x60\xef\xd8\x50\x2a\x56\x3c\xaa\x38\x11\x04\xc7\x0b\x8f\x22\x59\x1c\x87\xe9\x19\xcc\x63\x92\xce\xb4\x02\x0f\xaa\x09\xe3\xa7\x7c\xee\x74\x96\xc2\x5b\x50\x16\x85\x8e\xf5\x8d\xe5\x45\x81\xe8\x2f\xd8\x29\xf9\x4a\xa5\xd2\x72\x45\x45\x08\xac\x6b\x04\x24\x1e\x28\x96\x36\x25\xf6\x86\x1b\xbc\xeb\xfc\x78\x73\xd7\xef\x5e\x0e\xde\xe5\x29\x17\x2e\xa7\x30\x83\xf9\x72\x55\x1b\x38\x1b\xb0\x2c\x4e\x39\x43\xb5\x86\xb5\x44\x38\x8e\xf3\xf8\x68\xab\x44\x1a\x99\xad\x91\x23\x7b\xa7\x62\x65\x84\x72\x43\x33\x0f\x90\x58\x76\xa8\x27\xab\xc1\x75\x56\x38\x39\x26\x3d\xae\x21\x8f\x69\x47\x97\x8d\x0f\xc8\xab\x8c\xae\x4d\x94\x43\x8c\x64\xe4\xd9\xe9\x4a\x70\x3b\x7f\xc0\xe6\x12\x5e\x8f\xdb\xb9\x05\xd9\x60\x51\x3f\xd2\xaf\x24\xbe\xab\x91\xaa\x76\x92\xa6\xd4\x2a\xc0\xb2\x72\x15\x52\x46\xd7\xd1\xf8\xb3\xa9\x3c\xe8\xef\xda\xb3\xa5\x9b\x1c\x67\x2f\xc7\xcc\x05\xc0\x5c\x85\x30\x8a\x88\x50\x98\x32\x34\x86\x83\xcd\xa2\x05\x02\x14\x16\x02\x3e\xec\x3f\xa3\x19\x65\x00\x07\xd1\x44\xda\x87\xe2\x3c\xd6\x10\x5a\x3f\xf7\xae\x1f\xfa\x05\x51\xf5\xa7\x9b\x87\x62\xa5\xfe\xce\xaf\x8d\xb2\x6a\xa9\x85\xa6\x60\x21\x6f\x8a\x79\x6a\xa9\x85\x0e\xce\x28\x53\x39\xd1\x64\xa1\xc8\xc3\xdd\xd5\x56\xf2\x5d\xb5\xb3\xac\x16\xf8\xdd\x97\xae\xaa\x61\x2e\xda\x7c\x1a\x93\x68\x15\x34\x6d\xfb\x7d\x64\xa2\xa0\x34\x1d\xac\x35\xd1\xc2\xd6\x61\x89\xe6\x58\x58\x3f\x54\x6c\x02\xa0\x8a\xe5\xde\x8c\xe6\xd5\x04\x0b\xf2\x89\xa8\x5f\xf4\xd5\xc7\xd9\x2e\x92\x4b\xac\x28\x0b\xfe\x51\x32\x7c\x32\x0d\xaf\x71\xd2\xec\x50\x1a\xf2\x97\x9c\xb0\x0c\x3d\x20\xdb\x83\x0f\xa6\x71\x66\xca\xfe\x77\x74\x73\x40\x11\x17\xa6\xa9\x55\x52\xce\xf4\x8e\x34\x18\xb9\x0e\x58\xd7\x6b\x8e\x8f\xcd\xc7\x2d\x61\x06\xbd\x64\x01\xdd\x56\x4e\x4a\xd4\xb9\xed\x55\xd0\xfa\xaa\xec\x42\x7a\x5b\x35\x8a\x92\xcc\x9b\xb5\x6b\xe4\x2b\x2f\xe7\xf4\x20\xa0\xae\xec\x4c\xb7\xc3\xb6\x32\x4e\xff\xdb\x62\x24\xc1\x21\x40\x30\x57\xa9\x0c\x85\x5c\xf2\x15\x68\xcb\xeb\xa5\x57\xe6\x64\x58\x13\xc9\xca\x1f\x90\xcd\xae\xf1\xd1\x9b\x96\x43\xb7\x4f\x7c\x34\x27\x6e\xaa\x20\xdb\xd8\x82\x9d\x21\x5c\xe5\xb3\x69\x03\x71\xf5\x8b\xd9\xd1\x19\x02\x0a\x60\xba\xb8\x2a\x9b\x2e\xe4\xda\x02\x12\xf8\xd3\xf5\x77\xdb\x7a\xa8\x58\xf9\xf8\x9c\xf9\xdb\x02\x8c\xe3\x39\xb6\x76\x07\x50\xa2\x5c\xf9\x8b\xaa\x6a\x89\x67\x03\xe6\x05\xac\x48\xa3\xf6\xe8\x33\xe2\x2a\xce\x40\x19\x63\x06\x68\xe5\x90\xfb\x94\x09\x3f\x85\x15\x28\xe3\x1e\xa8\x69\xb1\x66\xcc\x52\x3f\xf6\x74\xca\x29\x76\xd9\xa5\xce\x82\x62\xe3\x00\x7d\xfb\x12\xb4\xe7\x55\x89\xb0\x1d\x83\x39\x1a\x8c\x16\xd8\xab\x41\xe8\x21\x12\xc4\x9c\x48\xf6\x5e\x65\xf9\xbb\x34\x59\xb8\x90\xea\x92\x7b\x40\x4b\x75\x98\xda\x96\x9b\x0f\xf8\x0e\x20\xb7\xd6\x55\x1c\xbc\x63\xb5\xd2\x4c\xe5\x7c\xbc\xb0\x13\xfc\x58\x24\xe8\xb4\xce\xaa\xfe\x75\x4e\xa2\x4d\x70\x81\x6e\xb1\xc0\x33\xa2\x88\x68\x0a\x47\x2a\x56\x08\x07\x11\xc7\xad\xa0\xed\xd7\xac\xa2\x29\x9f\x52\xae\xb3\x93\x69\xb7\x57\xab\x70\x7e\xb2\x59\xac\x05\x69\xa6\xa7\xf1\x8b\xb5\xfc\xaf\x39\x0b\xdb\x4f\x3e\x0d\x1b\x6d\xe5\xc1\x3a\x6d\x3b\xa7\x97\xc1\xb7\xe9\x2f\x21\xc5\x14\xc2\x85\x0e\x04\xd8\x66\xf5\x28\xeb\x10\x6d\x56\xf1\xd2\x9d\xf0\x6e\x97\xe1\xe0\x32\x93\x4b\x87\xaa\x90\x3b\x01\xbb\x04\x54\x2a\x03\xee\x52\x8d\x4a\x03\x42\x4b\x55\x84\xa4\xe7\xf6\xb3\x98\x85\xb9\x41\xd7\x4a\x56\xe5\x8a\x61\x25\x72\xad\xe0\x71\xbb\x42\xec\x08\x12\xcd\xae\x25\x9a\x55\x5b\xb9\x10\x5d\xab\x77\x27\x11\x25\xf0\x20\x5b\xc9\xdb\xa2\x3e\x14\x27\x08\x29\x5d\xf6\x8a\xb4\xe5\x80\xe1\xea\xa7\x2c\xfb\x57\x91\x83\xbb\x4d\xed\x6f\xd5\xaa\x5c\xd5\x33\xcf\x05\x05\x1e\xa8\xc4\x97\x06\x6c\x5c\x0d\x8c\xd6\x84\x41\x1a\x2b\x7f\xef\xda\x38\xb0\x20\x67\x7c\xc1\x53\xf4\x4c\xe5\x14\x29\x3e\x60\x10\x27\x98\x79\x03\x14\x47\xe6\xc5\x13\x78\x0b\xb0\x2d\x64\x3a\x9a\x51\x85\xb0\x37\xc3\x82\x49\xf2\xc4\x9e\x67\xfd\x01\xcc\xb8\x12\xbe\xa0\x0a\x77\x69\xc5\xa1\xd9\xc0\xbe\x96\x37\xb2\x2d\x42\x81\x17\xd3\xbc\x5f\x8c\x02\x4f\xe3\xf1\x35\xcc\xca\x33\x17\x40\x0a\x50\xb5\xb5\xc1\x22\xc1\x02\x5c\x2f\x95\xaa\x74\xb7\x58\x43\xcf\x0a\x80\x82\x7c\x21\x5a\x21\x14\xe4\xaf\xef\x02\xa2\xa0\xae\xf6\x5c\x53\xca\xaa\xfb\xa4\xc6\xfe\xed\x52\xa1\x15\x77\x81\xf3\xbe\xa4\x74\x5b\x2b\x29\x1d\x1a\x54\x5d\x9e\x10\xb0\x79\x78\x79\x5d\xf4\x32\x9c\xf1\x88\xb3\x98\xae\x11\x2f\x0c\xf5\xc5\x46\xe9\xb8\xc3\x16\xab\x91\x8f\x66\x7e\xa0\xbe\xb5\x97\x78\x92\x48\x35\xe6\xe6\x4a\x95\x35\x6f\xdf\xdf\xe9\x5e\x4a\x68\x11\x8c\x88\x94\x6f\x27\xc6\x15\xe4\xfd\x44\x2a\x59\x54\xe4\xa2\x0e\x58\xb5\x94\xd4\xcc\xb7\xb7\x4d\x23\xd9\x29\xec\x9e\xc7\x23\xdc\x2c\xac\xd5\xed\x4b\x16\x88\x67\x14\x7a\x62\x41\x36\x4a\x62\x70\xee\x86\xac\x0b\xa0\xd2\xc2\xd1\x26\xb9\xe6\x15\x9c\xa3\x7a\xe8\x4b\x49\x1e\x2b\xcf\xae\x15\x0c\x76\xa8\x7e\x2e\xdd\x20\xad\x73\x62\x32\x39\xde\xde\x18\x36\xa8\x3b\xce\x6c\x0d\x25\x77\xf2\x26\xe5\x8d\x01\xce\x76\x67\x20\xbc\x65\x64\x0a\xdd\xf8\x09\xb8\xa0\xed\xd8\xb1\x09\xc7\xc9\xa0\xe1\x4b\x6b\x52\x98\xb1\x09\xa9\xdc\xcb\xac\xd7\xad\x49\xed\xf9\x44\x85\x8d\x49\xa6\xbe\x75\x03\x8a\x51\xdb\x50\xce\xd2\x6d\x91\x09\xa0\x29\x8b\x89\x60\x04\xab\xe9\xcb\x65\x82\x5c\x6c\x6b\x42\xf7\xc6\xb7\xdf\xac\x10\x3b\x52\x5c\x4c\x0e\xd9\x66\xb8\xc5\xe2\xfc\x2b\xc7\xa9\x5f\x6f\x63\xcd\xb2\x01\x12\x59\x79\xea\x25\xf5\xb6\xc2\xb4\xe9\xe1\x0f\xad\xb3\x4b\xb7\x4a\x16\xa9\x56\x39\xf7\x93\x36\x53\x61\x9b\x5a\x4a\x98\xd1\xa7\xdd\x2f\xea\xbd\x82\x24\x6f\x22\x3f\x65\xff\x29\x13\x4d\xe5\xc3\x53\x2f\x8b\x02\x6a\xb8\x2b\x4c\x99\xe5\x5e\x4d\x89\x13\x5a\xee\x9d\xe1\xaa\x5c\x89\x83\xcf\xc2\x79\xf3\x49\x38\x21\x25\x23\xa4\x64\x54\xac\x51\x48\xc9\x40\xe8\xd0\x52\x32\x56\xa9\xa0\x4d\x46\xda\xcc\x6f\x08\x65\x5e\x0b\xb5\x95\xcc\xfa\xae\xd0\x23\x37\x4f\x3b\x70\x76\x4e\x3f\x66\xcb\xfe\x62\x7f\xa8\x0c\xdb\x5a\xfa\xac\x3c\x5b\xdf\xe6\xca\x16\x65\xd7\x05\x16\x71\x62\x21\x08\x6d\x50\x75\xd1\x46\xd6\x64\xce\x1d\xb0\x9f\xf8\x33\x79\x22\xe2\x04\x61\x85\x66\x1c\x70\xad\xf2\x18\x1e\x38\x08\x05\x2c\x7d\x13\xab\x81\xd1\x35\x9e\x91\xd8\x94\xda\xf4\x42\x2f\xad\x51\xd9\xba\x83\xab\x90\x76\x01\x34\xd6\x2c\x83\x8b\xed\x18\x30\x13\x0e\x69\x42\xf0\x40\x56\xa0\x6e\x62\xb0\x61\xfe\x90\x39\xab\xff\x70\x86\xfa\xfa\x7e\xa2\xb2\x38\x5e\x0f\x78\xaf\x6e\x6c\x03\x36\x11\x3c\x9d\x67\x76\x3e\x3e\x32\x35\x97\x4d\x84\xd6\xb2\xb3\x1a\x06\xe3\x3c\xd5\x11\x8e\xb5\x2e\xde\xbc\x71\x5e\x25\x52\x76\x23\x98\x25\x7f\x03\xe9\x63\x98\x85\xff\xd9\x70\x7c\xe3\x63\xf6\xc0\x65\x9a\x2a\x00\xec\xc9\x01\x7e\x49\x24\x58\x85\x32\xcf\x40\x21\xd7\xbd\x88\xa7\x50\x39\xce\x26\xbb\x6d\xe6\x5b\x71\xfe\x87\x6a\xa8\x86\xbc\x73\x1b\x97\x66\x12\x69\xed\x3d\xb1\x37\x8b\x6e\xeb\x08\xdf\x3a\x7e\x71\x9b\x8a\x39\x07\x49\x2c\x59\x38\x68\x09\x0b\xf2\x37\xe7\xf3\xd4\xc4\xde\x51\x3f\x14\xab\x72\x67\x53\xa9\x3e\x63\x15\x4d\x35\xe7\xce\x51\xd9\x76\x14\x93\x98\x73\xe5\xfd\x5a\x79\x2b\x66\x70\xe1\xf7\x5e\xe3\xf6\x68\xda\x3d\x5e\x8c\x61\x16\xc8\x99\x49\x12\x33\xdd\x9f\x71\x0d\xda\x4a\xea\x9e\x5d\xd4\x7d\x62\x9f\xe8\x89\xae\xda\x45\xab\xc6\xdf\x6e\x6f\x15\x4b\xbd\xed\x3c\xda\x71\x0b\x98\x9b\x4b\x0b\x2a\x96\xbf\x68\x4b\x03\xd7\x84\x28\x08\xba\x59\xa6\x92\x2d\xcf\xf0\xa4\xc5\x91\xcc\xe2\x3a\xc3\x73\xad\x44\x28\xae\x6f\x49\x31\x31\x72\xac\x89\xe5\x45\x18\xa5\x82\xba\xb3\x5f\xca\x5b\xaf\xdf\x1d\x60\xa1\xfc\xe0\x97\xf2\x8a\xb0\x57\xe5\xd0\x04\x25\xe0\x48\xa5\x38\x0b\x9e\x84\x3d\xe1\xaa\xef\x9b\x1c\x7d\xe7\xfc\x17\x4e\xbc\xab\x58\xd3\x95\x1b\x7b\x8b\x55\xc6\x55\x18\x8c\xad\x4e\x1a\x65\x13\x0f\xc0\xb1\xda\x4a\xdc\xa6\xe8\x46\xe5\x97\xed\x0a\x87\x54\x7e\xea\x64\x9f\x4d\xbe\x6d\x00\x98\x6a\x15\xb2\x7e\x88\x15\x13\xbc\x4c\x00\x1b\x2a\x6c\x65\x37\x1f\xd8\xd3\x76\x04\xb0\xc7\x14\x42\x19\xb0\x93\xe5\xbe\xf3\xcb\x26\xe8\xa1\x7d\xff\x9f\xf9\x43\xd0\xdf\x6d\x71\x96\x8a\x17\x07\x8c\x0b\xfb\xea\x49\xf6\x9e\x7e\x2d\xc7\x27\xd6\x52\xe2\xf2\x97\x39\xfa\xa8\x28\xe2\x14\x02\x5a\x8b\xc5\x99\x33\xf0\xd4\x59\x59\x0b\x3d\xf8\xc7\x74\x44\x04\x23\x7a\x4e\x0e\xd7\x21\xe3\xc1\x33\xcc\xf0\x04\xc0\xb0\x4f\x20\xe8\x10\xa4\xec\x5c\x83\x32\x27\xd1\xd4\x07\x05\x26\xab\x79\xbc\x4d\x65\xce\xeb\x64\x43\x9f\x46\x02\xb7\x58\xbc\x79\xe4\x4a\xf5\xa1\xbd\xb3\xfd\x6f\xa6\x68\xf4\x3b\xf7\x3f\x0f\xef\xba\xf7\x37\x0f\x77\x17\x05\x6d\xe3\xe2\xea\xe1\xbe\xdf\xbd\xab\x7c\x96\xa7\x01\xff\xfd\xa1\xfb\x50\xf3\xc8\x35\x70\xd5\xf9\xb1\x5b\x28\x3a\xff\xf7\x87\xce\x55\xaf\xff\xeb\xf0\xe6\xe3\xf0\xbe\x7b\xf7\x4b\xef\xa2\x3b\xbc\xbf\xed\x5e\xf4\x3e\xf6\x2e\x3a\xfa\x4b\xff\xdd\xdb\xab\x87\x4f\xbd\xeb\xa1\x8b\xe8\xf6\x1f\x7d\xb9\xb9\xfb\xf9\xe3\xd5\xcd\x97\xa1\xd7\xe5\xcd\xf5\xc7\xde\xa7\xaa\x59\x74\xee\xef\x7b\x9f\xae\x3f\x77\xaf\x9b\x8b\xdb\x57\x53\xa3\xb6\x6e\xb6\x77\xff\x7a\xb6\x2e\x4f\xba\x1b\x2d\xec\x99\xa0\xff\x04\x97\xcb\xad\xd9\xa2\xa7\x27\xee\x2f\x53\x8a\xfe\x54\x73\x6e\xe7\xce\xcb\x99\xde\x80\x65\x3e\xe1\x4c\x16\x50\x78\x22\x5d\x56\x77\x61\xb4\xe7\xa8\x03\x87\x0c\xf4\x9c\x42\xa7\x90\x34\x92\x8d\xd4\x45\x11\xc0\x3e\x4c\xe8\x8c\x42\x40\x01\x3a\x45\xe5\x05\x2f\x36\x68\xe7\x04\x43\xb0\xee\xc6\xb8\xe9\x34\xc8\x72\xc2\x38\xec\x94\x73\xe4\x2e\x16\x62\xac\x20\x06\xd6\x77\xc1\xf0\x8c\x46\xe5\xec\x16\x40\xb6\x45\x39\x8a\x4b\xb9\xc5\xc2\x06\x2b\xb6\x3c\x25\xe8\xe7\xbf\xe5\x83\x02\xc7\x8b\x35\x18\xa4\x4b\x15\x28\xed\x03\x91\x1a\xaa\xae\xda\x9e\x85\x9e\xdc\x31\xb7\x16\x71\x38\xb7\xb6\xd2\x3d\x78\xc9\x52\xe6\x21\xb9\x15\x5c\x66\xfa\x78\x9b\x19\x95\xf6\xf8\x39\xba\x07\x14\x19\x99\x5b\x1c\xf4\x2a\xce\x93\x74\x42\x19\xa2\xb3\x79\x02\x3c\xc6\x98\x21\x46\x64\x8a\x9f\x28\x77\x05\x57\x4c\x5d\x1a\xa0\xa3\x95\x08\xd1\x29\xaa\x3d\x28\xe7\xa8\x13\xc7\xb2\xc8\xe0\x0a\x3b\xc7\x71\xd1\xd3\xe2\xb0\x7d\xf0\x35\xcd\x58\x2d\xdb\x2c\xed\xa3\xfc\xc8\x01\xc5\x76\x8f\x93\xb3\xcc\x0e\x8b\x22\xc3\x16\x52\x8b\xa6\xe0\xd0\x6d\xe5\xe1\x46\x32\x4c\x1f\xcb\x47\xc7\x9a\x57\xc9\x31\x0e\xb1\x68\xbb\x1e\x2d\x74\x51\xdb\x4e\x33\xca\x0e\xe1\xa0\x6d\xd6\x67\x2d\xe0\xf6\x8a\x2e\xdd\x8c\x93\x52\xa9\xbb\xd6\xfd\x15\x4a\xe5\x55\x76\xb6\x53\x27\x55\xb5\x10\x09\x47\x72\x98\xed\xff\x35\xe6\x71\x0b\x9f\xde\x64\x5f\x36\x4a\x9a\x43\x8f\x6e\xeb\xba\xae\x96\xf2\x9f\xad\xfb\xaa\x71\x1f\xee\x08\x39\xab\xbd\x14\x09\xa5\x42\x68\x04\x5e\x4a\x4c\x99\x2d\x20\x45\x32\x37\x9a\x2b\xd8\xae\xcf\x71\x56\x52\x11\x8f\xf8\x53\x41\x27\x9e\x11\x29\x71\x0d\x16\x8c\x67\xc9\xdb\x86\x31\x64\x27\xd4\x7e\xd8\x72\x3f\xb9\x33\xd9\xd7\x5f\x35\xc9\xe8\x77\xbe\x42\xef\x26\xaa\x65\xd8\xd8\x05\x31\xa3\x1b\x93\xca\xa8\xf9\xcb\x49\x1e\x03\xc4\x85\x17\x1a\x55\xe7\xb5\x6a\x69\x0d\x2c\x13\xac\xb2\x2e\x98\xef\x79\x5c\x3f\x74\xc8\x6b\x7d\x63\xb0\x71\xeb\x0e\xc2\x45\xfa\xac\xb1\xeb\x0a\x6e\x5a\xbf\x62\x7b\xc4\x67\x33\x23\x17\x14\x4c\xc0\x27\x08\x9b\x0c\xd2\x5c\x9a\x92\x69\x34\x35\xce\x31\x7d\x65\x9c\x0c\xd8\xb3\xb7\x20\x85\x18\xeb\x8e\xdf\x12\x00\xb5\x7e\xd5\xc7\x8d\x3e\x15\x22\xd7\x41\x64\xa4\x10\x46\xed\x6d\x04\xe3\xc7\xcc\x0b\x9e\xad\xd8\xe0\xde\x7a\x6d\xb1\xd5\x37\xa8\xad\x59\xa2\x6f\x5d\x85\xcd\x6c\x6e\x5e\x61\xcb\x2d\x14\xfc\xb6\x43\xf0\x6a\x6b\x56\x8d\x60\x07\xa5\x35\x5f\x14\x39\x3d\xcb\x84\x35\x89\xd3\xb3\x91\x85\xff\xd0\xd3\x75\xd4\xfe\xa3\x9b\xd1\x1f\x8d\x22\x9c\xd6\xe0\xc5\x78\xad\x65\xe0\xe9\xe8\x54\xcb\xac\x0e\xc7\xc0\xc6\x8f\x48\x74\x6a\x00\x19\xdf\x43\x10\x6b\xe7\xb6\xf7\xfe\x04\xbd\xf7\x13\xf9\xde\x1f\x8d\xe9\x22\x3f\xfe\x96\x6a\xb6\xb8\x27\xe8\x72\x85\x5c\x92\xe2\xa1\x87\x9d\x52\xe2\x03\x76\xc7\x58\x36\x80\xea\xb8\x80\xfe\xb2\xf0\x0d\x78\xf4\xa1\x5c\xa4\x71\x7a\x67\x91\xec\xd6\x6f\x66\x24\x6c\x2a\x2b\x56\x2e\x1e\xb0\xd1\xa2\xec\x19\x3b\xc9\x5c\x63\xad\x79\xc4\xd6\x25\x10\x75\x7b\xcb\x79\xe7\x3b\x8e\xb0\x6e\xbe\x8d\x56\x64\xb2\x77\xb2\x3a\x3d\x39\x0f\xad\x0b\xed\x08\xa9\x09\x55\xb3\x2a\x98\xf9\x1c\x31\x2b\x17\x65\x95\xf4\x75\x6c\xdb\xad\x45\x3c\x7f\xa7\x8a\x22\x36\x95\xa3\x46\xb4\x0f\xbb\x6c\xbf\xbb\x6c\x17\xa9\x2c\xc5\xc1\xad\x7f\x7d\x5f\x18\x29\xd2\x6b\xc6\x99\x7b\xb5\x2a\x93\x31\xf8\x42\x9d\xcc\xd5\xe5\xad\xd7\x74\x94\x7b\x34\x59\xed\x29\xbf\x37\xd1\x16\xc6\x57\xbd\x3c\xd6\xf2\x50\x3b\xca\x56\x97\xe2\xd4\xa4\xad\x2a\x3a\x23\x27\xa6\x9c\x59\x1e\x21\x62\xcf\x2b\x6c\x37\x13\xd8\x35\x25\x54\xb8\x4e\x2c\x78\xe4\x5a\x38\x07\x6b\xea\x02\x75\x7b\x64\x8b\xf0\x9c\xeb\xce\xe7\xee\xe5\xb0\x7b\xdd\xef\xf5\x7f\xad\x00\x06\x2d\x3e\x76\xd8\xa0\xde\x0b\xf7\xbf\xde\xf7\xbb\x9f\x87\x9f\xba\xd7\xdd\xbb\x4e\x7f\x05\x6e\x68\x53\x67\x75\x98\x94\xa9\xac\x52\x1e\xd7\xc1\xa5\x74\x46\xe6\x8a\xde\x97\xd1\x43\xbd\x4e\x28\xa9\x41\x10\x35\x98\x0e\x2c\x26\x02\xc5\xe4\x89\x24\x7c\x9e\x1b\x75\x2b\x09\xe6\x41\x8b\x56\xb4\xdf\x04\x2f\x0a\x6d\x96\x69\x7c\x8e\x4c\x6d\x44\xaf\x3c\x74\xd6\x20\x88\x7c\x58\x10\xf6\x5e\x21\xf2\x75\x9e\xd0\x88\x2a\x2f\xe7\x93\x0b\xeb\xdc\x31\x3e\x57\x08\xe9\x5d\xb1\xb9\x76\x16\xc2\xb3\x73\x8b\x83\x1f\x7e\xb0\x6c\x6b\xc8\x4e\x54\x06\x75\xb7\xb2\x32\xd4\x0e\xcc\x0a\x35\x9e\xf6\x25\x24\xbe\x0d\x46\xb7\x0f\xe3\xc4\x72\x62\x93\xcd\xdb\xac\x41\xe9\xab\x1e\xe4\xea\xdb\xb0\x29\xb8\xa8\x70\xae\x9b\xa3\x8b\xda\xed\xd4\x57\x8e\x11\x2a\x14\xa2\xdd\x01\xa4\x8a\x0d\xf8\x5f\x33\xca\x63\xa9\x10\x10\x33\x81\xba\x18\x09\x32\xe3\x4a\x2b\x60\x26\x8c\xe2\x44\x0b\x55\x14\x27\xf4\x9f\x00\x3e\x26\xc8\x99\x17\x76\xe2\x20\xdb\x72\xe7\x85\x05\x06\x39\x1b\xb0\xcb\xee\xed\x5d\xf7\x42\x33\xa4\x33\xf4\x20\x01\x57\xac\x30\xf5\x4b\xbb\xbd\x8d\x38\xe6\x87\x7f\x50\x26\x15\xc1\x75\x11\x74\x44\x08\x2e\xda\xf3\x87\xac\xbf\x2e\x7c\x57\xbd\xbd\xe1\x59\xc1\x32\xe6\xcc\x0f\xd7\xb5\x55\xc4\xbd\x44\x8b\x9d\x27\xb2\xdd\xe1\xe7\x02\x45\x7c\x5c\x15\x90\x44\x8a\x54\xdf\x23\xb5\x01\x99\xb5\xfd\xfc\x0a\x7d\xde\xc2\xb7\x4d\xf3\xec\x43\x5c\xa2\x54\x39\xcc\xab\x41\x82\xcd\xca\x19\x95\xe6\x59\x2b\x2a\x8a\xd7\xc0\x60\x29\x6d\xfd\x11\x99\x60\x86\x44\xca\x58\x09\xf7\xd7\xb7\xf3\x2d\x47\x1a\xad\x7b\x54\x35\xcd\xf0\x8c\xa7\xcc\xd4\xe3\xd5\xa3\xaa\x18\x8c\x9c\x13\xa6\x56\x0c\xe6\xb5\x10\x76\x4a\x43\x3d\x5c\x90\x9d\x8a\x81\xd6\xe1\xec\x54\x79\xb3\xa0\x54\xf9\x7a\xd7\xb2\x8b\x64\x2c\xb8\xb4\xf4\xa1\xca\xee\xe7\x6a\x2d\x1b\xcb\xc7\xad\xbb\xeb\x63\xf9\xb8\xba\xab\x98\x44\x8f\xeb\x5e\x36\xe5\x74\xd6\xc4\x56\x7a\x5f\x32\xf6\x2d\xf4\x53\x5b\x73\x07\x0a\xfc\x47\x8f\xe8\xa7\xfe\xe7\x2b\x34\xa6\x5a\xee\xd5\xd7\xca\x35\xd6\x32\xf6\x83\x48\x9c\x55\xda\x5a\x76\x53\x91\x64\x77\x2f\x2c\xbc\x13\xa5\x3c\x29\x41\xdf\x68\x78\x42\x9c\xa9\x59\x58\x18\xc5\x52\xcd\x1d\x81\x59\xcc\x67\x66\x1e\x1f\x64\x3a\x1e\xd3\xaf\x67\x0a\x8b\xef\x6b\xe8\x61\x62\x3a\x86\xff\xe0\xa3\xa1\x1e\xd1\x96\x17\x71\x55\x73\xc8\x16\x20\xcf\xc8\x66\x67\x76\x69\xde\xfd\x3f\x7c\x04\x10\x01\x80\x72\xe0\x7c\x83\x36\x4e\xc2\xbe\xe2\x76\x52\x5e\x91\xbb\x80\x5e\x13\x71\x21\x88\x45\x16\x30\x45\x63\xe7\x58\x28\x0a\xd6\x5a\x87\x7e\x53\x28\x7b\x90\x2f\x91\x5f\x22\x7f\x8a\x73\x88\xf1\x11\x21\xe0\x5e\x9a\xd3\x64\x3d\xa5\xf7\xa2\xe0\x19\x2d\x9d\x40\x1b\xae\x6b\x01\x51\xc1\x20\xb3\x52\xc4\xea\x3e\x11\xa6\x76\xa2\x9f\x40\x13\x15\x58\x07\xed\x7c\x1c\xa6\x76\x6b\xef\x32\xbf\xdc\x5c\x1c\xb4\x1f\x53\xa5\x04\x86\x7b\xde\x66\x97\x59\x87\x7e\x5d\x98\xc1\x53\x6b\xcf\x35\xbc\xba\x4c\x97\x15\xf9\x04\x96\xda\x79\x69\xfc\x3c\x16\xd8\xd5\x6c\xd8\x10\xa1\x49\x12\x63\xc5\xf0\x90\x41\xac\x72\x5a\x5e\x73\xd3\xa7\xde\x5b\xa5\x2e\x57\x2e\xf9\x06\x70\x44\x85\x66\x3e\x11\xc8\x83\xdd\x45\xf4\xfe\x3a\x80\x07\x30\x90\x07\x91\x40\xdc\x79\xa3\x15\xcb\xd4\x8f\xd7\x9c\x2f\x93\xec\x70\x0b\x19\xdd\x0c\x46\x0b\x8d\x64\x2e\x48\xa4\xaf\xb2\x73\x74\x9b\x10\x2d\x79\xa5\x5a\xfa\x4a\x93\xc4\x41\xb7\x35\x4b\x87\x6b\xc1\x0d\xee\x7d\x5e\x9e\xee\xd1\x30\x31\x07\x5d\xd8\x3c\x33\x8f\x06\xbb\x87\xa9\xf0\xe8\x0b\x26\x64\x30\x24\x16\xb5\x48\xe0\xf0\x0b\x13\xb5\x0b\xa6\x24\x5c\xb8\xc8\xe8\x3f\x35\xfb\x15\x44\x4e\x79\x6d\x66\xa8\x3f\xdb\xfd\xcc\xc1\x91\x72\x8f\x93\x70\xf7\x61\x5d\x30\x7a\x0b\xb9\xa6\x74\x07\x16\x44\x9c\x36\xbe\xd8\x3c\xf6\xc4\x02\xe9\xda\xbb\xd5\x0e\x0d\x6e\xc9\xdc\xd4\xe6\x83\xda\xe5\xae\x8b\x5c\x99\x59\x18\xdf\x6b\xf6\x79\x6e\x40\xce\xf3\x28\xa8\x92\x79\x39\x41\xa4\xef\xda\xba\x25\xd6\xf3\x1c\xa6\x62\x2d\x1c\x8f\x1c\x8e\x7e\x1d\xce\x6d\x33\x78\xf2\x61\x69\x22\x54\xb3\x4b\x5b\x25\x04\xc4\x68\x1b\xe8\x24\x0b\x10\x7f\x76\xdb\x18\x32\x56\xaa\x78\xf5\x4c\x79\x5b\xb7\x1a\x48\xc9\xb9\x28\xb3\x2f\xef\x5a\x61\x07\x16\x26\x10\x40\xe3\xd6\x07\x8d\xb3\x25\x63\xb2\xbd\x07\x10\x8f\x4a\x00\x5a\x42\xee\x40\x2b\x0b\x0e\xd6\xe8\xbd\x2a\x5d\xac\xb0\x3a\xad\x72\xc3\x0a\x5f\x68\x5e\x72\xb9\xa5\x07\x4e\x4f\x66\x31\x84\x6c\xdb\x6d\x62\x80\x0a\xf3\x37\xde\x03\x68\x93\xc4\xc8\x40\x3e\x18\x48\x6b\x4b\xbb\xcc\x73\x32\xc7\x82\x30\x35\x60\x77\x7a\x14\xe6\x8b\x3c\x12\xc3\x45\x01\xb9\x32\x03\x50\x8c\x78\x8c\xb0\xfd\x0a\x88\x5e\x17\x86\x27\x87\xe6\x25\x50\x4d\xf7\x88\x4c\xf0\xa3\x79\xc7\x00\x45\x58\xa0\x24\x3d\x55\x3a\xce\xd5\x78\x2d\x40\x46\x53\x0a\x38\x0d\x31\x91\xf6\x42\xa2\xca\x02\x71\x64\xe2\x77\x4a\x1c\xb0\x36\x7c\x96\xf1\xaf\x2a\x86\xed\x0c\x05\xcc\x19\xe8\xe4\x80\x79\x7d\x34\xe0\xb0\x1a\x65\x7d\x43\x55\x02\xd6\x99\xc6\x99\xe3\x0b\xfe\x69\x56\x88\x0b\x3a\xa1\xcc\xab\x86\x65\xa7\x37\xc3\x73\x30\xef\x9a\x33\xc8\xc7\xd9\x9d\xd6\xb7\x39\x0e\x67\x30\xe2\xff\xfb\x5f\xff\x7d\x46\xeb\xbc\x1f\x72\x68\x29\x70\x08\x2b\xb9\xde\xb2\xf8\x2b\xef\x41\xaf\xd4\x40\x7a\x78\x3a\xad\x2c\xe4\x6d\xe4\xbf\xda\xcb\x4d\x6f\x1a\xae\xa6\xc6\xdd\x5b\xdc\xee\xe0\x1b\x11\x69\xc3\xd9\x30\x57\xcc\xeb\xd2\x92\x4a\xc8\x4d\xd0\x23\x31\x27\x39\x33\x10\xf8\x95\xe6\x97\xcc\x34\x03\x96\x7f\x22\x0d\x88\x8c\xc1\xed\x35\x3f\xe4\xd4\x69\x49\x98\x26\xde\x9f\x47\x4a\xe4\xee\x70\x2f\x16\xda\xd5\x45\x31\x31\xac\xba\xfd\xd2\x4d\x5b\xe2\xdc\x1e\x80\xe5\x36\x31\xa3\x53\x2c\xf7\x17\x9a\x53\x59\xcf\xcb\x58\xd3\x7d\xe1\x61\x55\x90\x8e\x19\xa4\x49\x91\xd5\x0b\x92\x4a\x22\x0c\xa7\xcb\x30\xc4\xec\x4e\xf0\xe1\x39\x21\x42\x74\x85\xaf\x91\xcc\x30\x5d\x2b\x9b\x41\xbf\x5f\x0d\x1e\x5a\x70\x36\xe0\x09\x11\xc3\x38\x55\x4b\xc7\xa2\x29\xc3\x40\x7f\x74\x99\xaa\xc5\xea\xf6\x65\x82\x97\xeb\x19\x35\x01\xb6\xea\xf7\x6b\x9a\x5d\x2d\x31\x7b\x21\x3e\x45\xa9\xb9\x06\x0e\x95\x94\xe0\x50\x6d\xc4\x6b\xc1\x44\x02\x37\x30\x53\x80\x43\x98\x6b\x52\xf6\x8a\x36\xa0\xed\x30\x72\x34\x4a\x73\x93\x52\x56\x06\x23\x3e\x1b\xb0\x8f\xa6\x8e\x0c\x68\x79\x66\x00\x11\xa4\x1b\x91\xaf\x73\x2e\x49\x21\xff\xad\xa2\xb4\x85\x4d\x7c\xb5\xc3\xa8\x16\xd6\xf3\x8f\xb6\x97\xd5\x5f\x1d\xd8\x76\x79\xc1\x97\xa7\x5c\xbd\x03\xb7\x12\x07\x23\x3a\xa7\x7a\xef\x0c\x2b\x4f\xda\xfe\xca\x2b\xe7\x31\x5d\x00\x1e\xa6\x92\xc5\x09\xca\xa6\x57\xda\x10\x09\x79\x22\x60\x4e\x87\x31\xfa\x05\x4c\x8a\x76\xbd\x1a\x76\xb2\xea\x00\xe5\xc9\xa7\xc0\x16\x50\x5c\x1e\x41\x31\x45\xaf\x6a\x2f\x16\x93\x8f\xb6\xce\x93\xab\x0a\x4c\x59\x43\x3c\xef\xf8\x85\x5c\x16\x44\x21\xf2\x55\x11\x5b\xea\xb5\xef\x32\x19\x97\x93\x1f\x50\x75\x32\x56\xbd\xec\xb8\xf7\xa2\xdb\x1d\x97\xf8\xee\x52\x35\x63\x77\xe5\xdb\xd4\xc5\x29\x66\xb1\xcd\xc7\xb5\x4a\x86\x16\xb6\x60\x76\xc6\xe8\x96\x65\x2a\xd8\xac\x52\x0f\x01\xdf\xb4\x69\xa0\xfa\xe1\x22\x73\x0a\xa3\x56\x59\x20\xbc\x82\x0b\x2d\xb9\xa7\x4c\xd1\x44\x6f\x0e\x3b\x06\x89\xc6\x10\x19\x67\xd1\x1d\x21\xb2\xbd\x0e\x40\x90\x4a\x49\xd9\x64\x68\x29\xe9\x52\x4b\xdb\x5d\x0c\xc5\x3d\xf5\xd9\x34\x65\x7e\xfc\xd1\x35\xd4\x6c\x54\x37\xdb\x1a\xc0\xdd\x5c\x52\x2b\x68\x1c\x8c\xbb\xc9\x58\x54\x3e\x97\x0b\x3b\xa4\xb1\x21\x05\x35\x15\xc5\x61\xa2\xeb\xd8\xdd\x41\xa6\x5b\x06\xbf\xc8\xaf\x10\x69\x13\x55\x4d\xfa\x19\x44\xea\xab\x9a\x4c\x5c\x59\x9b\x81\xdb\x63\x99\x88\x66\xeb\x99\x65\x38\x03\xa5\x64\x5e\xec\xba\xb3\xe9\x08\x38\x49\x46\x38\x7a\xcc\xb4\xb0\xcc\x16\xc1\x85\xab\x07\xa1\xe5\x4a\x28\x78\x67\x36\x97\x1e\x68\x04\xd2\x8d\xef\x2d\x34\xf0\x47\x76\xd8\x79\xe7\x86\x6a\x16\x57\xce\xe0\x5d\x99\xd1\x9b\xdc\x86\x98\xcc\x13\xbe\x98\xd5\xdc\x67\xe5\x04\xc6\x6d\x22\x75\xea\xf2\x27\x77\x7a\x95\x95\x98\xde\xda\x97\xd9\x52\x36\xd4\x0e\xc0\xb8\xd6\xe0\x92\x9f\x12\x3e\x02\x93\xaa\x35\x3f\xb8\x0c\x1f\x2f\xd5\xa3\x7c\x9e\xd7\xcd\x3b\x2a\x9f\x48\x2a\xe7\x89\x56\x66\xea\x7b\x30\x39\x27\xfb\x5d\x37\x83\x90\xb0\xda\x3a\xd8\x3e\x5a\xbb\xf2\xf3\x7d\xc0\x3e\x5f\x39\x49\xc0\xbc\x6b\xf8\x57\xc9\xca\x66\x52\x0d\xcf\x8c\x93\x5a\xf1\x01\x53\x78\xe2\x16\xd7\x0a\x97\xfc\x99\x11\x21\xa7\x74\x5e\x28\x84\xb9\x75\x78\xb8\xdd\xd1\xf6\xff\x4c\x30\x74\x65\x9b\x07\x98\xba\xd5\xe7\xf3\x53\x83\xce\xa2\x77\xa7\x9c\xe3\x28\xb7\xc9\x46\x09\x96\x92\x8e\x17\x1e\xa8\x4a\x16\xe7\x0b\xa9\x6b\x45\x23\x86\x57\xf9\xae\x8a\xcd\x19\xea\xec\x06\x55\x60\xfb\x8c\xca\x87\xe2\xe1\xa7\xb1\x0f\xba\xa7\x6f\xb3\x65\xe8\x1d\x27\x27\x58\xaa\xd7\x82\x07\x1b\xf8\x84\xcd\x50\x00\xda\xe2\x35\xed\x79\x27\x55\xa4\x61\x2e\x6d\xa4\x1c\x2d\x2c\x93\xa3\x2d\xcd\xac\x0e\x97\x21\xad\xf8\xf0\x45\xaa\x90\xc3\x0a\x3b\x4f\xeb\x8c\xce\x24\xae\xcf\x65\x86\xd2\x02\x60\x16\xf9\xc7\x27\x48\x6e\x05\xca\xd6\x66\x53\x5e\x92\x84\xec\x24\xd8\x7c\x83\x1d\x5a\x8e\xe4\xf0\xf6\x66\xe3\xbe\xcc\xcb\x52\xac\xb6\xab\x6c\x10\x03\x5f\x83\x91\x54\x3d\xf4\x2f\x66\xa0\x36\x0c\xbe\x6a\x15\xc1\x26\x0a\x54\x5e\x3d\xda\x43\xda\xe5\x5e\x68\x89\x19\xbe\xdd\xef\xf9\x1c\x0b\x9b\x3a\x9f\x71\x26\x27\x1e\xe2\x3e\x7f\xe5\x50\xf5\xa5\x71\x7d\x22\x6d\xc2\x6a\x56\x9e\xbe\x8d\x78\xef\xf2\x0d\xd5\x6e\x5f\x58\xc7\xb5\xe2\x68\x42\x00\x89\x87\xb2\x98\x3e\xd1\x38\xc5\xc9\x51\xed\x89\x9d\x25\xda\xec\x88\xfa\xd5\x1c\xa6\x95\xa5\x27\x8f\x07\x25\x4a\xba\xfb\x68\x09\xf3\xd3\x2e\xce\x01\x2e\xc1\x61\x1c\x4b\xa3\x30\xbc\x79\x89\x6d\x6b\x68\x0c\x3b\x32\x0b\x10\x11\x44\xc9\xc2\x25\x9b\x8f\x7d\xf7\xd2\xa4\xa1\x71\x6c\xbf\xc8\xe0\x20\x0a\x30\x6c\xb8\x80\x66\x69\xd6\xe8\xf5\xb9\x6e\xf9\x68\xbd\x75\xb9\x73\xfd\x33\x56\x1e\x55\x7e\xba\x82\x30\x7c\x08\xe7\xb4\xbd\x3c\xec\x00\x68\x0f\x50\xf8\xa9\x3b\x86\x87\x79\xff\x1e\x80\x70\xbc\x24\x12\xec\x4e\x44\x3e\xa2\x6d\x72\x10\x92\xf2\xd2\x52\xbc\x94\xbc\x7c\xea\xb0\xbd\x72\xa4\xac\xc3\x5d\xa2\xc3\x38\xc9\x77\xd6\xfd\xb8\xbf\x0b\x7e\xf5\x7e\xd9\xc9\xfe\x00\x98\x5b\x0c\xf9\xf8\xa9\x2d\xf7\x03\x87\xd7\x8b\xe1\x5c\xf2\x79\xad\x88\x8e\xb5\xc3\x6b\x15\x17\xbb\x44\xce\x7d\x2c\xaf\x4d\xbe\x6c\xbd\xb8\xfb\xdc\x6a\xeb\x8e\x65\x17\x3a\xda\x9e\xbd\x87\x76\x37\x7a\x1f\x84\x20\xf5\x76\xb7\x68\x05\xa4\x93\x5b\xb2\x5d\x1e\xb2\xaa\x1a\x8d\xdb\xc3\x47\xb8\xdc\xd2\xe1\x5c\x90\x31\xfd\xba\x91\x2a\x70\x0b\x9f\x5a\xf5\x5a\x93\xb9\x54\xf5\x11\xdc\x82\x50\x25\xd2\x0b\xa4\xb5\x94\xb6\x95\xe1\x06\x2c\xcf\xc8\xb5\xe9\xb8\x5a\x18\xe6\xa2\xf0\xd3\xa6\xd0\xa7\xbb\xaf\x50\x69\xd6\x75\xaa\xd4\x5c\x9e\x7f\xf8\x30\xa1\x6a\x9a\x8e\xce\x22\x3e\x33\xf9\x1f\x5c\x4c\xcc\x1f\x1f\xa8\x94\x29\x91\x1f\xfe\xfc\xa7\x3f\xe5\x4b\x3c\xc2\xd1\xe3\xc4\xc0\x39\x2d\xfb\x3b\x8b\x4b\x4e\xb0\xdc\x2e\xa2\xcc\xa5\x4e\xee\x39\x85\xde\xeb\xc6\x25\x2d\xeb\x6f\xa4\xc2\xb3\xb9\x1f\x82\x6c\x6a\x3c\x4a\x85\xf3\xca\x32\x90\x0f\xab\xa7\x89\xa6\x78\x3e\x27\xac\xde\xec\x62\x12\x9c\xb7\x60\x3d\x2e\x45\xda\x8e\x90\x7c\x9d\x27\x98\x15\x61\x3f\xa0\x4c\x9a\x20\x11\x61\xca\x42\x52\xe4\xb5\xe9\x61\x37\x1a\xe8\x29\xc3\xff\xd7\x4b\x81\x85\x39\x52\x99\xd7\x3f\x74\xc3\xb1\xb5\x88\x5d\x85\x5a\xec\x91\xae\x5c\xff\x39\xa7\x1d\x71\x54\x6b\x4a\x8e\xbd\xb7\xb5\xde\xb6\xd9\x41\x91\xe0\x6c\x48\xbe\x6a\x26\x27\x37\x05\x8a\x7b\x90\x44\xa2\xce\x97\x7b\x24\x17\x4c\xe1\xaf\xe7\xe8\x33\x65\x20\xc0\xfe\xc4\x53\x21\xd1\x25\x5e\x9c\xf2\xf1\xe9\x8c\x33\x35\x45\x9f\xe1\x7f\xed\x4f\xcf\x84\x3c\xa2\x5f\x09\x16\x96\x3f\xd8\xfa\x91\xae\x84\x1d\x6c\x21\x91\x32\x89\xc8\x93\x3e\xa1\x7f\xfa\x5f\x68\x66\x5a\x3e\x47\x3f\x7c\xf8\xd3\xff\x42\x7f\x80\xff\xfe\x3f\xe8\x0f\x35\x96\x86\xf5\xa0\xe6\xa0\xcc\xf8\x5d\x6d\x18\x01\x50\x4a\x2e\x93\x7c\x55\xb3\x17\x82\xe7\x2b\x55\xd9\xf2\x23\x8d\x1e\xf9\x78\x3c\xd4\x1b\xc3\x24\x90\x0e\xf1\x56\x66\x07\x1f\x35\x98\xda\x42\xf1\xa6\xec\x64\x5e\xf0\xc9\x76\x6a\x90\x46\x1c\xbb\x96\x69\x6e\x9e\x80\xe0\xb5\x42\xe9\x71\x2a\xe1\x2b\x12\x6b\xae\xba\xce\xe9\x70\xd6\x45\x07\x3a\xe0\x2c\x48\x3e\x32\x8f\x13\x88\x0b\x01\xa7\x7e\xf4\xb4\x09\x30\xb3\x84\xac\x3c\x0e\x4b\x61\xdd\x6f\x26\x56\x17\xa6\xf6\x5a\x71\xba\x72\xa9\xf3\xd5\x21\xba\xf7\x5c\x6c\xa5\x6f\x3d\x92\xda\x14\x9a\x15\xc5\xcd\x5c\xc1\x6d\xec\x1b\x35\x14\x47\x92\x8b\x0c\xbd\xdb\xd8\x45\x6c\x09\xd4\xd5\x56\x54\x2a\x4c\x50\x63\xbb\x43\xaf\xa7\x7e\x99\x7d\xb2\x6a\x98\x10\xe1\xe8\xde\xce\x8b\x3b\xc2\x68\xb5\x88\xa4\x59\x62\xc5\x88\x2b\x40\x36\x57\x2d\xe8\x7d\x86\xab\x02\x8d\x43\xb8\x2d\xe4\x0d\x31\x27\xd9\x5a\xe0\x8a\xea\xf5\x4c\x45\x44\x2e\xf8\x76\xe1\xd6\x09\x65\x4b\x79\x1a\xb5\xc1\x6d\xf5\x32\xf9\x95\xad\x10\xe7\x70\xa8\x79\x9c\x2b\x0b\xc6\x2d\x61\x6b\xaf\x78\x00\xb8\xc5\xd9\x00\x90\xe2\x2e\x30\x56\x97\x2a\x82\x6c\xc1\xb5\x8d\xe1\x3a\x67\x78\xae\xa0\x4c\xa9\x8e\x8c\xc0\x9a\x17\x36\xc4\x4c\x42\x38\xd9\xd6\xe3\xf0\x6a\x23\xe5\x31\x6a\x85\x2a\xc5\x30\x12\xc8\xb7\xdc\x10\x23\xd7\x94\x29\x3b\x41\x02\x43\x30\xb0\x9a\xea\xf6\x24\x11\xa7\x63\x1c\x51\x36\x39\xf1\xe0\x51\x01\xaa\xc4\xbf\x0e\xaa\x36\x69\x1f\xcb\xc7\xdd\x06\xb8\x6e\x5d\x6d\x96\xc6\x79\xc5\x43\x0b\x68\x64\x1c\x2b\x74\x09\x1b\x52\x61\xf9\x58\x87\xe8\xb5\x04\x27\xd8\x30\xba\x8c\x14\x0e\x84\xb0\x69\x7c\x0e\xfa\x80\xf8\xfa\x14\x54\x2a\x71\xf5\xcf\x2d\xb8\xa8\xcb\x34\xc5\x19\xfa\x4f\x19\x55\xb7\x61\xfc\x72\xca\x85\x1a\x6e\x88\x47\x5c\x76\xa9\x30\x72\x9a\x00\x90\x10\x7f\x22\xe2\x89\x92\xe7\x22\xac\xef\x3a\x7b\xd1\x18\xcd\xbc\x78\x4a\xc0\x7d\x9d\xcd\x39\xa4\x6e\x8d\xd1\x0c\xb3\x85\x61\x94\x9a\xb9\x60\xf9\x28\xb3\xaa\xcb\x48\xce\x70\x92\x9c\x20\x41\x52\x69\xaa\x91\x4b\x92\x8c\x4f\x5d\x01\x98\x18\x25\x7c\x42\x23\x9c\xa0\x51\xc2\xa3\x47\x69\x32\x2b\xd9\xc4\x30\xa9\xb9\xe0\x11\x91\xd2\x93\xac\x72\x14\x05\x9b\xdb\x0a\x25\x97\x15\x11\x33\xca\xa8\x54\x34\x72\x22\x53\x0e\x86\x62\x0a\xff\x47\x18\x4c\xc2\x90\x29\x0c\xc3\xd5\x92\x1e\x31\xa0\xb0\x29\xb3\xa5\xc2\xe0\xba\xb6\x58\x8f\x2e\x39\xa1\xee\x00\xed\x00\xba\xd2\xed\x90\xa1\x2a\x1e\xc8\x15\x47\xea\xc2\x7e\x06\xc7\xb8\x69\x0b\xdc\x15\x4f\x54\xb6\x21\xb3\x93\x56\x80\xd3\x82\x5c\x86\x2c\xf5\xa2\x20\xb9\x64\x19\x09\x07\x86\xa4\x07\x43\xae\xc1\xcf\x5b\xb5\xa7\x35\x15\x41\xe4\x81\xea\x74\x65\xaf\x3d\x65\x51\x92\xc6\x59\x59\x55\x2d\x02\x3c\xe9\x4d\xe2\xc8\xa3\x69\xaf\x05\x85\x13\x84\x25\x7a\x26\x49\xa2\xff\xdf\x64\x5e\x9c\x66\xe5\x42\x34\x4b\x36\x25\x5d\xa0\x13\xc7\xa5\xeb\x76\xd4\xc1\xa1\xa2\xde\x62\x35\x35\x58\x13\x33\xae\x4c\x45\x5b\x83\x8a\xea\xec\x5b\x06\x46\x73\x94\xf0\x11\x9c\x74\x00\x4c\x75\xf9\xd5\x5e\x3a\x67\x1a\x45\x84\xc4\x24\x36\xf5\x39\x33\x30\x4f\x7b\x44\xbf\xaf\x86\xef\x2c\x50\xe4\x00\xc0\x52\xcb\x86\xb5\x5a\xc8\xd4\x62\x75\xc3\x33\x74\x5b\x02\x04\xf2\x28\x33\xc6\x65\x78\xb8\x93\xa5\x25\x7c\x1d\x80\xd5\xd2\x24\xf6\xb7\x42\x6b\x02\xac\x16\xfa\xdc\x01\xc0\x6a\x69\x9e\x35\x39\x23\x7c\xb2\xd7\x5c\x77\x3d\xa9\x2b\xde\x3e\x01\xd1\x00\xd3\x99\xbb\xb3\xb0\x05\xdd\x81\x5c\x54\x6d\xc4\xc3\x02\x8f\x2d\xd5\x00\x7d\x5d\xf0\xd8\xd2\x60\x0e\x19\x3c\xb6\x34\xd4\xc3\x05\x8f\xad\x18\x68\x0b\xf0\x58\xe3\xdc\x1f\xea\x4d\xdd\x8e\x29\x40\x42\xd5\x28\x1d\xdf\x03\xc4\x40\xe3\x18\x2f\x4c\xe0\x80\xb9\xc6\xdc\x1d\x6d\xe3\x8b\x60\xb4\x36\xf7\xb6\x2e\x1c\xab\xe4\x84\x58\x77\xef\x65\xde\x37\x03\x3a\xb2\xae\xd9\xfd\xc4\xb7\x76\x83\x1d\x32\xc2\x73\x8b\x65\x50\x57\xe2\xe8\x70\xb2\xb6\x37\xc3\xe5\x05\xec\xcb\x02\xcb\x6f\x85\x5c\xf7\xb9\x54\x2d\x64\xca\x9f\x6d\xc5\x2e\xd8\x86\x66\x53\xd6\x6e\x41\xe8\x74\x68\x95\xb6\x3a\xca\x51\xa6\xc8\xa4\xac\xd3\xe6\x87\x86\x32\xf5\x97\x3f\xaf\xe4\x44\x06\xda\xd3\xa9\x87\x5e\xcd\x8e\xcc\xd9\x61\x9f\x91\x18\x45\x53\xad\x15\x49\xad\xbe\xe8\xe9\x98\x9b\x55\xa2\x19\xa6\x4e\x91\x4a\xa5\x71\x2d\x51\x39\x60\x05\x2c\xdc\x33\xf4\x11\xca\x20\xe3\xd9\x5c\xeb\x5f\xd9\xfc\xa8\xde\x49\x83\xf4\x87\x1f\xfe\x42\xd0\x0f\x68\x46\x30\x2b\xe8\xb0\xa0\x36\xe9\xab\x0f\xb0\x23\xd5\x94\x0c\x58\xe5\x52\xa0\xee\x57\x53\xdb\xcc\xc5\x1b\xf6\xd8\x98\x3b\x9d\x18\xca\x7b\xe2\x68\x8a\x64\x3a\x32\xf5\xa9\x3d\x1b\x86\x13\xa4\xaf\xf8\x04\x1c\xd5\x70\x23\xbb\x41\x37\x9d\xc2\xfd\xc6\x00\x58\x77\x63\xdb\xdb\xb8\x03\xf7\xc8\xa9\x24\x05\x4c\xb1\x0a\xa7\x99\xe1\x7c\xfe\xc1\x97\x06\x6f\xe8\xc4\xf8\x10\xb4\x7e\x86\xad\x65\x5f\xcb\xd2\x10\x4e\x0c\x5e\xb2\x34\xc1\xc2\x1e\xfd\x01\xd3\x8a\x86\x20\x4f\x94\xa7\x32\x59\xa0\x98\x33\x72\x02\x3b\x21\x8d\xa6\xc6\xb1\xaa\x75\x16\x6c\x0b\xa5\x3c\x51\x99\x6a\x85\x16\xda\x72\x75\x59\xa4\xc2\x06\x0b\x6d\x4a\xa1\x1f\xad\x7e\x13\xf8\x4a\x79\xf9\x91\xa8\x9d\x16\xe5\xc3\x15\x97\x78\x7e\x4b\xb8\xe2\xc2\xae\x0a\x70\xc5\x19\x5c\xf1\x32\x5d\x0e\x11\xae\xb8\xb4\xe6\xed\xe0\x8a\xab\x96\x7c\x03\xb8\xe2\x42\x33\x6f\x06\xae\xb8\x44\xd1\x37\x03\x57\x5c\x9a\x57\x80\x2b\x7e\x7b\x70\xc5\x5b\x02\xf2\x56\xf3\x62\x83\xeb\xa5\x28\x5b\xac\xbd\xc9\xde\x4b\xd4\xbb\xd1\x1b\x2c\x7a\x2c\x06\xb5\x65\xd7\xd5\xf6\x20\xc0\xd5\x4c\x68\x3d\x10\xe0\x4a\x55\xbd\x9e\xd5\x6d\x0b\x2c\x06\x8a\xc1\x0b\x83\x00\x17\x26\x10\xe2\x2b\xd7\x8f\xaf\xac\xdc\x7c\xb6\x6f\x3d\x3c\x17\x74\x59\xbe\x90\x5b\xc2\x00\x17\xd6\xa7\x55\x24\x26\x88\xee\x3b\xd8\x89\xfb\x95\xe6\xfb\x85\x43\xbe\x52\x96\xf7\xa9\x28\x2d\x20\xb9\x96\xf0\x1c\x4a\xa1\x51\xc2\x7d\xff\x7f\xd8\xb9\x1b\x44\x06\x97\xc8\x9b\xf9\x55\xcc\x5e\x6c\xb1\x55\x5b\xef\x50\xa7\x95\xee\x26\x51\xd8\x25\x6f\xae\xe9\x62\x76\x83\xb8\x9f\x93\xa8\xc6\xc6\x4c\x67\x74\x57\xcd\xae\xba\xc8\x32\x0c\x36\x50\xc8\x97\xf2\x52\xf5\xf5\x64\x86\x63\x64\xfc\x52\x3a\x30\xa0\xa4\x98\x2f\x27\x54\x2a\x51\x1b\xdb\xb4\x34\xc2\x6d\x5c\xa5\xf3\xb4\x75\x40\x8c\x47\xd5\xc9\x66\x9f\xcd\xc8\x8c\x8b\x55\x81\x55\x95\x5f\xda\x12\x4b\x9b\x7c\x4a\xe6\x53\x32\xd3\x92\xcc\x70\xdd\x46\xda\xae\x77\x96\xb4\x6c\x73\xd7\x4c\xa0\x63\x61\x13\x78\x8e\x50\xfd\x6e\x6c\x90\x50\x5b\x2f\xf7\xb6\xcb\x6c\xb1\x5a\xd7\x74\x08\x39\x10\xef\x66\x83\x9b\x7d\xa9\xe0\xee\x86\xfd\x5d\x19\xd3\x91\x85\xd4\xac\x8e\xda\x68\x88\xd7\x68\xc2\x3b\xcb\xbf\xb2\x05\xc8\xd7\x70\xe5\x17\xbd\xf3\x9a\x13\xfa\xd5\xa7\xd7\x0f\xf0\xa8\x41\xeb\x5d\x26\x0f\x44\xe6\x48\x22\x4e\x7d\xcd\xa0\x30\x98\x65\x7a\x15\x76\x89\xd3\x28\xb7\xd8\x24\xa9\xa8\x8d\x32\x6d\x63\xd0\x8e\x54\x8a\x13\xd0\x24\xfc\xaa\xa9\xe5\x45\x1d\x2d\x2a\xd2\x1e\xdb\x79\x4c\x28\x53\xff\xf1\xd7\xb5\x56\x53\xab\x56\x96\x6e\x50\xe9\x0d\x47\x11\x91\xc6\xc6\x6e\xa3\x90\xf1\x88\x3f\x41\x91\xb7\x6d\x56\x55\x1f\x65\x3d\x6f\xcd\xe0\x33\x08\xec\x38\xdf\xea\x46\x5c\x98\x0a\x9e\x4e\xa6\xce\x86\xa4\xcf\x8c\x9e\x5a\xd5\x5a\xfe\xb2\x64\x23\x5f\x7b\x2d\x7f\x4c\x69\xb2\x99\x85\xee\xbe\x50\xfe\xee\x53\xaf\x8f\xe4\x34\x3b\xad\x23\x68\xb6\x72\x61\x97\x07\xdd\xbe\x4f\xfb\x6d\xe6\xaf\x81\x6e\x4e\x1c\xec\xeb\x98\x27\x09\x78\x1a\x24\x99\x3d\x11\x51\xdd\x3d\x4c\xb8\x4f\xd7\x43\x6c\xcc\x06\x00\x5f\xe7\x89\x11\xad\xe4\xaf\x5b\x23\x1a\x4a\xe4\x46\x5f\x0e\x5a\x30\xa1\x6a\x9c\x11\x56\x65\x63\xfb\xb2\x5c\x79\xe8\xc8\x02\x06\x5d\xf4\xd8\xce\x82\x06\x1d\x49\x5e\x38\x70\x70\xc5\x3c\x0e\x35\x78\xb0\xc4\xec\xb2\x58\xbe\xfc\x9a\x71\x81\x43\x46\xf1\xe9\x68\x12\x0f\x58\xa7\x90\x4f\xe1\x2a\xb4\x8f\x16\x79\x40\xb6\xd1\x21\x7c\x66\x06\xf5\x5d\xac\x61\x05\xdc\x68\xfa\x2f\xd0\x74\x0c\x68\xb2\x09\x29\x74\x61\x83\x10\x4d\x4e\xe2\x53\x1c\x2d\xa2\x84\x46\x9e\xce\x3c\x11\x78\x3e\xad\xe2\x78\x6e\xe5\x03\xea\xd0\x6b\xa1\x0e\xd5\x15\x42\x5b\x27\x6e\xdb\xed\x2b\x86\x67\x24\xa0\x21\x1d\x22\x1a\xd2\x49\x86\xb7\xc1\xf2\x92\x72\xaf\x08\xe3\xb0\x7c\xee\x03\x24\xd2\x2b\x40\x22\x6d\x72\xf8\x73\xbc\xa3\xc2\xb1\x0f\x30\x4d\x6d\x88\xf7\xfa\x30\x4d\x99\x10\x70\x50\xc8\x3b\xf5\xfc\xe0\x95\x11\x5d\x96\x07\xf6\x9a\xb0\x4c\x15\xe2\xd2\x3a\x72\x63\x13\x2e\x53\xd3\xbe\x68\x45\x97\xd7\x45\x49\x5a\x8f\x32\x6b\x01\x20\x55\xde\x9d\x07\x02\x87\x54\xbf\x0c\x07\x72\x6e\x76\x99\xd5\xb3\x5e\xcd\x5e\x3f\xb3\x67\x1d\x05\x73\xbd\x24\x9f\x6c\x3f\x1c\x57\xa2\x4f\x5e\xdc\x70\xb3\x64\x9f\x8e\xf3\xc1\x13\x81\xa6\x3c\x89\x1d\x08\x47\x46\xad\xac\x83\x2c\x13\x22\x23\x90\x5b\x8c\xfb\x39\x89\x8c\xb6\x99\x17\xe2\x6b\x4a\xe9\xc9\x16\x11\x86\xbb\x03\x46\xb3\x0b\x2b\x4a\xc6\x49\x36\xb1\x9f\xac\x94\x2e\x64\xd1\xfc\xdf\x30\xc6\x02\x85\xc0\x6b\x50\x3d\xcc\x95\x76\xef\x15\x83\x6b\x12\x3d\x3c\xe3\xa8\xa8\x2a\xb1\x6b\xf6\x19\x3c\x7d\xa2\xce\x10\x83\xfd\x1e\x1b\xbd\x94\x6e\x76\xad\x3c\x95\xe5\xcd\xb2\x41\x30\xdc\x52\xc5\xc4\xed\xc1\x91\x66\xf8\xeb\x70\x8e\x05\x4e\x12\x92\x50\x39\xdb\x5b\x30\xf4\x45\xd1\x5d\xad\xcf\xaa\xe0\xc6\x44\xc6\xd2\xd9\xc8\x6c\x45\x37\x10\x5b\x64\x53\x71\x24\x52\xe6\x43\xbb\x65\x0b\x93\x15\xf1\x4c\xe1\x5e\x00\xab\x5a\x34\x85\x6a\xc9\x63\x4c\x05\x23\xb2\xb6\x36\x2d\x89\x52\x41\xd5\x62\x68\x4b\xfd\xb6\x3f\x70\xf7\xf6\xcb\x0b\xfb\x61\xb3\x87\xdf\xa1\x1a\xb8\xfe\xb2\xd2\xc2\x73\x22\xa0\x3c\x97\x2b\x34\xe5\x95\x33\xb6\xa8\x15\x24\xab\xf1\x05\xe1\xdf\x4b\xd7\x76\x5d\xe0\x34\x7e\x1e\x7a\x19\x65\xc3\xa8\xbc\x39\x56\x1d\xd6\x2a\xdc\xad\xa6\x49\xee\x19\x79\xaa\xc6\x8b\xbe\x87\xea\x3e\x36\x6d\xc4\x34\xad\x07\xec\xb9\xc2\xc1\x5e\x9b\x2f\x8c\x97\xf2\x5f\x51\xec\xc6\x1b\xa7\xc5\x3a\xaa\x0a\xbe\x6a\x18\x6c\xc7\xfb\xaa\xc5\x88\xbd\x4e\x76\x34\x6c\x7d\xd0\x85\x48\xe7\x8a\x8e\x96\xa1\x7d\x1c\x37\xd8\x41\xe9\xde\x4e\x02\x69\xe6\xce\xcd\x52\xe8\xd6\xd4\xf3\x2d\x70\x62\x3b\x3b\x2d\xff\x5b\x1c\x35\x87\x90\x64\x10\xa6\xfc\x3c\xc6\x9b\x19\x55\xca\x25\x4a\x18\x03\xbc\xde\x9d\x45\xdb\xf4\x7b\x17\xee\x82\xa1\xc2\xb2\x31\x51\x9d\x0d\x58\x47\xa2\x67\x82\x18\xb1\x10\x1a\x15\xb5\x93\x33\xab\x3e\xd4\x5c\x1b\x11\xdd\x53\x16\x9b\xa3\x85\x07\xaa\x64\x56\xf6\xcf\xf4\x31\xc6\x89\x24\x27\xba\x61\xa8\x16\xac\x38\x04\xbf\x62\xf4\x2c\xf0\x7c\x4e\xc4\x80\xd9\x2c\x16\x70\x38\x71\x9e\x98\xf6\xeb\x42\x7c\x2d\x0d\xc8\x30\xc2\xd1\xf4\x85\xd6\x08\x43\x32\x52\x34\x25\xb1\xcb\x97\x2e\x2e\x8f\x9b\xb7\x31\xd8\xaf\xb1\x58\xbd\xb1\x2b\x5b\x77\x62\x3b\x49\x22\xcd\x51\xb2\xf2\xee\x73\x22\xf4\xa8\xf5\x1e\x7e\x22\x0c\xd1\xb1\x1b\x87\x8d\x5d\x42\xcf\xe0\x99\xd3\x5b\xff\x09\xd3\xc4\x00\x10\xb8\xae\x9d\x10\x68\xdc\x0f\x03\x66\xdc\xfd\x2c\x2a\x64\xe8\x52\x46\xe5\x54\x73\xea\x14\x7c\xb2\xa0\x66\xd4\x25\x0e\xb1\xa7\x75\x4e\x73\x57\xbf\xde\xcc\x41\x9f\xa8\xe0\x6c\x06\x49\x42\x16\x97\xca\x91\x4f\x12\x95\x1d\x8f\xca\x14\xcf\x95\x12\x71\x1c\xcb\xa2\xf1\xd5\xa8\x95\xf4\x9f\x05\xb3\xcb\x69\x21\x2b\x32\xf2\x60\x95\x20\x88\xd5\x55\xf4\x6b\x92\x7f\x43\x6a\xc7\x72\x6a\x47\x35\x6d\x0e\x31\xbd\x23\x3b\xc4\xeb\xa6\x78\xd4\x2d\xff\x2e\x24\xdb\x1d\xa6\x7a\xbc\x72\x4e\xc4\x7e\xd2\x21\x5e\x37\x7f\x65\x1f\xa9\x2b\x21\xc1\xe3\x15\x13\x3c\x5a\x5b\x6a\x8b\xb1\xe9\xf5\xc7\x76\xad\xe4\x88\x15\x60\x56\x55\xbd\x7c\x26\x4a\xd0\x48\xee\x82\x3f\xc8\x39\x6e\x19\xd5\x07\x5a\xe0\x7c\x85\xd4\xa4\x5f\xc8\x9c\xa0\x10\x27\x97\x55\xb8\x1c\x09\x82\x1f\x63\xfe\xbc\x64\xab\x93\x3e\x9a\xc8\x67\xae\xc5\x1e\x41\x22\x2a\x49\x21\x92\x87\x4a\xc4\x88\xb4\xc6\x4e\x3c\x60\x53\x4a\x04\x16\xd1\x14\xb2\x3b\xf3\x85\x31\x59\xc2\x06\xd0\xc9\xc4\x72\xf8\xde\xae\x35\x16\xbd\x05\xdd\xcb\x16\xa6\x0c\x9f\xcf\xae\xb9\x1e\xc9\xcc\x7c\x92\x09\x33\x56\xca\xf0\x4d\x72\xad\x96\x7f\xdb\x44\x84\x8c\xd8\x7b\x4d\x46\xc8\x82\xa9\xbc\x2f\x5a\x26\x24\xe4\xbb\x21\x24\x25\xec\x29\x29\xa1\x82\xc4\xeb\x25\x26\x6c\x64\xf2\x7b\xf9\x98\x69\xd7\xf3\x4b\xc4\x4d\xaf\x0a\x5a\x4b\x47\xc3\xbd\x1f\xbd\xca\x39\xb7\x3d\x81\x5f\xb2\x4d\x61\x24\x62\xa1\xf7\xd9\x88\xc4\x31\x70\x5a\xc5\x6d\x85\xf6\x7c\xef\x38\xf3\x80\xbe\x7b\xb1\xd4\x9b\x1d\x27\x9c\x4d\x24\x8d\x0d\xd8\xcc\x1c\x43\xad\x62\xdf\x78\x01\xe0\x0a\xb0\xbe\x49\x42\x84\xf3\x4a\x08\xf4\x9d\xa4\xcc\xa2\x49\x66\xbf\xc5\x9c\x48\xf6\x5e\x19\x63\x01\x66\x0b\xf4\xc8\xf8\x73\x42\xe2\x09\xac\x50\x79\x30\xa7\x88\x92\x13\x44\x55\xf6\x99\x00\x34\x06\x9e\xaa\x81\x1e\x3b\xc4\xda\x19\x0d\x80\xd8\x6f\x85\xad\x5e\xe1\x71\x60\xf9\xfd\x19\x42\x3d\x86\xc6\x38\x52\x27\x48\xa6\xa3\xbc\xfd\x98\x9b\xe2\xf2\x5a\xfb\xf6\x26\x9e\x37\x12\x62\xe6\x2b\x3a\xaf\x3e\x1b\x8e\x3b\xe8\xed\xda\x49\x28\xde\x2a\xb6\xf0\x09\x6f\x03\xb1\xfa\x39\x95\x36\x08\x03\x71\x96\x1d\x7d\x0b\x2f\x95\x61\x64\x03\xde\xa9\xc1\x9b\x66\x3c\xae\xb5\x75\x96\xa6\xb2\xee\x58\xf2\x40\x50\x2b\x28\x59\x47\x15\xb4\x6b\xc8\xad\xa5\x26\xa9\x04\xc1\x33\xeb\x1c\xd0\x57\x0d\x88\x35\x26\x0c\x54\x8f\x9e\x0a\x23\x61\xae\xb3\xc4\x57\x94\x3d\xea\xd5\xcd\x51\xc1\x39\xe0\x25\xeb\x9e\xab\x16\x6d\xae\x6f\x3c\x72\xc1\x99\x71\x10\x6e\x25\x77\xd2\x09\xc3\xc9\x9a\x36\x8e\x25\xca\x2d\xfb\xf4\x9c\x9c\x65\xc5\x05\x2d\x45\x18\x63\x1f\x32\x3d\xae\x65\x43\x2a\xcd\xd7\x97\xf7\x30\x8a\xc9\x9c\xb0\x98\xb0\x68\x01\x5b\x84\x01\x72\x90\x60\x38\x41\x18\xbe\xc3\xc9\x19\xba\x34\xf9\x45\x99\x84\x67\xaf\x75\xb8\xd0\x67\x98\xd1\xb1\xd6\x13\xc0\x08\x6b\x47\x39\x60\x66\x98\xce\x07\x42\x72\xeb\x6a\x46\xb1\xaa\x95\xd1\x37\xc8\xf5\x96\xa8\xcc\xac\xf8\x3d\x6a\xbe\x70\xa0\xb7\xa6\xd5\xd1\xcd\xb9\x1a\x0c\x32\x1d\x9d\xc2\xbf\x0b\x09\x77\x0e\xa8\x28\x47\xd1\x21\x09\x01\x73\xa0\xf5\x78\xc1\xc5\x58\x07\xac\xb7\x0b\xbf\xdd\x8a\x3c\x16\xaf\x8f\x82\x52\x33\xa3\x8c\xce\xd2\x99\xe7\xbc\x33\x15\x1b\x22\x6b\xbf\x34\x99\x28\x73\xad\x07\x44\x0e\xbc\x1d\xe9\xcb\x95\x2d\xd0\x84\x3e\x11\x36\x60\x73\x4e\x99\x3a\x43\xd7\x5c\x11\xaf\x44\x86\x81\xce\xe2\x73\x45\x67\x06\xed\x55\x10\x7d\x0e\x0c\x28\x38\x00\x6d\x4e\xb1\x3a\x41\x71\x0a\x47\x95\x11\xa5\x59\x87\xbe\x71\x15\xac\x0c\xc4\x87\x8b\x01\x33\x37\xdd\x18\xd3\x24\x15\xc4\xca\xac\xd8\xe4\x05\xe5\x43\xce\x47\x66\x91\xe0\xbc\x49\xcc\xe8\x64\xaa\xf4\x12\x69\x19\xcf\xfa\x1b\xa7\x9a\x1b\xf1\x01\x1b\x11\x84\xd1\x9c\x4b\xaa\xe8\x53\xe6\xbf\xa4\x63\x84\xa5\x04\x0b\xca\x19\xba\x2c\xd8\xff\xa9\x04\xd5\xbb\x2e\xae\x98\xb2\xa1\xb5\x3d\xd7\xe7\x23\x6d\xbd\x90\x85\x5e\x2c\x95\xf1\x48\xf2\x24\x55\xbe\x0b\xb6\x7a\x6d\x73\xd3\xb8\x2b\x5c\x00\x06\x62\x3e\x1e\x30\xb7\xaf\xe5\x19\xea\x48\x24\xb9\x5e\x25\x69\x96\x32\x12\x54\x11\x41\x0d\x8a\x15\x51\x66\x11\xb2\x73\x9a\x9d\x81\x19\x16\x8f\x5a\x84\xf2\x2d\xf0\x06\x53\xb5\x60\xed\x18\x19\x09\x09\x60\xbd\xfc\xe5\x00\xd3\x3f\x62\x9c\x9d\x32\x32\xc1\xab\x56\x64\xc0\x0a\x4b\x82\xbe\xa3\xe3\x5c\x21\xad\xf3\x39\x7a\xb4\x1b\x42\xe4\x53\xdd\x2a\x99\x8e\xeb\x16\x69\x9c\x70\xbc\xc2\x6d\x3c\xce\x0f\x3d\xfa\x07\x1f\x99\x31\x6a\xbd\x9f\x2b\x90\x02\xb5\x7a\x35\xe6\x82\x4c\x31\x8b\x4f\xdc\x62\x15\xc7\x06\x37\xa3\x35\xb5\x39\x65\x0c\x24\x41\x07\xa2\x4c\x0c\x16\x15\x66\xde\x5a\x58\xc5\xcd\x2e\x45\xbe\x0e\x6b\xdd\x15\x59\x6b\x50\xfb\xc5\x18\x20\x0c\xcb\x5b\xcc\xed\x11\x97\x74\x36\x4f\xf2\x9c\x2e\xcf\x36\x3a\xd6\x22\x96\xe3\x91\xfc\x09\x4c\x57\x4e\x6b\x83\x5b\xdd\xae\x9c\xde\x67\x15\x23\xcf\x18\x29\xdc\x1a\xce\xe6\x65\xca\x80\x7a\x2c\xec\x3b\x49\xf4\x3f\x15\xc9\xd5\x3e\x23\xac\x0f\x98\x13\x41\xbe\x07\x2e\x63\x9b\xf5\x8c\x67\x5a\x84\x36\x30\xb7\x96\x7e\x28\x32\x4e\xee\xc2\x39\xb1\x87\xc1\xbd\x5a\x79\x51\x29\xaa\xc5\xec\x1f\x29\x20\x74\x5d\x6e\x09\xbb\x4f\x59\x4c\x6a\x8b\x59\xb5\xe2\x1a\x75\x77\x8b\x61\xa8\xc3\x4d\xeb\x4f\xf4\xa7\x44\x12\xa4\x9e\x33\xa0\x38\xad\x57\x81\xc9\x52\x90\x84\x3c\xe1\xfc\x8e\xcb\xfa\xb2\xec\x32\xc2\xb2\xa6\x3c\x0c\xa0\xad\xe9\xf1\x6f\x9e\x38\x9d\x8d\xef\x46\x0f\xe5\x09\x27\x36\x71\xc5\xfa\xca\x65\xfd\x82\xf5\x2e\xb7\x8a\x21\xb5\xad\x54\xd1\xb3\x5e\xc4\x70\x7d\xff\x4c\x16\xd5\x14\x59\x01\x62\xd8\x94\x8d\x9e\x91\x7d\x0d\x5b\xf5\x6d\xfe\xcd\x32\x8d\x6b\x29\xf7\x73\x61\xca\xaf\x90\x44\x75\xbb\x54\x81\x1b\xfe\x94\xe9\x78\x4c\xbf\x82\x56\xeb\x6e\x12\xa7\x79\x44\x82\x4b\xcd\xc5\x40\x56\x41\x6e\xf1\x8c\x23\x79\x9b\x84\xaa\xca\x2f\xb5\x96\xb5\xf6\x8e\xae\xa5\xf6\xdf\x53\x22\xb6\xa2\x77\xb6\x55\xd7\x09\x47\xf4\x4e\x49\xb5\x8e\xe8\x1a\x55\xb8\x65\x4c\x92\xdf\x6a\x1f\xd7\x90\x6e\x35\xfc\x79\xe5\x67\x23\xc3\x7c\xd7\x1f\x88\xcf\xb5\x1b\x6d\x6a\x79\x7c\x5a\x16\x9b\xec\x8a\x12\x69\xfe\x76\x62\x01\xd6\xb1\x0d\x9c\xca\x52\x9d\xb1\x8b\x19\x31\x8e\x11\x53\xb3\x4a\xd9\x4a\x0b\x9e\xa6\x6e\x1b\xa3\x6c\x32\x60\x8e\xb6\xf2\x04\x99\x30\xf1\x12\x43\x2d\x60\xdb\x63\xef\xd3\x6c\x63\xb7\x33\xa9\x1a\xbf\x3a\x23\x52\xea\x8b\x51\x2a\x81\x29\xb3\x3e\x1c\x47\x1f\x39\x60\xe8\xb4\x1c\xa7\x7e\x02\x76\x84\x13\x97\xed\x7a\x92\x0f\x50\x0e\x98\xc9\x38\x41\x7f\x46\xdf\x29\x3c\x31\xb7\x04\xa0\x57\xe2\x04\x70\x2f\x41\x4b\xb0\x5a\xb9\x97\x1c\x90\x9d\x48\x1a\x7f\x7f\xde\xd4\xa7\xb1\x21\x7c\x07\xcd\xc0\x21\xd7\x34\xcc\x09\x44\xc7\xf9\x3f\x48\xfc\x7d\x53\x4b\xf9\x47\x8f\x64\x71\x52\x26\x72\xfd\xbd\xd1\xc7\x5b\x45\x68\xee\xeb\xe2\x80\x41\xb7\x77\x52\xe2\x11\x49\x7e\xc9\x27\x8a\x1a\x59\xd1\x8f\x94\xe1\xed\x78\x50\xe5\xf0\xda\x45\xa0\x8f\x16\x75\x75\xeb\x2a\x58\xcf\xc6\x88\x2b\x1d\x23\xcb\x12\xa4\xbb\xb3\x12\xbb\xab\x6a\x88\x21\xea\x71\x4a\x92\x39\x8a\xe9\x18\x5c\x6f\x0a\xf6\x4b\x06\x1e\x6b\xea\xfd\x68\x85\x66\x96\x32\x03\x04\x6c\xa2\x3e\x9e\xed\x49\xb7\x2c\x23\x6f\xfc\x6c\xc0\x7a\xea\xbd\x44\x52\x09\xce\x26\x5a\x99\x8e\x9f\xa8\xcc\x0b\xd9\xe9\x03\x99\xce\x88\xb0\x5d\x50\x69\xa4\x6e\x5b\x04\x0a\xbb\x8b\x4d\x8f\x4d\x5f\x7d\x20\xf8\xb8\x62\x8b\xfa\x47\xa3\x57\xe8\x51\x4a\x17\x35\x55\x11\xf6\x6e\x17\xb7\xc4\x3b\x5f\xd8\x74\xf9\x8b\x6f\x9d\x44\xb3\xdc\x90\xe9\xf8\xe5\x87\xb2\x19\xd3\x52\xbd\xc1\x84\xb9\xf6\x85\xd0\xf6\x22\x70\x55\x13\x52\x93\xe6\xa4\xfb\x71\x8e\x2d\x33\xb8\xb5\x54\xac\xd2\x04\xed\xa8\x8d\xf6\xe4\x9b\x30\x09\x05\xfb\x87\x54\x58\xd1\xc8\xde\x02\x5c\x58\x2b\xae\xd5\xab\xeb\x97\x76\x5b\x9d\x44\x46\x38\x59\x5e\xe1\x06\x9f\xba\x79\xbf\xd9\xd0\x69\x8f\x9b\x69\xbb\x11\xd8\x25\xe2\x49\xb2\x4e\x99\xba\xd2\xcc\x2f\xf2\xcf\x9b\x47\x94\xf7\xa3\x17\xc0\xad\x05\x9c\x1a\x63\xa0\xc0\x89\x75\x17\x49\x65\x57\xc9\x7f\xc9\x5c\x6a\x0b\xab\x3e\x0e\x18\x1f\x43\x21\xc3\xa4\x2e\x72\x7d\x2e\xf8\x8c\xae\x53\x49\xc3\x04\x73\xdf\x39\xdf\xff\x0a\x4f\x8a\x8b\x10\x00\xf3\x9b\xd9\x5e\xb6\x47\xc0\x64\xc0\xd6\xa4\xd6\x70\x86\x66\x78\xbe\x11\xc1\x57\x45\xbe\x74\xd0\xcc\x84\x1d\x59\xea\x01\xa6\x36\x81\xe4\x54\x20\xf2\x33\x5e\xe4\xf0\x37\x75\x35\x12\xd8\x5a\xdb\xe1\x41\xbf\xde\x63\x63\xbe\xc6\xe1\xcc\xe1\x6a\xec\xe9\xc3\x6e\xcf\x7a\xe7\x2f\x8b\xc4\x30\xab\x6f\x68\xda\xe6\x3c\x5e\x54\x6d\xea\xb5\x4f\xa6\xa3\xe0\x3e\xfd\xb0\x3e\x13\xf1\xbe\xf9\xd7\x3a\x77\x6b\xf1\x68\x79\x2d\x22\x18\x4e\x33\xa9\x3e\x17\xf6\xe1\xce\x69\x54\x6a\x07\x9e\xe5\x09\x63\xb7\xd5\xad\xbe\x00\xcd\xec\x21\x69\x45\xac\x2d\xf1\xb9\xd6\xab\xf5\xe0\x7a\xcc\x2a\x3b\x6c\xad\xc9\xad\x22\x06\x70\x33\x69\xb5\x86\x3c\xfb\xc4\xc2\x00\x8c\x69\x42\xe4\x19\xea\x55\x38\x71\x5d\x12\x7e\x16\x34\x6e\xd2\x01\x9d\xf4\x94\x0a\xea\x15\x7f\x77\x32\x12\xa2\x50\x84\xce\x0f\x64\xf1\x9c\x16\xe0\x3e\x9d\xf2\x67\x93\x81\x27\xa8\xe6\x59\x46\x58\x55\xe0\xd2\xd2\xbc\x80\x5a\x8f\x90\x71\xa8\x65\x1f\x70\x93\x17\xa1\xd5\x9c\xcc\x19\xe6\x5b\x20\xca\x4b\xba\x8b\x32\x9e\xed\x31\x0e\x5c\xaf\x7d\xfd\x45\x1b\xa5\xc0\xbd\xbb\xc5\xe8\x32\x29\x7f\x7d\x7b\xe4\x47\xf8\xd4\x19\x76\x31\x1a\x0b\x02\x5a\xf6\xff\xc7\xde\xbb\x36\x37\x6e\x24\xe9\xc2\xdf\xf7\x57\xd4\x7a\xdf\x88\xee\x3e\x4b\x51\x6e\xfb\xcc\x84\x57\x1b\x8e\x78\x69\xb5\xda\xe6\x58\x2d\x69\x74\xb1\x67\xcf\x70\x82\x5d\x04\x8a\x24\x46\x60\x15\x8c\x02\xa4\xe6\xec\xce\x7f\x3f\x51\x99\x59\x17\xdc\x48\x40\x94\xda\xde\x3d\xf3\x61\xc6\x2d\x02\xa8\x7b\x65\x65\x65\x3e\xf9\xe4\xc6\xf1\xa6\x61\xe2\x04\xa5\xe0\xbc\xbb\x79\xf7\xe3\xf1\xdd\x94\x89\x22\x62\x69\x72\x2f\x66\x32\xd2\x0f\x70\xe9\xfb\xa5\x14\x85\xf9\xb9\xc3\x08\x94\x6c\x84\xd4\x20\x09\x92\xa2\xe7\x7d\xcd\x0e\x8c\xf9\xef\xbb\xea\xf7\x7d\x6e\xe5\x8e\xeb\xd3\xac\x5d\x9b\xd3\x10\x96\x29\xa4\x6d\xc3\xa1\x6d\xb1\x6b\x7e\x87\xfe\xd6\xb3\xb6\x8c\xe7\x4f\x08\x89\x96\x7f\x2d\xe5\x40\xa5\xeb\xd4\x7f\x14\xb4\xa2\x43\xa7\xdb\x64\x1c\xf2\x99\x0c\x8b\xb5\xc6\x6f\x5a\x4b\xdf\x27\x44\x3c\xf5\x8d\xf5\x9f\xfb\xe4\xf0\xac\xc8\x85\x00\x11\xe2\xd6\x13\x9d\xf5\xc4\xb6\xe6\x3a\x16\x7c\x34\x9e\xc9\x0f\x16\x55\xe7\x7f\xd5\xde\xd7\xb0\x59\x04\x69\x5e\xaa\xa5\x40\xb1\x71\xa2\xdd\x0f\x90\xb4\x4f\x97\x69\x81\x59\x8b\x97\x89\xe4\xa9\x6b\x28\x3e\x69\x93\x12\x39\x97\xd1\xfa\x50\x37\x79\xb2\x9c\x8b\x74\x88\x26\x3a\x5d\x9e\xa5\xda\xac\xef\xe8\xbe\x63\x77\x3e\x25\x2f\xb7\xef\x0c\x7a\x9c\x28\xb7\x27\xf3\x6e\x76\x9e\x62\xd6\x60\xc1\x00\x87\x55\x8f\x90\x47\x12\x30\x33\x8b\xa4\xa9\x23\x0c\x0b\x43\x53\x5d\xd8\x19\xd4\xc2\x78\x31\x93\x79\x29\x21\xa1\x98\x43\x65\x72\xe6\x73\xc2\x44\x16\x23\x41\x88\x95\x95\x11\x13\x98\x72\x05\x5f\x36\xf7\x33\x55\x6a\xf0\x47\x6d\x44\x61\x0e\xa8\xd7\x90\xeb\x1f\x61\xd1\x23\x96\xe5\xc9\x06\x5c\xca\xfa\x4d\xcb\xd4\x9d\xf2\x82\xa7\x6a\xf5\xdc\x56\xa5\x27\x86\xd8\xd8\x66\xb0\xe9\x3b\x33\xf8\x2b\x21\x45\x0e\x1d\x05\x5b\x76\xeb\x16\xee\x61\xe5\xee\x90\xdc\xe0\x49\x24\xe7\xaf\x76\x16\x0b\x5e\x16\x6a\x63\xee\xb7\x3c\x4d\xb7\x23\xf4\x3a\x0b\xb6\xe6\x7a\x6d\x27\x1a\x1d\x86\x7d\xce\x26\x1a\xdc\x53\x1e\xad\xc5\x4d\xc1\x8b\xb2\x15\x99\x55\x6b\xe5\x17\x42\x96\x9b\x2f\x4e\xd8\x9f\x7d\x1f\x4f\x27\xa7\x3f\x9c\xcd\xdf\x4d\x6f\x26\xdf\x9d\x9f\xbd\x0b\xfa\x43\x4f\x3e\x4c\x6f\x6e\x9a\xbf\xfe\x30\xbd\x6d\xfe\x78\x75\x79\x75\x77\x3e\xb9\x6d\x2b\xe5\xfc\xf2\xf2\xc7\xbb\xab\xf9\xfb\xc9\xf4\xfc\xee\xfa\xac\xe5\xd3\xbb\xdb\xee\x87\x37\x3f\x4e\xaf\xae\xda\x4a\x3d\xfb\x69\x7a\x6a\xaa\xa3\xdf\xff\x12\x6c\x3b\x70\x9d\x9b\x11\xe8\xe8\x5f\x7d\x67\x1e\xb1\xea\x8b\x27\xec\xae\x9e\xf7\x8a\x02\xb1\x90\x44\xec\x91\x6b\x23\xdc\x20\x0e\x10\x4c\xb0\x7e\xb4\xba\x3e\x45\xac\x72\xb4\x16\x2c\x55\xea\xbe\xcc\x48\xe6\xa1\xb5\x5d\x2a\xb4\x08\x09\x1d\x94\xf6\xc3\xf4\xf6\xa4\x99\x7f\xcb\x15\x16\xd0\xa5\x3a\xe3\xf2\x23\x47\xea\x00\x90\xb3\x60\x64\xb1\x79\x99\xbc\xeb\x3a\xa8\xc1\x4d\xd9\xae\x7a\xb0\x34\x2e\x8b\x5a\x35\x71\xec\x49\x96\xa0\x63\x41\xc1\xd5\x09\xdf\x35\x9a\x6e\x38\x30\xf1\x28\x5b\x88\x88\x97\x88\xe8\x36\x07\x58\x9e\xab\x3c\x6c\xb0\x5f\x28\xcf\x57\x28\x2d\xb0\xd6\x02\x6b\x73\x66\x3a\xae\xef\x93\x2c\xab\x4c\x3b\x2d\xc4\xfd\x33\x0f\xa9\xde\x1e\x92\xa8\x10\xf1\x17\x4d\xbd\xc8\xc7\xe0\xa3\xde\x6c\x76\xb5\x69\x72\xb0\xd7\x13\xb9\x42\x5b\x82\x4d\xba\xb7\xde\x3a\x14\x12\x80\x5e\x3d\x0c\x18\x92\x80\x98\xb3\xc6\x25\x45\x4b\x00\x56\xc4\x0b\xf6\x28\x80\x8e\xa6\xa4\xac\xa3\x78\xa7\x37\x32\x03\xaa\x43\x3c\x80\xcd\x21\x5c\xa1\xa9\xe9\x14\xf2\xcf\xa1\xc8\x9b\xef\xb5\x18\xe6\xc4\xdb\xcb\x29\xf2\x0e\x0b\x05\xa9\x6f\xe3\x05\xa0\xc5\xcf\xe9\xf4\x6b\x39\xe9\xf6\x1c\x42\xe6\x38\xe8\xd3\x1e\xcb\xe3\x56\x49\x8e\xd2\xbf\x61\x95\x04\x1a\x7b\xc7\xea\x56\xc5\x7c\x6b\x16\x07\x80\x1e\x74\x99\x65\x2a\x2f\x58\x47\x19\x08\x81\xc4\xf6\xc1\x59\x46\xfd\x70\x22\x12\x0a\x31\x9a\x8b\x6e\xc9\xc3\xd6\x8f\x5a\x8a\xc6\x35\xf0\x9d\x05\xc1\x45\x70\xc1\x74\x39\x33\x37\x95\xab\x7a\x65\x85\xb6\x29\xd5\x87\x44\x67\x66\x46\x71\xe8\x9b\xc2\xb9\xad\xf6\x4b\x5b\x42\xeb\x94\xa7\x62\x59\xcc\x07\x3a\xbb\xa0\x44\xd9\xc5\x06\x98\xac\xd6\xcf\x50\x62\xff\xdb\xc7\x57\x04\x8a\x36\x57\x8e\xc0\xf2\x90\x2b\x55\xa0\xde\xeb\xef\x46\xcc\x8e\x26\x98\x2d\xa8\x52\x8a\xa3\x77\xca\xa5\xb9\x4b\x20\x96\xcc\x85\x9c\x8f\x67\xf2\x0c\xc0\xa7\xfe\x82\x63\xc3\xeb\xe1\x76\xb1\xf7\x5e\x51\x49\x58\xff\x59\x23\x5d\xba\xb3\x03\xf8\x75\x8f\x90\x45\x91\x6e\x1d\x47\x54\xcc\x2a\xdf\xf5\xd9\x3d\x68\x4d\xb7\xaa\x25\x76\x18\xb7\x8e\x2e\x44\x46\x16\x7f\xec\xa7\x47\x49\x83\xb7\xd9\x54\x35\x66\x3f\x5b\x8b\x12\x04\x0d\xb9\x20\x1a\x8b\x7b\x4d\xf9\xd6\x12\x8a\xb7\x0d\xec\x73\x70\x74\x3f\x77\x18\xd1\xee\x01\x76\x64\x9c\x2d\xa3\x5c\xb9\xd8\x4b\x89\x96\xde\x01\x30\xa4\x53\xf7\xd1\x8d\xd8\x8d\xa8\x7c\x0f\x29\xdc\x09\x95\x0e\x3a\x8b\x4c\xb7\xff\x8c\x93\x85\x2c\x1e\x16\xa4\x41\x29\xb5\xc9\x33\x6b\xf6\x0f\x78\x16\x91\xe4\x83\x2d\x93\x34\x05\x3d\x60\xcc\x26\x72\x6b\x49\x30\xcc\x51\x68\xc1\xa9\xc9\x4a\xaa\x7d\xf1\xf9\x1d\x8b\x29\x0a\x16\xd3\x4d\xf7\x62\x42\xfc\x87\xe7\x40\x7a\x9e\x15\xf5\x0c\x7c\x78\x46\xb6\xf0\x66\x36\x95\xfe\x2c\x78\x03\x8c\x02\xe1\x69\xfe\xb9\x22\xcb\x1a\xcd\x0d\x3e\xfc\x7b\x7b\xd3\xbf\x2f\x79\xce\x65\x01\xf1\x52\xa4\xb4\xe6\x22\x08\xdb\x16\x9f\x00\xdb\x2a\xd1\xc0\x0c\x3f\x85\x93\x6b\xa1\x04\x08\x3f\x4b\xe2\x11\x4b\xc6\x62\x0c\x99\x7d\x73\xa3\x4b\x2c\xfc\x9b\x6b\xa3\x39\xcc\x64\x23\x0e\x64\xcc\x26\xa9\x56\xf4\x85\x90\x51\xaa\x34\x40\x7b\x17\x21\xe9\x3a\xac\x7c\x72\x57\x2d\xb6\x70\xbf\x81\xa9\xf4\xc5\x2b\x7a\x10\x7c\x08\x09\x6a\xc1\xd7\x9e\xc2\x4e\xf7\xbf\xff\xab\x22\xfa\xd8\x2e\xfc\xc5\x0b\xa6\x02\x6b\x1c\x43\x2f\x36\x49\x98\x66\x7a\xd7\x04\xc1\x1b\x30\x31\x3e\x3e\x27\x60\xaf\x63\xaf\x79\xc1\x52\xc1\x75\xc1\xde\xbe\x19\x84\x39\xb1\x1d\xf4\xd2\x95\xb6\xaf\x0f\xb2\xb7\x61\x9a\xa1\x72\xe7\x2a\x86\xbc\xc3\x3c\x2f\x18\x67\x52\x3c\x86\x51\x39\x0a\x02\xa9\x6c\x32\x61\x11\xf0\x82\x20\x16\x1f\x59\x8d\x20\xd2\x15\xaf\x4c\x1d\x72\xc4\xa6\xca\x20\xb7\x2c\x35\xab\x65\x65\x8d\x1c\xaa\x0d\x60\xec\xe6\x25\x1f\x30\xb9\xe6\xc5\x4c\x92\x64\xb5\x70\x94\x20\x44\x7e\x92\xa6\xd5\x20\x45\x0e\x71\xb8\xd2\x74\xd8\xb4\x3e\x1e\xbb\x01\xba\x80\xeb\x97\x8b\x14\xab\xd8\xff\xfc\x66\xc1\x58\x06\xc7\x15\x19\x96\xdd\xaa\xed\xb4\xd9\xad\x3f\xa3\x12\xdc\x52\xfd\xb9\x5a\x25\x11\x4f\x7b\x28\xc3\xa2\xad\xc9\x7b\x36\x56\xd3\x57\xb0\x43\x37\x7e\xee\x0a\xfa\xab\xca\xed\x76\x77\x38\x66\x1f\x55\x8b\x19\xbf\x63\x72\x03\xdd\xe2\x90\x0b\xb8\x0b\x59\xfc\x5c\x9e\xe4\x4a\xd3\xa7\x31\x10\x26\xec\x97\x82\x9e\x80\xc0\x8a\x0e\x8c\x5b\x8b\x83\x78\xe8\x20\xfc\x92\x40\xa4\x28\xf8\xe8\xcd\x0e\x8f\x6e\xf6\xdf\xbb\xfb\x23\xdf\x7f\xdb\x15\x07\xae\x6b\x76\xbc\x5b\xd9\x9b\xc4\x7f\xe5\x11\x44\x49\x42\x4d\x36\x3e\xb3\x49\x66\x69\x53\xa0\x70\x70\x12\xb4\xaa\x87\x59\xae\x22\xa1\xf5\x98\x9d\xc1\x41\x43\x7f\x32\xbe\xb4\x8e\x8e\xe0\xe5\x99\x34\x37\x13\xcb\x7d\x17\x94\x5f\x5d\xe2\x6d\x3b\x00\x89\x74\x0f\xf2\x11\x6d\xf6\xe7\xb7\xeb\xba\x4d\x58\x1e\x5f\x28\x03\x52\x62\xb1\xb3\xd5\x09\x8b\x55\x74\x2f\xf2\xe3\x5c\xc4\x89\x3e\x01\x9f\x7d\xd1\xe9\x2c\xdc\x98\xdb\xf6\xc1\x9a\x46\x17\x00\x61\x0f\xa1\xc0\x29\xd6\x4f\x21\x05\x36\x34\x69\xc4\x92\x25\x5c\x27\x6c\x3c\x2b\x06\x70\x59\xaa\x40\x21\x8b\x7c\x8b\x68\x67\x6b\xca\xaa\x0d\x84\xbd\x69\x18\xa5\xad\x2b\x12\x3b\x7f\x0e\x6c\xcf\x13\xbb\x8d\x11\x3f\x04\x64\xc0\x4e\x15\x8a\xe2\xc0\x50\x5c\x64\xbc\x58\x6b\xa0\xfd\xa8\x8e\x01\x5d\xba\xe0\x53\x33\x42\x3c\x03\x1c\x04\x5a\x29\xfc\x47\x8e\x9c\x42\x17\x49\x9a\xce\x24\x06\x6e\x00\x43\xc7\xab\x56\x76\x21\xf3\xe9\x88\xf1\x38\x66\xff\xdf\xeb\xf7\xe7\xff\x71\x7b\x36\x9f\x5e\x80\xcd\x7b\x7a\x7e\xf6\x66\xe4\x7e\xbc\xbc\xbb\x75\xbf\xa2\x85\xe5\x41\xe4\x6c\xc3\xef\xe1\x8a\x27\xb5\xa0\xc0\x53\x31\x93\x61\x4b\x2d\xef\x92\x79\xa2\x85\x45\xd0\x92\x9a\xe2\xe8\xa7\x69\x0e\xbb\x48\x5b\x89\x8e\x73\xc0\xe5\xf7\xda\x7d\xb2\x7b\x0d\xda\xc5\xe3\xaa\xb0\x6a\x20\xc4\x17\x73\x1d\x10\xf1\xd0\xdd\xd7\x2f\x38\x21\x57\x89\xec\xc2\xf9\x09\xf9\xf0\x92\x4a\xfc\x8f\x62\x0b\x40\xf3\x2b\x9e\xe4\xbd\xd7\x5e\x3b\x93\xa2\xdd\x31\xe6\x9e\xce\x75\x7d\x53\x69\xd4\x85\x31\x52\xb9\x13\x4b\xda\x46\xa2\xfb\xab\x77\x97\xa8\x39\xc5\xa7\x22\xb7\x0c\x5f\x2e\x16\xd6\xd2\x60\xba\x83\xc6\xaf\xc1\x99\xbc\xbd\x7c\x77\x79\xc2\x44\xca\x17\x0a\xc2\x20\x09\x6a\x64\x8b\xa0\x01\x8b\xd4\x26\x28\xa8\xc2\xee\x36\x62\x99\x67\x77\x0b\x8d\x68\x63\x2c\x63\x0f\xcb\x5b\xa6\xf2\x26\x37\xda\xf3\x5e\x01\xa9\xb3\x57\x2a\xef\x73\xfc\x9b\xd7\x30\x2e\x24\x33\x17\xb9\x9a\xe4\xa5\xb3\x79\x29\x38\x30\x7f\x90\x5b\x88\x6c\xf9\x04\x8c\x4d\xd3\x4a\x2e\x6e\xb3\x71\xf4\x98\x5c\xfb\xfe\x4d\x25\xd9\x8f\xdf\x68\xb6\x28\x8b\x99\xac\x96\xa1\x24\x9b\xfc\x7c\xc3\xbe\xe3\x45\xb4\x7e\x33\x93\x10\x97\xf8\xe3\x37\x1d\x34\x94\x83\x99\x9d\xcd\x98\xbc\xe3\x05\x3f\x57\x3c\x4e\xe4\xaa\x8d\xd6\xd9\xe7\x1e\x3c\xbb\x9d\x9c\x30\x9b\x02\xc6\x47\xd1\x16\x96\x4e\x25\x28\x08\x04\x32\x74\xc4\x4a\x11\x10\xe5\xb2\x4a\x7d\x8b\x37\x33\x38\xb0\x66\xf2\x16\xf9\xac\x8d\x54\x4d\x0a\x96\x29\xca\x7f\x69\x6e\x65\xc8\xf4\xcd\x6d\x74\xb9\x48\xb7\xcc\x8c\x0e\x2c\x63\x37\x19\xa4\x8f\x81\x3e\xd3\x14\xf6\x33\x09\x17\x74\x17\xd7\x9b\xaa\x88\xa7\x80\xf5\x3b\x0a\x6c\x7a\xe6\xda\xae\x4a\xe0\xd6\x01\x90\x8d\xdc\x56\x21\xb9\x8e\xee\xc9\x29\x65\xe1\x44\x81\x01\x00\xe6\x91\xfc\x90\x1b\x65\x24\x0e\xf2\xd8\x82\xf1\x2d\xc5\xd1\x31\x1f\x3a\x5e\x5b\x1c\x16\xf3\xd4\x85\xbc\xab\x52\x5a\x1e\xb7\x08\xcc\xf7\x72\x0b\xb0\x70\x48\x58\xa7\x00\x52\xe2\xa5\x33\x2d\xca\xc6\x2c\xba\x33\x31\xf8\x6c\x26\x11\x81\x58\x99\x97\x90\xf9\x30\xa8\x5d\x49\x00\x48\x36\xe3\xec\xcb\x8c\x00\x93\xa4\xeb\x67\xb9\x38\x72\xd1\xe3\x71\x65\x4c\xcd\x09\x3b\x66\xd7\xe1\xf5\x3a\x56\x51\xb9\xb1\x59\x29\x20\xf2\x9c\x90\x75\x74\x88\xba\x15\x82\x07\xfb\xbe\x15\x0f\x0c\x77\x85\x00\xea\x9d\xde\xf7\x63\x5c\x30\x93\xf0\xd3\xa6\xa6\xde\xad\xf8\x82\xec\x38\x0c\x0d\x87\x05\xcd\xb3\x6a\x49\x95\xd2\x0e\xe6\x74\xb8\xf0\xcc\xf9\x2a\x07\x65\x4b\x7c\xca\x14\x18\xb9\x31\xb0\x5a\xc5\xaf\x34\x9b\x5e\x19\x0d\xc8\xdc\x78\xdd\x1e\x2c\x75\x81\xa0\x35\x8c\x7f\x86\xaf\x31\x0c\x61\xc4\xbe\x64\xb3\xf2\xcb\x2f\xbf\x8e\xd8\x27\xfb\x8f\xdf\xff\xee\x77\x5f\xff\x7e\x48\x98\x8a\xbd\x90\x43\xb9\x7e\x8c\x5c\x2a\xd2\xaa\x4a\x14\xce\x40\x53\x52\x1d\x30\x0b\xb4\x01\xbb\x86\xff\x29\x0c\xd9\x01\x26\x89\xaf\x68\x87\xeb\x70\x67\xb2\xca\xd6\xf4\x48\x02\x2d\x8a\x51\x55\x42\x38\x65\x97\x34\xfa\x7f\xde\x41\xf4\x3a\x37\x5b\xe5\x69\xd8\xa9\x24\x75\xea\xb5\x29\x84\xbd\x26\xfb\x5f\x01\x0e\xc4\x37\xf6\x80\x53\x69\x2c\x72\x6c\x93\x33\xd9\x39\x43\x22\x08\x07\xf1\x29\x4b\x55\x6c\xa9\xe5\x3d\x8f\x42\x02\x0a\xc2\xd9\x27\x6e\x24\xf7\x88\x28\x48\x29\x6e\x15\x3c\x2f\x4b\x1e\x09\x8a\xb1\x7e\xfd\xe9\xc4\xfc\x36\x62\xdb\x13\x00\xa7\x8e\xd8\xdf\x4e\x88\x69\x90\xe7\xc5\xdc\xfc\xf4\xc6\xea\xda\x54\x04\x34\x3a\xd1\xec\xd5\xf1\x03\xcf\x8f\x41\x3c\x1f\x63\x8b\x5e\x91\x64\x75\x39\x95\x43\xdd\x3c\x55\xea\x9e\x80\xbb\x8d\x0f\x8f\x2d\x69\x2d\x2c\x6f\xe7\x37\xc1\xa9\x77\xa4\x46\x05\x3b\x82\x17\x04\x1b\x67\x0b\x36\xfe\xab\x56\x92\x8d\xb7\x7c\x93\xd2\xaf\xf6\x29\xe1\x8a\xb9\xa6\x58\xbb\xd8\x61\x84\xd2\x2d\x5a\x4a\xbf\x4b\xd5\x02\x7a\xf5\xc1\xf6\x14\x91\xb9\xd0\x50\x7f\xfa\xf8\x03\x8b\x3a\x62\x49\x3c\x80\x7b\x71\xa3\x0a\x7c\x85\xc2\x66\x9b\xbd\xfa\xe4\x9a\xf4\x27\xf4\x0b\xc3\xa0\xd8\xe0\x40\x34\x0e\x3b\x54\x9c\x29\xf4\x13\x7b\x4d\x22\xe8\x8d\x39\x63\x08\x06\x8d\xc3\xd0\x56\xc1\xd6\x55\xf0\x1f\x41\x05\x89\x64\x18\xee\xb9\xe3\xcb\xbf\x1d\x8f\xc7\x63\xf7\x35\x30\xfe\xfc\x1f\x96\x14\x5a\xa4\x4b\x2c\xc9\x9e\x60\xdb\x99\xfc\x60\x93\x56\x59\xe3\xb5\xa7\xc3\xce\x72\x55\xa8\x48\xa5\xec\xc8\x1b\x74\x63\x15\x69\xf6\x2f\x46\xad\x0d\x86\x12\x7e\x34\xf7\xb8\x0e\x0a\x7d\xcc\x92\xf1\x99\x36\x15\x19\xc4\xeb\xdb\x2a\x64\xc0\x75\x17\x5b\xae\xc3\x20\x67\x58\x0b\x66\xe5\x1c\x13\x4b\x6e\x9e\x9b\x97\xc5\xa7\x02\x1e\x75\x90\x10\xb7\x42\xe4\xdb\x4f\xca\x86\xb8\xf5\x5c\xc4\xb8\xac\x3b\x06\x80\xb8\x42\x49\x32\x60\x3f\x47\xa1\xfb\xc4\x1c\x2e\x32\x4c\xa3\xa4\xcb\xcd\x86\xe7\xdb\x63\xbf\xdb\x9a\x8b\xd3\xb3\xd4\x82\x8c\x49\xed\x00\x80\x0b\x37\xa5\xad\x45\x28\x06\x52\x2f\xed\x89\xe6\xf6\x6e\x04\x79\xb0\x03\xb6\x27\x21\x23\x15\xd3\xba\xf6\x51\xad\x55\x8d\xc5\xbd\xd3\xd4\x55\x2c\x22\x46\x7b\x63\x9c\x2c\x90\xfe\x8c\xde\xb0\x1f\x77\x88\x6f\x35\xd7\x85\x11\x94\xab\x01\xee\xd1\xe9\xe5\x8d\xfd\xa6\xff\xa1\x0b\xe3\x50\x55\xd9\x79\x1a\x72\x0b\xcb\x15\xcb\xf9\xa3\x3f\x7e\x01\xdb\x81\xd6\x99\xd2\xc5\xfc\xe2\xdf\xa7\xea\x2a\x49\xcd\xa9\x05\x6b\x7c\x3c\x93\x95\x9f\x47\x4c\xa4\xc9\x26\x91\x0e\x5b\x87\xc2\x5d\x2d\x51\x7b\xbe\x4f\x0a\x33\x65\x3a\xbe\x37\x12\xcc\x72\x62\x06\x57\xaa\x89\xdc\xda\xa5\xe3\x1c\x53\x64\x81\x28\xb5\x69\x97\xbf\xa3\x03\x1b\x40\x12\x8b\x23\x52\x48\x93\x60\xe1\xc1\xfe\x9d\x49\x53\x9a\xdd\x4b\x1e\x86\x1c\x94\x17\x14\x77\x64\x93\x09\x05\x12\x00\xea\xa8\x60\x89\x9d\xfe\xdb\xa2\xa0\x9c\xc9\x72\x73\x68\x10\x0b\xc1\x92\x7f\x2d\x33\xdd\x55\x2e\xec\x49\x45\x01\x51\x42\x96\x1b\xbb\xa1\x06\xac\xb8\x33\x52\x7f\x62\x11\xa5\x1c\x59\xfe\x4c\x41\x80\x7c\x1c\xa1\x83\x34\x0b\xea\xc2\xe3\x05\xab\xc1\xfc\x84\xa9\x90\xaf\xf1\xef\x37\x8c\xce\x86\x2f\x47\x74\x9e\xe7\xda\xb1\xa7\xe1\x9c\x43\x7e\x6f\x11\xa3\x0d\x1d\x32\x3a\xac\x78\x1e\xa3\xb5\x3c\xbc\x55\x60\x64\xb0\xd1\xbf\xb6\xaa\x64\x8f\x89\x5e\xcf\xe4\xad\xb2\x06\x47\x26\x95\xcb\x89\x31\x82\xcb\x68\xa3\x3e\xae\x41\x08\x40\xab\xdb\x56\x80\x11\xc2\x07\xc5\x30\x01\x88\x76\x2e\x55\x2c\x0e\x23\x7f\xbc\xf5\xbe\x0a\xeb\xbf\xce\x05\xc6\x99\xc1\x49\xd1\x15\xa6\x2b\xb4\x1e\x68\x9b\xaf\x4f\x3c\x9c\x43\x54\x8e\xa9\x55\x3d\x0e\xca\x4c\x12\xf2\xaa\xba\x53\x0d\x4a\xb1\x37\xce\x20\xca\xb8\x32\xf6\x2e\xd3\xc4\xa1\x93\x10\xb5\x30\x3d\xf6\x3a\xfb\xb1\xef\x11\x0c\xbb\x03\x18\x73\xb6\xca\x55\x99\xb9\x50\x7c\x1b\x46\x88\xd3\x40\x3a\xcd\x54\x2e\xd5\x09\xdd\xa9\xce\x13\x79\x8f\x2b\xfe\xa5\xe6\x08\x93\x89\x88\xb8\x42\x81\x6b\x33\xfc\x43\x1f\x8e\x58\x22\xa3\xb4\x84\x83\x4f\x17\x3c\xba\xc7\x84\x28\x5d\x46\x5f\xf3\xcd\x7c\x7f\x90\x66\x87\xc6\x54\xa6\x29\x55\xeb\x0f\x50\x20\x99\x03\x13\xd0\x43\xc2\x19\x67\x77\xd7\xd3\xf6\xba\xef\x93\xa6\x33\xa7\xfd\xf4\xac\x2e\x10\xf8\xbf\x1f\x93\x41\xb8\xcb\x1a\xa5\xb0\xa8\x2c\x75\x67\x5c\xea\x22\xac\xc7\x45\x5a\x98\x0b\x44\x7c\xdd\x62\xda\x1f\xbc\x4e\x57\x59\x39\x37\x03\x95\x0e\x01\x08\x98\x56\x7c\x7f\x75\x37\x09\xbe\xdb\xb5\x54\xbe\xbf\xba\x63\x41\x1d\x48\x16\x9d\x8a\xa8\x70\x48\xe3\x31\x3b\xf5\x39\x1c\xea\x9a\x79\x2c\x1e\x92\x08\x43\x67\x47\x46\x2b\x9a\x49\xa0\x46\x37\x77\x9d\x23\xcb\xa7\xc9\xbe\xbf\xba\x23\x16\x4e\xcf\x9b\x83\xe9\x28\x80\x1a\x63\xd8\xb1\x53\x23\x25\x97\x4a\x1e\x21\x65\x50\x1e\x7b\x6f\xc7\x08\x2e\xd7\x11\xcf\x8a\x92\x14\x8c\x87\xb7\x63\x3b\x27\xd7\xde\x13\x62\x9a\xa5\x66\xd2\xe8\x4a\x18\x63\x00\x99\xd3\x4c\xa7\x9b\x53\x5b\x1b\xd4\x43\xc0\x01\x30\x68\x07\x09\xff\xc4\x45\x0e\x72\xb9\x65\x3c\x5f\x24\x45\x6e\xae\x61\xf8\xf1\x08\x19\xce\xd6\x36\x3b\x16\xce\x9b\xd7\x8c\x28\xd9\x1d\x4c\x70\x22\x0b\x3d\x93\x41\x00\x8c\x8b\x36\xc6\xe0\x85\x44\x32\xa0\x12\x06\xec\x8d\xa5\x36\x8d\x52\x55\xc6\xf6\x58\xcd\x5d\xf2\xbc\x6d\x86\x4a\xd4\x4c\x02\xe3\x89\x39\x5b\x95\x51\x43\xfd\xd9\x7f\xc2\x3e\xca\x87\x24\x4e\xf8\x51\x21\x74\xca\x8f\x8a\xff\xfd\x71\x54\xfb\x89\xbf\xfd\xf2\xcb\x8f\x98\x07\xb0\x8b\xce\x21\x60\x6d\x3a\xd0\xc0\xd3\xee\xa7\x70\xfc\x87\x66\x95\x1e\x30\x4f\xe7\xc9\xbd\x60\x1f\x71\xba\x3f\x12\xf9\xf1\xd3\xa6\x6d\x26\xdb\xe6\x8d\x3d\x65\xda\x80\x8a\xbe\x7d\xde\xd8\x8e\x69\x7b\xbb\x1a\xff\x6e\xb5\x30\xb3\xf5\xd5\x6a\xfc\xf6\x4b\xf8\x67\x6d\x8e\xf6\x6d\x5e\x17\x3d\xd3\xd6\xec\x16\x41\xd4\xb2\x2d\x9d\x2c\x9a\xc9\xfd\xc2\x88\x0d\x93\x45\xb0\x6a\xdb\x36\x3e\x2f\xc4\xa1\x51\xb3\xc8\x89\x3d\x00\x7d\xdd\x20\x1b\xdf\xe9\x11\x3c\x90\xa9\xdb\xb3\x6c\x03\xdc\xb3\x9b\x32\x3c\x04\xe0\xc2\xc3\x01\x3c\x3f\xf0\x7e\xbf\xfe\xd4\xde\xdd\xd3\x9d\xdd\xcd\x4c\x85\x18\xc0\x4c\x73\x63\x5e\xef\xd9\xc8\xca\xab\xbb\xda\xf8\xc8\x31\x1b\x61\x33\x09\x4e\x4c\xb7\xf5\x21\xbb\xc8\x2e\x47\x34\x99\x68\x17\x36\xe8\x5a\x62\xa1\x95\xee\x7e\x6d\xeb\x5d\xd1\x5e\x0a\x93\x1d\x3a\xaf\x5b\xcb\xc2\x0f\x4c\x11\x07\x42\xe1\xcc\x95\x7a\xbe\xe9\x4d\xb0\xee\x2b\x7e\x47\x1f\x7f\x68\xd0\xad\x3b\xf5\xf2\x03\x44\x7c\x3b\x92\xad\x0d\x97\x46\x5b\xb3\xb5\x76\x38\x96\xf0\x96\xff\xa4\x26\xdd\x65\x4f\x6a\x10\xd6\xd8\x2f\x58\xcb\x56\x65\x4b\x79\x44\xdf\x2a\x4f\xd1\x77\x50\xac\xc1\xac\xec\xf3\xe7\x5a\x31\xe7\xcd\xcb\x98\x6b\x37\xe5\xf9\x0a\x8d\x5e\x5a\x14\xfa\x4d\xcb\x0c\xfb\x38\xb6\x03\x66\xd8\xaa\x5d\xf3\x61\xfc\x21\x56\x1f\x03\x93\xca\xae\x9d\xe6\x5a\x59\x4d\xb6\xe1\x6e\x5a\xb6\xfe\x90\x49\xde\x07\xd7\x45\x2a\xc7\xcc\x54\xc0\xf3\xda\xcd\xaf\x75\x20\xcd\xec\x05\xdf\x38\xf6\x18\x2a\xcd\x86\xfc\x62\xe3\x16\x02\xf2\xc4\x74\xb7\xa1\x17\x87\x6c\xdf\x26\x10\xd3\x6d\x57\x0b\x66\x72\x62\x5f\xf1\x6c\xd7\x3a\x41\x2b\x0b\x86\x23\x96\x0b\x8c\x70\x01\x9b\x19\xf7\xa3\x4e\x9d\xeb\xe8\xc4\xd0\x40\xff\x5a\x17\xee\xb4\xc8\xfd\x69\xe4\xd9\x50\xc3\x7e\x74\xd4\xdc\x8f\x0d\x79\xa7\x44\xb7\x5d\xa4\xa2\xec\x58\xee\xa9\x58\xe5\xfb\x98\x25\x77\x55\x6a\x11\x17\x66\x17\xaf\x80\xd7\x2c\x48\xe3\xdc\x55\x7b\xff\x6b\x12\x75\x83\x68\xb8\x11\x43\x01\x51\x09\xe9\xd6\x6f\x12\x4f\xd9\x5e\xab\xac\x29\x2b\x8a\x83\xce\x82\x84\x6f\xe6\xb9\xea\x4e\x2e\xdd\x63\xbc\x6c\x11\x15\x8f\xc1\x1a\x93\x4d\x6e\xd9\x2f\x25\x4f\xf1\x68\x95\xb4\x19\x6c\xb3\xc1\xf8\xf2\xd5\xef\xd9\x04\xce\x3e\xf6\x01\xa4\x32\x40\xc6\xa0\xb4\x42\xb1\x64\x93\x89\x5c\x2b\xc9\x3b\xb3\xac\xdf\x7f\xa3\xe7\x94\x29\xd6\x5c\xcc\x55\xd9\xcc\x0a\x3b\xa0\x27\x2d\xa5\x85\x9d\xe2\xec\xbe\x5c\x88\x5c\x0a\xcc\x24\x0f\xef\x31\xfb\x5e\xaf\xe6\x2a\x5e\x16\xeb\xaf\xe6\x51\x9a\xf4\x4e\x5f\x0b\xf1\xaa\x13\xf3\xd9\x29\x7e\xb5\xab\x03\x95\xf2\x2b\x4d\x97\x0c\x9f\x31\x7c\x36\x66\xdf\xf1\xe8\x5e\xc8\x98\x65\x69\xb9\x4a\x88\xf6\x06\x2f\x1b\x49\xd5\xac\x50\xed\x18\x6a\x36\x58\xbe\x39\x04\x67\x72\xc3\xef\x31\xa5\x0c\xa9\xb0\xe6\xde\xd2\x45\x9a\xe8\x0c\x35\xf3\xa4\xb9\x76\xf7\xce\x96\x3b\x8d\x9b\xc5\xd4\xd7\x9e\x2e\x31\x5a\xef\x71\xad\x08\xe3\x54\xb1\x13\x0d\xd8\xb8\x6e\xb5\x36\xd8\xc9\x2c\x83\x8c\x16\x51\x99\x9b\x37\xa8\x31\xb8\x7b\xc1\x81\x08\x69\x91\x4a\xc9\x38\x10\x9c\xbd\xd2\xac\xcc\xac\x10\x01\xcf\x56\x0a\x38\x23\x9c\x02\xf3\x20\x4b\xa2\x7b\x44\xb6\x42\xec\x06\x73\xdd\x6b\xa4\x9e\x66\xc2\x43\x2c\xdb\x44\xc3\x12\xe9\x7d\x0e\x43\xcd\x34\xb2\x2a\xed\x59\xa7\x3d\xe3\x52\x8a\xb5\x90\xf3\x27\x24\xf7\xe9\x3f\x69\x95\x18\x14\x52\xc2\x9d\x87\xd0\x0d\x61\x29\x13\x22\xf3\xf6\x37\x7c\x97\xb9\x22\x59\xd6\x94\xf8\x44\x33\xcd\x8b\x44\x1b\x59\xd6\x3a\xe2\x9e\x54\xe9\x90\x51\xe7\xc3\x98\x9c\x5a\x58\x9c\x6a\x63\xe1\xe2\xdc\xc6\xec\x3d\xf8\x55\x82\x7b\x89\x72\x9c\x48\x5d\x02\xab\x58\x8b\x4e\x72\xe0\xe7\x00\x88\xda\x1e\x04\xef\xef\x74\x97\xb9\x98\xc6\x31\x9b\x78\x7f\x36\xb2\x42\xa1\xa7\x7a\x4f\x8f\x44\xaa\xc5\x53\x16\x5f\x2f\xd7\x0f\x60\xbe\x60\x01\x31\xd0\xe3\xb4\xf9\xdd\xb3\xc4\xbb\x66\x3e\x02\x6d\x00\xbf\x17\x72\x97\x7d\xbf\x7f\x0b\xd1\x01\xb3\xd3\x20\xe1\x3c\x3b\x0a\x9d\x3b\x4f\x69\x60\xff\x6d\xe7\x89\xb8\x92\xe5\xb1\x19\x72\x73\x09\x8a\xee\x29\x58\x11\xfd\x7b\x44\xe5\xf5\xb8\x56\x3a\xdc\x67\x76\xfe\xf0\x1e\x9d\x97\x2e\x67\x17\x04\x7b\xba\x01\x46\x94\xa7\x54\x21\xd3\x17\xb4\xda\x6d\x52\x34\x2a\xb9\xf9\x66\x56\x84\xc2\x30\x00\x2e\xc2\x16\xd5\xb2\x9b\x65\x56\x3e\x57\x4e\x98\xfd\xf4\xda\xcd\x11\x6e\x34\xe8\xc7\x6f\xf4\x25\xd4\xf7\x1c\x64\x34\x68\x65\x7c\xfe\x40\xb0\x27\xba\xc0\x1d\xc4\xd9\x5a\x3f\x15\x04\x89\xd0\x41\x99\xa9\x98\xf9\xf5\xde\x15\x69\x23\xa5\x42\x88\xeb\x6f\xb0\x5b\x41\xe3\x7a\xf7\x6d\xdf\x56\xfb\x10\xe0\xe4\xd8\xa2\x4c\xd2\x18\x59\x0a\x03\x0d\x55\x59\x15\x08\xd2\x23\x81\x3e\x92\x68\x77\xc0\xb5\x2c\xfa\x1f\xbf\xd1\x57\x2a\x3e\x64\x61\x0d\x67\xa2\x6d\xae\xeb\x1e\x61\x34\x3a\xc4\x32\x6d\xf6\x8f\x44\xa6\xba\x03\x20\xe2\xb9\xae\xe6\x03\xde\xd1\x60\x40\xbc\x2d\xca\xe5\x0d\x24\x1f\xed\x22\x65\x0a\xf2\xf2\xd9\x28\x6b\x33\xcf\xa6\x1a\x17\xf3\xd7\x35\x29\x04\xa0\xf2\xfa\x08\x67\x7f\xb8\xb9\xbc\x38\xda\xf0\x5c\xaf\x39\x90\x5e\xd8\xb2\x46\x36\x9f\x3b\x5a\x0b\x2c\xb0\x23\x91\x33\x79\xc4\x56\x6a\x84\x30\xa2\x13\xb6\x2e\x8a\x4c\x9f\x1c\x1f\xaf\x92\x62\x5d\x2e\xc6\x91\xda\x1c\xfb\xa1\x39\xe6\x59\x72\xbc\x48\xd5\xe2\x38\x17\x10\x48\x72\xf4\x76\xfc\xd5\x5b\x98\x99\xe3\x87\xb7\xc7\x00\x1e\x19\xaf\xd4\xbf\x9c\x7f\xf5\x6f\x5f\xff\xde\x14\x9c\x6d\x8b\xb5\x92\x27\x84\x51\xda\x59\xf6\x11\x5e\x13\x8e\xf1\x93\x5a\x2d\xff\x36\xfe\x32\x6c\x06\xbd\xba\x51\xb1\x48\xf5\xf1\xc3\xdb\xb9\x9d\x98\x71\xd6\x91\x31\xe3\x1f\xa1\x17\x9f\x21\xf4\xe2\x3e\x29\xfe\x11\x7a\xf1\xab\x86\x5e\xf4\x57\xb9\x9c\x8c\x01\x8e\x6c\x2f\x1f\xcd\xef\x4e\x46\x5a\x4f\xc4\x3e\x39\xd4\x72\x38\x84\x81\x71\x07\x1c\x11\x03\x13\xd8\xd5\xba\xeb\xee\x32\x1d\x16\xc7\xa1\x79\x6a\x3a\x6f\x17\x83\x78\x40\x00\xe8\x98\x44\x60\x2b\x44\x0b\x69\xc6\x93\xb6\x80\x8a\x20\x6f\xcf\x01\x43\x88\x79\x44\xda\x49\xcf\xfa\xa4\xdb\xa2\x8c\x53\x22\x9e\x3f\x4b\xe2\xad\xd6\x3a\x10\x13\x3a\xb8\xfc\x86\xde\xdd\x43\x35\x26\x94\xf4\x41\x23\xfa\x82\x29\x52\x9e\x3b\x37\x0a\x75\xf7\x89\x79\x51\x52\xfc\xda\x62\xba\xd5\xa3\xcd\x87\xf2\x1c\x59\x44\x3c\x5e\xbd\x5f\x06\x11\x5c\xa4\xd0\x16\xdb\xae\x8e\x66\xac\xb9\x7e\x5a\x70\xc0\x04\x29\x88\x9d\x2f\x18\x91\xd5\x89\xb6\x15\xda\xd3\xd8\xb2\x2f\x99\xc3\xdd\x92\x3c\x66\x65\x9e\x29\x2d\xf4\x98\xbd\x57\x39\xd2\x7a\x11\xe7\x8e\x0f\x78\xb8\x7e\x7f\xca\xde\x7e\xf3\x6f\x5f\xcf\xe4\xeb\x16\x65\x08\x0e\x51\x95\xaf\x28\xfe\x02\x54\xa0\x0d\xd7\x85\xc8\x8f\xf3\x65\x74\x8c\x47\xc7\xb1\xf9\xfe\x88\x2a\x3d\x52\xcb\x23\x97\x22\xe1\x88\xd8\xe2\xc7\x9b\xf8\x4d\x17\x32\xb1\x5d\xe1\xfe\xd5\x2e\x3d\x93\x0e\xc5\xbc\x6d\x7e\xf7\x0b\xd6\xca\x16\x42\x45\x84\xb4\x10\x0d\x1a\x0b\x52\x31\xaa\xa5\x4b\xea\x83\x71\xbe\x98\xff\x4b\x2d\x5b\xfe\xf1\x5d\xaa\x16\xfa\x8d\x23\x80\xe5\xda\xd6\xe1\x19\x19\xdb\xe4\x76\x63\xcf\x1d\x72\xfb\xa6\xa1\x78\x49\xb3\x9a\x95\x89\xe1\xb4\x0d\x19\xf8\x76\xa1\xe1\x75\x41\xe4\xa3\xe2\xb9\x2a\xa5\xcd\x9a\xa1\xa4\x50\x4b\x80\x39\xc1\x35\xc9\xa2\x34\xc1\xb3\x00\xd8\x3f\xc7\x3d\x95\x8b\x0c\xb5\x0f\xf0\x81\x75\x0f\xf7\x81\x99\x63\xf6\x8d\xf3\x4b\x64\x8e\x39\x74\xdc\x49\x30\xfe\x4a\x03\x7e\x68\x28\x05\x6e\xa5\x21\x08\x24\xf3\xfe\x5e\xb4\x81\x93\x03\x3e\x73\xb5\x4f\xd2\x90\xf1\x1c\x34\x78\x71\x54\xa8\x23\x20\xed\x03\x2a\x38\xcc\xe5\xd4\x05\x41\x02\x94\xc6\x90\xe3\xde\xbc\xdf\xa3\x9d\x78\x6b\xfb\x14\x34\x94\x14\x56\x8d\x0c\xe8\x04\x49\x4f\xa4\x14\x39\x79\x80\xf7\x6a\x06\x03\x31\x1c\xe1\x54\xee\x46\xa4\x7b\x33\x45\x98\x67\xc7\xc5\x23\xf2\x40\x08\x8c\x19\x5c\x4d\xd6\x6a\xa3\x8c\xae\xab\x4a\x1d\x3c\xc4\xab\x2d\x28\x13\x9d\x8a\xf9\x86\x67\xa8\xaf\xfe\x7a\xbd\x31\x5b\xcb\x3c\x42\x13\x74\xf8\xd2\xa0\xd4\x65\x8b\x6a\xb2\xa6\x3d\xed\x77\x59\x76\x76\xaf\x1b\x40\x08\x6d\xc0\xe5\xb7\xe6\x0f\xc2\xe6\xce\x48\xfe\x66\x2e\xbd\x66\x49\xb9\x6b\xa4\xd3\x40\x10\xd0\x86\x5c\xd4\x21\x7c\xd3\x9e\xba\x9d\x6c\x31\xe5\x66\xe0\x1c\xb8\x20\xab\x3e\x13\xc0\x25\x86\x1d\xd9\x78\xa3\xa3\xd6\x80\xa3\xae\x7d\x09\x76\xb5\xd2\xdc\x4c\x2c\x5f\xfa\xb0\xa6\xde\xb8\x02\x88\x1a\xbd\xd9\x6e\x4f\x37\x09\xd1\x69\x38\xc6\x28\x10\xac\x6e\xd1\x05\x72\x1e\xbe\x19\x21\x71\xdd\x90\xb1\x83\x4a\x70\x71\x36\x46\x30\xd8\x0b\x5d\x03\x38\xcc\xfe\xba\xcb\x9c\xd9\x86\x6f\x47\x86\x5e\x1f\xbd\x6c\x5a\xd9\xb0\x2c\xb8\x0f\x1f\x7c\x72\x64\x80\xff\x2e\x4a\x78\x7e\x71\x79\x1b\x22\x9b\x12\xec\xed\x51\xb4\x16\xd1\x3d\x58\xd3\xf0\xc8\xc3\xcd\x40\xc1\xf8\x00\xb7\xf6\x29\x55\x0b\x65\x81\x32\x5b\x97\x65\xc6\x65\x5a\x52\x39\x8b\x13\x9d\xa5\x7c\x0b\x90\x04\x89\x71\x8a\x1e\xce\xe0\x02\x7c\x8d\x28\xd8\xe7\x4c\xe8\x3f\xd3\x66\x56\x26\xfe\xbb\xa1\x63\xe9\x81\xe7\x7e\x30\x9b\xf2\x80\x69\xb1\xe1\xb2\x48\xa2\x99\xdc\x08\x2e\x43\x04\x2b\x41\x32\xcc\x20\xc7\x4a\x50\xbe\x84\xe5\x52\x44\x85\x27\x5c\x86\x4b\x88\x1b\xa9\x7d\x7b\x70\x58\xdf\xdd\xce\xdb\xd9\xf5\x1f\x6c\xda\xe7\x64\x03\xf8\x68\x5a\x43\x74\x34\x3e\xd1\xd5\x08\x29\x78\xe9\xc8\xb5\x97\x5a\xf8\xcb\xae\x29\xb6\x10\xc5\xa3\x00\x3e\x21\x22\x40\x68\xd3\xf1\x0f\x4e\xc3\x74\x48\xf0\xe0\xc4\xf1\x0f\x12\xbd\x7c\x83\x40\x98\x36\x58\x08\xbc\x74\xc4\x87\xb2\xc6\x60\xf8\x8a\x28\x19\xc0\x14\xf8\x8a\x8c\x9a\xaf\xe0\x98\x36\xb7\xe0\xfc\x41\xc4\x33\x59\xa5\x95\x24\x9d\xd1\x6f\x38\xe6\x13\x8c\x3e\x8f\xb4\xb1\x63\xdc\xcb\xd1\x73\x06\x54\x5a\x9e\x44\xdb\x91\x0e\xec\x48\x78\x8a\x9d\x7e\xc9\x5b\x95\xcd\xb5\xdc\xf7\x32\xec\x73\x90\x52\x02\x41\xca\x37\x5c\x41\xff\xb8\x45\xe9\x48\xf3\x90\x51\xd7\x81\xc5\xc9\x68\xdd\x30\x83\xb7\x95\x31\x93\x96\x4d\x66\x59\xa6\xc8\x92\xde\x15\xb3\x43\x1c\x9a\x36\xf2\xf5\xd7\x8b\x80\x76\x46\x57\x16\xe4\x6c\x75\x20\x9d\x00\xb8\x8f\xb2\xce\xae\x7a\x21\x75\x09\x2a\x85\x4d\xd7\x08\x5e\x89\x95\x28\xe0\x34\x8f\xcb\x14\x01\x9b\xe0\x4e\x01\x3e\x4e\x9e\xa6\x2c\x29\xf4\x4c\x3a\xfa\x50\x0c\xcc\x01\x09\x6b\xfd\x2d\x31\x5d\xb9\xa0\x0a\x28\x16\x1e\x73\x09\x7a\x58\x12\x25\x45\x23\xdc\x61\x1b\xa6\x38\xcb\x32\xc1\x31\x96\x1f\xa7\x6d\x26\xc3\x3b\x57\x7d\x12\x28\xf0\x1d\xb2\xe2\x3f\x47\x0c\xfa\x0e\xc3\xad\xa9\xe2\x49\x28\x1b\xec\x9d\xb9\x70\xd9\xec\xe5\xd8\x5a\xe2\x0f\x22\x54\xb2\xb9\xd5\x14\xda\x3a\x50\xfc\xbd\x15\x62\x7a\xa2\x32\xe5\x39\x06\x33\x2d\xcb\x94\x25\xcb\x20\x11\x3b\xcc\x01\x92\x47\x9a\xe9\x8a\x14\x9c\xd5\xd6\x85\xa2\xf9\x46\x04\xbc\x35\x64\xde\x49\x03\xc4\x0f\x66\xc4\x40\x28\x89\x29\xeb\xcd\x98\xbd\xf3\xf4\xb8\x38\xc3\xb0\x27\x02\xd2\xe9\x44\xa3\xf8\x73\xed\x0d\x28\x17\xa0\x77\xa6\x89\x4a\x9a\x1d\xe9\x76\x5d\xc7\x0c\x42\xf2\x9a\x61\x70\x22\x9b\xba\x68\x37\xc2\xbe\x95\x72\xc5\x7c\x5a\x03\x19\xb9\x0d\xd1\xd1\x40\x7b\x2a\x0c\x6c\x64\x48\xd8\xfd\x84\x86\x3a\x42\xf4\x96\xc6\x6e\x76\xe4\x7d\x87\x79\x1c\xd8\xd4\x20\x8b\xe2\xf0\x86\x06\x2b\x27\x04\x8f\xf5\x19\xd9\x15\x2f\x86\x22\xc9\x5c\xe0\xda\xf0\x86\xb6\xa2\xf6\xfa\x34\x13\xa4\xc7\xc0\x76\x4e\xcc\x37\x4f\x6c\xa8\x2e\x17\x47\x28\xa0\x5d\x3e\x24\x10\x15\x82\x47\xeb\x2a\x87\x84\x65\x7a\x76\x3d\x80\x18\x42\xd8\x8f\xc3\xe9\x2f\x26\x7e\xcd\x41\x22\x49\x66\x9a\x3f\x66\x97\x52\x20\xce\x53\x2d\x83\x43\x85\x1a\x40\x19\x27\x21\xd9\x8e\x93\x72\x0b\xd3\x30\x79\x6f\xa9\xb5\xcc\x96\x1b\x31\xee\x4b\x07\xa9\x87\xcb\x06\xa5\x48\x87\x2e\xd9\x96\x9a\xea\x00\xf5\xb2\x1f\x41\x45\xfb\x9d\x3f\x80\x4b\x0f\x97\x00\x6d\xfd\xe8\x3f\x2d\x3b\xe3\x1e\xdc\x2d\xce\x06\x3b\x54\xd7\x0d\x43\xf0\xf3\xbe\xf1\xbd\x5a\x57\x31\xb3\x03\x12\x44\xde\x5d\xbc\x3b\x7b\x3f\xbd\xa8\xe6\x5f\xfc\xe3\xdd\xd9\x5d\xf5\x97\xeb\xbb\x8b\x8b\xe9\xc5\xf7\xe1\x4f\x37\x77\xa7\xa7\x67\x67\xef\xaa\xef\xbd\x9f\x4c\xcf\x6b\xef\x99\x9f\xaa\x2f\x4d\xbe\xbb\xbc\xae\xe5\x91\x6c\x49\x02\x79\x3b\xfd\x70\xf6\x6e\x7e\x79\x57\x49\x45\xf9\xee\x3f\x2e\x26\x1f\xa6\xa7\xf3\x96\xf6\x5c\x9f\x9d\x5e\xfe\x74\x76\xbd\x27\x61\xa4\xef\x6f\xeb\x90\x3e\x07\xb6\xf0\xc9\x79\x45\x27\x6c\x99\x27\x42\xc6\xe9\x16\x23\x45\xec\xcd\xb6\x06\xfd\x0e\xcf\xde\x64\x23\x54\x79\x48\xc0\xc7\xed\x5a\x30\xf5\x20\x72\x60\x01\xc3\xd2\x88\x32\xc4\x33\x0e\xd4\x6b\xcd\x45\x91\x37\xbd\x02\x3b\xa3\xea\x8a\x7c\xeb\xe2\x36\x77\x35\xc7\x33\x48\x52\x25\x2c\x13\xf9\xae\xb6\x80\x66\x94\x97\x59\x91\x2c\xba\x43\x78\x06\x07\xde\xf7\xbd\x7b\x23\xdf\x71\x3b\x39\xdc\x45\xbb\x60\xac\x44\xb2\x1c\x02\x93\x87\x12\x9e\x9a\x2e\xd7\x7d\x6d\xa1\xc5\x59\xb9\x48\x93\x88\x25\x71\xdd\x9e\x42\x7c\x18\x60\x32\xae\xd3\xa2\x67\x22\x07\x55\xd5\xdc\x00\xb2\x5c\x1c\xf1\xb2\x58\x23\x85\x27\x05\xce\x50\x12\x9b\x99\xd4\x22\xca\x05\xfa\x02\x84\x06\x23\x2d\xa6\x43\x0d\x6a\x82\xc6\x10\x83\x4d\x0c\x64\x79\xe3\x20\x45\x4d\x87\x8f\x00\xbf\xc4\xd2\x07\x18\x49\xf1\xfd\x9d\x43\x43\x2d\x4e\x30\xe1\x6a\x00\x0b\x83\x13\x1e\x1f\xda\xa4\xaa\xa6\xdf\x46\x52\xbb\xa4\xa2\x38\xc9\x36\xd2\xa8\xbd\x1b\xfb\xd6\x58\xb8\x50\xaa\xa1\x37\x54\x3a\x3d\x3a\xcd\x05\x1c\x22\x04\x69\xb0\xf6\x0b\xc0\x35\x51\x64\x12\x04\x24\x99\xab\xda\x42\xac\x79\xba\x44\x8d\xc3\x4c\x4d\x3b\xab\x08\x96\x7f\xab\xee\x85\xbc\xc6\x09\xfb\x55\xc4\xa1\xc4\x9b\x8f\xe7\x34\x72\x16\x21\x6f\xc2\x34\x6d\xb4\xab\xca\xc6\x85\x82\x32\x55\xe0\x3d\x21\x78\x8c\x01\x48\x3e\x63\x81\x0d\x29\x5d\x2e\x93\x4f\xa6\xc0\x99\x14\xad\x9c\xed\x00\x26\xb3\xec\x92\x4e\x2e\x03\x70\x0e\x29\xfa\xee\x85\x84\x7c\xaa\x40\x0e\xb8\x7f\xcd\x0e\xb3\x9f\x37\xe7\x62\x87\x41\x1f\x6c\x7e\x49\x25\xcd\x6c\xe8\xe5\xb1\xe3\x54\x60\x44\x98\xe3\xe0\x80\x75\x73\x7a\x3e\x3d\xbb\xb8\x9d\x9f\x5e\x9f\xbd\x3b\xbb\xb8\x9d\x4e\xce\x6f\xfa\x6e\xbf\xe7\x88\xe2\xab\xed\xbe\x7a\x30\x9b\x93\x10\xc7\xb4\xf3\x7c\x28\xbb\xeb\x94\xdf\x76\x30\x25\xfb\x5b\x9f\xc4\xd9\x3c\x4e\x74\x64\x8e\xbf\xed\x5c\xc8\x18\x92\x5d\x3c\x69\xa9\xb6\x17\x55\xef\x85\x7b\x83\xb9\x37\xac\x04\xc1\xd3\xee\xc1\xae\x68\xf7\x1c\x20\x99\x60\x86\xcc\x85\xd9\xfc\x71\x85\x63\x64\xbc\x3f\xc3\x99\x29\xee\xb0\xbe\x55\x8b\xa8\xf7\x09\xdb\x9b\x68\x5d\x02\x95\x89\x7d\x0d\xf0\xa8\x1d\xa3\x42\x0c\xc4\x61\xc6\x8d\x24\xc8\x42\xcf\x12\x3d\x93\x1b\x2e\x63\x5e\xa8\x7c\xdb\xd1\xc5\x7e\xc2\x33\xdc\x36\x55\x11\x1a\x1e\xd9\x52\x88\xd8\xce\x02\xbe\xca\x65\x7d\x29\x61\x5e\x8e\xdb\xcb\x1f\xcf\x2e\x6e\xe6\x67\x17\x3f\xcd\xaf\xae\xcf\xde\x4f\xff\xe4\x60\xb2\x19\xd7\x6d\xc9\xa5\xb3\x5c\x18\xe9\x62\x69\xce\x5a\xe5\x0b\xa6\x6c\xb6\xe5\x50\x9a\xce\x64\x39\x93\x56\xb2\xe4\xbe\xf8\x75\xae\xca\xd5\xba\xbd\xa0\x7a\x2b\xaf\x26\xb7\x3f\x3c\xa9\x99\x40\x42\x89\x79\x5d\x71\xb7\x35\xe1\xc2\xc9\x92\xe4\x1e\x62\x8c\x6b\xcd\x03\x2a\x55\x78\xb5\xcd\xcb\xd0\x21\xd1\x9e\x74\x7b\x69\x0a\xad\x9d\xca\x7f\xcb\xeb\x5d\x0b\xe8\x36\x90\x9b\x95\x63\x04\xe0\xeb\x98\x1c\xbc\x51\xda\x49\xcb\x6f\x95\x13\xec\xab\xa3\x54\xac\x56\x22\xc6\xe5\x55\x2f\x98\x6c\x70\x24\x02\x23\x7f\xae\xb7\x8d\x22\x25\xf0\x3d\xe0\x60\x76\x78\xaf\xfe\x02\xfc\xca\x7d\xd2\x2e\x2b\x4e\x89\x48\x0a\xfc\x9b\x05\x97\x1d\x8e\xe4\xfd\xf1\x60\xed\xc5\x5f\xe6\xcc\x85\xea\x91\xc1\xc4\xba\x0c\xfc\x3e\xe8\x02\xbc\x1c\x8e\x6f\x75\xed\xb8\x16\x59\xca\x23\xe1\x02\x5c\x90\x01\x18\xee\xf5\x4f\x71\xe0\x51\x9a\x64\x49\xf6\x96\x20\x7d\xb2\xcf\x0c\xd7\xb6\x04\xc0\x72\x7b\x6d\xe5\xf1\xcb\x9b\x56\x76\x5e\xdc\x88\xf7\x13\x0c\xcd\x98\xa7\x92\xe2\x22\xd0\x16\x05\xc9\x5f\x3b\x31\xeb\x83\x96\x43\xad\xe6\x9f\x68\xe2\xf1\xce\x5c\x35\x74\x73\xcb\xac\xeb\x96\x87\x53\x1d\x77\xd9\x0b\x8b\x22\xdf\x49\xc6\xfd\x1c\xee\x88\xab\x5c\x6d\x12\x2d\x26\x45\x91\x27\x8b\x32\xcc\x46\x3c\x10\x30\x57\xb9\x9c\xf8\x0e\x67\xb9\x8a\xcb\xc8\xd2\x67\x41\x6f\x3d\xec\x87\xac\x7c\x56\xeb\x88\xd9\x91\x59\x7d\x74\x73\x13\xf1\x11\x44\x7b\x20\xbf\x5b\x9b\x8f\xcd\x0a\xc6\x0e\xdb\xdf\x95\x3d\xca\x9f\x39\x66\xb4\x7b\x30\xed\x1a\xe8\x17\x06\xce\xec\xeb\xa0\x01\x77\xa0\xa6\x68\xb9\x2c\x38\x3a\xd0\xab\x3a\x4a\x17\x5b\x8e\x3b\x6a\x86\x81\xbb\xfa\x61\x63\xaa\xe1\x54\xa8\x37\xac\xb9\x46\x75\xbe\x88\xd6\xd5\x86\x43\x6f\xaa\xac\xc1\xf5\xe6\x3a\xf5\xf8\x30\xb3\x49\x2f\x37\xda\x08\x0d\x0d\x09\x19\xb6\x2b\x19\x60\x5d\x3a\xeb\x4e\xfb\x3d\x86\x5c\xcc\x7f\x29\xc5\x90\xac\xce\x36\x54\xe3\x8f\xf0\xd9\x5e\x40\x4a\x82\xd8\x2d\x67\x7b\x2d\x92\x8d\xd1\x80\x78\x1e\xad\xd9\x82\x6b\xa2\x23\x0c\xd9\x12\x30\xfd\x3c\x4b\xcc\x57\x3c\x2a\x28\x1d\xaf\xad\xd6\xa6\xe4\xbd\xb5\x50\x48\xa3\xd6\x7a\xab\x47\xdb\x72\xdb\x37\x00\x43\xac\xd7\xb6\x19\xd3\x77\x83\x7c\x08\xa1\x1e\xee\xee\xc9\x78\xc4\xc2\xe9\x94\xf2\x52\x46\x6b\x96\xa5\x1c\x09\x25\xd6\x5c\xa3\xa0\xb0\x08\x1d\xbe\x48\xd2\xa4\x00\x9e\x30\x74\x1c\xd7\xd6\xad\xb9\x3c\xf3\xfc\xde\xa6\x5b\xe0\x9e\x14\x6e\x97\x28\x39\x10\x09\xed\x7a\xf5\x59\xb1\xd0\x5e\x10\x86\xc2\xbd\xdf\x66\x27\x1c\xb4\x9f\x0e\x73\xbc\xc1\x66\xf7\x7d\x19\xe6\x1d\xa2\x12\xaf\xea\x9f\xd7\xc6\x1b\x09\x28\x0f\x22\x09\xde\x19\x97\xf5\x22\xa0\x73\x1f\x55\xb6\xfb\x18\x6d\x76\xb8\x45\x09\x1e\x0e\x7c\xa2\xc4\x49\x03\x94\x98\x7a\x5a\xa5\xd6\x7d\xbf\x4c\x15\x2f\x76\x47\xb9\x61\x96\xa4\xae\xb2\x63\x55\x2e\xba\xf2\x72\x60\xab\x9e\x1e\x43\x67\xc5\xff\x73\xd9\xdc\xc3\x73\x94\x17\xc2\x48\xdf\xa7\x0d\xa8\xf9\xfa\x08\x3e\x6f\x2f\x9c\xa2\x98\x07\x33\x52\xb8\x65\xe0\x73\xf5\x39\xdd\x1f\x20\xa9\x2d\xdb\xa9\xae\xe4\x1d\x14\xf3\x78\xd8\x7c\x25\x72\xcf\x52\xda\x9f\xfe\xeb\xeb\xaf\xfa\x44\x23\xfe\xb1\xe4\xe6\x00\xb8\x5c\xde\x20\x41\xd8\x21\x9d\x2e\x92\xe6\xb6\x6a\x17\x03\xf5\x5a\x6f\xab\x5e\xda\x70\xe1\xf7\x66\x3b\x68\xeb\xcd\x8d\xf9\xba\xbf\xd8\x9d\x56\xac\xb1\x59\x9e\x28\x20\xca\x52\xcb\x8a\xae\xd1\x22\x89\x5b\xeb\x3d\x60\x24\x7f\x29\x45\x29\xcc\x02\x5a\x94\xf1\xaa\xe9\x2c\x19\x70\xe1\xf2\x5d\x5a\xab\x47\xb6\x29\xa3\x35\xb3\x85\xb3\x58\xa4\x7c\x5b\x55\xa3\xcc\x5d\xa3\x50\x40\xa1\x3c\x88\x2f\x30\x20\xbe\x8f\x4a\x5d\xa8\x0d\xe0\xd4\x7d\xb9\x79\x29\x61\x97\x33\x6e\x77\x57\xdb\x81\x56\x21\xf4\x7c\xa2\x87\xfc\xe6\xea\xec\x74\xfa\x7e\x5a\x73\x4f\x4f\x6e\x7e\x0c\xff\xfe\xf9\xf2\xfa\xc7\xf7\xe7\x97\x3f\x87\xbf\x9d\x4f\xee\x2e\x4e\x7f\x98\x5f\x9d\x4f\x2e\x2a\x4e\xec\xc9\xed\xe4\xe6\xec\x76\x8f\x9f\xba\x59\x6b\xf7\x44\xf0\x80\x6f\xd4\x22\xe7\x6d\x32\x1d\x6b\xae\xa2\x5a\x4f\xd8\xc4\xb2\xaf\x56\xf8\x81\x2d\xd6\x00\xc0\x49\x29\x62\x2c\x11\x92\xf0\x8e\x17\xfc\x94\x17\x3c\x55\xab\x31\x9b\x30\x8a\x2b\xc0\x78\x11\x6d\x54\x42\xa2\xa6\x34\xb3\x83\x45\x18\xbd\x30\xf2\xa6\x20\x9f\x2d\x5c\x2d\x89\x14\x36\x15\x61\x5e\x29\x1b\xe4\x39\x93\x67\x0f\x42\x16\x25\x28\xda\x3c\x4d\x19\x55\x6b\x5f\x08\x58\x41\x6c\x2b\x75\xb2\x49\x52\x9e\xfb\xc4\xce\x97\x54\x16\x5c\x76\x6d\x5b\x1d\x2b\x5d\x93\x72\xc2\xda\x03\xee\xa6\x0c\xda\x7d\x7a\x3e\x05\x45\x37\x2a\x6c\xd6\x42\x5b\xf9\x4c\x22\xe9\x28\xd5\xb8\xe1\x10\xc3\x54\x28\x32\xd0\x63\xf5\xf4\x72\xf7\x42\x3c\x48\xb1\xb2\xae\xac\x97\x32\x4c\xb8\x46\xda\x7f\x9c\xc9\x22\xdf\xf6\xd6\x5e\x6f\x81\xd1\x41\xc3\xbd\x8e\x20\x91\xd5\x64\xcf\x68\x3f\x65\xb6\xf4\x0b\x50\x69\x2d\x5e\x97\xdc\x7b\xce\x8b\x87\xf0\xa8\x8e\x2b\x51\x6a\x4e\xde\xdf\xea\x38\x84\x2c\x60\x30\x0a\x0b\x55\xca\x58\x13\x78\x73\x93\xc8\xe3\x0d\xff\xf4\xc6\xf6\x14\x49\x6c\x5c\xca\x35\x60\x4c\x14\xa9\xb9\x0f\x6e\x8d\x90\xdb\x3d\x5c\x33\xb9\x63\xbc\xf6\xdf\x09\xac\x64\x05\x93\x81\xb7\xef\x20\x0c\xf5\x41\x6c\xdb\xe6\xaf\x91\x36\x93\x85\xb9\x1f\xa0\x90\x2c\x17\xe6\x45\x87\x71\x4d\x11\xba\xec\xfe\x86\x58\x96\x4a\x6a\xef\x76\xd9\x1d\xc2\x46\x0e\xda\x36\xad\x80\x95\xfe\x8a\x4f\xef\xbc\xa7\x54\x93\x99\x33\x84\xaf\x58\xcf\x09\xc5\xee\x90\x5f\xde\x4c\xd6\x5f\xd5\x82\x2d\x21\x90\x8d\xec\x04\xb9\x00\x4f\x19\x4c\x85\x4d\xd4\x03\xbc\x7a\x0d\x4c\x8c\x5d\x02\xa9\xd0\xe0\x3f\x92\xe6\x52\x2d\x7e\x29\x09\x02\xf0\xf6\xcb\x61\xe7\x6c\x81\xd9\x1e\x90\xde\xbb\x9e\x07\xc1\x9d\xe5\xd0\xae\x52\x26\x6d\x64\x9b\xd7\xa5\x34\x47\xf1\x73\xa0\xa7\xfa\xbb\xc7\x6b\x95\xd2\x9f\x7b\x63\xcd\xac\x67\x27\xc7\xf7\x5f\x8c\xb9\xf9\xa7\x1a\x61\x33\x55\x07\x91\x0d\x54\x7a\x78\xa0\x2d\x78\x74\xff\xc8\xf3\x18\xcd\xff\x00\x67\x1a\xb3\x1f\xd4\xa3\x78\x10\xf9\x88\x45\x22\x2f\x38\xf1\x15\x6a\xc0\x73\xc0\x86\xa2\x72\x66\x12\x02\x7d\x90\xfc\x51\xea\x32\x17\xac\x48\x56\xeb\x42\xe4\x21\x1a\x47\xe5\x46\x1c\x15\x48\x55\x9b\x89\x88\x08\xd9\x3a\x06\x60\x99\xf2\x87\x26\x01\xe3\x53\x98\x64\xd8\xd4\x45\x2b\x5b\x77\xb7\x4d\x7e\xb6\x0b\x3f\x45\x03\x46\x42\x13\x29\xb4\x46\x6c\xa5\x52\x2e\x57\xe3\xf1\x18\x12\x7d\xbc\x19\xb4\xd0\xa9\xc0\xd0\x81\xee\x50\xfa\xa9\x52\x5a\xa4\x5b\x47\x22\xe6\xe2\xa8\x00\xb8\xfb\xa9\x10\x52\x27\x68\xd8\x6a\x59\xfe\x37\x75\xe7\xd2\xe7\xf5\xc5\xb5\x5f\xcf\x07\x47\xe9\x76\x94\x03\xb9\x54\x07\x94\x84\xef\xb7\xdf\xbc\x9e\x14\x75\xde\x5e\x96\x54\x72\x68\x28\xf5\x4f\x2a\xe9\x80\x82\x3c\x89\x6c\xb4\xb5\x24\x22\x42\x7a\x52\xf8\x69\xfb\x98\x35\x22\x82\x0f\x08\x06\xde\x11\xd7\x3b\x30\xa4\xb7\x8f\x21\xe0\xa6\x3e\xdd\x83\xb7\xc5\xfe\xf4\x6e\xad\x1d\x1a\x18\x32\xed\xb9\x0d\x86\xa8\x4e\x18\x75\x99\x6e\xe1\xc6\xe5\x02\xa8\xc1\x3d\x10\x07\x5e\xa5\x8a\xd3\x0c\x42\xf9\xbc\xd7\xcd\x11\xd4\x05\x4e\x36\x5d\xa8\x9c\xaf\x04\xdb\x88\x38\x29\x37\xad\xc2\xc6\x35\xf7\x10\xf8\xa8\x4a\xcb\x4d\x37\x55\xe8\xa1\x0a\xb4\x6f\x24\xfe\xeb\x14\xaa\xeb\xcf\xa1\xe3\x22\x23\x6c\x96\x4d\x6a\x2f\xba\x90\x68\xac\xcd\x49\x99\x27\x1a\x58\x76\x9f\x12\x39\xeb\x8a\xc1\xa2\xc1\x01\xbf\xcd\xd0\xc8\x5e\x99\xdd\x23\xeb\x19\xa5\x4f\x34\xce\x2a\x78\xed\xbb\x0f\x85\x3a\x28\x75\x78\xae\xbd\x5c\x95\x0d\xee\xa9\x5e\x40\x09\x50\x1b\x83\xcc\x1b\x84\x9a\x83\x02\x09\xda\x53\x28\xb6\xb4\xb1\x98\xf7\x22\xa0\x3e\x8c\x21\x27\xc7\x23\x52\x3e\xfd\xf8\x8d\xb6\x20\x20\xc2\x69\x79\x8d\xa5\xf0\x95\xa0\x07\xe8\xe1\xad\x85\xe7\x61\x0f\xb1\x08\x20\x28\x8c\xb9\x2c\x5a\x0b\xf0\xe8\x55\x28\x0b\x3f\xf9\x89\x97\x69\xfb\xeb\x54\x3e\xbc\x8a\x39\x5b\x27\x3f\xdf\x30\x1c\x6a\xca\x9f\x90\xef\x6a\x68\x50\xc8\x7e\x80\x20\x0c\xd7\xfc\x09\x9a\x60\x65\x1e\x70\xd0\x6d\xfa\x0e\x33\xec\xa2\x88\xd6\x5e\xf3\x00\x82\x46\x47\x2c\x49\x09\xb9\xa9\x9f\x1b\x9f\x11\x02\xb1\xd7\x21\x88\x35\x59\x49\x15\xa6\x52\x52\x52\x80\x2b\xce\x08\x20\x15\x16\xcb\x92\x62\x3f\x52\x70\x20\x2b\xe1\xbe\xa5\x56\x28\x44\x80\x51\x3f\x2b\x7e\x6a\xb8\x52\x24\x48\x57\x65\x61\xd6\x78\x27\xa2\xfc\xce\xf5\x4c\x01\x55\x02\x90\x99\xac\x56\xd5\x18\x24\x0b\xe5\x4b\x72\x81\x04\xdf\xda\x68\x6f\x45\xf2\x60\x36\x6a\x73\x59\xbb\x05\x0a\x12\xa0\xb9\xf6\xc8\x6d\xcb\x02\x96\xf0\x7b\xb1\xd5\x61\x32\x69\x5a\x51\xac\x6b\x41\x26\xa6\x3f\x34\x5f\xfb\xa7\x02\x06\x6e\x9e\xfb\x94\x90\xfd\xce\x32\xac\xf4\x83\xf9\x78\x07\x46\xb8\x51\xb8\x59\x83\x3e\xd8\xd5\xdb\x14\x49\x4c\xf8\x71\xa6\x39\xf4\x30\x40\x00\x79\x86\x30\xce\x30\x72\x09\x2e\xbe\xe6\x7e\x3b\x93\x94\x48\x20\x38\xe4\x8c\xc0\x69\x4e\x1b\x45\xe0\x23\x7d\xf9\xb6\xc2\x1e\x04\xd4\xaa\x96\x66\xb6\x5a\xa5\xf5\x2e\x43\x5e\x3e\x58\x1e\x50\x35\xc6\x28\x5b\x1b\x5e\x6b\x85\x4f\xc4\x96\xd2\xe4\x76\xe2\x49\x83\x40\x40\x7c\x93\xd8\x45\x31\x2b\x39\xde\x7e\x22\x61\x86\x6f\x22\x5b\xa1\x9c\x16\xc8\x79\x73\x76\x7a\x7d\x76\xfb\xd9\xf0\xa6\x16\xec\x39\x18\x70\x6a\xdb\xf9\xee\xec\xfd\xe4\xee\xfc\x76\xfe\x6e\x7a\xfd\x12\x88\x53\x7a\xf4\x04\xc8\xe9\x0d\xe5\x27\x39\x55\xb2\x10\x9f\x0e\x3a\x93\xf3\x52\xce\xf9\x80\xd0\x27\x97\xa1\x68\x97\xba\x83\x85\x36\xf3\xab\xb8\xe4\x27\xc4\x6d\x4b\xa8\x13\x9b\x4e\x65\xe9\x8d\x86\xcb\x24\x4d\x21\x12\xdc\x99\xd7\x29\xca\xd0\x0c\x2a\xc8\x1f\x4b\xe7\x4b\x32\x75\x26\x17\x95\xf4\x37\x60\xf2\x5b\x9b\x4b\x30\xc6\x80\x67\x66\x00\xf2\x04\x22\x6c\x77\xa5\x60\x59\x25\x52\xf8\x66\xc0\xac\x99\xf6\x75\xd2\xd4\xd3\x24\xbe\x24\xb2\x8e\x14\xaf\xbe\xba\xa6\x5d\x71\x95\xf5\x69\xd5\x4f\xfb\xd0\xf5\x10\x37\x71\x22\x51\x31\xad\xec\xe6\x9b\xf6\xa5\x7b\xec\xb7\x00\x8c\xbb\x99\x49\x0e\x3e\x08\x5d\xf0\xbc\xf0\x13\x49\x13\x81\x89\xe1\xbc\x73\xe2\x3e\x41\x04\x9a\x5a\xd6\xc6\xd9\x88\x42\x33\xd6\x09\x78\x2a\x38\x91\xdb\x44\x69\xa9\x0b\x91\x93\xd9\x64\xf2\xf3\xcd\x4c\x7e\x67\x8e\xaf\x37\x74\x0a\x51\xfa\x2e\xac\x02\x91\x3a\xaa\x52\xbf\xd5\x50\x42\x09\xf6\x1a\x6d\xd4\x1b\xc1\xa5\x66\xb0\x35\xd2\x54\xe4\x7e\x65\x60\x7b\x84\x88\x29\x89\x36\x50\x3d\xfb\xef\xdf\x30\x02\xb7\x9a\xa1\x30\xed\x75\x69\xc4\x36\xaa\x68\xae\xa7\x2e\xa2\x01\x40\x9c\xbf\xe4\xca\x69\x09\x7c\xea\xbb\x8a\x08\xac\xdf\xba\x88\xaa\x61\x48\xbd\xd6\xd2\x2d\x16\xf7\x8f\xa5\xf4\x8c\x4b\xa9\xc7\xb9\x1e\x9e\x12\x6c\xad\x8c\x00\x75\xb9\xad\xbc\x9b\xd9\x11\x9d\xa4\x80\x72\x33\xc3\xd8\x7a\xea\xd4\xb2\xcb\x1e\x82\xfd\x80\xa2\x0e\x43\x68\x4f\x5a\x18\x95\x7c\x1a\x43\xeb\xdb\xd9\x99\xb8\xf6\x65\x98\x0b\x27\x16\xab\x2a\x55\x61\x39\x48\x1c\x3c\x94\xb0\xae\xe6\x05\x47\x7e\xb3\xb3\x8d\x44\x28\x63\xb5\x94\xf9\x81\xc9\x1f\x6f\x43\x4c\x6d\x25\x2a\x1b\x5b\x11\xf2\x39\x58\x0e\x07\xc7\x01\x33\x64\xf1\x3d\x3d\xbd\x70\x75\xcd\x39\x3e\xd1\x27\x81\x1d\x2e\x2e\x2f\xce\x42\xa8\xc2\xf4\xe2\xf6\xec\xfb\xb3\xeb\x4a\x3c\xff\xf9\xe5\xa4\x12\x93\x7f\x73\x7b\x5d\x0b\xc5\xff\xee\xf2\xf2\xfc\xac\x81\x79\x38\xbb\x9d\x7e\xa8\x14\xfe\xee\xee\x7a\x72\x3b\xbd\xac\xbc\xf7\xdd\xf4\x62\x72\xfd\x1f\xe1\x2f\x67\xd7\xd7\x97\xd7\xb5\xfa\xee\x4e\x77\xa3\x27\x2a\xdd\x68\x37\xff\x78\xe7\x6c\x40\xad\xda\xba\x8d\xab\xe9\x97\x0f\xd8\xc5\x3d\x91\x67\xfb\x96\xa3\x0d\xd7\x8f\xc3\x74\x1c\xb8\x31\x4c\x53\x07\xad\xba\xe7\xcf\x17\x5d\x19\xba\x8c\x1f\x26\xf6\xcc\xa9\x36\x7f\x0e\x24\xe0\x4e\x05\xd0\xd5\x52\x33\xdc\x52\x7a\x76\x1c\xda\x0c\x3c\x58\x2b\xde\x99\xaf\x4c\xc6\x2f\xde\x52\x5b\xc7\xbe\x76\x7a\x2a\xaf\x3d\x8c\x48\xcf\xc5\x86\xb2\xab\xd1\x41\x65\x96\x6c\x20\x89\xad\xa2\x60\x1f\x86\xb0\x7b\xd3\x0d\xb3\x72\x82\xe5\xd8\x95\xd8\xb7\x3d\x6c\x69\x37\xfb\xde\xd0\xf6\x53\x25\xcd\xb6\xd7\xa8\x5a\x06\xb4\x1b\x28\xb3\x86\xb4\xfb\x96\xeb\xfb\xa1\xed\xa6\x4a\x9a\xed\x06\xb5\xef\x49\xed\x06\x83\x77\xd1\x4e\xa3\x33\x40\x88\x85\xc5\x54\x9b\xe7\x62\xfc\xdd\x2b\x41\xfe\xec\x7e\x6d\x34\x1b\xe0\x65\xaf\x97\x19\xef\xef\xc8\x80\xd6\xb8\xed\xca\x6b\xac\xf2\x37\xf0\x14\x7a\xb8\xc8\x05\xbf\x8f\xd5\x23\xcd\x47\x1d\x19\xca\x7a\x49\xf3\xea\x00\x19\x19\x6e\x8f\x88\x22\x27\x0f\x14\xa2\xd4\x7c\xf1\x00\x93\x4b\x88\x17\x1d\x75\xb0\x20\xf5\x72\x9d\x88\x08\xa8\x9f\xa4\x9f\x9d\x99\x44\x6d\xbe\x2d\x7d\xb3\x99\x55\xd3\x22\xa2\x0e\x81\xae\x3a\x1d\x1a\x9d\xeb\x3a\x98\x58\x8a\x03\x2a\x73\x00\xd3\x2d\x72\xb8\x33\xc1\x80\x24\x12\x8c\xc9\xb9\xb9\xf0\xe4\x22\x4a\xb4\x08\x32\xc6\xb5\x9e\xd8\xbf\x1c\x96\x0a\xa5\xe0\x45\xab\xd9\xb5\xb7\x3d\x9c\x47\x45\xc9\x53\x06\xe1\x4a\xc4\xc0\x88\xb6\x4a\xfc\x25\xe2\x12\x43\x63\x0a\xb1\xc9\x20\xaa\x3f\x8c\xe9\x98\xc9\x9f\x01\x28\x81\x53\xf0\x4a\xb3\xef\x01\xf2\x60\x5f\xa6\x43\x78\xc3\x0b\x38\x8b\xff\x88\x75\xb8\x67\xe3\x99\xac\x64\x60\x0a\xbe\xaa\x24\x63\x1a\xcf\xa4\xcd\xd6\x11\xab\x48\x8f\xe1\xc6\x37\x56\xf9\xea\x98\x72\xa9\x9b\xc5\xae\xee\x17\x4a\xdd\x1f\x0b\x79\x0c\x36\xa9\xe2\x98\x97\x85\x3a\x06\xb8\x14\xce\xbf\x3e\xb6\x49\x8f\x6d\xd6\x68\x7d\xbc\x4e\x1e\x04\xfc\xdf\x78\x5d\x6c\xd2\x7f\xd1\xd9\xfa\xd3\xd1\x2a\xcd\x8f\xcc\xb7\x47\xe1\xb7\x47\xf6\xdb\x23\xfb\xed\x91\xf9\x0c\xff\x2f\xdb\xa2\x7b\x47\x7c\xe2\xe6\x2c\x1b\xcd\x64\x22\xb5\xc8\x0b\xd0\x7e\x1e\xf3\xa4\xf0\xa9\xae\xb6\xec\xd5\x7f\xfe\x27\x1b\xe7\xfc\x11\x23\x62\xdf\xf1\x82\x5f\xa1\x7d\xf1\xef\x7f\x7f\x05\x0e\x55\x8c\x62\xca\x78\xfe\x4b\x29\x8a\x99\xd4\xc2\x6c\x42\xf6\xbf\x66\x12\x3c\xb0\x9b\xed\xbc\x40\xbb\x2b\xda\x20\x63\xcd\xbe\xc5\x32\xa7\xc8\x46\x1a\x6b\x53\x52\x47\x38\x41\xc2\xd3\x96\x2c\xfd\x1d\x26\xfa\x5f\xd2\x77\xf4\xfe\x80\x6d\xfd\x4b\x5a\xdd\xd5\x36\xd9\x92\xfe\x25\x85\x03\x34\x55\xdc\x82\xb5\x98\x5b\xbc\x70\x4f\xa6\xc6\xb5\xed\x91\x06\x34\xe0\x45\xdd\xf4\xed\x7b\xe5\x06\x19\xd1\xad\xe5\xbe\x21\x46\xc0\x57\xe0\xfd\x10\xe0\x3d\x4f\xcc\x0e\xb9\x41\x4b\x28\x68\x6e\xd8\x73\xd0\x49\xc9\x75\xee\xca\x43\xc3\x85\xfe\xfa\xe4\xf8\x78\xc4\x56\x1a\xfe\xb3\xf8\x05\xfe\x03\xe8\xa1\xe7\x22\xf5\x6d\x0c\xa6\x03\xc2\x35\x67\x79\xff\x4c\x3c\x07\x8a\xee\x73\xf0\xc8\xd7\x96\xe9\x77\xa5\x8c\x53\xe1\x43\x1b\x2b\x2e\x91\x54\x99\x99\xb4\x13\xd5\xcc\x3c\x04\x73\xbc\x10\x11\x37\x82\xaf\x51\x37\x82\x4b\xd5\xb2\x10\x12\xad\x61\xb9\xcf\xf6\xc8\xd1\x72\x05\x6a\x31\x40\x21\x79\x41\x90\x73\x01\x3f\x42\x25\x40\xcc\x3e\xaa\x3f\x62\x5b\x55\x12\xc7\x38\x30\xe7\xc6\x22\x4a\x21\x91\x83\x65\x0f\x62\xb9\x28\xca\x5c\x32\xce\x32\x2e\x63\xae\x61\x05\x2e\x73\xf0\x76\xe6\x8c\x37\x1b\x3a\x42\x38\xae\x2a\x0b\xe0\xc4\x42\x64\x41\x38\x12\x48\x02\x1f\xb4\x79\x14\x34\x02\xcf\x04\xe0\xa2\x6e\x7c\x38\x9e\x49\x9b\x8f\x90\xb0\x70\x68\x29\x8b\x54\xb6\x25\xc6\xa3\xfa\xa0\x27\xd6\x72\x46\xc3\x3d\xf2\x78\x93\xfa\xbb\x23\x96\x54\x5d\x6b\xc0\x37\x5f\x04\x29\xde\x6d\x92\xfc\xd7\x42\x46\x2a\x16\xb9\x7e\x63\xb6\x61\xe2\xee\x1d\xa8\x3f\x24\xda\x4f\x06\x48\x29\x73\xb8\x91\xb5\xd0\x14\xef\x12\x4c\x99\xd1\xa9\x30\x94\xb7\xe9\x39\xfb\xb7\xca\x6f\x1d\x05\xd3\xd6\x5e\xfa\xe7\x67\x45\xc4\x84\xb8\x4e\x7b\xe7\x7c\xba\x09\x02\xb7\x6c\x28\x71\xb1\x50\xd4\x71\x48\x39\xb1\xf9\xb4\x93\x02\x32\x64\xe6\x42\x17\x33\x49\x27\xf0\x88\x2d\x05\x37\x7a\xde\x88\x45\xfa\x01\x85\x31\x1e\xf7\xc5\xa3\xf2\x18\x1c\x9b\xde\x06\xc0\xb0\x95\xc2\xbd\x91\x18\x5f\xe3\x14\x81\x8d\x00\x83\xae\x1b\xba\x53\x55\x60\xb0\x5a\x05\xe2\x13\xc6\xc1\x66\x4b\xa9\x67\x58\x0b\x93\xf5\xc0\x48\x6c\xd1\x51\xcc\xea\xed\xc0\x07\x46\xf0\x60\xef\x10\x06\x12\x08\x47\xd0\xb8\x09\x4b\x8b\xfb\xcc\xfb\x70\x43\xca\x7a\xb0\xcd\x74\x6d\xaa\x1d\x03\x01\x0d\x78\x9a\xdd\xc2\x7c\xba\xd7\x60\xa5\x45\x6e\x53\xb9\x60\x5f\x91\x60\x72\x9d\xe4\xf1\x51\xc6\xf3\x62\x6b\x97\x6f\x9a\x2c\x20\x03\x44\x9a\xdc\x0b\x36\xc9\x73\xf5\xf8\xdc\xa3\xd0\x29\x5a\xba\x6e\xd8\x87\x20\xd9\x87\xde\xf2\x5b\xe9\x65\xeb\xe6\x8e\xa7\x51\xd9\x76\x19\x3e\x5a\xeb\xc9\x45\x91\x6f\xe7\x66\x21\x6e\xb2\x4e\x49\xd1\x2b\x68\xa2\xbf\x92\x3b\x8c\x25\xb7\x66\xc2\xe8\x64\xc9\xad\xcc\xea\x6f\x87\x25\xb7\x85\x00\xb7\xc9\x92\x3b\xbd\x98\xde\x4e\x27\xe7\xd3\xff\x53\x2b\xf1\xe7\xc9\xf4\x76\x7a\xf1\xfd\xfc\xfd\xe5\xf5\xfc\xfa\xec\xe6\xf2\xee\xfa\xf4\x6c\x37\xed\x55\xb3\xf5\x5e\x05\x3f\x62\x61\x3d\x27\xec\x36\x00\x6a\x60\xb0\x01\xe9\xdf\x94\x1f\x17\x56\x95\xd9\xcc\x89\x5c\x8d\x60\xa3\x9e\xb0\xb3\x3c\x9f\x6e\xf8\x4a\x5c\x95\x69\x0a\x70\x2a\x8c\xec\x39\xcd\x05\x5c\x3c\x47\xec\x4a\xc5\xd3\xe0\x3b\x08\x47\x6c\xed\x06\xd4\xcf\xe3\x38\x17\x5a\x63\xf5\x23\xaa\x3f\x00\x0f\xb9\x50\x47\x02\xcf\xf1\x07\x9e\xa4\xe6\xfe\x76\xc2\xbe\xe3\xd1\xbd\x5a\x2e\x31\x7c\x66\xe4\x02\xa7\xd8\x2f\xa5\x2a\x38\x13\x9f\x22\xa0\x7a\x6b\x5f\x27\xe7\x6a\xf5\x2b\x40\x95\x7b\xb8\xa7\x3a\x2e\x29\x90\xea\x6e\xde\x7e\x9c\xb7\x0b\x02\xea\xe5\x07\xfc\xf4\x3d\x7e\xd9\x6e\xa0\x2c\xd2\x67\x08\x8f\x3f\x57\xab\xf6\xc4\x43\xa0\x5d\x53\xb6\x24\x72\x24\x44\xc4\x2e\xa2\x56\x4c\x27\xf2\x7e\x26\x7f\x5e\x0b\xc9\x54\x99\xe3\x4f\x70\xcd\x37\x6a\x66\x5a\xea\xb5\x80\x34\xd5\x23\xf6\x28\xd8\x86\x6f\x51\x6d\x86\x3b\x81\xcb\x96\x02\x4b\x06\x4e\x11\xf3\x75\x9a\x48\x23\x2d\xb2\xc4\xc6\x25\xd4\xa7\xfe\x39\x6e\x5c\x96\xe8\x90\x1f\xce\x43\xbc\xeb\x3c\xad\xe0\xf3\xc0\x54\xe6\x71\x93\x16\x20\x44\x92\x1b\x92\xca\x2a\x75\x5f\x66\x9e\x12\xf5\x95\x75\x4e\xc2\x70\x3f\xa8\x24\x66\x71\x99\xa5\x49\xe4\xe4\xee\xa3\xca\x3b\x79\x9f\x31\x80\xa6\xff\xa9\x53\x0f\x0b\xdb\xd5\xb1\x96\xe8\x9c\x00\x49\xb7\x83\x01\xfa\x85\x39\xb0\x59\x22\xa3\xb4\x84\x34\x73\xa5\x16\xf9\x91\x4b\x1d\xed\x62\xfd\x7e\xfb\x24\xd9\x9e\x84\xf3\xf0\xb0\xb6\x30\xe8\x3c\x55\xab\x24\xe2\x69\x08\x6e\xf6\xa8\x08\xc7\xc2\x6b\xb7\x3d\x25\x13\x86\x38\x08\xdb\xa0\x4e\x22\xad\x2c\x17\x40\x04\x3d\x07\x51\x3e\x27\x71\x77\x48\xbb\x97\xcc\x5c\xd0\xb1\x5d\x21\x47\xae\x75\x2f\xd8\x13\xce\xd7\x6d\x33\xb1\x81\x8a\x89\x29\xfc\x99\x7a\x94\x22\x07\x0d\x16\x60\x1f\xa6\xa7\x52\x81\x6e\xe2\xb2\xb3\x39\x7c\xb2\xcd\x4e\xb8\x74\x40\x6c\x8c\x9c\x5d\x25\x0f\x42\x7e\x7e\x52\xf3\xa0\x82\x88\x47\x6b\x31\xb7\x7a\xf9\x73\x8b\x2c\x77\x00\x0c\x14\x56\x36\x4d\x4a\x28\x4a\x9d\x7b\x13\xae\x4e\xd8\xe2\xa6\xec\x42\x47\xe2\x8e\x88\x2c\xd3\x88\x79\x2c\xa2\xfb\xcf\x2e\x9a\x3d\xc8\xca\x36\x84\x71\xf6\x4e\x44\xf7\xec\xee\x7a\x8a\xd1\xc0\x49\xc1\x8c\x28\xd0\x6b\x9f\xf6\xa9\xf3\xee\x56\xf0\xd5\x0b\x50\x58\xf5\xcd\x5b\xe5\x53\x15\xb8\x6c\x7d\xa6\x41\x04\x88\x82\x78\x49\x23\x24\x29\x96\x06\x80\x60\xbc\xb0\xd9\x8c\xc0\x10\xcf\xf4\x06\x92\x17\x95\x45\x90\xf1\x2f\xe5\x0b\x91\x76\x10\x77\x66\x2a\x9e\x5b\x3f\xc9\xa1\x60\x9e\x46\x59\xd6\x8e\x41\x5e\x47\x1b\xc7\xc0\x8d\xc6\x7a\x4b\x2f\xb2\xfb\x6f\x74\x40\xaf\xa1\x42\xfe\x70\xb8\xd7\x73\x0d\xe1\xdd\xcb\x64\x65\xbd\x6d\xc9\x92\x52\x2c\x61\x40\xbf\xd1\x83\x41\x5e\x9a\x92\xae\x54\x4c\x30\x3d\xc7\x85\x67\xb4\x20\x41\xd6\x13\x8f\xab\x08\x9b\x60\x71\x80\x50\xaf\xd9\x11\x82\xc7\x4c\x2d\xc9\x9a\x98\x65\x69\x02\xcc\xd0\x31\x92\xd0\x03\x7b\x86\xae\xa2\xe3\xc3\xd2\x6c\x63\x03\x92\x8f\x2b\x0b\xc4\xeb\x4a\xc6\x0b\x02\x03\x23\x18\xe6\xc0\x06\x37\x7f\xe0\xdd\x64\x6a\x2f\x9e\x31\xad\xa3\x3d\xce\x9b\x5c\xa5\x84\xad\x90\xf6\x91\xad\x00\x8f\x75\x1b\x90\x1f\xf1\x34\x2a\xc9\x4f\x06\xe9\xf2\x6d\x16\xfc\xdd\x08\x42\xef\xf5\x33\x13\x5d\xb5\xfa\xd7\x95\xcc\x43\xb3\x2b\xba\x00\xad\xa7\xda\x14\x76\x9b\x17\x57\xa9\x5a\xc0\xca\xe9\x46\x09\xee\x38\xb1\x8c\xb8\xce\x93\x78\x88\xbe\x63\xc7\xe4\xd2\x7d\xba\xab\x81\x97\xd6\xf4\xe3\x6a\xb2\xeb\x9e\x51\x22\x83\x1a\x73\xe3\x30\x0a\x84\x25\x65\x55\xad\x5e\x4f\x0a\x4a\xe3\x01\xcb\xca\x9d\x4f\x1d\x76\x86\x6a\x5f\x0e\x9a\xe8\x26\x53\xcc\x9e\xb1\xf4\xe4\x32\xbb\x27\xf9\x00\xba\x0f\x14\x65\x8e\xf3\xa3\xdb\xb2\x28\x63\x11\xcf\x9f\xd0\x87\x33\xfa\xb6\x5f\x5f\xdc\x48\x63\xf3\xc0\x06\x28\x8f\x8c\xaa\x10\xf3\x3c\xf6\xfd\x18\xc1\x7e\x8f\x78\x06\x66\x78\x70\x6b\x3c\xbc\x1d\xdb\x3a\xae\x7d\x74\x91\x91\x97\x18\xf3\x8f\xf8\x6d\xd5\x92\x03\x67\xdf\x3a\x72\x8b\x14\xe1\xdd\x66\xe5\xf8\xe5\x5a\x89\xbb\xe9\xb5\x76\xeb\x2b\xcc\x0a\xf0\x43\x16\xd7\x4b\xc8\x8e\xb2\x50\xde\xdb\x03\xfd\x99\x02\xed\x70\x18\xd1\x07\x02\x72\x1a\x77\x20\x45\xac\xfa\x6d\x85\xd0\x00\xfc\xf1\x20\x04\x74\x96\x0b\xeb\x37\xdc\x8a\xc2\xf1\x3a\xa4\x36\xaf\x20\xb8\xc5\x5c\xaf\xab\xc4\x36\x96\xbb\xc2\x91\x91\x81\x13\x8b\x54\xfd\x48\x6d\x32\x25\x01\x96\x84\x51\x6a\x33\x49\x85\xdb\xec\xf0\xce\xb3\x56\x09\x75\x1c\x91\x41\x13\x03\x67\x84\x56\xe9\x03\xb9\x50\x83\x24\x26\x90\x57\xd2\x34\xf0\xd4\xdc\x0d\x55\x8e\x04\x5b\xf6\x64\x87\x48\x80\x5a\x8a\xf4\x5c\xac\x12\x5d\x88\x30\x3a\x34\xfc\xfe\xd9\xb2\xd9\x56\x8c\x27\xbb\x86\xbe\x33\x9b\xed\xbe\x5b\x90\x91\x4f\x03\xda\xb3\xcd\x44\x3c\x75\xdf\xed\x5e\x0c\xb5\x00\x7e\x2f\x0e\x2b\xe7\x1d\xae\x01\xbc\xfd\x69\xa4\xfa\xd2\x2e\xfd\x88\x9b\x24\x22\x61\xe2\x1e\xd0\x68\xa6\x68\x55\xf2\x9c\xcb\x42\x08\x3d\x93\xe4\x78\x46\xca\xba\x90\x95\xa5\x06\x84\x74\x77\x9b\x48\xe9\x02\x19\xa0\xe0\x93\x25\x4f\xd2\x32\xef\x34\x37\xe0\xaa\x7c\x12\xed\xc4\xae\x51\x3a\x85\x62\x59\xdb\xa4\xb9\x00\xe6\x60\x17\x39\xd6\x94\xba\xdb\xb8\x1a\xdf\xdb\xd1\x05\x7b\xb8\xf4\x9f\x6f\x67\x6b\xee\x88\x69\xfe\x46\xcf\x33\x35\x40\xe2\xfd\xf8\x8d\xbe\x52\x1d\xd1\xe0\xfa\x97\x86\x4d\x74\x07\x7c\xe2\x97\xae\x84\x2c\x5c\xdf\x83\xe7\x71\x9f\x29\xa6\x17\x1b\xe7\x5e\xff\x64\xa7\xec\x82\x55\xbb\xe6\x32\x4e\x8d\xca\xcb\x8b\x3a\xef\xb5\xc3\x79\x9b\x2b\x51\x61\x85\x63\x77\x50\x1f\xc4\xc8\xcc\xa3\x46\x80\xe5\xbe\x71\xaa\x45\x66\xee\xc4\x52\xd6\x6a\xa9\xc6\x4b\xb6\xc5\xe9\x78\x1d\x86\xd2\x20\xbb\x0d\xfb\xab\xeb\x2f\x67\x61\xdb\x3f\x93\xfa\x52\xdd\x6b\xcb\x64\xf5\x1b\x30\x24\x7c\x68\x1e\x09\x11\xc9\x1c\x3a\xa8\x5d\x74\xc3\x81\x52\x07\x02\xc9\x8c\xd4\x0e\x19\xc7\x67\x92\xd2\xc1\x23\xba\x00\xdc\xca\xc8\xb7\xa6\xd9\x5b\x17\x5d\xfc\xf6\x77\x96\x6d\x6b\xcb\x96\xb0\xa8\x80\xd2\x4e\x45\x51\x99\x83\xeb\x9f\xcc\x93\x4c\xe0\x21\xac\x07\x11\xc9\x80\xea\xe1\x00\x5b\xa8\x27\xb6\xa9\x49\xce\x1e\x5d\xe9\xd4\x2d\x98\x21\x31\xb1\xbd\x3b\xf4\x29\x5f\x59\xae\x0b\xa6\x0b\x91\xb5\x8a\xdf\x8a\x76\xb9\xcd\xc4\x44\x4a\x55\xd4\xe3\x53\x06\xeb\x97\xdc\x95\xd2\x73\xeb\x0c\x38\x8c\x26\x81\xc9\xe8\x0f\x37\x97\x17\x2c\xe3\x5b\xc0\x3e\x16\x8a\xe1\xab\x40\x38\x5a\x17\x54\xfb\x66\xa0\xda\xf9\xaa\x54\xc1\x31\xb5\x20\xea\x76\xff\x04\xd5\xd8\x54\x16\x61\xcd\xd0\x92\x34\x32\x2b\x57\xe9\x51\x96\x72\x19\xc0\xdb\xf5\x98\xd5\xaa\x0f\xf1\x0c\xce\xb3\x49\x88\x31\x68\x00\xd8\x2b\x68\x2d\xe4\x65\x2b\x00\x1a\x78\x77\xec\x82\x3a\x0c\xc2\xd0\x29\x23\x76\x02\x3b\x3f\x60\x16\x18\xcc\x89\x80\xec\x19\x16\x96\xe1\x90\x3d\x5c\x03\xe8\xb6\x93\x01\x9c\x47\x29\xd7\x7a\x27\x4a\xe7\x45\xa8\xe4\x83\xa8\xc5\xfd\xe2\xab\xda\x4e\x84\x11\x02\xb7\x09\xde\x4b\xdd\x63\x60\x4b\xb0\xa2\xcb\x27\x7d\x0b\xf4\xfd\x20\x1b\x04\x41\x1f\x88\x2f\x0a\xbe\x47\x26\xc8\x7b\xb1\xb5\x16\x2e\x12\x55\x7c\x23\x46\xce\xd8\xea\xac\x89\x01\xe8\xaf\x59\xf0\x4c\x02\x2a\xf6\x7d\xd8\x3c\xf6\x5e\xa9\x11\xe2\x33\xa9\x72\x8e\xc5\xf2\x10\xe1\x34\x93\xef\x95\x1a\x73\x77\x89\xa5\xf6\x93\xb8\xa9\x57\x48\xa8\x28\xc0\x1c\xd6\xa6\xb3\xff\xde\xfc\x21\x91\x98\x9e\x30\xd9\x98\x0b\x14\x8d\x13\xac\x28\x68\x90\xcd\x86\xaf\x1e\x35\x8b\x91\x52\xa6\x4c\xf4\x1a\xdc\x2e\xe8\xe7\x84\xfa\xe9\x48\x41\x40\x56\xce\xa5\x36\x7b\x18\x5c\x35\xe2\x41\x90\xbd\xb6\x82\x31\x98\xbe\x3b\x77\xb0\x25\xdc\x97\x94\xba\xa3\x63\xb7\x05\x97\x8e\x43\x2e\xe7\x00\x37\x1f\x40\x68\x47\x06\xce\x0f\x3c\xdb\x15\x0c\x7b\x70\x89\xfb\x66\xc9\x11\x6a\xd5\x6f\x54\x90\xc9\x1c\x72\x18\x56\x22\x62\xc3\xd1\xbb\x93\x07\x9e\x38\xad\x9c\xf6\xfb\x53\xee\xf4\x36\x30\x0c\x14\x15\xfb\x8f\x9b\x80\xdb\xd2\x41\x06\xdd\x5d\xd0\x08\x76\xc8\x10\x07\xa4\x7c\xb8\xa5\xc7\xec\x46\x08\xf6\x11\x46\xca\x54\xf6\x91\x32\x90\x02\x0a\xba\xe0\x49\x6b\x82\x38\x78\x7b\x2a\x97\xea\x30\xf9\x9f\xaf\x1a\x28\xdb\x83\x46\xa5\xbd\x9d\x87\xe2\x78\xc1\xd2\x2f\x5f\x96\x56\xa4\xd7\xc1\x50\x9b\xeb\x2b\x6f\x6f\xa2\x60\x63\xdb\x52\xa3\x92\xc1\x14\x3f\x85\xb8\xae\xb6\x48\x4c\x2f\x47\x48\xc6\x7e\x2f\xd5\xa3\x44\x79\x4c\x35\xb1\xd7\x66\xff\x81\xce\x82\x7e\x21\xd4\x04\x4b\x94\x86\x6f\x80\x1d\x7e\xe2\xfe\x66\x37\xe8\x02\xc7\x36\x43\xea\x30\x0d\xfa\x2e\x25\xfd\x82\x03\xfc\xf5\x64\xc4\xbe\x1b\xb1\xd3\x11\x1b\x8f\xc7\x6f\x46\x4c\xf0\x68\x6d\x5b\x84\x9f\xa0\xe8\x2f\xf8\xca\x94\x4d\x69\x7f\x96\x41\x05\x90\x1e\xd0\xe8\x27\x96\x04\x91\xfb\xb7\x02\xab\x9a\xed\x02\x86\x66\x53\x1c\x19\xc1\x85\xa2\xb5\x4a\x7c\xa3\x00\x79\x2e\x22\x95\x5b\xec\xba\x2e\x54\x6e\x71\xb8\x0f\x3c\xe7\x89\x04\xc6\x0a\xde\x8c\x42\xa0\x9a\x03\xce\x7a\xf1\x89\x6f\xa0\xff\x89\x74\xb4\xbd\x66\x98\x6e\x5d\xfb\x8b\x6d\x46\x7e\xb6\xc7\x3c\x29\x0a\xa3\x90\xe9\x99\xbc\x61\x27\xdf\xb2\x49\x96\xa5\x82\x4d\xd8\x7f\xb1\xef\xb8\xe4\x92\xb3\xef\xd8\x7f\xb1\x53\x2e\x0b\x9e\xaa\x32\x13\xec\x94\xfd\x97\x19\x36\x53\xde\x85\x32\x1a\xd0\x76\xc4\x38\x93\x65\x8a\x8a\xde\x6b\x8b\x71\x7d\xe3\xfa\xc5\xfd\xec\x2c\x44\xf1\x28\x84\x64\x5a\x6d\xe8\x28\xfc\x93\x3b\xfd\x75\x22\x57\xa9\x28\x68\x3d\x54\xd1\xc8\x58\xc1\x11\xf4\xf4\x64\x26\x9d\x9d\xfa\x4f\xa6\xc5\x7f\x62\xff\xc5\x2e\xca\x34\x35\x4d\x32\x82\xc6\x2c\xa4\x13\x66\xa3\xc3\x84\x1c\x3f\x26\xf7\x49\x26\xe2\x84\x43\x7c\x98\xf9\xeb\xf8\x16\x66\x7b\x5e\x7a\x2a\xd0\x70\x4f\xbb\x74\x6c\x87\x88\x9e\x17\xe1\x9a\x70\xc9\x02\x43\x6d\xa5\x13\x84\x12\x7e\x3a\x5c\x09\xf6\x04\xc8\xb4\x1f\xe8\x8e\x82\xa9\xf4\x42\x07\x65\x7b\xfd\x2e\xeb\x57\x66\xfe\xd5\x4a\xff\xd1\x2b\xfb\xd7\xae\xf1\xf0\x6d\x04\xe5\x14\x27\xc7\x07\x67\xc2\x45\x06\x62\x09\x71\xdf\x6d\x21\xe5\x87\x2d\x1b\xaf\x9d\xe8\xde\x36\x57\x69\xd4\x46\x0b\xbe\x1a\xb1\xcc\xe5\x91\xb2\x9b\xca\x39\xb6\x71\x1f\x63\xce\x04\x52\x36\x5f\x5b\x00\x91\x59\xcb\x14\x7f\x78\x1c\xab\x0d\x4f\xe4\x1b\xa8\xc3\x52\xe7\xed\x19\xa8\x96\xeb\xca\xfe\x11\xba\xe5\x3b\xd1\x8c\xdd\xd4\xfe\x55\x65\xa7\x96\xc2\xad\x6d\x3b\x1c\x98\xc3\xcc\x67\x38\xfd\x8c\xd7\xa1\x9f\x1a\x4b\xb4\x77\xee\x03\xca\x37\x56\x61\x4f\x01\x5d\xde\x33\xc8\xf5\xf2\xad\xbb\xcc\x65\x3f\x55\x53\xbc\x56\x86\x58\x25\xbd\x72\xe1\xd6\x1a\x7b\x47\x37\x31\x8c\x7b\x36\x62\x32\x49\x8f\x8d\xa8\x3c\xbe\x50\x52\x30\xae\x75\xb2\x42\xd6\x3b\x30\xa8\x61\x12\x59\xab\x94\xdd\x56\xaf\x0c\x81\x08\x02\xfd\xcc\x34\x09\x11\xd3\x85\x91\xc2\x66\x0a\xd2\xed\x4c\x9a\x2f\x48\x23\x80\xe8\xa9\xc4\x91\xa3\x63\x6d\xc4\x3d\x6e\xeb\xa2\x03\x31\x28\xbc\x65\x81\xed\xa2\x66\x38\x60\xc1\xd1\x4e\x3c\xc0\xe3\x76\x11\x10\x83\x52\x69\x96\x35\x0a\xe1\x34\x0b\x91\x2a\xb9\x32\xab\xa2\x4b\x08\x83\x14\x78\xa6\x26\x60\x61\x9d\x2d\x30\xca\x0a\xbd\x42\x53\x62\xf4\x94\x24\xf6\x26\x35\x5d\x2e\x8c\x1e\xe7\xbc\x3d\x4e\x1b\xa1\xce\x75\xf1\x54\x1c\x06\x5b\xba\x33\x32\x58\xe5\x16\x38\xe7\x3c\x89\xa8\xb8\x78\x0e\x27\xec\x51\x17\x42\x23\x1f\x64\xca\xe9\xf0\x6c\x8f\x98\xca\x91\xbe\xd3\x7a\xb0\x1d\xff\x56\xb3\xf6\xee\x2d\xbd\x33\xda\xa3\xdd\xf6\x49\x7e\xd2\x06\x5f\x48\x8f\xdd\xf0\x6b\x06\x7e\xf4\x09\x07\x79\x3f\x99\x9e\xd7\xde\x6b\x86\x83\xb4\xc4\x8c\xdc\x4e\x3f\x9c\xbd\x9b\x5f\xde\xdd\x36\xde\x33\xa5\xd1\x4f\x7b\x22\x42\x3a\x47\xef\x39\x30\xf1\xbf\x60\x0e\xb3\xb9\x5a\x5a\x7a\x80\xfe\xc7\x73\x23\x8b\x5c\x3f\xe8\x65\x11\xdc\xae\xc3\x6c\x6b\xcd\x85\xd3\x49\x72\x22\xe7\xe4\x6b\xed\xd7\xd8\xfa\x80\x5d\xca\xf7\xf8\xf9\x95\x4a\x93\x68\x37\x92\xdb\x1e\x96\x46\xab\x6a\x42\x63\x17\x02\x42\x1b\xc8\xe0\x4b\x8d\xc2\xfb\x59\x21\xa2\xc2\x63\x09\x9a\x9d\xfb\x7f\x1a\x3d\xba\xdf\x02\x83\x76\x58\x37\x6c\x90\x9c\xdc\xa1\x13\xe0\x64\x07\xd6\x68\x48\x96\x82\x5a\x2e\x58\x76\x41\xe6\x45\x9c\x7c\x4e\x95\x91\x87\xe3\xe1\x71\xad\x52\xb2\xc7\x22\x03\xf7\x4c\x66\x22\x8f\x14\xa0\x2e\x91\xdc\x45\xb1\x68\x9d\xa4\xb1\xcf\x48\xf6\x1a\xc2\x54\x00\x4c\xfe\x86\x92\xeb\x0a\x87\x9e\xb1\xc5\xef\x38\xf3\xed\xb2\x7b\x87\xbb\xfb\x20\xe4\xd9\x73\xe2\xce\x77\x2d\xfb\x9f\x09\x1f\x8d\x43\x41\x9c\x79\x35\x1c\x04\xa8\xfd\x61\x7b\x06\xb9\x74\xcc\x61\x4f\xc9\xa6\x22\x7f\x6d\x2e\x6a\xf3\x4a\xcb\xac\x3e\x94\xc0\xa4\x8e\x76\x74\x04\x01\x6a\x01\xcd\xd9\x08\x8e\x9a\xa0\xe7\x35\xa6\x49\x9d\x49\x8f\xfc\x78\xa5\x43\xad\xb0\x75\x9e\xd1\xfa\x6e\x91\xed\x23\xf6\xaa\xd2\xd1\x57\xc0\xb4\x2d\x15\xd4\x47\xde\xf9\xca\xd0\xc0\x72\x1d\xb1\xa4\x98\x49\x73\x67\x33\x2b\x33\x17\xa9\x78\x30\xad\x0b\xbd\x43\x84\x57\xb4\x96\x13\xdb\x6d\x08\x8e\xe2\x96\x53\x83\x96\x0d\x6d\xc2\x3c\x64\x6c\x46\xb7\x74\x2c\xb4\xd1\x5a\x21\xd7\x94\xf8\x64\x36\x40\x02\xce\x4f\x04\xb6\xc5\x42\xda\xf6\x01\xde\x0d\xf3\xfc\xcf\xe4\x74\x09\xc4\x06\x40\xa7\x10\xc7\x68\x83\xb0\xd9\x87\x1c\x7d\x66\x42\xde\x20\x45\x16\x19\x3b\x11\x94\x1b\x1a\x77\x92\x78\x10\xf9\xb6\x00\x93\x3e\x8c\xab\x14\xbc\x58\xb3\xa4\x18\x01\xef\xa9\x95\x94\x33\xc9\xe3\x98\xe2\xc1\xb1\xb8\xe0\x3a\xdb\x39\xcf\xf4\x7c\xa1\x1e\x76\xa9\xd5\x87\x22\x77\x71\x57\x67\x29\x97\x73\x3c\x41\x7e\x05\xec\x6e\x90\xb6\xbb\x0b\xc4\x51\x2e\xe6\x8e\xab\xed\x59\xda\xe9\xe4\xfd\xb5\x85\x2e\xd3\xd5\xa6\x5c\xd8\x8a\x46\x15\x68\xf6\xc2\xd3\x7a\x38\x2b\x1d\xe1\xa6\x72\x66\xb1\x25\xfd\xa5\x80\x87\xf5\xf2\x1a\xc6\xca\xae\xd6\x7d\xb8\x5e\xbb\x02\x7e\xab\xc8\xcb\x3e\x33\x5f\x3b\x43\xea\xd3\x3e\x1c\xf4\xd7\xd0\x10\x9f\x04\xfc\xdb\xd3\xac\x97\x05\xff\x75\x5a\x71\x9a\x20\x40\xdb\xdb\xc0\xbf\x4f\xa1\x03\x68\x85\x75\x06\xb4\xf6\xb4\xec\xe1\x2d\x50\xb5\xe0\xe3\x9f\xd3\x43\x01\x72\xaa\xaf\x9d\xc6\x13\x8a\x40\xbb\xc6\x6c\x2a\x99\x55\xf7\x46\xec\x15\x2e\x2c\xfd\x8a\x0c\xd0\x94\xdb\x9f\xc0\x32\x31\xed\x1e\xa2\x60\xa8\x83\xcc\x30\x10\xce\x6f\x37\xf4\x03\xee\xe4\xeb\x7d\xd1\x71\xf9\x2e\x81\x40\xbc\xa7\x70\xad\xa0\x0f\x79\x81\x05\xd8\x38\x92\xc0\x14\x4a\xdd\x05\x5f\x86\xef\xb0\xf5\x76\xb2\xef\xec\x87\x66\x88\xb2\x92\xce\x53\xfb\x9c\xa9\x7c\x26\x6d\x69\x64\x90\xd6\x98\x20\xb0\x5e\x54\x10\x17\x44\x3a\x7f\xb0\x52\x01\x0a\x60\x73\x42\x42\xaa\x51\x4f\x2a\x5e\x97\x02\x80\x82\x5a\x38\x04\x2a\x64\xa1\xf0\xb5\x19\xc5\xc3\x2c\xf0\x0d\x1e\xf3\x75\xe2\xe1\x34\x35\x83\x92\x14\x96\xe7\x38\x88\xd9\xd3\x25\xb0\x75\x2f\x4b\x23\x8c\x02\x4a\xf3\x99\x34\x83\xc7\x96\x09\xc4\x6e\xd0\xb8\xcc\xe4\x07\xa5\x2d\x45\x8c\xf6\xe3\x61\x81\x05\x34\x6c\xaf\x5c\x6a\x4c\xfa\xe1\x1d\x1c\xda\xe4\xf1\x41\xb2\x37\x77\xb4\x40\xb0\x26\xf1\x3c\x6d\x55\x99\xfb\x4e\x45\x5c\xce\xe4\x5f\xcd\xf0\xc0\x75\x8a\x4b\x3b\xad\x6a\x89\x5b\x18\x66\x10\x5c\x65\x1f\xb1\xd0\xd7\xbf\x7b\xf3\xf1\x0d\x06\x57\x95\x1a\xb2\x11\x8f\xaa\x07\x88\xcb\x6e\x51\xa6\x29\xe0\x10\x6c\x0f\x1c\xc3\x92\xaf\x62\x27\x0e\x8f\x2e\x75\x73\x59\x55\x31\xfa\x6c\xf4\x7e\x66\xfd\x09\x8b\x78\x11\xad\x8f\xac\x2e\x47\x62\xcc\x9e\x7e\x34\x7d\x18\x05\x65\x34\x2d\xd6\x9a\xe0\xc1\x5c\x38\xf3\x8d\xa3\x9c\xad\xac\x17\xd3\x05\x30\xff\xdf\xd6\xb3\x9d\x39\x46\x6c\x5c\x9c\x88\x03\xaa\xea\x79\xee\x75\x9b\x6b\xd4\xdf\x38\xc9\x47\x22\xf9\x46\xc4\xec\x15\x84\x01\xbf\xb2\x93\x3f\x93\xd9\x62\x9c\x6e\x97\x05\xf1\x16\x9a\x41\x19\x43\x56\xbe\x3d\xa7\xdc\x3c\x6e\x5e\x93\xf6\x0c\x76\xe7\x45\xab\x5d\xd7\x71\x63\xe3\x6a\xea\xaf\xb0\xa0\x8d\xcb\x8d\xce\x4d\x15\x13\x58\x4d\x0f\xc2\xf5\xfd\x88\x2d\x72\x2e\x21\xa1\x52\x1c\x2a\x55\x7e\x77\xc2\xe5\x19\x49\x01\x6d\x5c\xa0\xe4\xe9\x16\xe2\x7f\x46\x33\x89\x0c\x8a\x40\xb5\xbf\x8d\xd2\x24\x62\xab\x9c\x67\xeb\x9a\x1e\x24\x1e\x84\x2c\x20\x2f\xf7\xb5\xe0\xfa\x30\xac\x46\x5e\x2f\x81\xf5\xf6\xa6\x4d\x24\xdc\x3e\xb8\xac\x71\x5e\x43\xf3\x3a\x8e\x16\xc0\x67\x8a\x78\x3e\x8c\xef\x6a\x2f\x2b\x73\x85\xeb\x93\x88\xe7\xc0\xff\x6c\x3a\xc7\x6c\xad\xfb\xc0\x0f\x38\xae\x44\xc5\x64\x11\xbd\x87\x02\x36\x1c\xb5\xd3\x41\x04\xbd\xd3\xaa\x16\xc9\x3d\x67\x95\xb7\x9b\x93\xdb\x0f\x2d\x15\x36\x0c\xc2\x09\x8e\x11\xe5\x4d\x05\xf2\x4e\xf6\xc7\x72\xa1\x52\xcb\x7e\x3a\x7d\xc7\x54\x0e\x89\x87\x0a\x45\x3f\x25\x71\x97\x76\x90\xc8\x58\x7c\x3a\x88\x82\x68\xf7\x41\x6f\xd5\x66\x53\x4d\x90\xdf\xa6\xde\x59\x90\x4e\xb9\x30\x87\x70\x61\x6f\xc6\x8d\xb7\x74\x1d\xaa\x3c\x49\x8b\x35\xe0\x87\x31\x44\xc7\x0f\xea\x86\x6f\x59\xb4\xe6\x72\x15\x98\x26\x00\xce\x29\x32\x95\x63\x82\xde\x07\xe0\xfa\x54\xb9\xa5\x78\x20\xe2\x02\x8a\x13\x72\x6e\x0c\x84\xe7\x2b\xcb\x4e\xc0\x57\xab\x5c\xac\x20\x8c\x75\x26\x2b\xd4\x2b\xc0\x73\x6a\x73\x03\x61\x3d\xbb\x98\x2b\x9e\x87\xfe\xa9\xeb\x36\x58\xe4\x5b\x17\xf7\x4f\xd9\xad\xfd\x7e\xae\x0f\xeb\x88\x25\x62\x3c\x62\x5f\xf9\x90\x04\x11\x29\xe9\x88\x03\x3a\xa2\xc6\x6b\x26\x7f\xb6\xe7\xea\xd0\xe4\x89\x6a\x6f\x3b\x3c\x6b\xe4\xc8\x6e\x5d\x34\x3b\x99\x17\x0a\x5e\x94\x03\xce\xa0\x53\x5e\xf0\x54\xad\x4e\xcd\xc7\x37\xf8\xed\xae\x75\x7d\x8a\xf1\x02\x96\xa3\xcf\xbc\x6f\x4e\x4e\x53\xb7\xe7\xf0\x6f\x1b\xeb\xbd\x06\xe4\x54\x75\x1b\x90\x9f\x43\x55\xb7\x44\x4c\xfb\x6d\xc8\x69\x07\xb9\xd0\x8e\x3e\x0d\x35\x11\x5b\x54\x3f\x05\x26\xe9\xfa\x35\xb6\x45\x02\x64\xb9\x8a\xcb\x48\xc4\x66\xe7\xc2\x7d\x08\xf1\x50\x8e\xe3\xa8\x22\x24\xdb\x0e\xda\x0a\x51\x1b\x9c\xba\x9f\xcb\xe6\xd0\x8b\x1b\xdf\x0d\xff\x5d\x87\xbd\xc1\x6a\x7c\x6d\x83\x1e\xee\x4f\x1c\xa7\x7c\xe0\x39\xe5\xaa\xaf\x32\xda\xab\x3c\x59\x25\x92\x17\x2a\x67\xaf\x1d\x93\xc1\x1b\x97\x06\xaf\x5b\x43\x18\x28\x26\x2a\x43\x84\x62\xe2\xb3\x2a\x1e\x6d\x8b\xd4\xbc\xa5\x0b\xbe\xc9\x42\x8e\x68\xb0\x02\x07\x23\x93\xe2\x20\x38\xdd\x04\x6c\xa7\x89\xf6\x51\xbb\x33\x49\x1e\x07\x9c\x37\x95\x87\x49\x0e\x3a\xcf\xe6\xac\x2c\xe6\x4f\xe4\x3d\xc3\x8f\x87\x19\x9e\x08\x04\xf1\x81\x67\xbb\x99\xa4\x38\x99\x1c\x30\x6c\x91\xcc\x11\x5e\x53\xa9\xae\xcf\xdd\x69\x84\x06\x32\x5b\xd7\x1d\xf7\xd7\xe7\xd6\x51\xe4\xef\x83\x95\x0b\x16\x4c\x04\x52\xea\x62\x18\x18\x5e\xed\x9d\x58\x33\xa7\xb8\xa5\x9f\x3a\x4d\x55\x19\x33\x12\x6a\x04\x02\xc8\xc7\x78\x3a\x02\xc7\xf5\x78\xdc\x15\xd6\x36\x30\xbd\xb9\x93\x3f\xf0\x5d\xfb\x0e\x84\x67\x1d\x12\x78\xe7\xd6\xa7\x91\x7d\xb1\xa9\xa7\x91\x86\xb9\x77\xe2\x78\xd0\xdc\x3b\x2b\x38\x10\x6e\x0e\x33\x90\xc2\x7d\x34\x89\x53\xd8\x6f\xa1\x03\xa1\x85\x12\xbc\xe2\x98\xd5\xf7\x07\x57\x67\x59\x28\x76\x57\x95\xf1\x5c\xc8\x62\x0e\x35\x0e\xab\x0c\x2a\xb9\x82\xcf\x2b\x0a\x53\x2f\x43\xf0\x9f\x6f\x15\xda\xf7\x2d\xbb\xd6\x5f\xd8\x0d\xd9\xb4\x8c\xbc\x4a\x00\x42\xac\xef\xd9\xeb\x04\x10\x4f\x81\x2f\xd4\x4d\x5c\xc7\x74\x51\x87\x9e\x30\x7a\x41\x87\x2a\xa2\xbd\x57\x87\x7c\xeb\xc1\x55\x0d\xa5\x90\x79\x8f\x38\x01\x8c\xa8\xb5\xbf\x05\x19\x37\x2e\x2a\x7f\x03\x3b\xb2\x99\xbf\x94\xfd\x4d\xe4\xca\xc7\x7f\xa1\xb1\x2a\x2c\x78\xa7\xbe\xfe\xf4\x64\xe1\xa8\x8f\x63\x9a\xea\x30\x4f\x2b\xfc\x42\x04\x66\x68\x51\x58\x6c\xed\x75\xa4\xc3\x85\x94\x89\x68\xde\x91\x94\xa7\x57\x53\x82\x8b\x67\x98\x64\x27\xa9\x1d\x66\x76\x83\x1e\x83\xbd\x82\x02\xab\x36\x3c\x23\x74\x21\x01\xc9\xeb\xce\x9b\x31\x74\xe2\xcf\x7f\xfa\xcb\x38\xe9\x08\xf1\x86\xa6\x0f\x05\x6b\xb9\xc6\xbf\xcf\x13\x21\x63\x70\xc6\xf2\xb8\x99\x2f\x4e\x56\xac\xf3\x15\xf1\x6c\x96\xe1\xb3\xc4\x83\xb7\x1f\xb5\x7a\x8e\x8b\xe8\x33\x78\xf4\xbd\x90\x75\xdb\xb7\xe2\xef\xeb\x52\x25\xf4\x3c\xde\x4a\xbe\x49\xa2\xcf\xda\xc6\x6d\x22\xd2\x18\x9a\x48\xb5\xef\xf3\x4a\xc5\x22\xba\x1f\xaa\x13\x3c\x39\xdb\x85\x88\xee\xd9\x0f\xb7\x1f\xce\x31\xb9\x71\xa2\x67\xf2\x82\x17\xc9\x83\xb8\xcb\x53\xe7\x0e\x20\x90\x76\x9e\xda\x3d\x52\x65\x5f\x0f\x98\xbe\x2c\x55\xbb\x55\x1c\xc2\xe4\x18\x9b\xed\xd1\xa2\x8c\xee\x45\x71\x9c\x73\x19\xab\x0d\x76\xe3\x58\x97\xcb\x65\xf2\x69\x5c\xf0\xbc\x23\x53\x06\xda\x11\x7e\x45\x3d\xd7\xe7\x3f\x2b\xbc\xce\x8b\xaa\xee\x23\x84\x79\x53\x56\xfd\x8a\x72\x8b\x51\x89\x7c\x23\x80\xea\x94\x55\xb3\xcc\x40\x29\x18\x39\x0d\xc9\x58\xb5\xa6\xf8\x09\x45\xa9\xde\x3f\x06\xca\xfd\xc7\xa0\x55\xde\x85\x1d\x36\xca\x27\x38\xdd\xf0\x7b\xbc\x1f\xae\x72\xa1\xf5\x88\x69\x05\x2d\x9e\x49\x1b\x89\x60\xa3\xe5\x00\xf7\x02\x64\xc9\xe9\x96\x45\x2a\x73\x90\x79\xec\xd7\x5a\x3d\x82\x9d\x3e\x8c\x13\x86\x14\xde\xa5\x2c\x92\x94\xf1\x65\x41\x46\x7c\xc8\x0c\x61\x33\xc1\xe9\xf1\x4c\x82\x2b\x36\x82\xee\x03\x44\xc2\xb9\x5f\x5c\x27\x34\x5b\xf2\x28\x49\x93\x82\xf8\xea\x20\xc4\x8c\x9b\xfe\x9a\xf3\xc0\x8c\x65\xce\xb7\x3c\xf5\x17\x2b\x9e\x96\x3e\x34\xfa\x48\x8b\x1d\x7c\xa8\x89\x9e\xa3\x81\xe0\xe5\x36\xb8\x47\x01\x26\xa1\xf3\x01\xb9\xe3\x27\xa6\xf2\x8b\xda\x29\xfa\x4f\xe1\x7f\x2b\xf7\xf0\x5d\x5a\xc1\x01\x17\xf2\x43\x0e\xc7\xe6\x95\xdb\xa5\x4f\xf7\x7a\x46\x12\x5b\x74\x72\x45\x15\xf7\xc1\xc7\xee\x78\x04\x9f\x49\xc7\xa5\x7f\x6c\x93\xde\x35\x6b\x18\x30\x7a\xed\x4a\xe2\x67\x32\x67\x74\x11\xfa\xf7\x69\xbe\xb5\xc6\x5f\x29\x95\x1e\x6a\x91\x27\x4a\x8e\x44\xc9\x39\xe4\x81\x3e\xe4\x3a\x89\x0b\xc0\x19\xb6\xa6\xef\x9c\xcf\xdd\x31\xe4\x57\xb3\xc7\x11\x1c\x8c\x9a\x00\x82\x0c\x1a\xb1\x03\xa7\xae\xb3\x16\xd0\xc5\x40\xbc\x3d\x94\x81\x68\x2d\xab\xda\x37\x5d\x04\x01\x3b\x0b\xf7\x6d\x04\x16\xe1\x5a\x0b\x07\x19\xeb\x30\x6b\x73\xad\x2a\x67\xb8\x0b\xd9\xc6\xdd\x38\x06\x75\xdb\xf1\xdc\x70\x49\x96\x3f\xd2\xe2\x67\x32\xd0\xd8\x91\x11\xcf\x06\x34\xb8\x51\x6b\xb3\xe7\x55\x96\xe1\xc1\xf6\xbc\x43\x52\x4a\xec\x94\x9c\xef\xc2\xe4\x90\x80\x05\x89\xd4\x66\x91\x48\xcb\x49\x41\x46\x6e\xb8\x6a\x4c\x2c\x63\xaf\x73\x48\xd8\x2b\x03\xa6\x0c\xaa\x8d\xbd\x53\x73\x42\xf2\xe3\x50\x64\xed\xbb\x8e\x87\xf7\xbb\xe7\xcd\x7e\xd1\xe1\x69\xac\xf7\xc0\x1c\x20\xe9\x23\xdf\x6a\x48\xa0\x2e\x8c\x54\x5c\xa2\x61\xb7\xda\xfe\x51\xa0\x7e\x58\x36\xe8\x99\x84\x11\x42\xb6\x30\x2b\x48\x8d\x64\x85\x05\x98\xda\x54\xf1\x9e\xe9\xed\x95\x6e\x1f\x9c\x5f\xc7\x57\x93\xef\xf4\xd5\xa0\x13\xfa\xbf\x87\x7b\x66\x87\x11\xf8\x40\x5b\x74\x70\x4c\xa2\xc6\x48\x30\x21\x08\x1b\x73\x2e\xea\x11\xdb\xf0\x44\xd2\x36\xc0\x74\x9c\xb1\x58\x94\xab\x55\xa7\x89\xf4\xb7\xef\x6b\xa9\xee\x93\xff\xf1\xb6\xf0\x9d\x5c\x85\xcf\x61\x2d\x9e\xda\x9a\xd0\x7c\x6d\xee\x7d\x9f\xc7\x40\xfc\x2b\x5a\xe3\x5b\x5d\x62\x8d\x45\xf4\x3c\xd6\xf8\x69\x1f\x6b\xbc\xc5\x76\x41\x80\x1f\x5d\xa7\x2d\xfe\xe6\x1f\x66\xfa\xcf\x63\xa6\xef\xb5\x28\x90\xd4\x67\x9e\x54\x15\xf4\x1d\x2d\x7c\x22\xef\xa5\xa3\x82\x86\x56\x21\xb7\x9c\x91\xee\xb1\x66\x0b\x1e\xbd\x00\x11\x26\x9c\x8e\x87\xdb\x03\xf7\x80\x5f\x6e\xd4\x46\x30\xa8\x4a\x63\x22\x27\x46\x51\x8c\x23\x40\xab\x9a\x0e\x7a\xc4\x08\xe1\x51\xe0\x38\x45\xe4\x4a\xec\x95\xea\xd7\x52\x3c\x32\x73\x5a\x8d\x42\xf8\x5e\x30\x3d\x90\xe1\xef\x8d\xd1\x0e\x2b\x58\x7f\x47\xd8\x91\x8b\x15\xcf\x63\x88\x30\xa1\x2d\x99\xf2\xe8\xde\xfc\x1b\xda\x47\x35\x12\xc4\xd0\x72\x05\x20\xec\xd5\x97\x96\xc8\x08\xa9\x10\x2d\xa7\xbb\x6b\x1f\x7e\xae\x19\x8f\x72\xa5\xd1\x68\xe4\x12\x63\x43\x7c\x35\x28\xb0\x0f\x49\x5c\xf2\x14\x6b\xec\xb4\xb4\x0f\x85\xaf\xd5\x01\x47\x41\x0e\xbb\x26\x9a\x8d\xa6\x03\x19\xaa\x60\x18\xc7\x33\xf9\xce\x39\x4c\x4e\xd8\x9d\x16\x84\x32\xd3\x36\x0b\xc0\xce\x96\xbe\x98\xfa\xd0\xc0\x04\x76\xea\x10\x3b\x06\xc0\x82\xac\x83\x81\xd0\xdd\x23\xb1\x87\x4e\xf5\x90\x49\x19\x4c\x0b\x3d\x0d\x12\xe9\xfb\x61\xc1\x7b\x42\x2e\x78\xbc\x0d\xb9\x18\x13\xc9\xc0\x4b\xc7\x78\xbc\x49\xa4\xd9\x04\x36\x59\xab\x3b\x69\x6c\xde\x06\x84\x1c\x43\x4e\xb3\x34\xad\x09\x41\xcd\xa4\x30\xca\x25\xcf\x93\x74\x0b\xf7\x89\x2c\x17\x47\x41\x3d\xc1\xfc\x50\xc4\x13\x64\xa0\x20\x12\x99\x52\x8b\x65\x99\xe2\xad\x03\xee\xe5\xae\x03\x24\x91\xee\xa6\x23\xa3\x70\x14\x94\x49\x28\xa8\x18\xf3\x73\x3e\x47\xf4\x48\xc3\x5b\x39\xcc\xe3\xe6\xb9\x42\x73\x00\xb9\xaf\xd5\xa3\x0d\x75\x7b\xe4\x1e\xcb\xdc\x75\xba\x3e\x9b\x97\x65\xb7\x1e\x6a\x6f\x80\x56\x4e\x05\x84\x7f\xce\xb5\x46\xcf\x44\xec\x64\x53\x22\xa1\x3b\x94\xe2\xda\x5b\xae\x4b\x8d\x11\x73\x66\x2e\xe1\xfc\xb2\x86\x8e\xaa\xe1\x9a\xb9\xde\x25\x5a\x49\x36\x2b\xbf\xfc\xf2\x6b\xc1\xbe\x84\x10\x42\xba\x8f\xa0\x7f\x0c\xd8\x42\xb1\x74\x10\xd9\xae\x02\x81\x54\xa2\x8d\x19\x61\x6d\x10\x55\x1b\xaf\x0f\x20\x4f\x1e\xad\x99\x2e\x17\x88\x60\xe4\xe4\x62\xe1\xd2\xb1\x8e\x9f\x2b\x00\x23\xe2\xc9\x6e\x5b\xff\xff\x88\x43\x01\x93\xbe\xcc\x64\xa6\x90\x18\x1f\xa0\x9f\x0b\xc1\x36\x3c\xbf\x87\x1c\xbe\x68\x9e\x87\x44\x00\xaf\x13\x31\xae\xba\x17\xde\x54\xda\x43\x0e\x1d\x24\xbc\x66\x79\x29\xa5\x4d\x4a\xc6\x8c\x62\xea\x6d\xfd\xa3\x99\x5c\x94\xe1\xdd\xb3\xe2\x2c\xf0\x4b\x0b\x1c\x06\x20\x6c\x15\x30\x95\x50\xa3\xb8\xf6\xed\x1a\xb3\x1e\x5e\x83\x99\x7c\x66\xb7\xc1\x3e\x83\xdf\x15\xe9\x60\xd6\x98\x17\xc4\x2b\x40\x77\xc3\xbc\xd9\x30\x1d\xb8\xec\x41\xc9\xb9\x82\xe4\xd9\x23\xf6\x43\xf2\x20\x46\xec\x26\xe3\xf9\xfd\x88\xbd\x43\xf7\xdf\x1f\xd4\xa2\xcd\x86\xd7\x20\x94\x38\xd8\x8e\xf7\x34\x33\xd6\x2e\x9a\x97\x76\xed\xff\xe7\x06\x31\x00\xeb\xf2\x7d\xff\xf7\x44\xe4\x75\x70\x7d\xfc\x4f\xb7\x44\xec\x71\x53\xff\x03\xbc\xf6\x3f\xf2\x56\xbc\x9b\xe6\xe3\x9f\xc2\xff\x5a\xf9\x65\x35\x2e\xd0\x3d\x49\xca\xb5\xa2\xd2\x7e\x5b\x81\xcd\x49\x5c\x3f\x94\x9b\xf1\xcd\xfd\xb6\x02\x85\x8f\xc7\x2e\xb4\x7d\x00\xe8\x9e\x3e\xb5\xe3\x75\x9a\x2a\x5d\xe6\xbb\x37\xff\x75\xb5\xd5\xb6\xf6\x16\xa2\x57\x58\x6c\x9b\x85\x00\xd6\x82\xbe\xf0\x13\x7c\x6d\xfe\x57\xb5\x98\x03\xd6\xea\xb0\x1d\xde\x56\x9c\xa3\x8f\x56\x51\xa5\xa9\xfe\x84\xbc\xc9\x04\xf0\x5d\x79\x55\xd4\x3b\x04\x6a\x2b\xcc\x99\x46\x66\xd2\x32\xee\x63\xc4\x6c\x9e\x0b\xa0\x06\xcf\x05\x24\x7a\x64\xc4\x70\x98\x6e\x03\x8d\x28\xb8\xf9\x78\x50\x4c\x18\xe5\x06\xc1\xaa\x74\xdf\x5a\x08\x21\xdd\x68\x0f\x51\x25\x80\x06\xbb\x36\xfa\x84\x76\x7b\x14\x36\xf1\x42\x47\x52\xda\xc6\x77\xc1\x5d\x10\x54\xee\x95\x28\x02\x69\x5e\x53\x2d\x2a\x5b\xb3\xe2\xa1\xfa\x4d\x21\xfe\x5b\x7d\xd0\x35\x72\xae\x8a\x01\xa5\x97\x4f\xef\x39\xec\xe5\x57\xbc\x58\xe3\x85\x76\xa3\x0a\x81\x32\x13\x59\x82\x70\xbd\xa0\xd5\x79\x91\xaa\x05\x64\x58\x2c\x76\x30\x48\x46\xb4\xb5\x7b\x0d\x5d\x73\xc2\xfa\x48\x06\x23\x4d\x20\xd2\x36\x17\x1a\x08\x57\x9a\x5e\xaa\xbe\xf8\xe4\x61\x97\xee\x66\x73\x8d\xd0\x7f\xd7\xb8\x6c\x37\x53\x72\x98\x6d\x0d\x60\xd5\xb3\x27\x44\xd0\x34\x12\x9c\x10\x55\x35\xb9\x81\x91\xad\xb6\xd6\x5f\x9b\xc8\x7f\x26\x27\xf8\x24\x38\x04\xb8\xcf\xb1\xe5\xf0\xa0\x94\xb3\xd9\xed\x3f\x0c\x5f\x65\x93\x10\x81\x48\x16\x82\x91\xb7\x65\xc2\x65\x60\x04\x51\x8d\xb2\x48\x72\xc1\x24\xa0\x10\x66\x52\x97\x8b\x23\x4f\x4c\x62\x6e\x71\x0f\x40\xa6\xa3\x45\xc6\xe1\x2a\x03\x7c\x45\x47\x2d\xc7\x30\x5a\x26\x7d\xae\x1c\x4b\x1f\xc8\x53\x12\xfe\x10\x2b\x89\x91\xf1\xae\xef\xae\x1c\x73\x59\x83\x5b\xb4\x85\x2b\xe1\x61\xb7\x4b\x5e\x40\x36\x2f\x88\xc0\xbc\x46\x14\xc5\xaf\x7d\x80\x87\xde\xd0\xbe\x47\x37\xf8\xd3\x66\xf2\x5f\xed\xd9\xd0\x0d\x2a\x1e\xb0\xd2\xcd\xc8\x98\x23\xaa\x13\xec\x5c\x69\x9b\xbd\x42\x06\x4a\x60\x77\xa3\x1a\x4b\xbe\xad\x54\x6e\x71\x2d\x61\x4a\x17\x45\xe1\xb2\xf0\xf4\x21\xd1\x01\xd9\x3b\xd4\x76\x23\x04\x3b\xc9\xc5\xf2\xe4\x63\x2e\x96\x73\x3b\xd3\x63\xe8\xd0\xd8\xf4\xa8\x49\xf9\xde\x73\x71\xe8\x4c\xc9\x76\xf2\xc3\x3d\xd4\xa8\xb5\x2e\x61\x39\x41\x9f\x92\x25\xf3\xd9\x6d\x4d\x7f\x80\x01\x42\xc4\x75\x2e\xfa\x46\xcb\x3e\xfb\x31\xd7\x85\x04\xeb\x01\xb5\xea\x48\x82\xfa\x3f\xff\x78\xab\x8c\x59\x9f\xe3\xed\xb6\x0a\x99\xb1\xc2\x9e\x4b\x77\xe0\x75\xe3\x42\x3f\x2f\x3a\x1d\x26\x50\x67\xfc\x51\x12\x8f\xcd\x20\xd3\x53\xbf\x63\xad\x06\x20\x0a\x8e\xb5\x06\x06\xce\xef\x32\x69\x2d\x7d\x89\xcb\xa3\x39\x62\xfe\x06\xcd\xd3\x34\xcc\xa8\xe1\x3d\x6d\x33\xe9\xe3\x52\x8d\xd6\x9a\xa6\xd6\x84\x57\xd1\x37\x5c\xc2\x63\x5d\xf0\x42\x8c\x2c\xe9\x0a\xd1\x15\x92\x3f\xec\x68\xc1\x21\xb5\xb5\xcb\xa1\xb6\x6f\x37\x3f\xd7\x25\xf2\x37\x16\x17\xbd\xc7\xf3\x8c\xd5\xce\xef\x45\x03\xce\xbc\xb7\xad\xed\x9e\x8e\x80\x52\x02\x36\xb3\x95\xb2\x11\xcf\x73\x8b\xf2\xa7\x5a\x99\xa5\x3b\x0f\x6f\x25\x1d\xed\x5c\x8b\xe8\x3e\x53\x89\x1c\x2c\x8b\x2a\x14\x17\xb0\xd8\x0b\xe6\x4b\x73\xb7\xc3\x5e\x87\x63\x45\x9f\xc4\x8e\x68\x80\x57\x58\x68\xa8\x27\x63\xe3\xcc\x65\xca\xee\x5e\x76\xcf\x6d\xbf\x10\xfe\x6c\x78\x01\x5b\x6c\x8b\x7f\xa8\x76\xaa\xf0\x16\xc3\x4e\x85\x09\x94\x37\xa2\xbf\x7a\x0e\x36\x67\x15\x0a\xc3\xd6\x21\x05\x13\xe4\x3f\x2c\x43\xff\xb0\x0c\xfd\x37\xb7\x0c\x7d\x4e\xb3\x10\x60\x63\x5e\xd2\x26\xb4\xc3\x41\x7e\xc0\x76\x74\xb5\x0e\x8e\x71\x6c\xd5\x8e\x47\x41\xd2\xef\x20\xd2\xb1\x09\xf4\xb7\x44\x18\x66\x7c\x16\x3c\xba\x17\xb2\xd3\x47\x6f\xe9\x8b\x3a\xf3\xaf\x3e\x2f\x82\xa5\x8d\x7d\x29\xf8\x7a\x37\x94\xc5\x43\x9d\x88\x34\xb8\x8d\x10\xc4\xec\x13\xd0\x3d\x4d\xc7\x8f\x00\x34\xa6\x72\x47\x6c\xad\x29\x0a\x0f\x9d\x91\x48\x93\x84\x60\xa9\x1a\x15\x74\x5f\x4c\x9c\xad\x78\x9e\x29\x95\xb6\x42\xe3\x9e\x75\x00\x1b\x81\x32\x7d\x07\x6f\x8a\xca\xa8\x0e\x01\x63\x76\x14\x7d\xd0\x85\x0f\xd1\xc0\x78\x0c\xc8\xc4\x01\xab\x29\x2e\x21\x96\xd2\x0f\x47\x90\x5e\x91\x3b\x83\x0b\x61\xc4\x16\x22\xe2\x90\xf8\xd5\x82\xf7\x22\xee\xa2\x4f\x42\x52\xa4\x46\x38\x88\x6e\xd6\xd3\xe1\xb5\x84\x72\xe7\x49\x5b\xda\x8d\xa1\x9b\xab\xa6\x21\x58\x68\x39\xb6\xdc\x22\x49\x2c\xed\xe2\xbe\x84\xc6\x96\x63\x7a\x0e\xd9\x17\xfb\x9d\x70\xad\x72\x67\x4a\x05\x9d\x42\x39\xfd\x05\xe9\x0f\x10\x8e\xb3\xe9\x89\xdc\x99\xc9\x89\xcb\x73\xeb\xb1\x5f\x0e\xb9\x87\xee\x52\xc4\x2c\x36\xa6\x06\xb9\x1c\xfd\xcd\x65\xc4\x74\x19\xad\x81\xad\xb2\x2a\xa7\x42\xb9\xd5\xdc\xb1\xa3\x99\x34\x17\x22\x30\xb5\x6c\x38\xc4\xc5\x3f\x1a\x65\x55\x27\x7f\x13\x0e\x9e\x45\xe4\x5d\x21\x22\x0b\x2f\x4e\x4a\xb6\xa2\xd7\x2c\x71\x28\x02\x2c\x3c\xa6\xa4\xcc\x62\x5e\x88\xf1\xcc\xa3\x6d\x12\xb4\x74\x5a\x94\x07\xa9\xcc\x3a\xec\x58\x88\x63\xac\x49\xda\x34\x59\x8a\x68\x1b\x35\xb2\x10\xed\xa6\x89\xf8\xc7\xb5\xed\xb7\x75\x6d\x43\x96\x5d\x8c\x19\x1c\x32\xb4\xd4\xd4\x6b\xff\xf9\x61\x83\x2b\x58\xd0\x12\x3d\x60\x9c\x3f\xe3\xb5\xb3\x45\x07\x1e\xa6\xcf\xf7\xbe\x07\xed\x3e\xce\xfc\xc5\xd6\x1f\xd6\x01\x05\x42\x43\x2d\x0c\x9d\x8b\x45\xb8\x74\x8c\x42\xdb\xdb\xad\xdf\xcd\x32\xf3\x9b\x02\x27\xf5\xb9\xb8\x1a\x8d\xdb\xc1\x95\x2e\xac\xa6\x2d\x05\x9e\x77\x3b\x34\xee\x80\xd5\x9d\x17\xaf\xb4\x1b\xf5\xaa\x04\xb4\xd8\xff\x89\xdc\x1e\x14\x80\xb9\xcd\xc4\xbc\xcc\xd3\x83\xe0\xc6\x77\xd7\xe7\xc7\x4e\xdb\x00\xcd\xb9\x33\xef\x51\x51\x4b\x0d\x6d\x73\x12\x8b\x98\xe0\xa0\x91\x4a\xd9\xa2\x5c\x2e\x21\x7f\x09\x01\x43\xad\x30\x82\xcc\xf4\xa5\x2e\xec\x79\x82\x4c\x33\x5c\x17\x33\xa9\xa4\x60\xb3\x2f\x8e\x67\x5f\x98\xa3\x2c\xe7\x51\x21\x72\x24\x19\x48\xb9\x2e\x98\x16\x2b\x50\xb5\xa8\xd2\xbb\xeb\x73\x88\x4a\x2c\xd6\x58\x9c\xbb\xb2\x62\xbc\x27\x72\x3e\x43\xae\x1f\x20\xa8\x96\x41\xc6\x2d\x68\xfb\x6b\xae\x59\x22\x67\xf2\xa3\x29\xe2\x78\xa5\xd4\x2a\x15\x63\x3b\x21\xe3\x77\x64\x7a\xfc\xf8\x06\x5b\x00\x9f\x87\xb0\x7e\x73\x20\x72\xa9\x64\x12\xf1\x14\x02\x72\x66\x12\xb4\xe6\x91\xe9\x0c\x98\x46\x67\x5f\x8c\x67\x5f\x30\x70\x9f\x16\x8c\x47\x91\xc8\x0a\x11\x63\x6a\xd3\xa9\x64\x19\xe0\x17\x23\x31\x62\x85\xe0\x1b\x6d\x29\x9d\x59\x66\xee\x98\x70\x35\x64\x89\x24\xa4\xd3\x22\x91\x3c\xdf\x22\x98\x09\x93\x95\x53\xf0\xc7\x76\x26\xc5\x27\xa0\xff\x4c\x80\x01\xb4\xd4\x8e\x96\x86\x12\x13\x98\x2e\x4f\xe4\x76\xcc\x7e\x40\x86\x06\xa4\x40\xbd\xbb\x3e\xb7\xf4\x46\x14\x03\x3a\x93\x3a\x5a\x8b\x8d\x60\x1f\xd7\x45\x91\x7d\x1c\xe1\x7f\xf5\x47\xf0\x38\x4a\xc5\xf0\xe9\x88\x99\x29\x32\x8a\xaa\xc5\xcb\xa7\x5b\xc8\x21\x5b\x66\x94\x70\x7e\x26\x81\x8b\x3d\x0f\xd1\xbd\x66\xb4\xa1\xc6\xe0\x0a\x5e\xc1\x85\x1b\x29\x0e\xc9\x1d\x4f\xcc\xe0\xfc\x2f\x36\x5d\xfa\x2a\xcd\x00\xda\xdc\x62\xae\x55\xa0\x90\x68\x08\xd9\x1a\x9b\x0f\x26\x92\xfd\x70\x7b\x7b\xc5\xbe\x3f\xbb\xb5\xca\xce\xdd\xf5\x39\xae\x0b\xa0\x53\x61\x9c\xfd\xb9\x3e\xc5\xb7\xdb\x4c\xfc\xe5\xcf\x7f\x99\x49\x66\x73\x94\x4b\x3b\xd2\xb8\xa3\x47\x48\x09\x0b\x78\x27\x70\xcc\x02\x95\x33\xd4\x87\x29\x77\xa8\xf9\x39\x6a\xe7\x8f\x64\x2d\x80\x33\x2a\x55\xea\xbe\xcc\x9c\x99\x3b\xd4\xc3\x4c\x85\x77\xd7\xe7\x50\x3a\xd0\x29\x15\x6b\xc8\x9f\x26\x9c\xf5\x05\x26\x9e\xdb\xc6\x98\x7f\x3f\xa8\x24\x66\x5c\x6e\xcd\xb7\x58\x34\x2c\xcb\x5c\x2c\x55\x2e\x46\xf6\x4d\x53\x00\x2f\x92\x45\x92\x26\xc5\x16\xa4\x94\xcd\x6b\x9f\x59\x8e\x7c\x53\x80\xb9\xcd\x10\xc0\xdb\x2c\x30\x4c\x63\xfb\xfa\x4e\x87\x08\x70\x98\x34\x97\x1b\x11\x2f\x3a\xe6\xdb\x45\x2e\xf8\xbd\x59\xdd\x54\xc2\xf8\x0d\xe5\x8c\x15\x27\x78\xc6\x2c\x4b\x19\xe1\xd2\x30\x6d\xa0\xd5\x4f\x37\xa7\x74\xcb\xf8\x03\x4f\x30\xa7\xac\x75\x97\x2f\x97\x49\x94\xf0\x94\x24\xc7\xa2\x5c\x42\xda\x18\xae\x29\x65\x11\x82\x0f\x4d\x21\x70\xcb\xb0\x09\xfb\x71\x41\x2d\xc4\x2a\x41\xc0\xf1\x63\x52\xac\x31\xae\x60\x8c\xf3\xcc\xb3\x44\x8f\x23\xb5\x81\xfd\x76\x03\x4b\x49\xd3\xa5\x17\x70\xe0\xb5\x75\xce\x5e\x5b\xa8\xdd\x26\x2b\xb6\xb4\xf6\xde\xb0\x4d\xb2\x5a\x17\x90\xc8\x05\x6a\x07\x48\x44\xb2\xc9\x52\xb8\xf4\x91\x87\xd1\xe2\x7d\xb5\xd8\x70\x59\x24\x51\x97\x4f\xa9\x35\x25\x78\x3f\x8c\xe7\x62\x5b\xec\xb6\xe3\x7d\x20\x9e\x7d\x8e\x14\xfa\x81\x44\x66\x75\x81\x4c\x32\x10\xd2\xcb\x04\x04\xfe\xf5\x94\xb3\xfb\xae\x50\x1f\x27\x72\xfb\xd1\x93\x90\x72\x19\xe4\xbe\xda\x51\xbb\xdd\xff\x3c\x55\x34\x6b\x8c\xcf\x24\xa0\x3a\x8d\xc0\xa0\x64\xb4\x3b\xcf\x18\x77\xa4\x98\x99\xbd\xb2\x8b\x26\x4d\x16\x50\x37\xc9\x0a\xcd\x74\x99\x41\x3c\x41\xa1\x58\xc6\xa3\xfb\xe3\x52\x9a\xff\x18\x61\x88\xdb\x5d\x87\xe4\x44\x33\xa9\x96\xac\x2c\x70\xe3\xd8\x25\x0c\x46\x91\xc0\x14\xe0\x2f\x68\x1b\x51\xac\x55\xec\xe2\xc2\x4c\x99\x30\x7e\xa6\x45\x67\x44\x2f\xfd\xf6\x84\x5d\x99\x0a\xcd\x22\xa6\xba\xb9\xeb\x7e\x22\xd9\xe9\xbf\xfe\x2b\xbc\x6f\x06\xf7\xbd\x52\x6c\xa9\x14\xfb\x96\x8d\xc7\xe3\x7f\xc7\xdf\x4c\xa1\x5c\x6e\xe9\x2f\x2e\xb7\x63\x53\xdc\xfb\x5c\x6d\x5e\x2f\x95\x7a\x43\xbf\x43\xd2\x66\xf3\x8f\x64\xc9\x5e\x9b\x97\xee\xa0\xaa\x5b\xf5\x7a\x56\x7e\xf9\xe5\x57\xbf\x37\xaf\xbe\x61\xff\x89\xef\x04\xaf\xff\x3d\x6c\xea\x57\x7b\x9a\xfa\x07\xfe\xc0\xfb\xb4\x95\x7d\x0b\x67\x8d\x29\x60\x67\x1b\x13\xfd\xfa\xbd\x52\x63\xb8\xfd\x87\xad\xc3\x62\xcd\x1b\xd8\x8a\xe0\xad\x7f\x0f\x9a\xcd\x6c\xbb\xbf\xde\xd3\x6e\x44\xd5\xbb\x96\x63\xf1\xef\x95\x7a\x3d\x1e\x1b\xb9\x45\xe3\x8a\xad\x7e\xfd\xa6\x3a\xd0\xd0\x81\x66\xfb\xcd\xe3\x29\x36\xff\xdd\xd9\xcd\xe9\xf5\xf4\xea\xf6\xf2\xfa\xcd\x89\xed\x81\x9f\x81\xe0\x7b\x66\x53\x6b\xbb\x86\xff\xef\x3d\x0d\xff\x5e\xd9\x36\x43\xa3\x4f\xbe\x65\x38\x9b\xd9\x62\xfc\x5e\xa9\xff\x1c\x8f\xc7\x7f\xa7\xc7\x5c\x6e\x47\xe6\x60\x32\xef\x64\x28\xca\x3f\xf0\x5c\xaf\x79\x6a\xfa\x14\xb4\xc1\x75\xa2\xb5\x44\x5b\x5c\xb2\xac\x15\x76\x27\x37\xbe\x38\xa8\x0c\x26\x16\xde\xfa\xe7\x6f\x99\x4c\x52\x3f\x7d\x41\x1d\x30\x4f\xb7\x40\x2d\x11\xdd\xbb\xed\xe2\x72\x84\x2e\xb6\x2c\xab\x6f\x5c\x8c\x3b\xdb\xda\x0c\x05\x46\xdc\xcf\xe4\xab\x16\x89\x7e\x6c\x54\xbb\x31\x3c\x30\x07\xd4\x2b\x9b\x3d\xde\x1e\x0b\x2e\xb3\x16\x8e\x2c\x38\xa2\x71\xb7\x4a\x8a\x51\x6b\xd3\x0f\xdd\x81\x17\x90\x55\x81\xda\xf9\xea\xf8\x15\x05\x0a\xf9\x2a\xaa\x44\xf2\xb3\x2f\x96\x4a\x8d\x17\x3c\x87\xd6\x7d\x3a\xde\x8e\xff\x36\xfb\x02\xfb\x83\xca\x07\x2a\x46\x50\xf8\xec\x0b\x78\x0a\xcb\x61\x26\xff\x70\x73\x79\x31\x93\xdf\x7e\xfb\xed\xb7\x38\x5a\xe6\xef\x16\xdf\x8b\x39\xae\x40\xdc\xa2\x9e\x52\x6a\x9b\x52\x52\xac\xca\x94\xe7\x33\xd9\xee\xae\x89\x85\x17\x9a\x23\xef\xbc\xa1\x75\x36\xb2\xd9\x2d\x20\x49\x99\x95\x71\x68\x9b\xfc\xf8\xff\x9b\x26\x7f\x24\x15\xd1\x09\xf9\x70\x08\xc6\x76\x31\x9f\xd8\xa5\x6a\x06\xdb\xac\x5f\xaf\x67\x2d\x93\x54\xd0\xc6\xb5\x8b\xfb\x4a\xe4\x5a\x49\xbf\x66\xe8\x42\x00\xdc\x66\xe0\x00\x60\xdf\xb2\xb7\xff\x5e\x7b\x6a\xe6\xc1\x3e\xfc\xaa\x22\x09\x18\xf3\x45\xcd\xbe\x80\x56\xcf\xbe\x38\x61\xb3\x2f\xda\xd6\x4d\xb5\x61\x63\x6c\xca\xec\x8b\x91\x2f\x00\x9a\x71\xc1\x37\x58\x48\xf9\xe5\x97\x5f\x47\xd8\x04\x0c\x5d\x0b\xde\x34\x4d\xea\x7e\x31\x68\xe2\xb4\xe6\x3a\xb3\x03\x61\x43\x20\x1f\x45\x9a\x1e\xdd\x4b\xf5\x88\x79\xc6\xc1\x4f\x44\x51\xca\x0c\x97\x47\x75\x72\x29\x37\x59\x6d\xc6\x6d\xd0\xa6\xab\xc6\xa5\xb7\x83\x09\x9d\xc9\x8f\xb0\x74\xec\x8c\x12\x1d\x11\xd0\x81\xba\x9a\xe0\x52\x43\x2b\xc1\xc6\x58\xd0\x42\x98\x49\x28\xc6\xcd\x39\x7b\x0d\xc0\x2f\xea\x4a\x43\xb3\xb6\x97\xa7\xbf\xfc\xf9\x2f\x6f\x4e\x0e\x99\xa7\x6a\x71\x95\xa9\x82\xfe\x60\x19\x6f\xc7\x5f\xbd\xfd\x4a\xcf\xbe\xa0\x51\x6f\xbf\x62\x9f\x27\xba\xf8\xa9\xa6\x81\x3d\x21\xd9\xb9\x51\x1c\x5e\xca\x79\x61\x9b\x8a\xcd\xec\xeb\xb4\xb8\xae\xba\x15\xd4\xd2\x9a\x75\xe0\x72\x66\xd3\xc0\x9b\x76\x0f\x52\xef\xdc\x78\xe1\x65\x8b\x3d\xe6\x3c\xcb\x44\x6e\x6d\xe5\x0d\x77\x06\xe4\x54\x87\x5a\xac\xe8\x6f\x13\x66\x66\xd9\xd4\x8a\x86\xd7\x60\xe8\xc6\xed\x33\x77\x51\xa6\x69\xe7\xcc\xed\x4f\x96\x7c\x71\x77\x7e\x3e\xff\x69\x72\x7e\x77\x66\xbb\xdf\x9a\x7c\x38\x78\xad\x73\x4c\x5c\x4b\x68\x4c\x10\x57\x55\x00\x96\xaa\xdc\x88\xdc\x32\x85\xf9\x5e\x23\x8e\xa4\x4c\xd3\x6a\x5a\xec\x99\xfc\x48\xe5\x80\x18\x28\x65\x62\xd5\x94\x9d\x03\x57\xad\x1f\x5e\xfb\x68\x0a\xff\x88\xdf\x1e\x31\xdf\x89\x13\x76\xe1\x6a\xed\x18\x57\x22\x9c\x38\x60\x3b\x60\xbc\x6d\xd7\x76\x78\xee\xc4\xff\x4f\xdb\x1e\x77\x12\x92\x7e\x19\xc9\x8b\xf9\xfa\x9f\x65\x77\xe0\xd8\x7d\xac\x42\xc1\x9d\xb9\x34\x46\xaf\x21\x94\x3b\xc2\x74\xed\xba\x20\xce\x62\x1c\xb3\x99\x44\x41\x6c\xda\x54\xa8\xee\x36\xb1\x29\x79\x90\x52\x2e\x57\x25\x5f\x09\x3d\x62\xb6\xf2\x99\xb4\xb7\x53\x7b\xd7\x71\xc0\x1c\x60\x64\xad\x2d\xa1\x5a\x08\x70\x22\x67\x92\xfa\x04\x27\x2c\x15\x8f\xe1\xa8\x7f\xb8\x71\xdd\xa1\xb8\x6f\x2c\x88\x32\xce\xcb\x99\xc4\xc9\x45\xdb\x98\x05\x1b\x82\xda\xd1\x3c\x9b\x38\xc0\x83\xf1\x5e\x17\xb3\x42\xad\x00\xf6\x38\x93\x8e\x05\x0b\xc1\x19\xf6\xbe\xe6\x73\x83\x62\x93\xf6\xcb\x13\x3b\x19\x76\x4f\x50\xdb\xda\x57\xfd\xc1\x67\x80\xd9\x70\xf3\xd6\xbb\xfc\xee\x65\xeb\xc5\x58\x4f\x40\x0e\x0f\x04\x47\x17\x35\x22\x50\x9f\xb5\xb7\xc6\xf6\x0b\xdf\xe9\x8c\x1e\x55\xe5\x22\x1d\xd0\x24\x7c\x7f\x67\xa3\x50\x24\xef\x6e\x54\x0f\x8b\xf4\x75\x6d\x6b\x99\x65\xba\xab\xda\x85\x52\x1d\xf3\xf2\x8c\x98\xdd\x4a\xa3\xe8\x83\x7d\x83\x51\x46\xc5\x53\xd6\x4b\x0f\x3e\xa0\xfa\x10\x59\xe9\xb3\xab\x41\x69\xa2\x9f\xd4\x1c\xaf\x3f\xf5\x6e\x91\xd3\x10\xe8\xb0\x1b\x24\x61\xe9\x9c\xab\x08\xd8\x0e\x31\x69\xaf\x29\x18\xde\x22\x12\x14\x2f\x66\xf3\x8c\x60\x13\x99\xf5\x3f\x72\x8b\x68\xe4\x67\x6e\x04\x8d\x8c\xca\x5c\x1b\x71\x49\xf2\x8e\xa4\xb6\xca\x19\x9f\x49\xcb\x06\x63\xc5\xf1\xc4\xda\x83\x73\xf7\x2b\x72\x2c\x65\x98\xb2\x0e\x9c\x42\x05\x58\xc9\x49\x1a\xce\xe4\x03\xcf\x13\x2e\x01\xd3\xbc\xd0\x90\x6f\x18\xae\x74\x5b\x46\x0f\x1c\x01\x87\x0e\x8d\xcc\x7b\x64\x5e\x4d\x0d\xa8\x9c\xf3\xff\x64\xfe\xf7\xf7\x7f\xfa\xbf\x01\x00\x00\xff\xff\xde\xaa\xee\x8d\xa0\xa7\x06\x00") func adminSwaggerJsonBytes() ([]byte, error) { return bindataRead( @@ -93,7 +93,7 @@ func adminSwaggerJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "admin.swagger.json", size: 317853, mode: os.FileMode(420), modTime: time.Unix(1562572800, 0)} + info := bindataFileInfo{name: "admin.swagger.json", size: 436128, mode: os.FileMode(420), modTime: time.Unix(1562572800, 0)} a := &asset{bytes: bytes, info: info} return a, nil } diff --git a/flyteidl/gen/pb-go/flyteidl/service/signal.swagger.json b/flyteidl/gen/pb-go/flyteidl/service/signal.swagger.json index 72ffbd861b..c5dafce8b2 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/signal.swagger.json +++ b/flyteidl/gen/pb-go/flyteidl/service/signal.swagger.json @@ -76,6 +76,13 @@ "required": true, "type": "string" }, + { + "name": "workflow_execution_id.org", + "description": "Optional, org key applied to the resource.", + "in": "query", + "required": false, + "type": "string" + }, { "name": "limit", "description": "Indicates the number of resources to be returned.\n+required.", @@ -655,6 +662,10 @@ "name": { "type": "string", "description": "User or system provided value for the resource." + }, + "org": { + "type": "string", + "description": "Optional, org key applied to the resource." } }, "title": "Encapsulation of fields that uniquely identifies a Flyte workflow execution" diff --git a/flyteidl/gen/pb-java/datacatalog/Datacatalog.java b/flyteidl/gen/pb-java/datacatalog/Datacatalog.java index 9ad108fc95..4d0c9894e9 100644 --- a/flyteidl/gen/pb-java/datacatalog/Datacatalog.java +++ b/flyteidl/gen/pb-java/datacatalog/Datacatalog.java @@ -19954,6 +19954,24 @@ public interface DatasetIDOrBuilder extends */ com.google.protobuf.ByteString getUUIDBytes(); + + /** + *
+     * Optional, org key applied to the resource.
+     * 
+ * + * string org = 6; + */ + java.lang.String getOrg(); + /** + *
+     * Optional, org key applied to the resource.
+     * 
+ * + * string org = 6; + */ + com.google.protobuf.ByteString + getOrgBytes(); } /** *
@@ -19977,6 +19995,7 @@ private DatasetID() {
       domain_ = "";
       version_ = "";
       uUID_ = "";
+      org_ = "";
     }
 
     @java.lang.Override
@@ -20033,6 +20052,12 @@ private DatasetID(
               uUID_ = s;
               break;
             }
+            case 50: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              org_ = s;
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -20275,6 +20300,48 @@ public java.lang.String getUUID() {
       }
     }
 
+    public static final int ORG_FIELD_NUMBER = 6;
+    private volatile java.lang.Object org_;
+    /**
+     * 
+     * Optional, org key applied to the resource.
+     * 
+ * + * string org = 6; + */ + public java.lang.String getOrg() { + java.lang.Object ref = org_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + org_ = s; + return s; + } + } + /** + *
+     * Optional, org key applied to the resource.
+     * 
+ * + * string org = 6; + */ + public com.google.protobuf.ByteString + getOrgBytes() { + java.lang.Object ref = org_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + org_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -20304,6 +20371,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) if (!getUUIDBytes().isEmpty()) { com.google.protobuf.GeneratedMessageV3.writeString(output, 5, uUID_); } + if (!getOrgBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 6, org_); + } unknownFields.writeTo(output); } @@ -20328,6 +20398,9 @@ public int getSerializedSize() { if (!getUUIDBytes().isEmpty()) { size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, uUID_); } + if (!getOrgBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, org_); + } size += unknownFields.getSerializedSize(); memoizedSize = size; return size; @@ -20353,6 +20426,8 @@ public boolean equals(final java.lang.Object obj) { .equals(other.getVersion())) return false; if (!getUUID() .equals(other.getUUID())) return false; + if (!getOrg() + .equals(other.getOrg())) return false; if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -20374,6 +20449,8 @@ public int hashCode() { hash = (53 * hash) + getVersion().hashCode(); hash = (37 * hash) + UUID_FIELD_NUMBER; hash = (53 * hash) + getUUID().hashCode(); + hash = (37 * hash) + ORG_FIELD_NUMBER; + hash = (53 * hash) + getOrg().hashCode(); hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; @@ -20521,6 +20598,8 @@ public Builder clear() { uUID_ = ""; + org_ = ""; + return this; } @@ -20552,6 +20631,7 @@ public datacatalog.Datacatalog.DatasetID buildPartial() { result.domain_ = domain_; result.version_ = version_; result.uUID_ = uUID_; + result.org_ = org_; onBuilt(); return result; } @@ -20620,6 +20700,10 @@ public Builder mergeFrom(datacatalog.Datacatalog.DatasetID other) { uUID_ = other.uUID_; onChanged(); } + if (!other.getOrg().isEmpty()) { + org_ = other.org_; + onChanged(); + } this.mergeUnknownFields(other.unknownFields); onChanged(); return this; @@ -21093,6 +21177,95 @@ public Builder setUUIDBytes( onChanged(); return this; } + + private java.lang.Object org_ = ""; + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 6; + */ + public java.lang.String getOrg() { + java.lang.Object ref = org_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + org_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 6; + */ + public com.google.protobuf.ByteString + getOrgBytes() { + java.lang.Object ref = org_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + org_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 6; + */ + public Builder setOrg( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + org_ = value; + onChanged(); + return this; + } + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 6; + */ + public Builder clearOrg() { + + org_ = getDefaultInstance().getOrg(); + onChanged(); + return this; + } + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 6; + */ + public Builder setOrgBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + org_ = value; + onChanged(); + return this; + } @java.lang.Override public final Builder setUnknownFields( final com.google.protobuf.UnknownFieldSet unknownFields) { @@ -31392,6 +31565,24 @@ public interface DatasetPropertyFilterOrBuilder extends com.google.protobuf.ByteString getVersionBytes(); + /** + *
+     * Optional, org key applied to the dataset.
+     * 
+ * + * string org = 5; + */ + java.lang.String getOrg(); + /** + *
+     * Optional, org key applied to the dataset.
+     * 
+ * + * string org = 5; + */ + com.google.protobuf.ByteString + getOrgBytes(); + public datacatalog.Datacatalog.DatasetPropertyFilter.PropertyCase getPropertyCase(); } /** @@ -31461,6 +31652,12 @@ private DatasetPropertyFilter( property_ = s; break; } + case 42: { + java.lang.String s = input.readStringRequireUtf8(); + propertyCase_ = 5; + property_ = s; + break; + } default: { if (!parseUnknownField( input, unknownFields, extensionRegistry, tag)) { @@ -31501,6 +31698,7 @@ public enum PropertyCase NAME(2), DOMAIN(3), VERSION(4), + ORG(5), PROPERTY_NOT_SET(0); private final int value; private PropertyCase(int value) { @@ -31520,6 +31718,7 @@ public static PropertyCase forNumber(int value) { case 2: return NAME; case 3: return DOMAIN; case 4: return VERSION; + case 5: return ORG; case 0: return PROPERTY_NOT_SET; default: return null; } @@ -31707,6 +31906,57 @@ public java.lang.String getVersion() { } } + public static final int ORG_FIELD_NUMBER = 5; + /** + *
+     * Optional, org key applied to the dataset.
+     * 
+ * + * string org = 5; + */ + public java.lang.String getOrg() { + java.lang.Object ref = ""; + if (propertyCase_ == 5) { + ref = property_; + } + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (propertyCase_ == 5) { + property_ = s; + } + return s; + } + } + /** + *
+     * Optional, org key applied to the dataset.
+     * 
+ * + * string org = 5; + */ + public com.google.protobuf.ByteString + getOrgBytes() { + java.lang.Object ref = ""; + if (propertyCase_ == 5) { + ref = property_; + } + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + if (propertyCase_ == 5) { + property_ = b; + } + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -31733,6 +31983,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) if (propertyCase_ == 4) { com.google.protobuf.GeneratedMessageV3.writeString(output, 4, property_); } + if (propertyCase_ == 5) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 5, property_); + } unknownFields.writeTo(output); } @@ -31754,6 +32007,9 @@ public int getSerializedSize() { if (propertyCase_ == 4) { size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, property_); } + if (propertyCase_ == 5) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, property_); + } size += unknownFields.getSerializedSize(); memoizedSize = size; return size; @@ -31787,6 +32043,10 @@ public boolean equals(final java.lang.Object obj) { if (!getVersion() .equals(other.getVersion())) return false; break; + case 5: + if (!getOrg() + .equals(other.getOrg())) return false; + break; case 0: default: } @@ -31818,6 +32078,10 @@ public int hashCode() { hash = (37 * hash) + VERSION_FIELD_NUMBER; hash = (53 * hash) + getVersion().hashCode(); break; + case 5: + hash = (37 * hash) + ORG_FIELD_NUMBER; + hash = (53 * hash) + getOrg().hashCode(); + break; case 0: default: } @@ -31998,6 +32262,9 @@ public datacatalog.Datacatalog.DatasetPropertyFilter buildPartial() { if (propertyCase_ == 4) { result.property_ = property_; } + if (propertyCase_ == 5) { + result.property_ = property_; + } result.propertyCase_ = propertyCase_; onBuilt(); return result; @@ -32072,6 +32339,12 @@ public Builder mergeFrom(datacatalog.Datacatalog.DatasetPropertyFilter other) { onChanged(); break; } + case ORG: { + propertyCase_ = 5; + property_ = other.property_; + onChanged(); + break; + } case PROPERTY_NOT_SET: { break; } @@ -32439,6 +32712,106 @@ public Builder setVersionBytes( onChanged(); return this; } + + /** + *
+       * Optional, org key applied to the dataset.
+       * 
+ * + * string org = 5; + */ + public java.lang.String getOrg() { + java.lang.Object ref = ""; + if (propertyCase_ == 5) { + ref = property_; + } + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (propertyCase_ == 5) { + property_ = s; + } + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * Optional, org key applied to the dataset.
+       * 
+ * + * string org = 5; + */ + public com.google.protobuf.ByteString + getOrgBytes() { + java.lang.Object ref = ""; + if (propertyCase_ == 5) { + ref = property_; + } + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + if (propertyCase_ == 5) { + property_ = b; + } + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * Optional, org key applied to the dataset.
+       * 
+ * + * string org = 5; + */ + public Builder setOrg( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + propertyCase_ = 5; + property_ = value; + onChanged(); + return this; + } + /** + *
+       * Optional, org key applied to the dataset.
+       * 
+ * + * string org = 5; + */ + public Builder clearOrg() { + if (propertyCase_ == 5) { + propertyCase_ = 0; + property_ = null; + onChanged(); + } + return this; + } + /** + *
+       * Optional, org key applied to the dataset.
+       * 
+ * + * string org = 5; + */ + public Builder setOrgBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + propertyCase_ = 5; + property_ = value; + onChanged(); + return this; + } @java.lang.Override public final Builder setUnknownFields( final com.google.protobuf.UnknownFieldSet unknownFields) { @@ -33869,73 +34242,74 @@ public datacatalog.Datacatalog.PaginationOptions getDefaultInstanceForType() { "datacatalog.DatasetID\022\'\n\010metadata\030\002 \001(\0132" + "\025.datacatalog.Metadata\022\025\n\rpartitionKeys\030" + "\003 \003(\t\"\'\n\tPartition\022\013\n\003key\030\001 \001(\t\022\r\n\005value" + - "\030\002 \001(\t\"Y\n\tDatasetID\022\017\n\007project\030\001 \001(\t\022\014\n\004" + + "\030\002 \001(\t\"f\n\tDatasetID\022\017\n\007project\030\001 \001(\t\022\014\n\004" + "name\030\002 \001(\t\022\016\n\006domain\030\003 \001(\t\022\017\n\007version\030\004 " + - "\001(\t\022\014\n\004UUID\030\005 \001(\t\"\215\002\n\010Artifact\022\n\n\002id\030\001 \001" + - "(\t\022\'\n\007dataset\030\002 \001(\0132\026.datacatalog.Datase" + - "tID\022\'\n\004data\030\003 \003(\0132\031.datacatalog.Artifact" + - "Data\022\'\n\010metadata\030\004 \001(\0132\025.datacatalog.Met" + - "adata\022*\n\npartitions\030\005 \003(\0132\026.datacatalog." + - "Partition\022\036\n\004tags\030\006 \003(\0132\020.datacatalog.Ta" + - "g\022.\n\ncreated_at\030\007 \001(\0132\032.google.protobuf." + - "Timestamp\"C\n\014ArtifactData\022\014\n\004name\030\001 \001(\t\022" + - "%\n\005value\030\002 \001(\0132\026.flyteidl.core.Literal\"Q" + - "\n\003Tag\022\014\n\004name\030\001 \001(\t\022\023\n\013artifact_id\030\002 \001(\t" + - "\022\'\n\007dataset\030\003 \001(\0132\026.datacatalog.DatasetI" + - "D\"m\n\010Metadata\0222\n\007key_map\030\001 \003(\0132!.datacat" + - "alog.Metadata.KeyMapEntry\032-\n\013KeyMapEntry" + - "\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"F\n\020Filt" + - "erExpression\0222\n\007filters\030\001 \003(\0132!.datacata" + - "log.SinglePropertyFilter\"\211\003\n\024SinglePrope" + - "rtyFilter\0224\n\ntag_filter\030\001 \001(\0132\036.datacata" + - "log.TagPropertyFilterH\000\022@\n\020partition_fil" + - "ter\030\002 \001(\0132$.datacatalog.PartitionPropert" + - "yFilterH\000\022>\n\017artifact_filter\030\003 \001(\0132#.dat" + - "acatalog.ArtifactPropertyFilterH\000\022<\n\016dat" + - "aset_filter\030\004 \001(\0132\".datacatalog.DatasetP" + - "ropertyFilterH\000\022F\n\010operator\030\n \001(\01624.data" + - "catalog.SinglePropertyFilter.ComparisonO" + - "perator\" \n\022ComparisonOperator\022\n\n\006EQUALS\020" + - "\000B\021\n\017property_filter\";\n\026ArtifactProperty" + - "Filter\022\025\n\013artifact_id\030\001 \001(\tH\000B\n\n\010propert" + - "y\"3\n\021TagPropertyFilter\022\022\n\010tag_name\030\001 \001(\t" + - "H\000B\n\n\010property\"S\n\027PartitionPropertyFilte" + - "r\022,\n\007key_val\030\001 \001(\0132\031.datacatalog.KeyValu" + - "ePairH\000B\n\n\010property\"*\n\014KeyValuePair\022\013\n\003k" + - "ey\030\001 \001(\t\022\r\n\005value\030\002 \001(\t\"k\n\025DatasetProper" + - "tyFilter\022\021\n\007project\030\001 \001(\tH\000\022\016\n\004name\030\002 \001(" + - "\tH\000\022\020\n\006domain\030\003 \001(\tH\000\022\021\n\007version\030\004 \001(\tH\000" + - "B\n\n\010property\"\361\001\n\021PaginationOptions\022\r\n\005li" + - "mit\030\001 \001(\r\022\r\n\005token\030\002 \001(\t\0227\n\007sortKey\030\003 \001(" + - "\0162&.datacatalog.PaginationOptions.SortKe" + - "y\022;\n\tsortOrder\030\004 \001(\0162(.datacatalog.Pagin" + - "ationOptions.SortOrder\"*\n\tSortOrder\022\016\n\nD" + - "ESCENDING\020\000\022\r\n\tASCENDING\020\001\"\034\n\007SortKey\022\021\n" + - "\rCREATION_TIME\020\0002\206\007\n\013DataCatalog\022V\n\rCrea" + - "teDataset\022!.datacatalog.CreateDatasetReq" + - "uest\032\".datacatalog.CreateDatasetResponse" + - "\022M\n\nGetDataset\022\036.datacatalog.GetDatasetR" + - "equest\032\037.datacatalog.GetDatasetResponse\022" + - "Y\n\016CreateArtifact\022\".datacatalog.CreateAr" + - "tifactRequest\032#.datacatalog.CreateArtifa" + - "ctResponse\022P\n\013GetArtifact\022\037.datacatalog." + - "GetArtifactRequest\032 .datacatalog.GetArti" + - "factResponse\022A\n\006AddTag\022\032.datacatalog.Add" + - "TagRequest\032\033.datacatalog.AddTagResponse\022" + - "V\n\rListArtifacts\022!.datacatalog.ListArtif" + - "actsRequest\032\".datacatalog.ListArtifactsR" + - "esponse\022S\n\014ListDatasets\022 .datacatalog.Li" + - "stDatasetsRequest\032!.datacatalog.ListData" + - "setsResponse\022Y\n\016UpdateArtifact\022\".datacat" + - "alog.UpdateArtifactRequest\032#.datacatalog" + - ".UpdateArtifactResponse\022q\n\026GetOrExtendRe" + - "servation\022*.datacatalog.GetOrExtendReser" + - "vationRequest\032+.datacatalog.GetOrExtendR" + - "eservationResponse\022e\n\022ReleaseReservation" + - "\022&.datacatalog.ReleaseReservationRequest" + - "\032\'.datacatalog.ReleaseReservationRespons" + - "eBCZAgithub.com/flyteorg/flyte/flyteidl/" + - "gen/pb-go/flyteidl/datacatalogb\006proto3" + "\001(\t\022\014\n\004UUID\030\005 \001(\t\022\013\n\003org\030\006 \001(\t\"\215\002\n\010Artif" + + "act\022\n\n\002id\030\001 \001(\t\022\'\n\007dataset\030\002 \001(\0132\026.datac" + + "atalog.DatasetID\022\'\n\004data\030\003 \003(\0132\031.datacat" + + "alog.ArtifactData\022\'\n\010metadata\030\004 \001(\0132\025.da" + + "tacatalog.Metadata\022*\n\npartitions\030\005 \003(\0132\026" + + ".datacatalog.Partition\022\036\n\004tags\030\006 \003(\0132\020.d" + + "atacatalog.Tag\022.\n\ncreated_at\030\007 \001(\0132\032.goo" + + "gle.protobuf.Timestamp\"C\n\014ArtifactData\022\014" + + "\n\004name\030\001 \001(\t\022%\n\005value\030\002 \001(\0132\026.flyteidl.c" + + "ore.Literal\"Q\n\003Tag\022\014\n\004name\030\001 \001(\t\022\023\n\013arti" + + "fact_id\030\002 \001(\t\022\'\n\007dataset\030\003 \001(\0132\026.datacat" + + "alog.DatasetID\"m\n\010Metadata\0222\n\007key_map\030\001 " + + "\003(\0132!.datacatalog.Metadata.KeyMapEntry\032-" + + "\n\013KeyMapEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(" + + "\t:\0028\001\"F\n\020FilterExpression\0222\n\007filters\030\001 \003" + + "(\0132!.datacatalog.SinglePropertyFilter\"\211\003" + + "\n\024SinglePropertyFilter\0224\n\ntag_filter\030\001 \001" + + "(\0132\036.datacatalog.TagPropertyFilterH\000\022@\n\020" + + "partition_filter\030\002 \001(\0132$.datacatalog.Par" + + "titionPropertyFilterH\000\022>\n\017artifact_filte" + + "r\030\003 \001(\0132#.datacatalog.ArtifactPropertyFi" + + "lterH\000\022<\n\016dataset_filter\030\004 \001(\0132\".datacat" + + "alog.DatasetPropertyFilterH\000\022F\n\010operator" + + "\030\n \001(\01624.datacatalog.SinglePropertyFilte" + + "r.ComparisonOperator\" \n\022ComparisonOperat" + + "or\022\n\n\006EQUALS\020\000B\021\n\017property_filter\";\n\026Art" + + "ifactPropertyFilter\022\025\n\013artifact_id\030\001 \001(\t" + + "H\000B\n\n\010property\"3\n\021TagPropertyFilter\022\022\n\010t" + + "ag_name\030\001 \001(\tH\000B\n\n\010property\"S\n\027Partition" + + "PropertyFilter\022,\n\007key_val\030\001 \001(\0132\031.dataca" + + "talog.KeyValuePairH\000B\n\n\010property\"*\n\014KeyV" + + "aluePair\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t\"z\n\025" + + "DatasetPropertyFilter\022\021\n\007project\030\001 \001(\tH\000" + + "\022\016\n\004name\030\002 \001(\tH\000\022\020\n\006domain\030\003 \001(\tH\000\022\021\n\007ve" + + "rsion\030\004 \001(\tH\000\022\r\n\003org\030\005 \001(\tH\000B\n\n\010property" + + "\"\361\001\n\021PaginationOptions\022\r\n\005limit\030\001 \001(\r\022\r\n" + + "\005token\030\002 \001(\t\0227\n\007sortKey\030\003 \001(\0162&.datacata" + + "log.PaginationOptions.SortKey\022;\n\tsortOrd" + + "er\030\004 \001(\0162(.datacatalog.PaginationOptions" + + ".SortOrder\"*\n\tSortOrder\022\016\n\nDESCENDING\020\000\022" + + "\r\n\tASCENDING\020\001\"\034\n\007SortKey\022\021\n\rCREATION_TI" + + "ME\020\0002\206\007\n\013DataCatalog\022V\n\rCreateDataset\022!." + + "datacatalog.CreateDatasetRequest\032\".datac" + + "atalog.CreateDatasetResponse\022M\n\nGetDatas" + + "et\022\036.datacatalog.GetDatasetRequest\032\037.dat" + + "acatalog.GetDatasetResponse\022Y\n\016CreateArt" + + "ifact\022\".datacatalog.CreateArtifactReques" + + "t\032#.datacatalog.CreateArtifactResponse\022P" + + "\n\013GetArtifact\022\037.datacatalog.GetArtifactR" + + "equest\032 .datacatalog.GetArtifactResponse" + + "\022A\n\006AddTag\022\032.datacatalog.AddTagRequest\032\033" + + ".datacatalog.AddTagResponse\022V\n\rListArtif" + + "acts\022!.datacatalog.ListArtifactsRequest\032" + + "\".datacatalog.ListArtifactsResponse\022S\n\014L" + + "istDatasets\022 .datacatalog.ListDatasetsRe" + + "quest\032!.datacatalog.ListDatasetsResponse" + + "\022Y\n\016UpdateArtifact\022\".datacatalog.UpdateA" + + "rtifactRequest\032#.datacatalog.UpdateArtif" + + "actResponse\022q\n\026GetOrExtendReservation\022*." + + "datacatalog.GetOrExtendReservationReques" + + "t\032+.datacatalog.GetOrExtendReservationRe" + + "sponse\022e\n\022ReleaseReservation\022&.datacatal" + + "og.ReleaseReservationRequest\032\'.datacatal" + + "og.ReleaseReservationResponseBCZAgithub." + + "com/flyteorg/flyte/flyteidl/gen/pb-go/fl" + + "yteidl/datacatalogb\006proto3" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { @@ -34101,7 +34475,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors( internal_static_datacatalog_DatasetID_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_datacatalog_DatasetID_descriptor, - new java.lang.String[] { "Project", "Name", "Domain", "Version", "UUID", }); + new java.lang.String[] { "Project", "Name", "Domain", "Version", "UUID", "Org", }); internal_static_datacatalog_Artifact_descriptor = getDescriptor().getMessageTypes().get(25); internal_static_datacatalog_Artifact_fieldAccessorTable = new @@ -34173,7 +34547,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors( internal_static_datacatalog_DatasetPropertyFilter_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_datacatalog_DatasetPropertyFilter_descriptor, - new java.lang.String[] { "Project", "Name", "Domain", "Version", "Property", }); + new java.lang.String[] { "Project", "Name", "Domain", "Version", "Org", "Property", }); internal_static_datacatalog_PaginationOptions_descriptor = getDescriptor().getMessageTypes().get(36); internal_static_datacatalog_PaginationOptions_fieldAccessorTable = new diff --git a/flyteidl/gen/pb-java/flyteidl/admin/Common.java b/flyteidl/gen/pb-java/flyteidl/admin/Common.java index 4120abc852..bc18ef3c1e 100644 --- a/flyteidl/gen/pb-java/flyteidl/admin/Common.java +++ b/flyteidl/gen/pb-java/flyteidl/admin/Common.java @@ -212,6 +212,24 @@ public interface NamedEntityIdentifierOrBuilder extends */ com.google.protobuf.ByteString getNameBytes(); + + /** + *
+     * Optional, org key applied to the resource.
+     * 
+ * + * string org = 4; + */ + java.lang.String getOrg(); + /** + *
+     * Optional, org key applied to the resource.
+     * 
+ * + * string org = 4; + */ + com.google.protobuf.ByteString + getOrgBytes(); } /** *
@@ -236,6 +254,7 @@ private NamedEntityIdentifier() {
       project_ = "";
       domain_ = "";
       name_ = "";
+      org_ = "";
     }
 
     @java.lang.Override
@@ -280,6 +299,12 @@ private NamedEntityIdentifier(
               name_ = s;
               break;
             }
+            case 34: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              org_ = s;
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -444,6 +469,48 @@ public java.lang.String getName() {
       }
     }
 
+    public static final int ORG_FIELD_NUMBER = 4;
+    private volatile java.lang.Object org_;
+    /**
+     * 
+     * Optional, org key applied to the resource.
+     * 
+ * + * string org = 4; + */ + public java.lang.String getOrg() { + java.lang.Object ref = org_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + org_ = s; + return s; + } + } + /** + *
+     * Optional, org key applied to the resource.
+     * 
+ * + * string org = 4; + */ + public com.google.protobuf.ByteString + getOrgBytes() { + java.lang.Object ref = org_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + org_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -467,6 +534,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) if (!getNameBytes().isEmpty()) { com.google.protobuf.GeneratedMessageV3.writeString(output, 3, name_); } + if (!getOrgBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 4, org_); + } unknownFields.writeTo(output); } @@ -485,6 +555,9 @@ public int getSerializedSize() { if (!getNameBytes().isEmpty()) { size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, name_); } + if (!getOrgBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, org_); + } size += unknownFields.getSerializedSize(); memoizedSize = size; return size; @@ -506,6 +579,8 @@ public boolean equals(final java.lang.Object obj) { .equals(other.getDomain())) return false; if (!getName() .equals(other.getName())) return false; + if (!getOrg() + .equals(other.getOrg())) return false; if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -523,6 +598,8 @@ public int hashCode() { hash = (53 * hash) + getDomain().hashCode(); hash = (37 * hash) + NAME_FIELD_NUMBER; hash = (53 * hash) + getName().hashCode(); + hash = (37 * hash) + ORG_FIELD_NUMBER; + hash = (53 * hash) + getOrg().hashCode(); hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; @@ -669,6 +746,8 @@ public Builder clear() { name_ = ""; + org_ = ""; + return this; } @@ -698,6 +777,7 @@ public flyteidl.admin.Common.NamedEntityIdentifier buildPartial() { result.project_ = project_; result.domain_ = domain_; result.name_ = name_; + result.org_ = org_; onBuilt(); return result; } @@ -758,6 +838,10 @@ public Builder mergeFrom(flyteidl.admin.Common.NamedEntityIdentifier other) { name_ = other.name_; onChanged(); } + if (!other.getOrg().isEmpty()) { + org_ = other.org_; + onChanged(); + } this.mergeUnknownFields(other.unknownFields); onChanged(); return this; @@ -1068,6 +1152,95 @@ public Builder setNameBytes( onChanged(); return this; } + + private java.lang.Object org_ = ""; + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 4; + */ + public java.lang.String getOrg() { + java.lang.Object ref = org_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + org_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 4; + */ + public com.google.protobuf.ByteString + getOrgBytes() { + java.lang.Object ref = org_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + org_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 4; + */ + public Builder setOrg( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + org_ = value; + onChanged(); + return this; + } + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 4; + */ + public Builder clearOrg() { + + org_ = getDefaultInstance().getOrg(); + onChanged(); + return this; + } + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 4; + */ + public Builder setOrgBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + org_ = value; + onChanged(); + return this; + } @java.lang.Override public final Builder setUnknownFields( final com.google.protobuf.UnknownFieldSet unknownFields) { @@ -3834,6 +4007,24 @@ public interface NamedEntityIdentifierListRequestOrBuilder extends */ com.google.protobuf.ByteString getFiltersBytes(); + + /** + *
+     * Optional, org key applied to the resource.
+     * 
+ * + * string org = 7; + */ + java.lang.String getOrg(); + /** + *
+     * Optional, org key applied to the resource.
+     * 
+ * + * string org = 7; + */ + com.google.protobuf.ByteString + getOrgBytes(); } /** *
@@ -3856,6 +4047,7 @@ private NamedEntityIdentifierListRequest() {
       domain_ = "";
       token_ = "";
       filters_ = "";
+      org_ = "";
     }
 
     @java.lang.Override
@@ -3924,6 +4116,12 @@ private NamedEntityIdentifierListRequest(
               filters_ = s;
               break;
             }
+            case 58: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              org_ = s;
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -4184,6 +4382,48 @@ public java.lang.String getFilters() {
       }
     }
 
+    public static final int ORG_FIELD_NUMBER = 7;
+    private volatile java.lang.Object org_;
+    /**
+     * 
+     * Optional, org key applied to the resource.
+     * 
+ * + * string org = 7; + */ + public java.lang.String getOrg() { + java.lang.Object ref = org_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + org_ = s; + return s; + } + } + /** + *
+     * Optional, org key applied to the resource.
+     * 
+ * + * string org = 7; + */ + public com.google.protobuf.ByteString + getOrgBytes() { + java.lang.Object ref = org_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + org_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -4216,6 +4456,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) if (!getFiltersBytes().isEmpty()) { com.google.protobuf.GeneratedMessageV3.writeString(output, 6, filters_); } + if (!getOrgBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 7, org_); + } unknownFields.writeTo(output); } @@ -4245,6 +4488,9 @@ public int getSerializedSize() { if (!getFiltersBytes().isEmpty()) { size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, filters_); } + if (!getOrgBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(7, org_); + } size += unknownFields.getSerializedSize(); memoizedSize = size; return size; @@ -4275,6 +4521,8 @@ public boolean equals(final java.lang.Object obj) { } if (!getFilters() .equals(other.getFilters())) return false; + if (!getOrg() + .equals(other.getOrg())) return false; if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -4300,6 +4548,8 @@ public int hashCode() { } hash = (37 * hash) + FILTERS_FIELD_NUMBER; hash = (53 * hash) + getFilters().hashCode(); + hash = (37 * hash) + ORG_FIELD_NUMBER; + hash = (53 * hash) + getOrg().hashCode(); hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; @@ -4453,6 +4703,8 @@ public Builder clear() { } filters_ = ""; + org_ = ""; + return this; } @@ -4489,6 +4741,7 @@ public flyteidl.admin.Common.NamedEntityIdentifierListRequest buildPartial() { result.sortBy_ = sortByBuilder_.build(); } result.filters_ = filters_; + result.org_ = org_; onBuilt(); return result; } @@ -4559,6 +4812,10 @@ public Builder mergeFrom(flyteidl.admin.Common.NamedEntityIdentifierListRequest filters_ = other.filters_; onChanged(); } + if (!other.getOrg().isEmpty()) { + org_ = other.org_; + onChanged(); + } this.mergeUnknownFields(other.unknownFields); onChanged(); return this; @@ -5171,6 +5428,95 @@ public Builder setFiltersBytes( onChanged(); return this; } + + private java.lang.Object org_ = ""; + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 7; + */ + public java.lang.String getOrg() { + java.lang.Object ref = org_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + org_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 7; + */ + public com.google.protobuf.ByteString + getOrgBytes() { + java.lang.Object ref = org_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + org_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 7; + */ + public Builder setOrg( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + org_ = value; + onChanged(); + return this; + } + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 7; + */ + public Builder clearOrg() { + + org_ = getDefaultInstance().getOrg(); + onChanged(); + return this; + } + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 7; + */ + public Builder setOrgBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + org_ = value; + onChanged(); + return this; + } @java.lang.Override public final Builder setUnknownFields( final com.google.protobuf.UnknownFieldSet unknownFields) { @@ -5363,6 +5709,24 @@ public interface NamedEntityListRequestOrBuilder extends */ com.google.protobuf.ByteString getFiltersBytes(); + + /** + *
+     * Optional, org key applied to the resource.
+     * 
+ * + * string org = 8; + */ + java.lang.String getOrg(); + /** + *
+     * Optional, org key applied to the resource.
+     * 
+ * + * string org = 8; + */ + com.google.protobuf.ByteString + getOrgBytes(); } /** *
@@ -5386,6 +5750,7 @@ private NamedEntityListRequest() {
       domain_ = "";
       token_ = "";
       filters_ = "";
+      org_ = "";
     }
 
     @java.lang.Override
@@ -5460,6 +5825,12 @@ private NamedEntityListRequest(
               filters_ = s;
               break;
             }
+            case 66: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              org_ = s;
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -5744,6 +6115,48 @@ public java.lang.String getFilters() {
       }
     }
 
+    public static final int ORG_FIELD_NUMBER = 8;
+    private volatile java.lang.Object org_;
+    /**
+     * 
+     * Optional, org key applied to the resource.
+     * 
+ * + * string org = 8; + */ + public java.lang.String getOrg() { + java.lang.Object ref = org_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + org_ = s; + return s; + } + } + /** + *
+     * Optional, org key applied to the resource.
+     * 
+ * + * string org = 8; + */ + public com.google.protobuf.ByteString + getOrgBytes() { + java.lang.Object ref = org_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + org_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -5779,6 +6192,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) if (!getFiltersBytes().isEmpty()) { com.google.protobuf.GeneratedMessageV3.writeString(output, 7, filters_); } + if (!getOrgBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 8, org_); + } unknownFields.writeTo(output); } @@ -5812,6 +6228,9 @@ public int getSerializedSize() { if (!getFiltersBytes().isEmpty()) { size += com.google.protobuf.GeneratedMessageV3.computeStringSize(7, filters_); } + if (!getOrgBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(8, org_); + } size += unknownFields.getSerializedSize(); memoizedSize = size; return size; @@ -5843,6 +6262,8 @@ public boolean equals(final java.lang.Object obj) { } if (!getFilters() .equals(other.getFilters())) return false; + if (!getOrg() + .equals(other.getOrg())) return false; if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -5870,6 +6291,8 @@ public int hashCode() { } hash = (37 * hash) + FILTERS_FIELD_NUMBER; hash = (53 * hash) + getFilters().hashCode(); + hash = (37 * hash) + ORG_FIELD_NUMBER; + hash = (53 * hash) + getOrg().hashCode(); hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; @@ -6025,6 +6448,8 @@ public Builder clear() { } filters_ = ""; + org_ = ""; + return this; } @@ -6062,6 +6487,7 @@ public flyteidl.admin.Common.NamedEntityListRequest buildPartial() { result.sortBy_ = sortByBuilder_.build(); } result.filters_ = filters_; + result.org_ = org_; onBuilt(); return result; } @@ -6135,6 +6561,10 @@ public Builder mergeFrom(flyteidl.admin.Common.NamedEntityListRequest other) { filters_ = other.filters_; onChanged(); } + if (!other.getOrg().isEmpty()) { + org_ = other.org_; + onChanged(); + } this.mergeUnknownFields(other.unknownFields); onChanged(); return this; @@ -6809,6 +7239,95 @@ public Builder setFiltersBytes( onChanged(); return this; } + + private java.lang.Object org_ = ""; + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 8; + */ + public java.lang.String getOrg() { + java.lang.Object ref = org_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + org_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 8; + */ + public com.google.protobuf.ByteString + getOrgBytes() { + java.lang.Object ref = org_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + org_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 8; + */ + public Builder setOrg( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + org_ = value; + onChanged(); + return this; + } + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 8; + */ + public Builder clearOrg() { + + org_ = getDefaultInstance().getOrg(); + onChanged(); + return this; + } + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 8; + */ + public Builder setOrgBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + org_ = value; + onChanged(); + return this; + } @java.lang.Override public final Builder setUnknownFields( final com.google.protobuf.UnknownFieldSet unknownFields) { @@ -22622,73 +23141,73 @@ public flyteidl.admin.Common.FlyteURLs getDefaultInstanceForType() { "admin\032\035flyteidl/core/execution.proto\032\036fl" + "yteidl/core/identifier.proto\032\034flyteidl/c" + "ore/literals.proto\032\037google/protobuf/time" + - "stamp.proto\"F\n\025NamedEntityIdentifier\022\017\n\007" + + "stamp.proto\"S\n\025NamedEntityIdentifier\022\017\n\007" + "project\030\001 \001(\t\022\016\n\006domain\030\002 \001(\t\022\014\n\004name\030\003 " + - "\001(\t\"[\n\023NamedEntityMetadata\022\023\n\013descriptio" + - "n\030\001 \001(\t\022/\n\005state\030\002 \001(\0162 .flyteidl.admin." + - "NamedEntityState\"\253\001\n\013NamedEntity\0222\n\rreso" + - "urce_type\030\001 \001(\0162\033.flyteidl.core.Resource" + - "Type\0221\n\002id\030\002 \001(\0132%.flyteidl.admin.NamedE" + - "ntityIdentifier\0225\n\010metadata\030\003 \001(\0132#.flyt" + - "eidl.admin.NamedEntityMetadata\"r\n\004Sort\022\013" + - "\n\003key\030\001 \001(\t\0221\n\tdirection\030\002 \001(\0162\036.flyteid" + - "l.admin.Sort.Direction\"*\n\tDirection\022\016\n\nD" + - "ESCENDING\020\000\022\r\n\tASCENDING\020\001\"\231\001\n NamedEnti" + - "tyIdentifierListRequest\022\017\n\007project\030\001 \001(\t" + - "\022\016\n\006domain\030\002 \001(\t\022\r\n\005limit\030\003 \001(\r\022\r\n\005token" + + "\001(\t\022\013\n\003org\030\004 \001(\t\"[\n\023NamedEntityMetadata\022" + + "\023\n\013description\030\001 \001(\t\022/\n\005state\030\002 \001(\0162 .fl" + + "yteidl.admin.NamedEntityState\"\253\001\n\013NamedE" + + "ntity\0222\n\rresource_type\030\001 \001(\0162\033.flyteidl." + + "core.ResourceType\0221\n\002id\030\002 \001(\0132%.flyteidl" + + ".admin.NamedEntityIdentifier\0225\n\010metadata" + + "\030\003 \001(\0132#.flyteidl.admin.NamedEntityMetad" + + "ata\"r\n\004Sort\022\013\n\003key\030\001 \001(\t\0221\n\tdirection\030\002 " + + "\001(\0162\036.flyteidl.admin.Sort.Direction\"*\n\tD" + + "irection\022\016\n\nDESCENDING\020\000\022\r\n\tASCENDING\020\001\"" + + "\246\001\n NamedEntityIdentifierListRequest\022\017\n\007" + + "project\030\001 \001(\t\022\016\n\006domain\030\002 \001(\t\022\r\n\005limit\030\003" + + " \001(\r\022\r\n\005token\030\004 \001(\t\022%\n\007sort_by\030\005 \001(\0132\024.f" + + "lyteidl.admin.Sort\022\017\n\007filters\030\006 \001(\t\022\013\n\003o" + + "rg\030\007 \001(\t\"\320\001\n\026NamedEntityListRequest\0222\n\rr" + + "esource_type\030\001 \001(\0162\033.flyteidl.core.Resou" + + "rceType\022\017\n\007project\030\002 \001(\t\022\016\n\006domain\030\003 \001(\t" + + "\022\r\n\005limit\030\004 \001(\r\022\r\n\005token\030\005 \001(\t\022%\n\007sort_b" + + "y\030\006 \001(\0132\024.flyteidl.admin.Sort\022\017\n\007filters" + + "\030\007 \001(\t\022\013\n\003org\030\010 \001(\t\"c\n\031NamedEntityIdenti" + + "fierList\0227\n\010entities\030\001 \003(\0132%.flyteidl.ad" + + "min.NamedEntityIdentifier\022\r\n\005token\030\002 \001(\t" + + "\"O\n\017NamedEntityList\022-\n\010entities\030\001 \003(\0132\033." + + "flyteidl.admin.NamedEntity\022\r\n\005token\030\002 \001(" + + "\t\"~\n\025NamedEntityGetRequest\0222\n\rresource_t" + + "ype\030\001 \001(\0162\033.flyteidl.core.ResourceType\0221" + + "\n\002id\030\002 \001(\0132%.flyteidl.admin.NamedEntityI" + + "dentifier\"\270\001\n\030NamedEntityUpdateRequest\0222" + + "\n\rresource_type\030\001 \001(\0162\033.flyteidl.core.Re" + + "sourceType\0221\n\002id\030\002 \001(\0132%.flyteidl.admin." + + "NamedEntityIdentifier\0225\n\010metadata\030\003 \001(\0132" + + "#.flyteidl.admin.NamedEntityMetadata\"\033\n\031" + + "NamedEntityUpdateResponse\"9\n\020ObjectGetRe" + + "quest\022%\n\002id\030\001 \001(\0132\031.flyteidl.core.Identi" + + "fier\"\236\001\n\023ResourceListRequest\0221\n\002id\030\001 \001(\013" + + "2%.flyteidl.admin.NamedEntityIdentifier\022" + + "\r\n\005limit\030\002 \001(\r\022\r\n\005token\030\003 \001(\t\022\017\n\007filters" + "\030\004 \001(\t\022%\n\007sort_by\030\005 \001(\0132\024.flyteidl.admin" + - ".Sort\022\017\n\007filters\030\006 \001(\t\"\303\001\n\026NamedEntityLi" + - "stRequest\0222\n\rresource_type\030\001 \001(\0162\033.flyte" + - "idl.core.ResourceType\022\017\n\007project\030\002 \001(\t\022\016" + - "\n\006domain\030\003 \001(\t\022\r\n\005limit\030\004 \001(\r\022\r\n\005token\030\005" + - " \001(\t\022%\n\007sort_by\030\006 \001(\0132\024.flyteidl.admin.S" + - "ort\022\017\n\007filters\030\007 \001(\t\"c\n\031NamedEntityIdent" + - "ifierList\0227\n\010entities\030\001 \003(\0132%.flyteidl.a" + - "dmin.NamedEntityIdentifier\022\r\n\005token\030\002 \001(" + - "\t\"O\n\017NamedEntityList\022-\n\010entities\030\001 \003(\0132\033" + - ".flyteidl.admin.NamedEntity\022\r\n\005token\030\002 \001" + - "(\t\"~\n\025NamedEntityGetRequest\0222\n\rresource_" + - "type\030\001 \001(\0162\033.flyteidl.core.ResourceType\022" + - "1\n\002id\030\002 \001(\0132%.flyteidl.admin.NamedEntity" + - "Identifier\"\270\001\n\030NamedEntityUpdateRequest\022" + - "2\n\rresource_type\030\001 \001(\0162\033.flyteidl.core.R" + - "esourceType\0221\n\002id\030\002 \001(\0132%.flyteidl.admin" + - ".NamedEntityIdentifier\0225\n\010metadata\030\003 \001(\013" + - "2#.flyteidl.admin.NamedEntityMetadata\"\033\n" + - "\031NamedEntityUpdateResponse\"9\n\020ObjectGetR" + - "equest\022%\n\002id\030\001 \001(\0132\031.flyteidl.core.Ident" + - "ifier\"\236\001\n\023ResourceListRequest\0221\n\002id\030\001 \001(" + - "\0132%.flyteidl.admin.NamedEntityIdentifier" + - "\022\r\n\005limit\030\002 \001(\r\022\r\n\005token\030\003 \001(\t\022\017\n\007filter" + - "s\030\004 \001(\t\022%\n\007sort_by\030\005 \001(\0132\024.flyteidl.admi" + - "n.Sort\"-\n\021EmailNotification\022\030\n\020recipient" + - "s_email\030\001 \003(\t\"1\n\025PagerDutyNotification\022\030" + - "\n\020recipients_email\030\001 \003(\t\"-\n\021SlackNotific" + - "ation\022\030\n\020recipients_email\030\001 \003(\t\"\363\001\n\014Noti" + - "fication\0226\n\006phases\030\001 \003(\0162&.flyteidl.core" + - ".WorkflowExecution.Phase\0222\n\005email\030\002 \001(\0132" + - "!.flyteidl.admin.EmailNotificationH\000\022;\n\n" + - "pager_duty\030\003 \001(\0132%.flyteidl.admin.PagerD" + - "utyNotificationH\000\0222\n\005slack\030\004 \001(\0132!.flyte" + - "idl.admin.SlackNotificationH\000B\006\n\004type\")\n" + - "\007UrlBlob\022\013\n\003url\030\001 \001(\t\022\r\n\005bytes\030\002 \001(\003:\002\030\001" + - "\"k\n\006Labels\0222\n\006values\030\001 \003(\0132\".flyteidl.ad" + - "min.Labels.ValuesEntry\032-\n\013ValuesEntry\022\013\n" + - "\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"u\n\013Annotat" + - "ions\0227\n\006values\030\001 \003(\0132\'.flyteidl.admin.An" + - "notations.ValuesEntry\032-\n\013ValuesEntry\022\013\n\003" + - "key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"3\n\004Envs\022+\n\006" + - "values\030\001 \003(\0132\033.flyteidl.core.KeyValuePai" + - "r\"N\n\010AuthRole\022\032\n\022assumable_iam_role\030\001 \001(" + - "\t\022\"\n\032kubernetes_service_account\030\002 \001(\t:\002\030" + - "\001\"5\n\023RawOutputDataConfig\022\036\n\026output_locat" + - "ion_prefix\030\001 \001(\t\":\n\tFlyteURLs\022\016\n\006inputs\030" + - "\001 \001(\t\022\017\n\007outputs\030\002 \001(\t\022\014\n\004deck\030\003 \001(\t*\\\n\020" + - "NamedEntityState\022\027\n\023NAMED_ENTITY_ACTIVE\020" + - "\000\022\031\n\025NAMED_ENTITY_ARCHIVED\020\001\022\024\n\020SYSTEM_G" + - "ENERATED\020\002B=Z;github.com/flyteorg/flyte/" + - "flyteidl/gen/pb-go/flyteidl/adminb\006proto" + - "3" + ".Sort\"-\n\021EmailNotification\022\030\n\020recipients" + + "_email\030\001 \003(\t\"1\n\025PagerDutyNotification\022\030\n" + + "\020recipients_email\030\001 \003(\t\"-\n\021SlackNotifica" + + "tion\022\030\n\020recipients_email\030\001 \003(\t\"\363\001\n\014Notif" + + "ication\0226\n\006phases\030\001 \003(\0162&.flyteidl.core." + + "WorkflowExecution.Phase\0222\n\005email\030\002 \001(\0132!" + + ".flyteidl.admin.EmailNotificationH\000\022;\n\np" + + "ager_duty\030\003 \001(\0132%.flyteidl.admin.PagerDu" + + "tyNotificationH\000\0222\n\005slack\030\004 \001(\0132!.flytei" + + "dl.admin.SlackNotificationH\000B\006\n\004type\")\n\007" + + "UrlBlob\022\013\n\003url\030\001 \001(\t\022\r\n\005bytes\030\002 \001(\003:\002\030\001\"" + + "k\n\006Labels\0222\n\006values\030\001 \003(\0132\".flyteidl.adm" + + "in.Labels.ValuesEntry\032-\n\013ValuesEntry\022\013\n\003" + + "key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"u\n\013Annotati" + + "ons\0227\n\006values\030\001 \003(\0132\'.flyteidl.admin.Ann" + + "otations.ValuesEntry\032-\n\013ValuesEntry\022\013\n\003k" + + "ey\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"3\n\004Envs\022+\n\006v" + + "alues\030\001 \003(\0132\033.flyteidl.core.KeyValuePair" + + "\"N\n\010AuthRole\022\032\n\022assumable_iam_role\030\001 \001(\t" + + "\022\"\n\032kubernetes_service_account\030\002 \001(\t:\002\030\001" + + "\"5\n\023RawOutputDataConfig\022\036\n\026output_locati" + + "on_prefix\030\001 \001(\t\":\n\tFlyteURLs\022\016\n\006inputs\030\001" + + " \001(\t\022\017\n\007outputs\030\002 \001(\t\022\014\n\004deck\030\003 \001(\t*\\\n\020N" + + "amedEntityState\022\027\n\023NAMED_ENTITY_ACTIVE\020\000" + + "\022\031\n\025NAMED_ENTITY_ARCHIVED\020\001\022\024\n\020SYSTEM_GE" + + "NERATED\020\002B=Z;github.com/flyteorg/flyte/f" + + "lyteidl/gen/pb-go/flyteidl/adminb\006proto3" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { @@ -22711,7 +23230,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors( internal_static_flyteidl_admin_NamedEntityIdentifier_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_flyteidl_admin_NamedEntityIdentifier_descriptor, - new java.lang.String[] { "Project", "Domain", "Name", }); + new java.lang.String[] { "Project", "Domain", "Name", "Org", }); internal_static_flyteidl_admin_NamedEntityMetadata_descriptor = getDescriptor().getMessageTypes().get(1); internal_static_flyteidl_admin_NamedEntityMetadata_fieldAccessorTable = new @@ -22735,13 +23254,13 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors( internal_static_flyteidl_admin_NamedEntityIdentifierListRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_flyteidl_admin_NamedEntityIdentifierListRequest_descriptor, - new java.lang.String[] { "Project", "Domain", "Limit", "Token", "SortBy", "Filters", }); + new java.lang.String[] { "Project", "Domain", "Limit", "Token", "SortBy", "Filters", "Org", }); internal_static_flyteidl_admin_NamedEntityListRequest_descriptor = getDescriptor().getMessageTypes().get(5); internal_static_flyteidl_admin_NamedEntityListRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_flyteidl_admin_NamedEntityListRequest_descriptor, - new java.lang.String[] { "ResourceType", "Project", "Domain", "Limit", "Token", "SortBy", "Filters", }); + new java.lang.String[] { "ResourceType", "Project", "Domain", "Limit", "Token", "SortBy", "Filters", "Org", }); internal_static_flyteidl_admin_NamedEntityIdentifierList_descriptor = getDescriptor().getMessageTypes().get(6); internal_static_flyteidl_admin_NamedEntityIdentifierList_fieldAccessorTable = new diff --git a/flyteidl/gen/pb-java/flyteidl/admin/ExecutionOuterClass.java b/flyteidl/gen/pb-java/flyteidl/admin/ExecutionOuterClass.java index 102ff472f0..57ad2a4f24 100644 --- a/flyteidl/gen/pb-java/flyteidl/admin/ExecutionOuterClass.java +++ b/flyteidl/gen/pb-java/flyteidl/admin/ExecutionOuterClass.java @@ -258,6 +258,24 @@ public interface ExecutionCreateRequestOrBuilder extends * .flyteidl.core.LiteralMap inputs = 5; */ flyteidl.core.Literals.LiteralMapOrBuilder getInputsOrBuilder(); + + /** + *
+     * Optional, org key applied to the resource.
+     * 
+ * + * string org = 6; + */ + java.lang.String getOrg(); + /** + *
+     * Optional, org key applied to the resource.
+     * 
+ * + * string org = 6; + */ + com.google.protobuf.ByteString + getOrgBytes(); } /** *
@@ -279,6 +297,7 @@ private ExecutionCreateRequest() {
       project_ = "";
       domain_ = "";
       name_ = "";
+      org_ = "";
     }
 
     @java.lang.Override
@@ -349,6 +368,12 @@ private ExecutionCreateRequest(
 
               break;
             }
+            case 50: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              org_ = s;
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -592,6 +617,48 @@ public flyteidl.core.Literals.LiteralMapOrBuilder getInputsOrBuilder() {
       return getInputs();
     }
 
+    public static final int ORG_FIELD_NUMBER = 6;
+    private volatile java.lang.Object org_;
+    /**
+     * 
+     * Optional, org key applied to the resource.
+     * 
+ * + * string org = 6; + */ + public java.lang.String getOrg() { + java.lang.Object ref = org_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + org_ = s; + return s; + } + } + /** + *
+     * Optional, org key applied to the resource.
+     * 
+ * + * string org = 6; + */ + public com.google.protobuf.ByteString + getOrgBytes() { + java.lang.Object ref = org_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + org_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -621,6 +688,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) if (inputs_ != null) { output.writeMessage(5, getInputs()); } + if (!getOrgBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 6, org_); + } unknownFields.writeTo(output); } @@ -647,6 +717,9 @@ public int getSerializedSize() { size += com.google.protobuf.CodedOutputStream .computeMessageSize(5, getInputs()); } + if (!getOrgBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, org_); + } size += unknownFields.getSerializedSize(); memoizedSize = size; return size; @@ -678,6 +751,8 @@ public boolean equals(final java.lang.Object obj) { if (!getInputs() .equals(other.getInputs())) return false; } + if (!getOrg() + .equals(other.getOrg())) return false; if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -703,6 +778,8 @@ public int hashCode() { hash = (37 * hash) + INPUTS_FIELD_NUMBER; hash = (53 * hash) + getInputs().hashCode(); } + hash = (37 * hash) + ORG_FIELD_NUMBER; + hash = (53 * hash) + getOrg().hashCode(); hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; @@ -858,6 +935,8 @@ public Builder clear() { inputs_ = null; inputsBuilder_ = null; } + org_ = ""; + return this; } @@ -897,6 +976,7 @@ public flyteidl.admin.ExecutionOuterClass.ExecutionCreateRequest buildPartial() } else { result.inputs_ = inputsBuilder_.build(); } + result.org_ = org_; onBuilt(); return result; } @@ -963,6 +1043,10 @@ public Builder mergeFrom(flyteidl.admin.ExecutionOuterClass.ExecutionCreateReque if (other.hasInputs()) { mergeInputs(other.getInputs()); } + if (!other.getOrg().isEmpty()) { + org_ = other.org_; + onChanged(); + } this.mergeUnknownFields(other.unknownFields); onChanged(); return this; @@ -1616,6 +1700,95 @@ public flyteidl.core.Literals.LiteralMapOrBuilder getInputsOrBuilder() { } return inputsBuilder_; } + + private java.lang.Object org_ = ""; + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 6; + */ + public java.lang.String getOrg() { + java.lang.Object ref = org_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + org_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 6; + */ + public com.google.protobuf.ByteString + getOrgBytes() { + java.lang.Object ref = org_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + org_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 6; + */ + public Builder setOrg( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + org_ = value; + onChanged(); + return this; + } + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 6; + */ + public Builder clearOrg() { + + org_ = getDefaultInstance().getOrg(); + onChanged(); + return this; + } + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 6; + */ + public Builder setOrgBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + org_ = value; + onChanged(); + return this; + } @java.lang.Override public final Builder setUnknownFields( final com.google.protobuf.UnknownFieldSet unknownFields) { @@ -28956,114 +29129,114 @@ public flyteidl.admin.ExecutionOuterClass.WorkflowExecutionGetMetricsResponse ge "idl/core/security.proto\032\036google/protobuf" + "/duration.proto\032\037google/protobuf/timesta" + "mp.proto\032\036google/protobuf/wrappers.proto" + - "\"\237\001\n\026ExecutionCreateRequest\022\017\n\007project\030\001" + + "\"\254\001\n\026ExecutionCreateRequest\022\017\n\007project\030\001" + " \001(\t\022\016\n\006domain\030\002 \001(\t\022\014\n\004name\030\003 \001(\t\022+\n\004sp" + "ec\030\004 \001(\0132\035.flyteidl.admin.ExecutionSpec\022" + ")\n\006inputs\030\005 \001(\0132\031.flyteidl.core.LiteralM" + - "ap\"\177\n\030ExecutionRelaunchRequest\0226\n\002id\030\001 \001" + - "(\0132*.flyteidl.core.WorkflowExecutionIden" + - "tifier\022\014\n\004name\030\003 \001(\t\022\027\n\017overwrite_cache\030" + - "\004 \001(\010J\004\010\002\020\003\"\224\001\n\027ExecutionRecoverRequest\022" + + "ap\022\013\n\003org\030\006 \001(\t\"\177\n\030ExecutionRelaunchRequ" + + "est\0226\n\002id\030\001 \001(\0132*.flyteidl.core.Workflow" + + "ExecutionIdentifier\022\014\n\004name\030\003 \001(\t\022\027\n\017ove" + + "rwrite_cache\030\004 \001(\010J\004\010\002\020\003\"\224\001\n\027ExecutionRe" + + "coverRequest\0226\n\002id\030\001 \001(\0132*.flyteidl.core" + + ".WorkflowExecutionIdentifier\022\014\n\004name\030\002 \001" + + "(\t\0223\n\010metadata\030\003 \001(\0132!.flyteidl.admin.Ex" + + "ecutionMetadata\"Q\n\027ExecutionCreateRespon" + + "se\0226\n\002id\030\001 \001(\0132*.flyteidl.core.WorkflowE" + + "xecutionIdentifier\"U\n\033WorkflowExecutionG" + + "etRequest\0226\n\002id\030\001 \001(\0132*.flyteidl.core.Wo" + + "rkflowExecutionIdentifier\"\243\001\n\tExecution\022" + + "6\n\002id\030\001 \001(\0132*.flyteidl.core.WorkflowExec" + + "utionIdentifier\022+\n\004spec\030\002 \001(\0132\035.flyteidl" + + ".admin.ExecutionSpec\0221\n\007closure\030\003 \001(\0132 ." + + "flyteidl.admin.ExecutionClosure\"M\n\rExecu" + + "tionList\022-\n\nexecutions\030\001 \003(\0132\031.flyteidl." + + "admin.Execution\022\r\n\005token\030\002 \001(\t\"X\n\016Litera" + + "lMapBlob\022/\n\006values\030\001 \001(\0132\031.flyteidl.core" + + ".LiteralMapB\002\030\001H\000\022\r\n\003uri\030\002 \001(\tH\000B\006\n\004data" + + "\"1\n\rAbortMetadata\022\r\n\005cause\030\001 \001(\t\022\021\n\tprin" + + "cipal\030\002 \001(\t\"\360\005\n\020ExecutionClosure\0225\n\007outp" + + "uts\030\001 \001(\0132\036.flyteidl.admin.LiteralMapBlo" + + "bB\002\030\001H\000\022.\n\005error\030\002 \001(\0132\035.flyteidl.core.E" + + "xecutionErrorH\000\022\031\n\013abort_cause\030\n \001(\tB\002\030\001" + + "H\000\0227\n\016abort_metadata\030\014 \001(\0132\035.flyteidl.ad" + + "min.AbortMetadataH\000\0224\n\013output_data\030\r \001(\013" + + "2\031.flyteidl.core.LiteralMapB\002\030\001H\000\0226\n\017com" + + "puted_inputs\030\003 \001(\0132\031.flyteidl.core.Liter" + + "alMapB\002\030\001\0225\n\005phase\030\004 \001(\0162&.flyteidl.core" + + ".WorkflowExecution.Phase\022.\n\nstarted_at\030\005" + + " \001(\0132\032.google.protobuf.Timestamp\022+\n\010dura" + + "tion\030\006 \001(\0132\031.google.protobuf.Duration\022.\n" + + "\ncreated_at\030\007 \001(\0132\032.google.protobuf.Time" + + "stamp\022.\n\nupdated_at\030\010 \001(\0132\032.google.proto" + + "buf.Timestamp\0223\n\rnotifications\030\t \003(\0132\034.f" + + "lyteidl.admin.Notification\022.\n\013workflow_i" + + "d\030\013 \001(\0132\031.flyteidl.core.Identifier\022I\n\024st" + + "ate_change_details\030\016 \001(\0132+.flyteidl.admi" + + "n.ExecutionStateChangeDetailsB\017\n\routput_" + + "result\">\n\016SystemMetadata\022\031\n\021execution_cl" + + "uster\030\001 \001(\t\022\021\n\tnamespace\030\002 \001(\t\"\213\004\n\021Execu" + + "tionMetadata\022=\n\004mode\030\001 \001(\0162/.flyteidl.ad" + + "min.ExecutionMetadata.ExecutionMode\022\021\n\tp" + + "rincipal\030\002 \001(\t\022\017\n\007nesting\030\003 \001(\r\0220\n\014sched" + + "uled_at\030\004 \001(\0132\032.google.protobuf.Timestam" + + "p\022E\n\025parent_node_execution\030\005 \001(\0132&.flyte" + + "idl.core.NodeExecutionIdentifier\022G\n\023refe" + + "rence_execution\030\020 \001(\0132*.flyteidl.core.Wo" + + "rkflowExecutionIdentifier\0227\n\017system_meta" + + "data\030\021 \001(\0132\036.flyteidl.admin.SystemMetada" + + "ta\022/\n\014artifact_ids\030\022 \003(\0132\031.flyteidl.core" + + ".ArtifactID\"g\n\rExecutionMode\022\n\n\006MANUAL\020\000" + + "\022\r\n\tSCHEDULED\020\001\022\n\n\006SYSTEM\020\002\022\014\n\010RELAUNCH\020" + + "\003\022\022\n\016CHILD_WORKFLOW\020\004\022\r\n\tRECOVERED\020\005\"G\n\020" + + "NotificationList\0223\n\rnotifications\030\001 \003(\0132" + + "\034.flyteidl.admin.Notification\"\262\006\n\rExecut" + + "ionSpec\022.\n\013launch_plan\030\001 \001(\0132\031.flyteidl." + + "core.Identifier\022-\n\006inputs\030\002 \001(\0132\031.flytei" + + "dl.core.LiteralMapB\002\030\001\0223\n\010metadata\030\003 \001(\013" + + "2!.flyteidl.admin.ExecutionMetadata\0229\n\rn" + + "otifications\030\005 \001(\0132 .flyteidl.admin.Noti" + + "ficationListH\000\022\025\n\013disable_all\030\006 \001(\010H\000\022&\n" + + "\006labels\030\007 \001(\0132\026.flyteidl.admin.Labels\0220\n" + + "\013annotations\030\010 \001(\0132\033.flyteidl.admin.Anno" + + "tations\0228\n\020security_context\030\n \001(\0132\036.flyt" + + "eidl.core.SecurityContext\022/\n\tauth_role\030\020" + + " \001(\0132\030.flyteidl.admin.AuthRoleB\002\030\001\022;\n\022qu" + + "ality_of_service\030\021 \001(\0132\037.flyteidl.core.Q" + + "ualityOfService\022\027\n\017max_parallelism\030\022 \001(\005" + + "\022C\n\026raw_output_data_config\030\023 \001(\0132#.flyte" + + "idl.admin.RawOutputDataConfig\022=\n\022cluster" + + "_assignment\030\024 \001(\0132!.flyteidl.admin.Clust" + + "erAssignment\0221\n\rinterruptible\030\025 \001(\0132\032.go" + + "ogle.protobuf.BoolValue\022\027\n\017overwrite_cac" + + "he\030\026 \001(\010\022\"\n\004envs\030\027 \001(\0132\024.flyteidl.admin." + + "Envs\022\014\n\004tags\030\030 \003(\tB\030\n\026notification_overr" + + "idesJ\004\010\004\020\005\"b\n\031ExecutionTerminateRequest\022" + "6\n\002id\030\001 \001(\0132*.flyteidl.core.WorkflowExec" + - "utionIdentifier\022\014\n\004name\030\002 \001(\t\0223\n\010metadat" + - "a\030\003 \001(\0132!.flyteidl.admin.ExecutionMetada" + - "ta\"Q\n\027ExecutionCreateResponse\0226\n\002id\030\001 \001(" + - "\0132*.flyteidl.core.WorkflowExecutionIdent" + - "ifier\"U\n\033WorkflowExecutionGetRequest\0226\n\002" + - "id\030\001 \001(\0132*.flyteidl.core.WorkflowExecuti" + - "onIdentifier\"\243\001\n\tExecution\0226\n\002id\030\001 \001(\0132*" + - ".flyteidl.core.WorkflowExecutionIdentifi" + - "er\022+\n\004spec\030\002 \001(\0132\035.flyteidl.admin.Execut" + - "ionSpec\0221\n\007closure\030\003 \001(\0132 .flyteidl.admi" + - "n.ExecutionClosure\"M\n\rExecutionList\022-\n\ne" + - "xecutions\030\001 \003(\0132\031.flyteidl.admin.Executi" + - "on\022\r\n\005token\030\002 \001(\t\"X\n\016LiteralMapBlob\022/\n\006v" + - "alues\030\001 \001(\0132\031.flyteidl.core.LiteralMapB\002" + - "\030\001H\000\022\r\n\003uri\030\002 \001(\tH\000B\006\n\004data\"1\n\rAbortMeta" + - "data\022\r\n\005cause\030\001 \001(\t\022\021\n\tprincipal\030\002 \001(\t\"\360" + - "\005\n\020ExecutionClosure\0225\n\007outputs\030\001 \001(\0132\036.f" + - "lyteidl.admin.LiteralMapBlobB\002\030\001H\000\022.\n\005er" + - "ror\030\002 \001(\0132\035.flyteidl.core.ExecutionError" + - "H\000\022\031\n\013abort_cause\030\n \001(\tB\002\030\001H\000\0227\n\016abort_m" + - "etadata\030\014 \001(\0132\035.flyteidl.admin.AbortMeta" + - "dataH\000\0224\n\013output_data\030\r \001(\0132\031.flyteidl.c" + - "ore.LiteralMapB\002\030\001H\000\0226\n\017computed_inputs\030" + - "\003 \001(\0132\031.flyteidl.core.LiteralMapB\002\030\001\0225\n\005" + - "phase\030\004 \001(\0162&.flyteidl.core.WorkflowExec" + - "ution.Phase\022.\n\nstarted_at\030\005 \001(\0132\032.google" + - ".protobuf.Timestamp\022+\n\010duration\030\006 \001(\0132\031." + - "google.protobuf.Duration\022.\n\ncreated_at\030\007" + - " \001(\0132\032.google.protobuf.Timestamp\022.\n\nupda" + - "ted_at\030\010 \001(\0132\032.google.protobuf.Timestamp" + - "\0223\n\rnotifications\030\t \003(\0132\034.flyteidl.admin" + - ".Notification\022.\n\013workflow_id\030\013 \001(\0132\031.fly" + - "teidl.core.Identifier\022I\n\024state_change_de" + - "tails\030\016 \001(\0132+.flyteidl.admin.ExecutionSt" + - "ateChangeDetailsB\017\n\routput_result\">\n\016Sys" + - "temMetadata\022\031\n\021execution_cluster\030\001 \001(\t\022\021" + - "\n\tnamespace\030\002 \001(\t\"\213\004\n\021ExecutionMetadata\022" + - "=\n\004mode\030\001 \001(\0162/.flyteidl.admin.Execution" + - "Metadata.ExecutionMode\022\021\n\tprincipal\030\002 \001(" + - "\t\022\017\n\007nesting\030\003 \001(\r\0220\n\014scheduled_at\030\004 \001(\013" + - "2\032.google.protobuf.Timestamp\022E\n\025parent_n" + - "ode_execution\030\005 \001(\0132&.flyteidl.core.Node" + - "ExecutionIdentifier\022G\n\023reference_executi" + - "on\030\020 \001(\0132*.flyteidl.core.WorkflowExecuti" + - "onIdentifier\0227\n\017system_metadata\030\021 \001(\0132\036." + - "flyteidl.admin.SystemMetadata\022/\n\014artifac" + - "t_ids\030\022 \003(\0132\031.flyteidl.core.ArtifactID\"g" + - "\n\rExecutionMode\022\n\n\006MANUAL\020\000\022\r\n\tSCHEDULED" + - "\020\001\022\n\n\006SYSTEM\020\002\022\014\n\010RELAUNCH\020\003\022\022\n\016CHILD_WO" + - "RKFLOW\020\004\022\r\n\tRECOVERED\020\005\"G\n\020NotificationL" + - "ist\0223\n\rnotifications\030\001 \003(\0132\034.flyteidl.ad" + - "min.Notification\"\262\006\n\rExecutionSpec\022.\n\013la" + - "unch_plan\030\001 \001(\0132\031.flyteidl.core.Identifi" + - "er\022-\n\006inputs\030\002 \001(\0132\031.flyteidl.core.Liter" + - "alMapB\002\030\001\0223\n\010metadata\030\003 \001(\0132!.flyteidl.a" + - "dmin.ExecutionMetadata\0229\n\rnotifications\030" + - "\005 \001(\0132 .flyteidl.admin.NotificationListH" + - "\000\022\025\n\013disable_all\030\006 \001(\010H\000\022&\n\006labels\030\007 \001(\013" + - "2\026.flyteidl.admin.Labels\0220\n\013annotations\030" + - "\010 \001(\0132\033.flyteidl.admin.Annotations\0228\n\020se" + - "curity_context\030\n \001(\0132\036.flyteidl.core.Sec" + - "urityContext\022/\n\tauth_role\030\020 \001(\0132\030.flytei" + - "dl.admin.AuthRoleB\002\030\001\022;\n\022quality_of_serv" + - "ice\030\021 \001(\0132\037.flyteidl.core.QualityOfServi" + - "ce\022\027\n\017max_parallelism\030\022 \001(\005\022C\n\026raw_outpu" + - "t_data_config\030\023 \001(\0132#.flyteidl.admin.Raw" + - "OutputDataConfig\022=\n\022cluster_assignment\030\024" + - " \001(\0132!.flyteidl.admin.ClusterAssignment\022" + - "1\n\rinterruptible\030\025 \001(\0132\032.google.protobuf" + - ".BoolValue\022\027\n\017overwrite_cache\030\026 \001(\010\022\"\n\004e" + - "nvs\030\027 \001(\0132\024.flyteidl.admin.Envs\022\014\n\004tags\030" + - "\030 \003(\tB\030\n\026notification_overridesJ\004\010\004\020\005\"b\n" + - "\031ExecutionTerminateRequest\0226\n\002id\030\001 \001(\0132*" + - ".flyteidl.core.WorkflowExecutionIdentifi" + - "er\022\r\n\005cause\030\002 \001(\t\"\034\n\032ExecutionTerminateR" + - "esponse\"Y\n\037WorkflowExecutionGetDataReque" + + "utionIdentifier\022\r\n\005cause\030\002 \001(\t\"\034\n\032Execut" + + "ionTerminateResponse\"Y\n\037WorkflowExecutio" + + "nGetDataRequest\0226\n\002id\030\001 \001(\0132*.flyteidl.c" + + "ore.WorkflowExecutionIdentifier\"\336\001\n Work" + + "flowExecutionGetDataResponse\022,\n\007outputs\030" + + "\001 \001(\0132\027.flyteidl.admin.UrlBlobB\002\030\001\022+\n\006in" + + "puts\030\002 \001(\0132\027.flyteidl.admin.UrlBlobB\002\030\001\022" + + ".\n\013full_inputs\030\003 \001(\0132\031.flyteidl.core.Lit" + + "eralMap\022/\n\014full_outputs\030\004 \001(\0132\031.flyteidl" + + ".core.LiteralMap\"\177\n\026ExecutionUpdateReque" + "st\0226\n\002id\030\001 \001(\0132*.flyteidl.core.WorkflowE" + - "xecutionIdentifier\"\336\001\n WorkflowExecution" + - "GetDataResponse\022,\n\007outputs\030\001 \001(\0132\027.flyte" + - "idl.admin.UrlBlobB\002\030\001\022+\n\006inputs\030\002 \001(\0132\027." + - "flyteidl.admin.UrlBlobB\002\030\001\022.\n\013full_input" + - "s\030\003 \001(\0132\031.flyteidl.core.LiteralMap\022/\n\014fu" + - "ll_outputs\030\004 \001(\0132\031.flyteidl.core.Literal" + - "Map\"\177\n\026ExecutionUpdateRequest\0226\n\002id\030\001 \001(" + - "\0132*.flyteidl.core.WorkflowExecutionIdent" + - "ifier\022-\n\005state\030\002 \001(\0162\036.flyteidl.admin.Ex" + - "ecutionState\"\220\001\n\033ExecutionStateChangeDet" + - "ails\022-\n\005state\030\001 \001(\0162\036.flyteidl.admin.Exe" + - "cutionState\022/\n\013occurred_at\030\002 \001(\0132\032.googl" + - "e.protobuf.Timestamp\022\021\n\tprincipal\030\003 \001(\t\"" + - "\031\n\027ExecutionUpdateResponse\"k\n\"WorkflowEx" + - "ecutionGetMetricsRequest\0226\n\002id\030\001 \001(\0132*.f" + - "lyteidl.core.WorkflowExecutionIdentifier" + - "\022\r\n\005depth\030\002 \001(\005\"H\n#WorkflowExecutionGetM" + - "etricsResponse\022!\n\004span\030\001 \001(\0132\023.flyteidl." + - "core.Span*>\n\016ExecutionState\022\024\n\020EXECUTION" + - "_ACTIVE\020\000\022\026\n\022EXECUTION_ARCHIVED\020\001B=Z;git" + - "hub.com/flyteorg/flyte/flyteidl/gen/pb-g" + - "o/flyteidl/adminb\006proto3" + "xecutionIdentifier\022-\n\005state\030\002 \001(\0162\036.flyt" + + "eidl.admin.ExecutionState\"\220\001\n\033ExecutionS" + + "tateChangeDetails\022-\n\005state\030\001 \001(\0162\036.flyte" + + "idl.admin.ExecutionState\022/\n\013occurred_at\030" + + "\002 \001(\0132\032.google.protobuf.Timestamp\022\021\n\tpri" + + "ncipal\030\003 \001(\t\"\031\n\027ExecutionUpdateResponse\"" + + "k\n\"WorkflowExecutionGetMetricsRequest\0226\n" + + "\002id\030\001 \001(\0132*.flyteidl.core.WorkflowExecut" + + "ionIdentifier\022\r\n\005depth\030\002 \001(\005\"H\n#Workflow" + + "ExecutionGetMetricsResponse\022!\n\004span\030\001 \001(" + + "\0132\023.flyteidl.core.Span*>\n\016ExecutionState" + + "\022\024\n\020EXECUTION_ACTIVE\020\000\022\026\n\022EXECUTION_ARCH" + + "IVED\020\001B=Z;github.com/flyteorg/flyte/flyt" + + "eidl/gen/pb-go/flyteidl/adminb\006proto3" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { @@ -29093,7 +29266,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors( internal_static_flyteidl_admin_ExecutionCreateRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_flyteidl_admin_ExecutionCreateRequest_descriptor, - new java.lang.String[] { "Project", "Domain", "Name", "Spec", "Inputs", }); + new java.lang.String[] { "Project", "Domain", "Name", "Spec", "Inputs", "Org", }); internal_static_flyteidl_admin_ExecutionRelaunchRequest_descriptor = getDescriptor().getMessageTypes().get(1); internal_static_flyteidl_admin_ExecutionRelaunchRequest_fieldAccessorTable = new diff --git a/flyteidl/gen/pb-java/flyteidl/admin/LaunchPlanOuterClass.java b/flyteidl/gen/pb-java/flyteidl/admin/LaunchPlanOuterClass.java index ae781f6903..77678695e6 100644 --- a/flyteidl/gen/pb-java/flyteidl/admin/LaunchPlanOuterClass.java +++ b/flyteidl/gen/pb-java/flyteidl/admin/LaunchPlanOuterClass.java @@ -13512,10 +13512,28 @@ public interface ActiveLaunchPlanListRequestOrBuilder extends * .flyteidl.admin.Sort sort_by = 5; */ flyteidl.admin.Common.SortOrBuilder getSortByOrBuilder(); + + /** + *
+     * Optional, org key applied to the resource.
+     * 
+ * + * string org = 6; + */ + java.lang.String getOrg(); + /** + *
+     * Optional, org key applied to the resource.
+     * 
+ * + * string org = 6; + */ + com.google.protobuf.ByteString + getOrgBytes(); } /** *
-   * Represents a request structure to list active launch plans within a project/domain.
+   * Represents a request structure to list active launch plans within a project/domain and optional org.
    * See :ref:`ref_flyteidl.admin.LaunchPlan` for more details
    * 
* @@ -13534,6 +13552,7 @@ private ActiveLaunchPlanListRequest() { project_ = ""; domain_ = ""; token_ = ""; + org_ = ""; } @java.lang.Override @@ -13596,6 +13615,12 @@ private ActiveLaunchPlanListRequest( break; } + case 50: { + java.lang.String s = input.readStringRequireUtf8(); + + org_ = s; + break; + } default: { if (!parseUnknownField( input, unknownFields, extensionRegistry, tag)) { @@ -13812,6 +13837,48 @@ public flyteidl.admin.Common.SortOrBuilder getSortByOrBuilder() { return getSortBy(); } + public static final int ORG_FIELD_NUMBER = 6; + private volatile java.lang.Object org_; + /** + *
+     * Optional, org key applied to the resource.
+     * 
+ * + * string org = 6; + */ + public java.lang.String getOrg() { + java.lang.Object ref = org_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + org_ = s; + return s; + } + } + /** + *
+     * Optional, org key applied to the resource.
+     * 
+ * + * string org = 6; + */ + public com.google.protobuf.ByteString + getOrgBytes() { + java.lang.Object ref = org_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + org_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -13841,6 +13908,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) if (sortBy_ != null) { output.writeMessage(5, getSortBy()); } + if (!getOrgBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 6, org_); + } unknownFields.writeTo(output); } @@ -13867,6 +13937,9 @@ public int getSerializedSize() { size += com.google.protobuf.CodedOutputStream .computeMessageSize(5, getSortBy()); } + if (!getOrgBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, org_); + } size += unknownFields.getSerializedSize(); memoizedSize = size; return size; @@ -13895,6 +13968,8 @@ public boolean equals(final java.lang.Object obj) { if (!getSortBy() .equals(other.getSortBy())) return false; } + if (!getOrg() + .equals(other.getOrg())) return false; if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -13918,6 +13993,8 @@ public int hashCode() { hash = (37 * hash) + SORT_BY_FIELD_NUMBER; hash = (53 * hash) + getSortBy().hashCode(); } + hash = (37 * hash) + ORG_FIELD_NUMBER; + hash = (53 * hash) + getOrg().hashCode(); hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; @@ -14015,7 +14092,7 @@ protected Builder newBuilderForType( } /** *
-     * Represents a request structure to list active launch plans within a project/domain.
+     * Represents a request structure to list active launch plans within a project/domain and optional org.
      * See :ref:`ref_flyteidl.admin.LaunchPlan` for more details
      * 
* @@ -14070,6 +14147,8 @@ public Builder clear() { sortBy_ = null; sortByBuilder_ = null; } + org_ = ""; + return this; } @@ -14105,6 +14184,7 @@ public flyteidl.admin.LaunchPlanOuterClass.ActiveLaunchPlanListRequest buildPart } else { result.sortBy_ = sortByBuilder_.build(); } + result.org_ = org_; onBuilt(); return result; } @@ -14171,6 +14251,10 @@ public Builder mergeFrom(flyteidl.admin.LaunchPlanOuterClass.ActiveLaunchPlanLis if (other.hasSortBy()) { mergeSortBy(other.getSortBy()); } + if (!other.getOrg().isEmpty()) { + org_ = other.org_; + onChanged(); + } this.mergeUnknownFields(other.unknownFields); onChanged(); return this; @@ -14689,6 +14773,95 @@ public flyteidl.admin.Common.SortOrBuilder getSortByOrBuilder() { } return sortByBuilder_; } + + private java.lang.Object org_ = ""; + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 6; + */ + public java.lang.String getOrg() { + java.lang.Object ref = org_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + org_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 6; + */ + public com.google.protobuf.ByteString + getOrgBytes() { + java.lang.Object ref = org_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + org_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 6; + */ + public Builder setOrg( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + org_ = value; + onChanged(); + return this; + } + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 6; + */ + public Builder clearOrg() { + + org_ = getDefaultInstance().getOrg(); + onChanged(); + return this; + } + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 6; + */ + public Builder setOrgBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + org_ = value; + onChanged(); + return this; + } @java.lang.Override public final Builder setUnknownFields( final com.google.protobuf.UnknownFieldSet unknownFields) { @@ -14866,13 +15039,14 @@ public flyteidl.admin.LaunchPlanOuterClass.ActiveLaunchPlanListRequest getDefaul "\001(\0162\037.flyteidl.admin.LaunchPlanState\"\032\n\030" + "LaunchPlanUpdateResponse\"L\n\027ActiveLaunch" + "PlanRequest\0221\n\002id\030\001 \001(\0132%.flyteidl.admin" + - ".NamedEntityIdentifier\"\203\001\n\033ActiveLaunchP" + + ".NamedEntityIdentifier\"\220\001\n\033ActiveLaunchP" + "lanListRequest\022\017\n\007project\030\001 \001(\t\022\016\n\006domai" + "n\030\002 \001(\t\022\r\n\005limit\030\003 \001(\r\022\r\n\005token\030\004 \001(\t\022%\n" + - "\007sort_by\030\005 \001(\0132\024.flyteidl.admin.Sort*+\n\017" + - "LaunchPlanState\022\014\n\010INACTIVE\020\000\022\n\n\006ACTIVE\020" + - "\001B=Z;github.com/flyteorg/flyte/flyteidl/" + - "gen/pb-go/flyteidl/adminb\006proto3" + "\007sort_by\030\005 \001(\0132\024.flyteidl.admin.Sort\022\013\n\003" + + "org\030\006 \001(\t*+\n\017LaunchPlanState\022\014\n\010INACTIVE" + + "\020\000\022\n\n\006ACTIVE\020\001B=Z;github.com/flyteorg/fl" + + "yte/flyteidl/gen/pb-go/flyteidl/adminb\006p" + + "roto3" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { @@ -14967,7 +15141,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors( internal_static_flyteidl_admin_ActiveLaunchPlanListRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_flyteidl_admin_ActiveLaunchPlanListRequest_descriptor, - new java.lang.String[] { "Project", "Domain", "Limit", "Token", "SortBy", }); + new java.lang.String[] { "Project", "Domain", "Limit", "Token", "SortBy", "Org", }); flyteidl.core.Execution.getDescriptor(); flyteidl.core.Literals.getDescriptor(); flyteidl.core.IdentifierOuterClass.getDescriptor(); diff --git a/flyteidl/gen/pb-java/flyteidl/admin/MatchableResourceOuterClass.java b/flyteidl/gen/pb-java/flyteidl/admin/MatchableResourceOuterClass.java index 0f4b473a21..c359966b35 100644 --- a/flyteidl/gen/pb-java/flyteidl/admin/MatchableResourceOuterClass.java +++ b/flyteidl/gen/pb-java/flyteidl/admin/MatchableResourceOuterClass.java @@ -10549,11 +10549,29 @@ public interface MatchableAttributesConfigurationOrBuilder extends */ com.google.protobuf.ByteString getLaunchPlanBytes(); + + /** + *
+     * Optional, org key applied to the resource.
+     * 
+ * + * string org = 6; + */ + java.lang.String getOrg(); + /** + *
+     * Optional, org key applied to the resource.
+     * 
+ * + * string org = 6; + */ + com.google.protobuf.ByteString + getOrgBytes(); } /** *
-   * Represents a custom set of attributes applied for either a domain; a domain and project; or
-   * domain, project and workflow name.
+   * Represents a custom set of attributes applied for either a domain (and optional org); a domain and project (and optional org);
+   * or domain, project and workflow name (and optional org).
    * These are used to override system level defaults for kubernetes cluster resource management,
    * default execution values, and more all across different levels of specificity.
    * 
@@ -10574,6 +10592,7 @@ private MatchableAttributesConfiguration() { project_ = ""; workflow_ = ""; launchPlan_ = ""; + org_ = ""; } @java.lang.Override @@ -10637,6 +10656,12 @@ private MatchableAttributesConfiguration( launchPlan_ = s; break; } + case 50: { + java.lang.String s = input.readStringRequireUtf8(); + + org_ = s; + break; + } default: { if (!parseUnknownField( input, unknownFields, extensionRegistry, tag)) { @@ -10826,6 +10851,48 @@ public java.lang.String getLaunchPlan() { } } + public static final int ORG_FIELD_NUMBER = 6; + private volatile java.lang.Object org_; + /** + *
+     * Optional, org key applied to the resource.
+     * 
+ * + * string org = 6; + */ + public java.lang.String getOrg() { + java.lang.Object ref = org_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + org_ = s; + return s; + } + } + /** + *
+     * Optional, org key applied to the resource.
+     * 
+ * + * string org = 6; + */ + public com.google.protobuf.ByteString + getOrgBytes() { + java.lang.Object ref = org_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + org_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -10855,6 +10922,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) if (!getLaunchPlanBytes().isEmpty()) { com.google.protobuf.GeneratedMessageV3.writeString(output, 5, launchPlan_); } + if (!getOrgBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 6, org_); + } unknownFields.writeTo(output); } @@ -10880,6 +10950,9 @@ public int getSerializedSize() { if (!getLaunchPlanBytes().isEmpty()) { size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, launchPlan_); } + if (!getOrgBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, org_); + } size += unknownFields.getSerializedSize(); memoizedSize = size; return size; @@ -10908,6 +10981,8 @@ public boolean equals(final java.lang.Object obj) { .equals(other.getWorkflow())) return false; if (!getLaunchPlan() .equals(other.getLaunchPlan())) return false; + if (!getOrg() + .equals(other.getOrg())) return false; if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -10931,6 +11006,8 @@ public int hashCode() { hash = (53 * hash) + getWorkflow().hashCode(); hash = (37 * hash) + LAUNCH_PLAN_FIELD_NUMBER; hash = (53 * hash) + getLaunchPlan().hashCode(); + hash = (37 * hash) + ORG_FIELD_NUMBER; + hash = (53 * hash) + getOrg().hashCode(); hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; @@ -11028,8 +11105,8 @@ protected Builder newBuilderForType( } /** *
-     * Represents a custom set of attributes applied for either a domain; a domain and project; or
-     * domain, project and workflow name.
+     * Represents a custom set of attributes applied for either a domain (and optional org); a domain and project (and optional org);
+     * or domain, project and workflow name (and optional org).
      * These are used to override system level defaults for kubernetes cluster resource management,
      * default execution values, and more all across different levels of specificity.
      * 
@@ -11085,6 +11162,8 @@ public Builder clear() { launchPlan_ = ""; + org_ = ""; + return this; } @@ -11120,6 +11199,7 @@ public flyteidl.admin.MatchableResourceOuterClass.MatchableAttributesConfigurati result.project_ = project_; result.workflow_ = workflow_; result.launchPlan_ = launchPlan_; + result.org_ = org_; onBuilt(); return result; } @@ -11187,6 +11267,10 @@ public Builder mergeFrom(flyteidl.admin.MatchableResourceOuterClass.MatchableAtt launchPlan_ = other.launchPlan_; onChanged(); } + if (!other.getOrg().isEmpty()) { + org_ = other.org_; + onChanged(); + } this.mergeUnknownFields(other.unknownFields); onChanged(); return this; @@ -11608,6 +11692,95 @@ public Builder setLaunchPlanBytes( onChanged(); return this; } + + private java.lang.Object org_ = ""; + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 6; + */ + public java.lang.String getOrg() { + java.lang.Object ref = org_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + org_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 6; + */ + public com.google.protobuf.ByteString + getOrgBytes() { + java.lang.Object ref = org_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + org_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 6; + */ + public Builder setOrg( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + org_ = value; + onChanged(); + return this; + } + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 6; + */ + public Builder clearOrg() { + + org_ = getDefaultInstance().getOrg(); + onChanged(); + return this; + } + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 6; + */ + public Builder setOrgBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + org_ = value; + onChanged(); + return this; + } @java.lang.Override public final Builder setUnknownFields( final com.google.protobuf.UnknownFieldSet unknownFields) { @@ -13126,24 +13299,24 @@ public flyteidl.admin.MatchableResourceOuterClass.ListMatchableAttributesRespons "sH\000\022L\n\031workflow_execution_config\030\007 \001(\0132\'" + ".flyteidl.admin.WorkflowExecutionConfigH" + "\000\022?\n\022cluster_assignment\030\010 \001(\0132!.flyteidl" + - ".admin.ClusterAssignmentH\000B\010\n\006target\"\242\001\n" + + ".admin.ClusterAssignmentH\000B\010\n\006target\"\257\001\n" + " MatchableAttributesConfiguration\0226\n\natt" + "ributes\030\001 \001(\0132\".flyteidl.admin.MatchingA" + "ttributes\022\016\n\006domain\030\002 \001(\t\022\017\n\007project\030\003 \001" + "(\t\022\020\n\010workflow\030\004 \001(\t\022\023\n\013launch_plan\030\005 \001(" + - "\t\"Z\n\036ListMatchableAttributesRequest\0228\n\rr" + - "esource_type\030\001 \001(\0162!.flyteidl.admin.Matc" + - "hableResource\"k\n\037ListMatchableAttributes" + - "Response\022H\n\016configurations\030\001 \003(\01320.flyte" + - "idl.admin.MatchableAttributesConfigurati" + - "on*\340\001\n\021MatchableResource\022\021\n\rTASK_RESOURC" + - "E\020\000\022\024\n\020CLUSTER_RESOURCE\020\001\022\023\n\017EXECUTION_Q" + - "UEUE\020\002\022\033\n\027EXECUTION_CLUSTER_LABEL\020\003\022$\n Q" + - "UALITY_OF_SERVICE_SPECIFICATION\020\004\022\023\n\017PLU" + - "GIN_OVERRIDE\020\005\022\035\n\031WORKFLOW_EXECUTION_CON" + - "FIG\020\006\022\026\n\022CLUSTER_ASSIGNMENT\020\007B=Z;github." + - "com/flyteorg/flyte/flyteidl/gen/pb-go/fl" + - "yteidl/adminb\006proto3" + "\t\022\013\n\003org\030\006 \001(\t\"Z\n\036ListMatchableAttribute" + + "sRequest\0228\n\rresource_type\030\001 \001(\0162!.flytei" + + "dl.admin.MatchableResource\"k\n\037ListMatcha" + + "bleAttributesResponse\022H\n\016configurations\030" + + "\001 \003(\01320.flyteidl.admin.MatchableAttribut" + + "esConfiguration*\340\001\n\021MatchableResource\022\021\n" + + "\rTASK_RESOURCE\020\000\022\024\n\020CLUSTER_RESOURCE\020\001\022\023" + + "\n\017EXECUTION_QUEUE\020\002\022\033\n\027EXECUTION_CLUSTER" + + "_LABEL\020\003\022$\n QUALITY_OF_SERVICE_SPECIFICA" + + "TION\020\004\022\023\n\017PLUGIN_OVERRIDE\020\005\022\035\n\031WORKFLOW_" + + "EXECUTION_CONFIG\020\006\022\026\n\022CLUSTER_ASSIGNMENT" + + "\020\007B=Z;github.com/flyteorg/flyte/flyteidl" + + "/gen/pb-go/flyteidl/adminb\006proto3" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { @@ -13227,7 +13400,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors( internal_static_flyteidl_admin_MatchableAttributesConfiguration_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_flyteidl_admin_MatchableAttributesConfiguration_descriptor, - new java.lang.String[] { "Attributes", "Domain", "Project", "Workflow", "LaunchPlan", }); + new java.lang.String[] { "Attributes", "Domain", "Project", "Workflow", "LaunchPlan", "Org", }); internal_static_flyteidl_admin_ListMatchableAttributesRequest_descriptor = getDescriptor().getMessageTypes().get(10); internal_static_flyteidl_admin_ListMatchableAttributesRequest_fieldAccessorTable = new diff --git a/flyteidl/gen/pb-java/flyteidl/admin/ProjectAttributesOuterClass.java b/flyteidl/gen/pb-java/flyteidl/admin/ProjectAttributesOuterClass.java index 4af2acdb48..c124b52d9d 100644 --- a/flyteidl/gen/pb-java/flyteidl/admin/ProjectAttributesOuterClass.java +++ b/flyteidl/gen/pb-java/flyteidl/admin/ProjectAttributesOuterClass.java @@ -48,6 +48,24 @@ public interface ProjectAttributesOrBuilder extends * .flyteidl.admin.MatchingAttributes matching_attributes = 2; */ flyteidl.admin.MatchableResourceOuterClass.MatchingAttributesOrBuilder getMatchingAttributesOrBuilder(); + + /** + *
+     * Optional, org key applied to the project.
+     * 
+ * + * string org = 3; + */ + java.lang.String getOrg(); + /** + *
+     * Optional, org key applied to the project.
+     * 
+ * + * string org = 3; + */ + com.google.protobuf.ByteString + getOrgBytes(); } /** *
@@ -68,6 +86,7 @@ private ProjectAttributes(com.google.protobuf.GeneratedMessageV3.Builder buil
     }
     private ProjectAttributes() {
       project_ = "";
+      org_ = "";
     }
 
     @java.lang.Override
@@ -113,6 +132,12 @@ private ProjectAttributes(
 
               break;
             }
+            case 26: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              org_ = s;
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -208,6 +233,48 @@ public flyteidl.admin.MatchableResourceOuterClass.MatchingAttributesOrBuilder ge
       return getMatchingAttributes();
     }
 
+    public static final int ORG_FIELD_NUMBER = 3;
+    private volatile java.lang.Object org_;
+    /**
+     * 
+     * Optional, org key applied to the project.
+     * 
+ * + * string org = 3; + */ + public java.lang.String getOrg() { + java.lang.Object ref = org_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + org_ = s; + return s; + } + } + /** + *
+     * Optional, org key applied to the project.
+     * 
+ * + * string org = 3; + */ + public com.google.protobuf.ByteString + getOrgBytes() { + java.lang.Object ref = org_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + org_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -228,6 +295,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) if (matchingAttributes_ != null) { output.writeMessage(2, getMatchingAttributes()); } + if (!getOrgBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 3, org_); + } unknownFields.writeTo(output); } @@ -244,6 +314,9 @@ public int getSerializedSize() { size += com.google.protobuf.CodedOutputStream .computeMessageSize(2, getMatchingAttributes()); } + if (!getOrgBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, org_); + } size += unknownFields.getSerializedSize(); memoizedSize = size; return size; @@ -266,6 +339,8 @@ public boolean equals(final java.lang.Object obj) { if (!getMatchingAttributes() .equals(other.getMatchingAttributes())) return false; } + if (!getOrg() + .equals(other.getOrg())) return false; if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -283,6 +358,8 @@ public int hashCode() { hash = (37 * hash) + MATCHING_ATTRIBUTES_FIELD_NUMBER; hash = (53 * hash) + getMatchingAttributes().hashCode(); } + hash = (37 * hash) + ORG_FIELD_NUMBER; + hash = (53 * hash) + getOrg().hashCode(); hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; @@ -429,6 +506,8 @@ public Builder clear() { matchingAttributes_ = null; matchingAttributesBuilder_ = null; } + org_ = ""; + return this; } @@ -461,6 +540,7 @@ public flyteidl.admin.ProjectAttributesOuterClass.ProjectAttributes buildPartial } else { result.matchingAttributes_ = matchingAttributesBuilder_.build(); } + result.org_ = org_; onBuilt(); return result; } @@ -516,6 +596,10 @@ public Builder mergeFrom(flyteidl.admin.ProjectAttributesOuterClass.ProjectAttri if (other.hasMatchingAttributes()) { mergeMatchingAttributes(other.getMatchingAttributes()); } + if (!other.getOrg().isEmpty()) { + org_ = other.org_; + onChanged(); + } this.mergeUnknownFields(other.unknownFields); onChanged(); return this; @@ -750,6 +834,95 @@ public flyteidl.admin.MatchableResourceOuterClass.MatchingAttributesOrBuilder ge } return matchingAttributesBuilder_; } + + private java.lang.Object org_ = ""; + /** + *
+       * Optional, org key applied to the project.
+       * 
+ * + * string org = 3; + */ + public java.lang.String getOrg() { + java.lang.Object ref = org_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + org_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * Optional, org key applied to the project.
+       * 
+ * + * string org = 3; + */ + public com.google.protobuf.ByteString + getOrgBytes() { + java.lang.Object ref = org_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + org_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * Optional, org key applied to the project.
+       * 
+ * + * string org = 3; + */ + public Builder setOrg( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + org_ = value; + onChanged(); + return this; + } + /** + *
+       * Optional, org key applied to the project.
+       * 
+ * + * string org = 3; + */ + public Builder clearOrg() { + + org_ = getDefaultInstance().getOrg(); + onChanged(); + return this; + } + /** + *
+       * Optional, org key applied to the project.
+       * 
+ * + * string org = 3; + */ + public Builder setOrgBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + org_ = value; + onChanged(); + return this; + } @java.lang.Override public final Builder setUnknownFields( final com.google.protobuf.UnknownFieldSet unknownFields) { @@ -1940,6 +2113,24 @@ public interface ProjectAttributesGetRequestOrBuilder extends * .flyteidl.admin.MatchableResource resource_type = 2; */ flyteidl.admin.MatchableResourceOuterClass.MatchableResource getResourceType(); + + /** + *
+     * Optional, org key applied to the project.
+     * 
+ * + * string org = 3; + */ + java.lang.String getOrg(); + /** + *
+     * Optional, org key applied to the project.
+     * 
+ * + * string org = 3; + */ + com.google.protobuf.ByteString + getOrgBytes(); } /** *
@@ -1961,6 +2152,7 @@ private ProjectAttributesGetRequest(com.google.protobuf.GeneratedMessageV3.Build
     private ProjectAttributesGetRequest() {
       project_ = "";
       resourceType_ = 0;
+      org_ = "";
     }
 
     @java.lang.Override
@@ -1999,6 +2191,12 @@ private ProjectAttributesGetRequest(
               resourceType_ = rawValue;
               break;
             }
+            case 26: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              org_ = s;
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -2102,6 +2300,48 @@ public flyteidl.admin.MatchableResourceOuterClass.MatchableResource getResourceT
       return result == null ? flyteidl.admin.MatchableResourceOuterClass.MatchableResource.UNRECOGNIZED : result;
     }
 
+    public static final int ORG_FIELD_NUMBER = 3;
+    private volatile java.lang.Object org_;
+    /**
+     * 
+     * Optional, org key applied to the project.
+     * 
+ * + * string org = 3; + */ + public java.lang.String getOrg() { + java.lang.Object ref = org_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + org_ = s; + return s; + } + } + /** + *
+     * Optional, org key applied to the project.
+     * 
+ * + * string org = 3; + */ + public com.google.protobuf.ByteString + getOrgBytes() { + java.lang.Object ref = org_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + org_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -2122,6 +2362,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) if (resourceType_ != flyteidl.admin.MatchableResourceOuterClass.MatchableResource.TASK_RESOURCE.getNumber()) { output.writeEnum(2, resourceType_); } + if (!getOrgBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 3, org_); + } unknownFields.writeTo(output); } @@ -2138,6 +2381,9 @@ public int getSerializedSize() { size += com.google.protobuf.CodedOutputStream .computeEnumSize(2, resourceType_); } + if (!getOrgBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, org_); + } size += unknownFields.getSerializedSize(); memoizedSize = size; return size; @@ -2156,6 +2402,8 @@ public boolean equals(final java.lang.Object obj) { if (!getProject() .equals(other.getProject())) return false; if (resourceType_ != other.resourceType_) return false; + if (!getOrg() + .equals(other.getOrg())) return false; if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -2171,6 +2419,8 @@ public int hashCode() { hash = (53 * hash) + getProject().hashCode(); hash = (37 * hash) + RESOURCE_TYPE_FIELD_NUMBER; hash = (53 * hash) + resourceType_; + hash = (37 * hash) + ORG_FIELD_NUMBER; + hash = (53 * hash) + getOrg().hashCode(); hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; @@ -2313,6 +2563,8 @@ public Builder clear() { resourceType_ = 0; + org_ = ""; + return this; } @@ -2341,6 +2593,7 @@ public flyteidl.admin.ProjectAttributesOuterClass.ProjectAttributesGetRequest bu flyteidl.admin.ProjectAttributesOuterClass.ProjectAttributesGetRequest result = new flyteidl.admin.ProjectAttributesOuterClass.ProjectAttributesGetRequest(this); result.project_ = project_; result.resourceType_ = resourceType_; + result.org_ = org_; onBuilt(); return result; } @@ -2396,6 +2649,10 @@ public Builder mergeFrom(flyteidl.admin.ProjectAttributesOuterClass.ProjectAttri if (other.resourceType_ != 0) { setResourceTypeValue(other.getResourceTypeValue()); } + if (!other.getOrg().isEmpty()) { + org_ = other.org_; + onChanged(); + } this.mergeUnknownFields(other.unknownFields); onChanged(); return this; @@ -2588,6 +2845,95 @@ public Builder clearResourceType() { onChanged(); return this; } + + private java.lang.Object org_ = ""; + /** + *
+       * Optional, org key applied to the project.
+       * 
+ * + * string org = 3; + */ + public java.lang.String getOrg() { + java.lang.Object ref = org_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + org_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * Optional, org key applied to the project.
+       * 
+ * + * string org = 3; + */ + public com.google.protobuf.ByteString + getOrgBytes() { + java.lang.Object ref = org_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + org_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * Optional, org key applied to the project.
+       * 
+ * + * string org = 3; + */ + public Builder setOrg( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + org_ = value; + onChanged(); + return this; + } + /** + *
+       * Optional, org key applied to the project.
+       * 
+ * + * string org = 3; + */ + public Builder clearOrg() { + + org_ = getDefaultInstance().getOrg(); + onChanged(); + return this; + } + /** + *
+       * Optional, org key applied to the project.
+       * 
+ * + * string org = 3; + */ + public Builder setOrgBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + org_ = value; + onChanged(); + return this; + } @java.lang.Override public final Builder setUnknownFields( final com.google.protobuf.UnknownFieldSet unknownFields) { @@ -3299,6 +3645,24 @@ public interface ProjectAttributesDeleteRequestOrBuilder extends * .flyteidl.admin.MatchableResource resource_type = 2; */ flyteidl.admin.MatchableResourceOuterClass.MatchableResource getResourceType(); + + /** + *
+     * Optional, org key applied to the project.
+     * 
+ * + * string org = 3; + */ + java.lang.String getOrg(); + /** + *
+     * Optional, org key applied to the project.
+     * 
+ * + * string org = 3; + */ + com.google.protobuf.ByteString + getOrgBytes(); } /** *
@@ -3320,6 +3684,7 @@ private ProjectAttributesDeleteRequest(com.google.protobuf.GeneratedMessageV3.Bu
     private ProjectAttributesDeleteRequest() {
       project_ = "";
       resourceType_ = 0;
+      org_ = "";
     }
 
     @java.lang.Override
@@ -3358,6 +3723,12 @@ private ProjectAttributesDeleteRequest(
               resourceType_ = rawValue;
               break;
             }
+            case 26: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              org_ = s;
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -3461,6 +3832,48 @@ public flyteidl.admin.MatchableResourceOuterClass.MatchableResource getResourceT
       return result == null ? flyteidl.admin.MatchableResourceOuterClass.MatchableResource.UNRECOGNIZED : result;
     }
 
+    public static final int ORG_FIELD_NUMBER = 3;
+    private volatile java.lang.Object org_;
+    /**
+     * 
+     * Optional, org key applied to the project.
+     * 
+ * + * string org = 3; + */ + public java.lang.String getOrg() { + java.lang.Object ref = org_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + org_ = s; + return s; + } + } + /** + *
+     * Optional, org key applied to the project.
+     * 
+ * + * string org = 3; + */ + public com.google.protobuf.ByteString + getOrgBytes() { + java.lang.Object ref = org_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + org_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -3481,6 +3894,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) if (resourceType_ != flyteidl.admin.MatchableResourceOuterClass.MatchableResource.TASK_RESOURCE.getNumber()) { output.writeEnum(2, resourceType_); } + if (!getOrgBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 3, org_); + } unknownFields.writeTo(output); } @@ -3497,6 +3913,9 @@ public int getSerializedSize() { size += com.google.protobuf.CodedOutputStream .computeEnumSize(2, resourceType_); } + if (!getOrgBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, org_); + } size += unknownFields.getSerializedSize(); memoizedSize = size; return size; @@ -3515,6 +3934,8 @@ public boolean equals(final java.lang.Object obj) { if (!getProject() .equals(other.getProject())) return false; if (resourceType_ != other.resourceType_) return false; + if (!getOrg() + .equals(other.getOrg())) return false; if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -3530,6 +3951,8 @@ public int hashCode() { hash = (53 * hash) + getProject().hashCode(); hash = (37 * hash) + RESOURCE_TYPE_FIELD_NUMBER; hash = (53 * hash) + resourceType_; + hash = (37 * hash) + ORG_FIELD_NUMBER; + hash = (53 * hash) + getOrg().hashCode(); hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; @@ -3672,6 +4095,8 @@ public Builder clear() { resourceType_ = 0; + org_ = ""; + return this; } @@ -3700,6 +4125,7 @@ public flyteidl.admin.ProjectAttributesOuterClass.ProjectAttributesDeleteRequest flyteidl.admin.ProjectAttributesOuterClass.ProjectAttributesDeleteRequest result = new flyteidl.admin.ProjectAttributesOuterClass.ProjectAttributesDeleteRequest(this); result.project_ = project_; result.resourceType_ = resourceType_; + result.org_ = org_; onBuilt(); return result; } @@ -3755,6 +4181,10 @@ public Builder mergeFrom(flyteidl.admin.ProjectAttributesOuterClass.ProjectAttri if (other.resourceType_ != 0) { setResourceTypeValue(other.getResourceTypeValue()); } + if (!other.getOrg().isEmpty()) { + org_ = other.org_; + onChanged(); + } this.mergeUnknownFields(other.unknownFields); onChanged(); return this; @@ -3947,6 +4377,95 @@ public Builder clearResourceType() { onChanged(); return this; } + + private java.lang.Object org_ = ""; + /** + *
+       * Optional, org key applied to the project.
+       * 
+ * + * string org = 3; + */ + public java.lang.String getOrg() { + java.lang.Object ref = org_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + org_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * Optional, org key applied to the project.
+       * 
+ * + * string org = 3; + */ + public com.google.protobuf.ByteString + getOrgBytes() { + java.lang.Object ref = org_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + org_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * Optional, org key applied to the project.
+       * 
+ * + * string org = 3; + */ + public Builder setOrg( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + org_ = value; + onChanged(); + return this; + } + /** + *
+       * Optional, org key applied to the project.
+       * 
+ * + * string org = 3; + */ + public Builder clearOrg() { + + org_ = getDefaultInstance().getOrg(); + onChanged(); + return this; + } + /** + *
+       * Optional, org key applied to the project.
+       * 
+ * + * string org = 3; + */ + public Builder setOrgBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + org_ = value; + onChanged(); + return this; + } @java.lang.Override public final Builder setUnknownFields( final com.google.protobuf.UnknownFieldSet unknownFields) { @@ -4465,23 +4984,24 @@ public flyteidl.admin.ProjectAttributesOuterClass.ProjectAttributesDeleteRespons java.lang.String[] descriptorData = { "\n\'flyteidl/admin/project_attributes.prot" + "o\022\016flyteidl.admin\032\'flyteidl/admin/matcha" + - "ble_resource.proto\"e\n\021ProjectAttributes\022" + + "ble_resource.proto\"r\n\021ProjectAttributes\022" + "\017\n\007project\030\001 \001(\t\022?\n\023matching_attributes\030" + "\002 \001(\0132\".flyteidl.admin.MatchingAttribute" + - "s\"W\n\036ProjectAttributesUpdateRequest\0225\n\na" + - "ttributes\030\001 \001(\0132!.flyteidl.admin.Project" + - "Attributes\"!\n\037ProjectAttributesUpdateRes" + - "ponse\"h\n\033ProjectAttributesGetRequest\022\017\n\007" + - "project\030\001 \001(\t\0228\n\rresource_type\030\002 \001(\0162!.f" + - "lyteidl.admin.MatchableResource\"U\n\034Proje" + - "ctAttributesGetResponse\0225\n\nattributes\030\001 " + - "\001(\0132!.flyteidl.admin.ProjectAttributes\"k" + - "\n\036ProjectAttributesDeleteRequest\022\017\n\007proj" + - "ect\030\001 \001(\t\0228\n\rresource_type\030\002 \001(\0162!.flyte" + - "idl.admin.MatchableResource\"!\n\037ProjectAt" + - "tributesDeleteResponseB=Z;github.com/fly" + - "teorg/flyte/flyteidl/gen/pb-go/flyteidl/" + - "adminb\006proto3" + "s\022\013\n\003org\030\003 \001(\t\"W\n\036ProjectAttributesUpdat" + + "eRequest\0225\n\nattributes\030\001 \001(\0132!.flyteidl." + + "admin.ProjectAttributes\"!\n\037ProjectAttrib" + + "utesUpdateResponse\"u\n\033ProjectAttributesG" + + "etRequest\022\017\n\007project\030\001 \001(\t\0228\n\rresource_t" + + "ype\030\002 \001(\0162!.flyteidl.admin.MatchableReso" + + "urce\022\013\n\003org\030\003 \001(\t\"U\n\034ProjectAttributesGe" + + "tResponse\0225\n\nattributes\030\001 \001(\0132!.flyteidl" + + ".admin.ProjectAttributes\"x\n\036ProjectAttri" + + "butesDeleteRequest\022\017\n\007project\030\001 \001(\t\0228\n\rr" + + "esource_type\030\002 \001(\0162!.flyteidl.admin.Matc" + + "hableResource\022\013\n\003org\030\003 \001(\t\"!\n\037ProjectAtt" + + "ributesDeleteResponseB=Z;github.com/flyt" + + "eorg/flyte/flyteidl/gen/pb-go/flyteidl/a" + + "dminb\006proto3" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { @@ -4501,7 +5021,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors( internal_static_flyteidl_admin_ProjectAttributes_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_flyteidl_admin_ProjectAttributes_descriptor, - new java.lang.String[] { "Project", "MatchingAttributes", }); + new java.lang.String[] { "Project", "MatchingAttributes", "Org", }); internal_static_flyteidl_admin_ProjectAttributesUpdateRequest_descriptor = getDescriptor().getMessageTypes().get(1); internal_static_flyteidl_admin_ProjectAttributesUpdateRequest_fieldAccessorTable = new @@ -4519,7 +5039,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors( internal_static_flyteidl_admin_ProjectAttributesGetRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_flyteidl_admin_ProjectAttributesGetRequest_descriptor, - new java.lang.String[] { "Project", "ResourceType", }); + new java.lang.String[] { "Project", "ResourceType", "Org", }); internal_static_flyteidl_admin_ProjectAttributesGetResponse_descriptor = getDescriptor().getMessageTypes().get(4); internal_static_flyteidl_admin_ProjectAttributesGetResponse_fieldAccessorTable = new @@ -4531,7 +5051,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors( internal_static_flyteidl_admin_ProjectAttributesDeleteRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_flyteidl_admin_ProjectAttributesDeleteRequest_descriptor, - new java.lang.String[] { "Project", "ResourceType", }); + new java.lang.String[] { "Project", "ResourceType", "Org", }); internal_static_flyteidl_admin_ProjectAttributesDeleteResponse_descriptor = getDescriptor().getMessageTypes().get(6); internal_static_flyteidl_admin_ProjectAttributesDeleteResponse_fieldAccessorTable = new diff --git a/flyteidl/gen/pb-java/flyteidl/admin/ProjectDomainAttributesOuterClass.java b/flyteidl/gen/pb-java/flyteidl/admin/ProjectDomainAttributesOuterClass.java index d3512369cd..22d73ff719 100644 --- a/flyteidl/gen/pb-java/flyteidl/admin/ProjectDomainAttributesOuterClass.java +++ b/flyteidl/gen/pb-java/flyteidl/admin/ProjectDomainAttributesOuterClass.java @@ -66,6 +66,24 @@ public interface ProjectDomainAttributesOrBuilder extends * .flyteidl.admin.MatchingAttributes matching_attributes = 3; */ flyteidl.admin.MatchableResourceOuterClass.MatchingAttributesOrBuilder getMatchingAttributesOrBuilder(); + + /** + *
+     * Optional, org key applied to the attributes.
+     * 
+ * + * string org = 4; + */ + java.lang.String getOrg(); + /** + *
+     * Optional, org key applied to the attributes.
+     * 
+ * + * string org = 4; + */ + com.google.protobuf.ByteString + getOrgBytes(); } /** *
@@ -87,6 +105,7 @@ private ProjectDomainAttributes(com.google.protobuf.GeneratedMessageV3.Builder
+     * Optional, org key applied to the attributes.
+     * 
+ * + * string org = 4; + */ + public java.lang.String getOrg() { + java.lang.Object ref = org_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + org_ = s; + return s; + } + } + /** + *
+     * Optional, org key applied to the attributes.
+     * 
+ * + * string org = 4; + */ + public com.google.protobuf.ByteString + getOrgBytes() { + java.lang.Object ref = org_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + org_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -298,6 +365,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) if (matchingAttributes_ != null) { output.writeMessage(3, getMatchingAttributes()); } + if (!getOrgBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 4, org_); + } unknownFields.writeTo(output); } @@ -317,6 +387,9 @@ public int getSerializedSize() { size += com.google.protobuf.CodedOutputStream .computeMessageSize(3, getMatchingAttributes()); } + if (!getOrgBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, org_); + } size += unknownFields.getSerializedSize(); memoizedSize = size; return size; @@ -341,6 +414,8 @@ public boolean equals(final java.lang.Object obj) { if (!getMatchingAttributes() .equals(other.getMatchingAttributes())) return false; } + if (!getOrg() + .equals(other.getOrg())) return false; if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -360,6 +435,8 @@ public int hashCode() { hash = (37 * hash) + MATCHING_ATTRIBUTES_FIELD_NUMBER; hash = (53 * hash) + getMatchingAttributes().hashCode(); } + hash = (37 * hash) + ORG_FIELD_NUMBER; + hash = (53 * hash) + getOrg().hashCode(); hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; @@ -508,6 +585,8 @@ public Builder clear() { matchingAttributes_ = null; matchingAttributesBuilder_ = null; } + org_ = ""; + return this; } @@ -541,6 +620,7 @@ public flyteidl.admin.ProjectDomainAttributesOuterClass.ProjectDomainAttributes } else { result.matchingAttributes_ = matchingAttributesBuilder_.build(); } + result.org_ = org_; onBuilt(); return result; } @@ -600,6 +680,10 @@ public Builder mergeFrom(flyteidl.admin.ProjectDomainAttributesOuterClass.Projec if (other.hasMatchingAttributes()) { mergeMatchingAttributes(other.getMatchingAttributes()); } + if (!other.getOrg().isEmpty()) { + org_ = other.org_; + onChanged(); + } this.mergeUnknownFields(other.unknownFields); onChanged(); return this; @@ -923,6 +1007,95 @@ public flyteidl.admin.MatchableResourceOuterClass.MatchingAttributesOrBuilder ge } return matchingAttributesBuilder_; } + + private java.lang.Object org_ = ""; + /** + *
+       * Optional, org key applied to the attributes.
+       * 
+ * + * string org = 4; + */ + public java.lang.String getOrg() { + java.lang.Object ref = org_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + org_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * Optional, org key applied to the attributes.
+       * 
+ * + * string org = 4; + */ + public com.google.protobuf.ByteString + getOrgBytes() { + java.lang.Object ref = org_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + org_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * Optional, org key applied to the attributes.
+       * 
+ * + * string org = 4; + */ + public Builder setOrg( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + org_ = value; + onChanged(); + return this; + } + /** + *
+       * Optional, org key applied to the attributes.
+       * 
+ * + * string org = 4; + */ + public Builder clearOrg() { + + org_ = getDefaultInstance().getOrg(); + onChanged(); + return this; + } + /** + *
+       * Optional, org key applied to the attributes.
+       * 
+ * + * string org = 4; + */ + public Builder setOrgBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + org_ = value; + onChanged(); + return this; + } @java.lang.Override public final Builder setUnknownFields( final com.google.protobuf.UnknownFieldSet unknownFields) { @@ -2133,6 +2306,24 @@ public interface ProjectDomainAttributesGetRequestOrBuilder extends * .flyteidl.admin.MatchableResource resource_type = 3; */ flyteidl.admin.MatchableResourceOuterClass.MatchableResource getResourceType(); + + /** + *
+     * Optional, org key applied to the attributes.
+     * 
+ * + * string org = 4; + */ + java.lang.String getOrg(); + /** + *
+     * Optional, org key applied to the attributes.
+     * 
+ * + * string org = 4; + */ + com.google.protobuf.ByteString + getOrgBytes(); } /** *
@@ -2155,6 +2346,7 @@ private ProjectDomainAttributesGetRequest() {
       project_ = "";
       domain_ = "";
       resourceType_ = 0;
+      org_ = "";
     }
 
     @java.lang.Override
@@ -2199,6 +2391,12 @@ private ProjectDomainAttributesGetRequest(
               resourceType_ = rawValue;
               break;
             }
+            case 34: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              org_ = s;
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -2346,6 +2544,48 @@ public flyteidl.admin.MatchableResourceOuterClass.MatchableResource getResourceT
       return result == null ? flyteidl.admin.MatchableResourceOuterClass.MatchableResource.UNRECOGNIZED : result;
     }
 
+    public static final int ORG_FIELD_NUMBER = 4;
+    private volatile java.lang.Object org_;
+    /**
+     * 
+     * Optional, org key applied to the attributes.
+     * 
+ * + * string org = 4; + */ + public java.lang.String getOrg() { + java.lang.Object ref = org_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + org_ = s; + return s; + } + } + /** + *
+     * Optional, org key applied to the attributes.
+     * 
+ * + * string org = 4; + */ + public com.google.protobuf.ByteString + getOrgBytes() { + java.lang.Object ref = org_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + org_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -2369,6 +2609,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) if (resourceType_ != flyteidl.admin.MatchableResourceOuterClass.MatchableResource.TASK_RESOURCE.getNumber()) { output.writeEnum(3, resourceType_); } + if (!getOrgBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 4, org_); + } unknownFields.writeTo(output); } @@ -2388,6 +2631,9 @@ public int getSerializedSize() { size += com.google.protobuf.CodedOutputStream .computeEnumSize(3, resourceType_); } + if (!getOrgBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, org_); + } size += unknownFields.getSerializedSize(); memoizedSize = size; return size; @@ -2408,6 +2654,8 @@ public boolean equals(final java.lang.Object obj) { if (!getDomain() .equals(other.getDomain())) return false; if (resourceType_ != other.resourceType_) return false; + if (!getOrg() + .equals(other.getOrg())) return false; if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -2425,6 +2673,8 @@ public int hashCode() { hash = (53 * hash) + getDomain().hashCode(); hash = (37 * hash) + RESOURCE_TYPE_FIELD_NUMBER; hash = (53 * hash) + resourceType_; + hash = (37 * hash) + ORG_FIELD_NUMBER; + hash = (53 * hash) + getOrg().hashCode(); hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; @@ -2569,6 +2819,8 @@ public Builder clear() { resourceType_ = 0; + org_ = ""; + return this; } @@ -2598,6 +2850,7 @@ public flyteidl.admin.ProjectDomainAttributesOuterClass.ProjectDomainAttributesG result.project_ = project_; result.domain_ = domain_; result.resourceType_ = resourceType_; + result.org_ = org_; onBuilt(); return result; } @@ -2657,6 +2910,10 @@ public Builder mergeFrom(flyteidl.admin.ProjectDomainAttributesOuterClass.Projec if (other.resourceType_ != 0) { setResourceTypeValue(other.getResourceTypeValue()); } + if (!other.getOrg().isEmpty()) { + org_ = other.org_; + onChanged(); + } this.mergeUnknownFields(other.unknownFields); onChanged(); return this; @@ -2943,6 +3200,95 @@ public Builder clearResourceType() { onChanged(); return this; } + + private java.lang.Object org_ = ""; + /** + *
+       * Optional, org key applied to the attributes.
+       * 
+ * + * string org = 4; + */ + public java.lang.String getOrg() { + java.lang.Object ref = org_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + org_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * Optional, org key applied to the attributes.
+       * 
+ * + * string org = 4; + */ + public com.google.protobuf.ByteString + getOrgBytes() { + java.lang.Object ref = org_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + org_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * Optional, org key applied to the attributes.
+       * 
+ * + * string org = 4; + */ + public Builder setOrg( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + org_ = value; + onChanged(); + return this; + } + /** + *
+       * Optional, org key applied to the attributes.
+       * 
+ * + * string org = 4; + */ + public Builder clearOrg() { + + org_ = getDefaultInstance().getOrg(); + onChanged(); + return this; + } + /** + *
+       * Optional, org key applied to the attributes.
+       * 
+ * + * string org = 4; + */ + public Builder setOrgBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + org_ = value; + onChanged(); + return this; + } @java.lang.Override public final Builder setUnknownFields( final com.google.protobuf.UnknownFieldSet unknownFields) { @@ -3674,6 +4020,24 @@ public interface ProjectDomainAttributesDeleteRequestOrBuilder extends * .flyteidl.admin.MatchableResource resource_type = 3; */ flyteidl.admin.MatchableResourceOuterClass.MatchableResource getResourceType(); + + /** + *
+     * Optional, org key applied to the attributes.
+     * 
+ * + * string org = 4; + */ + java.lang.String getOrg(); + /** + *
+     * Optional, org key applied to the attributes.
+     * 
+ * + * string org = 4; + */ + com.google.protobuf.ByteString + getOrgBytes(); } /** *
@@ -3696,6 +4060,7 @@ private ProjectDomainAttributesDeleteRequest() {
       project_ = "";
       domain_ = "";
       resourceType_ = 0;
+      org_ = "";
     }
 
     @java.lang.Override
@@ -3740,6 +4105,12 @@ private ProjectDomainAttributesDeleteRequest(
               resourceType_ = rawValue;
               break;
             }
+            case 34: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              org_ = s;
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -3887,6 +4258,48 @@ public flyteidl.admin.MatchableResourceOuterClass.MatchableResource getResourceT
       return result == null ? flyteidl.admin.MatchableResourceOuterClass.MatchableResource.UNRECOGNIZED : result;
     }
 
+    public static final int ORG_FIELD_NUMBER = 4;
+    private volatile java.lang.Object org_;
+    /**
+     * 
+     * Optional, org key applied to the attributes.
+     * 
+ * + * string org = 4; + */ + public java.lang.String getOrg() { + java.lang.Object ref = org_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + org_ = s; + return s; + } + } + /** + *
+     * Optional, org key applied to the attributes.
+     * 
+ * + * string org = 4; + */ + public com.google.protobuf.ByteString + getOrgBytes() { + java.lang.Object ref = org_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + org_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -3910,6 +4323,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) if (resourceType_ != flyteidl.admin.MatchableResourceOuterClass.MatchableResource.TASK_RESOURCE.getNumber()) { output.writeEnum(3, resourceType_); } + if (!getOrgBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 4, org_); + } unknownFields.writeTo(output); } @@ -3929,6 +4345,9 @@ public int getSerializedSize() { size += com.google.protobuf.CodedOutputStream .computeEnumSize(3, resourceType_); } + if (!getOrgBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, org_); + } size += unknownFields.getSerializedSize(); memoizedSize = size; return size; @@ -3949,6 +4368,8 @@ public boolean equals(final java.lang.Object obj) { if (!getDomain() .equals(other.getDomain())) return false; if (resourceType_ != other.resourceType_) return false; + if (!getOrg() + .equals(other.getOrg())) return false; if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -3966,6 +4387,8 @@ public int hashCode() { hash = (53 * hash) + getDomain().hashCode(); hash = (37 * hash) + RESOURCE_TYPE_FIELD_NUMBER; hash = (53 * hash) + resourceType_; + hash = (37 * hash) + ORG_FIELD_NUMBER; + hash = (53 * hash) + getOrg().hashCode(); hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; @@ -4110,6 +4533,8 @@ public Builder clear() { resourceType_ = 0; + org_ = ""; + return this; } @@ -4139,6 +4564,7 @@ public flyteidl.admin.ProjectDomainAttributesOuterClass.ProjectDomainAttributesD result.project_ = project_; result.domain_ = domain_; result.resourceType_ = resourceType_; + result.org_ = org_; onBuilt(); return result; } @@ -4198,6 +4624,10 @@ public Builder mergeFrom(flyteidl.admin.ProjectDomainAttributesOuterClass.Projec if (other.resourceType_ != 0) { setResourceTypeValue(other.getResourceTypeValue()); } + if (!other.getOrg().isEmpty()) { + org_ = other.org_; + onChanged(); + } this.mergeUnknownFields(other.unknownFields); onChanged(); return this; @@ -4484,6 +4914,95 @@ public Builder clearResourceType() { onChanged(); return this; } + + private java.lang.Object org_ = ""; + /** + *
+       * Optional, org key applied to the attributes.
+       * 
+ * + * string org = 4; + */ + public java.lang.String getOrg() { + java.lang.Object ref = org_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + org_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * Optional, org key applied to the attributes.
+       * 
+ * + * string org = 4; + */ + public com.google.protobuf.ByteString + getOrgBytes() { + java.lang.Object ref = org_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + org_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * Optional, org key applied to the attributes.
+       * 
+ * + * string org = 4; + */ + public Builder setOrg( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + org_ = value; + onChanged(); + return this; + } + /** + *
+       * Optional, org key applied to the attributes.
+       * 
+ * + * string org = 4; + */ + public Builder clearOrg() { + + org_ = getDefaultInstance().getOrg(); + onChanged(); + return this; + } + /** + *
+       * Optional, org key applied to the attributes.
+       * 
+ * + * string org = 4; + */ + public Builder setOrgBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + org_ = value; + onChanged(); + return this; + } @java.lang.Override public final Builder setUnknownFields( final com.google.protobuf.UnknownFieldSet unknownFields) { @@ -5002,26 +5521,27 @@ public flyteidl.admin.ProjectDomainAttributesOuterClass.ProjectDomainAttributesD java.lang.String[] descriptorData = { "\n.flyteidl/admin/project_domain_attribut" + "es.proto\022\016flyteidl.admin\032\'flyteidl/admin" + - "/matchable_resource.proto\"{\n\027ProjectDoma" + - "inAttributes\022\017\n\007project\030\001 \001(\t\022\016\n\006domain\030" + - "\002 \001(\t\022?\n\023matching_attributes\030\003 \001(\0132\".fly" + - "teidl.admin.MatchingAttributes\"c\n$Projec" + - "tDomainAttributesUpdateRequest\022;\n\nattrib" + - "utes\030\001 \001(\0132\'.flyteidl.admin.ProjectDomai" + - "nAttributes\"\'\n%ProjectDomainAttributesUp" + - "dateResponse\"~\n!ProjectDomainAttributesG" + - "etRequest\022\017\n\007project\030\001 \001(\t\022\016\n\006domain\030\002 \001" + - "(\t\0228\n\rresource_type\030\003 \001(\0162!.flyteidl.adm" + - "in.MatchableResource\"a\n\"ProjectDomainAtt" + - "ributesGetResponse\022;\n\nattributes\030\001 \001(\0132\'" + - ".flyteidl.admin.ProjectDomainAttributes\"" + - "\201\001\n$ProjectDomainAttributesDeleteRequest" + - "\022\017\n\007project\030\001 \001(\t\022\016\n\006domain\030\002 \001(\t\0228\n\rres" + - "ource_type\030\003 \001(\0162!.flyteidl.admin.Matcha" + - "bleResource\"\'\n%ProjectDomainAttributesDe" + - "leteResponseB=Z;github.com/flyteorg/flyt" + - "e/flyteidl/gen/pb-go/flyteidl/adminb\006pro" + - "to3" + "/matchable_resource.proto\"\210\001\n\027ProjectDom" + + "ainAttributes\022\017\n\007project\030\001 \001(\t\022\016\n\006domain" + + "\030\002 \001(\t\022?\n\023matching_attributes\030\003 \001(\0132\".fl" + + "yteidl.admin.MatchingAttributes\022\013\n\003org\030\004" + + " \001(\t\"c\n$ProjectDomainAttributesUpdateReq" + + "uest\022;\n\nattributes\030\001 \001(\0132\'.flyteidl.admi" + + "n.ProjectDomainAttributes\"\'\n%ProjectDoma" + + "inAttributesUpdateResponse\"\213\001\n!ProjectDo" + + "mainAttributesGetRequest\022\017\n\007project\030\001 \001(" + + "\t\022\016\n\006domain\030\002 \001(\t\0228\n\rresource_type\030\003 \001(\016" + + "2!.flyteidl.admin.MatchableResource\022\013\n\003o" + + "rg\030\004 \001(\t\"a\n\"ProjectDomainAttributesGetRe" + + "sponse\022;\n\nattributes\030\001 \001(\0132\'.flyteidl.ad" + + "min.ProjectDomainAttributes\"\216\001\n$ProjectD" + + "omainAttributesDeleteRequest\022\017\n\007project\030" + + "\001 \001(\t\022\016\n\006domain\030\002 \001(\t\0228\n\rresource_type\030\003" + + " \001(\0162!.flyteidl.admin.MatchableResource\022" + + "\013\n\003org\030\004 \001(\t\"\'\n%ProjectDomainAttributesD" + + "eleteResponseB=Z;github.com/flyteorg/fly" + + "te/flyteidl/gen/pb-go/flyteidl/adminb\006pr" + + "oto3" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { @@ -5041,7 +5561,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors( internal_static_flyteidl_admin_ProjectDomainAttributes_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_flyteidl_admin_ProjectDomainAttributes_descriptor, - new java.lang.String[] { "Project", "Domain", "MatchingAttributes", }); + new java.lang.String[] { "Project", "Domain", "MatchingAttributes", "Org", }); internal_static_flyteidl_admin_ProjectDomainAttributesUpdateRequest_descriptor = getDescriptor().getMessageTypes().get(1); internal_static_flyteidl_admin_ProjectDomainAttributesUpdateRequest_fieldAccessorTable = new @@ -5059,7 +5579,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors( internal_static_flyteidl_admin_ProjectDomainAttributesGetRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_flyteidl_admin_ProjectDomainAttributesGetRequest_descriptor, - new java.lang.String[] { "Project", "Domain", "ResourceType", }); + new java.lang.String[] { "Project", "Domain", "ResourceType", "Org", }); internal_static_flyteidl_admin_ProjectDomainAttributesGetResponse_descriptor = getDescriptor().getMessageTypes().get(4); internal_static_flyteidl_admin_ProjectDomainAttributesGetResponse_fieldAccessorTable = new @@ -5071,7 +5591,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors( internal_static_flyteidl_admin_ProjectDomainAttributesDeleteRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_flyteidl_admin_ProjectDomainAttributesDeleteRequest_descriptor, - new java.lang.String[] { "Project", "Domain", "ResourceType", }); + new java.lang.String[] { "Project", "Domain", "ResourceType", "Org", }); internal_static_flyteidl_admin_ProjectDomainAttributesDeleteResponse_descriptor = getDescriptor().getMessageTypes().get(6); internal_static_flyteidl_admin_ProjectDomainAttributesDeleteResponse_fieldAccessorTable = new diff --git a/flyteidl/gen/pb-java/flyteidl/admin/ProjectOuterClass.java b/flyteidl/gen/pb-java/flyteidl/admin/ProjectOuterClass.java index 518b844a41..ccae7fde2c 100644 --- a/flyteidl/gen/pb-java/flyteidl/admin/ProjectOuterClass.java +++ b/flyteidl/gen/pb-java/flyteidl/admin/ProjectOuterClass.java @@ -892,6 +892,24 @@ flyteidl.admin.ProjectOuterClass.DomainOrBuilder getDomainsOrBuilder( * .flyteidl.admin.Project.ProjectState state = 6; */ flyteidl.admin.ProjectOuterClass.Project.ProjectState getState(); + + /** + *
+     * Optional, org key applied to the resource.
+     * 
+ * + * string org = 7; + */ + java.lang.String getOrg(); + /** + *
+     * Optional, org key applied to the resource.
+     * 
+ * + * string org = 7; + */ + com.google.protobuf.ByteString + getOrgBytes(); } /** *
@@ -915,6 +933,7 @@ private Project() {
       domains_ = java.util.Collections.emptyList();
       description_ = "";
       state_ = 0;
+      org_ = "";
     }
 
     @java.lang.Override
@@ -987,6 +1006,12 @@ private Project(
               state_ = rawValue;
               break;
             }
+            case 58: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              org_ = s;
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -1364,6 +1389,48 @@ public flyteidl.admin.ProjectOuterClass.Project.ProjectState getState() {
       return result == null ? flyteidl.admin.ProjectOuterClass.Project.ProjectState.UNRECOGNIZED : result;
     }
 
+    public static final int ORG_FIELD_NUMBER = 7;
+    private volatile java.lang.Object org_;
+    /**
+     * 
+     * Optional, org key applied to the resource.
+     * 
+ * + * string org = 7; + */ + public java.lang.String getOrg() { + java.lang.Object ref = org_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + org_ = s; + return s; + } + } + /** + *
+     * Optional, org key applied to the resource.
+     * 
+ * + * string org = 7; + */ + public com.google.protobuf.ByteString + getOrgBytes() { + java.lang.Object ref = org_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + org_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -1396,6 +1463,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) if (state_ != flyteidl.admin.ProjectOuterClass.Project.ProjectState.ACTIVE.getNumber()) { output.writeEnum(6, state_); } + if (!getOrgBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 7, org_); + } unknownFields.writeTo(output); } @@ -1426,6 +1496,9 @@ public int getSerializedSize() { size += com.google.protobuf.CodedOutputStream .computeEnumSize(6, state_); } + if (!getOrgBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(7, org_); + } size += unknownFields.getSerializedSize(); memoizedSize = size; return size; @@ -1455,6 +1528,8 @@ public boolean equals(final java.lang.Object obj) { .equals(other.getLabels())) return false; } if (state_ != other.state_) return false; + if (!getOrg() + .equals(other.getOrg())) return false; if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -1482,6 +1557,8 @@ public int hashCode() { } hash = (37 * hash) + STATE_FIELD_NUMBER; hash = (53 * hash) + state_; + hash = (37 * hash) + ORG_FIELD_NUMBER; + hash = (53 * hash) + getOrg().hashCode(); hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; @@ -1640,6 +1717,8 @@ public Builder clear() { } state_ = 0; + org_ = ""; + return this; } @@ -1686,6 +1765,7 @@ public flyteidl.admin.ProjectOuterClass.Project buildPartial() { result.labels_ = labelsBuilder_.build(); } result.state_ = state_; + result.org_ = org_; result.bitField0_ = to_bitField0_; onBuilt(); return result; @@ -1779,6 +1859,10 @@ public Builder mergeFrom(flyteidl.admin.ProjectOuterClass.Project other) { if (other.state_ != 0) { setStateValue(other.getStateValue()); } + if (!other.getOrg().isEmpty()) { + org_ = other.org_; + onChanged(); + } this.mergeUnknownFields(other.unknownFields); onChanged(); return this; @@ -2502,6 +2586,95 @@ public Builder clearState() { onChanged(); return this; } + + private java.lang.Object org_ = ""; + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 7; + */ + public java.lang.String getOrg() { + java.lang.Object ref = org_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + org_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 7; + */ + public com.google.protobuf.ByteString + getOrgBytes() { + java.lang.Object ref = org_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + org_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 7; + */ + public Builder setOrg( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + org_ = value; + onChanged(); + return this; + } + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 7; + */ + public Builder clearOrg() { + + org_ = getDefaultInstance().getOrg(); + onChanged(); + return this; + } + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 7; + */ + public Builder setOrgBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + org_ = value; + onChanged(); + return this; + } @java.lang.Override public final Builder setUnknownFields( final com.google.protobuf.UnknownFieldSet unknownFields) { @@ -6251,23 +6424,23 @@ public flyteidl.admin.ProjectOuterClass.ProjectUpdateResponse getDefaultInstance java.lang.String[] descriptorData = { "\n\034flyteidl/admin/project.proto\022\016flyteidl" + ".admin\032\033flyteidl/admin/common.proto\"\"\n\006D" + - "omain\022\n\n\002id\030\001 \001(\t\022\014\n\004name\030\002 \001(\t\"\376\001\n\007Proj" + + "omain\022\n\n\002id\030\001 \001(\t\022\014\n\004name\030\002 \001(\t\"\213\002\n\007Proj" + "ect\022\n\n\002id\030\001 \001(\t\022\014\n\004name\030\002 \001(\t\022\'\n\007domains" + "\030\003 \003(\0132\026.flyteidl.admin.Domain\022\023\n\013descri" + "ption\030\004 \001(\t\022&\n\006labels\030\005 \001(\0132\026.flyteidl.a" + "dmin.Labels\0223\n\005state\030\006 \001(\0162$.flyteidl.ad" + - "min.Project.ProjectState\">\n\014ProjectState" + - "\022\n\n\006ACTIVE\020\000\022\014\n\010ARCHIVED\020\001\022\024\n\020SYSTEM_GEN" + - "ERATED\020\002\"D\n\010Projects\022)\n\010projects\030\001 \003(\0132\027" + - ".flyteidl.admin.Project\022\r\n\005token\030\002 \001(\t\"j" + - "\n\022ProjectListRequest\022\r\n\005limit\030\001 \001(\r\022\r\n\005t" + - "oken\030\002 \001(\t\022\017\n\007filters\030\003 \001(\t\022%\n\007sort_by\030\004" + - " \001(\0132\024.flyteidl.admin.Sort\"B\n\026ProjectReg" + - "isterRequest\022(\n\007project\030\001 \001(\0132\027.flyteidl" + - ".admin.Project\"\031\n\027ProjectRegisterRespons" + - "e\"\027\n\025ProjectUpdateResponseB=Z;github.com" + - "/flyteorg/flyte/flyteidl/gen/pb-go/flyte" + - "idl/adminb\006proto3" + "min.Project.ProjectState\022\013\n\003org\030\007 \001(\t\">\n" + + "\014ProjectState\022\n\n\006ACTIVE\020\000\022\014\n\010ARCHIVED\020\001\022" + + "\024\n\020SYSTEM_GENERATED\020\002\"D\n\010Projects\022)\n\010pro" + + "jects\030\001 \003(\0132\027.flyteidl.admin.Project\022\r\n\005" + + "token\030\002 \001(\t\"j\n\022ProjectListRequest\022\r\n\005lim" + + "it\030\001 \001(\r\022\r\n\005token\030\002 \001(\t\022\017\n\007filters\030\003 \001(\t" + + "\022%\n\007sort_by\030\004 \001(\0132\024.flyteidl.admin.Sort\"" + + "B\n\026ProjectRegisterRequest\022(\n\007project\030\001 \001" + + "(\0132\027.flyteidl.admin.Project\"\031\n\027ProjectRe" + + "gisterResponse\"\027\n\025ProjectUpdateResponseB" + + "=Z;github.com/flyteorg/flyte/flyteidl/ge" + + "n/pb-go/flyteidl/adminb\006proto3" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { @@ -6293,7 +6466,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors( internal_static_flyteidl_admin_Project_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_flyteidl_admin_Project_descriptor, - new java.lang.String[] { "Id", "Name", "Domains", "Description", "Labels", "State", }); + new java.lang.String[] { "Id", "Name", "Domains", "Description", "Labels", "State", "Org", }); internal_static_flyteidl_admin_Projects_descriptor = getDescriptor().getMessageTypes().get(2); internal_static_flyteidl_admin_Projects_fieldAccessorTable = new diff --git a/flyteidl/gen/pb-java/flyteidl/admin/WorkflowAttributesOuterClass.java b/flyteidl/gen/pb-java/flyteidl/admin/WorkflowAttributesOuterClass.java index 21be6d20a5..9c5bba8ad3 100644 --- a/flyteidl/gen/pb-java/flyteidl/admin/WorkflowAttributesOuterClass.java +++ b/flyteidl/gen/pb-java/flyteidl/admin/WorkflowAttributesOuterClass.java @@ -84,6 +84,24 @@ public interface WorkflowAttributesOrBuilder extends * .flyteidl.admin.MatchingAttributes matching_attributes = 4; */ flyteidl.admin.MatchableResourceOuterClass.MatchingAttributesOrBuilder getMatchingAttributesOrBuilder(); + + /** + *
+     * Optional, org key applied to the attributes.
+     * 
+ * + * string org = 5; + */ + java.lang.String getOrg(); + /** + *
+     * Optional, org key applied to the attributes.
+     * 
+ * + * string org = 5; + */ + com.google.protobuf.ByteString + getOrgBytes(); } /** *
@@ -106,6 +124,7 @@ private WorkflowAttributes() {
       project_ = "";
       domain_ = "";
       workflow_ = "";
+      org_ = "";
     }
 
     @java.lang.Override
@@ -163,6 +182,12 @@ private WorkflowAttributes(
 
               break;
             }
+            case 42: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              org_ = s;
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -342,6 +367,48 @@ public flyteidl.admin.MatchableResourceOuterClass.MatchingAttributesOrBuilder ge
       return getMatchingAttributes();
     }
 
+    public static final int ORG_FIELD_NUMBER = 5;
+    private volatile java.lang.Object org_;
+    /**
+     * 
+     * Optional, org key applied to the attributes.
+     * 
+ * + * string org = 5; + */ + public java.lang.String getOrg() { + java.lang.Object ref = org_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + org_ = s; + return s; + } + } + /** + *
+     * Optional, org key applied to the attributes.
+     * 
+ * + * string org = 5; + */ + public com.google.protobuf.ByteString + getOrgBytes() { + java.lang.Object ref = org_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + org_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -368,6 +435,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) if (matchingAttributes_ != null) { output.writeMessage(4, getMatchingAttributes()); } + if (!getOrgBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 5, org_); + } unknownFields.writeTo(output); } @@ -390,6 +460,9 @@ public int getSerializedSize() { size += com.google.protobuf.CodedOutputStream .computeMessageSize(4, getMatchingAttributes()); } + if (!getOrgBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, org_); + } size += unknownFields.getSerializedSize(); memoizedSize = size; return size; @@ -416,6 +489,8 @@ public boolean equals(final java.lang.Object obj) { if (!getMatchingAttributes() .equals(other.getMatchingAttributes())) return false; } + if (!getOrg() + .equals(other.getOrg())) return false; if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -437,6 +512,8 @@ public int hashCode() { hash = (37 * hash) + MATCHING_ATTRIBUTES_FIELD_NUMBER; hash = (53 * hash) + getMatchingAttributes().hashCode(); } + hash = (37 * hash) + ORG_FIELD_NUMBER; + hash = (53 * hash) + getOrg().hashCode(); hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; @@ -587,6 +664,8 @@ public Builder clear() { matchingAttributes_ = null; matchingAttributesBuilder_ = null; } + org_ = ""; + return this; } @@ -621,6 +700,7 @@ public flyteidl.admin.WorkflowAttributesOuterClass.WorkflowAttributes buildParti } else { result.matchingAttributes_ = matchingAttributesBuilder_.build(); } + result.org_ = org_; onBuilt(); return result; } @@ -684,6 +764,10 @@ public Builder mergeFrom(flyteidl.admin.WorkflowAttributesOuterClass.WorkflowAtt if (other.hasMatchingAttributes()) { mergeMatchingAttributes(other.getMatchingAttributes()); } + if (!other.getOrg().isEmpty()) { + org_ = other.org_; + onChanged(); + } this.mergeUnknownFields(other.unknownFields); onChanged(); return this; @@ -1096,6 +1180,95 @@ public flyteidl.admin.MatchableResourceOuterClass.MatchingAttributesOrBuilder ge } return matchingAttributesBuilder_; } + + private java.lang.Object org_ = ""; + /** + *
+       * Optional, org key applied to the attributes.
+       * 
+ * + * string org = 5; + */ + public java.lang.String getOrg() { + java.lang.Object ref = org_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + org_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * Optional, org key applied to the attributes.
+       * 
+ * + * string org = 5; + */ + public com.google.protobuf.ByteString + getOrgBytes() { + java.lang.Object ref = org_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + org_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * Optional, org key applied to the attributes.
+       * 
+ * + * string org = 5; + */ + public Builder setOrg( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + org_ = value; + onChanged(); + return this; + } + /** + *
+       * Optional, org key applied to the attributes.
+       * 
+ * + * string org = 5; + */ + public Builder clearOrg() { + + org_ = getDefaultInstance().getOrg(); + onChanged(); + return this; + } + /** + *
+       * Optional, org key applied to the attributes.
+       * 
+ * + * string org = 5; + */ + public Builder setOrgBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + org_ = value; + onChanged(); + return this; + } @java.lang.Override public final Builder setUnknownFields( final com.google.protobuf.UnknownFieldSet unknownFields) { @@ -2266,6 +2439,24 @@ public interface WorkflowAttributesGetRequestOrBuilder extends * .flyteidl.admin.MatchableResource resource_type = 4; */ flyteidl.admin.MatchableResourceOuterClass.MatchableResource getResourceType(); + + /** + *
+     * Optional, org key applied to the attributes.
+     * 
+ * + * string org = 5; + */ + java.lang.String getOrg(); + /** + *
+     * Optional, org key applied to the attributes.
+     * 
+ * + * string org = 5; + */ + com.google.protobuf.ByteString + getOrgBytes(); } /** *
@@ -2289,6 +2480,7 @@ private WorkflowAttributesGetRequest() {
       domain_ = "";
       workflow_ = "";
       resourceType_ = 0;
+      org_ = "";
     }
 
     @java.lang.Override
@@ -2339,6 +2531,12 @@ private WorkflowAttributesGetRequest(
               resourceType_ = rawValue;
               break;
             }
+            case 42: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              org_ = s;
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -2530,6 +2728,48 @@ public flyteidl.admin.MatchableResourceOuterClass.MatchableResource getResourceT
       return result == null ? flyteidl.admin.MatchableResourceOuterClass.MatchableResource.UNRECOGNIZED : result;
     }
 
+    public static final int ORG_FIELD_NUMBER = 5;
+    private volatile java.lang.Object org_;
+    /**
+     * 
+     * Optional, org key applied to the attributes.
+     * 
+ * + * string org = 5; + */ + public java.lang.String getOrg() { + java.lang.Object ref = org_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + org_ = s; + return s; + } + } + /** + *
+     * Optional, org key applied to the attributes.
+     * 
+ * + * string org = 5; + */ + public com.google.protobuf.ByteString + getOrgBytes() { + java.lang.Object ref = org_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + org_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -2556,6 +2796,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) if (resourceType_ != flyteidl.admin.MatchableResourceOuterClass.MatchableResource.TASK_RESOURCE.getNumber()) { output.writeEnum(4, resourceType_); } + if (!getOrgBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 5, org_); + } unknownFields.writeTo(output); } @@ -2578,6 +2821,9 @@ public int getSerializedSize() { size += com.google.protobuf.CodedOutputStream .computeEnumSize(4, resourceType_); } + if (!getOrgBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, org_); + } size += unknownFields.getSerializedSize(); memoizedSize = size; return size; @@ -2600,6 +2846,8 @@ public boolean equals(final java.lang.Object obj) { if (!getWorkflow() .equals(other.getWorkflow())) return false; if (resourceType_ != other.resourceType_) return false; + if (!getOrg() + .equals(other.getOrg())) return false; if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -2619,6 +2867,8 @@ public int hashCode() { hash = (53 * hash) + getWorkflow().hashCode(); hash = (37 * hash) + RESOURCE_TYPE_FIELD_NUMBER; hash = (53 * hash) + resourceType_; + hash = (37 * hash) + ORG_FIELD_NUMBER; + hash = (53 * hash) + getOrg().hashCode(); hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; @@ -2765,6 +3015,8 @@ public Builder clear() { resourceType_ = 0; + org_ = ""; + return this; } @@ -2795,6 +3047,7 @@ public flyteidl.admin.WorkflowAttributesOuterClass.WorkflowAttributesGetRequest result.domain_ = domain_; result.workflow_ = workflow_; result.resourceType_ = resourceType_; + result.org_ = org_; onBuilt(); return result; } @@ -2858,6 +3111,10 @@ public Builder mergeFrom(flyteidl.admin.WorkflowAttributesOuterClass.WorkflowAtt if (other.resourceType_ != 0) { setResourceTypeValue(other.getResourceTypeValue()); } + if (!other.getOrg().isEmpty()) { + org_ = other.org_; + onChanged(); + } this.mergeUnknownFields(other.unknownFields); onChanged(); return this; @@ -3238,6 +3495,95 @@ public Builder clearResourceType() { onChanged(); return this; } + + private java.lang.Object org_ = ""; + /** + *
+       * Optional, org key applied to the attributes.
+       * 
+ * + * string org = 5; + */ + public java.lang.String getOrg() { + java.lang.Object ref = org_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + org_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * Optional, org key applied to the attributes.
+       * 
+ * + * string org = 5; + */ + public com.google.protobuf.ByteString + getOrgBytes() { + java.lang.Object ref = org_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + org_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * Optional, org key applied to the attributes.
+       * 
+ * + * string org = 5; + */ + public Builder setOrg( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + org_ = value; + onChanged(); + return this; + } + /** + *
+       * Optional, org key applied to the attributes.
+       * 
+ * + * string org = 5; + */ + public Builder clearOrg() { + + org_ = getDefaultInstance().getOrg(); + onChanged(); + return this; + } + /** + *
+       * Optional, org key applied to the attributes.
+       * 
+ * + * string org = 5; + */ + public Builder setOrgBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + org_ = value; + onChanged(); + return this; + } @java.lang.Override public final Builder setUnknownFields( final com.google.protobuf.UnknownFieldSet unknownFields) { @@ -3987,6 +4333,24 @@ public interface WorkflowAttributesDeleteRequestOrBuilder extends * .flyteidl.admin.MatchableResource resource_type = 4; */ flyteidl.admin.MatchableResourceOuterClass.MatchableResource getResourceType(); + + /** + *
+     * Optional, org key applied to the attributes.
+     * 
+ * + * string org = 5; + */ + java.lang.String getOrg(); + /** + *
+     * Optional, org key applied to the attributes.
+     * 
+ * + * string org = 5; + */ + com.google.protobuf.ByteString + getOrgBytes(); } /** *
@@ -4010,6 +4374,7 @@ private WorkflowAttributesDeleteRequest() {
       domain_ = "";
       workflow_ = "";
       resourceType_ = 0;
+      org_ = "";
     }
 
     @java.lang.Override
@@ -4060,6 +4425,12 @@ private WorkflowAttributesDeleteRequest(
               resourceType_ = rawValue;
               break;
             }
+            case 42: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              org_ = s;
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -4251,6 +4622,48 @@ public flyteidl.admin.MatchableResourceOuterClass.MatchableResource getResourceT
       return result == null ? flyteidl.admin.MatchableResourceOuterClass.MatchableResource.UNRECOGNIZED : result;
     }
 
+    public static final int ORG_FIELD_NUMBER = 5;
+    private volatile java.lang.Object org_;
+    /**
+     * 
+     * Optional, org key applied to the attributes.
+     * 
+ * + * string org = 5; + */ + public java.lang.String getOrg() { + java.lang.Object ref = org_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + org_ = s; + return s; + } + } + /** + *
+     * Optional, org key applied to the attributes.
+     * 
+ * + * string org = 5; + */ + public com.google.protobuf.ByteString + getOrgBytes() { + java.lang.Object ref = org_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + org_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -4277,6 +4690,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) if (resourceType_ != flyteidl.admin.MatchableResourceOuterClass.MatchableResource.TASK_RESOURCE.getNumber()) { output.writeEnum(4, resourceType_); } + if (!getOrgBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 5, org_); + } unknownFields.writeTo(output); } @@ -4299,6 +4715,9 @@ public int getSerializedSize() { size += com.google.protobuf.CodedOutputStream .computeEnumSize(4, resourceType_); } + if (!getOrgBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, org_); + } size += unknownFields.getSerializedSize(); memoizedSize = size; return size; @@ -4321,6 +4740,8 @@ public boolean equals(final java.lang.Object obj) { if (!getWorkflow() .equals(other.getWorkflow())) return false; if (resourceType_ != other.resourceType_) return false; + if (!getOrg() + .equals(other.getOrg())) return false; if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -4340,6 +4761,8 @@ public int hashCode() { hash = (53 * hash) + getWorkflow().hashCode(); hash = (37 * hash) + RESOURCE_TYPE_FIELD_NUMBER; hash = (53 * hash) + resourceType_; + hash = (37 * hash) + ORG_FIELD_NUMBER; + hash = (53 * hash) + getOrg().hashCode(); hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; @@ -4486,6 +4909,8 @@ public Builder clear() { resourceType_ = 0; + org_ = ""; + return this; } @@ -4516,6 +4941,7 @@ public flyteidl.admin.WorkflowAttributesOuterClass.WorkflowAttributesDeleteReque result.domain_ = domain_; result.workflow_ = workflow_; result.resourceType_ = resourceType_; + result.org_ = org_; onBuilt(); return result; } @@ -4579,6 +5005,10 @@ public Builder mergeFrom(flyteidl.admin.WorkflowAttributesOuterClass.WorkflowAtt if (other.resourceType_ != 0) { setResourceTypeValue(other.getResourceTypeValue()); } + if (!other.getOrg().isEmpty()) { + org_ = other.org_; + onChanged(); + } this.mergeUnknownFields(other.unknownFields); onChanged(); return this; @@ -4959,6 +5389,95 @@ public Builder clearResourceType() { onChanged(); return this; } + + private java.lang.Object org_ = ""; + /** + *
+       * Optional, org key applied to the attributes.
+       * 
+ * + * string org = 5; + */ + public java.lang.String getOrg() { + java.lang.Object ref = org_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + org_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * Optional, org key applied to the attributes.
+       * 
+ * + * string org = 5; + */ + public com.google.protobuf.ByteString + getOrgBytes() { + java.lang.Object ref = org_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + org_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * Optional, org key applied to the attributes.
+       * 
+ * + * string org = 5; + */ + public Builder setOrg( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + org_ = value; + onChanged(); + return this; + } + /** + *
+       * Optional, org key applied to the attributes.
+       * 
+ * + * string org = 5; + */ + public Builder clearOrg() { + + org_ = getDefaultInstance().getOrg(); + onChanged(); + return this; + } + /** + *
+       * Optional, org key applied to the attributes.
+       * 
+ * + * string org = 5; + */ + public Builder setOrgBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + org_ = value; + onChanged(); + return this; + } @java.lang.Override public final Builder setUnknownFields( final com.google.protobuf.UnknownFieldSet unknownFields) { @@ -5477,26 +5996,27 @@ public flyteidl.admin.WorkflowAttributesOuterClass.WorkflowAttributesDeleteRespo java.lang.String[] descriptorData = { "\n(flyteidl/admin/workflow_attributes.pro" + "to\022\016flyteidl.admin\032\'flyteidl/admin/match" + - "able_resource.proto\"\210\001\n\022WorkflowAttribut" + + "able_resource.proto\"\225\001\n\022WorkflowAttribut" + "es\022\017\n\007project\030\001 \001(\t\022\016\n\006domain\030\002 \001(\t\022\020\n\010w" + "orkflow\030\003 \001(\t\022?\n\023matching_attributes\030\004 \001" + - "(\0132\".flyteidl.admin.MatchingAttributes\"Y" + - "\n\037WorkflowAttributesUpdateRequest\0226\n\natt" + - "ributes\030\001 \001(\0132\".flyteidl.admin.WorkflowA" + - "ttributes\"\"\n WorkflowAttributesUpdateRes" + - "ponse\"\213\001\n\034WorkflowAttributesGetRequest\022\017" + - "\n\007project\030\001 \001(\t\022\016\n\006domain\030\002 \001(\t\022\020\n\010workf" + - "low\030\003 \001(\t\0228\n\rresource_type\030\004 \001(\0162!.flyte" + - "idl.admin.MatchableResource\"W\n\035WorkflowA" + - "ttributesGetResponse\0226\n\nattributes\030\001 \001(\013" + - "2\".flyteidl.admin.WorkflowAttributes\"\216\001\n" + - "\037WorkflowAttributesDeleteRequest\022\017\n\007proj" + - "ect\030\001 \001(\t\022\016\n\006domain\030\002 \001(\t\022\020\n\010workflow\030\003 " + - "\001(\t\0228\n\rresource_type\030\004 \001(\0162!.flyteidl.ad" + - "min.MatchableResource\"\"\n WorkflowAttribu" + - "tesDeleteResponseB=Z;github.com/flyteorg" + - "/flyte/flyteidl/gen/pb-go/flyteidl/admin" + - "b\006proto3" + "(\0132\".flyteidl.admin.MatchingAttributes\022\013" + + "\n\003org\030\005 \001(\t\"Y\n\037WorkflowAttributesUpdateR" + + "equest\0226\n\nattributes\030\001 \001(\0132\".flyteidl.ad" + + "min.WorkflowAttributes\"\"\n WorkflowAttrib" + + "utesUpdateResponse\"\230\001\n\034WorkflowAttribute" + + "sGetRequest\022\017\n\007project\030\001 \001(\t\022\016\n\006domain\030\002" + + " \001(\t\022\020\n\010workflow\030\003 \001(\t\0228\n\rresource_type\030" + + "\004 \001(\0162!.flyteidl.admin.MatchableResource" + + "\022\013\n\003org\030\005 \001(\t\"W\n\035WorkflowAttributesGetRe" + + "sponse\0226\n\nattributes\030\001 \001(\0132\".flyteidl.ad" + + "min.WorkflowAttributes\"\233\001\n\037WorkflowAttri" + + "butesDeleteRequest\022\017\n\007project\030\001 \001(\t\022\016\n\006d" + + "omain\030\002 \001(\t\022\020\n\010workflow\030\003 \001(\t\0228\n\rresourc" + + "e_type\030\004 \001(\0162!.flyteidl.admin.MatchableR" + + "esource\022\013\n\003org\030\005 \001(\t\"\"\n WorkflowAttribut" + + "esDeleteResponseB=Z;github.com/flyteorg/" + + "flyte/flyteidl/gen/pb-go/flyteidl/adminb" + + "\006proto3" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { @@ -5516,7 +6036,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors( internal_static_flyteidl_admin_WorkflowAttributes_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_flyteidl_admin_WorkflowAttributes_descriptor, - new java.lang.String[] { "Project", "Domain", "Workflow", "MatchingAttributes", }); + new java.lang.String[] { "Project", "Domain", "Workflow", "MatchingAttributes", "Org", }); internal_static_flyteidl_admin_WorkflowAttributesUpdateRequest_descriptor = getDescriptor().getMessageTypes().get(1); internal_static_flyteidl_admin_WorkflowAttributesUpdateRequest_fieldAccessorTable = new @@ -5534,7 +6054,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors( internal_static_flyteidl_admin_WorkflowAttributesGetRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_flyteidl_admin_WorkflowAttributesGetRequest_descriptor, - new java.lang.String[] { "Project", "Domain", "Workflow", "ResourceType", }); + new java.lang.String[] { "Project", "Domain", "Workflow", "ResourceType", "Org", }); internal_static_flyteidl_admin_WorkflowAttributesGetResponse_descriptor = getDescriptor().getMessageTypes().get(4); internal_static_flyteidl_admin_WorkflowAttributesGetResponse_fieldAccessorTable = new @@ -5546,7 +6066,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors( internal_static_flyteidl_admin_WorkflowAttributesDeleteRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_flyteidl_admin_WorkflowAttributesDeleteRequest_descriptor, - new java.lang.String[] { "Project", "Domain", "Workflow", "ResourceType", }); + new java.lang.String[] { "Project", "Domain", "Workflow", "ResourceType", "Org", }); internal_static_flyteidl_admin_WorkflowAttributesDeleteResponse_descriptor = getDescriptor().getMessageTypes().get(6); internal_static_flyteidl_admin_WorkflowAttributesDeleteResponse_fieldAccessorTable = new diff --git a/flyteidl/gen/pb-java/flyteidl/core/IdentifierOuterClass.java b/flyteidl/gen/pb-java/flyteidl/core/IdentifierOuterClass.java index 2891c9576c..74e46e5f28 100644 --- a/flyteidl/gen/pb-java/flyteidl/core/IdentifierOuterClass.java +++ b/flyteidl/gen/pb-java/flyteidl/core/IdentifierOuterClass.java @@ -249,6 +249,24 @@ public interface IdentifierOrBuilder extends */ com.google.protobuf.ByteString getVersionBytes(); + + /** + *
+     * Optional, org key applied to the resource.
+     * 
+ * + * string org = 6; + */ + java.lang.String getOrg(); + /** + *
+     * Optional, org key applied to the resource.
+     * 
+ * + * string org = 6; + */ + com.google.protobuf.ByteString + getOrgBytes(); } /** *
@@ -272,6 +290,7 @@ private Identifier() {
       domain_ = "";
       name_ = "";
       version_ = "";
+      org_ = "";
     }
 
     @java.lang.Override
@@ -328,6 +347,12 @@ private Identifier(
               version_ = s;
               break;
             }
+            case 50: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              org_ = s;
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -555,6 +580,48 @@ public java.lang.String getVersion() {
       }
     }
 
+    public static final int ORG_FIELD_NUMBER = 6;
+    private volatile java.lang.Object org_;
+    /**
+     * 
+     * Optional, org key applied to the resource.
+     * 
+ * + * string org = 6; + */ + public java.lang.String getOrg() { + java.lang.Object ref = org_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + org_ = s; + return s; + } + } + /** + *
+     * Optional, org key applied to the resource.
+     * 
+ * + * string org = 6; + */ + public com.google.protobuf.ByteString + getOrgBytes() { + java.lang.Object ref = org_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + org_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -584,6 +651,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) if (!getVersionBytes().isEmpty()) { com.google.protobuf.GeneratedMessageV3.writeString(output, 5, version_); } + if (!getOrgBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 6, org_); + } unknownFields.writeTo(output); } @@ -609,6 +679,9 @@ public int getSerializedSize() { if (!getVersionBytes().isEmpty()) { size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, version_); } + if (!getOrgBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, org_); + } size += unknownFields.getSerializedSize(); memoizedSize = size; return size; @@ -633,6 +706,8 @@ public boolean equals(final java.lang.Object obj) { .equals(other.getName())) return false; if (!getVersion() .equals(other.getVersion())) return false; + if (!getOrg() + .equals(other.getOrg())) return false; if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -654,6 +729,8 @@ public int hashCode() { hash = (53 * hash) + getName().hashCode(); hash = (37 * hash) + VERSION_FIELD_NUMBER; hash = (53 * hash) + getVersion().hashCode(); + hash = (37 * hash) + ORG_FIELD_NUMBER; + hash = (53 * hash) + getOrg().hashCode(); hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; @@ -801,6 +878,8 @@ public Builder clear() { version_ = ""; + org_ = ""; + return this; } @@ -832,6 +911,7 @@ public flyteidl.core.IdentifierOuterClass.Identifier buildPartial() { result.domain_ = domain_; result.name_ = name_; result.version_ = version_; + result.org_ = org_; onBuilt(); return result; } @@ -899,6 +979,10 @@ public Builder mergeFrom(flyteidl.core.IdentifierOuterClass.Identifier other) { version_ = other.version_; onChanged(); } + if (!other.getOrg().isEmpty()) { + org_ = other.org_; + onChanged(); + } this.mergeUnknownFields(other.unknownFields); onChanged(); return this; @@ -1353,6 +1437,95 @@ public Builder setVersionBytes( onChanged(); return this; } + + private java.lang.Object org_ = ""; + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 6; + */ + public java.lang.String getOrg() { + java.lang.Object ref = org_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + org_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 6; + */ + public com.google.protobuf.ByteString + getOrgBytes() { + java.lang.Object ref = org_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + org_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 6; + */ + public Builder setOrg( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + org_ = value; + onChanged(); + return this; + } + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 6; + */ + public Builder clearOrg() { + + org_ = getDefaultInstance().getOrg(); + onChanged(); + return this; + } + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 6; + */ + public Builder setOrgBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + org_ = value; + onChanged(); + return this; + } @java.lang.Override public final Builder setUnknownFields( final com.google.protobuf.UnknownFieldSet unknownFields) { @@ -1465,6 +1638,24 @@ public interface WorkflowExecutionIdentifierOrBuilder extends */ com.google.protobuf.ByteString getNameBytes(); + + /** + *
+     * Optional, org key applied to the resource.
+     * 
+ * + * string org = 5; + */ + java.lang.String getOrg(); + /** + *
+     * Optional, org key applied to the resource.
+     * 
+ * + * string org = 5; + */ + com.google.protobuf.ByteString + getOrgBytes(); } /** *
@@ -1486,6 +1677,7 @@ private WorkflowExecutionIdentifier() {
       project_ = "";
       domain_ = "";
       name_ = "";
+      org_ = "";
     }
 
     @java.lang.Override
@@ -1530,6 +1722,12 @@ private WorkflowExecutionIdentifier(
               name_ = s;
               break;
             }
+            case 42: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              org_ = s;
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -1690,6 +1888,48 @@ public java.lang.String getName() {
       }
     }
 
+    public static final int ORG_FIELD_NUMBER = 5;
+    private volatile java.lang.Object org_;
+    /**
+     * 
+     * Optional, org key applied to the resource.
+     * 
+ * + * string org = 5; + */ + public java.lang.String getOrg() { + java.lang.Object ref = org_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + org_ = s; + return s; + } + } + /** + *
+     * Optional, org key applied to the resource.
+     * 
+ * + * string org = 5; + */ + public com.google.protobuf.ByteString + getOrgBytes() { + java.lang.Object ref = org_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + org_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -1713,6 +1953,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) if (!getNameBytes().isEmpty()) { com.google.protobuf.GeneratedMessageV3.writeString(output, 4, name_); } + if (!getOrgBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 5, org_); + } unknownFields.writeTo(output); } @@ -1731,6 +1974,9 @@ public int getSerializedSize() { if (!getNameBytes().isEmpty()) { size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, name_); } + if (!getOrgBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, org_); + } size += unknownFields.getSerializedSize(); memoizedSize = size; return size; @@ -1752,6 +1998,8 @@ public boolean equals(final java.lang.Object obj) { .equals(other.getDomain())) return false; if (!getName() .equals(other.getName())) return false; + if (!getOrg() + .equals(other.getOrg())) return false; if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -1769,6 +2017,8 @@ public int hashCode() { hash = (53 * hash) + getDomain().hashCode(); hash = (37 * hash) + NAME_FIELD_NUMBER; hash = (53 * hash) + getName().hashCode(); + hash = (37 * hash) + ORG_FIELD_NUMBER; + hash = (53 * hash) + getOrg().hashCode(); hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; @@ -1912,6 +2162,8 @@ public Builder clear() { name_ = ""; + org_ = ""; + return this; } @@ -1941,6 +2193,7 @@ public flyteidl.core.IdentifierOuterClass.WorkflowExecutionIdentifier buildParti result.project_ = project_; result.domain_ = domain_; result.name_ = name_; + result.org_ = org_; onBuilt(); return result; } @@ -2001,6 +2254,10 @@ public Builder mergeFrom(flyteidl.core.IdentifierOuterClass.WorkflowExecutionIde name_ = other.name_; onChanged(); } + if (!other.getOrg().isEmpty()) { + org_ = other.org_; + onChanged(); + } this.mergeUnknownFields(other.unknownFields); onChanged(); return this; @@ -2301,6 +2558,95 @@ public Builder setNameBytes( onChanged(); return this; } + + private java.lang.Object org_ = ""; + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 5; + */ + public java.lang.String getOrg() { + java.lang.Object ref = org_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + org_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 5; + */ + public com.google.protobuf.ByteString + getOrgBytes() { + java.lang.Object ref = org_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + org_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 5; + */ + public Builder setOrg( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + org_ = value; + onChanged(); + return this; + } + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 5; + */ + public Builder clearOrg() { + + org_ = getDefaultInstance().getOrg(); + onChanged(); + return this; + } + /** + *
+       * Optional, org key applied to the resource.
+       * 
+ * + * string org = 5; + */ + public Builder setOrgBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + org_ = value; + onChanged(); + return this; + } @java.lang.Override public final Builder setUnknownFields( final com.google.protobuf.UnknownFieldSet unknownFields) { @@ -4857,25 +5203,26 @@ public flyteidl.core.IdentifierOuterClass.SignalIdentifier getDefaultInstanceFor static { java.lang.String[] descriptorData = { "\n\036flyteidl/core/identifier.proto\022\rflytei" + - "dl.core\"\200\001\n\nIdentifier\0222\n\rresource_type\030" + + "dl.core\"\215\001\n\nIdentifier\0222\n\rresource_type\030" + "\001 \001(\0162\033.flyteidl.core.ResourceType\022\017\n\007pr" + "oject\030\002 \001(\t\022\016\n\006domain\030\003 \001(\t\022\014\n\004name\030\004 \001(" + - "\t\022\017\n\007version\030\005 \001(\t\"L\n\033WorkflowExecutionI" + - "dentifier\022\017\n\007project\030\001 \001(\t\022\016\n\006domain\030\002 \001" + - "(\t\022\014\n\004name\030\004 \001(\t\"l\n\027NodeExecutionIdentif" + - "ier\022\017\n\007node_id\030\001 \001(\t\022@\n\014execution_id\030\002 \001" + - "(\0132*.flyteidl.core.WorkflowExecutionIden" + - "tifier\"\237\001\n\027TaskExecutionIdentifier\022*\n\007ta" + - "sk_id\030\001 \001(\0132\031.flyteidl.core.Identifier\022A" + - "\n\021node_execution_id\030\002 \001(\0132&.flyteidl.cor" + - "e.NodeExecutionIdentifier\022\025\n\rretry_attem" + - "pt\030\003 \001(\r\"g\n\020SignalIdentifier\022\021\n\tsignal_i" + - "d\030\001 \001(\t\022@\n\014execution_id\030\002 \001(\0132*.flyteidl" + - ".core.WorkflowExecutionIdentifier*U\n\014Res" + - "ourceType\022\017\n\013UNSPECIFIED\020\000\022\010\n\004TASK\020\001\022\014\n\010" + - "WORKFLOW\020\002\022\017\n\013LAUNCH_PLAN\020\003\022\013\n\007DATASET\020\004" + - "B/api/" + - "v1/active_launch_plans/{id.project}/{id." + + "edEntityIdentifierList\"Y\202\323\344\223\002S\022#/api/v1/" + + "task_ids/{project}/{domain}Z,\022*/api/v1/t" + + "asks/org/{org}/{project}/{domain}\022\250\002\n\tLi" + + "stTasks\022#.flyteidl.admin.ResourceListReq" + + "uest\032\030.flyteidl.admin.TaskList\"\333\001\202\323\344\223\002\324\001" + + "\0220/api/v1/tasks/{id.project}/{id.domain}" + + "/{id.name}Z?\022=/api/v1/tasks/org/{id.org}" + + "/{id.project}/{id.domain}/{id.name}Z(\022&/" + + "api/v1/tasks/{id.project}/{id.domain}Z5\022" + + "3/api/v1/tasks/org/{id.org}/{id.project}" + + "/{id.domain}\022}\n\016CreateWorkflow\022%.flyteid" + + "l.admin.WorkflowCreateRequest\032&.flyteidl" + + ".admin.WorkflowCreateResponse\"\034\202\323\344\223\002\026\"\021/" + + "api/v1/workflows:\001*\022\350\001\n\013GetWorkflow\022 .fl" + + "yteidl.admin.ObjectGetRequest\032\030.flyteidl" + + ".admin.Workflow\"\234\001\202\323\344\223\002\225\001\022A/api/v1/workf" + + "lows/{id.project}/{id.domain}/{id.name}/" + + "{id.version}ZP\022N/api/v1/workflows/org/{i" + + "d.org}/{id.project}/{id.domain}/{id.name" + + "}/{id.version}\022\321\001\n\017ListWorkflowIds\0220.fly" + + "teidl.admin.NamedEntityIdentifierListReq" + + "uest\032).flyteidl.admin.NamedEntityIdentif" + + "ierList\"a\202\323\344\223\002[\022\'/api/v1/workflow_ids/{p" + + "roject}/{domain}Z0\022./api/v1/workflows/or" + + "g/{org}/{project}/{domain}\022\300\002\n\rListWorkf" + + "lows\022#.flyteidl.admin.ResourceListReques" + + "t\032\034.flyteidl.admin.WorkflowList\"\353\001\202\323\344\223\002\344" + + "\001\0224/api/v1/workflows/{id.project}/{id.do" + + "main}/{id.name}ZC\022A/api/v1/workflows/org" + + "/{id.org}/{id.project}/{id.domain}/{id.n" + + "ame}Z,\022*/api/v1/workflows/{id.project}/{" + + "id.domain}Z9\0227/api/v1/workflows/org/{id." + + "org}/{id.project}/{id.domain}\022\206\001\n\020Create" + + "LaunchPlan\022\'.flyteidl.admin.LaunchPlanCr" + + "eateRequest\032(.flyteidl.admin.LaunchPlanC" + + "reateResponse\"\037\202\323\344\223\002\031\"\024/api/v1/launch_pl" + + "ans:\001*\022\362\001\n\rGetLaunchPlan\022 .flyteidl.admi" + + "n.ObjectGetRequest\032\032.flyteidl.admin.Laun" + + "chPlan\"\242\001\202\323\344\223\002\233\001\022D/api/v1/launch_plans/{" + + "id.project}/{id.domain}/{id.name}/{id.ve" + + "rsion}ZS\022Q/api/v1/launch_plans/org/{id.o" + + "rg}/{id.project}/{id.domain}/{id.name}/{" + + "id.version}\022\363\001\n\023GetActiveLaunchPlan\022\'.fl" + + "yteidl.admin.ActiveLaunchPlanRequest\032\032.f" + + "lyteidl.admin.LaunchPlan\"\226\001\202\323\344\223\002\217\001\022>/api" + + "/v1/active_launch_plans/{id.project}/{id" + + ".domain}/{id.name}ZM\022K/api/v1/active_lau" + + "nch_plans/org/{id.org}/{id.project}/{id." + "domain}/{id.name}\022\234\001\n\025ListActiveLaunchPl" + "ans\022+.flyteidl.admin.ActiveLaunchPlanLis" + "tRequest\032\036.flyteidl.admin.LaunchPlanList" + "\"6\202\323\344\223\0020\022./api/v1/active_launch_plans/{p" + - "roject}/{domain}\022\244\001\n\021ListLaunchPlanIds\0220" + + "roject}/{domain}\022\334\001\n\021ListLaunchPlanIds\0220" + ".flyteidl.admin.NamedEntityIdentifierLis" + "tRequest\032).flyteidl.admin.NamedEntityIde" + - "ntifierList\"2\202\323\344\223\002,\022*/api/v1/launch_plan" + - "_ids/{project}/{domain}\022\310\001\n\017ListLaunchPl" + - "ans\022#.flyteidl.admin.ResourceListRequest" + - "\032\036.flyteidl.admin.LaunchPlanList\"p\202\323\344\223\002j" + - "\0227/api/v1/launch_plans/{id.project}/{id." + - "domain}/{id.name}Z/\022-/api/v1/launch_plan" + - "s/{id.project}/{id.domain}\022\266\001\n\020UpdateLau" + - "nchPlan\022\'.flyteidl.admin.LaunchPlanUpdat" + - "eRequest\032(.flyteidl.admin.LaunchPlanUpda" + - "teResponse\"O\202\323\344\223\002I\032D/api/v1/launch_plans" + - "/{id.project}/{id.domain}/{id.name}/{id." + - "version}:\001*\022\201\001\n\017CreateExecution\022&.flytei" + - "dl.admin.ExecutionCreateRequest\032\'.flytei" + - "dl.admin.ExecutionCreateResponse\"\035\202\323\344\223\002\027" + - "\"\022/api/v1/executions:\001*\022\216\001\n\021RelaunchExec" + - "ution\022(.flyteidl.admin.ExecutionRelaunch" + - "Request\032\'.flyteidl.admin.ExecutionCreate" + - "Response\"&\202\323\344\223\002 \"\033/api/v1/executions/rel" + - "aunch:\001*\022\213\001\n\020RecoverExecution\022\'.flyteidl" + - ".admin.ExecutionRecoverRequest\032\'.flyteid" + - "l.admin.ExecutionCreateResponse\"%\202\323\344\223\002\037\"" + - "\032/api/v1/executions/recover:\001*\022\225\001\n\014GetEx" + - "ecution\022+.flyteidl.admin.WorkflowExecuti" + - "onGetRequest\032\031.flyteidl.admin.Execution\"" + - "=\202\323\344\223\0027\0225/api/v1/executions/{id.project}" + - "/{id.domain}/{id.name}\022\244\001\n\017UpdateExecuti" + - "on\022&.flyteidl.admin.ExecutionUpdateReque" + - "st\032\'.flyteidl.admin.ExecutionUpdateRespo" + - "nse\"@\202\323\344\223\002:\0325/api/v1/executions/{id.proj" + - "ect}/{id.domain}/{id.name}:\001*\022\271\001\n\020GetExe" + - "cutionData\022/.flyteidl.admin.WorkflowExec" + - "utionGetDataRequest\0320.flyteidl.admin.Wor" + - "kflowExecutionGetDataResponse\"B\202\323\344\223\002<\022:/" + - "api/v1/data/executions/{id.project}/{id." + - "domain}/{id.name}\022\211\001\n\016ListExecutions\022#.f" + - "lyteidl.admin.ResourceListRequest\032\035.flyt" + - "eidl.admin.ExecutionList\"3\202\323\344\223\002-\022+/api/v" + - "1/executions/{id.project}/{id.domain}\022\255\001" + - "\n\022TerminateExecution\022).flyteidl.admin.Ex" + - "ecutionTerminateRequest\032*.flyteidl.admin" + - ".ExecutionTerminateResponse\"@\202\323\344\223\002:*5/ap" + - "i/v1/executions/{id.project}/{id.domain}" + - "/{id.name}:\001*\022\322\001\n\020GetNodeExecution\022\'.fly" + - "teidl.admin.NodeExecutionGetRequest\032\035.fl" + - "yteidl.admin.NodeExecution\"v\202\323\344\223\002p\022n/api" + - "/v1/node_executions/{id.execution_id.pro" + - "ject}/{id.execution_id.domain}/{id.execu" + - "tion_id.name}/{id.node_id}\022\336\001\n\022ListNodeE" + - "xecutions\022(.flyteidl.admin.NodeExecution" + - "ListRequest\032!.flyteidl.admin.NodeExecuti" + - "onList\"{\202\323\344\223\002u\022s/api/v1/node_executions/" + - "{workflow_execution_id.project}/{workflo" + - "w_execution_id.domain}/{workflow_executi" + - "on_id.name}\022\245\004\n\031ListNodeExecutionsForTas" + - "k\022/.flyteidl.admin.NodeExecutionForTaskL" + - "istRequest\032!.flyteidl.admin.NodeExecutio" + - "nList\"\263\003\202\323\344\223\002\254\003\022\251\003/api/v1/children/task_" + - "executions/{task_execution_id.node_execu" + - "tion_id.execution_id.project}/{task_exec" + - "ution_id.node_execution_id.execution_id." + - "domain}/{task_execution_id.node_executio" + - "n_id.execution_id.name}/{task_execution_" + - "id.node_execution_id.node_id}/{task_exec" + - "ution_id.task_id.project}/{task_executio" + - "n_id.task_id.domain}/{task_execution_id." + - "task_id.name}/{task_execution_id.task_id" + - ".version}/{task_execution_id.retry_attem" + - "pt}\022\356\001\n\024GetNodeExecutionData\022+.flyteidl." + - "admin.NodeExecutionGetDataRequest\032,.flyt" + - "eidl.admin.NodeExecutionGetDataResponse\"" + - "{\202\323\344\223\002u\022s/api/v1/data/node_executions/{i" + - "d.execution_id.project}/{id.execution_id" + - ".domain}/{id.execution_id.name}/{id.node" + - "_id}\022\177\n\017RegisterProject\022&.flyteidl.admin" + - ".ProjectRegisterRequest\032\'.flyteidl.admin" + - ".ProjectRegisterResponse\"\033\202\323\344\223\002\025\"\020/api/v" + - "1/projects:\001*\022q\n\rUpdateProject\022\027.flyteid" + - "l.admin.Project\032%.flyteidl.admin.Project" + - "UpdateResponse\" \202\323\344\223\002\032\032\025/api/v1/projects" + - "/{id}:\001*\022f\n\014ListProjects\022\".flyteidl.admi" + - "n.ProjectListRequest\032\030.flyteidl.admin.Pr" + - "ojects\"\030\202\323\344\223\002\022\022\020/api/v1/projects\022\231\001\n\023Cre" + - "ateWorkflowEvent\022-.flyteidl.admin.Workfl" + - "owExecutionEventRequest\032..flyteidl.admin" + - ".WorkflowExecutionEventResponse\"#\202\323\344\223\002\035\"" + - "\030/api/v1/events/workflows:\001*\022\211\001\n\017CreateN" + - "odeEvent\022).flyteidl.admin.NodeExecutionE" + - "ventRequest\032*.flyteidl.admin.NodeExecuti" + - "onEventResponse\"\037\202\323\344\223\002\031\"\024/api/v1/events/" + - "nodes:\001*\022\211\001\n\017CreateTaskEvent\022).flyteidl." + - "admin.TaskExecutionEventRequest\032*.flytei" + - "dl.admin.TaskExecutionEventResponse\"\037\202\323\344" + - "\223\002\031\"\024/api/v1/events/tasks:\001*\022\200\003\n\020GetTask" + - "Execution\022\'.flyteidl.admin.TaskExecution" + - "GetRequest\032\035.flyteidl.admin.TaskExecutio" + - "n\"\243\002\202\323\344\223\002\234\002\022\231\002/api/v1/task_executions/{i" + - "d.node_execution_id.execution_id.project" + - "}/{id.node_execution_id.execution_id.dom" + - "ain}/{id.node_execution_id.execution_id." + - "name}/{id.node_execution_id.node_id}/{id" + - ".task_id.project}/{id.task_id.domain}/{i" + - "d.task_id.name}/{id.task_id.version}/{id" + - ".retry_attempt}\022\230\002\n\022ListTaskExecutions\022(" + - ".flyteidl.admin.TaskExecutionListRequest" + - "\032!.flyteidl.admin.TaskExecutionList\"\264\001\202\323" + - "\344\223\002\255\001\022\252\001/api/v1/task_executions/{node_ex" + - "ecution_id.execution_id.project}/{node_e" + - "xecution_id.execution_id.domain}/{node_e" + - "xecution_id.execution_id.name}/{node_exe" + - "cution_id.node_id}\022\234\003\n\024GetTaskExecutionD" + - "ata\022+.flyteidl.admin.TaskExecutionGetDat" + - "aRequest\032,.flyteidl.admin.TaskExecutionG" + - "etDataResponse\"\250\002\202\323\344\223\002\241\002\022\236\002/api/v1/data/" + - "task_executions/{id.node_execution_id.ex" + - "ecution_id.project}/{id.node_execution_i" + - "d.execution_id.domain}/{id.node_executio" + - "n_id.execution_id.name}/{id.node_executi" + - "on_id.node_id}/{id.task_id.project}/{id." + - "task_id.domain}/{id.task_id.name}/{id.ta" + - "sk_id.version}/{id.retry_attempt}\022\343\001\n\035Up" + - "dateProjectDomainAttributes\0224.flyteidl.a" + - "dmin.ProjectDomainAttributesUpdateReques" + - "t\0325.flyteidl.admin.ProjectDomainAttribut" + - "esUpdateResponse\"U\202\323\344\223\002O\032J/api/v1/projec" + - "t_domain_attributes/{attributes.project}" + - "/{attributes.domain}:\001*\022\301\001\n\032GetProjectDo" + - "mainAttributes\0221.flyteidl.admin.ProjectD" + - "omainAttributesGetRequest\0322.flyteidl.adm" + - "in.ProjectDomainAttributesGetResponse\"<\202" + - "\323\344\223\0026\0224/api/v1/project_domain_attributes" + - "/{project}/{domain}\022\315\001\n\035DeleteProjectDom" + - "ainAttributes\0224.flyteidl.admin.ProjectDo" + - "mainAttributesDeleteRequest\0325.flyteidl.a" + - "dmin.ProjectDomainAttributesDeleteRespon" + - "se\"?\202\323\344\223\0029*4/api/v1/project_domain_attri" + - "butes/{project}/{domain}:\001*\022\266\001\n\027UpdatePr" + - "ojectAttributes\022..flyteidl.admin.Project" + - "AttributesUpdateRequest\032/.flyteidl.admin" + - ".ProjectAttributesUpdateResponse\":\202\323\344\223\0024" + - "\032//api/v1/project_attributes/{attributes" + - ".project}:\001*\022\237\001\n\024GetProjectAttributes\022+." + - "flyteidl.admin.ProjectAttributesGetReque" + - "st\032,.flyteidl.admin.ProjectAttributesGet" + - "Response\",\202\323\344\223\002&\022$/api/v1/project_attrib" + - "utes/{project}\022\253\001\n\027DeleteProjectAttribut" + - "es\022..flyteidl.admin.ProjectAttributesDel" + - "eteRequest\032/.flyteidl.admin.ProjectAttri" + - "butesDeleteResponse\"/\202\323\344\223\002)*$/api/v1/pro" + - "ject_attributes/{project}:\001*\022\344\001\n\030UpdateW" + - "orkflowAttributes\022/.flyteidl.admin.Workf" + - "lowAttributesUpdateRequest\0320.flyteidl.ad" + - "min.WorkflowAttributesUpdateResponse\"e\202\323" + - "\344\223\002_\032Z/api/v1/workflow_attributes/{attri" + - "butes.project}/{attributes.domain}/{attr" + - "ibutes.workflow}:\001*\022\267\001\n\025GetWorkflowAttri" + - "butes\022,.flyteidl.admin.WorkflowAttribute" + - "sGetRequest\032-.flyteidl.admin.WorkflowAtt" + - "ributesGetResponse\"A\202\323\344\223\002;\0229/api/v1/work" + - "flow_attributes/{project}/{domain}/{work" + - "flow}\022\303\001\n\030DeleteWorkflowAttributes\022/.fly" + - "teidl.admin.WorkflowAttributesDeleteRequ" + - "est\0320.flyteidl.admin.WorkflowAttributesD" + - "eleteResponse\"D\202\323\344\223\002>*9/api/v1/workflow_" + - "attributes/{project}/{domain}/{workflow}" + - ":\001*\022\240\001\n\027ListMatchableAttributes\022..flytei" + - "dl.admin.ListMatchableAttributesRequest\032" + - "/.flyteidl.admin.ListMatchableAttributes" + - "Response\"$\202\323\344\223\002\036\022\034/api/v1/matchable_attr" + - "ibutes\022\237\001\n\021ListNamedEntities\022&.flyteidl." + - "admin.NamedEntityListRequest\032\037.flyteidl." + - "admin.NamedEntityList\"A\202\323\344\223\002;\0229/api/v1/n" + - "amed_entities/{resource_type}/{project}/" + - "{domain}\022\247\001\n\016GetNamedEntity\022%.flyteidl.a" + - "dmin.NamedEntityGetRequest\032\033.flyteidl.ad" + - "min.NamedEntity\"Q\202\323\344\223\002K\022I/api/v1/named_e" + - "ntities/{resource_type}/{id.project}/{id" + - ".domain}/{id.name}\022\276\001\n\021UpdateNamedEntity" + - "\022(.flyteidl.admin.NamedEntityUpdateReque" + - "st\032).flyteidl.admin.NamedEntityUpdateRes" + - "ponse\"T\202\323\344\223\002N\032I/api/v1/named_entities/{r" + - "esource_type}/{id.project}/{id.domain}/{" + - "id.name}:\001*\022l\n\nGetVersion\022!.flyteidl.adm" + - "in.GetVersionRequest\032\".flyteidl.admin.Ge" + - "tVersionResponse\"\027\202\323\344\223\002\021\022\017/api/v1/versio" + - "n\022\304\001\n\024GetDescriptionEntity\022 .flyteidl.ad" + - "min.ObjectGetRequest\032!.flyteidl.admin.De" + - "scriptionEntity\"g\202\323\344\223\002a\022_/api/v1/descrip" + - "tion_entities/{id.resource_type}/{id.pro" + - "ject}/{id.domain}/{id.name}/{id.version}" + - "\022\222\002\n\027ListDescriptionEntities\022,.flyteidl." + - "admin.DescriptionEntityListRequest\032%.fly" + - "teidl.admin.DescriptionEntityList\"\241\001\202\323\344\223" + - "\002\232\001\022O/api/v1/description_entities/{resou" + - "rce_type}/{id.project}/{id.domain}/{id.n" + - "ame}ZG\022E/api/v1/description_entities/{re" + - "source_type}/{id.project}/{id.domain}\022\305\001" + - "\n\023GetExecutionMetrics\0222.flyteidl.admin.W" + - "orkflowExecutionGetMetricsRequest\0323.flyt" + - "eidl.admin.WorkflowExecutionGetMetricsRe" + - "sponse\"E\202\323\344\223\002?\022=/api/v1/metrics/executio" + - "ns/{id.project}/{id.domain}/{id.name}B?Z" + - "=github.com/flyteorg/flyte/flyteidl/gen/" + - "pb-go/flyteidl/serviceb\006proto3" + "ntifierList\"j\202\323\344\223\002d\022*/api/v1/launch_plan" + + "_ids/{project}/{domain}Z6\0224/api/v1/launc" + + "h_plan_ids/org/{org}/{project}/{domain}\022" + + "\320\002\n\017ListLaunchPlans\022#.flyteidl.admin.Res" + + "ourceListRequest\032\036.flyteidl.admin.Launch" + + "PlanList\"\367\001\202\323\344\223\002\360\001\0227/api/v1/launch_plans" + + "/{id.project}/{id.domain}/{id.name}ZF\022D/" + + "api/v1/launch_plans/org/{id.org}/{id.pro" + + "ject}/{id.domain}/{id.name}Z/\022-/api/v1/l" + + "aunch_plans/{id.project}/{id.domain}Z<\022:" + + "/api/v1/launch_plans/org/{id.org}/{id.pr" + + "oject}/{id.domain}\022\215\002\n\020UpdateLaunchPlan\022" + + "\'.flyteidl.admin.LaunchPlanUpdateRequest" + + "\032(.flyteidl.admin.LaunchPlanUpdateRespon" + + "se\"\245\001\202\323\344\223\002\236\001\032D/api/v1/launch_plans/{id.p" + + "roject}/{id.domain}/{id.name}/{id.versio" + + "n}:\001*ZS\032Q/api/v1/launch_plans/org/{id.or" + + "g}/{id.project}/{id.domain}/{id.name}/{i" + + "d.version}\022\201\001\n\017CreateExecution\022&.flyteid" + + "l.admin.ExecutionCreateRequest\032\'.flyteid" + + "l.admin.ExecutionCreateResponse\"\035\202\323\344\223\002\027\"" + + "\022/api/v1/executions:\001*\022\216\001\n\021RelaunchExecu" + + "tion\022(.flyteidl.admin.ExecutionRelaunchR" + + "equest\032\'.flyteidl.admin.ExecutionCreateR" + + "esponse\"&\202\323\344\223\002 \"\033/api/v1/executions/rela" + + "unch:\001*\022\213\001\n\020RecoverExecution\022\'.flyteidl." + + "admin.ExecutionRecoverRequest\032\'.flyteidl" + + ".admin.ExecutionCreateResponse\"%\202\323\344\223\002\037\"\032" + + "/api/v1/executions/recover:\001*\022\334\001\n\014GetExe" + + "cution\022+.flyteidl.admin.WorkflowExecutio" + + "nGetRequest\032\031.flyteidl.admin.Execution\"\203" + + "\001\202\323\344\223\002}\0225/api/v1/executions/{id.project}" + + "/{id.domain}/{id.name}ZD\022B/api/v1/execut" + + "ions/org/{id.org}/{id.project}/{id.domai" + + "n}/{id.name}\022\357\001\n\017UpdateExecution\022&.flyte" + + "idl.admin.ExecutionUpdateRequest\032\'.flyte" + + "idl.admin.ExecutionUpdateResponse\"\212\001\202\323\344\223" + + "\002\203\001\0325/api/v1/executions/{id.project}/{id" + + ".domain}/{id.name}:\001*ZG\032B/api/v1/executi" + + "ons/org/{id.org}/{id.project}/{id.domain" + + "}/{id.name}:\001*\022\206\002\n\020GetExecutionData\022/.fl" + + "yteidl.admin.WorkflowExecutionGetDataReq" + + "uest\0320.flyteidl.admin.WorkflowExecutionG" + + "etDataResponse\"\216\001\202\323\344\223\002\207\001\022:/api/v1/data/e" + + "xecutions/{id.project}/{id.domain}/{id.n" + + "ame}ZI\022G/api/v1/data/executions/org/{id." + + "org}/{id.project}/{id.domain}/{id.name}\022" + + "\305\001\n\016ListExecutions\022#.flyteidl.admin.Reso" + + "urceListRequest\032\035.flyteidl.admin.Executi" + + "onList\"o\202\323\344\223\002i\022+/api/v1/executions/{id.p" + + "roject}/{id.domain}Z:\0228/api/v1/execution" + + "s/org/{id.org}/{id.project}/{id.domain}\022" + + "\375\001\n\022TerminateExecution\022).flyteidl.admin." + + "ExecutionTerminateRequest\032*.flyteidl.adm" + + "in.ExecutionTerminateResponse\"\217\001\202\323\344\223\002\210\001*" + + "5/api/v1/executions/{id.project}/{id.dom" + + "ain}/{id.name}:\001*ZL*G/api/v1/data/execut" + + "ions/org/{id.org}/{id.project}/{id.domai" + + "n}/{id.name}:\001*\022\342\002\n\020GetNodeExecution\022\'.f" + + "lyteidl.admin.NodeExecutionGetRequest\032\035." + + "flyteidl.admin.NodeExecution\"\205\002\202\323\344\223\002\376\001\022n" + + "/api/v1/node_executions/{id.execution_id" + + ".project}/{id.execution_id.domain}/{id.e" + + "xecution_id.name}/{id.node_id}Z\213\001\022\210\001/api" + + "/v1/node_executions/org/{id.execution_id" + + ".org}/{id.execution_id.project}/{id.exec" + + "ution_id.domain}/{id.execution_id.name}/" + + "{id.node_id}\022\371\002\n\022ListNodeExecutions\022(.fl" + + "yteidl.admin.NodeExecutionListRequest\032!." + + "flyteidl.admin.NodeExecutionList\"\225\002\202\323\344\223\002" + + "\216\002\022s/api/v1/node_executions/{workflow_ex" + + "ecution_id.project}/{workflow_execution_" + + "id.domain}/{workflow_execution_id.name}Z" + + "\226\001\022\223\001/api/v1/node_executions/org/{workfl" + + "ow_execution_id.org}/{workflow_execution" + + "_id.project}/{workflow_execution_id.doma" + + "in}/{workflow_execution_id.name}\022\217\010\n\031Lis" + + "tNodeExecutionsForTask\022/.flyteidl.admin." + + "NodeExecutionForTaskListRequest\032!.flytei" + + "dl.admin.NodeExecutionList\"\235\007\202\323\344\223\002\226\007\022\251\003/" + + "api/v1/children/task_executions/{task_ex" + + "ecution_id.node_execution_id.execution_i" + + "d.project}/{task_execution_id.node_execu" + + "tion_id.execution_id.domain}/{task_execu" + + "tion_id.node_execution_id.execution_id.n" + + "ame}/{task_execution_id.node_execution_i" + + "d.node_id}/{task_execution_id.task_id.pr" + + "oject}/{task_execution_id.task_id.domain" + + "}/{task_execution_id.task_id.name}/{task" + + "_execution_id.task_id.version}/{task_exe" + + "cution_id.retry_attempt}Z\347\003\022\344\003/api/v1/ch" + + "ildren/task_executions/org/{task_executi" + + "on_id.node_execution_id.execution_id.org" + + "}/{task_execution_id.node_execution_id.e" + + "xecution_id.project}/{task_execution_id." + + "node_execution_id.execution_id.domain}/{" + + "task_execution_id.node_execution_id.exec" + + "ution_id.name}/{task_execution_id.node_e" + + "xecution_id.node_id}/{task_execution_id." + + "task_id.project}/{task_execution_id.task" + + "_id.domain}/{task_execution_id.task_id.n" + + "ame}/{task_execution_id.task_id.version}" + + "/{task_execution_id.retry_attempt}\022\203\003\n\024G" + + "etNodeExecutionData\022+.flyteidl.admin.Nod" + + "eExecutionGetDataRequest\032,.flyteidl.admi" + + "n.NodeExecutionGetDataResponse\"\217\002\202\323\344\223\002\210\002" + + "\022s/api/v1/data/node_executions/{id.execu" + + "tion_id.project}/{id.execution_id.domain" + + "}/{id.execution_id.name}/{id.node_id}Z\220\001" + + "\022\215\001/api/v1/data/node_executions/org/{id." + + "execution_id.org}/{id.execution_id.proje" + + "ct}/{id.execution_id.domain}/{id.executi" + + "on_id.name}/{id.node_id}\022\177\n\017RegisterProj" + + "ect\022&.flyteidl.admin.ProjectRegisterRequ" + + "est\032\'.flyteidl.admin.ProjectRegisterResp" + + "onse\"\033\202\323\344\223\002\025\"\020/api/v1/projects:\001*\022\227\001\n\rUp" + + "dateProject\022\027.flyteidl.admin.Project\032%.f" + + "lyteidl.admin.ProjectUpdateResponse\"F\202\323\344" + + "\223\002@\032\025/api/v1/projects/{id}:\001*Z$\032\037/api/v1" + + "/projects/org/{org}/{id}:\001*\022f\n\014ListProje" + + "cts\022\".flyteidl.admin.ProjectListRequest\032" + + "\030.flyteidl.admin.Projects\"\030\202\323\344\223\002\022\022\020/api/" + + "v1/projects\022\231\001\n\023CreateWorkflowEvent\022-.fl" + + "yteidl.admin.WorkflowExecutionEventReque" + + "st\032..flyteidl.admin.WorkflowExecutionEve" + + "ntResponse\"#\202\323\344\223\002\035\"\030/api/v1/events/workf" + + "lows:\001*\022\211\001\n\017CreateNodeEvent\022).flyteidl.a" + + "dmin.NodeExecutionEventRequest\032*.flyteid" + + "l.admin.NodeExecutionEventResponse\"\037\202\323\344\223" + + "\002\031\"\024/api/v1/events/nodes:\001*\022\211\001\n\017CreateTa" + + "skEvent\022).flyteidl.admin.TaskExecutionEv" + + "entRequest\032*.flyteidl.admin.TaskExecutio" + + "nEventResponse\"\037\202\323\344\223\002\031\"\024/api/v1/events/t" + + "asks:\001*\022\313\005\n\020GetTaskExecution\022\'.flyteidl." + + "admin.TaskExecutionGetRequest\032\035.flyteidl" + + ".admin.TaskExecution\"\356\004\202\323\344\223\002\347\004\022\231\002/api/v1" + + "/task_executions/{id.node_execution_id.e" + + "xecution_id.project}/{id.node_execution_" + + "id.execution_id.domain}/{id.node_executi" + + "on_id.execution_id.name}/{id.node_execut" + + "ion_id.node_id}/{id.task_id.project}/{id" + + ".task_id.domain}/{id.task_id.name}/{id.t" + + "ask_id.version}/{id.retry_attempt}Z\310\002\022\305\002" + + "/api/v1/task_executions/org/{id.node_exe" + + "cution_id.execution_id.org}/{id.node_exe" + + "cution_id.execution_id.project}/{id.node" + + "_execution_id.execution_id.domain}/{id.n" + + "ode_execution_id.execution_id.name}/{id." + + "node_execution_id.node_id}/{id.task_id.p" + + "roject}/{id.task_id.domain}/{id.task_id." + + "name}/{id.task_id.version}/{id.retry_att" + + "empt}\022\361\003\n\022ListTaskExecutions\022(.flyteidl." + + "admin.TaskExecutionListRequest\032!.flyteid" + + "l.admin.TaskExecutionList\"\215\003\202\323\344\223\002\206\003\022\252\001/a" + + "pi/v1/task_executions/{node_execution_id" + + ".execution_id.project}/{node_execution_i" + + "d.execution_id.domain}/{node_execution_i" + + "d.execution_id.name}/{node_execution_id." + + "node_id}Z\326\001\022\323\001/api/v1/task_executions/or" + + "g/{node_execution_id.execution_id.org}/{" + + "node_execution_id.execution_id.project}/" + + "{node_execution_id.execution_id.domain}/" + + "{node_execution_id.execution_id.name}/{n" + + "ode_execution_id.node_id}\022\354\005\n\024GetTaskExe" + + "cutionData\022+.flyteidl.admin.TaskExecutio" + + "nGetDataRequest\032,.flyteidl.admin.TaskExe" + + "cutionGetDataResponse\"\370\004\202\323\344\223\002\361\004\022\236\002/api/v" + + "1/data/task_executions/{id.node_executio" + + "n_id.execution_id.project}/{id.node_exec" + + "ution_id.execution_id.domain}/{id.node_e" + + "xecution_id.execution_id.name}/{id.node_" + + "execution_id.node_id}/{id.task_id.projec" + + "t}/{id.task_id.domain}/{id.task_id.name}" + + "/{id.task_id.version}/{id.retry_attempt}" + + "Z\315\002\022\312\002/api/v1/data/task_executions/org/{" + + "id.node_execution_id.execution_id.org}/{" + + "id.node_execution_id.execution_id.projec" + + "t}/{id.node_execution_id.execution_id.do" + + "main}/{id.node_execution_id.execution_id" + + ".name}/{id.node_execution_id.node_id}/{i" + + "d.task_id.project}/{id.task_id.domain}/{" + + "id.task_id.name}/{id.task_id.version}/{i" + + "d.retry_attempt}\022\313\002\n\035UpdateProjectDomain" + + "Attributes\0224.flyteidl.admin.ProjectDomai" + + "nAttributesUpdateRequest\0325.flyteidl.admi" + + "n.ProjectDomainAttributesUpdateResponse\"" + + "\274\001\202\323\344\223\002\265\001\032J/api/v1/project_domain_attrib" + + "utes/{attributes.project}/{attributes.do" + + "main}:\001*Zd\032_/api/v1/project_domain_attri" + + "butes/org/{attributes.org}/{attributes.p" + + "roject}/{attributes.domain}:\001*\022\203\002\n\032GetPr" + + "ojectDomainAttributes\0221.flyteidl.admin.P" + + "rojectDomainAttributesGetRequest\0322.flyte" + + "idl.admin.ProjectDomainAttributesGetResp" + + "onse\"~\202\323\344\223\002x\0224/api/v1/project_domain_att" + + "ributes/{project}/{domain}Z@\022>/api/v1/pr" + + "oject_domain_attributes/org/{org}/{proje" + + "ct}/{domain}\022\223\002\n\035DeleteProjectDomainAttr" + + "ibutes\0224.flyteidl.admin.ProjectDomainAtt" + + "ributesDeleteRequest\0325.flyteidl.admin.Pr" + + "ojectDomainAttributesDeleteResponse\"\204\001\202\323" + + "\344\223\002~*4/api/v1/project_domain_attributes/" + + "{project}/{domain}:\001*ZC*>/api/v1/project" + + "_domain_attributes/org/{org}/{project}/{" + + "domain}:\001*\022\212\002\n\027UpdateProjectAttributes\022." + + ".flyteidl.admin.ProjectAttributesUpdateR" + + "equest\032/.flyteidl.admin.ProjectAttribute" + + "sUpdateResponse\"\215\001\202\323\344\223\002\206\001\032//api/v1/proje" + + "ct_attributes/{attributes.project}:\001*ZP\032" + + "K/api/v1/project_domain_attributes/org/{" + + "attributes.org}/{attributes.project}:\001*\022" + + "\330\001\n\024GetProjectAttributes\022+.flyteidl.admi" + + "n.ProjectAttributesGetRequest\032,.flyteidl" + + ".admin.ProjectAttributesGetResponse\"e\202\323\344" + + "\223\002_\022$/api/v1/project_attributes/{project" + + "}Z7\0225/api/v1/project_domain_attributes/o" + + "rg/{org}/{project}\022\347\001\n\027DeleteProjectAttr" + + "ibutes\022..flyteidl.admin.ProjectAttribute" + + "sDeleteRequest\032/.flyteidl.admin.ProjectA" + + "ttributesDeleteResponse\"k\202\323\344\223\002e*$/api/v1" + + "/project_attributes/{project}:\001*Z:*5/api" + + "/v1/project_domain_attributes/org/{org}/" + + "{project}:\001*\022\334\002\n\030UpdateWorkflowAttribute" + + "s\022/.flyteidl.admin.WorkflowAttributesUpd" + + "ateRequest\0320.flyteidl.admin.WorkflowAttr" + + "ibutesUpdateResponse\"\334\001\202\323\344\223\002\325\001\032Z/api/v1/" + + "workflow_attributes/{attributes.project}" + + "/{attributes.domain}/{attributes.workflo" + + "w}:\001*Zt\032o/api/v1/workflow_attributes/org" + + "/{attributes.org}/{attributes.project}/{" + + "attributes.domain}/{attributes.workflow}" + + ":\001*\022\200\002\n\025GetWorkflowAttributes\022,.flyteidl" + + ".admin.WorkflowAttributesGetRequest\032-.fl" + + "yteidl.admin.WorkflowAttributesGetRespon" + + "se\"\211\001\202\323\344\223\002\202\001\0229/api/v1/workflow_attribute" + + "s/{project}/{domain}/{workflow}ZE\022C/api/" + + "v1/workflow_attributes/org/{org}/{projec" + + "t}/{domain}/{workflow}\022\217\002\n\030DeleteWorkflo" + + "wAttributes\022/.flyteidl.admin.WorkflowAtt" + + "ributesDeleteRequest\0320.flyteidl.admin.Wo" + + "rkflowAttributesDeleteResponse\"\217\001\202\323\344\223\002\210\001" + + "*9/api/v1/workflow_attributes/{project}/" + + "{domain}/{workflow}:\001*ZH*C/api/v1/workfl" + + "ow_attributes/org/{org}/{project}/{domai" + + "n}/{workflow}:\001*\022\240\001\n\027ListMatchableAttrib" + + "utes\022..flyteidl.admin.ListMatchableAttri" + + "butesRequest\032/.flyteidl.admin.ListMatcha" + + "bleAttributesResponse\"$\202\323\344\223\002\036\022\034/api/v1/m" + + "atchable_attributes\022\350\001\n\021ListNamedEntitie" + + "s\022&.flyteidl.admin.NamedEntityListReques" + + "t\032\037.flyteidl.admin.NamedEntityList\"\211\001\202\323\344" + + "\223\002\202\001\0229/api/v1/named_entities/{resource_t" + + "ype}/{project}/{domain}ZE\022C/api/v1/named" + + "_entities/{resource_type}/org/{org}/{pro" + + "ject}/{domain}\022\203\002\n\016GetNamedEntity\022%.flyt" + + "eidl.admin.NamedEntityGetRequest\032\033.flyte" + + "idl.admin.NamedEntity\"\254\001\202\323\344\223\002\245\001\022I/api/v1" + + "/named_entities/{resource_type}/{id.proj" + + "ect}/{id.domain}/{id.name}ZX\022V/api/v1/na" + + "med_entities/{resource_type}/org/{id.org" + + "}/{id.project}/{id.domain}/{id.name}\022\235\002\n" + + "\021UpdateNamedEntity\022(.flyteidl.admin.Name" + + "dEntityUpdateRequest\032).flyteidl.admin.Na" + + "medEntityUpdateResponse\"\262\001\202\323\344\223\002\253\001\032I/api/" + + "v1/named_entities/{resource_type}/{id.pr" + + "oject}/{id.domain}/{id.name}:\001*Z[\032V/api/" + + "v1/named_entities/{resource_type}/org/{i" + + "d.org}/{id.project}/{id.domain}/{id.name" + + "}:\001*\022l\n\nGetVersion\022!.flyteidl.admin.GetV" + + "ersionRequest\032\".flyteidl.admin.GetVersio" + + "nResponse\"\027\202\323\344\223\002\021\022\017/api/v1/version\022\266\002\n\024G" + + "etDescriptionEntity\022 .flyteidl.admin.Obj" + + "ectGetRequest\032!.flyteidl.admin.Descripti" + + "onEntity\"\330\001\202\323\344\223\002\321\001\022_/api/v1/description_" + + "entities/{id.resource_type}/{id.project}" + + "/{id.domain}/{id.name}/{id.version}Zn\022l/" + + "api/v1/description_entities/org/{id.org}" + + "/{id.resource_type}/{id.project}/{id.dom" + + "ain}/{id.name}/{id.version}\022\310\003\n\027ListDesc" + + "riptionEntities\022,.flyteidl.admin.Descrip" + + "tionEntityListRequest\032%.flyteidl.admin.D" + + "escriptionEntityList\"\327\002\202\323\344\223\002\320\002\022O/api/v1/" + + "description_entities/{resource_type}/{id" + + ".project}/{id.domain}/{id.name}Z^\022\\/api/" + + "v1/description_entities/{resource_type}/" + + "org/{id.org}/{id.project}/{id.domain}/{i" + + "d.name}ZG\022E/api/v1/description_entities/" + + "{resource_type}/{id.project}/{id.domain}" + + "ZT\022R/api/v1/description_entities/{resour" + + "ce_type}/org/{id.org}/{id.project}/{id.d" + + "omain}\022\225\002\n\023GetExecutionMetrics\0222.flyteid" + + "l.admin.WorkflowExecutionGetMetricsReque" + + "st\0323.flyteidl.admin.WorkflowExecutionGet" + + "MetricsResponse\"\224\001\202\323\344\223\002\215\001\022=/api/v1/metri" + + "cs/executions/{id.project}/{id.domain}/{" + + "id.name}ZL\022J/api/v1/metrics/executions/o" + + "rg/{id.org}/{id.project}/{id.domain}/{id" + + ".name}B?Z=github.com/flyteorg/flyte/flyt" + + "eidl/gen/pb-go/flyteidl/serviceb\006proto3" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { diff --git a/flyteidl/gen/pb-java/flyteidl/service/ExternalPluginServiceOuterClass.java b/flyteidl/gen/pb-java/flyteidl/service/ExternalPluginServiceOuterClass.java index 2336dd1564..7fe6508f1a 100644 --- a/flyteidl/gen/pb-java/flyteidl/service/ExternalPluginServiceOuterClass.java +++ b/flyteidl/gen/pb-java/flyteidl/service/ExternalPluginServiceOuterClass.java @@ -4658,30 +4658,29 @@ public flyteidl.service.ExternalPluginServiceOuterClass.TaskDeleteResponse getDe "\n.flyteidl/service/external_plugin_servi" + "ce.proto\022\020flyteidl.service\032\034flyteidl/cor" + "e/literals.proto\032\031flyteidl/core/tasks.pr" + - "oto\032\035flyteidl/core/interface.proto\"\210\001\n\021T" + - "askCreateRequest\022)\n\006inputs\030\001 \001(\0132\031.flyte" + - "idl.core.LiteralMap\022-\n\010template\030\002 \001(\0132\033." + - "flyteidl.core.TaskTemplate\022\025\n\routput_pre" + - "fix\030\003 \001(\t:\002\030\001\"(\n\022TaskCreateResponse\022\016\n\006j" + - "ob_id\030\001 \001(\t:\002\030\001\"7\n\016TaskGetRequest\022\021\n\ttas" + - "k_type\030\001 \001(\t\022\016\n\006job_id\030\002 \001(\t:\002\030\001\"i\n\017Task" + - "GetResponse\022&\n\005state\030\001 \001(\0162\027.flyteidl.se" + - "rvice.State\022*\n\007outputs\030\002 \001(\0132\031.flyteidl." + - "core.LiteralMap:\002\030\001\":\n\021TaskDeleteRequest" + - "\022\021\n\ttask_type\030\001 \001(\t\022\016\n\006job_id\030\002 \001(\t:\002\030\001\"" + - "\030\n\022TaskDeleteResponse:\002\030\001*b\n\005State\022\025\n\021RE" + - "TRYABLE_FAILURE\020\000\022\025\n\021PERMANENT_FAILURE\020\001" + - "\022\013\n\007PENDING\020\002\022\013\n\007RUNNING\020\003\022\r\n\tSUCCEEDED\020" + - "\004\032\002\030\0012\250\002\n\025ExternalPluginService\022\\\n\nCreat" + - "eTask\022#.flyteidl.service.TaskCreateReque" + - "st\032$.flyteidl.service.TaskCreateResponse" + - "\"\003\210\002\001\022S\n\007GetTask\022 .flyteidl.service.Task" + - "GetRequest\032!.flyteidl.service.TaskGetRes" + - "ponse\"\003\210\002\001\022\\\n\nDeleteTask\022#.flyteidl.serv" + - "ice.TaskDeleteRequest\032$.flyteidl.service" + - ".TaskDeleteResponse\"\003\210\002\001B?Z=github.com/f" + - "lyteorg/flyte/flyteidl/gen/pb-go/flyteid" + - "l/serviceb\006proto3" + "oto\"\210\001\n\021TaskCreateRequest\022)\n\006inputs\030\001 \001(" + + "\0132\031.flyteidl.core.LiteralMap\022-\n\010template" + + "\030\002 \001(\0132\033.flyteidl.core.TaskTemplate\022\025\n\ro" + + "utput_prefix\030\003 \001(\t:\002\030\001\"(\n\022TaskCreateResp" + + "onse\022\016\n\006job_id\030\001 \001(\t:\002\030\001\"7\n\016TaskGetReque" + + "st\022\021\n\ttask_type\030\001 \001(\t\022\016\n\006job_id\030\002 \001(\t:\002\030" + + "\001\"i\n\017TaskGetResponse\022&\n\005state\030\001 \001(\0162\027.fl" + + "yteidl.service.State\022*\n\007outputs\030\002 \001(\0132\031." + + "flyteidl.core.LiteralMap:\002\030\001\":\n\021TaskDele" + + "teRequest\022\021\n\ttask_type\030\001 \001(\t\022\016\n\006job_id\030\002" + + " \001(\t:\002\030\001\"\030\n\022TaskDeleteResponse:\002\030\001*b\n\005St" + + "ate\022\025\n\021RETRYABLE_FAILURE\020\000\022\025\n\021PERMANENT_" + + "FAILURE\020\001\022\013\n\007PENDING\020\002\022\013\n\007RUNNING\020\003\022\r\n\tS" + + "UCCEEDED\020\004\032\002\030\0012\250\002\n\025ExternalPluginService" + + "\022\\\n\nCreateTask\022#.flyteidl.service.TaskCr" + + "eateRequest\032$.flyteidl.service.TaskCreat" + + "eResponse\"\003\210\002\001\022S\n\007GetTask\022 .flyteidl.ser" + + "vice.TaskGetRequest\032!.flyteidl.service.T" + + "askGetResponse\"\003\210\002\001\022\\\n\nDeleteTask\022#.flyt" + + "eidl.service.TaskDeleteRequest\032$.flyteid" + + "l.service.TaskDeleteResponse\"\003\210\002\001B?Z=git" + + "hub.com/flyteorg/flyte/flyteidl/gen/pb-g" + + "o/flyteidl/serviceb\006proto3" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { @@ -4696,7 +4695,6 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors( new com.google.protobuf.Descriptors.FileDescriptor[] { flyteidl.core.Literals.getDescriptor(), flyteidl.core.Tasks.getDescriptor(), - flyteidl.core.Interface.getDescriptor(), }, assigner); internal_static_flyteidl_service_TaskCreateRequest_descriptor = getDescriptor().getMessageTypes().get(0); @@ -4736,7 +4734,6 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors( new java.lang.String[] { }); flyteidl.core.Literals.getDescriptor(); flyteidl.core.Tasks.getDescriptor(); - flyteidl.core.Interface.getDescriptor(); } // @@protoc_insertion_point(outer_class_scope) diff --git a/flyteidl/gen/pb-js/flyteidl.d.ts b/flyteidl/gen/pb-js/flyteidl.d.ts index bdb37c16d7..c9e22a70ca 100644 --- a/flyteidl/gen/pb-js/flyteidl.d.ts +++ b/flyteidl/gen/pb-js/flyteidl.d.ts @@ -586,6 +586,9 @@ export namespace flyteidl { /** Identifier version */ version?: (string|null); + + /** Identifier org */ + org?: (string|null); } /** Represents an Identifier. */ @@ -612,6 +615,9 @@ export namespace flyteidl { /** Identifier version. */ public version: string; + /** Identifier org. */ + public org: string; + /** * Creates a new Identifier instance using the specified properties. * @param [properties] Properties to set @@ -656,6 +662,9 @@ export namespace flyteidl { /** WorkflowExecutionIdentifier name */ name?: (string|null); + + /** WorkflowExecutionIdentifier org */ + org?: (string|null); } /** Represents a WorkflowExecutionIdentifier. */ @@ -676,6 +685,9 @@ export namespace flyteidl { /** WorkflowExecutionIdentifier name. */ public name: string; + /** WorkflowExecutionIdentifier org. */ + public org: string; + /** * Creates a new WorkflowExecutionIdentifier instance using the specified properties. * @param [properties] Properties to set @@ -9901,6 +9913,9 @@ export namespace flyteidl { /** NamedEntityIdentifier name */ name?: (string|null); + + /** NamedEntityIdentifier org */ + org?: (string|null); } /** Represents a NamedEntityIdentifier. */ @@ -9921,6 +9936,9 @@ export namespace flyteidl { /** NamedEntityIdentifier name. */ public name: string; + /** NamedEntityIdentifier org. */ + public org: string; + /** * Creates a new NamedEntityIdentifier instance using the specified properties. * @param [properties] Properties to set @@ -10170,6 +10188,9 @@ export namespace flyteidl { /** NamedEntityIdentifierListRequest filters */ filters?: (string|null); + + /** NamedEntityIdentifierListRequest org */ + org?: (string|null); } /** Represents a NamedEntityIdentifierListRequest. */ @@ -10199,6 +10220,9 @@ export namespace flyteidl { /** NamedEntityIdentifierListRequest filters. */ public filters: string; + /** NamedEntityIdentifierListRequest org. */ + public org: string; + /** * Creates a new NamedEntityIdentifierListRequest instance using the specified properties. * @param [properties] Properties to set @@ -10255,6 +10279,9 @@ export namespace flyteidl { /** NamedEntityListRequest filters */ filters?: (string|null); + + /** NamedEntityListRequest org */ + org?: (string|null); } /** Represents a NamedEntityListRequest. */ @@ -10287,6 +10314,9 @@ export namespace flyteidl { /** NamedEntityListRequest filters. */ public filters: string; + /** NamedEntityListRequest org. */ + public org: string; + /** * Creates a new NamedEntityListRequest instance using the specified properties. * @param [properties] Properties to set @@ -12192,6 +12222,9 @@ export namespace flyteidl { /** ExecutionCreateRequest inputs */ inputs?: (flyteidl.core.ILiteralMap|null); + + /** ExecutionCreateRequest org */ + org?: (string|null); } /** Represents an ExecutionCreateRequest. */ @@ -12218,6 +12251,9 @@ export namespace flyteidl { /** ExecutionCreateRequest inputs. */ public inputs?: (flyteidl.core.ILiteralMap|null); + /** ExecutionCreateRequest org. */ + public org: string; + /** * Creates a new ExecutionCreateRequest instance using the specified properties. * @param [properties] Properties to set @@ -14480,6 +14516,9 @@ export namespace flyteidl { /** ActiveLaunchPlanListRequest sortBy */ sortBy?: (flyteidl.admin.ISort|null); + + /** ActiveLaunchPlanListRequest org */ + org?: (string|null); } /** Represents an ActiveLaunchPlanListRequest. */ @@ -14506,6 +14545,9 @@ export namespace flyteidl { /** ActiveLaunchPlanListRequest sortBy. */ public sortBy?: (flyteidl.admin.ISort|null); + /** ActiveLaunchPlanListRequest org. */ + public org: string; + /** * Creates a new ActiveLaunchPlanListRequest instance using the specified properties. * @param [properties] Properties to set @@ -15370,6 +15412,9 @@ export namespace flyteidl { /** MatchableAttributesConfiguration launchPlan */ launchPlan?: (string|null); + + /** MatchableAttributesConfiguration org */ + org?: (string|null); } /** Represents a MatchableAttributesConfiguration. */ @@ -15396,6 +15441,9 @@ export namespace flyteidl { /** MatchableAttributesConfiguration launchPlan. */ public launchPlan: string; + /** MatchableAttributesConfiguration org. */ + public org: string; + /** * Creates a new MatchableAttributesConfiguration instance using the specified properties. * @param [properties] Properties to set @@ -16533,6 +16581,9 @@ export namespace flyteidl { /** Project state */ state?: (flyteidl.admin.Project.ProjectState|null); + + /** Project org */ + org?: (string|null); } /** Represents a Project. */ @@ -16562,6 +16613,9 @@ export namespace flyteidl { /** Project state. */ public state: flyteidl.admin.Project.ProjectState; + /** Project org. */ + public org: string; + /** * Creates a new Project instance using the specified properties. * @param [properties] Properties to set @@ -16885,6 +16939,9 @@ export namespace flyteidl { /** ProjectAttributes matchingAttributes */ matchingAttributes?: (flyteidl.admin.IMatchingAttributes|null); + + /** ProjectAttributes org */ + org?: (string|null); } /** Represents a ProjectAttributes. */ @@ -16902,6 +16959,9 @@ export namespace flyteidl { /** ProjectAttributes matchingAttributes. */ public matchingAttributes?: (flyteidl.admin.IMatchingAttributes|null); + /** ProjectAttributes org. */ + public org: string; + /** * Creates a new ProjectAttributes instance using the specified properties. * @param [properties] Properties to set @@ -17041,6 +17101,9 @@ export namespace flyteidl { /** ProjectAttributesGetRequest resourceType */ resourceType?: (flyteidl.admin.MatchableResource|null); + + /** ProjectAttributesGetRequest org */ + org?: (string|null); } /** Represents a ProjectAttributesGetRequest. */ @@ -17058,6 +17121,9 @@ export namespace flyteidl { /** ProjectAttributesGetRequest resourceType. */ public resourceType: flyteidl.admin.MatchableResource; + /** ProjectAttributesGetRequest org. */ + public org: string; + /** * Creates a new ProjectAttributesGetRequest instance using the specified properties. * @param [properties] Properties to set @@ -17151,6 +17217,9 @@ export namespace flyteidl { /** ProjectAttributesDeleteRequest resourceType */ resourceType?: (flyteidl.admin.MatchableResource|null); + + /** ProjectAttributesDeleteRequest org */ + org?: (string|null); } /** Represents a ProjectAttributesDeleteRequest. */ @@ -17168,6 +17237,9 @@ export namespace flyteidl { /** ProjectAttributesDeleteRequest resourceType. */ public resourceType: flyteidl.admin.MatchableResource; + /** ProjectAttributesDeleteRequest org. */ + public org: string; + /** * Creates a new ProjectAttributesDeleteRequest instance using the specified properties. * @param [properties] Properties to set @@ -17258,6 +17330,9 @@ export namespace flyteidl { /** ProjectDomainAttributes matchingAttributes */ matchingAttributes?: (flyteidl.admin.IMatchingAttributes|null); + + /** ProjectDomainAttributes org */ + org?: (string|null); } /** Represents a ProjectDomainAttributes. */ @@ -17278,6 +17353,9 @@ export namespace flyteidl { /** ProjectDomainAttributes matchingAttributes. */ public matchingAttributes?: (flyteidl.admin.IMatchingAttributes|null); + /** ProjectDomainAttributes org. */ + public org: string; + /** * Creates a new ProjectDomainAttributes instance using the specified properties. * @param [properties] Properties to set @@ -17420,6 +17498,9 @@ export namespace flyteidl { /** ProjectDomainAttributesGetRequest resourceType */ resourceType?: (flyteidl.admin.MatchableResource|null); + + /** ProjectDomainAttributesGetRequest org */ + org?: (string|null); } /** Represents a ProjectDomainAttributesGetRequest. */ @@ -17440,6 +17521,9 @@ export namespace flyteidl { /** ProjectDomainAttributesGetRequest resourceType. */ public resourceType: flyteidl.admin.MatchableResource; + /** ProjectDomainAttributesGetRequest org. */ + public org: string; + /** * Creates a new ProjectDomainAttributesGetRequest instance using the specified properties. * @param [properties] Properties to set @@ -17536,6 +17620,9 @@ export namespace flyteidl { /** ProjectDomainAttributesDeleteRequest resourceType */ resourceType?: (flyteidl.admin.MatchableResource|null); + + /** ProjectDomainAttributesDeleteRequest org */ + org?: (string|null); } /** Represents a ProjectDomainAttributesDeleteRequest. */ @@ -17556,6 +17643,9 @@ export namespace flyteidl { /** ProjectDomainAttributesDeleteRequest resourceType. */ public resourceType: flyteidl.admin.MatchableResource; + /** ProjectDomainAttributesDeleteRequest org. */ + public org: string; + /** * Creates a new ProjectDomainAttributesDeleteRequest instance using the specified properties. * @param [properties] Properties to set @@ -19607,6 +19697,9 @@ export namespace flyteidl { /** WorkflowAttributes matchingAttributes */ matchingAttributes?: (flyteidl.admin.IMatchingAttributes|null); + + /** WorkflowAttributes org */ + org?: (string|null); } /** Represents a WorkflowAttributes. */ @@ -19630,6 +19723,9 @@ export namespace flyteidl { /** WorkflowAttributes matchingAttributes. */ public matchingAttributes?: (flyteidl.admin.IMatchingAttributes|null); + /** WorkflowAttributes org. */ + public org: string; + /** * Creates a new WorkflowAttributes instance using the specified properties. * @param [properties] Properties to set @@ -19775,6 +19871,9 @@ export namespace flyteidl { /** WorkflowAttributesGetRequest resourceType */ resourceType?: (flyteidl.admin.MatchableResource|null); + + /** WorkflowAttributesGetRequest org */ + org?: (string|null); } /** Represents a WorkflowAttributesGetRequest. */ @@ -19798,6 +19897,9 @@ export namespace flyteidl { /** WorkflowAttributesGetRequest resourceType. */ public resourceType: flyteidl.admin.MatchableResource; + /** WorkflowAttributesGetRequest org. */ + public org: string; + /** * Creates a new WorkflowAttributesGetRequest instance using the specified properties. * @param [properties] Properties to set @@ -19897,6 +19999,9 @@ export namespace flyteidl { /** WorkflowAttributesDeleteRequest resourceType */ resourceType?: (flyteidl.admin.MatchableResource|null); + + /** WorkflowAttributesDeleteRequest org */ + org?: (string|null); } /** Represents a WorkflowAttributesDeleteRequest. */ @@ -19920,6 +20025,9 @@ export namespace flyteidl { /** WorkflowAttributesDeleteRequest resourceType. */ public resourceType: flyteidl.admin.MatchableResource; + /** WorkflowAttributesDeleteRequest org. */ + public org: string; + /** * Creates a new WorkflowAttributesDeleteRequest instance using the specified properties. * @param [properties] Properties to set diff --git a/flyteidl/gen/pb-js/flyteidl.js b/flyteidl/gen/pb-js/flyteidl.js index 062da3ba75..971e6450a2 100644 --- a/flyteidl/gen/pb-js/flyteidl.js +++ b/flyteidl/gen/pb-js/flyteidl.js @@ -1399,6 +1399,7 @@ * @property {string|null} [domain] Identifier domain * @property {string|null} [name] Identifier name * @property {string|null} [version] Identifier version + * @property {string|null} [org] Identifier org */ /** @@ -1456,6 +1457,14 @@ */ Identifier.prototype.version = ""; + /** + * Identifier org. + * @member {string} org + * @memberof flyteidl.core.Identifier + * @instance + */ + Identifier.prototype.org = ""; + /** * Creates a new Identifier instance using the specified properties. * @function create @@ -1490,6 +1499,8 @@ writer.uint32(/* id 4, wireType 2 =*/34).string(message.name); if (message.version != null && message.hasOwnProperty("version")) writer.uint32(/* id 5, wireType 2 =*/42).string(message.version); + if (message.org != null && message.hasOwnProperty("org")) + writer.uint32(/* id 6, wireType 2 =*/50).string(message.org); return writer; }; @@ -1526,6 +1537,9 @@ case 5: message.version = reader.string(); break; + case 6: + message.org = reader.string(); + break; default: reader.skipType(tag & 7); break; @@ -1568,6 +1582,9 @@ if (message.version != null && message.hasOwnProperty("version")) if (!$util.isString(message.version)) return "version: string expected"; + if (message.org != null && message.hasOwnProperty("org")) + if (!$util.isString(message.org)) + return "org: string expected"; return null; }; @@ -1583,6 +1600,7 @@ * @property {string|null} [project] WorkflowExecutionIdentifier project * @property {string|null} [domain] WorkflowExecutionIdentifier domain * @property {string|null} [name] WorkflowExecutionIdentifier name + * @property {string|null} [org] WorkflowExecutionIdentifier org */ /** @@ -1624,6 +1642,14 @@ */ WorkflowExecutionIdentifier.prototype.name = ""; + /** + * WorkflowExecutionIdentifier org. + * @member {string} org + * @memberof flyteidl.core.WorkflowExecutionIdentifier + * @instance + */ + WorkflowExecutionIdentifier.prototype.org = ""; + /** * Creates a new WorkflowExecutionIdentifier instance using the specified properties. * @function create @@ -1654,6 +1680,8 @@ writer.uint32(/* id 2, wireType 2 =*/18).string(message.domain); if (message.name != null && message.hasOwnProperty("name")) writer.uint32(/* id 4, wireType 2 =*/34).string(message.name); + if (message.org != null && message.hasOwnProperty("org")) + writer.uint32(/* id 5, wireType 2 =*/42).string(message.org); return writer; }; @@ -1684,6 +1712,9 @@ case 4: message.name = reader.string(); break; + case 5: + message.org = reader.string(); + break; default: reader.skipType(tag & 7); break; @@ -1712,6 +1743,9 @@ if (message.name != null && message.hasOwnProperty("name")) if (!$util.isString(message.name)) return "name: string expected"; + if (message.org != null && message.hasOwnProperty("org")) + if (!$util.isString(message.org)) + return "org: string expected"; return null; }; @@ -24127,6 +24161,7 @@ * @property {string|null} [project] NamedEntityIdentifier project * @property {string|null} [domain] NamedEntityIdentifier domain * @property {string|null} [name] NamedEntityIdentifier name + * @property {string|null} [org] NamedEntityIdentifier org */ /** @@ -24168,6 +24203,14 @@ */ NamedEntityIdentifier.prototype.name = ""; + /** + * NamedEntityIdentifier org. + * @member {string} org + * @memberof flyteidl.admin.NamedEntityIdentifier + * @instance + */ + NamedEntityIdentifier.prototype.org = ""; + /** * Creates a new NamedEntityIdentifier instance using the specified properties. * @function create @@ -24198,6 +24241,8 @@ writer.uint32(/* id 2, wireType 2 =*/18).string(message.domain); if (message.name != null && message.hasOwnProperty("name")) writer.uint32(/* id 3, wireType 2 =*/26).string(message.name); + if (message.org != null && message.hasOwnProperty("org")) + writer.uint32(/* id 4, wireType 2 =*/34).string(message.org); return writer; }; @@ -24228,6 +24273,9 @@ case 3: message.name = reader.string(); break; + case 4: + message.org = reader.string(); + break; default: reader.skipType(tag & 7); break; @@ -24256,6 +24304,9 @@ if (message.name != null && message.hasOwnProperty("name")) if (!$util.isString(message.name)) return "name: string expected"; + if (message.org != null && message.hasOwnProperty("org")) + if (!$util.isString(message.org)) + return "org: string expected"; return null; }; @@ -24725,6 +24776,7 @@ * @property {string|null} [token] NamedEntityIdentifierListRequest token * @property {flyteidl.admin.ISort|null} [sortBy] NamedEntityIdentifierListRequest sortBy * @property {string|null} [filters] NamedEntityIdentifierListRequest filters + * @property {string|null} [org] NamedEntityIdentifierListRequest org */ /** @@ -24790,6 +24842,14 @@ */ NamedEntityIdentifierListRequest.prototype.filters = ""; + /** + * NamedEntityIdentifierListRequest org. + * @member {string} org + * @memberof flyteidl.admin.NamedEntityIdentifierListRequest + * @instance + */ + NamedEntityIdentifierListRequest.prototype.org = ""; + /** * Creates a new NamedEntityIdentifierListRequest instance using the specified properties. * @function create @@ -24826,6 +24886,8 @@ $root.flyteidl.admin.Sort.encode(message.sortBy, writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim(); if (message.filters != null && message.hasOwnProperty("filters")) writer.uint32(/* id 6, wireType 2 =*/50).string(message.filters); + if (message.org != null && message.hasOwnProperty("org")) + writer.uint32(/* id 7, wireType 2 =*/58).string(message.org); return writer; }; @@ -24865,6 +24927,9 @@ case 6: message.filters = reader.string(); break; + case 7: + message.org = reader.string(); + break; default: reader.skipType(tag & 7); break; @@ -24904,6 +24969,9 @@ if (message.filters != null && message.hasOwnProperty("filters")) if (!$util.isString(message.filters)) return "filters: string expected"; + if (message.org != null && message.hasOwnProperty("org")) + if (!$util.isString(message.org)) + return "org: string expected"; return null; }; @@ -24923,6 +24991,7 @@ * @property {string|null} [token] NamedEntityListRequest token * @property {flyteidl.admin.ISort|null} [sortBy] NamedEntityListRequest sortBy * @property {string|null} [filters] NamedEntityListRequest filters + * @property {string|null} [org] NamedEntityListRequest org */ /** @@ -24996,6 +25065,14 @@ */ NamedEntityListRequest.prototype.filters = ""; + /** + * NamedEntityListRequest org. + * @member {string} org + * @memberof flyteidl.admin.NamedEntityListRequest + * @instance + */ + NamedEntityListRequest.prototype.org = ""; + /** * Creates a new NamedEntityListRequest instance using the specified properties. * @function create @@ -25034,6 +25111,8 @@ $root.flyteidl.admin.Sort.encode(message.sortBy, writer.uint32(/* id 6, wireType 2 =*/50).fork()).ldelim(); if (message.filters != null && message.hasOwnProperty("filters")) writer.uint32(/* id 7, wireType 2 =*/58).string(message.filters); + if (message.org != null && message.hasOwnProperty("org")) + writer.uint32(/* id 8, wireType 2 =*/66).string(message.org); return writer; }; @@ -25076,6 +25155,9 @@ case 7: message.filters = reader.string(); break; + case 8: + message.org = reader.string(); + break; default: reader.skipType(tag & 7); break; @@ -25126,6 +25208,9 @@ if (message.filters != null && message.hasOwnProperty("filters")) if (!$util.isString(message.filters)) return "filters: string expected"; + if (message.org != null && message.hasOwnProperty("org")) + if (!$util.isString(message.org)) + return "org: string expected"; return null; }; @@ -29440,6 +29525,7 @@ * @property {string|null} [name] ExecutionCreateRequest name * @property {flyteidl.admin.IExecutionSpec|null} [spec] ExecutionCreateRequest spec * @property {flyteidl.core.ILiteralMap|null} [inputs] ExecutionCreateRequest inputs + * @property {string|null} [org] ExecutionCreateRequest org */ /** @@ -29497,6 +29583,14 @@ */ ExecutionCreateRequest.prototype.inputs = null; + /** + * ExecutionCreateRequest org. + * @member {string} org + * @memberof flyteidl.admin.ExecutionCreateRequest + * @instance + */ + ExecutionCreateRequest.prototype.org = ""; + /** * Creates a new ExecutionCreateRequest instance using the specified properties. * @function create @@ -29531,6 +29625,8 @@ $root.flyteidl.admin.ExecutionSpec.encode(message.spec, writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim(); if (message.inputs != null && message.hasOwnProperty("inputs")) $root.flyteidl.core.LiteralMap.encode(message.inputs, writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim(); + if (message.org != null && message.hasOwnProperty("org")) + writer.uint32(/* id 6, wireType 2 =*/50).string(message.org); return writer; }; @@ -29567,6 +29663,9 @@ case 5: message.inputs = $root.flyteidl.core.LiteralMap.decode(reader, reader.uint32()); break; + case 6: + message.org = reader.string(); + break; default: reader.skipType(tag & 7); break; @@ -29605,6 +29704,9 @@ if (error) return "inputs." + error; } + if (message.org != null && message.hasOwnProperty("org")) + if (!$util.isString(message.org)) + return "org: string expected"; return null; }; @@ -34948,6 +35050,7 @@ * @property {number|null} [limit] ActiveLaunchPlanListRequest limit * @property {string|null} [token] ActiveLaunchPlanListRequest token * @property {flyteidl.admin.ISort|null} [sortBy] ActiveLaunchPlanListRequest sortBy + * @property {string|null} [org] ActiveLaunchPlanListRequest org */ /** @@ -35005,6 +35108,14 @@ */ ActiveLaunchPlanListRequest.prototype.sortBy = null; + /** + * ActiveLaunchPlanListRequest org. + * @member {string} org + * @memberof flyteidl.admin.ActiveLaunchPlanListRequest + * @instance + */ + ActiveLaunchPlanListRequest.prototype.org = ""; + /** * Creates a new ActiveLaunchPlanListRequest instance using the specified properties. * @function create @@ -35039,6 +35150,8 @@ writer.uint32(/* id 4, wireType 2 =*/34).string(message.token); if (message.sortBy != null && message.hasOwnProperty("sortBy")) $root.flyteidl.admin.Sort.encode(message.sortBy, writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim(); + if (message.org != null && message.hasOwnProperty("org")) + writer.uint32(/* id 6, wireType 2 =*/50).string(message.org); return writer; }; @@ -35075,6 +35188,9 @@ case 5: message.sortBy = $root.flyteidl.admin.Sort.decode(reader, reader.uint32()); break; + case 6: + message.org = reader.string(); + break; default: reader.skipType(tag & 7); break; @@ -35111,6 +35227,9 @@ if (error) return "sortBy." + error; } + if (message.org != null && message.hasOwnProperty("org")) + if (!$util.isString(message.org)) + return "org: string expected"; return null; }; @@ -37111,6 +37230,7 @@ * @property {string|null} [project] MatchableAttributesConfiguration project * @property {string|null} [workflow] MatchableAttributesConfiguration workflow * @property {string|null} [launchPlan] MatchableAttributesConfiguration launchPlan + * @property {string|null} [org] MatchableAttributesConfiguration org */ /** @@ -37168,6 +37288,14 @@ */ MatchableAttributesConfiguration.prototype.launchPlan = ""; + /** + * MatchableAttributesConfiguration org. + * @member {string} org + * @memberof flyteidl.admin.MatchableAttributesConfiguration + * @instance + */ + MatchableAttributesConfiguration.prototype.org = ""; + /** * Creates a new MatchableAttributesConfiguration instance using the specified properties. * @function create @@ -37202,6 +37330,8 @@ writer.uint32(/* id 4, wireType 2 =*/34).string(message.workflow); if (message.launchPlan != null && message.hasOwnProperty("launchPlan")) writer.uint32(/* id 5, wireType 2 =*/42).string(message.launchPlan); + if (message.org != null && message.hasOwnProperty("org")) + writer.uint32(/* id 6, wireType 2 =*/50).string(message.org); return writer; }; @@ -37238,6 +37368,9 @@ case 5: message.launchPlan = reader.string(); break; + case 6: + message.org = reader.string(); + break; default: reader.skipType(tag & 7); break; @@ -37274,6 +37407,9 @@ if (message.launchPlan != null && message.hasOwnProperty("launchPlan")) if (!$util.isString(message.launchPlan)) return "launchPlan: string expected"; + if (message.org != null && message.hasOwnProperty("org")) + if (!$util.isString(message.org)) + return "org: string expected"; return null; }; @@ -39913,6 +40049,7 @@ * @property {string|null} [description] Project description * @property {flyteidl.admin.ILabels|null} [labels] Project labels * @property {flyteidl.admin.Project.ProjectState|null} [state] Project state + * @property {string|null} [org] Project org */ /** @@ -39979,6 +40116,14 @@ */ Project.prototype.state = 0; + /** + * Project org. + * @member {string} org + * @memberof flyteidl.admin.Project + * @instance + */ + Project.prototype.org = ""; + /** * Creates a new Project instance using the specified properties. * @function create @@ -40016,6 +40161,8 @@ $root.flyteidl.admin.Labels.encode(message.labels, writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim(); if (message.state != null && message.hasOwnProperty("state")) writer.uint32(/* id 6, wireType 0 =*/48).int32(message.state); + if (message.org != null && message.hasOwnProperty("org")) + writer.uint32(/* id 7, wireType 2 =*/58).string(message.org); return writer; }; @@ -40057,6 +40204,9 @@ case 6: message.state = reader.int32(); break; + case 7: + message.org = reader.string(); + break; default: reader.skipType(tag & 7); break; @@ -40108,6 +40258,9 @@ case 2: break; } + if (message.org != null && message.hasOwnProperty("org")) + if (!$util.isString(message.org)) + return "org: string expected"; return null; }; @@ -40736,6 +40889,7 @@ * @interface IProjectAttributes * @property {string|null} [project] ProjectAttributes project * @property {flyteidl.admin.IMatchingAttributes|null} [matchingAttributes] ProjectAttributes matchingAttributes + * @property {string|null} [org] ProjectAttributes org */ /** @@ -40769,6 +40923,14 @@ */ ProjectAttributes.prototype.matchingAttributes = null; + /** + * ProjectAttributes org. + * @member {string} org + * @memberof flyteidl.admin.ProjectAttributes + * @instance + */ + ProjectAttributes.prototype.org = ""; + /** * Creates a new ProjectAttributes instance using the specified properties. * @function create @@ -40797,6 +40959,8 @@ writer.uint32(/* id 1, wireType 2 =*/10).string(message.project); if (message.matchingAttributes != null && message.hasOwnProperty("matchingAttributes")) $root.flyteidl.admin.MatchingAttributes.encode(message.matchingAttributes, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); + if (message.org != null && message.hasOwnProperty("org")) + writer.uint32(/* id 3, wireType 2 =*/26).string(message.org); return writer; }; @@ -40824,6 +40988,9 @@ case 2: message.matchingAttributes = $root.flyteidl.admin.MatchingAttributes.decode(reader, reader.uint32()); break; + case 3: + message.org = reader.string(); + break; default: reader.skipType(tag & 7); break; @@ -40851,6 +41018,9 @@ if (error) return "matchingAttributes." + error; } + if (message.org != null && message.hasOwnProperty("org")) + if (!$util.isString(message.org)) + return "org: string expected"; return null; }; @@ -41070,6 +41240,7 @@ * @interface IProjectAttributesGetRequest * @property {string|null} [project] ProjectAttributesGetRequest project * @property {flyteidl.admin.MatchableResource|null} [resourceType] ProjectAttributesGetRequest resourceType + * @property {string|null} [org] ProjectAttributesGetRequest org */ /** @@ -41103,6 +41274,14 @@ */ ProjectAttributesGetRequest.prototype.resourceType = 0; + /** + * ProjectAttributesGetRequest org. + * @member {string} org + * @memberof flyteidl.admin.ProjectAttributesGetRequest + * @instance + */ + ProjectAttributesGetRequest.prototype.org = ""; + /** * Creates a new ProjectAttributesGetRequest instance using the specified properties. * @function create @@ -41131,6 +41310,8 @@ writer.uint32(/* id 1, wireType 2 =*/10).string(message.project); if (message.resourceType != null && message.hasOwnProperty("resourceType")) writer.uint32(/* id 2, wireType 0 =*/16).int32(message.resourceType); + if (message.org != null && message.hasOwnProperty("org")) + writer.uint32(/* id 3, wireType 2 =*/26).string(message.org); return writer; }; @@ -41158,6 +41339,9 @@ case 2: message.resourceType = reader.int32(); break; + case 3: + message.org = reader.string(); + break; default: reader.skipType(tag & 7); break; @@ -41194,6 +41378,9 @@ case 7: break; } + if (message.org != null && message.hasOwnProperty("org")) + if (!$util.isString(message.org)) + return "org: string expected"; return null; }; @@ -41320,6 +41507,7 @@ * @interface IProjectAttributesDeleteRequest * @property {string|null} [project] ProjectAttributesDeleteRequest project * @property {flyteidl.admin.MatchableResource|null} [resourceType] ProjectAttributesDeleteRequest resourceType + * @property {string|null} [org] ProjectAttributesDeleteRequest org */ /** @@ -41353,6 +41541,14 @@ */ ProjectAttributesDeleteRequest.prototype.resourceType = 0; + /** + * ProjectAttributesDeleteRequest org. + * @member {string} org + * @memberof flyteidl.admin.ProjectAttributesDeleteRequest + * @instance + */ + ProjectAttributesDeleteRequest.prototype.org = ""; + /** * Creates a new ProjectAttributesDeleteRequest instance using the specified properties. * @function create @@ -41381,6 +41577,8 @@ writer.uint32(/* id 1, wireType 2 =*/10).string(message.project); if (message.resourceType != null && message.hasOwnProperty("resourceType")) writer.uint32(/* id 2, wireType 0 =*/16).int32(message.resourceType); + if (message.org != null && message.hasOwnProperty("org")) + writer.uint32(/* id 3, wireType 2 =*/26).string(message.org); return writer; }; @@ -41408,6 +41606,9 @@ case 2: message.resourceType = reader.int32(); break; + case 3: + message.org = reader.string(); + break; default: reader.skipType(tag & 7); break; @@ -41444,6 +41645,9 @@ case 7: break; } + if (message.org != null && message.hasOwnProperty("org")) + if (!$util.isString(message.org)) + return "org: string expected"; return null; }; @@ -41552,6 +41756,7 @@ * @property {string|null} [project] ProjectDomainAttributes project * @property {string|null} [domain] ProjectDomainAttributes domain * @property {flyteidl.admin.IMatchingAttributes|null} [matchingAttributes] ProjectDomainAttributes matchingAttributes + * @property {string|null} [org] ProjectDomainAttributes org */ /** @@ -41593,6 +41798,14 @@ */ ProjectDomainAttributes.prototype.matchingAttributes = null; + /** + * ProjectDomainAttributes org. + * @member {string} org + * @memberof flyteidl.admin.ProjectDomainAttributes + * @instance + */ + ProjectDomainAttributes.prototype.org = ""; + /** * Creates a new ProjectDomainAttributes instance using the specified properties. * @function create @@ -41623,6 +41836,8 @@ writer.uint32(/* id 2, wireType 2 =*/18).string(message.domain); if (message.matchingAttributes != null && message.hasOwnProperty("matchingAttributes")) $root.flyteidl.admin.MatchingAttributes.encode(message.matchingAttributes, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim(); + if (message.org != null && message.hasOwnProperty("org")) + writer.uint32(/* id 4, wireType 2 =*/34).string(message.org); return writer; }; @@ -41653,6 +41868,9 @@ case 3: message.matchingAttributes = $root.flyteidl.admin.MatchingAttributes.decode(reader, reader.uint32()); break; + case 4: + message.org = reader.string(); + break; default: reader.skipType(tag & 7); break; @@ -41683,6 +41901,9 @@ if (error) return "matchingAttributes." + error; } + if (message.org != null && message.hasOwnProperty("org")) + if (!$util.isString(message.org)) + return "org: string expected"; return null; }; @@ -41903,6 +42124,7 @@ * @property {string|null} [project] ProjectDomainAttributesGetRequest project * @property {string|null} [domain] ProjectDomainAttributesGetRequest domain * @property {flyteidl.admin.MatchableResource|null} [resourceType] ProjectDomainAttributesGetRequest resourceType + * @property {string|null} [org] ProjectDomainAttributesGetRequest org */ /** @@ -41944,6 +42166,14 @@ */ ProjectDomainAttributesGetRequest.prototype.resourceType = 0; + /** + * ProjectDomainAttributesGetRequest org. + * @member {string} org + * @memberof flyteidl.admin.ProjectDomainAttributesGetRequest + * @instance + */ + ProjectDomainAttributesGetRequest.prototype.org = ""; + /** * Creates a new ProjectDomainAttributesGetRequest instance using the specified properties. * @function create @@ -41974,6 +42204,8 @@ writer.uint32(/* id 2, wireType 2 =*/18).string(message.domain); if (message.resourceType != null && message.hasOwnProperty("resourceType")) writer.uint32(/* id 3, wireType 0 =*/24).int32(message.resourceType); + if (message.org != null && message.hasOwnProperty("org")) + writer.uint32(/* id 4, wireType 2 =*/34).string(message.org); return writer; }; @@ -42004,6 +42236,9 @@ case 3: message.resourceType = reader.int32(); break; + case 4: + message.org = reader.string(); + break; default: reader.skipType(tag & 7); break; @@ -42043,6 +42278,9 @@ case 7: break; } + if (message.org != null && message.hasOwnProperty("org")) + if (!$util.isString(message.org)) + return "org: string expected"; return null; }; @@ -42170,6 +42408,7 @@ * @property {string|null} [project] ProjectDomainAttributesDeleteRequest project * @property {string|null} [domain] ProjectDomainAttributesDeleteRequest domain * @property {flyteidl.admin.MatchableResource|null} [resourceType] ProjectDomainAttributesDeleteRequest resourceType + * @property {string|null} [org] ProjectDomainAttributesDeleteRequest org */ /** @@ -42211,6 +42450,14 @@ */ ProjectDomainAttributesDeleteRequest.prototype.resourceType = 0; + /** + * ProjectDomainAttributesDeleteRequest org. + * @member {string} org + * @memberof flyteidl.admin.ProjectDomainAttributesDeleteRequest + * @instance + */ + ProjectDomainAttributesDeleteRequest.prototype.org = ""; + /** * Creates a new ProjectDomainAttributesDeleteRequest instance using the specified properties. * @function create @@ -42241,6 +42488,8 @@ writer.uint32(/* id 2, wireType 2 =*/18).string(message.domain); if (message.resourceType != null && message.hasOwnProperty("resourceType")) writer.uint32(/* id 3, wireType 0 =*/24).int32(message.resourceType); + if (message.org != null && message.hasOwnProperty("org")) + writer.uint32(/* id 4, wireType 2 =*/34).string(message.org); return writer; }; @@ -42271,6 +42520,9 @@ case 3: message.resourceType = reader.int32(); break; + case 4: + message.org = reader.string(); + break; default: reader.skipType(tag & 7); break; @@ -42310,6 +42562,9 @@ case 7: break; } + if (message.org != null && message.hasOwnProperty("org")) + if (!$util.isString(message.org)) + return "org: string expected"; return null; }; @@ -46986,6 +47241,7 @@ * @property {string|null} [domain] WorkflowAttributes domain * @property {string|null} [workflow] WorkflowAttributes workflow * @property {flyteidl.admin.IMatchingAttributes|null} [matchingAttributes] WorkflowAttributes matchingAttributes + * @property {string|null} [org] WorkflowAttributes org */ /** @@ -47035,6 +47291,14 @@ */ WorkflowAttributes.prototype.matchingAttributes = null; + /** + * WorkflowAttributes org. + * @member {string} org + * @memberof flyteidl.admin.WorkflowAttributes + * @instance + */ + WorkflowAttributes.prototype.org = ""; + /** * Creates a new WorkflowAttributes instance using the specified properties. * @function create @@ -47067,6 +47331,8 @@ writer.uint32(/* id 3, wireType 2 =*/26).string(message.workflow); if (message.matchingAttributes != null && message.hasOwnProperty("matchingAttributes")) $root.flyteidl.admin.MatchingAttributes.encode(message.matchingAttributes, writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim(); + if (message.org != null && message.hasOwnProperty("org")) + writer.uint32(/* id 5, wireType 2 =*/42).string(message.org); return writer; }; @@ -47100,6 +47366,9 @@ case 4: message.matchingAttributes = $root.flyteidl.admin.MatchingAttributes.decode(reader, reader.uint32()); break; + case 5: + message.org = reader.string(); + break; default: reader.skipType(tag & 7); break; @@ -47133,6 +47402,9 @@ if (error) return "matchingAttributes." + error; } + if (message.org != null && message.hasOwnProperty("org")) + if (!$util.isString(message.org)) + return "org: string expected"; return null; }; @@ -47354,6 +47626,7 @@ * @property {string|null} [domain] WorkflowAttributesGetRequest domain * @property {string|null} [workflow] WorkflowAttributesGetRequest workflow * @property {flyteidl.admin.MatchableResource|null} [resourceType] WorkflowAttributesGetRequest resourceType + * @property {string|null} [org] WorkflowAttributesGetRequest org */ /** @@ -47403,6 +47676,14 @@ */ WorkflowAttributesGetRequest.prototype.resourceType = 0; + /** + * WorkflowAttributesGetRequest org. + * @member {string} org + * @memberof flyteidl.admin.WorkflowAttributesGetRequest + * @instance + */ + WorkflowAttributesGetRequest.prototype.org = ""; + /** * Creates a new WorkflowAttributesGetRequest instance using the specified properties. * @function create @@ -47435,6 +47716,8 @@ writer.uint32(/* id 3, wireType 2 =*/26).string(message.workflow); if (message.resourceType != null && message.hasOwnProperty("resourceType")) writer.uint32(/* id 4, wireType 0 =*/32).int32(message.resourceType); + if (message.org != null && message.hasOwnProperty("org")) + writer.uint32(/* id 5, wireType 2 =*/42).string(message.org); return writer; }; @@ -47468,6 +47751,9 @@ case 4: message.resourceType = reader.int32(); break; + case 5: + message.org = reader.string(); + break; default: reader.skipType(tag & 7); break; @@ -47510,6 +47796,9 @@ case 7: break; } + if (message.org != null && message.hasOwnProperty("org")) + if (!$util.isString(message.org)) + return "org: string expected"; return null; }; @@ -47638,6 +47927,7 @@ * @property {string|null} [domain] WorkflowAttributesDeleteRequest domain * @property {string|null} [workflow] WorkflowAttributesDeleteRequest workflow * @property {flyteidl.admin.MatchableResource|null} [resourceType] WorkflowAttributesDeleteRequest resourceType + * @property {string|null} [org] WorkflowAttributesDeleteRequest org */ /** @@ -47687,6 +47977,14 @@ */ WorkflowAttributesDeleteRequest.prototype.resourceType = 0; + /** + * WorkflowAttributesDeleteRequest org. + * @member {string} org + * @memberof flyteidl.admin.WorkflowAttributesDeleteRequest + * @instance + */ + WorkflowAttributesDeleteRequest.prototype.org = ""; + /** * Creates a new WorkflowAttributesDeleteRequest instance using the specified properties. * @function create @@ -47719,6 +48017,8 @@ writer.uint32(/* id 3, wireType 2 =*/26).string(message.workflow); if (message.resourceType != null && message.hasOwnProperty("resourceType")) writer.uint32(/* id 4, wireType 0 =*/32).int32(message.resourceType); + if (message.org != null && message.hasOwnProperty("org")) + writer.uint32(/* id 5, wireType 2 =*/42).string(message.org); return writer; }; @@ -47752,6 +48052,9 @@ case 4: message.resourceType = reader.int32(); break; + case 5: + message.org = reader.string(); + break; default: reader.skipType(tag & 7); break; @@ -47794,6 +48097,9 @@ case 7: break; } + if (message.org != null && message.hasOwnProperty("org")) + if (!$util.isString(message.org)) + return "org: string expected"; return null; }; diff --git a/flyteidl/gen/pb_python/flyteidl/admin/common_pb2.py b/flyteidl/gen/pb_python/flyteidl/admin/common_pb2.py index 7c99413e09..c12fa17b0f 100644 --- a/flyteidl/gen/pb_python/flyteidl/admin/common_pb2.py +++ b/flyteidl/gen/pb_python/flyteidl/admin/common_pb2.py @@ -17,7 +17,7 @@ from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1b\x66lyteidl/admin/common.proto\x12\x0e\x66lyteidl.admin\x1a\x1d\x66lyteidl/core/execution.proto\x1a\x1e\x66lyteidl/core/identifier.proto\x1a\x1c\x66lyteidl/core/literals.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"]\n\x15NamedEntityIdentifier\x12\x18\n\x07project\x18\x01 \x01(\tR\x07project\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12\x12\n\x04name\x18\x03 \x01(\tR\x04name\"o\n\x13NamedEntityMetadata\x12 \n\x0b\x64\x65scription\x18\x01 \x01(\tR\x0b\x64\x65scription\x12\x36\n\x05state\x18\x02 \x01(\x0e\x32 .flyteidl.admin.NamedEntityStateR\x05state\"\xc7\x01\n\x0bNamedEntity\x12@\n\rresource_type\x18\x01 \x01(\x0e\x32\x1b.flyteidl.core.ResourceTypeR\x0cresourceType\x12\x35\n\x02id\x18\x02 \x01(\x0b\x32%.flyteidl.admin.NamedEntityIdentifierR\x02id\x12?\n\x08metadata\x18\x03 \x01(\x0b\x32#.flyteidl.admin.NamedEntityMetadataR\x08metadata\"\x82\x01\n\x04Sort\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12<\n\tdirection\x18\x02 \x01(\x0e\x32\x1e.flyteidl.admin.Sort.DirectionR\tdirection\"*\n\tDirection\x12\x0e\n\nDESCENDING\x10\x00\x12\r\n\tASCENDING\x10\x01\"\xc9\x01\n NamedEntityIdentifierListRequest\x12\x18\n\x07project\x18\x01 \x01(\tR\x07project\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12\x14\n\x05limit\x18\x03 \x01(\rR\x05limit\x12\x14\n\x05token\x18\x04 \x01(\tR\x05token\x12-\n\x07sort_by\x18\x05 \x01(\x0b\x32\x14.flyteidl.admin.SortR\x06sortBy\x12\x18\n\x07\x66ilters\x18\x06 \x01(\tR\x07\x66ilters\"\x81\x02\n\x16NamedEntityListRequest\x12@\n\rresource_type\x18\x01 \x01(\x0e\x32\x1b.flyteidl.core.ResourceTypeR\x0cresourceType\x12\x18\n\x07project\x18\x02 \x01(\tR\x07project\x12\x16\n\x06\x64omain\x18\x03 \x01(\tR\x06\x64omain\x12\x14\n\x05limit\x18\x04 \x01(\rR\x05limit\x12\x14\n\x05token\x18\x05 \x01(\tR\x05token\x12-\n\x07sort_by\x18\x06 \x01(\x0b\x32\x14.flyteidl.admin.SortR\x06sortBy\x12\x18\n\x07\x66ilters\x18\x07 \x01(\tR\x07\x66ilters\"t\n\x19NamedEntityIdentifierList\x12\x41\n\x08\x65ntities\x18\x01 \x03(\x0b\x32%.flyteidl.admin.NamedEntityIdentifierR\x08\x65ntities\x12\x14\n\x05token\x18\x02 \x01(\tR\x05token\"`\n\x0fNamedEntityList\x12\x37\n\x08\x65ntities\x18\x01 \x03(\x0b\x32\x1b.flyteidl.admin.NamedEntityR\x08\x65ntities\x12\x14\n\x05token\x18\x02 \x01(\tR\x05token\"\x90\x01\n\x15NamedEntityGetRequest\x12@\n\rresource_type\x18\x01 \x01(\x0e\x32\x1b.flyteidl.core.ResourceTypeR\x0cresourceType\x12\x35\n\x02id\x18\x02 \x01(\x0b\x32%.flyteidl.admin.NamedEntityIdentifierR\x02id\"\xd4\x01\n\x18NamedEntityUpdateRequest\x12@\n\rresource_type\x18\x01 \x01(\x0e\x32\x1b.flyteidl.core.ResourceTypeR\x0cresourceType\x12\x35\n\x02id\x18\x02 \x01(\x0b\x32%.flyteidl.admin.NamedEntityIdentifierR\x02id\x12?\n\x08metadata\x18\x03 \x01(\x0b\x32#.flyteidl.admin.NamedEntityMetadataR\x08metadata\"\x1b\n\x19NamedEntityUpdateResponse\"=\n\x10ObjectGetRequest\x12)\n\x02id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.IdentifierR\x02id\"\xc1\x01\n\x13ResourceListRequest\x12\x35\n\x02id\x18\x01 \x01(\x0b\x32%.flyteidl.admin.NamedEntityIdentifierR\x02id\x12\x14\n\x05limit\x18\x02 \x01(\rR\x05limit\x12\x14\n\x05token\x18\x03 \x01(\tR\x05token\x12\x18\n\x07\x66ilters\x18\x04 \x01(\tR\x07\x66ilters\x12-\n\x07sort_by\x18\x05 \x01(\x0b\x32\x14.flyteidl.admin.SortR\x06sortBy\">\n\x11\x45mailNotification\x12)\n\x10recipients_email\x18\x01 \x03(\tR\x0frecipientsEmail\"B\n\x15PagerDutyNotification\x12)\n\x10recipients_email\x18\x01 \x03(\tR\x0frecipientsEmail\">\n\x11SlackNotification\x12)\n\x10recipients_email\x18\x01 \x03(\tR\x0frecipientsEmail\"\x94\x02\n\x0cNotification\x12>\n\x06phases\x18\x01 \x03(\x0e\x32&.flyteidl.core.WorkflowExecution.PhaseR\x06phases\x12\x39\n\x05\x65mail\x18\x02 \x01(\x0b\x32!.flyteidl.admin.EmailNotificationH\x00R\x05\x65mail\x12\x46\n\npager_duty\x18\x03 \x01(\x0b\x32%.flyteidl.admin.PagerDutyNotificationH\x00R\tpagerDuty\x12\x39\n\x05slack\x18\x04 \x01(\x0b\x32!.flyteidl.admin.SlackNotificationH\x00R\x05slackB\x06\n\x04type\"5\n\x07UrlBlob\x12\x10\n\x03url\x18\x01 \x01(\tR\x03url\x12\x14\n\x05\x62ytes\x18\x02 \x01(\x03R\x05\x62ytes:\x02\x18\x01\"\x7f\n\x06Labels\x12:\n\x06values\x18\x01 \x03(\x0b\x32\".flyteidl.admin.Labels.ValuesEntryR\x06values\x1a\x39\n\x0bValuesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\x89\x01\n\x0b\x41nnotations\x12?\n\x06values\x18\x01 \x03(\x0b\x32\'.flyteidl.admin.Annotations.ValuesEntryR\x06values\x1a\x39\n\x0bValuesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\";\n\x04\x45nvs\x12\x33\n\x06values\x18\x01 \x03(\x0b\x32\x1b.flyteidl.core.KeyValuePairR\x06values\"z\n\x08\x41uthRole\x12,\n\x12\x61ssumable_iam_role\x18\x01 \x01(\tR\x10\x61ssumableIamRole\x12<\n\x1akubernetes_service_account\x18\x02 \x01(\tR\x18kubernetesServiceAccount:\x02\x18\x01\"K\n\x13RawOutputDataConfig\x12\x34\n\x16output_location_prefix\x18\x01 \x01(\tR\x14outputLocationPrefix\"Q\n\tFlyteURLs\x12\x16\n\x06inputs\x18\x01 \x01(\tR\x06inputs\x12\x18\n\x07outputs\x18\x02 \x01(\tR\x07outputs\x12\x12\n\x04\x64\x65\x63k\x18\x03 \x01(\tR\x04\x64\x65\x63k*\\\n\x10NamedEntityState\x12\x17\n\x13NAMED_ENTITY_ACTIVE\x10\x00\x12\x19\n\x15NAMED_ENTITY_ARCHIVED\x10\x01\x12\x14\n\x10SYSTEM_GENERATED\x10\x02\x42\xb7\x01\n\x12\x63om.flyteidl.adminB\x0b\x43ommonProtoP\x01Z;github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin\xa2\x02\x03\x46\x41X\xaa\x02\x0e\x46lyteidl.Admin\xca\x02\x0e\x46lyteidl\\Admin\xe2\x02\x1a\x46lyteidl\\Admin\\GPBMetadata\xea\x02\x0f\x46lyteidl::Adminb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1b\x66lyteidl/admin/common.proto\x12\x0e\x66lyteidl.admin\x1a\x1d\x66lyteidl/core/execution.proto\x1a\x1e\x66lyteidl/core/identifier.proto\x1a\x1c\x66lyteidl/core/literals.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"o\n\x15NamedEntityIdentifier\x12\x18\n\x07project\x18\x01 \x01(\tR\x07project\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12\x12\n\x04name\x18\x03 \x01(\tR\x04name\x12\x10\n\x03org\x18\x04 \x01(\tR\x03org\"o\n\x13NamedEntityMetadata\x12 \n\x0b\x64\x65scription\x18\x01 \x01(\tR\x0b\x64\x65scription\x12\x36\n\x05state\x18\x02 \x01(\x0e\x32 .flyteidl.admin.NamedEntityStateR\x05state\"\xc7\x01\n\x0bNamedEntity\x12@\n\rresource_type\x18\x01 \x01(\x0e\x32\x1b.flyteidl.core.ResourceTypeR\x0cresourceType\x12\x35\n\x02id\x18\x02 \x01(\x0b\x32%.flyteidl.admin.NamedEntityIdentifierR\x02id\x12?\n\x08metadata\x18\x03 \x01(\x0b\x32#.flyteidl.admin.NamedEntityMetadataR\x08metadata\"\x82\x01\n\x04Sort\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12<\n\tdirection\x18\x02 \x01(\x0e\x32\x1e.flyteidl.admin.Sort.DirectionR\tdirection\"*\n\tDirection\x12\x0e\n\nDESCENDING\x10\x00\x12\r\n\tASCENDING\x10\x01\"\xdb\x01\n NamedEntityIdentifierListRequest\x12\x18\n\x07project\x18\x01 \x01(\tR\x07project\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12\x14\n\x05limit\x18\x03 \x01(\rR\x05limit\x12\x14\n\x05token\x18\x04 \x01(\tR\x05token\x12-\n\x07sort_by\x18\x05 \x01(\x0b\x32\x14.flyteidl.admin.SortR\x06sortBy\x12\x18\n\x07\x66ilters\x18\x06 \x01(\tR\x07\x66ilters\x12\x10\n\x03org\x18\x07 \x01(\tR\x03org\"\x93\x02\n\x16NamedEntityListRequest\x12@\n\rresource_type\x18\x01 \x01(\x0e\x32\x1b.flyteidl.core.ResourceTypeR\x0cresourceType\x12\x18\n\x07project\x18\x02 \x01(\tR\x07project\x12\x16\n\x06\x64omain\x18\x03 \x01(\tR\x06\x64omain\x12\x14\n\x05limit\x18\x04 \x01(\rR\x05limit\x12\x14\n\x05token\x18\x05 \x01(\tR\x05token\x12-\n\x07sort_by\x18\x06 \x01(\x0b\x32\x14.flyteidl.admin.SortR\x06sortBy\x12\x18\n\x07\x66ilters\x18\x07 \x01(\tR\x07\x66ilters\x12\x10\n\x03org\x18\x08 \x01(\tR\x03org\"t\n\x19NamedEntityIdentifierList\x12\x41\n\x08\x65ntities\x18\x01 \x03(\x0b\x32%.flyteidl.admin.NamedEntityIdentifierR\x08\x65ntities\x12\x14\n\x05token\x18\x02 \x01(\tR\x05token\"`\n\x0fNamedEntityList\x12\x37\n\x08\x65ntities\x18\x01 \x03(\x0b\x32\x1b.flyteidl.admin.NamedEntityR\x08\x65ntities\x12\x14\n\x05token\x18\x02 \x01(\tR\x05token\"\x90\x01\n\x15NamedEntityGetRequest\x12@\n\rresource_type\x18\x01 \x01(\x0e\x32\x1b.flyteidl.core.ResourceTypeR\x0cresourceType\x12\x35\n\x02id\x18\x02 \x01(\x0b\x32%.flyteidl.admin.NamedEntityIdentifierR\x02id\"\xd4\x01\n\x18NamedEntityUpdateRequest\x12@\n\rresource_type\x18\x01 \x01(\x0e\x32\x1b.flyteidl.core.ResourceTypeR\x0cresourceType\x12\x35\n\x02id\x18\x02 \x01(\x0b\x32%.flyteidl.admin.NamedEntityIdentifierR\x02id\x12?\n\x08metadata\x18\x03 \x01(\x0b\x32#.flyteidl.admin.NamedEntityMetadataR\x08metadata\"\x1b\n\x19NamedEntityUpdateResponse\"=\n\x10ObjectGetRequest\x12)\n\x02id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.IdentifierR\x02id\"\xc1\x01\n\x13ResourceListRequest\x12\x35\n\x02id\x18\x01 \x01(\x0b\x32%.flyteidl.admin.NamedEntityIdentifierR\x02id\x12\x14\n\x05limit\x18\x02 \x01(\rR\x05limit\x12\x14\n\x05token\x18\x03 \x01(\tR\x05token\x12\x18\n\x07\x66ilters\x18\x04 \x01(\tR\x07\x66ilters\x12-\n\x07sort_by\x18\x05 \x01(\x0b\x32\x14.flyteidl.admin.SortR\x06sortBy\">\n\x11\x45mailNotification\x12)\n\x10recipients_email\x18\x01 \x03(\tR\x0frecipientsEmail\"B\n\x15PagerDutyNotification\x12)\n\x10recipients_email\x18\x01 \x03(\tR\x0frecipientsEmail\">\n\x11SlackNotification\x12)\n\x10recipients_email\x18\x01 \x03(\tR\x0frecipientsEmail\"\x94\x02\n\x0cNotification\x12>\n\x06phases\x18\x01 \x03(\x0e\x32&.flyteidl.core.WorkflowExecution.PhaseR\x06phases\x12\x39\n\x05\x65mail\x18\x02 \x01(\x0b\x32!.flyteidl.admin.EmailNotificationH\x00R\x05\x65mail\x12\x46\n\npager_duty\x18\x03 \x01(\x0b\x32%.flyteidl.admin.PagerDutyNotificationH\x00R\tpagerDuty\x12\x39\n\x05slack\x18\x04 \x01(\x0b\x32!.flyteidl.admin.SlackNotificationH\x00R\x05slackB\x06\n\x04type\"5\n\x07UrlBlob\x12\x10\n\x03url\x18\x01 \x01(\tR\x03url\x12\x14\n\x05\x62ytes\x18\x02 \x01(\x03R\x05\x62ytes:\x02\x18\x01\"\x7f\n\x06Labels\x12:\n\x06values\x18\x01 \x03(\x0b\x32\".flyteidl.admin.Labels.ValuesEntryR\x06values\x1a\x39\n\x0bValuesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\x89\x01\n\x0b\x41nnotations\x12?\n\x06values\x18\x01 \x03(\x0b\x32\'.flyteidl.admin.Annotations.ValuesEntryR\x06values\x1a\x39\n\x0bValuesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\";\n\x04\x45nvs\x12\x33\n\x06values\x18\x01 \x03(\x0b\x32\x1b.flyteidl.core.KeyValuePairR\x06values\"z\n\x08\x41uthRole\x12,\n\x12\x61ssumable_iam_role\x18\x01 \x01(\tR\x10\x61ssumableIamRole\x12<\n\x1akubernetes_service_account\x18\x02 \x01(\tR\x18kubernetesServiceAccount:\x02\x18\x01\"K\n\x13RawOutputDataConfig\x12\x34\n\x16output_location_prefix\x18\x01 \x01(\tR\x14outputLocationPrefix\"Q\n\tFlyteURLs\x12\x16\n\x06inputs\x18\x01 \x01(\tR\x06inputs\x12\x18\n\x07outputs\x18\x02 \x01(\tR\x07outputs\x12\x12\n\x04\x64\x65\x63k\x18\x03 \x01(\tR\x04\x64\x65\x63k*\\\n\x10NamedEntityState\x12\x17\n\x13NAMED_ENTITY_ACTIVE\x10\x00\x12\x19\n\x15NAMED_ENTITY_ARCHIVED\x10\x01\x12\x14\n\x10SYSTEM_GENERATED\x10\x02\x42\xb7\x01\n\x12\x63om.flyteidl.adminB\x0b\x43ommonProtoP\x01Z;github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin\xa2\x02\x03\x46\x41X\xaa\x02\x0e\x46lyteidl.Admin\xca\x02\x0e\x46lyteidl\\Admin\xe2\x02\x1a\x46lyteidl\\Admin\\GPBMetadata\xea\x02\x0f\x46lyteidl::Adminb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -34,60 +34,60 @@ _ANNOTATIONS_VALUESENTRY._serialized_options = b'8\001' _AUTHROLE._options = None _AUTHROLE._serialized_options = b'\030\001' - _globals['_NAMEDENTITYSTATE']._serialized_start=3190 - _globals['_NAMEDENTITYSTATE']._serialized_end=3282 + _globals['_NAMEDENTITYSTATE']._serialized_start=3244 + _globals['_NAMEDENTITYSTATE']._serialized_end=3336 _globals['_NAMEDENTITYIDENTIFIER']._serialized_start=173 - _globals['_NAMEDENTITYIDENTIFIER']._serialized_end=266 - _globals['_NAMEDENTITYMETADATA']._serialized_start=268 - _globals['_NAMEDENTITYMETADATA']._serialized_end=379 - _globals['_NAMEDENTITY']._serialized_start=382 - _globals['_NAMEDENTITY']._serialized_end=581 - _globals['_SORT']._serialized_start=584 - _globals['_SORT']._serialized_end=714 - _globals['_SORT_DIRECTION']._serialized_start=672 - _globals['_SORT_DIRECTION']._serialized_end=714 - _globals['_NAMEDENTITYIDENTIFIERLISTREQUEST']._serialized_start=717 - _globals['_NAMEDENTITYIDENTIFIERLISTREQUEST']._serialized_end=918 - _globals['_NAMEDENTITYLISTREQUEST']._serialized_start=921 - _globals['_NAMEDENTITYLISTREQUEST']._serialized_end=1178 - _globals['_NAMEDENTITYIDENTIFIERLIST']._serialized_start=1180 - _globals['_NAMEDENTITYIDENTIFIERLIST']._serialized_end=1296 - _globals['_NAMEDENTITYLIST']._serialized_start=1298 - _globals['_NAMEDENTITYLIST']._serialized_end=1394 - _globals['_NAMEDENTITYGETREQUEST']._serialized_start=1397 - _globals['_NAMEDENTITYGETREQUEST']._serialized_end=1541 - _globals['_NAMEDENTITYUPDATEREQUEST']._serialized_start=1544 - _globals['_NAMEDENTITYUPDATEREQUEST']._serialized_end=1756 - _globals['_NAMEDENTITYUPDATERESPONSE']._serialized_start=1758 - _globals['_NAMEDENTITYUPDATERESPONSE']._serialized_end=1785 - _globals['_OBJECTGETREQUEST']._serialized_start=1787 - _globals['_OBJECTGETREQUEST']._serialized_end=1848 - _globals['_RESOURCELISTREQUEST']._serialized_start=1851 - _globals['_RESOURCELISTREQUEST']._serialized_end=2044 - _globals['_EMAILNOTIFICATION']._serialized_start=2046 - _globals['_EMAILNOTIFICATION']._serialized_end=2108 - _globals['_PAGERDUTYNOTIFICATION']._serialized_start=2110 - _globals['_PAGERDUTYNOTIFICATION']._serialized_end=2176 - _globals['_SLACKNOTIFICATION']._serialized_start=2178 - _globals['_SLACKNOTIFICATION']._serialized_end=2240 - _globals['_NOTIFICATION']._serialized_start=2243 - _globals['_NOTIFICATION']._serialized_end=2519 - _globals['_URLBLOB']._serialized_start=2521 - _globals['_URLBLOB']._serialized_end=2574 - _globals['_LABELS']._serialized_start=2576 - _globals['_LABELS']._serialized_end=2703 - _globals['_LABELS_VALUESENTRY']._serialized_start=2646 - _globals['_LABELS_VALUESENTRY']._serialized_end=2703 - _globals['_ANNOTATIONS']._serialized_start=2706 - _globals['_ANNOTATIONS']._serialized_end=2843 - _globals['_ANNOTATIONS_VALUESENTRY']._serialized_start=2646 - _globals['_ANNOTATIONS_VALUESENTRY']._serialized_end=2703 - _globals['_ENVS']._serialized_start=2845 - _globals['_ENVS']._serialized_end=2904 - _globals['_AUTHROLE']._serialized_start=2906 - _globals['_AUTHROLE']._serialized_end=3028 - _globals['_RAWOUTPUTDATACONFIG']._serialized_start=3030 - _globals['_RAWOUTPUTDATACONFIG']._serialized_end=3105 - _globals['_FLYTEURLS']._serialized_start=3107 - _globals['_FLYTEURLS']._serialized_end=3188 + _globals['_NAMEDENTITYIDENTIFIER']._serialized_end=284 + _globals['_NAMEDENTITYMETADATA']._serialized_start=286 + _globals['_NAMEDENTITYMETADATA']._serialized_end=397 + _globals['_NAMEDENTITY']._serialized_start=400 + _globals['_NAMEDENTITY']._serialized_end=599 + _globals['_SORT']._serialized_start=602 + _globals['_SORT']._serialized_end=732 + _globals['_SORT_DIRECTION']._serialized_start=690 + _globals['_SORT_DIRECTION']._serialized_end=732 + _globals['_NAMEDENTITYIDENTIFIERLISTREQUEST']._serialized_start=735 + _globals['_NAMEDENTITYIDENTIFIERLISTREQUEST']._serialized_end=954 + _globals['_NAMEDENTITYLISTREQUEST']._serialized_start=957 + _globals['_NAMEDENTITYLISTREQUEST']._serialized_end=1232 + _globals['_NAMEDENTITYIDENTIFIERLIST']._serialized_start=1234 + _globals['_NAMEDENTITYIDENTIFIERLIST']._serialized_end=1350 + _globals['_NAMEDENTITYLIST']._serialized_start=1352 + _globals['_NAMEDENTITYLIST']._serialized_end=1448 + _globals['_NAMEDENTITYGETREQUEST']._serialized_start=1451 + _globals['_NAMEDENTITYGETREQUEST']._serialized_end=1595 + _globals['_NAMEDENTITYUPDATEREQUEST']._serialized_start=1598 + _globals['_NAMEDENTITYUPDATEREQUEST']._serialized_end=1810 + _globals['_NAMEDENTITYUPDATERESPONSE']._serialized_start=1812 + _globals['_NAMEDENTITYUPDATERESPONSE']._serialized_end=1839 + _globals['_OBJECTGETREQUEST']._serialized_start=1841 + _globals['_OBJECTGETREQUEST']._serialized_end=1902 + _globals['_RESOURCELISTREQUEST']._serialized_start=1905 + _globals['_RESOURCELISTREQUEST']._serialized_end=2098 + _globals['_EMAILNOTIFICATION']._serialized_start=2100 + _globals['_EMAILNOTIFICATION']._serialized_end=2162 + _globals['_PAGERDUTYNOTIFICATION']._serialized_start=2164 + _globals['_PAGERDUTYNOTIFICATION']._serialized_end=2230 + _globals['_SLACKNOTIFICATION']._serialized_start=2232 + _globals['_SLACKNOTIFICATION']._serialized_end=2294 + _globals['_NOTIFICATION']._serialized_start=2297 + _globals['_NOTIFICATION']._serialized_end=2573 + _globals['_URLBLOB']._serialized_start=2575 + _globals['_URLBLOB']._serialized_end=2628 + _globals['_LABELS']._serialized_start=2630 + _globals['_LABELS']._serialized_end=2757 + _globals['_LABELS_VALUESENTRY']._serialized_start=2700 + _globals['_LABELS_VALUESENTRY']._serialized_end=2757 + _globals['_ANNOTATIONS']._serialized_start=2760 + _globals['_ANNOTATIONS']._serialized_end=2897 + _globals['_ANNOTATIONS_VALUESENTRY']._serialized_start=2700 + _globals['_ANNOTATIONS_VALUESENTRY']._serialized_end=2757 + _globals['_ENVS']._serialized_start=2899 + _globals['_ENVS']._serialized_end=2958 + _globals['_AUTHROLE']._serialized_start=2960 + _globals['_AUTHROLE']._serialized_end=3082 + _globals['_RAWOUTPUTDATACONFIG']._serialized_start=3084 + _globals['_RAWOUTPUTDATACONFIG']._serialized_end=3159 + _globals['_FLYTEURLS']._serialized_start=3161 + _globals['_FLYTEURLS']._serialized_end=3242 # @@protoc_insertion_point(module_scope) diff --git a/flyteidl/gen/pb_python/flyteidl/admin/common_pb2.pyi b/flyteidl/gen/pb_python/flyteidl/admin/common_pb2.pyi index 9c81d7cf45..420818fb95 100644 --- a/flyteidl/gen/pb_python/flyteidl/admin/common_pb2.pyi +++ b/flyteidl/gen/pb_python/flyteidl/admin/common_pb2.pyi @@ -20,14 +20,16 @@ NAMED_ENTITY_ARCHIVED: NamedEntityState SYSTEM_GENERATED: NamedEntityState class NamedEntityIdentifier(_message.Message): - __slots__ = ["project", "domain", "name"] + __slots__ = ["project", "domain", "name", "org"] PROJECT_FIELD_NUMBER: _ClassVar[int] DOMAIN_FIELD_NUMBER: _ClassVar[int] NAME_FIELD_NUMBER: _ClassVar[int] + ORG_FIELD_NUMBER: _ClassVar[int] project: str domain: str name: str - def __init__(self, project: _Optional[str] = ..., domain: _Optional[str] = ..., name: _Optional[str] = ...) -> None: ... + org: str + def __init__(self, project: _Optional[str] = ..., domain: _Optional[str] = ..., name: _Optional[str] = ..., org: _Optional[str] = ...) -> None: ... class NamedEntityMetadata(_message.Message): __slots__ = ["description", "state"] @@ -62,23 +64,25 @@ class Sort(_message.Message): def __init__(self, key: _Optional[str] = ..., direction: _Optional[_Union[Sort.Direction, str]] = ...) -> None: ... class NamedEntityIdentifierListRequest(_message.Message): - __slots__ = ["project", "domain", "limit", "token", "sort_by", "filters"] + __slots__ = ["project", "domain", "limit", "token", "sort_by", "filters", "org"] PROJECT_FIELD_NUMBER: _ClassVar[int] DOMAIN_FIELD_NUMBER: _ClassVar[int] LIMIT_FIELD_NUMBER: _ClassVar[int] TOKEN_FIELD_NUMBER: _ClassVar[int] SORT_BY_FIELD_NUMBER: _ClassVar[int] FILTERS_FIELD_NUMBER: _ClassVar[int] + ORG_FIELD_NUMBER: _ClassVar[int] project: str domain: str limit: int token: str sort_by: Sort filters: str - def __init__(self, project: _Optional[str] = ..., domain: _Optional[str] = ..., limit: _Optional[int] = ..., token: _Optional[str] = ..., sort_by: _Optional[_Union[Sort, _Mapping]] = ..., filters: _Optional[str] = ...) -> None: ... + org: str + def __init__(self, project: _Optional[str] = ..., domain: _Optional[str] = ..., limit: _Optional[int] = ..., token: _Optional[str] = ..., sort_by: _Optional[_Union[Sort, _Mapping]] = ..., filters: _Optional[str] = ..., org: _Optional[str] = ...) -> None: ... class NamedEntityListRequest(_message.Message): - __slots__ = ["resource_type", "project", "domain", "limit", "token", "sort_by", "filters"] + __slots__ = ["resource_type", "project", "domain", "limit", "token", "sort_by", "filters", "org"] RESOURCE_TYPE_FIELD_NUMBER: _ClassVar[int] PROJECT_FIELD_NUMBER: _ClassVar[int] DOMAIN_FIELD_NUMBER: _ClassVar[int] @@ -86,6 +90,7 @@ class NamedEntityListRequest(_message.Message): TOKEN_FIELD_NUMBER: _ClassVar[int] SORT_BY_FIELD_NUMBER: _ClassVar[int] FILTERS_FIELD_NUMBER: _ClassVar[int] + ORG_FIELD_NUMBER: _ClassVar[int] resource_type: _identifier_pb2.ResourceType project: str domain: str @@ -93,7 +98,8 @@ class NamedEntityListRequest(_message.Message): token: str sort_by: Sort filters: str - def __init__(self, resource_type: _Optional[_Union[_identifier_pb2.ResourceType, str]] = ..., project: _Optional[str] = ..., domain: _Optional[str] = ..., limit: _Optional[int] = ..., token: _Optional[str] = ..., sort_by: _Optional[_Union[Sort, _Mapping]] = ..., filters: _Optional[str] = ...) -> None: ... + org: str + def __init__(self, resource_type: _Optional[_Union[_identifier_pb2.ResourceType, str]] = ..., project: _Optional[str] = ..., domain: _Optional[str] = ..., limit: _Optional[int] = ..., token: _Optional[str] = ..., sort_by: _Optional[_Union[Sort, _Mapping]] = ..., filters: _Optional[str] = ..., org: _Optional[str] = ...) -> None: ... class NamedEntityIdentifierList(_message.Message): __slots__ = ["entities", "token"] diff --git a/flyteidl/gen/pb_python/flyteidl/admin/execution_pb2.py b/flyteidl/gen/pb_python/flyteidl/admin/execution_pb2.py index f71cdab8a2..918db78e56 100644 --- a/flyteidl/gen/pb_python/flyteidl/admin/execution_pb2.py +++ b/flyteidl/gen/pb_python/flyteidl/admin/execution_pb2.py @@ -24,7 +24,7 @@ from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1e\x66lyteidl/admin/execution.proto\x12\x0e\x66lyteidl.admin\x1a\'flyteidl/admin/cluster_assignment.proto\x1a\x1b\x66lyteidl/admin/common.proto\x1a\x1c\x66lyteidl/core/literals.proto\x1a\x1d\x66lyteidl/core/execution.proto\x1a\x1f\x66lyteidl/core/artifact_id.proto\x1a\x1e\x66lyteidl/core/identifier.proto\x1a\x1b\x66lyteidl/core/metrics.proto\x1a\x1c\x66lyteidl/core/security.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\"\xc4\x01\n\x16\x45xecutionCreateRequest\x12\x18\n\x07project\x18\x01 \x01(\tR\x07project\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12\x12\n\x04name\x18\x03 \x01(\tR\x04name\x12\x31\n\x04spec\x18\x04 \x01(\x0b\x32\x1d.flyteidl.admin.ExecutionSpecR\x04spec\x12\x31\n\x06inputs\x18\x05 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapR\x06inputs\"\x99\x01\n\x18\x45xecutionRelaunchRequest\x12:\n\x02id\x18\x01 \x01(\x0b\x32*.flyteidl.core.WorkflowExecutionIdentifierR\x02id\x12\x12\n\x04name\x18\x03 \x01(\tR\x04name\x12\'\n\x0foverwrite_cache\x18\x04 \x01(\x08R\x0eoverwriteCacheJ\x04\x08\x02\x10\x03\"\xa8\x01\n\x17\x45xecutionRecoverRequest\x12:\n\x02id\x18\x01 \x01(\x0b\x32*.flyteidl.core.WorkflowExecutionIdentifierR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12=\n\x08metadata\x18\x03 \x01(\x0b\x32!.flyteidl.admin.ExecutionMetadataR\x08metadata\"U\n\x17\x45xecutionCreateResponse\x12:\n\x02id\x18\x01 \x01(\x0b\x32*.flyteidl.core.WorkflowExecutionIdentifierR\x02id\"Y\n\x1bWorkflowExecutionGetRequest\x12:\n\x02id\x18\x01 \x01(\x0b\x32*.flyteidl.core.WorkflowExecutionIdentifierR\x02id\"\xb6\x01\n\tExecution\x12:\n\x02id\x18\x01 \x01(\x0b\x32*.flyteidl.core.WorkflowExecutionIdentifierR\x02id\x12\x31\n\x04spec\x18\x02 \x01(\x0b\x32\x1d.flyteidl.admin.ExecutionSpecR\x04spec\x12:\n\x07\x63losure\x18\x03 \x01(\x0b\x32 .flyteidl.admin.ExecutionClosureR\x07\x63losure\"`\n\rExecutionList\x12\x39\n\nexecutions\x18\x01 \x03(\x0b\x32\x19.flyteidl.admin.ExecutionR\nexecutions\x12\x14\n\x05token\x18\x02 \x01(\tR\x05token\"e\n\x0eLiteralMapBlob\x12\x37\n\x06values\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapB\x02\x18\x01H\x00R\x06values\x12\x12\n\x03uri\x18\x02 \x01(\tH\x00R\x03uriB\x06\n\x04\x64\x61ta\"C\n\rAbortMetadata\x12\x14\n\x05\x63\x61use\x18\x01 \x01(\tR\x05\x63\x61use\x12\x1c\n\tprincipal\x18\x02 \x01(\tR\tprincipal\"\x98\x07\n\x10\x45xecutionClosure\x12>\n\x07outputs\x18\x01 \x01(\x0b\x32\x1e.flyteidl.admin.LiteralMapBlobB\x02\x18\x01H\x00R\x07outputs\x12\x35\n\x05\x65rror\x18\x02 \x01(\x0b\x32\x1d.flyteidl.core.ExecutionErrorH\x00R\x05\x65rror\x12%\n\x0b\x61\x62ort_cause\x18\n \x01(\tB\x02\x18\x01H\x00R\nabortCause\x12\x46\n\x0e\x61\x62ort_metadata\x18\x0c \x01(\x0b\x32\x1d.flyteidl.admin.AbortMetadataH\x00R\rabortMetadata\x12@\n\x0boutput_data\x18\r \x01(\x0b\x32\x19.flyteidl.core.LiteralMapB\x02\x18\x01H\x00R\noutputData\x12\x46\n\x0f\x63omputed_inputs\x18\x03 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapB\x02\x18\x01R\x0e\x63omputedInputs\x12<\n\x05phase\x18\x04 \x01(\x0e\x32&.flyteidl.core.WorkflowExecution.PhaseR\x05phase\x12\x39\n\nstarted_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tstartedAt\x12\x35\n\x08\x64uration\x18\x06 \x01(\x0b\x32\x19.google.protobuf.DurationR\x08\x64uration\x12\x39\n\ncreated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12\x39\n\nupdated_at\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tupdatedAt\x12\x42\n\rnotifications\x18\t \x03(\x0b\x32\x1c.flyteidl.admin.NotificationR\rnotifications\x12:\n\x0bworkflow_id\x18\x0b \x01(\x0b\x32\x19.flyteidl.core.IdentifierR\nworkflowId\x12]\n\x14state_change_details\x18\x0e \x01(\x0b\x32+.flyteidl.admin.ExecutionStateChangeDetailsR\x12stateChangeDetailsB\x0f\n\routput_result\"[\n\x0eSystemMetadata\x12+\n\x11\x65xecution_cluster\x18\x01 \x01(\tR\x10\x65xecutionCluster\x12\x1c\n\tnamespace\x18\x02 \x01(\tR\tnamespace\"\xf8\x04\n\x11\x45xecutionMetadata\x12\x43\n\x04mode\x18\x01 \x01(\x0e\x32/.flyteidl.admin.ExecutionMetadata.ExecutionModeR\x04mode\x12\x1c\n\tprincipal\x18\x02 \x01(\tR\tprincipal\x12\x18\n\x07nesting\x18\x03 \x01(\rR\x07nesting\x12=\n\x0cscheduled_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x0bscheduledAt\x12Z\n\x15parent_node_execution\x18\x05 \x01(\x0b\x32&.flyteidl.core.NodeExecutionIdentifierR\x13parentNodeExecution\x12[\n\x13reference_execution\x18\x10 \x01(\x0b\x32*.flyteidl.core.WorkflowExecutionIdentifierR\x12referenceExecution\x12G\n\x0fsystem_metadata\x18\x11 \x01(\x0b\x32\x1e.flyteidl.admin.SystemMetadataR\x0esystemMetadata\x12<\n\x0c\x61rtifact_ids\x18\x12 \x03(\x0b\x32\x19.flyteidl.core.ArtifactIDR\x0b\x61rtifactIds\"g\n\rExecutionMode\x12\n\n\x06MANUAL\x10\x00\x12\r\n\tSCHEDULED\x10\x01\x12\n\n\x06SYSTEM\x10\x02\x12\x0c\n\x08RELAUNCH\x10\x03\x12\x12\n\x0e\x43HILD_WORKFLOW\x10\x04\x12\r\n\tRECOVERED\x10\x05\"V\n\x10NotificationList\x12\x42\n\rnotifications\x18\x01 \x03(\x0b\x32\x1c.flyteidl.admin.NotificationR\rnotifications\"\x90\x08\n\rExecutionSpec\x12:\n\x0blaunch_plan\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.IdentifierR\nlaunchPlan\x12\x35\n\x06inputs\x18\x02 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapB\x02\x18\x01R\x06inputs\x12=\n\x08metadata\x18\x03 \x01(\x0b\x32!.flyteidl.admin.ExecutionMetadataR\x08metadata\x12H\n\rnotifications\x18\x05 \x01(\x0b\x32 .flyteidl.admin.NotificationListH\x00R\rnotifications\x12!\n\x0b\x64isable_all\x18\x06 \x01(\x08H\x00R\ndisableAll\x12.\n\x06labels\x18\x07 \x01(\x0b\x32\x16.flyteidl.admin.LabelsR\x06labels\x12=\n\x0b\x61nnotations\x18\x08 \x01(\x0b\x32\x1b.flyteidl.admin.AnnotationsR\x0b\x61nnotations\x12I\n\x10security_context\x18\n \x01(\x0b\x32\x1e.flyteidl.core.SecurityContextR\x0fsecurityContext\x12\x39\n\tauth_role\x18\x10 \x01(\x0b\x32\x18.flyteidl.admin.AuthRoleB\x02\x18\x01R\x08\x61uthRole\x12M\n\x12quality_of_service\x18\x11 \x01(\x0b\x32\x1f.flyteidl.core.QualityOfServiceR\x10qualityOfService\x12\'\n\x0fmax_parallelism\x18\x12 \x01(\x05R\x0emaxParallelism\x12X\n\x16raw_output_data_config\x18\x13 \x01(\x0b\x32#.flyteidl.admin.RawOutputDataConfigR\x13rawOutputDataConfig\x12P\n\x12\x63luster_assignment\x18\x14 \x01(\x0b\x32!.flyteidl.admin.ClusterAssignmentR\x11\x63lusterAssignment\x12@\n\rinterruptible\x18\x15 \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\rinterruptible\x12\'\n\x0foverwrite_cache\x18\x16 \x01(\x08R\x0eoverwriteCache\x12(\n\x04\x65nvs\x18\x17 \x01(\x0b\x32\x14.flyteidl.admin.EnvsR\x04\x65nvs\x12\x12\n\x04tags\x18\x18 \x03(\tR\x04tagsB\x18\n\x16notification_overridesJ\x04\x08\x04\x10\x05\"m\n\x19\x45xecutionTerminateRequest\x12:\n\x02id\x18\x01 \x01(\x0b\x32*.flyteidl.core.WorkflowExecutionIdentifierR\x02id\x12\x14\n\x05\x63\x61use\x18\x02 \x01(\tR\x05\x63\x61use\"\x1c\n\x1a\x45xecutionTerminateResponse\"]\n\x1fWorkflowExecutionGetDataRequest\x12:\n\x02id\x18\x01 \x01(\x0b\x32*.flyteidl.core.WorkflowExecutionIdentifierR\x02id\"\x88\x02\n WorkflowExecutionGetDataResponse\x12\x35\n\x07outputs\x18\x01 \x01(\x0b\x32\x17.flyteidl.admin.UrlBlobB\x02\x18\x01R\x07outputs\x12\x33\n\x06inputs\x18\x02 \x01(\x0b\x32\x17.flyteidl.admin.UrlBlobB\x02\x18\x01R\x06inputs\x12:\n\x0b\x66ull_inputs\x18\x03 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapR\nfullInputs\x12<\n\x0c\x66ull_outputs\x18\x04 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapR\x0b\x66ullOutputs\"\x8a\x01\n\x16\x45xecutionUpdateRequest\x12:\n\x02id\x18\x01 \x01(\x0b\x32*.flyteidl.core.WorkflowExecutionIdentifierR\x02id\x12\x34\n\x05state\x18\x02 \x01(\x0e\x32\x1e.flyteidl.admin.ExecutionStateR\x05state\"\xae\x01\n\x1b\x45xecutionStateChangeDetails\x12\x34\n\x05state\x18\x01 \x01(\x0e\x32\x1e.flyteidl.admin.ExecutionStateR\x05state\x12;\n\x0boccurred_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\noccurredAt\x12\x1c\n\tprincipal\x18\x03 \x01(\tR\tprincipal\"\x19\n\x17\x45xecutionUpdateResponse\"v\n\"WorkflowExecutionGetMetricsRequest\x12:\n\x02id\x18\x01 \x01(\x0b\x32*.flyteidl.core.WorkflowExecutionIdentifierR\x02id\x12\x14\n\x05\x64\x65pth\x18\x02 \x01(\x05R\x05\x64\x65pth\"N\n#WorkflowExecutionGetMetricsResponse\x12\'\n\x04span\x18\x01 \x01(\x0b\x32\x13.flyteidl.core.SpanR\x04span*>\n\x0e\x45xecutionState\x12\x14\n\x10\x45XECUTION_ACTIVE\x10\x00\x12\x16\n\x12\x45XECUTION_ARCHIVED\x10\x01\x42\xba\x01\n\x12\x63om.flyteidl.adminB\x0e\x45xecutionProtoP\x01Z;github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin\xa2\x02\x03\x46\x41X\xaa\x02\x0e\x46lyteidl.Admin\xca\x02\x0e\x46lyteidl\\Admin\xe2\x02\x1a\x46lyteidl\\Admin\\GPBMetadata\xea\x02\x0f\x46lyteidl::Adminb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1e\x66lyteidl/admin/execution.proto\x12\x0e\x66lyteidl.admin\x1a\'flyteidl/admin/cluster_assignment.proto\x1a\x1b\x66lyteidl/admin/common.proto\x1a\x1c\x66lyteidl/core/literals.proto\x1a\x1d\x66lyteidl/core/execution.proto\x1a\x1f\x66lyteidl/core/artifact_id.proto\x1a\x1e\x66lyteidl/core/identifier.proto\x1a\x1b\x66lyteidl/core/metrics.proto\x1a\x1c\x66lyteidl/core/security.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\"\xd6\x01\n\x16\x45xecutionCreateRequest\x12\x18\n\x07project\x18\x01 \x01(\tR\x07project\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12\x12\n\x04name\x18\x03 \x01(\tR\x04name\x12\x31\n\x04spec\x18\x04 \x01(\x0b\x32\x1d.flyteidl.admin.ExecutionSpecR\x04spec\x12\x31\n\x06inputs\x18\x05 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapR\x06inputs\x12\x10\n\x03org\x18\x06 \x01(\tR\x03org\"\x99\x01\n\x18\x45xecutionRelaunchRequest\x12:\n\x02id\x18\x01 \x01(\x0b\x32*.flyteidl.core.WorkflowExecutionIdentifierR\x02id\x12\x12\n\x04name\x18\x03 \x01(\tR\x04name\x12\'\n\x0foverwrite_cache\x18\x04 \x01(\x08R\x0eoverwriteCacheJ\x04\x08\x02\x10\x03\"\xa8\x01\n\x17\x45xecutionRecoverRequest\x12:\n\x02id\x18\x01 \x01(\x0b\x32*.flyteidl.core.WorkflowExecutionIdentifierR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12=\n\x08metadata\x18\x03 \x01(\x0b\x32!.flyteidl.admin.ExecutionMetadataR\x08metadata\"U\n\x17\x45xecutionCreateResponse\x12:\n\x02id\x18\x01 \x01(\x0b\x32*.flyteidl.core.WorkflowExecutionIdentifierR\x02id\"Y\n\x1bWorkflowExecutionGetRequest\x12:\n\x02id\x18\x01 \x01(\x0b\x32*.flyteidl.core.WorkflowExecutionIdentifierR\x02id\"\xb6\x01\n\tExecution\x12:\n\x02id\x18\x01 \x01(\x0b\x32*.flyteidl.core.WorkflowExecutionIdentifierR\x02id\x12\x31\n\x04spec\x18\x02 \x01(\x0b\x32\x1d.flyteidl.admin.ExecutionSpecR\x04spec\x12:\n\x07\x63losure\x18\x03 \x01(\x0b\x32 .flyteidl.admin.ExecutionClosureR\x07\x63losure\"`\n\rExecutionList\x12\x39\n\nexecutions\x18\x01 \x03(\x0b\x32\x19.flyteidl.admin.ExecutionR\nexecutions\x12\x14\n\x05token\x18\x02 \x01(\tR\x05token\"e\n\x0eLiteralMapBlob\x12\x37\n\x06values\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapB\x02\x18\x01H\x00R\x06values\x12\x12\n\x03uri\x18\x02 \x01(\tH\x00R\x03uriB\x06\n\x04\x64\x61ta\"C\n\rAbortMetadata\x12\x14\n\x05\x63\x61use\x18\x01 \x01(\tR\x05\x63\x61use\x12\x1c\n\tprincipal\x18\x02 \x01(\tR\tprincipal\"\x98\x07\n\x10\x45xecutionClosure\x12>\n\x07outputs\x18\x01 \x01(\x0b\x32\x1e.flyteidl.admin.LiteralMapBlobB\x02\x18\x01H\x00R\x07outputs\x12\x35\n\x05\x65rror\x18\x02 \x01(\x0b\x32\x1d.flyteidl.core.ExecutionErrorH\x00R\x05\x65rror\x12%\n\x0b\x61\x62ort_cause\x18\n \x01(\tB\x02\x18\x01H\x00R\nabortCause\x12\x46\n\x0e\x61\x62ort_metadata\x18\x0c \x01(\x0b\x32\x1d.flyteidl.admin.AbortMetadataH\x00R\rabortMetadata\x12@\n\x0boutput_data\x18\r \x01(\x0b\x32\x19.flyteidl.core.LiteralMapB\x02\x18\x01H\x00R\noutputData\x12\x46\n\x0f\x63omputed_inputs\x18\x03 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapB\x02\x18\x01R\x0e\x63omputedInputs\x12<\n\x05phase\x18\x04 \x01(\x0e\x32&.flyteidl.core.WorkflowExecution.PhaseR\x05phase\x12\x39\n\nstarted_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tstartedAt\x12\x35\n\x08\x64uration\x18\x06 \x01(\x0b\x32\x19.google.protobuf.DurationR\x08\x64uration\x12\x39\n\ncreated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12\x39\n\nupdated_at\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tupdatedAt\x12\x42\n\rnotifications\x18\t \x03(\x0b\x32\x1c.flyteidl.admin.NotificationR\rnotifications\x12:\n\x0bworkflow_id\x18\x0b \x01(\x0b\x32\x19.flyteidl.core.IdentifierR\nworkflowId\x12]\n\x14state_change_details\x18\x0e \x01(\x0b\x32+.flyteidl.admin.ExecutionStateChangeDetailsR\x12stateChangeDetailsB\x0f\n\routput_result\"[\n\x0eSystemMetadata\x12+\n\x11\x65xecution_cluster\x18\x01 \x01(\tR\x10\x65xecutionCluster\x12\x1c\n\tnamespace\x18\x02 \x01(\tR\tnamespace\"\xf8\x04\n\x11\x45xecutionMetadata\x12\x43\n\x04mode\x18\x01 \x01(\x0e\x32/.flyteidl.admin.ExecutionMetadata.ExecutionModeR\x04mode\x12\x1c\n\tprincipal\x18\x02 \x01(\tR\tprincipal\x12\x18\n\x07nesting\x18\x03 \x01(\rR\x07nesting\x12=\n\x0cscheduled_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x0bscheduledAt\x12Z\n\x15parent_node_execution\x18\x05 \x01(\x0b\x32&.flyteidl.core.NodeExecutionIdentifierR\x13parentNodeExecution\x12[\n\x13reference_execution\x18\x10 \x01(\x0b\x32*.flyteidl.core.WorkflowExecutionIdentifierR\x12referenceExecution\x12G\n\x0fsystem_metadata\x18\x11 \x01(\x0b\x32\x1e.flyteidl.admin.SystemMetadataR\x0esystemMetadata\x12<\n\x0c\x61rtifact_ids\x18\x12 \x03(\x0b\x32\x19.flyteidl.core.ArtifactIDR\x0b\x61rtifactIds\"g\n\rExecutionMode\x12\n\n\x06MANUAL\x10\x00\x12\r\n\tSCHEDULED\x10\x01\x12\n\n\x06SYSTEM\x10\x02\x12\x0c\n\x08RELAUNCH\x10\x03\x12\x12\n\x0e\x43HILD_WORKFLOW\x10\x04\x12\r\n\tRECOVERED\x10\x05\"V\n\x10NotificationList\x12\x42\n\rnotifications\x18\x01 \x03(\x0b\x32\x1c.flyteidl.admin.NotificationR\rnotifications\"\x90\x08\n\rExecutionSpec\x12:\n\x0blaunch_plan\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.IdentifierR\nlaunchPlan\x12\x35\n\x06inputs\x18\x02 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapB\x02\x18\x01R\x06inputs\x12=\n\x08metadata\x18\x03 \x01(\x0b\x32!.flyteidl.admin.ExecutionMetadataR\x08metadata\x12H\n\rnotifications\x18\x05 \x01(\x0b\x32 .flyteidl.admin.NotificationListH\x00R\rnotifications\x12!\n\x0b\x64isable_all\x18\x06 \x01(\x08H\x00R\ndisableAll\x12.\n\x06labels\x18\x07 \x01(\x0b\x32\x16.flyteidl.admin.LabelsR\x06labels\x12=\n\x0b\x61nnotations\x18\x08 \x01(\x0b\x32\x1b.flyteidl.admin.AnnotationsR\x0b\x61nnotations\x12I\n\x10security_context\x18\n \x01(\x0b\x32\x1e.flyteidl.core.SecurityContextR\x0fsecurityContext\x12\x39\n\tauth_role\x18\x10 \x01(\x0b\x32\x18.flyteidl.admin.AuthRoleB\x02\x18\x01R\x08\x61uthRole\x12M\n\x12quality_of_service\x18\x11 \x01(\x0b\x32\x1f.flyteidl.core.QualityOfServiceR\x10qualityOfService\x12\'\n\x0fmax_parallelism\x18\x12 \x01(\x05R\x0emaxParallelism\x12X\n\x16raw_output_data_config\x18\x13 \x01(\x0b\x32#.flyteidl.admin.RawOutputDataConfigR\x13rawOutputDataConfig\x12P\n\x12\x63luster_assignment\x18\x14 \x01(\x0b\x32!.flyteidl.admin.ClusterAssignmentR\x11\x63lusterAssignment\x12@\n\rinterruptible\x18\x15 \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\rinterruptible\x12\'\n\x0foverwrite_cache\x18\x16 \x01(\x08R\x0eoverwriteCache\x12(\n\x04\x65nvs\x18\x17 \x01(\x0b\x32\x14.flyteidl.admin.EnvsR\x04\x65nvs\x12\x12\n\x04tags\x18\x18 \x03(\tR\x04tagsB\x18\n\x16notification_overridesJ\x04\x08\x04\x10\x05\"m\n\x19\x45xecutionTerminateRequest\x12:\n\x02id\x18\x01 \x01(\x0b\x32*.flyteidl.core.WorkflowExecutionIdentifierR\x02id\x12\x14\n\x05\x63\x61use\x18\x02 \x01(\tR\x05\x63\x61use\"\x1c\n\x1a\x45xecutionTerminateResponse\"]\n\x1fWorkflowExecutionGetDataRequest\x12:\n\x02id\x18\x01 \x01(\x0b\x32*.flyteidl.core.WorkflowExecutionIdentifierR\x02id\"\x88\x02\n WorkflowExecutionGetDataResponse\x12\x35\n\x07outputs\x18\x01 \x01(\x0b\x32\x17.flyteidl.admin.UrlBlobB\x02\x18\x01R\x07outputs\x12\x33\n\x06inputs\x18\x02 \x01(\x0b\x32\x17.flyteidl.admin.UrlBlobB\x02\x18\x01R\x06inputs\x12:\n\x0b\x66ull_inputs\x18\x03 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapR\nfullInputs\x12<\n\x0c\x66ull_outputs\x18\x04 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapR\x0b\x66ullOutputs\"\x8a\x01\n\x16\x45xecutionUpdateRequest\x12:\n\x02id\x18\x01 \x01(\x0b\x32*.flyteidl.core.WorkflowExecutionIdentifierR\x02id\x12\x34\n\x05state\x18\x02 \x01(\x0e\x32\x1e.flyteidl.admin.ExecutionStateR\x05state\"\xae\x01\n\x1b\x45xecutionStateChangeDetails\x12\x34\n\x05state\x18\x01 \x01(\x0e\x32\x1e.flyteidl.admin.ExecutionStateR\x05state\x12;\n\x0boccurred_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\noccurredAt\x12\x1c\n\tprincipal\x18\x03 \x01(\tR\tprincipal\"\x19\n\x17\x45xecutionUpdateResponse\"v\n\"WorkflowExecutionGetMetricsRequest\x12:\n\x02id\x18\x01 \x01(\x0b\x32*.flyteidl.core.WorkflowExecutionIdentifierR\x02id\x12\x14\n\x05\x64\x65pth\x18\x02 \x01(\x05R\x05\x64\x65pth\"N\n#WorkflowExecutionGetMetricsResponse\x12\'\n\x04span\x18\x01 \x01(\x0b\x32\x13.flyteidl.core.SpanR\x04span*>\n\x0e\x45xecutionState\x12\x14\n\x10\x45XECUTION_ACTIVE\x10\x00\x12\x16\n\x12\x45XECUTION_ARCHIVED\x10\x01\x42\xba\x01\n\x12\x63om.flyteidl.adminB\x0e\x45xecutionProtoP\x01Z;github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin\xa2\x02\x03\x46\x41X\xaa\x02\x0e\x46lyteidl.Admin\xca\x02\x0e\x46lyteidl\\Admin\xe2\x02\x1a\x46lyteidl\\Admin\\GPBMetadata\xea\x02\x0f\x46lyteidl::Adminb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -51,54 +51,54 @@ _WORKFLOWEXECUTIONGETDATARESPONSE.fields_by_name['outputs']._serialized_options = b'\030\001' _WORKFLOWEXECUTIONGETDATARESPONSE.fields_by_name['inputs']._options = None _WORKFLOWEXECUTIONGETDATARESPONSE.fields_by_name['inputs']._serialized_options = b'\030\001' - _globals['_EXECUTIONSTATE']._serialized_start=5391 - _globals['_EXECUTIONSTATE']._serialized_end=5453 + _globals['_EXECUTIONSTATE']._serialized_start=5409 + _globals['_EXECUTIONSTATE']._serialized_end=5471 _globals['_EXECUTIONCREATEREQUEST']._serialized_start=403 - _globals['_EXECUTIONCREATEREQUEST']._serialized_end=599 - _globals['_EXECUTIONRELAUNCHREQUEST']._serialized_start=602 - _globals['_EXECUTIONRELAUNCHREQUEST']._serialized_end=755 - _globals['_EXECUTIONRECOVERREQUEST']._serialized_start=758 - _globals['_EXECUTIONRECOVERREQUEST']._serialized_end=926 - _globals['_EXECUTIONCREATERESPONSE']._serialized_start=928 - _globals['_EXECUTIONCREATERESPONSE']._serialized_end=1013 - _globals['_WORKFLOWEXECUTIONGETREQUEST']._serialized_start=1015 - _globals['_WORKFLOWEXECUTIONGETREQUEST']._serialized_end=1104 - _globals['_EXECUTION']._serialized_start=1107 - _globals['_EXECUTION']._serialized_end=1289 - _globals['_EXECUTIONLIST']._serialized_start=1291 - _globals['_EXECUTIONLIST']._serialized_end=1387 - _globals['_LITERALMAPBLOB']._serialized_start=1389 - _globals['_LITERALMAPBLOB']._serialized_end=1490 - _globals['_ABORTMETADATA']._serialized_start=1492 - _globals['_ABORTMETADATA']._serialized_end=1559 - _globals['_EXECUTIONCLOSURE']._serialized_start=1562 - _globals['_EXECUTIONCLOSURE']._serialized_end=2482 - _globals['_SYSTEMMETADATA']._serialized_start=2484 - _globals['_SYSTEMMETADATA']._serialized_end=2575 - _globals['_EXECUTIONMETADATA']._serialized_start=2578 - _globals['_EXECUTIONMETADATA']._serialized_end=3210 - _globals['_EXECUTIONMETADATA_EXECUTIONMODE']._serialized_start=3107 - _globals['_EXECUTIONMETADATA_EXECUTIONMODE']._serialized_end=3210 - _globals['_NOTIFICATIONLIST']._serialized_start=3212 - _globals['_NOTIFICATIONLIST']._serialized_end=3298 - _globals['_EXECUTIONSPEC']._serialized_start=3301 - _globals['_EXECUTIONSPEC']._serialized_end=4341 - _globals['_EXECUTIONTERMINATEREQUEST']._serialized_start=4343 - _globals['_EXECUTIONTERMINATEREQUEST']._serialized_end=4452 - _globals['_EXECUTIONTERMINATERESPONSE']._serialized_start=4454 - _globals['_EXECUTIONTERMINATERESPONSE']._serialized_end=4482 - _globals['_WORKFLOWEXECUTIONGETDATAREQUEST']._serialized_start=4484 - _globals['_WORKFLOWEXECUTIONGETDATAREQUEST']._serialized_end=4577 - _globals['_WORKFLOWEXECUTIONGETDATARESPONSE']._serialized_start=4580 - _globals['_WORKFLOWEXECUTIONGETDATARESPONSE']._serialized_end=4844 - _globals['_EXECUTIONUPDATEREQUEST']._serialized_start=4847 - _globals['_EXECUTIONUPDATEREQUEST']._serialized_end=4985 - _globals['_EXECUTIONSTATECHANGEDETAILS']._serialized_start=4988 - _globals['_EXECUTIONSTATECHANGEDETAILS']._serialized_end=5162 - _globals['_EXECUTIONUPDATERESPONSE']._serialized_start=5164 - _globals['_EXECUTIONUPDATERESPONSE']._serialized_end=5189 - _globals['_WORKFLOWEXECUTIONGETMETRICSREQUEST']._serialized_start=5191 - _globals['_WORKFLOWEXECUTIONGETMETRICSREQUEST']._serialized_end=5309 - _globals['_WORKFLOWEXECUTIONGETMETRICSRESPONSE']._serialized_start=5311 - _globals['_WORKFLOWEXECUTIONGETMETRICSRESPONSE']._serialized_end=5389 + _globals['_EXECUTIONCREATEREQUEST']._serialized_end=617 + _globals['_EXECUTIONRELAUNCHREQUEST']._serialized_start=620 + _globals['_EXECUTIONRELAUNCHREQUEST']._serialized_end=773 + _globals['_EXECUTIONRECOVERREQUEST']._serialized_start=776 + _globals['_EXECUTIONRECOVERREQUEST']._serialized_end=944 + _globals['_EXECUTIONCREATERESPONSE']._serialized_start=946 + _globals['_EXECUTIONCREATERESPONSE']._serialized_end=1031 + _globals['_WORKFLOWEXECUTIONGETREQUEST']._serialized_start=1033 + _globals['_WORKFLOWEXECUTIONGETREQUEST']._serialized_end=1122 + _globals['_EXECUTION']._serialized_start=1125 + _globals['_EXECUTION']._serialized_end=1307 + _globals['_EXECUTIONLIST']._serialized_start=1309 + _globals['_EXECUTIONLIST']._serialized_end=1405 + _globals['_LITERALMAPBLOB']._serialized_start=1407 + _globals['_LITERALMAPBLOB']._serialized_end=1508 + _globals['_ABORTMETADATA']._serialized_start=1510 + _globals['_ABORTMETADATA']._serialized_end=1577 + _globals['_EXECUTIONCLOSURE']._serialized_start=1580 + _globals['_EXECUTIONCLOSURE']._serialized_end=2500 + _globals['_SYSTEMMETADATA']._serialized_start=2502 + _globals['_SYSTEMMETADATA']._serialized_end=2593 + _globals['_EXECUTIONMETADATA']._serialized_start=2596 + _globals['_EXECUTIONMETADATA']._serialized_end=3228 + _globals['_EXECUTIONMETADATA_EXECUTIONMODE']._serialized_start=3125 + _globals['_EXECUTIONMETADATA_EXECUTIONMODE']._serialized_end=3228 + _globals['_NOTIFICATIONLIST']._serialized_start=3230 + _globals['_NOTIFICATIONLIST']._serialized_end=3316 + _globals['_EXECUTIONSPEC']._serialized_start=3319 + _globals['_EXECUTIONSPEC']._serialized_end=4359 + _globals['_EXECUTIONTERMINATEREQUEST']._serialized_start=4361 + _globals['_EXECUTIONTERMINATEREQUEST']._serialized_end=4470 + _globals['_EXECUTIONTERMINATERESPONSE']._serialized_start=4472 + _globals['_EXECUTIONTERMINATERESPONSE']._serialized_end=4500 + _globals['_WORKFLOWEXECUTIONGETDATAREQUEST']._serialized_start=4502 + _globals['_WORKFLOWEXECUTIONGETDATAREQUEST']._serialized_end=4595 + _globals['_WORKFLOWEXECUTIONGETDATARESPONSE']._serialized_start=4598 + _globals['_WORKFLOWEXECUTIONGETDATARESPONSE']._serialized_end=4862 + _globals['_EXECUTIONUPDATEREQUEST']._serialized_start=4865 + _globals['_EXECUTIONUPDATEREQUEST']._serialized_end=5003 + _globals['_EXECUTIONSTATECHANGEDETAILS']._serialized_start=5006 + _globals['_EXECUTIONSTATECHANGEDETAILS']._serialized_end=5180 + _globals['_EXECUTIONUPDATERESPONSE']._serialized_start=5182 + _globals['_EXECUTIONUPDATERESPONSE']._serialized_end=5207 + _globals['_WORKFLOWEXECUTIONGETMETRICSREQUEST']._serialized_start=5209 + _globals['_WORKFLOWEXECUTIONGETMETRICSREQUEST']._serialized_end=5327 + _globals['_WORKFLOWEXECUTIONGETMETRICSRESPONSE']._serialized_start=5329 + _globals['_WORKFLOWEXECUTIONGETMETRICSRESPONSE']._serialized_end=5407 # @@protoc_insertion_point(module_scope) diff --git a/flyteidl/gen/pb_python/flyteidl/admin/execution_pb2.pyi b/flyteidl/gen/pb_python/flyteidl/admin/execution_pb2.pyi index 1e5e21f19f..bee241d74d 100644 --- a/flyteidl/gen/pb_python/flyteidl/admin/execution_pb2.pyi +++ b/flyteidl/gen/pb_python/flyteidl/admin/execution_pb2.pyi @@ -25,18 +25,20 @@ EXECUTION_ACTIVE: ExecutionState EXECUTION_ARCHIVED: ExecutionState class ExecutionCreateRequest(_message.Message): - __slots__ = ["project", "domain", "name", "spec", "inputs"] + __slots__ = ["project", "domain", "name", "spec", "inputs", "org"] PROJECT_FIELD_NUMBER: _ClassVar[int] DOMAIN_FIELD_NUMBER: _ClassVar[int] NAME_FIELD_NUMBER: _ClassVar[int] SPEC_FIELD_NUMBER: _ClassVar[int] INPUTS_FIELD_NUMBER: _ClassVar[int] + ORG_FIELD_NUMBER: _ClassVar[int] project: str domain: str name: str spec: ExecutionSpec inputs: _literals_pb2.LiteralMap - def __init__(self, project: _Optional[str] = ..., domain: _Optional[str] = ..., name: _Optional[str] = ..., spec: _Optional[_Union[ExecutionSpec, _Mapping]] = ..., inputs: _Optional[_Union[_literals_pb2.LiteralMap, _Mapping]] = ...) -> None: ... + org: str + def __init__(self, project: _Optional[str] = ..., domain: _Optional[str] = ..., name: _Optional[str] = ..., spec: _Optional[_Union[ExecutionSpec, _Mapping]] = ..., inputs: _Optional[_Union[_literals_pb2.LiteralMap, _Mapping]] = ..., org: _Optional[str] = ...) -> None: ... class ExecutionRelaunchRequest(_message.Message): __slots__ = ["id", "name", "overwrite_cache"] diff --git a/flyteidl/gen/pb_python/flyteidl/admin/launch_plan_pb2.py b/flyteidl/gen/pb_python/flyteidl/admin/launch_plan_pb2.py index dea0972f4d..68d9cdbd65 100644 --- a/flyteidl/gen/pb_python/flyteidl/admin/launch_plan_pb2.py +++ b/flyteidl/gen/pb_python/flyteidl/admin/launch_plan_pb2.py @@ -23,7 +23,7 @@ from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n flyteidl/admin/launch_plan.proto\x12\x0e\x66lyteidl.admin\x1a\x1d\x66lyteidl/core/execution.proto\x1a\x1c\x66lyteidl/core/literals.proto\x1a\x1e\x66lyteidl/core/identifier.proto\x1a\x1d\x66lyteidl/core/interface.proto\x1a\x1c\x66lyteidl/core/security.proto\x1a\x1d\x66lyteidl/admin/schedule.proto\x1a\x1b\x66lyteidl/admin/common.proto\x1a\x19google/protobuf/any.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\"x\n\x17LaunchPlanCreateRequest\x12)\n\x02id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.IdentifierR\x02id\x12\x32\n\x04spec\x18\x02 \x01(\x0b\x32\x1e.flyteidl.admin.LaunchPlanSpecR\x04spec\"\x1a\n\x18LaunchPlanCreateResponse\"\xa8\x01\n\nLaunchPlan\x12)\n\x02id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.IdentifierR\x02id\x12\x32\n\x04spec\x18\x02 \x01(\x0b\x32\x1e.flyteidl.admin.LaunchPlanSpecR\x04spec\x12;\n\x07\x63losure\x18\x03 \x01(\x0b\x32!.flyteidl.admin.LaunchPlanClosureR\x07\x63losure\"e\n\x0eLaunchPlanList\x12=\n\x0claunch_plans\x18\x01 \x03(\x0b\x32\x1a.flyteidl.admin.LaunchPlanR\x0blaunchPlans\x12\x14\n\x05token\x18\x02 \x01(\tR\x05token\"v\n\x04\x41uth\x12,\n\x12\x61ssumable_iam_role\x18\x01 \x01(\tR\x10\x61ssumableIamRole\x12<\n\x1akubernetes_service_account\x18\x02 \x01(\tR\x18kubernetesServiceAccount:\x02\x18\x01\"\xbd\x07\n\x0eLaunchPlanSpec\x12:\n\x0bworkflow_id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.IdentifierR\nworkflowId\x12K\n\x0f\x65ntity_metadata\x18\x02 \x01(\x0b\x32\".flyteidl.admin.LaunchPlanMetadataR\x0e\x65ntityMetadata\x12\x42\n\x0e\x64\x65\x66\x61ult_inputs\x18\x03 \x01(\x0b\x32\x1b.flyteidl.core.ParameterMapR\rdefaultInputs\x12<\n\x0c\x66ixed_inputs\x18\x04 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapR\x0b\x66ixedInputs\x12\x16\n\x04role\x18\x05 \x01(\tB\x02\x18\x01R\x04role\x12.\n\x06labels\x18\x06 \x01(\x0b\x32\x16.flyteidl.admin.LabelsR\x06labels\x12=\n\x0b\x61nnotations\x18\x07 \x01(\x0b\x32\x1b.flyteidl.admin.AnnotationsR\x0b\x61nnotations\x12,\n\x04\x61uth\x18\x08 \x01(\x0b\x32\x14.flyteidl.admin.AuthB\x02\x18\x01R\x04\x61uth\x12\x39\n\tauth_role\x18\t \x01(\x0b\x32\x18.flyteidl.admin.AuthRoleB\x02\x18\x01R\x08\x61uthRole\x12I\n\x10security_context\x18\n \x01(\x0b\x32\x1e.flyteidl.core.SecurityContextR\x0fsecurityContext\x12M\n\x12quality_of_service\x18\x10 \x01(\x0b\x32\x1f.flyteidl.core.QualityOfServiceR\x10qualityOfService\x12X\n\x16raw_output_data_config\x18\x11 \x01(\x0b\x32#.flyteidl.admin.RawOutputDataConfigR\x13rawOutputDataConfig\x12\'\n\x0fmax_parallelism\x18\x12 \x01(\x05R\x0emaxParallelism\x12@\n\rinterruptible\x18\x13 \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\rinterruptible\x12\'\n\x0foverwrite_cache\x18\x14 \x01(\x08R\x0eoverwriteCache\x12(\n\x04\x65nvs\x18\x15 \x01(\x0b\x32\x14.flyteidl.admin.EnvsR\x04\x65nvs\"\xcd\x02\n\x11LaunchPlanClosure\x12\x35\n\x05state\x18\x01 \x01(\x0e\x32\x1f.flyteidl.admin.LaunchPlanStateR\x05state\x12\x44\n\x0f\x65xpected_inputs\x18\x02 \x01(\x0b\x32\x1b.flyteidl.core.ParameterMapR\x0e\x65xpectedInputs\x12\x45\n\x10\x65xpected_outputs\x18\x03 \x01(\x0b\x32\x1a.flyteidl.core.VariableMapR\x0f\x65xpectedOutputs\x12\x39\n\ncreated_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12\x39\n\nupdated_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tupdatedAt\"\xd1\x01\n\x12LaunchPlanMetadata\x12\x34\n\x08schedule\x18\x01 \x01(\x0b\x32\x18.flyteidl.admin.ScheduleR\x08schedule\x12\x42\n\rnotifications\x18\x02 \x03(\x0b\x32\x1c.flyteidl.admin.NotificationR\rnotifications\x12\x41\n\x11launch_conditions\x18\x03 \x01(\x0b\x32\x14.google.protobuf.AnyR\x10launchConditions\"{\n\x17LaunchPlanUpdateRequest\x12)\n\x02id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.IdentifierR\x02id\x12\x35\n\x05state\x18\x02 \x01(\x0e\x32\x1f.flyteidl.admin.LaunchPlanStateR\x05state\"\x1a\n\x18LaunchPlanUpdateResponse\"P\n\x17\x41\x63tiveLaunchPlanRequest\x12\x35\n\x02id\x18\x01 \x01(\x0b\x32%.flyteidl.admin.NamedEntityIdentifierR\x02id\"\xaa\x01\n\x1b\x41\x63tiveLaunchPlanListRequest\x12\x18\n\x07project\x18\x01 \x01(\tR\x07project\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12\x14\n\x05limit\x18\x03 \x01(\rR\x05limit\x12\x14\n\x05token\x18\x04 \x01(\tR\x05token\x12-\n\x07sort_by\x18\x05 \x01(\x0b\x32\x14.flyteidl.admin.SortR\x06sortBy*+\n\x0fLaunchPlanState\x12\x0c\n\x08INACTIVE\x10\x00\x12\n\n\x06\x41\x43TIVE\x10\x01\x42\xbb\x01\n\x12\x63om.flyteidl.adminB\x0fLaunchPlanProtoP\x01Z;github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin\xa2\x02\x03\x46\x41X\xaa\x02\x0e\x46lyteidl.Admin\xca\x02\x0e\x46lyteidl\\Admin\xe2\x02\x1a\x46lyteidl\\Admin\\GPBMetadata\xea\x02\x0f\x46lyteidl::Adminb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n flyteidl/admin/launch_plan.proto\x12\x0e\x66lyteidl.admin\x1a\x1d\x66lyteidl/core/execution.proto\x1a\x1c\x66lyteidl/core/literals.proto\x1a\x1e\x66lyteidl/core/identifier.proto\x1a\x1d\x66lyteidl/core/interface.proto\x1a\x1c\x66lyteidl/core/security.proto\x1a\x1d\x66lyteidl/admin/schedule.proto\x1a\x1b\x66lyteidl/admin/common.proto\x1a\x19google/protobuf/any.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\"x\n\x17LaunchPlanCreateRequest\x12)\n\x02id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.IdentifierR\x02id\x12\x32\n\x04spec\x18\x02 \x01(\x0b\x32\x1e.flyteidl.admin.LaunchPlanSpecR\x04spec\"\x1a\n\x18LaunchPlanCreateResponse\"\xa8\x01\n\nLaunchPlan\x12)\n\x02id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.IdentifierR\x02id\x12\x32\n\x04spec\x18\x02 \x01(\x0b\x32\x1e.flyteidl.admin.LaunchPlanSpecR\x04spec\x12;\n\x07\x63losure\x18\x03 \x01(\x0b\x32!.flyteidl.admin.LaunchPlanClosureR\x07\x63losure\"e\n\x0eLaunchPlanList\x12=\n\x0claunch_plans\x18\x01 \x03(\x0b\x32\x1a.flyteidl.admin.LaunchPlanR\x0blaunchPlans\x12\x14\n\x05token\x18\x02 \x01(\tR\x05token\"v\n\x04\x41uth\x12,\n\x12\x61ssumable_iam_role\x18\x01 \x01(\tR\x10\x61ssumableIamRole\x12<\n\x1akubernetes_service_account\x18\x02 \x01(\tR\x18kubernetesServiceAccount:\x02\x18\x01\"\xbd\x07\n\x0eLaunchPlanSpec\x12:\n\x0bworkflow_id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.IdentifierR\nworkflowId\x12K\n\x0f\x65ntity_metadata\x18\x02 \x01(\x0b\x32\".flyteidl.admin.LaunchPlanMetadataR\x0e\x65ntityMetadata\x12\x42\n\x0e\x64\x65\x66\x61ult_inputs\x18\x03 \x01(\x0b\x32\x1b.flyteidl.core.ParameterMapR\rdefaultInputs\x12<\n\x0c\x66ixed_inputs\x18\x04 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapR\x0b\x66ixedInputs\x12\x16\n\x04role\x18\x05 \x01(\tB\x02\x18\x01R\x04role\x12.\n\x06labels\x18\x06 \x01(\x0b\x32\x16.flyteidl.admin.LabelsR\x06labels\x12=\n\x0b\x61nnotations\x18\x07 \x01(\x0b\x32\x1b.flyteidl.admin.AnnotationsR\x0b\x61nnotations\x12,\n\x04\x61uth\x18\x08 \x01(\x0b\x32\x14.flyteidl.admin.AuthB\x02\x18\x01R\x04\x61uth\x12\x39\n\tauth_role\x18\t \x01(\x0b\x32\x18.flyteidl.admin.AuthRoleB\x02\x18\x01R\x08\x61uthRole\x12I\n\x10security_context\x18\n \x01(\x0b\x32\x1e.flyteidl.core.SecurityContextR\x0fsecurityContext\x12M\n\x12quality_of_service\x18\x10 \x01(\x0b\x32\x1f.flyteidl.core.QualityOfServiceR\x10qualityOfService\x12X\n\x16raw_output_data_config\x18\x11 \x01(\x0b\x32#.flyteidl.admin.RawOutputDataConfigR\x13rawOutputDataConfig\x12\'\n\x0fmax_parallelism\x18\x12 \x01(\x05R\x0emaxParallelism\x12@\n\rinterruptible\x18\x13 \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\rinterruptible\x12\'\n\x0foverwrite_cache\x18\x14 \x01(\x08R\x0eoverwriteCache\x12(\n\x04\x65nvs\x18\x15 \x01(\x0b\x32\x14.flyteidl.admin.EnvsR\x04\x65nvs\"\xcd\x02\n\x11LaunchPlanClosure\x12\x35\n\x05state\x18\x01 \x01(\x0e\x32\x1f.flyteidl.admin.LaunchPlanStateR\x05state\x12\x44\n\x0f\x65xpected_inputs\x18\x02 \x01(\x0b\x32\x1b.flyteidl.core.ParameterMapR\x0e\x65xpectedInputs\x12\x45\n\x10\x65xpected_outputs\x18\x03 \x01(\x0b\x32\x1a.flyteidl.core.VariableMapR\x0f\x65xpectedOutputs\x12\x39\n\ncreated_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12\x39\n\nupdated_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tupdatedAt\"\xd1\x01\n\x12LaunchPlanMetadata\x12\x34\n\x08schedule\x18\x01 \x01(\x0b\x32\x18.flyteidl.admin.ScheduleR\x08schedule\x12\x42\n\rnotifications\x18\x02 \x03(\x0b\x32\x1c.flyteidl.admin.NotificationR\rnotifications\x12\x41\n\x11launch_conditions\x18\x03 \x01(\x0b\x32\x14.google.protobuf.AnyR\x10launchConditions\"{\n\x17LaunchPlanUpdateRequest\x12)\n\x02id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.IdentifierR\x02id\x12\x35\n\x05state\x18\x02 \x01(\x0e\x32\x1f.flyteidl.admin.LaunchPlanStateR\x05state\"\x1a\n\x18LaunchPlanUpdateResponse\"P\n\x17\x41\x63tiveLaunchPlanRequest\x12\x35\n\x02id\x18\x01 \x01(\x0b\x32%.flyteidl.admin.NamedEntityIdentifierR\x02id\"\xbc\x01\n\x1b\x41\x63tiveLaunchPlanListRequest\x12\x18\n\x07project\x18\x01 \x01(\tR\x07project\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12\x14\n\x05limit\x18\x03 \x01(\rR\x05limit\x12\x14\n\x05token\x18\x04 \x01(\tR\x05token\x12-\n\x07sort_by\x18\x05 \x01(\x0b\x32\x14.flyteidl.admin.SortR\x06sortBy\x12\x10\n\x03org\x18\x06 \x01(\tR\x03org*+\n\x0fLaunchPlanState\x12\x0c\n\x08INACTIVE\x10\x00\x12\n\n\x06\x41\x43TIVE\x10\x01\x42\xbb\x01\n\x12\x63om.flyteidl.adminB\x0fLaunchPlanProtoP\x01Z;github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin\xa2\x02\x03\x46\x41X\xaa\x02\x0e\x46lyteidl.Admin\xca\x02\x0e\x46lyteidl\\Admin\xe2\x02\x1a\x46lyteidl\\Admin\\GPBMetadata\xea\x02\x0f\x46lyteidl::Adminb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -40,8 +40,8 @@ _LAUNCHPLANSPEC.fields_by_name['auth']._serialized_options = b'\030\001' _LAUNCHPLANSPEC.fields_by_name['auth_role']._options = None _LAUNCHPLANSPEC.fields_by_name['auth_role']._serialized_options = b'\030\001' - _globals['_LAUNCHPLANSTATE']._serialized_start=2818 - _globals['_LAUNCHPLANSTATE']._serialized_end=2861 + _globals['_LAUNCHPLANSTATE']._serialized_start=2836 + _globals['_LAUNCHPLANSTATE']._serialized_end=2879 _globals['_LAUNCHPLANCREATEREQUEST']._serialized_start=358 _globals['_LAUNCHPLANCREATEREQUEST']._serialized_end=478 _globals['_LAUNCHPLANCREATERESPONSE']._serialized_start=480 @@ -65,5 +65,5 @@ _globals['_ACTIVELAUNCHPLANREQUEST']._serialized_start=2563 _globals['_ACTIVELAUNCHPLANREQUEST']._serialized_end=2643 _globals['_ACTIVELAUNCHPLANLISTREQUEST']._serialized_start=2646 - _globals['_ACTIVELAUNCHPLANLISTREQUEST']._serialized_end=2816 + _globals['_ACTIVELAUNCHPLANLISTREQUEST']._serialized_end=2834 # @@protoc_insertion_point(module_scope) diff --git a/flyteidl/gen/pb_python/flyteidl/admin/launch_plan_pb2.pyi b/flyteidl/gen/pb_python/flyteidl/admin/launch_plan_pb2.pyi index cb6a41e2b0..a047c8d473 100644 --- a/flyteidl/gen/pb_python/flyteidl/admin/launch_plan_pb2.pyi +++ b/flyteidl/gen/pb_python/flyteidl/admin/launch_plan_pb2.pyi @@ -140,15 +140,17 @@ class ActiveLaunchPlanRequest(_message.Message): def __init__(self, id: _Optional[_Union[_common_pb2.NamedEntityIdentifier, _Mapping]] = ...) -> None: ... class ActiveLaunchPlanListRequest(_message.Message): - __slots__ = ["project", "domain", "limit", "token", "sort_by"] + __slots__ = ["project", "domain", "limit", "token", "sort_by", "org"] PROJECT_FIELD_NUMBER: _ClassVar[int] DOMAIN_FIELD_NUMBER: _ClassVar[int] LIMIT_FIELD_NUMBER: _ClassVar[int] TOKEN_FIELD_NUMBER: _ClassVar[int] SORT_BY_FIELD_NUMBER: _ClassVar[int] + ORG_FIELD_NUMBER: _ClassVar[int] project: str domain: str limit: int token: str sort_by: _common_pb2.Sort - def __init__(self, project: _Optional[str] = ..., domain: _Optional[str] = ..., limit: _Optional[int] = ..., token: _Optional[str] = ..., sort_by: _Optional[_Union[_common_pb2.Sort, _Mapping]] = ...) -> None: ... + org: str + def __init__(self, project: _Optional[str] = ..., domain: _Optional[str] = ..., limit: _Optional[int] = ..., token: _Optional[str] = ..., sort_by: _Optional[_Union[_common_pb2.Sort, _Mapping]] = ..., org: _Optional[str] = ...) -> None: ... diff --git a/flyteidl/gen/pb_python/flyteidl/admin/matchable_resource_pb2.py b/flyteidl/gen/pb_python/flyteidl/admin/matchable_resource_pb2.py index 931defd6e8..f95811b646 100644 --- a/flyteidl/gen/pb_python/flyteidl/admin/matchable_resource_pb2.py +++ b/flyteidl/gen/pb_python/flyteidl/admin/matchable_resource_pb2.py @@ -18,7 +18,7 @@ from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\'flyteidl/admin/matchable_resource.proto\x12\x0e\x66lyteidl.admin\x1a\x1b\x66lyteidl/admin/common.proto\x1a\'flyteidl/admin/cluster_assignment.proto\x1a\x1d\x66lyteidl/core/execution.proto\x1a\x1c\x66lyteidl/core/security.proto\x1a\x1egoogle/protobuf/wrappers.proto\"\x95\x01\n\x10TaskResourceSpec\x12\x10\n\x03\x63pu\x18\x01 \x01(\tR\x03\x63pu\x12\x10\n\x03gpu\x18\x02 \x01(\tR\x03gpu\x12\x16\n\x06memory\x18\x03 \x01(\tR\x06memory\x12\x18\n\x07storage\x18\x04 \x01(\tR\x07storage\x12+\n\x11\x65phemeral_storage\x18\x05 \x01(\tR\x10\x65phemeralStorage\"\x90\x01\n\x16TaskResourceAttributes\x12<\n\x08\x64\x65\x66\x61ults\x18\x01 \x01(\x0b\x32 .flyteidl.admin.TaskResourceSpecR\x08\x64\x65\x66\x61ults\x12\x38\n\x06limits\x18\x02 \x01(\x0b\x32 .flyteidl.admin.TaskResourceSpecR\x06limits\"\xb5\x01\n\x19\x43lusterResourceAttributes\x12Y\n\nattributes\x18\x01 \x03(\x0b\x32\x39.flyteidl.admin.ClusterResourceAttributes.AttributesEntryR\nattributes\x1a=\n\x0f\x41ttributesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\".\n\x18\x45xecutionQueueAttributes\x12\x12\n\x04tags\x18\x01 \x03(\tR\x04tags\"-\n\x15\x45xecutionClusterLabel\x12\x14\n\x05value\x18\x01 \x01(\tR\x05value\"\xec\x01\n\x0ePluginOverride\x12\x1b\n\ttask_type\x18\x01 \x01(\tR\x08taskType\x12\x1b\n\tplugin_id\x18\x02 \x03(\tR\x08pluginId\x12l\n\x17missing_plugin_behavior\x18\x04 \x01(\x0e\x32\x34.flyteidl.admin.PluginOverride.MissingPluginBehaviorR\x15missingPluginBehavior\"2\n\x15MissingPluginBehavior\x12\x08\n\x04\x46\x41IL\x10\x00\x12\x0f\n\x0bUSE_DEFAULT\x10\x01\"O\n\x0fPluginOverrides\x12<\n\toverrides\x18\x01 \x03(\x0b\x32\x1e.flyteidl.admin.PluginOverrideR\toverrides\"\xeb\x03\n\x17WorkflowExecutionConfig\x12\'\n\x0fmax_parallelism\x18\x01 \x01(\x05R\x0emaxParallelism\x12I\n\x10security_context\x18\x02 \x01(\x0b\x32\x1e.flyteidl.core.SecurityContextR\x0fsecurityContext\x12X\n\x16raw_output_data_config\x18\x03 \x01(\x0b\x32#.flyteidl.admin.RawOutputDataConfigR\x13rawOutputDataConfig\x12.\n\x06labels\x18\x04 \x01(\x0b\x32\x16.flyteidl.admin.LabelsR\x06labels\x12=\n\x0b\x61nnotations\x18\x05 \x01(\x0b\x32\x1b.flyteidl.admin.AnnotationsR\x0b\x61nnotations\x12@\n\rinterruptible\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\rinterruptible\x12\'\n\x0foverwrite_cache\x18\x07 \x01(\x08R\x0eoverwriteCache\x12(\n\x04\x65nvs\x18\x08 \x01(\x0b\x32\x14.flyteidl.admin.EnvsR\x04\x65nvs\"\x94\x06\n\x12MatchingAttributes\x12\x62\n\x18task_resource_attributes\x18\x01 \x01(\x0b\x32&.flyteidl.admin.TaskResourceAttributesH\x00R\x16taskResourceAttributes\x12k\n\x1b\x63luster_resource_attributes\x18\x02 \x01(\x0b\x32).flyteidl.admin.ClusterResourceAttributesH\x00R\x19\x63lusterResourceAttributes\x12h\n\x1a\x65xecution_queue_attributes\x18\x03 \x01(\x0b\x32(.flyteidl.admin.ExecutionQueueAttributesH\x00R\x18\x65xecutionQueueAttributes\x12_\n\x17\x65xecution_cluster_label\x18\x04 \x01(\x0b\x32%.flyteidl.admin.ExecutionClusterLabelH\x00R\x15\x65xecutionClusterLabel\x12O\n\x12quality_of_service\x18\x05 \x01(\x0b\x32\x1f.flyteidl.core.QualityOfServiceH\x00R\x10qualityOfService\x12L\n\x10plugin_overrides\x18\x06 \x01(\x0b\x32\x1f.flyteidl.admin.PluginOverridesH\x00R\x0fpluginOverrides\x12\x65\n\x19workflow_execution_config\x18\x07 \x01(\x0b\x32\'.flyteidl.admin.WorkflowExecutionConfigH\x00R\x17workflowExecutionConfig\x12R\n\x12\x63luster_assignment\x18\x08 \x01(\x0b\x32!.flyteidl.admin.ClusterAssignmentH\x00R\x11\x63lusterAssignmentB\x08\n\x06target\"\xd5\x01\n MatchableAttributesConfiguration\x12\x42\n\nattributes\x18\x01 \x01(\x0b\x32\".flyteidl.admin.MatchingAttributesR\nattributes\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12\x18\n\x07project\x18\x03 \x01(\tR\x07project\x12\x1a\n\x08workflow\x18\x04 \x01(\tR\x08workflow\x12\x1f\n\x0blaunch_plan\x18\x05 \x01(\tR\nlaunchPlan\"h\n\x1eListMatchableAttributesRequest\x12\x46\n\rresource_type\x18\x01 \x01(\x0e\x32!.flyteidl.admin.MatchableResourceR\x0cresourceType\"{\n\x1fListMatchableAttributesResponse\x12X\n\x0e\x63onfigurations\x18\x01 \x03(\x0b\x32\x30.flyteidl.admin.MatchableAttributesConfigurationR\x0e\x63onfigurations*\xe0\x01\n\x11MatchableResource\x12\x11\n\rTASK_RESOURCE\x10\x00\x12\x14\n\x10\x43LUSTER_RESOURCE\x10\x01\x12\x13\n\x0f\x45XECUTION_QUEUE\x10\x02\x12\x1b\n\x17\x45XECUTION_CLUSTER_LABEL\x10\x03\x12$\n QUALITY_OF_SERVICE_SPECIFICATION\x10\x04\x12\x13\n\x0fPLUGIN_OVERRIDE\x10\x05\x12\x1d\n\x19WORKFLOW_EXECUTION_CONFIG\x10\x06\x12\x16\n\x12\x43LUSTER_ASSIGNMENT\x10\x07\x42\xc2\x01\n\x12\x63om.flyteidl.adminB\x16MatchableResourceProtoP\x01Z;github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin\xa2\x02\x03\x46\x41X\xaa\x02\x0e\x46lyteidl.Admin\xca\x02\x0e\x46lyteidl\\Admin\xe2\x02\x1a\x46lyteidl\\Admin\\GPBMetadata\xea\x02\x0f\x46lyteidl::Adminb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\'flyteidl/admin/matchable_resource.proto\x12\x0e\x66lyteidl.admin\x1a\x1b\x66lyteidl/admin/common.proto\x1a\'flyteidl/admin/cluster_assignment.proto\x1a\x1d\x66lyteidl/core/execution.proto\x1a\x1c\x66lyteidl/core/security.proto\x1a\x1egoogle/protobuf/wrappers.proto\"\x95\x01\n\x10TaskResourceSpec\x12\x10\n\x03\x63pu\x18\x01 \x01(\tR\x03\x63pu\x12\x10\n\x03gpu\x18\x02 \x01(\tR\x03gpu\x12\x16\n\x06memory\x18\x03 \x01(\tR\x06memory\x12\x18\n\x07storage\x18\x04 \x01(\tR\x07storage\x12+\n\x11\x65phemeral_storage\x18\x05 \x01(\tR\x10\x65phemeralStorage\"\x90\x01\n\x16TaskResourceAttributes\x12<\n\x08\x64\x65\x66\x61ults\x18\x01 \x01(\x0b\x32 .flyteidl.admin.TaskResourceSpecR\x08\x64\x65\x66\x61ults\x12\x38\n\x06limits\x18\x02 \x01(\x0b\x32 .flyteidl.admin.TaskResourceSpecR\x06limits\"\xb5\x01\n\x19\x43lusterResourceAttributes\x12Y\n\nattributes\x18\x01 \x03(\x0b\x32\x39.flyteidl.admin.ClusterResourceAttributes.AttributesEntryR\nattributes\x1a=\n\x0f\x41ttributesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\".\n\x18\x45xecutionQueueAttributes\x12\x12\n\x04tags\x18\x01 \x03(\tR\x04tags\"-\n\x15\x45xecutionClusterLabel\x12\x14\n\x05value\x18\x01 \x01(\tR\x05value\"\xec\x01\n\x0ePluginOverride\x12\x1b\n\ttask_type\x18\x01 \x01(\tR\x08taskType\x12\x1b\n\tplugin_id\x18\x02 \x03(\tR\x08pluginId\x12l\n\x17missing_plugin_behavior\x18\x04 \x01(\x0e\x32\x34.flyteidl.admin.PluginOverride.MissingPluginBehaviorR\x15missingPluginBehavior\"2\n\x15MissingPluginBehavior\x12\x08\n\x04\x46\x41IL\x10\x00\x12\x0f\n\x0bUSE_DEFAULT\x10\x01\"O\n\x0fPluginOverrides\x12<\n\toverrides\x18\x01 \x03(\x0b\x32\x1e.flyteidl.admin.PluginOverrideR\toverrides\"\xeb\x03\n\x17WorkflowExecutionConfig\x12\'\n\x0fmax_parallelism\x18\x01 \x01(\x05R\x0emaxParallelism\x12I\n\x10security_context\x18\x02 \x01(\x0b\x32\x1e.flyteidl.core.SecurityContextR\x0fsecurityContext\x12X\n\x16raw_output_data_config\x18\x03 \x01(\x0b\x32#.flyteidl.admin.RawOutputDataConfigR\x13rawOutputDataConfig\x12.\n\x06labels\x18\x04 \x01(\x0b\x32\x16.flyteidl.admin.LabelsR\x06labels\x12=\n\x0b\x61nnotations\x18\x05 \x01(\x0b\x32\x1b.flyteidl.admin.AnnotationsR\x0b\x61nnotations\x12@\n\rinterruptible\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\rinterruptible\x12\'\n\x0foverwrite_cache\x18\x07 \x01(\x08R\x0eoverwriteCache\x12(\n\x04\x65nvs\x18\x08 \x01(\x0b\x32\x14.flyteidl.admin.EnvsR\x04\x65nvs\"\x94\x06\n\x12MatchingAttributes\x12\x62\n\x18task_resource_attributes\x18\x01 \x01(\x0b\x32&.flyteidl.admin.TaskResourceAttributesH\x00R\x16taskResourceAttributes\x12k\n\x1b\x63luster_resource_attributes\x18\x02 \x01(\x0b\x32).flyteidl.admin.ClusterResourceAttributesH\x00R\x19\x63lusterResourceAttributes\x12h\n\x1a\x65xecution_queue_attributes\x18\x03 \x01(\x0b\x32(.flyteidl.admin.ExecutionQueueAttributesH\x00R\x18\x65xecutionQueueAttributes\x12_\n\x17\x65xecution_cluster_label\x18\x04 \x01(\x0b\x32%.flyteidl.admin.ExecutionClusterLabelH\x00R\x15\x65xecutionClusterLabel\x12O\n\x12quality_of_service\x18\x05 \x01(\x0b\x32\x1f.flyteidl.core.QualityOfServiceH\x00R\x10qualityOfService\x12L\n\x10plugin_overrides\x18\x06 \x01(\x0b\x32\x1f.flyteidl.admin.PluginOverridesH\x00R\x0fpluginOverrides\x12\x65\n\x19workflow_execution_config\x18\x07 \x01(\x0b\x32\'.flyteidl.admin.WorkflowExecutionConfigH\x00R\x17workflowExecutionConfig\x12R\n\x12\x63luster_assignment\x18\x08 \x01(\x0b\x32!.flyteidl.admin.ClusterAssignmentH\x00R\x11\x63lusterAssignmentB\x08\n\x06target\"\xe7\x01\n MatchableAttributesConfiguration\x12\x42\n\nattributes\x18\x01 \x01(\x0b\x32\".flyteidl.admin.MatchingAttributesR\nattributes\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12\x18\n\x07project\x18\x03 \x01(\tR\x07project\x12\x1a\n\x08workflow\x18\x04 \x01(\tR\x08workflow\x12\x1f\n\x0blaunch_plan\x18\x05 \x01(\tR\nlaunchPlan\x12\x10\n\x03org\x18\x06 \x01(\tR\x03org\"h\n\x1eListMatchableAttributesRequest\x12\x46\n\rresource_type\x18\x01 \x01(\x0e\x32!.flyteidl.admin.MatchableResourceR\x0cresourceType\"{\n\x1fListMatchableAttributesResponse\x12X\n\x0e\x63onfigurations\x18\x01 \x03(\x0b\x32\x30.flyteidl.admin.MatchableAttributesConfigurationR\x0e\x63onfigurations*\xe0\x01\n\x11MatchableResource\x12\x11\n\rTASK_RESOURCE\x10\x00\x12\x14\n\x10\x43LUSTER_RESOURCE\x10\x01\x12\x13\n\x0f\x45XECUTION_QUEUE\x10\x02\x12\x1b\n\x17\x45XECUTION_CLUSTER_LABEL\x10\x03\x12$\n QUALITY_OF_SERVICE_SPECIFICATION\x10\x04\x12\x13\n\x0fPLUGIN_OVERRIDE\x10\x05\x12\x1d\n\x19WORKFLOW_EXECUTION_CONFIG\x10\x06\x12\x16\n\x12\x43LUSTER_ASSIGNMENT\x10\x07\x42\xc2\x01\n\x12\x63om.flyteidl.adminB\x16MatchableResourceProtoP\x01Z;github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin\xa2\x02\x03\x46\x41X\xaa\x02\x0e\x46lyteidl.Admin\xca\x02\x0e\x46lyteidl\\Admin\xe2\x02\x1a\x46lyteidl\\Admin\\GPBMetadata\xea\x02\x0f\x46lyteidl::Adminb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -29,8 +29,8 @@ DESCRIPTOR._serialized_options = b'\n\022com.flyteidl.adminB\026MatchableResourceProtoP\001Z;github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin\242\002\003FAX\252\002\016Flyteidl.Admin\312\002\016Flyteidl\\Admin\342\002\032Flyteidl\\Admin\\GPBMetadata\352\002\017Flyteidl::Admin' _CLUSTERRESOURCEATTRIBUTES_ATTRIBUTESENTRY._options = None _CLUSTERRESOURCEATTRIBUTES_ATTRIBUTESENTRY._serialized_options = b'8\001' - _globals['_MATCHABLERESOURCE']._serialized_start=2853 - _globals['_MATCHABLERESOURCE']._serialized_end=3077 + _globals['_MATCHABLERESOURCE']._serialized_start=2871 + _globals['_MATCHABLERESOURCE']._serialized_end=3095 _globals['_TASKRESOURCESPEC']._serialized_start=223 _globals['_TASKRESOURCESPEC']._serialized_end=372 _globals['_TASKRESOURCEATTRIBUTES']._serialized_start=375 @@ -54,9 +54,9 @@ _globals['_MATCHINGATTRIBUTES']._serialized_start=1615 _globals['_MATCHINGATTRIBUTES']._serialized_end=2403 _globals['_MATCHABLEATTRIBUTESCONFIGURATION']._serialized_start=2406 - _globals['_MATCHABLEATTRIBUTESCONFIGURATION']._serialized_end=2619 - _globals['_LISTMATCHABLEATTRIBUTESREQUEST']._serialized_start=2621 - _globals['_LISTMATCHABLEATTRIBUTESREQUEST']._serialized_end=2725 - _globals['_LISTMATCHABLEATTRIBUTESRESPONSE']._serialized_start=2727 - _globals['_LISTMATCHABLEATTRIBUTESRESPONSE']._serialized_end=2850 + _globals['_MATCHABLEATTRIBUTESCONFIGURATION']._serialized_end=2637 + _globals['_LISTMATCHABLEATTRIBUTESREQUEST']._serialized_start=2639 + _globals['_LISTMATCHABLEATTRIBUTESREQUEST']._serialized_end=2743 + _globals['_LISTMATCHABLEATTRIBUTESRESPONSE']._serialized_start=2745 + _globals['_LISTMATCHABLEATTRIBUTESRESPONSE']._serialized_end=2868 # @@protoc_insertion_point(module_scope) diff --git a/flyteidl/gen/pb_python/flyteidl/admin/matchable_resource_pb2.pyi b/flyteidl/gen/pb_python/flyteidl/admin/matchable_resource_pb2.pyi index 56a7b03165..f7707cf984 100644 --- a/flyteidl/gen/pb_python/flyteidl/admin/matchable_resource_pb2.pyi +++ b/flyteidl/gen/pb_python/flyteidl/admin/matchable_resource_pb2.pyi @@ -140,18 +140,20 @@ class MatchingAttributes(_message.Message): def __init__(self, task_resource_attributes: _Optional[_Union[TaskResourceAttributes, _Mapping]] = ..., cluster_resource_attributes: _Optional[_Union[ClusterResourceAttributes, _Mapping]] = ..., execution_queue_attributes: _Optional[_Union[ExecutionQueueAttributes, _Mapping]] = ..., execution_cluster_label: _Optional[_Union[ExecutionClusterLabel, _Mapping]] = ..., quality_of_service: _Optional[_Union[_execution_pb2.QualityOfService, _Mapping]] = ..., plugin_overrides: _Optional[_Union[PluginOverrides, _Mapping]] = ..., workflow_execution_config: _Optional[_Union[WorkflowExecutionConfig, _Mapping]] = ..., cluster_assignment: _Optional[_Union[_cluster_assignment_pb2.ClusterAssignment, _Mapping]] = ...) -> None: ... class MatchableAttributesConfiguration(_message.Message): - __slots__ = ["attributes", "domain", "project", "workflow", "launch_plan"] + __slots__ = ["attributes", "domain", "project", "workflow", "launch_plan", "org"] ATTRIBUTES_FIELD_NUMBER: _ClassVar[int] DOMAIN_FIELD_NUMBER: _ClassVar[int] PROJECT_FIELD_NUMBER: _ClassVar[int] WORKFLOW_FIELD_NUMBER: _ClassVar[int] LAUNCH_PLAN_FIELD_NUMBER: _ClassVar[int] + ORG_FIELD_NUMBER: _ClassVar[int] attributes: MatchingAttributes domain: str project: str workflow: str launch_plan: str - def __init__(self, attributes: _Optional[_Union[MatchingAttributes, _Mapping]] = ..., domain: _Optional[str] = ..., project: _Optional[str] = ..., workflow: _Optional[str] = ..., launch_plan: _Optional[str] = ...) -> None: ... + org: str + def __init__(self, attributes: _Optional[_Union[MatchingAttributes, _Mapping]] = ..., domain: _Optional[str] = ..., project: _Optional[str] = ..., workflow: _Optional[str] = ..., launch_plan: _Optional[str] = ..., org: _Optional[str] = ...) -> None: ... class ListMatchableAttributesRequest(_message.Message): __slots__ = ["resource_type"] diff --git a/flyteidl/gen/pb_python/flyteidl/admin/project_attributes_pb2.py b/flyteidl/gen/pb_python/flyteidl/admin/project_attributes_pb2.py index b6f7d05f5e..46808ec536 100644 --- a/flyteidl/gen/pb_python/flyteidl/admin/project_attributes_pb2.py +++ b/flyteidl/gen/pb_python/flyteidl/admin/project_attributes_pb2.py @@ -14,7 +14,7 @@ from flyteidl.admin import matchable_resource_pb2 as flyteidl_dot_admin_dot_matchable__resource__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\'flyteidl/admin/project_attributes.proto\x12\x0e\x66lyteidl.admin\x1a\'flyteidl/admin/matchable_resource.proto\"\x82\x01\n\x11ProjectAttributes\x12\x18\n\x07project\x18\x01 \x01(\tR\x07project\x12S\n\x13matching_attributes\x18\x02 \x01(\x0b\x32\".flyteidl.admin.MatchingAttributesR\x12matchingAttributes\"c\n\x1eProjectAttributesUpdateRequest\x12\x41\n\nattributes\x18\x01 \x01(\x0b\x32!.flyteidl.admin.ProjectAttributesR\nattributes\"!\n\x1fProjectAttributesUpdateResponse\"\x7f\n\x1bProjectAttributesGetRequest\x12\x18\n\x07project\x18\x01 \x01(\tR\x07project\x12\x46\n\rresource_type\x18\x02 \x01(\x0e\x32!.flyteidl.admin.MatchableResourceR\x0cresourceType\"a\n\x1cProjectAttributesGetResponse\x12\x41\n\nattributes\x18\x01 \x01(\x0b\x32!.flyteidl.admin.ProjectAttributesR\nattributes\"\x82\x01\n\x1eProjectAttributesDeleteRequest\x12\x18\n\x07project\x18\x01 \x01(\tR\x07project\x12\x46\n\rresource_type\x18\x02 \x01(\x0e\x32!.flyteidl.admin.MatchableResourceR\x0cresourceType\"!\n\x1fProjectAttributesDeleteResponseB\xc2\x01\n\x12\x63om.flyteidl.adminB\x16ProjectAttributesProtoP\x01Z;github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin\xa2\x02\x03\x46\x41X\xaa\x02\x0e\x46lyteidl.Admin\xca\x02\x0e\x46lyteidl\\Admin\xe2\x02\x1a\x46lyteidl\\Admin\\GPBMetadata\xea\x02\x0f\x46lyteidl::Adminb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\'flyteidl/admin/project_attributes.proto\x12\x0e\x66lyteidl.admin\x1a\'flyteidl/admin/matchable_resource.proto\"\x94\x01\n\x11ProjectAttributes\x12\x18\n\x07project\x18\x01 \x01(\tR\x07project\x12S\n\x13matching_attributes\x18\x02 \x01(\x0b\x32\".flyteidl.admin.MatchingAttributesR\x12matchingAttributes\x12\x10\n\x03org\x18\x03 \x01(\tR\x03org\"c\n\x1eProjectAttributesUpdateRequest\x12\x41\n\nattributes\x18\x01 \x01(\x0b\x32!.flyteidl.admin.ProjectAttributesR\nattributes\"!\n\x1fProjectAttributesUpdateResponse\"\x91\x01\n\x1bProjectAttributesGetRequest\x12\x18\n\x07project\x18\x01 \x01(\tR\x07project\x12\x46\n\rresource_type\x18\x02 \x01(\x0e\x32!.flyteidl.admin.MatchableResourceR\x0cresourceType\x12\x10\n\x03org\x18\x03 \x01(\tR\x03org\"a\n\x1cProjectAttributesGetResponse\x12\x41\n\nattributes\x18\x01 \x01(\x0b\x32!.flyteidl.admin.ProjectAttributesR\nattributes\"\x94\x01\n\x1eProjectAttributesDeleteRequest\x12\x18\n\x07project\x18\x01 \x01(\tR\x07project\x12\x46\n\rresource_type\x18\x02 \x01(\x0e\x32!.flyteidl.admin.MatchableResourceR\x0cresourceType\x12\x10\n\x03org\x18\x03 \x01(\tR\x03org\"!\n\x1fProjectAttributesDeleteResponseB\xc2\x01\n\x12\x63om.flyteidl.adminB\x16ProjectAttributesProtoP\x01Z;github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin\xa2\x02\x03\x46\x41X\xaa\x02\x0e\x46lyteidl.Admin\xca\x02\x0e\x46lyteidl\\Admin\xe2\x02\x1a\x46lyteidl\\Admin\\GPBMetadata\xea\x02\x0f\x46lyteidl::Adminb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -24,17 +24,17 @@ DESCRIPTOR._options = None DESCRIPTOR._serialized_options = b'\n\022com.flyteidl.adminB\026ProjectAttributesProtoP\001Z;github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin\242\002\003FAX\252\002\016Flyteidl.Admin\312\002\016Flyteidl\\Admin\342\002\032Flyteidl\\Admin\\GPBMetadata\352\002\017Flyteidl::Admin' _globals['_PROJECTATTRIBUTES']._serialized_start=101 - _globals['_PROJECTATTRIBUTES']._serialized_end=231 - _globals['_PROJECTATTRIBUTESUPDATEREQUEST']._serialized_start=233 - _globals['_PROJECTATTRIBUTESUPDATEREQUEST']._serialized_end=332 - _globals['_PROJECTATTRIBUTESUPDATERESPONSE']._serialized_start=334 - _globals['_PROJECTATTRIBUTESUPDATERESPONSE']._serialized_end=367 - _globals['_PROJECTATTRIBUTESGETREQUEST']._serialized_start=369 - _globals['_PROJECTATTRIBUTESGETREQUEST']._serialized_end=496 - _globals['_PROJECTATTRIBUTESGETRESPONSE']._serialized_start=498 - _globals['_PROJECTATTRIBUTESGETRESPONSE']._serialized_end=595 - _globals['_PROJECTATTRIBUTESDELETEREQUEST']._serialized_start=598 - _globals['_PROJECTATTRIBUTESDELETEREQUEST']._serialized_end=728 - _globals['_PROJECTATTRIBUTESDELETERESPONSE']._serialized_start=730 - _globals['_PROJECTATTRIBUTESDELETERESPONSE']._serialized_end=763 + _globals['_PROJECTATTRIBUTES']._serialized_end=249 + _globals['_PROJECTATTRIBUTESUPDATEREQUEST']._serialized_start=251 + _globals['_PROJECTATTRIBUTESUPDATEREQUEST']._serialized_end=350 + _globals['_PROJECTATTRIBUTESUPDATERESPONSE']._serialized_start=352 + _globals['_PROJECTATTRIBUTESUPDATERESPONSE']._serialized_end=385 + _globals['_PROJECTATTRIBUTESGETREQUEST']._serialized_start=388 + _globals['_PROJECTATTRIBUTESGETREQUEST']._serialized_end=533 + _globals['_PROJECTATTRIBUTESGETRESPONSE']._serialized_start=535 + _globals['_PROJECTATTRIBUTESGETRESPONSE']._serialized_end=632 + _globals['_PROJECTATTRIBUTESDELETEREQUEST']._serialized_start=635 + _globals['_PROJECTATTRIBUTESDELETEREQUEST']._serialized_end=783 + _globals['_PROJECTATTRIBUTESDELETERESPONSE']._serialized_start=785 + _globals['_PROJECTATTRIBUTESDELETERESPONSE']._serialized_end=818 # @@protoc_insertion_point(module_scope) diff --git a/flyteidl/gen/pb_python/flyteidl/admin/project_attributes_pb2.pyi b/flyteidl/gen/pb_python/flyteidl/admin/project_attributes_pb2.pyi index 8ad0997ac2..6581a30a15 100644 --- a/flyteidl/gen/pb_python/flyteidl/admin/project_attributes_pb2.pyi +++ b/flyteidl/gen/pb_python/flyteidl/admin/project_attributes_pb2.pyi @@ -6,12 +6,14 @@ from typing import ClassVar as _ClassVar, Mapping as _Mapping, Optional as _Opti DESCRIPTOR: _descriptor.FileDescriptor class ProjectAttributes(_message.Message): - __slots__ = ["project", "matching_attributes"] + __slots__ = ["project", "matching_attributes", "org"] PROJECT_FIELD_NUMBER: _ClassVar[int] MATCHING_ATTRIBUTES_FIELD_NUMBER: _ClassVar[int] + ORG_FIELD_NUMBER: _ClassVar[int] project: str matching_attributes: _matchable_resource_pb2.MatchingAttributes - def __init__(self, project: _Optional[str] = ..., matching_attributes: _Optional[_Union[_matchable_resource_pb2.MatchingAttributes, _Mapping]] = ...) -> None: ... + org: str + def __init__(self, project: _Optional[str] = ..., matching_attributes: _Optional[_Union[_matchable_resource_pb2.MatchingAttributes, _Mapping]] = ..., org: _Optional[str] = ...) -> None: ... class ProjectAttributesUpdateRequest(_message.Message): __slots__ = ["attributes"] @@ -24,12 +26,14 @@ class ProjectAttributesUpdateResponse(_message.Message): def __init__(self) -> None: ... class ProjectAttributesGetRequest(_message.Message): - __slots__ = ["project", "resource_type"] + __slots__ = ["project", "resource_type", "org"] PROJECT_FIELD_NUMBER: _ClassVar[int] RESOURCE_TYPE_FIELD_NUMBER: _ClassVar[int] + ORG_FIELD_NUMBER: _ClassVar[int] project: str resource_type: _matchable_resource_pb2.MatchableResource - def __init__(self, project: _Optional[str] = ..., resource_type: _Optional[_Union[_matchable_resource_pb2.MatchableResource, str]] = ...) -> None: ... + org: str + def __init__(self, project: _Optional[str] = ..., resource_type: _Optional[_Union[_matchable_resource_pb2.MatchableResource, str]] = ..., org: _Optional[str] = ...) -> None: ... class ProjectAttributesGetResponse(_message.Message): __slots__ = ["attributes"] @@ -38,12 +42,14 @@ class ProjectAttributesGetResponse(_message.Message): def __init__(self, attributes: _Optional[_Union[ProjectAttributes, _Mapping]] = ...) -> None: ... class ProjectAttributesDeleteRequest(_message.Message): - __slots__ = ["project", "resource_type"] + __slots__ = ["project", "resource_type", "org"] PROJECT_FIELD_NUMBER: _ClassVar[int] RESOURCE_TYPE_FIELD_NUMBER: _ClassVar[int] + ORG_FIELD_NUMBER: _ClassVar[int] project: str resource_type: _matchable_resource_pb2.MatchableResource - def __init__(self, project: _Optional[str] = ..., resource_type: _Optional[_Union[_matchable_resource_pb2.MatchableResource, str]] = ...) -> None: ... + org: str + def __init__(self, project: _Optional[str] = ..., resource_type: _Optional[_Union[_matchable_resource_pb2.MatchableResource, str]] = ..., org: _Optional[str] = ...) -> None: ... class ProjectAttributesDeleteResponse(_message.Message): __slots__ = [] diff --git a/flyteidl/gen/pb_python/flyteidl/admin/project_domain_attributes_pb2.py b/flyteidl/gen/pb_python/flyteidl/admin/project_domain_attributes_pb2.py index ff5c077221..3d80159af4 100644 --- a/flyteidl/gen/pb_python/flyteidl/admin/project_domain_attributes_pb2.py +++ b/flyteidl/gen/pb_python/flyteidl/admin/project_domain_attributes_pb2.py @@ -14,7 +14,7 @@ from flyteidl.admin import matchable_resource_pb2 as flyteidl_dot_admin_dot_matchable__resource__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n.flyteidl/admin/project_domain_attributes.proto\x12\x0e\x66lyteidl.admin\x1a\'flyteidl/admin/matchable_resource.proto\"\xa0\x01\n\x17ProjectDomainAttributes\x12\x18\n\x07project\x18\x01 \x01(\tR\x07project\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12S\n\x13matching_attributes\x18\x03 \x01(\x0b\x32\".flyteidl.admin.MatchingAttributesR\x12matchingAttributes\"o\n$ProjectDomainAttributesUpdateRequest\x12G\n\nattributes\x18\x01 \x01(\x0b\x32\'.flyteidl.admin.ProjectDomainAttributesR\nattributes\"\'\n%ProjectDomainAttributesUpdateResponse\"\x9d\x01\n!ProjectDomainAttributesGetRequest\x12\x18\n\x07project\x18\x01 \x01(\tR\x07project\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12\x46\n\rresource_type\x18\x03 \x01(\x0e\x32!.flyteidl.admin.MatchableResourceR\x0cresourceType\"m\n\"ProjectDomainAttributesGetResponse\x12G\n\nattributes\x18\x01 \x01(\x0b\x32\'.flyteidl.admin.ProjectDomainAttributesR\nattributes\"\xa0\x01\n$ProjectDomainAttributesDeleteRequest\x12\x18\n\x07project\x18\x01 \x01(\tR\x07project\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12\x46\n\rresource_type\x18\x03 \x01(\x0e\x32!.flyteidl.admin.MatchableResourceR\x0cresourceType\"\'\n%ProjectDomainAttributesDeleteResponseB\xc8\x01\n\x12\x63om.flyteidl.adminB\x1cProjectDomainAttributesProtoP\x01Z;github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin\xa2\x02\x03\x46\x41X\xaa\x02\x0e\x46lyteidl.Admin\xca\x02\x0e\x46lyteidl\\Admin\xe2\x02\x1a\x46lyteidl\\Admin\\GPBMetadata\xea\x02\x0f\x46lyteidl::Adminb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n.flyteidl/admin/project_domain_attributes.proto\x12\x0e\x66lyteidl.admin\x1a\'flyteidl/admin/matchable_resource.proto\"\xb2\x01\n\x17ProjectDomainAttributes\x12\x18\n\x07project\x18\x01 \x01(\tR\x07project\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12S\n\x13matching_attributes\x18\x03 \x01(\x0b\x32\".flyteidl.admin.MatchingAttributesR\x12matchingAttributes\x12\x10\n\x03org\x18\x04 \x01(\tR\x03org\"o\n$ProjectDomainAttributesUpdateRequest\x12G\n\nattributes\x18\x01 \x01(\x0b\x32\'.flyteidl.admin.ProjectDomainAttributesR\nattributes\"\'\n%ProjectDomainAttributesUpdateResponse\"\xaf\x01\n!ProjectDomainAttributesGetRequest\x12\x18\n\x07project\x18\x01 \x01(\tR\x07project\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12\x46\n\rresource_type\x18\x03 \x01(\x0e\x32!.flyteidl.admin.MatchableResourceR\x0cresourceType\x12\x10\n\x03org\x18\x04 \x01(\tR\x03org\"m\n\"ProjectDomainAttributesGetResponse\x12G\n\nattributes\x18\x01 \x01(\x0b\x32\'.flyteidl.admin.ProjectDomainAttributesR\nattributes\"\xb2\x01\n$ProjectDomainAttributesDeleteRequest\x12\x18\n\x07project\x18\x01 \x01(\tR\x07project\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12\x46\n\rresource_type\x18\x03 \x01(\x0e\x32!.flyteidl.admin.MatchableResourceR\x0cresourceType\x12\x10\n\x03org\x18\x04 \x01(\tR\x03org\"\'\n%ProjectDomainAttributesDeleteResponseB\xc8\x01\n\x12\x63om.flyteidl.adminB\x1cProjectDomainAttributesProtoP\x01Z;github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin\xa2\x02\x03\x46\x41X\xaa\x02\x0e\x46lyteidl.Admin\xca\x02\x0e\x46lyteidl\\Admin\xe2\x02\x1a\x46lyteidl\\Admin\\GPBMetadata\xea\x02\x0f\x46lyteidl::Adminb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -24,17 +24,17 @@ DESCRIPTOR._options = None DESCRIPTOR._serialized_options = b'\n\022com.flyteidl.adminB\034ProjectDomainAttributesProtoP\001Z;github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin\242\002\003FAX\252\002\016Flyteidl.Admin\312\002\016Flyteidl\\Admin\342\002\032Flyteidl\\Admin\\GPBMetadata\352\002\017Flyteidl::Admin' _globals['_PROJECTDOMAINATTRIBUTES']._serialized_start=108 - _globals['_PROJECTDOMAINATTRIBUTES']._serialized_end=268 - _globals['_PROJECTDOMAINATTRIBUTESUPDATEREQUEST']._serialized_start=270 - _globals['_PROJECTDOMAINATTRIBUTESUPDATEREQUEST']._serialized_end=381 - _globals['_PROJECTDOMAINATTRIBUTESUPDATERESPONSE']._serialized_start=383 - _globals['_PROJECTDOMAINATTRIBUTESUPDATERESPONSE']._serialized_end=422 - _globals['_PROJECTDOMAINATTRIBUTESGETREQUEST']._serialized_start=425 - _globals['_PROJECTDOMAINATTRIBUTESGETREQUEST']._serialized_end=582 - _globals['_PROJECTDOMAINATTRIBUTESGETRESPONSE']._serialized_start=584 - _globals['_PROJECTDOMAINATTRIBUTESGETRESPONSE']._serialized_end=693 - _globals['_PROJECTDOMAINATTRIBUTESDELETEREQUEST']._serialized_start=696 - _globals['_PROJECTDOMAINATTRIBUTESDELETEREQUEST']._serialized_end=856 - _globals['_PROJECTDOMAINATTRIBUTESDELETERESPONSE']._serialized_start=858 - _globals['_PROJECTDOMAINATTRIBUTESDELETERESPONSE']._serialized_end=897 + _globals['_PROJECTDOMAINATTRIBUTES']._serialized_end=286 + _globals['_PROJECTDOMAINATTRIBUTESUPDATEREQUEST']._serialized_start=288 + _globals['_PROJECTDOMAINATTRIBUTESUPDATEREQUEST']._serialized_end=399 + _globals['_PROJECTDOMAINATTRIBUTESUPDATERESPONSE']._serialized_start=401 + _globals['_PROJECTDOMAINATTRIBUTESUPDATERESPONSE']._serialized_end=440 + _globals['_PROJECTDOMAINATTRIBUTESGETREQUEST']._serialized_start=443 + _globals['_PROJECTDOMAINATTRIBUTESGETREQUEST']._serialized_end=618 + _globals['_PROJECTDOMAINATTRIBUTESGETRESPONSE']._serialized_start=620 + _globals['_PROJECTDOMAINATTRIBUTESGETRESPONSE']._serialized_end=729 + _globals['_PROJECTDOMAINATTRIBUTESDELETEREQUEST']._serialized_start=732 + _globals['_PROJECTDOMAINATTRIBUTESDELETEREQUEST']._serialized_end=910 + _globals['_PROJECTDOMAINATTRIBUTESDELETERESPONSE']._serialized_start=912 + _globals['_PROJECTDOMAINATTRIBUTESDELETERESPONSE']._serialized_end=951 # @@protoc_insertion_point(module_scope) diff --git a/flyteidl/gen/pb_python/flyteidl/admin/project_domain_attributes_pb2.pyi b/flyteidl/gen/pb_python/flyteidl/admin/project_domain_attributes_pb2.pyi index af8624ca21..40a7a38bc7 100644 --- a/flyteidl/gen/pb_python/flyteidl/admin/project_domain_attributes_pb2.pyi +++ b/flyteidl/gen/pb_python/flyteidl/admin/project_domain_attributes_pb2.pyi @@ -6,14 +6,16 @@ from typing import ClassVar as _ClassVar, Mapping as _Mapping, Optional as _Opti DESCRIPTOR: _descriptor.FileDescriptor class ProjectDomainAttributes(_message.Message): - __slots__ = ["project", "domain", "matching_attributes"] + __slots__ = ["project", "domain", "matching_attributes", "org"] PROJECT_FIELD_NUMBER: _ClassVar[int] DOMAIN_FIELD_NUMBER: _ClassVar[int] MATCHING_ATTRIBUTES_FIELD_NUMBER: _ClassVar[int] + ORG_FIELD_NUMBER: _ClassVar[int] project: str domain: str matching_attributes: _matchable_resource_pb2.MatchingAttributes - def __init__(self, project: _Optional[str] = ..., domain: _Optional[str] = ..., matching_attributes: _Optional[_Union[_matchable_resource_pb2.MatchingAttributes, _Mapping]] = ...) -> None: ... + org: str + def __init__(self, project: _Optional[str] = ..., domain: _Optional[str] = ..., matching_attributes: _Optional[_Union[_matchable_resource_pb2.MatchingAttributes, _Mapping]] = ..., org: _Optional[str] = ...) -> None: ... class ProjectDomainAttributesUpdateRequest(_message.Message): __slots__ = ["attributes"] @@ -26,14 +28,16 @@ class ProjectDomainAttributesUpdateResponse(_message.Message): def __init__(self) -> None: ... class ProjectDomainAttributesGetRequest(_message.Message): - __slots__ = ["project", "domain", "resource_type"] + __slots__ = ["project", "domain", "resource_type", "org"] PROJECT_FIELD_NUMBER: _ClassVar[int] DOMAIN_FIELD_NUMBER: _ClassVar[int] RESOURCE_TYPE_FIELD_NUMBER: _ClassVar[int] + ORG_FIELD_NUMBER: _ClassVar[int] project: str domain: str resource_type: _matchable_resource_pb2.MatchableResource - def __init__(self, project: _Optional[str] = ..., domain: _Optional[str] = ..., resource_type: _Optional[_Union[_matchable_resource_pb2.MatchableResource, str]] = ...) -> None: ... + org: str + def __init__(self, project: _Optional[str] = ..., domain: _Optional[str] = ..., resource_type: _Optional[_Union[_matchable_resource_pb2.MatchableResource, str]] = ..., org: _Optional[str] = ...) -> None: ... class ProjectDomainAttributesGetResponse(_message.Message): __slots__ = ["attributes"] @@ -42,14 +46,16 @@ class ProjectDomainAttributesGetResponse(_message.Message): def __init__(self, attributes: _Optional[_Union[ProjectDomainAttributes, _Mapping]] = ...) -> None: ... class ProjectDomainAttributesDeleteRequest(_message.Message): - __slots__ = ["project", "domain", "resource_type"] + __slots__ = ["project", "domain", "resource_type", "org"] PROJECT_FIELD_NUMBER: _ClassVar[int] DOMAIN_FIELD_NUMBER: _ClassVar[int] RESOURCE_TYPE_FIELD_NUMBER: _ClassVar[int] + ORG_FIELD_NUMBER: _ClassVar[int] project: str domain: str resource_type: _matchable_resource_pb2.MatchableResource - def __init__(self, project: _Optional[str] = ..., domain: _Optional[str] = ..., resource_type: _Optional[_Union[_matchable_resource_pb2.MatchableResource, str]] = ...) -> None: ... + org: str + def __init__(self, project: _Optional[str] = ..., domain: _Optional[str] = ..., resource_type: _Optional[_Union[_matchable_resource_pb2.MatchableResource, str]] = ..., org: _Optional[str] = ...) -> None: ... class ProjectDomainAttributesDeleteResponse(_message.Message): __slots__ = [] diff --git a/flyteidl/gen/pb_python/flyteidl/admin/project_pb2.py b/flyteidl/gen/pb_python/flyteidl/admin/project_pb2.py index ae321b092c..ddebf730f2 100644 --- a/flyteidl/gen/pb_python/flyteidl/admin/project_pb2.py +++ b/flyteidl/gen/pb_python/flyteidl/admin/project_pb2.py @@ -14,7 +14,7 @@ from flyteidl.admin import common_pb2 as flyteidl_dot_admin_dot_common__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1c\x66lyteidl/admin/project.proto\x12\x0e\x66lyteidl.admin\x1a\x1b\x66lyteidl/admin/common.proto\",\n\x06\x44omain\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\"\xad\x02\n\x07Project\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12\x30\n\x07\x64omains\x18\x03 \x03(\x0b\x32\x16.flyteidl.admin.DomainR\x07\x64omains\x12 \n\x0b\x64\x65scription\x18\x04 \x01(\tR\x0b\x64\x65scription\x12.\n\x06labels\x18\x05 \x01(\x0b\x32\x16.flyteidl.admin.LabelsR\x06labels\x12:\n\x05state\x18\x06 \x01(\x0e\x32$.flyteidl.admin.Project.ProjectStateR\x05state\">\n\x0cProjectState\x12\n\n\x06\x41\x43TIVE\x10\x00\x12\x0c\n\x08\x41RCHIVED\x10\x01\x12\x14\n\x10SYSTEM_GENERATED\x10\x02\"U\n\x08Projects\x12\x33\n\x08projects\x18\x01 \x03(\x0b\x32\x17.flyteidl.admin.ProjectR\x08projects\x12\x14\n\x05token\x18\x02 \x01(\tR\x05token\"\x89\x01\n\x12ProjectListRequest\x12\x14\n\x05limit\x18\x01 \x01(\rR\x05limit\x12\x14\n\x05token\x18\x02 \x01(\tR\x05token\x12\x18\n\x07\x66ilters\x18\x03 \x01(\tR\x07\x66ilters\x12-\n\x07sort_by\x18\x04 \x01(\x0b\x32\x14.flyteidl.admin.SortR\x06sortBy\"K\n\x16ProjectRegisterRequest\x12\x31\n\x07project\x18\x01 \x01(\x0b\x32\x17.flyteidl.admin.ProjectR\x07project\"\x19\n\x17ProjectRegisterResponse\"\x17\n\x15ProjectUpdateResponseB\xb8\x01\n\x12\x63om.flyteidl.adminB\x0cProjectProtoP\x01Z;github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin\xa2\x02\x03\x46\x41X\xaa\x02\x0e\x46lyteidl.Admin\xca\x02\x0e\x46lyteidl\\Admin\xe2\x02\x1a\x46lyteidl\\Admin\\GPBMetadata\xea\x02\x0f\x46lyteidl::Adminb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1c\x66lyteidl/admin/project.proto\x12\x0e\x66lyteidl.admin\x1a\x1b\x66lyteidl/admin/common.proto\",\n\x06\x44omain\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\"\xbf\x02\n\x07Project\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12\x30\n\x07\x64omains\x18\x03 \x03(\x0b\x32\x16.flyteidl.admin.DomainR\x07\x64omains\x12 \n\x0b\x64\x65scription\x18\x04 \x01(\tR\x0b\x64\x65scription\x12.\n\x06labels\x18\x05 \x01(\x0b\x32\x16.flyteidl.admin.LabelsR\x06labels\x12:\n\x05state\x18\x06 \x01(\x0e\x32$.flyteidl.admin.Project.ProjectStateR\x05state\x12\x10\n\x03org\x18\x07 \x01(\tR\x03org\">\n\x0cProjectState\x12\n\n\x06\x41\x43TIVE\x10\x00\x12\x0c\n\x08\x41RCHIVED\x10\x01\x12\x14\n\x10SYSTEM_GENERATED\x10\x02\"U\n\x08Projects\x12\x33\n\x08projects\x18\x01 \x03(\x0b\x32\x17.flyteidl.admin.ProjectR\x08projects\x12\x14\n\x05token\x18\x02 \x01(\tR\x05token\"\x89\x01\n\x12ProjectListRequest\x12\x14\n\x05limit\x18\x01 \x01(\rR\x05limit\x12\x14\n\x05token\x18\x02 \x01(\tR\x05token\x12\x18\n\x07\x66ilters\x18\x03 \x01(\tR\x07\x66ilters\x12-\n\x07sort_by\x18\x04 \x01(\x0b\x32\x14.flyteidl.admin.SortR\x06sortBy\"K\n\x16ProjectRegisterRequest\x12\x31\n\x07project\x18\x01 \x01(\x0b\x32\x17.flyteidl.admin.ProjectR\x07project\"\x19\n\x17ProjectRegisterResponse\"\x17\n\x15ProjectUpdateResponseB\xb8\x01\n\x12\x63om.flyteidl.adminB\x0cProjectProtoP\x01Z;github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin\xa2\x02\x03\x46\x41X\xaa\x02\x0e\x46lyteidl.Admin\xca\x02\x0e\x46lyteidl\\Admin\xe2\x02\x1a\x46lyteidl\\Admin\\GPBMetadata\xea\x02\x0f\x46lyteidl::Adminb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -26,17 +26,17 @@ _globals['_DOMAIN']._serialized_start=77 _globals['_DOMAIN']._serialized_end=121 _globals['_PROJECT']._serialized_start=124 - _globals['_PROJECT']._serialized_end=425 - _globals['_PROJECT_PROJECTSTATE']._serialized_start=363 - _globals['_PROJECT_PROJECTSTATE']._serialized_end=425 - _globals['_PROJECTS']._serialized_start=427 - _globals['_PROJECTS']._serialized_end=512 - _globals['_PROJECTLISTREQUEST']._serialized_start=515 - _globals['_PROJECTLISTREQUEST']._serialized_end=652 - _globals['_PROJECTREGISTERREQUEST']._serialized_start=654 - _globals['_PROJECTREGISTERREQUEST']._serialized_end=729 - _globals['_PROJECTREGISTERRESPONSE']._serialized_start=731 - _globals['_PROJECTREGISTERRESPONSE']._serialized_end=756 - _globals['_PROJECTUPDATERESPONSE']._serialized_start=758 - _globals['_PROJECTUPDATERESPONSE']._serialized_end=781 + _globals['_PROJECT']._serialized_end=443 + _globals['_PROJECT_PROJECTSTATE']._serialized_start=381 + _globals['_PROJECT_PROJECTSTATE']._serialized_end=443 + _globals['_PROJECTS']._serialized_start=445 + _globals['_PROJECTS']._serialized_end=530 + _globals['_PROJECTLISTREQUEST']._serialized_start=533 + _globals['_PROJECTLISTREQUEST']._serialized_end=670 + _globals['_PROJECTREGISTERREQUEST']._serialized_start=672 + _globals['_PROJECTREGISTERREQUEST']._serialized_end=747 + _globals['_PROJECTREGISTERRESPONSE']._serialized_start=749 + _globals['_PROJECTREGISTERRESPONSE']._serialized_end=774 + _globals['_PROJECTUPDATERESPONSE']._serialized_start=776 + _globals['_PROJECTUPDATERESPONSE']._serialized_end=799 # @@protoc_insertion_point(module_scope) diff --git a/flyteidl/gen/pb_python/flyteidl/admin/project_pb2.pyi b/flyteidl/gen/pb_python/flyteidl/admin/project_pb2.pyi index 33b5106c81..5353d66e1b 100644 --- a/flyteidl/gen/pb_python/flyteidl/admin/project_pb2.pyi +++ b/flyteidl/gen/pb_python/flyteidl/admin/project_pb2.pyi @@ -16,7 +16,7 @@ class Domain(_message.Message): def __init__(self, id: _Optional[str] = ..., name: _Optional[str] = ...) -> None: ... class Project(_message.Message): - __slots__ = ["id", "name", "domains", "description", "labels", "state"] + __slots__ = ["id", "name", "domains", "description", "labels", "state", "org"] class ProjectState(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): __slots__ = [] ACTIVE: _ClassVar[Project.ProjectState] @@ -31,13 +31,15 @@ class Project(_message.Message): DESCRIPTION_FIELD_NUMBER: _ClassVar[int] LABELS_FIELD_NUMBER: _ClassVar[int] STATE_FIELD_NUMBER: _ClassVar[int] + ORG_FIELD_NUMBER: _ClassVar[int] id: str name: str domains: _containers.RepeatedCompositeFieldContainer[Domain] description: str labels: _common_pb2.Labels state: Project.ProjectState - def __init__(self, id: _Optional[str] = ..., name: _Optional[str] = ..., domains: _Optional[_Iterable[_Union[Domain, _Mapping]]] = ..., description: _Optional[str] = ..., labels: _Optional[_Union[_common_pb2.Labels, _Mapping]] = ..., state: _Optional[_Union[Project.ProjectState, str]] = ...) -> None: ... + org: str + def __init__(self, id: _Optional[str] = ..., name: _Optional[str] = ..., domains: _Optional[_Iterable[_Union[Domain, _Mapping]]] = ..., description: _Optional[str] = ..., labels: _Optional[_Union[_common_pb2.Labels, _Mapping]] = ..., state: _Optional[_Union[Project.ProjectState, str]] = ..., org: _Optional[str] = ...) -> None: ... class Projects(_message.Message): __slots__ = ["projects", "token"] diff --git a/flyteidl/gen/pb_python/flyteidl/admin/workflow_attributes_pb2.py b/flyteidl/gen/pb_python/flyteidl/admin/workflow_attributes_pb2.py index a277fac588..1a8ee5c48e 100644 --- a/flyteidl/gen/pb_python/flyteidl/admin/workflow_attributes_pb2.py +++ b/flyteidl/gen/pb_python/flyteidl/admin/workflow_attributes_pb2.py @@ -14,7 +14,7 @@ from flyteidl.admin import matchable_resource_pb2 as flyteidl_dot_admin_dot_matchable__resource__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n(flyteidl/admin/workflow_attributes.proto\x12\x0e\x66lyteidl.admin\x1a\'flyteidl/admin/matchable_resource.proto\"\xb7\x01\n\x12WorkflowAttributes\x12\x18\n\x07project\x18\x01 \x01(\tR\x07project\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12\x1a\n\x08workflow\x18\x03 \x01(\tR\x08workflow\x12S\n\x13matching_attributes\x18\x04 \x01(\x0b\x32\".flyteidl.admin.MatchingAttributesR\x12matchingAttributes\"e\n\x1fWorkflowAttributesUpdateRequest\x12\x42\n\nattributes\x18\x01 \x01(\x0b\x32\".flyteidl.admin.WorkflowAttributesR\nattributes\"\"\n WorkflowAttributesUpdateResponse\"\xb4\x01\n\x1cWorkflowAttributesGetRequest\x12\x18\n\x07project\x18\x01 \x01(\tR\x07project\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12\x1a\n\x08workflow\x18\x03 \x01(\tR\x08workflow\x12\x46\n\rresource_type\x18\x04 \x01(\x0e\x32!.flyteidl.admin.MatchableResourceR\x0cresourceType\"c\n\x1dWorkflowAttributesGetResponse\x12\x42\n\nattributes\x18\x01 \x01(\x0b\x32\".flyteidl.admin.WorkflowAttributesR\nattributes\"\xb7\x01\n\x1fWorkflowAttributesDeleteRequest\x12\x18\n\x07project\x18\x01 \x01(\tR\x07project\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12\x1a\n\x08workflow\x18\x03 \x01(\tR\x08workflow\x12\x46\n\rresource_type\x18\x04 \x01(\x0e\x32!.flyteidl.admin.MatchableResourceR\x0cresourceType\"\"\n WorkflowAttributesDeleteResponseB\xc3\x01\n\x12\x63om.flyteidl.adminB\x17WorkflowAttributesProtoP\x01Z;github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin\xa2\x02\x03\x46\x41X\xaa\x02\x0e\x46lyteidl.Admin\xca\x02\x0e\x46lyteidl\\Admin\xe2\x02\x1a\x46lyteidl\\Admin\\GPBMetadata\xea\x02\x0f\x46lyteidl::Adminb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n(flyteidl/admin/workflow_attributes.proto\x12\x0e\x66lyteidl.admin\x1a\'flyteidl/admin/matchable_resource.proto\"\xc9\x01\n\x12WorkflowAttributes\x12\x18\n\x07project\x18\x01 \x01(\tR\x07project\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12\x1a\n\x08workflow\x18\x03 \x01(\tR\x08workflow\x12S\n\x13matching_attributes\x18\x04 \x01(\x0b\x32\".flyteidl.admin.MatchingAttributesR\x12matchingAttributes\x12\x10\n\x03org\x18\x05 \x01(\tR\x03org\"e\n\x1fWorkflowAttributesUpdateRequest\x12\x42\n\nattributes\x18\x01 \x01(\x0b\x32\".flyteidl.admin.WorkflowAttributesR\nattributes\"\"\n WorkflowAttributesUpdateResponse\"\xc6\x01\n\x1cWorkflowAttributesGetRequest\x12\x18\n\x07project\x18\x01 \x01(\tR\x07project\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12\x1a\n\x08workflow\x18\x03 \x01(\tR\x08workflow\x12\x46\n\rresource_type\x18\x04 \x01(\x0e\x32!.flyteidl.admin.MatchableResourceR\x0cresourceType\x12\x10\n\x03org\x18\x05 \x01(\tR\x03org\"c\n\x1dWorkflowAttributesGetResponse\x12\x42\n\nattributes\x18\x01 \x01(\x0b\x32\".flyteidl.admin.WorkflowAttributesR\nattributes\"\xc9\x01\n\x1fWorkflowAttributesDeleteRequest\x12\x18\n\x07project\x18\x01 \x01(\tR\x07project\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12\x1a\n\x08workflow\x18\x03 \x01(\tR\x08workflow\x12\x46\n\rresource_type\x18\x04 \x01(\x0e\x32!.flyteidl.admin.MatchableResourceR\x0cresourceType\x12\x10\n\x03org\x18\x05 \x01(\tR\x03org\"\"\n WorkflowAttributesDeleteResponseB\xc3\x01\n\x12\x63om.flyteidl.adminB\x17WorkflowAttributesProtoP\x01Z;github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin\xa2\x02\x03\x46\x41X\xaa\x02\x0e\x46lyteidl.Admin\xca\x02\x0e\x46lyteidl\\Admin\xe2\x02\x1a\x46lyteidl\\Admin\\GPBMetadata\xea\x02\x0f\x46lyteidl::Adminb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -24,17 +24,17 @@ DESCRIPTOR._options = None DESCRIPTOR._serialized_options = b'\n\022com.flyteidl.adminB\027WorkflowAttributesProtoP\001Z;github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin\242\002\003FAX\252\002\016Flyteidl.Admin\312\002\016Flyteidl\\Admin\342\002\032Flyteidl\\Admin\\GPBMetadata\352\002\017Flyteidl::Admin' _globals['_WORKFLOWATTRIBUTES']._serialized_start=102 - _globals['_WORKFLOWATTRIBUTES']._serialized_end=285 - _globals['_WORKFLOWATTRIBUTESUPDATEREQUEST']._serialized_start=287 - _globals['_WORKFLOWATTRIBUTESUPDATEREQUEST']._serialized_end=388 - _globals['_WORKFLOWATTRIBUTESUPDATERESPONSE']._serialized_start=390 - _globals['_WORKFLOWATTRIBUTESUPDATERESPONSE']._serialized_end=424 - _globals['_WORKFLOWATTRIBUTESGETREQUEST']._serialized_start=427 - _globals['_WORKFLOWATTRIBUTESGETREQUEST']._serialized_end=607 - _globals['_WORKFLOWATTRIBUTESGETRESPONSE']._serialized_start=609 - _globals['_WORKFLOWATTRIBUTESGETRESPONSE']._serialized_end=708 - _globals['_WORKFLOWATTRIBUTESDELETEREQUEST']._serialized_start=711 - _globals['_WORKFLOWATTRIBUTESDELETEREQUEST']._serialized_end=894 - _globals['_WORKFLOWATTRIBUTESDELETERESPONSE']._serialized_start=896 - _globals['_WORKFLOWATTRIBUTESDELETERESPONSE']._serialized_end=930 + _globals['_WORKFLOWATTRIBUTES']._serialized_end=303 + _globals['_WORKFLOWATTRIBUTESUPDATEREQUEST']._serialized_start=305 + _globals['_WORKFLOWATTRIBUTESUPDATEREQUEST']._serialized_end=406 + _globals['_WORKFLOWATTRIBUTESUPDATERESPONSE']._serialized_start=408 + _globals['_WORKFLOWATTRIBUTESUPDATERESPONSE']._serialized_end=442 + _globals['_WORKFLOWATTRIBUTESGETREQUEST']._serialized_start=445 + _globals['_WORKFLOWATTRIBUTESGETREQUEST']._serialized_end=643 + _globals['_WORKFLOWATTRIBUTESGETRESPONSE']._serialized_start=645 + _globals['_WORKFLOWATTRIBUTESGETRESPONSE']._serialized_end=744 + _globals['_WORKFLOWATTRIBUTESDELETEREQUEST']._serialized_start=747 + _globals['_WORKFLOWATTRIBUTESDELETEREQUEST']._serialized_end=948 + _globals['_WORKFLOWATTRIBUTESDELETERESPONSE']._serialized_start=950 + _globals['_WORKFLOWATTRIBUTESDELETERESPONSE']._serialized_end=984 # @@protoc_insertion_point(module_scope) diff --git a/flyteidl/gen/pb_python/flyteidl/admin/workflow_attributes_pb2.pyi b/flyteidl/gen/pb_python/flyteidl/admin/workflow_attributes_pb2.pyi index 67b040a36d..57c7d80c80 100644 --- a/flyteidl/gen/pb_python/flyteidl/admin/workflow_attributes_pb2.pyi +++ b/flyteidl/gen/pb_python/flyteidl/admin/workflow_attributes_pb2.pyi @@ -6,16 +6,18 @@ from typing import ClassVar as _ClassVar, Mapping as _Mapping, Optional as _Opti DESCRIPTOR: _descriptor.FileDescriptor class WorkflowAttributes(_message.Message): - __slots__ = ["project", "domain", "workflow", "matching_attributes"] + __slots__ = ["project", "domain", "workflow", "matching_attributes", "org"] PROJECT_FIELD_NUMBER: _ClassVar[int] DOMAIN_FIELD_NUMBER: _ClassVar[int] WORKFLOW_FIELD_NUMBER: _ClassVar[int] MATCHING_ATTRIBUTES_FIELD_NUMBER: _ClassVar[int] + ORG_FIELD_NUMBER: _ClassVar[int] project: str domain: str workflow: str matching_attributes: _matchable_resource_pb2.MatchingAttributes - def __init__(self, project: _Optional[str] = ..., domain: _Optional[str] = ..., workflow: _Optional[str] = ..., matching_attributes: _Optional[_Union[_matchable_resource_pb2.MatchingAttributes, _Mapping]] = ...) -> None: ... + org: str + def __init__(self, project: _Optional[str] = ..., domain: _Optional[str] = ..., workflow: _Optional[str] = ..., matching_attributes: _Optional[_Union[_matchable_resource_pb2.MatchingAttributes, _Mapping]] = ..., org: _Optional[str] = ...) -> None: ... class WorkflowAttributesUpdateRequest(_message.Message): __slots__ = ["attributes"] @@ -28,16 +30,18 @@ class WorkflowAttributesUpdateResponse(_message.Message): def __init__(self) -> None: ... class WorkflowAttributesGetRequest(_message.Message): - __slots__ = ["project", "domain", "workflow", "resource_type"] + __slots__ = ["project", "domain", "workflow", "resource_type", "org"] PROJECT_FIELD_NUMBER: _ClassVar[int] DOMAIN_FIELD_NUMBER: _ClassVar[int] WORKFLOW_FIELD_NUMBER: _ClassVar[int] RESOURCE_TYPE_FIELD_NUMBER: _ClassVar[int] + ORG_FIELD_NUMBER: _ClassVar[int] project: str domain: str workflow: str resource_type: _matchable_resource_pb2.MatchableResource - def __init__(self, project: _Optional[str] = ..., domain: _Optional[str] = ..., workflow: _Optional[str] = ..., resource_type: _Optional[_Union[_matchable_resource_pb2.MatchableResource, str]] = ...) -> None: ... + org: str + def __init__(self, project: _Optional[str] = ..., domain: _Optional[str] = ..., workflow: _Optional[str] = ..., resource_type: _Optional[_Union[_matchable_resource_pb2.MatchableResource, str]] = ..., org: _Optional[str] = ...) -> None: ... class WorkflowAttributesGetResponse(_message.Message): __slots__ = ["attributes"] @@ -46,16 +50,18 @@ class WorkflowAttributesGetResponse(_message.Message): def __init__(self, attributes: _Optional[_Union[WorkflowAttributes, _Mapping]] = ...) -> None: ... class WorkflowAttributesDeleteRequest(_message.Message): - __slots__ = ["project", "domain", "workflow", "resource_type"] + __slots__ = ["project", "domain", "workflow", "resource_type", "org"] PROJECT_FIELD_NUMBER: _ClassVar[int] DOMAIN_FIELD_NUMBER: _ClassVar[int] WORKFLOW_FIELD_NUMBER: _ClassVar[int] RESOURCE_TYPE_FIELD_NUMBER: _ClassVar[int] + ORG_FIELD_NUMBER: _ClassVar[int] project: str domain: str workflow: str resource_type: _matchable_resource_pb2.MatchableResource - def __init__(self, project: _Optional[str] = ..., domain: _Optional[str] = ..., workflow: _Optional[str] = ..., resource_type: _Optional[_Union[_matchable_resource_pb2.MatchableResource, str]] = ...) -> None: ... + org: str + def __init__(self, project: _Optional[str] = ..., domain: _Optional[str] = ..., workflow: _Optional[str] = ..., resource_type: _Optional[_Union[_matchable_resource_pb2.MatchableResource, str]] = ..., org: _Optional[str] = ...) -> None: ... class WorkflowAttributesDeleteResponse(_message.Message): __slots__ = [] diff --git a/flyteidl/gen/pb_python/flyteidl/core/identifier_pb2.py b/flyteidl/gen/pb_python/flyteidl/core/identifier_pb2.py index bcb507c1cb..5068f3edb4 100644 --- a/flyteidl/gen/pb_python/flyteidl/core/identifier_pb2.py +++ b/flyteidl/gen/pb_python/flyteidl/core/identifier_pb2.py @@ -13,7 +13,7 @@ -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1e\x66lyteidl/core/identifier.proto\x12\rflyteidl.core\"\xae\x01\n\nIdentifier\x12@\n\rresource_type\x18\x01 \x01(\x0e\x32\x1b.flyteidl.core.ResourceTypeR\x0cresourceType\x12\x18\n\x07project\x18\x02 \x01(\tR\x07project\x12\x16\n\x06\x64omain\x18\x03 \x01(\tR\x06\x64omain\x12\x12\n\x04name\x18\x04 \x01(\tR\x04name\x12\x18\n\x07version\x18\x05 \x01(\tR\x07version\"c\n\x1bWorkflowExecutionIdentifier\x12\x18\n\x07project\x18\x01 \x01(\tR\x07project\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12\x12\n\x04name\x18\x04 \x01(\tR\x04name\"\x81\x01\n\x17NodeExecutionIdentifier\x12\x17\n\x07node_id\x18\x01 \x01(\tR\x06nodeId\x12M\n\x0c\x65xecution_id\x18\x02 \x01(\x0b\x32*.flyteidl.core.WorkflowExecutionIdentifierR\x0b\x65xecutionId\"\xc6\x01\n\x17TaskExecutionIdentifier\x12\x32\n\x07task_id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.IdentifierR\x06taskId\x12R\n\x11node_execution_id\x18\x02 \x01(\x0b\x32&.flyteidl.core.NodeExecutionIdentifierR\x0fnodeExecutionId\x12#\n\rretry_attempt\x18\x03 \x01(\rR\x0cretryAttempt\"~\n\x10SignalIdentifier\x12\x1b\n\tsignal_id\x18\x01 \x01(\tR\x08signalId\x12M\n\x0c\x65xecution_id\x18\x02 \x01(\x0b\x32*.flyteidl.core.WorkflowExecutionIdentifierR\x0b\x65xecutionId*U\n\x0cResourceType\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x08\n\x04TASK\x10\x01\x12\x0c\n\x08WORKFLOW\x10\x02\x12\x0f\n\x0bLAUNCH_PLAN\x10\x03\x12\x0b\n\x07\x44\x41TASET\x10\x04\x42\xb5\x01\n\x11\x63om.flyteidl.coreB\x0fIdentifierProtoP\x01Z:github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/core\xa2\x02\x03\x46\x43X\xaa\x02\rFlyteidl.Core\xca\x02\rFlyteidl\\Core\xe2\x02\x19\x46lyteidl\\Core\\GPBMetadata\xea\x02\x0e\x46lyteidl::Coreb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1e\x66lyteidl/core/identifier.proto\x12\rflyteidl.core\"\xc0\x01\n\nIdentifier\x12@\n\rresource_type\x18\x01 \x01(\x0e\x32\x1b.flyteidl.core.ResourceTypeR\x0cresourceType\x12\x18\n\x07project\x18\x02 \x01(\tR\x07project\x12\x16\n\x06\x64omain\x18\x03 \x01(\tR\x06\x64omain\x12\x12\n\x04name\x18\x04 \x01(\tR\x04name\x12\x18\n\x07version\x18\x05 \x01(\tR\x07version\x12\x10\n\x03org\x18\x06 \x01(\tR\x03org\"u\n\x1bWorkflowExecutionIdentifier\x12\x18\n\x07project\x18\x01 \x01(\tR\x07project\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12\x12\n\x04name\x18\x04 \x01(\tR\x04name\x12\x10\n\x03org\x18\x05 \x01(\tR\x03org\"\x81\x01\n\x17NodeExecutionIdentifier\x12\x17\n\x07node_id\x18\x01 \x01(\tR\x06nodeId\x12M\n\x0c\x65xecution_id\x18\x02 \x01(\x0b\x32*.flyteidl.core.WorkflowExecutionIdentifierR\x0b\x65xecutionId\"\xc6\x01\n\x17TaskExecutionIdentifier\x12\x32\n\x07task_id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.IdentifierR\x06taskId\x12R\n\x11node_execution_id\x18\x02 \x01(\x0b\x32&.flyteidl.core.NodeExecutionIdentifierR\x0fnodeExecutionId\x12#\n\rretry_attempt\x18\x03 \x01(\rR\x0cretryAttempt\"~\n\x10SignalIdentifier\x12\x1b\n\tsignal_id\x18\x01 \x01(\tR\x08signalId\x12M\n\x0c\x65xecution_id\x18\x02 \x01(\x0b\x32*.flyteidl.core.WorkflowExecutionIdentifierR\x0b\x65xecutionId*U\n\x0cResourceType\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x08\n\x04TASK\x10\x01\x12\x0c\n\x08WORKFLOW\x10\x02\x12\x0f\n\x0bLAUNCH_PLAN\x10\x03\x12\x0b\n\x07\x44\x41TASET\x10\x04\x42\xb5\x01\n\x11\x63om.flyteidl.coreB\x0fIdentifierProtoP\x01Z:github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/core\xa2\x02\x03\x46\x43X\xaa\x02\rFlyteidl.Core\xca\x02\rFlyteidl\\Core\xe2\x02\x19\x46lyteidl\\Core\\GPBMetadata\xea\x02\x0e\x46lyteidl::Coreb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -22,16 +22,16 @@ DESCRIPTOR._options = None DESCRIPTOR._serialized_options = b'\n\021com.flyteidl.coreB\017IdentifierProtoP\001Z:github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/core\242\002\003FCX\252\002\rFlyteidl.Core\312\002\rFlyteidl\\Core\342\002\031Flyteidl\\Core\\GPBMetadata\352\002\016Flyteidl::Core' - _globals['_RESOURCETYPE']._serialized_start=788 - _globals['_RESOURCETYPE']._serialized_end=873 + _globals['_RESOURCETYPE']._serialized_start=824 + _globals['_RESOURCETYPE']._serialized_end=909 _globals['_IDENTIFIER']._serialized_start=50 - _globals['_IDENTIFIER']._serialized_end=224 - _globals['_WORKFLOWEXECUTIONIDENTIFIER']._serialized_start=226 - _globals['_WORKFLOWEXECUTIONIDENTIFIER']._serialized_end=325 - _globals['_NODEEXECUTIONIDENTIFIER']._serialized_start=328 - _globals['_NODEEXECUTIONIDENTIFIER']._serialized_end=457 - _globals['_TASKEXECUTIONIDENTIFIER']._serialized_start=460 - _globals['_TASKEXECUTIONIDENTIFIER']._serialized_end=658 - _globals['_SIGNALIDENTIFIER']._serialized_start=660 - _globals['_SIGNALIDENTIFIER']._serialized_end=786 + _globals['_IDENTIFIER']._serialized_end=242 + _globals['_WORKFLOWEXECUTIONIDENTIFIER']._serialized_start=244 + _globals['_WORKFLOWEXECUTIONIDENTIFIER']._serialized_end=361 + _globals['_NODEEXECUTIONIDENTIFIER']._serialized_start=364 + _globals['_NODEEXECUTIONIDENTIFIER']._serialized_end=493 + _globals['_TASKEXECUTIONIDENTIFIER']._serialized_start=496 + _globals['_TASKEXECUTIONIDENTIFIER']._serialized_end=694 + _globals['_SIGNALIDENTIFIER']._serialized_start=696 + _globals['_SIGNALIDENTIFIER']._serialized_end=822 # @@protoc_insertion_point(module_scope) diff --git a/flyteidl/gen/pb_python/flyteidl/core/identifier_pb2.pyi b/flyteidl/gen/pb_python/flyteidl/core/identifier_pb2.pyi index 7adea46343..5d3857195e 100644 --- a/flyteidl/gen/pb_python/flyteidl/core/identifier_pb2.pyi +++ b/flyteidl/gen/pb_python/flyteidl/core/identifier_pb2.pyi @@ -19,28 +19,32 @@ LAUNCH_PLAN: ResourceType DATASET: ResourceType class Identifier(_message.Message): - __slots__ = ["resource_type", "project", "domain", "name", "version"] + __slots__ = ["resource_type", "project", "domain", "name", "version", "org"] RESOURCE_TYPE_FIELD_NUMBER: _ClassVar[int] PROJECT_FIELD_NUMBER: _ClassVar[int] DOMAIN_FIELD_NUMBER: _ClassVar[int] NAME_FIELD_NUMBER: _ClassVar[int] VERSION_FIELD_NUMBER: _ClassVar[int] + ORG_FIELD_NUMBER: _ClassVar[int] resource_type: ResourceType project: str domain: str name: str version: str - def __init__(self, resource_type: _Optional[_Union[ResourceType, str]] = ..., project: _Optional[str] = ..., domain: _Optional[str] = ..., name: _Optional[str] = ..., version: _Optional[str] = ...) -> None: ... + org: str + def __init__(self, resource_type: _Optional[_Union[ResourceType, str]] = ..., project: _Optional[str] = ..., domain: _Optional[str] = ..., name: _Optional[str] = ..., version: _Optional[str] = ..., org: _Optional[str] = ...) -> None: ... class WorkflowExecutionIdentifier(_message.Message): - __slots__ = ["project", "domain", "name"] + __slots__ = ["project", "domain", "name", "org"] PROJECT_FIELD_NUMBER: _ClassVar[int] DOMAIN_FIELD_NUMBER: _ClassVar[int] NAME_FIELD_NUMBER: _ClassVar[int] + ORG_FIELD_NUMBER: _ClassVar[int] project: str domain: str name: str - def __init__(self, project: _Optional[str] = ..., domain: _Optional[str] = ..., name: _Optional[str] = ...) -> None: ... + org: str + def __init__(self, project: _Optional[str] = ..., domain: _Optional[str] = ..., name: _Optional[str] = ..., org: _Optional[str] = ...) -> None: ... class NodeExecutionIdentifier(_message.Message): __slots__ = ["node_id", "execution_id"] diff --git a/flyteidl/gen/pb_python/flyteidl/datacatalog/datacatalog_pb2.py b/flyteidl/gen/pb_python/flyteidl/datacatalog/datacatalog_pb2.py index 1de3b8a96e..c5699b3c85 100644 --- a/flyteidl/gen/pb_python/flyteidl/datacatalog/datacatalog_pb2.py +++ b/flyteidl/gen/pb_python/flyteidl/datacatalog/datacatalog_pb2.py @@ -16,7 +16,7 @@ from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n&flyteidl/datacatalog/datacatalog.proto\x12\x0b\x64\x61tacatalog\x1a\x1c\x66lyteidl/core/literals.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"F\n\x14\x43reateDatasetRequest\x12.\n\x07\x64\x61taset\x18\x01 \x01(\x0b\x32\x14.datacatalog.DatasetR\x07\x64\x61taset\"\x17\n\x15\x43reateDatasetResponse\"E\n\x11GetDatasetRequest\x12\x30\n\x07\x64\x61taset\x18\x01 \x01(\x0b\x32\x16.datacatalog.DatasetIDR\x07\x64\x61taset\"D\n\x12GetDatasetResponse\x12.\n\x07\x64\x61taset\x18\x01 \x01(\x0b\x32\x14.datacatalog.DatasetR\x07\x64\x61taset\"\x96\x01\n\x12GetArtifactRequest\x12\x30\n\x07\x64\x61taset\x18\x01 \x01(\x0b\x32\x16.datacatalog.DatasetIDR\x07\x64\x61taset\x12!\n\x0b\x61rtifact_id\x18\x02 \x01(\tH\x00R\nartifactId\x12\x1b\n\x08tag_name\x18\x03 \x01(\tH\x00R\x07tagNameB\x0e\n\x0cquery_handle\"H\n\x13GetArtifactResponse\x12\x31\n\x08\x61rtifact\x18\x01 \x01(\x0b\x32\x15.datacatalog.ArtifactR\x08\x61rtifact\"J\n\x15\x43reateArtifactRequest\x12\x31\n\x08\x61rtifact\x18\x01 \x01(\x0b\x32\x15.datacatalog.ArtifactR\x08\x61rtifact\"\x18\n\x16\x43reateArtifactResponse\"3\n\rAddTagRequest\x12\"\n\x03tag\x18\x01 \x01(\x0b\x32\x10.datacatalog.TagR\x03tag\"\x10\n\x0e\x41\x64\x64TagResponse\"\xbf\x01\n\x14ListArtifactsRequest\x12\x30\n\x07\x64\x61taset\x18\x01 \x01(\x0b\x32\x16.datacatalog.DatasetIDR\x07\x64\x61taset\x12\x35\n\x06\x66ilter\x18\x02 \x01(\x0b\x32\x1d.datacatalog.FilterExpressionR\x06\x66ilter\x12>\n\npagination\x18\x03 \x01(\x0b\x32\x1e.datacatalog.PaginationOptionsR\npagination\"k\n\x15ListArtifactsResponse\x12\x33\n\tartifacts\x18\x01 \x03(\x0b\x32\x15.datacatalog.ArtifactR\tartifacts\x12\x1d\n\nnext_token\x18\x02 \x01(\tR\tnextToken\"\x8c\x01\n\x13ListDatasetsRequest\x12\x35\n\x06\x66ilter\x18\x01 \x01(\x0b\x32\x1d.datacatalog.FilterExpressionR\x06\x66ilter\x12>\n\npagination\x18\x02 \x01(\x0b\x32\x1e.datacatalog.PaginationOptionsR\npagination\"g\n\x14ListDatasetsResponse\x12\x30\n\x08\x64\x61tasets\x18\x01 \x03(\x0b\x32\x14.datacatalog.DatasetR\x08\x64\x61tasets\x12\x1d\n\nnext_token\x18\x02 \x01(\tR\tnextToken\"\xfb\x01\n\x15UpdateArtifactRequest\x12\x30\n\x07\x64\x61taset\x18\x01 \x01(\x0b\x32\x16.datacatalog.DatasetIDR\x07\x64\x61taset\x12!\n\x0b\x61rtifact_id\x18\x02 \x01(\tH\x00R\nartifactId\x12\x1b\n\x08tag_name\x18\x03 \x01(\tH\x00R\x07tagName\x12-\n\x04\x64\x61ta\x18\x04 \x03(\x0b\x32\x19.datacatalog.ArtifactDataR\x04\x64\x61ta\x12\x31\n\x08metadata\x18\x05 \x01(\x0b\x32\x15.datacatalog.MetadataR\x08metadataB\x0e\n\x0cquery_handle\"9\n\x16UpdateArtifactResponse\x12\x1f\n\x0b\x61rtifact_id\x18\x01 \x01(\tR\nartifactId\"a\n\rReservationID\x12\x35\n\ndataset_id\x18\x01 \x01(\x0b\x32\x16.datacatalog.DatasetIDR\tdatasetId\x12\x19\n\x08tag_name\x18\x02 \x01(\tR\x07tagName\"\xc7\x01\n\x1dGetOrExtendReservationRequest\x12\x41\n\x0ereservation_id\x18\x01 \x01(\x0b\x32\x1a.datacatalog.ReservationIDR\rreservationId\x12\x19\n\x08owner_id\x18\x02 \x01(\tR\x07ownerId\x12H\n\x12heartbeat_interval\x18\x03 \x01(\x0b\x32\x19.google.protobuf.DurationR\x11heartbeatInterval\"\xa3\x02\n\x0bReservation\x12\x41\n\x0ereservation_id\x18\x01 \x01(\x0b\x32\x1a.datacatalog.ReservationIDR\rreservationId\x12\x19\n\x08owner_id\x18\x02 \x01(\tR\x07ownerId\x12H\n\x12heartbeat_interval\x18\x03 \x01(\x0b\x32\x19.google.protobuf.DurationR\x11heartbeatInterval\x12\x39\n\nexpires_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\texpiresAt\x12\x31\n\x08metadata\x18\x06 \x01(\x0b\x32\x15.datacatalog.MetadataR\x08metadata\"\\\n\x1eGetOrExtendReservationResponse\x12:\n\x0breservation\x18\x01 \x01(\x0b\x32\x18.datacatalog.ReservationR\x0breservation\"y\n\x19ReleaseReservationRequest\x12\x41\n\x0ereservation_id\x18\x01 \x01(\x0b\x32\x1a.datacatalog.ReservationIDR\rreservationId\x12\x19\n\x08owner_id\x18\x02 \x01(\tR\x07ownerId\"\x1c\n\x1aReleaseReservationResponse\"\x8a\x01\n\x07\x44\x61taset\x12&\n\x02id\x18\x01 \x01(\x0b\x32\x16.datacatalog.DatasetIDR\x02id\x12\x31\n\x08metadata\x18\x02 \x01(\x0b\x32\x15.datacatalog.MetadataR\x08metadata\x12$\n\rpartitionKeys\x18\x03 \x03(\tR\rpartitionKeys\"3\n\tPartition\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value\"\x7f\n\tDatasetID\x12\x18\n\x07project\x18\x01 \x01(\tR\x07project\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12\x16\n\x06\x64omain\x18\x03 \x01(\tR\x06\x64omain\x12\x18\n\x07version\x18\x04 \x01(\tR\x07version\x12\x12\n\x04UUID\x18\x05 \x01(\tR\x04UUID\"\xc7\x02\n\x08\x41rtifact\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x30\n\x07\x64\x61taset\x18\x02 \x01(\x0b\x32\x16.datacatalog.DatasetIDR\x07\x64\x61taset\x12-\n\x04\x64\x61ta\x18\x03 \x03(\x0b\x32\x19.datacatalog.ArtifactDataR\x04\x64\x61ta\x12\x31\n\x08metadata\x18\x04 \x01(\x0b\x32\x15.datacatalog.MetadataR\x08metadata\x12\x36\n\npartitions\x18\x05 \x03(\x0b\x32\x16.datacatalog.PartitionR\npartitions\x12$\n\x04tags\x18\x06 \x03(\x0b\x32\x10.datacatalog.TagR\x04tags\x12\x39\n\ncreated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\"P\n\x0c\x41rtifactData\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12,\n\x05value\x18\x02 \x01(\x0b\x32\x16.flyteidl.core.LiteralR\x05value\"l\n\x03Tag\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x1f\n\x0b\x61rtifact_id\x18\x02 \x01(\tR\nartifactId\x12\x30\n\x07\x64\x61taset\x18\x03 \x01(\x0b\x32\x16.datacatalog.DatasetIDR\x07\x64\x61taset\"\x81\x01\n\x08Metadata\x12:\n\x07key_map\x18\x01 \x03(\x0b\x32!.datacatalog.Metadata.KeyMapEntryR\x06keyMap\x1a\x39\n\x0bKeyMapEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"O\n\x10\x46ilterExpression\x12;\n\x07\x66ilters\x18\x01 \x03(\x0b\x32!.datacatalog.SinglePropertyFilterR\x07\x66ilters\"\xce\x03\n\x14SinglePropertyFilter\x12?\n\ntag_filter\x18\x01 \x01(\x0b\x32\x1e.datacatalog.TagPropertyFilterH\x00R\ttagFilter\x12Q\n\x10partition_filter\x18\x02 \x01(\x0b\x32$.datacatalog.PartitionPropertyFilterH\x00R\x0fpartitionFilter\x12N\n\x0f\x61rtifact_filter\x18\x03 \x01(\x0b\x32#.datacatalog.ArtifactPropertyFilterH\x00R\x0e\x61rtifactFilter\x12K\n\x0e\x64\x61taset_filter\x18\x04 \x01(\x0b\x32\".datacatalog.DatasetPropertyFilterH\x00R\rdatasetFilter\x12P\n\x08operator\x18\n \x01(\x0e\x32\x34.datacatalog.SinglePropertyFilter.ComparisonOperatorR\x08operator\" \n\x12\x43omparisonOperator\x12\n\n\x06\x45QUALS\x10\x00\x42\x11\n\x0fproperty_filter\"G\n\x16\x41rtifactPropertyFilter\x12!\n\x0b\x61rtifact_id\x18\x01 \x01(\tH\x00R\nartifactIdB\n\n\x08property\"<\n\x11TagPropertyFilter\x12\x1b\n\x08tag_name\x18\x01 \x01(\tH\x00R\x07tagNameB\n\n\x08property\"[\n\x17PartitionPropertyFilter\x12\x34\n\x07key_val\x18\x01 \x01(\x0b\x32\x19.datacatalog.KeyValuePairH\x00R\x06keyValB\n\n\x08property\"6\n\x0cKeyValuePair\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value\"\x8b\x01\n\x15\x44\x61tasetPropertyFilter\x12\x1a\n\x07project\x18\x01 \x01(\tH\x00R\x07project\x12\x14\n\x04name\x18\x02 \x01(\tH\x00R\x04name\x12\x18\n\x06\x64omain\x18\x03 \x01(\tH\x00R\x06\x64omain\x12\x1a\n\x07version\x18\x04 \x01(\tH\x00R\x07versionB\n\n\x08property\"\x93\x02\n\x11PaginationOptions\x12\x14\n\x05limit\x18\x01 \x01(\rR\x05limit\x12\x14\n\x05token\x18\x02 \x01(\tR\x05token\x12@\n\x07sortKey\x18\x03 \x01(\x0e\x32&.datacatalog.PaginationOptions.SortKeyR\x07sortKey\x12\x46\n\tsortOrder\x18\x04 \x01(\x0e\x32(.datacatalog.PaginationOptions.SortOrderR\tsortOrder\"*\n\tSortOrder\x12\x0e\n\nDESCENDING\x10\x00\x12\r\n\tASCENDING\x10\x01\"\x1c\n\x07SortKey\x12\x11\n\rCREATION_TIME\x10\x00\x32\x86\x07\n\x0b\x44\x61taCatalog\x12V\n\rCreateDataset\x12!.datacatalog.CreateDatasetRequest\x1a\".datacatalog.CreateDatasetResponse\x12M\n\nGetDataset\x12\x1e.datacatalog.GetDatasetRequest\x1a\x1f.datacatalog.GetDatasetResponse\x12Y\n\x0e\x43reateArtifact\x12\".datacatalog.CreateArtifactRequest\x1a#.datacatalog.CreateArtifactResponse\x12P\n\x0bGetArtifact\x12\x1f.datacatalog.GetArtifactRequest\x1a .datacatalog.GetArtifactResponse\x12\x41\n\x06\x41\x64\x64Tag\x12\x1a.datacatalog.AddTagRequest\x1a\x1b.datacatalog.AddTagResponse\x12V\n\rListArtifacts\x12!.datacatalog.ListArtifactsRequest\x1a\".datacatalog.ListArtifactsResponse\x12S\n\x0cListDatasets\x12 .datacatalog.ListDatasetsRequest\x1a!.datacatalog.ListDatasetsResponse\x12Y\n\x0eUpdateArtifact\x12\".datacatalog.UpdateArtifactRequest\x1a#.datacatalog.UpdateArtifactResponse\x12q\n\x16GetOrExtendReservation\x12*.datacatalog.GetOrExtendReservationRequest\x1a+.datacatalog.GetOrExtendReservationResponse\x12\x65\n\x12ReleaseReservation\x12&.datacatalog.ReleaseReservationRequest\x1a\'.datacatalog.ReleaseReservationResponseB\xb2\x01\n\x0f\x63om.datacatalogB\x10\x44\x61tacatalogProtoP\x01ZAgithub.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/datacatalog\xa2\x02\x03\x44XX\xaa\x02\x0b\x44\x61tacatalog\xca\x02\x0b\x44\x61tacatalog\xe2\x02\x17\x44\x61tacatalog\\GPBMetadata\xea\x02\x0b\x44\x61tacatalogb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n&flyteidl/datacatalog/datacatalog.proto\x12\x0b\x64\x61tacatalog\x1a\x1c\x66lyteidl/core/literals.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"F\n\x14\x43reateDatasetRequest\x12.\n\x07\x64\x61taset\x18\x01 \x01(\x0b\x32\x14.datacatalog.DatasetR\x07\x64\x61taset\"\x17\n\x15\x43reateDatasetResponse\"E\n\x11GetDatasetRequest\x12\x30\n\x07\x64\x61taset\x18\x01 \x01(\x0b\x32\x16.datacatalog.DatasetIDR\x07\x64\x61taset\"D\n\x12GetDatasetResponse\x12.\n\x07\x64\x61taset\x18\x01 \x01(\x0b\x32\x14.datacatalog.DatasetR\x07\x64\x61taset\"\x96\x01\n\x12GetArtifactRequest\x12\x30\n\x07\x64\x61taset\x18\x01 \x01(\x0b\x32\x16.datacatalog.DatasetIDR\x07\x64\x61taset\x12!\n\x0b\x61rtifact_id\x18\x02 \x01(\tH\x00R\nartifactId\x12\x1b\n\x08tag_name\x18\x03 \x01(\tH\x00R\x07tagNameB\x0e\n\x0cquery_handle\"H\n\x13GetArtifactResponse\x12\x31\n\x08\x61rtifact\x18\x01 \x01(\x0b\x32\x15.datacatalog.ArtifactR\x08\x61rtifact\"J\n\x15\x43reateArtifactRequest\x12\x31\n\x08\x61rtifact\x18\x01 \x01(\x0b\x32\x15.datacatalog.ArtifactR\x08\x61rtifact\"\x18\n\x16\x43reateArtifactResponse\"3\n\rAddTagRequest\x12\"\n\x03tag\x18\x01 \x01(\x0b\x32\x10.datacatalog.TagR\x03tag\"\x10\n\x0e\x41\x64\x64TagResponse\"\xbf\x01\n\x14ListArtifactsRequest\x12\x30\n\x07\x64\x61taset\x18\x01 \x01(\x0b\x32\x16.datacatalog.DatasetIDR\x07\x64\x61taset\x12\x35\n\x06\x66ilter\x18\x02 \x01(\x0b\x32\x1d.datacatalog.FilterExpressionR\x06\x66ilter\x12>\n\npagination\x18\x03 \x01(\x0b\x32\x1e.datacatalog.PaginationOptionsR\npagination\"k\n\x15ListArtifactsResponse\x12\x33\n\tartifacts\x18\x01 \x03(\x0b\x32\x15.datacatalog.ArtifactR\tartifacts\x12\x1d\n\nnext_token\x18\x02 \x01(\tR\tnextToken\"\x8c\x01\n\x13ListDatasetsRequest\x12\x35\n\x06\x66ilter\x18\x01 \x01(\x0b\x32\x1d.datacatalog.FilterExpressionR\x06\x66ilter\x12>\n\npagination\x18\x02 \x01(\x0b\x32\x1e.datacatalog.PaginationOptionsR\npagination\"g\n\x14ListDatasetsResponse\x12\x30\n\x08\x64\x61tasets\x18\x01 \x03(\x0b\x32\x14.datacatalog.DatasetR\x08\x64\x61tasets\x12\x1d\n\nnext_token\x18\x02 \x01(\tR\tnextToken\"\xfb\x01\n\x15UpdateArtifactRequest\x12\x30\n\x07\x64\x61taset\x18\x01 \x01(\x0b\x32\x16.datacatalog.DatasetIDR\x07\x64\x61taset\x12!\n\x0b\x61rtifact_id\x18\x02 \x01(\tH\x00R\nartifactId\x12\x1b\n\x08tag_name\x18\x03 \x01(\tH\x00R\x07tagName\x12-\n\x04\x64\x61ta\x18\x04 \x03(\x0b\x32\x19.datacatalog.ArtifactDataR\x04\x64\x61ta\x12\x31\n\x08metadata\x18\x05 \x01(\x0b\x32\x15.datacatalog.MetadataR\x08metadataB\x0e\n\x0cquery_handle\"9\n\x16UpdateArtifactResponse\x12\x1f\n\x0b\x61rtifact_id\x18\x01 \x01(\tR\nartifactId\"a\n\rReservationID\x12\x35\n\ndataset_id\x18\x01 \x01(\x0b\x32\x16.datacatalog.DatasetIDR\tdatasetId\x12\x19\n\x08tag_name\x18\x02 \x01(\tR\x07tagName\"\xc7\x01\n\x1dGetOrExtendReservationRequest\x12\x41\n\x0ereservation_id\x18\x01 \x01(\x0b\x32\x1a.datacatalog.ReservationIDR\rreservationId\x12\x19\n\x08owner_id\x18\x02 \x01(\tR\x07ownerId\x12H\n\x12heartbeat_interval\x18\x03 \x01(\x0b\x32\x19.google.protobuf.DurationR\x11heartbeatInterval\"\xa3\x02\n\x0bReservation\x12\x41\n\x0ereservation_id\x18\x01 \x01(\x0b\x32\x1a.datacatalog.ReservationIDR\rreservationId\x12\x19\n\x08owner_id\x18\x02 \x01(\tR\x07ownerId\x12H\n\x12heartbeat_interval\x18\x03 \x01(\x0b\x32\x19.google.protobuf.DurationR\x11heartbeatInterval\x12\x39\n\nexpires_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\texpiresAt\x12\x31\n\x08metadata\x18\x06 \x01(\x0b\x32\x15.datacatalog.MetadataR\x08metadata\"\\\n\x1eGetOrExtendReservationResponse\x12:\n\x0breservation\x18\x01 \x01(\x0b\x32\x18.datacatalog.ReservationR\x0breservation\"y\n\x19ReleaseReservationRequest\x12\x41\n\x0ereservation_id\x18\x01 \x01(\x0b\x32\x1a.datacatalog.ReservationIDR\rreservationId\x12\x19\n\x08owner_id\x18\x02 \x01(\tR\x07ownerId\"\x1c\n\x1aReleaseReservationResponse\"\x8a\x01\n\x07\x44\x61taset\x12&\n\x02id\x18\x01 \x01(\x0b\x32\x16.datacatalog.DatasetIDR\x02id\x12\x31\n\x08metadata\x18\x02 \x01(\x0b\x32\x15.datacatalog.MetadataR\x08metadata\x12$\n\rpartitionKeys\x18\x03 \x03(\tR\rpartitionKeys\"3\n\tPartition\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value\"\x91\x01\n\tDatasetID\x12\x18\n\x07project\x18\x01 \x01(\tR\x07project\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12\x16\n\x06\x64omain\x18\x03 \x01(\tR\x06\x64omain\x12\x18\n\x07version\x18\x04 \x01(\tR\x07version\x12\x12\n\x04UUID\x18\x05 \x01(\tR\x04UUID\x12\x10\n\x03org\x18\x06 \x01(\tR\x03org\"\xc7\x02\n\x08\x41rtifact\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x30\n\x07\x64\x61taset\x18\x02 \x01(\x0b\x32\x16.datacatalog.DatasetIDR\x07\x64\x61taset\x12-\n\x04\x64\x61ta\x18\x03 \x03(\x0b\x32\x19.datacatalog.ArtifactDataR\x04\x64\x61ta\x12\x31\n\x08metadata\x18\x04 \x01(\x0b\x32\x15.datacatalog.MetadataR\x08metadata\x12\x36\n\npartitions\x18\x05 \x03(\x0b\x32\x16.datacatalog.PartitionR\npartitions\x12$\n\x04tags\x18\x06 \x03(\x0b\x32\x10.datacatalog.TagR\x04tags\x12\x39\n\ncreated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\"P\n\x0c\x41rtifactData\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12,\n\x05value\x18\x02 \x01(\x0b\x32\x16.flyteidl.core.LiteralR\x05value\"l\n\x03Tag\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x1f\n\x0b\x61rtifact_id\x18\x02 \x01(\tR\nartifactId\x12\x30\n\x07\x64\x61taset\x18\x03 \x01(\x0b\x32\x16.datacatalog.DatasetIDR\x07\x64\x61taset\"\x81\x01\n\x08Metadata\x12:\n\x07key_map\x18\x01 \x03(\x0b\x32!.datacatalog.Metadata.KeyMapEntryR\x06keyMap\x1a\x39\n\x0bKeyMapEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"O\n\x10\x46ilterExpression\x12;\n\x07\x66ilters\x18\x01 \x03(\x0b\x32!.datacatalog.SinglePropertyFilterR\x07\x66ilters\"\xce\x03\n\x14SinglePropertyFilter\x12?\n\ntag_filter\x18\x01 \x01(\x0b\x32\x1e.datacatalog.TagPropertyFilterH\x00R\ttagFilter\x12Q\n\x10partition_filter\x18\x02 \x01(\x0b\x32$.datacatalog.PartitionPropertyFilterH\x00R\x0fpartitionFilter\x12N\n\x0f\x61rtifact_filter\x18\x03 \x01(\x0b\x32#.datacatalog.ArtifactPropertyFilterH\x00R\x0e\x61rtifactFilter\x12K\n\x0e\x64\x61taset_filter\x18\x04 \x01(\x0b\x32\".datacatalog.DatasetPropertyFilterH\x00R\rdatasetFilter\x12P\n\x08operator\x18\n \x01(\x0e\x32\x34.datacatalog.SinglePropertyFilter.ComparisonOperatorR\x08operator\" \n\x12\x43omparisonOperator\x12\n\n\x06\x45QUALS\x10\x00\x42\x11\n\x0fproperty_filter\"G\n\x16\x41rtifactPropertyFilter\x12!\n\x0b\x61rtifact_id\x18\x01 \x01(\tH\x00R\nartifactIdB\n\n\x08property\"<\n\x11TagPropertyFilter\x12\x1b\n\x08tag_name\x18\x01 \x01(\tH\x00R\x07tagNameB\n\n\x08property\"[\n\x17PartitionPropertyFilter\x12\x34\n\x07key_val\x18\x01 \x01(\x0b\x32\x19.datacatalog.KeyValuePairH\x00R\x06keyValB\n\n\x08property\"6\n\x0cKeyValuePair\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value\"\x9f\x01\n\x15\x44\x61tasetPropertyFilter\x12\x1a\n\x07project\x18\x01 \x01(\tH\x00R\x07project\x12\x14\n\x04name\x18\x02 \x01(\tH\x00R\x04name\x12\x18\n\x06\x64omain\x18\x03 \x01(\tH\x00R\x06\x64omain\x12\x1a\n\x07version\x18\x04 \x01(\tH\x00R\x07version\x12\x12\n\x03org\x18\x05 \x01(\tH\x00R\x03orgB\n\n\x08property\"\x93\x02\n\x11PaginationOptions\x12\x14\n\x05limit\x18\x01 \x01(\rR\x05limit\x12\x14\n\x05token\x18\x02 \x01(\tR\x05token\x12@\n\x07sortKey\x18\x03 \x01(\x0e\x32&.datacatalog.PaginationOptions.SortKeyR\x07sortKey\x12\x46\n\tsortOrder\x18\x04 \x01(\x0e\x32(.datacatalog.PaginationOptions.SortOrderR\tsortOrder\"*\n\tSortOrder\x12\x0e\n\nDESCENDING\x10\x00\x12\r\n\tASCENDING\x10\x01\"\x1c\n\x07SortKey\x12\x11\n\rCREATION_TIME\x10\x00\x32\x86\x07\n\x0b\x44\x61taCatalog\x12V\n\rCreateDataset\x12!.datacatalog.CreateDatasetRequest\x1a\".datacatalog.CreateDatasetResponse\x12M\n\nGetDataset\x12\x1e.datacatalog.GetDatasetRequest\x1a\x1f.datacatalog.GetDatasetResponse\x12Y\n\x0e\x43reateArtifact\x12\".datacatalog.CreateArtifactRequest\x1a#.datacatalog.CreateArtifactResponse\x12P\n\x0bGetArtifact\x12\x1f.datacatalog.GetArtifactRequest\x1a .datacatalog.GetArtifactResponse\x12\x41\n\x06\x41\x64\x64Tag\x12\x1a.datacatalog.AddTagRequest\x1a\x1b.datacatalog.AddTagResponse\x12V\n\rListArtifacts\x12!.datacatalog.ListArtifactsRequest\x1a\".datacatalog.ListArtifactsResponse\x12S\n\x0cListDatasets\x12 .datacatalog.ListDatasetsRequest\x1a!.datacatalog.ListDatasetsResponse\x12Y\n\x0eUpdateArtifact\x12\".datacatalog.UpdateArtifactRequest\x1a#.datacatalog.UpdateArtifactResponse\x12q\n\x16GetOrExtendReservation\x12*.datacatalog.GetOrExtendReservationRequest\x1a+.datacatalog.GetOrExtendReservationResponse\x12\x65\n\x12ReleaseReservation\x12&.datacatalog.ReleaseReservationRequest\x1a\'.datacatalog.ReleaseReservationResponseB\xb2\x01\n\x0f\x63om.datacatalogB\x10\x44\x61tacatalogProtoP\x01ZAgithub.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/datacatalog\xa2\x02\x03\x44XX\xaa\x02\x0b\x44\x61tacatalog\xca\x02\x0b\x44\x61tacatalog\xe2\x02\x17\x44\x61tacatalog\\GPBMetadata\xea\x02\x0b\x44\x61tacatalogb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -75,40 +75,40 @@ _globals['_DATASET']._serialized_end=2633 _globals['_PARTITION']._serialized_start=2635 _globals['_PARTITION']._serialized_end=2686 - _globals['_DATASETID']._serialized_start=2688 - _globals['_DATASETID']._serialized_end=2815 - _globals['_ARTIFACT']._serialized_start=2818 - _globals['_ARTIFACT']._serialized_end=3145 - _globals['_ARTIFACTDATA']._serialized_start=3147 - _globals['_ARTIFACTDATA']._serialized_end=3227 - _globals['_TAG']._serialized_start=3229 - _globals['_TAG']._serialized_end=3337 - _globals['_METADATA']._serialized_start=3340 - _globals['_METADATA']._serialized_end=3469 - _globals['_METADATA_KEYMAPENTRY']._serialized_start=3412 - _globals['_METADATA_KEYMAPENTRY']._serialized_end=3469 - _globals['_FILTEREXPRESSION']._serialized_start=3471 - _globals['_FILTEREXPRESSION']._serialized_end=3550 - _globals['_SINGLEPROPERTYFILTER']._serialized_start=3553 - _globals['_SINGLEPROPERTYFILTER']._serialized_end=4015 - _globals['_SINGLEPROPERTYFILTER_COMPARISONOPERATOR']._serialized_start=3964 - _globals['_SINGLEPROPERTYFILTER_COMPARISONOPERATOR']._serialized_end=3996 - _globals['_ARTIFACTPROPERTYFILTER']._serialized_start=4017 - _globals['_ARTIFACTPROPERTYFILTER']._serialized_end=4088 - _globals['_TAGPROPERTYFILTER']._serialized_start=4090 - _globals['_TAGPROPERTYFILTER']._serialized_end=4150 - _globals['_PARTITIONPROPERTYFILTER']._serialized_start=4152 - _globals['_PARTITIONPROPERTYFILTER']._serialized_end=4243 - _globals['_KEYVALUEPAIR']._serialized_start=4245 - _globals['_KEYVALUEPAIR']._serialized_end=4299 - _globals['_DATASETPROPERTYFILTER']._serialized_start=4302 - _globals['_DATASETPROPERTYFILTER']._serialized_end=4441 - _globals['_PAGINATIONOPTIONS']._serialized_start=4444 - _globals['_PAGINATIONOPTIONS']._serialized_end=4719 - _globals['_PAGINATIONOPTIONS_SORTORDER']._serialized_start=4647 - _globals['_PAGINATIONOPTIONS_SORTORDER']._serialized_end=4689 - _globals['_PAGINATIONOPTIONS_SORTKEY']._serialized_start=4691 - _globals['_PAGINATIONOPTIONS_SORTKEY']._serialized_end=4719 - _globals['_DATACATALOG']._serialized_start=4722 - _globals['_DATACATALOG']._serialized_end=5624 + _globals['_DATASETID']._serialized_start=2689 + _globals['_DATASETID']._serialized_end=2834 + _globals['_ARTIFACT']._serialized_start=2837 + _globals['_ARTIFACT']._serialized_end=3164 + _globals['_ARTIFACTDATA']._serialized_start=3166 + _globals['_ARTIFACTDATA']._serialized_end=3246 + _globals['_TAG']._serialized_start=3248 + _globals['_TAG']._serialized_end=3356 + _globals['_METADATA']._serialized_start=3359 + _globals['_METADATA']._serialized_end=3488 + _globals['_METADATA_KEYMAPENTRY']._serialized_start=3431 + _globals['_METADATA_KEYMAPENTRY']._serialized_end=3488 + _globals['_FILTEREXPRESSION']._serialized_start=3490 + _globals['_FILTEREXPRESSION']._serialized_end=3569 + _globals['_SINGLEPROPERTYFILTER']._serialized_start=3572 + _globals['_SINGLEPROPERTYFILTER']._serialized_end=4034 + _globals['_SINGLEPROPERTYFILTER_COMPARISONOPERATOR']._serialized_start=3983 + _globals['_SINGLEPROPERTYFILTER_COMPARISONOPERATOR']._serialized_end=4015 + _globals['_ARTIFACTPROPERTYFILTER']._serialized_start=4036 + _globals['_ARTIFACTPROPERTYFILTER']._serialized_end=4107 + _globals['_TAGPROPERTYFILTER']._serialized_start=4109 + _globals['_TAGPROPERTYFILTER']._serialized_end=4169 + _globals['_PARTITIONPROPERTYFILTER']._serialized_start=4171 + _globals['_PARTITIONPROPERTYFILTER']._serialized_end=4262 + _globals['_KEYVALUEPAIR']._serialized_start=4264 + _globals['_KEYVALUEPAIR']._serialized_end=4318 + _globals['_DATASETPROPERTYFILTER']._serialized_start=4321 + _globals['_DATASETPROPERTYFILTER']._serialized_end=4480 + _globals['_PAGINATIONOPTIONS']._serialized_start=4483 + _globals['_PAGINATIONOPTIONS']._serialized_end=4758 + _globals['_PAGINATIONOPTIONS_SORTORDER']._serialized_start=4686 + _globals['_PAGINATIONOPTIONS_SORTORDER']._serialized_end=4728 + _globals['_PAGINATIONOPTIONS_SORTKEY']._serialized_start=4730 + _globals['_PAGINATIONOPTIONS_SORTKEY']._serialized_end=4758 + _globals['_DATACATALOG']._serialized_start=4761 + _globals['_DATACATALOG']._serialized_end=5663 # @@protoc_insertion_point(module_scope) diff --git a/flyteidl/gen/pb_python/flyteidl/datacatalog/datacatalog_pb2.pyi b/flyteidl/gen/pb_python/flyteidl/datacatalog/datacatalog_pb2.pyi index 94cd96797b..22dd8edbfe 100644 --- a/flyteidl/gen/pb_python/flyteidl/datacatalog/datacatalog_pb2.pyi +++ b/flyteidl/gen/pb_python/flyteidl/datacatalog/datacatalog_pb2.pyi @@ -190,18 +190,20 @@ class Partition(_message.Message): def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... class DatasetID(_message.Message): - __slots__ = ["project", "name", "domain", "version", "UUID"] + __slots__ = ["project", "name", "domain", "version", "UUID", "org"] PROJECT_FIELD_NUMBER: _ClassVar[int] NAME_FIELD_NUMBER: _ClassVar[int] DOMAIN_FIELD_NUMBER: _ClassVar[int] VERSION_FIELD_NUMBER: _ClassVar[int] UUID_FIELD_NUMBER: _ClassVar[int] + ORG_FIELD_NUMBER: _ClassVar[int] project: str name: str domain: str version: str UUID: str - def __init__(self, project: _Optional[str] = ..., name: _Optional[str] = ..., domain: _Optional[str] = ..., version: _Optional[str] = ..., UUID: _Optional[str] = ...) -> None: ... + org: str + def __init__(self, project: _Optional[str] = ..., name: _Optional[str] = ..., domain: _Optional[str] = ..., version: _Optional[str] = ..., UUID: _Optional[str] = ..., org: _Optional[str] = ...) -> None: ... class Artifact(_message.Message): __slots__ = ["id", "dataset", "data", "metadata", "partitions", "tags", "created_at"] @@ -303,16 +305,18 @@ class KeyValuePair(_message.Message): def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... class DatasetPropertyFilter(_message.Message): - __slots__ = ["project", "name", "domain", "version"] + __slots__ = ["project", "name", "domain", "version", "org"] PROJECT_FIELD_NUMBER: _ClassVar[int] NAME_FIELD_NUMBER: _ClassVar[int] DOMAIN_FIELD_NUMBER: _ClassVar[int] VERSION_FIELD_NUMBER: _ClassVar[int] + ORG_FIELD_NUMBER: _ClassVar[int] project: str name: str domain: str version: str - def __init__(self, project: _Optional[str] = ..., name: _Optional[str] = ..., domain: _Optional[str] = ..., version: _Optional[str] = ...) -> None: ... + org: str + def __init__(self, project: _Optional[str] = ..., name: _Optional[str] = ..., domain: _Optional[str] = ..., version: _Optional[str] = ..., org: _Optional[str] = ...) -> None: ... class PaginationOptions(_message.Message): __slots__ = ["limit", "token", "sortKey", "sortOrder"] diff --git a/flyteidl/gen/pb_python/flyteidl/service/admin_pb2.py b/flyteidl/gen/pb_python/flyteidl/service/admin_pb2.py index d48148be62..4ba67242fb 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/admin_pb2.py +++ b/flyteidl/gen/pb_python/flyteidl/service/admin_pb2.py @@ -29,7 +29,7 @@ from flyteidl.admin import description_entity_pb2 as flyteidl_dot_admin_dot_description__entity__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1c\x66lyteidl/service/admin.proto\x12\x10\x66lyteidl.service\x1a\x1cgoogle/api/annotations.proto\x1a\x1c\x66lyteidl/admin/project.proto\x1a.flyteidl/admin/project_domain_attributes.proto\x1a\'flyteidl/admin/project_attributes.proto\x1a\x19\x66lyteidl/admin/task.proto\x1a\x1d\x66lyteidl/admin/workflow.proto\x1a(flyteidl/admin/workflow_attributes.proto\x1a flyteidl/admin/launch_plan.proto\x1a\x1a\x66lyteidl/admin/event.proto\x1a\x1e\x66lyteidl/admin/execution.proto\x1a\'flyteidl/admin/matchable_resource.proto\x1a#flyteidl/admin/node_execution.proto\x1a#flyteidl/admin/task_execution.proto\x1a\x1c\x66lyteidl/admin/version.proto\x1a\x1b\x66lyteidl/admin/common.proto\x1a\'flyteidl/admin/description_entity.proto2\x84N\n\x0c\x41\x64minService\x12m\n\nCreateTask\x12!.flyteidl.admin.TaskCreateRequest\x1a\".flyteidl.admin.TaskCreateResponse\"\x18\x82\xd3\xe4\x93\x02\x12:\x01*\"\r/api/v1/tasks\x12\x88\x01\n\x07GetTask\x12 .flyteidl.admin.ObjectGetRequest\x1a\x14.flyteidl.admin.Task\"E\x82\xd3\xe4\x93\x02?\x12=/api/v1/tasks/{id.project}/{id.domain}/{id.name}/{id.version}\x12\x97\x01\n\x0bListTaskIds\x12\x30.flyteidl.admin.NamedEntityIdentifierListRequest\x1a).flyteidl.admin.NamedEntityIdentifierList\"+\x82\xd3\xe4\x93\x02%\x12#/api/v1/task_ids/{project}/{domain}\x12\xae\x01\n\tListTasks\x12#.flyteidl.admin.ResourceListRequest\x1a\x18.flyteidl.admin.TaskList\"b\x82\xd3\xe4\x93\x02\\Z(\x12&/api/v1/tasks/{id.project}/{id.domain}\x12\x30/api/v1/tasks/{id.project}/{id.domain}/{id.name}\x12}\n\x0e\x43reateWorkflow\x12%.flyteidl.admin.WorkflowCreateRequest\x1a&.flyteidl.admin.WorkflowCreateResponse\"\x1c\x82\xd3\xe4\x93\x02\x16:\x01*\"\x11/api/v1/workflows\x12\x94\x01\n\x0bGetWorkflow\x12 .flyteidl.admin.ObjectGetRequest\x1a\x18.flyteidl.admin.Workflow\"I\x82\xd3\xe4\x93\x02\x43\x12\x41/api/v1/workflows/{id.project}/{id.domain}/{id.name}/{id.version}\x12\x9f\x01\n\x0fListWorkflowIds\x12\x30.flyteidl.admin.NamedEntityIdentifierListRequest\x1a).flyteidl.admin.NamedEntityIdentifierList\"/\x82\xd3\xe4\x93\x02)\x12\'/api/v1/workflow_ids/{project}/{domain}\x12\xbe\x01\n\rListWorkflows\x12#.flyteidl.admin.ResourceListRequest\x1a\x1c.flyteidl.admin.WorkflowList\"j\x82\xd3\xe4\x93\x02\x64Z,\x12*/api/v1/workflows/{id.project}/{id.domain}\x12\x34/api/v1/workflows/{id.project}/{id.domain}/{id.name}\x12\x86\x01\n\x10\x43reateLaunchPlan\x12\'.flyteidl.admin.LaunchPlanCreateRequest\x1a(.flyteidl.admin.LaunchPlanCreateResponse\"\x1f\x82\xd3\xe4\x93\x02\x19:\x01*\"\x14/api/v1/launch_plans\x12\x9b\x01\n\rGetLaunchPlan\x12 .flyteidl.admin.ObjectGetRequest\x1a\x1a.flyteidl.admin.LaunchPlan\"L\x82\xd3\xe4\x93\x02\x46\x12\x44/api/v1/launch_plans/{id.project}/{id.domain}/{id.name}/{id.version}\x12\xa2\x01\n\x13GetActiveLaunchPlan\x12\'.flyteidl.admin.ActiveLaunchPlanRequest\x1a\x1a.flyteidl.admin.LaunchPlan\"F\x82\xd3\xe4\x93\x02@\x12>/api/v1/active_launch_plans/{id.project}/{id.domain}/{id.name}\x12\x9c\x01\n\x15ListActiveLaunchPlans\x12+.flyteidl.admin.ActiveLaunchPlanListRequest\x1a\x1e.flyteidl.admin.LaunchPlanList\"6\x82\xd3\xe4\x93\x02\x30\x12./api/v1/active_launch_plans/{project}/{domain}\x12\xa4\x01\n\x11ListLaunchPlanIds\x12\x30.flyteidl.admin.NamedEntityIdentifierListRequest\x1a).flyteidl.admin.NamedEntityIdentifierList\"2\x82\xd3\xe4\x93\x02,\x12*/api/v1/launch_plan_ids/{project}/{domain}\x12\xc8\x01\n\x0fListLaunchPlans\x12#.flyteidl.admin.ResourceListRequest\x1a\x1e.flyteidl.admin.LaunchPlanList\"p\x82\xd3\xe4\x93\x02jZ/\x12-/api/v1/launch_plans/{id.project}/{id.domain}\x12\x37/api/v1/launch_plans/{id.project}/{id.domain}/{id.name}\x12\xb6\x01\n\x10UpdateLaunchPlan\x12\'.flyteidl.admin.LaunchPlanUpdateRequest\x1a(.flyteidl.admin.LaunchPlanUpdateResponse\"O\x82\xd3\xe4\x93\x02I:\x01*\x1a\x44/api/v1/launch_plans/{id.project}/{id.domain}/{id.name}/{id.version}\x12\x81\x01\n\x0f\x43reateExecution\x12&.flyteidl.admin.ExecutionCreateRequest\x1a\'.flyteidl.admin.ExecutionCreateResponse\"\x1d\x82\xd3\xe4\x93\x02\x17:\x01*\"\x12/api/v1/executions\x12\x8e\x01\n\x11RelaunchExecution\x12(.flyteidl.admin.ExecutionRelaunchRequest\x1a\'.flyteidl.admin.ExecutionCreateResponse\"&\x82\xd3\xe4\x93\x02 :\x01*\"\x1b/api/v1/executions/relaunch\x12\x8b\x01\n\x10RecoverExecution\x12\'.flyteidl.admin.ExecutionRecoverRequest\x1a\'.flyteidl.admin.ExecutionCreateResponse\"%\x82\xd3\xe4\x93\x02\x1f:\x01*\"\x1a/api/v1/executions/recover\x12\x95\x01\n\x0cGetExecution\x12+.flyteidl.admin.WorkflowExecutionGetRequest\x1a\x19.flyteidl.admin.Execution\"=\x82\xd3\xe4\x93\x02\x37\x12\x35/api/v1/executions/{id.project}/{id.domain}/{id.name}\x12\xa4\x01\n\x0fUpdateExecution\x12&.flyteidl.admin.ExecutionUpdateRequest\x1a\'.flyteidl.admin.ExecutionUpdateResponse\"@\x82\xd3\xe4\x93\x02::\x01*\x1a\x35/api/v1/executions/{id.project}/{id.domain}/{id.name}\x12\xb9\x01\n\x10GetExecutionData\x12/.flyteidl.admin.WorkflowExecutionGetDataRequest\x1a\x30.flyteidl.admin.WorkflowExecutionGetDataResponse\"B\x82\xd3\xe4\x93\x02<\x12:/api/v1/data/executions/{id.project}/{id.domain}/{id.name}\x12\x89\x01\n\x0eListExecutions\x12#.flyteidl.admin.ResourceListRequest\x1a\x1d.flyteidl.admin.ExecutionList\"3\x82\xd3\xe4\x93\x02-\x12+/api/v1/executions/{id.project}/{id.domain}\x12\xad\x01\n\x12TerminateExecution\x12).flyteidl.admin.ExecutionTerminateRequest\x1a*.flyteidl.admin.ExecutionTerminateResponse\"@\x82\xd3\xe4\x93\x02::\x01**5/api/v1/executions/{id.project}/{id.domain}/{id.name}\x12\xd2\x01\n\x10GetNodeExecution\x12\'.flyteidl.admin.NodeExecutionGetRequest\x1a\x1d.flyteidl.admin.NodeExecution\"v\x82\xd3\xe4\x93\x02p\x12n/api/v1/node_executions/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}\x12\xde\x01\n\x12ListNodeExecutions\x12(.flyteidl.admin.NodeExecutionListRequest\x1a!.flyteidl.admin.NodeExecutionList\"{\x82\xd3\xe4\x93\x02u\x12s/api/v1/node_executions/{workflow_execution_id.project}/{workflow_execution_id.domain}/{workflow_execution_id.name}\x12\xa5\x04\n\x19ListNodeExecutionsForTask\x12/.flyteidl.admin.NodeExecutionForTaskListRequest\x1a!.flyteidl.admin.NodeExecutionList\"\xb3\x03\x82\xd3\xe4\x93\x02\xac\x03\x12\xa9\x03/api/v1/children/task_executions/{task_execution_id.node_execution_id.execution_id.project}/{task_execution_id.node_execution_id.execution_id.domain}/{task_execution_id.node_execution_id.execution_id.name}/{task_execution_id.node_execution_id.node_id}/{task_execution_id.task_id.project}/{task_execution_id.task_id.domain}/{task_execution_id.task_id.name}/{task_execution_id.task_id.version}/{task_execution_id.retry_attempt}\x12\xee\x01\n\x14GetNodeExecutionData\x12+.flyteidl.admin.NodeExecutionGetDataRequest\x1a,.flyteidl.admin.NodeExecutionGetDataResponse\"{\x82\xd3\xe4\x93\x02u\x12s/api/v1/data/node_executions/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}\x12\x7f\n\x0fRegisterProject\x12&.flyteidl.admin.ProjectRegisterRequest\x1a\'.flyteidl.admin.ProjectRegisterResponse\"\x1b\x82\xd3\xe4\x93\x02\x15:\x01*\"\x10/api/v1/projects\x12q\n\rUpdateProject\x12\x17.flyteidl.admin.Project\x1a%.flyteidl.admin.ProjectUpdateResponse\" \x82\xd3\xe4\x93\x02\x1a:\x01*\x1a\x15/api/v1/projects/{id}\x12\x66\n\x0cListProjects\x12\".flyteidl.admin.ProjectListRequest\x1a\x18.flyteidl.admin.Projects\"\x18\x82\xd3\xe4\x93\x02\x12\x12\x10/api/v1/projects\x12\x99\x01\n\x13\x43reateWorkflowEvent\x12-.flyteidl.admin.WorkflowExecutionEventRequest\x1a..flyteidl.admin.WorkflowExecutionEventResponse\"#\x82\xd3\xe4\x93\x02\x1d:\x01*\"\x18/api/v1/events/workflows\x12\x89\x01\n\x0f\x43reateNodeEvent\x12).flyteidl.admin.NodeExecutionEventRequest\x1a*.flyteidl.admin.NodeExecutionEventResponse\"\x1f\x82\xd3\xe4\x93\x02\x19:\x01*\"\x14/api/v1/events/nodes\x12\x89\x01\n\x0f\x43reateTaskEvent\x12).flyteidl.admin.TaskExecutionEventRequest\x1a*.flyteidl.admin.TaskExecutionEventResponse\"\x1f\x82\xd3\xe4\x93\x02\x19:\x01*\"\x14/api/v1/events/tasks\x12\x80\x03\n\x10GetTaskExecution\x12\'.flyteidl.admin.TaskExecutionGetRequest\x1a\x1d.flyteidl.admin.TaskExecution\"\xa3\x02\x82\xd3\xe4\x93\x02\x9c\x02\x12\x99\x02/api/v1/task_executions/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}\x12\x98\x02\n\x12ListTaskExecutions\x12(.flyteidl.admin.TaskExecutionListRequest\x1a!.flyteidl.admin.TaskExecutionList\"\xb4\x01\x82\xd3\xe4\x93\x02\xad\x01\x12\xaa\x01/api/v1/task_executions/{node_execution_id.execution_id.project}/{node_execution_id.execution_id.domain}/{node_execution_id.execution_id.name}/{node_execution_id.node_id}\x12\x9c\x03\n\x14GetTaskExecutionData\x12+.flyteidl.admin.TaskExecutionGetDataRequest\x1a,.flyteidl.admin.TaskExecutionGetDataResponse\"\xa8\x02\x82\xd3\xe4\x93\x02\xa1\x02\x12\x9e\x02/api/v1/data/task_executions/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}\x12\xe3\x01\n\x1dUpdateProjectDomainAttributes\x12\x34.flyteidl.admin.ProjectDomainAttributesUpdateRequest\x1a\x35.flyteidl.admin.ProjectDomainAttributesUpdateResponse\"U\x82\xd3\xe4\x93\x02O:\x01*\x1aJ/api/v1/project_domain_attributes/{attributes.project}/{attributes.domain}\x12\xc1\x01\n\x1aGetProjectDomainAttributes\x12\x31.flyteidl.admin.ProjectDomainAttributesGetRequest\x1a\x32.flyteidl.admin.ProjectDomainAttributesGetResponse\"<\x82\xd3\xe4\x93\x02\x36\x12\x34/api/v1/project_domain_attributes/{project}/{domain}\x12\xcd\x01\n\x1d\x44\x65leteProjectDomainAttributes\x12\x34.flyteidl.admin.ProjectDomainAttributesDeleteRequest\x1a\x35.flyteidl.admin.ProjectDomainAttributesDeleteResponse\"?\x82\xd3\xe4\x93\x02\x39:\x01**4/api/v1/project_domain_attributes/{project}/{domain}\x12\xb6\x01\n\x17UpdateProjectAttributes\x12..flyteidl.admin.ProjectAttributesUpdateRequest\x1a/.flyteidl.admin.ProjectAttributesUpdateResponse\":\x82\xd3\xe4\x93\x02\x34:\x01*\x1a//api/v1/project_attributes/{attributes.project}\x12\x9f\x01\n\x14GetProjectAttributes\x12+.flyteidl.admin.ProjectAttributesGetRequest\x1a,.flyteidl.admin.ProjectAttributesGetResponse\",\x82\xd3\xe4\x93\x02&\x12$/api/v1/project_attributes/{project}\x12\xab\x01\n\x17\x44\x65leteProjectAttributes\x12..flyteidl.admin.ProjectAttributesDeleteRequest\x1a/.flyteidl.admin.ProjectAttributesDeleteResponse\"/\x82\xd3\xe4\x93\x02):\x01**$/api/v1/project_attributes/{project}\x12\xe4\x01\n\x18UpdateWorkflowAttributes\x12/.flyteidl.admin.WorkflowAttributesUpdateRequest\x1a\x30.flyteidl.admin.WorkflowAttributesUpdateResponse\"e\x82\xd3\xe4\x93\x02_:\x01*\x1aZ/api/v1/workflow_attributes/{attributes.project}/{attributes.domain}/{attributes.workflow}\x12\xb7\x01\n\x15GetWorkflowAttributes\x12,.flyteidl.admin.WorkflowAttributesGetRequest\x1a-.flyteidl.admin.WorkflowAttributesGetResponse\"A\x82\xd3\xe4\x93\x02;\x12\x39/api/v1/workflow_attributes/{project}/{domain}/{workflow}\x12\xc3\x01\n\x18\x44\x65leteWorkflowAttributes\x12/.flyteidl.admin.WorkflowAttributesDeleteRequest\x1a\x30.flyteidl.admin.WorkflowAttributesDeleteResponse\"D\x82\xd3\xe4\x93\x02>:\x01**9/api/v1/workflow_attributes/{project}/{domain}/{workflow}\x12\xa0\x01\n\x17ListMatchableAttributes\x12..flyteidl.admin.ListMatchableAttributesRequest\x1a/.flyteidl.admin.ListMatchableAttributesResponse\"$\x82\xd3\xe4\x93\x02\x1e\x12\x1c/api/v1/matchable_attributes\x12\x9f\x01\n\x11ListNamedEntities\x12&.flyteidl.admin.NamedEntityListRequest\x1a\x1f.flyteidl.admin.NamedEntityList\"A\x82\xd3\xe4\x93\x02;\x12\x39/api/v1/named_entities/{resource_type}/{project}/{domain}\x12\xa7\x01\n\x0eGetNamedEntity\x12%.flyteidl.admin.NamedEntityGetRequest\x1a\x1b.flyteidl.admin.NamedEntity\"Q\x82\xd3\xe4\x93\x02K\x12I/api/v1/named_entities/{resource_type}/{id.project}/{id.domain}/{id.name}\x12\xbe\x01\n\x11UpdateNamedEntity\x12(.flyteidl.admin.NamedEntityUpdateRequest\x1a).flyteidl.admin.NamedEntityUpdateResponse\"T\x82\xd3\xe4\x93\x02N:\x01*\x1aI/api/v1/named_entities/{resource_type}/{id.project}/{id.domain}/{id.name}\x12l\n\nGetVersion\x12!.flyteidl.admin.GetVersionRequest\x1a\".flyteidl.admin.GetVersionResponse\"\x17\x82\xd3\xe4\x93\x02\x11\x12\x0f/api/v1/version\x12\xc4\x01\n\x14GetDescriptionEntity\x12 .flyteidl.admin.ObjectGetRequest\x1a!.flyteidl.admin.DescriptionEntity\"g\x82\xd3\xe4\x93\x02\x61\x12_/api/v1/description_entities/{id.resource_type}/{id.project}/{id.domain}/{id.name}/{id.version}\x12\x92\x02\n\x17ListDescriptionEntities\x12,.flyteidl.admin.DescriptionEntityListRequest\x1a%.flyteidl.admin.DescriptionEntityList\"\xa1\x01\x82\xd3\xe4\x93\x02\x9a\x01ZG\x12\x45/api/v1/description_entities/{resource_type}/{id.project}/{id.domain}\x12O/api/v1/description_entities/{resource_type}/{id.project}/{id.domain}/{id.name}\x12\xc5\x01\n\x13GetExecutionMetrics\x12\x32.flyteidl.admin.WorkflowExecutionGetMetricsRequest\x1a\x33.flyteidl.admin.WorkflowExecutionGetMetricsResponse\"E\x82\xd3\xe4\x93\x02?\x12=/api/v1/metrics/executions/{id.project}/{id.domain}/{id.name}B\xc2\x01\n\x14\x63om.flyteidl.serviceB\nAdminProtoP\x01Z=github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/service\xa2\x02\x03\x46SX\xaa\x02\x10\x46lyteidl.Service\xca\x02\x10\x46lyteidl\\Service\xe2\x02\x1c\x46lyteidl\\Service\\GPBMetadata\xea\x02\x11\x46lyteidl::Serviceb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1c\x66lyteidl/service/admin.proto\x12\x10\x66lyteidl.service\x1a\x1cgoogle/api/annotations.proto\x1a\x1c\x66lyteidl/admin/project.proto\x1a.flyteidl/admin/project_domain_attributes.proto\x1a\'flyteidl/admin/project_attributes.proto\x1a\x19\x66lyteidl/admin/task.proto\x1a\x1d\x66lyteidl/admin/workflow.proto\x1a(flyteidl/admin/workflow_attributes.proto\x1a flyteidl/admin/launch_plan.proto\x1a\x1a\x66lyteidl/admin/event.proto\x1a\x1e\x66lyteidl/admin/execution.proto\x1a\'flyteidl/admin/matchable_resource.proto\x1a#flyteidl/admin/node_execution.proto\x1a#flyteidl/admin/task_execution.proto\x1a\x1c\x66lyteidl/admin/version.proto\x1a\x1b\x66lyteidl/admin/common.proto\x1a\'flyteidl/admin/description_entity.proto2\xb5q\n\x0c\x41\x64minService\x12m\n\nCreateTask\x12!.flyteidl.admin.TaskCreateRequest\x1a\".flyteidl.admin.TaskCreateResponse\"\x18\x82\xd3\xe4\x93\x02\x12:\x01*\"\r/api/v1/tasks\x12\xd8\x01\n\x07GetTask\x12 .flyteidl.admin.ObjectGetRequest\x1a\x14.flyteidl.admin.Task\"\x94\x01\x82\xd3\xe4\x93\x02\x8d\x01ZL\x12J/api/v1/tasks/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version}\x12=/api/v1/tasks/{id.project}/{id.domain}/{id.name}/{id.version}\x12\xc5\x01\n\x0bListTaskIds\x12\x30.flyteidl.admin.NamedEntityIdentifierListRequest\x1a).flyteidl.admin.NamedEntityIdentifierList\"Y\x82\xd3\xe4\x93\x02SZ,\x12*/api/v1/tasks/org/{org}/{project}/{domain}\x12#/api/v1/task_ids/{project}/{domain}\x12\xa8\x02\n\tListTasks\x12#.flyteidl.admin.ResourceListRequest\x1a\x18.flyteidl.admin.TaskList\"\xdb\x01\x82\xd3\xe4\x93\x02\xd4\x01Z?\x12=/api/v1/tasks/org/{id.org}/{id.project}/{id.domain}/{id.name}Z(\x12&/api/v1/tasks/{id.project}/{id.domain}Z5\x12\x33/api/v1/tasks/org/{id.org}/{id.project}/{id.domain}\x12\x30/api/v1/tasks/{id.project}/{id.domain}/{id.name}\x12}\n\x0e\x43reateWorkflow\x12%.flyteidl.admin.WorkflowCreateRequest\x1a&.flyteidl.admin.WorkflowCreateResponse\"\x1c\x82\xd3\xe4\x93\x02\x16:\x01*\"\x11/api/v1/workflows\x12\xe8\x01\n\x0bGetWorkflow\x12 .flyteidl.admin.ObjectGetRequest\x1a\x18.flyteidl.admin.Workflow\"\x9c\x01\x82\xd3\xe4\x93\x02\x95\x01ZP\x12N/api/v1/workflows/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version}\x12\x41/api/v1/workflows/{id.project}/{id.domain}/{id.name}/{id.version}\x12\xd1\x01\n\x0fListWorkflowIds\x12\x30.flyteidl.admin.NamedEntityIdentifierListRequest\x1a).flyteidl.admin.NamedEntityIdentifierList\"a\x82\xd3\xe4\x93\x02[Z0\x12./api/v1/workflows/org/{org}/{project}/{domain}\x12\'/api/v1/workflow_ids/{project}/{domain}\x12\xc0\x02\n\rListWorkflows\x12#.flyteidl.admin.ResourceListRequest\x1a\x1c.flyteidl.admin.WorkflowList\"\xeb\x01\x82\xd3\xe4\x93\x02\xe4\x01ZC\x12\x41/api/v1/workflows/org/{id.org}/{id.project}/{id.domain}/{id.name}Z,\x12*/api/v1/workflows/{id.project}/{id.domain}Z9\x12\x37/api/v1/workflows/org/{id.org}/{id.project}/{id.domain}\x12\x34/api/v1/workflows/{id.project}/{id.domain}/{id.name}\x12\x86\x01\n\x10\x43reateLaunchPlan\x12\'.flyteidl.admin.LaunchPlanCreateRequest\x1a(.flyteidl.admin.LaunchPlanCreateResponse\"\x1f\x82\xd3\xe4\x93\x02\x19:\x01*\"\x14/api/v1/launch_plans\x12\xf2\x01\n\rGetLaunchPlan\x12 .flyteidl.admin.ObjectGetRequest\x1a\x1a.flyteidl.admin.LaunchPlan\"\xa2\x01\x82\xd3\xe4\x93\x02\x9b\x01ZS\x12Q/api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version}\x12\x44/api/v1/launch_plans/{id.project}/{id.domain}/{id.name}/{id.version}\x12\xf3\x01\n\x13GetActiveLaunchPlan\x12\'.flyteidl.admin.ActiveLaunchPlanRequest\x1a\x1a.flyteidl.admin.LaunchPlan\"\x96\x01\x82\xd3\xe4\x93\x02\x8f\x01ZM\x12K/api/v1/active_launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name}\x12>/api/v1/active_launch_plans/{id.project}/{id.domain}/{id.name}\x12\x9c\x01\n\x15ListActiveLaunchPlans\x12+.flyteidl.admin.ActiveLaunchPlanListRequest\x1a\x1e.flyteidl.admin.LaunchPlanList\"6\x82\xd3\xe4\x93\x02\x30\x12./api/v1/active_launch_plans/{project}/{domain}\x12\xdc\x01\n\x11ListLaunchPlanIds\x12\x30.flyteidl.admin.NamedEntityIdentifierListRequest\x1a).flyteidl.admin.NamedEntityIdentifierList\"j\x82\xd3\xe4\x93\x02\x64Z6\x12\x34/api/v1/launch_plan_ids/org/{org}/{project}/{domain}\x12*/api/v1/launch_plan_ids/{project}/{domain}\x12\xd0\x02\n\x0fListLaunchPlans\x12#.flyteidl.admin.ResourceListRequest\x1a\x1e.flyteidl.admin.LaunchPlanList\"\xf7\x01\x82\xd3\xe4\x93\x02\xf0\x01ZF\x12\x44/api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name}Z/\x12-/api/v1/launch_plans/{id.project}/{id.domain}Z<\x12:/api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}\x12\x37/api/v1/launch_plans/{id.project}/{id.domain}/{id.name}\x12\x8d\x02\n\x10UpdateLaunchPlan\x12\'.flyteidl.admin.LaunchPlanUpdateRequest\x1a(.flyteidl.admin.LaunchPlanUpdateResponse\"\xa5\x01\x82\xd3\xe4\x93\x02\x9e\x01:\x01*ZS\x1aQ/api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version}\x1a\x44/api/v1/launch_plans/{id.project}/{id.domain}/{id.name}/{id.version}\x12\x81\x01\n\x0f\x43reateExecution\x12&.flyteidl.admin.ExecutionCreateRequest\x1a\'.flyteidl.admin.ExecutionCreateResponse\"\x1d\x82\xd3\xe4\x93\x02\x17:\x01*\"\x12/api/v1/executions\x12\x8e\x01\n\x11RelaunchExecution\x12(.flyteidl.admin.ExecutionRelaunchRequest\x1a\'.flyteidl.admin.ExecutionCreateResponse\"&\x82\xd3\xe4\x93\x02 :\x01*\"\x1b/api/v1/executions/relaunch\x12\x8b\x01\n\x10RecoverExecution\x12\'.flyteidl.admin.ExecutionRecoverRequest\x1a\'.flyteidl.admin.ExecutionCreateResponse\"%\x82\xd3\xe4\x93\x02\x1f:\x01*\"\x1a/api/v1/executions/recover\x12\xdc\x01\n\x0cGetExecution\x12+.flyteidl.admin.WorkflowExecutionGetRequest\x1a\x19.flyteidl.admin.Execution\"\x83\x01\x82\xd3\xe4\x93\x02}ZD\x12\x42/api/v1/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}\x12\x35/api/v1/executions/{id.project}/{id.domain}/{id.name}\x12\xef\x01\n\x0fUpdateExecution\x12&.flyteidl.admin.ExecutionUpdateRequest\x1a\'.flyteidl.admin.ExecutionUpdateResponse\"\x8a\x01\x82\xd3\xe4\x93\x02\x83\x01:\x01*ZG:\x01*\x1a\x42/api/v1/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}\x1a\x35/api/v1/executions/{id.project}/{id.domain}/{id.name}\x12\x86\x02\n\x10GetExecutionData\x12/.flyteidl.admin.WorkflowExecutionGetDataRequest\x1a\x30.flyteidl.admin.WorkflowExecutionGetDataResponse\"\x8e\x01\x82\xd3\xe4\x93\x02\x87\x01ZI\x12G/api/v1/data/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}\x12:/api/v1/data/executions/{id.project}/{id.domain}/{id.name}\x12\xc5\x01\n\x0eListExecutions\x12#.flyteidl.admin.ResourceListRequest\x1a\x1d.flyteidl.admin.ExecutionList\"o\x82\xd3\xe4\x93\x02iZ:\x12\x38/api/v1/executions/org/{id.org}/{id.project}/{id.domain}\x12+/api/v1/executions/{id.project}/{id.domain}\x12\xfd\x01\n\x12TerminateExecution\x12).flyteidl.admin.ExecutionTerminateRequest\x1a*.flyteidl.admin.ExecutionTerminateResponse\"\x8f\x01\x82\xd3\xe4\x93\x02\x88\x01:\x01*ZL:\x01**G/api/v1/data/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}*5/api/v1/executions/{id.project}/{id.domain}/{id.name}\x12\xe2\x02\n\x10GetNodeExecution\x12\'.flyteidl.admin.NodeExecutionGetRequest\x1a\x1d.flyteidl.admin.NodeExecution\"\x85\x02\x82\xd3\xe4\x93\x02\xfe\x01Z\x8b\x01\x12\x88\x01/api/v1/node_executions/org/{id.execution_id.org}/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}\x12n/api/v1/node_executions/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}\x12\xf9\x02\n\x12ListNodeExecutions\x12(.flyteidl.admin.NodeExecutionListRequest\x1a!.flyteidl.admin.NodeExecutionList\"\x95\x02\x82\xd3\xe4\x93\x02\x8e\x02Z\x96\x01\x12\x93\x01/api/v1/node_executions/org/{workflow_execution_id.org}/{workflow_execution_id.project}/{workflow_execution_id.domain}/{workflow_execution_id.name}\x12s/api/v1/node_executions/{workflow_execution_id.project}/{workflow_execution_id.domain}/{workflow_execution_id.name}\x12\x8f\x08\n\x19ListNodeExecutionsForTask\x12/.flyteidl.admin.NodeExecutionForTaskListRequest\x1a!.flyteidl.admin.NodeExecutionList\"\x9d\x07\x82\xd3\xe4\x93\x02\x96\x07Z\xe7\x03\x12\xe4\x03/api/v1/children/task_executions/org/{task_execution_id.node_execution_id.execution_id.org}/{task_execution_id.node_execution_id.execution_id.project}/{task_execution_id.node_execution_id.execution_id.domain}/{task_execution_id.node_execution_id.execution_id.name}/{task_execution_id.node_execution_id.node_id}/{task_execution_id.task_id.project}/{task_execution_id.task_id.domain}/{task_execution_id.task_id.name}/{task_execution_id.task_id.version}/{task_execution_id.retry_attempt}\x12\xa9\x03/api/v1/children/task_executions/{task_execution_id.node_execution_id.execution_id.project}/{task_execution_id.node_execution_id.execution_id.domain}/{task_execution_id.node_execution_id.execution_id.name}/{task_execution_id.node_execution_id.node_id}/{task_execution_id.task_id.project}/{task_execution_id.task_id.domain}/{task_execution_id.task_id.name}/{task_execution_id.task_id.version}/{task_execution_id.retry_attempt}\x12\x83\x03\n\x14GetNodeExecutionData\x12+.flyteidl.admin.NodeExecutionGetDataRequest\x1a,.flyteidl.admin.NodeExecutionGetDataResponse\"\x8f\x02\x82\xd3\xe4\x93\x02\x88\x02Z\x90\x01\x12\x8d\x01/api/v1/data/node_executions/org/{id.execution_id.org}/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}\x12s/api/v1/data/node_executions/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}\x12\x7f\n\x0fRegisterProject\x12&.flyteidl.admin.ProjectRegisterRequest\x1a\'.flyteidl.admin.ProjectRegisterResponse\"\x1b\x82\xd3\xe4\x93\x02\x15:\x01*\"\x10/api/v1/projects\x12\x97\x01\n\rUpdateProject\x12\x17.flyteidl.admin.Project\x1a%.flyteidl.admin.ProjectUpdateResponse\"F\x82\xd3\xe4\x93\x02@:\x01*Z$:\x01*\x1a\x1f/api/v1/projects/org/{org}/{id}\x1a\x15/api/v1/projects/{id}\x12\x66\n\x0cListProjects\x12\".flyteidl.admin.ProjectListRequest\x1a\x18.flyteidl.admin.Projects\"\x18\x82\xd3\xe4\x93\x02\x12\x12\x10/api/v1/projects\x12\x99\x01\n\x13\x43reateWorkflowEvent\x12-.flyteidl.admin.WorkflowExecutionEventRequest\x1a..flyteidl.admin.WorkflowExecutionEventResponse\"#\x82\xd3\xe4\x93\x02\x1d:\x01*\"\x18/api/v1/events/workflows\x12\x89\x01\n\x0f\x43reateNodeEvent\x12).flyteidl.admin.NodeExecutionEventRequest\x1a*.flyteidl.admin.NodeExecutionEventResponse\"\x1f\x82\xd3\xe4\x93\x02\x19:\x01*\"\x14/api/v1/events/nodes\x12\x89\x01\n\x0f\x43reateTaskEvent\x12).flyteidl.admin.TaskExecutionEventRequest\x1a*.flyteidl.admin.TaskExecutionEventResponse\"\x1f\x82\xd3\xe4\x93\x02\x19:\x01*\"\x14/api/v1/events/tasks\x12\xcb\x05\n\x10GetTaskExecution\x12\'.flyteidl.admin.TaskExecutionGetRequest\x1a\x1d.flyteidl.admin.TaskExecution\"\xee\x04\x82\xd3\xe4\x93\x02\xe7\x04Z\xc8\x02\x12\xc5\x02/api/v1/task_executions/org/{id.node_execution_id.execution_id.org}/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}\x12\x99\x02/api/v1/task_executions/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}\x12\xf1\x03\n\x12ListTaskExecutions\x12(.flyteidl.admin.TaskExecutionListRequest\x1a!.flyteidl.admin.TaskExecutionList\"\x8d\x03\x82\xd3\xe4\x93\x02\x86\x03Z\xd6\x01\x12\xd3\x01/api/v1/task_executions/org/{node_execution_id.execution_id.org}/{node_execution_id.execution_id.project}/{node_execution_id.execution_id.domain}/{node_execution_id.execution_id.name}/{node_execution_id.node_id}\x12\xaa\x01/api/v1/task_executions/{node_execution_id.execution_id.project}/{node_execution_id.execution_id.domain}/{node_execution_id.execution_id.name}/{node_execution_id.node_id}\x12\xec\x05\n\x14GetTaskExecutionData\x12+.flyteidl.admin.TaskExecutionGetDataRequest\x1a,.flyteidl.admin.TaskExecutionGetDataResponse\"\xf8\x04\x82\xd3\xe4\x93\x02\xf1\x04Z\xcd\x02\x12\xca\x02/api/v1/data/task_executions/org/{id.node_execution_id.execution_id.org}/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}\x12\x9e\x02/api/v1/data/task_executions/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}\x12\xcb\x02\n\x1dUpdateProjectDomainAttributes\x12\x34.flyteidl.admin.ProjectDomainAttributesUpdateRequest\x1a\x35.flyteidl.admin.ProjectDomainAttributesUpdateResponse\"\xbc\x01\x82\xd3\xe4\x93\x02\xb5\x01:\x01*Zd:\x01*\x1a_/api/v1/project_domain_attributes/org/{attributes.org}/{attributes.project}/{attributes.domain}\x1aJ/api/v1/project_domain_attributes/{attributes.project}/{attributes.domain}\x12\x83\x02\n\x1aGetProjectDomainAttributes\x12\x31.flyteidl.admin.ProjectDomainAttributesGetRequest\x1a\x32.flyteidl.admin.ProjectDomainAttributesGetResponse\"~\x82\xd3\xe4\x93\x02xZ@\x12>/api/v1/project_domain_attributes/org/{org}/{project}/{domain}\x12\x34/api/v1/project_domain_attributes/{project}/{domain}\x12\x93\x02\n\x1d\x44\x65leteProjectDomainAttributes\x12\x34.flyteidl.admin.ProjectDomainAttributesDeleteRequest\x1a\x35.flyteidl.admin.ProjectDomainAttributesDeleteResponse\"\x84\x01\x82\xd3\xe4\x93\x02~:\x01*ZC:\x01**>/api/v1/project_domain_attributes/org/{org}/{project}/{domain}*4/api/v1/project_domain_attributes/{project}/{domain}\x12\x8a\x02\n\x17UpdateProjectAttributes\x12..flyteidl.admin.ProjectAttributesUpdateRequest\x1a/.flyteidl.admin.ProjectAttributesUpdateResponse\"\x8d\x01\x82\xd3\xe4\x93\x02\x86\x01:\x01*ZP:\x01*\x1aK/api/v1/project_domain_attributes/org/{attributes.org}/{attributes.project}\x1a//api/v1/project_attributes/{attributes.project}\x12\xd8\x01\n\x14GetProjectAttributes\x12+.flyteidl.admin.ProjectAttributesGetRequest\x1a,.flyteidl.admin.ProjectAttributesGetResponse\"e\x82\xd3\xe4\x93\x02_Z7\x12\x35/api/v1/project_domain_attributes/org/{org}/{project}\x12$/api/v1/project_attributes/{project}\x12\xe7\x01\n\x17\x44\x65leteProjectAttributes\x12..flyteidl.admin.ProjectAttributesDeleteRequest\x1a/.flyteidl.admin.ProjectAttributesDeleteResponse\"k\x82\xd3\xe4\x93\x02\x65:\x01*Z::\x01**5/api/v1/project_domain_attributes/org/{org}/{project}*$/api/v1/project_attributes/{project}\x12\xdc\x02\n\x18UpdateWorkflowAttributes\x12/.flyteidl.admin.WorkflowAttributesUpdateRequest\x1a\x30.flyteidl.admin.WorkflowAttributesUpdateResponse\"\xdc\x01\x82\xd3\xe4\x93\x02\xd5\x01:\x01*Zt:\x01*\x1ao/api/v1/workflow_attributes/org/{attributes.org}/{attributes.project}/{attributes.domain}/{attributes.workflow}\x1aZ/api/v1/workflow_attributes/{attributes.project}/{attributes.domain}/{attributes.workflow}\x12\x80\x02\n\x15GetWorkflowAttributes\x12,.flyteidl.admin.WorkflowAttributesGetRequest\x1a-.flyteidl.admin.WorkflowAttributesGetResponse\"\x89\x01\x82\xd3\xe4\x93\x02\x82\x01ZE\x12\x43/api/v1/workflow_attributes/org/{org}/{project}/{domain}/{workflow}\x12\x39/api/v1/workflow_attributes/{project}/{domain}/{workflow}\x12\x8f\x02\n\x18\x44\x65leteWorkflowAttributes\x12/.flyteidl.admin.WorkflowAttributesDeleteRequest\x1a\x30.flyteidl.admin.WorkflowAttributesDeleteResponse\"\x8f\x01\x82\xd3\xe4\x93\x02\x88\x01:\x01*ZH:\x01**C/api/v1/workflow_attributes/org/{org}/{project}/{domain}/{workflow}*9/api/v1/workflow_attributes/{project}/{domain}/{workflow}\x12\xa0\x01\n\x17ListMatchableAttributes\x12..flyteidl.admin.ListMatchableAttributesRequest\x1a/.flyteidl.admin.ListMatchableAttributesResponse\"$\x82\xd3\xe4\x93\x02\x1e\x12\x1c/api/v1/matchable_attributes\x12\xe8\x01\n\x11ListNamedEntities\x12&.flyteidl.admin.NamedEntityListRequest\x1a\x1f.flyteidl.admin.NamedEntityList\"\x89\x01\x82\xd3\xe4\x93\x02\x82\x01ZE\x12\x43/api/v1/named_entities/{resource_type}/org/{org}/{project}/{domain}\x12\x39/api/v1/named_entities/{resource_type}/{project}/{domain}\x12\x83\x02\n\x0eGetNamedEntity\x12%.flyteidl.admin.NamedEntityGetRequest\x1a\x1b.flyteidl.admin.NamedEntity\"\xac\x01\x82\xd3\xe4\x93\x02\xa5\x01ZX\x12V/api/v1/named_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain}/{id.name}\x12I/api/v1/named_entities/{resource_type}/{id.project}/{id.domain}/{id.name}\x12\x9d\x02\n\x11UpdateNamedEntity\x12(.flyteidl.admin.NamedEntityUpdateRequest\x1a).flyteidl.admin.NamedEntityUpdateResponse\"\xb2\x01\x82\xd3\xe4\x93\x02\xab\x01:\x01*Z[:\x01*\x1aV/api/v1/named_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain}/{id.name}\x1aI/api/v1/named_entities/{resource_type}/{id.project}/{id.domain}/{id.name}\x12l\n\nGetVersion\x12!.flyteidl.admin.GetVersionRequest\x1a\".flyteidl.admin.GetVersionResponse\"\x17\x82\xd3\xe4\x93\x02\x11\x12\x0f/api/v1/version\x12\xb6\x02\n\x14GetDescriptionEntity\x12 .flyteidl.admin.ObjectGetRequest\x1a!.flyteidl.admin.DescriptionEntity\"\xd8\x01\x82\xd3\xe4\x93\x02\xd1\x01Zn\x12l/api/v1/description_entities/org/{id.org}/{id.resource_type}/{id.project}/{id.domain}/{id.name}/{id.version}\x12_/api/v1/description_entities/{id.resource_type}/{id.project}/{id.domain}/{id.name}/{id.version}\x12\xc8\x03\n\x17ListDescriptionEntities\x12,.flyteidl.admin.DescriptionEntityListRequest\x1a%.flyteidl.admin.DescriptionEntityList\"\xd7\x02\x82\xd3\xe4\x93\x02\xd0\x02Z^\x12\\/api/v1/description_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain}/{id.name}ZG\x12\x45/api/v1/description_entities/{resource_type}/{id.project}/{id.domain}ZT\x12R/api/v1/description_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain}\x12O/api/v1/description_entities/{resource_type}/{id.project}/{id.domain}/{id.name}\x12\x95\x02\n\x13GetExecutionMetrics\x12\x32.flyteidl.admin.WorkflowExecutionGetMetricsRequest\x1a\x33.flyteidl.admin.WorkflowExecutionGetMetricsResponse\"\x94\x01\x82\xd3\xe4\x93\x02\x8d\x01ZL\x12J/api/v1/metrics/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}\x12=/api/v1/metrics/executions/{id.project}/{id.domain}/{id.name}B\xc2\x01\n\x14\x63om.flyteidl.serviceB\nAdminProtoP\x01Z=github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/service\xa2\x02\x03\x46SX\xaa\x02\x10\x46lyteidl.Service\xca\x02\x10\x46lyteidl\\Service\xe2\x02\x1c\x46lyteidl\\Service\\GPBMetadata\xea\x02\x11\x46lyteidl::Serviceb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -41,33 +41,33 @@ _ADMINSERVICE.methods_by_name['CreateTask']._options = None _ADMINSERVICE.methods_by_name['CreateTask']._serialized_options = b'\202\323\344\223\002\022:\001*\"\r/api/v1/tasks' _ADMINSERVICE.methods_by_name['GetTask']._options = None - _ADMINSERVICE.methods_by_name['GetTask']._serialized_options = b'\202\323\344\223\002?\022=/api/v1/tasks/{id.project}/{id.domain}/{id.name}/{id.version}' + _ADMINSERVICE.methods_by_name['GetTask']._serialized_options = b'\202\323\344\223\002\215\001ZL\022J/api/v1/tasks/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version}\022=/api/v1/tasks/{id.project}/{id.domain}/{id.name}/{id.version}' _ADMINSERVICE.methods_by_name['ListTaskIds']._options = None - _ADMINSERVICE.methods_by_name['ListTaskIds']._serialized_options = b'\202\323\344\223\002%\022#/api/v1/task_ids/{project}/{domain}' + _ADMINSERVICE.methods_by_name['ListTaskIds']._serialized_options = b'\202\323\344\223\002SZ,\022*/api/v1/tasks/org/{org}/{project}/{domain}\022#/api/v1/task_ids/{project}/{domain}' _ADMINSERVICE.methods_by_name['ListTasks']._options = None - _ADMINSERVICE.methods_by_name['ListTasks']._serialized_options = b'\202\323\344\223\002\\Z(\022&/api/v1/tasks/{id.project}/{id.domain}\0220/api/v1/tasks/{id.project}/{id.domain}/{id.name}' + _ADMINSERVICE.methods_by_name['ListTasks']._serialized_options = b'\202\323\344\223\002\324\001Z?\022=/api/v1/tasks/org/{id.org}/{id.project}/{id.domain}/{id.name}Z(\022&/api/v1/tasks/{id.project}/{id.domain}Z5\0223/api/v1/tasks/org/{id.org}/{id.project}/{id.domain}\0220/api/v1/tasks/{id.project}/{id.domain}/{id.name}' _ADMINSERVICE.methods_by_name['CreateWorkflow']._options = None _ADMINSERVICE.methods_by_name['CreateWorkflow']._serialized_options = b'\202\323\344\223\002\026:\001*\"\021/api/v1/workflows' _ADMINSERVICE.methods_by_name['GetWorkflow']._options = None - _ADMINSERVICE.methods_by_name['GetWorkflow']._serialized_options = b'\202\323\344\223\002C\022A/api/v1/workflows/{id.project}/{id.domain}/{id.name}/{id.version}' + _ADMINSERVICE.methods_by_name['GetWorkflow']._serialized_options = b'\202\323\344\223\002\225\001ZP\022N/api/v1/workflows/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version}\022A/api/v1/workflows/{id.project}/{id.domain}/{id.name}/{id.version}' _ADMINSERVICE.methods_by_name['ListWorkflowIds']._options = None - _ADMINSERVICE.methods_by_name['ListWorkflowIds']._serialized_options = b'\202\323\344\223\002)\022\'/api/v1/workflow_ids/{project}/{domain}' + _ADMINSERVICE.methods_by_name['ListWorkflowIds']._serialized_options = b'\202\323\344\223\002[Z0\022./api/v1/workflows/org/{org}/{project}/{domain}\022\'/api/v1/workflow_ids/{project}/{domain}' _ADMINSERVICE.methods_by_name['ListWorkflows']._options = None - _ADMINSERVICE.methods_by_name['ListWorkflows']._serialized_options = b'\202\323\344\223\002dZ,\022*/api/v1/workflows/{id.project}/{id.domain}\0224/api/v1/workflows/{id.project}/{id.domain}/{id.name}' + _ADMINSERVICE.methods_by_name['ListWorkflows']._serialized_options = b'\202\323\344\223\002\344\001ZC\022A/api/v1/workflows/org/{id.org}/{id.project}/{id.domain}/{id.name}Z,\022*/api/v1/workflows/{id.project}/{id.domain}Z9\0227/api/v1/workflows/org/{id.org}/{id.project}/{id.domain}\0224/api/v1/workflows/{id.project}/{id.domain}/{id.name}' _ADMINSERVICE.methods_by_name['CreateLaunchPlan']._options = None _ADMINSERVICE.methods_by_name['CreateLaunchPlan']._serialized_options = b'\202\323\344\223\002\031:\001*\"\024/api/v1/launch_plans' _ADMINSERVICE.methods_by_name['GetLaunchPlan']._options = None - _ADMINSERVICE.methods_by_name['GetLaunchPlan']._serialized_options = b'\202\323\344\223\002F\022D/api/v1/launch_plans/{id.project}/{id.domain}/{id.name}/{id.version}' + _ADMINSERVICE.methods_by_name['GetLaunchPlan']._serialized_options = b'\202\323\344\223\002\233\001ZS\022Q/api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version}\022D/api/v1/launch_plans/{id.project}/{id.domain}/{id.name}/{id.version}' _ADMINSERVICE.methods_by_name['GetActiveLaunchPlan']._options = None - _ADMINSERVICE.methods_by_name['GetActiveLaunchPlan']._serialized_options = b'\202\323\344\223\002@\022>/api/v1/active_launch_plans/{id.project}/{id.domain}/{id.name}' + _ADMINSERVICE.methods_by_name['GetActiveLaunchPlan']._serialized_options = b'\202\323\344\223\002\217\001ZM\022K/api/v1/active_launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name}\022>/api/v1/active_launch_plans/{id.project}/{id.domain}/{id.name}' _ADMINSERVICE.methods_by_name['ListActiveLaunchPlans']._options = None _ADMINSERVICE.methods_by_name['ListActiveLaunchPlans']._serialized_options = b'\202\323\344\223\0020\022./api/v1/active_launch_plans/{project}/{domain}' _ADMINSERVICE.methods_by_name['ListLaunchPlanIds']._options = None - _ADMINSERVICE.methods_by_name['ListLaunchPlanIds']._serialized_options = b'\202\323\344\223\002,\022*/api/v1/launch_plan_ids/{project}/{domain}' + _ADMINSERVICE.methods_by_name['ListLaunchPlanIds']._serialized_options = b'\202\323\344\223\002dZ6\0224/api/v1/launch_plan_ids/org/{org}/{project}/{domain}\022*/api/v1/launch_plan_ids/{project}/{domain}' _ADMINSERVICE.methods_by_name['ListLaunchPlans']._options = None - _ADMINSERVICE.methods_by_name['ListLaunchPlans']._serialized_options = b'\202\323\344\223\002jZ/\022-/api/v1/launch_plans/{id.project}/{id.domain}\0227/api/v1/launch_plans/{id.project}/{id.domain}/{id.name}' + _ADMINSERVICE.methods_by_name['ListLaunchPlans']._serialized_options = b'\202\323\344\223\002\360\001ZF\022D/api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name}Z/\022-/api/v1/launch_plans/{id.project}/{id.domain}Z<\022:/api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}\0227/api/v1/launch_plans/{id.project}/{id.domain}/{id.name}' _ADMINSERVICE.methods_by_name['UpdateLaunchPlan']._options = None - _ADMINSERVICE.methods_by_name['UpdateLaunchPlan']._serialized_options = b'\202\323\344\223\002I:\001*\032D/api/v1/launch_plans/{id.project}/{id.domain}/{id.name}/{id.version}' + _ADMINSERVICE.methods_by_name['UpdateLaunchPlan']._serialized_options = b'\202\323\344\223\002\236\001:\001*ZS\032Q/api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version}\032D/api/v1/launch_plans/{id.project}/{id.domain}/{id.name}/{id.version}' _ADMINSERVICE.methods_by_name['CreateExecution']._options = None _ADMINSERVICE.methods_by_name['CreateExecution']._serialized_options = b'\202\323\344\223\002\027:\001*\"\022/api/v1/executions' _ADMINSERVICE.methods_by_name['RelaunchExecution']._options = None @@ -75,27 +75,27 @@ _ADMINSERVICE.methods_by_name['RecoverExecution']._options = None _ADMINSERVICE.methods_by_name['RecoverExecution']._serialized_options = b'\202\323\344\223\002\037:\001*\"\032/api/v1/executions/recover' _ADMINSERVICE.methods_by_name['GetExecution']._options = None - _ADMINSERVICE.methods_by_name['GetExecution']._serialized_options = b'\202\323\344\223\0027\0225/api/v1/executions/{id.project}/{id.domain}/{id.name}' + _ADMINSERVICE.methods_by_name['GetExecution']._serialized_options = b'\202\323\344\223\002}ZD\022B/api/v1/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}\0225/api/v1/executions/{id.project}/{id.domain}/{id.name}' _ADMINSERVICE.methods_by_name['UpdateExecution']._options = None - _ADMINSERVICE.methods_by_name['UpdateExecution']._serialized_options = b'\202\323\344\223\002::\001*\0325/api/v1/executions/{id.project}/{id.domain}/{id.name}' + _ADMINSERVICE.methods_by_name['UpdateExecution']._serialized_options = b'\202\323\344\223\002\203\001:\001*ZG:\001*\032B/api/v1/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}\0325/api/v1/executions/{id.project}/{id.domain}/{id.name}' _ADMINSERVICE.methods_by_name['GetExecutionData']._options = None - _ADMINSERVICE.methods_by_name['GetExecutionData']._serialized_options = b'\202\323\344\223\002<\022:/api/v1/data/executions/{id.project}/{id.domain}/{id.name}' + _ADMINSERVICE.methods_by_name['GetExecutionData']._serialized_options = b'\202\323\344\223\002\207\001ZI\022G/api/v1/data/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}\022:/api/v1/data/executions/{id.project}/{id.domain}/{id.name}' _ADMINSERVICE.methods_by_name['ListExecutions']._options = None - _ADMINSERVICE.methods_by_name['ListExecutions']._serialized_options = b'\202\323\344\223\002-\022+/api/v1/executions/{id.project}/{id.domain}' + _ADMINSERVICE.methods_by_name['ListExecutions']._serialized_options = b'\202\323\344\223\002iZ:\0228/api/v1/executions/org/{id.org}/{id.project}/{id.domain}\022+/api/v1/executions/{id.project}/{id.domain}' _ADMINSERVICE.methods_by_name['TerminateExecution']._options = None - _ADMINSERVICE.methods_by_name['TerminateExecution']._serialized_options = b'\202\323\344\223\002::\001**5/api/v1/executions/{id.project}/{id.domain}/{id.name}' + _ADMINSERVICE.methods_by_name['TerminateExecution']._serialized_options = b'\202\323\344\223\002\210\001:\001*ZL:\001**G/api/v1/data/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}*5/api/v1/executions/{id.project}/{id.domain}/{id.name}' _ADMINSERVICE.methods_by_name['GetNodeExecution']._options = None - _ADMINSERVICE.methods_by_name['GetNodeExecution']._serialized_options = b'\202\323\344\223\002p\022n/api/v1/node_executions/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}' + _ADMINSERVICE.methods_by_name['GetNodeExecution']._serialized_options = b'\202\323\344\223\002\376\001Z\213\001\022\210\001/api/v1/node_executions/org/{id.execution_id.org}/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}\022n/api/v1/node_executions/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}' _ADMINSERVICE.methods_by_name['ListNodeExecutions']._options = None - _ADMINSERVICE.methods_by_name['ListNodeExecutions']._serialized_options = b'\202\323\344\223\002u\022s/api/v1/node_executions/{workflow_execution_id.project}/{workflow_execution_id.domain}/{workflow_execution_id.name}' + _ADMINSERVICE.methods_by_name['ListNodeExecutions']._serialized_options = b'\202\323\344\223\002\216\002Z\226\001\022\223\001/api/v1/node_executions/org/{workflow_execution_id.org}/{workflow_execution_id.project}/{workflow_execution_id.domain}/{workflow_execution_id.name}\022s/api/v1/node_executions/{workflow_execution_id.project}/{workflow_execution_id.domain}/{workflow_execution_id.name}' _ADMINSERVICE.methods_by_name['ListNodeExecutionsForTask']._options = None - _ADMINSERVICE.methods_by_name['ListNodeExecutionsForTask']._serialized_options = b'\202\323\344\223\002\254\003\022\251\003/api/v1/children/task_executions/{task_execution_id.node_execution_id.execution_id.project}/{task_execution_id.node_execution_id.execution_id.domain}/{task_execution_id.node_execution_id.execution_id.name}/{task_execution_id.node_execution_id.node_id}/{task_execution_id.task_id.project}/{task_execution_id.task_id.domain}/{task_execution_id.task_id.name}/{task_execution_id.task_id.version}/{task_execution_id.retry_attempt}' + _ADMINSERVICE.methods_by_name['ListNodeExecutionsForTask']._serialized_options = b'\202\323\344\223\002\226\007Z\347\003\022\344\003/api/v1/children/task_executions/org/{task_execution_id.node_execution_id.execution_id.org}/{task_execution_id.node_execution_id.execution_id.project}/{task_execution_id.node_execution_id.execution_id.domain}/{task_execution_id.node_execution_id.execution_id.name}/{task_execution_id.node_execution_id.node_id}/{task_execution_id.task_id.project}/{task_execution_id.task_id.domain}/{task_execution_id.task_id.name}/{task_execution_id.task_id.version}/{task_execution_id.retry_attempt}\022\251\003/api/v1/children/task_executions/{task_execution_id.node_execution_id.execution_id.project}/{task_execution_id.node_execution_id.execution_id.domain}/{task_execution_id.node_execution_id.execution_id.name}/{task_execution_id.node_execution_id.node_id}/{task_execution_id.task_id.project}/{task_execution_id.task_id.domain}/{task_execution_id.task_id.name}/{task_execution_id.task_id.version}/{task_execution_id.retry_attempt}' _ADMINSERVICE.methods_by_name['GetNodeExecutionData']._options = None - _ADMINSERVICE.methods_by_name['GetNodeExecutionData']._serialized_options = b'\202\323\344\223\002u\022s/api/v1/data/node_executions/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}' + _ADMINSERVICE.methods_by_name['GetNodeExecutionData']._serialized_options = b'\202\323\344\223\002\210\002Z\220\001\022\215\001/api/v1/data/node_executions/org/{id.execution_id.org}/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}\022s/api/v1/data/node_executions/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}' _ADMINSERVICE.methods_by_name['RegisterProject']._options = None _ADMINSERVICE.methods_by_name['RegisterProject']._serialized_options = b'\202\323\344\223\002\025:\001*\"\020/api/v1/projects' _ADMINSERVICE.methods_by_name['UpdateProject']._options = None - _ADMINSERVICE.methods_by_name['UpdateProject']._serialized_options = b'\202\323\344\223\002\032:\001*\032\025/api/v1/projects/{id}' + _ADMINSERVICE.methods_by_name['UpdateProject']._serialized_options = b'\202\323\344\223\002@:\001*Z$:\001*\032\037/api/v1/projects/org/{org}/{id}\032\025/api/v1/projects/{id}' _ADMINSERVICE.methods_by_name['ListProjects']._options = None _ADMINSERVICE.methods_by_name['ListProjects']._serialized_options = b'\202\323\344\223\002\022\022\020/api/v1/projects' _ADMINSERVICE.methods_by_name['CreateWorkflowEvent']._options = None @@ -105,45 +105,45 @@ _ADMINSERVICE.methods_by_name['CreateTaskEvent']._options = None _ADMINSERVICE.methods_by_name['CreateTaskEvent']._serialized_options = b'\202\323\344\223\002\031:\001*\"\024/api/v1/events/tasks' _ADMINSERVICE.methods_by_name['GetTaskExecution']._options = None - _ADMINSERVICE.methods_by_name['GetTaskExecution']._serialized_options = b'\202\323\344\223\002\234\002\022\231\002/api/v1/task_executions/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}' + _ADMINSERVICE.methods_by_name['GetTaskExecution']._serialized_options = b'\202\323\344\223\002\347\004Z\310\002\022\305\002/api/v1/task_executions/org/{id.node_execution_id.execution_id.org}/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}\022\231\002/api/v1/task_executions/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}' _ADMINSERVICE.methods_by_name['ListTaskExecutions']._options = None - _ADMINSERVICE.methods_by_name['ListTaskExecutions']._serialized_options = b'\202\323\344\223\002\255\001\022\252\001/api/v1/task_executions/{node_execution_id.execution_id.project}/{node_execution_id.execution_id.domain}/{node_execution_id.execution_id.name}/{node_execution_id.node_id}' + _ADMINSERVICE.methods_by_name['ListTaskExecutions']._serialized_options = b'\202\323\344\223\002\206\003Z\326\001\022\323\001/api/v1/task_executions/org/{node_execution_id.execution_id.org}/{node_execution_id.execution_id.project}/{node_execution_id.execution_id.domain}/{node_execution_id.execution_id.name}/{node_execution_id.node_id}\022\252\001/api/v1/task_executions/{node_execution_id.execution_id.project}/{node_execution_id.execution_id.domain}/{node_execution_id.execution_id.name}/{node_execution_id.node_id}' _ADMINSERVICE.methods_by_name['GetTaskExecutionData']._options = None - _ADMINSERVICE.methods_by_name['GetTaskExecutionData']._serialized_options = b'\202\323\344\223\002\241\002\022\236\002/api/v1/data/task_executions/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}' + _ADMINSERVICE.methods_by_name['GetTaskExecutionData']._serialized_options = b'\202\323\344\223\002\361\004Z\315\002\022\312\002/api/v1/data/task_executions/org/{id.node_execution_id.execution_id.org}/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}\022\236\002/api/v1/data/task_executions/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}' _ADMINSERVICE.methods_by_name['UpdateProjectDomainAttributes']._options = None - _ADMINSERVICE.methods_by_name['UpdateProjectDomainAttributes']._serialized_options = b'\202\323\344\223\002O:\001*\032J/api/v1/project_domain_attributes/{attributes.project}/{attributes.domain}' + _ADMINSERVICE.methods_by_name['UpdateProjectDomainAttributes']._serialized_options = b'\202\323\344\223\002\265\001:\001*Zd:\001*\032_/api/v1/project_domain_attributes/org/{attributes.org}/{attributes.project}/{attributes.domain}\032J/api/v1/project_domain_attributes/{attributes.project}/{attributes.domain}' _ADMINSERVICE.methods_by_name['GetProjectDomainAttributes']._options = None - _ADMINSERVICE.methods_by_name['GetProjectDomainAttributes']._serialized_options = b'\202\323\344\223\0026\0224/api/v1/project_domain_attributes/{project}/{domain}' + _ADMINSERVICE.methods_by_name['GetProjectDomainAttributes']._serialized_options = b'\202\323\344\223\002xZ@\022>/api/v1/project_domain_attributes/org/{org}/{project}/{domain}\0224/api/v1/project_domain_attributes/{project}/{domain}' _ADMINSERVICE.methods_by_name['DeleteProjectDomainAttributes']._options = None - _ADMINSERVICE.methods_by_name['DeleteProjectDomainAttributes']._serialized_options = b'\202\323\344\223\0029:\001**4/api/v1/project_domain_attributes/{project}/{domain}' + _ADMINSERVICE.methods_by_name['DeleteProjectDomainAttributes']._serialized_options = b'\202\323\344\223\002~:\001*ZC:\001**>/api/v1/project_domain_attributes/org/{org}/{project}/{domain}*4/api/v1/project_domain_attributes/{project}/{domain}' _ADMINSERVICE.methods_by_name['UpdateProjectAttributes']._options = None - _ADMINSERVICE.methods_by_name['UpdateProjectAttributes']._serialized_options = b'\202\323\344\223\0024:\001*\032//api/v1/project_attributes/{attributes.project}' + _ADMINSERVICE.methods_by_name['UpdateProjectAttributes']._serialized_options = b'\202\323\344\223\002\206\001:\001*ZP:\001*\032K/api/v1/project_domain_attributes/org/{attributes.org}/{attributes.project}\032//api/v1/project_attributes/{attributes.project}' _ADMINSERVICE.methods_by_name['GetProjectAttributes']._options = None - _ADMINSERVICE.methods_by_name['GetProjectAttributes']._serialized_options = b'\202\323\344\223\002&\022$/api/v1/project_attributes/{project}' + _ADMINSERVICE.methods_by_name['GetProjectAttributes']._serialized_options = b'\202\323\344\223\002_Z7\0225/api/v1/project_domain_attributes/org/{org}/{project}\022$/api/v1/project_attributes/{project}' _ADMINSERVICE.methods_by_name['DeleteProjectAttributes']._options = None - _ADMINSERVICE.methods_by_name['DeleteProjectAttributes']._serialized_options = b'\202\323\344\223\002):\001**$/api/v1/project_attributes/{project}' + _ADMINSERVICE.methods_by_name['DeleteProjectAttributes']._serialized_options = b'\202\323\344\223\002e:\001*Z::\001**5/api/v1/project_domain_attributes/org/{org}/{project}*$/api/v1/project_attributes/{project}' _ADMINSERVICE.methods_by_name['UpdateWorkflowAttributes']._options = None - _ADMINSERVICE.methods_by_name['UpdateWorkflowAttributes']._serialized_options = b'\202\323\344\223\002_:\001*\032Z/api/v1/workflow_attributes/{attributes.project}/{attributes.domain}/{attributes.workflow}' + _ADMINSERVICE.methods_by_name['UpdateWorkflowAttributes']._serialized_options = b'\202\323\344\223\002\325\001:\001*Zt:\001*\032o/api/v1/workflow_attributes/org/{attributes.org}/{attributes.project}/{attributes.domain}/{attributes.workflow}\032Z/api/v1/workflow_attributes/{attributes.project}/{attributes.domain}/{attributes.workflow}' _ADMINSERVICE.methods_by_name['GetWorkflowAttributes']._options = None - _ADMINSERVICE.methods_by_name['GetWorkflowAttributes']._serialized_options = b'\202\323\344\223\002;\0229/api/v1/workflow_attributes/{project}/{domain}/{workflow}' + _ADMINSERVICE.methods_by_name['GetWorkflowAttributes']._serialized_options = b'\202\323\344\223\002\202\001ZE\022C/api/v1/workflow_attributes/org/{org}/{project}/{domain}/{workflow}\0229/api/v1/workflow_attributes/{project}/{domain}/{workflow}' _ADMINSERVICE.methods_by_name['DeleteWorkflowAttributes']._options = None - _ADMINSERVICE.methods_by_name['DeleteWorkflowAttributes']._serialized_options = b'\202\323\344\223\002>:\001**9/api/v1/workflow_attributes/{project}/{domain}/{workflow}' + _ADMINSERVICE.methods_by_name['DeleteWorkflowAttributes']._serialized_options = b'\202\323\344\223\002\210\001:\001*ZH:\001**C/api/v1/workflow_attributes/org/{org}/{project}/{domain}/{workflow}*9/api/v1/workflow_attributes/{project}/{domain}/{workflow}' _ADMINSERVICE.methods_by_name['ListMatchableAttributes']._options = None _ADMINSERVICE.methods_by_name['ListMatchableAttributes']._serialized_options = b'\202\323\344\223\002\036\022\034/api/v1/matchable_attributes' _ADMINSERVICE.methods_by_name['ListNamedEntities']._options = None - _ADMINSERVICE.methods_by_name['ListNamedEntities']._serialized_options = b'\202\323\344\223\002;\0229/api/v1/named_entities/{resource_type}/{project}/{domain}' + _ADMINSERVICE.methods_by_name['ListNamedEntities']._serialized_options = b'\202\323\344\223\002\202\001ZE\022C/api/v1/named_entities/{resource_type}/org/{org}/{project}/{domain}\0229/api/v1/named_entities/{resource_type}/{project}/{domain}' _ADMINSERVICE.methods_by_name['GetNamedEntity']._options = None - _ADMINSERVICE.methods_by_name['GetNamedEntity']._serialized_options = b'\202\323\344\223\002K\022I/api/v1/named_entities/{resource_type}/{id.project}/{id.domain}/{id.name}' + _ADMINSERVICE.methods_by_name['GetNamedEntity']._serialized_options = b'\202\323\344\223\002\245\001ZX\022V/api/v1/named_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain}/{id.name}\022I/api/v1/named_entities/{resource_type}/{id.project}/{id.domain}/{id.name}' _ADMINSERVICE.methods_by_name['UpdateNamedEntity']._options = None - _ADMINSERVICE.methods_by_name['UpdateNamedEntity']._serialized_options = b'\202\323\344\223\002N:\001*\032I/api/v1/named_entities/{resource_type}/{id.project}/{id.domain}/{id.name}' + _ADMINSERVICE.methods_by_name['UpdateNamedEntity']._serialized_options = b'\202\323\344\223\002\253\001:\001*Z[:\001*\032V/api/v1/named_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain}/{id.name}\032I/api/v1/named_entities/{resource_type}/{id.project}/{id.domain}/{id.name}' _ADMINSERVICE.methods_by_name['GetVersion']._options = None _ADMINSERVICE.methods_by_name['GetVersion']._serialized_options = b'\202\323\344\223\002\021\022\017/api/v1/version' _ADMINSERVICE.methods_by_name['GetDescriptionEntity']._options = None - _ADMINSERVICE.methods_by_name['GetDescriptionEntity']._serialized_options = b'\202\323\344\223\002a\022_/api/v1/description_entities/{id.resource_type}/{id.project}/{id.domain}/{id.name}/{id.version}' + _ADMINSERVICE.methods_by_name['GetDescriptionEntity']._serialized_options = b'\202\323\344\223\002\321\001Zn\022l/api/v1/description_entities/org/{id.org}/{id.resource_type}/{id.project}/{id.domain}/{id.name}/{id.version}\022_/api/v1/description_entities/{id.resource_type}/{id.project}/{id.domain}/{id.name}/{id.version}' _ADMINSERVICE.methods_by_name['ListDescriptionEntities']._options = None - _ADMINSERVICE.methods_by_name['ListDescriptionEntities']._serialized_options = b'\202\323\344\223\002\232\001ZG\022E/api/v1/description_entities/{resource_type}/{id.project}/{id.domain}\022O/api/v1/description_entities/{resource_type}/{id.project}/{id.domain}/{id.name}' + _ADMINSERVICE.methods_by_name['ListDescriptionEntities']._serialized_options = b'\202\323\344\223\002\320\002Z^\022\\/api/v1/description_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain}/{id.name}ZG\022E/api/v1/description_entities/{resource_type}/{id.project}/{id.domain}ZT\022R/api/v1/description_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain}\022O/api/v1/description_entities/{resource_type}/{id.project}/{id.domain}/{id.name}' _ADMINSERVICE.methods_by_name['GetExecutionMetrics']._options = None - _ADMINSERVICE.methods_by_name['GetExecutionMetrics']._serialized_options = b'\202\323\344\223\002?\022=/api/v1/metrics/executions/{id.project}/{id.domain}/{id.name}' + _ADMINSERVICE.methods_by_name['GetExecutionMetrics']._serialized_options = b'\202\323\344\223\002\215\001ZL\022J/api/v1/metrics/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}\022=/api/v1/metrics/executions/{id.project}/{id.domain}/{id.name}' _globals['_ADMINSERVICE']._serialized_start=609 - _globals['_ADMINSERVICE']._serialized_end=10597 + _globals['_ADMINSERVICE']._serialized_end=15126 # @@protoc_insertion_point(module_scope) diff --git a/flyteidl/gen/pb_python/flyteidl/service/admin_pb2_grpc.py b/flyteidl/gen/pb_python/flyteidl/service/admin_pb2_grpc.py index 2e7bda23fe..7fe54c9f8c 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/admin_pb2_grpc.py +++ b/flyteidl/gen/pb_python/flyteidl/service/admin_pb2_grpc.py @@ -317,7 +317,7 @@ def GetTask(self, request, context): raise NotImplementedError('Method not implemented!') def ListTaskIds(self, request, context): - """Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of task objects. + """Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of task objects. """ context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details('Method not implemented!') @@ -503,7 +503,7 @@ def RegisterProject(self, request, context): raise NotImplementedError('Method not implemented!') def UpdateProject(self, request, context): - """Updates an existing :ref:`ref_flyteidl.admin.Project` + """Updates an existing :ref:`ref_flyteidl.admin.Project` flyteidl.admin.Project should be passed but the domains property should be empty; it will be ignored in the handler as domains cannot be updated via this API. """ @@ -512,7 +512,7 @@ def UpdateProject(self, request, context): raise NotImplementedError('Method not implemented!') def ListProjects(self, request, context): - """Fetches a list of :ref:`ref_flyteidl.admin.Project` + """Fetches a list of :ref:`ref_flyteidl.admin.Project` """ context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details('Method not implemented!') diff --git a/flyteidl/gen/pb_python/flyteidl/service/external_plugin_service_pb2.py b/flyteidl/gen/pb_python/flyteidl/service/external_plugin_service_pb2.py index 4de8daabf8..db56c22adf 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/external_plugin_service_pb2.py +++ b/flyteidl/gen/pb_python/flyteidl/service/external_plugin_service_pb2.py @@ -13,10 +13,9 @@ from flyteidl.core import literals_pb2 as flyteidl_dot_core_dot_literals__pb2 from flyteidl.core import tasks_pb2 as flyteidl_dot_core_dot_tasks__pb2 -from flyteidl.core import interface_pb2 as flyteidl_dot_core_dot_interface__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n.flyteidl/service/external_plugin_service.proto\x12\x10\x66lyteidl.service\x1a\x1c\x66lyteidl/core/literals.proto\x1a\x19\x66lyteidl/core/tasks.proto\x1a\x1d\x66lyteidl/core/interface.proto\"\xa8\x01\n\x11TaskCreateRequest\x12\x31\n\x06inputs\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapR\x06inputs\x12\x37\n\x08template\x18\x02 \x01(\x0b\x32\x1b.flyteidl.core.TaskTemplateR\x08template\x12#\n\routput_prefix\x18\x03 \x01(\tR\x0coutputPrefix:\x02\x18\x01\"/\n\x12TaskCreateResponse\x12\x15\n\x06job_id\x18\x01 \x01(\tR\x05jobId:\x02\x18\x01\"H\n\x0eTaskGetRequest\x12\x1b\n\ttask_type\x18\x01 \x01(\tR\x08taskType\x12\x15\n\x06job_id\x18\x02 \x01(\tR\x05jobId:\x02\x18\x01\"y\n\x0fTaskGetResponse\x12-\n\x05state\x18\x01 \x01(\x0e\x32\x17.flyteidl.service.StateR\x05state\x12\x33\n\x07outputs\x18\x02 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapR\x07outputs:\x02\x18\x01\"K\n\x11TaskDeleteRequest\x12\x1b\n\ttask_type\x18\x01 \x01(\tR\x08taskType\x12\x15\n\x06job_id\x18\x02 \x01(\tR\x05jobId:\x02\x18\x01\"\x18\n\x12TaskDeleteResponse:\x02\x18\x01*b\n\x05State\x12\x15\n\x11RETRYABLE_FAILURE\x10\x00\x12\x15\n\x11PERMANENT_FAILURE\x10\x01\x12\x0b\n\x07PENDING\x10\x02\x12\x0b\n\x07RUNNING\x10\x03\x12\r\n\tSUCCEEDED\x10\x04\x1a\x02\x18\x01\x32\xa8\x02\n\x15\x45xternalPluginService\x12\\\n\nCreateTask\x12#.flyteidl.service.TaskCreateRequest\x1a$.flyteidl.service.TaskCreateResponse\"\x03\x88\x02\x01\x12S\n\x07GetTask\x12 .flyteidl.service.TaskGetRequest\x1a!.flyteidl.service.TaskGetResponse\"\x03\x88\x02\x01\x12\\\n\nDeleteTask\x12#.flyteidl.service.TaskDeleteRequest\x1a$.flyteidl.service.TaskDeleteResponse\"\x03\x88\x02\x01\x42\xd2\x01\n\x14\x63om.flyteidl.serviceB\x1a\x45xternalPluginServiceProtoP\x01Z=github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/service\xa2\x02\x03\x46SX\xaa\x02\x10\x46lyteidl.Service\xca\x02\x10\x46lyteidl\\Service\xe2\x02\x1c\x46lyteidl\\Service\\GPBMetadata\xea\x02\x11\x46lyteidl::Serviceb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n.flyteidl/service/external_plugin_service.proto\x12\x10\x66lyteidl.service\x1a\x1c\x66lyteidl/core/literals.proto\x1a\x19\x66lyteidl/core/tasks.proto\"\xa8\x01\n\x11TaskCreateRequest\x12\x31\n\x06inputs\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapR\x06inputs\x12\x37\n\x08template\x18\x02 \x01(\x0b\x32\x1b.flyteidl.core.TaskTemplateR\x08template\x12#\n\routput_prefix\x18\x03 \x01(\tR\x0coutputPrefix:\x02\x18\x01\"/\n\x12TaskCreateResponse\x12\x15\n\x06job_id\x18\x01 \x01(\tR\x05jobId:\x02\x18\x01\"H\n\x0eTaskGetRequest\x12\x1b\n\ttask_type\x18\x01 \x01(\tR\x08taskType\x12\x15\n\x06job_id\x18\x02 \x01(\tR\x05jobId:\x02\x18\x01\"y\n\x0fTaskGetResponse\x12-\n\x05state\x18\x01 \x01(\x0e\x32\x17.flyteidl.service.StateR\x05state\x12\x33\n\x07outputs\x18\x02 \x01(\x0b\x32\x19.flyteidl.core.LiteralMapR\x07outputs:\x02\x18\x01\"K\n\x11TaskDeleteRequest\x12\x1b\n\ttask_type\x18\x01 \x01(\tR\x08taskType\x12\x15\n\x06job_id\x18\x02 \x01(\tR\x05jobId:\x02\x18\x01\"\x18\n\x12TaskDeleteResponse:\x02\x18\x01*b\n\x05State\x12\x15\n\x11RETRYABLE_FAILURE\x10\x00\x12\x15\n\x11PERMANENT_FAILURE\x10\x01\x12\x0b\n\x07PENDING\x10\x02\x12\x0b\n\x07RUNNING\x10\x03\x12\r\n\tSUCCEEDED\x10\x04\x1a\x02\x18\x01\x32\xa8\x02\n\x15\x45xternalPluginService\x12\\\n\nCreateTask\x12#.flyteidl.service.TaskCreateRequest\x1a$.flyteidl.service.TaskCreateResponse\"\x03\x88\x02\x01\x12S\n\x07GetTask\x12 .flyteidl.service.TaskGetRequest\x1a!.flyteidl.service.TaskGetResponse\"\x03\x88\x02\x01\x12\\\n\nDeleteTask\x12#.flyteidl.service.TaskDeleteRequest\x1a$.flyteidl.service.TaskDeleteResponse\"\x03\x88\x02\x01\x42\xd2\x01\n\x14\x63om.flyteidl.serviceB\x1a\x45xternalPluginServiceProtoP\x01Z=github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/service\xa2\x02\x03\x46SX\xaa\x02\x10\x46lyteidl.Service\xca\x02\x10\x46lyteidl\\Service\xe2\x02\x1c\x46lyteidl\\Service\\GPBMetadata\xea\x02\x11\x46lyteidl::Serviceb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -45,20 +44,20 @@ _EXTERNALPLUGINSERVICE.methods_by_name['GetTask']._serialized_options = b'\210\002\001' _EXTERNALPLUGINSERVICE.methods_by_name['DeleteTask']._options = None _EXTERNALPLUGINSERVICE.methods_by_name['DeleteTask']._serialized_options = b'\210\002\001' - _globals['_STATE']._serialized_start=676 - _globals['_STATE']._serialized_end=774 - _globals['_TASKCREATEREQUEST']._serialized_start=157 - _globals['_TASKCREATEREQUEST']._serialized_end=325 - _globals['_TASKCREATERESPONSE']._serialized_start=327 - _globals['_TASKCREATERESPONSE']._serialized_end=374 - _globals['_TASKGETREQUEST']._serialized_start=376 - _globals['_TASKGETREQUEST']._serialized_end=448 - _globals['_TASKGETRESPONSE']._serialized_start=450 - _globals['_TASKGETRESPONSE']._serialized_end=571 - _globals['_TASKDELETEREQUEST']._serialized_start=573 - _globals['_TASKDELETEREQUEST']._serialized_end=648 - _globals['_TASKDELETERESPONSE']._serialized_start=650 - _globals['_TASKDELETERESPONSE']._serialized_end=674 - _globals['_EXTERNALPLUGINSERVICE']._serialized_start=777 - _globals['_EXTERNALPLUGINSERVICE']._serialized_end=1073 + _globals['_STATE']._serialized_start=645 + _globals['_STATE']._serialized_end=743 + _globals['_TASKCREATEREQUEST']._serialized_start=126 + _globals['_TASKCREATEREQUEST']._serialized_end=294 + _globals['_TASKCREATERESPONSE']._serialized_start=296 + _globals['_TASKCREATERESPONSE']._serialized_end=343 + _globals['_TASKGETREQUEST']._serialized_start=345 + _globals['_TASKGETREQUEST']._serialized_end=417 + _globals['_TASKGETRESPONSE']._serialized_start=419 + _globals['_TASKGETRESPONSE']._serialized_end=540 + _globals['_TASKDELETEREQUEST']._serialized_start=542 + _globals['_TASKDELETEREQUEST']._serialized_end=617 + _globals['_TASKDELETERESPONSE']._serialized_start=619 + _globals['_TASKDELETERESPONSE']._serialized_end=643 + _globals['_EXTERNALPLUGINSERVICE']._serialized_start=746 + _globals['_EXTERNALPLUGINSERVICE']._serialized_end=1042 # @@protoc_insertion_point(module_scope) diff --git a/flyteidl/gen/pb_python/flyteidl/service/external_plugin_service_pb2.pyi b/flyteidl/gen/pb_python/flyteidl/service/external_plugin_service_pb2.pyi index b5163a8bfe..c09566929f 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/external_plugin_service_pb2.pyi +++ b/flyteidl/gen/pb_python/flyteidl/service/external_plugin_service_pb2.pyi @@ -1,6 +1,5 @@ from flyteidl.core import literals_pb2 as _literals_pb2 from flyteidl.core import tasks_pb2 as _tasks_pb2 -from flyteidl.core import interface_pb2 as _interface_pb2 from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/README.md b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/README.md index 9136b44368..8b5357a947 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/README.md +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/README.md @@ -78,55 +78,98 @@ Class | Method | HTTP request | Description *AdminServiceApi* | [**create_workflow**](docs/AdminServiceApi.md#create_workflow) | **POST** /api/v1/workflows | Create and upload a :ref:`ref_flyteidl.admin.Workflow` definition *AdminServiceApi* | [**create_workflow_event**](docs/AdminServiceApi.md#create_workflow_event) | **POST** /api/v1/events/workflows | Indicates a :ref:`ref_flyteidl.event.WorkflowExecutionEvent` has occurred. *AdminServiceApi* | [**delete_project_attributes**](docs/AdminServiceApi.md#delete_project_attributes) | **DELETE** /api/v1/project_attributes/{project} | Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. +*AdminServiceApi* | [**delete_project_attributes2**](docs/AdminServiceApi.md#delete_project_attributes2) | **DELETE** /api/v1/project_domain_attributes/org/{org}/{project} | Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. *AdminServiceApi* | [**delete_project_domain_attributes**](docs/AdminServiceApi.md#delete_project_domain_attributes) | **DELETE** /api/v1/project_domain_attributes/{project}/{domain} | Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. +*AdminServiceApi* | [**delete_project_domain_attributes2**](docs/AdminServiceApi.md#delete_project_domain_attributes2) | **DELETE** /api/v1/project_domain_attributes/org/{org}/{project}/{domain} | Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. *AdminServiceApi* | [**delete_workflow_attributes**](docs/AdminServiceApi.md#delete_workflow_attributes) | **DELETE** /api/v1/workflow_attributes/{project}/{domain}/{workflow} | Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. +*AdminServiceApi* | [**delete_workflow_attributes2**](docs/AdminServiceApi.md#delete_workflow_attributes2) | **DELETE** /api/v1/workflow_attributes/org/{org}/{project}/{domain}/{workflow} | Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. *AdminServiceApi* | [**get_active_launch_plan**](docs/AdminServiceApi.md#get_active_launch_plan) | **GET** /api/v1/active_launch_plans/{id.project}/{id.domain}/{id.name} | Fetch the active version of a :ref:`ref_flyteidl.admin.LaunchPlan`. +*AdminServiceApi* | [**get_active_launch_plan2**](docs/AdminServiceApi.md#get_active_launch_plan2) | **GET** /api/v1/active_launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name} | Fetch the active version of a :ref:`ref_flyteidl.admin.LaunchPlan`. *AdminServiceApi* | [**get_description_entity**](docs/AdminServiceApi.md#get_description_entity) | **GET** /api/v1/description_entities/{id.resource_type}/{id.project}/{id.domain}/{id.name}/{id.version} | Fetch a :ref:`ref_flyteidl.admin.DescriptionEntity` object. +*AdminServiceApi* | [**get_description_entity2**](docs/AdminServiceApi.md#get_description_entity2) | **GET** /api/v1/description_entities/org/{id.org}/{id.resource_type}/{id.project}/{id.domain}/{id.name}/{id.version} | Fetch a :ref:`ref_flyteidl.admin.DescriptionEntity` object. *AdminServiceApi* | [**get_execution**](docs/AdminServiceApi.md#get_execution) | **GET** /api/v1/executions/{id.project}/{id.domain}/{id.name} | Fetches a :ref:`ref_flyteidl.admin.Execution`. +*AdminServiceApi* | [**get_execution2**](docs/AdminServiceApi.md#get_execution2) | **GET** /api/v1/executions/org/{id.org}/{id.project}/{id.domain}/{id.name} | Fetches a :ref:`ref_flyteidl.admin.Execution`. *AdminServiceApi* | [**get_execution_data**](docs/AdminServiceApi.md#get_execution_data) | **GET** /api/v1/data/executions/{id.project}/{id.domain}/{id.name} | Fetches input and output data for a :ref:`ref_flyteidl.admin.Execution`. +*AdminServiceApi* | [**get_execution_data2**](docs/AdminServiceApi.md#get_execution_data2) | **GET** /api/v1/data/executions/org/{id.org}/{id.project}/{id.domain}/{id.name} | Fetches input and output data for a :ref:`ref_flyteidl.admin.Execution`. *AdminServiceApi* | [**get_execution_metrics**](docs/AdminServiceApi.md#get_execution_metrics) | **GET** /api/v1/metrics/executions/{id.project}/{id.domain}/{id.name} | Fetches runtime metrics for a :ref:`ref_flyteidl.admin.Execution`. +*AdminServiceApi* | [**get_execution_metrics2**](docs/AdminServiceApi.md#get_execution_metrics2) | **GET** /api/v1/metrics/executions/org/{id.org}/{id.project}/{id.domain}/{id.name} | Fetches runtime metrics for a :ref:`ref_flyteidl.admin.Execution`. *AdminServiceApi* | [**get_launch_plan**](docs/AdminServiceApi.md#get_launch_plan) | **GET** /api/v1/launch_plans/{id.project}/{id.domain}/{id.name}/{id.version} | Fetch a :ref:`ref_flyteidl.admin.LaunchPlan` definition. +*AdminServiceApi* | [**get_launch_plan2**](docs/AdminServiceApi.md#get_launch_plan2) | **GET** /api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version} | Fetch a :ref:`ref_flyteidl.admin.LaunchPlan` definition. *AdminServiceApi* | [**get_named_entity**](docs/AdminServiceApi.md#get_named_entity) | **GET** /api/v1/named_entities/{resource_type}/{id.project}/{id.domain}/{id.name} | Returns a :ref:`ref_flyteidl.admin.NamedEntity` object. +*AdminServiceApi* | [**get_named_entity2**](docs/AdminServiceApi.md#get_named_entity2) | **GET** /api/v1/named_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain}/{id.name} | Returns a :ref:`ref_flyteidl.admin.NamedEntity` object. *AdminServiceApi* | [**get_node_execution**](docs/AdminServiceApi.md#get_node_execution) | **GET** /api/v1/node_executions/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id} | Fetches a :ref:`ref_flyteidl.admin.NodeExecution`. +*AdminServiceApi* | [**get_node_execution2**](docs/AdminServiceApi.md#get_node_execution2) | **GET** /api/v1/node_executions/org/{id.execution_id.org}/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id} | Fetches a :ref:`ref_flyteidl.admin.NodeExecution`. *AdminServiceApi* | [**get_node_execution_data**](docs/AdminServiceApi.md#get_node_execution_data) | **GET** /api/v1/data/node_executions/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id} | Fetches input and output data for a :ref:`ref_flyteidl.admin.NodeExecution`. +*AdminServiceApi* | [**get_node_execution_data2**](docs/AdminServiceApi.md#get_node_execution_data2) | **GET** /api/v1/data/node_executions/org/{id.execution_id.org}/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id} | Fetches input and output data for a :ref:`ref_flyteidl.admin.NodeExecution`. *AdminServiceApi* | [**get_project_attributes**](docs/AdminServiceApi.md#get_project_attributes) | **GET** /api/v1/project_attributes/{project} | Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. +*AdminServiceApi* | [**get_project_attributes2**](docs/AdminServiceApi.md#get_project_attributes2) | **GET** /api/v1/project_domain_attributes/org/{org}/{project} | Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. *AdminServiceApi* | [**get_project_domain_attributes**](docs/AdminServiceApi.md#get_project_domain_attributes) | **GET** /api/v1/project_domain_attributes/{project}/{domain} | Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. +*AdminServiceApi* | [**get_project_domain_attributes2**](docs/AdminServiceApi.md#get_project_domain_attributes2) | **GET** /api/v1/project_domain_attributes/org/{org}/{project}/{domain} | Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. *AdminServiceApi* | [**get_task**](docs/AdminServiceApi.md#get_task) | **GET** /api/v1/tasks/{id.project}/{id.domain}/{id.name}/{id.version} | Fetch a :ref:`ref_flyteidl.admin.Task` definition. +*AdminServiceApi* | [**get_task2**](docs/AdminServiceApi.md#get_task2) | **GET** /api/v1/tasks/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version} | Fetch a :ref:`ref_flyteidl.admin.Task` definition. *AdminServiceApi* | [**get_task_execution**](docs/AdminServiceApi.md#get_task_execution) | **GET** /api/v1/task_executions/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt} | Fetches a :ref:`ref_flyteidl.admin.TaskExecution`. +*AdminServiceApi* | [**get_task_execution2**](docs/AdminServiceApi.md#get_task_execution2) | **GET** /api/v1/task_executions/org/{id.node_execution_id.execution_id.org}/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt} | Fetches a :ref:`ref_flyteidl.admin.TaskExecution`. *AdminServiceApi* | [**get_task_execution_data**](docs/AdminServiceApi.md#get_task_execution_data) | **GET** /api/v1/data/task_executions/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt} | Fetches input and output data for a :ref:`ref_flyteidl.admin.TaskExecution`. +*AdminServiceApi* | [**get_task_execution_data2**](docs/AdminServiceApi.md#get_task_execution_data2) | **GET** /api/v1/data/task_executions/org/{id.node_execution_id.execution_id.org}/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt} | Fetches input and output data for a :ref:`ref_flyteidl.admin.TaskExecution`. *AdminServiceApi* | [**get_version**](docs/AdminServiceApi.md#get_version) | **GET** /api/v1/version | *AdminServiceApi* | [**get_workflow**](docs/AdminServiceApi.md#get_workflow) | **GET** /api/v1/workflows/{id.project}/{id.domain}/{id.name}/{id.version} | Fetch a :ref:`ref_flyteidl.admin.Workflow` definition. +*AdminServiceApi* | [**get_workflow2**](docs/AdminServiceApi.md#get_workflow2) | **GET** /api/v1/workflows/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version} | Fetch a :ref:`ref_flyteidl.admin.Workflow` definition. *AdminServiceApi* | [**get_workflow_attributes**](docs/AdminServiceApi.md#get_workflow_attributes) | **GET** /api/v1/workflow_attributes/{project}/{domain}/{workflow} | Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. +*AdminServiceApi* | [**get_workflow_attributes2**](docs/AdminServiceApi.md#get_workflow_attributes2) | **GET** /api/v1/workflow_attributes/org/{org}/{project}/{domain}/{workflow} | Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. *AdminServiceApi* | [**list_active_launch_plans**](docs/AdminServiceApi.md#list_active_launch_plans) | **GET** /api/v1/active_launch_plans/{project}/{domain} | List active versions of :ref:`ref_flyteidl.admin.LaunchPlan`. *AdminServiceApi* | [**list_description_entities**](docs/AdminServiceApi.md#list_description_entities) | **GET** /api/v1/description_entities/{resource_type}/{id.project}/{id.domain}/{id.name} | Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. -*AdminServiceApi* | [**list_description_entities2**](docs/AdminServiceApi.md#list_description_entities2) | **GET** /api/v1/description_entities/{resource_type}/{id.project}/{id.domain} | Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. +*AdminServiceApi* | [**list_description_entities2**](docs/AdminServiceApi.md#list_description_entities2) | **GET** /api/v1/description_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain}/{id.name} | Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. +*AdminServiceApi* | [**list_description_entities3**](docs/AdminServiceApi.md#list_description_entities3) | **GET** /api/v1/description_entities/{resource_type}/{id.project}/{id.domain} | Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. +*AdminServiceApi* | [**list_description_entities4**](docs/AdminServiceApi.md#list_description_entities4) | **GET** /api/v1/description_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain} | Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. *AdminServiceApi* | [**list_executions**](docs/AdminServiceApi.md#list_executions) | **GET** /api/v1/executions/{id.project}/{id.domain} | Fetch a list of :ref:`ref_flyteidl.admin.Execution`. +*AdminServiceApi* | [**list_executions2**](docs/AdminServiceApi.md#list_executions2) | **GET** /api/v1/executions/org/{id.org}/{id.project}/{id.domain} | Fetch a list of :ref:`ref_flyteidl.admin.Execution`. *AdminServiceApi* | [**list_launch_plan_ids**](docs/AdminServiceApi.md#list_launch_plan_ids) | **GET** /api/v1/launch_plan_ids/{project}/{domain} | Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of launch plan objects. +*AdminServiceApi* | [**list_launch_plan_ids2**](docs/AdminServiceApi.md#list_launch_plan_ids2) | **GET** /api/v1/launch_plan_ids/org/{org}/{project}/{domain} | Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of launch plan objects. *AdminServiceApi* | [**list_launch_plans**](docs/AdminServiceApi.md#list_launch_plans) | **GET** /api/v1/launch_plans/{id.project}/{id.domain}/{id.name} | Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. -*AdminServiceApi* | [**list_launch_plans2**](docs/AdminServiceApi.md#list_launch_plans2) | **GET** /api/v1/launch_plans/{id.project}/{id.domain} | Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. +*AdminServiceApi* | [**list_launch_plans2**](docs/AdminServiceApi.md#list_launch_plans2) | **GET** /api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name} | Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. +*AdminServiceApi* | [**list_launch_plans3**](docs/AdminServiceApi.md#list_launch_plans3) | **GET** /api/v1/launch_plans/{id.project}/{id.domain} | Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. +*AdminServiceApi* | [**list_launch_plans4**](docs/AdminServiceApi.md#list_launch_plans4) | **GET** /api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain} | Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. *AdminServiceApi* | [**list_matchable_attributes**](docs/AdminServiceApi.md#list_matchable_attributes) | **GET** /api/v1/matchable_attributes | Lists custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a specific resource type. *AdminServiceApi* | [**list_named_entities**](docs/AdminServiceApi.md#list_named_entities) | **GET** /api/v1/named_entities/{resource_type}/{project}/{domain} | Returns a list of :ref:`ref_flyteidl.admin.NamedEntity` objects. +*AdminServiceApi* | [**list_named_entities2**](docs/AdminServiceApi.md#list_named_entities2) | **GET** /api/v1/named_entities/{resource_type}/org/{org}/{project}/{domain} | Returns a list of :ref:`ref_flyteidl.admin.NamedEntity` objects. *AdminServiceApi* | [**list_node_executions**](docs/AdminServiceApi.md#list_node_executions) | **GET** /api/v1/node_executions/{workflow_execution_id.project}/{workflow_execution_id.domain}/{workflow_execution_id.name} | Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution`. +*AdminServiceApi* | [**list_node_executions2**](docs/AdminServiceApi.md#list_node_executions2) | **GET** /api/v1/node_executions/org/{workflow_execution_id.org}/{workflow_execution_id.project}/{workflow_execution_id.domain}/{workflow_execution_id.name} | Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution`. *AdminServiceApi* | [**list_node_executions_for_task**](docs/AdminServiceApi.md#list_node_executions_for_task) | **GET** /api/v1/children/task_executions/{task_execution_id.node_execution_id.execution_id.project}/{task_execution_id.node_execution_id.execution_id.domain}/{task_execution_id.node_execution_id.execution_id.name}/{task_execution_id.node_execution_id.node_id}/{task_execution_id.task_id.project}/{task_execution_id.task_id.domain}/{task_execution_id.task_id.name}/{task_execution_id.task_id.version}/{task_execution_id.retry_attempt} | Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution` launched by the reference :ref:`ref_flyteidl.admin.TaskExecution`. +*AdminServiceApi* | [**list_node_executions_for_task2**](docs/AdminServiceApi.md#list_node_executions_for_task2) | **GET** /api/v1/children/task_executions/org/{task_execution_id.node_execution_id.execution_id.org}/{task_execution_id.node_execution_id.execution_id.project}/{task_execution_id.node_execution_id.execution_id.domain}/{task_execution_id.node_execution_id.execution_id.name}/{task_execution_id.node_execution_id.node_id}/{task_execution_id.task_id.project}/{task_execution_id.task_id.domain}/{task_execution_id.task_id.name}/{task_execution_id.task_id.version}/{task_execution_id.retry_attempt} | Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution` launched by the reference :ref:`ref_flyteidl.admin.TaskExecution`. *AdminServiceApi* | [**list_projects**](docs/AdminServiceApi.md#list_projects) | **GET** /api/v1/projects | Fetches a list of :ref:`ref_flyteidl.admin.Project` *AdminServiceApi* | [**list_task_executions**](docs/AdminServiceApi.md#list_task_executions) | **GET** /api/v1/task_executions/{node_execution_id.execution_id.project}/{node_execution_id.execution_id.domain}/{node_execution_id.execution_id.name}/{node_execution_id.node_id} | Fetches a list of :ref:`ref_flyteidl.admin.TaskExecution`. +*AdminServiceApi* | [**list_task_executions2**](docs/AdminServiceApi.md#list_task_executions2) | **GET** /api/v1/task_executions/org/{node_execution_id.execution_id.org}/{node_execution_id.execution_id.project}/{node_execution_id.execution_id.domain}/{node_execution_id.execution_id.name}/{node_execution_id.node_id} | Fetches a list of :ref:`ref_flyteidl.admin.TaskExecution`. *AdminServiceApi* | [**list_task_ids**](docs/AdminServiceApi.md#list_task_ids) | **GET** /api/v1/task_ids/{project}/{domain} | Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of task objects. +*AdminServiceApi* | [**list_task_ids2**](docs/AdminServiceApi.md#list_task_ids2) | **GET** /api/v1/tasks/org/{org}/{project}/{domain} | Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of task objects. *AdminServiceApi* | [**list_tasks**](docs/AdminServiceApi.md#list_tasks) | **GET** /api/v1/tasks/{id.project}/{id.domain}/{id.name} | Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions. -*AdminServiceApi* | [**list_tasks2**](docs/AdminServiceApi.md#list_tasks2) | **GET** /api/v1/tasks/{id.project}/{id.domain} | Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions. +*AdminServiceApi* | [**list_tasks2**](docs/AdminServiceApi.md#list_tasks2) | **GET** /api/v1/tasks/org/{id.org}/{id.project}/{id.domain}/{id.name} | Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions. +*AdminServiceApi* | [**list_tasks3**](docs/AdminServiceApi.md#list_tasks3) | **GET** /api/v1/tasks/{id.project}/{id.domain} | Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions. +*AdminServiceApi* | [**list_tasks4**](docs/AdminServiceApi.md#list_tasks4) | **GET** /api/v1/tasks/org/{id.org}/{id.project}/{id.domain} | Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions. *AdminServiceApi* | [**list_workflow_ids**](docs/AdminServiceApi.md#list_workflow_ids) | **GET** /api/v1/workflow_ids/{project}/{domain} | Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of workflow objects. +*AdminServiceApi* | [**list_workflow_ids2**](docs/AdminServiceApi.md#list_workflow_ids2) | **GET** /api/v1/workflows/org/{org}/{project}/{domain} | Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of workflow objects. *AdminServiceApi* | [**list_workflows**](docs/AdminServiceApi.md#list_workflows) | **GET** /api/v1/workflows/{id.project}/{id.domain}/{id.name} | Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. -*AdminServiceApi* | [**list_workflows2**](docs/AdminServiceApi.md#list_workflows2) | **GET** /api/v1/workflows/{id.project}/{id.domain} | Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. +*AdminServiceApi* | [**list_workflows2**](docs/AdminServiceApi.md#list_workflows2) | **GET** /api/v1/workflows/org/{id.org}/{id.project}/{id.domain}/{id.name} | Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. +*AdminServiceApi* | [**list_workflows3**](docs/AdminServiceApi.md#list_workflows3) | **GET** /api/v1/workflows/{id.project}/{id.domain} | Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. +*AdminServiceApi* | [**list_workflows4**](docs/AdminServiceApi.md#list_workflows4) | **GET** /api/v1/workflows/org/{id.org}/{id.project}/{id.domain} | Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. *AdminServiceApi* | [**recover_execution**](docs/AdminServiceApi.md#recover_execution) | **POST** /api/v1/executions/recover | Recreates a previously-run workflow execution that will only start executing from the last known failure point. In Recover mode, users cannot change any input parameters or update the version of the execution. This is extremely useful to recover from system errors and byzantine faults like - Loss of K8s cluster, bugs in platform or instability, machine failures, downstream system failures (downstream services), or simply to recover executions that failed because of retry exhaustion and should complete if tried again. See :ref:`ref_flyteidl.admin.ExecutionRecoverRequest` for more details. *AdminServiceApi* | [**register_project**](docs/AdminServiceApi.md#register_project) | **POST** /api/v1/projects | Registers a :ref:`ref_flyteidl.admin.Project` with the Flyte deployment. *AdminServiceApi* | [**relaunch_execution**](docs/AdminServiceApi.md#relaunch_execution) | **POST** /api/v1/executions/relaunch | Triggers the creation of an identical :ref:`ref_flyteidl.admin.Execution` *AdminServiceApi* | [**terminate_execution**](docs/AdminServiceApi.md#terminate_execution) | **DELETE** /api/v1/executions/{id.project}/{id.domain}/{id.name} | Terminates an in-progress :ref:`ref_flyteidl.admin.Execution`. +*AdminServiceApi* | [**terminate_execution2**](docs/AdminServiceApi.md#terminate_execution2) | **DELETE** /api/v1/data/executions/org/{id.org}/{id.project}/{id.domain}/{id.name} | Terminates an in-progress :ref:`ref_flyteidl.admin.Execution`. *AdminServiceApi* | [**update_execution**](docs/AdminServiceApi.md#update_execution) | **PUT** /api/v1/executions/{id.project}/{id.domain}/{id.name} | Update execution belonging to project domain :ref:`ref_flyteidl.admin.Execution`. +*AdminServiceApi* | [**update_execution2**](docs/AdminServiceApi.md#update_execution2) | **PUT** /api/v1/executions/org/{id.org}/{id.project}/{id.domain}/{id.name} | Update execution belonging to project domain :ref:`ref_flyteidl.admin.Execution`. *AdminServiceApi* | [**update_launch_plan**](docs/AdminServiceApi.md#update_launch_plan) | **PUT** /api/v1/launch_plans/{id.project}/{id.domain}/{id.name}/{id.version} | Updates the status of a registered :ref:`ref_flyteidl.admin.LaunchPlan`. +*AdminServiceApi* | [**update_launch_plan2**](docs/AdminServiceApi.md#update_launch_plan2) | **PUT** /api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version} | Updates the status of a registered :ref:`ref_flyteidl.admin.LaunchPlan`. *AdminServiceApi* | [**update_named_entity**](docs/AdminServiceApi.md#update_named_entity) | **PUT** /api/v1/named_entities/{resource_type}/{id.project}/{id.domain}/{id.name} | Updates a :ref:`ref_flyteidl.admin.NamedEntity` object. -*AdminServiceApi* | [**update_project**](docs/AdminServiceApi.md#update_project) | **PUT** /api/v1/projects/{id} | Updates an existing :ref:`ref_flyteidl.admin.Project` flyteidl.admin.Project should be passed but the domains property should be empty; it will be ignored in the handler as domains cannot be updated via this API. +*AdminServiceApi* | [**update_named_entity2**](docs/AdminServiceApi.md#update_named_entity2) | **PUT** /api/v1/named_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain}/{id.name} | Updates a :ref:`ref_flyteidl.admin.NamedEntity` object. +*AdminServiceApi* | [**update_project**](docs/AdminServiceApi.md#update_project) | **PUT** /api/v1/projects/{id} | Updates an existing :ref:`ref_flyteidl.admin.Project` flyteidl.admin.Project should be passed but the domains property should be empty; it will be ignored in the handler as domains cannot be updated via this API. +*AdminServiceApi* | [**update_project2**](docs/AdminServiceApi.md#update_project2) | **PUT** /api/v1/projects/org/{org}/{id} | Updates an existing :ref:`ref_flyteidl.admin.Project` flyteidl.admin.Project should be passed but the domains property should be empty; it will be ignored in the handler as domains cannot be updated via this API. *AdminServiceApi* | [**update_project_attributes**](docs/AdminServiceApi.md#update_project_attributes) | **PUT** /api/v1/project_attributes/{attributes.project} | Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` at the project level +*AdminServiceApi* | [**update_project_attributes2**](docs/AdminServiceApi.md#update_project_attributes2) | **PUT** /api/v1/project_domain_attributes/org/{attributes.org}/{attributes.project} | Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` at the project level *AdminServiceApi* | [**update_project_domain_attributes**](docs/AdminServiceApi.md#update_project_domain_attributes) | **PUT** /api/v1/project_domain_attributes/{attributes.project}/{attributes.domain} | Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. +*AdminServiceApi* | [**update_project_domain_attributes2**](docs/AdminServiceApi.md#update_project_domain_attributes2) | **PUT** /api/v1/project_domain_attributes/org/{attributes.org}/{attributes.project}/{attributes.domain} | Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. *AdminServiceApi* | [**update_workflow_attributes**](docs/AdminServiceApi.md#update_workflow_attributes) | **PUT** /api/v1/workflow_attributes/{attributes.project}/{attributes.domain}/{attributes.workflow} | Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. +*AdminServiceApi* | [**update_workflow_attributes2**](docs/AdminServiceApi.md#update_workflow_attributes2) | **PUT** /api/v1/workflow_attributes/org/{attributes.org}/{attributes.project}/{attributes.domain}/{attributes.workflow} | Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. ## Documentation For Models diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/api/admin_service_api.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/api/admin_service_api.py index 01e9838ee5..1e91c85c21 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/api/admin_service_api.py +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/api/admin_service_api.py @@ -817,47 +817,47 @@ def delete_project_attributes_with_http_info(self, project, body, **kwargs): # _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def delete_project_domain_attributes(self, project, domain, body, **kwargs): # noqa: E501 + def delete_project_attributes2(self, org, project, body, **kwargs): # noqa: E501 """Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.delete_project_domain_attributes(project, domain, body, async_req=True) + >>> thread = api.delete_project_attributes2(org, project, body, async_req=True) >>> result = thread.get() :param async_req bool + :param str org: Optional, org key applied to the project. (required) :param str project: Unique project id which this set of attributes references. +required (required) - :param str domain: Unique domain id which this set of attributes references. +required (required) - :param AdminProjectDomainAttributesDeleteRequest body: (required) - :return: AdminProjectDomainAttributesDeleteResponse + :param AdminProjectAttributesDeleteRequest body: (required) + :return: AdminProjectAttributesDeleteResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.delete_project_domain_attributes_with_http_info(project, domain, body, **kwargs) # noqa: E501 + return self.delete_project_attributes2_with_http_info(org, project, body, **kwargs) # noqa: E501 else: - (data) = self.delete_project_domain_attributes_with_http_info(project, domain, body, **kwargs) # noqa: E501 + (data) = self.delete_project_attributes2_with_http_info(org, project, body, **kwargs) # noqa: E501 return data - def delete_project_domain_attributes_with_http_info(self, project, domain, body, **kwargs): # noqa: E501 + def delete_project_attributes2_with_http_info(self, org, project, body, **kwargs): # noqa: E501 """Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.delete_project_domain_attributes_with_http_info(project, domain, body, async_req=True) + >>> thread = api.delete_project_attributes2_with_http_info(org, project, body, async_req=True) >>> result = thread.get() :param async_req bool + :param str org: Optional, org key applied to the project. (required) :param str project: Unique project id which this set of attributes references. +required (required) - :param str domain: Unique domain id which this set of attributes references. +required (required) - :param AdminProjectDomainAttributesDeleteRequest body: (required) - :return: AdminProjectDomainAttributesDeleteResponse + :param AdminProjectAttributesDeleteRequest body: (required) + :return: AdminProjectAttributesDeleteResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['project', 'domain', 'body'] # noqa: E501 + all_params = ['org', 'project', 'body'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -868,30 +868,30 @@ def delete_project_domain_attributes_with_http_info(self, project, domain, body, if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method delete_project_domain_attributes" % key + " to method delete_project_attributes2" % key ) params[key] = val del params['kwargs'] + # verify the required parameter 'org' is set + if ('org' not in params or + params['org'] is None): + raise ValueError("Missing the required parameter `org` when calling `delete_project_attributes2`") # noqa: E501 # verify the required parameter 'project' is set if ('project' not in params or params['project'] is None): - raise ValueError("Missing the required parameter `project` when calling `delete_project_domain_attributes`") # noqa: E501 - # verify the required parameter 'domain' is set - if ('domain' not in params or - params['domain'] is None): - raise ValueError("Missing the required parameter `domain` when calling `delete_project_domain_attributes`") # noqa: E501 + raise ValueError("Missing the required parameter `project` when calling `delete_project_attributes2`") # noqa: E501 # verify the required parameter 'body' is set if ('body' not in params or params['body'] is None): - raise ValueError("Missing the required parameter `body` when calling `delete_project_domain_attributes`") # noqa: E501 + raise ValueError("Missing the required parameter `body` when calling `delete_project_attributes2`") # noqa: E501 collection_formats = {} path_params = {} + if 'org' in params: + path_params['org'] = params['org'] # noqa: E501 if 'project' in params: path_params['project'] = params['project'] # noqa: E501 - if 'domain' in params: - path_params['domain'] = params['domain'] # noqa: E501 query_params = [] @@ -915,14 +915,14 @@ def delete_project_domain_attributes_with_http_info(self, project, domain, body, auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/project_domain_attributes/{project}/{domain}', 'DELETE', + '/api/v1/project_domain_attributes/org/{org}/{project}', 'DELETE', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminProjectDomainAttributesDeleteResponse', # noqa: E501 + response_type='AdminProjectAttributesDeleteResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -930,49 +930,47 @@ def delete_project_domain_attributes_with_http_info(self, project, domain, body, _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def delete_workflow_attributes(self, project, domain, workflow, body, **kwargs): # noqa: E501 - """Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. # noqa: E501 + def delete_project_domain_attributes(self, project, domain, body, **kwargs): # noqa: E501 + """Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.delete_workflow_attributes(project, domain, workflow, body, async_req=True) + >>> thread = api.delete_project_domain_attributes(project, domain, body, async_req=True) >>> result = thread.get() :param async_req bool :param str project: Unique project id which this set of attributes references. +required (required) :param str domain: Unique domain id which this set of attributes references. +required (required) - :param str workflow: Workflow name which this set of attributes references. +required (required) - :param AdminWorkflowAttributesDeleteRequest body: (required) - :return: AdminWorkflowAttributesDeleteResponse + :param AdminProjectDomainAttributesDeleteRequest body: (required) + :return: AdminProjectDomainAttributesDeleteResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.delete_workflow_attributes_with_http_info(project, domain, workflow, body, **kwargs) # noqa: E501 + return self.delete_project_domain_attributes_with_http_info(project, domain, body, **kwargs) # noqa: E501 else: - (data) = self.delete_workflow_attributes_with_http_info(project, domain, workflow, body, **kwargs) # noqa: E501 + (data) = self.delete_project_domain_attributes_with_http_info(project, domain, body, **kwargs) # noqa: E501 return data - def delete_workflow_attributes_with_http_info(self, project, domain, workflow, body, **kwargs): # noqa: E501 - """Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. # noqa: E501 + def delete_project_domain_attributes_with_http_info(self, project, domain, body, **kwargs): # noqa: E501 + """Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.delete_workflow_attributes_with_http_info(project, domain, workflow, body, async_req=True) + >>> thread = api.delete_project_domain_attributes_with_http_info(project, domain, body, async_req=True) >>> result = thread.get() :param async_req bool :param str project: Unique project id which this set of attributes references. +required (required) :param str domain: Unique domain id which this set of attributes references. +required (required) - :param str workflow: Workflow name which this set of attributes references. +required (required) - :param AdminWorkflowAttributesDeleteRequest body: (required) - :return: AdminWorkflowAttributesDeleteResponse + :param AdminProjectDomainAttributesDeleteRequest body: (required) + :return: AdminProjectDomainAttributesDeleteResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['project', 'domain', 'workflow', 'body'] # noqa: E501 + all_params = ['project', 'domain', 'body'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -983,26 +981,22 @@ def delete_workflow_attributes_with_http_info(self, project, domain, workflow, b if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method delete_workflow_attributes" % key + " to method delete_project_domain_attributes" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'project' is set if ('project' not in params or params['project'] is None): - raise ValueError("Missing the required parameter `project` when calling `delete_workflow_attributes`") # noqa: E501 + raise ValueError("Missing the required parameter `project` when calling `delete_project_domain_attributes`") # noqa: E501 # verify the required parameter 'domain' is set if ('domain' not in params or params['domain'] is None): - raise ValueError("Missing the required parameter `domain` when calling `delete_workflow_attributes`") # noqa: E501 - # verify the required parameter 'workflow' is set - if ('workflow' not in params or - params['workflow'] is None): - raise ValueError("Missing the required parameter `workflow` when calling `delete_workflow_attributes`") # noqa: E501 + raise ValueError("Missing the required parameter `domain` when calling `delete_project_domain_attributes`") # noqa: E501 # verify the required parameter 'body' is set if ('body' not in params or params['body'] is None): - raise ValueError("Missing the required parameter `body` when calling `delete_workflow_attributes`") # noqa: E501 + raise ValueError("Missing the required parameter `body` when calling `delete_project_domain_attributes`") # noqa: E501 collection_formats = {} @@ -1011,8 +1005,6 @@ def delete_workflow_attributes_with_http_info(self, project, domain, workflow, b path_params['project'] = params['project'] # noqa: E501 if 'domain' in params: path_params['domain'] = params['domain'] # noqa: E501 - if 'workflow' in params: - path_params['workflow'] = params['workflow'] # noqa: E501 query_params = [] @@ -1036,14 +1028,14 @@ def delete_workflow_attributes_with_http_info(self, project, domain, workflow, b auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/workflow_attributes/{project}/{domain}/{workflow}', 'DELETE', + '/api/v1/project_domain_attributes/{project}/{domain}', 'DELETE', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminWorkflowAttributesDeleteResponse', # noqa: E501 + response_type='AdminProjectDomainAttributesDeleteResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -1051,47 +1043,49 @@ def delete_workflow_attributes_with_http_info(self, project, domain, workflow, b _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_active_launch_plan(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Fetch the active version of a :ref:`ref_flyteidl.admin.LaunchPlan`. # noqa: E501 + def delete_project_domain_attributes2(self, org, project, domain, body, **kwargs): # noqa: E501 + """Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_active_launch_plan(id_project, id_domain, id_name, async_req=True) + >>> thread = api.delete_project_domain_attributes2(org, project, domain, body, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) - :return: AdminLaunchPlan + :param str org: Optional, org key applied to the attributes. (required) + :param str project: Unique project id which this set of attributes references. +required (required) + :param str domain: Unique domain id which this set of attributes references. +required (required) + :param AdminProjectDomainAttributesDeleteRequest body: (required) + :return: AdminProjectDomainAttributesDeleteResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_active_launch_plan_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 + return self.delete_project_domain_attributes2_with_http_info(org, project, domain, body, **kwargs) # noqa: E501 else: - (data) = self.get_active_launch_plan_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 + (data) = self.delete_project_domain_attributes2_with_http_info(org, project, domain, body, **kwargs) # noqa: E501 return data - def get_active_launch_plan_with_http_info(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Fetch the active version of a :ref:`ref_flyteidl.admin.LaunchPlan`. # noqa: E501 + def delete_project_domain_attributes2_with_http_info(self, org, project, domain, body, **kwargs): # noqa: E501 + """Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_active_launch_plan_with_http_info(id_project, id_domain, id_name, async_req=True) + >>> thread = api.delete_project_domain_attributes2_with_http_info(org, project, domain, body, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) - :return: AdminLaunchPlan + :param str org: Optional, org key applied to the attributes. (required) + :param str project: Unique project id which this set of attributes references. +required (required) + :param str domain: Unique domain id which this set of attributes references. +required (required) + :param AdminProjectDomainAttributesDeleteRequest body: (required) + :return: AdminProjectDomainAttributesDeleteResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['id_project', 'id_domain', 'id_name'] # noqa: E501 + all_params = ['org', 'project', 'domain', 'body'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -1102,32 +1096,36 @@ def get_active_launch_plan_with_http_info(self, id_project, id_domain, id_name, if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_active_launch_plan" % key + " to method delete_project_domain_attributes2" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'id_project' is set - if ('id_project' not in params or - params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `get_active_launch_plan`") # noqa: E501 - # verify the required parameter 'id_domain' is set - if ('id_domain' not in params or - params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `get_active_launch_plan`") # noqa: E501 - # verify the required parameter 'id_name' is set - if ('id_name' not in params or - params['id_name'] is None): - raise ValueError("Missing the required parameter `id_name` when calling `get_active_launch_plan`") # noqa: E501 + # verify the required parameter 'org' is set + if ('org' not in params or + params['org'] is None): + raise ValueError("Missing the required parameter `org` when calling `delete_project_domain_attributes2`") # noqa: E501 + # verify the required parameter 'project' is set + if ('project' not in params or + params['project'] is None): + raise ValueError("Missing the required parameter `project` when calling `delete_project_domain_attributes2`") # noqa: E501 + # verify the required parameter 'domain' is set + if ('domain' not in params or + params['domain'] is None): + raise ValueError("Missing the required parameter `domain` when calling `delete_project_domain_attributes2`") # noqa: E501 + # verify the required parameter 'body' is set + if ('body' not in params or + params['body'] is None): + raise ValueError("Missing the required parameter `body` when calling `delete_project_domain_attributes2`") # noqa: E501 collection_formats = {} path_params = {} - if 'id_project' in params: - path_params['id.project'] = params['id_project'] # noqa: E501 - if 'id_domain' in params: - path_params['id.domain'] = params['id_domain'] # noqa: E501 - if 'id_name' in params: - path_params['id.name'] = params['id_name'] # noqa: E501 + if 'org' in params: + path_params['org'] = params['org'] # noqa: E501 + if 'project' in params: + path_params['project'] = params['project'] # noqa: E501 + if 'domain' in params: + path_params['domain'] = params['domain'] # noqa: E501 query_params = [] @@ -1137,6 +1135,8 @@ def get_active_launch_plan_with_http_info(self, id_project, id_domain, id_name, local_var_files = {} body_params = None + if 'body' in params: + body_params = params['body'] # HTTP header `Accept` header_params['Accept'] = self.api_client.select_header_accept( ['application/json']) # noqa: E501 @@ -1149,14 +1149,14 @@ def get_active_launch_plan_with_http_info(self, id_project, id_domain, id_name, auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/active_launch_plans/{id.project}/{id.domain}/{id.name}', 'GET', + '/api/v1/project_domain_attributes/org/{org}/{project}/{domain}', 'DELETE', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminLaunchPlan', # noqa: E501 + response_type='AdminProjectDomainAttributesDeleteResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -1164,51 +1164,49 @@ def get_active_launch_plan_with_http_info(self, id_project, id_domain, id_name, _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_description_entity(self, id_resource_type, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 - """Fetch a :ref:`ref_flyteidl.admin.DescriptionEntity` object. # noqa: E501 + def delete_workflow_attributes(self, project, domain, workflow, body, **kwargs): # noqa: E501 + """Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_description_entity(id_resource_type, id_project, id_domain, id_name, id_version, async_req=True) + >>> thread = api.delete_workflow_attributes(project, domain, workflow, body, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. (required) - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. (required) - :param str id_version: Specific version of the resource. (required) - :return: AdminDescriptionEntity + :param str project: Unique project id which this set of attributes references. +required (required) + :param str domain: Unique domain id which this set of attributes references. +required (required) + :param str workflow: Workflow name which this set of attributes references. +required (required) + :param AdminWorkflowAttributesDeleteRequest body: (required) + :return: AdminWorkflowAttributesDeleteResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_description_entity_with_http_info(id_resource_type, id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 + return self.delete_workflow_attributes_with_http_info(project, domain, workflow, body, **kwargs) # noqa: E501 else: - (data) = self.get_description_entity_with_http_info(id_resource_type, id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 + (data) = self.delete_workflow_attributes_with_http_info(project, domain, workflow, body, **kwargs) # noqa: E501 return data - def get_description_entity_with_http_info(self, id_resource_type, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 - """Fetch a :ref:`ref_flyteidl.admin.DescriptionEntity` object. # noqa: E501 + def delete_workflow_attributes_with_http_info(self, project, domain, workflow, body, **kwargs): # noqa: E501 + """Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_description_entity_with_http_info(id_resource_type, id_project, id_domain, id_name, id_version, async_req=True) + >>> thread = api.delete_workflow_attributes_with_http_info(project, domain, workflow, body, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. (required) - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. (required) - :param str id_version: Specific version of the resource. (required) - :return: AdminDescriptionEntity + :param str project: Unique project id which this set of attributes references. +required (required) + :param str domain: Unique domain id which this set of attributes references. +required (required) + :param str workflow: Workflow name which this set of attributes references. +required (required) + :param AdminWorkflowAttributesDeleteRequest body: (required) + :return: AdminWorkflowAttributesDeleteResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['id_resource_type', 'id_project', 'id_domain', 'id_name', 'id_version'] # noqa: E501 + all_params = ['project', 'domain', 'workflow', 'body'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -1219,44 +1217,36 @@ def get_description_entity_with_http_info(self, id_resource_type, id_project, id if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_description_entity" % key + " to method delete_workflow_attributes" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'id_resource_type' is set - if ('id_resource_type' not in params or - params['id_resource_type'] is None): - raise ValueError("Missing the required parameter `id_resource_type` when calling `get_description_entity`") # noqa: E501 - # verify the required parameter 'id_project' is set - if ('id_project' not in params or - params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `get_description_entity`") # noqa: E501 - # verify the required parameter 'id_domain' is set - if ('id_domain' not in params or - params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `get_description_entity`") # noqa: E501 - # verify the required parameter 'id_name' is set - if ('id_name' not in params or - params['id_name'] is None): - raise ValueError("Missing the required parameter `id_name` when calling `get_description_entity`") # noqa: E501 - # verify the required parameter 'id_version' is set - if ('id_version' not in params or - params['id_version'] is None): - raise ValueError("Missing the required parameter `id_version` when calling `get_description_entity`") # noqa: E501 + # verify the required parameter 'project' is set + if ('project' not in params or + params['project'] is None): + raise ValueError("Missing the required parameter `project` when calling `delete_workflow_attributes`") # noqa: E501 + # verify the required parameter 'domain' is set + if ('domain' not in params or + params['domain'] is None): + raise ValueError("Missing the required parameter `domain` when calling `delete_workflow_attributes`") # noqa: E501 + # verify the required parameter 'workflow' is set + if ('workflow' not in params or + params['workflow'] is None): + raise ValueError("Missing the required parameter `workflow` when calling `delete_workflow_attributes`") # noqa: E501 + # verify the required parameter 'body' is set + if ('body' not in params or + params['body'] is None): + raise ValueError("Missing the required parameter `body` when calling `delete_workflow_attributes`") # noqa: E501 collection_formats = {} path_params = {} - if 'id_resource_type' in params: - path_params['id.resource_type'] = params['id_resource_type'] # noqa: E501 - if 'id_project' in params: - path_params['id.project'] = params['id_project'] # noqa: E501 - if 'id_domain' in params: - path_params['id.domain'] = params['id_domain'] # noqa: E501 - if 'id_name' in params: - path_params['id.name'] = params['id_name'] # noqa: E501 - if 'id_version' in params: - path_params['id.version'] = params['id_version'] # noqa: E501 + if 'project' in params: + path_params['project'] = params['project'] # noqa: E501 + if 'domain' in params: + path_params['domain'] = params['domain'] # noqa: E501 + if 'workflow' in params: + path_params['workflow'] = params['workflow'] # noqa: E501 query_params = [] @@ -1266,6 +1256,8 @@ def get_description_entity_with_http_info(self, id_resource_type, id_project, id local_var_files = {} body_params = None + if 'body' in params: + body_params = params['body'] # HTTP header `Accept` header_params['Accept'] = self.api_client.select_header_accept( ['application/json']) # noqa: E501 @@ -1278,14 +1270,14 @@ def get_description_entity_with_http_info(self, id_resource_type, id_project, id auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/description_entities/{id.resource_type}/{id.project}/{id.domain}/{id.name}/{id.version}', 'GET', + '/api/v1/workflow_attributes/{project}/{domain}/{workflow}', 'DELETE', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminDescriptionEntity', # noqa: E501 + response_type='AdminWorkflowAttributesDeleteResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -1293,47 +1285,51 @@ def get_description_entity_with_http_info(self, id_resource_type, id_project, id _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_execution(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Fetches a :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 + def delete_workflow_attributes2(self, org, project, domain, workflow, body, **kwargs): # noqa: E501 + """Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_execution(id_project, id_domain, id_name, async_req=True) + >>> thread = api.delete_workflow_attributes2(org, project, domain, workflow, body, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User or system provided value for the resource. (required) - :return: AdminExecution + :param str org: Optional, org key applied to the attributes. (required) + :param str project: Unique project id which this set of attributes references. +required (required) + :param str domain: Unique domain id which this set of attributes references. +required (required) + :param str workflow: Workflow name which this set of attributes references. +required (required) + :param AdminWorkflowAttributesDeleteRequest body: (required) + :return: AdminWorkflowAttributesDeleteResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_execution_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 + return self.delete_workflow_attributes2_with_http_info(org, project, domain, workflow, body, **kwargs) # noqa: E501 else: - (data) = self.get_execution_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 + (data) = self.delete_workflow_attributes2_with_http_info(org, project, domain, workflow, body, **kwargs) # noqa: E501 return data - def get_execution_with_http_info(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Fetches a :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 + def delete_workflow_attributes2_with_http_info(self, org, project, domain, workflow, body, **kwargs): # noqa: E501 + """Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_execution_with_http_info(id_project, id_domain, id_name, async_req=True) + >>> thread = api.delete_workflow_attributes2_with_http_info(org, project, domain, workflow, body, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User or system provided value for the resource. (required) - :return: AdminExecution + :param str org: Optional, org key applied to the attributes. (required) + :param str project: Unique project id which this set of attributes references. +required (required) + :param str domain: Unique domain id which this set of attributes references. +required (required) + :param str workflow: Workflow name which this set of attributes references. +required (required) + :param AdminWorkflowAttributesDeleteRequest body: (required) + :return: AdminWorkflowAttributesDeleteResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['id_project', 'id_domain', 'id_name'] # noqa: E501 + all_params = ['org', 'project', 'domain', 'workflow', 'body'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -1344,32 +1340,42 @@ def get_execution_with_http_info(self, id_project, id_domain, id_name, **kwargs) if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_execution" % key + " to method delete_workflow_attributes2" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'id_project' is set - if ('id_project' not in params or - params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `get_execution`") # noqa: E501 - # verify the required parameter 'id_domain' is set - if ('id_domain' not in params or - params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `get_execution`") # noqa: E501 - # verify the required parameter 'id_name' is set - if ('id_name' not in params or - params['id_name'] is None): - raise ValueError("Missing the required parameter `id_name` when calling `get_execution`") # noqa: E501 + # verify the required parameter 'org' is set + if ('org' not in params or + params['org'] is None): + raise ValueError("Missing the required parameter `org` when calling `delete_workflow_attributes2`") # noqa: E501 + # verify the required parameter 'project' is set + if ('project' not in params or + params['project'] is None): + raise ValueError("Missing the required parameter `project` when calling `delete_workflow_attributes2`") # noqa: E501 + # verify the required parameter 'domain' is set + if ('domain' not in params or + params['domain'] is None): + raise ValueError("Missing the required parameter `domain` when calling `delete_workflow_attributes2`") # noqa: E501 + # verify the required parameter 'workflow' is set + if ('workflow' not in params or + params['workflow'] is None): + raise ValueError("Missing the required parameter `workflow` when calling `delete_workflow_attributes2`") # noqa: E501 + # verify the required parameter 'body' is set + if ('body' not in params or + params['body'] is None): + raise ValueError("Missing the required parameter `body` when calling `delete_workflow_attributes2`") # noqa: E501 collection_formats = {} path_params = {} - if 'id_project' in params: - path_params['id.project'] = params['id_project'] # noqa: E501 - if 'id_domain' in params: - path_params['id.domain'] = params['id_domain'] # noqa: E501 - if 'id_name' in params: - path_params['id.name'] = params['id_name'] # noqa: E501 + if 'org' in params: + path_params['org'] = params['org'] # noqa: E501 + if 'project' in params: + path_params['project'] = params['project'] # noqa: E501 + if 'domain' in params: + path_params['domain'] = params['domain'] # noqa: E501 + if 'workflow' in params: + path_params['workflow'] = params['workflow'] # noqa: E501 query_params = [] @@ -1379,6 +1385,8 @@ def get_execution_with_http_info(self, id_project, id_domain, id_name, **kwargs) local_var_files = {} body_params = None + if 'body' in params: + body_params = params['body'] # HTTP header `Accept` header_params['Accept'] = self.api_client.select_header_accept( ['application/json']) # noqa: E501 @@ -1391,14 +1399,14 @@ def get_execution_with_http_info(self, id_project, id_domain, id_name, **kwargs) auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/executions/{id.project}/{id.domain}/{id.name}', 'GET', + '/api/v1/workflow_attributes/org/{org}/{project}/{domain}/{workflow}', 'DELETE', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminExecution', # noqa: E501 + response_type='AdminWorkflowAttributesDeleteResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -1406,47 +1414,49 @@ def get_execution_with_http_info(self, id_project, id_domain, id_name, **kwargs) _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_execution_data(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Fetches input and output data for a :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 + def get_active_launch_plan(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetch the active version of a :ref:`ref_flyteidl.admin.LaunchPlan`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_execution_data(id_project, id_domain, id_name, async_req=True) + >>> thread = api.get_active_launch_plan(id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User or system provided value for the resource. (required) - :return: AdminWorkflowExecutionGetDataResponse + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) + :param str id_org: Optional, org key applied to the resource. + :return: AdminLaunchPlan If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_execution_data_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 + return self.get_active_launch_plan_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 else: - (data) = self.get_execution_data_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 + (data) = self.get_active_launch_plan_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 return data - def get_execution_data_with_http_info(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Fetches input and output data for a :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 + def get_active_launch_plan_with_http_info(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetch the active version of a :ref:`ref_flyteidl.admin.LaunchPlan`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_execution_data_with_http_info(id_project, id_domain, id_name, async_req=True) + >>> thread = api.get_active_launch_plan_with_http_info(id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User or system provided value for the resource. (required) - :return: AdminWorkflowExecutionGetDataResponse + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) + :param str id_org: Optional, org key applied to the resource. + :return: AdminLaunchPlan If the method is called asynchronously, returns the request thread. """ - all_params = ['id_project', 'id_domain', 'id_name'] # noqa: E501 + all_params = ['id_project', 'id_domain', 'id_name', 'id_org'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -1457,22 +1467,22 @@ def get_execution_data_with_http_info(self, id_project, id_domain, id_name, **kw if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_execution_data" % key + " to method get_active_launch_plan" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'id_project' is set if ('id_project' not in params or params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `get_execution_data`") # noqa: E501 + raise ValueError("Missing the required parameter `id_project` when calling `get_active_launch_plan`") # noqa: E501 # verify the required parameter 'id_domain' is set if ('id_domain' not in params or params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `get_execution_data`") # noqa: E501 + raise ValueError("Missing the required parameter `id_domain` when calling `get_active_launch_plan`") # noqa: E501 # verify the required parameter 'id_name' is set if ('id_name' not in params or params['id_name'] is None): - raise ValueError("Missing the required parameter `id_name` when calling `get_execution_data`") # noqa: E501 + raise ValueError("Missing the required parameter `id_name` when calling `get_active_launch_plan`") # noqa: E501 collection_formats = {} @@ -1485,6 +1495,8 @@ def get_execution_data_with_http_info(self, id_project, id_domain, id_name, **kw path_params['id.name'] = params['id_name'] # noqa: E501 query_params = [] + if 'id_org' in params: + query_params.append(('id.org', params['id_org'])) # noqa: E501 header_params = {} @@ -1504,14 +1516,14 @@ def get_execution_data_with_http_info(self, id_project, id_domain, id_name, **kw auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/data/executions/{id.project}/{id.domain}/{id.name}', 'GET', + '/api/v1/active_launch_plans/{id.project}/{id.domain}/{id.name}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminWorkflowExecutionGetDataResponse', # noqa: E501 + response_type='AdminLaunchPlan', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -1519,49 +1531,49 @@ def get_execution_data_with_http_info(self, id_project, id_domain, id_name, **kw _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_execution_metrics(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Fetches runtime metrics for a :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 + def get_active_launch_plan2(self, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetch the active version of a :ref:`ref_flyteidl.admin.LaunchPlan`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_execution_metrics(id_project, id_domain, id_name, async_req=True) + >>> thread = api.get_active_launch_plan2(id_org, id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool + :param str id_org: Optional, org key applied to the resource. (required) :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User or system provided value for the resource. (required) - :param int depth: depth defines the number of Flyte entity levels to traverse when breaking down execution details. - :return: AdminWorkflowExecutionGetMetricsResponse + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) + :return: AdminLaunchPlan If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_execution_metrics_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 + return self.get_active_launch_plan2_with_http_info(id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 else: - (data) = self.get_execution_metrics_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 + (data) = self.get_active_launch_plan2_with_http_info(id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 return data - def get_execution_metrics_with_http_info(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Fetches runtime metrics for a :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 + def get_active_launch_plan2_with_http_info(self, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetch the active version of a :ref:`ref_flyteidl.admin.LaunchPlan`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_execution_metrics_with_http_info(id_project, id_domain, id_name, async_req=True) + >>> thread = api.get_active_launch_plan2_with_http_info(id_org, id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool + :param str id_org: Optional, org key applied to the resource. (required) :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User or system provided value for the resource. (required) - :param int depth: depth defines the number of Flyte entity levels to traverse when breaking down execution details. - :return: AdminWorkflowExecutionGetMetricsResponse + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) + :return: AdminLaunchPlan If the method is called asynchronously, returns the request thread. """ - all_params = ['id_project', 'id_domain', 'id_name', 'depth'] # noqa: E501 + all_params = ['id_org', 'id_project', 'id_domain', 'id_name'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -1572,26 +1584,32 @@ def get_execution_metrics_with_http_info(self, id_project, id_domain, id_name, * if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_execution_metrics" % key + " to method get_active_launch_plan2" % key ) params[key] = val del params['kwargs'] + # verify the required parameter 'id_org' is set + if ('id_org' not in params or + params['id_org'] is None): + raise ValueError("Missing the required parameter `id_org` when calling `get_active_launch_plan2`") # noqa: E501 # verify the required parameter 'id_project' is set if ('id_project' not in params or params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `get_execution_metrics`") # noqa: E501 + raise ValueError("Missing the required parameter `id_project` when calling `get_active_launch_plan2`") # noqa: E501 # verify the required parameter 'id_domain' is set if ('id_domain' not in params or params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `get_execution_metrics`") # noqa: E501 + raise ValueError("Missing the required parameter `id_domain` when calling `get_active_launch_plan2`") # noqa: E501 # verify the required parameter 'id_name' is set if ('id_name' not in params or params['id_name'] is None): - raise ValueError("Missing the required parameter `id_name` when calling `get_execution_metrics`") # noqa: E501 + raise ValueError("Missing the required parameter `id_name` when calling `get_active_launch_plan2`") # noqa: E501 collection_formats = {} path_params = {} + if 'id_org' in params: + path_params['id.org'] = params['id_org'] # noqa: E501 if 'id_project' in params: path_params['id.project'] = params['id_project'] # noqa: E501 if 'id_domain' in params: @@ -1600,8 +1618,6 @@ def get_execution_metrics_with_http_info(self, id_project, id_domain, id_name, * path_params['id.name'] = params['id_name'] # noqa: E501 query_params = [] - if 'depth' in params: - query_params.append(('depth', params['depth'])) # noqa: E501 header_params = {} @@ -1621,14 +1637,14 @@ def get_execution_metrics_with_http_info(self, id_project, id_domain, id_name, * auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/metrics/executions/{id.project}/{id.domain}/{id.name}', 'GET', + '/api/v1/active_launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminWorkflowExecutionGetMetricsResponse', # noqa: E501 + response_type='AdminLaunchPlan', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -1636,51 +1652,53 @@ def get_execution_metrics_with_http_info(self, id_project, id_domain, id_name, * _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_launch_plan(self, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 - """Fetch a :ref:`ref_flyteidl.admin.LaunchPlan` definition. # noqa: E501 + def get_description_entity(self, id_resource_type, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 + """Fetch a :ref:`ref_flyteidl.admin.DescriptionEntity` object. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_launch_plan(id_project, id_domain, id_name, id_version, async_req=True) + >>> thread = api.get_description_entity(id_resource_type, id_project, id_domain, id_name, id_version, async_req=True) >>> result = thread.get() :param async_req bool + :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. (required) :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) :param str id_name: User provided value for the resource. (required) :param str id_version: Specific version of the resource. (required) - :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects - :return: AdminLaunchPlan + :param str id_org: Optional, org key applied to the resource. + :return: AdminDescriptionEntity If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_launch_plan_with_http_info(id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 + return self.get_description_entity_with_http_info(id_resource_type, id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 else: - (data) = self.get_launch_plan_with_http_info(id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 + (data) = self.get_description_entity_with_http_info(id_resource_type, id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 return data - def get_launch_plan_with_http_info(self, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 - """Fetch a :ref:`ref_flyteidl.admin.LaunchPlan` definition. # noqa: E501 + def get_description_entity_with_http_info(self, id_resource_type, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 + """Fetch a :ref:`ref_flyteidl.admin.DescriptionEntity` object. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_launch_plan_with_http_info(id_project, id_domain, id_name, id_version, async_req=True) + >>> thread = api.get_description_entity_with_http_info(id_resource_type, id_project, id_domain, id_name, id_version, async_req=True) >>> result = thread.get() :param async_req bool + :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. (required) :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) :param str id_name: User provided value for the resource. (required) :param str id_version: Specific version of the resource. (required) - :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects - :return: AdminLaunchPlan + :param str id_org: Optional, org key applied to the resource. + :return: AdminDescriptionEntity If the method is called asynchronously, returns the request thread. """ - all_params = ['id_project', 'id_domain', 'id_name', 'id_version', 'id_resource_type'] # noqa: E501 + all_params = ['id_resource_type', 'id_project', 'id_domain', 'id_name', 'id_version', 'id_org'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -1691,30 +1709,36 @@ def get_launch_plan_with_http_info(self, id_project, id_domain, id_name, id_vers if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_launch_plan" % key + " to method get_description_entity" % key ) params[key] = val del params['kwargs'] + # verify the required parameter 'id_resource_type' is set + if ('id_resource_type' not in params or + params['id_resource_type'] is None): + raise ValueError("Missing the required parameter `id_resource_type` when calling `get_description_entity`") # noqa: E501 # verify the required parameter 'id_project' is set if ('id_project' not in params or params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `get_launch_plan`") # noqa: E501 + raise ValueError("Missing the required parameter `id_project` when calling `get_description_entity`") # noqa: E501 # verify the required parameter 'id_domain' is set if ('id_domain' not in params or params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `get_launch_plan`") # noqa: E501 + raise ValueError("Missing the required parameter `id_domain` when calling `get_description_entity`") # noqa: E501 # verify the required parameter 'id_name' is set if ('id_name' not in params or params['id_name'] is None): - raise ValueError("Missing the required parameter `id_name` when calling `get_launch_plan`") # noqa: E501 + raise ValueError("Missing the required parameter `id_name` when calling `get_description_entity`") # noqa: E501 # verify the required parameter 'id_version' is set if ('id_version' not in params or params['id_version'] is None): - raise ValueError("Missing the required parameter `id_version` when calling `get_launch_plan`") # noqa: E501 + raise ValueError("Missing the required parameter `id_version` when calling `get_description_entity`") # noqa: E501 collection_formats = {} path_params = {} + if 'id_resource_type' in params: + path_params['id.resource_type'] = params['id_resource_type'] # noqa: E501 if 'id_project' in params: path_params['id.project'] = params['id_project'] # noqa: E501 if 'id_domain' in params: @@ -1725,8 +1749,8 @@ def get_launch_plan_with_http_info(self, id_project, id_domain, id_name, id_vers path_params['id.version'] = params['id_version'] # noqa: E501 query_params = [] - if 'id_resource_type' in params: - query_params.append(('id.resource_type', params['id_resource_type'])) # noqa: E501 + if 'id_org' in params: + query_params.append(('id.org', params['id_org'])) # noqa: E501 header_params = {} @@ -1746,14 +1770,14 @@ def get_launch_plan_with_http_info(self, id_project, id_domain, id_name, id_vers auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/launch_plans/{id.project}/{id.domain}/{id.name}/{id.version}', 'GET', + '/api/v1/description_entities/{id.resource_type}/{id.project}/{id.domain}/{id.name}/{id.version}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminLaunchPlan', # noqa: E501 + response_type='AdminDescriptionEntity', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -1761,49 +1785,53 @@ def get_launch_plan_with_http_info(self, id_project, id_domain, id_name, id_vers _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_named_entity(self, resource_type, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Returns a :ref:`ref_flyteidl.admin.NamedEntity` object. # noqa: E501 + def get_description_entity2(self, id_org, id_resource_type, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 + """Fetch a :ref:`ref_flyteidl.admin.DescriptionEntity` object. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_named_entity(resource_type, id_project, id_domain, id_name, async_req=True) + >>> thread = api.get_description_entity2(id_org, id_resource_type, id_project, id_domain, id_name, id_version, async_req=True) >>> result = thread.get() :param async_req bool - :param str resource_type: Resource type of the metadata to get. One of Task, Workflow or LaunchPlan. +required (required) + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. (required) :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) - :return: AdminNamedEntity + :param str id_name: User provided value for the resource. (required) + :param str id_version: Specific version of the resource. (required) + :return: AdminDescriptionEntity If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_named_entity_with_http_info(resource_type, id_project, id_domain, id_name, **kwargs) # noqa: E501 + return self.get_description_entity2_with_http_info(id_org, id_resource_type, id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 else: - (data) = self.get_named_entity_with_http_info(resource_type, id_project, id_domain, id_name, **kwargs) # noqa: E501 + (data) = self.get_description_entity2_with_http_info(id_org, id_resource_type, id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 return data - def get_named_entity_with_http_info(self, resource_type, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Returns a :ref:`ref_flyteidl.admin.NamedEntity` object. # noqa: E501 + def get_description_entity2_with_http_info(self, id_org, id_resource_type, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 + """Fetch a :ref:`ref_flyteidl.admin.DescriptionEntity` object. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_named_entity_with_http_info(resource_type, id_project, id_domain, id_name, async_req=True) + >>> thread = api.get_description_entity2_with_http_info(id_org, id_resource_type, id_project, id_domain, id_name, id_version, async_req=True) >>> result = thread.get() :param async_req bool - :param str resource_type: Resource type of the metadata to get. One of Task, Workflow or LaunchPlan. +required (required) + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. (required) :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) - :return: AdminNamedEntity + :param str id_name: User provided value for the resource. (required) + :param str id_version: Specific version of the resource. (required) + :return: AdminDescriptionEntity If the method is called asynchronously, returns the request thread. """ - all_params = ['resource_type', 'id_project', 'id_domain', 'id_name'] # noqa: E501 + all_params = ['id_org', 'id_resource_type', 'id_project', 'id_domain', 'id_name', 'id_version'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -1814,38 +1842,50 @@ def get_named_entity_with_http_info(self, resource_type, id_project, id_domain, if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_named_entity" % key + " to method get_description_entity2" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'resource_type' is set - if ('resource_type' not in params or - params['resource_type'] is None): - raise ValueError("Missing the required parameter `resource_type` when calling `get_named_entity`") # noqa: E501 + # verify the required parameter 'id_org' is set + if ('id_org' not in params or + params['id_org'] is None): + raise ValueError("Missing the required parameter `id_org` when calling `get_description_entity2`") # noqa: E501 + # verify the required parameter 'id_resource_type' is set + if ('id_resource_type' not in params or + params['id_resource_type'] is None): + raise ValueError("Missing the required parameter `id_resource_type` when calling `get_description_entity2`") # noqa: E501 # verify the required parameter 'id_project' is set if ('id_project' not in params or params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `get_named_entity`") # noqa: E501 + raise ValueError("Missing the required parameter `id_project` when calling `get_description_entity2`") # noqa: E501 # verify the required parameter 'id_domain' is set if ('id_domain' not in params or params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `get_named_entity`") # noqa: E501 + raise ValueError("Missing the required parameter `id_domain` when calling `get_description_entity2`") # noqa: E501 # verify the required parameter 'id_name' is set if ('id_name' not in params or params['id_name'] is None): - raise ValueError("Missing the required parameter `id_name` when calling `get_named_entity`") # noqa: E501 + raise ValueError("Missing the required parameter `id_name` when calling `get_description_entity2`") # noqa: E501 + # verify the required parameter 'id_version' is set + if ('id_version' not in params or + params['id_version'] is None): + raise ValueError("Missing the required parameter `id_version` when calling `get_description_entity2`") # noqa: E501 collection_formats = {} path_params = {} - if 'resource_type' in params: - path_params['resource_type'] = params['resource_type'] # noqa: E501 + if 'id_org' in params: + path_params['id.org'] = params['id_org'] # noqa: E501 + if 'id_resource_type' in params: + path_params['id.resource_type'] = params['id_resource_type'] # noqa: E501 if 'id_project' in params: path_params['id.project'] = params['id_project'] # noqa: E501 if 'id_domain' in params: path_params['id.domain'] = params['id_domain'] # noqa: E501 if 'id_name' in params: path_params['id.name'] = params['id_name'] # noqa: E501 + if 'id_version' in params: + path_params['id.version'] = params['id_version'] # noqa: E501 query_params = [] @@ -1867,14 +1907,14 @@ def get_named_entity_with_http_info(self, resource_type, id_project, id_domain, auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/named_entities/{resource_type}/{id.project}/{id.domain}/{id.name}', 'GET', + '/api/v1/description_entities/org/{id.org}/{id.resource_type}/{id.project}/{id.domain}/{id.name}/{id.version}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminNamedEntity', # noqa: E501 + response_type='AdminDescriptionEntity', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -1882,49 +1922,49 @@ def get_named_entity_with_http_info(self, resource_type, id_project, id_domain, _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_node_execution(self, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs): # noqa: E501 - """Fetches a :ref:`ref_flyteidl.admin.NodeExecution`. # noqa: E501 + def get_execution(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetches a :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_node_execution(id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, async_req=True) + >>> thread = api.get_execution(id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_execution_id_project: Name of the project the resource belongs to. (required) - :param str id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_execution_id_name: User or system provided value for the resource. (required) - :param str id_node_id: (required) - :return: FlyteidladminNodeExecution + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User or system provided value for the resource. (required) + :param str id_org: Optional, org key applied to the resource. + :return: AdminExecution If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_node_execution_with_http_info(id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs) # noqa: E501 + return self.get_execution_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 else: - (data) = self.get_node_execution_with_http_info(id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs) # noqa: E501 + (data) = self.get_execution_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 return data - def get_node_execution_with_http_info(self, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs): # noqa: E501 - """Fetches a :ref:`ref_flyteidl.admin.NodeExecution`. # noqa: E501 + def get_execution_with_http_info(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetches a :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_node_execution_with_http_info(id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, async_req=True) + >>> thread = api.get_execution_with_http_info(id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_execution_id_project: Name of the project the resource belongs to. (required) - :param str id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_execution_id_name: User or system provided value for the resource. (required) - :param str id_node_id: (required) - :return: FlyteidladminNodeExecution + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User or system provided value for the resource. (required) + :param str id_org: Optional, org key applied to the resource. + :return: AdminExecution If the method is called asynchronously, returns the request thread. """ - all_params = ['id_execution_id_project', 'id_execution_id_domain', 'id_execution_id_name', 'id_node_id'] # noqa: E501 + all_params = ['id_project', 'id_domain', 'id_name', 'id_org'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -1935,40 +1975,36 @@ def get_node_execution_with_http_info(self, id_execution_id_project, id_executio if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_node_execution" % key + " to method get_execution" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'id_execution_id_project' is set - if ('id_execution_id_project' not in params or - params['id_execution_id_project'] is None): - raise ValueError("Missing the required parameter `id_execution_id_project` when calling `get_node_execution`") # noqa: E501 - # verify the required parameter 'id_execution_id_domain' is set - if ('id_execution_id_domain' not in params or - params['id_execution_id_domain'] is None): - raise ValueError("Missing the required parameter `id_execution_id_domain` when calling `get_node_execution`") # noqa: E501 - # verify the required parameter 'id_execution_id_name' is set - if ('id_execution_id_name' not in params or - params['id_execution_id_name'] is None): - raise ValueError("Missing the required parameter `id_execution_id_name` when calling `get_node_execution`") # noqa: E501 - # verify the required parameter 'id_node_id' is set - if ('id_node_id' not in params or - params['id_node_id'] is None): - raise ValueError("Missing the required parameter `id_node_id` when calling `get_node_execution`") # noqa: E501 + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `get_execution`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `get_execution`") # noqa: E501 + # verify the required parameter 'id_name' is set + if ('id_name' not in params or + params['id_name'] is None): + raise ValueError("Missing the required parameter `id_name` when calling `get_execution`") # noqa: E501 collection_formats = {} path_params = {} - if 'id_execution_id_project' in params: - path_params['id.execution_id.project'] = params['id_execution_id_project'] # noqa: E501 - if 'id_execution_id_domain' in params: - path_params['id.execution_id.domain'] = params['id_execution_id_domain'] # noqa: E501 - if 'id_execution_id_name' in params: - path_params['id.execution_id.name'] = params['id_execution_id_name'] # noqa: E501 - if 'id_node_id' in params: - path_params['id.node_id'] = params['id_node_id'] # noqa: E501 + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 + if 'id_name' in params: + path_params['id.name'] = params['id_name'] # noqa: E501 query_params = [] + if 'id_org' in params: + query_params.append(('id.org', params['id_org'])) # noqa: E501 header_params = {} @@ -1988,14 +2024,14 @@ def get_node_execution_with_http_info(self, id_execution_id_project, id_executio auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/node_executions/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}', 'GET', + '/api/v1/executions/{id.project}/{id.domain}/{id.name}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='FlyteidladminNodeExecution', # noqa: E501 + response_type='AdminExecution', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -2003,49 +2039,49 @@ def get_node_execution_with_http_info(self, id_execution_id_project, id_executio _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_node_execution_data(self, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs): # noqa: E501 - """Fetches input and output data for a :ref:`ref_flyteidl.admin.NodeExecution`. # noqa: E501 + def get_execution2(self, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetches a :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_node_execution_data(id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, async_req=True) + >>> thread = api.get_execution2(id_org, id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_execution_id_project: Name of the project the resource belongs to. (required) - :param str id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_execution_id_name: User or system provided value for the resource. (required) - :param str id_node_id: (required) - :return: AdminNodeExecutionGetDataResponse + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User or system provided value for the resource. (required) + :return: AdminExecution If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_node_execution_data_with_http_info(id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs) # noqa: E501 + return self.get_execution2_with_http_info(id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 else: - (data) = self.get_node_execution_data_with_http_info(id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs) # noqa: E501 + (data) = self.get_execution2_with_http_info(id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 return data - def get_node_execution_data_with_http_info(self, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs): # noqa: E501 - """Fetches input and output data for a :ref:`ref_flyteidl.admin.NodeExecution`. # noqa: E501 + def get_execution2_with_http_info(self, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetches a :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_node_execution_data_with_http_info(id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, async_req=True) + >>> thread = api.get_execution2_with_http_info(id_org, id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_execution_id_project: Name of the project the resource belongs to. (required) - :param str id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_execution_id_name: User or system provided value for the resource. (required) - :param str id_node_id: (required) - :return: AdminNodeExecutionGetDataResponse + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User or system provided value for the resource. (required) + :return: AdminExecution If the method is called asynchronously, returns the request thread. """ - all_params = ['id_execution_id_project', 'id_execution_id_domain', 'id_execution_id_name', 'id_node_id'] # noqa: E501 + all_params = ['id_org', 'id_project', 'id_domain', 'id_name'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -2056,38 +2092,38 @@ def get_node_execution_data_with_http_info(self, id_execution_id_project, id_exe if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_node_execution_data" % key + " to method get_execution2" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'id_execution_id_project' is set - if ('id_execution_id_project' not in params or - params['id_execution_id_project'] is None): - raise ValueError("Missing the required parameter `id_execution_id_project` when calling `get_node_execution_data`") # noqa: E501 - # verify the required parameter 'id_execution_id_domain' is set - if ('id_execution_id_domain' not in params or - params['id_execution_id_domain'] is None): - raise ValueError("Missing the required parameter `id_execution_id_domain` when calling `get_node_execution_data`") # noqa: E501 - # verify the required parameter 'id_execution_id_name' is set - if ('id_execution_id_name' not in params or - params['id_execution_id_name'] is None): - raise ValueError("Missing the required parameter `id_execution_id_name` when calling `get_node_execution_data`") # noqa: E501 - # verify the required parameter 'id_node_id' is set - if ('id_node_id' not in params or - params['id_node_id'] is None): - raise ValueError("Missing the required parameter `id_node_id` when calling `get_node_execution_data`") # noqa: E501 + # verify the required parameter 'id_org' is set + if ('id_org' not in params or + params['id_org'] is None): + raise ValueError("Missing the required parameter `id_org` when calling `get_execution2`") # noqa: E501 + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `get_execution2`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `get_execution2`") # noqa: E501 + # verify the required parameter 'id_name' is set + if ('id_name' not in params or + params['id_name'] is None): + raise ValueError("Missing the required parameter `id_name` when calling `get_execution2`") # noqa: E501 collection_formats = {} path_params = {} - if 'id_execution_id_project' in params: - path_params['id.execution_id.project'] = params['id_execution_id_project'] # noqa: E501 - if 'id_execution_id_domain' in params: - path_params['id.execution_id.domain'] = params['id_execution_id_domain'] # noqa: E501 - if 'id_execution_id_name' in params: - path_params['id.execution_id.name'] = params['id_execution_id_name'] # noqa: E501 - if 'id_node_id' in params: - path_params['id.node_id'] = params['id_node_id'] # noqa: E501 + if 'id_org' in params: + path_params['id.org'] = params['id_org'] # noqa: E501 + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 + if 'id_name' in params: + path_params['id.name'] = params['id_name'] # noqa: E501 query_params = [] @@ -2109,14 +2145,14 @@ def get_node_execution_data_with_http_info(self, id_execution_id_project, id_exe auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/data/node_executions/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}', 'GET', + '/api/v1/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminNodeExecutionGetDataResponse', # noqa: E501 + response_type='AdminExecution', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -2124,45 +2160,49 @@ def get_node_execution_data_with_http_info(self, id_execution_id_project, id_exe _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_project_attributes(self, project, **kwargs): # noqa: E501 - """Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 + def get_execution_data(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetches input and output data for a :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_project_attributes(project, async_req=True) + >>> thread = api.get_execution_data(id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str project: Unique project id which this set of attributes references. +required (required) - :param str resource_type: Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. - :return: AdminProjectAttributesGetResponse + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User or system provided value for the resource. (required) + :param str id_org: Optional, org key applied to the resource. + :return: AdminWorkflowExecutionGetDataResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_project_attributes_with_http_info(project, **kwargs) # noqa: E501 + return self.get_execution_data_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 else: - (data) = self.get_project_attributes_with_http_info(project, **kwargs) # noqa: E501 + (data) = self.get_execution_data_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 return data - def get_project_attributes_with_http_info(self, project, **kwargs): # noqa: E501 - """Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 + def get_execution_data_with_http_info(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetches input and output data for a :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_project_attributes_with_http_info(project, async_req=True) + >>> thread = api.get_execution_data_with_http_info(id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str project: Unique project id which this set of attributes references. +required (required) - :param str resource_type: Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. - :return: AdminProjectAttributesGetResponse + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User or system provided value for the resource. (required) + :param str id_org: Optional, org key applied to the resource. + :return: AdminWorkflowExecutionGetDataResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['project', 'resource_type'] # noqa: E501 + all_params = ['id_project', 'id_domain', 'id_name', 'id_org'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -2173,24 +2213,36 @@ def get_project_attributes_with_http_info(self, project, **kwargs): # noqa: E50 if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_project_attributes" % key + " to method get_execution_data" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'project' is set - if ('project' not in params or - params['project'] is None): - raise ValueError("Missing the required parameter `project` when calling `get_project_attributes`") # noqa: E501 + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `get_execution_data`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `get_execution_data`") # noqa: E501 + # verify the required parameter 'id_name' is set + if ('id_name' not in params or + params['id_name'] is None): + raise ValueError("Missing the required parameter `id_name` when calling `get_execution_data`") # noqa: E501 collection_formats = {} path_params = {} - if 'project' in params: - path_params['project'] = params['project'] # noqa: E501 + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 + if 'id_name' in params: + path_params['id.name'] = params['id_name'] # noqa: E501 query_params = [] - if 'resource_type' in params: - query_params.append(('resource_type', params['resource_type'])) # noqa: E501 + if 'id_org' in params: + query_params.append(('id.org', params['id_org'])) # noqa: E501 header_params = {} @@ -2210,14 +2262,14 @@ def get_project_attributes_with_http_info(self, project, **kwargs): # noqa: E50 auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/project_attributes/{project}', 'GET', + '/api/v1/data/executions/{id.project}/{id.domain}/{id.name}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminProjectAttributesGetResponse', # noqa: E501 + response_type='AdminWorkflowExecutionGetDataResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -2225,47 +2277,49 @@ def get_project_attributes_with_http_info(self, project, **kwargs): # noqa: E50 _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_project_domain_attributes(self, project, domain, **kwargs): # noqa: E501 - """Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 + def get_execution_data2(self, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetches input and output data for a :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_project_domain_attributes(project, domain, async_req=True) + >>> thread = api.get_execution_data2(id_org, id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str project: Unique project id which this set of attributes references. +required (required) - :param str domain: Unique domain id which this set of attributes references. +required (required) - :param str resource_type: Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. - :return: AdminProjectDomainAttributesGetResponse + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User or system provided value for the resource. (required) + :return: AdminWorkflowExecutionGetDataResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_project_domain_attributes_with_http_info(project, domain, **kwargs) # noqa: E501 + return self.get_execution_data2_with_http_info(id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 else: - (data) = self.get_project_domain_attributes_with_http_info(project, domain, **kwargs) # noqa: E501 + (data) = self.get_execution_data2_with_http_info(id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 return data - def get_project_domain_attributes_with_http_info(self, project, domain, **kwargs): # noqa: E501 - """Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 + def get_execution_data2_with_http_info(self, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetches input and output data for a :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_project_domain_attributes_with_http_info(project, domain, async_req=True) + >>> thread = api.get_execution_data2_with_http_info(id_org, id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str project: Unique project id which this set of attributes references. +required (required) - :param str domain: Unique domain id which this set of attributes references. +required (required) - :param str resource_type: Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. - :return: AdminProjectDomainAttributesGetResponse + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User or system provided value for the resource. (required) + :return: AdminWorkflowExecutionGetDataResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['project', 'domain', 'resource_type'] # noqa: E501 + all_params = ['id_org', 'id_project', 'id_domain', 'id_name'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -2276,30 +2330,40 @@ def get_project_domain_attributes_with_http_info(self, project, domain, **kwargs if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_project_domain_attributes" % key + " to method get_execution_data2" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'project' is set - if ('project' not in params or - params['project'] is None): - raise ValueError("Missing the required parameter `project` when calling `get_project_domain_attributes`") # noqa: E501 - # verify the required parameter 'domain' is set - if ('domain' not in params or - params['domain'] is None): - raise ValueError("Missing the required parameter `domain` when calling `get_project_domain_attributes`") # noqa: E501 + # verify the required parameter 'id_org' is set + if ('id_org' not in params or + params['id_org'] is None): + raise ValueError("Missing the required parameter `id_org` when calling `get_execution_data2`") # noqa: E501 + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `get_execution_data2`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `get_execution_data2`") # noqa: E501 + # verify the required parameter 'id_name' is set + if ('id_name' not in params or + params['id_name'] is None): + raise ValueError("Missing the required parameter `id_name` when calling `get_execution_data2`") # noqa: E501 collection_formats = {} path_params = {} - if 'project' in params: - path_params['project'] = params['project'] # noqa: E501 - if 'domain' in params: - path_params['domain'] = params['domain'] # noqa: E501 + if 'id_org' in params: + path_params['id.org'] = params['id_org'] # noqa: E501 + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 + if 'id_name' in params: + path_params['id.name'] = params['id_name'] # noqa: E501 query_params = [] - if 'resource_type' in params: - query_params.append(('resource_type', params['resource_type'])) # noqa: E501 header_params = {} @@ -2319,14 +2383,14 @@ def get_project_domain_attributes_with_http_info(self, project, domain, **kwargs auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/project_domain_attributes/{project}/{domain}', 'GET', + '/api/v1/data/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminProjectDomainAttributesGetResponse', # noqa: E501 + response_type='AdminWorkflowExecutionGetDataResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -2334,51 +2398,51 @@ def get_project_domain_attributes_with_http_info(self, project, domain, **kwargs _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_task(self, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 - """Fetch a :ref:`ref_flyteidl.admin.Task` definition. # noqa: E501 + def get_execution_metrics(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetches runtime metrics for a :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_task(id_project, id_domain, id_name, id_version, async_req=True) + >>> thread = api.get_execution_metrics(id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. (required) - :param str id_version: Specific version of the resource. (required) - :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects - :return: AdminTask + :param str id_name: User or system provided value for the resource. (required) + :param str id_org: Optional, org key applied to the resource. + :param int depth: depth defines the number of Flyte entity levels to traverse when breaking down execution details. + :return: AdminWorkflowExecutionGetMetricsResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_task_with_http_info(id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 + return self.get_execution_metrics_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 else: - (data) = self.get_task_with_http_info(id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 + (data) = self.get_execution_metrics_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 return data - def get_task_with_http_info(self, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 - """Fetch a :ref:`ref_flyteidl.admin.Task` definition. # noqa: E501 + def get_execution_metrics_with_http_info(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetches runtime metrics for a :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_task_with_http_info(id_project, id_domain, id_name, id_version, async_req=True) + >>> thread = api.get_execution_metrics_with_http_info(id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. (required) - :param str id_version: Specific version of the resource. (required) - :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects - :return: AdminTask - If the method is called asynchronously, - returns the request thread. + :param str id_name: User or system provided value for the resource. (required) + :param str id_org: Optional, org key applied to the resource. + :param int depth: depth defines the number of Flyte entity levels to traverse when breaking down execution details. + :return: AdminWorkflowExecutionGetMetricsResponse + If the method is called asynchronously, + returns the request thread. """ - all_params = ['id_project', 'id_domain', 'id_name', 'id_version', 'id_resource_type'] # noqa: E501 + all_params = ['id_project', 'id_domain', 'id_name', 'id_org', 'depth'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -2389,26 +2453,22 @@ def get_task_with_http_info(self, id_project, id_domain, id_name, id_version, ** if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_task" % key + " to method get_execution_metrics" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'id_project' is set if ('id_project' not in params or params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `get_task`") # noqa: E501 + raise ValueError("Missing the required parameter `id_project` when calling `get_execution_metrics`") # noqa: E501 # verify the required parameter 'id_domain' is set if ('id_domain' not in params or params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `get_task`") # noqa: E501 + raise ValueError("Missing the required parameter `id_domain` when calling `get_execution_metrics`") # noqa: E501 # verify the required parameter 'id_name' is set if ('id_name' not in params or params['id_name'] is None): - raise ValueError("Missing the required parameter `id_name` when calling `get_task`") # noqa: E501 - # verify the required parameter 'id_version' is set - if ('id_version' not in params or - params['id_version'] is None): - raise ValueError("Missing the required parameter `id_version` when calling `get_task`") # noqa: E501 + raise ValueError("Missing the required parameter `id_name` when calling `get_execution_metrics`") # noqa: E501 collection_formats = {} @@ -2419,12 +2479,12 @@ def get_task_with_http_info(self, id_project, id_domain, id_name, id_version, ** path_params['id.domain'] = params['id_domain'] # noqa: E501 if 'id_name' in params: path_params['id.name'] = params['id_name'] # noqa: E501 - if 'id_version' in params: - path_params['id.version'] = params['id_version'] # noqa: E501 query_params = [] - if 'id_resource_type' in params: - query_params.append(('id.resource_type', params['id_resource_type'])) # noqa: E501 + if 'id_org' in params: + query_params.append(('id.org', params['id_org'])) # noqa: E501 + if 'depth' in params: + query_params.append(('depth', params['depth'])) # noqa: E501 header_params = {} @@ -2444,14 +2504,14 @@ def get_task_with_http_info(self, id_project, id_domain, id_name, id_version, ** auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/tasks/{id.project}/{id.domain}/{id.name}/{id.version}', 'GET', + '/api/v1/metrics/executions/{id.project}/{id.domain}/{id.name}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminTask', # noqa: E501 + response_type='AdminWorkflowExecutionGetMetricsResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -2459,61 +2519,51 @@ def get_task_with_http_info(self, id_project, id_domain, id_name, id_version, ** _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_task_execution(self, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs): # noqa: E501 - """Fetches a :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 + def get_execution_metrics2(self, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetches runtime metrics for a :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_task_execution(id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, async_req=True) + >>> thread = api.get_execution_metrics2(id_org, id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) - :param str id_node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_node_execution_id_execution_id_name: User or system provided value for the resource. (required) - :param str id_node_execution_id_node_id: (required) - :param str id_task_id_project: Name of the project the resource belongs to. (required) - :param str id_task_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_task_id_name: User provided value for the resource. (required) - :param str id_task_id_version: Specific version of the resource. (required) - :param int id_retry_attempt: (required) - :param str id_task_id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects - :return: FlyteidladminTaskExecution + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User or system provided value for the resource. (required) + :param int depth: depth defines the number of Flyte entity levels to traverse when breaking down execution details. + :return: AdminWorkflowExecutionGetMetricsResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_task_execution_with_http_info(id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs) # noqa: E501 + return self.get_execution_metrics2_with_http_info(id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 else: - (data) = self.get_task_execution_with_http_info(id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs) # noqa: E501 + (data) = self.get_execution_metrics2_with_http_info(id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 return data - def get_task_execution_with_http_info(self, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs): # noqa: E501 - """Fetches a :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 + def get_execution_metrics2_with_http_info(self, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetches runtime metrics for a :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_task_execution_with_http_info(id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, async_req=True) + >>> thread = api.get_execution_metrics2_with_http_info(id_org, id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) - :param str id_node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_node_execution_id_execution_id_name: User or system provided value for the resource. (required) - :param str id_node_execution_id_node_id: (required) - :param str id_task_id_project: Name of the project the resource belongs to. (required) - :param str id_task_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_task_id_name: User provided value for the resource. (required) - :param str id_task_id_version: Specific version of the resource. (required) - :param int id_retry_attempt: (required) - :param str id_task_id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects - :return: FlyteidladminTaskExecution + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User or system provided value for the resource. (required) + :param int depth: depth defines the number of Flyte entity levels to traverse when breaking down execution details. + :return: AdminWorkflowExecutionGetMetricsResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['id_node_execution_id_execution_id_project', 'id_node_execution_id_execution_id_domain', 'id_node_execution_id_execution_id_name', 'id_node_execution_id_node_id', 'id_task_id_project', 'id_task_id_domain', 'id_task_id_name', 'id_task_id_version', 'id_retry_attempt', 'id_task_id_resource_type'] # noqa: E501 + all_params = ['id_org', 'id_project', 'id_domain', 'id_name', 'depth'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -2524,72 +2574,42 @@ def get_task_execution_with_http_info(self, id_node_execution_id_execution_id_pr if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_task_execution" % key + " to method get_execution_metrics2" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'id_node_execution_id_execution_id_project' is set - if ('id_node_execution_id_execution_id_project' not in params or - params['id_node_execution_id_execution_id_project'] is None): - raise ValueError("Missing the required parameter `id_node_execution_id_execution_id_project` when calling `get_task_execution`") # noqa: E501 - # verify the required parameter 'id_node_execution_id_execution_id_domain' is set - if ('id_node_execution_id_execution_id_domain' not in params or - params['id_node_execution_id_execution_id_domain'] is None): - raise ValueError("Missing the required parameter `id_node_execution_id_execution_id_domain` when calling `get_task_execution`") # noqa: E501 - # verify the required parameter 'id_node_execution_id_execution_id_name' is set - if ('id_node_execution_id_execution_id_name' not in params or - params['id_node_execution_id_execution_id_name'] is None): - raise ValueError("Missing the required parameter `id_node_execution_id_execution_id_name` when calling `get_task_execution`") # noqa: E501 - # verify the required parameter 'id_node_execution_id_node_id' is set - if ('id_node_execution_id_node_id' not in params or - params['id_node_execution_id_node_id'] is None): - raise ValueError("Missing the required parameter `id_node_execution_id_node_id` when calling `get_task_execution`") # noqa: E501 - # verify the required parameter 'id_task_id_project' is set - if ('id_task_id_project' not in params or - params['id_task_id_project'] is None): - raise ValueError("Missing the required parameter `id_task_id_project` when calling `get_task_execution`") # noqa: E501 - # verify the required parameter 'id_task_id_domain' is set - if ('id_task_id_domain' not in params or - params['id_task_id_domain'] is None): - raise ValueError("Missing the required parameter `id_task_id_domain` when calling `get_task_execution`") # noqa: E501 - # verify the required parameter 'id_task_id_name' is set - if ('id_task_id_name' not in params or - params['id_task_id_name'] is None): - raise ValueError("Missing the required parameter `id_task_id_name` when calling `get_task_execution`") # noqa: E501 - # verify the required parameter 'id_task_id_version' is set - if ('id_task_id_version' not in params or - params['id_task_id_version'] is None): - raise ValueError("Missing the required parameter `id_task_id_version` when calling `get_task_execution`") # noqa: E501 - # verify the required parameter 'id_retry_attempt' is set - if ('id_retry_attempt' not in params or - params['id_retry_attempt'] is None): - raise ValueError("Missing the required parameter `id_retry_attempt` when calling `get_task_execution`") # noqa: E501 + # verify the required parameter 'id_org' is set + if ('id_org' not in params or + params['id_org'] is None): + raise ValueError("Missing the required parameter `id_org` when calling `get_execution_metrics2`") # noqa: E501 + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `get_execution_metrics2`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `get_execution_metrics2`") # noqa: E501 + # verify the required parameter 'id_name' is set + if ('id_name' not in params or + params['id_name'] is None): + raise ValueError("Missing the required parameter `id_name` when calling `get_execution_metrics2`") # noqa: E501 collection_formats = {} path_params = {} - if 'id_node_execution_id_execution_id_project' in params: - path_params['id.node_execution_id.execution_id.project'] = params['id_node_execution_id_execution_id_project'] # noqa: E501 - if 'id_node_execution_id_execution_id_domain' in params: - path_params['id.node_execution_id.execution_id.domain'] = params['id_node_execution_id_execution_id_domain'] # noqa: E501 - if 'id_node_execution_id_execution_id_name' in params: - path_params['id.node_execution_id.execution_id.name'] = params['id_node_execution_id_execution_id_name'] # noqa: E501 - if 'id_node_execution_id_node_id' in params: - path_params['id.node_execution_id.node_id'] = params['id_node_execution_id_node_id'] # noqa: E501 - if 'id_task_id_project' in params: - path_params['id.task_id.project'] = params['id_task_id_project'] # noqa: E501 - if 'id_task_id_domain' in params: - path_params['id.task_id.domain'] = params['id_task_id_domain'] # noqa: E501 - if 'id_task_id_name' in params: - path_params['id.task_id.name'] = params['id_task_id_name'] # noqa: E501 - if 'id_task_id_version' in params: - path_params['id.task_id.version'] = params['id_task_id_version'] # noqa: E501 - if 'id_retry_attempt' in params: - path_params['id.retry_attempt'] = params['id_retry_attempt'] # noqa: E501 + if 'id_org' in params: + path_params['id.org'] = params['id_org'] # noqa: E501 + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 + if 'id_name' in params: + path_params['id.name'] = params['id_name'] # noqa: E501 query_params = [] - if 'id_task_id_resource_type' in params: - query_params.append(('id.task_id.resource_type', params['id_task_id_resource_type'])) # noqa: E501 + if 'depth' in params: + query_params.append(('depth', params['depth'])) # noqa: E501 header_params = {} @@ -2609,14 +2629,14 @@ def get_task_execution_with_http_info(self, id_node_execution_id_execution_id_pr auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/task_executions/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}', 'GET', + '/api/v1/metrics/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='FlyteidladminTaskExecution', # noqa: E501 + response_type='AdminWorkflowExecutionGetMetricsResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -2624,61 +2644,53 @@ def get_task_execution_with_http_info(self, id_node_execution_id_execution_id_pr _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_task_execution_data(self, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs): # noqa: E501 - """Fetches input and output data for a :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 + def get_launch_plan(self, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 + """Fetch a :ref:`ref_flyteidl.admin.LaunchPlan` definition. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_task_execution_data(id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, async_req=True) + >>> thread = api.get_launch_plan(id_project, id_domain, id_name, id_version, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) - :param str id_node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_node_execution_id_execution_id_name: User or system provided value for the resource. (required) - :param str id_node_execution_id_node_id: (required) - :param str id_task_id_project: Name of the project the resource belongs to. (required) - :param str id_task_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_task_id_name: User provided value for the resource. (required) - :param str id_task_id_version: Specific version of the resource. (required) - :param int id_retry_attempt: (required) - :param str id_task_id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects - :return: AdminTaskExecutionGetDataResponse + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. (required) + :param str id_version: Specific version of the resource. (required) + :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :param str id_org: Optional, org key applied to the resource. + :return: AdminLaunchPlan If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_task_execution_data_with_http_info(id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs) # noqa: E501 + return self.get_launch_plan_with_http_info(id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 else: - (data) = self.get_task_execution_data_with_http_info(id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs) # noqa: E501 + (data) = self.get_launch_plan_with_http_info(id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 return data - def get_task_execution_data_with_http_info(self, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs): # noqa: E501 - """Fetches input and output data for a :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 + def get_launch_plan_with_http_info(self, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 + """Fetch a :ref:`ref_flyteidl.admin.LaunchPlan` definition. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_task_execution_data_with_http_info(id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, async_req=True) + >>> thread = api.get_launch_plan_with_http_info(id_project, id_domain, id_name, id_version, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) - :param str id_node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_node_execution_id_execution_id_name: User or system provided value for the resource. (required) - :param str id_node_execution_id_node_id: (required) - :param str id_task_id_project: Name of the project the resource belongs to. (required) - :param str id_task_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_task_id_name: User provided value for the resource. (required) - :param str id_task_id_version: Specific version of the resource. (required) - :param int id_retry_attempt: (required) - :param str id_task_id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects - :return: AdminTaskExecutionGetDataResponse + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. (required) + :param str id_version: Specific version of the resource. (required) + :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :param str id_org: Optional, org key applied to the resource. + :return: AdminLaunchPlan If the method is called asynchronously, returns the request thread. """ - all_params = ['id_node_execution_id_execution_id_project', 'id_node_execution_id_execution_id_domain', 'id_node_execution_id_execution_id_name', 'id_node_execution_id_node_id', 'id_task_id_project', 'id_task_id_domain', 'id_task_id_name', 'id_task_id_version', 'id_retry_attempt', 'id_task_id_resource_type'] # noqa: E501 + all_params = ['id_project', 'id_domain', 'id_name', 'id_version', 'id_resource_type', 'id_org'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -2689,56 +2701,2327 @@ def get_task_execution_data_with_http_info(self, id_node_execution_id_execution_ if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_task_execution_data" % key + " to method get_launch_plan" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'id_node_execution_id_execution_id_project' is set - if ('id_node_execution_id_execution_id_project' not in params or - params['id_node_execution_id_execution_id_project'] is None): - raise ValueError("Missing the required parameter `id_node_execution_id_execution_id_project` when calling `get_task_execution_data`") # noqa: E501 - # verify the required parameter 'id_node_execution_id_execution_id_domain' is set - if ('id_node_execution_id_execution_id_domain' not in params or - params['id_node_execution_id_execution_id_domain'] is None): - raise ValueError("Missing the required parameter `id_node_execution_id_execution_id_domain` when calling `get_task_execution_data`") # noqa: E501 - # verify the required parameter 'id_node_execution_id_execution_id_name' is set - if ('id_node_execution_id_execution_id_name' not in params or - params['id_node_execution_id_execution_id_name'] is None): - raise ValueError("Missing the required parameter `id_node_execution_id_execution_id_name` when calling `get_task_execution_data`") # noqa: E501 - # verify the required parameter 'id_node_execution_id_node_id' is set - if ('id_node_execution_id_node_id' not in params or - params['id_node_execution_id_node_id'] is None): - raise ValueError("Missing the required parameter `id_node_execution_id_node_id` when calling `get_task_execution_data`") # noqa: E501 - # verify the required parameter 'id_task_id_project' is set - if ('id_task_id_project' not in params or - params['id_task_id_project'] is None): - raise ValueError("Missing the required parameter `id_task_id_project` when calling `get_task_execution_data`") # noqa: E501 - # verify the required parameter 'id_task_id_domain' is set - if ('id_task_id_domain' not in params or - params['id_task_id_domain'] is None): - raise ValueError("Missing the required parameter `id_task_id_domain` when calling `get_task_execution_data`") # noqa: E501 - # verify the required parameter 'id_task_id_name' is set - if ('id_task_id_name' not in params or - params['id_task_id_name'] is None): - raise ValueError("Missing the required parameter `id_task_id_name` when calling `get_task_execution_data`") # noqa: E501 - # verify the required parameter 'id_task_id_version' is set - if ('id_task_id_version' not in params or - params['id_task_id_version'] is None): - raise ValueError("Missing the required parameter `id_task_id_version` when calling `get_task_execution_data`") # noqa: E501 - # verify the required parameter 'id_retry_attempt' is set - if ('id_retry_attempt' not in params or - params['id_retry_attempt'] is None): - raise ValueError("Missing the required parameter `id_retry_attempt` when calling `get_task_execution_data`") # noqa: E501 + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `get_launch_plan`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `get_launch_plan`") # noqa: E501 + # verify the required parameter 'id_name' is set + if ('id_name' not in params or + params['id_name'] is None): + raise ValueError("Missing the required parameter `id_name` when calling `get_launch_plan`") # noqa: E501 + # verify the required parameter 'id_version' is set + if ('id_version' not in params or + params['id_version'] is None): + raise ValueError("Missing the required parameter `id_version` when calling `get_launch_plan`") # noqa: E501 collection_formats = {} path_params = {} - if 'id_node_execution_id_execution_id_project' in params: - path_params['id.node_execution_id.execution_id.project'] = params['id_node_execution_id_execution_id_project'] # noqa: E501 - if 'id_node_execution_id_execution_id_domain' in params: - path_params['id.node_execution_id.execution_id.domain'] = params['id_node_execution_id_execution_id_domain'] # noqa: E501 - if 'id_node_execution_id_execution_id_name' in params: - path_params['id.node_execution_id.execution_id.name'] = params['id_node_execution_id_execution_id_name'] # noqa: E501 + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 + if 'id_name' in params: + path_params['id.name'] = params['id_name'] # noqa: E501 + if 'id_version' in params: + path_params['id.version'] = params['id_version'] # noqa: E501 + + query_params = [] + if 'id_resource_type' in params: + query_params.append(('id.resource_type', params['id_resource_type'])) # noqa: E501 + if 'id_org' in params: + query_params.append(('id.org', params['id_org'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/launch_plans/{id.project}/{id.domain}/{id.name}/{id.version}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminLaunchPlan', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_launch_plan2(self, id_org, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 + """Fetch a :ref:`ref_flyteidl.admin.LaunchPlan` definition. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_launch_plan2(id_org, id_project, id_domain, id_name, id_version, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. (required) + :param str id_version: Specific version of the resource. (required) + :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :return: AdminLaunchPlan + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.get_launch_plan2_with_http_info(id_org, id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 + else: + (data) = self.get_launch_plan2_with_http_info(id_org, id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 + return data + + def get_launch_plan2_with_http_info(self, id_org, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 + """Fetch a :ref:`ref_flyteidl.admin.LaunchPlan` definition. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_launch_plan2_with_http_info(id_org, id_project, id_domain, id_name, id_version, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. (required) + :param str id_version: Specific version of the resource. (required) + :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :return: AdminLaunchPlan + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['id_org', 'id_project', 'id_domain', 'id_name', 'id_version', 'id_resource_type'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_launch_plan2" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'id_org' is set + if ('id_org' not in params or + params['id_org'] is None): + raise ValueError("Missing the required parameter `id_org` when calling `get_launch_plan2`") # noqa: E501 + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `get_launch_plan2`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `get_launch_plan2`") # noqa: E501 + # verify the required parameter 'id_name' is set + if ('id_name' not in params or + params['id_name'] is None): + raise ValueError("Missing the required parameter `id_name` when calling `get_launch_plan2`") # noqa: E501 + # verify the required parameter 'id_version' is set + if ('id_version' not in params or + params['id_version'] is None): + raise ValueError("Missing the required parameter `id_version` when calling `get_launch_plan2`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'id_org' in params: + path_params['id.org'] = params['id_org'] # noqa: E501 + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 + if 'id_name' in params: + path_params['id.name'] = params['id_name'] # noqa: E501 + if 'id_version' in params: + path_params['id.version'] = params['id_version'] # noqa: E501 + + query_params = [] + if 'id_resource_type' in params: + query_params.append(('id.resource_type', params['id_resource_type'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminLaunchPlan', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_named_entity(self, resource_type, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Returns a :ref:`ref_flyteidl.admin.NamedEntity` object. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_named_entity(resource_type, id_project, id_domain, id_name, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str resource_type: Resource type of the metadata to get. One of Task, Workflow or LaunchPlan. +required (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) + :param str id_org: Optional, org key applied to the resource. + :return: AdminNamedEntity + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.get_named_entity_with_http_info(resource_type, id_project, id_domain, id_name, **kwargs) # noqa: E501 + else: + (data) = self.get_named_entity_with_http_info(resource_type, id_project, id_domain, id_name, **kwargs) # noqa: E501 + return data + + def get_named_entity_with_http_info(self, resource_type, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Returns a :ref:`ref_flyteidl.admin.NamedEntity` object. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_named_entity_with_http_info(resource_type, id_project, id_domain, id_name, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str resource_type: Resource type of the metadata to get. One of Task, Workflow or LaunchPlan. +required (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) + :param str id_org: Optional, org key applied to the resource. + :return: AdminNamedEntity + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['resource_type', 'id_project', 'id_domain', 'id_name', 'id_org'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_named_entity" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'resource_type' is set + if ('resource_type' not in params or + params['resource_type'] is None): + raise ValueError("Missing the required parameter `resource_type` when calling `get_named_entity`") # noqa: E501 + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `get_named_entity`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `get_named_entity`") # noqa: E501 + # verify the required parameter 'id_name' is set + if ('id_name' not in params or + params['id_name'] is None): + raise ValueError("Missing the required parameter `id_name` when calling `get_named_entity`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'resource_type' in params: + path_params['resource_type'] = params['resource_type'] # noqa: E501 + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 + if 'id_name' in params: + path_params['id.name'] = params['id_name'] # noqa: E501 + + query_params = [] + if 'id_org' in params: + query_params.append(('id.org', params['id_org'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/named_entities/{resource_type}/{id.project}/{id.domain}/{id.name}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminNamedEntity', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_named_entity2(self, resource_type, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Returns a :ref:`ref_flyteidl.admin.NamedEntity` object. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_named_entity2(resource_type, id_org, id_project, id_domain, id_name, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str resource_type: Resource type of the metadata to get. One of Task, Workflow or LaunchPlan. +required (required) + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) + :return: AdminNamedEntity + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.get_named_entity2_with_http_info(resource_type, id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 + else: + (data) = self.get_named_entity2_with_http_info(resource_type, id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 + return data + + def get_named_entity2_with_http_info(self, resource_type, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Returns a :ref:`ref_flyteidl.admin.NamedEntity` object. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_named_entity2_with_http_info(resource_type, id_org, id_project, id_domain, id_name, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str resource_type: Resource type of the metadata to get. One of Task, Workflow or LaunchPlan. +required (required) + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) + :return: AdminNamedEntity + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['resource_type', 'id_org', 'id_project', 'id_domain', 'id_name'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_named_entity2" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'resource_type' is set + if ('resource_type' not in params or + params['resource_type'] is None): + raise ValueError("Missing the required parameter `resource_type` when calling `get_named_entity2`") # noqa: E501 + # verify the required parameter 'id_org' is set + if ('id_org' not in params or + params['id_org'] is None): + raise ValueError("Missing the required parameter `id_org` when calling `get_named_entity2`") # noqa: E501 + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `get_named_entity2`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `get_named_entity2`") # noqa: E501 + # verify the required parameter 'id_name' is set + if ('id_name' not in params or + params['id_name'] is None): + raise ValueError("Missing the required parameter `id_name` when calling `get_named_entity2`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'resource_type' in params: + path_params['resource_type'] = params['resource_type'] # noqa: E501 + if 'id_org' in params: + path_params['id.org'] = params['id_org'] # noqa: E501 + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 + if 'id_name' in params: + path_params['id.name'] = params['id_name'] # noqa: E501 + + query_params = [] + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/named_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain}/{id.name}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminNamedEntity', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_node_execution(self, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs): # noqa: E501 + """Fetches a :ref:`ref_flyteidl.admin.NodeExecution`. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_node_execution(id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_execution_id_project: Name of the project the resource belongs to. (required) + :param str id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_execution_id_name: User or system provided value for the resource. (required) + :param str id_node_id: (required) + :param str id_execution_id_org: Optional, org key applied to the resource. + :return: FlyteidladminNodeExecution + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.get_node_execution_with_http_info(id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs) # noqa: E501 + else: + (data) = self.get_node_execution_with_http_info(id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs) # noqa: E501 + return data + + def get_node_execution_with_http_info(self, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs): # noqa: E501 + """Fetches a :ref:`ref_flyteidl.admin.NodeExecution`. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_node_execution_with_http_info(id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_execution_id_project: Name of the project the resource belongs to. (required) + :param str id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_execution_id_name: User or system provided value for the resource. (required) + :param str id_node_id: (required) + :param str id_execution_id_org: Optional, org key applied to the resource. + :return: FlyteidladminNodeExecution + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['id_execution_id_project', 'id_execution_id_domain', 'id_execution_id_name', 'id_node_id', 'id_execution_id_org'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_node_execution" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'id_execution_id_project' is set + if ('id_execution_id_project' not in params or + params['id_execution_id_project'] is None): + raise ValueError("Missing the required parameter `id_execution_id_project` when calling `get_node_execution`") # noqa: E501 + # verify the required parameter 'id_execution_id_domain' is set + if ('id_execution_id_domain' not in params or + params['id_execution_id_domain'] is None): + raise ValueError("Missing the required parameter `id_execution_id_domain` when calling `get_node_execution`") # noqa: E501 + # verify the required parameter 'id_execution_id_name' is set + if ('id_execution_id_name' not in params or + params['id_execution_id_name'] is None): + raise ValueError("Missing the required parameter `id_execution_id_name` when calling `get_node_execution`") # noqa: E501 + # verify the required parameter 'id_node_id' is set + if ('id_node_id' not in params or + params['id_node_id'] is None): + raise ValueError("Missing the required parameter `id_node_id` when calling `get_node_execution`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'id_execution_id_project' in params: + path_params['id.execution_id.project'] = params['id_execution_id_project'] # noqa: E501 + if 'id_execution_id_domain' in params: + path_params['id.execution_id.domain'] = params['id_execution_id_domain'] # noqa: E501 + if 'id_execution_id_name' in params: + path_params['id.execution_id.name'] = params['id_execution_id_name'] # noqa: E501 + if 'id_node_id' in params: + path_params['id.node_id'] = params['id_node_id'] # noqa: E501 + + query_params = [] + if 'id_execution_id_org' in params: + query_params.append(('id.execution_id.org', params['id_execution_id_org'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/node_executions/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='FlyteidladminNodeExecution', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_node_execution2(self, id_execution_id_org, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs): # noqa: E501 + """Fetches a :ref:`ref_flyteidl.admin.NodeExecution`. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_node_execution2(id_execution_id_org, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_execution_id_org: Optional, org key applied to the resource. (required) + :param str id_execution_id_project: Name of the project the resource belongs to. (required) + :param str id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_execution_id_name: User or system provided value for the resource. (required) + :param str id_node_id: (required) + :return: FlyteidladminNodeExecution + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.get_node_execution2_with_http_info(id_execution_id_org, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs) # noqa: E501 + else: + (data) = self.get_node_execution2_with_http_info(id_execution_id_org, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs) # noqa: E501 + return data + + def get_node_execution2_with_http_info(self, id_execution_id_org, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs): # noqa: E501 + """Fetches a :ref:`ref_flyteidl.admin.NodeExecution`. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_node_execution2_with_http_info(id_execution_id_org, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_execution_id_org: Optional, org key applied to the resource. (required) + :param str id_execution_id_project: Name of the project the resource belongs to. (required) + :param str id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_execution_id_name: User or system provided value for the resource. (required) + :param str id_node_id: (required) + :return: FlyteidladminNodeExecution + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['id_execution_id_org', 'id_execution_id_project', 'id_execution_id_domain', 'id_execution_id_name', 'id_node_id'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_node_execution2" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'id_execution_id_org' is set + if ('id_execution_id_org' not in params or + params['id_execution_id_org'] is None): + raise ValueError("Missing the required parameter `id_execution_id_org` when calling `get_node_execution2`") # noqa: E501 + # verify the required parameter 'id_execution_id_project' is set + if ('id_execution_id_project' not in params or + params['id_execution_id_project'] is None): + raise ValueError("Missing the required parameter `id_execution_id_project` when calling `get_node_execution2`") # noqa: E501 + # verify the required parameter 'id_execution_id_domain' is set + if ('id_execution_id_domain' not in params or + params['id_execution_id_domain'] is None): + raise ValueError("Missing the required parameter `id_execution_id_domain` when calling `get_node_execution2`") # noqa: E501 + # verify the required parameter 'id_execution_id_name' is set + if ('id_execution_id_name' not in params or + params['id_execution_id_name'] is None): + raise ValueError("Missing the required parameter `id_execution_id_name` when calling `get_node_execution2`") # noqa: E501 + # verify the required parameter 'id_node_id' is set + if ('id_node_id' not in params or + params['id_node_id'] is None): + raise ValueError("Missing the required parameter `id_node_id` when calling `get_node_execution2`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'id_execution_id_org' in params: + path_params['id.execution_id.org'] = params['id_execution_id_org'] # noqa: E501 + if 'id_execution_id_project' in params: + path_params['id.execution_id.project'] = params['id_execution_id_project'] # noqa: E501 + if 'id_execution_id_domain' in params: + path_params['id.execution_id.domain'] = params['id_execution_id_domain'] # noqa: E501 + if 'id_execution_id_name' in params: + path_params['id.execution_id.name'] = params['id_execution_id_name'] # noqa: E501 + if 'id_node_id' in params: + path_params['id.node_id'] = params['id_node_id'] # noqa: E501 + + query_params = [] + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/node_executions/org/{id.execution_id.org}/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='FlyteidladminNodeExecution', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_node_execution_data(self, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs): # noqa: E501 + """Fetches input and output data for a :ref:`ref_flyteidl.admin.NodeExecution`. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_node_execution_data(id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_execution_id_project: Name of the project the resource belongs to. (required) + :param str id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_execution_id_name: User or system provided value for the resource. (required) + :param str id_node_id: (required) + :param str id_execution_id_org: Optional, org key applied to the resource. + :return: AdminNodeExecutionGetDataResponse + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.get_node_execution_data_with_http_info(id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs) # noqa: E501 + else: + (data) = self.get_node_execution_data_with_http_info(id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs) # noqa: E501 + return data + + def get_node_execution_data_with_http_info(self, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs): # noqa: E501 + """Fetches input and output data for a :ref:`ref_flyteidl.admin.NodeExecution`. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_node_execution_data_with_http_info(id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_execution_id_project: Name of the project the resource belongs to. (required) + :param str id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_execution_id_name: User or system provided value for the resource. (required) + :param str id_node_id: (required) + :param str id_execution_id_org: Optional, org key applied to the resource. + :return: AdminNodeExecutionGetDataResponse + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['id_execution_id_project', 'id_execution_id_domain', 'id_execution_id_name', 'id_node_id', 'id_execution_id_org'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_node_execution_data" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'id_execution_id_project' is set + if ('id_execution_id_project' not in params or + params['id_execution_id_project'] is None): + raise ValueError("Missing the required parameter `id_execution_id_project` when calling `get_node_execution_data`") # noqa: E501 + # verify the required parameter 'id_execution_id_domain' is set + if ('id_execution_id_domain' not in params or + params['id_execution_id_domain'] is None): + raise ValueError("Missing the required parameter `id_execution_id_domain` when calling `get_node_execution_data`") # noqa: E501 + # verify the required parameter 'id_execution_id_name' is set + if ('id_execution_id_name' not in params or + params['id_execution_id_name'] is None): + raise ValueError("Missing the required parameter `id_execution_id_name` when calling `get_node_execution_data`") # noqa: E501 + # verify the required parameter 'id_node_id' is set + if ('id_node_id' not in params or + params['id_node_id'] is None): + raise ValueError("Missing the required parameter `id_node_id` when calling `get_node_execution_data`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'id_execution_id_project' in params: + path_params['id.execution_id.project'] = params['id_execution_id_project'] # noqa: E501 + if 'id_execution_id_domain' in params: + path_params['id.execution_id.domain'] = params['id_execution_id_domain'] # noqa: E501 + if 'id_execution_id_name' in params: + path_params['id.execution_id.name'] = params['id_execution_id_name'] # noqa: E501 + if 'id_node_id' in params: + path_params['id.node_id'] = params['id_node_id'] # noqa: E501 + + query_params = [] + if 'id_execution_id_org' in params: + query_params.append(('id.execution_id.org', params['id_execution_id_org'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/data/node_executions/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminNodeExecutionGetDataResponse', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_node_execution_data2(self, id_execution_id_org, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs): # noqa: E501 + """Fetches input and output data for a :ref:`ref_flyteidl.admin.NodeExecution`. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_node_execution_data2(id_execution_id_org, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_execution_id_org: Optional, org key applied to the resource. (required) + :param str id_execution_id_project: Name of the project the resource belongs to. (required) + :param str id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_execution_id_name: User or system provided value for the resource. (required) + :param str id_node_id: (required) + :return: AdminNodeExecutionGetDataResponse + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.get_node_execution_data2_with_http_info(id_execution_id_org, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs) # noqa: E501 + else: + (data) = self.get_node_execution_data2_with_http_info(id_execution_id_org, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs) # noqa: E501 + return data + + def get_node_execution_data2_with_http_info(self, id_execution_id_org, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs): # noqa: E501 + """Fetches input and output data for a :ref:`ref_flyteidl.admin.NodeExecution`. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_node_execution_data2_with_http_info(id_execution_id_org, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_execution_id_org: Optional, org key applied to the resource. (required) + :param str id_execution_id_project: Name of the project the resource belongs to. (required) + :param str id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_execution_id_name: User or system provided value for the resource. (required) + :param str id_node_id: (required) + :return: AdminNodeExecutionGetDataResponse + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['id_execution_id_org', 'id_execution_id_project', 'id_execution_id_domain', 'id_execution_id_name', 'id_node_id'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_node_execution_data2" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'id_execution_id_org' is set + if ('id_execution_id_org' not in params or + params['id_execution_id_org'] is None): + raise ValueError("Missing the required parameter `id_execution_id_org` when calling `get_node_execution_data2`") # noqa: E501 + # verify the required parameter 'id_execution_id_project' is set + if ('id_execution_id_project' not in params or + params['id_execution_id_project'] is None): + raise ValueError("Missing the required parameter `id_execution_id_project` when calling `get_node_execution_data2`") # noqa: E501 + # verify the required parameter 'id_execution_id_domain' is set + if ('id_execution_id_domain' not in params or + params['id_execution_id_domain'] is None): + raise ValueError("Missing the required parameter `id_execution_id_domain` when calling `get_node_execution_data2`") # noqa: E501 + # verify the required parameter 'id_execution_id_name' is set + if ('id_execution_id_name' not in params or + params['id_execution_id_name'] is None): + raise ValueError("Missing the required parameter `id_execution_id_name` when calling `get_node_execution_data2`") # noqa: E501 + # verify the required parameter 'id_node_id' is set + if ('id_node_id' not in params or + params['id_node_id'] is None): + raise ValueError("Missing the required parameter `id_node_id` when calling `get_node_execution_data2`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'id_execution_id_org' in params: + path_params['id.execution_id.org'] = params['id_execution_id_org'] # noqa: E501 + if 'id_execution_id_project' in params: + path_params['id.execution_id.project'] = params['id_execution_id_project'] # noqa: E501 + if 'id_execution_id_domain' in params: + path_params['id.execution_id.domain'] = params['id_execution_id_domain'] # noqa: E501 + if 'id_execution_id_name' in params: + path_params['id.execution_id.name'] = params['id_execution_id_name'] # noqa: E501 + if 'id_node_id' in params: + path_params['id.node_id'] = params['id_node_id'] # noqa: E501 + + query_params = [] + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/data/node_executions/org/{id.execution_id.org}/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminNodeExecutionGetDataResponse', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_project_attributes(self, project, **kwargs): # noqa: E501 + """Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_project_attributes(project, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str project: Unique project id which this set of attributes references. +required (required) + :param str resource_type: Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. + :param str org: Optional, org key applied to the project. + :return: AdminProjectAttributesGetResponse + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.get_project_attributes_with_http_info(project, **kwargs) # noqa: E501 + else: + (data) = self.get_project_attributes_with_http_info(project, **kwargs) # noqa: E501 + return data + + def get_project_attributes_with_http_info(self, project, **kwargs): # noqa: E501 + """Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_project_attributes_with_http_info(project, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str project: Unique project id which this set of attributes references. +required (required) + :param str resource_type: Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. + :param str org: Optional, org key applied to the project. + :return: AdminProjectAttributesGetResponse + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['project', 'resource_type', 'org'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_project_attributes" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'project' is set + if ('project' not in params or + params['project'] is None): + raise ValueError("Missing the required parameter `project` when calling `get_project_attributes`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'project' in params: + path_params['project'] = params['project'] # noqa: E501 + + query_params = [] + if 'resource_type' in params: + query_params.append(('resource_type', params['resource_type'])) # noqa: E501 + if 'org' in params: + query_params.append(('org', params['org'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/project_attributes/{project}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminProjectAttributesGetResponse', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_project_attributes2(self, org, project, **kwargs): # noqa: E501 + """Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_project_attributes2(org, project, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str org: Optional, org key applied to the project. (required) + :param str project: Unique project id which this set of attributes references. +required (required) + :param str resource_type: Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. + :return: AdminProjectAttributesGetResponse + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.get_project_attributes2_with_http_info(org, project, **kwargs) # noqa: E501 + else: + (data) = self.get_project_attributes2_with_http_info(org, project, **kwargs) # noqa: E501 + return data + + def get_project_attributes2_with_http_info(self, org, project, **kwargs): # noqa: E501 + """Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_project_attributes2_with_http_info(org, project, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str org: Optional, org key applied to the project. (required) + :param str project: Unique project id which this set of attributes references. +required (required) + :param str resource_type: Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. + :return: AdminProjectAttributesGetResponse + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['org', 'project', 'resource_type'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_project_attributes2" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'org' is set + if ('org' not in params or + params['org'] is None): + raise ValueError("Missing the required parameter `org` when calling `get_project_attributes2`") # noqa: E501 + # verify the required parameter 'project' is set + if ('project' not in params or + params['project'] is None): + raise ValueError("Missing the required parameter `project` when calling `get_project_attributes2`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'org' in params: + path_params['org'] = params['org'] # noqa: E501 + if 'project' in params: + path_params['project'] = params['project'] # noqa: E501 + + query_params = [] + if 'resource_type' in params: + query_params.append(('resource_type', params['resource_type'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/project_domain_attributes/org/{org}/{project}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminProjectAttributesGetResponse', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_project_domain_attributes(self, project, domain, **kwargs): # noqa: E501 + """Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_project_domain_attributes(project, domain, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str project: Unique project id which this set of attributes references. +required (required) + :param str domain: Unique domain id which this set of attributes references. +required (required) + :param str resource_type: Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. + :param str org: Optional, org key applied to the attributes. + :return: AdminProjectDomainAttributesGetResponse + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.get_project_domain_attributes_with_http_info(project, domain, **kwargs) # noqa: E501 + else: + (data) = self.get_project_domain_attributes_with_http_info(project, domain, **kwargs) # noqa: E501 + return data + + def get_project_domain_attributes_with_http_info(self, project, domain, **kwargs): # noqa: E501 + """Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_project_domain_attributes_with_http_info(project, domain, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str project: Unique project id which this set of attributes references. +required (required) + :param str domain: Unique domain id which this set of attributes references. +required (required) + :param str resource_type: Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. + :param str org: Optional, org key applied to the attributes. + :return: AdminProjectDomainAttributesGetResponse + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['project', 'domain', 'resource_type', 'org'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_project_domain_attributes" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'project' is set + if ('project' not in params or + params['project'] is None): + raise ValueError("Missing the required parameter `project` when calling `get_project_domain_attributes`") # noqa: E501 + # verify the required parameter 'domain' is set + if ('domain' not in params or + params['domain'] is None): + raise ValueError("Missing the required parameter `domain` when calling `get_project_domain_attributes`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'project' in params: + path_params['project'] = params['project'] # noqa: E501 + if 'domain' in params: + path_params['domain'] = params['domain'] # noqa: E501 + + query_params = [] + if 'resource_type' in params: + query_params.append(('resource_type', params['resource_type'])) # noqa: E501 + if 'org' in params: + query_params.append(('org', params['org'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/project_domain_attributes/{project}/{domain}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminProjectDomainAttributesGetResponse', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_project_domain_attributes2(self, org, project, domain, **kwargs): # noqa: E501 + """Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_project_domain_attributes2(org, project, domain, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str org: Optional, org key applied to the attributes. (required) + :param str project: Unique project id which this set of attributes references. +required (required) + :param str domain: Unique domain id which this set of attributes references. +required (required) + :param str resource_type: Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. + :return: AdminProjectDomainAttributesGetResponse + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.get_project_domain_attributes2_with_http_info(org, project, domain, **kwargs) # noqa: E501 + else: + (data) = self.get_project_domain_attributes2_with_http_info(org, project, domain, **kwargs) # noqa: E501 + return data + + def get_project_domain_attributes2_with_http_info(self, org, project, domain, **kwargs): # noqa: E501 + """Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_project_domain_attributes2_with_http_info(org, project, domain, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str org: Optional, org key applied to the attributes. (required) + :param str project: Unique project id which this set of attributes references. +required (required) + :param str domain: Unique domain id which this set of attributes references. +required (required) + :param str resource_type: Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. + :return: AdminProjectDomainAttributesGetResponse + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['org', 'project', 'domain', 'resource_type'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_project_domain_attributes2" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'org' is set + if ('org' not in params or + params['org'] is None): + raise ValueError("Missing the required parameter `org` when calling `get_project_domain_attributes2`") # noqa: E501 + # verify the required parameter 'project' is set + if ('project' not in params or + params['project'] is None): + raise ValueError("Missing the required parameter `project` when calling `get_project_domain_attributes2`") # noqa: E501 + # verify the required parameter 'domain' is set + if ('domain' not in params or + params['domain'] is None): + raise ValueError("Missing the required parameter `domain` when calling `get_project_domain_attributes2`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'org' in params: + path_params['org'] = params['org'] # noqa: E501 + if 'project' in params: + path_params['project'] = params['project'] # noqa: E501 + if 'domain' in params: + path_params['domain'] = params['domain'] # noqa: E501 + + query_params = [] + if 'resource_type' in params: + query_params.append(('resource_type', params['resource_type'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/project_domain_attributes/org/{org}/{project}/{domain}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminProjectDomainAttributesGetResponse', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_task(self, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 + """Fetch a :ref:`ref_flyteidl.admin.Task` definition. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_task(id_project, id_domain, id_name, id_version, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. (required) + :param str id_version: Specific version of the resource. (required) + :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :param str id_org: Optional, org key applied to the resource. + :return: AdminTask + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.get_task_with_http_info(id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 + else: + (data) = self.get_task_with_http_info(id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 + return data + + def get_task_with_http_info(self, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 + """Fetch a :ref:`ref_flyteidl.admin.Task` definition. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_task_with_http_info(id_project, id_domain, id_name, id_version, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. (required) + :param str id_version: Specific version of the resource. (required) + :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :param str id_org: Optional, org key applied to the resource. + :return: AdminTask + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['id_project', 'id_domain', 'id_name', 'id_version', 'id_resource_type', 'id_org'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_task" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `get_task`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `get_task`") # noqa: E501 + # verify the required parameter 'id_name' is set + if ('id_name' not in params or + params['id_name'] is None): + raise ValueError("Missing the required parameter `id_name` when calling `get_task`") # noqa: E501 + # verify the required parameter 'id_version' is set + if ('id_version' not in params or + params['id_version'] is None): + raise ValueError("Missing the required parameter `id_version` when calling `get_task`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 + if 'id_name' in params: + path_params['id.name'] = params['id_name'] # noqa: E501 + if 'id_version' in params: + path_params['id.version'] = params['id_version'] # noqa: E501 + + query_params = [] + if 'id_resource_type' in params: + query_params.append(('id.resource_type', params['id_resource_type'])) # noqa: E501 + if 'id_org' in params: + query_params.append(('id.org', params['id_org'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/tasks/{id.project}/{id.domain}/{id.name}/{id.version}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminTask', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_task2(self, id_org, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 + """Fetch a :ref:`ref_flyteidl.admin.Task` definition. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_task2(id_org, id_project, id_domain, id_name, id_version, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. (required) + :param str id_version: Specific version of the resource. (required) + :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :return: AdminTask + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.get_task2_with_http_info(id_org, id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 + else: + (data) = self.get_task2_with_http_info(id_org, id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 + return data + + def get_task2_with_http_info(self, id_org, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 + """Fetch a :ref:`ref_flyteidl.admin.Task` definition. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_task2_with_http_info(id_org, id_project, id_domain, id_name, id_version, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. (required) + :param str id_version: Specific version of the resource. (required) + :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :return: AdminTask + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['id_org', 'id_project', 'id_domain', 'id_name', 'id_version', 'id_resource_type'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_task2" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'id_org' is set + if ('id_org' not in params or + params['id_org'] is None): + raise ValueError("Missing the required parameter `id_org` when calling `get_task2`") # noqa: E501 + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `get_task2`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `get_task2`") # noqa: E501 + # verify the required parameter 'id_name' is set + if ('id_name' not in params or + params['id_name'] is None): + raise ValueError("Missing the required parameter `id_name` when calling `get_task2`") # noqa: E501 + # verify the required parameter 'id_version' is set + if ('id_version' not in params or + params['id_version'] is None): + raise ValueError("Missing the required parameter `id_version` when calling `get_task2`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'id_org' in params: + path_params['id.org'] = params['id_org'] # noqa: E501 + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 + if 'id_name' in params: + path_params['id.name'] = params['id_name'] # noqa: E501 + if 'id_version' in params: + path_params['id.version'] = params['id_version'] # noqa: E501 + + query_params = [] + if 'id_resource_type' in params: + query_params.append(('id.resource_type', params['id_resource_type'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/tasks/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminTask', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_task_execution(self, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs): # noqa: E501 + """Fetches a :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_task_execution(id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) + :param str id_node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_node_execution_id_execution_id_name: User or system provided value for the resource. (required) + :param str id_node_execution_id_node_id: (required) + :param str id_task_id_project: Name of the project the resource belongs to. (required) + :param str id_task_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_task_id_name: User provided value for the resource. (required) + :param str id_task_id_version: Specific version of the resource. (required) + :param int id_retry_attempt: (required) + :param str id_task_id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :param str id_task_id_org: Optional, org key applied to the resource. + :param str id_node_execution_id_execution_id_org: Optional, org key applied to the resource. + :return: FlyteidladminTaskExecution + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.get_task_execution_with_http_info(id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs) # noqa: E501 + else: + (data) = self.get_task_execution_with_http_info(id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs) # noqa: E501 + return data + + def get_task_execution_with_http_info(self, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs): # noqa: E501 + """Fetches a :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_task_execution_with_http_info(id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) + :param str id_node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_node_execution_id_execution_id_name: User or system provided value for the resource. (required) + :param str id_node_execution_id_node_id: (required) + :param str id_task_id_project: Name of the project the resource belongs to. (required) + :param str id_task_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_task_id_name: User provided value for the resource. (required) + :param str id_task_id_version: Specific version of the resource. (required) + :param int id_retry_attempt: (required) + :param str id_task_id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :param str id_task_id_org: Optional, org key applied to the resource. + :param str id_node_execution_id_execution_id_org: Optional, org key applied to the resource. + :return: FlyteidladminTaskExecution + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['id_node_execution_id_execution_id_project', 'id_node_execution_id_execution_id_domain', 'id_node_execution_id_execution_id_name', 'id_node_execution_id_node_id', 'id_task_id_project', 'id_task_id_domain', 'id_task_id_name', 'id_task_id_version', 'id_retry_attempt', 'id_task_id_resource_type', 'id_task_id_org', 'id_node_execution_id_execution_id_org'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_task_execution" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'id_node_execution_id_execution_id_project' is set + if ('id_node_execution_id_execution_id_project' not in params or + params['id_node_execution_id_execution_id_project'] is None): + raise ValueError("Missing the required parameter `id_node_execution_id_execution_id_project` when calling `get_task_execution`") # noqa: E501 + # verify the required parameter 'id_node_execution_id_execution_id_domain' is set + if ('id_node_execution_id_execution_id_domain' not in params or + params['id_node_execution_id_execution_id_domain'] is None): + raise ValueError("Missing the required parameter `id_node_execution_id_execution_id_domain` when calling `get_task_execution`") # noqa: E501 + # verify the required parameter 'id_node_execution_id_execution_id_name' is set + if ('id_node_execution_id_execution_id_name' not in params or + params['id_node_execution_id_execution_id_name'] is None): + raise ValueError("Missing the required parameter `id_node_execution_id_execution_id_name` when calling `get_task_execution`") # noqa: E501 + # verify the required parameter 'id_node_execution_id_node_id' is set + if ('id_node_execution_id_node_id' not in params or + params['id_node_execution_id_node_id'] is None): + raise ValueError("Missing the required parameter `id_node_execution_id_node_id` when calling `get_task_execution`") # noqa: E501 + # verify the required parameter 'id_task_id_project' is set + if ('id_task_id_project' not in params or + params['id_task_id_project'] is None): + raise ValueError("Missing the required parameter `id_task_id_project` when calling `get_task_execution`") # noqa: E501 + # verify the required parameter 'id_task_id_domain' is set + if ('id_task_id_domain' not in params or + params['id_task_id_domain'] is None): + raise ValueError("Missing the required parameter `id_task_id_domain` when calling `get_task_execution`") # noqa: E501 + # verify the required parameter 'id_task_id_name' is set + if ('id_task_id_name' not in params or + params['id_task_id_name'] is None): + raise ValueError("Missing the required parameter `id_task_id_name` when calling `get_task_execution`") # noqa: E501 + # verify the required parameter 'id_task_id_version' is set + if ('id_task_id_version' not in params or + params['id_task_id_version'] is None): + raise ValueError("Missing the required parameter `id_task_id_version` when calling `get_task_execution`") # noqa: E501 + # verify the required parameter 'id_retry_attempt' is set + if ('id_retry_attempt' not in params or + params['id_retry_attempt'] is None): + raise ValueError("Missing the required parameter `id_retry_attempt` when calling `get_task_execution`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'id_node_execution_id_execution_id_project' in params: + path_params['id.node_execution_id.execution_id.project'] = params['id_node_execution_id_execution_id_project'] # noqa: E501 + if 'id_node_execution_id_execution_id_domain' in params: + path_params['id.node_execution_id.execution_id.domain'] = params['id_node_execution_id_execution_id_domain'] # noqa: E501 + if 'id_node_execution_id_execution_id_name' in params: + path_params['id.node_execution_id.execution_id.name'] = params['id_node_execution_id_execution_id_name'] # noqa: E501 + if 'id_node_execution_id_node_id' in params: + path_params['id.node_execution_id.node_id'] = params['id_node_execution_id_node_id'] # noqa: E501 + if 'id_task_id_project' in params: + path_params['id.task_id.project'] = params['id_task_id_project'] # noqa: E501 + if 'id_task_id_domain' in params: + path_params['id.task_id.domain'] = params['id_task_id_domain'] # noqa: E501 + if 'id_task_id_name' in params: + path_params['id.task_id.name'] = params['id_task_id_name'] # noqa: E501 + if 'id_task_id_version' in params: + path_params['id.task_id.version'] = params['id_task_id_version'] # noqa: E501 + if 'id_retry_attempt' in params: + path_params['id.retry_attempt'] = params['id_retry_attempt'] # noqa: E501 + + query_params = [] + if 'id_task_id_resource_type' in params: + query_params.append(('id.task_id.resource_type', params['id_task_id_resource_type'])) # noqa: E501 + if 'id_task_id_org' in params: + query_params.append(('id.task_id.org', params['id_task_id_org'])) # noqa: E501 + if 'id_node_execution_id_execution_id_org' in params: + query_params.append(('id.node_execution_id.execution_id.org', params['id_node_execution_id_execution_id_org'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/task_executions/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='FlyteidladminTaskExecution', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_task_execution2(self, id_node_execution_id_execution_id_org, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs): # noqa: E501 + """Fetches a :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_task_execution2(id_node_execution_id_execution_id_org, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_node_execution_id_execution_id_org: Optional, org key applied to the resource. (required) + :param str id_node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) + :param str id_node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_node_execution_id_execution_id_name: User or system provided value for the resource. (required) + :param str id_node_execution_id_node_id: (required) + :param str id_task_id_project: Name of the project the resource belongs to. (required) + :param str id_task_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_task_id_name: User provided value for the resource. (required) + :param str id_task_id_version: Specific version of the resource. (required) + :param int id_retry_attempt: (required) + :param str id_task_id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :param str id_task_id_org: Optional, org key applied to the resource. + :return: FlyteidladminTaskExecution + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.get_task_execution2_with_http_info(id_node_execution_id_execution_id_org, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs) # noqa: E501 + else: + (data) = self.get_task_execution2_with_http_info(id_node_execution_id_execution_id_org, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs) # noqa: E501 + return data + + def get_task_execution2_with_http_info(self, id_node_execution_id_execution_id_org, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs): # noqa: E501 + """Fetches a :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_task_execution2_with_http_info(id_node_execution_id_execution_id_org, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_node_execution_id_execution_id_org: Optional, org key applied to the resource. (required) + :param str id_node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) + :param str id_node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_node_execution_id_execution_id_name: User or system provided value for the resource. (required) + :param str id_node_execution_id_node_id: (required) + :param str id_task_id_project: Name of the project the resource belongs to. (required) + :param str id_task_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_task_id_name: User provided value for the resource. (required) + :param str id_task_id_version: Specific version of the resource. (required) + :param int id_retry_attempt: (required) + :param str id_task_id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :param str id_task_id_org: Optional, org key applied to the resource. + :return: FlyteidladminTaskExecution + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['id_node_execution_id_execution_id_org', 'id_node_execution_id_execution_id_project', 'id_node_execution_id_execution_id_domain', 'id_node_execution_id_execution_id_name', 'id_node_execution_id_node_id', 'id_task_id_project', 'id_task_id_domain', 'id_task_id_name', 'id_task_id_version', 'id_retry_attempt', 'id_task_id_resource_type', 'id_task_id_org'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_task_execution2" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'id_node_execution_id_execution_id_org' is set + if ('id_node_execution_id_execution_id_org' not in params or + params['id_node_execution_id_execution_id_org'] is None): + raise ValueError("Missing the required parameter `id_node_execution_id_execution_id_org` when calling `get_task_execution2`") # noqa: E501 + # verify the required parameter 'id_node_execution_id_execution_id_project' is set + if ('id_node_execution_id_execution_id_project' not in params or + params['id_node_execution_id_execution_id_project'] is None): + raise ValueError("Missing the required parameter `id_node_execution_id_execution_id_project` when calling `get_task_execution2`") # noqa: E501 + # verify the required parameter 'id_node_execution_id_execution_id_domain' is set + if ('id_node_execution_id_execution_id_domain' not in params or + params['id_node_execution_id_execution_id_domain'] is None): + raise ValueError("Missing the required parameter `id_node_execution_id_execution_id_domain` when calling `get_task_execution2`") # noqa: E501 + # verify the required parameter 'id_node_execution_id_execution_id_name' is set + if ('id_node_execution_id_execution_id_name' not in params or + params['id_node_execution_id_execution_id_name'] is None): + raise ValueError("Missing the required parameter `id_node_execution_id_execution_id_name` when calling `get_task_execution2`") # noqa: E501 + # verify the required parameter 'id_node_execution_id_node_id' is set + if ('id_node_execution_id_node_id' not in params or + params['id_node_execution_id_node_id'] is None): + raise ValueError("Missing the required parameter `id_node_execution_id_node_id` when calling `get_task_execution2`") # noqa: E501 + # verify the required parameter 'id_task_id_project' is set + if ('id_task_id_project' not in params or + params['id_task_id_project'] is None): + raise ValueError("Missing the required parameter `id_task_id_project` when calling `get_task_execution2`") # noqa: E501 + # verify the required parameter 'id_task_id_domain' is set + if ('id_task_id_domain' not in params or + params['id_task_id_domain'] is None): + raise ValueError("Missing the required parameter `id_task_id_domain` when calling `get_task_execution2`") # noqa: E501 + # verify the required parameter 'id_task_id_name' is set + if ('id_task_id_name' not in params or + params['id_task_id_name'] is None): + raise ValueError("Missing the required parameter `id_task_id_name` when calling `get_task_execution2`") # noqa: E501 + # verify the required parameter 'id_task_id_version' is set + if ('id_task_id_version' not in params or + params['id_task_id_version'] is None): + raise ValueError("Missing the required parameter `id_task_id_version` when calling `get_task_execution2`") # noqa: E501 + # verify the required parameter 'id_retry_attempt' is set + if ('id_retry_attempt' not in params or + params['id_retry_attempt'] is None): + raise ValueError("Missing the required parameter `id_retry_attempt` when calling `get_task_execution2`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'id_node_execution_id_execution_id_org' in params: + path_params['id.node_execution_id.execution_id.org'] = params['id_node_execution_id_execution_id_org'] # noqa: E501 + if 'id_node_execution_id_execution_id_project' in params: + path_params['id.node_execution_id.execution_id.project'] = params['id_node_execution_id_execution_id_project'] # noqa: E501 + if 'id_node_execution_id_execution_id_domain' in params: + path_params['id.node_execution_id.execution_id.domain'] = params['id_node_execution_id_execution_id_domain'] # noqa: E501 + if 'id_node_execution_id_execution_id_name' in params: + path_params['id.node_execution_id.execution_id.name'] = params['id_node_execution_id_execution_id_name'] # noqa: E501 + if 'id_node_execution_id_node_id' in params: + path_params['id.node_execution_id.node_id'] = params['id_node_execution_id_node_id'] # noqa: E501 + if 'id_task_id_project' in params: + path_params['id.task_id.project'] = params['id_task_id_project'] # noqa: E501 + if 'id_task_id_domain' in params: + path_params['id.task_id.domain'] = params['id_task_id_domain'] # noqa: E501 + if 'id_task_id_name' in params: + path_params['id.task_id.name'] = params['id_task_id_name'] # noqa: E501 + if 'id_task_id_version' in params: + path_params['id.task_id.version'] = params['id_task_id_version'] # noqa: E501 + if 'id_retry_attempt' in params: + path_params['id.retry_attempt'] = params['id_retry_attempt'] # noqa: E501 + + query_params = [] + if 'id_task_id_resource_type' in params: + query_params.append(('id.task_id.resource_type', params['id_task_id_resource_type'])) # noqa: E501 + if 'id_task_id_org' in params: + query_params.append(('id.task_id.org', params['id_task_id_org'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/task_executions/org/{id.node_execution_id.execution_id.org}/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='FlyteidladminTaskExecution', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_task_execution_data(self, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs): # noqa: E501 + """Fetches input and output data for a :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_task_execution_data(id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) + :param str id_node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_node_execution_id_execution_id_name: User or system provided value for the resource. (required) + :param str id_node_execution_id_node_id: (required) + :param str id_task_id_project: Name of the project the resource belongs to. (required) + :param str id_task_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_task_id_name: User provided value for the resource. (required) + :param str id_task_id_version: Specific version of the resource. (required) + :param int id_retry_attempt: (required) + :param str id_task_id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :param str id_task_id_org: Optional, org key applied to the resource. + :param str id_node_execution_id_execution_id_org: Optional, org key applied to the resource. + :return: AdminTaskExecutionGetDataResponse + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.get_task_execution_data_with_http_info(id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs) # noqa: E501 + else: + (data) = self.get_task_execution_data_with_http_info(id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs) # noqa: E501 + return data + + def get_task_execution_data_with_http_info(self, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs): # noqa: E501 + """Fetches input and output data for a :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_task_execution_data_with_http_info(id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) + :param str id_node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_node_execution_id_execution_id_name: User or system provided value for the resource. (required) + :param str id_node_execution_id_node_id: (required) + :param str id_task_id_project: Name of the project the resource belongs to. (required) + :param str id_task_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_task_id_name: User provided value for the resource. (required) + :param str id_task_id_version: Specific version of the resource. (required) + :param int id_retry_attempt: (required) + :param str id_task_id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :param str id_task_id_org: Optional, org key applied to the resource. + :param str id_node_execution_id_execution_id_org: Optional, org key applied to the resource. + :return: AdminTaskExecutionGetDataResponse + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['id_node_execution_id_execution_id_project', 'id_node_execution_id_execution_id_domain', 'id_node_execution_id_execution_id_name', 'id_node_execution_id_node_id', 'id_task_id_project', 'id_task_id_domain', 'id_task_id_name', 'id_task_id_version', 'id_retry_attempt', 'id_task_id_resource_type', 'id_task_id_org', 'id_node_execution_id_execution_id_org'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_task_execution_data" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'id_node_execution_id_execution_id_project' is set + if ('id_node_execution_id_execution_id_project' not in params or + params['id_node_execution_id_execution_id_project'] is None): + raise ValueError("Missing the required parameter `id_node_execution_id_execution_id_project` when calling `get_task_execution_data`") # noqa: E501 + # verify the required parameter 'id_node_execution_id_execution_id_domain' is set + if ('id_node_execution_id_execution_id_domain' not in params or + params['id_node_execution_id_execution_id_domain'] is None): + raise ValueError("Missing the required parameter `id_node_execution_id_execution_id_domain` when calling `get_task_execution_data`") # noqa: E501 + # verify the required parameter 'id_node_execution_id_execution_id_name' is set + if ('id_node_execution_id_execution_id_name' not in params or + params['id_node_execution_id_execution_id_name'] is None): + raise ValueError("Missing the required parameter `id_node_execution_id_execution_id_name` when calling `get_task_execution_data`") # noqa: E501 + # verify the required parameter 'id_node_execution_id_node_id' is set + if ('id_node_execution_id_node_id' not in params or + params['id_node_execution_id_node_id'] is None): + raise ValueError("Missing the required parameter `id_node_execution_id_node_id` when calling `get_task_execution_data`") # noqa: E501 + # verify the required parameter 'id_task_id_project' is set + if ('id_task_id_project' not in params or + params['id_task_id_project'] is None): + raise ValueError("Missing the required parameter `id_task_id_project` when calling `get_task_execution_data`") # noqa: E501 + # verify the required parameter 'id_task_id_domain' is set + if ('id_task_id_domain' not in params or + params['id_task_id_domain'] is None): + raise ValueError("Missing the required parameter `id_task_id_domain` when calling `get_task_execution_data`") # noqa: E501 + # verify the required parameter 'id_task_id_name' is set + if ('id_task_id_name' not in params or + params['id_task_id_name'] is None): + raise ValueError("Missing the required parameter `id_task_id_name` when calling `get_task_execution_data`") # noqa: E501 + # verify the required parameter 'id_task_id_version' is set + if ('id_task_id_version' not in params or + params['id_task_id_version'] is None): + raise ValueError("Missing the required parameter `id_task_id_version` when calling `get_task_execution_data`") # noqa: E501 + # verify the required parameter 'id_retry_attempt' is set + if ('id_retry_attempt' not in params or + params['id_retry_attempt'] is None): + raise ValueError("Missing the required parameter `id_retry_attempt` when calling `get_task_execution_data`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'id_node_execution_id_execution_id_project' in params: + path_params['id.node_execution_id.execution_id.project'] = params['id_node_execution_id_execution_id_project'] # noqa: E501 + if 'id_node_execution_id_execution_id_domain' in params: + path_params['id.node_execution_id.execution_id.domain'] = params['id_node_execution_id_execution_id_domain'] # noqa: E501 + if 'id_node_execution_id_execution_id_name' in params: + path_params['id.node_execution_id.execution_id.name'] = params['id_node_execution_id_execution_id_name'] # noqa: E501 + if 'id_node_execution_id_node_id' in params: + path_params['id.node_execution_id.node_id'] = params['id_node_execution_id_node_id'] # noqa: E501 + if 'id_task_id_project' in params: + path_params['id.task_id.project'] = params['id_task_id_project'] # noqa: E501 + if 'id_task_id_domain' in params: + path_params['id.task_id.domain'] = params['id_task_id_domain'] # noqa: E501 + if 'id_task_id_name' in params: + path_params['id.task_id.name'] = params['id_task_id_name'] # noqa: E501 + if 'id_task_id_version' in params: + path_params['id.task_id.version'] = params['id_task_id_version'] # noqa: E501 + if 'id_retry_attempt' in params: + path_params['id.retry_attempt'] = params['id_retry_attempt'] # noqa: E501 + + query_params = [] + if 'id_task_id_resource_type' in params: + query_params.append(('id.task_id.resource_type', params['id_task_id_resource_type'])) # noqa: E501 + if 'id_task_id_org' in params: + query_params.append(('id.task_id.org', params['id_task_id_org'])) # noqa: E501 + if 'id_node_execution_id_execution_id_org' in params: + query_params.append(('id.node_execution_id.execution_id.org', params['id_node_execution_id_execution_id_org'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/data/task_executions/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminTaskExecutionGetDataResponse', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_task_execution_data2(self, id_node_execution_id_execution_id_org, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs): # noqa: E501 + """Fetches input and output data for a :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_task_execution_data2(id_node_execution_id_execution_id_org, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_node_execution_id_execution_id_org: Optional, org key applied to the resource. (required) + :param str id_node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) + :param str id_node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_node_execution_id_execution_id_name: User or system provided value for the resource. (required) + :param str id_node_execution_id_node_id: (required) + :param str id_task_id_project: Name of the project the resource belongs to. (required) + :param str id_task_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_task_id_name: User provided value for the resource. (required) + :param str id_task_id_version: Specific version of the resource. (required) + :param int id_retry_attempt: (required) + :param str id_task_id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :param str id_task_id_org: Optional, org key applied to the resource. + :return: AdminTaskExecutionGetDataResponse + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.get_task_execution_data2_with_http_info(id_node_execution_id_execution_id_org, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs) # noqa: E501 + else: + (data) = self.get_task_execution_data2_with_http_info(id_node_execution_id_execution_id_org, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs) # noqa: E501 + return data + + def get_task_execution_data2_with_http_info(self, id_node_execution_id_execution_id_org, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs): # noqa: E501 + """Fetches input and output data for a :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_task_execution_data2_with_http_info(id_node_execution_id_execution_id_org, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_node_execution_id_execution_id_org: Optional, org key applied to the resource. (required) + :param str id_node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) + :param str id_node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_node_execution_id_execution_id_name: User or system provided value for the resource. (required) + :param str id_node_execution_id_node_id: (required) + :param str id_task_id_project: Name of the project the resource belongs to. (required) + :param str id_task_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_task_id_name: User provided value for the resource. (required) + :param str id_task_id_version: Specific version of the resource. (required) + :param int id_retry_attempt: (required) + :param str id_task_id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :param str id_task_id_org: Optional, org key applied to the resource. + :return: AdminTaskExecutionGetDataResponse + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['id_node_execution_id_execution_id_org', 'id_node_execution_id_execution_id_project', 'id_node_execution_id_execution_id_domain', 'id_node_execution_id_execution_id_name', 'id_node_execution_id_node_id', 'id_task_id_project', 'id_task_id_domain', 'id_task_id_name', 'id_task_id_version', 'id_retry_attempt', 'id_task_id_resource_type', 'id_task_id_org'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_task_execution_data2" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'id_node_execution_id_execution_id_org' is set + if ('id_node_execution_id_execution_id_org' not in params or + params['id_node_execution_id_execution_id_org'] is None): + raise ValueError("Missing the required parameter `id_node_execution_id_execution_id_org` when calling `get_task_execution_data2`") # noqa: E501 + # verify the required parameter 'id_node_execution_id_execution_id_project' is set + if ('id_node_execution_id_execution_id_project' not in params or + params['id_node_execution_id_execution_id_project'] is None): + raise ValueError("Missing the required parameter `id_node_execution_id_execution_id_project` when calling `get_task_execution_data2`") # noqa: E501 + # verify the required parameter 'id_node_execution_id_execution_id_domain' is set + if ('id_node_execution_id_execution_id_domain' not in params or + params['id_node_execution_id_execution_id_domain'] is None): + raise ValueError("Missing the required parameter `id_node_execution_id_execution_id_domain` when calling `get_task_execution_data2`") # noqa: E501 + # verify the required parameter 'id_node_execution_id_execution_id_name' is set + if ('id_node_execution_id_execution_id_name' not in params or + params['id_node_execution_id_execution_id_name'] is None): + raise ValueError("Missing the required parameter `id_node_execution_id_execution_id_name` when calling `get_task_execution_data2`") # noqa: E501 + # verify the required parameter 'id_node_execution_id_node_id' is set + if ('id_node_execution_id_node_id' not in params or + params['id_node_execution_id_node_id'] is None): + raise ValueError("Missing the required parameter `id_node_execution_id_node_id` when calling `get_task_execution_data2`") # noqa: E501 + # verify the required parameter 'id_task_id_project' is set + if ('id_task_id_project' not in params or + params['id_task_id_project'] is None): + raise ValueError("Missing the required parameter `id_task_id_project` when calling `get_task_execution_data2`") # noqa: E501 + # verify the required parameter 'id_task_id_domain' is set + if ('id_task_id_domain' not in params or + params['id_task_id_domain'] is None): + raise ValueError("Missing the required parameter `id_task_id_domain` when calling `get_task_execution_data2`") # noqa: E501 + # verify the required parameter 'id_task_id_name' is set + if ('id_task_id_name' not in params or + params['id_task_id_name'] is None): + raise ValueError("Missing the required parameter `id_task_id_name` when calling `get_task_execution_data2`") # noqa: E501 + # verify the required parameter 'id_task_id_version' is set + if ('id_task_id_version' not in params or + params['id_task_id_version'] is None): + raise ValueError("Missing the required parameter `id_task_id_version` when calling `get_task_execution_data2`") # noqa: E501 + # verify the required parameter 'id_retry_attempt' is set + if ('id_retry_attempt' not in params or + params['id_retry_attempt'] is None): + raise ValueError("Missing the required parameter `id_retry_attempt` when calling `get_task_execution_data2`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'id_node_execution_id_execution_id_org' in params: + path_params['id.node_execution_id.execution_id.org'] = params['id_node_execution_id_execution_id_org'] # noqa: E501 + if 'id_node_execution_id_execution_id_project' in params: + path_params['id.node_execution_id.execution_id.project'] = params['id_node_execution_id_execution_id_project'] # noqa: E501 + if 'id_node_execution_id_execution_id_domain' in params: + path_params['id.node_execution_id.execution_id.domain'] = params['id_node_execution_id_execution_id_domain'] # noqa: E501 + if 'id_node_execution_id_execution_id_name' in params: + path_params['id.node_execution_id.execution_id.name'] = params['id_node_execution_id_execution_id_name'] # noqa: E501 if 'id_node_execution_id_node_id' in params: path_params['id.node_execution_id.node_id'] = params['id_node_execution_id_node_id'] # noqa: E501 if 'id_task_id_project' in params: @@ -2753,8 +5036,3439 @@ def get_task_execution_data_with_http_info(self, id_node_execution_id_execution_ path_params['id.retry_attempt'] = params['id_retry_attempt'] # noqa: E501 query_params = [] - if 'id_task_id_resource_type' in params: - query_params.append(('id.task_id.resource_type', params['id_task_id_resource_type'])) # noqa: E501 + if 'id_task_id_resource_type' in params: + query_params.append(('id.task_id.resource_type', params['id_task_id_resource_type'])) # noqa: E501 + if 'id_task_id_org' in params: + query_params.append(('id.task_id.org', params['id_task_id_org'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/data/task_executions/org/{id.node_execution_id.execution_id.org}/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminTaskExecutionGetDataResponse', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_version(self, **kwargs): # noqa: E501 + """get_version # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_version(async_req=True) + >>> result = thread.get() + + :param async_req bool + :return: AdminGetVersionResponse + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.get_version_with_http_info(**kwargs) # noqa: E501 + else: + (data) = self.get_version_with_http_info(**kwargs) # noqa: E501 + return data + + def get_version_with_http_info(self, **kwargs): # noqa: E501 + """get_version # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_version_with_http_info(async_req=True) + >>> result = thread.get() + + :param async_req bool + :return: AdminGetVersionResponse + If the method is called asynchronously, + returns the request thread. + """ + + all_params = [] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_version" % key + ) + params[key] = val + del params['kwargs'] + + collection_formats = {} + + path_params = {} + + query_params = [] + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/version', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminGetVersionResponse', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_workflow(self, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 + """Fetch a :ref:`ref_flyteidl.admin.Workflow` definition. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_workflow(id_project, id_domain, id_name, id_version, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. (required) + :param str id_version: Specific version of the resource. (required) + :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :param str id_org: Optional, org key applied to the resource. + :return: AdminWorkflow + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.get_workflow_with_http_info(id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 + else: + (data) = self.get_workflow_with_http_info(id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 + return data + + def get_workflow_with_http_info(self, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 + """Fetch a :ref:`ref_flyteidl.admin.Workflow` definition. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_workflow_with_http_info(id_project, id_domain, id_name, id_version, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. (required) + :param str id_version: Specific version of the resource. (required) + :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :param str id_org: Optional, org key applied to the resource. + :return: AdminWorkflow + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['id_project', 'id_domain', 'id_name', 'id_version', 'id_resource_type', 'id_org'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_workflow" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `get_workflow`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `get_workflow`") # noqa: E501 + # verify the required parameter 'id_name' is set + if ('id_name' not in params or + params['id_name'] is None): + raise ValueError("Missing the required parameter `id_name` when calling `get_workflow`") # noqa: E501 + # verify the required parameter 'id_version' is set + if ('id_version' not in params or + params['id_version'] is None): + raise ValueError("Missing the required parameter `id_version` when calling `get_workflow`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 + if 'id_name' in params: + path_params['id.name'] = params['id_name'] # noqa: E501 + if 'id_version' in params: + path_params['id.version'] = params['id_version'] # noqa: E501 + + query_params = [] + if 'id_resource_type' in params: + query_params.append(('id.resource_type', params['id_resource_type'])) # noqa: E501 + if 'id_org' in params: + query_params.append(('id.org', params['id_org'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/workflows/{id.project}/{id.domain}/{id.name}/{id.version}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminWorkflow', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_workflow2(self, id_org, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 + """Fetch a :ref:`ref_flyteidl.admin.Workflow` definition. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_workflow2(id_org, id_project, id_domain, id_name, id_version, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. (required) + :param str id_version: Specific version of the resource. (required) + :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :return: AdminWorkflow + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.get_workflow2_with_http_info(id_org, id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 + else: + (data) = self.get_workflow2_with_http_info(id_org, id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 + return data + + def get_workflow2_with_http_info(self, id_org, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 + """Fetch a :ref:`ref_flyteidl.admin.Workflow` definition. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_workflow2_with_http_info(id_org, id_project, id_domain, id_name, id_version, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. (required) + :param str id_version: Specific version of the resource. (required) + :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :return: AdminWorkflow + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['id_org', 'id_project', 'id_domain', 'id_name', 'id_version', 'id_resource_type'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_workflow2" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'id_org' is set + if ('id_org' not in params or + params['id_org'] is None): + raise ValueError("Missing the required parameter `id_org` when calling `get_workflow2`") # noqa: E501 + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `get_workflow2`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `get_workflow2`") # noqa: E501 + # verify the required parameter 'id_name' is set + if ('id_name' not in params or + params['id_name'] is None): + raise ValueError("Missing the required parameter `id_name` when calling `get_workflow2`") # noqa: E501 + # verify the required parameter 'id_version' is set + if ('id_version' not in params or + params['id_version'] is None): + raise ValueError("Missing the required parameter `id_version` when calling `get_workflow2`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'id_org' in params: + path_params['id.org'] = params['id_org'] # noqa: E501 + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 + if 'id_name' in params: + path_params['id.name'] = params['id_name'] # noqa: E501 + if 'id_version' in params: + path_params['id.version'] = params['id_version'] # noqa: E501 + + query_params = [] + if 'id_resource_type' in params: + query_params.append(('id.resource_type', params['id_resource_type'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/workflows/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminWorkflow', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_workflow_attributes(self, project, domain, workflow, **kwargs): # noqa: E501 + """Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_workflow_attributes(project, domain, workflow, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str project: Unique project id which this set of attributes references. +required (required) + :param str domain: Unique domain id which this set of attributes references. +required (required) + :param str workflow: Workflow name which this set of attributes references. +required (required) + :param str resource_type: Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. + :param str org: Optional, org key applied to the attributes. + :return: AdminWorkflowAttributesGetResponse + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.get_workflow_attributes_with_http_info(project, domain, workflow, **kwargs) # noqa: E501 + else: + (data) = self.get_workflow_attributes_with_http_info(project, domain, workflow, **kwargs) # noqa: E501 + return data + + def get_workflow_attributes_with_http_info(self, project, domain, workflow, **kwargs): # noqa: E501 + """Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_workflow_attributes_with_http_info(project, domain, workflow, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str project: Unique project id which this set of attributes references. +required (required) + :param str domain: Unique domain id which this set of attributes references. +required (required) + :param str workflow: Workflow name which this set of attributes references. +required (required) + :param str resource_type: Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. + :param str org: Optional, org key applied to the attributes. + :return: AdminWorkflowAttributesGetResponse + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['project', 'domain', 'workflow', 'resource_type', 'org'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_workflow_attributes" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'project' is set + if ('project' not in params or + params['project'] is None): + raise ValueError("Missing the required parameter `project` when calling `get_workflow_attributes`") # noqa: E501 + # verify the required parameter 'domain' is set + if ('domain' not in params or + params['domain'] is None): + raise ValueError("Missing the required parameter `domain` when calling `get_workflow_attributes`") # noqa: E501 + # verify the required parameter 'workflow' is set + if ('workflow' not in params or + params['workflow'] is None): + raise ValueError("Missing the required parameter `workflow` when calling `get_workflow_attributes`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'project' in params: + path_params['project'] = params['project'] # noqa: E501 + if 'domain' in params: + path_params['domain'] = params['domain'] # noqa: E501 + if 'workflow' in params: + path_params['workflow'] = params['workflow'] # noqa: E501 + + query_params = [] + if 'resource_type' in params: + query_params.append(('resource_type', params['resource_type'])) # noqa: E501 + if 'org' in params: + query_params.append(('org', params['org'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/workflow_attributes/{project}/{domain}/{workflow}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminWorkflowAttributesGetResponse', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_workflow_attributes2(self, org, project, domain, workflow, **kwargs): # noqa: E501 + """Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_workflow_attributes2(org, project, domain, workflow, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str org: Optional, org key applied to the attributes. (required) + :param str project: Unique project id which this set of attributes references. +required (required) + :param str domain: Unique domain id which this set of attributes references. +required (required) + :param str workflow: Workflow name which this set of attributes references. +required (required) + :param str resource_type: Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. + :return: AdminWorkflowAttributesGetResponse + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.get_workflow_attributes2_with_http_info(org, project, domain, workflow, **kwargs) # noqa: E501 + else: + (data) = self.get_workflow_attributes2_with_http_info(org, project, domain, workflow, **kwargs) # noqa: E501 + return data + + def get_workflow_attributes2_with_http_info(self, org, project, domain, workflow, **kwargs): # noqa: E501 + """Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_workflow_attributes2_with_http_info(org, project, domain, workflow, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str org: Optional, org key applied to the attributes. (required) + :param str project: Unique project id which this set of attributes references. +required (required) + :param str domain: Unique domain id which this set of attributes references. +required (required) + :param str workflow: Workflow name which this set of attributes references. +required (required) + :param str resource_type: Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. + :return: AdminWorkflowAttributesGetResponse + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['org', 'project', 'domain', 'workflow', 'resource_type'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_workflow_attributes2" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'org' is set + if ('org' not in params or + params['org'] is None): + raise ValueError("Missing the required parameter `org` when calling `get_workflow_attributes2`") # noqa: E501 + # verify the required parameter 'project' is set + if ('project' not in params or + params['project'] is None): + raise ValueError("Missing the required parameter `project` when calling `get_workflow_attributes2`") # noqa: E501 + # verify the required parameter 'domain' is set + if ('domain' not in params or + params['domain'] is None): + raise ValueError("Missing the required parameter `domain` when calling `get_workflow_attributes2`") # noqa: E501 + # verify the required parameter 'workflow' is set + if ('workflow' not in params or + params['workflow'] is None): + raise ValueError("Missing the required parameter `workflow` when calling `get_workflow_attributes2`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'org' in params: + path_params['org'] = params['org'] # noqa: E501 + if 'project' in params: + path_params['project'] = params['project'] # noqa: E501 + if 'domain' in params: + path_params['domain'] = params['domain'] # noqa: E501 + if 'workflow' in params: + path_params['workflow'] = params['workflow'] # noqa: E501 + + query_params = [] + if 'resource_type' in params: + query_params.append(('resource_type', params['resource_type'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/workflow_attributes/org/{org}/{project}/{domain}/{workflow}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminWorkflowAttributesGetResponse', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def list_active_launch_plans(self, project, domain, **kwargs): # noqa: E501 + """List active versions of :ref:`ref_flyteidl.admin.LaunchPlan`. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.list_active_launch_plans(project, domain, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str project: Name of the project that contains the identifiers. +required. (required) + :param str domain: Name of the domain the identifiers belongs to within the project. +required. (required) + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :param str org: Optional, org key applied to the resource. + :return: AdminLaunchPlanList + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.list_active_launch_plans_with_http_info(project, domain, **kwargs) # noqa: E501 + else: + (data) = self.list_active_launch_plans_with_http_info(project, domain, **kwargs) # noqa: E501 + return data + + def list_active_launch_plans_with_http_info(self, project, domain, **kwargs): # noqa: E501 + """List active versions of :ref:`ref_flyteidl.admin.LaunchPlan`. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.list_active_launch_plans_with_http_info(project, domain, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str project: Name of the project that contains the identifiers. +required. (required) + :param str domain: Name of the domain the identifiers belongs to within the project. +required. (required) + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :param str org: Optional, org key applied to the resource. + :return: AdminLaunchPlanList + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['project', 'domain', 'limit', 'token', 'sort_by_key', 'sort_by_direction', 'org'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method list_active_launch_plans" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'project' is set + if ('project' not in params or + params['project'] is None): + raise ValueError("Missing the required parameter `project` when calling `list_active_launch_plans`") # noqa: E501 + # verify the required parameter 'domain' is set + if ('domain' not in params or + params['domain'] is None): + raise ValueError("Missing the required parameter `domain` when calling `list_active_launch_plans`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'project' in params: + path_params['project'] = params['project'] # noqa: E501 + if 'domain' in params: + path_params['domain'] = params['domain'] # noqa: E501 + + query_params = [] + if 'limit' in params: + query_params.append(('limit', params['limit'])) # noqa: E501 + if 'token' in params: + query_params.append(('token', params['token'])) # noqa: E501 + if 'sort_by_key' in params: + query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 + if 'sort_by_direction' in params: + query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 + if 'org' in params: + query_params.append(('org', params['org'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/active_launch_plans/{project}/{domain}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminLaunchPlanList', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def list_description_entities(self, resource_type, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.list_description_entities(resource_type, id_project, id_domain, id_name, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str resource_type: Identifies the specific type of resource that this identifier corresponds to. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) + :param str id_org: Optional, org key applied to the resource. + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :return: AdminDescriptionEntityList + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.list_description_entities_with_http_info(resource_type, id_project, id_domain, id_name, **kwargs) # noqa: E501 + else: + (data) = self.list_description_entities_with_http_info(resource_type, id_project, id_domain, id_name, **kwargs) # noqa: E501 + return data + + def list_description_entities_with_http_info(self, resource_type, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.list_description_entities_with_http_info(resource_type, id_project, id_domain, id_name, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str resource_type: Identifies the specific type of resource that this identifier corresponds to. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) + :param str id_org: Optional, org key applied to the resource. + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :return: AdminDescriptionEntityList + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['resource_type', 'id_project', 'id_domain', 'id_name', 'id_org', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method list_description_entities" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'resource_type' is set + if ('resource_type' not in params or + params['resource_type'] is None): + raise ValueError("Missing the required parameter `resource_type` when calling `list_description_entities`") # noqa: E501 + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `list_description_entities`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `list_description_entities`") # noqa: E501 + # verify the required parameter 'id_name' is set + if ('id_name' not in params or + params['id_name'] is None): + raise ValueError("Missing the required parameter `id_name` when calling `list_description_entities`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'resource_type' in params: + path_params['resource_type'] = params['resource_type'] # noqa: E501 + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 + if 'id_name' in params: + path_params['id.name'] = params['id_name'] # noqa: E501 + + query_params = [] + if 'id_org' in params: + query_params.append(('id.org', params['id_org'])) # noqa: E501 + if 'limit' in params: + query_params.append(('limit', params['limit'])) # noqa: E501 + if 'token' in params: + query_params.append(('token', params['token'])) # noqa: E501 + if 'filters' in params: + query_params.append(('filters', params['filters'])) # noqa: E501 + if 'sort_by_key' in params: + query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 + if 'sort_by_direction' in params: + query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/description_entities/{resource_type}/{id.project}/{id.domain}/{id.name}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminDescriptionEntityList', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def list_description_entities2(self, resource_type, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.list_description_entities2(resource_type, id_org, id_project, id_domain, id_name, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str resource_type: Identifies the specific type of resource that this identifier corresponds to. (required) + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :return: AdminDescriptionEntityList + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.list_description_entities2_with_http_info(resource_type, id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 + else: + (data) = self.list_description_entities2_with_http_info(resource_type, id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 + return data + + def list_description_entities2_with_http_info(self, resource_type, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.list_description_entities2_with_http_info(resource_type, id_org, id_project, id_domain, id_name, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str resource_type: Identifies the specific type of resource that this identifier corresponds to. (required) + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :return: AdminDescriptionEntityList + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['resource_type', 'id_org', 'id_project', 'id_domain', 'id_name', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method list_description_entities2" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'resource_type' is set + if ('resource_type' not in params or + params['resource_type'] is None): + raise ValueError("Missing the required parameter `resource_type` when calling `list_description_entities2`") # noqa: E501 + # verify the required parameter 'id_org' is set + if ('id_org' not in params or + params['id_org'] is None): + raise ValueError("Missing the required parameter `id_org` when calling `list_description_entities2`") # noqa: E501 + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `list_description_entities2`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `list_description_entities2`") # noqa: E501 + # verify the required parameter 'id_name' is set + if ('id_name' not in params or + params['id_name'] is None): + raise ValueError("Missing the required parameter `id_name` when calling `list_description_entities2`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'resource_type' in params: + path_params['resource_type'] = params['resource_type'] # noqa: E501 + if 'id_org' in params: + path_params['id.org'] = params['id_org'] # noqa: E501 + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 + if 'id_name' in params: + path_params['id.name'] = params['id_name'] # noqa: E501 + + query_params = [] + if 'limit' in params: + query_params.append(('limit', params['limit'])) # noqa: E501 + if 'token' in params: + query_params.append(('token', params['token'])) # noqa: E501 + if 'filters' in params: + query_params.append(('filters', params['filters'])) # noqa: E501 + if 'sort_by_key' in params: + query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 + if 'sort_by_direction' in params: + query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/description_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain}/{id.name}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminDescriptionEntityList', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def list_description_entities3(self, resource_type, id_project, id_domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.list_description_entities3(resource_type, id_project, id_domain, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str resource_type: Identifies the specific type of resource that this identifier corresponds to. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. + :param str id_org: Optional, org key applied to the resource. + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :return: AdminDescriptionEntityList + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.list_description_entities3_with_http_info(resource_type, id_project, id_domain, **kwargs) # noqa: E501 + else: + (data) = self.list_description_entities3_with_http_info(resource_type, id_project, id_domain, **kwargs) # noqa: E501 + return data + + def list_description_entities3_with_http_info(self, resource_type, id_project, id_domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.list_description_entities3_with_http_info(resource_type, id_project, id_domain, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str resource_type: Identifies the specific type of resource that this identifier corresponds to. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. + :param str id_org: Optional, org key applied to the resource. + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :return: AdminDescriptionEntityList + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['resource_type', 'id_project', 'id_domain', 'id_name', 'id_org', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method list_description_entities3" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'resource_type' is set + if ('resource_type' not in params or + params['resource_type'] is None): + raise ValueError("Missing the required parameter `resource_type` when calling `list_description_entities3`") # noqa: E501 + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `list_description_entities3`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `list_description_entities3`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'resource_type' in params: + path_params['resource_type'] = params['resource_type'] # noqa: E501 + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 + + query_params = [] + if 'id_name' in params: + query_params.append(('id.name', params['id_name'])) # noqa: E501 + if 'id_org' in params: + query_params.append(('id.org', params['id_org'])) # noqa: E501 + if 'limit' in params: + query_params.append(('limit', params['limit'])) # noqa: E501 + if 'token' in params: + query_params.append(('token', params['token'])) # noqa: E501 + if 'filters' in params: + query_params.append(('filters', params['filters'])) # noqa: E501 + if 'sort_by_key' in params: + query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 + if 'sort_by_direction' in params: + query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/description_entities/{resource_type}/{id.project}/{id.domain}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminDescriptionEntityList', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def list_description_entities4(self, resource_type, id_org, id_project, id_domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.list_description_entities4(resource_type, id_org, id_project, id_domain, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str resource_type: Identifies the specific type of resource that this identifier corresponds to. (required) + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :return: AdminDescriptionEntityList + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.list_description_entities4_with_http_info(resource_type, id_org, id_project, id_domain, **kwargs) # noqa: E501 + else: + (data) = self.list_description_entities4_with_http_info(resource_type, id_org, id_project, id_domain, **kwargs) # noqa: E501 + return data + + def list_description_entities4_with_http_info(self, resource_type, id_org, id_project, id_domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.list_description_entities4_with_http_info(resource_type, id_org, id_project, id_domain, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str resource_type: Identifies the specific type of resource that this identifier corresponds to. (required) + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :return: AdminDescriptionEntityList + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['resource_type', 'id_org', 'id_project', 'id_domain', 'id_name', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method list_description_entities4" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'resource_type' is set + if ('resource_type' not in params or + params['resource_type'] is None): + raise ValueError("Missing the required parameter `resource_type` when calling `list_description_entities4`") # noqa: E501 + # verify the required parameter 'id_org' is set + if ('id_org' not in params or + params['id_org'] is None): + raise ValueError("Missing the required parameter `id_org` when calling `list_description_entities4`") # noqa: E501 + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `list_description_entities4`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `list_description_entities4`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'resource_type' in params: + path_params['resource_type'] = params['resource_type'] # noqa: E501 + if 'id_org' in params: + path_params['id.org'] = params['id_org'] # noqa: E501 + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 + + query_params = [] + if 'id_name' in params: + query_params.append(('id.name', params['id_name'])) # noqa: E501 + if 'limit' in params: + query_params.append(('limit', params['limit'])) # noqa: E501 + if 'token' in params: + query_params.append(('token', params['token'])) # noqa: E501 + if 'filters' in params: + query_params.append(('filters', params['filters'])) # noqa: E501 + if 'sort_by_key' in params: + query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 + if 'sort_by_direction' in params: + query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/description_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminDescriptionEntityList', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def list_executions(self, id_project, id_domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.list_executions(id_project, id_domain, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. + :param str id_org: Optional, org key applied to the resource. + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :return: AdminExecutionList + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.list_executions_with_http_info(id_project, id_domain, **kwargs) # noqa: E501 + else: + (data) = self.list_executions_with_http_info(id_project, id_domain, **kwargs) # noqa: E501 + return data + + def list_executions_with_http_info(self, id_project, id_domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.list_executions_with_http_info(id_project, id_domain, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. + :param str id_org: Optional, org key applied to the resource. + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :return: AdminExecutionList + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['id_project', 'id_domain', 'id_name', 'id_org', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method list_executions" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `list_executions`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `list_executions`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 + + query_params = [] + if 'id_name' in params: + query_params.append(('id.name', params['id_name'])) # noqa: E501 + if 'id_org' in params: + query_params.append(('id.org', params['id_org'])) # noqa: E501 + if 'limit' in params: + query_params.append(('limit', params['limit'])) # noqa: E501 + if 'token' in params: + query_params.append(('token', params['token'])) # noqa: E501 + if 'filters' in params: + query_params.append(('filters', params['filters'])) # noqa: E501 + if 'sort_by_key' in params: + query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 + if 'sort_by_direction' in params: + query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/executions/{id.project}/{id.domain}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminExecutionList', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def list_executions2(self, id_org, id_project, id_domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.list_executions2(id_org, id_project, id_domain, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :return: AdminExecutionList + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.list_executions2_with_http_info(id_org, id_project, id_domain, **kwargs) # noqa: E501 + else: + (data) = self.list_executions2_with_http_info(id_org, id_project, id_domain, **kwargs) # noqa: E501 + return data + + def list_executions2_with_http_info(self, id_org, id_project, id_domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.list_executions2_with_http_info(id_org, id_project, id_domain, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :return: AdminExecutionList + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['id_org', 'id_project', 'id_domain', 'id_name', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method list_executions2" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'id_org' is set + if ('id_org' not in params or + params['id_org'] is None): + raise ValueError("Missing the required parameter `id_org` when calling `list_executions2`") # noqa: E501 + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `list_executions2`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `list_executions2`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'id_org' in params: + path_params['id.org'] = params['id_org'] # noqa: E501 + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 + + query_params = [] + if 'id_name' in params: + query_params.append(('id.name', params['id_name'])) # noqa: E501 + if 'limit' in params: + query_params.append(('limit', params['limit'])) # noqa: E501 + if 'token' in params: + query_params.append(('token', params['token'])) # noqa: E501 + if 'filters' in params: + query_params.append(('filters', params['filters'])) # noqa: E501 + if 'sort_by_key' in params: + query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 + if 'sort_by_direction' in params: + query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/executions/org/{id.org}/{id.project}/{id.domain}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminExecutionList', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def list_launch_plan_ids(self, project, domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of launch plan objects. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.list_launch_plan_ids(project, domain, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str project: Name of the project that contains the identifiers. +required (required) + :param str domain: Name of the domain the identifiers belongs to within the project. +required (required) + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :param str filters: Indicates a list of filters passed as string. +optional. + :param str org: Optional, org key applied to the resource. + :return: AdminNamedEntityIdentifierList + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.list_launch_plan_ids_with_http_info(project, domain, **kwargs) # noqa: E501 + else: + (data) = self.list_launch_plan_ids_with_http_info(project, domain, **kwargs) # noqa: E501 + return data + + def list_launch_plan_ids_with_http_info(self, project, domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of launch plan objects. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.list_launch_plan_ids_with_http_info(project, domain, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str project: Name of the project that contains the identifiers. +required (required) + :param str domain: Name of the domain the identifiers belongs to within the project. +required (required) + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :param str filters: Indicates a list of filters passed as string. +optional. + :param str org: Optional, org key applied to the resource. + :return: AdminNamedEntityIdentifierList + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['project', 'domain', 'limit', 'token', 'sort_by_key', 'sort_by_direction', 'filters', 'org'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method list_launch_plan_ids" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'project' is set + if ('project' not in params or + params['project'] is None): + raise ValueError("Missing the required parameter `project` when calling `list_launch_plan_ids`") # noqa: E501 + # verify the required parameter 'domain' is set + if ('domain' not in params or + params['domain'] is None): + raise ValueError("Missing the required parameter `domain` when calling `list_launch_plan_ids`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'project' in params: + path_params['project'] = params['project'] # noqa: E501 + if 'domain' in params: + path_params['domain'] = params['domain'] # noqa: E501 + + query_params = [] + if 'limit' in params: + query_params.append(('limit', params['limit'])) # noqa: E501 + if 'token' in params: + query_params.append(('token', params['token'])) # noqa: E501 + if 'sort_by_key' in params: + query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 + if 'sort_by_direction' in params: + query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 + if 'filters' in params: + query_params.append(('filters', params['filters'])) # noqa: E501 + if 'org' in params: + query_params.append(('org', params['org'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/launch_plan_ids/{project}/{domain}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminNamedEntityIdentifierList', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def list_launch_plan_ids2(self, org, project, domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of launch plan objects. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.list_launch_plan_ids2(org, project, domain, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str org: Optional, org key applied to the resource. (required) + :param str project: Name of the project that contains the identifiers. +required (required) + :param str domain: Name of the domain the identifiers belongs to within the project. +required (required) + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :param str filters: Indicates a list of filters passed as string. +optional. + :return: AdminNamedEntityIdentifierList + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.list_launch_plan_ids2_with_http_info(org, project, domain, **kwargs) # noqa: E501 + else: + (data) = self.list_launch_plan_ids2_with_http_info(org, project, domain, **kwargs) # noqa: E501 + return data + + def list_launch_plan_ids2_with_http_info(self, org, project, domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of launch plan objects. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.list_launch_plan_ids2_with_http_info(org, project, domain, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str org: Optional, org key applied to the resource. (required) + :param str project: Name of the project that contains the identifiers. +required (required) + :param str domain: Name of the domain the identifiers belongs to within the project. +required (required) + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :param str filters: Indicates a list of filters passed as string. +optional. + :return: AdminNamedEntityIdentifierList + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['org', 'project', 'domain', 'limit', 'token', 'sort_by_key', 'sort_by_direction', 'filters'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method list_launch_plan_ids2" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'org' is set + if ('org' not in params or + params['org'] is None): + raise ValueError("Missing the required parameter `org` when calling `list_launch_plan_ids2`") # noqa: E501 + # verify the required parameter 'project' is set + if ('project' not in params or + params['project'] is None): + raise ValueError("Missing the required parameter `project` when calling `list_launch_plan_ids2`") # noqa: E501 + # verify the required parameter 'domain' is set + if ('domain' not in params or + params['domain'] is None): + raise ValueError("Missing the required parameter `domain` when calling `list_launch_plan_ids2`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'org' in params: + path_params['org'] = params['org'] # noqa: E501 + if 'project' in params: + path_params['project'] = params['project'] # noqa: E501 + if 'domain' in params: + path_params['domain'] = params['domain'] # noqa: E501 + + query_params = [] + if 'limit' in params: + query_params.append(('limit', params['limit'])) # noqa: E501 + if 'token' in params: + query_params.append(('token', params['token'])) # noqa: E501 + if 'sort_by_key' in params: + query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 + if 'sort_by_direction' in params: + query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 + if 'filters' in params: + query_params.append(('filters', params['filters'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/launch_plan_ids/org/{org}/{project}/{domain}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminNamedEntityIdentifierList', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def list_launch_plans(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.list_launch_plans(id_project, id_domain, id_name, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) + :param str id_org: Optional, org key applied to the resource. + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :return: AdminLaunchPlanList + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.list_launch_plans_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 + else: + (data) = self.list_launch_plans_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 + return data + + def list_launch_plans_with_http_info(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.list_launch_plans_with_http_info(id_project, id_domain, id_name, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) + :param str id_org: Optional, org key applied to the resource. + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :return: AdminLaunchPlanList + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['id_project', 'id_domain', 'id_name', 'id_org', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method list_launch_plans" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `list_launch_plans`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `list_launch_plans`") # noqa: E501 + # verify the required parameter 'id_name' is set + if ('id_name' not in params or + params['id_name'] is None): + raise ValueError("Missing the required parameter `id_name` when calling `list_launch_plans`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 + if 'id_name' in params: + path_params['id.name'] = params['id_name'] # noqa: E501 + + query_params = [] + if 'id_org' in params: + query_params.append(('id.org', params['id_org'])) # noqa: E501 + if 'limit' in params: + query_params.append(('limit', params['limit'])) # noqa: E501 + if 'token' in params: + query_params.append(('token', params['token'])) # noqa: E501 + if 'filters' in params: + query_params.append(('filters', params['filters'])) # noqa: E501 + if 'sort_by_key' in params: + query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 + if 'sort_by_direction' in params: + query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/launch_plans/{id.project}/{id.domain}/{id.name}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminLaunchPlanList', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def list_launch_plans2(self, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.list_launch_plans2(id_org, id_project, id_domain, id_name, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :return: AdminLaunchPlanList + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.list_launch_plans2_with_http_info(id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 + else: + (data) = self.list_launch_plans2_with_http_info(id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 + return data + + def list_launch_plans2_with_http_info(self, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.list_launch_plans2_with_http_info(id_org, id_project, id_domain, id_name, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :return: AdminLaunchPlanList + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['id_org', 'id_project', 'id_domain', 'id_name', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method list_launch_plans2" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'id_org' is set + if ('id_org' not in params or + params['id_org'] is None): + raise ValueError("Missing the required parameter `id_org` when calling `list_launch_plans2`") # noqa: E501 + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `list_launch_plans2`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `list_launch_plans2`") # noqa: E501 + # verify the required parameter 'id_name' is set + if ('id_name' not in params or + params['id_name'] is None): + raise ValueError("Missing the required parameter `id_name` when calling `list_launch_plans2`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'id_org' in params: + path_params['id.org'] = params['id_org'] # noqa: E501 + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 + if 'id_name' in params: + path_params['id.name'] = params['id_name'] # noqa: E501 + + query_params = [] + if 'limit' in params: + query_params.append(('limit', params['limit'])) # noqa: E501 + if 'token' in params: + query_params.append(('token', params['token'])) # noqa: E501 + if 'filters' in params: + query_params.append(('filters', params['filters'])) # noqa: E501 + if 'sort_by_key' in params: + query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 + if 'sort_by_direction' in params: + query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminLaunchPlanList', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def list_launch_plans3(self, id_project, id_domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.list_launch_plans3(id_project, id_domain, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. + :param str id_org: Optional, org key applied to the resource. + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :return: AdminLaunchPlanList + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.list_launch_plans3_with_http_info(id_project, id_domain, **kwargs) # noqa: E501 + else: + (data) = self.list_launch_plans3_with_http_info(id_project, id_domain, **kwargs) # noqa: E501 + return data + + def list_launch_plans3_with_http_info(self, id_project, id_domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.list_launch_plans3_with_http_info(id_project, id_domain, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. + :param str id_org: Optional, org key applied to the resource. + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :return: AdminLaunchPlanList + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['id_project', 'id_domain', 'id_name', 'id_org', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method list_launch_plans3" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `list_launch_plans3`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `list_launch_plans3`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 + + query_params = [] + if 'id_name' in params: + query_params.append(('id.name', params['id_name'])) # noqa: E501 + if 'id_org' in params: + query_params.append(('id.org', params['id_org'])) # noqa: E501 + if 'limit' in params: + query_params.append(('limit', params['limit'])) # noqa: E501 + if 'token' in params: + query_params.append(('token', params['token'])) # noqa: E501 + if 'filters' in params: + query_params.append(('filters', params['filters'])) # noqa: E501 + if 'sort_by_key' in params: + query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 + if 'sort_by_direction' in params: + query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/launch_plans/{id.project}/{id.domain}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminLaunchPlanList', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def list_launch_plans4(self, id_org, id_project, id_domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.list_launch_plans4(id_org, id_project, id_domain, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :return: AdminLaunchPlanList + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.list_launch_plans4_with_http_info(id_org, id_project, id_domain, **kwargs) # noqa: E501 + else: + (data) = self.list_launch_plans4_with_http_info(id_org, id_project, id_domain, **kwargs) # noqa: E501 + return data + + def list_launch_plans4_with_http_info(self, id_org, id_project, id_domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.list_launch_plans4_with_http_info(id_org, id_project, id_domain, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :return: AdminLaunchPlanList + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['id_org', 'id_project', 'id_domain', 'id_name', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method list_launch_plans4" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'id_org' is set + if ('id_org' not in params or + params['id_org'] is None): + raise ValueError("Missing the required parameter `id_org` when calling `list_launch_plans4`") # noqa: E501 + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `list_launch_plans4`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `list_launch_plans4`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'id_org' in params: + path_params['id.org'] = params['id_org'] # noqa: E501 + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 + + query_params = [] + if 'id_name' in params: + query_params.append(('id.name', params['id_name'])) # noqa: E501 + if 'limit' in params: + query_params.append(('limit', params['limit'])) # noqa: E501 + if 'token' in params: + query_params.append(('token', params['token'])) # noqa: E501 + if 'filters' in params: + query_params.append(('filters', params['filters'])) # noqa: E501 + if 'sort_by_key' in params: + query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 + if 'sort_by_direction' in params: + query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminLaunchPlanList', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def list_matchable_attributes(self, **kwargs): # noqa: E501 + """Lists custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a specific resource type. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.list_matchable_attributes(async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str resource_type: +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. + :return: AdminListMatchableAttributesResponse + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.list_matchable_attributes_with_http_info(**kwargs) # noqa: E501 + else: + (data) = self.list_matchable_attributes_with_http_info(**kwargs) # noqa: E501 + return data + + def list_matchable_attributes_with_http_info(self, **kwargs): # noqa: E501 + """Lists custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a specific resource type. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.list_matchable_attributes_with_http_info(async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str resource_type: +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. + :return: AdminListMatchableAttributesResponse + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['resource_type'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method list_matchable_attributes" % key + ) + params[key] = val + del params['kwargs'] + + collection_formats = {} + + path_params = {} + + query_params = [] + if 'resource_type' in params: + query_params.append(('resource_type', params['resource_type'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/matchable_attributes', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminListMatchableAttributesResponse', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def list_named_entities(self, resource_type, project, domain, **kwargs): # noqa: E501 + """Returns a list of :ref:`ref_flyteidl.admin.NamedEntity` objects. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.list_named_entities(resource_type, project, domain, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str resource_type: Resource type of the metadata to query. One of Task, Workflow or LaunchPlan. +required (required) + :param str project: Name of the project that contains the identifiers. +required (required) + :param str domain: Name of the domain the identifiers belongs to within the project. (required) + :param int limit: Indicates the number of resources to be returned. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :param str filters: Indicates a list of filters passed as string. +optional. + :param str org: Optional, org key applied to the resource. + :return: AdminNamedEntityList + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.list_named_entities_with_http_info(resource_type, project, domain, **kwargs) # noqa: E501 + else: + (data) = self.list_named_entities_with_http_info(resource_type, project, domain, **kwargs) # noqa: E501 + return data + + def list_named_entities_with_http_info(self, resource_type, project, domain, **kwargs): # noqa: E501 + """Returns a list of :ref:`ref_flyteidl.admin.NamedEntity` objects. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.list_named_entities_with_http_info(resource_type, project, domain, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str resource_type: Resource type of the metadata to query. One of Task, Workflow or LaunchPlan. +required (required) + :param str project: Name of the project that contains the identifiers. +required (required) + :param str domain: Name of the domain the identifiers belongs to within the project. (required) + :param int limit: Indicates the number of resources to be returned. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :param str filters: Indicates a list of filters passed as string. +optional. + :param str org: Optional, org key applied to the resource. + :return: AdminNamedEntityList + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['resource_type', 'project', 'domain', 'limit', 'token', 'sort_by_key', 'sort_by_direction', 'filters', 'org'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method list_named_entities" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'resource_type' is set + if ('resource_type' not in params or + params['resource_type'] is None): + raise ValueError("Missing the required parameter `resource_type` when calling `list_named_entities`") # noqa: E501 + # verify the required parameter 'project' is set + if ('project' not in params or + params['project'] is None): + raise ValueError("Missing the required parameter `project` when calling `list_named_entities`") # noqa: E501 + # verify the required parameter 'domain' is set + if ('domain' not in params or + params['domain'] is None): + raise ValueError("Missing the required parameter `domain` when calling `list_named_entities`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'resource_type' in params: + path_params['resource_type'] = params['resource_type'] # noqa: E501 + if 'project' in params: + path_params['project'] = params['project'] # noqa: E501 + if 'domain' in params: + path_params['domain'] = params['domain'] # noqa: E501 + + query_params = [] + if 'limit' in params: + query_params.append(('limit', params['limit'])) # noqa: E501 + if 'token' in params: + query_params.append(('token', params['token'])) # noqa: E501 + if 'sort_by_key' in params: + query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 + if 'sort_by_direction' in params: + query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 + if 'filters' in params: + query_params.append(('filters', params['filters'])) # noqa: E501 + if 'org' in params: + query_params.append(('org', params['org'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/named_entities/{resource_type}/{project}/{domain}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminNamedEntityList', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def list_named_entities2(self, resource_type, org, project, domain, **kwargs): # noqa: E501 + """Returns a list of :ref:`ref_flyteidl.admin.NamedEntity` objects. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.list_named_entities2(resource_type, org, project, domain, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str resource_type: Resource type of the metadata to query. One of Task, Workflow or LaunchPlan. +required (required) + :param str org: Optional, org key applied to the resource. (required) + :param str project: Name of the project that contains the identifiers. +required (required) + :param str domain: Name of the domain the identifiers belongs to within the project. (required) + :param int limit: Indicates the number of resources to be returned. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :param str filters: Indicates a list of filters passed as string. +optional. + :return: AdminNamedEntityList + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.list_named_entities2_with_http_info(resource_type, org, project, domain, **kwargs) # noqa: E501 + else: + (data) = self.list_named_entities2_with_http_info(resource_type, org, project, domain, **kwargs) # noqa: E501 + return data + + def list_named_entities2_with_http_info(self, resource_type, org, project, domain, **kwargs): # noqa: E501 + """Returns a list of :ref:`ref_flyteidl.admin.NamedEntity` objects. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.list_named_entities2_with_http_info(resource_type, org, project, domain, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str resource_type: Resource type of the metadata to query. One of Task, Workflow or LaunchPlan. +required (required) + :param str org: Optional, org key applied to the resource. (required) + :param str project: Name of the project that contains the identifiers. +required (required) + :param str domain: Name of the domain the identifiers belongs to within the project. (required) + :param int limit: Indicates the number of resources to be returned. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :param str filters: Indicates a list of filters passed as string. +optional. + :return: AdminNamedEntityList + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['resource_type', 'org', 'project', 'domain', 'limit', 'token', 'sort_by_key', 'sort_by_direction', 'filters'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method list_named_entities2" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'resource_type' is set + if ('resource_type' not in params or + params['resource_type'] is None): + raise ValueError("Missing the required parameter `resource_type` when calling `list_named_entities2`") # noqa: E501 + # verify the required parameter 'org' is set + if ('org' not in params or + params['org'] is None): + raise ValueError("Missing the required parameter `org` when calling `list_named_entities2`") # noqa: E501 + # verify the required parameter 'project' is set + if ('project' not in params or + params['project'] is None): + raise ValueError("Missing the required parameter `project` when calling `list_named_entities2`") # noqa: E501 + # verify the required parameter 'domain' is set + if ('domain' not in params or + params['domain'] is None): + raise ValueError("Missing the required parameter `domain` when calling `list_named_entities2`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'resource_type' in params: + path_params['resource_type'] = params['resource_type'] # noqa: E501 + if 'org' in params: + path_params['org'] = params['org'] # noqa: E501 + if 'project' in params: + path_params['project'] = params['project'] # noqa: E501 + if 'domain' in params: + path_params['domain'] = params['domain'] # noqa: E501 + + query_params = [] + if 'limit' in params: + query_params.append(('limit', params['limit'])) # noqa: E501 + if 'token' in params: + query_params.append(('token', params['token'])) # noqa: E501 + if 'sort_by_key' in params: + query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 + if 'sort_by_direction' in params: + query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 + if 'filters' in params: + query_params.append(('filters', params['filters'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/named_entities/{resource_type}/org/{org}/{project}/{domain}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminNamedEntityList', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def list_node_executions(self, workflow_execution_id_project, workflow_execution_id_domain, workflow_execution_id_name, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution`. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.list_node_executions(workflow_execution_id_project, workflow_execution_id_domain, workflow_execution_id_name, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str workflow_execution_id_project: Name of the project the resource belongs to. (required) + :param str workflow_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str workflow_execution_id_name: User or system provided value for the resource. (required) + :param str workflow_execution_id_org: Optional, org key applied to the resource. + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :param str unique_parent_id: Unique identifier of the parent node in the execution +optional. + :return: AdminNodeExecutionList + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.list_node_executions_with_http_info(workflow_execution_id_project, workflow_execution_id_domain, workflow_execution_id_name, **kwargs) # noqa: E501 + else: + (data) = self.list_node_executions_with_http_info(workflow_execution_id_project, workflow_execution_id_domain, workflow_execution_id_name, **kwargs) # noqa: E501 + return data + + def list_node_executions_with_http_info(self, workflow_execution_id_project, workflow_execution_id_domain, workflow_execution_id_name, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution`. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.list_node_executions_with_http_info(workflow_execution_id_project, workflow_execution_id_domain, workflow_execution_id_name, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str workflow_execution_id_project: Name of the project the resource belongs to. (required) + :param str workflow_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str workflow_execution_id_name: User or system provided value for the resource. (required) + :param str workflow_execution_id_org: Optional, org key applied to the resource. + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :param str unique_parent_id: Unique identifier of the parent node in the execution +optional. + :return: AdminNodeExecutionList + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['workflow_execution_id_project', 'workflow_execution_id_domain', 'workflow_execution_id_name', 'workflow_execution_id_org', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction', 'unique_parent_id'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method list_node_executions" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'workflow_execution_id_project' is set + if ('workflow_execution_id_project' not in params or + params['workflow_execution_id_project'] is None): + raise ValueError("Missing the required parameter `workflow_execution_id_project` when calling `list_node_executions`") # noqa: E501 + # verify the required parameter 'workflow_execution_id_domain' is set + if ('workflow_execution_id_domain' not in params or + params['workflow_execution_id_domain'] is None): + raise ValueError("Missing the required parameter `workflow_execution_id_domain` when calling `list_node_executions`") # noqa: E501 + # verify the required parameter 'workflow_execution_id_name' is set + if ('workflow_execution_id_name' not in params or + params['workflow_execution_id_name'] is None): + raise ValueError("Missing the required parameter `workflow_execution_id_name` when calling `list_node_executions`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'workflow_execution_id_project' in params: + path_params['workflow_execution_id.project'] = params['workflow_execution_id_project'] # noqa: E501 + if 'workflow_execution_id_domain' in params: + path_params['workflow_execution_id.domain'] = params['workflow_execution_id_domain'] # noqa: E501 + if 'workflow_execution_id_name' in params: + path_params['workflow_execution_id.name'] = params['workflow_execution_id_name'] # noqa: E501 + + query_params = [] + if 'workflow_execution_id_org' in params: + query_params.append(('workflow_execution_id.org', params['workflow_execution_id_org'])) # noqa: E501 + if 'limit' in params: + query_params.append(('limit', params['limit'])) # noqa: E501 + if 'token' in params: + query_params.append(('token', params['token'])) # noqa: E501 + if 'filters' in params: + query_params.append(('filters', params['filters'])) # noqa: E501 + if 'sort_by_key' in params: + query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 + if 'sort_by_direction' in params: + query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 + if 'unique_parent_id' in params: + query_params.append(('unique_parent_id', params['unique_parent_id'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/node_executions/{workflow_execution_id.project}/{workflow_execution_id.domain}/{workflow_execution_id.name}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminNodeExecutionList', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def list_node_executions2(self, workflow_execution_id_org, workflow_execution_id_project, workflow_execution_id_domain, workflow_execution_id_name, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution`. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.list_node_executions2(workflow_execution_id_org, workflow_execution_id_project, workflow_execution_id_domain, workflow_execution_id_name, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str workflow_execution_id_org: Optional, org key applied to the resource. (required) + :param str workflow_execution_id_project: Name of the project the resource belongs to. (required) + :param str workflow_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str workflow_execution_id_name: User or system provided value for the resource. (required) + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :param str unique_parent_id: Unique identifier of the parent node in the execution +optional. + :return: AdminNodeExecutionList + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.list_node_executions2_with_http_info(workflow_execution_id_org, workflow_execution_id_project, workflow_execution_id_domain, workflow_execution_id_name, **kwargs) # noqa: E501 + else: + (data) = self.list_node_executions2_with_http_info(workflow_execution_id_org, workflow_execution_id_project, workflow_execution_id_domain, workflow_execution_id_name, **kwargs) # noqa: E501 + return data + + def list_node_executions2_with_http_info(self, workflow_execution_id_org, workflow_execution_id_project, workflow_execution_id_domain, workflow_execution_id_name, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution`. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.list_node_executions2_with_http_info(workflow_execution_id_org, workflow_execution_id_project, workflow_execution_id_domain, workflow_execution_id_name, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str workflow_execution_id_org: Optional, org key applied to the resource. (required) + :param str workflow_execution_id_project: Name of the project the resource belongs to. (required) + :param str workflow_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str workflow_execution_id_name: User or system provided value for the resource. (required) + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :param str unique_parent_id: Unique identifier of the parent node in the execution +optional. + :return: AdminNodeExecutionList + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['workflow_execution_id_org', 'workflow_execution_id_project', 'workflow_execution_id_domain', 'workflow_execution_id_name', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction', 'unique_parent_id'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method list_node_executions2" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'workflow_execution_id_org' is set + if ('workflow_execution_id_org' not in params or + params['workflow_execution_id_org'] is None): + raise ValueError("Missing the required parameter `workflow_execution_id_org` when calling `list_node_executions2`") # noqa: E501 + # verify the required parameter 'workflow_execution_id_project' is set + if ('workflow_execution_id_project' not in params or + params['workflow_execution_id_project'] is None): + raise ValueError("Missing the required parameter `workflow_execution_id_project` when calling `list_node_executions2`") # noqa: E501 + # verify the required parameter 'workflow_execution_id_domain' is set + if ('workflow_execution_id_domain' not in params or + params['workflow_execution_id_domain'] is None): + raise ValueError("Missing the required parameter `workflow_execution_id_domain` when calling `list_node_executions2`") # noqa: E501 + # verify the required parameter 'workflow_execution_id_name' is set + if ('workflow_execution_id_name' not in params or + params['workflow_execution_id_name'] is None): + raise ValueError("Missing the required parameter `workflow_execution_id_name` when calling `list_node_executions2`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'workflow_execution_id_org' in params: + path_params['workflow_execution_id.org'] = params['workflow_execution_id_org'] # noqa: E501 + if 'workflow_execution_id_project' in params: + path_params['workflow_execution_id.project'] = params['workflow_execution_id_project'] # noqa: E501 + if 'workflow_execution_id_domain' in params: + path_params['workflow_execution_id.domain'] = params['workflow_execution_id_domain'] # noqa: E501 + if 'workflow_execution_id_name' in params: + path_params['workflow_execution_id.name'] = params['workflow_execution_id_name'] # noqa: E501 + + query_params = [] + if 'limit' in params: + query_params.append(('limit', params['limit'])) # noqa: E501 + if 'token' in params: + query_params.append(('token', params['token'])) # noqa: E501 + if 'filters' in params: + query_params.append(('filters', params['filters'])) # noqa: E501 + if 'sort_by_key' in params: + query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 + if 'sort_by_direction' in params: + query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 + if 'unique_parent_id' in params: + query_params.append(('unique_parent_id', params['unique_parent_id'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/node_executions/org/{workflow_execution_id.org}/{workflow_execution_id.project}/{workflow_execution_id.domain}/{workflow_execution_id.name}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminNodeExecutionList', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def list_node_executions_for_task(self, task_execution_id_node_execution_id_execution_id_project, task_execution_id_node_execution_id_execution_id_domain, task_execution_id_node_execution_id_execution_id_name, task_execution_id_node_execution_id_node_id, task_execution_id_task_id_project, task_execution_id_task_id_domain, task_execution_id_task_id_name, task_execution_id_task_id_version, task_execution_id_retry_attempt, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution` launched by the reference :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.list_node_executions_for_task(task_execution_id_node_execution_id_execution_id_project, task_execution_id_node_execution_id_execution_id_domain, task_execution_id_node_execution_id_execution_id_name, task_execution_id_node_execution_id_node_id, task_execution_id_task_id_project, task_execution_id_task_id_domain, task_execution_id_task_id_name, task_execution_id_task_id_version, task_execution_id_retry_attempt, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str task_execution_id_node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) + :param str task_execution_id_node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str task_execution_id_node_execution_id_execution_id_name: User or system provided value for the resource. (required) + :param str task_execution_id_node_execution_id_node_id: (required) + :param str task_execution_id_task_id_project: Name of the project the resource belongs to. (required) + :param str task_execution_id_task_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str task_execution_id_task_id_name: User provided value for the resource. (required) + :param str task_execution_id_task_id_version: Specific version of the resource. (required) + :param int task_execution_id_retry_attempt: (required) + :param str task_execution_id_task_id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :param str task_execution_id_task_id_org: Optional, org key applied to the resource. + :param str task_execution_id_node_execution_id_execution_id_org: Optional, org key applied to the resource. + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, the, server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :return: AdminNodeExecutionList + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.list_node_executions_for_task_with_http_info(task_execution_id_node_execution_id_execution_id_project, task_execution_id_node_execution_id_execution_id_domain, task_execution_id_node_execution_id_execution_id_name, task_execution_id_node_execution_id_node_id, task_execution_id_task_id_project, task_execution_id_task_id_domain, task_execution_id_task_id_name, task_execution_id_task_id_version, task_execution_id_retry_attempt, **kwargs) # noqa: E501 + else: + (data) = self.list_node_executions_for_task_with_http_info(task_execution_id_node_execution_id_execution_id_project, task_execution_id_node_execution_id_execution_id_domain, task_execution_id_node_execution_id_execution_id_name, task_execution_id_node_execution_id_node_id, task_execution_id_task_id_project, task_execution_id_task_id_domain, task_execution_id_task_id_name, task_execution_id_task_id_version, task_execution_id_retry_attempt, **kwargs) # noqa: E501 + return data + + def list_node_executions_for_task_with_http_info(self, task_execution_id_node_execution_id_execution_id_project, task_execution_id_node_execution_id_execution_id_domain, task_execution_id_node_execution_id_execution_id_name, task_execution_id_node_execution_id_node_id, task_execution_id_task_id_project, task_execution_id_task_id_domain, task_execution_id_task_id_name, task_execution_id_task_id_version, task_execution_id_retry_attempt, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution` launched by the reference :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.list_node_executions_for_task_with_http_info(task_execution_id_node_execution_id_execution_id_project, task_execution_id_node_execution_id_execution_id_domain, task_execution_id_node_execution_id_execution_id_name, task_execution_id_node_execution_id_node_id, task_execution_id_task_id_project, task_execution_id_task_id_domain, task_execution_id_task_id_name, task_execution_id_task_id_version, task_execution_id_retry_attempt, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str task_execution_id_node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) + :param str task_execution_id_node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str task_execution_id_node_execution_id_execution_id_name: User or system provided value for the resource. (required) + :param str task_execution_id_node_execution_id_node_id: (required) + :param str task_execution_id_task_id_project: Name of the project the resource belongs to. (required) + :param str task_execution_id_task_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str task_execution_id_task_id_name: User provided value for the resource. (required) + :param str task_execution_id_task_id_version: Specific version of the resource. (required) + :param int task_execution_id_retry_attempt: (required) + :param str task_execution_id_task_id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :param str task_execution_id_task_id_org: Optional, org key applied to the resource. + :param str task_execution_id_node_execution_id_execution_id_org: Optional, org key applied to the resource. + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, the, server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :return: AdminNodeExecutionList + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['task_execution_id_node_execution_id_execution_id_project', 'task_execution_id_node_execution_id_execution_id_domain', 'task_execution_id_node_execution_id_execution_id_name', 'task_execution_id_node_execution_id_node_id', 'task_execution_id_task_id_project', 'task_execution_id_task_id_domain', 'task_execution_id_task_id_name', 'task_execution_id_task_id_version', 'task_execution_id_retry_attempt', 'task_execution_id_task_id_resource_type', 'task_execution_id_task_id_org', 'task_execution_id_node_execution_id_execution_id_org', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method list_node_executions_for_task" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'task_execution_id_node_execution_id_execution_id_project' is set + if ('task_execution_id_node_execution_id_execution_id_project' not in params or + params['task_execution_id_node_execution_id_execution_id_project'] is None): + raise ValueError("Missing the required parameter `task_execution_id_node_execution_id_execution_id_project` when calling `list_node_executions_for_task`") # noqa: E501 + # verify the required parameter 'task_execution_id_node_execution_id_execution_id_domain' is set + if ('task_execution_id_node_execution_id_execution_id_domain' not in params or + params['task_execution_id_node_execution_id_execution_id_domain'] is None): + raise ValueError("Missing the required parameter `task_execution_id_node_execution_id_execution_id_domain` when calling `list_node_executions_for_task`") # noqa: E501 + # verify the required parameter 'task_execution_id_node_execution_id_execution_id_name' is set + if ('task_execution_id_node_execution_id_execution_id_name' not in params or + params['task_execution_id_node_execution_id_execution_id_name'] is None): + raise ValueError("Missing the required parameter `task_execution_id_node_execution_id_execution_id_name` when calling `list_node_executions_for_task`") # noqa: E501 + # verify the required parameter 'task_execution_id_node_execution_id_node_id' is set + if ('task_execution_id_node_execution_id_node_id' not in params or + params['task_execution_id_node_execution_id_node_id'] is None): + raise ValueError("Missing the required parameter `task_execution_id_node_execution_id_node_id` when calling `list_node_executions_for_task`") # noqa: E501 + # verify the required parameter 'task_execution_id_task_id_project' is set + if ('task_execution_id_task_id_project' not in params or + params['task_execution_id_task_id_project'] is None): + raise ValueError("Missing the required parameter `task_execution_id_task_id_project` when calling `list_node_executions_for_task`") # noqa: E501 + # verify the required parameter 'task_execution_id_task_id_domain' is set + if ('task_execution_id_task_id_domain' not in params or + params['task_execution_id_task_id_domain'] is None): + raise ValueError("Missing the required parameter `task_execution_id_task_id_domain` when calling `list_node_executions_for_task`") # noqa: E501 + # verify the required parameter 'task_execution_id_task_id_name' is set + if ('task_execution_id_task_id_name' not in params or + params['task_execution_id_task_id_name'] is None): + raise ValueError("Missing the required parameter `task_execution_id_task_id_name` when calling `list_node_executions_for_task`") # noqa: E501 + # verify the required parameter 'task_execution_id_task_id_version' is set + if ('task_execution_id_task_id_version' not in params or + params['task_execution_id_task_id_version'] is None): + raise ValueError("Missing the required parameter `task_execution_id_task_id_version` when calling `list_node_executions_for_task`") # noqa: E501 + # verify the required parameter 'task_execution_id_retry_attempt' is set + if ('task_execution_id_retry_attempt' not in params or + params['task_execution_id_retry_attempt'] is None): + raise ValueError("Missing the required parameter `task_execution_id_retry_attempt` when calling `list_node_executions_for_task`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'task_execution_id_node_execution_id_execution_id_project' in params: + path_params['task_execution_id.node_execution_id.execution_id.project'] = params['task_execution_id_node_execution_id_execution_id_project'] # noqa: E501 + if 'task_execution_id_node_execution_id_execution_id_domain' in params: + path_params['task_execution_id.node_execution_id.execution_id.domain'] = params['task_execution_id_node_execution_id_execution_id_domain'] # noqa: E501 + if 'task_execution_id_node_execution_id_execution_id_name' in params: + path_params['task_execution_id.node_execution_id.execution_id.name'] = params['task_execution_id_node_execution_id_execution_id_name'] # noqa: E501 + if 'task_execution_id_node_execution_id_node_id' in params: + path_params['task_execution_id.node_execution_id.node_id'] = params['task_execution_id_node_execution_id_node_id'] # noqa: E501 + if 'task_execution_id_task_id_project' in params: + path_params['task_execution_id.task_id.project'] = params['task_execution_id_task_id_project'] # noqa: E501 + if 'task_execution_id_task_id_domain' in params: + path_params['task_execution_id.task_id.domain'] = params['task_execution_id_task_id_domain'] # noqa: E501 + if 'task_execution_id_task_id_name' in params: + path_params['task_execution_id.task_id.name'] = params['task_execution_id_task_id_name'] # noqa: E501 + if 'task_execution_id_task_id_version' in params: + path_params['task_execution_id.task_id.version'] = params['task_execution_id_task_id_version'] # noqa: E501 + if 'task_execution_id_retry_attempt' in params: + path_params['task_execution_id.retry_attempt'] = params['task_execution_id_retry_attempt'] # noqa: E501 + + query_params = [] + if 'task_execution_id_task_id_resource_type' in params: + query_params.append(('task_execution_id.task_id.resource_type', params['task_execution_id_task_id_resource_type'])) # noqa: E501 + if 'task_execution_id_task_id_org' in params: + query_params.append(('task_execution_id.task_id.org', params['task_execution_id_task_id_org'])) # noqa: E501 + if 'task_execution_id_node_execution_id_execution_id_org' in params: + query_params.append(('task_execution_id.node_execution_id.execution_id.org', params['task_execution_id_node_execution_id_execution_id_org'])) # noqa: E501 + if 'limit' in params: + query_params.append(('limit', params['limit'])) # noqa: E501 + if 'token' in params: + query_params.append(('token', params['token'])) # noqa: E501 + if 'filters' in params: + query_params.append(('filters', params['filters'])) # noqa: E501 + if 'sort_by_key' in params: + query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 + if 'sort_by_direction' in params: + query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/children/task_executions/{task_execution_id.node_execution_id.execution_id.project}/{task_execution_id.node_execution_id.execution_id.domain}/{task_execution_id.node_execution_id.execution_id.name}/{task_execution_id.node_execution_id.node_id}/{task_execution_id.task_id.project}/{task_execution_id.task_id.domain}/{task_execution_id.task_id.name}/{task_execution_id.task_id.version}/{task_execution_id.retry_attempt}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminNodeExecutionList', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def list_node_executions_for_task2(self, task_execution_id_node_execution_id_execution_id_org, task_execution_id_node_execution_id_execution_id_project, task_execution_id_node_execution_id_execution_id_domain, task_execution_id_node_execution_id_execution_id_name, task_execution_id_node_execution_id_node_id, task_execution_id_task_id_project, task_execution_id_task_id_domain, task_execution_id_task_id_name, task_execution_id_task_id_version, task_execution_id_retry_attempt, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution` launched by the reference :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.list_node_executions_for_task2(task_execution_id_node_execution_id_execution_id_org, task_execution_id_node_execution_id_execution_id_project, task_execution_id_node_execution_id_execution_id_domain, task_execution_id_node_execution_id_execution_id_name, task_execution_id_node_execution_id_node_id, task_execution_id_task_id_project, task_execution_id_task_id_domain, task_execution_id_task_id_name, task_execution_id_task_id_version, task_execution_id_retry_attempt, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str task_execution_id_node_execution_id_execution_id_org: Optional, org key applied to the resource. (required) + :param str task_execution_id_node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) + :param str task_execution_id_node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str task_execution_id_node_execution_id_execution_id_name: User or system provided value for the resource. (required) + :param str task_execution_id_node_execution_id_node_id: (required) + :param str task_execution_id_task_id_project: Name of the project the resource belongs to. (required) + :param str task_execution_id_task_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str task_execution_id_task_id_name: User provided value for the resource. (required) + :param str task_execution_id_task_id_version: Specific version of the resource. (required) + :param int task_execution_id_retry_attempt: (required) + :param str task_execution_id_task_id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :param str task_execution_id_task_id_org: Optional, org key applied to the resource. + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, the, server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :return: AdminNodeExecutionList + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.list_node_executions_for_task2_with_http_info(task_execution_id_node_execution_id_execution_id_org, task_execution_id_node_execution_id_execution_id_project, task_execution_id_node_execution_id_execution_id_domain, task_execution_id_node_execution_id_execution_id_name, task_execution_id_node_execution_id_node_id, task_execution_id_task_id_project, task_execution_id_task_id_domain, task_execution_id_task_id_name, task_execution_id_task_id_version, task_execution_id_retry_attempt, **kwargs) # noqa: E501 + else: + (data) = self.list_node_executions_for_task2_with_http_info(task_execution_id_node_execution_id_execution_id_org, task_execution_id_node_execution_id_execution_id_project, task_execution_id_node_execution_id_execution_id_domain, task_execution_id_node_execution_id_execution_id_name, task_execution_id_node_execution_id_node_id, task_execution_id_task_id_project, task_execution_id_task_id_domain, task_execution_id_task_id_name, task_execution_id_task_id_version, task_execution_id_retry_attempt, **kwargs) # noqa: E501 + return data + + def list_node_executions_for_task2_with_http_info(self, task_execution_id_node_execution_id_execution_id_org, task_execution_id_node_execution_id_execution_id_project, task_execution_id_node_execution_id_execution_id_domain, task_execution_id_node_execution_id_execution_id_name, task_execution_id_node_execution_id_node_id, task_execution_id_task_id_project, task_execution_id_task_id_domain, task_execution_id_task_id_name, task_execution_id_task_id_version, task_execution_id_retry_attempt, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution` launched by the reference :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.list_node_executions_for_task2_with_http_info(task_execution_id_node_execution_id_execution_id_org, task_execution_id_node_execution_id_execution_id_project, task_execution_id_node_execution_id_execution_id_domain, task_execution_id_node_execution_id_execution_id_name, task_execution_id_node_execution_id_node_id, task_execution_id_task_id_project, task_execution_id_task_id_domain, task_execution_id_task_id_name, task_execution_id_task_id_version, task_execution_id_retry_attempt, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str task_execution_id_node_execution_id_execution_id_org: Optional, org key applied to the resource. (required) + :param str task_execution_id_node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) + :param str task_execution_id_node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str task_execution_id_node_execution_id_execution_id_name: User or system provided value for the resource. (required) + :param str task_execution_id_node_execution_id_node_id: (required) + :param str task_execution_id_task_id_project: Name of the project the resource belongs to. (required) + :param str task_execution_id_task_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str task_execution_id_task_id_name: User provided value for the resource. (required) + :param str task_execution_id_task_id_version: Specific version of the resource. (required) + :param int task_execution_id_retry_attempt: (required) + :param str task_execution_id_task_id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :param str task_execution_id_task_id_org: Optional, org key applied to the resource. + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, the, server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :return: AdminNodeExecutionList + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['task_execution_id_node_execution_id_execution_id_org', 'task_execution_id_node_execution_id_execution_id_project', 'task_execution_id_node_execution_id_execution_id_domain', 'task_execution_id_node_execution_id_execution_id_name', 'task_execution_id_node_execution_id_node_id', 'task_execution_id_task_id_project', 'task_execution_id_task_id_domain', 'task_execution_id_task_id_name', 'task_execution_id_task_id_version', 'task_execution_id_retry_attempt', 'task_execution_id_task_id_resource_type', 'task_execution_id_task_id_org', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method list_node_executions_for_task2" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'task_execution_id_node_execution_id_execution_id_org' is set + if ('task_execution_id_node_execution_id_execution_id_org' not in params or + params['task_execution_id_node_execution_id_execution_id_org'] is None): + raise ValueError("Missing the required parameter `task_execution_id_node_execution_id_execution_id_org` when calling `list_node_executions_for_task2`") # noqa: E501 + # verify the required parameter 'task_execution_id_node_execution_id_execution_id_project' is set + if ('task_execution_id_node_execution_id_execution_id_project' not in params or + params['task_execution_id_node_execution_id_execution_id_project'] is None): + raise ValueError("Missing the required parameter `task_execution_id_node_execution_id_execution_id_project` when calling `list_node_executions_for_task2`") # noqa: E501 + # verify the required parameter 'task_execution_id_node_execution_id_execution_id_domain' is set + if ('task_execution_id_node_execution_id_execution_id_domain' not in params or + params['task_execution_id_node_execution_id_execution_id_domain'] is None): + raise ValueError("Missing the required parameter `task_execution_id_node_execution_id_execution_id_domain` when calling `list_node_executions_for_task2`") # noqa: E501 + # verify the required parameter 'task_execution_id_node_execution_id_execution_id_name' is set + if ('task_execution_id_node_execution_id_execution_id_name' not in params or + params['task_execution_id_node_execution_id_execution_id_name'] is None): + raise ValueError("Missing the required parameter `task_execution_id_node_execution_id_execution_id_name` when calling `list_node_executions_for_task2`") # noqa: E501 + # verify the required parameter 'task_execution_id_node_execution_id_node_id' is set + if ('task_execution_id_node_execution_id_node_id' not in params or + params['task_execution_id_node_execution_id_node_id'] is None): + raise ValueError("Missing the required parameter `task_execution_id_node_execution_id_node_id` when calling `list_node_executions_for_task2`") # noqa: E501 + # verify the required parameter 'task_execution_id_task_id_project' is set + if ('task_execution_id_task_id_project' not in params or + params['task_execution_id_task_id_project'] is None): + raise ValueError("Missing the required parameter `task_execution_id_task_id_project` when calling `list_node_executions_for_task2`") # noqa: E501 + # verify the required parameter 'task_execution_id_task_id_domain' is set + if ('task_execution_id_task_id_domain' not in params or + params['task_execution_id_task_id_domain'] is None): + raise ValueError("Missing the required parameter `task_execution_id_task_id_domain` when calling `list_node_executions_for_task2`") # noqa: E501 + # verify the required parameter 'task_execution_id_task_id_name' is set + if ('task_execution_id_task_id_name' not in params or + params['task_execution_id_task_id_name'] is None): + raise ValueError("Missing the required parameter `task_execution_id_task_id_name` when calling `list_node_executions_for_task2`") # noqa: E501 + # verify the required parameter 'task_execution_id_task_id_version' is set + if ('task_execution_id_task_id_version' not in params or + params['task_execution_id_task_id_version'] is None): + raise ValueError("Missing the required parameter `task_execution_id_task_id_version` when calling `list_node_executions_for_task2`") # noqa: E501 + # verify the required parameter 'task_execution_id_retry_attempt' is set + if ('task_execution_id_retry_attempt' not in params or + params['task_execution_id_retry_attempt'] is None): + raise ValueError("Missing the required parameter `task_execution_id_retry_attempt` when calling `list_node_executions_for_task2`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'task_execution_id_node_execution_id_execution_id_org' in params: + path_params['task_execution_id.node_execution_id.execution_id.org'] = params['task_execution_id_node_execution_id_execution_id_org'] # noqa: E501 + if 'task_execution_id_node_execution_id_execution_id_project' in params: + path_params['task_execution_id.node_execution_id.execution_id.project'] = params['task_execution_id_node_execution_id_execution_id_project'] # noqa: E501 + if 'task_execution_id_node_execution_id_execution_id_domain' in params: + path_params['task_execution_id.node_execution_id.execution_id.domain'] = params['task_execution_id_node_execution_id_execution_id_domain'] # noqa: E501 + if 'task_execution_id_node_execution_id_execution_id_name' in params: + path_params['task_execution_id.node_execution_id.execution_id.name'] = params['task_execution_id_node_execution_id_execution_id_name'] # noqa: E501 + if 'task_execution_id_node_execution_id_node_id' in params: + path_params['task_execution_id.node_execution_id.node_id'] = params['task_execution_id_node_execution_id_node_id'] # noqa: E501 + if 'task_execution_id_task_id_project' in params: + path_params['task_execution_id.task_id.project'] = params['task_execution_id_task_id_project'] # noqa: E501 + if 'task_execution_id_task_id_domain' in params: + path_params['task_execution_id.task_id.domain'] = params['task_execution_id_task_id_domain'] # noqa: E501 + if 'task_execution_id_task_id_name' in params: + path_params['task_execution_id.task_id.name'] = params['task_execution_id_task_id_name'] # noqa: E501 + if 'task_execution_id_task_id_version' in params: + path_params['task_execution_id.task_id.version'] = params['task_execution_id_task_id_version'] # noqa: E501 + if 'task_execution_id_retry_attempt' in params: + path_params['task_execution_id.retry_attempt'] = params['task_execution_id_retry_attempt'] # noqa: E501 + + query_params = [] + if 'task_execution_id_task_id_resource_type' in params: + query_params.append(('task_execution_id.task_id.resource_type', params['task_execution_id_task_id_resource_type'])) # noqa: E501 + if 'task_execution_id_task_id_org' in params: + query_params.append(('task_execution_id.task_id.org', params['task_execution_id_task_id_org'])) # noqa: E501 + if 'limit' in params: + query_params.append(('limit', params['limit'])) # noqa: E501 + if 'token' in params: + query_params.append(('token', params['token'])) # noqa: E501 + if 'filters' in params: + query_params.append(('filters', params['filters'])) # noqa: E501 + if 'sort_by_key' in params: + query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 + if 'sort_by_direction' in params: + query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 header_params = {} @@ -2774,14 +8488,14 @@ def get_task_execution_data_with_http_info(self, id_node_execution_id_execution_ auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/data/task_executions/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}', 'GET', + '/api/v1/children/task_executions/org/{task_execution_id.node_execution_id.execution_id.org}/{task_execution_id.node_execution_id.execution_id.project}/{task_execution_id.node_execution_id.execution_id.domain}/{task_execution_id.node_execution_id.execution_id.name}/{task_execution_id.node_execution_id.node_id}/{task_execution_id.task_id.project}/{task_execution_id.task_id.domain}/{task_execution_id.task_id.name}/{task_execution_id.task_id.version}/{task_execution_id.retry_attempt}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminTaskExecutionGetDataResponse', # noqa: E501 + response_type='AdminNodeExecutionList', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -2789,41 +8503,170 @@ def get_task_execution_data_with_http_info(self, id_node_execution_id_execution_ _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_version(self, **kwargs): # noqa: E501 - """get_version # noqa: E501 + def list_projects(self, **kwargs): # noqa: E501 + """Fetches a list of :ref:`ref_flyteidl.admin.Project` # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_version(async_req=True) + >>> thread = api.list_projects(async_req=True) >>> result = thread.get() :param async_req bool - :return: AdminGetVersionResponse + :param int limit: Indicates the number of projects to be returned. +required. + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :return: AdminProjects If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_version_with_http_info(**kwargs) # noqa: E501 + return self.list_projects_with_http_info(**kwargs) # noqa: E501 else: - (data) = self.get_version_with_http_info(**kwargs) # noqa: E501 + (data) = self.list_projects_with_http_info(**kwargs) # noqa: E501 return data - def get_version_with_http_info(self, **kwargs): # noqa: E501 - """get_version # noqa: E501 + def list_projects_with_http_info(self, **kwargs): # noqa: E501 + """Fetches a list of :ref:`ref_flyteidl.admin.Project` # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.list_projects_with_http_info(async_req=True) + >>> result = thread.get() + + :param async_req bool + :param int limit: Indicates the number of projects to be returned. +required. + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :return: AdminProjects + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method list_projects" % key + ) + params[key] = val + del params['kwargs'] + + collection_formats = {} + + path_params = {} + + query_params = [] + if 'limit' in params: + query_params.append(('limit', params['limit'])) # noqa: E501 + if 'token' in params: + query_params.append(('token', params['token'])) # noqa: E501 + if 'filters' in params: + query_params.append(('filters', params['filters'])) # noqa: E501 + if 'sort_by_key' in params: + query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 + if 'sort_by_direction' in params: + query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/projects', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminProjects', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def list_task_executions(self, node_execution_id_execution_id_project, node_execution_id_execution_id_domain, node_execution_id_execution_id_name, node_execution_id_node_id, **kwargs): # noqa: E501 + """Fetches a list of :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.list_task_executions(node_execution_id_execution_id_project, node_execution_id_execution_id_domain, node_execution_id_execution_id_name, node_execution_id_node_id, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) + :param str node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str node_execution_id_execution_id_name: User or system provided value for the resource. (required) + :param str node_execution_id_node_id: (required) + :param str node_execution_id_execution_id_org: Optional, org key applied to the resource. + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :return: AdminTaskExecutionList + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.list_task_executions_with_http_info(node_execution_id_execution_id_project, node_execution_id_execution_id_domain, node_execution_id_execution_id_name, node_execution_id_node_id, **kwargs) # noqa: E501 + else: + (data) = self.list_task_executions_with_http_info(node_execution_id_execution_id_project, node_execution_id_execution_id_domain, node_execution_id_execution_id_name, node_execution_id_node_id, **kwargs) # noqa: E501 + return data + + def list_task_executions_with_http_info(self, node_execution_id_execution_id_project, node_execution_id_execution_id_domain, node_execution_id_execution_id_name, node_execution_id_node_id, **kwargs): # noqa: E501 + """Fetches a list of :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_version_with_http_info(async_req=True) + >>> thread = api.list_task_executions_with_http_info(node_execution_id_execution_id_project, node_execution_id_execution_id_domain, node_execution_id_execution_id_name, node_execution_id_node_id, async_req=True) >>> result = thread.get() :param async_req bool - :return: AdminGetVersionResponse + :param str node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) + :param str node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str node_execution_id_execution_id_name: User or system provided value for the resource. (required) + :param str node_execution_id_node_id: (required) + :param str node_execution_id_execution_id_org: Optional, org key applied to the resource. + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :return: AdminTaskExecutionList If the method is called asynchronously, returns the request thread. """ - all_params = [] # noqa: E501 + all_params = ['node_execution_id_execution_id_project', 'node_execution_id_execution_id_domain', 'node_execution_id_execution_id_name', 'node_execution_id_node_id', 'node_execution_id_execution_id_org', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -2834,16 +8677,52 @@ def get_version_with_http_info(self, **kwargs): # noqa: E501 if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_version" % key + " to method list_task_executions" % key ) params[key] = val del params['kwargs'] + # verify the required parameter 'node_execution_id_execution_id_project' is set + if ('node_execution_id_execution_id_project' not in params or + params['node_execution_id_execution_id_project'] is None): + raise ValueError("Missing the required parameter `node_execution_id_execution_id_project` when calling `list_task_executions`") # noqa: E501 + # verify the required parameter 'node_execution_id_execution_id_domain' is set + if ('node_execution_id_execution_id_domain' not in params or + params['node_execution_id_execution_id_domain'] is None): + raise ValueError("Missing the required parameter `node_execution_id_execution_id_domain` when calling `list_task_executions`") # noqa: E501 + # verify the required parameter 'node_execution_id_execution_id_name' is set + if ('node_execution_id_execution_id_name' not in params or + params['node_execution_id_execution_id_name'] is None): + raise ValueError("Missing the required parameter `node_execution_id_execution_id_name` when calling `list_task_executions`") # noqa: E501 + # verify the required parameter 'node_execution_id_node_id' is set + if ('node_execution_id_node_id' not in params or + params['node_execution_id_node_id'] is None): + raise ValueError("Missing the required parameter `node_execution_id_node_id` when calling `list_task_executions`") # noqa: E501 collection_formats = {} path_params = {} + if 'node_execution_id_execution_id_project' in params: + path_params['node_execution_id.execution_id.project'] = params['node_execution_id_execution_id_project'] # noqa: E501 + if 'node_execution_id_execution_id_domain' in params: + path_params['node_execution_id.execution_id.domain'] = params['node_execution_id_execution_id_domain'] # noqa: E501 + if 'node_execution_id_execution_id_name' in params: + path_params['node_execution_id.execution_id.name'] = params['node_execution_id_execution_id_name'] # noqa: E501 + if 'node_execution_id_node_id' in params: + path_params['node_execution_id.node_id'] = params['node_execution_id_node_id'] # noqa: E501 query_params = [] + if 'node_execution_id_execution_id_org' in params: + query_params.append(('node_execution_id.execution_id.org', params['node_execution_id_execution_id_org'])) # noqa: E501 + if 'limit' in params: + query_params.append(('limit', params['limit'])) # noqa: E501 + if 'token' in params: + query_params.append(('token', params['token'])) # noqa: E501 + if 'filters' in params: + query_params.append(('filters', params['filters'])) # noqa: E501 + if 'sort_by_key' in params: + query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 + if 'sort_by_direction' in params: + query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 header_params = {} @@ -2863,14 +8742,14 @@ def get_version_with_http_info(self, **kwargs): # noqa: E501 auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/version', 'GET', + '/api/v1/task_executions/{node_execution_id.execution_id.project}/{node_execution_id.execution_id.domain}/{node_execution_id.execution_id.name}/{node_execution_id.node_id}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminGetVersionResponse', # noqa: E501 + response_type='AdminTaskExecutionList', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -2878,51 +8757,61 @@ def get_version_with_http_info(self, **kwargs): # noqa: E501 _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_workflow(self, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 - """Fetch a :ref:`ref_flyteidl.admin.Workflow` definition. # noqa: E501 + def list_task_executions2(self, node_execution_id_execution_id_org, node_execution_id_execution_id_project, node_execution_id_execution_id_domain, node_execution_id_execution_id_name, node_execution_id_node_id, **kwargs): # noqa: E501 + """Fetches a list of :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_workflow(id_project, id_domain, id_name, id_version, async_req=True) + >>> thread = api.list_task_executions2(node_execution_id_execution_id_org, node_execution_id_execution_id_project, node_execution_id_execution_id_domain, node_execution_id_execution_id_name, node_execution_id_node_id, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. (required) - :param str id_version: Specific version of the resource. (required) - :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects - :return: AdminWorkflow + :param str node_execution_id_execution_id_org: Optional, org key applied to the resource. (required) + :param str node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) + :param str node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str node_execution_id_execution_id_name: User or system provided value for the resource. (required) + :param str node_execution_id_node_id: (required) + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :return: AdminTaskExecutionList If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_workflow_with_http_info(id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 + return self.list_task_executions2_with_http_info(node_execution_id_execution_id_org, node_execution_id_execution_id_project, node_execution_id_execution_id_domain, node_execution_id_execution_id_name, node_execution_id_node_id, **kwargs) # noqa: E501 else: - (data) = self.get_workflow_with_http_info(id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 + (data) = self.list_task_executions2_with_http_info(node_execution_id_execution_id_org, node_execution_id_execution_id_project, node_execution_id_execution_id_domain, node_execution_id_execution_id_name, node_execution_id_node_id, **kwargs) # noqa: E501 return data - def get_workflow_with_http_info(self, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 - """Fetch a :ref:`ref_flyteidl.admin.Workflow` definition. # noqa: E501 + def list_task_executions2_with_http_info(self, node_execution_id_execution_id_org, node_execution_id_execution_id_project, node_execution_id_execution_id_domain, node_execution_id_execution_id_name, node_execution_id_node_id, **kwargs): # noqa: E501 + """Fetches a list of :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_workflow_with_http_info(id_project, id_domain, id_name, id_version, async_req=True) + >>> thread = api.list_task_executions2_with_http_info(node_execution_id_execution_id_org, node_execution_id_execution_id_project, node_execution_id_execution_id_domain, node_execution_id_execution_id_name, node_execution_id_node_id, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. (required) - :param str id_version: Specific version of the resource. (required) - :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects - :return: AdminWorkflow + :param str node_execution_id_execution_id_org: Optional, org key applied to the resource. (required) + :param str node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) + :param str node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str node_execution_id_execution_id_name: User or system provided value for the resource. (required) + :param str node_execution_id_node_id: (required) + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :return: AdminTaskExecutionList If the method is called asynchronously, returns the request thread. """ - all_params = ['id_project', 'id_domain', 'id_name', 'id_version', 'id_resource_type'] # noqa: E501 + all_params = ['node_execution_id_execution_id_org', 'node_execution_id_execution_id_project', 'node_execution_id_execution_id_domain', 'node_execution_id_execution_id_name', 'node_execution_id_node_id', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -2933,42 +8822,56 @@ def get_workflow_with_http_info(self, id_project, id_domain, id_name, id_version if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_workflow" % key + " to method list_task_executions2" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'id_project' is set - if ('id_project' not in params or - params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `get_workflow`") # noqa: E501 - # verify the required parameter 'id_domain' is set - if ('id_domain' not in params or - params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `get_workflow`") # noqa: E501 - # verify the required parameter 'id_name' is set - if ('id_name' not in params or - params['id_name'] is None): - raise ValueError("Missing the required parameter `id_name` when calling `get_workflow`") # noqa: E501 - # verify the required parameter 'id_version' is set - if ('id_version' not in params or - params['id_version'] is None): - raise ValueError("Missing the required parameter `id_version` when calling `get_workflow`") # noqa: E501 + # verify the required parameter 'node_execution_id_execution_id_org' is set + if ('node_execution_id_execution_id_org' not in params or + params['node_execution_id_execution_id_org'] is None): + raise ValueError("Missing the required parameter `node_execution_id_execution_id_org` when calling `list_task_executions2`") # noqa: E501 + # verify the required parameter 'node_execution_id_execution_id_project' is set + if ('node_execution_id_execution_id_project' not in params or + params['node_execution_id_execution_id_project'] is None): + raise ValueError("Missing the required parameter `node_execution_id_execution_id_project` when calling `list_task_executions2`") # noqa: E501 + # verify the required parameter 'node_execution_id_execution_id_domain' is set + if ('node_execution_id_execution_id_domain' not in params or + params['node_execution_id_execution_id_domain'] is None): + raise ValueError("Missing the required parameter `node_execution_id_execution_id_domain` when calling `list_task_executions2`") # noqa: E501 + # verify the required parameter 'node_execution_id_execution_id_name' is set + if ('node_execution_id_execution_id_name' not in params or + params['node_execution_id_execution_id_name'] is None): + raise ValueError("Missing the required parameter `node_execution_id_execution_id_name` when calling `list_task_executions2`") # noqa: E501 + # verify the required parameter 'node_execution_id_node_id' is set + if ('node_execution_id_node_id' not in params or + params['node_execution_id_node_id'] is None): + raise ValueError("Missing the required parameter `node_execution_id_node_id` when calling `list_task_executions2`") # noqa: E501 collection_formats = {} path_params = {} - if 'id_project' in params: - path_params['id.project'] = params['id_project'] # noqa: E501 - if 'id_domain' in params: - path_params['id.domain'] = params['id_domain'] # noqa: E501 - if 'id_name' in params: - path_params['id.name'] = params['id_name'] # noqa: E501 - if 'id_version' in params: - path_params['id.version'] = params['id_version'] # noqa: E501 + if 'node_execution_id_execution_id_org' in params: + path_params['node_execution_id.execution_id.org'] = params['node_execution_id_execution_id_org'] # noqa: E501 + if 'node_execution_id_execution_id_project' in params: + path_params['node_execution_id.execution_id.project'] = params['node_execution_id_execution_id_project'] # noqa: E501 + if 'node_execution_id_execution_id_domain' in params: + path_params['node_execution_id.execution_id.domain'] = params['node_execution_id_execution_id_domain'] # noqa: E501 + if 'node_execution_id_execution_id_name' in params: + path_params['node_execution_id.execution_id.name'] = params['node_execution_id_execution_id_name'] # noqa: E501 + if 'node_execution_id_node_id' in params: + path_params['node_execution_id.node_id'] = params['node_execution_id_node_id'] # noqa: E501 query_params = [] - if 'id_resource_type' in params: - query_params.append(('id.resource_type', params['id_resource_type'])) # noqa: E501 + if 'limit' in params: + query_params.append(('limit', params['limit'])) # noqa: E501 + if 'token' in params: + query_params.append(('token', params['token'])) # noqa: E501 + if 'filters' in params: + query_params.append(('filters', params['filters'])) # noqa: E501 + if 'sort_by_key' in params: + query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 + if 'sort_by_direction' in params: + query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 header_params = {} @@ -2988,14 +8891,14 @@ def get_workflow_with_http_info(self, id_project, id_domain, id_name, id_version auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/workflows/{id.project}/{id.domain}/{id.name}/{id.version}', 'GET', + '/api/v1/task_executions/org/{node_execution_id.execution_id.org}/{node_execution_id.execution_id.project}/{node_execution_id.execution_id.domain}/{node_execution_id.execution_id.name}/{node_execution_id.node_id}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminWorkflow', # noqa: E501 + response_type='AdminTaskExecutionList', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -3003,49 +8906,57 @@ def get_workflow_with_http_info(self, id_project, id_domain, id_name, id_version _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_workflow_attributes(self, project, domain, workflow, **kwargs): # noqa: E501 - """Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. # noqa: E501 + def list_task_ids(self, project, domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of task objects. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_workflow_attributes(project, domain, workflow, async_req=True) + >>> thread = api.list_task_ids(project, domain, async_req=True) >>> result = thread.get() :param async_req bool - :param str project: Unique project id which this set of attributes references. +required (required) - :param str domain: Unique domain id which this set of attributes references. +required (required) - :param str workflow: Workflow name which this set of attributes references. +required (required) - :param str resource_type: Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. - :return: AdminWorkflowAttributesGetResponse + :param str project: Name of the project that contains the identifiers. +required (required) + :param str domain: Name of the domain the identifiers belongs to within the project. +required (required) + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :param str filters: Indicates a list of filters passed as string. +optional. + :param str org: Optional, org key applied to the resource. + :return: AdminNamedEntityIdentifierList If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_workflow_attributes_with_http_info(project, domain, workflow, **kwargs) # noqa: E501 + return self.list_task_ids_with_http_info(project, domain, **kwargs) # noqa: E501 else: - (data) = self.get_workflow_attributes_with_http_info(project, domain, workflow, **kwargs) # noqa: E501 + (data) = self.list_task_ids_with_http_info(project, domain, **kwargs) # noqa: E501 return data - def get_workflow_attributes_with_http_info(self, project, domain, workflow, **kwargs): # noqa: E501 - """Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. # noqa: E501 + def list_task_ids_with_http_info(self, project, domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of task objects. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_workflow_attributes_with_http_info(project, domain, workflow, async_req=True) + >>> thread = api.list_task_ids_with_http_info(project, domain, async_req=True) >>> result = thread.get() :param async_req bool - :param str project: Unique project id which this set of attributes references. +required (required) - :param str domain: Unique domain id which this set of attributes references. +required (required) - :param str workflow: Workflow name which this set of attributes references. +required (required) - :param str resource_type: Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. - :return: AdminWorkflowAttributesGetResponse + :param str project: Name of the project that contains the identifiers. +required (required) + :param str domain: Name of the domain the identifiers belongs to within the project. +required (required) + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :param str filters: Indicates a list of filters passed as string. +optional. + :param str org: Optional, org key applied to the resource. + :return: AdminNamedEntityIdentifierList If the method is called asynchronously, returns the request thread. """ - all_params = ['project', 'domain', 'workflow', 'resource_type'] # noqa: E501 + all_params = ['project', 'domain', 'limit', 'token', 'sort_by_key', 'sort_by_direction', 'filters', 'org'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -3056,22 +8967,18 @@ def get_workflow_attributes_with_http_info(self, project, domain, workflow, **kw if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_workflow_attributes" % key + " to method list_task_ids" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'project' is set if ('project' not in params or params['project'] is None): - raise ValueError("Missing the required parameter `project` when calling `get_workflow_attributes`") # noqa: E501 + raise ValueError("Missing the required parameter `project` when calling `list_task_ids`") # noqa: E501 # verify the required parameter 'domain' is set if ('domain' not in params or params['domain'] is None): - raise ValueError("Missing the required parameter `domain` when calling `get_workflow_attributes`") # noqa: E501 - # verify the required parameter 'workflow' is set - if ('workflow' not in params or - params['workflow'] is None): - raise ValueError("Missing the required parameter `workflow` when calling `get_workflow_attributes`") # noqa: E501 + raise ValueError("Missing the required parameter `domain` when calling `list_task_ids`") # noqa: E501 collection_formats = {} @@ -3080,12 +8987,20 @@ def get_workflow_attributes_with_http_info(self, project, domain, workflow, **kw path_params['project'] = params['project'] # noqa: E501 if 'domain' in params: path_params['domain'] = params['domain'] # noqa: E501 - if 'workflow' in params: - path_params['workflow'] = params['workflow'] # noqa: E501 query_params = [] - if 'resource_type' in params: - query_params.append(('resource_type', params['resource_type'])) # noqa: E501 + if 'limit' in params: + query_params.append(('limit', params['limit'])) # noqa: E501 + if 'token' in params: + query_params.append(('token', params['token'])) # noqa: E501 + if 'sort_by_key' in params: + query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 + if 'sort_by_direction' in params: + query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 + if 'filters' in params: + query_params.append(('filters', params['filters'])) # noqa: E501 + if 'org' in params: + query_params.append(('org', params['org'])) # noqa: E501 header_params = {} @@ -3105,14 +9020,14 @@ def get_workflow_attributes_with_http_info(self, project, domain, workflow, **kw auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/workflow_attributes/{project}/{domain}/{workflow}', 'GET', + '/api/v1/task_ids/{project}/{domain}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminWorkflowAttributesGetResponse', # noqa: E501 + response_type='AdminNamedEntityIdentifierList', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -3120,53 +9035,57 @@ def get_workflow_attributes_with_http_info(self, project, domain, workflow, **kw _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_active_launch_plans(self, project, domain, **kwargs): # noqa: E501 - """List active versions of :ref:`ref_flyteidl.admin.LaunchPlan`. # noqa: E501 + def list_task_ids2(self, org, project, domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of task objects. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_active_launch_plans(project, domain, async_req=True) + >>> thread = api.list_task_ids2(org, project, domain, async_req=True) >>> result = thread.get() :param async_req bool - :param str project: Name of the project that contains the identifiers. +required. (required) - :param str domain: Name of the domain the identifiers belongs to within the project. +required. (required) + :param str org: Optional, org key applied to the resource. (required) + :param str project: Name of the project that contains the identifiers. +required (required) + :param str domain: Name of the domain the identifiers belongs to within the project. +required (required) :param int limit: Indicates the number of resources to be returned. +required. :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminLaunchPlanList + :param str filters: Indicates a list of filters passed as string. +optional. + :return: AdminNamedEntityIdentifierList If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_active_launch_plans_with_http_info(project, domain, **kwargs) # noqa: E501 + return self.list_task_ids2_with_http_info(org, project, domain, **kwargs) # noqa: E501 else: - (data) = self.list_active_launch_plans_with_http_info(project, domain, **kwargs) # noqa: E501 + (data) = self.list_task_ids2_with_http_info(org, project, domain, **kwargs) # noqa: E501 return data - def list_active_launch_plans_with_http_info(self, project, domain, **kwargs): # noqa: E501 - """List active versions of :ref:`ref_flyteidl.admin.LaunchPlan`. # noqa: E501 + def list_task_ids2_with_http_info(self, org, project, domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of task objects. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_active_launch_plans_with_http_info(project, domain, async_req=True) + >>> thread = api.list_task_ids2_with_http_info(org, project, domain, async_req=True) >>> result = thread.get() :param async_req bool - :param str project: Name of the project that contains the identifiers. +required. (required) - :param str domain: Name of the domain the identifiers belongs to within the project. +required. (required) + :param str org: Optional, org key applied to the resource. (required) + :param str project: Name of the project that contains the identifiers. +required (required) + :param str domain: Name of the domain the identifiers belongs to within the project. +required (required) :param int limit: Indicates the number of resources to be returned. +required. :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminLaunchPlanList + :param str filters: Indicates a list of filters passed as string. +optional. + :return: AdminNamedEntityIdentifierList If the method is called asynchronously, returns the request thread. """ - all_params = ['project', 'domain', 'limit', 'token', 'sort_by_key', 'sort_by_direction'] # noqa: E501 + all_params = ['org', 'project', 'domain', 'limit', 'token', 'sort_by_key', 'sort_by_direction', 'filters'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -3177,22 +9096,28 @@ def list_active_launch_plans_with_http_info(self, project, domain, **kwargs): # if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_active_launch_plans" % key + " to method list_task_ids2" % key ) params[key] = val del params['kwargs'] + # verify the required parameter 'org' is set + if ('org' not in params or + params['org'] is None): + raise ValueError("Missing the required parameter `org` when calling `list_task_ids2`") # noqa: E501 # verify the required parameter 'project' is set if ('project' not in params or params['project'] is None): - raise ValueError("Missing the required parameter `project` when calling `list_active_launch_plans`") # noqa: E501 + raise ValueError("Missing the required parameter `project` when calling `list_task_ids2`") # noqa: E501 # verify the required parameter 'domain' is set if ('domain' not in params or params['domain'] is None): - raise ValueError("Missing the required parameter `domain` when calling `list_active_launch_plans`") # noqa: E501 + raise ValueError("Missing the required parameter `domain` when calling `list_task_ids2`") # noqa: E501 collection_formats = {} path_params = {} + if 'org' in params: + path_params['org'] = params['org'] # noqa: E501 if 'project' in params: path_params['project'] = params['project'] # noqa: E501 if 'domain' in params: @@ -3207,6 +9132,8 @@ def list_active_launch_plans_with_http_info(self, project, domain, **kwargs): # query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 if 'sort_by_direction' in params: query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 + if 'filters' in params: + query_params.append(('filters', params['filters'])) # noqa: E501 header_params = {} @@ -3226,14 +9153,14 @@ def list_active_launch_plans_with_http_info(self, project, domain, **kwargs): # auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/active_launch_plans/{project}/{domain}', 'GET', + '/api/v1/tasks/org/{org}/{project}/{domain}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminLaunchPlanList', # noqa: E501 + response_type='AdminNamedEntityIdentifierList', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -3241,59 +9168,59 @@ def list_active_launch_plans_with_http_info(self, project, domain, **kwargs): # _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_description_entities(self, resource_type, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. # noqa: E501 + def list_tasks(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_description_entities(resource_type, id_project, id_domain, id_name, async_req=True) + >>> thread = api.list_tasks(id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str resource_type: Identifies the specific type of resource that this identifier corresponds to. (required) :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) + :param str id_org: Optional, org key applied to the resource. :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminDescriptionEntityList + :return: AdminTaskList If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_description_entities_with_http_info(resource_type, id_project, id_domain, id_name, **kwargs) # noqa: E501 + return self.list_tasks_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 else: - (data) = self.list_description_entities_with_http_info(resource_type, id_project, id_domain, id_name, **kwargs) # noqa: E501 + (data) = self.list_tasks_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 return data - def list_description_entities_with_http_info(self, resource_type, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. # noqa: E501 + def list_tasks_with_http_info(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_description_entities_with_http_info(resource_type, id_project, id_domain, id_name, async_req=True) + >>> thread = api.list_tasks_with_http_info(id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str resource_type: Identifies the specific type of resource that this identifier corresponds to. (required) :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) + :param str id_org: Optional, org key applied to the resource. :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminDescriptionEntityList + :return: AdminTaskList If the method is called asynchronously, returns the request thread. """ - all_params = ['resource_type', 'id_project', 'id_domain', 'id_name', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 + all_params = ['id_project', 'id_domain', 'id_name', 'id_org', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -3304,32 +9231,26 @@ def list_description_entities_with_http_info(self, resource_type, id_project, id if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_description_entities" % key + " to method list_tasks" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'resource_type' is set - if ('resource_type' not in params or - params['resource_type'] is None): - raise ValueError("Missing the required parameter `resource_type` when calling `list_description_entities`") # noqa: E501 # verify the required parameter 'id_project' is set if ('id_project' not in params or params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `list_description_entities`") # noqa: E501 + raise ValueError("Missing the required parameter `id_project` when calling `list_tasks`") # noqa: E501 # verify the required parameter 'id_domain' is set if ('id_domain' not in params or params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `list_description_entities`") # noqa: E501 + raise ValueError("Missing the required parameter `id_domain` when calling `list_tasks`") # noqa: E501 # verify the required parameter 'id_name' is set if ('id_name' not in params or params['id_name'] is None): - raise ValueError("Missing the required parameter `id_name` when calling `list_description_entities`") # noqa: E501 + raise ValueError("Missing the required parameter `id_name` when calling `list_tasks`") # noqa: E501 collection_formats = {} path_params = {} - if 'resource_type' in params: - path_params['resource_type'] = params['resource_type'] # noqa: E501 if 'id_project' in params: path_params['id.project'] = params['id_project'] # noqa: E501 if 'id_domain' in params: @@ -3338,6 +9259,8 @@ def list_description_entities_with_http_info(self, resource_type, id_project, id path_params['id.name'] = params['id_name'] # noqa: E501 query_params = [] + if 'id_org' in params: + query_params.append(('id.org', params['id_org'])) # noqa: E501 if 'limit' in params: query_params.append(('limit', params['limit'])) # noqa: E501 if 'token' in params: @@ -3367,14 +9290,14 @@ def list_description_entities_with_http_info(self, resource_type, id_project, id auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/description_entities/{resource_type}/{id.project}/{id.domain}/{id.name}', 'GET', + '/api/v1/tasks/{id.project}/{id.domain}/{id.name}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminDescriptionEntityList', # noqa: E501 + response_type='AdminTaskList', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -3382,59 +9305,59 @@ def list_description_entities_with_http_info(self, resource_type, id_project, id _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_description_entities2(self, resource_type, id_project, id_domain, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. # noqa: E501 + def list_tasks2(self, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_description_entities2(resource_type, id_project, id_domain, async_req=True) + >>> thread = api.list_tasks2(id_org, id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str resource_type: Identifies the specific type of resource that this identifier corresponds to. (required) + :param str id_org: Optional, org key applied to the resource. (required) :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminDescriptionEntityList + :return: AdminTaskList If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_description_entities2_with_http_info(resource_type, id_project, id_domain, **kwargs) # noqa: E501 + return self.list_tasks2_with_http_info(id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 else: - (data) = self.list_description_entities2_with_http_info(resource_type, id_project, id_domain, **kwargs) # noqa: E501 + (data) = self.list_tasks2_with_http_info(id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 return data - def list_description_entities2_with_http_info(self, resource_type, id_project, id_domain, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. # noqa: E501 + def list_tasks2_with_http_info(self, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_description_entities2_with_http_info(resource_type, id_project, id_domain, async_req=True) + >>> thread = api.list_tasks2_with_http_info(id_org, id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str resource_type: Identifies the specific type of resource that this identifier corresponds to. (required) + :param str id_org: Optional, org key applied to the resource. (required) :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminDescriptionEntityList + :return: AdminTaskList If the method is called asynchronously, returns the request thread. """ - all_params = ['resource_type', 'id_project', 'id_domain', 'id_name', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 + all_params = ['id_org', 'id_project', 'id_domain', 'id_name', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -3445,36 +9368,40 @@ def list_description_entities2_with_http_info(self, resource_type, id_project, i if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_description_entities2" % key + " to method list_tasks2" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'resource_type' is set - if ('resource_type' not in params or - params['resource_type'] is None): - raise ValueError("Missing the required parameter `resource_type` when calling `list_description_entities2`") # noqa: E501 + # verify the required parameter 'id_org' is set + if ('id_org' not in params or + params['id_org'] is None): + raise ValueError("Missing the required parameter `id_org` when calling `list_tasks2`") # noqa: E501 # verify the required parameter 'id_project' is set if ('id_project' not in params or params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `list_description_entities2`") # noqa: E501 + raise ValueError("Missing the required parameter `id_project` when calling `list_tasks2`") # noqa: E501 # verify the required parameter 'id_domain' is set if ('id_domain' not in params or params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `list_description_entities2`") # noqa: E501 + raise ValueError("Missing the required parameter `id_domain` when calling `list_tasks2`") # noqa: E501 + # verify the required parameter 'id_name' is set + if ('id_name' not in params or + params['id_name'] is None): + raise ValueError("Missing the required parameter `id_name` when calling `list_tasks2`") # noqa: E501 collection_formats = {} path_params = {} - if 'resource_type' in params: - path_params['resource_type'] = params['resource_type'] # noqa: E501 + if 'id_org' in params: + path_params['id.org'] = params['id_org'] # noqa: E501 if 'id_project' in params: path_params['id.project'] = params['id_project'] # noqa: E501 if 'id_domain' in params: path_params['id.domain'] = params['id_domain'] # noqa: E501 + if 'id_name' in params: + path_params['id.name'] = params['id_name'] # noqa: E501 query_params = [] - if 'id_name' in params: - query_params.append(('id.name', params['id_name'])) # noqa: E501 if 'limit' in params: query_params.append(('limit', params['limit'])) # noqa: E501 if 'token' in params: @@ -3504,14 +9431,14 @@ def list_description_entities2_with_http_info(self, resource_type, id_project, i auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/description_entities/{resource_type}/{id.project}/{id.domain}', 'GET', + '/api/v1/tasks/org/{id.org}/{id.project}/{id.domain}/{id.name}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminDescriptionEntityList', # noqa: E501 + response_type='AdminTaskList', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -3519,57 +9446,59 @@ def list_description_entities2_with_http_info(self, resource_type, id_project, i _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_executions(self, id_project, id_domain, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 + def list_tasks3(self, id_project, id_domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_executions(id_project, id_domain, async_req=True) + >>> thread = api.list_tasks3(id_project, id_domain, async_req=True) >>> result = thread.get() :param async_req bool :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. + :param str id_org: Optional, org key applied to the resource. :param int limit: Indicates the number of resources to be returned. +required. :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminExecutionList + :return: AdminTaskList If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_executions_with_http_info(id_project, id_domain, **kwargs) # noqa: E501 + return self.list_tasks3_with_http_info(id_project, id_domain, **kwargs) # noqa: E501 else: - (data) = self.list_executions_with_http_info(id_project, id_domain, **kwargs) # noqa: E501 + (data) = self.list_tasks3_with_http_info(id_project, id_domain, **kwargs) # noqa: E501 return data - def list_executions_with_http_info(self, id_project, id_domain, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 + def list_tasks3_with_http_info(self, id_project, id_domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_executions_with_http_info(id_project, id_domain, async_req=True) + >>> thread = api.list_tasks3_with_http_info(id_project, id_domain, async_req=True) >>> result = thread.get() :param async_req bool :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. + :param str id_org: Optional, org key applied to the resource. :param int limit: Indicates the number of resources to be returned. +required. :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminExecutionList + :return: AdminTaskList If the method is called asynchronously, returns the request thread. """ - all_params = ['id_project', 'id_domain', 'id_name', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 + all_params = ['id_project', 'id_domain', 'id_name', 'id_org', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -3580,18 +9509,18 @@ def list_executions_with_http_info(self, id_project, id_domain, **kwargs): # no if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_executions" % key + " to method list_tasks3" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'id_project' is set if ('id_project' not in params or params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `list_executions`") # noqa: E501 + raise ValueError("Missing the required parameter `id_project` when calling `list_tasks3`") # noqa: E501 # verify the required parameter 'id_domain' is set if ('id_domain' not in params or params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `list_executions`") # noqa: E501 + raise ValueError("Missing the required parameter `id_domain` when calling `list_tasks3`") # noqa: E501 collection_formats = {} @@ -3604,6 +9533,8 @@ def list_executions_with_http_info(self, id_project, id_domain, **kwargs): # no query_params = [] if 'id_name' in params: query_params.append(('id.name', params['id_name'])) # noqa: E501 + if 'id_org' in params: + query_params.append(('id.org', params['id_org'])) # noqa: E501 if 'limit' in params: query_params.append(('limit', params['limit'])) # noqa: E501 if 'token' in params: @@ -3633,14 +9564,14 @@ def list_executions_with_http_info(self, id_project, id_domain, **kwargs): # no auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/executions/{id.project}/{id.domain}', 'GET', + '/api/v1/tasks/{id.project}/{id.domain}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminExecutionList', # noqa: E501 + response_type='AdminTaskList', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -3648,55 +9579,59 @@ def list_executions_with_http_info(self, id_project, id_domain, **kwargs): # no _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_launch_plan_ids(self, project, domain, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of launch plan objects. # noqa: E501 + def list_tasks4(self, id_org, id_project, id_domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_launch_plan_ids(project, domain, async_req=True) + >>> thread = api.list_tasks4(id_org, id_project, id_domain, async_req=True) >>> result = thread.get() :param async_req bool - :param str project: Name of the project that contains the identifiers. +required (required) - :param str domain: Name of the domain the identifiers belongs to within the project. +required (required) + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :param str filters: Indicates a list of filters passed as string. +optional. - :return: AdminNamedEntityIdentifierList + :return: AdminTaskList If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_launch_plan_ids_with_http_info(project, domain, **kwargs) # noqa: E501 + return self.list_tasks4_with_http_info(id_org, id_project, id_domain, **kwargs) # noqa: E501 else: - (data) = self.list_launch_plan_ids_with_http_info(project, domain, **kwargs) # noqa: E501 + (data) = self.list_tasks4_with_http_info(id_org, id_project, id_domain, **kwargs) # noqa: E501 return data - def list_launch_plan_ids_with_http_info(self, project, domain, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of launch plan objects. # noqa: E501 + def list_tasks4_with_http_info(self, id_org, id_project, id_domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_launch_plan_ids_with_http_info(project, domain, async_req=True) + >>> thread = api.list_tasks4_with_http_info(id_org, id_project, id_domain, async_req=True) >>> result = thread.get() :param async_req bool - :param str project: Name of the project that contains the identifiers. +required (required) - :param str domain: Name of the domain the identifiers belongs to within the project. +required (required) + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :param str filters: Indicates a list of filters passed as string. +optional. - :return: AdminNamedEntityIdentifierList + :return: AdminTaskList If the method is called asynchronously, returns the request thread. """ - all_params = ['project', 'domain', 'limit', 'token', 'sort_by_key', 'sort_by_direction', 'filters'] # noqa: E501 + all_params = ['id_org', 'id_project', 'id_domain', 'id_name', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -3707,38 +9642,46 @@ def list_launch_plan_ids_with_http_info(self, project, domain, **kwargs): # noq if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_launch_plan_ids" % key + " to method list_tasks4" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'project' is set - if ('project' not in params or - params['project'] is None): - raise ValueError("Missing the required parameter `project` when calling `list_launch_plan_ids`") # noqa: E501 - # verify the required parameter 'domain' is set - if ('domain' not in params or - params['domain'] is None): - raise ValueError("Missing the required parameter `domain` when calling `list_launch_plan_ids`") # noqa: E501 + # verify the required parameter 'id_org' is set + if ('id_org' not in params or + params['id_org'] is None): + raise ValueError("Missing the required parameter `id_org` when calling `list_tasks4`") # noqa: E501 + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `list_tasks4`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `list_tasks4`") # noqa: E501 collection_formats = {} path_params = {} - if 'project' in params: - path_params['project'] = params['project'] # noqa: E501 - if 'domain' in params: - path_params['domain'] = params['domain'] # noqa: E501 + if 'id_org' in params: + path_params['id.org'] = params['id_org'] # noqa: E501 + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 query_params = [] + if 'id_name' in params: + query_params.append(('id.name', params['id_name'])) # noqa: E501 if 'limit' in params: query_params.append(('limit', params['limit'])) # noqa: E501 if 'token' in params: query_params.append(('token', params['token'])) # noqa: E501 + if 'filters' in params: + query_params.append(('filters', params['filters'])) # noqa: E501 if 'sort_by_key' in params: query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 if 'sort_by_direction' in params: query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 - if 'filters' in params: - query_params.append(('filters', params['filters'])) # noqa: E501 header_params = {} @@ -3758,14 +9701,14 @@ def list_launch_plan_ids_with_http_info(self, project, domain, **kwargs): # noq auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/launch_plan_ids/{project}/{domain}', 'GET', + '/api/v1/tasks/org/{id.org}/{id.project}/{id.domain}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminNamedEntityIdentifierList', # noqa: E501 + response_type='AdminTaskList', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -3773,57 +9716,57 @@ def list_launch_plan_ids_with_http_info(self, project, domain, **kwargs): # noq _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_launch_plans(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. # noqa: E501 + def list_workflow_ids(self, project, domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of workflow objects. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_launch_plans(id_project, id_domain, id_name, async_req=True) + >>> thread = api.list_workflow_ids(project, domain, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) + :param str project: Name of the project that contains the identifiers. +required (required) + :param str domain: Name of the domain the identifiers belongs to within the project. +required (required) :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. - :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminLaunchPlanList + :param str filters: Indicates a list of filters passed as string. +optional. + :param str org: Optional, org key applied to the resource. + :return: AdminNamedEntityIdentifierList If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_launch_plans_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 + return self.list_workflow_ids_with_http_info(project, domain, **kwargs) # noqa: E501 else: - (data) = self.list_launch_plans_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 + (data) = self.list_workflow_ids_with_http_info(project, domain, **kwargs) # noqa: E501 return data - def list_launch_plans_with_http_info(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. # noqa: E501 + def list_workflow_ids_with_http_info(self, project, domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of workflow objects. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_launch_plans_with_http_info(id_project, id_domain, id_name, async_req=True) + >>> thread = api.list_workflow_ids_with_http_info(project, domain, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) + :param str project: Name of the project that contains the identifiers. +required (required) + :param str domain: Name of the domain the identifiers belongs to within the project. +required (required) :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. - :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminLaunchPlanList + :param str filters: Indicates a list of filters passed as string. +optional. + :param str org: Optional, org key applied to the resource. + :return: AdminNamedEntityIdentifierList If the method is called asynchronously, returns the request thread. """ - all_params = ['id_project', 'id_domain', 'id_name', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 + all_params = ['project', 'domain', 'limit', 'token', 'sort_by_key', 'sort_by_direction', 'filters', 'org'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -3834,44 +9777,40 @@ def list_launch_plans_with_http_info(self, id_project, id_domain, id_name, **kwa if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_launch_plans" % key + " to method list_workflow_ids" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'id_project' is set - if ('id_project' not in params or - params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `list_launch_plans`") # noqa: E501 - # verify the required parameter 'id_domain' is set - if ('id_domain' not in params or - params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `list_launch_plans`") # noqa: E501 - # verify the required parameter 'id_name' is set - if ('id_name' not in params or - params['id_name'] is None): - raise ValueError("Missing the required parameter `id_name` when calling `list_launch_plans`") # noqa: E501 + # verify the required parameter 'project' is set + if ('project' not in params or + params['project'] is None): + raise ValueError("Missing the required parameter `project` when calling `list_workflow_ids`") # noqa: E501 + # verify the required parameter 'domain' is set + if ('domain' not in params or + params['domain'] is None): + raise ValueError("Missing the required parameter `domain` when calling `list_workflow_ids`") # noqa: E501 collection_formats = {} path_params = {} - if 'id_project' in params: - path_params['id.project'] = params['id_project'] # noqa: E501 - if 'id_domain' in params: - path_params['id.domain'] = params['id_domain'] # noqa: E501 - if 'id_name' in params: - path_params['id.name'] = params['id_name'] # noqa: E501 + if 'project' in params: + path_params['project'] = params['project'] # noqa: E501 + if 'domain' in params: + path_params['domain'] = params['domain'] # noqa: E501 query_params = [] if 'limit' in params: query_params.append(('limit', params['limit'])) # noqa: E501 if 'token' in params: query_params.append(('token', params['token'])) # noqa: E501 - if 'filters' in params: - query_params.append(('filters', params['filters'])) # noqa: E501 if 'sort_by_key' in params: query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 if 'sort_by_direction' in params: query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 + if 'filters' in params: + query_params.append(('filters', params['filters'])) # noqa: E501 + if 'org' in params: + query_params.append(('org', params['org'])) # noqa: E501 header_params = {} @@ -3891,14 +9830,14 @@ def list_launch_plans_with_http_info(self, id_project, id_domain, id_name, **kwa auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/launch_plans/{id.project}/{id.domain}/{id.name}', 'GET', + '/api/v1/workflow_ids/{project}/{domain}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminLaunchPlanList', # noqa: E501 + response_type='AdminNamedEntityIdentifierList', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -3906,57 +9845,57 @@ def list_launch_plans_with_http_info(self, id_project, id_domain, id_name, **kwa _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_launch_plans2(self, id_project, id_domain, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. # noqa: E501 + def list_workflow_ids2(self, org, project, domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of workflow objects. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_launch_plans2(id_project, id_domain, async_req=True) + >>> thread = api.list_workflow_ids2(org, project, domain, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. + :param str org: Optional, org key applied to the resource. (required) + :param str project: Name of the project that contains the identifiers. +required (required) + :param str domain: Name of the domain the identifiers belongs to within the project. +required (required) :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. - :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminLaunchPlanList + :param str filters: Indicates a list of filters passed as string. +optional. + :return: AdminNamedEntityIdentifierList If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_launch_plans2_with_http_info(id_project, id_domain, **kwargs) # noqa: E501 + return self.list_workflow_ids2_with_http_info(org, project, domain, **kwargs) # noqa: E501 else: - (data) = self.list_launch_plans2_with_http_info(id_project, id_domain, **kwargs) # noqa: E501 + (data) = self.list_workflow_ids2_with_http_info(org, project, domain, **kwargs) # noqa: E501 return data - def list_launch_plans2_with_http_info(self, id_project, id_domain, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. # noqa: E501 + def list_workflow_ids2_with_http_info(self, org, project, domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of workflow objects. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_launch_plans2_with_http_info(id_project, id_domain, async_req=True) + >>> thread = api.list_workflow_ids2_with_http_info(org, project, domain, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. + :param str org: Optional, org key applied to the resource. (required) + :param str project: Name of the project that contains the identifiers. +required (required) + :param str domain: Name of the domain the identifiers belongs to within the project. +required (required) :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. - :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminLaunchPlanList + :param str filters: Indicates a list of filters passed as string. +optional. + :return: AdminNamedEntityIdentifierList If the method is called asynchronously, returns the request thread. """ - all_params = ['id_project', 'id_domain', 'id_name', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 + all_params = ['org', 'project', 'domain', 'limit', 'token', 'sort_by_key', 'sort_by_direction', 'filters'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -3967,40 +9906,44 @@ def list_launch_plans2_with_http_info(self, id_project, id_domain, **kwargs): # if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_launch_plans2" % key + " to method list_workflow_ids2" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'id_project' is set - if ('id_project' not in params or - params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `list_launch_plans2`") # noqa: E501 - # verify the required parameter 'id_domain' is set - if ('id_domain' not in params or - params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `list_launch_plans2`") # noqa: E501 + # verify the required parameter 'org' is set + if ('org' not in params or + params['org'] is None): + raise ValueError("Missing the required parameter `org` when calling `list_workflow_ids2`") # noqa: E501 + # verify the required parameter 'project' is set + if ('project' not in params or + params['project'] is None): + raise ValueError("Missing the required parameter `project` when calling `list_workflow_ids2`") # noqa: E501 + # verify the required parameter 'domain' is set + if ('domain' not in params or + params['domain'] is None): + raise ValueError("Missing the required parameter `domain` when calling `list_workflow_ids2`") # noqa: E501 collection_formats = {} path_params = {} - if 'id_project' in params: - path_params['id.project'] = params['id_project'] # noqa: E501 - if 'id_domain' in params: - path_params['id.domain'] = params['id_domain'] # noqa: E501 + if 'org' in params: + path_params['org'] = params['org'] # noqa: E501 + if 'project' in params: + path_params['project'] = params['project'] # noqa: E501 + if 'domain' in params: + path_params['domain'] = params['domain'] # noqa: E501 query_params = [] - if 'id_name' in params: - query_params.append(('id.name', params['id_name'])) # noqa: E501 if 'limit' in params: query_params.append(('limit', params['limit'])) # noqa: E501 if 'token' in params: query_params.append(('token', params['token'])) # noqa: E501 - if 'filters' in params: - query_params.append(('filters', params['filters'])) # noqa: E501 if 'sort_by_key' in params: query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 if 'sort_by_direction' in params: query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 + if 'filters' in params: + query_params.append(('filters', params['filters'])) # noqa: E501 header_params = {} @@ -4020,14 +9963,14 @@ def list_launch_plans2_with_http_info(self, id_project, id_domain, **kwargs): # auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/launch_plans/{id.project}/{id.domain}', 'GET', + '/api/v1/workflows/org/{org}/{project}/{domain}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminLaunchPlanList', # noqa: E501 + response_type='AdminNamedEntityIdentifierList', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -4035,43 +9978,59 @@ def list_launch_plans2_with_http_info(self, id_project, id_domain, **kwargs): # _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_matchable_attributes(self, **kwargs): # noqa: E501 - """Lists custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a specific resource type. # noqa: E501 + def list_workflows(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_matchable_attributes(async_req=True) + >>> thread = api.list_workflows(id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str resource_type: +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. - :return: AdminListMatchableAttributesResponse + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) + :param str id_org: Optional, org key applied to the resource. + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :return: AdminWorkflowList If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_matchable_attributes_with_http_info(**kwargs) # noqa: E501 + return self.list_workflows_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 else: - (data) = self.list_matchable_attributes_with_http_info(**kwargs) # noqa: E501 + (data) = self.list_workflows_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 return data - def list_matchable_attributes_with_http_info(self, **kwargs): # noqa: E501 - """Lists custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a specific resource type. # noqa: E501 + def list_workflows_with_http_info(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_matchable_attributes_with_http_info(async_req=True) + >>> thread = api.list_workflows_with_http_info(id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str resource_type: +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. - :return: AdminListMatchableAttributesResponse + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) + :param str id_org: Optional, org key applied to the resource. + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :return: AdminWorkflowList If the method is called asynchronously, returns the request thread. """ - all_params = ['resource_type'] # noqa: E501 + all_params = ['id_project', 'id_domain', 'id_name', 'id_org', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -4082,18 +10041,46 @@ def list_matchable_attributes_with_http_info(self, **kwargs): # noqa: E501 if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_matchable_attributes" % key + " to method list_workflows" % key ) params[key] = val del params['kwargs'] + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `list_workflows`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `list_workflows`") # noqa: E501 + # verify the required parameter 'id_name' is set + if ('id_name' not in params or + params['id_name'] is None): + raise ValueError("Missing the required parameter `id_name` when calling `list_workflows`") # noqa: E501 collection_formats = {} path_params = {} + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 + if 'id_name' in params: + path_params['id.name'] = params['id_name'] # noqa: E501 query_params = [] - if 'resource_type' in params: - query_params.append(('resource_type', params['resource_type'])) # noqa: E501 + if 'id_org' in params: + query_params.append(('id.org', params['id_org'])) # noqa: E501 + if 'limit' in params: + query_params.append(('limit', params['limit'])) # noqa: E501 + if 'token' in params: + query_params.append(('token', params['token'])) # noqa: E501 + if 'filters' in params: + query_params.append(('filters', params['filters'])) # noqa: E501 + if 'sort_by_key' in params: + query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 + if 'sort_by_direction' in params: + query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 header_params = {} @@ -4113,14 +10100,14 @@ def list_matchable_attributes_with_http_info(self, **kwargs): # noqa: E501 auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/matchable_attributes', 'GET', + '/api/v1/workflows/{id.project}/{id.domain}/{id.name}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminListMatchableAttributesResponse', # noqa: E501 + response_type='AdminWorkflowList', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -4128,57 +10115,59 @@ def list_matchable_attributes_with_http_info(self, **kwargs): # noqa: E501 _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_named_entities(self, resource_type, project, domain, **kwargs): # noqa: E501 - """Returns a list of :ref:`ref_flyteidl.admin.NamedEntity` objects. # noqa: E501 + def list_workflows2(self, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_named_entities(resource_type, project, domain, async_req=True) + >>> thread = api.list_workflows2(id_org, id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str resource_type: Resource type of the metadata to query. One of Task, Workflow or LaunchPlan. +required (required) - :param str project: Name of the project that contains the identifiers. +required (required) - :param str domain: Name of the domain the identifiers belongs to within the project. (required) - :param int limit: Indicates the number of resources to be returned. - :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :param str filters: Indicates a list of filters passed as string. +optional. - :return: AdminNamedEntityList + :return: AdminWorkflowList If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_named_entities_with_http_info(resource_type, project, domain, **kwargs) # noqa: E501 + return self.list_workflows2_with_http_info(id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 else: - (data) = self.list_named_entities_with_http_info(resource_type, project, domain, **kwargs) # noqa: E501 + (data) = self.list_workflows2_with_http_info(id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 return data - def list_named_entities_with_http_info(self, resource_type, project, domain, **kwargs): # noqa: E501 - """Returns a list of :ref:`ref_flyteidl.admin.NamedEntity` objects. # noqa: E501 + def list_workflows2_with_http_info(self, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_named_entities_with_http_info(resource_type, project, domain, async_req=True) + >>> thread = api.list_workflows2_with_http_info(id_org, id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str resource_type: Resource type of the metadata to query. One of Task, Workflow or LaunchPlan. +required (required) - :param str project: Name of the project that contains the identifiers. +required (required) - :param str domain: Name of the domain the identifiers belongs to within the project. (required) - :param int limit: Indicates the number of resources to be returned. - :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :param str filters: Indicates a list of filters passed as string. +optional. - :return: AdminNamedEntityList + :return: AdminWorkflowList If the method is called asynchronously, returns the request thread. """ - all_params = ['resource_type', 'project', 'domain', 'limit', 'token', 'sort_by_key', 'sort_by_direction', 'filters'] # noqa: E501 + all_params = ['id_org', 'id_project', 'id_domain', 'id_name', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -4189,44 +10178,50 @@ def list_named_entities_with_http_info(self, resource_type, project, domain, **k if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_named_entities" % key + " to method list_workflows2" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'resource_type' is set - if ('resource_type' not in params or - params['resource_type'] is None): - raise ValueError("Missing the required parameter `resource_type` when calling `list_named_entities`") # noqa: E501 - # verify the required parameter 'project' is set - if ('project' not in params or - params['project'] is None): - raise ValueError("Missing the required parameter `project` when calling `list_named_entities`") # noqa: E501 - # verify the required parameter 'domain' is set - if ('domain' not in params or - params['domain'] is None): - raise ValueError("Missing the required parameter `domain` when calling `list_named_entities`") # noqa: E501 + # verify the required parameter 'id_org' is set + if ('id_org' not in params or + params['id_org'] is None): + raise ValueError("Missing the required parameter `id_org` when calling `list_workflows2`") # noqa: E501 + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `list_workflows2`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `list_workflows2`") # noqa: E501 + # verify the required parameter 'id_name' is set + if ('id_name' not in params or + params['id_name'] is None): + raise ValueError("Missing the required parameter `id_name` when calling `list_workflows2`") # noqa: E501 collection_formats = {} path_params = {} - if 'resource_type' in params: - path_params['resource_type'] = params['resource_type'] # noqa: E501 - if 'project' in params: - path_params['project'] = params['project'] # noqa: E501 - if 'domain' in params: - path_params['domain'] = params['domain'] # noqa: E501 + if 'id_org' in params: + path_params['id.org'] = params['id_org'] # noqa: E501 + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 + if 'id_name' in params: + path_params['id.name'] = params['id_name'] # noqa: E501 query_params = [] if 'limit' in params: query_params.append(('limit', params['limit'])) # noqa: E501 if 'token' in params: query_params.append(('token', params['token'])) # noqa: E501 + if 'filters' in params: + query_params.append(('filters', params['filters'])) # noqa: E501 if 'sort_by_key' in params: query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 if 'sort_by_direction' in params: query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 - if 'filters' in params: - query_params.append(('filters', params['filters'])) # noqa: E501 header_params = {} @@ -4246,14 +10241,14 @@ def list_named_entities_with_http_info(self, resource_type, project, domain, **k auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/named_entities/{resource_type}/{project}/{domain}', 'GET', + '/api/v1/workflows/org/{id.org}/{id.project}/{id.domain}/{id.name}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminNamedEntityList', # noqa: E501 + response_type='AdminWorkflowList', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -4261,59 +10256,59 @@ def list_named_entities_with_http_info(self, resource_type, project, domain, **k _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_node_executions(self, workflow_execution_id_project, workflow_execution_id_domain, workflow_execution_id_name, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution`. # noqa: E501 + def list_workflows3(self, id_project, id_domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_node_executions(workflow_execution_id_project, workflow_execution_id_domain, workflow_execution_id_name, async_req=True) + >>> thread = api.list_workflows3(id_project, id_domain, async_req=True) >>> result = thread.get() :param async_req bool - :param str workflow_execution_id_project: Name of the project the resource belongs to. (required) - :param str workflow_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str workflow_execution_id_name: User or system provided value for the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. + :param str id_org: Optional, org key applied to the resource. :param int limit: Indicates the number of resources to be returned. +required. - :param str token: + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :param str unique_parent_id: Unique identifier of the parent node in the execution +optional. - :return: AdminNodeExecutionList + :return: AdminWorkflowList If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_node_executions_with_http_info(workflow_execution_id_project, workflow_execution_id_domain, workflow_execution_id_name, **kwargs) # noqa: E501 + return self.list_workflows3_with_http_info(id_project, id_domain, **kwargs) # noqa: E501 else: - (data) = self.list_node_executions_with_http_info(workflow_execution_id_project, workflow_execution_id_domain, workflow_execution_id_name, **kwargs) # noqa: E501 + (data) = self.list_workflows3_with_http_info(id_project, id_domain, **kwargs) # noqa: E501 return data - def list_node_executions_with_http_info(self, workflow_execution_id_project, workflow_execution_id_domain, workflow_execution_id_name, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution`. # noqa: E501 + def list_workflows3_with_http_info(self, id_project, id_domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_node_executions_with_http_info(workflow_execution_id_project, workflow_execution_id_domain, workflow_execution_id_name, async_req=True) + >>> thread = api.list_workflows3_with_http_info(id_project, id_domain, async_req=True) >>> result = thread.get() :param async_req bool - :param str workflow_execution_id_project: Name of the project the resource belongs to. (required) - :param str workflow_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str workflow_execution_id_name: User or system provided value for the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. + :param str id_org: Optional, org key applied to the resource. :param int limit: Indicates the number of resources to be returned. +required. - :param str token: + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :param str unique_parent_id: Unique identifier of the parent node in the execution +optional. - :return: AdminNodeExecutionList + :return: AdminWorkflowList If the method is called asynchronously, returns the request thread. """ - all_params = ['workflow_execution_id_project', 'workflow_execution_id_domain', 'workflow_execution_id_name', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction', 'unique_parent_id'] # noqa: E501 + all_params = ['id_project', 'id_domain', 'id_name', 'id_org', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -4324,34 +10319,32 @@ def list_node_executions_with_http_info(self, workflow_execution_id_project, wor if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_node_executions" % key + " to method list_workflows3" % key ) params[key] = val - del params['kwargs'] - # verify the required parameter 'workflow_execution_id_project' is set - if ('workflow_execution_id_project' not in params or - params['workflow_execution_id_project'] is None): - raise ValueError("Missing the required parameter `workflow_execution_id_project` when calling `list_node_executions`") # noqa: E501 - # verify the required parameter 'workflow_execution_id_domain' is set - if ('workflow_execution_id_domain' not in params or - params['workflow_execution_id_domain'] is None): - raise ValueError("Missing the required parameter `workflow_execution_id_domain` when calling `list_node_executions`") # noqa: E501 - # verify the required parameter 'workflow_execution_id_name' is set - if ('workflow_execution_id_name' not in params or - params['workflow_execution_id_name'] is None): - raise ValueError("Missing the required parameter `workflow_execution_id_name` when calling `list_node_executions`") # noqa: E501 + del params['kwargs'] + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `list_workflows3`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `list_workflows3`") # noqa: E501 collection_formats = {} path_params = {} - if 'workflow_execution_id_project' in params: - path_params['workflow_execution_id.project'] = params['workflow_execution_id_project'] # noqa: E501 - if 'workflow_execution_id_domain' in params: - path_params['workflow_execution_id.domain'] = params['workflow_execution_id_domain'] # noqa: E501 - if 'workflow_execution_id_name' in params: - path_params['workflow_execution_id.name'] = params['workflow_execution_id_name'] # noqa: E501 + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 query_params = [] + if 'id_name' in params: + query_params.append(('id.name', params['id_name'])) # noqa: E501 + if 'id_org' in params: + query_params.append(('id.org', params['id_org'])) # noqa: E501 if 'limit' in params: query_params.append(('limit', params['limit'])) # noqa: E501 if 'token' in params: @@ -4362,8 +10355,6 @@ def list_node_executions_with_http_info(self, workflow_execution_id_project, wor query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 if 'sort_by_direction' in params: query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 - if 'unique_parent_id' in params: - query_params.append(('unique_parent_id', params['unique_parent_id'])) # noqa: E501 header_params = {} @@ -4383,14 +10374,14 @@ def list_node_executions_with_http_info(self, workflow_execution_id_project, wor auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/node_executions/{workflow_execution_id.project}/{workflow_execution_id.domain}/{workflow_execution_id.name}', 'GET', + '/api/v1/workflows/{id.project}/{id.domain}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminNodeExecutionList', # noqa: E501 + response_type='AdminWorkflowList', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -4398,71 +10389,59 @@ def list_node_executions_with_http_info(self, workflow_execution_id_project, wor _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_node_executions_for_task(self, task_execution_id_node_execution_id_execution_id_project, task_execution_id_node_execution_id_execution_id_domain, task_execution_id_node_execution_id_execution_id_name, task_execution_id_node_execution_id_node_id, task_execution_id_task_id_project, task_execution_id_task_id_domain, task_execution_id_task_id_name, task_execution_id_task_id_version, task_execution_id_retry_attempt, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution` launched by the reference :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 + def list_workflows4(self, id_org, id_project, id_domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_node_executions_for_task(task_execution_id_node_execution_id_execution_id_project, task_execution_id_node_execution_id_execution_id_domain, task_execution_id_node_execution_id_execution_id_name, task_execution_id_node_execution_id_node_id, task_execution_id_task_id_project, task_execution_id_task_id_domain, task_execution_id_task_id_name, task_execution_id_task_id_version, task_execution_id_retry_attempt, async_req=True) + >>> thread = api.list_workflows4(id_org, id_project, id_domain, async_req=True) >>> result = thread.get() :param async_req bool - :param str task_execution_id_node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) - :param str task_execution_id_node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str task_execution_id_node_execution_id_execution_id_name: User or system provided value for the resource. (required) - :param str task_execution_id_node_execution_id_node_id: (required) - :param str task_execution_id_task_id_project: Name of the project the resource belongs to. (required) - :param str task_execution_id_task_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str task_execution_id_task_id_name: User provided value for the resource. (required) - :param str task_execution_id_task_id_version: Specific version of the resource. (required) - :param int task_execution_id_retry_attempt: (required) - :param str task_execution_id_task_id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, the, server-provided token can be used to fetch the next page in a query. +optional. + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminNodeExecutionList + :return: AdminWorkflowList If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_node_executions_for_task_with_http_info(task_execution_id_node_execution_id_execution_id_project, task_execution_id_node_execution_id_execution_id_domain, task_execution_id_node_execution_id_execution_id_name, task_execution_id_node_execution_id_node_id, task_execution_id_task_id_project, task_execution_id_task_id_domain, task_execution_id_task_id_name, task_execution_id_task_id_version, task_execution_id_retry_attempt, **kwargs) # noqa: E501 + return self.list_workflows4_with_http_info(id_org, id_project, id_domain, **kwargs) # noqa: E501 else: - (data) = self.list_node_executions_for_task_with_http_info(task_execution_id_node_execution_id_execution_id_project, task_execution_id_node_execution_id_execution_id_domain, task_execution_id_node_execution_id_execution_id_name, task_execution_id_node_execution_id_node_id, task_execution_id_task_id_project, task_execution_id_task_id_domain, task_execution_id_task_id_name, task_execution_id_task_id_version, task_execution_id_retry_attempt, **kwargs) # noqa: E501 + (data) = self.list_workflows4_with_http_info(id_org, id_project, id_domain, **kwargs) # noqa: E501 return data - def list_node_executions_for_task_with_http_info(self, task_execution_id_node_execution_id_execution_id_project, task_execution_id_node_execution_id_execution_id_domain, task_execution_id_node_execution_id_execution_id_name, task_execution_id_node_execution_id_node_id, task_execution_id_task_id_project, task_execution_id_task_id_domain, task_execution_id_task_id_name, task_execution_id_task_id_version, task_execution_id_retry_attempt, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution` launched by the reference :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 + def list_workflows4_with_http_info(self, id_org, id_project, id_domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_node_executions_for_task_with_http_info(task_execution_id_node_execution_id_execution_id_project, task_execution_id_node_execution_id_execution_id_domain, task_execution_id_node_execution_id_execution_id_name, task_execution_id_node_execution_id_node_id, task_execution_id_task_id_project, task_execution_id_task_id_domain, task_execution_id_task_id_name, task_execution_id_task_id_version, task_execution_id_retry_attempt, async_req=True) + >>> thread = api.list_workflows4_with_http_info(id_org, id_project, id_domain, async_req=True) >>> result = thread.get() :param async_req bool - :param str task_execution_id_node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) - :param str task_execution_id_node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str task_execution_id_node_execution_id_execution_id_name: User or system provided value for the resource. (required) - :param str task_execution_id_node_execution_id_node_id: (required) - :param str task_execution_id_task_id_project: Name of the project the resource belongs to. (required) - :param str task_execution_id_task_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str task_execution_id_task_id_name: User provided value for the resource. (required) - :param str task_execution_id_task_id_version: Specific version of the resource. (required) - :param int task_execution_id_retry_attempt: (required) - :param str task_execution_id_task_id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, the, server-provided token can be used to fetch the next page in a query. +optional. + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminNodeExecutionList + :return: AdminWorkflowList If the method is called asynchronously, returns the request thread. """ - all_params = ['task_execution_id_node_execution_id_execution_id_project', 'task_execution_id_node_execution_id_execution_id_domain', 'task_execution_id_node_execution_id_execution_id_name', 'task_execution_id_node_execution_id_node_id', 'task_execution_id_task_id_project', 'task_execution_id_task_id_domain', 'task_execution_id_task_id_name', 'task_execution_id_task_id_version', 'task_execution_id_retry_attempt', 'task_execution_id_task_id_resource_type', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 + all_params = ['id_org', 'id_project', 'id_domain', 'id_name', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -4473,72 +10452,36 @@ def list_node_executions_for_task_with_http_info(self, task_execution_id_node_ex if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_node_executions_for_task" % key + " to method list_workflows4" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'task_execution_id_node_execution_id_execution_id_project' is set - if ('task_execution_id_node_execution_id_execution_id_project' not in params or - params['task_execution_id_node_execution_id_execution_id_project'] is None): - raise ValueError("Missing the required parameter `task_execution_id_node_execution_id_execution_id_project` when calling `list_node_executions_for_task`") # noqa: E501 - # verify the required parameter 'task_execution_id_node_execution_id_execution_id_domain' is set - if ('task_execution_id_node_execution_id_execution_id_domain' not in params or - params['task_execution_id_node_execution_id_execution_id_domain'] is None): - raise ValueError("Missing the required parameter `task_execution_id_node_execution_id_execution_id_domain` when calling `list_node_executions_for_task`") # noqa: E501 - # verify the required parameter 'task_execution_id_node_execution_id_execution_id_name' is set - if ('task_execution_id_node_execution_id_execution_id_name' not in params or - params['task_execution_id_node_execution_id_execution_id_name'] is None): - raise ValueError("Missing the required parameter `task_execution_id_node_execution_id_execution_id_name` when calling `list_node_executions_for_task`") # noqa: E501 - # verify the required parameter 'task_execution_id_node_execution_id_node_id' is set - if ('task_execution_id_node_execution_id_node_id' not in params or - params['task_execution_id_node_execution_id_node_id'] is None): - raise ValueError("Missing the required parameter `task_execution_id_node_execution_id_node_id` when calling `list_node_executions_for_task`") # noqa: E501 - # verify the required parameter 'task_execution_id_task_id_project' is set - if ('task_execution_id_task_id_project' not in params or - params['task_execution_id_task_id_project'] is None): - raise ValueError("Missing the required parameter `task_execution_id_task_id_project` when calling `list_node_executions_for_task`") # noqa: E501 - # verify the required parameter 'task_execution_id_task_id_domain' is set - if ('task_execution_id_task_id_domain' not in params or - params['task_execution_id_task_id_domain'] is None): - raise ValueError("Missing the required parameter `task_execution_id_task_id_domain` when calling `list_node_executions_for_task`") # noqa: E501 - # verify the required parameter 'task_execution_id_task_id_name' is set - if ('task_execution_id_task_id_name' not in params or - params['task_execution_id_task_id_name'] is None): - raise ValueError("Missing the required parameter `task_execution_id_task_id_name` when calling `list_node_executions_for_task`") # noqa: E501 - # verify the required parameter 'task_execution_id_task_id_version' is set - if ('task_execution_id_task_id_version' not in params or - params['task_execution_id_task_id_version'] is None): - raise ValueError("Missing the required parameter `task_execution_id_task_id_version` when calling `list_node_executions_for_task`") # noqa: E501 - # verify the required parameter 'task_execution_id_retry_attempt' is set - if ('task_execution_id_retry_attempt' not in params or - params['task_execution_id_retry_attempt'] is None): - raise ValueError("Missing the required parameter `task_execution_id_retry_attempt` when calling `list_node_executions_for_task`") # noqa: E501 + # verify the required parameter 'id_org' is set + if ('id_org' not in params or + params['id_org'] is None): + raise ValueError("Missing the required parameter `id_org` when calling `list_workflows4`") # noqa: E501 + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `list_workflows4`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `list_workflows4`") # noqa: E501 collection_formats = {} path_params = {} - if 'task_execution_id_node_execution_id_execution_id_project' in params: - path_params['task_execution_id.node_execution_id.execution_id.project'] = params['task_execution_id_node_execution_id_execution_id_project'] # noqa: E501 - if 'task_execution_id_node_execution_id_execution_id_domain' in params: - path_params['task_execution_id.node_execution_id.execution_id.domain'] = params['task_execution_id_node_execution_id_execution_id_domain'] # noqa: E501 - if 'task_execution_id_node_execution_id_execution_id_name' in params: - path_params['task_execution_id.node_execution_id.execution_id.name'] = params['task_execution_id_node_execution_id_execution_id_name'] # noqa: E501 - if 'task_execution_id_node_execution_id_node_id' in params: - path_params['task_execution_id.node_execution_id.node_id'] = params['task_execution_id_node_execution_id_node_id'] # noqa: E501 - if 'task_execution_id_task_id_project' in params: - path_params['task_execution_id.task_id.project'] = params['task_execution_id_task_id_project'] # noqa: E501 - if 'task_execution_id_task_id_domain' in params: - path_params['task_execution_id.task_id.domain'] = params['task_execution_id_task_id_domain'] # noqa: E501 - if 'task_execution_id_task_id_name' in params: - path_params['task_execution_id.task_id.name'] = params['task_execution_id_task_id_name'] # noqa: E501 - if 'task_execution_id_task_id_version' in params: - path_params['task_execution_id.task_id.version'] = params['task_execution_id_task_id_version'] # noqa: E501 - if 'task_execution_id_retry_attempt' in params: - path_params['task_execution_id.retry_attempt'] = params['task_execution_id_retry_attempt'] # noqa: E501 + if 'id_org' in params: + path_params['id.org'] = params['id_org'] # noqa: E501 + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 query_params = [] - if 'task_execution_id_task_id_resource_type' in params: - query_params.append(('task_execution_id.task_id.resource_type', params['task_execution_id_task_id_resource_type'])) # noqa: E501 + if 'id_name' in params: + query_params.append(('id.name', params['id_name'])) # noqa: E501 if 'limit' in params: query_params.append(('limit', params['limit'])) # noqa: E501 if 'token' in params: @@ -4568,14 +10511,14 @@ def list_node_executions_for_task_with_http_info(self, task_execution_id_node_ex auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/children/task_executions/{task_execution_id.node_execution_id.execution_id.project}/{task_execution_id.node_execution_id.execution_id.domain}/{task_execution_id.node_execution_id.execution_id.name}/{task_execution_id.node_execution_id.node_id}/{task_execution_id.task_id.project}/{task_execution_id.task_id.domain}/{task_execution_id.task_id.name}/{task_execution_id.task_id.version}/{task_execution_id.retry_attempt}', 'GET', + '/api/v1/workflows/org/{id.org}/{id.project}/{id.domain}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminNodeExecutionList', # noqa: E501 + response_type='AdminWorkflowList', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -4583,51 +10526,43 @@ def list_node_executions_for_task_with_http_info(self, task_execution_id_node_ex _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_projects(self, **kwargs): # noqa: E501 - """Fetches a list of :ref:`ref_flyteidl.admin.Project` # noqa: E501 + def recover_execution(self, body, **kwargs): # noqa: E501 + """Recreates a previously-run workflow execution that will only start executing from the last known failure point. In Recover mode, users cannot change any input parameters or update the version of the execution. This is extremely useful to recover from system errors and byzantine faults like - Loss of K8s cluster, bugs in platform or instability, machine failures, downstream system failures (downstream services), or simply to recover executions that failed because of retry exhaustion and should complete if tried again. See :ref:`ref_flyteidl.admin.ExecutionRecoverRequest` for more details. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_projects(async_req=True) + >>> thread = api.recover_execution(body, async_req=True) >>> result = thread.get() :param async_req bool - :param int limit: Indicates the number of projects to be returned. +required. - :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. - :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. - :param str sort_by_key: Indicates an attribute to sort the response values. +required. - :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminProjects + :param AdminExecutionRecoverRequest body: (required) + :return: AdminExecutionCreateResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_projects_with_http_info(**kwargs) # noqa: E501 + return self.recover_execution_with_http_info(body, **kwargs) # noqa: E501 else: - (data) = self.list_projects_with_http_info(**kwargs) # noqa: E501 + (data) = self.recover_execution_with_http_info(body, **kwargs) # noqa: E501 return data - def list_projects_with_http_info(self, **kwargs): # noqa: E501 - """Fetches a list of :ref:`ref_flyteidl.admin.Project` # noqa: E501 + def recover_execution_with_http_info(self, body, **kwargs): # noqa: E501 + """Recreates a previously-run workflow execution that will only start executing from the last known failure point. In Recover mode, users cannot change any input parameters or update the version of the execution. This is extremely useful to recover from system errors and byzantine faults like - Loss of K8s cluster, bugs in platform or instability, machine failures, downstream system failures (downstream services), or simply to recover executions that failed because of retry exhaustion and should complete if tried again. See :ref:`ref_flyteidl.admin.ExecutionRecoverRequest` for more details. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_projects_with_http_info(async_req=True) + >>> thread = api.recover_execution_with_http_info(body, async_req=True) >>> result = thread.get() :param async_req bool - :param int limit: Indicates the number of projects to be returned. +required. - :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. - :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. - :param str sort_by_key: Indicates an attribute to sort the response values. +required. - :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminProjects + :param AdminExecutionRecoverRequest body: (required) + :return: AdminExecutionCreateResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 + all_params = ['body'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -4638,26 +10573,20 @@ def list_projects_with_http_info(self, **kwargs): # noqa: E501 if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_projects" % key + " to method recover_execution" % key ) params[key] = val del params['kwargs'] + # verify the required parameter 'body' is set + if ('body' not in params or + params['body'] is None): + raise ValueError("Missing the required parameter `body` when calling `recover_execution`") # noqa: E501 collection_formats = {} path_params = {} query_params = [] - if 'limit' in params: - query_params.append(('limit', params['limit'])) # noqa: E501 - if 'token' in params: - query_params.append(('token', params['token'])) # noqa: E501 - if 'filters' in params: - query_params.append(('filters', params['filters'])) # noqa: E501 - if 'sort_by_key' in params: - query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 - if 'sort_by_direction' in params: - query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 header_params = {} @@ -4665,6 +10594,8 @@ def list_projects_with_http_info(self, **kwargs): # noqa: E501 local_var_files = {} body_params = None + if 'body' in params: + body_params = params['body'] # HTTP header `Accept` header_params['Accept'] = self.api_client.select_header_accept( ['application/json']) # noqa: E501 @@ -4677,14 +10608,14 @@ def list_projects_with_http_info(self, **kwargs): # noqa: E501 auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/projects', 'GET', + '/api/v1/executions/recover', 'POST', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminProjects', # noqa: E501 + response_type='AdminExecutionCreateResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -4692,59 +10623,43 @@ def list_projects_with_http_info(self, **kwargs): # noqa: E501 _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_task_executions(self, node_execution_id_execution_id_project, node_execution_id_execution_id_domain, node_execution_id_execution_id_name, node_execution_id_node_id, **kwargs): # noqa: E501 - """Fetches a list of :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 + def register_project(self, body, **kwargs): # noqa: E501 + """Registers a :ref:`ref_flyteidl.admin.Project` with the Flyte deployment. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_task_executions(node_execution_id_execution_id_project, node_execution_id_execution_id_domain, node_execution_id_execution_id_name, node_execution_id_node_id, async_req=True) + >>> thread = api.register_project(body, async_req=True) >>> result = thread.get() :param async_req bool - :param str node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) - :param str node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str node_execution_id_execution_id_name: User or system provided value for the resource. (required) - :param str node_execution_id_node_id: (required) - :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. - :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. - :param str sort_by_key: Indicates an attribute to sort the response values. +required. - :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminTaskExecutionList + :param AdminProjectRegisterRequest body: (required) + :return: AdminProjectRegisterResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_task_executions_with_http_info(node_execution_id_execution_id_project, node_execution_id_execution_id_domain, node_execution_id_execution_id_name, node_execution_id_node_id, **kwargs) # noqa: E501 + return self.register_project_with_http_info(body, **kwargs) # noqa: E501 else: - (data) = self.list_task_executions_with_http_info(node_execution_id_execution_id_project, node_execution_id_execution_id_domain, node_execution_id_execution_id_name, node_execution_id_node_id, **kwargs) # noqa: E501 + (data) = self.register_project_with_http_info(body, **kwargs) # noqa: E501 return data - def list_task_executions_with_http_info(self, node_execution_id_execution_id_project, node_execution_id_execution_id_domain, node_execution_id_execution_id_name, node_execution_id_node_id, **kwargs): # noqa: E501 - """Fetches a list of :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 + def register_project_with_http_info(self, body, **kwargs): # noqa: E501 + """Registers a :ref:`ref_flyteidl.admin.Project` with the Flyte deployment. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_task_executions_with_http_info(node_execution_id_execution_id_project, node_execution_id_execution_id_domain, node_execution_id_execution_id_name, node_execution_id_node_id, async_req=True) + >>> thread = api.register_project_with_http_info(body, async_req=True) >>> result = thread.get() :param async_req bool - :param str node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) - :param str node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str node_execution_id_execution_id_name: User or system provided value for the resource. (required) - :param str node_execution_id_node_id: (required) - :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. - :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. - :param str sort_by_key: Indicates an attribute to sort the response values. +required. - :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminTaskExecutionList + :param AdminProjectRegisterRequest body: (required) + :return: AdminProjectRegisterResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['node_execution_id_execution_id_project', 'node_execution_id_execution_id_domain', 'node_execution_id_execution_id_name', 'node_execution_id_node_id', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 + all_params = ['body'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -4755,50 +10670,20 @@ def list_task_executions_with_http_info(self, node_execution_id_execution_id_pro if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_task_executions" % key + " to method register_project" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'node_execution_id_execution_id_project' is set - if ('node_execution_id_execution_id_project' not in params or - params['node_execution_id_execution_id_project'] is None): - raise ValueError("Missing the required parameter `node_execution_id_execution_id_project` when calling `list_task_executions`") # noqa: E501 - # verify the required parameter 'node_execution_id_execution_id_domain' is set - if ('node_execution_id_execution_id_domain' not in params or - params['node_execution_id_execution_id_domain'] is None): - raise ValueError("Missing the required parameter `node_execution_id_execution_id_domain` when calling `list_task_executions`") # noqa: E501 - # verify the required parameter 'node_execution_id_execution_id_name' is set - if ('node_execution_id_execution_id_name' not in params or - params['node_execution_id_execution_id_name'] is None): - raise ValueError("Missing the required parameter `node_execution_id_execution_id_name` when calling `list_task_executions`") # noqa: E501 - # verify the required parameter 'node_execution_id_node_id' is set - if ('node_execution_id_node_id' not in params or - params['node_execution_id_node_id'] is None): - raise ValueError("Missing the required parameter `node_execution_id_node_id` when calling `list_task_executions`") # noqa: E501 + # verify the required parameter 'body' is set + if ('body' not in params or + params['body'] is None): + raise ValueError("Missing the required parameter `body` when calling `register_project`") # noqa: E501 collection_formats = {} path_params = {} - if 'node_execution_id_execution_id_project' in params: - path_params['node_execution_id.execution_id.project'] = params['node_execution_id_execution_id_project'] # noqa: E501 - if 'node_execution_id_execution_id_domain' in params: - path_params['node_execution_id.execution_id.domain'] = params['node_execution_id_execution_id_domain'] # noqa: E501 - if 'node_execution_id_execution_id_name' in params: - path_params['node_execution_id.execution_id.name'] = params['node_execution_id_execution_id_name'] # noqa: E501 - if 'node_execution_id_node_id' in params: - path_params['node_execution_id.node_id'] = params['node_execution_id_node_id'] # noqa: E501 query_params = [] - if 'limit' in params: - query_params.append(('limit', params['limit'])) # noqa: E501 - if 'token' in params: - query_params.append(('token', params['token'])) # noqa: E501 - if 'filters' in params: - query_params.append(('filters', params['filters'])) # noqa: E501 - if 'sort_by_key' in params: - query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 - if 'sort_by_direction' in params: - query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 header_params = {} @@ -4806,6 +10691,8 @@ def list_task_executions_with_http_info(self, node_execution_id_execution_id_pro local_var_files = {} body_params = None + if 'body' in params: + body_params = params['body'] # HTTP header `Accept` header_params['Accept'] = self.api_client.select_header_accept( ['application/json']) # noqa: E501 @@ -4818,14 +10705,14 @@ def list_task_executions_with_http_info(self, node_execution_id_execution_id_pro auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/task_executions/{node_execution_id.execution_id.project}/{node_execution_id.execution_id.domain}/{node_execution_id.execution_id.name}/{node_execution_id.node_id}', 'GET', + '/api/v1/projects', 'POST', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminTaskExecutionList', # noqa: E501 + response_type='AdminProjectRegisterResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -4833,55 +10720,43 @@ def list_task_executions_with_http_info(self, node_execution_id_execution_id_pro _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_task_ids(self, project, domain, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of task objects. # noqa: E501 + def relaunch_execution(self, body, **kwargs): # noqa: E501 + """Triggers the creation of an identical :ref:`ref_flyteidl.admin.Execution` # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_task_ids(project, domain, async_req=True) + >>> thread = api.relaunch_execution(body, async_req=True) >>> result = thread.get() :param async_req bool - :param str project: Name of the project that contains the identifiers. +required (required) - :param str domain: Name of the domain the identifiers belongs to within the project. +required (required) - :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. - :param str sort_by_key: Indicates an attribute to sort the response values. +required. - :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :param str filters: Indicates a list of filters passed as string. +optional. - :return: AdminNamedEntityIdentifierList + :param AdminExecutionRelaunchRequest body: (required) + :return: AdminExecutionCreateResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_task_ids_with_http_info(project, domain, **kwargs) # noqa: E501 + return self.relaunch_execution_with_http_info(body, **kwargs) # noqa: E501 else: - (data) = self.list_task_ids_with_http_info(project, domain, **kwargs) # noqa: E501 + (data) = self.relaunch_execution_with_http_info(body, **kwargs) # noqa: E501 return data - def list_task_ids_with_http_info(self, project, domain, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of task objects. # noqa: E501 + def relaunch_execution_with_http_info(self, body, **kwargs): # noqa: E501 + """Triggers the creation of an identical :ref:`ref_flyteidl.admin.Execution` # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_task_ids_with_http_info(project, domain, async_req=True) + >>> thread = api.relaunch_execution_with_http_info(body, async_req=True) >>> result = thread.get() :param async_req bool - :param str project: Name of the project that contains the identifiers. +required (required) - :param str domain: Name of the domain the identifiers belongs to within the project. +required (required) - :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. - :param str sort_by_key: Indicates an attribute to sort the response values. +required. - :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :param str filters: Indicates a list of filters passed as string. +optional. - :return: AdminNamedEntityIdentifierList + :param AdminExecutionRelaunchRequest body: (required) + :return: AdminExecutionCreateResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['project', 'domain', 'limit', 'token', 'sort_by_key', 'sort_by_direction', 'filters'] # noqa: E501 + all_params = ['body'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -4892,38 +10767,20 @@ def list_task_ids_with_http_info(self, project, domain, **kwargs): # noqa: E501 if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_task_ids" % key + " to method relaunch_execution" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'project' is set - if ('project' not in params or - params['project'] is None): - raise ValueError("Missing the required parameter `project` when calling `list_task_ids`") # noqa: E501 - # verify the required parameter 'domain' is set - if ('domain' not in params or - params['domain'] is None): - raise ValueError("Missing the required parameter `domain` when calling `list_task_ids`") # noqa: E501 + # verify the required parameter 'body' is set + if ('body' not in params or + params['body'] is None): + raise ValueError("Missing the required parameter `body` when calling `relaunch_execution`") # noqa: E501 collection_formats = {} path_params = {} - if 'project' in params: - path_params['project'] = params['project'] # noqa: E501 - if 'domain' in params: - path_params['domain'] = params['domain'] # noqa: E501 query_params = [] - if 'limit' in params: - query_params.append(('limit', params['limit'])) # noqa: E501 - if 'token' in params: - query_params.append(('token', params['token'])) # noqa: E501 - if 'sort_by_key' in params: - query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 - if 'sort_by_direction' in params: - query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 - if 'filters' in params: - query_params.append(('filters', params['filters'])) # noqa: E501 header_params = {} @@ -4931,6 +10788,8 @@ def list_task_ids_with_http_info(self, project, domain, **kwargs): # noqa: E501 local_var_files = {} body_params = None + if 'body' in params: + body_params = params['body'] # HTTP header `Accept` header_params['Accept'] = self.api_client.select_header_accept( ['application/json']) # noqa: E501 @@ -4943,14 +10802,14 @@ def list_task_ids_with_http_info(self, project, domain, **kwargs): # noqa: E501 auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/task_ids/{project}/{domain}', 'GET', + '/api/v1/executions/relaunch', 'POST', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminNamedEntityIdentifierList', # noqa: E501 + response_type='AdminExecutionCreateResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -4958,57 +10817,49 @@ def list_task_ids_with_http_info(self, project, domain, **kwargs): # noqa: E501 _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_tasks(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions. # noqa: E501 + def terminate_execution(self, id_project, id_domain, id_name, body, **kwargs): # noqa: E501 + """Terminates an in-progress :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_tasks(id_project, id_domain, id_name, async_req=True) + >>> thread = api.terminate_execution(id_project, id_domain, id_name, body, async_req=True) >>> result = thread.get() :param async_req bool :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) - :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. - :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. - :param str sort_by_key: Indicates an attribute to sort the response values. +required. - :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminTaskList + :param str id_name: User or system provided value for the resource. (required) + :param AdminExecutionTerminateRequest body: (required) + :return: AdminExecutionTerminateResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_tasks_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 + return self.terminate_execution_with_http_info(id_project, id_domain, id_name, body, **kwargs) # noqa: E501 else: - (data) = self.list_tasks_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 + (data) = self.terminate_execution_with_http_info(id_project, id_domain, id_name, body, **kwargs) # noqa: E501 return data - def list_tasks_with_http_info(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions. # noqa: E501 + def terminate_execution_with_http_info(self, id_project, id_domain, id_name, body, **kwargs): # noqa: E501 + """Terminates an in-progress :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_tasks_with_http_info(id_project, id_domain, id_name, async_req=True) + >>> thread = api.terminate_execution_with_http_info(id_project, id_domain, id_name, body, async_req=True) >>> result = thread.get() :param async_req bool :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) - :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. - :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. - :param str sort_by_key: Indicates an attribute to sort the response values. +required. - :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminTaskList + :param str id_name: User or system provided value for the resource. (required) + :param AdminExecutionTerminateRequest body: (required) + :return: AdminExecutionTerminateResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['id_project', 'id_domain', 'id_name', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 + all_params = ['id_project', 'id_domain', 'id_name', 'body'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -5019,22 +10870,26 @@ def list_tasks_with_http_info(self, id_project, id_domain, id_name, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_tasks" % key + " to method terminate_execution" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'id_project' is set if ('id_project' not in params or params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `list_tasks`") # noqa: E501 + raise ValueError("Missing the required parameter `id_project` when calling `terminate_execution`") # noqa: E501 # verify the required parameter 'id_domain' is set if ('id_domain' not in params or params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `list_tasks`") # noqa: E501 + raise ValueError("Missing the required parameter `id_domain` when calling `terminate_execution`") # noqa: E501 # verify the required parameter 'id_name' is set if ('id_name' not in params or params['id_name'] is None): - raise ValueError("Missing the required parameter `id_name` when calling `list_tasks`") # noqa: E501 + raise ValueError("Missing the required parameter `id_name` when calling `terminate_execution`") # noqa: E501 + # verify the required parameter 'body' is set + if ('body' not in params or + params['body'] is None): + raise ValueError("Missing the required parameter `body` when calling `terminate_execution`") # noqa: E501 collection_formats = {} @@ -5047,16 +10902,6 @@ def list_tasks_with_http_info(self, id_project, id_domain, id_name, **kwargs): path_params['id.name'] = params['id_name'] # noqa: E501 query_params = [] - if 'limit' in params: - query_params.append(('limit', params['limit'])) # noqa: E501 - if 'token' in params: - query_params.append(('token', params['token'])) # noqa: E501 - if 'filters' in params: - query_params.append(('filters', params['filters'])) # noqa: E501 - if 'sort_by_key' in params: - query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 - if 'sort_by_direction' in params: - query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 header_params = {} @@ -5064,6 +10909,8 @@ def list_tasks_with_http_info(self, id_project, id_domain, id_name, **kwargs): local_var_files = {} body_params = None + if 'body' in params: + body_params = params['body'] # HTTP header `Accept` header_params['Accept'] = self.api_client.select_header_accept( ['application/json']) # noqa: E501 @@ -5076,14 +10923,14 @@ def list_tasks_with_http_info(self, id_project, id_domain, id_name, **kwargs): auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/tasks/{id.project}/{id.domain}/{id.name}', 'GET', + '/api/v1/executions/{id.project}/{id.domain}/{id.name}', 'DELETE', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminTaskList', # noqa: E501 + response_type='AdminExecutionTerminateResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -5091,57 +10938,51 @@ def list_tasks_with_http_info(self, id_project, id_domain, id_name, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_tasks2(self, id_project, id_domain, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions. # noqa: E501 + def terminate_execution2(self, id_org, id_project, id_domain, id_name, body, **kwargs): # noqa: E501 + """Terminates an in-progress :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_tasks2(id_project, id_domain, async_req=True) + >>> thread = api.terminate_execution2(id_org, id_project, id_domain, id_name, body, async_req=True) >>> result = thread.get() :param async_req bool + :param str id_org: Optional, org key applied to the resource. (required) :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. - :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. - :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. - :param str sort_by_key: Indicates an attribute to sort the response values. +required. - :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminTaskList + :param str id_name: User or system provided value for the resource. (required) + :param AdminExecutionTerminateRequest body: (required) + :return: AdminExecutionTerminateResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_tasks2_with_http_info(id_project, id_domain, **kwargs) # noqa: E501 + return self.terminate_execution2_with_http_info(id_org, id_project, id_domain, id_name, body, **kwargs) # noqa: E501 else: - (data) = self.list_tasks2_with_http_info(id_project, id_domain, **kwargs) # noqa: E501 + (data) = self.terminate_execution2_with_http_info(id_org, id_project, id_domain, id_name, body, **kwargs) # noqa: E501 return data - def list_tasks2_with_http_info(self, id_project, id_domain, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions. # noqa: E501 + def terminate_execution2_with_http_info(self, id_org, id_project, id_domain, id_name, body, **kwargs): # noqa: E501 + """Terminates an in-progress :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_tasks2_with_http_info(id_project, id_domain, async_req=True) + >>> thread = api.terminate_execution2_with_http_info(id_org, id_project, id_domain, id_name, body, async_req=True) >>> result = thread.get() :param async_req bool + :param str id_org: Optional, org key applied to the resource. (required) :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. - :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. - :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. - :param str sort_by_key: Indicates an attribute to sort the response values. +required. - :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminTaskList + :param str id_name: User or system provided value for the resource. (required) + :param AdminExecutionTerminateRequest body: (required) + :return: AdminExecutionTerminateResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['id_project', 'id_domain', 'id_name', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 + all_params = ['id_org', 'id_project', 'id_domain', 'id_name', 'body'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -5152,40 +10993,44 @@ def list_tasks2_with_http_info(self, id_project, id_domain, **kwargs): # noqa: if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_tasks2" % key + " to method terminate_execution2" % key ) params[key] = val del params['kwargs'] + # verify the required parameter 'id_org' is set + if ('id_org' not in params or + params['id_org'] is None): + raise ValueError("Missing the required parameter `id_org` when calling `terminate_execution2`") # noqa: E501 # verify the required parameter 'id_project' is set if ('id_project' not in params or params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `list_tasks2`") # noqa: E501 + raise ValueError("Missing the required parameter `id_project` when calling `terminate_execution2`") # noqa: E501 # verify the required parameter 'id_domain' is set if ('id_domain' not in params or params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `list_tasks2`") # noqa: E501 + raise ValueError("Missing the required parameter `id_domain` when calling `terminate_execution2`") # noqa: E501 + # verify the required parameter 'id_name' is set + if ('id_name' not in params or + params['id_name'] is None): + raise ValueError("Missing the required parameter `id_name` when calling `terminate_execution2`") # noqa: E501 + # verify the required parameter 'body' is set + if ('body' not in params or + params['body'] is None): + raise ValueError("Missing the required parameter `body` when calling `terminate_execution2`") # noqa: E501 collection_formats = {} path_params = {} + if 'id_org' in params: + path_params['id.org'] = params['id_org'] # noqa: E501 if 'id_project' in params: path_params['id.project'] = params['id_project'] # noqa: E501 if 'id_domain' in params: path_params['id.domain'] = params['id_domain'] # noqa: E501 + if 'id_name' in params: + path_params['id.name'] = params['id_name'] # noqa: E501 query_params = [] - if 'id_name' in params: - query_params.append(('id.name', params['id_name'])) # noqa: E501 - if 'limit' in params: - query_params.append(('limit', params['limit'])) # noqa: E501 - if 'token' in params: - query_params.append(('token', params['token'])) # noqa: E501 - if 'filters' in params: - query_params.append(('filters', params['filters'])) # noqa: E501 - if 'sort_by_key' in params: - query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 - if 'sort_by_direction' in params: - query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 header_params = {} @@ -5193,6 +11038,8 @@ def list_tasks2_with_http_info(self, id_project, id_domain, **kwargs): # noqa: local_var_files = {} body_params = None + if 'body' in params: + body_params = params['body'] # HTTP header `Accept` header_params['Accept'] = self.api_client.select_header_accept( ['application/json']) # noqa: E501 @@ -5205,14 +11052,14 @@ def list_tasks2_with_http_info(self, id_project, id_domain, **kwargs): # noqa: auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/tasks/{id.project}/{id.domain}', 'GET', + '/api/v1/data/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}', 'DELETE', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminTaskList', # noqa: E501 + response_type='AdminExecutionTerminateResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -5220,55 +11067,49 @@ def list_tasks2_with_http_info(self, id_project, id_domain, **kwargs): # noqa: _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_workflow_ids(self, project, domain, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of workflow objects. # noqa: E501 + def update_execution(self, id_project, id_domain, id_name, body, **kwargs): # noqa: E501 + """Update execution belonging to project domain :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_workflow_ids(project, domain, async_req=True) + >>> thread = api.update_execution(id_project, id_domain, id_name, body, async_req=True) >>> result = thread.get() :param async_req bool - :param str project: Name of the project that contains the identifiers. +required (required) - :param str domain: Name of the domain the identifiers belongs to within the project. +required (required) - :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. - :param str sort_by_key: Indicates an attribute to sort the response values. +required. - :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :param str filters: Indicates a list of filters passed as string. +optional. - :return: AdminNamedEntityIdentifierList + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User or system provided value for the resource. (required) + :param AdminExecutionUpdateRequest body: (required) + :return: AdminExecutionUpdateResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_workflow_ids_with_http_info(project, domain, **kwargs) # noqa: E501 + return self.update_execution_with_http_info(id_project, id_domain, id_name, body, **kwargs) # noqa: E501 else: - (data) = self.list_workflow_ids_with_http_info(project, domain, **kwargs) # noqa: E501 + (data) = self.update_execution_with_http_info(id_project, id_domain, id_name, body, **kwargs) # noqa: E501 return data - def list_workflow_ids_with_http_info(self, project, domain, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of workflow objects. # noqa: E501 + def update_execution_with_http_info(self, id_project, id_domain, id_name, body, **kwargs): # noqa: E501 + """Update execution belonging to project domain :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_workflow_ids_with_http_info(project, domain, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str project: Name of the project that contains the identifiers. +required (required) - :param str domain: Name of the domain the identifiers belongs to within the project. +required (required) - :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. - :param str sort_by_key: Indicates an attribute to sort the response values. +required. - :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :param str filters: Indicates a list of filters passed as string. +optional. - :return: AdminNamedEntityIdentifierList + asynchronous HTTP request, please pass async_req=True + >>> thread = api.update_execution_with_http_info(id_project, id_domain, id_name, body, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User or system provided value for the resource. (required) + :param AdminExecutionUpdateRequest body: (required) + :return: AdminExecutionUpdateResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['project', 'domain', 'limit', 'token', 'sort_by_key', 'sort_by_direction', 'filters'] # noqa: E501 + all_params = ['id_project', 'id_domain', 'id_name', 'body'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -5279,38 +11120,38 @@ def list_workflow_ids_with_http_info(self, project, domain, **kwargs): # noqa: if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_workflow_ids" % key + " to method update_execution" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'project' is set - if ('project' not in params or - params['project'] is None): - raise ValueError("Missing the required parameter `project` when calling `list_workflow_ids`") # noqa: E501 - # verify the required parameter 'domain' is set - if ('domain' not in params or - params['domain'] is None): - raise ValueError("Missing the required parameter `domain` when calling `list_workflow_ids`") # noqa: E501 + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `update_execution`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `update_execution`") # noqa: E501 + # verify the required parameter 'id_name' is set + if ('id_name' not in params or + params['id_name'] is None): + raise ValueError("Missing the required parameter `id_name` when calling `update_execution`") # noqa: E501 + # verify the required parameter 'body' is set + if ('body' not in params or + params['body'] is None): + raise ValueError("Missing the required parameter `body` when calling `update_execution`") # noqa: E501 collection_formats = {} path_params = {} - if 'project' in params: - path_params['project'] = params['project'] # noqa: E501 - if 'domain' in params: - path_params['domain'] = params['domain'] # noqa: E501 + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 + if 'id_name' in params: + path_params['id.name'] = params['id_name'] # noqa: E501 query_params = [] - if 'limit' in params: - query_params.append(('limit', params['limit'])) # noqa: E501 - if 'token' in params: - query_params.append(('token', params['token'])) # noqa: E501 - if 'sort_by_key' in params: - query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 - if 'sort_by_direction' in params: - query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 - if 'filters' in params: - query_params.append(('filters', params['filters'])) # noqa: E501 header_params = {} @@ -5318,6 +11159,8 @@ def list_workflow_ids_with_http_info(self, project, domain, **kwargs): # noqa: local_var_files = {} body_params = None + if 'body' in params: + body_params = params['body'] # HTTP header `Accept` header_params['Accept'] = self.api_client.select_header_accept( ['application/json']) # noqa: E501 @@ -5330,14 +11173,14 @@ def list_workflow_ids_with_http_info(self, project, domain, **kwargs): # noqa: auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/workflow_ids/{project}/{domain}', 'GET', + '/api/v1/executions/{id.project}/{id.domain}/{id.name}', 'PUT', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminNamedEntityIdentifierList', # noqa: E501 + response_type='AdminExecutionUpdateResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -5345,57 +11188,51 @@ def list_workflow_ids_with_http_info(self, project, domain, **kwargs): # noqa: _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_workflows(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. # noqa: E501 + def update_execution2(self, id_org, id_project, id_domain, id_name, body, **kwargs): # noqa: E501 + """Update execution belonging to project domain :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_workflows(id_project, id_domain, id_name, async_req=True) + >>> thread = api.update_execution2(id_org, id_project, id_domain, id_name, body, async_req=True) >>> result = thread.get() :param async_req bool + :param str id_org: Optional, org key applied to the resource. (required) :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) - :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. - :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. - :param str sort_by_key: Indicates an attribute to sort the response values. +required. - :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminWorkflowList + :param str id_name: User or system provided value for the resource. (required) + :param AdminExecutionUpdateRequest body: (required) + :return: AdminExecutionUpdateResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_workflows_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 + return self.update_execution2_with_http_info(id_org, id_project, id_domain, id_name, body, **kwargs) # noqa: E501 else: - (data) = self.list_workflows_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 + (data) = self.update_execution2_with_http_info(id_org, id_project, id_domain, id_name, body, **kwargs) # noqa: E501 return data - def list_workflows_with_http_info(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. # noqa: E501 + def update_execution2_with_http_info(self, id_org, id_project, id_domain, id_name, body, **kwargs): # noqa: E501 + """Update execution belonging to project domain :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_workflows_with_http_info(id_project, id_domain, id_name, async_req=True) + >>> thread = api.update_execution2_with_http_info(id_org, id_project, id_domain, id_name, body, async_req=True) >>> result = thread.get() :param async_req bool + :param str id_org: Optional, org key applied to the resource. (required) :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) - :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. - :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. - :param str sort_by_key: Indicates an attribute to sort the response values. +required. - :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminWorkflowList + :param str id_name: User or system provided value for the resource. (required) + :param AdminExecutionUpdateRequest body: (required) + :return: AdminExecutionUpdateResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['id_project', 'id_domain', 'id_name', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 + all_params = ['id_org', 'id_project', 'id_domain', 'id_name', 'body'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -5406,26 +11243,36 @@ def list_workflows_with_http_info(self, id_project, id_domain, id_name, **kwargs if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_workflows" % key + " to method update_execution2" % key ) params[key] = val del params['kwargs'] + # verify the required parameter 'id_org' is set + if ('id_org' not in params or + params['id_org'] is None): + raise ValueError("Missing the required parameter `id_org` when calling `update_execution2`") # noqa: E501 # verify the required parameter 'id_project' is set if ('id_project' not in params or params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `list_workflows`") # noqa: E501 + raise ValueError("Missing the required parameter `id_project` when calling `update_execution2`") # noqa: E501 # verify the required parameter 'id_domain' is set if ('id_domain' not in params or params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `list_workflows`") # noqa: E501 + raise ValueError("Missing the required parameter `id_domain` when calling `update_execution2`") # noqa: E501 # verify the required parameter 'id_name' is set if ('id_name' not in params or params['id_name'] is None): - raise ValueError("Missing the required parameter `id_name` when calling `list_workflows`") # noqa: E501 + raise ValueError("Missing the required parameter `id_name` when calling `update_execution2`") # noqa: E501 + # verify the required parameter 'body' is set + if ('body' not in params or + params['body'] is None): + raise ValueError("Missing the required parameter `body` when calling `update_execution2`") # noqa: E501 collection_formats = {} path_params = {} + if 'id_org' in params: + path_params['id.org'] = params['id_org'] # noqa: E501 if 'id_project' in params: path_params['id.project'] = params['id_project'] # noqa: E501 if 'id_domain' in params: @@ -5434,16 +11281,6 @@ def list_workflows_with_http_info(self, id_project, id_domain, id_name, **kwargs path_params['id.name'] = params['id_name'] # noqa: E501 query_params = [] - if 'limit' in params: - query_params.append(('limit', params['limit'])) # noqa: E501 - if 'token' in params: - query_params.append(('token', params['token'])) # noqa: E501 - if 'filters' in params: - query_params.append(('filters', params['filters'])) # noqa: E501 - if 'sort_by_key' in params: - query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 - if 'sort_by_direction' in params: - query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 header_params = {} @@ -5451,6 +11288,8 @@ def list_workflows_with_http_info(self, id_project, id_domain, id_name, **kwargs local_var_files = {} body_params = None + if 'body' in params: + body_params = params['body'] # HTTP header `Accept` header_params['Accept'] = self.api_client.select_header_accept( ['application/json']) # noqa: E501 @@ -5463,14 +11302,14 @@ def list_workflows_with_http_info(self, id_project, id_domain, id_name, **kwargs auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/workflows/{id.project}/{id.domain}/{id.name}', 'GET', + '/api/v1/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}', 'PUT', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminWorkflowList', # noqa: E501 + response_type='AdminExecutionUpdateResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -5478,57 +11317,51 @@ def list_workflows_with_http_info(self, id_project, id_domain, id_name, **kwargs _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_workflows2(self, id_project, id_domain, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. # noqa: E501 + def update_launch_plan(self, id_project, id_domain, id_name, id_version, body, **kwargs): # noqa: E501 + """Updates the status of a registered :ref:`ref_flyteidl.admin.LaunchPlan`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_workflows2(id_project, id_domain, async_req=True) + >>> thread = api.update_launch_plan(id_project, id_domain, id_name, id_version, body, async_req=True) >>> result = thread.get() :param async_req bool :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. - :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. - :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. - :param str sort_by_key: Indicates an attribute to sort the response values. +required. - :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminWorkflowList + :param str id_name: User provided value for the resource. (required) + :param str id_version: Specific version of the resource. (required) + :param AdminLaunchPlanUpdateRequest body: (required) + :return: AdminLaunchPlanUpdateResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_workflows2_with_http_info(id_project, id_domain, **kwargs) # noqa: E501 + return self.update_launch_plan_with_http_info(id_project, id_domain, id_name, id_version, body, **kwargs) # noqa: E501 else: - (data) = self.list_workflows2_with_http_info(id_project, id_domain, **kwargs) # noqa: E501 + (data) = self.update_launch_plan_with_http_info(id_project, id_domain, id_name, id_version, body, **kwargs) # noqa: E501 return data - def list_workflows2_with_http_info(self, id_project, id_domain, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. # noqa: E501 + def update_launch_plan_with_http_info(self, id_project, id_domain, id_name, id_version, body, **kwargs): # noqa: E501 + """Updates the status of a registered :ref:`ref_flyteidl.admin.LaunchPlan`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_workflows2_with_http_info(id_project, id_domain, async_req=True) + >>> thread = api.update_launch_plan_with_http_info(id_project, id_domain, id_name, id_version, body, async_req=True) >>> result = thread.get() :param async_req bool :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. - :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. - :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. - :param str sort_by_key: Indicates an attribute to sort the response values. +required. - :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminWorkflowList + :param str id_name: User provided value for the resource. (required) + :param str id_version: Specific version of the resource. (required) + :param AdminLaunchPlanUpdateRequest body: (required) + :return: AdminLaunchPlanUpdateResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['id_project', 'id_domain', 'id_name', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 + all_params = ['id_project', 'id_domain', 'id_name', 'id_version', 'body'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -5539,18 +11372,30 @@ def list_workflows2_with_http_info(self, id_project, id_domain, **kwargs): # no if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_workflows2" % key + " to method update_launch_plan" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'id_project' is set if ('id_project' not in params or params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `list_workflows2`") # noqa: E501 + raise ValueError("Missing the required parameter `id_project` when calling `update_launch_plan`") # noqa: E501 # verify the required parameter 'id_domain' is set if ('id_domain' not in params or params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `list_workflows2`") # noqa: E501 + raise ValueError("Missing the required parameter `id_domain` when calling `update_launch_plan`") # noqa: E501 + # verify the required parameter 'id_name' is set + if ('id_name' not in params or + params['id_name'] is None): + raise ValueError("Missing the required parameter `id_name` when calling `update_launch_plan`") # noqa: E501 + # verify the required parameter 'id_version' is set + if ('id_version' not in params or + params['id_version'] is None): + raise ValueError("Missing the required parameter `id_version` when calling `update_launch_plan`") # noqa: E501 + # verify the required parameter 'body' is set + if ('body' not in params or + params['body'] is None): + raise ValueError("Missing the required parameter `body` when calling `update_launch_plan`") # noqa: E501 collection_formats = {} @@ -5559,20 +11404,12 @@ def list_workflows2_with_http_info(self, id_project, id_domain, **kwargs): # no path_params['id.project'] = params['id_project'] # noqa: E501 if 'id_domain' in params: path_params['id.domain'] = params['id_domain'] # noqa: E501 + if 'id_name' in params: + path_params['id.name'] = params['id_name'] # noqa: E501 + if 'id_version' in params: + path_params['id.version'] = params['id_version'] # noqa: E501 query_params = [] - if 'id_name' in params: - query_params.append(('id.name', params['id_name'])) # noqa: E501 - if 'limit' in params: - query_params.append(('limit', params['limit'])) # noqa: E501 - if 'token' in params: - query_params.append(('token', params['token'])) # noqa: E501 - if 'filters' in params: - query_params.append(('filters', params['filters'])) # noqa: E501 - if 'sort_by_key' in params: - query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 - if 'sort_by_direction' in params: - query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 header_params = {} @@ -5580,6 +11417,8 @@ def list_workflows2_with_http_info(self, id_project, id_domain, **kwargs): # no local_var_files = {} body_params = None + if 'body' in params: + body_params = params['body'] # HTTP header `Accept` header_params['Accept'] = self.api_client.select_header_accept( ['application/json']) # noqa: E501 @@ -5592,14 +11431,14 @@ def list_workflows2_with_http_info(self, id_project, id_domain, **kwargs): # no auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/workflows/{id.project}/{id.domain}', 'GET', + '/api/v1/launch_plans/{id.project}/{id.domain}/{id.name}/{id.version}', 'PUT', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminWorkflowList', # noqa: E501 + response_type='AdminLaunchPlanUpdateResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -5607,43 +11446,51 @@ def list_workflows2_with_http_info(self, id_project, id_domain, **kwargs): # no _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def recover_execution(self, body, **kwargs): # noqa: E501 - """Recreates a previously-run workflow execution that will only start executing from the last known failure point. In Recover mode, users cannot change any input parameters or update the version of the execution. This is extremely useful to recover from system errors and byzantine faults like - Loss of K8s cluster, bugs in platform or instability, machine failures, downstream system failures (downstream services), or simply to recover executions that failed because of retry exhaustion and should complete if tried again. See :ref:`ref_flyteidl.admin.ExecutionRecoverRequest` for more details. # noqa: E501 + def update_launch_plan2(self, id_org, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 + """Updates the status of a registered :ref:`ref_flyteidl.admin.LaunchPlan`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.recover_execution(body, async_req=True) + >>> thread = api.update_launch_plan2(id_org, id_project, id_domain, id_name, id_version, async_req=True) >>> result = thread.get() :param async_req bool - :param AdminExecutionRecoverRequest body: (required) - :return: AdminExecutionCreateResponse + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. (required) + :param str id_version: Specific version of the resource. (required) + :return: AdminLaunchPlanUpdateResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.recover_execution_with_http_info(body, **kwargs) # noqa: E501 + return self.update_launch_plan2_with_http_info(id_org, id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 else: - (data) = self.recover_execution_with_http_info(body, **kwargs) # noqa: E501 + (data) = self.update_launch_plan2_with_http_info(id_org, id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 return data - def recover_execution_with_http_info(self, body, **kwargs): # noqa: E501 - """Recreates a previously-run workflow execution that will only start executing from the last known failure point. In Recover mode, users cannot change any input parameters or update the version of the execution. This is extremely useful to recover from system errors and byzantine faults like - Loss of K8s cluster, bugs in platform or instability, machine failures, downstream system failures (downstream services), or simply to recover executions that failed because of retry exhaustion and should complete if tried again. See :ref:`ref_flyteidl.admin.ExecutionRecoverRequest` for more details. # noqa: E501 + def update_launch_plan2_with_http_info(self, id_org, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 + """Updates the status of a registered :ref:`ref_flyteidl.admin.LaunchPlan`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.recover_execution_with_http_info(body, async_req=True) + >>> thread = api.update_launch_plan2_with_http_info(id_org, id_project, id_domain, id_name, id_version, async_req=True) >>> result = thread.get() :param async_req bool - :param AdminExecutionRecoverRequest body: (required) - :return: AdminExecutionCreateResponse + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. (required) + :param str id_version: Specific version of the resource. (required) + :return: AdminLaunchPlanUpdateResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['body'] # noqa: E501 + all_params = ['id_org', 'id_project', 'id_domain', 'id_name', 'id_version'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -5654,18 +11501,44 @@ def recover_execution_with_http_info(self, body, **kwargs): # noqa: E501 if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method recover_execution" % key + " to method update_launch_plan2" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'body' is set - if ('body' not in params or - params['body'] is None): - raise ValueError("Missing the required parameter `body` when calling `recover_execution`") # noqa: E501 + # verify the required parameter 'id_org' is set + if ('id_org' not in params or + params['id_org'] is None): + raise ValueError("Missing the required parameter `id_org` when calling `update_launch_plan2`") # noqa: E501 + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `update_launch_plan2`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `update_launch_plan2`") # noqa: E501 + # verify the required parameter 'id_name' is set + if ('id_name' not in params or + params['id_name'] is None): + raise ValueError("Missing the required parameter `id_name` when calling `update_launch_plan2`") # noqa: E501 + # verify the required parameter 'id_version' is set + if ('id_version' not in params or + params['id_version'] is None): + raise ValueError("Missing the required parameter `id_version` when calling `update_launch_plan2`") # noqa: E501 collection_formats = {} path_params = {} + if 'id_org' in params: + path_params['id.org'] = params['id_org'] # noqa: E501 + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 + if 'id_name' in params: + path_params['id.name'] = params['id_name'] # noqa: E501 + if 'id_version' in params: + path_params['id.version'] = params['id_version'] # noqa: E501 query_params = [] @@ -5675,8 +11548,6 @@ def recover_execution_with_http_info(self, body, **kwargs): # noqa: E501 local_var_files = {} body_params = None - if 'body' in params: - body_params = params['body'] # HTTP header `Accept` header_params['Accept'] = self.api_client.select_header_accept( ['application/json']) # noqa: E501 @@ -5689,14 +11560,14 @@ def recover_execution_with_http_info(self, body, **kwargs): # noqa: E501 auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/executions/recover', 'POST', + '/api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version}', 'PUT', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminExecutionCreateResponse', # noqa: E501 + response_type='AdminLaunchPlanUpdateResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -5704,43 +11575,51 @@ def recover_execution_with_http_info(self, body, **kwargs): # noqa: E501 _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def register_project(self, body, **kwargs): # noqa: E501 - """Registers a :ref:`ref_flyteidl.admin.Project` with the Flyte deployment. # noqa: E501 + def update_named_entity(self, resource_type, id_project, id_domain, id_name, body, **kwargs): # noqa: E501 + """Updates a :ref:`ref_flyteidl.admin.NamedEntity` object. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.register_project(body, async_req=True) + >>> thread = api.update_named_entity(resource_type, id_project, id_domain, id_name, body, async_req=True) >>> result = thread.get() :param async_req bool - :param AdminProjectRegisterRequest body: (required) - :return: AdminProjectRegisterResponse + :param str resource_type: Resource type of the metadata to update +required (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) + :param AdminNamedEntityUpdateRequest body: (required) + :return: AdminNamedEntityUpdateResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.register_project_with_http_info(body, **kwargs) # noqa: E501 + return self.update_named_entity_with_http_info(resource_type, id_project, id_domain, id_name, body, **kwargs) # noqa: E501 else: - (data) = self.register_project_with_http_info(body, **kwargs) # noqa: E501 + (data) = self.update_named_entity_with_http_info(resource_type, id_project, id_domain, id_name, body, **kwargs) # noqa: E501 return data - def register_project_with_http_info(self, body, **kwargs): # noqa: E501 - """Registers a :ref:`ref_flyteidl.admin.Project` with the Flyte deployment. # noqa: E501 + def update_named_entity_with_http_info(self, resource_type, id_project, id_domain, id_name, body, **kwargs): # noqa: E501 + """Updates a :ref:`ref_flyteidl.admin.NamedEntity` object. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.register_project_with_http_info(body, async_req=True) + >>> thread = api.update_named_entity_with_http_info(resource_type, id_project, id_domain, id_name, body, async_req=True) >>> result = thread.get() :param async_req bool - :param AdminProjectRegisterRequest body: (required) - :return: AdminProjectRegisterResponse + :param str resource_type: Resource type of the metadata to update +required (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) + :param AdminNamedEntityUpdateRequest body: (required) + :return: AdminNamedEntityUpdateResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['body'] # noqa: E501 + all_params = ['resource_type', 'id_project', 'id_domain', 'id_name', 'body'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -5751,18 +11630,42 @@ def register_project_with_http_info(self, body, **kwargs): # noqa: E501 if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method register_project" % key + " to method update_named_entity" % key ) params[key] = val del params['kwargs'] + # verify the required parameter 'resource_type' is set + if ('resource_type' not in params or + params['resource_type'] is None): + raise ValueError("Missing the required parameter `resource_type` when calling `update_named_entity`") # noqa: E501 + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `update_named_entity`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `update_named_entity`") # noqa: E501 + # verify the required parameter 'id_name' is set + if ('id_name' not in params or + params['id_name'] is None): + raise ValueError("Missing the required parameter `id_name` when calling `update_named_entity`") # noqa: E501 # verify the required parameter 'body' is set if ('body' not in params or params['body'] is None): - raise ValueError("Missing the required parameter `body` when calling `register_project`") # noqa: E501 + raise ValueError("Missing the required parameter `body` when calling `update_named_entity`") # noqa: E501 collection_formats = {} path_params = {} + if 'resource_type' in params: + path_params['resource_type'] = params['resource_type'] # noqa: E501 + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 + if 'id_name' in params: + path_params['id.name'] = params['id_name'] # noqa: E501 query_params = [] @@ -5786,14 +11689,14 @@ def register_project_with_http_info(self, body, **kwargs): # noqa: E501 auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/projects', 'POST', + '/api/v1/named_entities/{resource_type}/{id.project}/{id.domain}/{id.name}', 'PUT', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminProjectRegisterResponse', # noqa: E501 + response_type='AdminNamedEntityUpdateResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -5801,43 +11704,53 @@ def register_project_with_http_info(self, body, **kwargs): # noqa: E501 _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def relaunch_execution(self, body, **kwargs): # noqa: E501 - """Triggers the creation of an identical :ref:`ref_flyteidl.admin.Execution` # noqa: E501 + def update_named_entity2(self, resource_type, id_org, id_project, id_domain, id_name, body, **kwargs): # noqa: E501 + """Updates a :ref:`ref_flyteidl.admin.NamedEntity` object. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.relaunch_execution(body, async_req=True) + >>> thread = api.update_named_entity2(resource_type, id_org, id_project, id_domain, id_name, body, async_req=True) >>> result = thread.get() :param async_req bool - :param AdminExecutionRelaunchRequest body: (required) - :return: AdminExecutionCreateResponse + :param str resource_type: Resource type of the metadata to update +required (required) + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) + :param AdminNamedEntityUpdateRequest body: (required) + :return: AdminNamedEntityUpdateResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.relaunch_execution_with_http_info(body, **kwargs) # noqa: E501 + return self.update_named_entity2_with_http_info(resource_type, id_org, id_project, id_domain, id_name, body, **kwargs) # noqa: E501 else: - (data) = self.relaunch_execution_with_http_info(body, **kwargs) # noqa: E501 + (data) = self.update_named_entity2_with_http_info(resource_type, id_org, id_project, id_domain, id_name, body, **kwargs) # noqa: E501 return data - def relaunch_execution_with_http_info(self, body, **kwargs): # noqa: E501 - """Triggers the creation of an identical :ref:`ref_flyteidl.admin.Execution` # noqa: E501 + def update_named_entity2_with_http_info(self, resource_type, id_org, id_project, id_domain, id_name, body, **kwargs): # noqa: E501 + """Updates a :ref:`ref_flyteidl.admin.NamedEntity` object. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.relaunch_execution_with_http_info(body, async_req=True) + >>> thread = api.update_named_entity2_with_http_info(resource_type, id_org, id_project, id_domain, id_name, body, async_req=True) >>> result = thread.get() :param async_req bool - :param AdminExecutionRelaunchRequest body: (required) - :return: AdminExecutionCreateResponse + :param str resource_type: Resource type of the metadata to update +required (required) + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) + :param AdminNamedEntityUpdateRequest body: (required) + :return: AdminNamedEntityUpdateResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['body'] # noqa: E501 + all_params = ['resource_type', 'id_org', 'id_project', 'id_domain', 'id_name', 'body'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -5848,18 +11761,48 @@ def relaunch_execution_with_http_info(self, body, **kwargs): # noqa: E501 if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method relaunch_execution" % key + " to method update_named_entity2" % key ) params[key] = val del params['kwargs'] + # verify the required parameter 'resource_type' is set + if ('resource_type' not in params or + params['resource_type'] is None): + raise ValueError("Missing the required parameter `resource_type` when calling `update_named_entity2`") # noqa: E501 + # verify the required parameter 'id_org' is set + if ('id_org' not in params or + params['id_org'] is None): + raise ValueError("Missing the required parameter `id_org` when calling `update_named_entity2`") # noqa: E501 + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `update_named_entity2`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `update_named_entity2`") # noqa: E501 + # verify the required parameter 'id_name' is set + if ('id_name' not in params or + params['id_name'] is None): + raise ValueError("Missing the required parameter `id_name` when calling `update_named_entity2`") # noqa: E501 # verify the required parameter 'body' is set if ('body' not in params or params['body'] is None): - raise ValueError("Missing the required parameter `body` when calling `relaunch_execution`") # noqa: E501 + raise ValueError("Missing the required parameter `body` when calling `update_named_entity2`") # noqa: E501 collection_formats = {} path_params = {} + if 'resource_type' in params: + path_params['resource_type'] = params['resource_type'] # noqa: E501 + if 'id_org' in params: + path_params['id.org'] = params['id_org'] # noqa: E501 + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 + if 'id_name' in params: + path_params['id.name'] = params['id_name'] # noqa: E501 query_params = [] @@ -5883,14 +11826,14 @@ def relaunch_execution_with_http_info(self, body, **kwargs): # noqa: E501 auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/executions/relaunch', 'POST', + '/api/v1/named_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain}/{id.name}', 'PUT', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminExecutionCreateResponse', # noqa: E501 + response_type='AdminNamedEntityUpdateResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -5898,49 +11841,45 @@ def relaunch_execution_with_http_info(self, body, **kwargs): # noqa: E501 _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def terminate_execution(self, id_project, id_domain, id_name, body, **kwargs): # noqa: E501 - """Terminates an in-progress :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 + def update_project(self, id, body, **kwargs): # noqa: E501 + """Updates an existing :ref:`ref_flyteidl.admin.Project` flyteidl.admin.Project should be passed but the domains property should be empty; it will be ignored in the handler as domains cannot be updated via this API. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.terminate_execution(id_project, id_domain, id_name, body, async_req=True) + >>> thread = api.update_project(id, body, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User or system provided value for the resource. (required) - :param AdminExecutionTerminateRequest body: (required) - :return: AdminExecutionTerminateResponse + :param str id: Globally unique project name. (required) + :param AdminProject body: (required) + :return: AdminProjectUpdateResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.terminate_execution_with_http_info(id_project, id_domain, id_name, body, **kwargs) # noqa: E501 + return self.update_project_with_http_info(id, body, **kwargs) # noqa: E501 else: - (data) = self.terminate_execution_with_http_info(id_project, id_domain, id_name, body, **kwargs) # noqa: E501 + (data) = self.update_project_with_http_info(id, body, **kwargs) # noqa: E501 return data - def terminate_execution_with_http_info(self, id_project, id_domain, id_name, body, **kwargs): # noqa: E501 - """Terminates an in-progress :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 + def update_project_with_http_info(self, id, body, **kwargs): # noqa: E501 + """Updates an existing :ref:`ref_flyteidl.admin.Project` flyteidl.admin.Project should be passed but the domains property should be empty; it will be ignored in the handler as domains cannot be updated via this API. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.terminate_execution_with_http_info(id_project, id_domain, id_name, body, async_req=True) + >>> thread = api.update_project_with_http_info(id, body, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User or system provided value for the resource. (required) - :param AdminExecutionTerminateRequest body: (required) - :return: AdminExecutionTerminateResponse + :param str id: Globally unique project name. (required) + :param AdminProject body: (required) + :return: AdminProjectUpdateResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['id_project', 'id_domain', 'id_name', 'body'] # noqa: E501 + all_params = ['id', 'body'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -5951,36 +11890,24 @@ def terminate_execution_with_http_info(self, id_project, id_domain, id_name, bod if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method terminate_execution" % key + " to method update_project" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'id_project' is set - if ('id_project' not in params or - params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `terminate_execution`") # noqa: E501 - # verify the required parameter 'id_domain' is set - if ('id_domain' not in params or - params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `terminate_execution`") # noqa: E501 - # verify the required parameter 'id_name' is set - if ('id_name' not in params or - params['id_name'] is None): - raise ValueError("Missing the required parameter `id_name` when calling `terminate_execution`") # noqa: E501 + # verify the required parameter 'id' is set + if ('id' not in params or + params['id'] is None): + raise ValueError("Missing the required parameter `id` when calling `update_project`") # noqa: E501 # verify the required parameter 'body' is set if ('body' not in params or params['body'] is None): - raise ValueError("Missing the required parameter `body` when calling `terminate_execution`") # noqa: E501 + raise ValueError("Missing the required parameter `body` when calling `update_project`") # noqa: E501 collection_formats = {} path_params = {} - if 'id_project' in params: - path_params['id.project'] = params['id_project'] # noqa: E501 - if 'id_domain' in params: - path_params['id.domain'] = params['id_domain'] # noqa: E501 - if 'id_name' in params: - path_params['id.name'] = params['id_name'] # noqa: E501 + if 'id' in params: + path_params['id'] = params['id'] # noqa: E501 query_params = [] @@ -6004,14 +11931,14 @@ def terminate_execution_with_http_info(self, id_project, id_domain, id_name, bod auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/executions/{id.project}/{id.domain}/{id.name}', 'DELETE', + '/api/v1/projects/{id}', 'PUT', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminExecutionTerminateResponse', # noqa: E501 + response_type='AdminProjectUpdateResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -6019,49 +11946,47 @@ def terminate_execution_with_http_info(self, id_project, id_domain, id_name, bod _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def update_execution(self, id_project, id_domain, id_name, body, **kwargs): # noqa: E501 - """Update execution belonging to project domain :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 + def update_project2(self, org, id, body, **kwargs): # noqa: E501 + """Updates an existing :ref:`ref_flyteidl.admin.Project` flyteidl.admin.Project should be passed but the domains property should be empty; it will be ignored in the handler as domains cannot be updated via this API. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.update_execution(id_project, id_domain, id_name, body, async_req=True) + >>> thread = api.update_project2(org, id, body, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User or system provided value for the resource. (required) - :param AdminExecutionUpdateRequest body: (required) - :return: AdminExecutionUpdateResponse + :param str org: Optional, org key applied to the resource. (required) + :param str id: Globally unique project name. (required) + :param AdminProject body: (required) + :return: AdminProjectUpdateResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.update_execution_with_http_info(id_project, id_domain, id_name, body, **kwargs) # noqa: E501 + return self.update_project2_with_http_info(org, id, body, **kwargs) # noqa: E501 else: - (data) = self.update_execution_with_http_info(id_project, id_domain, id_name, body, **kwargs) # noqa: E501 + (data) = self.update_project2_with_http_info(org, id, body, **kwargs) # noqa: E501 return data - def update_execution_with_http_info(self, id_project, id_domain, id_name, body, **kwargs): # noqa: E501 - """Update execution belonging to project domain :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 + def update_project2_with_http_info(self, org, id, body, **kwargs): # noqa: E501 + """Updates an existing :ref:`ref_flyteidl.admin.Project` flyteidl.admin.Project should be passed but the domains property should be empty; it will be ignored in the handler as domains cannot be updated via this API. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.update_execution_with_http_info(id_project, id_domain, id_name, body, async_req=True) + >>> thread = api.update_project2_with_http_info(org, id, body, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User or system provided value for the resource. (required) - :param AdminExecutionUpdateRequest body: (required) - :return: AdminExecutionUpdateResponse + :param str org: Optional, org key applied to the resource. (required) + :param str id: Globally unique project name. (required) + :param AdminProject body: (required) + :return: AdminProjectUpdateResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['id_project', 'id_domain', 'id_name', 'body'] # noqa: E501 + all_params = ['org', 'id', 'body'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -6072,36 +11997,30 @@ def update_execution_with_http_info(self, id_project, id_domain, id_name, body, if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method update_execution" % key + " to method update_project2" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'id_project' is set - if ('id_project' not in params or - params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `update_execution`") # noqa: E501 - # verify the required parameter 'id_domain' is set - if ('id_domain' not in params or - params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `update_execution`") # noqa: E501 - # verify the required parameter 'id_name' is set - if ('id_name' not in params or - params['id_name'] is None): - raise ValueError("Missing the required parameter `id_name` when calling `update_execution`") # noqa: E501 + # verify the required parameter 'org' is set + if ('org' not in params or + params['org'] is None): + raise ValueError("Missing the required parameter `org` when calling `update_project2`") # noqa: E501 + # verify the required parameter 'id' is set + if ('id' not in params or + params['id'] is None): + raise ValueError("Missing the required parameter `id` when calling `update_project2`") # noqa: E501 # verify the required parameter 'body' is set if ('body' not in params or params['body'] is None): - raise ValueError("Missing the required parameter `body` when calling `update_execution`") # noqa: E501 + raise ValueError("Missing the required parameter `body` when calling `update_project2`") # noqa: E501 collection_formats = {} path_params = {} - if 'id_project' in params: - path_params['id.project'] = params['id_project'] # noqa: E501 - if 'id_domain' in params: - path_params['id.domain'] = params['id_domain'] # noqa: E501 - if 'id_name' in params: - path_params['id.name'] = params['id_name'] # noqa: E501 + if 'org' in params: + path_params['org'] = params['org'] # noqa: E501 + if 'id' in params: + path_params['id'] = params['id'] # noqa: E501 query_params = [] @@ -6125,14 +12044,14 @@ def update_execution_with_http_info(self, id_project, id_domain, id_name, body, auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/executions/{id.project}/{id.domain}/{id.name}', 'PUT', + '/api/v1/projects/org/{org}/{id}', 'PUT', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminExecutionUpdateResponse', # noqa: E501 + response_type='AdminProjectUpdateResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -6140,51 +12059,45 @@ def update_execution_with_http_info(self, id_project, id_domain, id_name, body, _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def update_launch_plan(self, id_project, id_domain, id_name, id_version, body, **kwargs): # noqa: E501 - """Updates the status of a registered :ref:`ref_flyteidl.admin.LaunchPlan`. # noqa: E501 + def update_project_attributes(self, attributes_project, body, **kwargs): # noqa: E501 + """Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` at the project level # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.update_launch_plan(id_project, id_domain, id_name, id_version, body, async_req=True) + >>> thread = api.update_project_attributes(attributes_project, body, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. (required) - :param str id_version: Specific version of the resource. (required) - :param AdminLaunchPlanUpdateRequest body: (required) - :return: AdminLaunchPlanUpdateResponse + :param str attributes_project: Unique project id for which this set of attributes will be applied. (required) + :param AdminProjectAttributesUpdateRequest body: (required) + :return: AdminProjectAttributesUpdateResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.update_launch_plan_with_http_info(id_project, id_domain, id_name, id_version, body, **kwargs) # noqa: E501 + return self.update_project_attributes_with_http_info(attributes_project, body, **kwargs) # noqa: E501 else: - (data) = self.update_launch_plan_with_http_info(id_project, id_domain, id_name, id_version, body, **kwargs) # noqa: E501 + (data) = self.update_project_attributes_with_http_info(attributes_project, body, **kwargs) # noqa: E501 return data - def update_launch_plan_with_http_info(self, id_project, id_domain, id_name, id_version, body, **kwargs): # noqa: E501 - """Updates the status of a registered :ref:`ref_flyteidl.admin.LaunchPlan`. # noqa: E501 + def update_project_attributes_with_http_info(self, attributes_project, body, **kwargs): # noqa: E501 + """Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` at the project level # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.update_launch_plan_with_http_info(id_project, id_domain, id_name, id_version, body, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. (required) - :param str id_version: Specific version of the resource. (required) - :param AdminLaunchPlanUpdateRequest body: (required) - :return: AdminLaunchPlanUpdateResponse + >>> thread = api.update_project_attributes_with_http_info(attributes_project, body, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str attributes_project: Unique project id for which this set of attributes will be applied. (required) + :param AdminProjectAttributesUpdateRequest body: (required) + :return: AdminProjectAttributesUpdateResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['id_project', 'id_domain', 'id_name', 'id_version', 'body'] # noqa: E501 + all_params = ['attributes_project', 'body'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -6195,42 +12108,24 @@ def update_launch_plan_with_http_info(self, id_project, id_domain, id_name, id_v if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method update_launch_plan" % key + " to method update_project_attributes" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'id_project' is set - if ('id_project' not in params or - params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `update_launch_plan`") # noqa: E501 - # verify the required parameter 'id_domain' is set - if ('id_domain' not in params or - params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `update_launch_plan`") # noqa: E501 - # verify the required parameter 'id_name' is set - if ('id_name' not in params or - params['id_name'] is None): - raise ValueError("Missing the required parameter `id_name` when calling `update_launch_plan`") # noqa: E501 - # verify the required parameter 'id_version' is set - if ('id_version' not in params or - params['id_version'] is None): - raise ValueError("Missing the required parameter `id_version` when calling `update_launch_plan`") # noqa: E501 + # verify the required parameter 'attributes_project' is set + if ('attributes_project' not in params or + params['attributes_project'] is None): + raise ValueError("Missing the required parameter `attributes_project` when calling `update_project_attributes`") # noqa: E501 # verify the required parameter 'body' is set if ('body' not in params or params['body'] is None): - raise ValueError("Missing the required parameter `body` when calling `update_launch_plan`") # noqa: E501 + raise ValueError("Missing the required parameter `body` when calling `update_project_attributes`") # noqa: E501 collection_formats = {} path_params = {} - if 'id_project' in params: - path_params['id.project'] = params['id_project'] # noqa: E501 - if 'id_domain' in params: - path_params['id.domain'] = params['id_domain'] # noqa: E501 - if 'id_name' in params: - path_params['id.name'] = params['id_name'] # noqa: E501 - if 'id_version' in params: - path_params['id.version'] = params['id_version'] # noqa: E501 + if 'attributes_project' in params: + path_params['attributes.project'] = params['attributes_project'] # noqa: E501 query_params = [] @@ -6254,14 +12149,14 @@ def update_launch_plan_with_http_info(self, id_project, id_domain, id_name, id_v auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/launch_plans/{id.project}/{id.domain}/{id.name}/{id.version}', 'PUT', + '/api/v1/project_attributes/{attributes.project}', 'PUT', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminLaunchPlanUpdateResponse', # noqa: E501 + response_type='AdminProjectAttributesUpdateResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -6269,51 +12164,47 @@ def update_launch_plan_with_http_info(self, id_project, id_domain, id_name, id_v _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def update_named_entity(self, resource_type, id_project, id_domain, id_name, body, **kwargs): # noqa: E501 - """Updates a :ref:`ref_flyteidl.admin.NamedEntity` object. # noqa: E501 + def update_project_attributes2(self, attributes_org, attributes_project, body, **kwargs): # noqa: E501 + """Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` at the project level # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.update_named_entity(resource_type, id_project, id_domain, id_name, body, async_req=True) + >>> thread = api.update_project_attributes2(attributes_org, attributes_project, body, async_req=True) >>> result = thread.get() :param async_req bool - :param str resource_type: Resource type of the metadata to update +required (required) - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) - :param AdminNamedEntityUpdateRequest body: (required) - :return: AdminNamedEntityUpdateResponse + :param str attributes_org: Optional, org key applied to the project. (required) + :param str attributes_project: Unique project id for which this set of attributes will be applied. (required) + :param AdminProjectAttributesUpdateRequest body: (required) + :return: AdminProjectAttributesUpdateResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.update_named_entity_with_http_info(resource_type, id_project, id_domain, id_name, body, **kwargs) # noqa: E501 + return self.update_project_attributes2_with_http_info(attributes_org, attributes_project, body, **kwargs) # noqa: E501 else: - (data) = self.update_named_entity_with_http_info(resource_type, id_project, id_domain, id_name, body, **kwargs) # noqa: E501 + (data) = self.update_project_attributes2_with_http_info(attributes_org, attributes_project, body, **kwargs) # noqa: E501 return data - def update_named_entity_with_http_info(self, resource_type, id_project, id_domain, id_name, body, **kwargs): # noqa: E501 - """Updates a :ref:`ref_flyteidl.admin.NamedEntity` object. # noqa: E501 + def update_project_attributes2_with_http_info(self, attributes_org, attributes_project, body, **kwargs): # noqa: E501 + """Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` at the project level # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.update_named_entity_with_http_info(resource_type, id_project, id_domain, id_name, body, async_req=True) + >>> thread = api.update_project_attributes2_with_http_info(attributes_org, attributes_project, body, async_req=True) >>> result = thread.get() :param async_req bool - :param str resource_type: Resource type of the metadata to update +required (required) - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) - :param AdminNamedEntityUpdateRequest body: (required) - :return: AdminNamedEntityUpdateResponse + :param str attributes_org: Optional, org key applied to the project. (required) + :param str attributes_project: Unique project id for which this set of attributes will be applied. (required) + :param AdminProjectAttributesUpdateRequest body: (required) + :return: AdminProjectAttributesUpdateResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['resource_type', 'id_project', 'id_domain', 'id_name', 'body'] # noqa: E501 + all_params = ['attributes_org', 'attributes_project', 'body'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -6324,42 +12215,30 @@ def update_named_entity_with_http_info(self, resource_type, id_project, id_domai if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method update_named_entity" % key + " to method update_project_attributes2" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'resource_type' is set - if ('resource_type' not in params or - params['resource_type'] is None): - raise ValueError("Missing the required parameter `resource_type` when calling `update_named_entity`") # noqa: E501 - # verify the required parameter 'id_project' is set - if ('id_project' not in params or - params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `update_named_entity`") # noqa: E501 - # verify the required parameter 'id_domain' is set - if ('id_domain' not in params or - params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `update_named_entity`") # noqa: E501 - # verify the required parameter 'id_name' is set - if ('id_name' not in params or - params['id_name'] is None): - raise ValueError("Missing the required parameter `id_name` when calling `update_named_entity`") # noqa: E501 + # verify the required parameter 'attributes_org' is set + if ('attributes_org' not in params or + params['attributes_org'] is None): + raise ValueError("Missing the required parameter `attributes_org` when calling `update_project_attributes2`") # noqa: E501 + # verify the required parameter 'attributes_project' is set + if ('attributes_project' not in params or + params['attributes_project'] is None): + raise ValueError("Missing the required parameter `attributes_project` when calling `update_project_attributes2`") # noqa: E501 # verify the required parameter 'body' is set if ('body' not in params or params['body'] is None): - raise ValueError("Missing the required parameter `body` when calling `update_named_entity`") # noqa: E501 + raise ValueError("Missing the required parameter `body` when calling `update_project_attributes2`") # noqa: E501 collection_formats = {} path_params = {} - if 'resource_type' in params: - path_params['resource_type'] = params['resource_type'] # noqa: E501 - if 'id_project' in params: - path_params['id.project'] = params['id_project'] # noqa: E501 - if 'id_domain' in params: - path_params['id.domain'] = params['id_domain'] # noqa: E501 - if 'id_name' in params: - path_params['id.name'] = params['id_name'] # noqa: E501 + if 'attributes_org' in params: + path_params['attributes.org'] = params['attributes_org'] # noqa: E501 + if 'attributes_project' in params: + path_params['attributes.project'] = params['attributes_project'] # noqa: E501 query_params = [] @@ -6383,14 +12262,14 @@ def update_named_entity_with_http_info(self, resource_type, id_project, id_domai auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/named_entities/{resource_type}/{id.project}/{id.domain}/{id.name}', 'PUT', + '/api/v1/project_domain_attributes/org/{attributes.org}/{attributes.project}', 'PUT', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminNamedEntityUpdateResponse', # noqa: E501 + response_type='AdminProjectAttributesUpdateResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -6398,45 +12277,47 @@ def update_named_entity_with_http_info(self, resource_type, id_project, id_domai _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def update_project(self, id, body, **kwargs): # noqa: E501 - """Updates an existing :ref:`ref_flyteidl.admin.Project` flyteidl.admin.Project should be passed but the domains property should be empty; it will be ignored in the handler as domains cannot be updated via this API. # noqa: E501 + def update_project_domain_attributes(self, attributes_project, attributes_domain, body, **kwargs): # noqa: E501 + """Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.update_project(id, body, async_req=True) + >>> thread = api.update_project_domain_attributes(attributes_project, attributes_domain, body, async_req=True) >>> result = thread.get() :param async_req bool - :param str id: Globally unique project name. (required) - :param AdminProject body: (required) - :return: AdminProjectUpdateResponse + :param str attributes_project: Unique project id for which this set of attributes will be applied. (required) + :param str attributes_domain: Unique domain id for which this set of attributes will be applied. (required) + :param AdminProjectDomainAttributesUpdateRequest body: (required) + :return: AdminProjectDomainAttributesUpdateResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.update_project_with_http_info(id, body, **kwargs) # noqa: E501 + return self.update_project_domain_attributes_with_http_info(attributes_project, attributes_domain, body, **kwargs) # noqa: E501 else: - (data) = self.update_project_with_http_info(id, body, **kwargs) # noqa: E501 + (data) = self.update_project_domain_attributes_with_http_info(attributes_project, attributes_domain, body, **kwargs) # noqa: E501 return data - def update_project_with_http_info(self, id, body, **kwargs): # noqa: E501 - """Updates an existing :ref:`ref_flyteidl.admin.Project` flyteidl.admin.Project should be passed but the domains property should be empty; it will be ignored in the handler as domains cannot be updated via this API. # noqa: E501 + def update_project_domain_attributes_with_http_info(self, attributes_project, attributes_domain, body, **kwargs): # noqa: E501 + """Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.update_project_with_http_info(id, body, async_req=True) + >>> thread = api.update_project_domain_attributes_with_http_info(attributes_project, attributes_domain, body, async_req=True) >>> result = thread.get() :param async_req bool - :param str id: Globally unique project name. (required) - :param AdminProject body: (required) - :return: AdminProjectUpdateResponse + :param str attributes_project: Unique project id for which this set of attributes will be applied. (required) + :param str attributes_domain: Unique domain id for which this set of attributes will be applied. (required) + :param AdminProjectDomainAttributesUpdateRequest body: (required) + :return: AdminProjectDomainAttributesUpdateResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['id', 'body'] # noqa: E501 + all_params = ['attributes_project', 'attributes_domain', 'body'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -6447,24 +12328,30 @@ def update_project_with_http_info(self, id, body, **kwargs): # noqa: E501 if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method update_project" % key + " to method update_project_domain_attributes" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'id' is set - if ('id' not in params or - params['id'] is None): - raise ValueError("Missing the required parameter `id` when calling `update_project`") # noqa: E501 + # verify the required parameter 'attributes_project' is set + if ('attributes_project' not in params or + params['attributes_project'] is None): + raise ValueError("Missing the required parameter `attributes_project` when calling `update_project_domain_attributes`") # noqa: E501 + # verify the required parameter 'attributes_domain' is set + if ('attributes_domain' not in params or + params['attributes_domain'] is None): + raise ValueError("Missing the required parameter `attributes_domain` when calling `update_project_domain_attributes`") # noqa: E501 # verify the required parameter 'body' is set if ('body' not in params or params['body'] is None): - raise ValueError("Missing the required parameter `body` when calling `update_project`") # noqa: E501 + raise ValueError("Missing the required parameter `body` when calling `update_project_domain_attributes`") # noqa: E501 collection_formats = {} path_params = {} - if 'id' in params: - path_params['id'] = params['id'] # noqa: E501 + if 'attributes_project' in params: + path_params['attributes.project'] = params['attributes_project'] # noqa: E501 + if 'attributes_domain' in params: + path_params['attributes.domain'] = params['attributes_domain'] # noqa: E501 query_params = [] @@ -6488,14 +12375,14 @@ def update_project_with_http_info(self, id, body, **kwargs): # noqa: E501 auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/projects/{id}', 'PUT', + '/api/v1/project_domain_attributes/{attributes.project}/{attributes.domain}', 'PUT', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminProjectUpdateResponse', # noqa: E501 + response_type='AdminProjectDomainAttributesUpdateResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -6503,45 +12390,49 @@ def update_project_with_http_info(self, id, body, **kwargs): # noqa: E501 _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def update_project_attributes(self, attributes_project, body, **kwargs): # noqa: E501 - """Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` at the project level # noqa: E501 + def update_project_domain_attributes2(self, attributes_org, attributes_project, attributes_domain, body, **kwargs): # noqa: E501 + """Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.update_project_attributes(attributes_project, body, async_req=True) + >>> thread = api.update_project_domain_attributes2(attributes_org, attributes_project, attributes_domain, body, async_req=True) >>> result = thread.get() :param async_req bool + :param str attributes_org: Optional, org key applied to the attributes. (required) :param str attributes_project: Unique project id for which this set of attributes will be applied. (required) - :param AdminProjectAttributesUpdateRequest body: (required) - :return: AdminProjectAttributesUpdateResponse + :param str attributes_domain: Unique domain id for which this set of attributes will be applied. (required) + :param AdminProjectDomainAttributesUpdateRequest body: (required) + :return: AdminProjectDomainAttributesUpdateResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.update_project_attributes_with_http_info(attributes_project, body, **kwargs) # noqa: E501 + return self.update_project_domain_attributes2_with_http_info(attributes_org, attributes_project, attributes_domain, body, **kwargs) # noqa: E501 else: - (data) = self.update_project_attributes_with_http_info(attributes_project, body, **kwargs) # noqa: E501 + (data) = self.update_project_domain_attributes2_with_http_info(attributes_org, attributes_project, attributes_domain, body, **kwargs) # noqa: E501 return data - def update_project_attributes_with_http_info(self, attributes_project, body, **kwargs): # noqa: E501 - """Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` at the project level # noqa: E501 + def update_project_domain_attributes2_with_http_info(self, attributes_org, attributes_project, attributes_domain, body, **kwargs): # noqa: E501 + """Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.update_project_attributes_with_http_info(attributes_project, body, async_req=True) + >>> thread = api.update_project_domain_attributes2_with_http_info(attributes_org, attributes_project, attributes_domain, body, async_req=True) >>> result = thread.get() :param async_req bool + :param str attributes_org: Optional, org key applied to the attributes. (required) :param str attributes_project: Unique project id for which this set of attributes will be applied. (required) - :param AdminProjectAttributesUpdateRequest body: (required) - :return: AdminProjectAttributesUpdateResponse + :param str attributes_domain: Unique domain id for which this set of attributes will be applied. (required) + :param AdminProjectDomainAttributesUpdateRequest body: (required) + :return: AdminProjectDomainAttributesUpdateResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['attributes_project', 'body'] # noqa: E501 + all_params = ['attributes_org', 'attributes_project', 'attributes_domain', 'body'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -6552,24 +12443,36 @@ def update_project_attributes_with_http_info(self, attributes_project, body, **k if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method update_project_attributes" % key + " to method update_project_domain_attributes2" % key ) params[key] = val del params['kwargs'] + # verify the required parameter 'attributes_org' is set + if ('attributes_org' not in params or + params['attributes_org'] is None): + raise ValueError("Missing the required parameter `attributes_org` when calling `update_project_domain_attributes2`") # noqa: E501 # verify the required parameter 'attributes_project' is set if ('attributes_project' not in params or params['attributes_project'] is None): - raise ValueError("Missing the required parameter `attributes_project` when calling `update_project_attributes`") # noqa: E501 + raise ValueError("Missing the required parameter `attributes_project` when calling `update_project_domain_attributes2`") # noqa: E501 + # verify the required parameter 'attributes_domain' is set + if ('attributes_domain' not in params or + params['attributes_domain'] is None): + raise ValueError("Missing the required parameter `attributes_domain` when calling `update_project_domain_attributes2`") # noqa: E501 # verify the required parameter 'body' is set if ('body' not in params or params['body'] is None): - raise ValueError("Missing the required parameter `body` when calling `update_project_attributes`") # noqa: E501 + raise ValueError("Missing the required parameter `body` when calling `update_project_domain_attributes2`") # noqa: E501 collection_formats = {} path_params = {} + if 'attributes_org' in params: + path_params['attributes.org'] = params['attributes_org'] # noqa: E501 if 'attributes_project' in params: path_params['attributes.project'] = params['attributes_project'] # noqa: E501 + if 'attributes_domain' in params: + path_params['attributes.domain'] = params['attributes_domain'] # noqa: E501 query_params = [] @@ -6593,14 +12496,14 @@ def update_project_attributes_with_http_info(self, attributes_project, body, **k auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/project_attributes/{attributes.project}', 'PUT', + '/api/v1/project_domain_attributes/org/{attributes.org}/{attributes.project}/{attributes.domain}', 'PUT', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminProjectAttributesUpdateResponse', # noqa: E501 + response_type='AdminProjectDomainAttributesUpdateResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -6608,47 +12511,49 @@ def update_project_attributes_with_http_info(self, attributes_project, body, **k _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def update_project_domain_attributes(self, attributes_project, attributes_domain, body, **kwargs): # noqa: E501 - """Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 + def update_workflow_attributes(self, attributes_project, attributes_domain, attributes_workflow, body, **kwargs): # noqa: E501 + """Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.update_project_domain_attributes(attributes_project, attributes_domain, body, async_req=True) + >>> thread = api.update_workflow_attributes(attributes_project, attributes_domain, attributes_workflow, body, async_req=True) >>> result = thread.get() :param async_req bool :param str attributes_project: Unique project id for which this set of attributes will be applied. (required) :param str attributes_domain: Unique domain id for which this set of attributes will be applied. (required) - :param AdminProjectDomainAttributesUpdateRequest body: (required) - :return: AdminProjectDomainAttributesUpdateResponse + :param str attributes_workflow: Workflow name for which this set of attributes will be applied. (required) + :param AdminWorkflowAttributesUpdateRequest body: (required) + :return: AdminWorkflowAttributesUpdateResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.update_project_domain_attributes_with_http_info(attributes_project, attributes_domain, body, **kwargs) # noqa: E501 + return self.update_workflow_attributes_with_http_info(attributes_project, attributes_domain, attributes_workflow, body, **kwargs) # noqa: E501 else: - (data) = self.update_project_domain_attributes_with_http_info(attributes_project, attributes_domain, body, **kwargs) # noqa: E501 + (data) = self.update_workflow_attributes_with_http_info(attributes_project, attributes_domain, attributes_workflow, body, **kwargs) # noqa: E501 return data - def update_project_domain_attributes_with_http_info(self, attributes_project, attributes_domain, body, **kwargs): # noqa: E501 - """Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 + def update_workflow_attributes_with_http_info(self, attributes_project, attributes_domain, attributes_workflow, body, **kwargs): # noqa: E501 + """Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.update_project_domain_attributes_with_http_info(attributes_project, attributes_domain, body, async_req=True) + >>> thread = api.update_workflow_attributes_with_http_info(attributes_project, attributes_domain, attributes_workflow, body, async_req=True) >>> result = thread.get() :param async_req bool :param str attributes_project: Unique project id for which this set of attributes will be applied. (required) :param str attributes_domain: Unique domain id for which this set of attributes will be applied. (required) - :param AdminProjectDomainAttributesUpdateRequest body: (required) - :return: AdminProjectDomainAttributesUpdateResponse + :param str attributes_workflow: Workflow name for which this set of attributes will be applied. (required) + :param AdminWorkflowAttributesUpdateRequest body: (required) + :return: AdminWorkflowAttributesUpdateResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['attributes_project', 'attributes_domain', 'body'] # noqa: E501 + all_params = ['attributes_project', 'attributes_domain', 'attributes_workflow', 'body'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -6659,22 +12564,26 @@ def update_project_domain_attributes_with_http_info(self, attributes_project, at if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method update_project_domain_attributes" % key + " to method update_workflow_attributes" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'attributes_project' is set if ('attributes_project' not in params or params['attributes_project'] is None): - raise ValueError("Missing the required parameter `attributes_project` when calling `update_project_domain_attributes`") # noqa: E501 + raise ValueError("Missing the required parameter `attributes_project` when calling `update_workflow_attributes`") # noqa: E501 # verify the required parameter 'attributes_domain' is set if ('attributes_domain' not in params or params['attributes_domain'] is None): - raise ValueError("Missing the required parameter `attributes_domain` when calling `update_project_domain_attributes`") # noqa: E501 + raise ValueError("Missing the required parameter `attributes_domain` when calling `update_workflow_attributes`") # noqa: E501 + # verify the required parameter 'attributes_workflow' is set + if ('attributes_workflow' not in params or + params['attributes_workflow'] is None): + raise ValueError("Missing the required parameter `attributes_workflow` when calling `update_workflow_attributes`") # noqa: E501 # verify the required parameter 'body' is set if ('body' not in params or params['body'] is None): - raise ValueError("Missing the required parameter `body` when calling `update_project_domain_attributes`") # noqa: E501 + raise ValueError("Missing the required parameter `body` when calling `update_workflow_attributes`") # noqa: E501 collection_formats = {} @@ -6683,6 +12592,8 @@ def update_project_domain_attributes_with_http_info(self, attributes_project, at path_params['attributes.project'] = params['attributes_project'] # noqa: E501 if 'attributes_domain' in params: path_params['attributes.domain'] = params['attributes_domain'] # noqa: E501 + if 'attributes_workflow' in params: + path_params['attributes.workflow'] = params['attributes_workflow'] # noqa: E501 query_params = [] @@ -6706,14 +12617,14 @@ def update_project_domain_attributes_with_http_info(self, attributes_project, at auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/project_domain_attributes/{attributes.project}/{attributes.domain}', 'PUT', + '/api/v1/workflow_attributes/{attributes.project}/{attributes.domain}/{attributes.workflow}', 'PUT', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminProjectDomainAttributesUpdateResponse', # noqa: E501 + response_type='AdminWorkflowAttributesUpdateResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -6721,15 +12632,16 @@ def update_project_domain_attributes_with_http_info(self, attributes_project, at _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def update_workflow_attributes(self, attributes_project, attributes_domain, attributes_workflow, body, **kwargs): # noqa: E501 + def update_workflow_attributes2(self, attributes_org, attributes_project, attributes_domain, attributes_workflow, body, **kwargs): # noqa: E501 """Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.update_workflow_attributes(attributes_project, attributes_domain, attributes_workflow, body, async_req=True) + >>> thread = api.update_workflow_attributes2(attributes_org, attributes_project, attributes_domain, attributes_workflow, body, async_req=True) >>> result = thread.get() :param async_req bool + :param str attributes_org: Optional, org key applied to the attributes. (required) :param str attributes_project: Unique project id for which this set of attributes will be applied. (required) :param str attributes_domain: Unique domain id for which this set of attributes will be applied. (required) :param str attributes_workflow: Workflow name for which this set of attributes will be applied. (required) @@ -6740,20 +12652,21 @@ def update_workflow_attributes(self, attributes_project, attributes_domain, attr """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.update_workflow_attributes_with_http_info(attributes_project, attributes_domain, attributes_workflow, body, **kwargs) # noqa: E501 + return self.update_workflow_attributes2_with_http_info(attributes_org, attributes_project, attributes_domain, attributes_workflow, body, **kwargs) # noqa: E501 else: - (data) = self.update_workflow_attributes_with_http_info(attributes_project, attributes_domain, attributes_workflow, body, **kwargs) # noqa: E501 + (data) = self.update_workflow_attributes2_with_http_info(attributes_org, attributes_project, attributes_domain, attributes_workflow, body, **kwargs) # noqa: E501 return data - def update_workflow_attributes_with_http_info(self, attributes_project, attributes_domain, attributes_workflow, body, **kwargs): # noqa: E501 + def update_workflow_attributes2_with_http_info(self, attributes_org, attributes_project, attributes_domain, attributes_workflow, body, **kwargs): # noqa: E501 """Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.update_workflow_attributes_with_http_info(attributes_project, attributes_domain, attributes_workflow, body, async_req=True) + >>> thread = api.update_workflow_attributes2_with_http_info(attributes_org, attributes_project, attributes_domain, attributes_workflow, body, async_req=True) >>> result = thread.get() :param async_req bool + :param str attributes_org: Optional, org key applied to the attributes. (required) :param str attributes_project: Unique project id for which this set of attributes will be applied. (required) :param str attributes_domain: Unique domain id for which this set of attributes will be applied. (required) :param str attributes_workflow: Workflow name for which this set of attributes will be applied. (required) @@ -6763,7 +12676,7 @@ def update_workflow_attributes_with_http_info(self, attributes_project, attribut returns the request thread. """ - all_params = ['attributes_project', 'attributes_domain', 'attributes_workflow', 'body'] # noqa: E501 + all_params = ['attributes_org', 'attributes_project', 'attributes_domain', 'attributes_workflow', 'body'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -6774,30 +12687,36 @@ def update_workflow_attributes_with_http_info(self, attributes_project, attribut if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method update_workflow_attributes" % key + " to method update_workflow_attributes2" % key ) params[key] = val del params['kwargs'] + # verify the required parameter 'attributes_org' is set + if ('attributes_org' not in params or + params['attributes_org'] is None): + raise ValueError("Missing the required parameter `attributes_org` when calling `update_workflow_attributes2`") # noqa: E501 # verify the required parameter 'attributes_project' is set if ('attributes_project' not in params or params['attributes_project'] is None): - raise ValueError("Missing the required parameter `attributes_project` when calling `update_workflow_attributes`") # noqa: E501 + raise ValueError("Missing the required parameter `attributes_project` when calling `update_workflow_attributes2`") # noqa: E501 # verify the required parameter 'attributes_domain' is set if ('attributes_domain' not in params or params['attributes_domain'] is None): - raise ValueError("Missing the required parameter `attributes_domain` when calling `update_workflow_attributes`") # noqa: E501 + raise ValueError("Missing the required parameter `attributes_domain` when calling `update_workflow_attributes2`") # noqa: E501 # verify the required parameter 'attributes_workflow' is set if ('attributes_workflow' not in params or params['attributes_workflow'] is None): - raise ValueError("Missing the required parameter `attributes_workflow` when calling `update_workflow_attributes`") # noqa: E501 + raise ValueError("Missing the required parameter `attributes_workflow` when calling `update_workflow_attributes2`") # noqa: E501 # verify the required parameter 'body' is set if ('body' not in params or params['body'] is None): - raise ValueError("Missing the required parameter `body` when calling `update_workflow_attributes`") # noqa: E501 + raise ValueError("Missing the required parameter `body` when calling `update_workflow_attributes2`") # noqa: E501 collection_formats = {} path_params = {} + if 'attributes_org' in params: + path_params['attributes.org'] = params['attributes_org'] # noqa: E501 if 'attributes_project' in params: path_params['attributes.project'] = params['attributes_project'] # noqa: E501 if 'attributes_domain' in params: @@ -6827,7 +12746,7 @@ def update_workflow_attributes_with_http_info(self, attributes_project, attribut auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/workflow_attributes/{attributes.project}/{attributes.domain}/{attributes.workflow}', 'PUT', + '/api/v1/workflow_attributes/org/{attributes.org}/{attributes.project}/{attributes.domain}/{attributes.workflow}', 'PUT', path_params, query_params, header_params, diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/admin_execution_create_request.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/admin_execution_create_request.py index 5c5373a88d..228a1c5847 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/admin_execution_create_request.py +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/admin_execution_create_request.py @@ -38,7 +38,8 @@ class AdminExecutionCreateRequest(object): 'domain': 'str', 'name': 'str', 'spec': 'AdminExecutionSpec', - 'inputs': 'CoreLiteralMap' + 'inputs': 'CoreLiteralMap', + 'org': 'str' } attribute_map = { @@ -46,10 +47,11 @@ class AdminExecutionCreateRequest(object): 'domain': 'domain', 'name': 'name', 'spec': 'spec', - 'inputs': 'inputs' + 'inputs': 'inputs', + 'org': 'org' } - def __init__(self, project=None, domain=None, name=None, spec=None, inputs=None): # noqa: E501 + def __init__(self, project=None, domain=None, name=None, spec=None, inputs=None, org=None): # noqa: E501 """AdminExecutionCreateRequest - a model defined in Swagger""" # noqa: E501 self._project = None @@ -57,6 +59,7 @@ def __init__(self, project=None, domain=None, name=None, spec=None, inputs=None) self._name = None self._spec = None self._inputs = None + self._org = None self.discriminator = None if project is not None: @@ -69,6 +72,8 @@ def __init__(self, project=None, domain=None, name=None, spec=None, inputs=None) self.spec = spec if inputs is not None: self.inputs = inputs + if org is not None: + self.org = org @property def project(self): @@ -175,6 +180,29 @@ def inputs(self, inputs): self._inputs = inputs + @property + def org(self): + """Gets the org of this AdminExecutionCreateRequest. # noqa: E501 + + Optional, org key applied to the resource. # noqa: E501 + + :return: The org of this AdminExecutionCreateRequest. # noqa: E501 + :rtype: str + """ + return self._org + + @org.setter + def org(self, org): + """Sets the org of this AdminExecutionCreateRequest. + + Optional, org key applied to the resource. # noqa: E501 + + :param org: The org of this AdminExecutionCreateRequest. # noqa: E501 + :type: str + """ + + self._org = org + def to_dict(self): """Returns the model properties as a dict""" result = {} diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/admin_matchable_attributes_configuration.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/admin_matchable_attributes_configuration.py index a9be455f25..58e05cbdb4 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/admin_matchable_attributes_configuration.py +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/admin_matchable_attributes_configuration.py @@ -37,7 +37,8 @@ class AdminMatchableAttributesConfiguration(object): 'domain': 'str', 'project': 'str', 'workflow': 'str', - 'launch_plan': 'str' + 'launch_plan': 'str', + 'org': 'str' } attribute_map = { @@ -45,10 +46,11 @@ class AdminMatchableAttributesConfiguration(object): 'domain': 'domain', 'project': 'project', 'workflow': 'workflow', - 'launch_plan': 'launch_plan' + 'launch_plan': 'launch_plan', + 'org': 'org' } - def __init__(self, attributes=None, domain=None, project=None, workflow=None, launch_plan=None): # noqa: E501 + def __init__(self, attributes=None, domain=None, project=None, workflow=None, launch_plan=None, org=None): # noqa: E501 """AdminMatchableAttributesConfiguration - a model defined in Swagger""" # noqa: E501 self._attributes = None @@ -56,6 +58,7 @@ def __init__(self, attributes=None, domain=None, project=None, workflow=None, la self._project = None self._workflow = None self._launch_plan = None + self._org = None self.discriminator = None if attributes is not None: @@ -68,6 +71,8 @@ def __init__(self, attributes=None, domain=None, project=None, workflow=None, la self.workflow = workflow if launch_plan is not None: self.launch_plan = launch_plan + if org is not None: + self.org = org @property def attributes(self): @@ -174,6 +179,29 @@ def launch_plan(self, launch_plan): self._launch_plan = launch_plan + @property + def org(self): + """Gets the org of this AdminMatchableAttributesConfiguration. # noqa: E501 + + Optional, org key applied to the resource. # noqa: E501 + + :return: The org of this AdminMatchableAttributesConfiguration. # noqa: E501 + :rtype: str + """ + return self._org + + @org.setter + def org(self, org): + """Sets the org of this AdminMatchableAttributesConfiguration. + + Optional, org key applied to the resource. # noqa: E501 + + :param org: The org of this AdminMatchableAttributesConfiguration. # noqa: E501 + :type: str + """ + + self._org = org + def to_dict(self): """Returns the model properties as a dict""" result = {} diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/admin_named_entity_identifier.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/admin_named_entity_identifier.py index 8a06241403..a38944ceec 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/admin_named_entity_identifier.py +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/admin_named_entity_identifier.py @@ -33,21 +33,24 @@ class AdminNamedEntityIdentifier(object): swagger_types = { 'project': 'str', 'domain': 'str', - 'name': 'str' + 'name': 'str', + 'org': 'str' } attribute_map = { 'project': 'project', 'domain': 'domain', - 'name': 'name' + 'name': 'name', + 'org': 'org' } - def __init__(self, project=None, domain=None, name=None): # noqa: E501 + def __init__(self, project=None, domain=None, name=None, org=None): # noqa: E501 """AdminNamedEntityIdentifier - a model defined in Swagger""" # noqa: E501 self._project = None self._domain = None self._name = None + self._org = None self.discriminator = None if project is not None: @@ -56,6 +59,8 @@ def __init__(self, project=None, domain=None, name=None): # noqa: E501 self.domain = domain if name is not None: self.name = name + if org is not None: + self.org = org @property def project(self): @@ -124,6 +129,29 @@ def name(self, name): self._name = name + @property + def org(self): + """Gets the org of this AdminNamedEntityIdentifier. # noqa: E501 + + Optional, org key applied to the resource. # noqa: E501 + + :return: The org of this AdminNamedEntityIdentifier. # noqa: E501 + :rtype: str + """ + return self._org + + @org.setter + def org(self, org): + """Sets the org of this AdminNamedEntityIdentifier. + + Optional, org key applied to the resource. # noqa: E501 + + :param org: The org of this AdminNamedEntityIdentifier. # noqa: E501 + :type: str + """ + + self._org = org + def to_dict(self): """Returns the model properties as a dict""" result = {} diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/admin_project.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/admin_project.py index 1d64553b8f..7e62124a77 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/admin_project.py +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/admin_project.py @@ -40,7 +40,8 @@ class AdminProject(object): 'domains': 'list[AdminDomain]', 'description': 'str', 'labels': 'AdminLabels', - 'state': 'ProjectProjectState' + 'state': 'ProjectProjectState', + 'org': 'str' } attribute_map = { @@ -49,10 +50,11 @@ class AdminProject(object): 'domains': 'domains', 'description': 'description', 'labels': 'labels', - 'state': 'state' + 'state': 'state', + 'org': 'org' } - def __init__(self, id=None, name=None, domains=None, description=None, labels=None, state=None): # noqa: E501 + def __init__(self, id=None, name=None, domains=None, description=None, labels=None, state=None, org=None): # noqa: E501 """AdminProject - a model defined in Swagger""" # noqa: E501 self._id = None @@ -61,6 +63,7 @@ def __init__(self, id=None, name=None, domains=None, description=None, labels=No self._description = None self._labels = None self._state = None + self._org = None self.discriminator = None if id is not None: @@ -75,6 +78,8 @@ def __init__(self, id=None, name=None, domains=None, description=None, labels=No self.labels = labels if state is not None: self.state = state + if org is not None: + self.org = org @property def id(self): @@ -208,6 +213,29 @@ def state(self, state): self._state = state + @property + def org(self): + """Gets the org of this AdminProject. # noqa: E501 + + Optional, org key applied to the resource. # noqa: E501 + + :return: The org of this AdminProject. # noqa: E501 + :rtype: str + """ + return self._org + + @org.setter + def org(self, org): + """Sets the org of this AdminProject. + + Optional, org key applied to the resource. # noqa: E501 + + :param org: The org of this AdminProject. # noqa: E501 + :type: str + """ + + self._org = org + def to_dict(self): """Returns the model properties as a dict""" result = {} diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/admin_project_attributes.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/admin_project_attributes.py index a892f96441..c0c913f4fd 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/admin_project_attributes.py +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/admin_project_attributes.py @@ -34,25 +34,30 @@ class AdminProjectAttributes(object): """ swagger_types = { 'project': 'str', - 'matching_attributes': 'AdminMatchingAttributes' + 'matching_attributes': 'AdminMatchingAttributes', + 'org': 'str' } attribute_map = { 'project': 'project', - 'matching_attributes': 'matching_attributes' + 'matching_attributes': 'matching_attributes', + 'org': 'org' } - def __init__(self, project=None, matching_attributes=None): # noqa: E501 + def __init__(self, project=None, matching_attributes=None, org=None): # noqa: E501 """AdminProjectAttributes - a model defined in Swagger""" # noqa: E501 self._project = None self._matching_attributes = None + self._org = None self.discriminator = None if project is not None: self.project = project if matching_attributes is not None: self.matching_attributes = matching_attributes + if org is not None: + self.org = org @property def project(self): @@ -98,6 +103,29 @@ def matching_attributes(self, matching_attributes): self._matching_attributes = matching_attributes + @property + def org(self): + """Gets the org of this AdminProjectAttributes. # noqa: E501 + + Optional, org key applied to the project. # noqa: E501 + + :return: The org of this AdminProjectAttributes. # noqa: E501 + :rtype: str + """ + return self._org + + @org.setter + def org(self, org): + """Sets the org of this AdminProjectAttributes. + + Optional, org key applied to the project. # noqa: E501 + + :param org: The org of this AdminProjectAttributes. # noqa: E501 + :type: str + """ + + self._org = org + def to_dict(self): """Returns the model properties as a dict""" result = {} diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/admin_project_attributes_delete_request.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/admin_project_attributes_delete_request.py index 5b41e2c590..439707074f 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/admin_project_attributes_delete_request.py +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/admin_project_attributes_delete_request.py @@ -34,25 +34,30 @@ class AdminProjectAttributesDeleteRequest(object): """ swagger_types = { 'project': 'str', - 'resource_type': 'AdminMatchableResource' + 'resource_type': 'AdminMatchableResource', + 'org': 'str' } attribute_map = { 'project': 'project', - 'resource_type': 'resource_type' + 'resource_type': 'resource_type', + 'org': 'org' } - def __init__(self, project=None, resource_type=None): # noqa: E501 + def __init__(self, project=None, resource_type=None, org=None): # noqa: E501 """AdminProjectAttributesDeleteRequest - a model defined in Swagger""" # noqa: E501 self._project = None self._resource_type = None + self._org = None self.discriminator = None if project is not None: self.project = project if resource_type is not None: self.resource_type = resource_type + if org is not None: + self.org = org @property def project(self): @@ -96,6 +101,29 @@ def resource_type(self, resource_type): self._resource_type = resource_type + @property + def org(self): + """Gets the org of this AdminProjectAttributesDeleteRequest. # noqa: E501 + + Optional, org key applied to the project. # noqa: E501 + + :return: The org of this AdminProjectAttributesDeleteRequest. # noqa: E501 + :rtype: str + """ + return self._org + + @org.setter + def org(self, org): + """Sets the org of this AdminProjectAttributesDeleteRequest. + + Optional, org key applied to the project. # noqa: E501 + + :param org: The org of this AdminProjectAttributesDeleteRequest. # noqa: E501 + :type: str + """ + + self._org = org + def to_dict(self): """Returns the model properties as a dict""" result = {} diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/admin_project_domain_attributes.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/admin_project_domain_attributes.py index 0c7d6e4559..2a8abfe98e 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/admin_project_domain_attributes.py +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/admin_project_domain_attributes.py @@ -35,21 +35,24 @@ class AdminProjectDomainAttributes(object): swagger_types = { 'project': 'str', 'domain': 'str', - 'matching_attributes': 'AdminMatchingAttributes' + 'matching_attributes': 'AdminMatchingAttributes', + 'org': 'str' } attribute_map = { 'project': 'project', 'domain': 'domain', - 'matching_attributes': 'matching_attributes' + 'matching_attributes': 'matching_attributes', + 'org': 'org' } - def __init__(self, project=None, domain=None, matching_attributes=None): # noqa: E501 + def __init__(self, project=None, domain=None, matching_attributes=None, org=None): # noqa: E501 """AdminProjectDomainAttributes - a model defined in Swagger""" # noqa: E501 self._project = None self._domain = None self._matching_attributes = None + self._org = None self.discriminator = None if project is not None: @@ -58,6 +61,8 @@ def __init__(self, project=None, domain=None, matching_attributes=None): # noqa self.domain = domain if matching_attributes is not None: self.matching_attributes = matching_attributes + if org is not None: + self.org = org @property def project(self): @@ -126,6 +131,29 @@ def matching_attributes(self, matching_attributes): self._matching_attributes = matching_attributes + @property + def org(self): + """Gets the org of this AdminProjectDomainAttributes. # noqa: E501 + + Optional, org key applied to the attributes. # noqa: E501 + + :return: The org of this AdminProjectDomainAttributes. # noqa: E501 + :rtype: str + """ + return self._org + + @org.setter + def org(self, org): + """Sets the org of this AdminProjectDomainAttributes. + + Optional, org key applied to the attributes. # noqa: E501 + + :param org: The org of this AdminProjectDomainAttributes. # noqa: E501 + :type: str + """ + + self._org = org + def to_dict(self): """Returns the model properties as a dict""" result = {} diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/admin_project_domain_attributes_delete_request.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/admin_project_domain_attributes_delete_request.py index aef8bfa14f..bafad3aa40 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/admin_project_domain_attributes_delete_request.py +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/admin_project_domain_attributes_delete_request.py @@ -35,21 +35,24 @@ class AdminProjectDomainAttributesDeleteRequest(object): swagger_types = { 'project': 'str', 'domain': 'str', - 'resource_type': 'AdminMatchableResource' + 'resource_type': 'AdminMatchableResource', + 'org': 'str' } attribute_map = { 'project': 'project', 'domain': 'domain', - 'resource_type': 'resource_type' + 'resource_type': 'resource_type', + 'org': 'org' } - def __init__(self, project=None, domain=None, resource_type=None): # noqa: E501 + def __init__(self, project=None, domain=None, resource_type=None, org=None): # noqa: E501 """AdminProjectDomainAttributesDeleteRequest - a model defined in Swagger""" # noqa: E501 self._project = None self._domain = None self._resource_type = None + self._org = None self.discriminator = None if project is not None: @@ -58,6 +61,8 @@ def __init__(self, project=None, domain=None, resource_type=None): # noqa: E501 self.domain = domain if resource_type is not None: self.resource_type = resource_type + if org is not None: + self.org = org @property def project(self): @@ -122,6 +127,29 @@ def resource_type(self, resource_type): self._resource_type = resource_type + @property + def org(self): + """Gets the org of this AdminProjectDomainAttributesDeleteRequest. # noqa: E501 + + Optional, org key applied to the attributes. # noqa: E501 + + :return: The org of this AdminProjectDomainAttributesDeleteRequest. # noqa: E501 + :rtype: str + """ + return self._org + + @org.setter + def org(self, org): + """Sets the org of this AdminProjectDomainAttributesDeleteRequest. + + Optional, org key applied to the attributes. # noqa: E501 + + :param org: The org of this AdminProjectDomainAttributesDeleteRequest. # noqa: E501 + :type: str + """ + + self._org = org + def to_dict(self): """Returns the model properties as a dict""" result = {} diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/admin_workflow_attributes.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/admin_workflow_attributes.py index e5dc389073..4add43a463 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/admin_workflow_attributes.py +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/admin_workflow_attributes.py @@ -36,23 +36,26 @@ class AdminWorkflowAttributes(object): 'project': 'str', 'domain': 'str', 'workflow': 'str', - 'matching_attributes': 'AdminMatchingAttributes' + 'matching_attributes': 'AdminMatchingAttributes', + 'org': 'str' } attribute_map = { 'project': 'project', 'domain': 'domain', 'workflow': 'workflow', - 'matching_attributes': 'matching_attributes' + 'matching_attributes': 'matching_attributes', + 'org': 'org' } - def __init__(self, project=None, domain=None, workflow=None, matching_attributes=None): # noqa: E501 + def __init__(self, project=None, domain=None, workflow=None, matching_attributes=None, org=None): # noqa: E501 """AdminWorkflowAttributes - a model defined in Swagger""" # noqa: E501 self._project = None self._domain = None self._workflow = None self._matching_attributes = None + self._org = None self.discriminator = None if project is not None: @@ -63,6 +66,8 @@ def __init__(self, project=None, domain=None, workflow=None, matching_attributes self.workflow = workflow if matching_attributes is not None: self.matching_attributes = matching_attributes + if org is not None: + self.org = org @property def project(self): @@ -154,6 +159,29 @@ def matching_attributes(self, matching_attributes): self._matching_attributes = matching_attributes + @property + def org(self): + """Gets the org of this AdminWorkflowAttributes. # noqa: E501 + + Optional, org key applied to the attributes. # noqa: E501 + + :return: The org of this AdminWorkflowAttributes. # noqa: E501 + :rtype: str + """ + return self._org + + @org.setter + def org(self, org): + """Sets the org of this AdminWorkflowAttributes. + + Optional, org key applied to the attributes. # noqa: E501 + + :param org: The org of this AdminWorkflowAttributes. # noqa: E501 + :type: str + """ + + self._org = org + def to_dict(self): """Returns the model properties as a dict""" result = {} diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/admin_workflow_attributes_delete_request.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/admin_workflow_attributes_delete_request.py index 348cd98213..445583cf96 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/admin_workflow_attributes_delete_request.py +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/admin_workflow_attributes_delete_request.py @@ -36,23 +36,26 @@ class AdminWorkflowAttributesDeleteRequest(object): 'project': 'str', 'domain': 'str', 'workflow': 'str', - 'resource_type': 'AdminMatchableResource' + 'resource_type': 'AdminMatchableResource', + 'org': 'str' } attribute_map = { 'project': 'project', 'domain': 'domain', 'workflow': 'workflow', - 'resource_type': 'resource_type' + 'resource_type': 'resource_type', + 'org': 'org' } - def __init__(self, project=None, domain=None, workflow=None, resource_type=None): # noqa: E501 + def __init__(self, project=None, domain=None, workflow=None, resource_type=None, org=None): # noqa: E501 """AdminWorkflowAttributesDeleteRequest - a model defined in Swagger""" # noqa: E501 self._project = None self._domain = None self._workflow = None self._resource_type = None + self._org = None self.discriminator = None if project is not None: @@ -63,6 +66,8 @@ def __init__(self, project=None, domain=None, workflow=None, resource_type=None) self.workflow = workflow if resource_type is not None: self.resource_type = resource_type + if org is not None: + self.org = org @property def project(self): @@ -148,6 +153,29 @@ def resource_type(self, resource_type): self._resource_type = resource_type + @property + def org(self): + """Gets the org of this AdminWorkflowAttributesDeleteRequest. # noqa: E501 + + Optional, org key applied to the attributes. # noqa: E501 + + :return: The org of this AdminWorkflowAttributesDeleteRequest. # noqa: E501 + :rtype: str + """ + return self._org + + @org.setter + def org(self, org): + """Sets the org of this AdminWorkflowAttributesDeleteRequest. + + Optional, org key applied to the attributes. # noqa: E501 + + :param org: The org of this AdminWorkflowAttributesDeleteRequest. # noqa: E501 + :type: str + """ + + self._org = org + def to_dict(self): """Returns the model properties as a dict""" result = {} diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_identifier.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_identifier.py index ae03fc69e6..1770753b3e 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_identifier.py +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_identifier.py @@ -37,7 +37,8 @@ class CoreIdentifier(object): 'project': 'str', 'domain': 'str', 'name': 'str', - 'version': 'str' + 'version': 'str', + 'org': 'str' } attribute_map = { @@ -45,10 +46,11 @@ class CoreIdentifier(object): 'project': 'project', 'domain': 'domain', 'name': 'name', - 'version': 'version' + 'version': 'version', + 'org': 'org' } - def __init__(self, resource_type=None, project=None, domain=None, name=None, version=None): # noqa: E501 + def __init__(self, resource_type=None, project=None, domain=None, name=None, version=None, org=None): # noqa: E501 """CoreIdentifier - a model defined in Swagger""" # noqa: E501 self._resource_type = None @@ -56,6 +58,7 @@ def __init__(self, resource_type=None, project=None, domain=None, name=None, ver self._domain = None self._name = None self._version = None + self._org = None self.discriminator = None if resource_type is not None: @@ -68,6 +71,8 @@ def __init__(self, resource_type=None, project=None, domain=None, name=None, ver self.name = name if version is not None: self.version = version + if org is not None: + self.org = org @property def resource_type(self): @@ -184,6 +189,29 @@ def version(self, version): self._version = version + @property + def org(self): + """Gets the org of this CoreIdentifier. # noqa: E501 + + Optional, org key applied to the resource. # noqa: E501 + + :return: The org of this CoreIdentifier. # noqa: E501 + :rtype: str + """ + return self._org + + @org.setter + def org(self, org): + """Sets the org of this CoreIdentifier. + + Optional, org key applied to the resource. # noqa: E501 + + :param org: The org of this CoreIdentifier. # noqa: E501 + :type: str + """ + + self._org = org + def to_dict(self): """Returns the model properties as a dict""" result = {} diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_workflow_execution_identifier.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_workflow_execution_identifier.py index 09bd015a36..aad31c1687 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_workflow_execution_identifier.py +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_workflow_execution_identifier.py @@ -33,21 +33,24 @@ class CoreWorkflowExecutionIdentifier(object): swagger_types = { 'project': 'str', 'domain': 'str', - 'name': 'str' + 'name': 'str', + 'org': 'str' } attribute_map = { 'project': 'project', 'domain': 'domain', - 'name': 'name' + 'name': 'name', + 'org': 'org' } - def __init__(self, project=None, domain=None, name=None): # noqa: E501 + def __init__(self, project=None, domain=None, name=None, org=None): # noqa: E501 """CoreWorkflowExecutionIdentifier - a model defined in Swagger""" # noqa: E501 self._project = None self._domain = None self._name = None + self._org = None self.discriminator = None if project is not None: @@ -56,6 +59,8 @@ def __init__(self, project=None, domain=None, name=None): # noqa: E501 self.domain = domain if name is not None: self.name = name + if org is not None: + self.org = org @property def project(self): @@ -126,6 +131,29 @@ def name(self, name): self._name = name + @property + def org(self): + """Gets the org of this CoreWorkflowExecutionIdentifier. # noqa: E501 + + Optional, org key applied to the resource. # noqa: E501 + + :return: The org of this CoreWorkflowExecutionIdentifier. # noqa: E501 + :rtype: str + """ + return self._org + + @org.setter + def org(self, org): + """Sets the org of this CoreWorkflowExecutionIdentifier. + + Optional, org key applied to the resource. # noqa: E501 + + :param org: The org of this CoreWorkflowExecutionIdentifier. # noqa: E501 + :type: str + """ + + self._org = org + def to_dict(self): """Returns the model properties as a dict""" result = {} diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/test/test_admin_service_api.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/test/test_admin_service_api.py index 680b2cd5f5..21e5e86a25 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/test/test_admin_service_api.py +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/test/test_admin_service_api.py @@ -85,6 +85,13 @@ def test_delete_project_attributes(self): """ pass + def test_delete_project_attributes2(self): + """Test case for delete_project_attributes2 + + Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 + """ + pass + def test_delete_project_domain_attributes(self): """Test case for delete_project_domain_attributes @@ -92,6 +99,13 @@ def test_delete_project_domain_attributes(self): """ pass + def test_delete_project_domain_attributes2(self): + """Test case for delete_project_domain_attributes2 + + Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 + """ + pass + def test_delete_workflow_attributes(self): """Test case for delete_workflow_attributes @@ -99,6 +113,13 @@ def test_delete_workflow_attributes(self): """ pass + def test_delete_workflow_attributes2(self): + """Test case for delete_workflow_attributes2 + + Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. # noqa: E501 + """ + pass + def test_get_active_launch_plan(self): """Test case for get_active_launch_plan @@ -106,6 +127,13 @@ def test_get_active_launch_plan(self): """ pass + def test_get_active_launch_plan2(self): + """Test case for get_active_launch_plan2 + + Fetch the active version of a :ref:`ref_flyteidl.admin.LaunchPlan`. # noqa: E501 + """ + pass + def test_get_description_entity(self): """Test case for get_description_entity @@ -113,6 +141,13 @@ def test_get_description_entity(self): """ pass + def test_get_description_entity2(self): + """Test case for get_description_entity2 + + Fetch a :ref:`ref_flyteidl.admin.DescriptionEntity` object. # noqa: E501 + """ + pass + def test_get_execution(self): """Test case for get_execution @@ -120,6 +155,13 @@ def test_get_execution(self): """ pass + def test_get_execution2(self): + """Test case for get_execution2 + + Fetches a :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 + """ + pass + def test_get_execution_data(self): """Test case for get_execution_data @@ -127,6 +169,13 @@ def test_get_execution_data(self): """ pass + def test_get_execution_data2(self): + """Test case for get_execution_data2 + + Fetches input and output data for a :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 + """ + pass + def test_get_execution_metrics(self): """Test case for get_execution_metrics @@ -134,6 +183,13 @@ def test_get_execution_metrics(self): """ pass + def test_get_execution_metrics2(self): + """Test case for get_execution_metrics2 + + Fetches runtime metrics for a :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 + """ + pass + def test_get_launch_plan(self): """Test case for get_launch_plan @@ -141,6 +197,13 @@ def test_get_launch_plan(self): """ pass + def test_get_launch_plan2(self): + """Test case for get_launch_plan2 + + Fetch a :ref:`ref_flyteidl.admin.LaunchPlan` definition. # noqa: E501 + """ + pass + def test_get_named_entity(self): """Test case for get_named_entity @@ -148,6 +211,13 @@ def test_get_named_entity(self): """ pass + def test_get_named_entity2(self): + """Test case for get_named_entity2 + + Returns a :ref:`ref_flyteidl.admin.NamedEntity` object. # noqa: E501 + """ + pass + def test_get_node_execution(self): """Test case for get_node_execution @@ -155,6 +225,13 @@ def test_get_node_execution(self): """ pass + def test_get_node_execution2(self): + """Test case for get_node_execution2 + + Fetches a :ref:`ref_flyteidl.admin.NodeExecution`. # noqa: E501 + """ + pass + def test_get_node_execution_data(self): """Test case for get_node_execution_data @@ -162,6 +239,13 @@ def test_get_node_execution_data(self): """ pass + def test_get_node_execution_data2(self): + """Test case for get_node_execution_data2 + + Fetches input and output data for a :ref:`ref_flyteidl.admin.NodeExecution`. # noqa: E501 + """ + pass + def test_get_project_attributes(self): """Test case for get_project_attributes @@ -169,6 +253,13 @@ def test_get_project_attributes(self): """ pass + def test_get_project_attributes2(self): + """Test case for get_project_attributes2 + + Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 + """ + pass + def test_get_project_domain_attributes(self): """Test case for get_project_domain_attributes @@ -176,6 +267,13 @@ def test_get_project_domain_attributes(self): """ pass + def test_get_project_domain_attributes2(self): + """Test case for get_project_domain_attributes2 + + Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 + """ + pass + def test_get_task(self): """Test case for get_task @@ -183,6 +281,13 @@ def test_get_task(self): """ pass + def test_get_task2(self): + """Test case for get_task2 + + Fetch a :ref:`ref_flyteidl.admin.Task` definition. # noqa: E501 + """ + pass + def test_get_task_execution(self): """Test case for get_task_execution @@ -190,6 +295,13 @@ def test_get_task_execution(self): """ pass + def test_get_task_execution2(self): + """Test case for get_task_execution2 + + Fetches a :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 + """ + pass + def test_get_task_execution_data(self): """Test case for get_task_execution_data @@ -197,6 +309,13 @@ def test_get_task_execution_data(self): """ pass + def test_get_task_execution_data2(self): + """Test case for get_task_execution_data2 + + Fetches input and output data for a :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 + """ + pass + def test_get_version(self): """Test case for get_version @@ -210,6 +329,13 @@ def test_get_workflow(self): """ pass + def test_get_workflow2(self): + """Test case for get_workflow2 + + Fetch a :ref:`ref_flyteidl.admin.Workflow` definition. # noqa: E501 + """ + pass + def test_get_workflow_attributes(self): """Test case for get_workflow_attributes @@ -217,6 +343,13 @@ def test_get_workflow_attributes(self): """ pass + def test_get_workflow_attributes2(self): + """Test case for get_workflow_attributes2 + + Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. # noqa: E501 + """ + pass + def test_list_active_launch_plans(self): """Test case for list_active_launch_plans @@ -238,6 +371,20 @@ def test_list_description_entities2(self): """ pass + def test_list_description_entities3(self): + """Test case for list_description_entities3 + + Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. # noqa: E501 + """ + pass + + def test_list_description_entities4(self): + """Test case for list_description_entities4 + + Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. # noqa: E501 + """ + pass + def test_list_executions(self): """Test case for list_executions @@ -245,6 +392,13 @@ def test_list_executions(self): """ pass + def test_list_executions2(self): + """Test case for list_executions2 + + Fetch a list of :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 + """ + pass + def test_list_launch_plan_ids(self): """Test case for list_launch_plan_ids @@ -252,6 +406,13 @@ def test_list_launch_plan_ids(self): """ pass + def test_list_launch_plan_ids2(self): + """Test case for list_launch_plan_ids2 + + Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of launch plan objects. # noqa: E501 + """ + pass + def test_list_launch_plans(self): """Test case for list_launch_plans @@ -266,6 +427,20 @@ def test_list_launch_plans2(self): """ pass + def test_list_launch_plans3(self): + """Test case for list_launch_plans3 + + Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. # noqa: E501 + """ + pass + + def test_list_launch_plans4(self): + """Test case for list_launch_plans4 + + Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. # noqa: E501 + """ + pass + def test_list_matchable_attributes(self): """Test case for list_matchable_attributes @@ -280,6 +455,13 @@ def test_list_named_entities(self): """ pass + def test_list_named_entities2(self): + """Test case for list_named_entities2 + + Returns a list of :ref:`ref_flyteidl.admin.NamedEntity` objects. # noqa: E501 + """ + pass + def test_list_node_executions(self): """Test case for list_node_executions @@ -287,6 +469,13 @@ def test_list_node_executions(self): """ pass + def test_list_node_executions2(self): + """Test case for list_node_executions2 + + Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution`. # noqa: E501 + """ + pass + def test_list_node_executions_for_task(self): """Test case for list_node_executions_for_task @@ -294,6 +483,13 @@ def test_list_node_executions_for_task(self): """ pass + def test_list_node_executions_for_task2(self): + """Test case for list_node_executions_for_task2 + + Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution` launched by the reference :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 + """ + pass + def test_list_projects(self): """Test case for list_projects @@ -308,6 +504,13 @@ def test_list_task_executions(self): """ pass + def test_list_task_executions2(self): + """Test case for list_task_executions2 + + Fetches a list of :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 + """ + pass + def test_list_task_ids(self): """Test case for list_task_ids @@ -315,6 +518,13 @@ def test_list_task_ids(self): """ pass + def test_list_task_ids2(self): + """Test case for list_task_ids2 + + Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of task objects. # noqa: E501 + """ + pass + def test_list_tasks(self): """Test case for list_tasks @@ -329,6 +539,20 @@ def test_list_tasks2(self): """ pass + def test_list_tasks3(self): + """Test case for list_tasks3 + + Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions. # noqa: E501 + """ + pass + + def test_list_tasks4(self): + """Test case for list_tasks4 + + Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions. # noqa: E501 + """ + pass + def test_list_workflow_ids(self): """Test case for list_workflow_ids @@ -336,6 +560,13 @@ def test_list_workflow_ids(self): """ pass + def test_list_workflow_ids2(self): + """Test case for list_workflow_ids2 + + Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of workflow objects. # noqa: E501 + """ + pass + def test_list_workflows(self): """Test case for list_workflows @@ -350,6 +581,20 @@ def test_list_workflows2(self): """ pass + def test_list_workflows3(self): + """Test case for list_workflows3 + + Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. # noqa: E501 + """ + pass + + def test_list_workflows4(self): + """Test case for list_workflows4 + + Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. # noqa: E501 + """ + pass + def test_recover_execution(self): """Test case for recover_execution @@ -378,6 +623,13 @@ def test_terminate_execution(self): """ pass + def test_terminate_execution2(self): + """Test case for terminate_execution2 + + Terminates an in-progress :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 + """ + pass + def test_update_execution(self): """Test case for update_execution @@ -385,6 +637,13 @@ def test_update_execution(self): """ pass + def test_update_execution2(self): + """Test case for update_execution2 + + Update execution belonging to project domain :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 + """ + pass + def test_update_launch_plan(self): """Test case for update_launch_plan @@ -392,6 +651,13 @@ def test_update_launch_plan(self): """ pass + def test_update_launch_plan2(self): + """Test case for update_launch_plan2 + + Updates the status of a registered :ref:`ref_flyteidl.admin.LaunchPlan`. # noqa: E501 + """ + pass + def test_update_named_entity(self): """Test case for update_named_entity @@ -399,10 +665,24 @@ def test_update_named_entity(self): """ pass + def test_update_named_entity2(self): + """Test case for update_named_entity2 + + Updates a :ref:`ref_flyteidl.admin.NamedEntity` object. # noqa: E501 + """ + pass + def test_update_project(self): """Test case for update_project - Updates an existing :ref:`ref_flyteidl.admin.Project` flyteidl.admin.Project should be passed but the domains property should be empty; it will be ignored in the handler as domains cannot be updated via this API. # noqa: E501 + Updates an existing :ref:`ref_flyteidl.admin.Project` flyteidl.admin.Project should be passed but the domains property should be empty; it will be ignored in the handler as domains cannot be updated via this API. # noqa: E501 + """ + pass + + def test_update_project2(self): + """Test case for update_project2 + + Updates an existing :ref:`ref_flyteidl.admin.Project` flyteidl.admin.Project should be passed but the domains property should be empty; it will be ignored in the handler as domains cannot be updated via this API. # noqa: E501 """ pass @@ -413,6 +693,13 @@ def test_update_project_attributes(self): """ pass + def test_update_project_attributes2(self): + """Test case for update_project_attributes2 + + Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` at the project level # noqa: E501 + """ + pass + def test_update_project_domain_attributes(self): """Test case for update_project_domain_attributes @@ -420,6 +707,13 @@ def test_update_project_domain_attributes(self): """ pass + def test_update_project_domain_attributes2(self): + """Test case for update_project_domain_attributes2 + + Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 + """ + pass + def test_update_workflow_attributes(self): """Test case for update_workflow_attributes @@ -427,6 +721,13 @@ def test_update_workflow_attributes(self): """ pass + def test_update_workflow_attributes2(self): + """Test case for update_workflow_attributes2 + + Creates or updates custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. # noqa: E501 + """ + pass + if __name__ == '__main__': unittest.main() diff --git a/flyteidl/gen/pb_rust/datacatalog.rs b/flyteidl/gen/pb_rust/datacatalog.rs index 8c8a79dcc7..ac2c695cab 100644 --- a/flyteidl/gen/pb_rust/datacatalog.rs +++ b/flyteidl/gen/pb_rust/datacatalog.rs @@ -290,6 +290,9 @@ pub struct DatasetId { /// UUID for the dataset (if set the above fields are optional) #[prost(string, tag="5")] pub uuid: ::prost::alloc::string::String, + /// Optional, org key applied to the resource. + #[prost(string, tag="6")] + pub org: ::prost::alloc::string::String, } /// /// Artifact message. It is composed of several string fields. @@ -469,7 +472,7 @@ pub struct KeyValuePair { #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct DatasetPropertyFilter { - #[prost(oneof="dataset_property_filter::Property", tags="1, 2, 3, 4")] + #[prost(oneof="dataset_property_filter::Property", tags="1, 2, 3, 4, 5")] pub property: ::core::option::Option, } /// Nested message and enum types in `DatasetPropertyFilter`. @@ -485,6 +488,9 @@ pub mod dataset_property_filter { Domain(::prost::alloc::string::String), #[prost(string, tag="4")] Version(::prost::alloc::string::String), + /// Optional, org key applied to the dataset. + #[prost(string, tag="5")] + Org(::prost::alloc::string::String), } } /// Pagination options for making list requests diff --git a/flyteidl/gen/pb_rust/flyteidl.admin.rs b/flyteidl/gen/pb_rust/flyteidl.admin.rs index 8240e5ef3b..dddc3ae467 100644 --- a/flyteidl/gen/pb_rust/flyteidl.admin.rs +++ b/flyteidl/gen/pb_rust/flyteidl.admin.rs @@ -280,6 +280,9 @@ pub struct NamedEntityIdentifier { /// +optional - in certain contexts - like 'List API', 'Launch plans' #[prost(string, tag="3")] pub name: ::prost::alloc::string::String, + /// Optional, org key applied to the resource. + #[prost(string, tag="4")] + pub org: ::prost::alloc::string::String, } /// Additional metadata around a named entity. #[allow(clippy::derive_partial_eq_without_eq)] @@ -381,6 +384,9 @@ pub struct NamedEntityIdentifierListRequest { /// +optional #[prost(string, tag="6")] pub filters: ::prost::alloc::string::String, + /// Optional, org key applied to the resource. + #[prost(string, tag="7")] + pub org: ::prost::alloc::string::String, } /// Represents a request structure to list NamedEntity objects #[allow(clippy::derive_partial_eq_without_eq)] @@ -413,6 +419,9 @@ pub struct NamedEntityListRequest { /// +optional #[prost(string, tag="7")] pub filters: ::prost::alloc::string::String, + /// Optional, org key applied to the resource. + #[prost(string, tag="8")] + pub org: ::prost::alloc::string::String, } /// Represents a list of NamedEntityIdentifiers. #[allow(clippy::derive_partial_eq_without_eq)] @@ -927,6 +936,9 @@ pub struct ExecutionCreateRequest { /// +optional #[prost(message, optional, tag="5")] pub inputs: ::core::option::Option, + /// Optional, org key applied to the resource. + #[prost(string, tag="6")] + pub org: ::prost::alloc::string::String, } /// Request to relaunch the referenced execution. #[allow(clippy::derive_partial_eq_without_eq)] @@ -1679,7 +1691,7 @@ pub struct ActiveLaunchPlanRequest { #[prost(message, optional, tag="1")] pub id: ::core::option::Option, } -/// Represents a request structure to list active launch plans within a project/domain. +/// Represents a request structure to list active launch plans within a project/domain and optional org. /// See :ref:`ref_flyteidl.admin.LaunchPlan` for more details #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] @@ -1705,6 +1717,9 @@ pub struct ActiveLaunchPlanListRequest { /// +optional #[prost(message, optional, tag="5")] pub sort_by: ::core::option::Option, + /// Optional, org key applied to the resource. + #[prost(string, tag="6")] + pub org: ::prost::alloc::string::String, } /// By default any launch plan regardless of state can be used to launch a workflow execution. /// However, at most one version of a launch plan @@ -1901,8 +1916,8 @@ pub mod matching_attributes { ClusterAssignment(super::ClusterAssignment), } } -/// Represents a custom set of attributes applied for either a domain; a domain and project; or -/// domain, project and workflow name. +/// Represents a custom set of attributes applied for either a domain (and optional org); a domain and project (and optional org); +/// or domain, project and workflow name (and optional org). /// These are used to override system level defaults for kubernetes cluster resource management, /// default execution values, and more all across different levels of specificity. #[allow(clippy::derive_partial_eq_without_eq)] @@ -1918,6 +1933,9 @@ pub struct MatchableAttributesConfiguration { pub workflow: ::prost::alloc::string::String, #[prost(string, tag="5")] pub launch_plan: ::prost::alloc::string::String, + /// Optional, org key applied to the resource. + #[prost(string, tag="6")] + pub org: ::prost::alloc::string::String, } /// Request all matching resource attributes for a resource type. /// See :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for more details @@ -2311,6 +2329,9 @@ pub struct Project { pub labels: ::core::option::Option, #[prost(enumeration="project::ProjectState", tag="6")] pub state: i32, + /// Optional, org key applied to the resource. + #[prost(string, tag="7")] + pub org: ::prost::alloc::string::String, } /// Nested message and enum types in `Project`. pub mod project { @@ -2413,6 +2434,9 @@ pub struct ProjectAttributes { pub project: ::prost::alloc::string::String, #[prost(message, optional, tag="2")] pub matching_attributes: ::core::option::Option, + /// Optional, org key applied to the project. + #[prost(string, tag="3")] + pub org: ::prost::alloc::string::String, } /// Sets custom attributes for a project /// For more info on matchable attributes, see :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` @@ -2441,6 +2465,9 @@ pub struct ProjectAttributesGetRequest { /// +required #[prost(enumeration="MatchableResource", tag="2")] pub resource_type: i32, + /// Optional, org key applied to the project. + #[prost(string, tag="3")] + pub org: ::prost::alloc::string::String, } /// Response to get an individual project level attribute override. /// For more info on matchable attributes, see :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` @@ -2463,6 +2490,9 @@ pub struct ProjectAttributesDeleteRequest { /// +required #[prost(enumeration="MatchableResource", tag="2")] pub resource_type: i32, + /// Optional, org key applied to the project. + #[prost(string, tag="3")] + pub org: ::prost::alloc::string::String, } /// Purposefully empty, may be populated in the future. #[allow(clippy::derive_partial_eq_without_eq)] @@ -2482,6 +2512,9 @@ pub struct ProjectDomainAttributes { pub domain: ::prost::alloc::string::String, #[prost(message, optional, tag="3")] pub matching_attributes: ::core::option::Option, + /// Optional, org key applied to the attributes. + #[prost(string, tag="4")] + pub org: ::prost::alloc::string::String, } /// Sets custom attributes for a project-domain combination. /// For more info on matchable attributes, see :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` @@ -2514,6 +2547,9 @@ pub struct ProjectDomainAttributesGetRequest { /// +required #[prost(enumeration="MatchableResource", tag="3")] pub resource_type: i32, + /// Optional, org key applied to the attributes. + #[prost(string, tag="4")] + pub org: ::prost::alloc::string::String, } /// Response to get an individual project domain attribute override. /// For more info on matchable attributes, see :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` @@ -2540,6 +2576,9 @@ pub struct ProjectDomainAttributesDeleteRequest { /// +required #[prost(enumeration="MatchableResource", tag="3")] pub resource_type: i32, + /// Optional, org key applied to the attributes. + #[prost(string, tag="4")] + pub org: ::prost::alloc::string::String, } /// Purposefully empty, may be populated in the future. #[allow(clippy::derive_partial_eq_without_eq)] @@ -3039,6 +3078,9 @@ pub struct WorkflowAttributes { pub workflow: ::prost::alloc::string::String, #[prost(message, optional, tag="4")] pub matching_attributes: ::core::option::Option, + /// Optional, org key applied to the attributes. + #[prost(string, tag="5")] + pub org: ::prost::alloc::string::String, } /// Sets custom attributes for a project, domain and workflow combination. /// For more info on matchable attributes, see :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` @@ -3074,6 +3116,9 @@ pub struct WorkflowAttributesGetRequest { /// +required #[prost(enumeration="MatchableResource", tag="4")] pub resource_type: i32, + /// Optional, org key applied to the attributes. + #[prost(string, tag="5")] + pub org: ::prost::alloc::string::String, } /// Response to get an individual workflow attribute override. #[allow(clippy::derive_partial_eq_without_eq)] @@ -3103,6 +3148,9 @@ pub struct WorkflowAttributesDeleteRequest { /// +required #[prost(enumeration="MatchableResource", tag="4")] pub resource_type: i32, + /// Optional, org key applied to the attributes. + #[prost(string, tag="5")] + pub org: ::prost::alloc::string::String, } /// Purposefully empty, may be populated in the future. #[allow(clippy::derive_partial_eq_without_eq)] diff --git a/flyteidl/gen/pb_rust/flyteidl.core.rs b/flyteidl/gen/pb_rust/flyteidl.core.rs index 0820f1d809..5c104cb4f9 100644 --- a/flyteidl/gen/pb_rust/flyteidl.core.rs +++ b/flyteidl/gen/pb_rust/flyteidl.core.rs @@ -621,6 +621,9 @@ pub struct Identifier { /// Specific version of the resource. #[prost(string, tag="5")] pub version: ::prost::alloc::string::String, + /// Optional, org key applied to the resource. + #[prost(string, tag="6")] + pub org: ::prost::alloc::string::String, } /// Encapsulation of fields that uniquely identifies a Flyte workflow execution #[allow(clippy::derive_partial_eq_without_eq)] @@ -636,6 +639,9 @@ pub struct WorkflowExecutionIdentifier { /// User or system provided value for the resource. #[prost(string, tag="4")] pub name: ::prost::alloc::string::String, + /// Optional, org key applied to the resource. + #[prost(string, tag="5")] + pub org: ::prost::alloc::string::String, } /// Encapsulation of fields that identify a Flyte node execution entity. #[allow(clippy::derive_partial_eq_without_eq)] diff --git a/flyteidl/go.mod b/flyteidl/go.mod index f410e79d6b..34466ad69e 100644 --- a/flyteidl/go.mod +++ b/flyteidl/go.mod @@ -2,6 +2,8 @@ module github.com/flyteorg/flyte/flyteidl go 1.21 +toolchain go1.21.3 + require ( github.com/antihax/optional v1.0.0 github.com/flyteorg/flyte/flytestdlib v0.0.0-00010101000000-000000000000 diff --git a/flyteidl/protos/flyteidl/admin/common.proto b/flyteidl/protos/flyteidl/admin/common.proto index 93bf9b0e03..6c04b0531a 100644 --- a/flyteidl/protos/flyteidl/admin/common.proto +++ b/flyteidl/protos/flyteidl/admin/common.proto @@ -22,6 +22,9 @@ message NamedEntityIdentifier { // The combination of project + domain + name uniquely identifies the resource. // +optional - in certain contexts - like 'List API', 'Launch plans' string name = 3; + + // Optional, org key applied to the resource. + string org = 4; } // The status of the named entity is used to control its visibility in the UI. @@ -102,6 +105,9 @@ message NamedEntityIdentifierListRequest { // Indicates a list of filters passed as string. // +optional string filters = 6; + + // Optional, org key applied to the resource. + string org = 7; } // Represents a request structure to list NamedEntity objects @@ -129,6 +135,8 @@ message NamedEntityListRequest { // +optional string filters = 7; + // Optional, org key applied to the resource. + string org = 8; } // Represents a list of NamedEntityIdentifiers. diff --git a/flyteidl/protos/flyteidl/admin/execution.proto b/flyteidl/protos/flyteidl/admin/execution.proto index 7ddda0f233..f3dbad3fb3 100644 --- a/flyteidl/protos/flyteidl/admin/execution.proto +++ b/flyteidl/protos/flyteidl/admin/execution.proto @@ -39,6 +39,9 @@ message ExecutionCreateRequest { // included in this map. If not required and not provided, defaults apply. // +optional core.LiteralMap inputs = 5; + + // Optional, org key applied to the resource. + string org = 6; } // Request to relaunch the referenced execution. diff --git a/flyteidl/protos/flyteidl/admin/launch_plan.proto b/flyteidl/protos/flyteidl/admin/launch_plan.proto index 252d926c5d..a13429f751 100644 --- a/flyteidl/protos/flyteidl/admin/launch_plan.proto +++ b/flyteidl/protos/flyteidl/admin/launch_plan.proto @@ -193,7 +193,7 @@ message ActiveLaunchPlanRequest { NamedEntityIdentifier id = 1; } -// Represents a request structure to list active launch plans within a project/domain. +// Represents a request structure to list active launch plans within a project/domain and optional org. // See :ref:`ref_flyteidl.admin.LaunchPlan` for more details message ActiveLaunchPlanListRequest { // Name of the project that contains the identifiers. @@ -216,4 +216,7 @@ message ActiveLaunchPlanListRequest { // Sort ordering. // +optional Sort sort_by = 5; + + // Optional, org key applied to the resource. + string org = 6; } diff --git a/flyteidl/protos/flyteidl/admin/matchable_resource.proto b/flyteidl/protos/flyteidl/admin/matchable_resource.proto index bf93d0bd7e..692215b59d 100644 --- a/flyteidl/protos/flyteidl/admin/matchable_resource.proto +++ b/flyteidl/protos/flyteidl/admin/matchable_resource.proto @@ -154,8 +154,8 @@ message MatchingAttributes { } } -// Represents a custom set of attributes applied for either a domain; a domain and project; or -// domain, project and workflow name. +// Represents a custom set of attributes applied for either a domain (and optional org); a domain and project (and optional org); +// or domain, project and workflow name (and optional org). // These are used to override system level defaults for kubernetes cluster resource management, // default execution values, and more all across different levels of specificity. message MatchableAttributesConfiguration { @@ -168,6 +168,9 @@ message MatchableAttributesConfiguration { string workflow = 4; string launch_plan = 5; + + // Optional, org key applied to the resource. + string org = 6; } // Request all matching resource attributes for a resource type. diff --git a/flyteidl/protos/flyteidl/admin/project.proto b/flyteidl/protos/flyteidl/admin/project.proto index 761ae8da05..907b7d2cae 100644 --- a/flyteidl/protos/flyteidl/admin/project.proto +++ b/flyteidl/protos/flyteidl/admin/project.proto @@ -45,6 +45,9 @@ message Project { SYSTEM_GENERATED = 2; } ProjectState state = 6; + + // Optional, org key applied to the resource. + string org = 7; } // Represents a list of projects. diff --git a/flyteidl/protos/flyteidl/admin/project_attributes.proto b/flyteidl/protos/flyteidl/admin/project_attributes.proto index e61515b0c7..2656ab25f5 100644 --- a/flyteidl/protos/flyteidl/admin/project_attributes.proto +++ b/flyteidl/protos/flyteidl/admin/project_attributes.proto @@ -12,6 +12,9 @@ message ProjectAttributes { string project = 1; MatchingAttributes matching_attributes = 2; + + // Optional, org key applied to the project. + string org = 3; } // Sets custom attributes for a project @@ -35,6 +38,9 @@ message ProjectAttributesGetRequest { // Which type of matchable attributes to return. // +required MatchableResource resource_type = 2; + + // Optional, org key applied to the project. + string org = 3; } // Response to get an individual project level attribute override. @@ -53,6 +59,9 @@ message ProjectAttributesDeleteRequest { // Which type of matchable attributes to delete. // +required MatchableResource resource_type = 2; + + // Optional, org key applied to the project. + string org = 3; } // Purposefully empty, may be populated in the future. diff --git a/flyteidl/protos/flyteidl/admin/project_domain_attributes.proto b/flyteidl/protos/flyteidl/admin/project_domain_attributes.proto index d25ea92324..b493ae1178 100644 --- a/flyteidl/protos/flyteidl/admin/project_domain_attributes.proto +++ b/flyteidl/protos/flyteidl/admin/project_domain_attributes.proto @@ -14,7 +14,10 @@ message ProjectDomainAttributes { // Unique domain id for which this set of attributes will be applied. string domain = 2; - MatchingAttributes matching_attributes = 3; + MatchingAttributes matching_attributes = 3; + + // Optional, org key applied to the attributes. + string org = 4; } // Sets custom attributes for a project-domain combination. @@ -42,6 +45,9 @@ message ProjectDomainAttributesGetRequest { // Which type of matchable attributes to return. // +required MatchableResource resource_type = 3; + + // Optional, org key applied to the attributes. + string org = 4; } // Response to get an individual project domain attribute override. @@ -64,6 +70,9 @@ message ProjectDomainAttributesDeleteRequest { // Which type of matchable attributes to delete. // +required MatchableResource resource_type = 3; + + // Optional, org key applied to the attributes. + string org = 4; } // Purposefully empty, may be populated in the future. diff --git a/flyteidl/protos/flyteidl/admin/workflow_attributes.proto b/flyteidl/protos/flyteidl/admin/workflow_attributes.proto index fed42205a7..9767f00df7 100644 --- a/flyteidl/protos/flyteidl/admin/workflow_attributes.proto +++ b/flyteidl/protos/flyteidl/admin/workflow_attributes.proto @@ -18,6 +18,9 @@ message WorkflowAttributes { string workflow = 3; MatchingAttributes matching_attributes = 4; + + // Optional, org key applied to the attributes. + string org = 5; } // Sets custom attributes for a project, domain and workflow combination. @@ -48,6 +51,9 @@ message WorkflowAttributesGetRequest { // Which type of matchable attributes to return. // +required MatchableResource resource_type = 4; + + // Optional, org key applied to the attributes. + string org = 5; } // Response to get an individual workflow attribute override. @@ -73,6 +79,9 @@ message WorkflowAttributesDeleteRequest { // Which type of matchable attributes to delete. // +required MatchableResource resource_type = 4; + + // Optional, org key applied to the attributes. + string org = 5; } // Purposefully empty, may be populated in the future. diff --git a/flyteidl/protos/flyteidl/core/identifier.proto b/flyteidl/protos/flyteidl/core/identifier.proto index d50e836099..50bf22429c 100644 --- a/flyteidl/protos/flyteidl/core/identifier.proto +++ b/flyteidl/protos/flyteidl/core/identifier.proto @@ -33,6 +33,9 @@ message Identifier { // Specific version of the resource. string version = 5; + + // Optional, org key applied to the resource. + string org = 6; } // Encapsulation of fields that uniquely identifies a Flyte workflow execution @@ -46,6 +49,9 @@ message WorkflowExecutionIdentifier { // User or system provided value for the resource. string name = 4; + + // Optional, org key applied to the resource. + string org = 5; } // Encapsulation of fields that identify a Flyte node execution entity. diff --git a/flyteidl/protos/flyteidl/datacatalog/datacatalog.proto b/flyteidl/protos/flyteidl/datacatalog/datacatalog.proto index 1ddac9fccf..e296603113 100644 --- a/flyteidl/protos/flyteidl/datacatalog/datacatalog.proto +++ b/flyteidl/protos/flyteidl/datacatalog/datacatalog.proto @@ -289,6 +289,9 @@ message DatasetID { string domain = 3; // The domain (eg. environment) string version = 4; // Version of the data schema string UUID = 5; // UUID for the dataset (if set the above fields are optional) + + // Optional, org key applied to the resource. + string org = 6; } /* @@ -386,6 +389,8 @@ message DatasetPropertyFilter { string name = 2; string domain = 3; string version = 4; + // Optional, org key applied to the dataset. + string org = 5; } } diff --git a/flyteidl/protos/flyteidl/service/admin.proto b/flyteidl/protos/flyteidl/service/admin.proto index 95ad07686f..d0f5391d25 100644 --- a/flyteidl/protos/flyteidl/service/admin.proto +++ b/flyteidl/protos/flyteidl/service/admin.proto @@ -51,16 +51,22 @@ service AdminService { rpc GetTask (flyteidl.admin.ObjectGetRequest) returns (flyteidl.admin.Task) { option (google.api.http) = { get: "/api/v1/tasks/{id.project}/{id.domain}/{id.name}/{id.version}" + additional_bindings { + get: "/api/v1/tasks/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version}" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Retrieve an existing task definition." // }; } - // Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of task objects. + // Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of task objects. rpc ListTaskIds (flyteidl.admin.NamedEntityIdentifierListRequest) returns (flyteidl.admin.NamedEntityIdentifierList) { option (google.api.http) = { get: "/api/v1/task_ids/{project}/{domain}" + additional_bindings { + get: "/api/v1/tasks/org/{org}/{project}/{domain}" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Fetch existing task definition identifiers matching input filters." @@ -72,7 +78,13 @@ service AdminService { option (google.api.http) = { get: "/api/v1/tasks/{id.project}/{id.domain}/{id.name}" additional_bindings { - get: "/api/v1/tasks/{id.project}/{id.domain}" + get: "/api/v1/tasks/org/{id.org}/{id.project}/{id.domain}/{id.name}", + } + additional_bindings { + get: "/api/v1/tasks/{id.project}/{id.domain}", + } + additional_bindings { + get: "/api/v1/tasks/org/{id.org}/{id.project}/{id.domain}", } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { @@ -107,6 +119,9 @@ service AdminService { rpc GetWorkflow (flyteidl.admin.ObjectGetRequest) returns (flyteidl.admin.Workflow) { option (google.api.http) = { get: "/api/v1/workflows/{id.project}/{id.domain}/{id.name}/{id.version}" + additional_bindings { + get: "/api/v1/workflows/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version}" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Retrieve an existing workflow definition." @@ -117,6 +132,9 @@ service AdminService { rpc ListWorkflowIds (flyteidl.admin.NamedEntityIdentifierListRequest) returns (flyteidl.admin.NamedEntityIdentifierList) { option (google.api.http) = { get: "/api/v1/workflow_ids/{project}/{domain}" + additional_bindings { + get: "/api/v1/workflows/org/{org}/{project}/{domain}" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Fetch an existing workflow definition identifiers matching input filters." @@ -128,7 +146,13 @@ service AdminService { option (google.api.http) = { get: "/api/v1/workflows/{id.project}/{id.domain}/{id.name}" additional_bindings { - get: "/api/v1/workflows/{id.project}/{id.domain}" + get: "/api/v1/workflows/org/{id.org}/{id.project}/{id.domain}/{id.name}", + } + additional_bindings { + get: "/api/v1/workflows/{id.project}/{id.domain}", + } + additional_bindings { + get: "/api/v1/workflows/org/{id.org}/{id.project}/{id.domain}", } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { @@ -163,6 +187,9 @@ service AdminService { rpc GetLaunchPlan (flyteidl.admin.ObjectGetRequest) returns (flyteidl.admin.LaunchPlan) { option (google.api.http) = { get: "/api/v1/launch_plans/{id.project}/{id.domain}/{id.name}/{id.version}" + additional_bindings { + get: "/api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version}" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Retrieve an existing launch plan definition." @@ -173,6 +200,9 @@ service AdminService { rpc GetActiveLaunchPlan (flyteidl.admin.ActiveLaunchPlanRequest) returns (flyteidl.admin.LaunchPlan) { option (google.api.http) = { get: "/api/v1/active_launch_plans/{id.project}/{id.domain}/{id.name}" + additional_bindings { + get: "/api/v1/active_launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name}" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Retrieve the active launch plan version specified by input request filters." @@ -193,6 +223,9 @@ service AdminService { rpc ListLaunchPlanIds (flyteidl.admin.NamedEntityIdentifierListRequest) returns (flyteidl.admin.NamedEntityIdentifierList) { option (google.api.http) = { get: "/api/v1/launch_plan_ids/{project}/{domain}" + additional_bindings { + get: "/api/v1/launch_plan_ids/org/{org}/{project}/{domain}" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Fetch existing launch plan definition identifiers matching input filters." @@ -203,9 +236,15 @@ service AdminService { rpc ListLaunchPlans (flyteidl.admin.ResourceListRequest) returns (flyteidl.admin.LaunchPlanList) { option (google.api.http) = { get: "/api/v1/launch_plans/{id.project}/{id.domain}/{id.name}" + additional_bindings { + get: "/api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name}" + } additional_bindings { get: "/api/v1/launch_plans/{id.project}/{id.domain}" } + additional_bindings { + get: "/api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Fetch existing launch plan definitions matching input filters." @@ -216,6 +255,9 @@ service AdminService { rpc UpdateLaunchPlan (flyteidl.admin.LaunchPlanUpdateRequest) returns (flyteidl.admin.LaunchPlanUpdateResponse) { option (google.api.http) = { put: "/api/v1/launch_plans/{id.project}/{id.domain}/{id.name}/{id.version}" + additional_bindings { + put: "/api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version}" + } body: "*" }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { @@ -273,6 +315,9 @@ service AdminService { rpc GetExecution (flyteidl.admin.WorkflowExecutionGetRequest) returns (flyteidl.admin.Execution) { option (google.api.http) = { get: "/api/v1/executions/{id.project}/{id.domain}/{id.name}" + additional_bindings { + get: "/api/v1/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Retrieve an existing workflow execution." @@ -284,6 +329,10 @@ service AdminService { option (google.api.http) = { put: "/api/v1/executions/{id.project}/{id.domain}/{id.name}" body: "*" + additional_bindings { + put: "/api/v1/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}" + body: "*" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Update execution belonging to project domain." @@ -294,6 +343,9 @@ service AdminService { rpc GetExecutionData (flyteidl.admin.WorkflowExecutionGetDataRequest) returns (flyteidl.admin.WorkflowExecutionGetDataResponse) { option (google.api.http) = { get: "/api/v1/data/executions/{id.project}/{id.domain}/{id.name}" + additional_bindings { + get: "/api/v1/data/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Retrieve input and output data from an existing workflow execution." @@ -304,6 +356,9 @@ service AdminService { rpc ListExecutions (flyteidl.admin.ResourceListRequest) returns (flyteidl.admin.ExecutionList) { option (google.api.http) = { get: "/api/v1/executions/{id.project}/{id.domain}" + additional_bindings { + get: "/api/v1/executions/org/{id.org}/{id.project}/{id.domain}" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Fetch existing workflow executions matching input filters." @@ -315,6 +370,10 @@ service AdminService { option (google.api.http) = { delete: "/api/v1/executions/{id.project}/{id.domain}/{id.name}" body: "*" + additional_bindings { + delete: "/api/v1/data/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}" + body: "*" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Terminate the active workflow execution specified in the request." @@ -325,6 +384,9 @@ service AdminService { rpc GetNodeExecution (flyteidl.admin.NodeExecutionGetRequest) returns (flyteidl.admin.NodeExecution) { option (google.api.http) = { get: "/api/v1/node_executions/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}" + additional_bindings { + get: "/api/v1/node_executions/org/{id.execution_id.org}/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Retrieve an existing node execution." @@ -335,6 +397,9 @@ service AdminService { rpc ListNodeExecutions (flyteidl.admin.NodeExecutionListRequest) returns (flyteidl.admin.NodeExecutionList) { option (google.api.http) = { get: "/api/v1/node_executions/{workflow_execution_id.project}/{workflow_execution_id.domain}/{workflow_execution_id.name}" + additional_bindings { + get: "/api/v1/node_executions/org/{workflow_execution_id.org}/{workflow_execution_id.project}/{workflow_execution_id.domain}/{workflow_execution_id.name}" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Fetch existing node executions matching input filters." @@ -345,6 +410,9 @@ service AdminService { rpc ListNodeExecutionsForTask (flyteidl.admin.NodeExecutionForTaskListRequest) returns (flyteidl.admin.NodeExecutionList) { option (google.api.http) = { get: "/api/v1/children/task_executions/{task_execution_id.node_execution_id.execution_id.project}/{task_execution_id.node_execution_id.execution_id.domain}/{task_execution_id.node_execution_id.execution_id.name}/{task_execution_id.node_execution_id.node_id}/{task_execution_id.task_id.project}/{task_execution_id.task_id.domain}/{task_execution_id.task_id.name}/{task_execution_id.task_id.version}/{task_execution_id.retry_attempt}" + additional_bindings { + get: "/api/v1/children/task_executions/org/{task_execution_id.node_execution_id.execution_id.org}/{task_execution_id.node_execution_id.execution_id.project}/{task_execution_id.node_execution_id.execution_id.domain}/{task_execution_id.node_execution_id.execution_id.name}/{task_execution_id.node_execution_id.node_id}/{task_execution_id.task_id.project}/{task_execution_id.task_id.domain}/{task_execution_id.task_id.name}/{task_execution_id.task_id.version}/{task_execution_id.retry_attempt}" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Fetch child node executions launched by the specified task execution." @@ -355,6 +423,9 @@ service AdminService { rpc GetNodeExecutionData (flyteidl.admin.NodeExecutionGetDataRequest) returns (flyteidl.admin.NodeExecutionGetDataResponse) { option (google.api.http) = { get: "/api/v1/data/node_executions/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}" + additional_bindings { + get: "/api/v1/data/node_executions/org/{id.execution_id.org}/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Retrieve input and output data from an existing node execution." @@ -372,20 +443,24 @@ service AdminService { // }; } - // Updates an existing :ref:`ref_flyteidl.admin.Project` + // Updates an existing :ref:`ref_flyteidl.admin.Project` // flyteidl.admin.Project should be passed but the domains property should be empty; // it will be ignored in the handler as domains cannot be updated via this API. rpc UpdateProject (flyteidl.admin.Project) returns (flyteidl.admin.ProjectUpdateResponse) { option (google.api.http) = { put: "/api/v1/projects/{id}" body: "*" + additional_bindings { + put: "/api/v1/projects/org/{org}/{id}" + body: "*" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Update a project." // }; } - // Fetches a list of :ref:`ref_flyteidl.admin.Project` + // Fetches a list of :ref:`ref_flyteidl.admin.Project` rpc ListProjects (flyteidl.admin.ProjectListRequest) returns (flyteidl.admin.Projects) { option (google.api.http) = { get: "/api/v1/projects" @@ -431,7 +506,10 @@ service AdminService { // Fetches a :ref:`ref_flyteidl.admin.TaskExecution`. rpc GetTaskExecution (flyteidl.admin.TaskExecutionGetRequest) returns (flyteidl.admin.TaskExecution) { option (google.api.http) = { - get: "/api/v1/task_executions/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}" + get: "/api/v1/task_executions/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}" + additional_bindings { + get: "/api/v1/task_executions/org/{id.node_execution_id.execution_id.org}/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Retrieve an existing task execution." @@ -441,7 +519,10 @@ service AdminService { // Fetches a list of :ref:`ref_flyteidl.admin.TaskExecution`. rpc ListTaskExecutions (flyteidl.admin.TaskExecutionListRequest) returns (flyteidl.admin.TaskExecutionList) { option (google.api.http) = { - get: "/api/v1/task_executions/{node_execution_id.execution_id.project}/{node_execution_id.execution_id.domain}/{node_execution_id.execution_id.name}/{node_execution_id.node_id}" + get: "/api/v1/task_executions/{node_execution_id.execution_id.project}/{node_execution_id.execution_id.domain}/{node_execution_id.execution_id.name}/{node_execution_id.node_id}" + additional_bindings { + get: "/api/v1/task_executions/org/{node_execution_id.execution_id.org}/{node_execution_id.execution_id.project}/{node_execution_id.execution_id.domain}/{node_execution_id.execution_id.name}/{node_execution_id.node_id}" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Fetch existing task executions matching input filters." @@ -452,7 +533,10 @@ service AdminService { // Fetches input and output data for a :ref:`ref_flyteidl.admin.TaskExecution`. rpc GetTaskExecutionData (flyteidl.admin.TaskExecutionGetDataRequest) returns (flyteidl.admin.TaskExecutionGetDataResponse) { option (google.api.http) = { - get: "/api/v1/data/task_executions/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}" + get: "/api/v1/data/task_executions/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}" + additional_bindings { + get: "/api/v1/data/task_executions/org/{id.node_execution_id.execution_id.org}/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Retrieve input and output data from an existing task execution." @@ -464,6 +548,10 @@ service AdminService { option (google.api.http) = { put: "/api/v1/project_domain_attributes/{attributes.project}/{attributes.domain}" body: "*" + additional_bindings { + put: "/api/v1/project_domain_attributes/org/{attributes.org}/{attributes.project}/{attributes.domain}" + body: "*" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Update the customized resource attributes associated with a project-domain combination" @@ -474,6 +562,9 @@ service AdminService { rpc GetProjectDomainAttributes (flyteidl.admin.ProjectDomainAttributesGetRequest) returns (flyteidl.admin.ProjectDomainAttributesGetResponse) { option (google.api.http) = { get: "/api/v1/project_domain_attributes/{project}/{domain}" + additional_bindings { + get: "/api/v1/project_domain_attributes/org/{org}/{project}/{domain}" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Retrieve the customized resource attributes associated with a project-domain combination" @@ -485,6 +576,10 @@ service AdminService { option (google.api.http) = { delete: "/api/v1/project_domain_attributes/{project}/{domain}" body: "*" + additional_bindings { + delete: "/api/v1/project_domain_attributes/org/{org}/{project}/{domain}" + body: "*" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Delete the customized resource attributes associated with a project-domain combination" @@ -496,6 +591,10 @@ service AdminService { option (google.api.http) = { put: "/api/v1/project_attributes/{attributes.project}" body: "*" + additional_bindings { + put: "/api/v1/project_domain_attributes/org/{attributes.org}/{attributes.project}" + body: "*" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Update the customized resource attributes associated with a project" @@ -506,6 +605,9 @@ service AdminService { rpc GetProjectAttributes (flyteidl.admin.ProjectAttributesGetRequest) returns (flyteidl.admin.ProjectAttributesGetResponse) { option (google.api.http) = { get: "/api/v1/project_attributes/{project}" + additional_bindings { + get: "/api/v1/project_domain_attributes/org/{org}/{project}" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Retrieve the customized resource attributes associated with a project" @@ -517,6 +619,10 @@ service AdminService { option (google.api.http) = { delete: "/api/v1/project_attributes/{project}" body: "*" + additional_bindings { + delete: "/api/v1/project_domain_attributes/org/{org}/{project}" + body: "*" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Delete the customized resource attributes associated with a project" @@ -527,6 +633,10 @@ service AdminService { option (google.api.http) = { put: "/api/v1/workflow_attributes/{attributes.project}/{attributes.domain}/{attributes.workflow}" body: "*" + additional_bindings { + put: "/api/v1/workflow_attributes/org/{attributes.org}/{attributes.project}/{attributes.domain}/{attributes.workflow}" + body: "*" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Update the customized resource attributes associated with a project, domain and workflow combination" @@ -537,6 +647,9 @@ service AdminService { rpc GetWorkflowAttributes (flyteidl.admin.WorkflowAttributesGetRequest) returns (flyteidl.admin.WorkflowAttributesGetResponse) { option (google.api.http) = { get: "/api/v1/workflow_attributes/{project}/{domain}/{workflow}" + additional_bindings { + get: "/api/v1/workflow_attributes/org/{org}/{project}/{domain}/{workflow}" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Retrieve the customized resource attributes associated with a project, domain and workflow combination" @@ -548,6 +661,10 @@ service AdminService { option (google.api.http) = { delete: "/api/v1/workflow_attributes/{project}/{domain}/{workflow}" body: "*" + additional_bindings { + delete: "/api/v1/workflow_attributes/org/{org}/{project}/{domain}/{workflow}" + body: "*" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Delete the customized resource attributes associated with a project, domain and workflow combination" @@ -568,6 +685,9 @@ service AdminService { rpc ListNamedEntities (flyteidl.admin.NamedEntityListRequest) returns (flyteidl.admin.NamedEntityList) { option (google.api.http) = { get: "/api/v1/named_entities/{resource_type}/{project}/{domain}" + additional_bindings { + get: "/api/v1/named_entities/{resource_type}/org/{org}/{project}/{domain}" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Retrieve a list of NamedEntity objects sharing a common resource type, project, and domain." @@ -578,6 +698,9 @@ service AdminService { rpc GetNamedEntity (flyteidl.admin.NamedEntityGetRequest) returns (flyteidl.admin.NamedEntity) { option (google.api.http) = { get: "/api/v1/named_entities/{resource_type}/{id.project}/{id.domain}/{id.name}" + additional_bindings { + get: "/api/v1/named_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain}/{id.name}" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Retrieve a NamedEntity object." @@ -589,6 +712,10 @@ service AdminService { option (google.api.http) = { put: "/api/v1/named_entities/{resource_type}/{id.project}/{id.domain}/{id.name}" body: "*" + additional_bindings { + put: "/api/v1/named_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain}/{id.name}" + body: "*" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Update the fields associated with a NamedEntity" @@ -596,18 +723,21 @@ service AdminService { } rpc GetVersion (flyteidl.admin.GetVersionRequest) returns (flyteidl.admin.GetVersionResponse) { - option (google.api.http) = { - get: "/api/v1/version" - }; - // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { - // description: "Retrieve the Version (including the Build information) for FlyteAdmin service" - // }; + option (google.api.http) = { + get: "/api/v1/version" + }; + // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { + // description: "Retrieve the Version (including the Build information) for FlyteAdmin service" + // }; } // Fetch a :ref:`ref_flyteidl.admin.DescriptionEntity` object. rpc GetDescriptionEntity (flyteidl.admin.ObjectGetRequest) returns (flyteidl.admin.DescriptionEntity) { option (google.api.http) = { get: "/api/v1/description_entities/{id.resource_type}/{id.project}/{id.domain}/{id.name}/{id.version}" + additional_bindings { + get: "/api/v1/description_entities/org/{id.org}/{id.resource_type}/{id.project}/{id.domain}/{id.name}/{id.version}" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Retrieve an existing description entity description." @@ -618,9 +748,15 @@ service AdminService { rpc ListDescriptionEntities (flyteidl.admin.DescriptionEntityListRequest) returns (flyteidl.admin.DescriptionEntityList) { option (google.api.http) = { get: "/api/v1/description_entities/{resource_type}/{id.project}/{id.domain}/{id.name}" + additional_bindings { + get: "/api/v1/description_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain}/{id.name}" + } additional_bindings { get: "/api/v1/description_entities/{resource_type}/{id.project}/{id.domain}" } + additional_bindings { + get: "/api/v1/description_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain}" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Fetch existing description entity definitions matching input filters." @@ -631,9 +767,12 @@ service AdminService { rpc GetExecutionMetrics (flyteidl.admin.WorkflowExecutionGetMetricsRequest) returns (flyteidl.admin.WorkflowExecutionGetMetricsResponse) { option (google.api.http) = { get: "/api/v1/metrics/executions/{id.project}/{id.domain}/{id.name}" + additional_bindings { + get: "/api/v1/metrics/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Retrieve metrics from an existing workflow execution." // }; }; -} +} \ No newline at end of file diff --git a/flyteidl/protos/flyteidl/service/external_plugin_service.proto b/flyteidl/protos/flyteidl/service/external_plugin_service.proto index ce890cf8f2..a3035290e2 100644 --- a/flyteidl/protos/flyteidl/service/external_plugin_service.proto +++ b/flyteidl/protos/flyteidl/service/external_plugin_service.proto @@ -4,7 +4,6 @@ package flyteidl.service; option go_package = "github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/service"; import "flyteidl/core/literals.proto"; import "flyteidl/core/tasks.proto"; -import "flyteidl/core/interface.proto"; // ExternalPluginService defines an RPC Service that allows propeller to send the request to the backend plugin server. service ExternalPluginService { diff --git a/flyteplugins/go/tasks/pluginmachinery/catalog/async_client_impl_test.go b/flyteplugins/go/tasks/pluginmachinery/catalog/async_client_impl_test.go index 4b8e2efb37..03d2d99d73 100644 --- a/flyteplugins/go/tasks/pluginmachinery/catalog/async_client_impl_test.go +++ b/flyteplugins/go/tasks/pluginmachinery/catalog/async_client_impl_test.go @@ -110,8 +110,8 @@ func TestAsyncClientImpl_Download(t *testing.T) { func TestAsyncClientImpl_Upload(t *testing.T) { ctx := context.Background() - inputHash1 := "{UNSPECIFIED {} [] 0}:-0-DNhkpTTPC5YDtRGb4yT-PFxgMSgHzHrKAQKgQGEfGRY" - inputHash2 := "{UNSPECIFIED {} [] 0}:-1-26M4dwarvBVJqJSUC4JC1GtRYgVBIAmQfsFSdLVMlAc" + inputHash1 := "{UNSPECIFIED {} [] 0}:-0-DNhkpTTPC5YDtRGb4yT-PFxgMSgHzHrKAQKgQGEfGRY" + inputHash2 := "{UNSPECIFIED {} [] 0}:-1-26M4dwarvBVJqJSUC4JC1GtRYgVBIAmQfsFSdLVMlAc" q := &mocks.IndexedWorkQueue{} info := &mocks.WorkItemInfo{} From 0c8dc61833683c7d2482156527c8f45616ee4a20 Mon Sep 17 00:00:00 2001 From: Yee Hing Tong Date: Tue, 16 Jan 2024 11:58:32 -0800 Subject: [PATCH 12/30] Update docs for plugin secrets management (#4732) Signed-off-by: Yee Hing Tong --- docs/deployment/plugins/webapi/databricks.rst | 13 ++++++------- docs/deployment/plugins/webapi/snowflake.rst | 13 ++++++------- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/docs/deployment/plugins/webapi/databricks.rst b/docs/deployment/plugins/webapi/databricks.rst index 671fdb4e18..69f710677c 100644 --- a/docs/deployment/plugins/webapi/databricks.rst +++ b/docs/deployment/plugins/webapi/databricks.rst @@ -288,7 +288,7 @@ Add the Databricks access token to FlytePropeller: .. group-tab:: Helm chart - Create an external secret as follows: + Create a secret as follows (or add to it if it already exists from other plugins): .. code-block:: bash @@ -296,7 +296,7 @@ Add the Databricks access token to FlytePropeller: apiVersion: v1 kind: Secret metadata: - name: flyte-binary-client-secrets-external-secret + name: flyte-binary-external-services namespace: flyte type: Opaque stringData: @@ -304,16 +304,15 @@ Add the Databricks access token to FlytePropeller: EOF Reference the newly created secret in - ``.Values.configuration.auth.clientSecretsExternalSecretRef`` + ``.Values.configuration.inlineSecretRef`` in your YAML file as follows: .. code-block:: yaml - :emphasize-lines: 3 + :emphasize-lines: 2 configuration: - auth: - clientSecretsExternalSecretRef: flyte-binary-client-secrets-external-secret - + inlineSecretRef: flyte-binary-external-services + Replace ```` with your access token. .. group-tab:: Flyte core diff --git a/docs/deployment/plugins/webapi/snowflake.rst b/docs/deployment/plugins/webapi/snowflake.rst index 85f13fe115..a4ac2d35cf 100644 --- a/docs/deployment/plugins/webapi/snowflake.rst +++ b/docs/deployment/plugins/webapi/snowflake.rst @@ -154,7 +154,7 @@ Then, add the Snowflake JWT token to FlytePropeller. .. group-tab:: Helm chart - Create an external secret as follows: + Create a secret as follows (or add to it if it already exists from other plugins): .. code-block:: bash @@ -162,7 +162,7 @@ Then, add the Snowflake JWT token to FlytePropeller. apiVersion: v1 kind: Secret metadata: - name: flyte-binary-client-secrets-external-secret + name: flyte-binary-external-services namespace: flyte type: Opaque stringData: @@ -170,16 +170,15 @@ Then, add the Snowflake JWT token to FlytePropeller. EOF Reference the newly created secret in - ``.Values.configuration.auth.clientSecretsExternalSecretRef`` + ``.Values.configuration.inlineSecretRef`` in your YAML file as follows: .. code-block:: yaml - :emphasize-lines: 3 + :emphasize-lines: 2 configuration: - auth: - clientSecretsExternalSecretRef: flyte-binary-client-secrets-external-secret - + inlineSecretRef: flyte-binary-external-services + Replace ```` with your JWT token. .. group-tab:: Flyte core From ada76955f1ca984d2374341e22338b00ff86adee Mon Sep 17 00:00:00 2001 From: Dan Rammer Date: Wed, 17 Jan 2024 09:36:25 -0600 Subject: [PATCH 13/30] Reintroduce k8s client fallback to cache lookups (#4733) * replaced kube executors Signed-off-by: Daniel Rammer * creating a delegating client reader setup to emulate previous Signed-off-by: Daniel Rammer * fix unit tests and lint Signed-off-by: Daniel Rammer * fixing client ordering Signed-off-by: Daniel Rammer * removed error mocking Signed-off-by: Daniel Rammer --------- Signed-off-by: Daniel Rammer --- cmd/single/start.go | 21 +--- flytepropeller/cmd/controller/cmd/root.go | 21 +--- flytepropeller/cmd/controller/cmd/webhook.go | 7 +- .../pkg/controller/executors/kube.go | 67 +++++++++--- .../executors/mocks/client_builder.go | 100 ------------------ 5 files changed, 62 insertions(+), 154 deletions(-) delete mode 100644 flytepropeller/pkg/controller/executors/mocks/client_builder.go diff --git a/cmd/single/start.go b/cmd/single/start.go index 3ad8038cd6..a786c0b7e4 100644 --- a/cmd/single/start.go +++ b/cmd/single/start.go @@ -18,6 +18,7 @@ import ( adminScheduler "github.com/flyteorg/flyte/flyteadmin/scheduler" propellerEntrypoint "github.com/flyteorg/flyte/flytepropeller/pkg/controller" propellerConfig "github.com/flyteorg/flyte/flytepropeller/pkg/controller/config" + "github.com/flyteorg/flyte/flytepropeller/pkg/controller/executors" "github.com/flyteorg/flyte/flytepropeller/pkg/signals" webhookEntrypoint "github.com/flyteorg/flyte/flytepropeller/pkg/webhook" webhookConfig "github.com/flyteorg/flyte/flytepropeller/pkg/webhook/config" @@ -33,9 +34,7 @@ import ( "github.com/spf13/cobra" "golang.org/x/sync/errgroup" _ "gorm.io/driver/postgres" // Required to import database driver. - "k8s.io/client-go/rest" "sigs.k8s.io/controller-runtime/pkg/cache" - "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/manager" "sigs.k8s.io/controller-runtime/pkg/metrics" ) @@ -122,22 +121,8 @@ func startPropeller(ctx context.Context, cfg Propeller) error { SyncPeriod: &propellerCfg.DownstreamEval.Duration, DefaultNamespaces: namespaceConfigs, }, - NewCache: func(config *rest.Config, options cache.Options) (cache.Cache, error) { - k8sCache, err := cache.New(config, options) - if err != nil { - return k8sCache, err - } - - return otelutils.WrapK8sCache(k8sCache), nil - }, - NewClient: func(config *rest.Config, options client.Options) (client.Client, error) { - k8sClient, err := client.New(config, options) - if err != nil { - return k8sClient, err - } - - return otelutils.WrapK8sClient(k8sClient), nil - }, + NewCache: executors.NewCache, + NewClient: executors.NewClient, Metrics: metricsserver.Options{ // Disable metrics serving BindAddress: "0", diff --git a/flytepropeller/cmd/controller/cmd/root.go b/flytepropeller/cmd/controller/cmd/root.go index a3db18833c..8696f3993a 100644 --- a/flytepropeller/cmd/controller/cmd/root.go +++ b/flytepropeller/cmd/controller/cmd/root.go @@ -12,16 +12,15 @@ import ( "github.com/spf13/cobra" "github.com/spf13/pflag" "golang.org/x/sync/errgroup" - "k8s.io/client-go/rest" "k8s.io/klog" "sigs.k8s.io/controller-runtime/pkg/cache" - "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/manager" "sigs.k8s.io/controller-runtime/pkg/metrics" metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server" "github.com/flyteorg/flyte/flytepropeller/pkg/controller" config2 "github.com/flyteorg/flyte/flytepropeller/pkg/controller/config" + "github.com/flyteorg/flyte/flytepropeller/pkg/controller/executors" "github.com/flyteorg/flyte/flytepropeller/pkg/signals" "github.com/flyteorg/flyte/flytestdlib/config" "github.com/flyteorg/flyte/flytestdlib/config/viper" @@ -144,22 +143,8 @@ func executeRootCmd(baseCtx context.Context, cfg *config2.Config) error { SyncPeriod: &cfg.DownstreamEval.Duration, DefaultNamespaces: namespaceConfigs, }, - NewCache: func(config *rest.Config, options cache.Options) (cache.Cache, error) { - k8sCache, err := cache.New(config, options) - if err != nil { - return k8sCache, err - } - - return otelutils.WrapK8sCache(k8sCache), nil - }, - NewClient: func(config *rest.Config, options client.Options) (client.Client, error) { - k8sClient, err := client.New(config, options) - if err != nil { - return k8sClient, err - } - - return otelutils.WrapK8sClient(k8sClient), nil - }, + NewCache: executors.NewCache, + NewClient: executors.NewClient, Metrics: metricsserver.Options{ // Disable metrics serving BindAddress: "0", diff --git a/flytepropeller/cmd/controller/cmd/webhook.go b/flytepropeller/cmd/controller/cmd/webhook.go index f34f21d12c..e3c29ae3d9 100644 --- a/flytepropeller/cmd/controller/cmd/webhook.go +++ b/flytepropeller/cmd/controller/cmd/webhook.go @@ -5,9 +5,7 @@ import ( "github.com/spf13/cobra" "golang.org/x/sync/errgroup" - "k8s.io/client-go/rest" "sigs.k8s.io/controller-runtime/pkg/cache" - "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/manager" metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server" ctrlWebhook "sigs.k8s.io/controller-runtime/pkg/webhook" @@ -110,9 +108,8 @@ func runWebhook(origContext context.Context, propellerCfg *config.Config, cfg *w SyncPeriod: &propellerCfg.DownstreamEval.Duration, DefaultNamespaces: namespaceConfigs, }, - NewClient: func(config *rest.Config, options client.Options) (client.Client, error) { - return executors.NewFallbackClientBuilder(webhookScope).Build(nil, config, options) - }, + NewCache: executors.NewCache, + NewClient: executors.NewClient, Metrics: metricsserver.Options{ // Disable metrics serving BindAddress: "0", diff --git a/flytepropeller/pkg/controller/executors/kube.go b/flytepropeller/pkg/controller/executors/kube.go index acd4f5c4f3..bdab0d91be 100644 --- a/flytepropeller/pkg/controller/executors/kube.go +++ b/flytepropeller/pkg/controller/executors/kube.go @@ -9,6 +9,7 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" "github.com/flyteorg/flyte/flytestdlib/fastcheck" + "github.com/flyteorg/flyte/flytestdlib/otelutils" "github.com/flyteorg/flyte/flytestdlib/promutils" ) @@ -23,26 +24,66 @@ type Client interface { GetCache() cache.Cache } -// ClientBuilder builder is the interface for the client builder. -type ClientBuilder interface { - // Build returns a new client. - Build(cache cache.Cache, config *rest.Config, options client.Options) (client.Client, error) +var NewCache = func(config *rest.Config, options cache.Options) (cache.Cache, error) { + k8sCache, err := cache.New(config, options) + if err != nil { + return k8sCache, err + } + + return otelutils.WrapK8sCache(k8sCache), nil +} + +var NewClient = func(config *rest.Config, options client.Options) (client.Client, error) { + var reader *fallbackClientReader + if options.Cache != nil && options.Cache.Reader != nil { + // if caching is enabled we create a fallback reader so we can attempt the client if the cache + // reader does not have the object + reader = &fallbackClientReader{ + orderedClients: []client.Reader{options.Cache.Reader}, + } + + options.Cache.Reader = reader + } + + // create the k8s client + k8sClient, err := client.New(config, options) + if err != nil { + return k8sClient, err + } + + k8sOtelClient := otelutils.WrapK8sClient(k8sClient) + if reader != nil { + // once the k8s client is created we set the fallback reader's client to the k8s client + reader.orderedClients = append(reader.orderedClients, k8sOtelClient) + } + + return k8sOtelClient, nil } -type FallbackClientBuilder struct { - scope promutils.Scope +// fallbackClientReader reads from the cache first and if not found then reads from the configured reader, which +// directly reads from the API +type fallbackClientReader struct { + orderedClients []client.Reader } -func (f *FallbackClientBuilder) Build(_ cache.Cache, config *rest.Config, options client.Options) (client.Client, error) { - return client.New(config, options) +func (c fallbackClientReader) Get(ctx context.Context, key client.ObjectKey, out client.Object, opts ...client.GetOption) (err error) { + for _, k8sClient := range c.orderedClients { + if err = k8sClient.Get(ctx, key, out, opts...); err == nil { + return nil + } + } + + return } -// NewFallbackClientBuilder Creates a new k8s client that uses the cached client for reads and falls back to making API -// calls if it failed. Write calls will always go to raw client directly. -func NewFallbackClientBuilder(scope promutils.Scope) *FallbackClientBuilder { - return &FallbackClientBuilder{ - scope: scope, +func (c fallbackClientReader) List(ctx context.Context, list client.ObjectList, opts ...client.ListOption) (err error) { + for _, k8sClient := range c.orderedClients { + if err = k8sClient.List(ctx, list, opts...); err == nil { + return nil + } } + + return } type writeThroughCachingWriter struct { diff --git a/flytepropeller/pkg/controller/executors/mocks/client_builder.go b/flytepropeller/pkg/controller/executors/mocks/client_builder.go deleted file mode 100644 index 3180f480fd..0000000000 --- a/flytepropeller/pkg/controller/executors/mocks/client_builder.go +++ /dev/null @@ -1,100 +0,0 @@ -// Code generated by mockery v1.0.1. DO NOT EDIT. - -package mocks - -import ( - cache "sigs.k8s.io/controller-runtime/pkg/cache" - client "sigs.k8s.io/controller-runtime/pkg/client" - - executors "github.com/flyteorg/flyte/flytepropeller/pkg/controller/executors" - - mock "github.com/stretchr/testify/mock" - - rest "k8s.io/client-go/rest" -) - -// ClientBuilder is an autogenerated mock type for the ClientBuilder type -type ClientBuilder struct { - mock.Mock -} - -type ClientBuilder_Build struct { - *mock.Call -} - -func (_m ClientBuilder_Build) Return(_a0 client.Client, _a1 error) *ClientBuilder_Build { - return &ClientBuilder_Build{Call: _m.Call.Return(_a0, _a1)} -} - -func (_m *ClientBuilder) OnBuild(_a0 cache.Cache, config *rest.Config, options client.Options) *ClientBuilder_Build { - c_call := _m.On("Build", _a0, config, options) - return &ClientBuilder_Build{Call: c_call} -} - -func (_m *ClientBuilder) OnBuildMatch(matchers ...interface{}) *ClientBuilder_Build { - c_call := _m.On("Build", matchers...) - return &ClientBuilder_Build{Call: c_call} -} - -// Build provides a mock function with given fields: _a0, config, options -func (_m *ClientBuilder) Build(_a0 cache.Cache, config *rest.Config, options client.Options) (client.Client, error) { - ret := _m.Called(_a0, config, options) - - var r0 client.Client - if rf, ok := ret.Get(0).(func(cache.Cache, *rest.Config, client.Options) client.Client); ok { - r0 = rf(_a0, config, options) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(client.Client) - } - } - - var r1 error - if rf, ok := ret.Get(1).(func(cache.Cache, *rest.Config, client.Options) error); ok { - r1 = rf(_a0, config, options) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -type ClientBuilder_WithUncached struct { - *mock.Call -} - -func (_m ClientBuilder_WithUncached) Return(_a0 executors.ClientBuilder) *ClientBuilder_WithUncached { - return &ClientBuilder_WithUncached{Call: _m.Call.Return(_a0)} -} - -func (_m *ClientBuilder) OnWithUncached(objs ...client.Object) *ClientBuilder_WithUncached { - c_call := _m.On("WithUncached", objs) - return &ClientBuilder_WithUncached{Call: c_call} -} - -func (_m *ClientBuilder) OnWithUncachedMatch(matchers ...interface{}) *ClientBuilder_WithUncached { - c_call := _m.On("WithUncached", matchers...) - return &ClientBuilder_WithUncached{Call: c_call} -} - -// WithUncached provides a mock function with given fields: objs -func (_m *ClientBuilder) WithUncached(objs ...client.Object) executors.ClientBuilder { - _va := make([]interface{}, len(objs)) - for _i := range objs { - _va[_i] = objs[_i] - } - var _ca []interface{} - _ca = append(_ca, _va...) - ret := _m.Called(_ca...) - - var r0 executors.ClientBuilder - if rf, ok := ret.Get(0).(func(...client.Object) executors.ClientBuilder); ok { - r0 = rf(objs...) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(executors.ClientBuilder) - } - } - - return r0 -} From ace09677050eb6fd8cc8b712c9282019e1052439 Mon Sep 17 00:00:00 2001 From: Eduardo Apolinario <653394+eapolinario@users.noreply.github.com> Date: Wed, 17 Jan 2024 10:58:37 -0800 Subject: [PATCH 14/30] Remove unused validate files (#4644) Signed-off-by: Eduardo Apolinario Co-authored-by: Eduardo Apolinario --- flyteidl/validate/__init__.py | 0 flyteidl/validate/validate_pb2.py | 2366 ----------------------------- 2 files changed, 2366 deletions(-) delete mode 100644 flyteidl/validate/__init__.py delete mode 100644 flyteidl/validate/validate_pb2.py diff --git a/flyteidl/validate/__init__.py b/flyteidl/validate/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/flyteidl/validate/validate_pb2.py b/flyteidl/validate/validate_pb2.py deleted file mode 100644 index 73988e7c38..0000000000 --- a/flyteidl/validate/validate_pb2.py +++ /dev/null @@ -1,2366 +0,0 @@ -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: validate/validate.proto - -import sys -_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) -from google.protobuf.internal import enum_type_wrapper -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection -from google.protobuf import symbol_database as _symbol_database -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -from google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2 -from google.protobuf import duration_pb2 as google_dot_protobuf_dot_duration__pb2 -from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 - - -DESCRIPTOR = _descriptor.FileDescriptor( - name='validate/validate.proto', - package='validate', - syntax='proto2', - serialized_options=_b('\n\032io.envoyproxy.pgv.validateZ2github.com/envoyproxy/protoc-gen-validate/validate'), - serialized_pb=_b('\n\x17validate/validate.proto\x12\x08validate\x1a google/protobuf/descriptor.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\x98\x07\n\nFieldRules\x12\'\n\x07message\x18\x11 \x01(\x0b\x32\x16.validate.MessageRules\x12%\n\x05\x66loat\x18\x01 \x01(\x0b\x32\x14.validate.FloatRulesH\x00\x12\'\n\x06\x64ouble\x18\x02 \x01(\x0b\x32\x15.validate.DoubleRulesH\x00\x12%\n\x05int32\x18\x03 \x01(\x0b\x32\x14.validate.Int32RulesH\x00\x12%\n\x05int64\x18\x04 \x01(\x0b\x32\x14.validate.Int64RulesH\x00\x12\'\n\x06uint32\x18\x05 \x01(\x0b\x32\x15.validate.UInt32RulesH\x00\x12\'\n\x06uint64\x18\x06 \x01(\x0b\x32\x15.validate.UInt64RulesH\x00\x12\'\n\x06sint32\x18\x07 \x01(\x0b\x32\x15.validate.SInt32RulesH\x00\x12\'\n\x06sint64\x18\x08 \x01(\x0b\x32\x15.validate.SInt64RulesH\x00\x12)\n\x07\x66ixed32\x18\t \x01(\x0b\x32\x16.validate.Fixed32RulesH\x00\x12)\n\x07\x66ixed64\x18\n \x01(\x0b\x32\x16.validate.Fixed64RulesH\x00\x12+\n\x08sfixed32\x18\x0b \x01(\x0b\x32\x17.validate.SFixed32RulesH\x00\x12+\n\x08sfixed64\x18\x0c \x01(\x0b\x32\x17.validate.SFixed64RulesH\x00\x12#\n\x04\x62ool\x18\r \x01(\x0b\x32\x13.validate.BoolRulesH\x00\x12\'\n\x06string\x18\x0e \x01(\x0b\x32\x15.validate.StringRulesH\x00\x12%\n\x05\x62ytes\x18\x0f \x01(\x0b\x32\x14.validate.BytesRulesH\x00\x12#\n\x04\x65num\x18\x10 \x01(\x0b\x32\x13.validate.EnumRulesH\x00\x12+\n\x08repeated\x18\x12 \x01(\x0b\x32\x17.validate.RepeatedRulesH\x00\x12!\n\x03map\x18\x13 \x01(\x0b\x32\x12.validate.MapRulesH\x00\x12!\n\x03\x61ny\x18\x14 \x01(\x0b\x32\x12.validate.AnyRulesH\x00\x12+\n\x08\x64uration\x18\x15 \x01(\x0b\x32\x17.validate.DurationRulesH\x00\x12-\n\ttimestamp\x18\x16 \x01(\x0b\x32\x18.validate.TimestampRulesH\x00\x42\x06\n\x04type\"\x7f\n\nFloatRules\x12\r\n\x05\x63onst\x18\x01 \x01(\x02\x12\n\n\x02lt\x18\x02 \x01(\x02\x12\x0b\n\x03lte\x18\x03 \x01(\x02\x12\n\n\x02gt\x18\x04 \x01(\x02\x12\x0b\n\x03gte\x18\x05 \x01(\x02\x12\n\n\x02in\x18\x06 \x03(\x02\x12\x0e\n\x06not_in\x18\x07 \x03(\x02\x12\x14\n\x0cignore_empty\x18\x08 \x01(\x08\"\x80\x01\n\x0b\x44oubleRules\x12\r\n\x05\x63onst\x18\x01 \x01(\x01\x12\n\n\x02lt\x18\x02 \x01(\x01\x12\x0b\n\x03lte\x18\x03 \x01(\x01\x12\n\n\x02gt\x18\x04 \x01(\x01\x12\x0b\n\x03gte\x18\x05 \x01(\x01\x12\n\n\x02in\x18\x06 \x03(\x01\x12\x0e\n\x06not_in\x18\x07 \x03(\x01\x12\x14\n\x0cignore_empty\x18\x08 \x01(\x08\"\x7f\n\nInt32Rules\x12\r\n\x05\x63onst\x18\x01 \x01(\x05\x12\n\n\x02lt\x18\x02 \x01(\x05\x12\x0b\n\x03lte\x18\x03 \x01(\x05\x12\n\n\x02gt\x18\x04 \x01(\x05\x12\x0b\n\x03gte\x18\x05 \x01(\x05\x12\n\n\x02in\x18\x06 \x03(\x05\x12\x0e\n\x06not_in\x18\x07 \x03(\x05\x12\x14\n\x0cignore_empty\x18\x08 \x01(\x08\"\x7f\n\nInt64Rules\x12\r\n\x05\x63onst\x18\x01 \x01(\x03\x12\n\n\x02lt\x18\x02 \x01(\x03\x12\x0b\n\x03lte\x18\x03 \x01(\x03\x12\n\n\x02gt\x18\x04 \x01(\x03\x12\x0b\n\x03gte\x18\x05 \x01(\x03\x12\n\n\x02in\x18\x06 \x03(\x03\x12\x0e\n\x06not_in\x18\x07 \x03(\x03\x12\x14\n\x0cignore_empty\x18\x08 \x01(\x08\"\x80\x01\n\x0bUInt32Rules\x12\r\n\x05\x63onst\x18\x01 \x01(\r\x12\n\n\x02lt\x18\x02 \x01(\r\x12\x0b\n\x03lte\x18\x03 \x01(\r\x12\n\n\x02gt\x18\x04 \x01(\r\x12\x0b\n\x03gte\x18\x05 \x01(\r\x12\n\n\x02in\x18\x06 \x03(\r\x12\x0e\n\x06not_in\x18\x07 \x03(\r\x12\x14\n\x0cignore_empty\x18\x08 \x01(\x08\"\x80\x01\n\x0bUInt64Rules\x12\r\n\x05\x63onst\x18\x01 \x01(\x04\x12\n\n\x02lt\x18\x02 \x01(\x04\x12\x0b\n\x03lte\x18\x03 \x01(\x04\x12\n\n\x02gt\x18\x04 \x01(\x04\x12\x0b\n\x03gte\x18\x05 \x01(\x04\x12\n\n\x02in\x18\x06 \x03(\x04\x12\x0e\n\x06not_in\x18\x07 \x03(\x04\x12\x14\n\x0cignore_empty\x18\x08 \x01(\x08\"\x80\x01\n\x0bSInt32Rules\x12\r\n\x05\x63onst\x18\x01 \x01(\x11\x12\n\n\x02lt\x18\x02 \x01(\x11\x12\x0b\n\x03lte\x18\x03 \x01(\x11\x12\n\n\x02gt\x18\x04 \x01(\x11\x12\x0b\n\x03gte\x18\x05 \x01(\x11\x12\n\n\x02in\x18\x06 \x03(\x11\x12\x0e\n\x06not_in\x18\x07 \x03(\x11\x12\x14\n\x0cignore_empty\x18\x08 \x01(\x08\"\x80\x01\n\x0bSInt64Rules\x12\r\n\x05\x63onst\x18\x01 \x01(\x12\x12\n\n\x02lt\x18\x02 \x01(\x12\x12\x0b\n\x03lte\x18\x03 \x01(\x12\x12\n\n\x02gt\x18\x04 \x01(\x12\x12\x0b\n\x03gte\x18\x05 \x01(\x12\x12\n\n\x02in\x18\x06 \x03(\x12\x12\x0e\n\x06not_in\x18\x07 \x03(\x12\x12\x14\n\x0cignore_empty\x18\x08 \x01(\x08\"\x81\x01\n\x0c\x46ixed32Rules\x12\r\n\x05\x63onst\x18\x01 \x01(\x07\x12\n\n\x02lt\x18\x02 \x01(\x07\x12\x0b\n\x03lte\x18\x03 \x01(\x07\x12\n\n\x02gt\x18\x04 \x01(\x07\x12\x0b\n\x03gte\x18\x05 \x01(\x07\x12\n\n\x02in\x18\x06 \x03(\x07\x12\x0e\n\x06not_in\x18\x07 \x03(\x07\x12\x14\n\x0cignore_empty\x18\x08 \x01(\x08\"\x81\x01\n\x0c\x46ixed64Rules\x12\r\n\x05\x63onst\x18\x01 \x01(\x06\x12\n\n\x02lt\x18\x02 \x01(\x06\x12\x0b\n\x03lte\x18\x03 \x01(\x06\x12\n\n\x02gt\x18\x04 \x01(\x06\x12\x0b\n\x03gte\x18\x05 \x01(\x06\x12\n\n\x02in\x18\x06 \x03(\x06\x12\x0e\n\x06not_in\x18\x07 \x03(\x06\x12\x14\n\x0cignore_empty\x18\x08 \x01(\x08\"\x82\x01\n\rSFixed32Rules\x12\r\n\x05\x63onst\x18\x01 \x01(\x0f\x12\n\n\x02lt\x18\x02 \x01(\x0f\x12\x0b\n\x03lte\x18\x03 \x01(\x0f\x12\n\n\x02gt\x18\x04 \x01(\x0f\x12\x0b\n\x03gte\x18\x05 \x01(\x0f\x12\n\n\x02in\x18\x06 \x03(\x0f\x12\x0e\n\x06not_in\x18\x07 \x03(\x0f\x12\x14\n\x0cignore_empty\x18\x08 \x01(\x08\"\x82\x01\n\rSFixed64Rules\x12\r\n\x05\x63onst\x18\x01 \x01(\x10\x12\n\n\x02lt\x18\x02 \x01(\x10\x12\x0b\n\x03lte\x18\x03 \x01(\x10\x12\n\n\x02gt\x18\x04 \x01(\x10\x12\x0b\n\x03gte\x18\x05 \x01(\x10\x12\n\n\x02in\x18\x06 \x03(\x10\x12\x0e\n\x06not_in\x18\x07 \x03(\x10\x12\x14\n\x0cignore_empty\x18\x08 \x01(\x08\"\x1a\n\tBoolRules\x12\r\n\x05\x63onst\x18\x01 \x01(\x08\"\xfd\x03\n\x0bStringRules\x12\r\n\x05\x63onst\x18\x01 \x01(\t\x12\x0b\n\x03len\x18\x13 \x01(\x04\x12\x0f\n\x07min_len\x18\x02 \x01(\x04\x12\x0f\n\x07max_len\x18\x03 \x01(\x04\x12\x11\n\tlen_bytes\x18\x14 \x01(\x04\x12\x11\n\tmin_bytes\x18\x04 \x01(\x04\x12\x11\n\tmax_bytes\x18\x05 \x01(\x04\x12\x0f\n\x07pattern\x18\x06 \x01(\t\x12\x0e\n\x06prefix\x18\x07 \x01(\t\x12\x0e\n\x06suffix\x18\x08 \x01(\t\x12\x10\n\x08\x63ontains\x18\t \x01(\t\x12\x14\n\x0cnot_contains\x18\x17 \x01(\t\x12\n\n\x02in\x18\n \x03(\t\x12\x0e\n\x06not_in\x18\x0b \x03(\t\x12\x0f\n\x05\x65mail\x18\x0c \x01(\x08H\x00\x12\x12\n\x08hostname\x18\r \x01(\x08H\x00\x12\x0c\n\x02ip\x18\x0e \x01(\x08H\x00\x12\x0e\n\x04ipv4\x18\x0f \x01(\x08H\x00\x12\x0e\n\x04ipv6\x18\x10 \x01(\x08H\x00\x12\r\n\x03uri\x18\x11 \x01(\x08H\x00\x12\x11\n\x07uri_ref\x18\x12 \x01(\x08H\x00\x12\x11\n\x07\x61\x64\x64ress\x18\x15 \x01(\x08H\x00\x12\x0e\n\x04uuid\x18\x16 \x01(\x08H\x00\x12\x30\n\x10well_known_regex\x18\x18 \x01(\x0e\x32\x14.validate.KnownRegexH\x00\x12\x14\n\x06strict\x18\x19 \x01(\x08:\x04true\x12\x14\n\x0cignore_empty\x18\x1a \x01(\x08\x42\x0c\n\nwell_known\"\xfb\x01\n\nBytesRules\x12\r\n\x05\x63onst\x18\x01 \x01(\x0c\x12\x0b\n\x03len\x18\r \x01(\x04\x12\x0f\n\x07min_len\x18\x02 \x01(\x04\x12\x0f\n\x07max_len\x18\x03 \x01(\x04\x12\x0f\n\x07pattern\x18\x04 \x01(\t\x12\x0e\n\x06prefix\x18\x05 \x01(\x0c\x12\x0e\n\x06suffix\x18\x06 \x01(\x0c\x12\x10\n\x08\x63ontains\x18\x07 \x01(\x0c\x12\n\n\x02in\x18\x08 \x03(\x0c\x12\x0e\n\x06not_in\x18\t \x03(\x0c\x12\x0c\n\x02ip\x18\n \x01(\x08H\x00\x12\x0e\n\x04ipv4\x18\x0b \x01(\x08H\x00\x12\x0e\n\x04ipv6\x18\x0c \x01(\x08H\x00\x12\x14\n\x0cignore_empty\x18\x0e \x01(\x08\x42\x0c\n\nwell_known\"L\n\tEnumRules\x12\r\n\x05\x63onst\x18\x01 \x01(\x05\x12\x14\n\x0c\x64\x65\x66ined_only\x18\x02 \x01(\x08\x12\n\n\x02in\x18\x03 \x03(\x05\x12\x0e\n\x06not_in\x18\x04 \x03(\x05\".\n\x0cMessageRules\x12\x0c\n\x04skip\x18\x01 \x01(\x08\x12\x10\n\x08required\x18\x02 \x01(\x08\"\x80\x01\n\rRepeatedRules\x12\x11\n\tmin_items\x18\x01 \x01(\x04\x12\x11\n\tmax_items\x18\x02 \x01(\x04\x12\x0e\n\x06unique\x18\x03 \x01(\x08\x12#\n\x05items\x18\x04 \x01(\x0b\x32\x14.validate.FieldRules\x12\x14\n\x0cignore_empty\x18\x05 \x01(\x08\"\xa3\x01\n\x08MapRules\x12\x11\n\tmin_pairs\x18\x01 \x01(\x04\x12\x11\n\tmax_pairs\x18\x02 \x01(\x04\x12\x11\n\tno_sparse\x18\x03 \x01(\x08\x12\"\n\x04keys\x18\x04 \x01(\x0b\x32\x14.validate.FieldRules\x12$\n\x06values\x18\x05 \x01(\x0b\x32\x14.validate.FieldRules\x12\x14\n\x0cignore_empty\x18\x06 \x01(\x08\"8\n\x08\x41nyRules\x12\x10\n\x08required\x18\x01 \x01(\x08\x12\n\n\x02in\x18\x02 \x03(\t\x12\x0e\n\x06not_in\x18\x03 \x03(\t\"\xbb\x02\n\rDurationRules\x12\x10\n\x08required\x18\x01 \x01(\x08\x12(\n\x05\x63onst\x18\x02 \x01(\x0b\x32\x19.google.protobuf.Duration\x12%\n\x02lt\x18\x03 \x01(\x0b\x32\x19.google.protobuf.Duration\x12&\n\x03lte\x18\x04 \x01(\x0b\x32\x19.google.protobuf.Duration\x12%\n\x02gt\x18\x05 \x01(\x0b\x32\x19.google.protobuf.Duration\x12&\n\x03gte\x18\x06 \x01(\x0b\x32\x19.google.protobuf.Duration\x12%\n\x02in\x18\x07 \x03(\x0b\x32\x19.google.protobuf.Duration\x12)\n\x06not_in\x18\x08 \x03(\x0b\x32\x19.google.protobuf.Duration\"\xba\x02\n\x0eTimestampRules\x12\x10\n\x08required\x18\x01 \x01(\x08\x12)\n\x05\x63onst\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12&\n\x02lt\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\'\n\x03lte\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12&\n\x02gt\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\'\n\x03gte\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x0e\n\x06lt_now\x18\x07 \x01(\x08\x12\x0e\n\x06gt_now\x18\x08 \x01(\x08\x12)\n\x06within\x18\t \x01(\x0b\x32\x19.google.protobuf.Duration*F\n\nKnownRegex\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x14\n\x10HTTP_HEADER_NAME\x10\x01\x12\x15\n\x11HTTP_HEADER_VALUE\x10\x02:2\n\x08\x64isabled\x12\x1f.google.protobuf.MessageOptions\x18\xaf\x08 \x01(\x08:1\n\x07ignored\x12\x1f.google.protobuf.MessageOptions\x18\xb0\x08 \x01(\x08:0\n\x08required\x12\x1d.google.protobuf.OneofOptions\x18\xaf\x08 \x01(\x08:C\n\x05rules\x12\x1d.google.protobuf.FieldOptions\x18\xaf\x08 \x01(\x0b\x32\x14.validate.FieldRulesBP\n\x1aio.envoyproxy.pgv.validateZ2github.com/envoyproxy/protoc-gen-validate/validate') - , - dependencies=[google_dot_protobuf_dot_descriptor__pb2.DESCRIPTOR,google_dot_protobuf_dot_duration__pb2.DESCRIPTOR,google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,]) - -_KNOWNREGEX = _descriptor.EnumDescriptor( - name='KnownRegex', - full_name='validate.KnownRegex', - filename=None, - file=DESCRIPTOR, - values=[ - _descriptor.EnumValueDescriptor( - name='UNKNOWN', index=0, number=0, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='HTTP_HEADER_NAME', index=1, number=1, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='HTTP_HEADER_VALUE', index=2, number=2, - serialized_options=None, - type=None), - ], - containing_type=None, - serialized_options=None, - serialized_start=4541, - serialized_end=4611, -) -_sym_db.RegisterEnumDescriptor(_KNOWNREGEX) - -KnownRegex = enum_type_wrapper.EnumTypeWrapper(_KNOWNREGEX) -UNKNOWN = 0 -HTTP_HEADER_NAME = 1 -HTTP_HEADER_VALUE = 2 - -DISABLED_FIELD_NUMBER = 1071 -disabled = _descriptor.FieldDescriptor( - name='disabled', full_name='validate.disabled', index=0, - number=1071, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=True, extension_scope=None, - serialized_options=None, file=DESCRIPTOR) -IGNORED_FIELD_NUMBER = 1072 -ignored = _descriptor.FieldDescriptor( - name='ignored', full_name='validate.ignored', index=1, - number=1072, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=True, extension_scope=None, - serialized_options=None, file=DESCRIPTOR) -REQUIRED_FIELD_NUMBER = 1071 -required = _descriptor.FieldDescriptor( - name='required', full_name='validate.required', index=2, - number=1071, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=True, extension_scope=None, - serialized_options=None, file=DESCRIPTOR) -RULES_FIELD_NUMBER = 1071 -rules = _descriptor.FieldDescriptor( - name='rules', full_name='validate.rules', index=3, - number=1071, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=True, extension_scope=None, - serialized_options=None, file=DESCRIPTOR) - - -_FIELDRULES = _descriptor.Descriptor( - name='FieldRules', - full_name='validate.FieldRules', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='message', full_name='validate.FieldRules.message', index=0, - number=17, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='float', full_name='validate.FieldRules.float', index=1, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='double', full_name='validate.FieldRules.double', index=2, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='int32', full_name='validate.FieldRules.int32', index=3, - number=3, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='int64', full_name='validate.FieldRules.int64', index=4, - number=4, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='uint32', full_name='validate.FieldRules.uint32', index=5, - number=5, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='uint64', full_name='validate.FieldRules.uint64', index=6, - number=6, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='sint32', full_name='validate.FieldRules.sint32', index=7, - number=7, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='sint64', full_name='validate.FieldRules.sint64', index=8, - number=8, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='fixed32', full_name='validate.FieldRules.fixed32', index=9, - number=9, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='fixed64', full_name='validate.FieldRules.fixed64', index=10, - number=10, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='sfixed32', full_name='validate.FieldRules.sfixed32', index=11, - number=11, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='sfixed64', full_name='validate.FieldRules.sfixed64', index=12, - number=12, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='bool', full_name='validate.FieldRules.bool', index=13, - number=13, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='string', full_name='validate.FieldRules.string', index=14, - number=14, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='bytes', full_name='validate.FieldRules.bytes', index=15, - number=15, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='enum', full_name='validate.FieldRules.enum', index=16, - number=16, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='repeated', full_name='validate.FieldRules.repeated', index=17, - number=18, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='map', full_name='validate.FieldRules.map', index=18, - number=19, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='any', full_name='validate.FieldRules.any', index=19, - number=20, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='duration', full_name='validate.FieldRules.duration', index=20, - number=21, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='timestamp', full_name='validate.FieldRules.timestamp', index=21, - number=22, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto2', - extension_ranges=[], - oneofs=[ - _descriptor.OneofDescriptor( - name='type', full_name='validate.FieldRules.type', - index=0, containing_type=None, fields=[]), - ], - serialized_start=137, - serialized_end=1057, -) - - -_FLOATRULES = _descriptor.Descriptor( - name='FloatRules', - full_name='validate.FloatRules', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='const', full_name='validate.FloatRules.const', index=0, - number=1, type=2, cpp_type=6, label=1, - has_default_value=False, default_value=float(0), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='lt', full_name='validate.FloatRules.lt', index=1, - number=2, type=2, cpp_type=6, label=1, - has_default_value=False, default_value=float(0), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='lte', full_name='validate.FloatRules.lte', index=2, - number=3, type=2, cpp_type=6, label=1, - has_default_value=False, default_value=float(0), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='gt', full_name='validate.FloatRules.gt', index=3, - number=4, type=2, cpp_type=6, label=1, - has_default_value=False, default_value=float(0), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='gte', full_name='validate.FloatRules.gte', index=4, - number=5, type=2, cpp_type=6, label=1, - has_default_value=False, default_value=float(0), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='in', full_name='validate.FloatRules.in', index=5, - number=6, type=2, cpp_type=6, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='not_in', full_name='validate.FloatRules.not_in', index=6, - number=7, type=2, cpp_type=6, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='ignore_empty', full_name='validate.FloatRules.ignore_empty', index=7, - number=8, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto2', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1059, - serialized_end=1186, -) - - -_DOUBLERULES = _descriptor.Descriptor( - name='DoubleRules', - full_name='validate.DoubleRules', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='const', full_name='validate.DoubleRules.const', index=0, - number=1, type=1, cpp_type=5, label=1, - has_default_value=False, default_value=float(0), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='lt', full_name='validate.DoubleRules.lt', index=1, - number=2, type=1, cpp_type=5, label=1, - has_default_value=False, default_value=float(0), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='lte', full_name='validate.DoubleRules.lte', index=2, - number=3, type=1, cpp_type=5, label=1, - has_default_value=False, default_value=float(0), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='gt', full_name='validate.DoubleRules.gt', index=3, - number=4, type=1, cpp_type=5, label=1, - has_default_value=False, default_value=float(0), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='gte', full_name='validate.DoubleRules.gte', index=4, - number=5, type=1, cpp_type=5, label=1, - has_default_value=False, default_value=float(0), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='in', full_name='validate.DoubleRules.in', index=5, - number=6, type=1, cpp_type=5, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='not_in', full_name='validate.DoubleRules.not_in', index=6, - number=7, type=1, cpp_type=5, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='ignore_empty', full_name='validate.DoubleRules.ignore_empty', index=7, - number=8, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto2', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1189, - serialized_end=1317, -) - - -_INT32RULES = _descriptor.Descriptor( - name='Int32Rules', - full_name='validate.Int32Rules', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='const', full_name='validate.Int32Rules.const', index=0, - number=1, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='lt', full_name='validate.Int32Rules.lt', index=1, - number=2, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='lte', full_name='validate.Int32Rules.lte', index=2, - number=3, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='gt', full_name='validate.Int32Rules.gt', index=3, - number=4, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='gte', full_name='validate.Int32Rules.gte', index=4, - number=5, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='in', full_name='validate.Int32Rules.in', index=5, - number=6, type=5, cpp_type=1, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='not_in', full_name='validate.Int32Rules.not_in', index=6, - number=7, type=5, cpp_type=1, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='ignore_empty', full_name='validate.Int32Rules.ignore_empty', index=7, - number=8, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto2', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1319, - serialized_end=1446, -) - - -_INT64RULES = _descriptor.Descriptor( - name='Int64Rules', - full_name='validate.Int64Rules', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='const', full_name='validate.Int64Rules.const', index=0, - number=1, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='lt', full_name='validate.Int64Rules.lt', index=1, - number=2, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='lte', full_name='validate.Int64Rules.lte', index=2, - number=3, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='gt', full_name='validate.Int64Rules.gt', index=3, - number=4, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='gte', full_name='validate.Int64Rules.gte', index=4, - number=5, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='in', full_name='validate.Int64Rules.in', index=5, - number=6, type=3, cpp_type=2, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='not_in', full_name='validate.Int64Rules.not_in', index=6, - number=7, type=3, cpp_type=2, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='ignore_empty', full_name='validate.Int64Rules.ignore_empty', index=7, - number=8, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto2', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1448, - serialized_end=1575, -) - - -_UINT32RULES = _descriptor.Descriptor( - name='UInt32Rules', - full_name='validate.UInt32Rules', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='const', full_name='validate.UInt32Rules.const', index=0, - number=1, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='lt', full_name='validate.UInt32Rules.lt', index=1, - number=2, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='lte', full_name='validate.UInt32Rules.lte', index=2, - number=3, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='gt', full_name='validate.UInt32Rules.gt', index=3, - number=4, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='gte', full_name='validate.UInt32Rules.gte', index=4, - number=5, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='in', full_name='validate.UInt32Rules.in', index=5, - number=6, type=13, cpp_type=3, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='not_in', full_name='validate.UInt32Rules.not_in', index=6, - number=7, type=13, cpp_type=3, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='ignore_empty', full_name='validate.UInt32Rules.ignore_empty', index=7, - number=8, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto2', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1578, - serialized_end=1706, -) - - -_UINT64RULES = _descriptor.Descriptor( - name='UInt64Rules', - full_name='validate.UInt64Rules', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='const', full_name='validate.UInt64Rules.const', index=0, - number=1, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='lt', full_name='validate.UInt64Rules.lt', index=1, - number=2, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='lte', full_name='validate.UInt64Rules.lte', index=2, - number=3, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='gt', full_name='validate.UInt64Rules.gt', index=3, - number=4, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='gte', full_name='validate.UInt64Rules.gte', index=4, - number=5, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='in', full_name='validate.UInt64Rules.in', index=5, - number=6, type=4, cpp_type=4, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='not_in', full_name='validate.UInt64Rules.not_in', index=6, - number=7, type=4, cpp_type=4, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='ignore_empty', full_name='validate.UInt64Rules.ignore_empty', index=7, - number=8, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto2', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1709, - serialized_end=1837, -) - - -_SINT32RULES = _descriptor.Descriptor( - name='SInt32Rules', - full_name='validate.SInt32Rules', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='const', full_name='validate.SInt32Rules.const', index=0, - number=1, type=17, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='lt', full_name='validate.SInt32Rules.lt', index=1, - number=2, type=17, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='lte', full_name='validate.SInt32Rules.lte', index=2, - number=3, type=17, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='gt', full_name='validate.SInt32Rules.gt', index=3, - number=4, type=17, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='gte', full_name='validate.SInt32Rules.gte', index=4, - number=5, type=17, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='in', full_name='validate.SInt32Rules.in', index=5, - number=6, type=17, cpp_type=1, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='not_in', full_name='validate.SInt32Rules.not_in', index=6, - number=7, type=17, cpp_type=1, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='ignore_empty', full_name='validate.SInt32Rules.ignore_empty', index=7, - number=8, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto2', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1840, - serialized_end=1968, -) - - -_SINT64RULES = _descriptor.Descriptor( - name='SInt64Rules', - full_name='validate.SInt64Rules', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='const', full_name='validate.SInt64Rules.const', index=0, - number=1, type=18, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='lt', full_name='validate.SInt64Rules.lt', index=1, - number=2, type=18, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='lte', full_name='validate.SInt64Rules.lte', index=2, - number=3, type=18, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='gt', full_name='validate.SInt64Rules.gt', index=3, - number=4, type=18, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='gte', full_name='validate.SInt64Rules.gte', index=4, - number=5, type=18, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='in', full_name='validate.SInt64Rules.in', index=5, - number=6, type=18, cpp_type=2, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='not_in', full_name='validate.SInt64Rules.not_in', index=6, - number=7, type=18, cpp_type=2, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='ignore_empty', full_name='validate.SInt64Rules.ignore_empty', index=7, - number=8, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto2', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1971, - serialized_end=2099, -) - - -_FIXED32RULES = _descriptor.Descriptor( - name='Fixed32Rules', - full_name='validate.Fixed32Rules', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='const', full_name='validate.Fixed32Rules.const', index=0, - number=1, type=7, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='lt', full_name='validate.Fixed32Rules.lt', index=1, - number=2, type=7, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='lte', full_name='validate.Fixed32Rules.lte', index=2, - number=3, type=7, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='gt', full_name='validate.Fixed32Rules.gt', index=3, - number=4, type=7, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='gte', full_name='validate.Fixed32Rules.gte', index=4, - number=5, type=7, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='in', full_name='validate.Fixed32Rules.in', index=5, - number=6, type=7, cpp_type=3, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='not_in', full_name='validate.Fixed32Rules.not_in', index=6, - number=7, type=7, cpp_type=3, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='ignore_empty', full_name='validate.Fixed32Rules.ignore_empty', index=7, - number=8, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto2', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2102, - serialized_end=2231, -) - - -_FIXED64RULES = _descriptor.Descriptor( - name='Fixed64Rules', - full_name='validate.Fixed64Rules', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='const', full_name='validate.Fixed64Rules.const', index=0, - number=1, type=6, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='lt', full_name='validate.Fixed64Rules.lt', index=1, - number=2, type=6, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='lte', full_name='validate.Fixed64Rules.lte', index=2, - number=3, type=6, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='gt', full_name='validate.Fixed64Rules.gt', index=3, - number=4, type=6, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='gte', full_name='validate.Fixed64Rules.gte', index=4, - number=5, type=6, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='in', full_name='validate.Fixed64Rules.in', index=5, - number=6, type=6, cpp_type=4, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='not_in', full_name='validate.Fixed64Rules.not_in', index=6, - number=7, type=6, cpp_type=4, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='ignore_empty', full_name='validate.Fixed64Rules.ignore_empty', index=7, - number=8, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto2', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2234, - serialized_end=2363, -) - - -_SFIXED32RULES = _descriptor.Descriptor( - name='SFixed32Rules', - full_name='validate.SFixed32Rules', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='const', full_name='validate.SFixed32Rules.const', index=0, - number=1, type=15, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='lt', full_name='validate.SFixed32Rules.lt', index=1, - number=2, type=15, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='lte', full_name='validate.SFixed32Rules.lte', index=2, - number=3, type=15, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='gt', full_name='validate.SFixed32Rules.gt', index=3, - number=4, type=15, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='gte', full_name='validate.SFixed32Rules.gte', index=4, - number=5, type=15, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='in', full_name='validate.SFixed32Rules.in', index=5, - number=6, type=15, cpp_type=1, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='not_in', full_name='validate.SFixed32Rules.not_in', index=6, - number=7, type=15, cpp_type=1, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='ignore_empty', full_name='validate.SFixed32Rules.ignore_empty', index=7, - number=8, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto2', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2366, - serialized_end=2496, -) - - -_SFIXED64RULES = _descriptor.Descriptor( - name='SFixed64Rules', - full_name='validate.SFixed64Rules', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='const', full_name='validate.SFixed64Rules.const', index=0, - number=1, type=16, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='lt', full_name='validate.SFixed64Rules.lt', index=1, - number=2, type=16, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='lte', full_name='validate.SFixed64Rules.lte', index=2, - number=3, type=16, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='gt', full_name='validate.SFixed64Rules.gt', index=3, - number=4, type=16, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='gte', full_name='validate.SFixed64Rules.gte', index=4, - number=5, type=16, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='in', full_name='validate.SFixed64Rules.in', index=5, - number=6, type=16, cpp_type=2, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='not_in', full_name='validate.SFixed64Rules.not_in', index=6, - number=7, type=16, cpp_type=2, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='ignore_empty', full_name='validate.SFixed64Rules.ignore_empty', index=7, - number=8, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto2', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2499, - serialized_end=2629, -) - - -_BOOLRULES = _descriptor.Descriptor( - name='BoolRules', - full_name='validate.BoolRules', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='const', full_name='validate.BoolRules.const', index=0, - number=1, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto2', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2631, - serialized_end=2657, -) - - -_STRINGRULES = _descriptor.Descriptor( - name='StringRules', - full_name='validate.StringRules', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='const', full_name='validate.StringRules.const', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='len', full_name='validate.StringRules.len', index=1, - number=19, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='min_len', full_name='validate.StringRules.min_len', index=2, - number=2, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='max_len', full_name='validate.StringRules.max_len', index=3, - number=3, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='len_bytes', full_name='validate.StringRules.len_bytes', index=4, - number=20, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='min_bytes', full_name='validate.StringRules.min_bytes', index=5, - number=4, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='max_bytes', full_name='validate.StringRules.max_bytes', index=6, - number=5, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='pattern', full_name='validate.StringRules.pattern', index=7, - number=6, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='prefix', full_name='validate.StringRules.prefix', index=8, - number=7, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='suffix', full_name='validate.StringRules.suffix', index=9, - number=8, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='contains', full_name='validate.StringRules.contains', index=10, - number=9, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='not_contains', full_name='validate.StringRules.not_contains', index=11, - number=23, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='in', full_name='validate.StringRules.in', index=12, - number=10, type=9, cpp_type=9, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='not_in', full_name='validate.StringRules.not_in', index=13, - number=11, type=9, cpp_type=9, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='email', full_name='validate.StringRules.email', index=14, - number=12, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='hostname', full_name='validate.StringRules.hostname', index=15, - number=13, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='ip', full_name='validate.StringRules.ip', index=16, - number=14, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='ipv4', full_name='validate.StringRules.ipv4', index=17, - number=15, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='ipv6', full_name='validate.StringRules.ipv6', index=18, - number=16, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='uri', full_name='validate.StringRules.uri', index=19, - number=17, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='uri_ref', full_name='validate.StringRules.uri_ref', index=20, - number=18, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='address', full_name='validate.StringRules.address', index=21, - number=21, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='uuid', full_name='validate.StringRules.uuid', index=22, - number=22, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='well_known_regex', full_name='validate.StringRules.well_known_regex', index=23, - number=24, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='strict', full_name='validate.StringRules.strict', index=24, - number=25, type=8, cpp_type=7, label=1, - has_default_value=True, default_value=True, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='ignore_empty', full_name='validate.StringRules.ignore_empty', index=25, - number=26, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto2', - extension_ranges=[], - oneofs=[ - _descriptor.OneofDescriptor( - name='well_known', full_name='validate.StringRules.well_known', - index=0, containing_type=None, fields=[]), - ], - serialized_start=2660, - serialized_end=3169, -) - - -_BYTESRULES = _descriptor.Descriptor( - name='BytesRules', - full_name='validate.BytesRules', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='const', full_name='validate.BytesRules.const', index=0, - number=1, type=12, cpp_type=9, label=1, - has_default_value=False, default_value=_b(""), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='len', full_name='validate.BytesRules.len', index=1, - number=13, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='min_len', full_name='validate.BytesRules.min_len', index=2, - number=2, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='max_len', full_name='validate.BytesRules.max_len', index=3, - number=3, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='pattern', full_name='validate.BytesRules.pattern', index=4, - number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='prefix', full_name='validate.BytesRules.prefix', index=5, - number=5, type=12, cpp_type=9, label=1, - has_default_value=False, default_value=_b(""), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='suffix', full_name='validate.BytesRules.suffix', index=6, - number=6, type=12, cpp_type=9, label=1, - has_default_value=False, default_value=_b(""), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='contains', full_name='validate.BytesRules.contains', index=7, - number=7, type=12, cpp_type=9, label=1, - has_default_value=False, default_value=_b(""), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='in', full_name='validate.BytesRules.in', index=8, - number=8, type=12, cpp_type=9, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='not_in', full_name='validate.BytesRules.not_in', index=9, - number=9, type=12, cpp_type=9, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='ip', full_name='validate.BytesRules.ip', index=10, - number=10, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='ipv4', full_name='validate.BytesRules.ipv4', index=11, - number=11, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='ipv6', full_name='validate.BytesRules.ipv6', index=12, - number=12, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='ignore_empty', full_name='validate.BytesRules.ignore_empty', index=13, - number=14, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto2', - extension_ranges=[], - oneofs=[ - _descriptor.OneofDescriptor( - name='well_known', full_name='validate.BytesRules.well_known', - index=0, containing_type=None, fields=[]), - ], - serialized_start=3172, - serialized_end=3423, -) - - -_ENUMRULES = _descriptor.Descriptor( - name='EnumRules', - full_name='validate.EnumRules', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='const', full_name='validate.EnumRules.const', index=0, - number=1, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='defined_only', full_name='validate.EnumRules.defined_only', index=1, - number=2, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='in', full_name='validate.EnumRules.in', index=2, - number=3, type=5, cpp_type=1, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='not_in', full_name='validate.EnumRules.not_in', index=3, - number=4, type=5, cpp_type=1, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto2', - extension_ranges=[], - oneofs=[ - ], - serialized_start=3425, - serialized_end=3501, -) - - -_MESSAGERULES = _descriptor.Descriptor( - name='MessageRules', - full_name='validate.MessageRules', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='skip', full_name='validate.MessageRules.skip', index=0, - number=1, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='required', full_name='validate.MessageRules.required', index=1, - number=2, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto2', - extension_ranges=[], - oneofs=[ - ], - serialized_start=3503, - serialized_end=3549, -) - - -_REPEATEDRULES = _descriptor.Descriptor( - name='RepeatedRules', - full_name='validate.RepeatedRules', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='min_items', full_name='validate.RepeatedRules.min_items', index=0, - number=1, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='max_items', full_name='validate.RepeatedRules.max_items', index=1, - number=2, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='unique', full_name='validate.RepeatedRules.unique', index=2, - number=3, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='items', full_name='validate.RepeatedRules.items', index=3, - number=4, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='ignore_empty', full_name='validate.RepeatedRules.ignore_empty', index=4, - number=5, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto2', - extension_ranges=[], - oneofs=[ - ], - serialized_start=3552, - serialized_end=3680, -) - - -_MAPRULES = _descriptor.Descriptor( - name='MapRules', - full_name='validate.MapRules', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='min_pairs', full_name='validate.MapRules.min_pairs', index=0, - number=1, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='max_pairs', full_name='validate.MapRules.max_pairs', index=1, - number=2, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='no_sparse', full_name='validate.MapRules.no_sparse', index=2, - number=3, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='keys', full_name='validate.MapRules.keys', index=3, - number=4, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='values', full_name='validate.MapRules.values', index=4, - number=5, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='ignore_empty', full_name='validate.MapRules.ignore_empty', index=5, - number=6, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto2', - extension_ranges=[], - oneofs=[ - ], - serialized_start=3683, - serialized_end=3846, -) - - -_ANYRULES = _descriptor.Descriptor( - name='AnyRules', - full_name='validate.AnyRules', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='required', full_name='validate.AnyRules.required', index=0, - number=1, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='in', full_name='validate.AnyRules.in', index=1, - number=2, type=9, cpp_type=9, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='not_in', full_name='validate.AnyRules.not_in', index=2, - number=3, type=9, cpp_type=9, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto2', - extension_ranges=[], - oneofs=[ - ], - serialized_start=3848, - serialized_end=3904, -) - - -_DURATIONRULES = _descriptor.Descriptor( - name='DurationRules', - full_name='validate.DurationRules', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='required', full_name='validate.DurationRules.required', index=0, - number=1, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='const', full_name='validate.DurationRules.const', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='lt', full_name='validate.DurationRules.lt', index=2, - number=3, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='lte', full_name='validate.DurationRules.lte', index=3, - number=4, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='gt', full_name='validate.DurationRules.gt', index=4, - number=5, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='gte', full_name='validate.DurationRules.gte', index=5, - number=6, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='in', full_name='validate.DurationRules.in', index=6, - number=7, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='not_in', full_name='validate.DurationRules.not_in', index=7, - number=8, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto2', - extension_ranges=[], - oneofs=[ - ], - serialized_start=3907, - serialized_end=4222, -) - - -_TIMESTAMPRULES = _descriptor.Descriptor( - name='TimestampRules', - full_name='validate.TimestampRules', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='required', full_name='validate.TimestampRules.required', index=0, - number=1, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='const', full_name='validate.TimestampRules.const', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='lt', full_name='validate.TimestampRules.lt', index=2, - number=3, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='lte', full_name='validate.TimestampRules.lte', index=3, - number=4, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='gt', full_name='validate.TimestampRules.gt', index=4, - number=5, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='gte', full_name='validate.TimestampRules.gte', index=5, - number=6, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='lt_now', full_name='validate.TimestampRules.lt_now', index=6, - number=7, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='gt_now', full_name='validate.TimestampRules.gt_now', index=7, - number=8, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='within', full_name='validate.TimestampRules.within', index=8, - number=9, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto2', - extension_ranges=[], - oneofs=[ - ], - serialized_start=4225, - serialized_end=4539, -) - -_FIELDRULES.fields_by_name['message'].message_type = _MESSAGERULES -_FIELDRULES.fields_by_name['float'].message_type = _FLOATRULES -_FIELDRULES.fields_by_name['double'].message_type = _DOUBLERULES -_FIELDRULES.fields_by_name['int32'].message_type = _INT32RULES -_FIELDRULES.fields_by_name['int64'].message_type = _INT64RULES -_FIELDRULES.fields_by_name['uint32'].message_type = _UINT32RULES -_FIELDRULES.fields_by_name['uint64'].message_type = _UINT64RULES -_FIELDRULES.fields_by_name['sint32'].message_type = _SINT32RULES -_FIELDRULES.fields_by_name['sint64'].message_type = _SINT64RULES -_FIELDRULES.fields_by_name['fixed32'].message_type = _FIXED32RULES -_FIELDRULES.fields_by_name['fixed64'].message_type = _FIXED64RULES -_FIELDRULES.fields_by_name['sfixed32'].message_type = _SFIXED32RULES -_FIELDRULES.fields_by_name['sfixed64'].message_type = _SFIXED64RULES -_FIELDRULES.fields_by_name['bool'].message_type = _BOOLRULES -_FIELDRULES.fields_by_name['string'].message_type = _STRINGRULES -_FIELDRULES.fields_by_name['bytes'].message_type = _BYTESRULES -_FIELDRULES.fields_by_name['enum'].message_type = _ENUMRULES -_FIELDRULES.fields_by_name['repeated'].message_type = _REPEATEDRULES -_FIELDRULES.fields_by_name['map'].message_type = _MAPRULES -_FIELDRULES.fields_by_name['any'].message_type = _ANYRULES -_FIELDRULES.fields_by_name['duration'].message_type = _DURATIONRULES -_FIELDRULES.fields_by_name['timestamp'].message_type = _TIMESTAMPRULES -_FIELDRULES.oneofs_by_name['type'].fields.append( - _FIELDRULES.fields_by_name['float']) -_FIELDRULES.fields_by_name['float'].containing_oneof = _FIELDRULES.oneofs_by_name['type'] -_FIELDRULES.oneofs_by_name['type'].fields.append( - _FIELDRULES.fields_by_name['double']) -_FIELDRULES.fields_by_name['double'].containing_oneof = _FIELDRULES.oneofs_by_name['type'] -_FIELDRULES.oneofs_by_name['type'].fields.append( - _FIELDRULES.fields_by_name['int32']) -_FIELDRULES.fields_by_name['int32'].containing_oneof = _FIELDRULES.oneofs_by_name['type'] -_FIELDRULES.oneofs_by_name['type'].fields.append( - _FIELDRULES.fields_by_name['int64']) -_FIELDRULES.fields_by_name['int64'].containing_oneof = _FIELDRULES.oneofs_by_name['type'] -_FIELDRULES.oneofs_by_name['type'].fields.append( - _FIELDRULES.fields_by_name['uint32']) -_FIELDRULES.fields_by_name['uint32'].containing_oneof = _FIELDRULES.oneofs_by_name['type'] -_FIELDRULES.oneofs_by_name['type'].fields.append( - _FIELDRULES.fields_by_name['uint64']) -_FIELDRULES.fields_by_name['uint64'].containing_oneof = _FIELDRULES.oneofs_by_name['type'] -_FIELDRULES.oneofs_by_name['type'].fields.append( - _FIELDRULES.fields_by_name['sint32']) -_FIELDRULES.fields_by_name['sint32'].containing_oneof = _FIELDRULES.oneofs_by_name['type'] -_FIELDRULES.oneofs_by_name['type'].fields.append( - _FIELDRULES.fields_by_name['sint64']) -_FIELDRULES.fields_by_name['sint64'].containing_oneof = _FIELDRULES.oneofs_by_name['type'] -_FIELDRULES.oneofs_by_name['type'].fields.append( - _FIELDRULES.fields_by_name['fixed32']) -_FIELDRULES.fields_by_name['fixed32'].containing_oneof = _FIELDRULES.oneofs_by_name['type'] -_FIELDRULES.oneofs_by_name['type'].fields.append( - _FIELDRULES.fields_by_name['fixed64']) -_FIELDRULES.fields_by_name['fixed64'].containing_oneof = _FIELDRULES.oneofs_by_name['type'] -_FIELDRULES.oneofs_by_name['type'].fields.append( - _FIELDRULES.fields_by_name['sfixed32']) -_FIELDRULES.fields_by_name['sfixed32'].containing_oneof = _FIELDRULES.oneofs_by_name['type'] -_FIELDRULES.oneofs_by_name['type'].fields.append( - _FIELDRULES.fields_by_name['sfixed64']) -_FIELDRULES.fields_by_name['sfixed64'].containing_oneof = _FIELDRULES.oneofs_by_name['type'] -_FIELDRULES.oneofs_by_name['type'].fields.append( - _FIELDRULES.fields_by_name['bool']) -_FIELDRULES.fields_by_name['bool'].containing_oneof = _FIELDRULES.oneofs_by_name['type'] -_FIELDRULES.oneofs_by_name['type'].fields.append( - _FIELDRULES.fields_by_name['string']) -_FIELDRULES.fields_by_name['string'].containing_oneof = _FIELDRULES.oneofs_by_name['type'] -_FIELDRULES.oneofs_by_name['type'].fields.append( - _FIELDRULES.fields_by_name['bytes']) -_FIELDRULES.fields_by_name['bytes'].containing_oneof = _FIELDRULES.oneofs_by_name['type'] -_FIELDRULES.oneofs_by_name['type'].fields.append( - _FIELDRULES.fields_by_name['enum']) -_FIELDRULES.fields_by_name['enum'].containing_oneof = _FIELDRULES.oneofs_by_name['type'] -_FIELDRULES.oneofs_by_name['type'].fields.append( - _FIELDRULES.fields_by_name['repeated']) -_FIELDRULES.fields_by_name['repeated'].containing_oneof = _FIELDRULES.oneofs_by_name['type'] -_FIELDRULES.oneofs_by_name['type'].fields.append( - _FIELDRULES.fields_by_name['map']) -_FIELDRULES.fields_by_name['map'].containing_oneof = _FIELDRULES.oneofs_by_name['type'] -_FIELDRULES.oneofs_by_name['type'].fields.append( - _FIELDRULES.fields_by_name['any']) -_FIELDRULES.fields_by_name['any'].containing_oneof = _FIELDRULES.oneofs_by_name['type'] -_FIELDRULES.oneofs_by_name['type'].fields.append( - _FIELDRULES.fields_by_name['duration']) -_FIELDRULES.fields_by_name['duration'].containing_oneof = _FIELDRULES.oneofs_by_name['type'] -_FIELDRULES.oneofs_by_name['type'].fields.append( - _FIELDRULES.fields_by_name['timestamp']) -_FIELDRULES.fields_by_name['timestamp'].containing_oneof = _FIELDRULES.oneofs_by_name['type'] -_STRINGRULES.fields_by_name['well_known_regex'].enum_type = _KNOWNREGEX -_STRINGRULES.oneofs_by_name['well_known'].fields.append( - _STRINGRULES.fields_by_name['email']) -_STRINGRULES.fields_by_name['email'].containing_oneof = _STRINGRULES.oneofs_by_name['well_known'] -_STRINGRULES.oneofs_by_name['well_known'].fields.append( - _STRINGRULES.fields_by_name['hostname']) -_STRINGRULES.fields_by_name['hostname'].containing_oneof = _STRINGRULES.oneofs_by_name['well_known'] -_STRINGRULES.oneofs_by_name['well_known'].fields.append( - _STRINGRULES.fields_by_name['ip']) -_STRINGRULES.fields_by_name['ip'].containing_oneof = _STRINGRULES.oneofs_by_name['well_known'] -_STRINGRULES.oneofs_by_name['well_known'].fields.append( - _STRINGRULES.fields_by_name['ipv4']) -_STRINGRULES.fields_by_name['ipv4'].containing_oneof = _STRINGRULES.oneofs_by_name['well_known'] -_STRINGRULES.oneofs_by_name['well_known'].fields.append( - _STRINGRULES.fields_by_name['ipv6']) -_STRINGRULES.fields_by_name['ipv6'].containing_oneof = _STRINGRULES.oneofs_by_name['well_known'] -_STRINGRULES.oneofs_by_name['well_known'].fields.append( - _STRINGRULES.fields_by_name['uri']) -_STRINGRULES.fields_by_name['uri'].containing_oneof = _STRINGRULES.oneofs_by_name['well_known'] -_STRINGRULES.oneofs_by_name['well_known'].fields.append( - _STRINGRULES.fields_by_name['uri_ref']) -_STRINGRULES.fields_by_name['uri_ref'].containing_oneof = _STRINGRULES.oneofs_by_name['well_known'] -_STRINGRULES.oneofs_by_name['well_known'].fields.append( - _STRINGRULES.fields_by_name['address']) -_STRINGRULES.fields_by_name['address'].containing_oneof = _STRINGRULES.oneofs_by_name['well_known'] -_STRINGRULES.oneofs_by_name['well_known'].fields.append( - _STRINGRULES.fields_by_name['uuid']) -_STRINGRULES.fields_by_name['uuid'].containing_oneof = _STRINGRULES.oneofs_by_name['well_known'] -_STRINGRULES.oneofs_by_name['well_known'].fields.append( - _STRINGRULES.fields_by_name['well_known_regex']) -_STRINGRULES.fields_by_name['well_known_regex'].containing_oneof = _STRINGRULES.oneofs_by_name['well_known'] -_BYTESRULES.oneofs_by_name['well_known'].fields.append( - _BYTESRULES.fields_by_name['ip']) -_BYTESRULES.fields_by_name['ip'].containing_oneof = _BYTESRULES.oneofs_by_name['well_known'] -_BYTESRULES.oneofs_by_name['well_known'].fields.append( - _BYTESRULES.fields_by_name['ipv4']) -_BYTESRULES.fields_by_name['ipv4'].containing_oneof = _BYTESRULES.oneofs_by_name['well_known'] -_BYTESRULES.oneofs_by_name['well_known'].fields.append( - _BYTESRULES.fields_by_name['ipv6']) -_BYTESRULES.fields_by_name['ipv6'].containing_oneof = _BYTESRULES.oneofs_by_name['well_known'] -_REPEATEDRULES.fields_by_name['items'].message_type = _FIELDRULES -_MAPRULES.fields_by_name['keys'].message_type = _FIELDRULES -_MAPRULES.fields_by_name['values'].message_type = _FIELDRULES -_DURATIONRULES.fields_by_name['const'].message_type = google_dot_protobuf_dot_duration__pb2._DURATION -_DURATIONRULES.fields_by_name['lt'].message_type = google_dot_protobuf_dot_duration__pb2._DURATION -_DURATIONRULES.fields_by_name['lte'].message_type = google_dot_protobuf_dot_duration__pb2._DURATION -_DURATIONRULES.fields_by_name['gt'].message_type = google_dot_protobuf_dot_duration__pb2._DURATION -_DURATIONRULES.fields_by_name['gte'].message_type = google_dot_protobuf_dot_duration__pb2._DURATION -_DURATIONRULES.fields_by_name['in'].message_type = google_dot_protobuf_dot_duration__pb2._DURATION -_DURATIONRULES.fields_by_name['not_in'].message_type = google_dot_protobuf_dot_duration__pb2._DURATION -_TIMESTAMPRULES.fields_by_name['const'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -_TIMESTAMPRULES.fields_by_name['lt'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -_TIMESTAMPRULES.fields_by_name['lte'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -_TIMESTAMPRULES.fields_by_name['gt'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -_TIMESTAMPRULES.fields_by_name['gte'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP -_TIMESTAMPRULES.fields_by_name['within'].message_type = google_dot_protobuf_dot_duration__pb2._DURATION -DESCRIPTOR.message_types_by_name['FieldRules'] = _FIELDRULES -DESCRIPTOR.message_types_by_name['FloatRules'] = _FLOATRULES -DESCRIPTOR.message_types_by_name['DoubleRules'] = _DOUBLERULES -DESCRIPTOR.message_types_by_name['Int32Rules'] = _INT32RULES -DESCRIPTOR.message_types_by_name['Int64Rules'] = _INT64RULES -DESCRIPTOR.message_types_by_name['UInt32Rules'] = _UINT32RULES -DESCRIPTOR.message_types_by_name['UInt64Rules'] = _UINT64RULES -DESCRIPTOR.message_types_by_name['SInt32Rules'] = _SINT32RULES -DESCRIPTOR.message_types_by_name['SInt64Rules'] = _SINT64RULES -DESCRIPTOR.message_types_by_name['Fixed32Rules'] = _FIXED32RULES -DESCRIPTOR.message_types_by_name['Fixed64Rules'] = _FIXED64RULES -DESCRIPTOR.message_types_by_name['SFixed32Rules'] = _SFIXED32RULES -DESCRIPTOR.message_types_by_name['SFixed64Rules'] = _SFIXED64RULES -DESCRIPTOR.message_types_by_name['BoolRules'] = _BOOLRULES -DESCRIPTOR.message_types_by_name['StringRules'] = _STRINGRULES -DESCRIPTOR.message_types_by_name['BytesRules'] = _BYTESRULES -DESCRIPTOR.message_types_by_name['EnumRules'] = _ENUMRULES -DESCRIPTOR.message_types_by_name['MessageRules'] = _MESSAGERULES -DESCRIPTOR.message_types_by_name['RepeatedRules'] = _REPEATEDRULES -DESCRIPTOR.message_types_by_name['MapRules'] = _MAPRULES -DESCRIPTOR.message_types_by_name['AnyRules'] = _ANYRULES -DESCRIPTOR.message_types_by_name['DurationRules'] = _DURATIONRULES -DESCRIPTOR.message_types_by_name['TimestampRules'] = _TIMESTAMPRULES -DESCRIPTOR.enum_types_by_name['KnownRegex'] = _KNOWNREGEX -DESCRIPTOR.extensions_by_name['disabled'] = disabled -DESCRIPTOR.extensions_by_name['ignored'] = ignored -DESCRIPTOR.extensions_by_name['required'] = required -DESCRIPTOR.extensions_by_name['rules'] = rules -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - -FieldRules = _reflection.GeneratedProtocolMessageType('FieldRules', (_message.Message,), dict( - DESCRIPTOR = _FIELDRULES, - __module__ = 'validate.validate_pb2' - # @@protoc_insertion_point(class_scope:validate.FieldRules) - )) -_sym_db.RegisterMessage(FieldRules) - -FloatRules = _reflection.GeneratedProtocolMessageType('FloatRules', (_message.Message,), dict( - DESCRIPTOR = _FLOATRULES, - __module__ = 'validate.validate_pb2' - # @@protoc_insertion_point(class_scope:validate.FloatRules) - )) -_sym_db.RegisterMessage(FloatRules) - -DoubleRules = _reflection.GeneratedProtocolMessageType('DoubleRules', (_message.Message,), dict( - DESCRIPTOR = _DOUBLERULES, - __module__ = 'validate.validate_pb2' - # @@protoc_insertion_point(class_scope:validate.DoubleRules) - )) -_sym_db.RegisterMessage(DoubleRules) - -Int32Rules = _reflection.GeneratedProtocolMessageType('Int32Rules', (_message.Message,), dict( - DESCRIPTOR = _INT32RULES, - __module__ = 'validate.validate_pb2' - # @@protoc_insertion_point(class_scope:validate.Int32Rules) - )) -_sym_db.RegisterMessage(Int32Rules) - -Int64Rules = _reflection.GeneratedProtocolMessageType('Int64Rules', (_message.Message,), dict( - DESCRIPTOR = _INT64RULES, - __module__ = 'validate.validate_pb2' - # @@protoc_insertion_point(class_scope:validate.Int64Rules) - )) -_sym_db.RegisterMessage(Int64Rules) - -UInt32Rules = _reflection.GeneratedProtocolMessageType('UInt32Rules', (_message.Message,), dict( - DESCRIPTOR = _UINT32RULES, - __module__ = 'validate.validate_pb2' - # @@protoc_insertion_point(class_scope:validate.UInt32Rules) - )) -_sym_db.RegisterMessage(UInt32Rules) - -UInt64Rules = _reflection.GeneratedProtocolMessageType('UInt64Rules', (_message.Message,), dict( - DESCRIPTOR = _UINT64RULES, - __module__ = 'validate.validate_pb2' - # @@protoc_insertion_point(class_scope:validate.UInt64Rules) - )) -_sym_db.RegisterMessage(UInt64Rules) - -SInt32Rules = _reflection.GeneratedProtocolMessageType('SInt32Rules', (_message.Message,), dict( - DESCRIPTOR = _SINT32RULES, - __module__ = 'validate.validate_pb2' - # @@protoc_insertion_point(class_scope:validate.SInt32Rules) - )) -_sym_db.RegisterMessage(SInt32Rules) - -SInt64Rules = _reflection.GeneratedProtocolMessageType('SInt64Rules', (_message.Message,), dict( - DESCRIPTOR = _SINT64RULES, - __module__ = 'validate.validate_pb2' - # @@protoc_insertion_point(class_scope:validate.SInt64Rules) - )) -_sym_db.RegisterMessage(SInt64Rules) - -Fixed32Rules = _reflection.GeneratedProtocolMessageType('Fixed32Rules', (_message.Message,), dict( - DESCRIPTOR = _FIXED32RULES, - __module__ = 'validate.validate_pb2' - # @@protoc_insertion_point(class_scope:validate.Fixed32Rules) - )) -_sym_db.RegisterMessage(Fixed32Rules) - -Fixed64Rules = _reflection.GeneratedProtocolMessageType('Fixed64Rules', (_message.Message,), dict( - DESCRIPTOR = _FIXED64RULES, - __module__ = 'validate.validate_pb2' - # @@protoc_insertion_point(class_scope:validate.Fixed64Rules) - )) -_sym_db.RegisterMessage(Fixed64Rules) - -SFixed32Rules = _reflection.GeneratedProtocolMessageType('SFixed32Rules', (_message.Message,), dict( - DESCRIPTOR = _SFIXED32RULES, - __module__ = 'validate.validate_pb2' - # @@protoc_insertion_point(class_scope:validate.SFixed32Rules) - )) -_sym_db.RegisterMessage(SFixed32Rules) - -SFixed64Rules = _reflection.GeneratedProtocolMessageType('SFixed64Rules', (_message.Message,), dict( - DESCRIPTOR = _SFIXED64RULES, - __module__ = 'validate.validate_pb2' - # @@protoc_insertion_point(class_scope:validate.SFixed64Rules) - )) -_sym_db.RegisterMessage(SFixed64Rules) - -BoolRules = _reflection.GeneratedProtocolMessageType('BoolRules', (_message.Message,), dict( - DESCRIPTOR = _BOOLRULES, - __module__ = 'validate.validate_pb2' - # @@protoc_insertion_point(class_scope:validate.BoolRules) - )) -_sym_db.RegisterMessage(BoolRules) - -StringRules = _reflection.GeneratedProtocolMessageType('StringRules', (_message.Message,), dict( - DESCRIPTOR = _STRINGRULES, - __module__ = 'validate.validate_pb2' - # @@protoc_insertion_point(class_scope:validate.StringRules) - )) -_sym_db.RegisterMessage(StringRules) - -BytesRules = _reflection.GeneratedProtocolMessageType('BytesRules', (_message.Message,), dict( - DESCRIPTOR = _BYTESRULES, - __module__ = 'validate.validate_pb2' - # @@protoc_insertion_point(class_scope:validate.BytesRules) - )) -_sym_db.RegisterMessage(BytesRules) - -EnumRules = _reflection.GeneratedProtocolMessageType('EnumRules', (_message.Message,), dict( - DESCRIPTOR = _ENUMRULES, - __module__ = 'validate.validate_pb2' - # @@protoc_insertion_point(class_scope:validate.EnumRules) - )) -_sym_db.RegisterMessage(EnumRules) - -MessageRules = _reflection.GeneratedProtocolMessageType('MessageRules', (_message.Message,), dict( - DESCRIPTOR = _MESSAGERULES, - __module__ = 'validate.validate_pb2' - # @@protoc_insertion_point(class_scope:validate.MessageRules) - )) -_sym_db.RegisterMessage(MessageRules) - -RepeatedRules = _reflection.GeneratedProtocolMessageType('RepeatedRules', (_message.Message,), dict( - DESCRIPTOR = _REPEATEDRULES, - __module__ = 'validate.validate_pb2' - # @@protoc_insertion_point(class_scope:validate.RepeatedRules) - )) -_sym_db.RegisterMessage(RepeatedRules) - -MapRules = _reflection.GeneratedProtocolMessageType('MapRules', (_message.Message,), dict( - DESCRIPTOR = _MAPRULES, - __module__ = 'validate.validate_pb2' - # @@protoc_insertion_point(class_scope:validate.MapRules) - )) -_sym_db.RegisterMessage(MapRules) - -AnyRules = _reflection.GeneratedProtocolMessageType('AnyRules', (_message.Message,), dict( - DESCRIPTOR = _ANYRULES, - __module__ = 'validate.validate_pb2' - # @@protoc_insertion_point(class_scope:validate.AnyRules) - )) -_sym_db.RegisterMessage(AnyRules) - -DurationRules = _reflection.GeneratedProtocolMessageType('DurationRules', (_message.Message,), dict( - DESCRIPTOR = _DURATIONRULES, - __module__ = 'validate.validate_pb2' - # @@protoc_insertion_point(class_scope:validate.DurationRules) - )) -_sym_db.RegisterMessage(DurationRules) - -TimestampRules = _reflection.GeneratedProtocolMessageType('TimestampRules', (_message.Message,), dict( - DESCRIPTOR = _TIMESTAMPRULES, - __module__ = 'validate.validate_pb2' - # @@protoc_insertion_point(class_scope:validate.TimestampRules) - )) -_sym_db.RegisterMessage(TimestampRules) - -google_dot_protobuf_dot_descriptor__pb2.MessageOptions.RegisterExtension(disabled) -google_dot_protobuf_dot_descriptor__pb2.MessageOptions.RegisterExtension(ignored) -google_dot_protobuf_dot_descriptor__pb2.OneofOptions.RegisterExtension(required) -rules.message_type = _FIELDRULES -google_dot_protobuf_dot_descriptor__pb2.FieldOptions.RegisterExtension(rules) - -DESCRIPTOR._options = None -# @@protoc_insertion_point(module_scope) From 454d43410756d4581aabdc5dc639e3fdb11029af Mon Sep 17 00:00:00 2001 From: Niels Bantilan Date: Thu, 18 Jan 2024 14:39:57 -0500 Subject: [PATCH 15/30] delete old docs (#4742) Signed-off-by: Niels Bantilan --- doc-requirements.in | 16 - doc-requirements.txt | 61 - rsts/Makefile | 20 - rsts/_static/custom.css | 33 - rsts/community/contribute.rst | 734 --- rsts/community/index.rst | 127 - rsts/community/roadmap.rst | 145 - rsts/community/troubleshoot.rst | 135 - rsts/concepts/admin.rst | 500 -- rsts/concepts/architecture.rst | 167 - rsts/concepts/basics.rst | 155 - rsts/concepts/catalog.rst | 63 - .../flytepropeller_architecture.rst | 81 - .../native_scheduler_architecture.rst | 77 - rsts/concepts/console.rst | 128 - rsts/concepts/control_plane.rst | 56 - rsts/concepts/data_management.rst | 176 - rsts/concepts/domains.rst | 13 - rsts/concepts/dynamic_spec.rst | 50 - rsts/concepts/execution_timeline.rst | 72 - rsts/concepts/executions.rst | 20 - rsts/concepts/flyte_console.rst | 232 - rsts/concepts/flyte_wf_tasks_high_level.png | Bin 43187 -> 0 bytes rsts/concepts/launchplans.rst | 57 - rsts/concepts/nodes.rst | 34 - rsts/concepts/projects.rst | 14 - rsts/concepts/registration.rst | 33 - rsts/concepts/schedules.rst | 102 - rsts/concepts/state_machine.rst | 154 - rsts/concepts/tasks.rst | 122 - rsts/concepts/versioning.rst | 104 - rsts/concepts/workflow_lifecycle.rst | 246 - rsts/concepts/workflows.rst | 51 - rsts/conf.py | 273 - rsts/deployment/agents/bigquery.rst | 106 - rsts/deployment/agents/databricks.rst | 294 - rsts/deployment/agents/index.rst | 57 - rsts/deployment/agents/mmcloud.rst | 121 - rsts/deployment/agents/sensor.rst | 149 - .../configuration/auth_appendix.rst | 139 - .../configuration/auth_migration.rst | 162 - rsts/deployment/configuration/auth_setup.rst | 790 --- rsts/deployment/configuration/cloud_event.rst | 159 - .../configuration/customizable_resources.rst | 202 - rsts/deployment/configuration/eventing.rst | 64 - rsts/deployment/configuration/general.rst | 740 --- .../generated/datacatalog_config.rst | 996 --- .../generated/flyteadmin_config.rst | 5325 ---------------- .../generated/flytepropeller_config.rst | 5590 ----------------- .../configuration/generated/index.rst | 56 - .../generated/scheduler_config.rst | 5325 ---------------- rsts/deployment/configuration/index.rst | 130 - rsts/deployment/configuration/monitoring.rst | 99 - .../configuration/notifications.rst | 135 - rsts/deployment/configuration/performance.rst | 264 - .../deployment/cloud_production.rst | 74 - rsts/deployment/deployment/cloud_simple.rst | 132 - rsts/deployment/deployment/index.rst | 159 - rsts/deployment/deployment/multicluster.rst | 661 -- rsts/deployment/deployment/sandbox.rst | 144 - rsts/deployment/index.rst | 66 - rsts/deployment/plugins/aws/athena.rst | 87 - rsts/deployment/plugins/aws/batch.rst | 165 - rsts/deployment/plugins/aws/index.rst | 37 - rsts/deployment/plugins/gcp/bigquery.rst | 90 - rsts/deployment/plugins/gcp/index.rst | 26 - rsts/deployment/plugins/index.rst | 59 - rsts/deployment/plugins/k8s/index.rst | 833 --- rsts/deployment/plugins/webapi/databricks.rst | 451 -- rsts/deployment/plugins/webapi/index.rst | 39 - rsts/deployment/plugins/webapi/snowflake.rst | 245 - rsts/deployment/security/index.rst | 132 - rsts/images/flyte-and-lf.png | Bin 166426 -> 0 bytes rsts/images/flyte_circle_gradient_1_4x4.png | Bin 70985 -> 0 bytes .../images/flyte_lockup_gradient_on_light.png | Bin 17200 -> 0 bytes rsts/images/flyte_lockup_on_dark.png | Bin 24213 -> 0 bytes rsts/index.rst | 318 - rsts/reference/index.rst | 75 - rsts/reference/swagger.rst | 31 - 79 files changed, 28978 deletions(-) delete mode 100644 doc-requirements.in delete mode 100644 doc-requirements.txt delete mode 100644 rsts/Makefile delete mode 100644 rsts/_static/custom.css delete mode 100644 rsts/community/contribute.rst delete mode 100644 rsts/community/index.rst delete mode 100644 rsts/community/roadmap.rst delete mode 100644 rsts/community/troubleshoot.rst delete mode 100644 rsts/concepts/admin.rst delete mode 100644 rsts/concepts/architecture.rst delete mode 100644 rsts/concepts/basics.rst delete mode 100644 rsts/concepts/catalog.rst delete mode 100644 rsts/concepts/component_architecture/flytepropeller_architecture.rst delete mode 100644 rsts/concepts/component_architecture/native_scheduler_architecture.rst delete mode 100644 rsts/concepts/console.rst delete mode 100644 rsts/concepts/control_plane.rst delete mode 100644 rsts/concepts/data_management.rst delete mode 100644 rsts/concepts/domains.rst delete mode 100644 rsts/concepts/dynamic_spec.rst delete mode 100644 rsts/concepts/execution_timeline.rst delete mode 100644 rsts/concepts/executions.rst delete mode 100644 rsts/concepts/flyte_console.rst delete mode 100644 rsts/concepts/flyte_wf_tasks_high_level.png delete mode 100644 rsts/concepts/launchplans.rst delete mode 100644 rsts/concepts/nodes.rst delete mode 100644 rsts/concepts/projects.rst delete mode 100644 rsts/concepts/registration.rst delete mode 100644 rsts/concepts/schedules.rst delete mode 100644 rsts/concepts/state_machine.rst delete mode 100644 rsts/concepts/tasks.rst delete mode 100644 rsts/concepts/versioning.rst delete mode 100644 rsts/concepts/workflow_lifecycle.rst delete mode 100644 rsts/concepts/workflows.rst delete mode 100644 rsts/conf.py delete mode 100644 rsts/deployment/agents/bigquery.rst delete mode 100644 rsts/deployment/agents/databricks.rst delete mode 100644 rsts/deployment/agents/index.rst delete mode 100644 rsts/deployment/agents/mmcloud.rst delete mode 100644 rsts/deployment/agents/sensor.rst delete mode 100644 rsts/deployment/configuration/auth_appendix.rst delete mode 100644 rsts/deployment/configuration/auth_migration.rst delete mode 100644 rsts/deployment/configuration/auth_setup.rst delete mode 100644 rsts/deployment/configuration/cloud_event.rst delete mode 100644 rsts/deployment/configuration/customizable_resources.rst delete mode 100644 rsts/deployment/configuration/eventing.rst delete mode 100644 rsts/deployment/configuration/general.rst delete mode 100644 rsts/deployment/configuration/generated/datacatalog_config.rst delete mode 100644 rsts/deployment/configuration/generated/flyteadmin_config.rst delete mode 100644 rsts/deployment/configuration/generated/flytepropeller_config.rst delete mode 100644 rsts/deployment/configuration/generated/index.rst delete mode 100644 rsts/deployment/configuration/generated/scheduler_config.rst delete mode 100644 rsts/deployment/configuration/index.rst delete mode 100644 rsts/deployment/configuration/monitoring.rst delete mode 100644 rsts/deployment/configuration/notifications.rst delete mode 100644 rsts/deployment/configuration/performance.rst delete mode 100644 rsts/deployment/deployment/cloud_production.rst delete mode 100644 rsts/deployment/deployment/cloud_simple.rst delete mode 100644 rsts/deployment/deployment/index.rst delete mode 100644 rsts/deployment/deployment/multicluster.rst delete mode 100644 rsts/deployment/deployment/sandbox.rst delete mode 100644 rsts/deployment/index.rst delete mode 100644 rsts/deployment/plugins/aws/athena.rst delete mode 100644 rsts/deployment/plugins/aws/batch.rst delete mode 100644 rsts/deployment/plugins/aws/index.rst delete mode 100644 rsts/deployment/plugins/gcp/bigquery.rst delete mode 100644 rsts/deployment/plugins/gcp/index.rst delete mode 100644 rsts/deployment/plugins/index.rst delete mode 100644 rsts/deployment/plugins/k8s/index.rst delete mode 100644 rsts/deployment/plugins/webapi/databricks.rst delete mode 100644 rsts/deployment/plugins/webapi/index.rst delete mode 100644 rsts/deployment/plugins/webapi/snowflake.rst delete mode 100644 rsts/deployment/security/index.rst delete mode 100644 rsts/images/flyte-and-lf.png delete mode 100644 rsts/images/flyte_circle_gradient_1_4x4.png delete mode 100644 rsts/images/flyte_lockup_gradient_on_light.png delete mode 100644 rsts/images/flyte_lockup_on_dark.png delete mode 100644 rsts/index.rst delete mode 100644 rsts/reference/index.rst delete mode 100644 rsts/reference/swagger.rst diff --git a/doc-requirements.in b/doc-requirements.in deleted file mode 100644 index 49f7439659..0000000000 --- a/doc-requirements.in +++ /dev/null @@ -1,16 +0,0 @@ -codespell -git+https://github.com/flyteorg/furo@main -sphinx -sphinx-prompt -sphinx-code-include -sphinx-autoapi -sphinx-copybutton -sphinxext-remoteliteralinclude -sphinx-issues -sphinx_fontawesome -sphinx-panels -sphinxcontrib-mermaid -sphinxcontrib-video -sphinxcontrib-youtube==1.2.0 -sphinx-tabs -sphinx-tags diff --git a/doc-requirements.txt b/doc-requirements.txt deleted file mode 100644 index 2bde883f6a..0000000000 --- a/doc-requirements.txt +++ /dev/null @@ -1,61 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.10 -# by the following command: -# -# pip-compile --annotation-style=line doc-requirements.in -# -alabaster==0.7.13 # via sphinx -astroid==3.0.1 # via sphinx-autoapi -babel==2.13.1 # via sphinx -beautifulsoup4==4.12.2 # via furo, sphinx-code-include -certifi==2023.11.17 # via requests -cfgv==3.4.0 # via pre-commit -charset-normalizer==3.3.2 # via requests -codespell==2.2.6 # via -r doc-requirements.in -distlib==0.3.7 # via virtualenv -docutils==0.17.1 # via sphinx, sphinx-panels, sphinx-tabs -filelock==3.13.1 # via virtualenv -furo @ git+https://github.com/flyteorg/furo@main # via -r doc-requirements.in -identify==2.5.32 # via pre-commit -idna==3.6 # via requests -imagesize==1.4.1 # via sphinx -jinja2==3.0.3 # via sphinx, sphinx-autoapi, sphinx-tabs -markupsafe==2.1.3 # via jinja2 -nodeenv==1.8.0 # via pre-commit -packaging==23.2 # via sphinx -platformdirs==4.1.0 # via virtualenv -pre-commit==3.5.0 # via sphinx-tags -pygments==2.17.2 # via furo, sphinx, sphinx-prompt, sphinx-tabs -pyyaml==6.0.1 # via pre-commit, sphinx-autoapi -requests==2.31.0 # via sphinx, sphinxcontrib-youtube -six==1.16.0 # via sphinx-code-include, sphinxext-remoteliteralinclude -snowballstemmer==2.2.0 # via sphinx -soupsieve==2.5 # via beautifulsoup4 -sphinx==4.5.0 # via -r doc-requirements.in, furo, sphinx-autoapi, sphinx-basic-ng, sphinx-code-include, sphinx-copybutton, sphinx-fontawesome, sphinx-issues, sphinx-panels, sphinx-prompt, sphinx-tabs, sphinx-tags, sphinxcontrib-video, sphinxcontrib-youtube, sphinxext-remoteliteralinclude -sphinx-autoapi==2.0.1 # via -r doc-requirements.in -sphinx-basic-ng==1.0.0b2 # via furo -sphinx-code-include==1.1.1 # via -r doc-requirements.in -sphinx-copybutton==0.5.2 # via -r doc-requirements.in -sphinx-fontawesome==0.0.6 # via -r doc-requirements.in -sphinx-issues==3.0.1 # via -r doc-requirements.in -sphinx-panels==0.6.0 # via -r doc-requirements.in -sphinx-prompt==1.5.0 # via -r doc-requirements.in -sphinx-tabs==3.4.0 # via -r doc-requirements.in -sphinx-tags==0.2.1 # via -r doc-requirements.in -sphinxcontrib-applehelp==1.0.4 # via sphinx -sphinxcontrib-devhelp==1.0.2 # via sphinx -sphinxcontrib-htmlhelp==2.0.1 # via sphinx -sphinxcontrib-jsmath==1.0.1 # via sphinx -sphinxcontrib-mermaid==0.9.2 # via -r doc-requirements.in -sphinxcontrib-qthelp==1.0.3 # via sphinx -sphinxcontrib-serializinghtml==1.1.5 # via sphinx -sphinxcontrib-video==0.2.0 # via -r doc-requirements.in -sphinxcontrib-youtube==1.2.0 # via -r doc-requirements.in -sphinxext-remoteliteralinclude==0.4.0 # via -r doc-requirements.in -typing-extensions==4.8.0 # via astroid -unidecode==1.3.7 # via sphinx-autoapi -urllib3==2.1.0 # via requests -virtualenv==20.25.0 # via pre-commit - -# The following packages are considered to be unsafe in a requirements file: -# setuptools diff --git a/rsts/Makefile b/rsts/Makefile deleted file mode 100644 index a761edf1c9..0000000000 --- a/rsts/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# Minimal makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -SPHINXPROJ = flyte -SOURCEDIR = . -BUILDDIR = _build - -# Put it first so that "make" without argument is like "make help". -help: - @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) - -.PHONY: help Makefile - -# Catch-all target: route all unknown targets to Sphinx using the new -# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). -%: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/rsts/_static/custom.css b/rsts/_static/custom.css deleted file mode 100644 index 9744524445..0000000000 --- a/rsts/_static/custom.css +++ /dev/null @@ -1,33 +0,0 @@ -.getting-started-panels div.card-body { - padding: 0; -} - -.getting-started-panels a.btn-primary { - color: white !important; - background-color: var(--color-link); - border-color: var(--color-link); -} - -.getting-started-panels a.btn-outline-primary { - color: white !important; - background-color: var(--color-link); - opacity: 0.5; - border-color: var(--color-link); -} - -html .tabbed-set > label { - color: var(--color-foreground-border); -} - -html .tabbed-set > input:checked + label { - border-color: var(--color-link); - color: var(--color-link); -} - -html .tabbed-set > label:hover { - color: var(--color-link); -} - -html .tabbed-content { - box-shadow: 0 -.0625rem var(--color-background-border),0 .0625rem var(--color-background-border); -} \ No newline at end of file diff --git a/rsts/community/contribute.rst b/rsts/community/contribute.rst deleted file mode 100644 index b34416ff4b..0000000000 --- a/rsts/community/contribute.rst +++ /dev/null @@ -1,734 +0,0 @@ -.. _contribute_Flyte: - -##################### -Contributing to Flyte -##################### - -.. tags:: Contribute, Basic - -Thank you for taking the time to contribute to Flyte! -Please read our `Code of Conduct `__ before contributing to Flyte. - -Here are some guidelines for you to follow, which will make your first and follow-up contributions easier. - -TL;DR: Find the repo-specific contribution guidelines in the `Component Reference <#component-reference>`__ section. - -💻 Becoming a contributor -========================= - -An issue tagged with `good first issue `__ is the best place to start for first-time contributors. - -To assign an issue to yourself, comment ``#self-assign`` or ``#take``. - -.. figure:: https://raw.githubusercontent.com/flyteorg/static-resources/main/flyte/contribution_guide/self-assign.png - :alt: self-assign - -**Appetizer for every repo: Fork and clone the concerned repository. Create a new branch on your fork and make the required changes. Create a pull request once your work is ready for review.** - -.. note:: - To open a pull request, refer to `GitHub's guide `__ for detailed instructions. - -Example PR for your reference: `GitHub PR `__. -A couple of checks are introduced to help maintain the robustness of the project. - -#. To get through DCO, sign off on every commit (`Reference `__) -#. To improve code coverage, write unit tests to test your code -#. Make sure all the tests pass. If you face any issues, please let us know - -On a side note, format your Go code with ``golangci-lint`` followed by ``goimports`` (use ``make lint`` and ``make goimports``), and Python code with ``black`` and ``isort`` (use ``make fmt``). -If make targets are not available, you can manually format the code. -Refer to `Effective Go `__, `Black `__, and `Isort `__ for full coding standards. - -As you become more involved with the project, you may be able to be added as a contributor to the repos you're working on, -but there is a medium term effort to move all development to forks. - -📃 Documentation -================ - -Flyte uses Sphinx for documentation. ``protoc-gen-doc`` is used to generate the documentation from ``.proto`` files. - -Sphinx spans multiple repositories under `flyteorg `__. It uses reStructured Text (rst) files to store the documentation content. -For API- and code-related content, it extracts docstrings from the code files. - -To get started, refer to the `reStructuredText reference `__. - -For minor edits that don't require a local setup, you can edit the GitHub page in the documentation to propose improvements. - -Intersphinx -*********** - -`Intersphinx `__ can generate automatic links to the documentation of objects in other projects. - -To establish a reference to any other documentation from Flyte or within it, use Intersphinx. - -To do so, create an ``intersphinx_mapping`` in the ``conf.py`` file which should be present in the respective ``docs`` repository. -For example, ``rsts`` is the docs repository for the ``flyte`` repo. - -For example: - -.. code-block:: python - - intersphinx_mapping = { - "python": ("https://docs.python.org/3", None), - "flytekit": ("https://flyte.readthedocs.io/projects/flytekit/en/master/", None), - } - -The key refers to the name used to refer to the file (while referencing the documentation), and the URL denotes the precise location. - -Here is an example using ``:std:doc``: - -* Direct reference - - .. code-block:: text - - Task: :std:doc:`generated/flytekit.task` - - Output: - - Task: :std:doc:`generated/flytekit.task` - -* Custom name - - .. code-block:: text - - :std:doc:`Using custom words ` - - Output: - - :std:doc:`Using custom words ` - -| - -You can cross-reference multiple Python objects. Check out this `section `__ to learn more. - -| - -For instance, `task` decorator in flytekit uses the ``func`` role. - -.. code-block:: text - - Link to flytekit code :py:func:`flytekit:flytekit.task` - -Output: - -Link to flytekit code :py:func:`flytekit:flytekit.task` - -| - -Here are a couple more examples. - -.. code-block:: text - - :py:mod:`Module ` - :py:class:`Class ` - :py:data:`Data ` - :py:func:`Function ` - :py:meth:`Method ` - -Output: - -:py:mod:`Module ` - -:py:class:`Class ` - -:py:data:`Data ` - -:py:func:`Function ` - -:py:meth:`Method ` - -🧱 Component reference -====================== - -To understand how the below components interact with each other, refer to :ref:`Understand the lifecycle of a workflow `. - -.. figure:: https://raw.githubusercontent.com/flyteorg/static-resources/main/flyte/contribution_guide/dependency_graph.png - :alt: Dependency graph between various flyteorg repos - :align: center - :figclass: align-center - - The dependency graph between various flyte repos - -``flyte`` -********* - -.. list-table:: - - * - `Repo `__ - * - **Purpose**: Deployment, Documentation, and Issues - * - **Languages**: Kustomize & RST - -.. note:: - For the ``flyte`` repo, run the following command in the repo's root to generate documentation locally. - - .. code-block:: console - - make -C rsts html - -``flyteidl`` -************ - -.. list-table:: - - * - `Repo `__ - * - **Purpose**: Flyte workflow specification is in `protocol buffers `__ which forms the core of Flyte - * - **Language**: Protobuf - * - **Guidelines**: Refer to the `README `__ - -``flytepropeller`` -****************** - -.. list-table:: - - * - `Repo `__ | `Code Reference `__ - * - **Purpose**: Kubernetes-native operator - * - **Language**: Go - * - **Guidelines:** - - * Check for Makefile in the root repo - * Run the following commands: - * ``make generate`` - * ``make test_unit`` - * ``make link`` - * To compile, run ``make compile`` - -``flyteadmin`` -************** - -.. list-table:: - - * - `Repo `__ | `Code Reference `__ - * - **Purpose**: Control Plane - * - **Language**: Go - * - **Guidelines**: - - * Check for Makefile in the root repo - * If the service code has to be tested, run it locally: - * ``make compile`` - * ``make server`` - * To seed data locally: - * ``make compile`` - * ``make seed_projects`` - * ``make migrate`` - * To run integration tests locally: - * ``make integration`` - * (or to run in containerized dockernetes): ``make k8s_integration`` - -``flytekit`` -************ - -.. list-table:: - - * - `Repo `__ - * - **Purpose**: Python SDK & Tools - * - **Language**: Python - * - **Guidelines**: Refer to the `Flytekit Contribution Guide `__ - -``flyteconsole`` -**************** - -.. list-table:: - - * - `Repo `__ - * - **Purpose**: Admin Console - * - **Language**: Typescript - * - **Guidelines**: Refer to the `README `__ - -``datacatalog`` -*************** - -.. list-table:: - - * - `Repo `__ | `Code Reference `__ - * - **Purpose**: Manage Input & Output Artifacts - * - **Language**: Go - -``flyteplugins`` -**************** - -.. list-table:: - - * - `Repo `__ | `Code Reference `__ - * - **Purpose**: Flyte Plugins - * - **Language**: Go - * - **Guidelines**: - - * Check for Makefile in the root repo - * Run the following commands: - * ``make generate`` - * ``make test_unit`` - * ``make link`` - -``flytestdlib`` -*************** - -.. list-table:: - - * - `Repo `__ - * - **Purpose**: Standard Library for Shared Components - * - **Language**: Go - -``flytesnacks`` -*************** - -.. list-table:: - - * - `Repo `__ - * - **Purpose**: Examples, Tips, and Tricks to use Flytekit SDKs - * - **Language**: Python (In the future, Java examples will be added) - * - **Guidelines**: Refer to the `Flytesnacks Contribution Guide `__ - -``flytectl`` -************ - -.. list-table:: - - * - `Repo `__ - * - **Purpose**: A standalone Flyte CLI - * - **Language**: Go - * - **Guidelines**: Refer to the `FlyteCTL Contribution Guide `__ - - -🔮 Development Environment Setup Guide -====================================== - -This guide provides a step-by-step approach to setting up a local development environment for -`flyteidl `_, `flyteadmin `_, -`flyteplugins `_, `flytepropeller `_, -`flytekit `_ , `flyteconsole `_, -`datacatalog `_, and `flytestdlib `_. - -The video below is a tutorial on how to set up a local development environment for Flyte. - -.. youtube:: V-KlVQmQAjE - -Requirements -************ - -This guide has been tested and used on AWS EC2 with an Ubuntu 22.04 -image. The following tools are required: - -- `Docker `__ -- `Kubectl `__ -- `Go `__ - -Content -******* - -- `How to setup dev environment for flyteidl, flyteadmin, flyteplugins, - flytepropeller, datacatalog and flytestdlib? <#how-to-setup-dev-environment-for-flyteidl-flyteadmin-flyteplugins-flytepropeller-datacatalog-and-flytestdlib>`__ - -- `How to setup dev environment for - flytekit? <#how-to-setup-dev-environment-for-flytekit>`__ - -- `How to setup dev environment for - flyteconsole? <#how-to-setup-dev-environment-for-flyteconsole>`__ - -- `How to access Flyte UI, minio, postgres, k3s, and endpoints? - <#how-to-access-flyte-ui-minio-postgres-k3s-and-endpoints>`__ - -How to setup dev environment for flyteidl, flyteadmin, flyteplugins, flytepropeller, datacatalog and flytestdlib? -****************************************************************************************************************************** - -**1. Install flytectl** - - -`Flytectl `__ is a portable and lightweight command-line interface to work with Flyte. - -.. code:: shell - - # Step1: Install the latest version of flytectl - curl -sL https://ctl.flyte.org/install | bash - # flyteorg/flytectl info checking GitHub for latest tag - # flyteorg/flytectl info found version: 0.6.39 for v0.6.39/Linux/x86_64 - # flyteorg/flytectl info installed ./bin/flytectl - - # Step2: Export flytectl path based on the previous log "flyteorg/flytectl info installed ./bin/flytectl" - export PATH=$PATH:/home/ubuntu/bin # replace with your path - -**2. Build a k3s cluster that runs minio and postgres Pods.** - - -| `Minio `__ is an S3-compatible object store that will be used later to store task output, input, etc. -| `Postgres `__ is an open-source object-relational database that will later be used by flyteadmin/dataCatalog to - store all Flyte information. - -.. code:: shell - - # Step1: Start k3s cluster, create Pods for postgres and minio. Note: We cannot access Flyte UI yet! but we can access the minio console now. - flytectl demo start --dev - # 👨‍💻 Flyte is ready! Flyte UI is available at http://localhost:30080/console 🚀 🚀 🎉 - # ❇️ Run the following command to export demo environment variables for accessing flytectl - # export FLYTECTL_CONFIG=/home/ubuntu/.flyte/config-sandbox.yaml - # 🐋 Flyte sandbox ships with a Docker registry. Tag and push custom workflow images to localhost:30000 - # 📂 The Minio API is hosted on localhost:30002. Use http://localhost:30080/minio/login for Minio console - - # Step2: Export FLYTECTL_CONFIG as the previous log indicated. - FLYTECTL_CONFIG=/home/ubuntu/.flyte/config-sandbox.yaml - - # Step3: The kubeconfig will be automatically copied to the user's main kubeconfig (default is `/.kube/config`) with "flyte-sandbox" as the context name. - # Check that we can access the K3s cluster. Verify that postgres and minio are running. - kubectl get pod -n flyte - # NAME READY STATUS RESTARTS AGE - # flyte-sandbox-docker-registry-85745c899d-dns8q 1/1 Running 0 5m - # flyte-sandbox-kubernetes-dashboard-6757db879c-wl4wd 1/1 Running 0 5m - # flyte-sandbox-proxy-d95874857-2wc5n 1/1 Running 0 5m - # flyte-sandbox-minio-645c8ddf7c-sp6cc 1/1 Running 0 5m - # flyte-sandbox-postgresql-0 1/1 Running 0 5m - - -**3. Run all Flyte components (flyteadmin, flytepropeller, datacatalog, flyteconsole, etc) in a single binary.** - -The `Flyte repository `__ includes Go code -that integrates all Flyte components into a single binary. - -.. code:: shell - - # Step1: Clone flyte repo - git clone https://github.com/flyteorg/flyte.git - cd flyte - - # Step2: Build a single binary that bundles all the Flyte components. - # The version of each component/library used to build the single binary are defined in `go.mod`. - sudo apt-get -y install jq # You may need to install jq - go mod tidy - make compile - - # Step3: Prepare a namespace template for the cluster resource controller. - # The configuration file "flyte-single-binary-local.yaml" has an entry named cluster_resources.templatePath. - # This entry needs to direct to a directory containing the templates for the cluster resource controller to use. - # We will now create a simple template that allows the automatic creation of required namespaces for projects. - # For example, with Flyte's default project "flytesnacks", the controller will auto-create the following namespaces: - # flytesnacks-staging, flytesnacks-development, and flytesnacks-production. - mkdir $HOME/.flyte/cluster-resource-templates/ - echo "apiVersion: v1 - kind: Namespace - metadata: - name: '{{ namespace }}'" > $HOME/.flyte/cluster-resource-templates/namespace.yaml - - # Step4: Running the single binary. - # The POD_NAMESPACE environment variable is necessary for the webhook to function correctly. - # You may encounter an error due to `ERROR: duplicate key value violates unique constraint`. Running the command again will solve the problem. - POD_NAMESPACE=flyte ./flyte start --config flyte-single-binary-local.yaml - # All logs from flyteadmin, flyteplugins, flytepropeller, etc. will appear in the terminal. - - -**4. Build single binary with your own code.** - - -The following instructions provide guidance on how to build single binary with your customized code under the ``flyteadmin`` as an example. - - -- **Note** Although we'll use ``flyteadmin`` as an example, these steps can be applied to other Flyte components or libraries as well. - ``{flyteadmin}`` below can be substituted with other Flyte components/libraries: ``flyteidl``, ``flyteplugins``, ``flytepropeller``, ``datacatalog``, or ``flytestdlib``. -- **Note** If you want to learn how flyte compiles those components and replace the repositories, you can study how ``go mod edit`` works. - -.. code:: shell - - # Step1: Install Go. Flyte uses Go 1.19, so make sure to switch to Go 1.19. - export PATH=$PATH:$(go env GOPATH)/bin - go install golang.org/dl/go1.19@latest - go1.19 download - export GOROOT=$(go1.19 env GOROOT) - export PATH="$GOROOT/bin:$PATH" - - # You may need to install goimports to fix lint errors. - # Refer to https://pkg.go.dev/golang.org/x/tools/cmd/goimports - go install golang.org/x/tools/cmd/goimports@latest - export PATH=$(go env GOPATH)/bin:$PATH - - # Step2: Go to the {flyteadmin} repository, modify the source code accordingly. - cd flyte/flyteadmin - - # Step3: Now, you can build the single binary. Go back to Flyte directory. - go mod tidy - make compile - POD_NAMESPACE=flyte ./flyte start --config flyte-single-binary-local.yaml - -**5. Test by running a hello world workflow.** - - -.. code:: shell - - # Step1: Install flytekit - pip install flytekit && export PATH=$PATH:/home/ubuntu/.local/bin - - # Step2: Run a hello world example - pyflyte run --remote https://raw.githubusercontent.com/flyteorg/flytesnacks/master/examples/basics/basics/hello_world.py hello_world_wf - # Go to http://localhost:30080/console/projects/flytesnacks/domains/development/executions/fd63f88a55fed4bba846 to see execution in the console. - # You can go to the [flytesnacks repository](https://github.com/flyteorg/flytesnacks) to see more useful examples. - -**6. Tear down the k3s cluster after finishing developing.** - - -.. code:: shell - - flytectl demo teardown - # context removed for "flyte-sandbox". - # 🧹 🧹 Sandbox cluster is removed successfully. - # ❇️ Run the following command to unset sandbox environment variables for accessing flytectl - # unset FLYTECTL_CONFIG - -How to setup dev environment for flytekit? -******************************************* - -**1. Set up local Flyte Cluster.** - - -If you are also modifying the code for flyteidl, flyteadmin, flyteplugins, flytepropeller datacatalog, or flytestdlib, -refer to the instructions in the `previous section <#how-to-setup-dev-environment-for-flyteidl-flyteadmin-flyteplugins-flytepropeller-datacatalog-and-flytestdlib>`__ to set up a local Flyte cluster. - -If not, we can start backends with a single command. - -.. code:: shell - - # Step1: Install the latest version of flytectl, a portable and lightweight command-line interface to work with Flyte. - curl -sL https://ctl.flyte.org/install | bash - # flyteorg/flytectl info checking GitHub for latest tag - # flyteorg/flytectl info found version: 0.6.39 for v0.6.39/Linux/x86_64 - # flyteorg/flytectl info installed ./bin/flytectl - - # Step2: Export flytectl path based on the previous log "flyteorg/flytectl info installed ./bin/flytectl" - export PATH=$PATH:/home/ubuntu/bin # replace with your path - - # Step3: Starts the Flyte demo cluster. This will setup a k3s cluster running minio, postgres Pods, and all Flyte components: flyteadmin, flyteplugins, flytepropeller, etc. - # See https://docs.flyte.org/projects/flytectl/en/latest/gen/flytectl_demo_start.html for more details. - flytectl demo start - # 👨‍💻 Flyte is ready! Flyte UI is available at http://localhost:30080/console 🚀 🚀 🎉 - # ❇️ Run the following command to export demo environment variables for accessing flytectl - # export FLYTECTL_CONFIG=/home/ubuntu/.flyte/config-sandbox.yaml - # 🐋 Flyte sandbox ships with a Docker registry. Tag and push custom workflow images to localhost:30000 - # 📂 The Minio API is hosted on localhost:30002. Use http://localhost:30080/minio/login for Minio console - -**2. Run workflow locally.** - - -.. code:: shell - - # Step1: Build a virtual environment for developing Flytekit. This will allow your local changes to take effect when the same Python interpreter runs `import flytekit`. - git clone https://github.com/flyteorg/flytekit.git # replace with your own repo - cd flytekit - virtualenv ~/.virtualenvs/flytekit - source ~/.virtualenvs/flytekit/bin/activate - make setup - pip install -e . - - # If you are also developing the plugins, consider the following: - - # Installing Specific Plugins: - # If you wish to only use few plugins, you can install them individually. - # Take [Flytekit BigQuery Plugin](https://github.com/flyteorg/flytekit/tree/master/plugins/flytekit-bigquery#flytekit-bigquery-plugin) for example: - # You have to go to the bigquery plugin folder and install it. - cd plugins/flytekit-bigquery/ - pip install -e . - # Now you can use the bigquery plugin, and the performance is fast. - - # (Optional) Installing All Plugins: - # If you wish to install all available plugins, you can execute the command below. - # However, it's not typically recommended because the current version of plugins does not support - # lazy loading. This can lead to a slowdown in the performance of your Python engine. - cd plugins - pip install -e . - # Now you can use all plugins, but the performance is slow. - - # Step2: Modify the source code for flytekit, then run unit tests and lint. - make lint - make test - - # Step3: Run a hello world sample to test locally - pyflyte run https://raw.githubusercontent.com/flyteorg/flytesnacks/master/examples/basics/basics/hello_world.py hello_world_wf - # Running hello_world_wf() hello world - -**3. Run workflow in sandbox.** - - -Before running your workflow in the sandbox, make sure you're able to successfully run it locally. -To deploy the workflow in the sandbox, you'll need to build a Flytekit image. -Create a Dockerfile in your Flytekit directory with the minimum required configuration to run a task, as shown below. -If your task requires additional components, such as plugins, you may find it useful to refer to the construction of the `officail flitekit image `__ - -.. code:: Dockerfile - - FROM python:3.9-slim-buster - USER root - WORKDIR /root - ENV PYTHONPATH /root - RUN apt-get update && apt-get install build-essential -y - RUN apt-get install git -y - # The following line is an example of how to install your modified plugins. In this case, it demonstrates how to install the 'deck' plugin. - # RUN pip install -U git+https://github.com/Yicheng-Lu-llll/flytekit.git@"demo#egg=flytekitplugins-deck-standard&subdirectory=plugins/flytekit-deck-standard" # replace with your own repo and branch - RUN pip install -U git+https://github.com/Yicheng-Lu-llll/flytekit.git@demo # replace with your own repo and branch - ENV FLYTE_INTERNAL_IMAGE "localhost:30000/flytekit:demo" # replace with your own image name and tag - -The instructions below explain how to build the image, push the image to -the Flyte cluster, and finally submit the workflow. - -.. code:: shell - - # Step1: Ensure you have pushed your changes to the remote repo - # In the flytekit folder - git add . && git commit -s -m "develop" && git push - - # Step2: Build the image - # In the flytekit folder - export FLYTE_INTERNAL_IMAGE="localhost:30000/flytekit:demo" # replace with your own image name and tag - docker build --no-cache -t "${FLYTE_INTERNAL_IMAGE}" -f ./Dockerfile . - - # Step3: Push the image to the Flyte cluster - docker push ${FLYTE_INTERNAL_IMAGE} - - # Step4: Submit a hello world workflow to the Flyte cluster - cd flytesnacks - pyflyte run --image ${FLYTE_INTERNAL_IMAGE} --remote https://raw.githubusercontent.com/flyteorg/flytesnacks/master/examples/basics/basics/hello_world.py hello_world_wf - # Go to http://localhost:30080/console/projects/flytesnacks/domains/development/executions/f5c17e1b5640c4336bf8 to see execution in the console. - -How to setup dev environment for flyteconsole? -********************************************** - -**1. Set up local Flyte cluster.** - -Depending on your needs, refer to one of the following guides to setup up the Flyte cluster: - -- If you do not need to change the backend code, refer to the section on `How to Set Up a Dev Environment for Flytekit? <#how-to-setup-dev-environment-for-flytekit>`__ -- If you need to change the backend code, refer to the section on `How to setup dev environment for flyteidl, flyteadmin, flyteplugins, flytepropeller, datacatalog and flytestdlib? <#how-to-setup-dev-environment-for-flyteidl-flyteadmin-flyteplugins-flytepropeller-datacatalog-and-flytestdlib>`__ - - -**2. Start flyteconsole.** - - -.. code:: shell - - # Step1: Clone the repo and navigate to the Flyteconsole folder - git clone https://github.com/flyteorg/flyteconsole.git - cd flyteconsole - - # Step2: Install Node.js 18. Refer to https://github.com/nodesource/distributions/blob/master/README.md#using-ubuntu-2. - curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - &&\ - sudo apt-get install -y nodejs - - # Step3: Install yarn. Refer to https://classic.yarnpkg.com/lang/en/docs/install/#debian-stable. - curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - - echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list - sudo apt update && sudo apt install yarn - - # Step4: Add environment variables - export BASE_URL=/console - export ADMIN_API_URL=http://localhost:30080 - export DISABLE_AUTH=1 - export ADMIN_API_USE_SSL="http" - - # Step5: Generate SSL certificate - # Note, since we will use HTTP, SSL is not required. However, missing an SSL certificate will cause an error when starting Flyteconsole. - make generate_ssl - - # Step6: Install node packages - yarn install - yarn build:types # It is fine if seeing error `Property 'at' does not exist on type 'string[]'` - yarn run build:prod - - # Step7: Start flyteconsole - yarn start - -**3. Install the Chrome plugin:** `Moesif Origin & CORS Changer `__. - - -We need to disable `CORS `__ to load resources. - -:: - - 1. Activate plugin (toggle to "on") - 2. Open 'Advanced Settings': - 3. set Access-Control-Allow-Credentials: true - -**4. Go to** http://localhost:3000/console/. - - -How to access Flyte UI, minio, postgres, k3s, and endpoints? -************************************************************************* - - -This section presumes a local Flyte cluster is already setup. If it isn't, refer to either: - -- `How to setup dev environment for flytekit? <#how-to-setup-dev-environment-for-flytekit>`__ -- `How to setup dev environment for flyteidl, flyteadmin, flyteplugins, flytepropeller, datacatalog and flytestdlib? <#how-to-setup-dev-environment-for-flyteidl-flyteadmin-flyteplugins-flytepropeller-datacatalog-and-flytestdlib>`__ - - -**1. Access the Flyte UI.** - - -`Flyte UI `__ is a web-based user interface for Flyte that lets you interact with Flyte objects and build directed acyclic graphs (DAGs) for your workflows. - -You can access it via http://localhost:30080/console. - -**2. Access the minio console.** - - -Core Flyte components, such as admin, propeller, and datacatalog, as well as user runtime containers rely on an object store (in this case, minio) to hold files. -During development, you might need to examine files such as `input.pb/output.pb `__, or `deck.html `__ stored in minio. - -Access the minio console at: http://localhost:30080/minio/login. The default credentials are: - -- Username: ``minio`` -- Password: ``miniostorage`` - - -**3. Access the postgres.** - - -FlyteAdmin and datacatalog use postgres to store persistent records, and you can interact with postgres on port ``30001``. Here is an example of using `psql` to connect: - -.. code:: shell - - # Step1: Install the PostgreSQL client. - sudo apt-get update - sudo apt-get install postgresql-client - - # Step2: Connect to the PostgreSQL server. The password is "postgres". - psql -h localhost -p 30001 -U postgres -d flyte - - -**4. Access the k3s dashboard.** - - -Access the k3s dashboard at: http://localhost:30080/kubernetes-dashboard. - -**5. Access the endpoints.** - - -Service endpoints are defined in the `flyteidl` repository under the `service` directory. You can browse them at `here `__. - -For example, the endpoint for the `ListTaskExecutions `__ API is: - -.. code:: shell - - /api/v1/task_executions/{node_execution_id.execution_id.project}/{node_execution_id.execution_id.domain}/{node_execution_id.execution_id.name}/{node_execution_id.node_id} - -You can access this endpoint at: - -.. code:: shell - - # replace with your specific task execution parameters - http://localhost:30080/api/v1/task_executions/flytesnacks/development/fe92c0a8cbf684ad19a8/n0?limit=10000 - - - - - - -🐞 File an issue -================ - -We use `GitHub Issues `__ for issue tracking. The following issue types are available for filing an issue: - -* `Plugin Request `__ -* `Bug Report `__ -* `Documentation Bug/Update Request `__ -* `Core Feature Request `__ -* `Flytectl Feature Request `__ -* `Housekeeping `__ -* `UI Feature Request `__ - -If none of the above fit your requirements, file a `blank `__ issue. -Also, add relevant labels to your issue. For example, if you are filing a Flytekit plugin request, add the ``flytekit`` label. - -For feedback at any point in the contribution process, feel free to reach out to us on `Slack `__. diff --git a/rsts/community/index.rst b/rsts/community/index.rst deleted file mode 100644 index c2ee55ae23..0000000000 --- a/rsts/community/index.rst +++ /dev/null @@ -1,127 +0,0 @@ -.. _community: - -########## -Community -########## - -Flyte is an ambitious open source project and would not be possible without an -amazing community. We are a completely open community and strive to treat -every member with respect. You will find the community welcoming and responsive! - -Please join us on: - -.. image:: https://img.shields.io/badge/Slack-Chat-pink?style=for-the-badge - :target: https://slack.flyte.org - :alt: Flyte Slack - -.. image:: https://img.shields.io/badge/Github-Discussion-green?style=for-the-badge - :target: https://github.com/flyteorg/flyte/discussions - :alt: Github Discussion - -.. image:: https://img.shields.io/badge/Twitter-Social-blue?style=for-the-badge - :target: https://twitter.com/flyteorg - :alt: Twitter - -.. image:: https://img.shields.io/badge/LinkedIn-Social-lightblue?style=for-the-badge - :target: https://www.linkedin.com/groups/13962256 - :alt: LinkedIn - - -Open Source Community Meeting ------------------------------ - -When: every other Tuesday, 9:00 AM Pacific Time. -You're welcome to join and learn from other community members sharing their experiences with Flyte or any other technology from the AI ecosystem. -Check out the event details and add it to your `calendar `_, or just pop in! - -.. image:: https://img.shields.io/badge/Join-Zoom-blue?style=for-the-badge - :target: https://www.addevent.com/event/EA7823958 - :alt: Zoom Link - -Office Hours ------------- - -`Book a 30 minutes session `_ with a Flyte maintainer and get your questions answered! - -Schedule your session depending on the topic to secure the availability of a maintainer with expertise in the area: - -- **7:00a.m. PT**: - - Anything flytekit-related - - Flyte releases - - flytepropeller features - - Plugin implementation - - Platform configuration -- **1:00p.m. PT**: - - Flyte deployment, auth -- **9:00p.m. PT**: - - Flytekit-related - - Use cases - - Getting started (workflow onboarding) - - Integrations - - -Newsletter ----------- - -`Join the Flyte mailing list `_ to receive the monthly newsletter - - -Slack guidelines ------------------ - -Flyte strives to build and maintain an open, inclusive, productive and self-governing open source community. In consequence, -we expect all community members to respect the following guidelines: - -Abide by the `LF's Code of Conduct `__ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -As a Linux Foundation project, we must enforce the rules that govern professional and positive open source communities. - -Avoid using DMs and @mentions -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Whenever possible, post your questions and responses in public channels so other Community Members can benefit from the conversation and outcomes. -Exceptions to this are when you need to share private or sensible information. In such a case, the outcome should still be shared publicly. -Limit the use of @mentions of other Community Members to be considerate of notification noise. - -Make use of threads -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Threads help us keep conversations contained and organized, reducing the time it takes to give you the support you need. - -Thread best practices: - -- Don't break your question into multiple messages. Put everything in one. -- For long questions, write a few sentences in the first message, and put the rest in a thread. -- If there's a code snippet (more than 5 lines of code), put it inside the thread. -- Avoid using the “Also send to channel” feature unless it's really necessary. -- If your question contains multiple questions, make sure to break them into multiple messages, so each could be answered in a separate thread. - - -Do not post the same question across multiple channels -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -If you consider that question needs to be shared on other channels, ask it once and then indicate explicitly that you're cross-posting. - -If you're having a tough time getting the support you need (or aren't sure where to go!), please DM @David Espejo(he/him) or @Samhita Alla for support. - -Do not solicit members of our Slack -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The Flyte Community exists to collaborate with, learn from, and support one another. It is not a space to pitch your products or services directly to our members via public channels, private channels, or direct messages. - -We are excited to have a growing presence from vendors to help answer questions from Community Members as they may arise, but we have a strict 3-strike policy against solicitation: - -- First occurrence: We'll give you a friendly but public reminder that the behavior is inappropriate according to our guidelines. -- Second occurrence: We'll send you a DM warning that any additional violations will result in removal from the community. -- Third occurrence: We'll delete or ban your account. - -We reserve the right to ban users without notice if they are clearly spamming our Community Members. - -If you want to promote a product or service, go to the #shameless-promotion channel and make sure to follow these rules: - -- Don't post more than two promotional posts per week -- Non-relevant topics aren't allowed - -Messages that don't follow these rules will be deleted. - - diff --git a/rsts/community/roadmap.rst b/rsts/community/roadmap.rst deleted file mode 100644 index 3e6bc3f5ae..0000000000 --- a/rsts/community/roadmap.rst +++ /dev/null @@ -1,145 +0,0 @@ -.. _community_roadmap: - -############### -Roadmap -############### - -How the Community Works -======================= -Flyte is actively used in production at multiple companies. We pride ourselves on being extremely customer-focused, and care about providing a high quality customer experience. We therefore always -prioritize stability, reliability, observability and maintainability over raw feature development. - -Features are usually developed in response to specific use cases and user scenarios. That being said, we are proactively thinking about the evolution of the system and how we want to keep adapting to changing requirements. Thus most of our changes reflect future development scenarios, and in -cases where we feel rapid prototyping would enable us to discover potential pitfalls or uncover hidden use cases, we would proactively develop features behind feature flags. - -It is extremely important to let the community know about your use cases, so that we adapt parts of Flyte to meet those requirements. We welcome collaboration and contributions, but please follow our `Contribution Guidelines `_. The quarterly planning meeting is also hosted publicly, please see more below. - - -Milestones and Release Processes -================================ -Flyte consists of many components and services. Each service is independently iterated and coordinated by maintaining backwards compatible contracts using Protobuf messages defined in `FlyteIDL `__. - -Release Cadence ---------------- -We aim to release Flyte quarterly, with the understanding that rather than being tied strictly to the calendar, we aim to have substantial features, improvements, and bug fixes at each quarter. If features slated for a given release are delayed, then the release will be delayed as well. The increased time will also give the Flyte development team more time to beta test each feature and release. - -Versioning Scheme ------------------ -*Please keep in mind the CI work to implement this scheme is still in progress* - -At each quarterly release, major components of Flyte and the Flyte repository itself will be released with an incremented minor version number and the version number will be aligned across those components. The major version number will remain ``1`` for the foreseeable future. That is, if the current version of Flyte is ``1.2.x``, the next release will be ``1.3.0`` for Flyte and the major components. - -After each version is released, merges to master will be assigned beta releases of the next release version. That is, if ``flytepropeller`` version ``v1.2.0`` was just released, the next merge to master will be tagged ``v1.3.0b0``. - -Not strictly forcing a time-constraint on the Flyte release cycle means that if a substantial number of changes is merged, perhaps due to a security issue or just a rapid pace of feature development, we can always bring up the timeline of the release. - -Components with versions aligned -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -* Propeller -* Admin -* Console -* datacatalog -* flytectl -* flytesnacks -* Flytekit -* flytekit-java - -The last two we are going to tie together for now, but realize that we may want to unpin in the future. - -Components versioned independently -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -* flyteidl -* flytestdlib -* flyteplugins -* flytecopilot - -Helm Charts -^^^^^^^^^^^ -Helm charts deserve a special mention here. Unlike the other components which will have patch versions that differ, the Flyte release version and the Helm chart version will always be identical down to the patch. That is, a Flyte release is a Helm release and vice-versa. - -Release Branches and Patching ------------------------------ -After each minor release, a release branch will be created. There will be no alignment of patch versions across the components. That is, by the end of the ``1.3.x`` release cycle, ``flyteadmin`` may be on ``1.3.8`` and ``flytepropeller`` may be on ``1.3.2``. - -When developing bug fixes, by default we will continue to develop off of master, which will not be the stable branch. After such bug fixes are merged, it will be the responsibility of the developer to ensure that the patches are also applied to prior releases. At the current time, we propose only supporting one release back (two for security patches). That is, if ``flytepropeller`` has a bug fix that results in ``v1.3.0b0`` that patch will be applied to the ``v1.2.x`` release, but not the ``v1.1.x`` release. - -Beta Patch Releases -^^^^^^^^^^^^^^^^^^^ -We also propose that beta patch versions be merged into the release branch when patching prior releases. For example, assuming no patches have yet to be made to the ``v1.2.0`` release, when porting a bug fix that resulted in ``v1.3.0b0`` onto the ``release-v1.2`` branch, the developer can first release ``v1.2.1b0`` for testing into ``release-v1.2`` before releasing the ``v1.2.1`` release. Such beta releases should be made at the discretion of the developer. - -Whether or not a patch version of any of the Flyte components also creates a Flyte patch release shall also be left to the discretion of the developer. - -Documentation Versioning ------------------------- -We also currently have an issue with our documentation versioning. While our readthedocs page does have versioning enabled and we publish the [docs version](https://github.com/flyteorg/flyte/blob/80c098f10334b1c916d1e4274ab9f204152d9d80/rsts/conf.py#L33), all the [intersphinx mappings](https://github.com/flyteorg/flyte/blob/80c098f10334b1c916d1e4274ab9f204152d9d80/rsts/conf.py#L219) just point to `latest`. Keep in mind that this mapping not only exists in this `flyte` repo, but also in all the other repos that that mapping points to. That is, to maintain an accurate mapping of different versions of documentation, we'll need to update the mapping in all the repos. - -To remediate this, we propose the following: - -* Documentation should be pinned only to Major.Minor on all the repos that have their versions "aligned". - - * This means that as we release patch versions of Admin, Propeller, etc., if we're on v1.1 for instance, as Admin code/auto-generated documentation changes, the v1.1 listing of readthedocs will automatically pick it up. -* Repos that are not aligned will just default to the "latest" documentation version. - -Planning Process -================ - -Quarterly Planning ------------------- -Members of the community should feel free to join these! Core members of the Flyte team will come prepared with general initiatives in mind. We will use these meetings to prioritize these ideas, assess community interest and impact, and decide what goes into the GitHub milestone for the next release. Members of the community looking to contribute should also join. Please look for this meeting invite on the calendar - it may not be set up as a recurring meeting simply because it will likely change by a few days each quarter. - -Change Management ------------------- -To ensure that changes are trackable and the history is explainable, we use a slightly cumbersome but helpful process, with the following immediate goals: -- Every PR is associated with an issue (automatic searchable documentation) -- Large PRs are associated with Proposals -- Every major change is associated with documentation -- Owner files exist for all repositories - -Issue Lifecycle ---------------- -- Incoming issues are tagged automatically as untriaged. -- Periodically, members of the Flyte community will meet to triage incoming issues. We aim to do this on a weekly basis. -- During this meeting we'll attempt to assign each issue to a milestone. Some issues however will need to be investigated before we can fully assess. -- Once an issue is assigned to a milestone, this means we are committed to delivering it that release. This means the burden for adding something to the milestone is relatively high. Issues that slip should only slip for good reason. - -Browse Features and Issues -============================ - -Issues by Theme ----------------- - -+-------------+----------------------------------------------------------------+---------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------+ -| Theme | Description | Open Issues | Comment | -+-------------+----------------------------------------------------------------+---------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------+ -| Bugs | Currently known and open bugs. | `Bugs `_ | We are always working on bugs. Open a new one `here `_. | -+-------------+----------------------------------------------------------------+---------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------+ -| Security | Issues related to security enhancements. | `Security issues `_ | | -+-------------+----------------------------------------------------------------+---------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------+ -| Docs | All issues open with our documentation | `Docs issues `_ | Starting Feb 2021, we will be completely overhauling our docs. Feedback appreciated! | -+-------------+----------------------------------------------------------------+---------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------+ -| Features | All new features in development | `Features issues `_ | | -+-------------+----------------------------------------------------------------+---------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------+ -| Plugins | New capabilities and plugins that are built into Flyte. | `Plugins issues `_ | This is one of the best places to get started contributing to Flyte. Issues with both | -| | These could be hosted services, K8s native execution, etc. | | `plugins` and `flytekit` labels refer to purely client-side plugins and are the fastest to contribute to. | -+-------------+----------------------------------------------------------------+---------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------+ -| Scale | These issues deal with performance, reliability and | `Scale issues `_ | We are always working on these issues and we would love to hear feedback about what you | -| | scalability of Flyte | | would want to change or what we should prioritize. | -+-------------+----------------------------------------------------------------+---------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------+ -| Contribute | If you are looking to contribute and want a great first issue, | `Contribute issues `_ | These are the best issues to get started with. | -| | check out these issues | | | -+-------------+----------------------------------------------------------------+---------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------+ - - -Issues by Components ---------------------- - -+---------------+---------------------------------------+------------------------------------------------------------------------+ -| Theme | Description | Open Issues | -+===============+=======================================+========================================================================+ -| Flyte Console | Issues concerning our web UI. | `Flyte Console issues `_ | -+---------------+---------------------------------------+------------------------------------------------------------------------+ -| Flytectl | Issues concerning our standalone CLI. | `Flytectl issues `_ | -+---------------+---------------------------------------+------------------------------------------------------------------------+ - -For an overview of what we're currently working on, check out our `live roadmap `__. - diff --git a/rsts/community/troubleshoot.rst b/rsts/community/troubleshoot.rst deleted file mode 100644 index b4f6c271d4..0000000000 --- a/rsts/community/troubleshoot.rst +++ /dev/null @@ -1,135 +0,0 @@ -.. _troubleshoot: - -===================== -Troubleshooting Guide -===================== - -.. tags:: Troubleshoot, Basic - -The content in this section will help Flyte users isolate the most probable causes for some of the common issues that could arise while getting started with the project. - -Before getting started, collect the following information from the underlying infrastructure: - -- Capture the ``Status`` column from the output of: - -.. prompt:: bash $ - - $ kubectl describe pod -n - -Where will typically correspond to the node execution string that you can find in the UI. - -- Pay close attention to the `Events` section in the output. -- Also, collect the logs from the Pod: - -.. prompt:: bash $ - - $ kubectl logs pods -n - -Where will typically correspond to the Flyte -, e.g. flytesnacks-development. - -Depending on the contents of the logs or the `Events`, you can try different things: - -Debugging common execution errors ----------------------------------- - -``message: '0/1 nodes are available: 1 Insufficient cpu. preemption: 0/1 nodes are available: 1 No preemption victims found for incoming pod.'`` -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -This issue is more common on MacOS devices. Make sure that your Docker daemon has allocated a minimum of 4 CPU cores and 3GB of RAM - -``terminated with exit code (137). Reason [OOMKilled]`` -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -- For single binary environment deployed with Helm chart, make sure you are using `the most recent charts `_ - -- For EKS deployments, you cand adjust resource limits and requests in the `inline `_ section of the ``eks-production.yaml`` file. Example: - -.. code-block:: yaml - - inline: - task_resources: - defaults: - cpu: 100m - memory: 100Mi - storage: 100Mi - limits: - memory: 1Gi - -- Also, the default container resource limits are can be overridden from the task itself: - -.. code-block:: python - - from flytekit import Resources, task - @task(limits=Resources(mem="256Mi") - def your_task(... - -``Error: ImagePullBackOff`` -^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -- If your environment requires the use of a network proxy use the ``--env`` option when starting the sandbox and pass the proxy configuration: - -.. prompt:: bash $ - - $ flytectl demo start --env HTTP_PROXY= - -- If you're building a custom Docker image, make sure to use a tag other than ``latest``. Otherwise, the Kubernetes default pull policy will be changed from ``IfNotPresent`` to ``Always``, forcing an image pull with every Pod deployment. - -Issues running workloads -------------------------- - -``OPENSSL_internal:WRONG_VERSION_NUMBER`` -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -- For ``flyte-binary``: make sure that the endpoint name you have set in your ``config.yaml`` file, is included in the DNS names of the SSL certificate installed (be it self signed or issued by a Certificate Authority) -- For ``sandbox``: verify the ``FLYTECTL_CONFIG`` environment variable has the correct value by running: - -.. prompt:: bash $ - - $ export FLYTECTL_CONFIG=~/.flyte/config-sandbox.yaml - -``ModuleNotFoundError`` -^^^^^^^^^^^^^^^^^^^^^^^ - -- If you're using a custom container image and using Docker, make sure your ``Dockerfile`` is located at the same level of the ``flyte`` directory and that there is an empty ``__init__.py`` file in your project's folder : - -.. prompt:: bash $ - - myflyteapp - ├── Dockerfile - ├── docker_build_and_tag.sh - ├── flyte - │ ├── __init__.py - │ └── workflows - │ ├── __init__.py - │ └── example.py - └── requirements.txt - -``An error occurred (AccessDenied) when calling the PutObject operation`` in an EKS deployment -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -- Make sure that the Kubernetes service account Flyte is using has the annotation that refers to the IAM Role is connected to: - -.. prompt:: bash $ - - $ kubectl describe sa -n - -Example output: - -.. prompt:: bash $ - - Name: - Namespace: flyte - Labels: app.kubernetes.io/managed-by=eksctl - Annotations: eks.amazonaws.com/role-arn: arn:aws:iam:::role/flyte-system-role - Image pull secrets: - Mountable secrets: - Tokens: - Events: - -- Otherwise, obtain your IAM role's ARN and manually annotate the service account: - -.. prompt:: bash $ - - $ kubectl annotate serviceaccount -n eks.amazonaws.com/role-arn=arn:aws:iam::xxxx:role/ - -- Refer to this community-maintained `guides `_ for further information about Flyte deployment on EKS diff --git a/rsts/concepts/admin.rst b/rsts/concepts/admin.rst deleted file mode 100644 index 3a64c7e2a0..0000000000 --- a/rsts/concepts/admin.rst +++ /dev/null @@ -1,500 +0,0 @@ -.. _divedeep-admin: - -########## -FlyteAdmin -########## - -.. tags:: Advanced, Design - -Admin Structure -=============== - -FlyteAdmin serves as the main Flyte API to process all client requests to the system. Clients include the FlyteConsole, which calls: - -1. FlyteAdmin to list the workflows, get execution details, etc. -2. Flytekit, which in turn calls FlyteAdmin to register, launch workflows, etc. - -Below, we'll dive into each component defined in admin in more detail. - -RPC ---- - -FlyteAdmin uses the `grpc-gateway `__ library to serve incoming gRPC and HTTP requests with identical handlers. -Refer to the admin service :std:ref:`definition ` for a detailed API overview, including request and response entities. -The RPC handlers are thin shims that enforce request structure validation and call out to the appropriate :ref:`manager ` methods to process requests. - -You can find a detailed explanation of the service in the :ref:`admin service ` page. - -.. _divedeep-admin-manager: - -Managers --------- - -The Admin API is broken up into entities: - -- Executions -- Launch plans -- Node Executions -- Projects (and their respective domains) -- Task Executions -- Tasks -- Workflows - -Each API entity has an entity manager in FlyteAdmin responsible for implementing business logic for the entity. -Entity managers handle full validation of creating, updating and getting requests and -data persistence in the backing store (see the :ref:`divedeep-admin-repository` section). - - -Additional Components -+++++++++++++++++++++ - -The managers utilize additional components to process requests. These additional components include: - -- :ref:`workflow engine `: compiles workflows and launches workflow executions from launch plans. -- :ref:`data ` (remote cloud storage): offloads data blobs to the configured cloud provider. -- :ref:`runtime `: loads values from a config file to assign task resources, initialization values, execution queues, and more. -- :ref:`async processes `: provides functions to schedule and execute the workflows as well as enqueue and trigger notifications. - -.. _divedeep-admin-repository: - -Repository ----------- -Serialized entities (tasks, workflows, launch plans) and executions (workflow-, node- and task-) are stored as protos defined -`here `__. -We use the excellent `gorm `__ library to interface with our database, which currently supports a Postgres -implementation. You can find the actual code for issuing queries with gorm in the -`gormimpl `__ directory. - -Models -++++++ -Database models are defined in the `models `__ directory and correspond 1:1 with the database tables [0]_. - -The full set of database tables includes: - -- executions -- execution_events -- launch_plans -- node_executions -- node_execution_events -- tasks -- task_executions -- workflows - -These database models inherit primary keys and indexes as defined in the corresponding `models `__ file. - -The repositories code also includes `transformers `__. -These convert entities from the database format to a response format for the external API. -If you change either of these structures, you must change the corresponding transformers too. - - -.. _divedeep-admin-async: - -Component Details -================= - -This section dives into the details of each top-level directory defined in ``pkg/``. - -Asynchronous Components ------------------------ - -Notifications and schedules are handled by async routines that are responsible for enqueuing and subsequently processing dequeued messages. - -FlyteAdmin uses the `gizmo toolkit `__ to abstract queueing implementation. Gizmo's -`pubsub `__ library offers implementations for Amazon SNS/SQS, Google Pubsub, Kafka topics, and publishing over HTTP. - -For the sandbox development, no-op implementations of the notifications and schedule handlers are used to remove external cloud dependencies. - - -Common ------- - -As the name implies, ``common`` houses shared components used across different FlyteAdmin components in a single, top-level directory to avoid cyclic dependencies. These components include execution naming and phase utils, query filter definitions, query sorting definitions, and named constants. - -.. _divedeep-admin-data: - -Data ------ - -Data interfaces are primarily handled by the `storage `__ library implemented in ``flytestdlib``. However, neither this nor the underlying `stow `__ library expose `HEAD `__ support. Hence, the data package in admin exists as the layer responsible for additional, remote data operations. - -Errors ------- - -The errors directory contains centrally defined errors that are designed for compatibility with gRPC statuses. - -.. _divedeep-admin-config: - -Runtime -------- -Values specific to the FlyteAdmin application, including task, workflow registration, and execution are configured in the `runtime `__ directory. These interfaces expose values configured in the ``flyteadmin`` top-level key in the application config. - -.. _divedeep-admin-workflowengine: - -Workflow engine ----------------- - -This directory contains the interfaces to build and execute workflows leveraging FlytePropeller compiler and client components. - -.. [0] Given the unique naming constraints, some models are redefined in `migration_models `__ to guarantee unique index values. - -.. _divedeep-admin-service: - - -FlyteAdmin Service Background -============================= - -Entities ---------- - -The :std:ref:`admin service definition ` defines REST operations for the entities that -FlyteAdmin administers. - -As a refresher, the primary :ref:`entities ` across Flyte maps to FlyteAdmin entities. - -Static entities -+++++++++++++++ - -These include: - -- Workflows -- Tasks -- Launch Plans - -Permitted operations include: - -- Create -- Get -- List - -The above entities are designated by an :std:ref:`identifier ` -that consists of a project, domain, name, and version specification. These entities are, for the most part, immutable. To update one of these entities, the updated -version must be re-registered with a unique and new version identifier attribute. - -One caveat is that the launch plan can toggle between :std:ref:`ACTIVE and INACTIVE ` states. -At a given point in time, only one launch plan version across a shared {Project, Domain, Name} specification can be active. The state affects the scheduled launch plans only. -An inactive launch plan can be used to launch individual executions. However, only an active launch plan runs on a schedule (given it has a schedule defined). - - -Static entities metadata (Named Entities) -+++++++++++++++++++++++++++++++++++++++++ - -A :std:ref:`named entity ` includes metadata for one of the above entities -(workflow, task or launch plan) across versions. It also includes a resource type (workflow, task or launch plan) and an -:std:ref:`id ` which is composed of project, domain and name. -The named entity also includes metadata, which are mutable attributes about the referenced entity. - -This metadata includes: - -- Description: a human-readable description for the Named Entity collection. -- State (workflows only): this determines whether the workflow is shown on the overview list of workflows scoped by project and domain. - -Permitted operations include: - -- Create -- Update -- Get -- List - - -Execution entities -++++++++++++++++++ - -These include: - -- (Workflow) executions -- Node executions -- Task executions - -Permitted operations include: - -- Create -- Get -- List - -After an execution begins, FlytePropeller monitors the execution and sends the events which the admin uses to update the above executions. - -These :std:ref:`events ` include - -- WorkflowExecutionEvent -- NodeExecutionEvent -- TaskExecutionEvent - -and contain information about respective phase transitions, phase transition time and optional output data if the event concerns a terminal phase change. - -These events provide the **only** way to update an execution. No raw update endpoint exists. - -To track the lifecycle of an execution, admin and store attributes such as `duration` and `timestamp` at which an execution transitioned to running and end time are used. - -For debugging purposes, admin also stores Workflow and Node execution events in its database, but does not currently expose them through an API. Because array tasks can yield many executions, admin does **not** store TaskExecutionEvents. - - -Platform entities -+++++++++++++++++ -Projects: Like named entities, projects have mutable metadata such as human-readable names and descriptions, in addition to their unique string ids. - -Permitted project operations include: - -- Register -- List - -.. _divedeep-admin-matchable-resources: - -Matchable resources -+++++++++++++++++++ - -A thorough background on :ref:`matchable resources ` explains -their purpose and application logic. As a summary, these are used to override system level defaults for Kubernetes cluster -resource management, default execution values, and more across different levels of specificity. - -These entities consist of: - -- ProjectDomainAttributes -- WorkflowAttributes - -``ProjectDomainAttributes`` configure customizable overrides at the project and domain level, and ``WorkflowAttributes`` configure customizable overrides at the project, domain and workflow level. - -Permitted attribute operations include: - -- Update (implicitly creates if there is no existing override) -- Get -- Delete - - -Defaults --------- - -Task resource defaults -++++++++++++++++++++++ - -User-facing documentation on configuring task resource requests and limits can be found in :std:ref:`cookbook:customizing task resources`. - -As a system administrator you may want to define default task resource requests and limits across your Flyte deployment. -This can be done through the flyteadmin config. - -**Default** values get injected as the task requests and limits when a task definition omits a specific resource. -**Limit** values are only used as validation. Neither a task request nor limit can exceed the limit for a resource type. - - -Using the Admin Service ------------------------ - -Adding request filters -++++++++++++++++++++++ - -We use `gRPC Gateway `_ to reverse proxy HTTP requests into gRPC. -While this allows for a single implementation for both HTTP and gRPC, an important limitation is that fields mapped to the path pattern cannot be -repeated and must have a primitive (non-message) type. Unfortunately this means that repeated string filters cannot use a proper protobuf message. Instead, they use -the internal syntax shown below:: - - func(field,value) or func(field, value) - -For example, multiple filters would be appended to an http request like:: - - ?filters=ne(version, TheWorst)+eq(workflow.name, workflow) - -Timestamp fields use the ``RFC3339Nano`` spec (For example: "2006-01-02T15:04:05.999999999Z07:00") - -The fully supported set of filter functions are - -- contains -- gt (greater than) -- gte (greter than or equal to) -- lt (less than) -- lte (less than or equal to) -- eq (equal) -- ne (not equal) -- value_in (for repeated sets of values) - -"value_in" is a special case where multiple values are passed to the filter expression. For example:: - - value_in(phase, RUNNING;SUCCEEDED;FAILED) - -.. note:: - If you're issuing your requests over http(s), be sure to URL encode the ";" semicolon using ``%3B`` like so: ``value_in(phase, RUNNING%3BSUCCEEDED%3BFAILED)`` - -Filterable fields vary based on entity types: - -- Task - - - project - - domain - - name - - version - - created_at - -- Workflow - - - project - - domain - - name - - version - - created_at - -- Launch plans - - - project - - domain - - name - - version - - created_at - - updated_at - - workflows.{any workflow field above} (for example: workflow.domain) - - state (you must use the integer enum, for example: 1) - - States are defined in :std:ref:`launchplanstate `. - -- Named Entity Metadata - - - state (you must use the integer enum, for example: 1) - - States are defined in :std:ref:`namedentitystate `. - -- Executions (Workflow executions) - - - project - - domain - - name - - workflow.{any workflow field above} (for example: workflow.domain) - - launch_plan.{any launch plan field above} (for example: launch_plan.name) - - phase (you must use the upper-cased string name, for example: ``RUNNING``) - - Phases are defined in :std:ref:`workflowexecution.phase `. - - execution_created_at - - execution_updated_at - - duration (in seconds) - - mode (you must use the integer enum, for example: 1) - - Modes are defined in :std:ref:`executionmode `. - - user (authenticated user or role from flytekit config) - -- Node Executions - - - node_id - - execution.{any execution field above} (for example: execution.domain) - - phase (you must use the upper-cased string name, for example: ``QUEUED``) - - Phases are defined in :std:ref:`nodeexecution.phase `. - - started_at - - node_execution_created_at - - node_execution_updated_at - - duration (in seconds) - -- Task Executions - - - retry_attempt - - task.{any task field above} (for example: task.version) - - execution.{any execution field above} (for example: execution.domain) - - node_execution.{any node execution field above} (for example: node_execution.phase) - - phase (you must use the upper-cased string name, for example: ``SUCCEEDED``) - - Phases are defined in :std:ref:`taskexecution.phase `. - - started_at - - task_execution_created_at - - task_execution_updated_at - - duration (in seconds) - -Putting It All Together ------------------------ - -If you wish to query specific executions that were launched using a specific launch plan for a workflow with specific attributes, use: - -:: - - gte(duration, 100)+value_in(phase,RUNNING;SUCCEEDED;FAILED)+eq(lauch_plan.project, foo) - +eq(launch_plan.domain, bar)+eq(launch_plan.name, baz) - +eq(launch_plan.version, 1234) - +lte(workflow.created_at,2018-11-29T17:34:05.000000000Z07:00) - - - -Adding sorting to requests -++++++++++++++++++++++++++ - -Only a subset of fields are supported for sorting list queries. The explicit list is shown below: - -- ListTasks - - - project - - domain - - name - - version - - created_at - -- ListTaskIds - - - project - - domain - -- ListWorkflows - - - project - - domain - - name - - version - - created_at - -- ListWorkflowIds - - - project - - domain - -- ListLaunchPlans - - - project - - domain - - name - - version - - created_at - - updated_at - - state (you must use the integer enum, for example: 1) - - States are defined in :std:ref:`launchplanstate `. - -- ListWorkflowIds - - - project - - domain - -- ListExecutions - - - project - - domain - - name - - phase (you must use the upper-cased string name, for example: ``RUNNING``) - - Phases are defined in :std:ref:`workflowexecution.phase `. - - execution_created_at - - execution_updated_at - - duration (in seconds) - - mode (you must use the integer enum, for example: 1) - - Modes are defined :std:ref:`execution.proto `. - -- ListNodeExecutions - - - node_id - - retry_attempt - - phase (you must use the upper-cased string name, for example: ``QUEUED``) - - Phases are defined in :std:ref:`nodeexecution.phase `. - - started_at - - node_execution_created_at - - node_execution_updated_at - - duration (in seconds) - -- ListTaskExecutions - - - retry_attempt - - phase (you must use the upper-cased string name, for example: ``SUCCEEDED``) - - Phases are defined in :std:ref:`taskexecution.phase `. - - started_at - - task_execution_created_at - - task_execution_updated_at - - duration (in seconds) - -Sorting syntax --------------- - -Adding sorting to a request requires specifying the ``key``. For example: The attribute you wish to sort on. Sorting can also optionally specify the direction (one of ``ASCENDING`` or ``DESCENDING``) where ``DESCENDING`` is the default. - -Example sorting HTTP parameter: - -:: - - sort_by.key=created_at&sort_by.direction=DESCENDING - -Alternatively, since ``DESCENDING`` is the default sorting direction, the above could be written as - -:: - - sort_by.key=created_at diff --git a/rsts/concepts/architecture.rst b/rsts/concepts/architecture.rst deleted file mode 100644 index 062523146c..0000000000 --- a/rsts/concepts/architecture.rst +++ /dev/null @@ -1,167 +0,0 @@ -.. _divedeep-architecture-overview: - -###################### -Component Architecture -###################### - -.. tags:: Advanced, Glossary, Design - -This document aims to demystify how Flyte's major components ``Flyteidl``, ``Flytekit``, ``Flytectl``, ``FlyteConsole``, ``FlyteAdmin``, ``FlytePropeller``, and ``FlytePlugins`` fit together at a high level. - -FlyteIDL -======== - -In Flyte, entities like "Workflows", "Tasks", "Launch Plans", and "Schedules" are recognized by multiple system components. For components to communicate effectively, they need a shared understanding about the structure of these entities. - -Flyteidl (Interface Definition Language) is where shared Flyte entities are defined. It also defines the RPC service definition for the :std:ref:`core Flyte API `. - -Flyteidl uses the `protobuf `_ schema to describe entities. Clients are generated for Python, Golang, and JavaScript and imported by Flyte components. - - -Planes -====== - -Flyte components are separated into 3 logical planes. The planes are summarized and explained in detail below. The goal is that these planes can be replaced by alternate implementations. - -+-------------------+---------------------------------------------------------------------------------------------------------------+ -| **User Plane** | The User Plane consists of all user tools that assist in interacting with the core Flyte API. | -| | These tools include the FlyteConsole, Flytekit, and Flytectl. | -+-------------------+---------------------------------------------------------------------------------------------------------------+ -| **Control Plane** | The Control Plane implements the core Flyte API. | -| | It serves all client requests coming from the User Plane. | -| | It stores information such as current and past running workflows, and provides that information upon request. | -| | It also accepts requests to execute workflows, but offloads the work to the Data Plane. | -+-------------------+---------------------------------------------------------------------------------------------------------------+ -| **Data Plane** | The sole responsibility of the the Data Plane is to fulfill workflows. | -| | It accepts workflow requests from the Control Plane and guides the workflow to completion, | -| | launching tasks on a cluster of machines as necessary based on the workflow graph. | -| | It sends status events back to the control plane so the information can be stored and surfaced to end-users. | -+-------------------+---------------------------------------------------------------------------------------------------------------+ - -.. image:: https://raw.githubusercontent.com/flyteorg/static-resources/main/flyte/concepts/architecture/flyte-logical-architecture.png - -User Plane ----------- - -In Flyte, workflows are represented as a Directed Acyclic Graph (DAG) of tasks. While this representation is logical for services, managing workflow DAGs in this format is a tedious exercise for humans. The Flyte User Plane provides tools to create, manage, and visualize workflows in a format that is easily digestible to the users. - -These tools include: - -Flytekit - Flytekit is an SDK that helps users design new workflows using the Python programming language. It can parse the Python code, compile it into a valid Workflow DAG, and submit it to Flyte for execution. - -FlyteConsole - FlyteConsole provides the Web interface for Flyte. Users and administrators can use the console to view workflows, launch plans, schedules, tasks, and individual task executions. The console provides tools to visualize workflows, and surfaces relevant logs for debugging failed tasks. - -Flytectl - Flytectl provides interactive access to Flyte to launch and access workflows via terminal. - - -Control Plane -------------- - -The Control Plane supports the core REST/gRPC API defined in Flyteidl. User Plane tools like FlyteConsole and Flytekit contact the control plane on behalf of users to store and retrieve information. - -Currently, the entire control plane is handled by a single service called **FlyteAdmin**. - -FlyteAdmin is stateless. It processes requests to create entities like tasks, workflows, and schedules by persisting data in a relational database. - -While FlyteAdmin serves the Workflow Execution API, it does not itself execute workflows. To launch workflow executions, FlyteAdmin sends the workflow DAG to the DataPlane. For added scalability and fault-tolerance, FlyteAdmin can be configured to load-balance workflows across multiple isolated data-plane clusters. - - -Data Plane ----------- - -The Data Plane is the engine that accepts DAGs, and fulfills workflow executions by launching tasks in the order defined by the graph. Requests to the Data Plane generally come via the control plane, and not from end-users. - -In order to support compute-intensive workflows at massive scale, the Data Plane needs to launch containers on a cluster of machines. The current implementation leverages `Kubernetes `_ for cluster management. - -Unlike the user-facing Control Plane, the Data Plane does not expose a traditional REST/gRPC API. To launch an execution in the Data Plane, you create a “flyteworkflow” resource in Kubernetes. -A “flyteworkflow” is a Kubernetes `Custom Resource `_ (CRD) created by our team. This custom resource represents the Flyte workflow DAG. - -The core state machine that processes flyteworkflows is the worker known as **FlytePropeller**. - -FlytePropeller leverages the Kubernetes `operator pattern `_. It polls the Kubernetes API, looking for newly created flyteworkflow resources. FlytePropeller understands the workflow DAG, and launches the appropriate Kubernetes pods as needed to complete tasks. It periodically checks for completed tasks, launching downstream tasks until the workflow is complete. - -**Plugins** - -Each task in a flyteworkflow DAG has a specified **type**. The logic for fulfilling a task is determined by its task type. -In the basic case, FlytePropeller launches a single Kubernetes pod to fulfill a task. -Complex task types require workloads to be distributed across hundreds of pods. - -The type-specific task logic is separated into isolated code modules known as **plugins**. -Each task type has an associated plugin that is responsible for handling tasks of its type. -For each task in a workflow, FlytePropeller activates the appropriate plugin based on the task type in order to fulfill the task. - -The Flyte team has pre-built plugins for Hive, Spark, AWS Batch, and :ref:`more `. -To support new use-cases, developers can create their own plugins and bundle them in their FlytePropeller deployment. - -Component Code Architecture -=========================== - -.. panels:: - :container: container-lg pb-4 - :column: col-lg-12 p-2 - :body: text-center - - .. link-button:: flytepropeller-architecture - :type: ref - :text: FlytePropeller - :classes: btn-block stretched-link - - --- - - .. link-button:: native-scheduler-architecture - :type: ref - :text: Flyte Native Scheduler - :classes: btn-block stretched-link - -Component Code References -========================= - -.. panels:: - :container: container-lg pb-4 - :column: col-lg-12 p-2 - :body: text-center - - .. link-button:: https://pkg.go.dev/mod/github.com/flyteorg/flyteadmin - :type: url - :text: FlyteAdmin - :classes: btn-block stretched-link - - --- - - .. link-button:: https://pkg.go.dev/mod/github.com/flyteorg/flytepropeller - :type: url - :text: FlytePropeller - :classes: btn-block stretched-link - - --- - - .. link-button:: https://pkg.go.dev/mod/github.com/flyteorg/datacatalog - :type: url - :text: DataCatalog - :classes: btn-block stretched-link - - --- - - .. link-button:: https://pkg.go.dev/mod/github.com/flyteorg/flyteplugins - :type: url - :text: FlytePlugins - :classes: btn-block stretched-link - - --- - - .. link-button:: https://pkg.go.dev/github.com/flyteorg/flyteadmin/scheduler - :type: url - :text: Flyte Native Scheduler - :classes: btn-block stretched-link - - -.. toctree:: - :maxdepth: 1 - :name: component code architecture - :hidden: - - component_architecture/flytepropeller_architecture - component_architecture/native_scheduler_architecture diff --git a/rsts/concepts/basics.rst b/rsts/concepts/basics.rst deleted file mode 100644 index 9ebf154761..0000000000 --- a/rsts/concepts/basics.rst +++ /dev/null @@ -1,155 +0,0 @@ -.. _divedeep: - -############# -Concepts -############# - -.. panels:: - :header: text-center - :column: col-lg-12 p-2 - - .. link-button:: divedeep-tasks - :type: ref - :text: Tasks - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - A **Task** is any independent unit of processing. Tasks can be pure functions or functions with side-effects. - Each definition of a task also has associated configurations and requirements specifications. - - --- - - .. link-button:: divedeep-workflows - :type: ref - :text: Workflows - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - **Workflows** are programs that are guaranteed to eventually reach a terminal state and are represented as - Directed Acyclic Graphs (DAGs) expressed in protobuf. - - --- - - .. link-button:: divedeep-nodes - :type: ref - :text: Nodes - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - A **Node** is an encapsulation of an instance of a Task. Nodes represent the unit of work, where multiple Nodes are - interconnected via workflows. - - --- - - .. link-button:: divedeep-launchplans - :type: ref - :text: Launch Plans - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - **Launch Plans** provide a mechanism to specialize input parameters for workflows associated with different schedules. - - --- - - .. link-button:: concepts-schedules - :type: ref - :text: Scheduling Launch Plans - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - **Scheduling** is critical to data and ML jobs. Flyte provides a native Cron-style scheduler. - - --- - - .. link-button:: divedeep-registration - :type: ref - :text: Registration - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - **Registration** is the process of uploading a workflow and its task definitions to the FlyteAdmin service. - Registration creates an inventory of available tasks, workflows and launch plans, declared per project and domain. - - --- - - .. link-button:: divedeep-executions - :type: ref - :text: Executions - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - **Executions** are instances of workflows, nodes or tasks created in the system as a result of a user-requested - execution or a scheduled execution. - - --- - - .. link-button:: divedeep-state-machine - :type: ref - :text: State Machine for an Execution - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - The various states an **Execution** passes through. - - --- - - .. link-button:: divedeep-execution-timeline - :type: ref - :text: Life of an Execution - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - How an **Execution** progresses through the FlytePropeller execution engine and the timeline. - - --- - - .. link-button:: divedeep-data-management - :type: ref - :text: How Flyte Manages Data - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - What is **metadata**? How are large amounts of **raw data** handled? How does data flow between tasks? - - --- - - .. link-button:: ui - :type: ref - :text: Flyte UI Walkthrough - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - A quick overview of the **FlyteConsole**. - - --- - - .. link-button:: divedeep-catalog - :type: ref - :text: Platform-wide Memoization/Caching - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - A deeper dive into **memoization** and the mechanics of memoization in Flyte. - - --- - - .. link-button:: divedeep-versioning - :type: ref - :text: Workflow & Task Versioning - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - A deeper dive into one of Flyte's most important features: versioning of workflows and tasks. - - -The diagram below shows how inputs flow through tasks and workflows to produce outputs. - -.. image:: https://raw.githubusercontent.com/flyteorg/static-resources/main/flyte/concepts/basics/flyte_wf_tasks_high_level.png - - -.. toctree:: - :maxdepth: 1 - :name: Core Concepts - :hidden: - - tasks - workflows - nodes - launchplans - schedules - registration - executions - state_machine - execution_timeline - data_management - flyte_console - catalog - versioning - workflow_lifecycle diff --git a/rsts/concepts/catalog.rst b/rsts/concepts/catalog.rst deleted file mode 100644 index 8b092e73c0..0000000000 --- a/rsts/concepts/catalog.rst +++ /dev/null @@ -1,63 +0,0 @@ -.. _divedeep-catalog: - -What is Data Catalog? -===================== - -.. tags:: Advanced, Design - -`DataCatalog `__ is a service to index parameterized, strongly-typed data artifacts across revisions. It allows clients to query artifacts based on meta information and tags. - - -How Flyte Memoizes Task Executions on Data Catalog --------------------------------------------------- - -Flyte `memoizes task executions` by creating artifacts in DataCatalog and associating meta information regarding the execution with the artifact. Let's walk through what happens when a task execution is cached on DataCatalog. - -Every task instance is represented as a DataSet: - -.. code-block:: javascript - - Dataset { - project: Flyte project the task was registered in - domain: Flyte domain for the task execution - name: flyte_task- - version: -- - } - -Every task execution is represented as an Artifact in the Dataset above: - -.. code-block:: javascript - - Artifact { - id: uuid - Metadata: [executionName, executionVersion] - ArtifactData: [List of ArtifactData] - } - - - ArtifactData { - Name: - value: - } - -To retrieve the Artifact, tag the Artifact with a hash of the input values for the memoized task execution: - -.. code-block:: javascript - - ArtifactTag { - Name: flyte_cached- - } - -When caching an execution, FlytePropeller will: - -1. Create a dataset for the task. -2. Create an artifact that represents the execution, along with the artifact data that represents the execution output. -3. Tag the artifact with a unique hash of the input values. - -To ensure that the task execution is memoized, Flyte Propeller will: - -1. Compute the tag by computing the hash of the input. -2. Check if a tagged artifact exists with that hash. - - - If it exists, we have a cache hit and the Propeller can skip the task execution. - - If an artifact is not associated with the tag, Propeller needs to run the task. diff --git a/rsts/concepts/component_architecture/flytepropeller_architecture.rst b/rsts/concepts/component_architecture/flytepropeller_architecture.rst deleted file mode 100644 index a04f6dbe4d..0000000000 --- a/rsts/concepts/component_architecture/flytepropeller_architecture.rst +++ /dev/null @@ -1,81 +0,0 @@ -.. _flytepropeller-architecture: - -########################### -FlytePropeller Architecture -########################### - -.. tags:: Advanced, Design - -.. note:: - In the frame of this document, we use the term “workflow” to describe the single execution of a workflow definition. - -Introduction -============ - -A Flyte :ref:`workflow ` is represented as a Directed Acyclic Graph (DAG) of interconnected Nodes. Flyte supports a robust collection of Node types to ensure diverse functionality. - -- ``TaskNodes`` support a plugin system to externally add system integrations. -- Control flow can be altered during runtime using ``BranchNodes``, which prune downstream evaluation paths based on input. -- ``DynamicNodes`` add nodes to the DAG. -- ``WorkflowNodes`` allow embedding workflows within each other. - -FlytePropeller is responsible for scheduling and tracking execution of Flyte workflows. It is implemented using a K8s controller and adheres to the established K8s design principles. In this scheme, resources are periodically evaluated and the goal is to transition from the observed state to a requested state. - -In our case, workflows are the resources and they are iteratively evaluated to transition from the current state to success. During each loop, the current workflow state is established as the phase of workflow nodes and subsequent tasks, and FlytePropeller performs operations to transition this state to success. The operations may include scheduling (or rescheduling) node executions, evaluating dynamic or branch nodes, etc. These design decisions ensure that FlytePropeller can scale to manage a large number of concurrent workflows without performance degradation. - -This document attempts to break down the FlytePropeller architecture by tracking workflow life cycle through each internal component. Below is a high-level illustration of the FlytePropeller architecture and a flow chart of each component's responsibilities during FlyteWorkflow execution. - -.. image:: https://raw.githubusercontent.com/flyteorg/static-resources/main/flyte/concepts/architecture/flytepropeller_architecture.png - -Components -========== - -FlyteWorkflow CRD / K8s Integration ------------------------------------ - -Workflows in Flyte are maintained as Custom Resource Definitions (CRDs) in Kubernetes, which are stored in the backing etcd cluster. Each execution of a workflow definition results in the creation of a new FlyteWorkflow CR (Custom Resource) which maintains a state for the entirety of processing. CRDs provide variable definitions to describe both resource specifications (spec) and status' (status). The FlyteWorkflow CRD uses the spec subsection to detail the workflow DAG, embodying node dependencies, etc. The status subsection tracks workflow metadata including overall workflow status, node/task phases, status/phase transition timestamps, etc. - -K8s exposes a powerful controller/operator API that enables entities to track creation/updates over a specific resource type. FlytePropeller uses this API to track FlyteWorkflows, meaning every time an instance of the FlyteWorkflow CR is created/updated, the FlytePropeller instance is notified. FlyteAdmin is the common entry point, where initialization of FlyteWorkflow CRs may be triggered by user workflow definition executions, automatic relaunches, or periodically scheduled workflow definition executions. However, it is conceivable to manually create FlyteWorkflow CRs, but this will have limited visibility and usability. - -WorkQueue/WorkerPool ----------------------- - -FlytePropeller supports concurrent execution of multiple, unique workflows using a WorkQueue and WorkerPool. - -The WorkQueue is a FIFO queue storing workflow ID strings that require a lookup to retrieve the FlyteWorkflow CR to ensure up-to-date status. A workflow may be added to the queue in a variety of circumstances: - -#. A new FlyteWorkflow CR is created or an existing instance is updated -#. The K8s Informer resyncs the FlyteWorkflow periodically (necessary to detect workflow timeouts and ensure liveness) -#. A FlytePropeller worker experiences an error during a processing loop -#. The WorkflowExecutor observes a completed downstream node -#. A NodeHandler observes state change and explicitly enqueues its owner (For example, K8s pod informer observes completion of a task) - -The WorkerPool is implemented as a collection of goroutines, one for each worker. Using this lightweight construct, FlytePropeller can scale to 1000s of workers on a single CPU. Workers continually poll the WorkQueue for workflows. On success, the workflow is executed (passed to WorkflowExecutor). - -WorkflowExecutor ----------------- - -The WorkflowExecutor is responsible for handling high-level workflow operations. This includes maintaining the workflow phase (for example: running, failing, succeeded, etc.) according to the underlying node phases and administering pending cleanup operations. For example, aborting existing node evaluations during workflow failures or removing FlyteWorkflow CRD finalizers on completion to ensure the CR is deleted. Additionally, at the conclusion of each evaluation round, the WorkflowExecutor updates the FlyteWorkflow CR with updated metadata fields to track the status between evaluation iterations. - -NodeExecutor ------------- - -The NodeExecutor is executed on a single node, beginning with the workflow's start node. It traverses the workflow using a visitor pattern with a modified depth-first search (DFS), evaluating each node along the path. A few examples of node evaluation based on phase: successful nodes are skipped, unevaluated nodes are queued for processing, and failed nodes may be reattempted up to a configurable threshold. There are many configurable parameters to tune evaluation criteria including max parallelism which restricts the number of nodes which may be scheduled concurrently. Additionally, nodes may be retried to ensure recoverability on failure. - -The NodeExecutor is also responsible for linking data readers/writers to facilitate data transfer between node executions. The data transfer process occurs automatically within Flyte, using efficient K8s events rather than a polling listener pattern which incurs more overhead. Relatively small amounts of data may be passed between nodes inline, but it is more common to pass data URLs to backing storage. A component of this is writing to and checking the data cache, which facilitates the reuse of previously completed evaluations. - -NodeHandlers ------------- - -FlytePropeller includes a robust collection of NodeHandlers to support diverse evaluation of the workflow DAG: - -* **TaskHandler (Plugins)**: These are responsible for executing plugin specific tasks. This may include contacting FlyteAdmin to schedule K8s pod to perform work, calling a web API to begin/track evaluation, and much more. The plugin paradigm exposes an extensible interface for adding functionality to Flyte workflows. -* **DynamicHandler**: Flyte workflow CRs are initialized using a DAG compiled during the registration process. The numerous benefits of this approach are beyond the scope of this document. However, there are situations where the complete DAG is unknown at compile time. For example, when executing a task on each value of an input list. Using Dynamic nodes, a new DAG subgraph may be dynamically compiled during runtime and linked to the existing FlyteWorkflow CR. -* **WorkflowHandler**: This handler allows embedding workflows within another workflow definition. The API exposes this functionality using either (1) an inline execution, where the workflow function is invoked directly resulting in a single FlyteWorkflow CR with an appended sub-workflow, or (2) a launch plan, which uses a TODO to create a separate sub-FlyteWorkflow CR whose execution state is linked to the parent FlyteWorkflow CR. -* **BranchHandler**: The branch handler allows the DAG to follow a specific control path based on input (or computed) values. -* **Start / End Handlers**: These are dummy handlers which process input and output data and in turn transition start and end nodes to success. - -FlyteAdmin Events ------------------ - -It should be noted that the WorkflowExecutor, NodeExecutor, and TaskHandlers send events to FlyteAdmin, enabling it to track workflows in near real-time. diff --git a/rsts/concepts/component_architecture/native_scheduler_architecture.rst b/rsts/concepts/component_architecture/native_scheduler_architecture.rst deleted file mode 100644 index 19f13ef6c7..0000000000 --- a/rsts/concepts/component_architecture/native_scheduler_architecture.rst +++ /dev/null @@ -1,77 +0,0 @@ -.. _native-scheduler-architecture: - -################################### -Flyte Native Scheduler Architecture -################################### - -.. tags:: Advanced, Design - -Introduction -============ -Any workflow engine needs functionality to support scheduled executions. Flyte -fulfills this using an in-built native scheduler, which schedules fixed rate and -cron-based schedules. The workflow author specifies the schedule during the -:ref:`launchplan creation ` -and :ref:`activates or deactivates ` -the schedule using the -:ref:`admin APIs ` -exposed for the launch plan. - -Characteristics -=============== - -#. Cloud provider independent -#. Standard `cron `__ support -#. Independently scalable -#. Small memory footprint -#. Schedules run as lightweight goroutines -#. Fault tolerant and available -#. Support in sandbox environment - - -Components -========== - -Schedule Management -------------------- - -This component supports creation/activation and deactivation of schedules. Each schedule is tied to a launch plan and is versioned in a similar manner. The schedule is created or its state is changed to activated/deactivated whenever the `admin API `__ is invoked for it with `ACTIVE/INACTIVE state `__. This is done either through `flytectl `__ or through any other client that calls the GRPC API. -The API is similar to a launchplan, ensuring that only one schedule is active for a given launchplan. - - -Scheduler ---------- - -This component is a singleton and is responsible for reading the schedules from the DB and running them at the cadence defined by the schedule. The lowest granularity supported is `minutes` for scheduling through both cron and fixed rate schedulers. The scheduler can run in one replica, two at the most during redeployment. Multiple replicas will only duplicate the work, since each execution for a scheduleTime will have a unique identifier derived from the schedule name and the time of the schedule. The idempotency aspect of the admin for the same identifier prevents duplication on the admin side. The scheduler runs continuously in a loop reading the updated schedule entries in the data store and adding or removing the schedules. Removing a schedule will not alter the in-flight goroutines launched by the scheduler. Thus, the behavior of these executions is undefined. - - -Snapshoter -********** - -This component is responsible for writing the snapshot state of all schedules at a regular cadence to a persistent store. It uses a DB to store the GOB format of the snapshot, which is versioned. The snapshot is a map[string]time.Time, which stores a map of schedule names to their last execution times. During bootup, the snapshot is bootstrapped from the data store and loaded into memory. The Scheduler uses this snapshot to schedule any missed schedules. - -CatchupAll-System -***************** -This component runs at bootup and catches up all the schedules to current time, i.e., time.Now(). New runs for the schedules are sent to the admin in parallel. -Any failure in catching up is considered a hard failure and stops the scheduler. The rerun tries to catchup from the last snapshot of data. - -GOCronWrapper -************* - -This component is responsible for locking in the time for the scheduled job to be invoked and adding those to the cron scheduler. It is a wrapper around `this framework `__ for fixed rate and cron schedules that creates in-memory representation of the scheduled job functions. The scheduler schedules a function with scheduleTime parameters. When this scheduled function is invoked, the scheduleTime parameters provide the current schedule time used by the scheduler. This scheduler supports standard cron scheduling which has 5 `fields `__. It requires 5 entries representing ``minute``, ``hour``, ``day of month``, ``month`` and ``day of week``, in that order. - -Job Executor -************ - -The job executor component is responsible for sending the scheduled executions to FlyteAdmin. The job function accepts ``scheduleTime`` and the schedule which is used to create an execution request to the admin. Each job function is tied to the schedule which is executed in a separate goroutine in accordance with the schedule cadence. - -Monitoring ----------- - -To monitor the system health, the following metrics are published by the native scheduler: - -#. JobFuncPanicCounter : count of crashes of the job functions executed by the scheduler. -#. JobScheduledFailedCounter : count of scheduling failures by the scheduler. -#. CatchupErrCounter : count of unsuccessful attempts to catchup on the schedules. -#. FailedExecutionCounter : count of unsuccessful attempts to fire executions of a schedule. -#. SuccessfulExecutionCounter : count of successful attempts to fire executions of a schedule. diff --git a/rsts/concepts/console.rst b/rsts/concepts/console.rst deleted file mode 100644 index d872f8990c..0000000000 --- a/rsts/concepts/console.rst +++ /dev/null @@ -1,128 +0,0 @@ -.. _divedeep-console: - -############ -FlyteConsole -############ - -.. tags:: Intermediate, Contribute - -FlyteConsole is the web UI for the Flyte platform. Here's a video that dives into the graph UX: - -.. youtube:: 7YSc-QHk_Ec - -********************* -Running FlyteConsole -********************* - -===================== -Install Dependencies -===================== -Running FlyteConsole locally requires `NodeJS `_ and -`yarn `_. Once these are installed, all of the dependencies -can be installed by running ``yarn`` in the project directory. - -====================== -Environment Variables -====================== -Before we can run the server, we need to set up an environment variable or two. - -``ADMIN_API_URL`` (default: `window.location.origin `_) - -FlyteConsole displays information fetched from the FlyteAdmin API. This -environment variable specifies the host prefix used in constructing API requests. - -.. NOTE:: - This is only the host portion of the API endpoint, consisting of the - protocol, domain, and port (if not using the standard 80/443). - -This value will be combined with a suffix (such as ``/api/v1``) to construct the -final URL used in an API request. - -**Default Behavior** - -In most cases, ``FlyteConsole`` is hosted in the same cluster as the Admin -API, meaning that the domain used to access the console is the same as that used to -access the API. For this reason, if no value is set for ``ADMIN_API_URL``, the -default behavior is to use the value of `window.location.origin`. - - -**``BASE_URL`` (default: ``undefined``)** - -This allows running the console at a prefix on the target host. This is -necessary when hosting the API and console on the same domain (with prefixes of -``/api/v1`` and ``/console`` for example). For local development, this is -usually not needed, so the default behavior is to run without a prefix. - - -**``CORS_PROXY_PREFIX`` (default: ``/cors_proxy``)** - -Sets the local endpoint for `CORS request proxying `_. - -=============== -Run the Server -=============== - -To start the local development server, run ``yarn start``. This will spin up a -Webpack development server, compile all of the code into bundles, and start the -NodeJS server on the default port (3000). All requests to the NodeJS server will -be stalled until the bundles have finished. The application will be accessible -at http://localhost:3000 (if using the default port). - -************ -Development -************ - -========== -Storybook -========== - -FlyteConsole uses `Storybook `__. -Component stories live next to the components they test in the ``__stories__`` -directory with the filename pattern ``{Component}.stories.tsx``. - -You can run storybook with ``npm run storybook``, and view the stories at http://localhost:9001. - -============================= -Protobuf and the Network tab -============================= - -Communication with the FlyteAdmin API is done using Protobuf as the -request/response format. Protobuf is a binary format, which means looking at -responses in the Network tab won't be helpful. To make debugging easier, -each network request is logged to the console with its URL, followed by the -decoded Protobuf payload. You must have debug output enabled (on by default in -development) to see these messages. - -============ -Debug Output -============ - -This application makes use of the `debug `_ -library to provide namespaced debug output in the browser console. In -development, all debug output is enabled. For other environments, the debug -output must be enabled manually. You can do this by setting a flag in -localStorage using the console: ``localStorage.debug = 'flyte:*'``. Each module in -the application sets its own namespace. So if you'd like to only view output for -a single module, you can specify that one specifically -(ex. ``localStorage.debug = 'flyte:adminEntity'`` to only see decoded Flyte -Admin API requests). - -.. _cors-proxy: - -============== -CORS Proxying -============== - -In the common hosting arrangement, all API requests are made to the same origin -serving the client application, making CORS unnecessary. For any requests which -do not share the same ``origin`` value, the client application will route -requests through a special endpoint on the NodeJS server. One example would be -hosting the Admin API on a different domain than the console. Another example is fetching execution data from external storage such as S3. This is done to -minimize the extra configuration required for ingress to the Admin API -and data storage, as well as to simplify local development of the console without -the need to grant CORS access to ``localhost``. - -The requests and responses are piped through the NodeJS server with minimal -overhead. However, it is still recommended to host the Admin API and console on -the same domain to prevent unnecessary load on the NodeJS server and extra -latency on API requests due to the additional hop. diff --git a/rsts/concepts/control_plane.rst b/rsts/concepts/control_plane.rst deleted file mode 100644 index 16347e6389..0000000000 --- a/rsts/concepts/control_plane.rst +++ /dev/null @@ -1,56 +0,0 @@ -.. _control-plane: - -################ -Control Plane -################ - -.. panels:: - :header: text-center - :column: col-lg-12 p-2 - - .. link-button:: divedeep-projects - :type: ref - :text: Projects - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - **Projects** are a multi-tenancy primitive in Flyte that allow logical grouping of Flyte workflows and tasks, which - often correspond to source code repositories. - - --- - - .. link-button:: divedeep-domains - :type: ref - :text: Domains - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - **Domains** enable workflows to be executed in different environments, with separate resource isolation and feature - configuration. - - --- - - .. link-button:: divedeep-admin - :type: ref - :text: FlyteAdmin - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - **FlyteAdmin** is the backend that serves the main Flyte API, processing all client requests to the system. - - --- - - .. link-button:: divedeep-console - :type: ref - :text: Flyte Console - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - **Flyte Console** is the web UI for the Flyte platform. - - -.. toctree:: - :maxdepth: 1 - :hidden: - - projects - domains - admin - console - dynamic_spec diff --git a/rsts/concepts/data_management.rst b/rsts/concepts/data_management.rst deleted file mode 100644 index 0d4edbd0a8..0000000000 --- a/rsts/concepts/data_management.rst +++ /dev/null @@ -1,176 +0,0 @@ -.. _divedeep-data-management: - -################################# -Understand How Flyte Handles Data -################################# - -.. tags:: Basic, Glossary, Design - -Types of Data -============= - -There are two parts to the data in Flyte: - -1. Metadata - -* It consists of data about inputs to a task, and other artifacts. -* It is configured globally for FlytePropeller, FlyteAdmin etc., and the running pods/jobs need access to this bucket to get the data. - -2. Raw data - -* It is the actual data (such as the Pandas DataFrame, Spark DataFrame, etc.). -* Raw data paths are unique for every execution, and the prefixes can be modified per execution. -* None of the Flyte control plane components would access the raw data. This provides great separation of data between the control plane and the data plane. - -.. note: - Metadata and raw data can be present in entirely separate buckets. - - -Let us consider a simple Python task: - -.. code-block:: python - - @task - def my_task(m: int, n: str, o: FlyteFile) -> pd.DataFrame: - ... - -In the above code sample, ``m``, ``n``, ``o`` are inputs to the task. -``m`` of type ``int`` and ``n`` of type ``str`` are simple primitive types, while ``o`` is an arbitrarily sized file. -All of them from Flyte's point of view are ``data``. -The difference lies in how Flyte stores and passes each of these data items. - -For every task that receives input, Flyte sends an **Inputs Metadata** object, which contains all the primitive or simple scalar values inlined, but in the case of -complex, large objects, they are offloaded and the `Metadata` simply stores a reference to the object. In our example, ``m`` and ``n`` are inlined while -``o`` and the output ``pd.DataFrame`` are offloaded to an object store, and their reference is captured in the metadata. - -`Flytekit TypeTransformers` make it possible to use complex objects as if they are available locally - just like persistent filehandles. But Flyte backend only deals with -the references. - -Thus, primitive data types and references to large objects fall under Metadata - `Meta input` or `Meta output`, and the actual large object is known as **Raw data**. -A unique property of this separation is that all `meta values` are read by FlytePropeller engine and available on the FlyteConsole or CLI from the control plane. -`Raw` data is not read by any of the Flyte components and hence it is possible to store it in a completely separate blob storage or alternate stores, which can't be accessed by Flyte control plane components -but can be accessed by users's container/tasks. - -Raw Data Prefix -~~~~~~~~~~~~~~~ - -Every task can read/write its own data files. If ``FlyteFile`` or any natively supported type like ``pandas.DataFrame`` is used, Flyte will automatically offload and download -data from the configured object-store paths. These paths are completely customizable per `LaunchPlan` or `Execution`. - -- The default Rawoutput path (prefix in an object store like S3/GCS) can be configured during registration as shown in :std:ref:`flytectl_register_files`. - The argument ``--outputLocationPrefix`` allows us to set the destination directory for all the raw data produced. Flyte will create randomized folders in this path to store the data. -- To override the ``RawOutput`` path (prefix in an object store like S3/GCS), you can specify an alternate location when invoking a Flyte execution, as shown in the following screenshot of the LaunchForm in FlyteConsole: - - .. image:: https://raw.githubusercontent.com/flyteorg/static-resources/main/flyte/concepts/data_movement/launch_raw_output.png - -- In the sandbox, the default Rawoutput-prefix is configured to be the root of the local bucket. Hence Flyte will write all the raw data (reference types like blob, file, df/schema/parquet, etc.) under a path defined by the execution. - - -Metadata -~~~~~~~~ - -Metadata in Flyte is critical to enable the passing of data between tasks. It allows to perform in-memory computations for branches or send partial outputs from one task to another or compose outputs from multiple tasks into one input to be sent to a task. - -Thus, metadata is restricted due to its omnipresence. Each `meta output`/`input` cannot be larger than 1MB. If you have `List[int]`, it cannot be larger than 1MB, considering other input entities. In scenarios where large lists or strings need to be sent between tasks, file abstraction is preferred. - -``LiteralType`` & Literals -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -SERIALIZATION TIME -^^^^^^^^^^^^^^^^^^ - -When a task is declared with inputs and outputs, Flyte extracts the interface of the task and converts it to an internal representation called a :std:ref:`ref_flyteidl.core.typedinterface`. -For each variable, a corresponding :std:ref:`ref_flyteidl.core.literaltype` is created. - -For example, the following Python function's interface is transformed as follows: - -.. code-block:: python - - @task - def my_task(a: int, b: str) -> FlyteFile: - """ - Description of my function - - :param a: My input integer - :param b: My input string - :return: My output file - """ - ... - -.. code-block:: - - interface { - inputs { - variables { - key: "a" - value { - type { - simple: INTEGER - } - description: "My input Integer" - } - } - variables { - key: "b" - value { - type { - simple: STRING - } - description: "My input string" - } - } - } - outputs { - variables { - key: "o0" - value { - type { - blob { - } - } - description: "My output File" - } - } - } - } - - -RUNTIME -^^^^^^^ - -At runtime, data passes through Flyte using :std:ref:`ref_flyteidl.core.literal` where the values are set. -For files, the corresponding ``Literal`` is called ``LiteralBlob`` (:std:ref:`ref_flyteidl.core.blob`) which is a binary large object. -Many different objects can be mapped to the underlying `Blob` or `Struct` types. For example, an image is a Blob, a ``pandas.DataFrame`` is a Blob of type parquet, etc. - -Data Movement -============= - -Flyte is primarily a **DataFlow Engine**. It enables movement of data and provides an abstraction to enable movement of data between different languages. - -One implementation of Flyte is the current workflow engine. - -The workflow engine is responsible for moving data from a previous task to the next task. As explained previously, Flyte only deals with Metadata and not the actual Raw data. -The illustration below explains how data flows from engine to the task and how that is transferred between tasks. The medium to transfer the data can change, and will change in the future. -We could use fast metadata stores to speed up data movement or exploit locality. - -Between Flytepropeller and Tasks -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. image:: https://raw.githubusercontent.com/flyteorg/static-resources/main/flyte/concepts/data_movement/flyte_data_movement.png - - -Between Tasks -~~~~~~~~~~~~~~ - -.. image:: https://raw.githubusercontent.com/flyteorg/static-resources/main/flyte/concepts/data_movement/flyte_data_transfer.png - - -Bringing in Your Own Datastores for Raw Data -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Flytekit has a pluggable data persistence layer. -This is driven by PROTOCOL. -For example, it is theoretically possible to use S3 ``s3://`` for metadata and GCS ``gcs://`` for raw data. It is also possible to create your own protocol ``my_fs://``, to change how data is stored and accessed. -But for Metadata, the data should be accessible to Flyte control plane. - -Data persistence is also pluggable. By default, it supports all major blob stores and uses an interface defined in Flytestdlib. diff --git a/rsts/concepts/domains.rst b/rsts/concepts/domains.rst deleted file mode 100644 index bb306924dd..0000000000 --- a/rsts/concepts/domains.rst +++ /dev/null @@ -1,13 +0,0 @@ -.. _divedeep-domains: - -Domains -======= - -.. tags:: Basic, Glossary - -Domains provide an abstraction to isolate resources and feature configuration for different -deployment environments. - -For example: We develop and deploy Flyte workflows in development, staging, and production. We configure Flyte domains with those names, and specify lower resource limits on the development and staging domains than production domains. - -We also use domains to disable launch plans and schedules from development and staging domains, since those features are typically meant for production deployments. \ No newline at end of file diff --git a/rsts/concepts/dynamic_spec.rst b/rsts/concepts/dynamic_spec.rst deleted file mode 100644 index 4e9e11ad3c..0000000000 --- a/rsts/concepts/dynamic_spec.rst +++ /dev/null @@ -1,50 +0,0 @@ -.. _divedeep-dynamic-spec: - -Dynamic Job Spec -================ - -.. tags:: Basic, Design - -A dynamic job spec is a subset of the entire workflow spec that defines a set of tasks, workflows, nodes, and output bindings that control how the job should assemble its outputs. - -This spec is currently only supported as an intermediate step in running Dynamic Tasks. - -.. code-block:: protobuf - :caption: Dynamic job spec in Protobuf - - message DynamicJobSpec { - repeated Node nodes = 1; - int64 min_successes = 2; - repeated Binding outputs = 3; - - repeated TaskTemplate tasks = 4; - repeated WorkflowTemplate subworkflows = 5; - } - -.. _divedeep-dynamic-tasks: - -Tasks ------ - -Defines one or more :ref:`Tasks ` that can then be referenced in the spec. - -.. _divedeep-dynamic-subworkflows: - -Subworkflows ------------- - -Defines zero or more :ref:`Workflows ` that can then be referenced in the spec. - -.. _divedeep-dynamic-nodes: - -Nodes ------ - -Defines one or more :ref:`Nodes ` that can run in parallel to produce the final outputs of the spec. - -.. _divedeep-dynamic-outputs: - -Outputs -------- - -Defines one or more binding that instructs engine on how to assemble the final outputs. \ No newline at end of file diff --git a/rsts/concepts/execution_timeline.rst b/rsts/concepts/execution_timeline.rst deleted file mode 100644 index 276930c94e..0000000000 --- a/rsts/concepts/execution_timeline.rst +++ /dev/null @@ -1,72 +0,0 @@ -.. _divedeep-execution-timeline: - -######################################## -Timeline of a workflow execution -######################################## - -.. tags:: Intermediate, Glossary - -The illustration below shows the timeline view of a workflow execution. - -.. image:: https://raw.githubusercontent.com/flyteorg/static-resources/main/flyte/deployment/monitoring/flyte_wf_timeline.svg?sanitize=true - - -The illustration above refers to a simple workflow, with 2 nodes N1 & N2. This can be represented as follows, - -.. mermaid:: - - graph LR; - Start --> N1; - N1 --> N2; - N2 --> End; - - -Acceptance Latency -==================== -Every workflow starts in the ``Acceptance`` phase. Acceptance refers to the time between FlyteAdmin receiving an execution request and FlytePropeller evaluating the first round of workflow. -Usually, within this phase, the K8s queuing latency is the largest contributor to latency where the overall acceptance latency of <5s is desirable. - -Transition Latency -=================== -Transition latency refers to the time between successive node executions, that is, between ``N1`` and ``N2``. For the first node ``N1``, this latency also encapsulates executing the start node. - -Similarly, the last node also encapsulates executing end node. ``Start Node`` and ``End Node`` are capstones inserted to mark the beginning and end of the DAG. - -The latency involves time consumed to: - -#. Gather outputs for a node after the node completes execution. -#. Send an observation event to FlyteAdmin. Failing to do so will be regarded as an error and will be tried until it succeeds or system max retries are exhausted (the number of max system retries is configured to be 30 by default and can be altered per deployment). -#. Persist data to Kubernetes. -#. Receive the persisted object back from Kubernetes (as this process is eventually consistent using informer caches). -#. Gather inputs for a node before the node starts. -#. Send a queued event for the next node to FlyteAdmin (this is what is persisted and drives the UI/CLI and historical information). - -Queuing Latency -================ -Queuing latency is the time taken by Kubernetes to start the pod, other services to start the job, HTTP throttle to be met, or any rate-limiting that needs to be overcome. This -is usually tied to the available resources and quota, and is out of control for Flyte. - -Completion Latency -=================== -Completion latency is the time taken to mark the workflow as complete and accumulate outputs of a workflow after the last node completes its execution. - - -Overview of Various Latencies in FlytePropeller -================================================= - -=================================== ================================================================================================================================== - Description of main events for workflow execution ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - Events Description -=================================== ================================================================================================================================== -Acceptance Measures the time between when we receive service call to create an Execution (Unknown) and when it has moved to Queued. -Transition Latency Measures the latency between two consecutive node executions, the time spent in Flyte engine. -Queuing Latency Measures the latency between the time a node's been queued to the time the handler reported the executable moved to running state. -Task Execution Actual time spent executing user code -Repeat steps 2-4 for every task -Transition Latency See #2 -Completion Latency Measures the time between when the WF moved to succeeding/failing state and when it finally moved to a terminal state. -=================================== ================================================================================================================================== - -.. note:: - **The core team is working on optimizing Completion Latency, Transition Latency, and Acceptance Latency.** \ No newline at end of file diff --git a/rsts/concepts/executions.rst b/rsts/concepts/executions.rst deleted file mode 100644 index b6ee602520..0000000000 --- a/rsts/concepts/executions.rst +++ /dev/null @@ -1,20 +0,0 @@ -.. _divedeep-executions: - -########## -Executions -########## - -.. tags:: Basic, Glossary - -**Executions** are instances of workflows, nodes or tasks created in the system as a result of a user-requested execution or a scheduled execution. - -Typical Flow Using Flytectl ---------------------------- - -* When an execution of a workflow is triggered using UI/Flytecli/other stateless systems, the system first calls the ``getLaunchPlan`` endpoint and retrieves a launch plan matching the given version. The launch plan definition includes definitions of all input variables declared for the workflow. -* The user-side component then ensures that all the required inputs are supplied and requests the FlyteAdmin service for an execution. -* The FlyteAdmin service validates the inputs, ensuring that they are all specified and, if required, within the declared bounds. -* FlyteAdmin then fetches the previously validated and compiled workflow closure and translates it to an executable format with all the inputs. -* This executable workflow is launched on Kubernetes with an execution record in the database. - -.. image:: https://raw.githubusercontent.com/flyteorg/static-resources/main/flyte/concepts/executions/flyte_wf_execution_overview.svg?sanitize=true \ No newline at end of file diff --git a/rsts/concepts/flyte_console.rst b/rsts/concepts/flyte_console.rst deleted file mode 100644 index 8e9484789b..0000000000 --- a/rsts/concepts/flyte_console.rst +++ /dev/null @@ -1,232 +0,0 @@ -.. _ui: - -How to Use Flyte UI -=================== - -.. tags:: Basic, UI - -Flyte UI is a web-based user interface for Flyte. It helps interact with Flyte objects and builds DAGs out of your workflows. - -With Flyte UI, you can: - -* Launch tasks -* Launch workflows -* View Versioned Tasks and Workflows -* Trigger Versioned Tasks and Workflows -* Inspect Executions through Inputs, Outputs, Logs, and Graphs -* Clone Executions -* Relaunch Executions -* Recover Executions - -.. note:: - `FlyteConsole `__ hosts the Flyte user interface code. - -Launching Workflows -------------------- - -You can launch a workflow by clicking on the **Launch Workflow** button. Workflows are viewable after they are registered. -The UI should be accessible at http://localhost:30081/console. - -| - -.. figure:: https://raw.githubusercontent.com/flyteorg/static-resources/main/flyte/flyteconsole/launch_execution_001.png - :alt: "Launch Workflow" button - - Launch a workflow using the "Launch Workflow" button. - -| - -The end-to-end process from writing code to registering workflows is present in the :std:ref:`getting-started`. - -A pop-up window appears with input fields that the execution requires upon clicking the **Launch Workflow** button. -If the default inputs are given, they will be auto-populated. - -| - -.. figure:: https://raw.githubusercontent.com/flyteorg/static-resources/main/flyte/flyteconsole/launch_execution_002.png - :alt: Launch form - - A pop-up window appears after clicking the "Launch Workflow" button. - -| - -An execution can be terminated/aborted by clicking on the **Terminate** button. - -| - -.. figure:: https://raw.githubusercontent.com/flyteorg/static-resources/main/flyte/flyteconsole/launch_execution_003.png - :alt: "Terminate" button - - Terminate an execution by clicking the "Terminate" button. - -| - -Launching Tasks ---------------- - -You can launch a task by clicking on the **Launch Task** button. Tasks are viewable after they are registered. -The UI should be accessible at http://localhost:30081/console. - -| - -.. figure:: https://raw.githubusercontent.com/flyteorg/static-resources/main/flyte/flyteconsole/launch_task_001.png - :alt: "Launch Task" button - - Launch a task by clicking the "Launch Task" button. - -| - -A pop-up window appears with input fields that the task requires and the role with which the task has to run on clicking the **Launch Task** button. - -| - -.. figure:: https://raw.githubusercontent.com/flyteorg/static-resources/main/flyte/flyteconsole/launch_task_002.png - :alt: Launch form - - A pop-up window appears on clicking the "Launch Task" button. - -| - -Viewing Versioned Tasks and Workflows -------------------------------------- - -Every registered Flyte entity is tagged with a version. All the registered versions of workflows and tasks are viewable in the UI. - -| - -.. figure:: https://raw.githubusercontent.com/flyteorg/static-resources/main/flyte/flyteconsole/versioned_executions.png - :alt: Versioned workflows - - View versioned workflows. - -| - -Triggering Versioned Tasks and Workflows ----------------------------------------- - -Every registered Flyte entity is versioned and can be triggered anytime. - -| - -.. figure:: https://raw.githubusercontent.com/flyteorg/static-resources/main/flyte/flyteconsole/trigger_versioned_executions.png - :alt: Trigger versioned workflows - - Trigger versioned workflows. - -| - -Inspecting Executions ---------------------- - -Executions can be inspected through the UI. Inputs and Outputs for every node and execution can be viewed. - -| - -.. figure:: https://raw.githubusercontent.com/flyteorg/static-resources/main/flyte/flyteconsole/inspect_execution_001.png - :alt: Node's inputs and outputs - - View every execution node's inputs and outputs. - -| - -.. figure:: https://raw.githubusercontent.com/flyteorg/static-resources/main/flyte/flyteconsole/inspect_execution_002.png - :alt: Execution's inputs and outputs - - View every execution's inputs and outputs. - -| - -Logs are accessible as well. - -| - -.. figure:: https://raw.githubusercontent.com/flyteorg/static-resources/main/flyte/flyteconsole/inspect_execution_003.png - :alt: Logs - - View Kubernetes logs. - -| - -Every execution has two views: Nodes and Graph. - -A node in the nodes view encapsulates an instance of a task, but it can also contain an entire subworkflow or trigger an external workflow. -More about nodes can be found in :std:ref:`divedeep-nodes`. - -| - -.. figure:: https://raw.githubusercontent.com/flyteorg/static-resources/main/flyte/flyteconsole/inspect_execution_004.png - :alt: Nodes - - Inspect execution's nodes in the UI. - -| - -Graph view showcases a static DAG. - -| - -.. figure:: https://raw.githubusercontent.com/flyteorg/static-resources/main/flyte/flyteconsole/inspect_execution_005.png - :alt: DAG - - Inspect execution's DAG in the UI. - -| - -Cloning Executions ------------------- - -An execution in the ``RUNNING`` state can be cloned. - -Click on the ellipsis on the top right corner of the UI. - -| - -.. figure:: https://raw.githubusercontent.com/flyteorg/static-resources/main/flyte/flyteconsole/clone_execution_001.png - :alt: Clone execution - - Step 1: Click on the ellipsis. - -| - -Click on the **Clone Execution** button. - -| - -.. figure:: https://raw.githubusercontent.com/flyteorg/static-resources/main/flyte/flyteconsole/clone_execution_002.png - :alt: Clone execution - - Step 2: "Clone execution" button. - -| - -Relaunching Executions ----------------------- - -The **Relaunch** button allows you to relaunch a terminated execution with pre-populated inputs. -This option can be helpful to try out a new version of a Flyte entity. - -| - -.. figure:: https://raw.githubusercontent.com/flyteorg/static-resources/main/flyte/flyteconsole/relaunch_execution.png - :alt: Relaunch an execution - - Relaunch an execution. - -| - -A pop-up window appears on clicking the relaunch button, allowing you to modify the version and inputs. - -Recovering Executions ---------------------- - -Recovery mode allows you to recover an individual execution by copying all successful node executions and running from the failed nodes. -The **Recover** button helps recover a failed execution. - -| - -.. figure:: https://raw.githubusercontent.com/flyteorg/static-resources/main/flyte/flyteconsole/recover_execution.png - :alt: Recover an execution - - Recover an execution. - -| diff --git a/rsts/concepts/flyte_wf_tasks_high_level.png b/rsts/concepts/flyte_wf_tasks_high_level.png deleted file mode 100644 index 83e987ee18ed79387f944d963e8d40f0bedf1725..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43187 zcmeFZXIPWX`sjsIlsa~u)wbSxJzF=x4P9qlx7@}&S;4wj zrf55AH#BOMXRYvvbd)yY0wphPKcDblQQt@|^+fcXoCQAk=v2dT?bepJ7^7H{5Z0&f zsE_1c)8-L;69?My|Ns0u2?QePg6l3m&|zQmI`m;c!ky8HLoR4`LDBBzT8B7#_`;rn zVApbeDtuMCc2-vjx!2cuC[F0eoP4AD%tW147Ue2z;S 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 DKQ~+C diff --git a/rsts/concepts/launchplans.rst b/rsts/concepts/launchplans.rst deleted file mode 100644 index 2efb6af998..0000000000 --- a/rsts/concepts/launchplans.rst +++ /dev/null @@ -1,57 +0,0 @@ -.. _divedeep-launchplans: - -Launch plans -============ - -.. tags:: Basic, Glossary, Design - -Launch plans help execute workflows. A workflow can be associated with multiple launch plans and launch plan versions, but an individual launch plan is always associated with a single, specific workflow. After creating a launch plan, it is easy to share and execute them. - -Launch plans provide a way to templatize Flyte workflow invocations. Launch plans contain a set of bound workflow inputs that are passed as arguments to create an execution. Launch plans do not necessarily contain the entire set of required workflow inputs, but a launch plan is always necessary to trigger an execution. Additional input arguments can be provided at execution time to supplement launch plan static input values. - -In addition to templatized inputs, launch plans allow you to run your workflow on one or multiple schedules. Each launch -plan can optionally define a single schedule (which can be easily disabled by disabling the launch plan) as well as -optional notifications. Refer to the :ref:`deployment-configuration-notifications` for a deep dive into available notifications. - -The Association between Workflows and LaunchPlans -------------------------------------------------- - -Every workflow comes with a `default` launch plan that has the same name as that of a workflow. The default launch plan is authored (in code) as part of creating a new workflow. -A launch plan version can only ever be mapped to one workflow version; meaning a launch plan version cannot be used twice. This is because part of what makes a new launch plan version is the mapping to the specific workflow version. - -.. note:: - Users rarely interact with the default launch plan. - -Suppose we have ``Workflow A`` in ``version 1``, ``LaunchPlans`` ``A`` and ``B`` in ``version 1``, and ``LaunchPlan`` ``B`` in ``version 2``, then: - -1. ``Workflow A`` can be associated with ``LaunchPlan A`` (version 1); -2. ``Workflow A`` can be associated with ``LaunchPlan B`` (different launch plan name; version 1); -3. ``Workflow A`` can be associated with ``LaunchPlan B`` (version 2). - - -What do Launch Plans Provide? ------------------------------- - -- One click invocation of workflows with predefined inputs and friendly launch plan names. -- Multiple schedules with different default values for inputs per workflow. -- Ability to easily enable and disable schedules. -- Can be created dynamically with flyteclient or statically using the Flyte SDK. -- Associate different notifications with your workflows. -- Restrict inputs to be passed to the workflows at launch time using the :ref:`fixed_inputs ` parameter. -- Multiple versions of the launch plan (with same name) with only one active version. Schedule will reflect only on the active launch plan version. - -.. _concepts-launchplans-inputs: - -Launch plan inputs ------------------- -Generally launch plan inputs correspond to their related workflow definition's inputs, in that the variable type and names are expected to match. Launch plans cannot introduce any inputs not defined in the core workflow definition. However, launch plan inputs differ slightly from workflow inputs in that the former are categorized into **default inputs** and **fixed inputs**. - -Default Inputs -^^^^^^^^^^^^^^ -Default inputs behave much like default workflow inputs. As their name implies, default inputs provide default workflow input values at execution time in the absence of any dynamically provided values. - -.. _fixed_inputs: - -Fixed Inputs -^^^^^^^^^^^^ -Fixed inputs cannot be overridden. If a workflow is executed with a launch plan and dynamic inputs that attempt to redefine the launch plan's fixed inputs, the execution creation request *will fail*. diff --git a/rsts/concepts/nodes.rst b/rsts/concepts/nodes.rst deleted file mode 100644 index d67c15457c..0000000000 --- a/rsts/concepts/nodes.rst +++ /dev/null @@ -1,34 +0,0 @@ -.. _divedeep-nodes: - -Nodes -===== - -.. tags:: Basic, Glossary - -A node represents a unit of execution or work within a workflow. Ordinarily, a node encapsulates an instance of -a :ref:`task `, but it can also contain an entire subworkflow or trigger an external workflow. -Nodes can have inputs and outputs, which are used to coordinate task inputs and outputs. -Moreover, node outputs can be used as inputs to other nodes within a workflow. - -Tasks are always encapsulated within a node. Like tasks, nodes can come in a variety of flavors determined by their *target*. -These targets include :ref:`task nodes `, :ref:`workflow nodes `, and :ref:`branch nodes `. - -.. _divedeep-task-nodes: - -Task Nodes ----------- - -Tasks referenced in a workflow are always enclosed in nodes. This extends to all task types. -For example, an array task will be enclosed by a single node. - -.. _divedeep-workflow-nodes: - -Workflow Nodes --------------- -A node can contain an entire sub-workflow. Since workflow executions always require a launch plan, workflow nodes have a reference to a launch plan to trigger their enclosed workflows. - -.. _divedeep-branch-nodes: - -Branch Nodes ------------- -Branch nodes alter the flow of the workflow graph. Conditions at runtime are evaluated to determine the control flow. diff --git a/rsts/concepts/projects.rst b/rsts/concepts/projects.rst deleted file mode 100644 index 99ed0daf3f..0000000000 --- a/rsts/concepts/projects.rst +++ /dev/null @@ -1,14 +0,0 @@ -.. _divedeep-projects: - -Projects -======== - -.. tags:: Basic, Glossary - -A project in Flyte is a group of :ref:`workflows ` and :ref:`tasks ` tied together to achieve a goal. - -A Flyte project can map to an engineering project or everything that's owned by a team or an individual. There cannot be multiple projects with the same name in Flyte. - -Since the fully-qualified name for tasks and workflows include the project and domain name, the task/workflow names are only required to be unique within a project. The workflows in a project ``A`` can refer to tasks and workflows in other projects using the fully-qualified name. - -Flyte allows users to set resource limits and provides basic reports and dashboards automatically for each project. The information captured in these reports includes workflow/task level insights, resource usage, and billing information. \ No newline at end of file diff --git a/rsts/concepts/registration.rst b/rsts/concepts/registration.rst deleted file mode 100644 index bc745f7a0f..0000000000 --- a/rsts/concepts/registration.rst +++ /dev/null @@ -1,33 +0,0 @@ -.. _divedeep-registration: - -############ -Registration -############ - -.. tags:: Basic, Glossary, Design - -During registration, Flyte validates the workflow structure and saves the workflow. The registration process also updates the workflow graph. - -.. image:: https://raw.githubusercontent.com/flyteorg/static-resources/main/flyte/concepts/executions/flyte_wf_registration_overview.svg?sanitize=true - -Typical Flow -------------- -The following steps elaborate on the specifics of the registration process: - -* Define the tasks using the :py:mod:`Flytekit ` Task Definition language. -* Define a workflow using the :py:mod:`Flytekit ` Workflow definition language. -* Use `flytectl register CLI `__ to compile the tasks into their serialized representation as described in :std:ref:`Flyte Specification language `. During this, the task representation is bound to a container that constitutes the code for the task. This associated entity is registered with FlyteAdmin using the registerTask API. -* Use flytectl register CLI to compile the workflow into their serialized representation as described in :std:ref:`Flyte Specification language `. The referenced tasks are replaced by their FlyteAdmin registered Identifiers, obtained in the previous step. The associated entity is registered with FlyteAdmin using the registerWorkflow API. -* Launch an execution using the FlyteAdmin launch execution API, which requires the necessary inputs provided. This is automatically done if the user uses flytectl to launch the execution. -* Use the FlyteAdmin read APIs to get details of the execution, monitor it to completion, or retrieve a historical execution. -* **OR** use the FlyteConsole to visualize the execution in real time as it progresses or visualize any historical execution. The console makes it easy to view debugging information for the execution. -* Set specific rules such as *notification* on **failure** or **success** or publish all events in the execution to a pub-sub system. -* Query the datastore to get a summary of all the executions and the compute resources consumed. - -.. note:: - Workflows and tasks are purely specifications and can be provided using tools like ``YAML``, ``JSON``, ``protobuf binary`` or any other programming language, and hence registration is possible using other tools. Contributions welcome! - -Registration in the Backend ---------------------------- - -When FlyteAdmin receives a workflow registration request, it uses the workflow compiler to compile and validate the workflow. It also fetches all the referenced tasks and creates a complete workflow closure, which is stored in the metastore. If the workflow compilation fails, the compiler returns an error to the client. diff --git a/rsts/concepts/schedules.rst b/rsts/concepts/schedules.rst deleted file mode 100644 index 34644b217b..0000000000 --- a/rsts/concepts/schedules.rst +++ /dev/null @@ -1,102 +0,0 @@ -.. _concepts-schedules: - -Schedules -========= - -.. tags:: Basic, Glossary - -Workflows can be run automatically using :ref:`schedules ` associated with launch plans. - -Only one launch plan version for a given {Project, Domain, Name} combination can be active, which means only one schedule can be active for a launch plan. This is because a single active schedule can exist across all versions of the launch plan. - -A :ref:`workflow ` version can have multiple schedules associated with it, given that these schedules exist as versions of different launch plans. - -Creating a new schedule creates a new version of the launch plan. -If you wish to change a schedule, you will have to create a new version of that launch plan since a **schedule cannot be edited**. - -FlyteAdmin keeps track of the newly-added schedules, and searches through all the versions of launch plans to set them to 'deactivated'. - -The launch plan versions with schedules that were previously deactivated can be manually used, by clicking on the launch button and selecting the specific launch plan version. - -Let's now look at how schedules can be defined through cron_expression_ or rate_unit_. - -.. _cron_expression: - -Cron Expression ---------------- -Cron expression strings use :ref:`this ` syntax. They are validated at launch plan registration time. - -.. _rate_unit: - -Format ------- - -A cron expression represents a set of times, with the help of 5 space-separated fields. - -.. _cron_expression_table: - -+--------------+------------+-----------------+----------------------------+ -| Field name | Mandatory? | Allowed values | Allowed special characters | -+==============+============+=================+============================+ -| Minutes | Yes | 0-59 | * / , - | -+--------------+------------+-----------------+----------------------------+ -| Hours | Yes | 0-23 | * / , - | -+--------------+------------+-----------------+----------------------------+ -| Day of month | Yes | 1-31 | * / , - ? | -+--------------+------------+-----------------+----------------------------+ -| Month | Yes | 1-12 or JAN-DEC | * / , - | -+--------------+------------+-----------------+----------------------------+ -| Day of week | Yes | 0-6 or SUN-SAT | * / , - ? | -+--------------+------------+-----------------+----------------------------+ - -**Note**: The 'Month' and 'Day of week' fields are case insensitive. - - -Cron schedules --------------- -An incorrect cron schedule expression leads to a failure in triggering the schedule. :ref:`Here ` is a table that shows the format of a cron expression. - -Below is another example: - -.. code-block:: default - - cron_lp_every_min_of_hour = LaunchPlan.get_or_create( - name="my_cron_scheduled_lp", - workflow=date_formatter_wf, - schedule=CronSchedule( - # Note that kickoff_time_input_arg matches the workflow input we defined above: kickoff_time - # But in case you are using the AWS scheme of schedules and not using the native scheduler then switch over the schedule parameter with cron_expression - schedule="@hourly", # Following schedule runs every hour at beginning of the hour - kickoff_time_input_arg="kickoff_time", - ), - - ) - - -Fixed rate schedules ----------------------- -Instead of cron schedules, fixed rate schedules can be used. - -You can specify the duration in the schedule using `timedelta`, that supports `minutes`, `hours`, `days` and `weeks`. - -:ref:`Here ` is an example with duration in `minutes`. - -Below is an example with duration in `days`. - -.. code-block:: default - - fixed_rate_lp_days = LaunchPlan.get_or_create( - name="my_fixed_rate_lp_days", - workflow=positive_wf, - # Note that the above workflow doesn't accept any kickoff time arguments. - # We omit the ``kickoff_time_input_arg`` from the FixedRate schedule invocation - schedule=FixedRate(duration=timedelta(days=1)), - fixed_inputs={"name": "you"}, - -) - - -Rate Unit ---------- - -Schedules can also be defined using fixed rates in units of **days**, **hours** and **minutes**. diff --git a/rsts/concepts/state_machine.rst b/rsts/concepts/state_machine.rst deleted file mode 100644 index ce570e2f3e..0000000000 --- a/rsts/concepts/state_machine.rst +++ /dev/null @@ -1,154 +0,0 @@ -.. _divedeep-state-machine: - -################################################ -Understanding the State Transition in a Workflow -################################################ - -.. tags:: Basic, Design - -High Level Overview of How a Workflow Progresses to Success -=========================================================== - -.. mermaid:: - - flowchart TD - id1(( )) - id1 --> Ready - Ready --> Running - subgraph Running - id2(( )) - id2 --> NodeQueued - NodeQueued --> NodeRunning - subgraph NodeRunning - id3(( )) - id3 --> TaskQueued - TaskQueued --> TaskRunning - TaskRunning --> TaskSuccess - end - TaskSuccess --> NodeSuccess - end - NodeSuccess --> Success - - -This state diagram illustrates a high-level, simplistic view of the state transitions that a workflow with a single task and node would go through as the user observes success. - -The following sections explain the various observable (and some hidden) states for workflow, node, and task state transitions. - -Workflow States -=============== - -.. mermaid:: - - flowchart TD - Queued -->|On system errors more than threshold| Aborted - Queued --> Ready - Ready--> |Write inputs to workflow| Running - Running--> |On system error| Running - Running--> |On all Nodes Success| Succeeding - Succeeding--> |On successful event send to Admin| Succeeded - Succeeding--> |On system error| Succeeding - Ready--> |On precondition failure| Failing - Running--> |On any Node Failure| Failing - Ready--> |On user initiated abort| Aborting - Running--> |On user initiated abort| Aborting - Succeeding--> |On user initiated abort| Aborting - Failing--> |If Failure node exists| HandleFailureNode - Failing--> |On user initiated abort| Aborting - HandleFailureNode--> |On completing failure node| Failed - HandleFailureNode--> |On user initiated abort| Aborting - Failing--> |On successful send of Failure node| Failed - Aborting--> |On successful event send to Admin| Aborted - -A workflow always starts in the ``Ready`` state and ends either in ``Failed``, ``Succeeded``, or ``Aborted`` state. -Any system error within a state causes a retry on that state. These retries are capped by :ref:`system retries ` which eventually lead to an ``Aborted`` state if the failure persists. - -Every transition between states is recorded in FlyteAdmin using :std:ref:`workflowexecutionevent `. - -The phases in the above state diagram are captured in the admin database as specified here :std:ref:`workflowexecution.phase ` and are sent as a part of the Execution event. - -The state machine specification for the illustration can be found `here `__. - - -Node States -=========== - -.. mermaid:: - - flowchart TD - id1(( )) - id1-->NotYetStarted - id1-->|Will stop the node execution |Aborted - NotYetStarted-->|If all upstream nodes are ready, i.e, inputs are ready | Queued - NotYetStarted--> |If the branch was not taken |Skipped - Queued-->|Start task execution- attempt 0 | Running - Running-->|If task timeout has elapsed and retry_attempts >= max_retries|TimingOut - Running-->|Internal state|Succeeding - Running-->|For dynamic nodes generating workflows| DynamicRunning - DynamicRunning-->TimingOut - DynamicRunning-->RetryableFailure - TimingOut-->|If total node timeout has elapsed|TimedOut - DynamicRunning-->Succeeding - Succeeding-->|User observes the task as succeeded| Succeeded - Running-->|on retryable failure| RetryableFailure - RetryableFailure-->|if retry_attempts < max_retries|Running - RetryableFailure-->|retry_attempts >= max_retries|Failing - Failing-->Failed - Succeeded-->id2(( )) - Failed-->id2(( )) - - -This state diagram illustrates the node transition through various states. This is the core finite state machine for a node. -From the user's perspective, a workflow simply consists of a sequence of tasks. But to Flyte, a workflow internally creates a meta entity known as **node**. - -Once a Workflow enters the ``Running`` state, it triggers the phantom ``start node`` of the workflow. The ``start node`` is considered to be the entry node of any workflow. -The ``start node`` begins by executing all its child-nodes using a modified Depth First Search algorithm recursively. - -Nodes can be of different types as listed below, but all the nodes traverse through the same transitions: - -#. Start Node - Only exists during the execution and is not modeled in the core spec. -#. :std:ref:`Task Node ` -#. :std:ref:`Branch Node ` -#. :std:ref:`Workflow Node ` -#. Dynamic Node - Just a task node that does not return output but constitutes a dynamic workflow. - When the task runs, it remains in the ``RUNNING`` state. Once the task completes and Flyte starts executing the dynamic workflow, - the overarching node that contains both the original task and the dynamic workflow enters `DYNAMIC_RUNNING` state. -#. End Node - Only exists during the execution and is not modeled in the core spec - -Every transition between states is recorded in FlyteAdmin using :std:ref:`nodeexecutionevent `. - -Every ``NodeExecutionEvent`` can have any :std:ref:`nodeexecution.phase `. - -.. note:: TODO: Add explanation for each phase. - -The state machine specification for the illustration can be found `here `__. - -Task States -=========== - -.. mermaid:: - - flowchart TD - id1(( )) - id1-->|Aborted by NodeHandler- timeouts, external abort, etc,.| NotReady - id1-->Aborted - NotReady-->|Optional-Blocked on resource quota or resource pool | WaitingForResources - WaitingForResources--> |Optional- Has been submitted, but hasn't started |Queued - Queued-->|Optional- Prestart initialization | Initializing - Initializing-->|Actual execution of user code has started|Running - Running-->|Successful execution|Success - Running-->|Failed with a retryable error|RetryableFailure - Running-->|Unrecoverable failure, will stop all execution|PermanentFailure - Success-->id2(( )) - RetryableFailure-->id2(( )) - PermanentFailure-->id2(( )) - - -The state diagram above illustrates the various states through which a task transitions. This is the core finite state machine for a task. - -Every transition between states is recorded in FlyteAdmin using :std:ref:`taskexecutionevent `. - -Every ``TaskExecutionEvent`` can have any :std:ref:`taskexecution.phase `. - -.. note:: TODO: Add explanation for each phase. - -The state machine specification for the illustration can be found `here `__. diff --git a/rsts/concepts/tasks.rst b/rsts/concepts/tasks.rst deleted file mode 100644 index cd1059d2f4..0000000000 --- a/rsts/concepts/tasks.rst +++ /dev/null @@ -1,122 +0,0 @@ -.. _divedeep-tasks: - -Tasks -===== - -.. tags:: Basic, Glossary - -Tasks are fully independent units of execution and first-class entities of Flyte. -They are the fundamental building blocks and extension points that encapsulate the users' code. - -Characteristics ---------------- - -A Flyte task is characterized by: - -1. A combination of :ref:`projects ` and :ref:`domains `, -2. A unique unicode name (we recommend it not to exceed 32 characters), -3. A version string, and/or -4. *Optional* Task interface definition. - - For tasks to exchange data with each other, a task can define a signature (much like a function/method - signature in programming languages). A task interface defines the input and output variables — - :std:ref:`variablesentry ` - and their types, :std:ref:`literaltype `. - -Can "X" Be a Flyte Task? -------------------------- - -When deciding if a unit of execution constitutes a Flyte task, consider these questions: - -- Is there a well-defined graceful/successful exit criteria for the task? A task is expected to exit after completion of input processing. -- Is it repeatable? Under certain circumstances, a task might be retried, rerun, etc. with the same inputs. It is expected - to produce the same output every single time. For example, avoid using random number generators with current clock as seed. Use a system-provided clock as the seed instead. -- Is it a pure function, i.e., does it have side effects that are unknown to the system (calls a web-service)? It is recommended to avoid side-effects in tasks. When side-effects are evident, ensure that the operations are idempotent. - -Dynamic Tasks --------------- - -"Dynamic tasks" is a misnomer. -Flyte is one-of-a-kind workflow engine that ships with the concept of truly `Dynamic Workflows `__! -Users can generate workflows in reaction to user inputs or computed values at runtime. -These executions are evaluated to generate a static graph before execution. - -Extending Task ---------------- - -Plugins -^^^^^^^ - -Flyte exposes an extensible model to express tasks in an execution-independent language. -It contains first-class task plugins (for example: `Papermill `__, -`Great Expectations `__, and :ref:`more `.) -that execute the Flyte tasks. -Almost any action can be implemented and introduced into Flyte as a "Plugin", which includes: - -- Tasks that run queries on distributed data warehouses like Redshift, Hive, Snowflake, etc. -- Tasks that run executions on compute engines like Spark, Flink, AWS Sagemaker, AWS Batch, Kubernetes pods, jobs, etc. -- Tasks that call web services. - -Flyte ships with certain defaults, for example, running a simple Python function does not need any hosted service. Flyte knows how to -execute these kinds of tasks on Kubernetes. It turns out these are the vast majority of tasks in machine learning, and Flyte is adept at -handling an enormous scale on Kubernetes. This is achieved by implementing a unique scheduler on Kubernetes. - -Types -^^^^^ - -It is impossible to define the unit of execution of a task in the same way for all tasks. Hence, Flyte allows for different task -types in the system. Flyte has a set of defined, battle-tested task types. It allows for a flexible model to -:std:ref:`define new types `. - -Inherent Features ------------------ - -Fault tolerance -^^^^^^^^^^^^^^^ - -In any distributed system, failure is inevitable. Allowing users to design a fault-tolerant system (e.g. workflow) is an inherent goal of Flyte. -At a high level, tasks offer two parameters to achieve fault tolerance: - -**Retries** - -Tasks can define a retry strategy to let the system know how to handle failures (For example: retry 3 times on any kind of error). - -There are two kinds of retries: - -1. System retry: It is a system-defined, recoverable failure that is used when system failures occur. The number of retries is validated against the number of system retries. - -.. _system-retry: - -System retry can be of two types: - -- **Downstream System Retry**: When a downstream system (or service) fails, or remote service is not contactable, the failure is retried against the number of retries set `here `__. This performs end-to-end system retry against the node whenever the task fails with a system error. This is useful when the downstream service throws a 500 error, abrupt network failure, etc. - -- **Transient Failure Retry**: This retry mechanism offers resiliency against transient failures, which are opaque to the user. It is tracked across the entire duration of execution. It helps Flyte entities and the additional services connected to Flyte like S3, to continue operating despite a system failure. Indeed, all transient failures are handled gracefully by Flyte! Moreover, in case of a transient failure retry, Flyte does not necessarily retry the entire task. “Retrying an entire task” means that the entire pod associated with the Flyte task would be rerun with a clean slate; instead, it just retries the atomic operation. For example, Flyte tries to persist the state until it can, exhausts the max retries, and backs off. - - To set a transient failure retry: - - - Update `MaxWorkflowRetries `__ in the propeller configuration. - - - Or update `max-workflow-retries `__ in helm. - -2. User retry: If a task fails to execute, it is retried for a specific number of times, and this number is set by the user in `TaskMetadata `__. The number of retries must be less than or equal to 10. - -.. note:: - - Recoverable vs. Non-Recoverable failures: Recoverable failures will be retried and counted against the task's retry count. Non-recoverable failures will just fail, i.e., the task isn’t retried irrespective of user/system retry configurations. All user exceptions are considered non-recoverable unless the exception is a subclass of FlyteRecoverableException. - - -.. note:: - - `RFC 3902 `_ implements an alternative, simplified retry behaviour with which both system and user retries are counted towards a single retry budget defined in the task decorator (thus, without a second retry budget defined in the platform configuration). The last retries are always performed on non-spot instances to guarantee completion. To activate this behaviour, set ``configmap.core.propeller.node-config.ignore-retry-cause`` to ``true`` in the helm values. - -**Timeouts** - -To ensure that the system is always making progress, tasks must be guaranteed to end gracefully/successfully. The system defines a default timeout period for the tasks. It is possible for task authors to define a timeout period, after which the task is marked as ``failure``. Note that a timed-out task will be retried if it has a retry strategy defined. The timeout can be handled in the `TaskMetadata `__. - - -Caching/Memoization -^^^^^^^^^^^^^^^^^^^ - -Flyte supports memoization of task outputs to ensure that identical invocations of a task are not executed repeatedly, thereby saving compute resources and execution time. For example, if you wish to run the same piece of code multiple times, you can reuse the output instead of re-computing it. -For more information on memoization, refer to the :std:doc:`Caching Example `. diff --git a/rsts/concepts/versioning.rst b/rsts/concepts/versioning.rst deleted file mode 100644 index 42df830e6c..0000000000 --- a/rsts/concepts/versioning.rst +++ /dev/null @@ -1,104 +0,0 @@ -.. _divedeep-versioning: - -Versions -======== - -.. tags:: Basic, Glossary - -One of the most important features and reasons for certain design decisions in Flyte is the need for machine learning and data practitioners to experiment. -When users experiment, they do so in isolation and try multiple iterations. -Unlike traditional software, the users must conduct multiple experiments concurrently with different environments, algorithms, etc. -This may happen when multiple data scientists simultaneously iterate on the same workflow/pipeline. - -The cost of creating an independent infrastructure for each version is enormous and undesirable. -It is beneficial to share the same centralized infrastructure, where the burden of maintaining the infrastructure is with a central infrastructure team, -while the users can use it independently. This improves the cost of operation since the same infrastructure can be reused by multiple teams. - -Versioned workflows help users quickly reproduce prior results or identify the source of previous successful experiments. - -Why Do You Need Versioning? ---------------------------- - -Versioning is required to: - -- Work on the same project concurrently and identify the version/experiment that was successful. -- Capture the environment for a version and independently launch it. -- Visualize prior runs and tie them to experiment results. -- Rollback to production deployments in case of failures with ease. -- Execute multiple experiments in production, which may use different training or data processing algorithms. -- Understand how a specific system evolved and answer questions related to the effectiveness of a specific strategy. - -Operational Benefits of Completely Versioned Workflows/Pipelines -------------------------------------------------------------------- - -The entire workflow in Flyte is versioned and all tasks and entities are immutable which makes it possible to completely change the structure of a workflow between versions, without worrying about the consequences for the pipelines in production. -This hermetic property makes it effortless to manage and deploy new workflow versions and is important for workflows that are long-running. -If a workflow execution is in progress and another new workflow version has been activated, Flyte guarantees that the execution of the old version continues unhindered. - -Consider a scenario where you need to run all the previous executions if there's a bug to be fixed. -Simply fixing the bug in the task may not solve the problem. -Moreover, fixing bugs involves code changes, which may affect the workflow structure. -Flyte addresses this using two properties: - -1. Since the entire workflow is versioned, changing the structure has no impact on the existing execution, and the workflow state won't be corrupted. -2. Flyte provides caching/memoization of outputs. As long as the tasks and their behavior have not changed, it is possible to move them around and still recover their previous outputs, without having to rerun the tasks. This strategy will work even if the workflow changes are in a task. - -Let us take a sample workflow: - -.. mermaid:: - - graph TD; - A-->B; - B-->C; - C-->D; - -In the above graph, let us assume that task `C` fails. It is then possible to simply fix `C` and ``relaunch`` the previous execution (maintaining the inputs etc). This will not re-run tasks ``A``, and ``B`` as long as they are marked as `cache=True`. - -Now, let us consider that the only solution to fix the bug is to change the graph structure and introduce a new step ``B1`` that short circuits the execution to ``D``: - -.. mermaid:: - - graph TD; - A-->B; - B-->B1; - B1-->D; - B1-->C; - C-->D; - -The same ``cache=True`` will handle this complicated situation as well. - -Why Is Versioning Hard? ------------------------ - -Git has become the defacto-standard in version control for code, making it easy to work on branches, merge them, and revert unwanted changes. -But achieving this for a live (running) algorithm usually requires the entire infrastructure to be associated and potentially re-created for every execution. - -How Is Versioning Tied to Reproducibility? ------------------------------------------- - -Workflows can be reproduced without explicit versioning within the system. -To reproduce a past experiment, users need to identify the source code and resurrect any dependencies that the code may have used (for example, TensorFlow 1.x instead of TensorFlow 2.x, or specific Python libraries). -It is also required to instantiate the infrastructure that the previous version may have used. If not recorded, you'll have to ensure that the previously used dataset (say) can be reconstructed. - -This is exactly how Flyte was conceived! - -In Flyte, every task is versioned, and it precisely captures the dependency set. For external tasks, memoization is recommended so that the constructed dataset can be cached on the Flyte side. This way, one can guarantee reproducible behavior from the external systems. - -Moreover, every piece of code is registered with the version of the code that was used to create the instance. -Therefore, users can easily construct the data lineage for all the parts of the workflow. - -What Is the Cost of Versioning & Reproducibility? -------------------------------------------------- - -One of the costs of versioning and allowing on-demand reproducibility is the need to re-instantiate the infrastructure from scratch. -This may sometimes result in additional overhead. However, the advent of Docker containers and Kubernetes has made it possible to build a platform to achieve these goals. - -.. admonition:: Coming soon! - - We are working on reducing the penalty of on-demand infrastructure creation while still maintaining the guarantees. Stay tuned! - -What Is the Best Way to Version Your Tasks and Workflows? ---------------------------------------------------------- - -The best way to version tasks and workflows is to independently version every task with the GIT-SHA or hash of the entire code artifact. -The workflows are also versioned using the GIT-SHA of the containing repository. diff --git a/rsts/concepts/workflow_lifecycle.rst b/rsts/concepts/workflow_lifecycle.rst deleted file mode 100644 index efb11e52d8..0000000000 --- a/rsts/concepts/workflow_lifecycle.rst +++ /dev/null @@ -1,246 +0,0 @@ -.. _workflow-lifecycle: - -################################################################# -Understand the Lifecycle of a Flyte Workflow -################################################################# - -.. tags:: Basic, Design - -Let's understand how Flyte's plugin machinery works and how information flows from one component to another in Flyte. - -Under the hood, Flyte relies on a primitive called “Plugins”. Every task that you run on Flyte is powered by a plugin. Some of these plugins are native and guaranteed by Flyte system. These native plugins, for example, run your Flyte tasks inside a k8s pod. There are three native plugins, namely, ``Container``, ``K8sPod``, and ``Sql``. - -Moreover, there are plugins that are actual extensions; they create additional infrastructure and communicate with SaaS on your behalf. Examples include :ref:`Spark `, :ref:`AWS Athena `, etc. - -A plugin requires code to live in multiple locations. - -1. Some parts of plugins logic resides in Flytekit's SDK. This let users define tasks. You can find this logic in Flytekit’s Python (https://github.com/flyteorg/flytekit/tree/master/plugins). Think of this as a client for an RPC service or a web service - -2. Another big chunk of plugins logic lives in - `Flyteplugins `__. This is a library that gets loaded into `FlytePropeller `__. - FlytePropeller (a Kubernetes operator) loads Flyteplugins upon starting. - FlytePropeller is aware of the plugins and their dependency on task execution. - However, FlytePropeller is unaware of how these plugins are executed. - ------------- - -To better Illustrate how things work, lets take for example the “Spark” -plugin and understand what is the sequence of steps that take place for -it to work. - -The Spark plugin lets a user define a task that has access to a Spark Session. -In the background Flyte will provide all the needed infrastructure such that by the time the declared task needs to run, all needed Spark infrastructure is ready and running. - -1. User codes in python a task that uses Spark (See code below) - -.. code:: python - - @task( - task_config=Spark( - spark_conf={ - "spark.driver.memory": "1000M", - "spark.executor.instances": "2", - "spark.driver.cores": "1", - } - ) - ) - def hello_spark(i: int) -> float: - ... - ... - -As mentioned earlier some part of plugin logic lives on the SDK. In this -case think of ``Spark`` data class here as a placeholder for all the -Spark settings that we need our plugin to know. We need to pass this -data across multiple places. This is the config that Flyte operator (Flytepropeller) -will need in order to build the needed spark cluster. ``Spark`` class also tells -Flytekit’s SDK that this task will run as a ``PysparkFunctionTask`` -because ``task_config`` points to a ``Spark`` object instance, this is -clearly illustrated `in spark plugin registration step run in the -background `__ - -2. Once the user has finished writing needed Workflows. A packaging step - is needed before user can run the workflows. This packaging step - transforms workflows and tasks we described in python into a Protobuf - representation. This protobuf representation is used by Flyte across its multiple codebases. For - further details on the protobuf representation check `FlyteIdl - repository `__ . Package step is carried out by the sdk tooling you are using. - -This serialization step will transform our ``hello_spark`` task into a -protobuf representation. It will also transform other tasks, workflows -and launch plans to a protobuf representation. - -Our ``hello_spark`` protobuf representation will look as below. A Task -is serialized as a -`TaskTemplate `__ -as defined in ``FlyteIDL``. - -:: - - Id: Task, "example.example.hello_spark" - Type: "Spark" - Metadata: - runtime: - type: FLYTE_SDK - version: 1.0.3 - flavor: python - - interface: - inputs: - i : - type : simple:Integer - description: "i" - outputs: - o0: - type: FLOAT - description: o0 - custom: - executorpath: "/opt/venv/bin/python3" - mainApplicationFile: /opt/venv/bin/entrypoint.py - sparkConf: - spark.driver.cores: 1 - spark.executor.instances: 2 - spark.driver.memory: 1000M - - - Container: - image: "hello_world:1" - args: - [ - "pyflyte-execute" - "--inputs" - "{{.input}}" - "--output-prefix" - "{{.outputPrefix}}" - "--raw-output-data-prefix" - "{{.rawOutputDataPrefix}}" - "--checkpoint-path" - "{{.checkpointOutputPrefix}}" - "--prev-checkpoint" - "{{.prevCheckpointPrefix}}" - "--resolver" - "flytekit.core.python_auto_container.default_task_resolver" - "--" - "task-module" - "example.example" - "task-name" - "hello_spark" - ] - -This representation is generated within Flytekit. Essentially the SDK is -generating the instructions that Flyte’s kubernetes operator needs to -know in order to run this task at a later stage. - -The ``Type`` field is really important as we will see later this will be -used by Flytepropeller (Kubernetes Operator) to know “how” to execute -this task. - -``Interface`` contains information about what are the inputs and outputs -of our task. Flyte uses this interface to check if tasks are composible. - -``Custom`` is a collection of arbitrary Key/Values, think of it as a -Json dict that any plugin can define as it wishes. In this case the -Spark plugin expects all its particular settings in this field i.e: -Spark workers, driver memory etc. - -`Container `__ -is part of Flyte’s IDL primitives. Essentially any Flyte task is ran as -either three primitives a ``Container`` a ``K8sPod`` or ``Sql``. Every -task contains a ``Target`` which has to be either of these. In this -particular case, our Spark cluster is a ``Container`` target. A -``Container`` specifies all the needed parameters you would in a K8s -ContainerSpec i.e: What docker image to run, what is the command that -will be ran, args etc. - -It is important for the reader to note that Flyte expects to run in a -container that has an entrypoint called ``pyflyte-execute``. This -entrypoint is provided when you ``pip install flytekit``. This -entrypoint and flytekit is what provides a lot of the plumbing logic -inside Flyte. For example It is this entrypoint what automagically -deserializes parquet dataframes an injects them to our task’s functions -if need be. - -It should be clear to the reader that a lot of parameters are surrounded -by ``{}`` these are template variables that are to be rendered at -execution time. - -What is important from this representation is that it contains all the -information that Flyte’s operator needs to know to execute this task: It -is a ``"Spark"`` task, it has a function signature (inputs and outputs), -it tells what docker image to run, and finally, it tells what spark -settings are needed for the cluster. - -For more information on why this task contains these fields check -``TaskTemplate`` in `FlyteIDL -repository `__. -I strongly advice you to take a look at the data structures in this file -as they provide good insight in the interfaces used all across Flyte’s -codebases. - -3. Once user has packaged workflows and tasks then a registration step - is needed. During registration Flyte adds these protocolbuffer files to its - database, essentially making these tasks and workflows runnable for - the user. Registration is done via `Flytectl ` __ - -4. At somepoint a Flyte user will trigger a Workflow run. The workflow - run will start running the defined DAG. Eventually our Spark task - will need to run,. This is where the second step of a plugin kicks - in. Flytepropeller (Kubernetes Operator) will realize that this is a - Task of type ``Spark`` and it will handle it differently. - - - FlytePropeller knows a task is of type Spark, because our ``TaskTemplate`` defined it so ``Type: Spark`` - - - Flyte has a ``PluginRegistry`` which has a dictionary from ``Task Type`` to ``Plugin Handlers``. - - - At run time Flytepropeller will run our task, Flytepropeller will figure out it is a Spark task, and then call the method ``BuildResource`` in Spark's plugin implementation. ``BuildResource`` is a method that each plugin has to implement. - - - `Plugin `__ is a Golang interface providing an important method ``BuildResource`` - - - Spark has its own Plugin defined `here in Flyteplugins repo `__ - -Inside Spark’s -`BuildResource `__ -method is where magic happens. At task runtime: - - - Flytepropeller will call ``BuildResource`` method. This method will ask for the ``Custom`` field, tasks flagged as ``type=Spark`` will have a dictionary containing all sort of Spark settings. - - - Using these settings Flytepropeller will use Spark’s K8s Operator to spawn a spark cluster on the go and run a Spark app (Our python task). - - - The spark app will run a pod with ``pyflyte-execute`` as entrypoint. All the inputs and outputs rendered to what they need to be i.e: paths to the actual data inputs instead of ``{{input}}`` - - - For more information on Spark’s K8s operator see : `SparkApplicationSpec `__ - -5. A pod with entrypoint to ``pyflyte-execute`` execute starts running (Spark App). - - - - ``pyflyte-execute`` provides all the plumbing magic that is needed. In this particular case, It will create a SparkSession and injects it somewhere so that it is ready for when the user defined python’s code starts running. Be aware that this is part of the SDK code (Flytekit). - - - ``pyflyte-execute`` points to `execute_task_cmd `__. - - This entrypoint does a lot of things: - - - Resolves the function that the user wants to run. i.e: where is the needed package where this function lives? . this is what ``"flytekit.core.python_auto_container.default_task_resolver"`` does - - - Downloads needed inputs and do a transformation if need be. I.e: is this a Dataframe? if so we need to transform it into a Pandas DF from parquet. - - - Calls `dispatch_execute `__ . This trigger the execution of our spark task. - - - `PysparkFunctionTask `__. defines what gets run just before the user's task code gets executed. It essentially creatse a spark session and then run the user function (The actual code we want to run!). - ------------- - -Recap ------ - -- Flyte requires coordination between multiple pieces of code. In this - case the SDK and FlytePropeller (K8s operator) -- `Flyte IDL (Interface Language Definition) `__ provides some primitives - for services to talk with each other. Flyte uses Procolbuffer - representations of these primitives -- Three important primitives are : ``Container``, ``K8sPod``, ``Sql``. - At the end of the day all tasks boil down to one of those three. -- github.com/flyteorg/FlytePlugins repository contains all code for plugins: - Spark, AWS Athena, BigQuery… -- Flyte entrypoints are the ones carrying out the heavy lifting: making - sure that inputs are downloaded and/or transformed as needed. -- When running workflows on Flyte, if we want to use Flyte underlying plumbing then - we should include Flyte entrypoints: either Jflyte or Flytekit. diff --git a/rsts/concepts/workflows.rst b/rsts/concepts/workflows.rst deleted file mode 100644 index 78a3dce3bd..0000000000 --- a/rsts/concepts/workflows.rst +++ /dev/null @@ -1,51 +0,0 @@ -.. _divedeep-workflows: - -Workflows -========= - -.. tags:: Basic, Glossary - -A workflow is a directed acyclic graph (DAG) of units of work encapsulated by :ref:`nodes `. -Specific instantiations of a workflow (commonly bound with input arguments) are referred to as **workflow executions**, -or just executions. In other words, a workflow is a template for an ordered task execution. - -Flyte workflows are defined in ``protobuf`` and the flytekit SDK facilitates writing workflows. Users can define workflows as a collection of nodes. -Nodes within a workflow can produce outputs that subsequent nodes could consume as inputs. These dependencies dictate the structure of the workflow. - -Workflows written using the SDK don't need to explicitly define nodes to enclose execution units (tasks, sub-workflows, launch plans); -they will be injected by the SDK and captured at registration time. - -Structure ---------- - -Workflows accept inputs and produce outputs and reuse task definitions across :ref:`projects ` and :ref:`domains `. Every workflow has a default :ref:`launchplan ` with the same name as that of the workflow. - -Workflow structure is flexible because: - -- Nodes can be executed in parallel. -- The same task definition can be re-used within a different workflow. -- A single workflow can contain any combination of task types. -- A workflow can contain a single functional node. -- A workflow can contain multiple nodes in all sorts of arrangements. -- A workflow can launch other workflows. - -At execution time, node executions are triggered as soon as their inputs are available. - -**Workflow nodes naturally run in parallel when possible**. -For example, when a workflow has five independent nodes, i.e., when these five nodes don't consume outputs produced by other nodes, -Flyte runs these nodes in parallel in accordance with the data and resource constraints. - -Flyte-Specific Structure -^^^^^^^^^^^^^^^^^^^^^^^^ - -During :ref:`registration `, Flyte validates the workflow structure and saves the workflow. -The registration process updates the workflow graph. -A compiled workflow will always have a start and end node injected into the workflow graph. -In addition, a failure handler will catch and process execution failures. - -Versioning ----------- - -Like :ref:`tasks `, workflows are versioned too. Registered workflows are immutable, i.e., an instance of a -workflow defined by a specific {Project, Domain, Name, Version} combination can't be updated. -Tasks referenced in a workflow version are immutable and are tied to specific tasks' versions. \ No newline at end of file diff --git a/rsts/conf.py b/rsts/conf.py deleted file mode 100644 index ef3763a717..0000000000 --- a/rsts/conf.py +++ /dev/null @@ -1,273 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Configuration file for the Sphinx documentation builder. -# -# This file does only contain a selection of the most common options. For a -# full list see the documentation: -# http://www.sphinx-doc.org/en/stable/config - -# -- Path setup -------------------------------------------------------------- - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -# -# import os -# import sys -# sys.path.insert(0, os.path.abspath('.')) - -import sphinx.application -import sphinx.errors - -sphinx.application.ExtensionError = sphinx.errors.ExtensionError - -# -- Project information ----------------------------------------------------- - -project = "Flyte" -copyright = "2022, Flyte Authors" -author = "Flyte" - -# The short X.Y version -version = "" -# The full version, including alpha/beta/rc tags -release = "1.10.7-b0" - -# -- General configuration --------------------------------------------------- - -# If your documentation needs a minimal Sphinx version, state it here. -# -# needs_sphinx = '1.0' - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. -extensions = [ - "sphinx.ext.autodoc", - "sphinx.ext.autosectionlabel", - "sphinx.ext.doctest", - "sphinx.ext.intersphinx", - "sphinx.ext.todo", - "sphinx.ext.coverage", - "sphinx.ext.ifconfig", - "sphinx.ext.viewcode", - "sphinx.ext.extlinks", - "sphinx.ext.napoleon", - "sphinx.ext.doctest", - "sphinx.ext.intersphinx", - "sphinx.ext.coverage", - "sphinx-prompt", - "sphinx_copybutton", - "sphinxext.remoteliteralinclude", - "sphinx_issues", - "sphinx_panels", - "sphinxcontrib.mermaid", - "sphinxcontrib.video", - "sphinxcontrib.youtube", - "sphinx_tabs.tabs", - "sphinx_tags", -] - -extlinks = { - "propeller": ("https://github.com/flyteorg/flytepropeller/tree/master/%s", ""), - "stdlib": ("https://github.com/flyteorg/flytestdlib/tree/master/%s", ""), - "kit": ("https://github.com/flyteorg/flytekit/tree/master/%s", ""), - "plugins": ("https://github.com/flyteorg/flyteplugins/tree/v0.1.4/%s", ""), - "idl": ("https://github.com/flyteorg/flyteidl/tree/v0.14.1/%s", ""), - "admin": ("https://github.com/flyteorg/flyteadmin/tree/master/%s", ""), - "cookbook": ("https://flytecookbook.readthedocs.io/en/latest/", None), -} - -# Add any paths that contain templates here, relative to this directory. -# templates_path = ['_templates'] - -# The suffix(es) of source filenames. -# You can specify multiple suffix as a list of string: -# -# source_suffix = ['.rst', '.md'] -source_suffix = ".rst" - -# The master toctree document. -master_doc = "index" - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -# -# This is also used if you do content translation via gettext catalogs. -# Usually you set "language" from the command line for these cases. -language = 'en' - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -# This pattern also affects html_static_path and html_extra_path . -exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] - -# -- Options for HTML output ------------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -# -html_favicon = "images/flyte_circle_gradient_1_4x4.png" -html_logo = "images/flyte_circle_gradient_1_4x4.png" -html_theme = "furo" -html_title = "Flyte" - -templates_path = ["_templates"] - -pygments_style = "tango" -pygments_dark_style = "native" - -html_theme_options = { - "light_css_variables": { - "color-brand-primary": "#4300c9", - "color-brand-content": "#4300c9", - }, - "dark_css_variables": { - "color-brand-primary": "#9D68E4", - "color-brand-content": "#9D68E4", - }, - # custom flyteorg furo theme options - "github_repo": "flyte", - "github_username": "flyteorg", - "github_commit": "master", - "docs_path": "rsts", # path to documentation source - # path to directory of sphinx gallery source files relative to repo root - "sphinx_gallery_src_dir": "cookbook", - # path to root directory containing auto-generated sphinx gallery examples - "sphinx_gallery_dest_dir": "auto", -} - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -# -# html_theme_options = {} - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ["_static"] -html_css_files = ["custom.css"] - -# Custom sidebar templates, must be a dictionary that maps document names -# to template names. -# -# The default sidebars (for documents that don't match any pattern) are -# defined by theme itself. Builtin themes are using these templates by -# default: ``['localtoc.html', 'relations.html', 'sourcelink.html', -# 'searchbox.html']``. -# -# html_sidebars = {"**": ["logo-text.html", "globaltoc.html", "localtoc.html", "searchbox.html"]} - -# -- Options for HTMLHelp output --------------------------------------------- - -# Output file base name for HTML help builder. -htmlhelp_basename = "Flytedoc" - -# -- Options for LaTeX output ------------------------------------------------ - -latex_elements = { - # The paper size ('letterpaper' or 'a4paper'). - # - # 'papersize': 'letterpaper', - # The font size ('10pt', '11pt' or '12pt'). - # - # 'pointsize': '10pt', - # Additional stuff for the LaTeX preamble. - # - # 'preamble': '', - # Latex figure (float) alignment - # - # 'figure_align': 'htbp', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, -# author, documentclass [howto, manual, or own class]). -latex_documents = [ - (master_doc, "Flyte.tex", "Flyte Documentation", "Flyte Authors", "manual"), -] - -# -- Options for manual page output ------------------------------------------ - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [(master_doc, "flyte", "Flyte Documentation", [author], 1)] - -# -- Options for Texinfo output ---------------------------------------------- - -# Grouping the document tree into Texinfo files. List of tuples -# (source start file, target name, title, author, -# dir menu entry, description, category) -texinfo_documents = [ - ( - master_doc, - "Flyte", - "Flyte Documentation", - author, - "Flyte", - "Accelerate your ML and data workflows to production.", - "Miscellaneous", - ), -] - -# -- Extension configuration ------------------------------------------------- -autosectionlabel_prefix_document = True -autosectionlabel_maxdepth = 2 - -# Tags config -tags_create_tags = True -tags_page_title = "Tag" -tags_overview_title = "All Tags" - -# -- Options for intersphinx extension --------------------------------------- - -# Example configuration for intersphinx: refer to the Python standard library. -# intersphinx configuration. Uncomment the repeats with the local paths and update your username -# to help with local development. -intersphinx_mapping = { - "python": ("https://docs.python.org/3", None), - "numpy": ("https://numpy.org/doc/stable", None), - "pandas": ("https://pandas.pydata.org/pandas-docs/stable/", None), - "torch": ("https://pytorch.org/docs/master/", None), - "scipy": ("https://docs.scipy.org/doc/scipy/reference", None), - "matplotlib": ("https://matplotlib.org", None), - "flytekit": ("https://flyte.readthedocs.io/projects/flytekit/en/latest/", None), - # "flytekit": ("/Users/yourusername/go/src/github.com/flyteorg/flytekit/docs.rst/build/html", None), - "flytectl": ("https://flytectl.readthedocs.io/en/latest/", None), - # "flytectl": ("/Users/yourusername/go/src/github.com/flyteorg/flytectl/docs/build/html", None), - "cookbook": ("https://flytecookbook.readthedocs.io/en/latest/", None), - "flyteidl": ("https://docs.flyte.org/projects/flyteidl/en/latest", None), -} - - -# Sphinx-mermaid config -mermaid_output_format = "raw" -mermaid_version = "latest" -mermaid_init_js = "mermaid.initialize({startOnLoad:false});" - -# Makes it so that only the command is copied, not the output -copybutton_prompt_text = "$ " - -# prevent css style tags from being copied by the copy button -copybutton_exclude = 'style[type="text/css"]' - -# -- Options for todo extension ---------------------------------------------- - -# If true, `todo` and `todoList` produce output, else they produce nothing. -todo_include_todos = True - -# -- Options for Sphix issues extension -------------------------------------- - -# GitHub repo -issues_github_path = "flyteorg/flyte" - -# equivalent to -issues_uri = "https://github.com/flyteorg/flyte/issues/{issue}" -issues_pr_uri = "https://github.com/flyteorg/flyte/pull/{pr}" -issues_commit_uri = "https://github.com/flyteorg/flyte/commit/{commit}" - -# Usage: -# See issue :issue:`42` -# See issues :issue:`12,13` -# See :issue:`sloria/konch#45`. -# See PR :pr:`58` diff --git a/rsts/deployment/agents/bigquery.rst b/rsts/deployment/agents/bigquery.rst deleted file mode 100644 index 31d4ac6a67..0000000000 --- a/rsts/deployment/agents/bigquery.rst +++ /dev/null @@ -1,106 +0,0 @@ -.. _deployment-agent-setup-bigquery: - -Google BigQuery Agent -====================== - -This guide provides an overview of setting up BigQuery agent in your Flyte deployment. -Please note that the BigQuery agent requires Flyte deployment in the GCP cloud; -it is not compatible with demo/AWS/Azure. - -Set up the GCP Flyte cluster ----------------------------- - -* Ensure you have a functional Flyte cluster running in `GCP `__. -* Create a service account for BigQuery. For more details, refer to: https://cloud.google.com/bigquery/docs/quickstarts/quickstart-client-libraries. -* Verify that you have the correct kubeconfig and have selected the appropriate Kubernetes context. -* Confirm that you have the correct Flytectl configuration at ``~/.flyte/config.yaml``. - -Specify agent configuration ----------------------------- - -.. tabs:: - - .. group-tab:: Flyte binary - - Edit the relevant YAML file to specify the agent. - - .. code-block:: bash - - kubectl edit configmap flyte-sandbox-config -n flyte - - .. code-block:: yaml - :emphasize-lines: 7,11,16 - - tasks: - task-plugins: - enabled-plugins: - - container - - sidecar - - k8s-array - - agent-service - default-for-task-types: - - container: container - - container_array: k8s-array - - bigquery_query_job_task: agent-service - - plugins: - agent-service: - supportedTaskTypes: - - bigquery_query_job_task - - .. group-tab:: Flyte core - - Create a file named ``values-override.yaml`` and add the following configuration to it. - - .. code-block:: yaml - - configmap: - enabled_plugins: - # -- Tasks specific configuration [structure](https://pkg.go.dev/github.com/flyteorg/flytepropeller/pkg/controller/nodes/task/config#GetConfig) - tasks: - # -- Plugins configuration, [structure](https://pkg.go.dev/github.com/flyteorg/flytepropeller/pkg/controller/nodes/task/config#TaskPluginConfig) - task-plugins: - # -- [Enabled Plugins](https://pkg.go.dev/github.com/flyteorg/flyteplugins/go/tasks/config#Config). Enable sagemaker*, athena if you install the backend - enabled-plugins: - - container - - sidecar - - k8s-array - - agent-service - default-for-task-types: - container: container - sidecar: sidecar - container_array: k8s-array - bigquery_query_job_task: agent-service - plugins: - agent-service: - supportedTaskTypes: - - bigquery_query_job_task - -Ensure that the propeller has the correct service account for BigQuery. - -Upgrade the Flyte Helm release ------------------------------- - -.. tabs:: - - .. group-tab:: Flyte binary - - .. code-block:: bash - - helm upgrade flyteorg/flyte-binary -n --values - - Replace ```` with the name of your release (e.g., ``flyte-backend``), - ```` with the name of your namespace (e.g., ``flyte``), - and ```` with the name of your YAML file. - - .. group-tab:: Flyte core - - .. code-block:: bash - - helm upgrade flyte/flyte-core -n --values values-override.yaml - - Replace ```` with the name of your release (e.g., ``flyte``) - - and ```` with the name of your namespace (e.g., ``flyte``). - -For bigquery plugin on the Flyte cluster, please refer to `Bigquery Plugin Example `_ diff --git a/rsts/deployment/agents/databricks.rst b/rsts/deployment/agents/databricks.rst deleted file mode 100644 index 7d5e2bb3e6..0000000000 --- a/rsts/deployment/agents/databricks.rst +++ /dev/null @@ -1,294 +0,0 @@ -.. _deployment-agent-setup-databricks: - -Databricks Agent -================= - -This guide provides an overview of how to set up Databricks agent in your Flyte deployment. - -Spin up a cluster ------------------ - -.. tabs:: - - .. group-tab:: Flyte binary - - You can spin up a demo cluster using the following command: - - .. code-block:: bash - - flytectl demo start - - Or install Flyte using the :ref:`flyte-binary helm chart `. - - .. group-tab:: Flyte core - - If you've installed Flyte using the - `flyte-core helm chart `__, please ensure: - - * You have the correct kubeconfig and have selected the correct Kubernetes context. - * You have configured the correct flytectl settings in ``~/.flyte/config.yaml``. - -.. note:: - - Add the Flyte chart repo to Helm if you're installing via the Helm charts. - - .. code-block:: bash - - helm repo add flyteorg https://flyteorg.github.io/flyte - -Databricks workspace --------------------- - -To set up your Databricks account, follow these steps: - -1. Create a `Databricks account `__. - -.. image:: https://raw.githubusercontent.com/flyteorg/static-resources/main/flyte/deployment/plugins/databricks/databricks_workspace.png - :alt: A screenshot of Databricks workspace creation. - -2. Ensure that you have a Databricks workspace up and running. - -.. image:: https://raw.githubusercontent.com/flyteorg/static-resources/main/flyte/deployment/plugins/databricks/open_workspace.png - :alt: A screenshot of Databricks workspace. - -3. Generate a `personal access token - `__ to be used in the Flyte configuration. - You can find the personal access token in the user settings within the workspace. ``User settings`` -> ``Developer`` -> ``Access tokens`` - -.. image:: https://raw.githubusercontent.com/flyteorg/static-resources/main/flyte/deployment/plugins/databricks/databricks_access_token.png - :alt: A screenshot of access token. - -4. Enable custom containers on your Databricks cluster before you trigger the workflow. - -.. code-block:: bash - - curl -X PATCH -n -H "Authorization: Bearer " \ - https:///api/2.0/workspace-conf \ - -d '{"enableDcs": "true"}' - -For more detail, check `custom containers `__. - -5. Create an `instance profile -`__ -for the Spark cluster. This profile enables the Spark job to access your data in the S3 bucket. - -Create an instance profile using the AWS console (For AWS Users) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -1. In the AWS console, go to the IAM service. -2. Click the Roles tab in the sidebar. -3. Click Create role. - - a. Under Trusted entity type, select AWS service. - b. Under Use case, select **EC2**. - c. Click Next. - d. At the bottom of the page, click Next. - e. In the Role name field, type a role name. - f. Click Create role. - -4. In the role list, click the **AmazonS3FullAccess** role. -5. Click Create role button. - -In the role summary, copy the Role ARN. - -.. image:: https://raw.githubusercontent.com/flyteorg/static-resources/main/flyte/deployment/plugins/databricks/s3_arn.png - :alt: A screenshot of s3 arn. - -Locate the IAM role that created the Databricks deployment -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -If you don’t know which IAM role created the Databricks deployment, do the following: - -1. As an account admin, log in to the account console. -2. Go to ``Workspaces`` and click your workspace name. -3. In the Credentials box, note the role name at the end of the Role ARN - -For example, in the Role ARN ``arn:aws:iam::123456789123:role/finance-prod``, the role name is finance-prod - -Edit the IAM role that created the Databricks deployment -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -1. In the AWS console, go to the IAM service. -2. Click the Roles tab in the sidebar. -3. Click the role that created the Databricks deployment. -4. On the Permissions tab, click the policy. -5. Click Edit Policy. -6. Append the following block to the end of the Statement array. Ensure that you don’t overwrite any of the existing policy. Replace with the role you created in Configure S3 access with instance profiles. - -.. code-block:: bash - - { - "Effect": "Allow", - "Action": "iam:PassRole", - "Resource": "arn:aws:iam:::role/" - } - -Specify agent configuration ----------------------------- - -.. tabs:: - - .. group-tab:: Flyte binary - - .. tabs:: - - .. group-tab:: Demo cluster - - Enable the Databricks agent on the demo cluster by updating the ConfigMap: - - .. code-block:: bash - - kubectl edit configmap flyte-sandbox-config -n flyte - - .. code-block:: yaml - :emphasize-lines: 7,12,16 - - tasks: - task-plugins: - default-for-task-types: - container: container - container_array: k8s-array - sidecar: sidecar - spark: agent-service - enabled-plugins: - - container - - sidecar - - k8s-array - - agent-service - plugins: - agent-service: - supportedTaskTypes: - - spark - - .. group-tab:: Helm chart - - Edit the relevant YAML file to specify the plugin. - - .. code-block:: yaml - :emphasize-lines: 7,11,15 - - tasks: - task-plugins: - enabled-plugins: - - container - - sidecar - - k8s-array - - agent-service - default-for-task-types: - - container: container - - container_array: k8s-array - - spark: agent-service - plugins: - agent-service: - supportedTaskTypes: - - spark - - .. group-tab:: Flyte core - - Create a file named ``values-override.yaml`` and add the following config to it: - - .. code-block:: yaml - :emphasize-lines: 9,14-17 - - enabled_plugins: - tasks: - task-plugins: - enabled-plugins: - - container - - sidecar - - k8s-array - - agent-service - default-for-task-types: - container: container - sidecar: sidecar - container_array: k8s-array - spark: agent-service - plugins: - agent-service: - supportedTaskTypes: - - spark - -Add the Databricks access token -------------------------------- - -You have to set the Databricks token to the Flyte configuration. - -1. Install flyteagent pod using helm - -.. code-block:: - - helm repo add flyteorg https://flyteorg.github.io/flyte - helm install flyteagent flyteorg/flyteagent --namespace flyte - -2. Get the base64 value of your Databricks token. - -.. code-block:: - - echo -n "" | base64 - -3. Edit the flyteagent secret - - .. code-block:: bash - - kubectl edit secret flyteagent -n flyte - - .. code-block:: yaml - :emphasize-lines: 3 - - apiVersion: v1 - data: - flyte_databricks_access_token: - kind: Secret - metadata: - annotations: - meta.helm.sh/release-name: flyteagent - meta.helm.sh/release-namespace: flyte - creationTimestamp: "2023-10-04T04:09:03Z" - labels: - app.kubernetes.io/managed-by: Helm - name: flyteagent - namespace: flyte - resourceVersion: "753" - uid: 5ac1e1b6-2a4c-4e26-9001-d4ba72c39e54 - type: Opaque - - -Upgrade the deployment ----------------------- - -.. tabs:: - - .. group-tab:: Flyte binary - - .. tabs:: - - .. group-tab:: Demo cluster - - .. code-block:: - - kubectl rollout restart deployment flyte-sandbox -n flyte - - .. group-tab:: Helm chart - - .. code-block:: - - helm upgrade flyteorg/flyte-binary -n --values - - Replace ```` with the name of your release (e.g., ``flyte-backend``), - ```` with the name of your namespace (e.g., ``flyte``), - and ```` with the name of your YAML file. - - .. group-tab:: Flyte core - - .. code-block:: - - helm upgrade flyte/flyte-core -n --values values-override.yaml - - Replace ```` with the name of your release (e.g., ``flyte``) - and ```` with the name of your namespace (e.g., ``flyte``). - -Wait for the upgrade to complete. You can check the status of the deployment pods by running the following command: - -.. code-block:: - - kubectl get pods -n flyte - -For databricks plugin on the Flyte cluster, please refer to `Databricks Plugin Example `_ diff --git a/rsts/deployment/agents/index.rst b/rsts/deployment/agents/index.rst deleted file mode 100644 index 4bc56f55c5..0000000000 --- a/rsts/deployment/agents/index.rst +++ /dev/null @@ -1,57 +0,0 @@ -.. _deployment-agent-setup: - -Agent Setup -=========== - -.. tags:: Agent, Integration, Data, Advanced - -Discover the process of setting up Agents for Flyte. - -.. panels:: - :header: text-center - :column: col-lg-12 p-2 - - .. link-button:: deployment-agent-setup-bigquery - :type: ref - :text: Bigquery Agent - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - Guide to setting up the Bigquery agent. - - --- - - .. link-button:: deployment-agent-setup-mmcloud - :type: ref - :text: MMCloud Agent - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - Guide to setting up the MMCloud agent. - - --- - - .. link-button:: deployment-agent-setup-sensor - :type: ref - :text: Sensor Agent - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - Guide to setting up the Sensor agent. - - - --- - - .. link-button:: deployment-agent-setup-databricks - :type: ref - :text: Databricks Agent - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - Guide to setting up the Databricks agent. - -.. toctree:: - :maxdepth: 1 - :name: Agent setup - :hidden: - - bigquery - mmcloud - databricks - sensor diff --git a/rsts/deployment/agents/mmcloud.rst b/rsts/deployment/agents/mmcloud.rst deleted file mode 100644 index e2c2af9813..0000000000 --- a/rsts/deployment/agents/mmcloud.rst +++ /dev/null @@ -1,121 +0,0 @@ -.. _deployment-agent-setup-mmcloud: - -MMCloud Agent -================= - -MemVerge Memory Machine Cloud (MMCloud) empowers users to continuously optimize cloud resources during runtime, -safely execute stateful tasks on spot instances, -and monitor resource usage in real time. -These capabilities make it an excellent fit for long-running batch workloads. - -This guide provides an overview of how to set up MMCloud in your Flyte deployment. - -Set up MMCloud --------------- - -To run a Flyte workflow with Memory Machine Cloud, you will need to deploy Memory Machine Cloud. -Check out the `MMCloud User Guide `_ to get started! - -By the end of this step, you should have deployed an MMCloud OpCenter. - -Spin up a cluster ------------------ - -.. tabs:: - - .. group-tab:: Flyte binary - - You can spin up a demo cluster using the following command: - - .. code-block:: bash - - flytectl demo start - - Or install Flyte using the :ref:`flyte-binary helm chart `. - - .. group-tab:: Flyte core - - If you've installed Flyte using the - `flyte-core helm chart `__, please ensure: - - * You have the correct kubeconfig and have selected the correct Kubernetes context. - * You have configured the correct flytectl settings in ``~/.flyte/config.yaml``. - -.. note:: - - Add the Flyte chart repo to Helm if you're installing via the Helm charts. - - .. code-block:: bash - - helm repo add flyteorg https://flyteorg.github.io/flyte - -Specify agent configuration ----------------------------- - -Enable the MMCloud agent by adding the following config to the relevant YAML file(s): - -.. code-block:: yaml - - tasks: - task-plugins: - enabled-plugins: - - agent-service - default-for-task-types: - - mmcloud_task: agent-service - -.. code-block:: yaml - - plugins: - agent-service: - agents: - mmcloud-agent: - endpoint: - insecure: true - supportedTaskTypes: - - mmcloud_task - agentForTaskTypes: - - mmcloud_task: mmcloud-agent - -Substitute ```` with the endpoint of your MMCloud agent. - -Upgrade the deployment ----------------------- - -.. tabs:: - - .. group-tab:: Flyte binary - - .. tabs:: - - .. group-tab:: Demo cluster - - .. code-block:: bash - - kubectl rollout restart deployment flyte-sandbox -n flyte - - .. group-tab:: Helm chart - - .. code-block:: bash - - helm upgrade flyteorg/flyte-binary -n --values - - Replace ```` with the name of your release (e.g., ``flyte-backend``), - ```` with the name of your namespace (e.g., ``flyte``), - and ```` with the name of your YAML file. - - .. group-tab:: Flyte core - - .. code-block:: - - helm upgrade flyte/flyte-core -n --values values-override.yaml - - Replace ```` with the name of your release (e.g., ``flyte``) - and ```` with the name of your namespace (e.g., ``flyte``). - -Wait for the upgrade to complete. You can check the status of the deployment pods by running the following command: - -.. code-block:: - - kubectl get pods -n flyte - -For mmcloud plugin on the Flyte cluster, please refer to `Memory Machine Cloud Plugin Example `_ diff --git a/rsts/deployment/agents/sensor.rst b/rsts/deployment/agents/sensor.rst deleted file mode 100644 index fa886ca608..0000000000 --- a/rsts/deployment/agents/sensor.rst +++ /dev/null @@ -1,149 +0,0 @@ -.. _deployment-agent-setup-sensor: - -Sensor Agent -================= - -Sensor enables users to continuously check for a file or a condition to be met periodically. - -When the condition is met, the sensor will complete. - -This guide provides an overview of how to set up Sensor in your Flyte deployment. - -Spin up a cluster ------------------ - -.. tabs:: - - .. group-tab:: Flyte binary - - You can spin up a demo cluster using the following command: - - .. code-block:: bash - - flytectl demo start - - Or install Flyte using the :ref:`flyte-binary helm chart `. - - .. group-tab:: Flyte core - - If you've installed Flyte using the - `flyte-core helm chart `__, please ensure: - - * You have the correct kubeconfig and have selected the correct Kubernetes context. - * Confirm that you have the correct Flytectl configuration at ``~/.flyte/config.yaml``. - -.. note:: - - Add the Flyte chart repo to Helm if you're installing via the Helm charts. - - .. code-block:: bash - - helm repo add flyteorg https://flyteorg.github.io/flyte - -Specify agent configuration ----------------------------- - -Enable the Sensor agent by adding the following config to the relevant YAML file(s): - -.. tabs:: - - .. group-tab:: Flyte binary - - Edit the relevant YAML file to specify the agent. - - .. code-block:: bash - - kubectl edit configmap flyte-sandbox-config -n flyte - - .. code-block:: yaml - :emphasize-lines: 7,11,16 - - tasks: - task-plugins: - enabled-plugins: - - container - - sidecar - - k8s-array - - agent-service - default-for-task-types: - - container: container - - container_array: k8s-array - - sensor: agent-service - - plugins: - agent-service: - supportedTaskTypes: - - sensor - - .. group-tab:: Flyte core - - Create a file named ``values-override.yaml`` and add the following configuration to it. - - .. code-block:: yaml - - configmap: - enabled_plugins: - # -- Tasks specific configuration [structure](https://pkg.go.dev/github.com/flyteorg/flytepropeller/pkg/controller/nodes/task/config#GetConfig) - tasks: - # -- Plugins configuration, [structure](https://pkg.go.dev/github.com/flyteorg/flytepropeller/pkg/controller/nodes/task/config#TaskPluginConfig) - task-plugins: - # -- [Enabled Plugins](https://pkg.go.dev/github.com/flyteorg/flyteplugins/go/tasks/config#Config). Enable sagemaker*, athena if you install the backend - enabled-plugins: - - container - - sidecar - - k8s-array - - agent-service - default-for-task-types: - container: container - sidecar: sidecar - container_array: k8s-array - sensor: agent-service - plugins: - agent-service: - supportedTaskTypes: - - sensor - - -Upgrade the deployment ----------------------- - -.. tabs:: - - .. group-tab:: Flyte binary - - .. tabs:: - - .. group-tab:: Demo cluster - - .. code-block:: bash - - kubectl rollout restart deployment flyte-sandbox -n flyte - - .. group-tab:: Helm chart - - .. code-block:: bash - - helm upgrade flyteorg/flyte-binary -n --values - - Replace ```` with the name of your release (e.g., ``flyte-backend``), - ```` with the name of your namespace (e.g., ``flyte``), - and ```` with the name of your YAML file. - - .. group-tab:: Flyte core - - .. code-block:: - - helm upgrade flyte/flyte-core -n --values values-override.yaml - - Replace ```` with the name of your release (e.g., ``flyte``) - and ```` with the name of your namespace (e.g., ``flyte``). - -Wait for the upgrade to complete. - -You can check the status of the deployment pods by running the following command: - -.. code-block:: - - kubectl get pods -n flyte - -For sensor plugin on the Flyte cluster, please refer to `Sensor Plugin Example `_ diff --git a/rsts/deployment/configuration/auth_appendix.rst b/rsts/deployment/configuration/auth_appendix.rst deleted file mode 100644 index d8c96df1ee..0000000000 --- a/rsts/deployment/configuration/auth_appendix.rst +++ /dev/null @@ -1,139 +0,0 @@ -.. _deployment-configuration-auth-appendix: - -###################################### -Understanding Authentication -###################################### - -.. tags:: Authentication, Design, Advanced - -.. _deployment-auth-openid-appendix: - -************** -OpenID Connect -************** - -Flyte supports OpenID Connect. A defacto standard for user authentication. After configuring OpenID Connect, users -accessing flyte console or flytectl (or other 3rd party apps) will be prompted to authenticate using the configured -provider. - -.. mermaid:: - :alt: Flyte UI Swimlane - - sequenceDiagram - %%{config: { 'fontFamily': 'Menlo', 'fontSize': 10, 'fontWeight': 100} }%% - autonumber - User->>+Browser: /home - Browser->>+Console: /home - Console->>-Browser: 302 /login - Browser->>+Admin: /login - Admin->>-Browser: Idp.com/oidc - Browser->>+Idp: Idp.com/oidc - Idp->>-Browser: 302 /login - Browser->>-User: Enter user/pass - User->>+Browser: login - Browser->>+Idp: Submit username/pass - Idp->>-Browser: admin/?authCode= - Browser->>+Admin: admin/authCode= - Admin->>+Idp: Exchange Tokens - Idp->>-Admin: idt, at, rt - Admin->>+Browser: Write Cookies & Redirect to /console - Browser->>+Console: /home - Browser->>-User: Render /home - -.. _deployment-auth-oauth2-appendix: - -****** -OAuth2 -****** - -Flyte supports OAuth2 to control access to 3rd party and native apps. FlyteAdmin comes with a built in Authorization -Server that can perform 3-legged and 2-legged OAuth2 flows. It also supports delegating these responsibilities to an -external Authorization Server. - -Service Authentication using OAuth2 -=================================== - -Propeller (and potentially other non-user facing services) can also authenticate using ``client_credentials`` to the IdP and -be granted an ``access_token`` to be used with admin and other backend services. - -FlyteAdmin's builtin Authorization Server ------------------------------------------ - -.. mermaid:: - :alt: Service Authentication Swimlane - - sequenceDiagram - %%{config: { 'fontFamily': 'Menlo', 'fontSize': 10, 'fontWeight': 100} }%% - autonumber - Propeller->>+Admin: /token?client_creds&scope=https://admin/ - Admin->>-Propeller: access_token - Propeller->>+Admin: /list_projects?token=access_token - -External Authorization Server ------------------------------ - -.. mermaid:: - :alt: Service Authentication Swimlane - - sequenceDiagram - %%{config: { 'fontFamily': 'Menlo', 'fontSize': 10, 'fontWeight': 100} }%% - autonumber - Propeller->>+External Authorization Server: /token?client_creds&scope=https://admin/ - External Authorization Server->>-Propeller: access_token - Propeller->>+Admin: /list_projects?token=access_token - -User Authentication in other clients (e.g. Cli) using OAuth2-Pkce -================================================================== - -Users accessing backend services through Cli should be able to use OAuth2-Pkce flow to authenticate (in a browser) to the Idp and be issued -an access_token valid to communicate with the intended backend service on behalf of the user. - -FlyteAdmin's builtin Authorization Server ------------------------------------------ - -.. mermaid:: - :alt: CLI Authentication with Admin's own Authorization Server - - sequenceDiagram - %%{config: { 'fontFamily': 'Menlo', 'fontSize': 10, 'fontWeight': 100} }%% - autonumber - User->>+Cli: flytectl list-projects - Cli->>+Admin: admin/client-config - Admin->>-Cli: Client_id=, ... - Cli->>+Browser: /oauth2/authorize?pkce&code_challenge,client_id,scope - Browser->>+Admin: /oauth2/authorize?pkce... - Admin->>-Browser: 302 idp.com/login - Note over Browser,Admin: The prior OpenID Connect flow - Browser->>+Admin: admin/logged_in - Note over Browser,Admin: Potentially show custom consent screen - Admin->>-Browser: localhost/?authCode= - Browser->>+Cli: localhost/authCode= - Cli->>+Admin: /token?code,code_verifier - Admin->>-Cli: access_token - Cli->>+Admin: /projects/ + access_token - Admin->>-Cli: project1, project2 - -External Authorization Server ------------------------------ - -.. mermaid:: - :alt: CLI Authentication with an external Authorization Server - - sequenceDiagram - %%{config: { 'fontFamily': 'Menlo', 'fontSize': 10, 'fontWeight': 100} }%% - autonumber - User->>+Cli: flytectl list-projects - Cli->>+Admin: admin/client-config - Admin->>-Cli: Client_id=, ... - Cli->>+Browser: /oauth2/authorize?pkce&code_challenge,client_id,scope - Browser->>+ExternalIdp: /oauth2/authorize?pkce... - ExternalIdp->>-Browser: 302 idp.com/login - Note over Browser,ExternalIdp: The prior OpenID Connect flow - Browser->>+ExternalIdp: /logged_in - Note over Browser,ExternalIdp: Potentially show custom consent screen - ExternalIdp->>-Browser: localhost/?authCode= - Browser->>+Cli: localhost/authCode= - Cli->>+ExternalIdp: /token?code,code_verifier - ExternalIdp->>-Cli: access_token - Cli->>+Admin: /projects/ + access_token - Admin->>-Cli: project1, project2 diff --git a/rsts/deployment/configuration/auth_migration.rst b/rsts/deployment/configuration/auth_migration.rst deleted file mode 100644 index c982dca335..0000000000 --- a/rsts/deployment/configuration/auth_migration.rst +++ /dev/null @@ -1,162 +0,0 @@ -.. _deployment-configuration-auth-migration: - -#################################### -Migrating Your Authentication Config -#################################### - -.. tags:: Authentication, Infrastructure, Advanced - -Flyte previously shipped with only a barebones OIDC setup, and relied on an external authorization server. This -migration guide helps you move to Admin's own authorization server. - -Okta Config changes -=================== - -Using Okta as an example, you would have previously seen something like the following: - -* An Application (OpenID Connect Web) for FlyteAdmin itself (e.g. **0oal5rch46pVhCGF45d6**). -* An Application (OpenID Native app) for Flyte-cli/FlyteCTL (e.g. **0oal62nxuD6OSFSRq5d6**). - These two applications would be assigned to the relevant users. -* An Application (Web) for FlytePropeller (e.g. **0abc5rch46pVhCGF9876**). - This application would either use the default Authorization server, or you would create a new one. - -Admin Config Changes -==================== - -After Flyte version `0.13.0 `__, -you can still use the IdP as the Authorization Server if you wish. - -.. tabs:: - - .. group-tab:: < v0.13.0 - - .. code-block:: yaml - - server: - # ... other settings - security: - secure: false - useAuth: true - allowCors: true - allowedOrigins: - - "*" - allowedHeaders: - - "Content-Type" - oauth: - baseUrl: https://dev-62129345.okta.com/oauth2/default/ - scopes: - - profile - - openid - - email - claims: - iss: https://dev-62129345.okta.com/oauth2/default - aud: 0oal5rch46pVhCGF45d6 - clientId: 0oal5rch46pVhCGF45d6 - clientSecretFile: "/Users/ytong/etc/secrets/oauth/secret" - authorizeUrl: "https://dev-62129345.okta.com/oauth2/default/v1/authorize" - tokenUrl: "https://dev-62129345.okta.com/oauth2/default/v1/token" - callbackUrl: "http://localhost:8088/callback" - cookieHashKeyFile: "/Users/ytong/etc/secrets/hashkey/hashkey" - cookieBlockKeyFile: "/Users/ytong/etc/secrets/blockkey/blockkey" - redirectUrl: "/api/v1/projects" - thirdPartyConfig: - flyteClient: - clientId: 0oal62nxuD6OSFSRq5d6 - redirectUri: http://localhost:12345/callback - - .. group-tab:: >= v0.13.0 - - .. code-block:: yaml - - server: - # ... other settings - security: - secure: false - useAuth: true - allowCors: true - allowedOrigins: - - "*" - allowedHeaders: - - "Content-Type" - auth: - authorizedUris: - # This should point at your public http Uri. - - https://flyte.mycompany.com - # This will be used by internal services in the same namespace as flyteadmin - - http://flyteadmin:80 - # This will be used by internal services in the same cluster but different namespaces - - http://flyteadmin.flyte.svc.cluster.local:80 - userAuth: - openId: - # Put the URL of the OpenID Connect provider. - baseUrl: https://dev-62129345.okta.com/oauth2/default # Okta with a custom Authorization Server - scopes: - - profile - - openid - - offline_access # Uncomment if OIdC supports issuing refresh tokens. - # Replace with the client id created for Flyte. - clientId: 0oal5rch46pVhCGF45d6 - appAuth: - # External delegates app auth responsibilities to an external authorization server, Internal means FlyteAdmin does it itself - authServerType: External - thirdPartyConfig: - flyteClient: - clientId: 0oal62nxuD6OSFSRq5d6 - redirectUri: http://localhost:12345/callback - scopes: - - all - - offline - -To summarize the changes between pre-``v0.13.0`` and post-``v0.13.0``: - -* The original **oauth** section has been moved two levels higher into its own section and renamed **auth** but enabling/disabling of authentication remains in the old location. -* Secrets by default will now be looked up in **/etc/secrets**. Use the following command to generate them: - - .. prompt:: bash $ - - flyteadmin secrets init -p /etc/secrets - - This will generate the new cookie hash/block keys, as well as other secrets Admin needs to run the Authorization server. - -* The **clientSecretFile** has been moved to **/etc/secrets/oidc_client_secret** so move that there. -* **claims** has been removed, just delete that. -* **authorizeUrl** and **tokenUrl** are no longer necessary. -* The **baseUrl** for the external Authorization Server is now in the **appAuth** section. -* The **thirdPartyConfig** has been moved to **appAuth** as well. -* **redirectUrl** has been defaulted to **/console**. If that's the value you want, then you no longer need this setting. - -Propeller Config Changes -======================== - -Similarly, there are FlytePropeller config changes to be aware of. - -.. tabs:: - - .. group-tab:: < v0.13.0 - - .. code-block:: yaml - - admin: - endpoint: dns:///mycompany.domain.com - useAuth: true - clientId: flytepropeller - clientSecretLocation: /etc/secrets/client_secret - tokenUrl: https://demo.nuclyde.io/oauth2/token - scopes: - - all - - .. group-tab:: >= v0.13.0 - - .. code-block:: yaml - - admin: - endpoint: dns:///mycompany.domain.com - # If you are using the built-in authorization server, you can delete the following two lines: - clientId: flytepropeller - clientSecretLocation: /etc/secrets/client_secret - -To summarize the changes between pre-``v0.13.0`` and post-``v0.13.0``: - -* **useAuth** is deprecated and will be removed in a future version. Auth requirement will be discovered through an anonymous admin discovery call. -* **tokenUrl** and **scopes** will also be discovered through a metadata call. -* **clientId** and **clientSecretLocation** have defaults that work out of the box with the built-in authorization server (e.g. if you setup Google OpenID Connect). diff --git a/rsts/deployment/configuration/auth_setup.rst b/rsts/deployment/configuration/auth_setup.rst deleted file mode 100644 index 61a6b4c0ae..0000000000 --- a/rsts/deployment/configuration/auth_setup.rst +++ /dev/null @@ -1,790 +0,0 @@ -.. _deployment-configuration-auth-setup: - -####################### -Authenticating in Flyte -####################### - -.. tags:: Authentication, Infrastructure, Advanced - -The Flyte platform consists of multiple components. Securing communication between each component is crucial to ensure -the integrity of the overall system. - -The following diagram summarizes the components and their interactions as part of Flyte's auth implementation: - - -.. image:: https://raw.githubusercontent.com/flyteorg/static-resources/main/flyte/deployment/auth/flyte-auth-arch-v2.png - - -In summary, there are two main resources required for a complete auth flow in Flyte: - -**An identity layer** - -Using an implementation of the `Open ID Connect (OIDC) specification `__, it enables clients to verify the identity of the end user based on the authentication performed by an Authorization Server. For this flow to work, you must first register Flyte as a new client (app) to the Identity Provider (IdP). - -**An authorization server** - -As defined by IETF's `RFC #6749 `__, the authorization server's role is to issue *access tokens to the client after successfully authenticating the resource owner and obtaining authorization*. In this context, the *resource owner* is the end user of Flyte; and the *client* is the tool or component that intends to interact with ``flyteadmin`` : ``flytepropeller``, ``flyteconsole`` or any of the CLI tools. - -There are two supported options to use an authorization server in Flyte: - - * **Internal authorization server**: It comes pre-installed with Flyte and it is a suitable choice for quick start and testing purposes. - * **External (custom) authorization server**: This a service provided by one of the supported IdPs and is the recommended option if your organization needs to retain control over scope definitions and grants, token expiration policies and other advanced security controls. - - -.. note:: - - Regardless of the type of authorization server to use, you will still need an IdP to provide identity through OIDC. - - -.. _auth-setup: - -******************** -Authentication Setup -******************** - -Prerequisites -============= - - -The following is required for non-sandbox (non ``flytectl demo``) deployments: - - -* A public domain name (e.g. example.foobar.com) -* Routing of traffic from that domain name to the Kubernetes Flyte Ingress IP address - -.. note:: - - Checkout this `community-maintained guide `__ for more information about setting up Flyte in production, including Ingress. - - -Identity Providers Support -========================== - -Flyte supports OAuth2 and OpenId Connect to secure the various connections: - -* :ref:`OpenID Connect `: used to secure user's authentication to ``flyteadmin`` through the UI. -* :ref:`OAuth2 `: used to secure connections from clients (i.e. ``pyflyte``, ``flytectl`` and - ``flytepropeller``) to the ``flyteadmin`` service. - -Support for these protocols varies per IdP. Checkout the following table to understand the available support level for -your IdP: - -+----------------------+--------+-------------+---------------------+----------+-------+----------+--------+ -| Feature | Okta | Google free | GCP Identity Service| Azure AD | Auth0 | KeyCloak | Github | -+======================+========+=============+=====================+==========+=======+==========+========+ -| OpenID Connect (OIDC)| Yes | Yes | Yes | Yes | Yes | Yes | No | -+----------------------+--------+-------------+---------------------+----------+-------+----------+--------+ -| Custom Auth Server | Yes | No | Yes | Yes | ? | Yes | No | -+----------------------+--------+-------------+---------------------+----------+-------+----------+--------+ - - -Identity Management layer : OIDC -=================================== - -In this section, you can find canonical examples of how to set up OIDC on some of the supported IdPs; enabling users to authenticate in the -browser. - -.. tabs:: - - .. group-tab:: Google - - - - - Create an OAuth2 Client Credential following the `official documentation `__ and take note of the ``client_id`` and ``client_secret`` - - - In the **Authorized redirect URIs** field, add ``http://localhost:30081/callback`` for **sandbox** deployments, or ``https:///callback`` for other methods of deployment. - - - .. group-tab:: Okta - - - 1. If you don't already have an Okta account, sign up for one `here `__. - 2. Create an app integration, with `OIDC - OpenID Connect` as the sign-on method and `Web Application` as the app type. - 3. Add sign-in redirect URIs: - - - ``http://localhost:30081/callback`` for sandbox or ``https:///callback`` for other Flyte deployment types. - - 4. *Optional* - Add logout redirect URIs: - - - ``http://localhost:30081/logout`` for sandbox, ``https:///callback`` for other Flyte deployment types). - - 5. Take note of the Client ID and Client Secret - - .. group-tab:: Keycloak - - - 1. If you don't have a Keycloak installation, you can use `this `__ which provides a quick way to deploy Keycloak cluster on AWS. - 2. Create a realm using the `admin console `__ - 3. Create an OIDC client with client secret and note them down. Use the following `instructions `__ - 4. Add Login redirect URIs: - - - ``http://localhost:30081/callback`` for sandbox or ``https:///callback`` for other Flyte deployment types. - - .. group-tab:: Microsoft Azure AD - - 1. From the Azure homepage go to **Azure Active Directory** - 2. From the **Ovierview** page, take note of the **Tenant ID** - 3. Go to **App registrations** - 4. Create a **New registration** - 5. Give it a descriptive name - 6. For the **Supported account types** select the option that matches your organization's security policy - 7. In the **Redirect URI** section select: - - - **Web** platform - - Add ``http://localhost:30081/callback`` for sandbox or ``https:///callback`` for other Flyte deployment types - - 9. Click on **Register** - 10. Once created, click on the registered app and go to the **Certificates and secrets** section - 11. Go to **Client secrets** and create a **New client secret** - 12. Enter a description and an expiration policy - 13. Take note of the secret **Value** as it will be used in the Helm chart - - For further reference, check out the official `Azure AD Docs `__ on how to configure the IdP for OpenIDConnect. - - .. note:: - - Make sure the app is registered without `additional claims `__. - The OpenIDConnect authentication will not work otherwise, please refer to this `GitHub Issue `__ and `Azure AD Docs `__ for more information. - - -Apply OIDC Configuration -=========================== - -.. tabs:: - - .. group-tab:: flyte-binary - - - 1. Generate a random password to be used internally by ``flytepropeller`` - - 2. Use the following command to generate a bcrypt hash for that password: - - .. prompt:: bash $ - - pip install bcrypt && python -c 'import bcrypt; import base64; print(base64.b64encode(bcrypt.hashpw("".encode("utf-8"), bcrypt.gensalt(6))))' - - 3. Go to your values file and locate the ``auth`` section and replace values accordingly: - - .. code-block:: yaml - - auth: - enabled: true - oidc: - # baseUrl: https://accounts.google.com # Uncomment for Google - # baseUrl: https:///auth/realms/ # Uncomment for Keycloak and update with your installation host and realm name - # baseUrl: https://login.microsoftonline.com//oauth2/v2.0/authorize # Uncomment for Azure AD - # For Okta use the Issuer URI from Okta's default auth server - baseUrl: https://dev-.okta.com/oauth2/default - # Replace with the client ID and secret created for Flyte in your IdP - clientId: - clientSecret: - internal: - clientSecret: '' - # Use the output of step #2 (only the content inside of '') - - clientSecretHash: - - authorizedUris: - - https:// - - 4. Save your changes - 5. Upgrade your Helm release with the new values: - - .. prompt:: bash $ - - helm upgrade flyteorg/flyte-binary -n --values .yaml - - Where: - - * ```` is the name of your Helm release, typically ``flyte-backend``. You can find it using ``helm ls -n `` - - - 6. Verify that your Flyte deployment now requires successful login to your IdP to access the UI (``https:///console``) - - 7. For ``flytectl`` / ``pyflyte``, make sure that your local config file (``$HOME/.flyte/config.yaml``) includes the following option: - - .. code-block:: yaml - - admin: - ... - authType: Pkce #change from the default `clientCred` to enable client auth without using shared secrets - ... - - - .. group-tab:: flyte-core - - 1. Generate a random password to be used internally by flytepropeller - 2. Use the following command to generate a bcrypt hash for that password: - - .. prompt:: bash $ - - pip install bcrypt && python -c 'import bcrypt; import base64; print(base64.b64encode(bcrypt.hashpw("".encode("utf-8"), bcrypt.gensalt(6))))' - - Take note of the output (only the contents inside `''`) - - 3. Store the ``client_secret`` provided by your IdP in a Kubernetes secret as follows: - - .. prompt:: bash $ - - kubectl edit secret -n flyte-admin-secrets - - Where ``flyte-namespace`` is the Kubernetes namespace where you have installed Flyte. - - 4. Add a new key under ``stringData``: - - .. code-block:: yaml - - apiVersion: v1 - # Add from here - stringData: - oidc_client_secret: - # End here - data: - ... - - 5. Save and close your editor. - - 6. Go to your Helm values file and verify that the ``configmap`` section include the following, replacing the content where indicated: - - .. code-block:: yaml - - configmap: - adminServer: - server: - httpPort: 8088 - grpcPort: 8089 - security: - secure: false - useAuth: true - allowCors: true - allowedOrigins: - # Accepting all domains for Sandbox installation - - "*" - allowedHeaders: - - "Content-Type" - auth: - appAuth: - thirdPartyConfig: - flyteClient: - clientId: flytectl - redirectUri: http://localhost:53593/callback - scopes: - - offline - - all - selfAuthServer: - staticClients: - flyte-cli: - id: flyte-cli - redirect_uris: - - http://localhost:53593/callback - - http://localhost:12345/callback - grant_types: - - refresh_token - - authorization_code - response_types: - - code - - token - scopes: - - all - - offline - - access_token - public: true - flytectl: - id: flytectl - redirect_uris: - - http://localhost:53593/callback - - http://localhost:12345/callback - grant_types: - - refresh_token - - authorization_code - response_types: - - code - - token - scopes: - - all - - offline - - access_token - public: true - flytepropeller: - id: flytepropeller - # Use the bcrypt hash generated for your random password - client_secret: "" - redirect_uris: - - http://localhost:3846/callback - grant_types: - - refresh_token - - client_credentials - response_types: - - token - scopes: - - all - - offline - - access_token - public: false - - authorizedUris: - # Use the public URL of flyteadmin (a DNS record pointing to your Ingress resource) - - https:// - - http://flyteadmin:80 - - http://flyteadmin.flyte.svc.cluster.local:80 - userAuth: - openId: - # baseUrl: https://accounts.google.com # Uncomment for Google - # baseUrl: https://login.microsoftonline.com//oauth2/v2.0/authorize # Uncomment for Azure AD - # For Okta, use the Issuer URI of the default auth server - baseUrl: https://dev-.okta.com/oauth2/default - # Use the client ID generated by your IdP - clientId: - scopes: - - profile - - openid - - 7. Additionally, outside the ``configmap`` section, add the following block and replace the necessary information: - - .. code-block:: yaml - - secrets: - adminOauthClientCredentials: - # -- If enabled is true, helm will create and manage `flyte-secret-auth` and populate it with `clientSecret`. - # If enabled is false, it's up to the user to create `flyte-secret-auth` - enabled: true - # Use the non-encoded version of the random password - clientSecret: "" - clientId: flytepropeller - - 8. Save and exit your editor. - - 9. Restart ``flyteadmin`` for the changes to take effect: - - .. prompt:: bash $ - - kubectl rollout restart deployment/flyteadmin -n flyte - - 10. Restart ``flytepropeller`` to start using authenticated requests: - - .. prompt:: bash $ - - kubectl rollout restart deployment/flytepropeller -n flyte - - 11. Restart ``flytescheduler``` to start using authenticated requests: - - .. prompt:: bash $ - - kubectl rollout restart deployment/flytescheduler -n flyte - - 12. For flytectl/pyflyte, make sure that your local config file (``$HOME/.flyte/config.yaml``) includes the following option: - - .. code-block:: yaml - - admin: - ... - authType: Pkce #change from the default `clientCred` to enable client auth without using shared secrets - ... - -.. note:: - - **Congratulations!** - - It should now be possible to go to Flyte UI and be prompted for authentication. Flytectl should automatically pickup the change and start prompting for authentication as well. - If you want to use an external OAuth2 provider for App authentication, please continue reading into the next section. - -*************************** -Custom Authorization Server -*************************** - - -As mentioned previously, Flyte ships with an internal authorization server; hence setting up an external Authorization Server is optional and dependent on your organization's security requirements. - -In this section, you will find instructions on how to setup an OAuth2 Authorization Server in the different IdPs supported by Flyte: - -.. note:: - - **Google IdP** - - Google IdP does not offer an OAuth2 Authorization Server that could be used to protect external services (For example Flyte). In this case, Google offers a separate Cloud Product called Google Cloud Identity. - Configuration for Cloud Identity is not included in this guide. If unavailable, setup can stop here and FlyteAdmin BuiltIn OAuth2 Authorization Server can be used instead. - -.. tabs:: - - .. group-tab:: Okta - - Okta's custom authorization servers are available through an add-on license. The free developer accounts do include access, which you can use to test before rolling out the configuration more broadly. - - 1. From the left-hand menu, go to **Security** > **API** - 2. Click on **Add Authorization Server**. - 3. Assign an informative name and set the audience to the public URL of FlyteAdmin (e.g. https://example.foobar.com). - - .. note:: - - The audience must exactly match one of the URIs in the ``authorizedUris`` section above - - 4. Note down the **Issuer URI**; this will be used for all the ``baseUrl`` settings in the Flyte config. - 5. Go to **Scopes** and click **Add Scope**. - 6. Set the name to ``all`` (required) and check ``Required`` under the **User consent** option. - 7. Uncheck the **Block services from requesting this scope** option and save your changes. - 8. Add another scope, named ``offline``. Check both the **Required** and **Include in public metadata** options. - 9. Uncheck the **Block services from requesting this scope** option. - 10. Click **Save**. - 11. Go to **Access Policies**, click **Add New Access Policy**. Enter a name and description and enable **Assign to** - ``All clients``. - 12. Add a rule to the policy with the default settings (you can fine-tune these later). - 13. Navigate back to the **Applications** section. - 14. Create an integration for ``flytectl``; it should be created with the **OIDC - OpenID Connect** sign-on method, and the **Native Application** type. - 15. Add ``http://localhost:53593/callback`` to the sign-in redirect URIs. The other options can remain as default. - 16. Assign this integration to any Okta users or groups who should be able to use the ``flytectl`` tool. - 17. Note down the **Client ID**; there will not be a secret. - 18. Create an integration for ``flytepropeller``; it should be created with the **OIDC - OpenID Connect** sign-on method and **Web Application** type. - 19. Check the ``Client Credentials`` option under **Client acting on behalf of itself**. - 20. This app does not need a specific redirect URI; nor does it need to be assigned to any users. - 21. Note down the **Client ID** and **Client secret**; you will need these later. - 22. Take note of the **Issuer URI** for your Authorization Server. It will be used as the baseURL parameter in the Helm chart - - You should have three integrations total - one for the web interface (``flyteconsole``), one for ``flytectl``, and one for ``flytepropeller``. - - .. group-tab:: Keycloak - - - 1. If you don't have a Keycloak installation, you can use `this `__ which provides quick way to deploy Keycloak cluster on AWS. - 2. Create a realm in keycloak installation using its `admin console `__ - 3. Under `Client Scopes`, click `Add Create` inside the admin console. - 4. Create two clients (for `flytectl` and `flytepropeller`) to enable these clients to communicate with the service. - 5. `flytectl` should be created with `Access Type Public` and standard flow enabled. - 6. `flytePropeller` should be created as an `Access Type Confidential`, enabling the standard flow - 7. Take note of the client ID and client Secrets provided. - - .. group-tab:: Azure AD - - 1. Navigate to tab **Overview**, obtain ```` and ```` - 2. Navigate to tab **Authentication**, click ``+Add a platform`` - 3. Add **Web** for flyteconsole and flytepropeller, **Mobile and desktop applications** for flytectl. - 4. Add URL ``https:///callback`` as the callback for Web - 5. Add URL ``http://localhost:53593/callback`` as the callback for flytectl - 6. In **Advanced settings**, set ``Enable the following mobile and desktop flows`` to **Yes** to enable deviceflow - 7. Navigate to tab **Certificates & secrets**, click ``+New client secret`` to create ```` - 8. Navigate to tab **Token configuration**, click ``+Add optional claim`` and create email claims for both ID and Access Token - 9. Navigate to tab **API permissions**, add ``email``, ``offline_access``, ``openid``, ``profile``, ``User.Read`` - 10. Navigate to tab **Expose an API**, Click ``+Add a scope`` and ``+Add a client application`` to create ```` - - -Apply external auth server configuration -======================================== - -Follow the steps in this section to configure `flyteadmin` to use an external auth server. This section assumes that you have already completed and applied the configuration for the OIDC Identity Layer. - -.. tabs:: - - .. group-tab:: flyte-binary - - 1. Go to the values YAML file you used to install Flyte using a Helm chart - 2. Find the ``auth`` section and follow the inline comments to insert your configuration: - - .. code-block:: yaml - - auth: - enabled: true - oidc: - # baseUrl: https:///auth/realms/ # Uncomment for Keycloak and update with your installation host and realm name - # baseUrl: https://login.microsoftonline.com//oauth2/v2.0/authorize # Uncomment for Azure AD - # For Okta, use the Issuer URI of the custom auth server: - baseUrl: https://dev-.okta.com/oauth2/ - # Use the client ID and secret generated by your IdP for the first OIDC registration in the "Identity Management layer : OIDC" section of this guide - clientId: - clientSecret: - internal: - # Use the clientID generated by your IdP for the flytepropeller app registration - clientId: - #Use the secret generated by your IdP for flytepropeller - clientSecret: '' - # Use the bcrypt hash for the clientSecret - clientSecretHash: <-flytepropeller-secret-bcrypt-hash> - authorizedUris: - # Use here the exact same value used for 'audience' when the Authorization server was configured - - https:// - - - 3. Find the ``inline`` section of the values file and add the following content, replacing where needed: - - .. code-block:: yaml - - inline: - auth: - appAuth: - authServerType: External - externalAuthServer: - # baseUrl: https:///auth/realms/ # Uncomment for Keycloak and update with your installation host and realm name - # baseUrl: https://login.microsoftonline.com//oauth2/v2.0/authorize # Uncomment for Azure AD - # For Okta, use the Issuer URI of the custom auth server: - baseUrl: https://dev-.okta.com/oauth2/ - metadataUrl: .well-known/oauth-authorization-server - thirdPartyConfig: - flyteClient: - # Use the clientID generated by your IdP for the `flytectl` app registration - clientId: - redirectUri: http://localhost:53593/callback - scopes: - - offline - - all - userAuth: - openId: - # baseUrl: https:///auth/realms/ # Uncomment for Keycloak and update with your installation host and realm name - # baseUrl: https://login.microsoftonline.com//oauth2/v2.0/authorize # Uncomment for Azure AD - # For Okta, use the Issuer URI of the custom auth server: - baseUrl: https://dev-.okta.com/oauth2/ - scopes: - - profile - - openid - # - offline_access # Uncomment if your IdP supports issuing refresh tokens (optional) - # Use the client ID and secret generated by your IdP for the first OIDC registration in the "Identity Management layer : OIDC" section of this guide - clientId: - - - 4. Save your changes - 5. Upgrade your Helm release with the new configuration: - - .. prompt:: bash $ - - helm upgrade flyteorg/flyte-core -n --values .yaml - - - .. group-tab:: flyte-core - - - 1. Find the ``auth`` section in your Helm values file, and replace the necessary data: - - .. note:: - - If you were previously using the internal auth server, make sure to delete all the ``selfAuthServer`` section from your values file - - .. code-block:: yaml - - configmap: - auth: - appAuth: - - authServerType: External - - # 2. Optional: Set external auth server baseUrl if different from OpenId baseUrl. - externalAuthServer: - # baseUrl: https:///auth/realms/ # Uncomment for Keycloak and update with your installation host and realm name - # baseUrl: https://login.microsoftonline.com//oauth2/v2.0/authorize # Uncomment for Azure AD - # For Okta, use the Issuer URI of the custom auth server: - baseUrl: https://dev-.okta.com/oauth2/ - - metadataUrl: .well-known/openid-configuration - - thirdPartyConfig: - flyteClient: - # 3. Replace with a new Native/Public Client ID provisioned in the custom authorization server. - clientId: flytectl - # This should not change - redirectUri: http://localhost:53593/callback - # 4. "all" is a required scope and must be configured in the custom authorization server. - scopes: - - offline - - all - - userAuth: - openId: - # baseUrl: https:///auth/realms/ # Uncomment for Keycloak and update with your installation host and realm name - # baseUrl: https://login.microsoftonline.com//oauth2/v2.0/authorize # Uncomment for Azure AD - # For Okta, use the Issuer URI of the custom auth server: - baseUrl: https://dev-.okta.com/oauth2/ - scopes: - - profile - - openid - # - offline_access # Uncomment if OIdC supports issuing refresh tokens. - clientId: - - - secrets: - adminOauthClientCredentials: - enabled: true # see the section "Disable Helm secret management" if you require to do so - # Replace with the client_secret provided by your IdP for flytepropeller. - clientSecret: - # Replace with the client_id provided by provided by your IdP for flytepropeller. - clientId: - - 2. Save your changes - 3. Upgrade your Helm release with the new configuration: - - .. prompt:: bash $ - - helm upgrade flyteorg/flyte-core -n --values .yaml - - .. group-tab:: flyte-core with Azure AD - - .. code-block:: yaml - - secrets: - adminOauthClientCredentials: - enabled: true - clientSecret: - clientId: - --- - configmap: - admin: - admin: - endpoint: - insecure: true - clientId: - clientSecretLocation: /etc/secrets/client_secret - scopes: - - api:///.default - useAudienceFromAdmin: true - --- - auth: - appAuth: - authServerType: External - externalAuthServer: - baseUrl: https://login.microsoftonline.com//v2.0/ - metadataUrl: .well-known/openid-configuration - AllowedAudience: - - api:// - thirdPartyConfig: - flyteClient: - clientId: - redirectUri: http://localhost:53593/callback - scopes: - - api:/// - - userAuth: - openId: - baseUrl: https://login.microsoftonline.com//v2.0 - scopes: - - openid - - profile - clientId: - -.. note:: - - **Congratulations** - - At this point, every interaction with Flyte components -be it in the UI or CLI- should require a successful login to your IdP, where your security policies are maintained and enforced. - - -Disable Helm secret management ------------------------------- - -Alternatively, you can instruct Helm not to create and manage the secret for ``flytepropeller``. In that case, you'll have to create it following these steps: - - -1. Disable Helm secrets management in your values file - -.. code-block:: yaml - - secrets: - adminOauthClientCredentials: - enabled: false #set to false - # Replace with the client_id provided by provided by your IdP for flytepropeller. - clientId: - -2. Create a secret declaratively: - -.. code-block:: yaml - - apiVersion: v1 - kind: Secret - metadata: - name: flyte-secret-auth - namespace: flyte - type: Opaque - stringData: - # Replace with the client_secret provided by your IdP for flytepropeller. - client_secret: - - - -Continuous Integration - CI ---------------------------- - -If your organization does any automated registration, then you'll need to authenticate with the `client credentials `_ flow. After retrieving an access token from the IDP, you can send it along to `flyteadmin`` as usual. - -.. tabs:: - - .. group-tab:: flytectl - - Flytectl's `config.yaml `_ can be - configured to use either PKCE (`Proof key for code exchange `_) - or Client Credentials (`Client Credentials `_) flows. - - 1. Update ``config.yaml`` as follows: - - .. code-block:: yaml - - admin: - # Update with the Flyte's ingress endpoint (e.g. flyteIngressIP for sandbox or example.foobar.com) - # You must keep the 3 forward-slashes after dns: - endpoint: dns:/// - - # Update auth type to `Pkce` or `ClientSecret` - authType: Pkce - - # Set to the clientId (will be used for both Pkce and ClientSecret flows) - # Leave empty to use the value discovered through flyteAdmin's Auth discovery endpoint. - clientId: - - # Set to the location where the client secret is mounted. - # Only needed/used for `ClientSecret` flow. - clientSecretLocation: - - # If required, set the scopes needed here. Otherwise, flytectl will discover scopes required for OpenID - # Connect through flyteAdmin's Auth discovery endpoint. - # scopes: [ "scope1", "scope2" ] - - To read further about the available config options, please - `visit here `_ - - .. group-tab:: Flytekit / pyflyte - - Flytekit configuration variables are automatically designed to look up values from relevant environment variables. - - .. important:: - - However, to aid with continuous integration use-cases, Flytekit configuration can also reference other environment - variables. - - For instance, if your CI system is not capable of setting custom environment variables like - ``FLYTE_CREDENTIALS_CLIENT_SECRET`` but does set the necessary settings under a different variable, you may use - ``export FLYTE_CREDENTIALS_CLIENT_SECRET_FROM_ENV_VAR=OTHER_ENV_VARIABLE`` to redirect the lookup. A - ``FLYTE_CREDENTIALS_CLIENT_SECRET_FROM_FILE`` redirect is available as well, where the value should be the full - path to the file containing the value for the configuration setting, in this case, the client secret. We found - this redirect behavior necessary when setting up registration within our own CI pipelines. - - The following is a listing of the Flytekit configuration values we set in CI, along with a brief explanation. - - .. code-block:: bash - - # When using OAuth2 service auth, this is the username and password. - export FLYTE_CREDENTIALS_CLIENT_ID= - export FLYTE_CREDENTIALS_CLIENT_SECRET= - - # This tells the SDK to use basic authentication. If not set, Flytekit will assume you want to use the - # standard OAuth based three-legged flow. - export FLYTE_CREDENTIALS_AUTH_MODE=basic - - # This value should be set to conform to this - # `header config `_ - # on the Admin side. - export FLYTE_CREDENTIALS_AUTHORIZATION_METADATA_KEY=
- - # When using basic authentication, you'll need to specify a scope to the IDP (instead of ``openid``, which is - # only for OAuth). Set that here. - export FLYTE_CREDENTIALS_OAUTH_SCOPES= - - # Set this to force Flytekit to use authentication, even if not required by Admin. This is useful as you're - # rolling out the requirement. - export FLYTE_PLATFORM_AUTH=True - -.. _auth-references: - -********** -References -********** - -This collection of RFCs may be helpful to those who wish to investigate the implementation in more depth. - -* `OAuth2 RFC 6749 `_ -* `OAuth Discovery RFC 8414 `_ -* `PKCE RFC 7636 `_ -* `JWT RFC 7519 `_ - -There's also more detailed information about the authentication flows in the :ref:`deployment-configuration-auth-appendix`. diff --git a/rsts/deployment/configuration/cloud_event.rst b/rsts/deployment/configuration/cloud_event.rst deleted file mode 100644 index 5fa526cbc1..0000000000 --- a/rsts/deployment/configuration/cloud_event.rst +++ /dev/null @@ -1,159 +0,0 @@ -.. _deployment-configuration-cloud-event: - -############ -Cloud Events -############ -# gatepr: this doc needs to be updated -.. tags:: Infrastructure, AWS, GCP, Advanced - -Progress of Flyte workflow and task execution is delimited by a series of -events that are passed from the FlytePropeller to FlyteAdmin. Administrators -can configure FlyteAdmin to send these `cloud events `_ onwards to a pub/sub system like -SNS/SQS as well. Note that this configuration is distinct from the -configuration for notifications :ref:`deployment-configuration-notifications`, -and :ref:`deployment-configuration-eventing`. -They should use separate topics/queues. These events are meant for external -consumption, outside the Flyte platform. - -********* -Use cases -********* - -CloudEvents is a specification for describing event data in common formats -to provide interoperability across services, platforms and systems. - -The external events flow can be useful for tracking data lineage and -integrating with existing systems within your organization. - -************************* -Supported Implementations -************************* - -Event egress can be configured to work with **AWS** using -`SQS `_ and -`SNS `_, -**GCP** `Cloud Pub/Sub `_, or -`Apache Kafka `_ - -************* -Configuration -************* - -To turn on, add the following to your FlyteAdmin: - -.. tabs:: - - .. tab:: AWS SNS - - .. code:: yaml - - cloud_events.yaml: | - cloudEvents: - enable: true - aws: - region: us-east-2 - eventsPublisher: - eventTypes: - - all # or node, task, workflow - topicName: arn:aws:sns:us-east-2:123456:123-my-topic - type: aws - - .. tab:: GCP Pub/Sub - - .. code:: yaml - - cloud_events.yaml: | - cloudEvents: - enable: true - gcp: - region: us-east-2 - eventsPublisher: - eventTypes: - - all # or node, task, workflow - topicName: my-topic - type: gcp - - .. tab:: Apache Kafka - - .. code:: yaml - - cloud_events.yaml: | - cloudEvents: - enable: true - kafka: - brokers: 127.0.0.1:9092 - eventsPublisher: - eventTypes: - - all - topicName: myTopic - type: kafka - -Helm -====== -There should already be a section for this in the ``values.yaml`` file. Update -the settings under the ``cloud_events`` key and turn ``enable`` to ``true``. -The same flag is used for Helm as for Admin itself. - -***** -Usage -***** - -Version 1 -========= -The events are emitted in cloud Event format, and the data in the cloud event -will be base64 encoded binary representation of the following IDL messages: - -* ``admin_event_pb2.TaskExecutionEventRequest`` -* ``admin_event_pb2.NodeExecutionEventRequest`` -* ``admin_event_pb2.WorkflowExecutionEventRequest`` - -Which of these three events is being sent can be distinguished by the subject -line of the message, which will be one of the three strings above. - -Note that these message wrap the underlying event messages -:std:doc:`found here `. - -CloudEvent Spec ---------------- - -.. code:: json - - { - "specversion" : "1.0", - "type" : "com.flyte.resource.workflow", - "source" : "https://github.com/flyteorg/flyteadmin", - "id" : "D234-1234-1234", - "time" : "2018-04-05T17:31:00Z", - "jsonschemaurl": "https://github.com/flyteorg/flyteidl/blob/master/jsonschema/workflow_execution.json", - "data" : "workflow execution event" - } - -.. note:: - The message format may eventually change to an enriched and distinct message type in future releases. - -Version 2 -========= -These events are also in the cloud event spec, but there will be considerably more information in the event that users may find useful. Keep in mind however that turning on these events will induce a heavier load on the database as information is queried. - -The event types may be found in the following IDL messages (Python example given): - -* ``flyteidl.event.cloudevents_pb2.CloudEventWorkflowExecution`` -* ``flyteidl.event.cloudevents_pb2.CloudEventTaskExecution`` -* ``flyteidl.event.cloudevents_pb2.CloudEventNodeExecution`` -* ``flyteidl.event.cloudevents_pb2.CloudEventExecutionStart`` - -CloudEvent Spec ---------------- -The specification for these v2 events is similar, except that the jsonschemaurl will be blank for now. We are working on making these auto-generated from the IDL. - -.. code:: json - - { - "specversion" : "1.0", - "type" : "com.flyte.resource.cloudevents.WorkflowExecution", - "source" : "https://github.com/flyteorg/flyteadmin", - "id" : "D234-1234-1234", - "time" : "2018-04-05T17:31:00Z", - "jsonschemaurl": "", - "data" : (bytes of the underlying event) - } diff --git a/rsts/deployment/configuration/customizable_resources.rst b/rsts/deployment/configuration/customizable_resources.rst deleted file mode 100644 index a447c38f73..0000000000 --- a/rsts/deployment/configuration/customizable_resources.rst +++ /dev/null @@ -1,202 +0,0 @@ -.. _deployment-configuration-customizable-resources: - -################################# -Adding New Customizable Resources -################################# - -.. tags:: Infrastructure, Advanced - -As a quick refresher, custom resources allow you to manage configurations for specific combinations of user projects, domains and workflows that override default values. -Examples of such resources include execution clusters, task resource defaults, and :std:ref:`more `. - -.. note:: - For background on customizable resources, refer to :ref:`deployment-configuration-general`. - -In a :ref:`multi-cluster setup `, an example one could think of is setting routing rules to send certain workflows to specific clusters, which demands setting up custom resources. - -Here's how you could go about building a customizable priority designation. - -Example -------- - -Let's say you want to inject a default priority annotation for your workflows. -Perhaps you start off with a model where everything has a default priority but soon you realize it makes sense that workflows in your production domain should take higher priority than those in your development domain. - -Now, one of your user teams requires critical workflows to have a higher priority than other production workflows. - -Here's how you could do that. - -Flyte IDL -^^^^^^^^^ - -Introduce a new :std:ref:`matchable resource ` that includes a unique enum value and proto message definition. - -For example: - -:: - - enum MatchableResource { - ... - WORKFLOW_PRIORITY = 10; - } - - message WorkflowPriorityAttribute { - int priority = 1; - } - - message MatchingAttributes { - oneof target { - ... - WorkflowPriorityAttribute WorkflowPriority = 11; - } - } - - -See the changes in this `file `__ for an example of what is required. - - -FlyteAdmin -^^^^^^^^^^ - -Once your IDL changes are released, update the logic of FlyteAdmin to `fetch `__ your new matchable priority resource and use it while creating executions or in relevant use cases. - -For example: - -:: - - - resource, err := s.resourceManager.GetResource(ctx, managerInterfaces.ResourceRequest{ - Domain: domain, - Project: project, // optional - Workflow: workflow, // optional, must include project when specifying workflow - LaunchPlan: launchPlan, // optional, must include project + workflow when specifying launch plan - ResourceType: admin.MatchableResource_WORKFLOW_PRIORITY, - }) - - if err != nil { - return err - } - - if resource != nil && resource.Attributes != nil && resource.Attributes.GetWorkflowPriority() != nil { - priorityValue := resource.Attributes.GetWorkflowPriority().GetPriority() - // do something with the priority here - } - - -Flytekit -^^^^^^^^ - -For convenience, add a FlyteCTL wrapper to update the new attributes. Refer to `this PR `__ for the entire set of changes required. - -That's it! You now have a new matchable attribute to configure as the needs of your users evolve. - -Flyte ResourceManager ---------------------- - -**Flyte ResourceManager** is a configurable component that allows plugins to manage resource allocations independently. It helps track resource utilization of tasks that run on Flyte. The default deployments are configured as ``noop``, which indicates that the ResourceManager provided by Flyte is disabled and plugins rely on each independent platform to manage resource utilization. In situations like the K8s plugin, where the platform has a robust mechanism to manage resource scheduling, this may work well. However, in a scenario like a simple web API plugin, the rate at which Flyte sends requests may overwhelm a service and benefit from additional resource management. - -The below attribute is configurable within FlytePropeller, which can be disabled with: - -.. code-block:: yaml - - resourcemanager: - type: noop - -The ResourceManager provides a task-type-specific pooling system for Flyte tasks. Optionally, plugin writers can request resource allocation in their tasks. - -A plugin defines a collection of resource pools using its configuration. Flyte uses tokens as a placeholder to represent a unit of resource. - -How does a Flyte plugin request for resources? -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The Flyte plugin registers the resource and the desired quota of every resource with the **ResourceRegistrar** when setting up FlytePropeller. When a plugin is invoked, FlytePropeller provides a proxy for the plugin. This proxy facilitates the plugin's view of the resource pool by controlling operations to allocate and deallocate resources. - -.. dropdown:: :fa:`info-circle` Enabling Redis instance - :title: text-muted - :animate: fade-in-slide-down - - The ResourceManager can use a Redis instance as an external store to track and manage resource pool allocation. By default, it is disabled, and can be enabled with: - - .. code-block:: yaml - - resourcemanager: - type: redis - resourceMaxQuota: 100 - redis: - hostPaths: - - foo - hostKey: bar - maxRetries: 0 - -Once the setup is complete, FlytePropeller builds a ResourceManager based on the previously requested resource registration. Based on the plugin implementation's logic, resources are allocated and deallocated. - -During runtime, the ResourceManager: - -#. Allocates tokens to the plugin. -#. Releases tokens once the task is completed. - -How are resources allocated? -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -When a Flyte task execution needs to send a request to an external service, the plugin claims a unit of the corresponding resource. This is done using a **ResourceName**, which is a unique token and a fully qualified resource request (which is typically an integer). The execution generates this unique token and registers this token with the ResourceManager by calling the ResourceManager’s **"AllocateResource function"**. If the resource pool has sufficient capacity to fulfil your request, then the resources requested are allocated, and the plugin proceeds further. - -When the status is **"AllocationGranted"**, the execution moves forward and sends out the request for those resources. - -The granted token is recorded in a token pool which corresponds to the resource that is managed by the ResourceManager. - -How are resources deallocated? -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -When the request is completed, the plugin asks the ResourceManager to release the token by calling the ReleaseResource() function present in the ResourceManager. Upon calling the function, the token is eliminated from the token pool. -In this manner, Flyte plugins intelligently throttle resource usage during parallel execution of nodes. - -Example -^^^^^^^^ -Let's take an example to understand resource allocation and deallocation when a plugin requests resources. - -Flyte has a built-in `Qubole `__ plugin. This plugin allows Flyte tasks to send Hive commands to Qubole. In the plugin, a single Qubole cluster is considered a resource, and sending a single Hive command to a Qubole cluster consumes a token of the corresponding resource. -The resource is allocated when the status is **“AllocationGranted”**. Qubole plugin calls: - -.. code-block:: go - - status, err := AllocateResource(ctx, , , ) - -Wherein the placeholders are occupied by: - -.. code-block:: go - - status, err := AllocateResource(ctx, "default_cluster", "flkgiwd13-akjdoe-0", ResourceConstraintsSpec{}) - -The resource is deallocated when the Hive command completes its execution and the corresponding token is released. The plugin calls: - -.. code-block:: go - - status, err := AllocateResource(ctx, , , ) - -Wherein the placeholders are occupied by: - -.. code-block:: go - - err := ReleaseResource(ctx, "default_cluster", "flkgiwd13-akjdoe-0") - -Below is an example interface that shows allocation and deallocation of resources. - -.. code-block:: go - - type ResourceManager interface { - GetID() string - // During execution, the plugin calls AllocateResource() to register a token in the token pool associated with a resource - // If it is granted an allocation, the token is recorded in the token pool until the same plugin releases it. - // When calling AllocateResource, the plugin has to specify a ResourceConstraintsSpec that contains resource capping constraints at different project and namespace levels. - // The ResourceConstraint pointers in ResourceConstraintsSpec can be set to nil to not have a constraint at that level - AllocateResource(ctx context.Context, namespace ResourceNamespace, allocationToken string, constraintsSpec ResourceConstraintsSpec) (AllocationStatus, error) - // During execution, after an outstanding request is completed, the plugin uses ReleaseResource() to release the allocation of the token from the token pool. This way, it redeems the quota taken by the token - ReleaseResource(ctx context.Context, namespace ResourceNamespace, allocationToken string) error - } - -How can you force ResourceManager to force runtime quota allocation constraints? -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Runtime quota allocation constraints can be achieved using ResourceConstraintsSpec. It is a contact that a plugin can specify at different project and namespace levels. - -Let's take an example to understand it. - -You can set ResourceConstraintsSpec to ``nil`` objects, which means there would be no allocation constraints at the respective project and namespace level. When ResourceConstraintsSpec specifies ``nil`` ProjectScopeResourceConstraint, and a non-nil NamespaceScopeResourceConstraint, it suggests no constraints specified at any project or namespace level. diff --git a/rsts/deployment/configuration/eventing.rst b/rsts/deployment/configuration/eventing.rst deleted file mode 100644 index 1282cd8917..0000000000 --- a/rsts/deployment/configuration/eventing.rst +++ /dev/null @@ -1,64 +0,0 @@ -.. _deployment-configuration-eventing: - -############### -Platform Events -############### - -.. tags:: Configuration, Infrastructure, Advanced - -Progress of Flyte workflow and task execution is delimited by a series of events that are passed from the FlytePropeller to FlyteAdmin. -Administrators can configure FlyteAdmin to send these events onwards to a pub/sub system like SNS/SQS as well. Note that this configuration is distinct from the configuration for notifications :ref:`deployment-configuration-notifications`. They should use separate topics/queues. These events are meant for external consumption, outside the Flyte platform, whereas the notifications pub/sub setup is entirely for Admin itself to send email/pagerduty/etc notifications. - -********* -Use cases -********* - -The external events flow can be useful for tracking data lineage and integrating with existing systems within your organization. - -************************* -Supported Implementations -************************* - -Event egress can be configured to work with **AWS** using `SQS `_ and `SNS `_ or **GCP** `Cloud Pub/Sub `_. - -************* -Configuration -************* - -To turn on, add the following to your FlyteAdmin: - -.. code:: yaml - - external_events.yaml: | - externalEvents: - enable: true - aws: - region: us-east-2 - eventsPublisher: - eventTypes: - - all - topicName: arn:aws:sns:us-east-2:123456:123-my-topic - type: aws - -Helm -==== - -There should already be a section for this in the ``values.yaml`` file. -Update the settings under the ``external_events`` key and turn ``enable`` to ``true``. The same flag is used for Helm as for Admin itself. - -***** -Usage -***** - -The events emitted will be base64 encoded binary representation of the following IDL messages: - -* ``admin_event_pb2.TaskExecutionEventRequest`` -* ``admin_event_pb2.NodeExecutionEventRequest`` -* ``admin_event_pb2.WorkflowExecutionEventRequest`` - -Which of these three events is being sent can be distinguished by the subject line of the message, which will be one of the three strings above. - -Note that these message wrap the underlying event messages :std:doc:`found here `. - -.. note:: - The message format may eventually change to an enriched and distinct message type in future releases. diff --git a/rsts/deployment/configuration/general.rst b/rsts/deployment/configuration/general.rst deleted file mode 100644 index c61d096930..0000000000 --- a/rsts/deployment/configuration/general.rst +++ /dev/null @@ -1,740 +0,0 @@ -.. _deployment-configuration-general: - -################################# -Configuring Custom K8s Resources -################################# - -*************************** -Configurable Resource Types -*************************** - -Many platform specifications such as task resource defaults, project namespace Kubernetes quota, and more can be -assigned using default values or custom overrides. Defaults are specified in the FlyteAdmin config and -overrides for specific projects are registered with the FlyteAdmin service. - -You can customize these settings along increasing levels of specificity with Flyte: - -- Domain -- Project and Domain -- Project, Domain, and Workflow name -- Project, Domain, Workflow name and LaunchPlan name - -See :ref:`concepts/control_plane:control plane` to understand projects and domains. -The following section will show you how to configure the settings along -these dimensions. - -Task Resources -============== - -Configuring task :py:class:`resources ` includes -setting default values for unspecified task requests and limits. Task resources -also include limits which specify the maximum value that a task request or a limit can have. - -- CPU -- GPU -- Memory -- Storage -- `Ephemeral Storage `__ - -In the absence of an override, the global -`default values `__ -in `task_resource_defaults` are used. - -The override values from the database are assigned at execution, rather than registration time. - -To customize resources for project-domain attributes, define a ``tra.yaml`` file with your overrides: - -.. code-block:: yaml - - defaults: - cpu: "1" - memory: 150Mi - limits: - cpu: "2" - memory: 450Mi - project: flyteexamples - domain: development - -Update the task resource attributes for a project-domain combination: - -.. prompt:: bash $ - - flytectl update task-resource-attribute --attrFile tra.yaml - -.. note:: - - Refer to the :ref:`docs ` to - learn more about the command and its supported flag(s). - -To fetch and verify the individual project-domain attributes: - -.. prompt:: bash $ - - flytectl get task-resource-attribute -p flyteexamples -d development - -.. note:: - - Refer to the :ref:`docs ` to learn - more about the command and its supported flag(s). - -You can view all custom task-resource-attributes by visiting -``protocol://`` and substitute -the protocol and host appropriately. - -Cluster Resources -================= -These are free-form key-value pairs used when filling the templates that the -admin feeds into the cluster manager, which is the process that syncs Kubernetes -resources. - -The keys represent templatized variables in the -`cluster resource template `__ -and the values are what you want to see filled in. - -In the absence of custom override values, you can use ``templateData`` from the -`FlyteAdmin config `__ -as a default. Flyte specifies these defaults by domain and applies them to every -project-domain namespace combination. - -.. note:: - The settings above can be specified on domain, and project-and-domain. - Since Flyte hasn't tied the notion of a workflow or a launch plan to any Kubernetes construct, specifying a workflow or launch plan name doesn't make sense. - This is a departure from the usual hierarchy for customizable resources. - -Define an attributes file, ``cra.yaml``: - -.. code-block:: yaml - - domain: development - project: flyteexamples - attributes: - projectQuotaCpu: "1000" - projectQuotaMemory: 5Ti - -To ensure that the overrides reflect in the Kubernetes namespace -``flyteexamples-development`` (that is, the namespace has a resource quota of -1000 CPU cores and 5TB of memory) when the admin fills in cluster resource -templates: - -.. prompt:: bash $ - - flytectl update cluster-resource-attribute --attrFile cra.yaml - -.. note:: - - Refer to the :ref:`docs ` - to learn more about the command and its supported flag(s). - -To fetch and verify the individual project-domain attributes: - -.. prompt:: bash $ - - flytectl get cluster-resource-attribute -p flyteexamples -d development - -.. note:: - - Refer to the :ref:`docs ` to - learn more about the command and its supported flag(s). - -Flyte uses these updated values to fill the template fields for the -``flyteexamples-development`` namespace. - -For other namespaces, the -`platform defaults `__ -apply. - -.. note:: - The template values, for example, ``projectQuotaCpu`` or ``projectQuotaMemory`` are free-form strings. - Ensure that they match the template placeholders in your `template file `__ - for your changes to take effect and custom values to be substituted. - -You can view all custom cluster-resource-attributes by visiting ``protocol://`` -and substitute the protocol and host appropriately. - -Execution Cluster Label -======================= -This allows forcing a matching execution to consistently execute on a specific -Kubernetes cluster for multi-cluster Flyte deployment set-up. - -Define an attributes file in `ec.yaml`: - -.. code-block:: yaml - - value: mycluster - domain: development - project: flyteexamples - -Ensure that admin places executions in the flyteexamples project and development domain onto ``mycluster``: - -.. prompt:: bash $ - - flytectl update execution-cluster-label --attrFile ec.yaml - -.. note:: - - Refer to the :ref:`docs ` - to learn more about the command and its supported flag(s). - -To fetch and verify the individual project-domain attributes: - -.. prompt:: bash $ - - flytectl get execution-cluster-label -p flyteexamples -d development - -.. note:: - - Refer to the :ref:`docs ` to - learn more about the command and its supported flag(s). - -You can view all custom execution cluster attributes by visiting -``protocol://`` and substitute -the protocol and host appropriately. - -Execution Queues -================ -Execution queues are defined in -`flyteadmin config `__. -These are used for execution placement for constructs like AWS Batch. - -The **attributes** associated with an execution queue must match the **tags** -for workflow executions. The tags associated with configurable resources are -stored in the admin database. - -.. prompt:: bash $ - - flytectl update execution-queue-attribute - -.. note:: - - Refer to the :ref:`docs ` - to learn more about the command and its supported flag(s). - -You can view existing attributes for which tags can be assigned by visiting -``protocol:///api/v1/matchable_attributes?resource_type=2`` and substitute -the protocol and host appropriately. - -Workflow Execution Config -========================= - -This helps with overriding the config used for workflows execution which includes -`security context `__, `annotations or labels `__ -etc. in the `Workflow execution config `__. -These can be defined at two levels of project-domain or project-domain-workflow: - -.. prompt:: bash $ - - flytectl update workflow-execution-config - -.. note:: - - Refer to the :ref:`docs ` - to learn more about the command and its supported flag(s). - -Configuring Service Roles -========================= -You can configure service roles along 3 levels: - -#. Project + domain defaults (every execution launched in this project/domain uses this service account) - -#. Launch plan default (every invocation of this launch plan uses this service account) - -#. Execution time override (overrides at invocation for a specific execution only) - -********* -Hierarchy -********* - -Increasing specificity defines how matchable resource attributes get applied. -The available configurations, in order of decreasing specificity are: - -#. Domain, Project, Workflow name, and LaunchPlan - -#. Domain, Project, and Workflow name - -#. Domain and Project - -#. Domain - -Default values for all and per-domain attributes may be specified in the -FlyteAdmin config as documented in the :std:ref:`deployment-configuration-customizable-resources`. - -Example -======= -If the database includes the following: - -+------------+--------------+----------+-------------+-----------+ -| Domain | Project | Workflow | Launch Plan | Tags | -+============+==============+==========+=============+===========+ -| production | widgetmodels | | | critical | -+------------+--------------+----------+-------------+-----------+ -| production | widgetmodels | Demand | | supply | -+------------+--------------+----------+-------------+-----------+ - -- Any inbound ``CreateExecution`` requests with **[Domain: Production, Project: widgetmodels, Workflow: Demand]** for any launch plan will have a tag value of "supply". -- Any inbound ``CreateExecution`` requests with **[Domain: Production, Project: widgetmodels]** for any workflow other than ``Demand`` and any launch plan will have a tag value "critical". -- All other inbound CreateExecution requests will use the default values specified in the FlyteAdmin config (if any). - - -Configuring K8s Pod -=================== - -There are two approaches to applying the K8s Pod configuration. The **recommended** -method is to use Flyte's Compile-time and Runtime PodTemplate schemes. You can do this by creating -K8s PodTemplate resource/s that serves as the base configuration for all the -task Pods that Flyte initializes. This solution ensures completeness regarding -support configuration options and maintainability as new features are added to K8s. - -The legacy technique is to set configuration options in Flyte's K8s plugin configuration. - -.. note :: - - These two approaches can be used simultaneously, where the K8s plugin configuration will override the default PodTemplate values. - -.. _using-k8s-podtemplates: - -******************************* -Using K8s PodTemplates -******************************* - -`PodTemplate `__ -is a K8s native resource used to define a K8s Pod. It contains all the fields in -the PodSpec, in addition to ObjectMeta to control resource-specific metadata -such as Labels or Annotations. They are commonly applied in Deployments, -ReplicaSets, etc to define the managed Pod configuration of the resources. - -Within Flyte, you can leverage this resource to configure Pods created as part -of Flyte's task execution. It ensures complete control over Pod configuration, -supporting all options available through the resource and ensuring maintainability -in future versions. - -Starting with the Flyte 1.4 release, we now have 2 ways of defining `PodTemplate `__: -1. Compile-time PodTemplate defined at the task level -2. Runtime PodTemplates - - -Compile-time PodTemplates -========================= - -We can define a compile-time pod template, as part of the definition of a `Task `__, for example: - -.. code-block:: python - - @task( - pod_template=PodTemplate( - primary_container_name="primary", - labels={"lKeyA": "lValA", "lKeyB": "lValB"}, - annotations={"aKeyA": "aValA", "aKeyB": "aValB"}, - pod_spec=V1PodSpec( - containers=[ - V1Container( - name="primary", - image="repo/placeholderImage:0.0.0", - command="echo", - args=["wow"], - resources=V1ResourceRequirements(limits={"cpu": "999", "gpu": "999"}), - env=[V1EnvVar(name="eKeyC", value="eValC"), V1EnvVar(name="eKeyD", value="eValD")], - ), - ], - volumes=[V1Volume(name="volume")], - tolerations=[ - V1Toleration( - key="num-gpus", - operator="Equal", - value=1, - effect="NoSchedule", - ), - ], - ) - ) - ) - def t1() -> int: - ... - -Notice how in this example we are defining a new PodTemplate inline, which allows us to define a full -`V1PodSpec `__ and also define -the name of the primary container, labels, and annotations. - -The term compile-time here refers to the fact that the pod template definition is part of the `TaskSpec `__. - -Runtime PodTemplates -==================== - -Runtime PodTemplates, as the name suggests, are applied during runtime, as part of building the resultant Pod. In terms of how -they are applied, you have two choices: (1) you either elect one specific PodTemplate to be considered as default, or (2) you -define a PodTemplate name and use that in the declaration of the task. Those two options are mutually exclusive, meaning that -in the situation where a default PodTemplate is set and a PodTemplate name is present in the task definition, only the -PodTemplate name will be used. - - -Set the ``default-pod-template-name`` in FlytePropeller --------------------------------------------------------- - -This `option `__ -initializes a K8s informer internally to track system PodTemplate updates -(creates, updates, etc) so that FlytePropeller is -`aware `__ -of the latest PodTemplate definitions in the K8s environment. You can find this -setting in `FlytePropeller `__ -config map, which is not set by default. - -An example configuration is: - -.. code-block:: yaml - - plugins: - k8s: - co-pilot: - name: "flyte-copilot-" - image: "cr.flyte.org/flyteorg/flytecopilot:v0.0.15" - start-timeout: "30s" - default-pod-template-name: - -Create a PodTemplate resource ------------------------------- - -Flyte recognizes PodTemplate definitions with the ``default-pod-template-name`` at two granularities. - -1. A system-wide configuration can be created in the same namespace that - FlytePropeller is running in (typically `flyte`). -2. PodTemplates can be applied from the same namespace that the Pod will be - created in. FlytePropeller always favors the PodTemplate with the more - specific namespace. For example, a Pod created in the ``flytesnacks-development`` - namespace will first look for a PodTemplate from the ``flytesnacks-development`` - namespace. If that PodTemplate doesn't exist, it will look for a PodTemplate - in the same namespace that FlytePropeller is running in (in our example, ``flyte``), - and if that doesn't exist, it will begin configuration with an empty PodTemplate. - -Flyte configuration supports all the fields available in the PodTemplate -resource, including container-level configuration. Specifically, containers may -be configured at two granularities, namely "default" and "primary". - -In this scheme, if the default PodTemplate contains a container with the name -"default", that container will be used as the base configuration for all -containers Flyte constructs. Similarly, a container named "primary" will be used -as the base container configuration for all primary containers. If both container -names exist in the default PodTemplate, Flyte first applies the default -configuration, followed by the primary configuration. - -The ``containers`` field is required in each k8s PodSpec. If no default -configuration is desired, specifying a container with a name other than "default" -or "primary" (for example, "noop") is considered best practice. Since Flyte only -processes the "default" or "primary" containers, this value will always be dropped -during Pod construction. Similarly, each k8s container is required to have an -``image``. This value will always be overridden by Flyte, so this value may be -set to anything. However, we recommend using a real image, for example -``docker.io/rwgrim/docker-noop``. - -Using ``pod_template_name`` in a Task --------------------------------------- - -It's also possible to use PodTemplate in tasks by specifying ``pod_template_name`` in the task definition. For example: - -.. code-block:: python - - @task( - pod_template_name="a_pod_template", - ) - def t1() -> int: - ... - -In this example we're specifying that a previously created Runtime PodTemplate resource named ``a_pod_template`` is going to be applied. -The only requirement is that this PodTemplate exists at the moment this task is about to be executed. - - -********************************* -Flyte's K8s Plugin Configuration -********************************* - -The FlytePlugins repository defines `configuration `__ -for the Flyte K8s Plugin. They contain a variety of common options for Pod configuration -which are applied when constructing a Pod. Typically, these options map one-to-one -with K8s Pod fields. This makes it difficult to maintain configuration options as K8s -versions change and fields are added/deprecated. - -********************************* -Evaluation Order in PodTemplates -********************************* - -The following diagram shows the precedence in evaluation order between the different types of PodTemplates and K8s Plugin Configuration. The precedence is higher at the top and decreases as the height of the tree increases. - -.. mermaid:: - :alt: Evaluation order of PodTemplates - - graph BT - B["@task pod_template"] --> A["k8s plugin"] - C["runtime PodTemplate"] --> B - D["@task pod_template_name"] --> B - - -To better understand how Flyte constructs task execution Pods based on Compile-time and Runtime PodTemplates, -and K8s plugin configuration options, let's take a few examples. - -Example 1: Runtime PodTemplate and K8s Plugin Configuration -=========================================================== - -If you have a Runtime PodTemplate defined in the ``flyte`` namespace -(where FlytePropeller instance is running), then it is applied to all Pods that -Flyte creates, unless a **more specific** PodTemplate is defined in the namespace -where you start the Pod. - -An example PodTemplate is shown: - -.. code-block:: yaml - - apiVersion: v1 - kind: PodTemplate - metadata: - name: flyte-template - namespace: flyte - template: - metadata: - labels: - - foo - annotations: - - foo: initial-value - - bar: initial-value - spec: - containers: - - name: default - image: docker.io/rwgrim/docker-noop - terminationMessagePath: "/dev/foo" - hostNetwork: false - -In addition, the K8s plugin configuration in FlytePropeller defines the default -Pod Labels, Annotations, and enables the host networking. - -.. code-block:: yaml - - plugins: - k8s: - default-labels: - - bar - default-annotations: - - foo: overridden-value - - baz: non-overridden-value - enable-host-networking-pod: true - -To construct a Pod, FlytePropeller initializes a Pod definition using the default -PodTemplate. This definition is applied to the K8s plugin configuration values, -and any task-specific configuration is overlaid. During the process, when lists -are merged, values are appended and when maps are merged, the values are overridden. -The resultant Pod using the above default PodTemplate and K8s Plugin configuration is shown: - -.. code-block:: yaml - - apiVersion: v1 - kind: Pod - metadata: - name: example-pod - namespace: flytesnacks-development - labels: - - foo // maintained initial value - - bar // value appended by k8s plugin configuration - annotations: - - foo: overridden-value // value overridden by k8s plugin configuration - - bar: initial-value // maintained initial value - - baz: non-overridden-value // value added by k8s plugin configuration - spec: - containers: - - name: ax9kd5xb4p8r45bpdv7v-n0-0 - image: ghcr.io/flyteorg/flytecookbook:core-bfee7e549ad749bfb55922e130f4330a0ebc25b0 - terminationMessagePath: "/dev/foo" - // remaining container configuration omitted - hostNetwork: true // overridden by the k8s plugin configuration - -The last step in constructing a Pod is to apply any task-specific configuration. -These options follow the same rules as merging the default PodTemplate and K8s -Plugin configuration (that is, list appends and map overrides). Task-specific -options are intentionally robust to provide fine-grained control over task -execution in diverse use-cases. Therefore, exploration is beyond this scope -and has therefore been omitted from this documentation. - -Example 2: A Runtime and Compile-time PodTemplates -================================================== - -In this example we're going to have a Runtime PodTemplate and a Compile-time PodTemplate defined in a task. - -Let's say we have this Runtime PodTemplate defined in the same namespace as the one used to kick off an execution -of the task. For example: - -.. code-block:: yaml - - apiVersion: v1 - kind: PodTemplate - metadata: - name: flyte-template - namespace: flytesnacks-development - template: - metadata: - annotations: - - annotation_1: initial-value - - bar: initial-value - spec: - containers: - - name: default - image: docker.io/rwgrim/docker-noop - terminationMessagePath: "/dev/foo" - -And the definition of the Compile-time PodTemplate in a task: - -.. code-block:: python - - @task( - pod_template=PodTemplate( - primary_container_name="primary", - labels={ - "label_1": "value-1", - "label_2": "value-2", - }, - annotations={ - "annotation_1": "value-1", - "annotation_2": "value-2", - }, - pod_spec=V1PodSpec( - containers=[ - V1Container( - name="primary", - image="a.b.c/image:v1", - command="cmd", - args=[], - ), - ], - ) - ) - ) - def t1() -> int: - ... - -The resultant Pod is as follows: - -.. code-block:: yaml - - apiVersion: v1 - kind: Pod - metadata: - name: example-pod - namespace: flytesnacks-development - labels: - - label_1: value-1 # from Compile-time value - - label_2: value-2 # from Compile-time value - annotations: - - annotation_1: value-1 # value overridden by Compile-time PodTemplate - - annotation_2: value-2 # from Compile-time PodTemplate - - bar: initial-value # from Runtime PodTemplate - spec: - containers: - - name: default - image: docker.io/rwgrim/docker-noop - terminationMessagePath: "/dev/foo" - - name: primary - image: a.b.c/image:v1 - command: cmd - args: [] - // remaining container configuration omitted - -Notice how options follow the same merging rules, i.e. lists append and maps override. - - -Example 3: Runtime and Compile-time PodTemplates and K8s Plugin Configuration -============================================================================= - -Now let's make a slightly more complicated example where now we have both Compile-time and Runtime PodTemplates being combined -with K8s Configuration. - -Here's the definition of a Compile-time PodTemplate: - -.. code-block:: python - - @task( - pod_template=PodTemplate( - primary_container_name="primary", - labels={ - "label_1": "value-compile", - "label_2": "value-compile", - }, - annotations={ - "annotation_1": "value-compile", - "annotation_2": "value-compile", - }, - pod_spec=V1PodSpec( - containers=[ - V1Container( - name="primary", - image="a.b.c/image:v1", - command="cmd", - args=[], - ), - ], - host_network=True, - ) - ) - ) - def t1() -> int: - ... - - -And a Runtime PodTemplate: - -.. code-block:: yaml - - apiVersion: v1 - kind: PodTemplate - metadata: - name: flyte-template - namespace: flyte - template: - metadata: - labels: - - label_1: value-runtime - - label_2: value-runtime - - label_3: value-runtime - annotations: - - foo: value-runtime - - bar: value-runtime - spec: - containers: - - name: default - image: docker.io/rwgrim/docker-noop - terminationMessagePath: "/dev/foo" - hostNetwork: false - -And the following K8s Plugin Configuration: - -.. code-block:: yaml - - plugins: - k8s: - default-labels: - - label_1: value-plugin - default-annotations: - - annotation_1: value-plugin - - baz: value-plugin - -The resultant pod for that task is as follows: - -.. code-block:: yaml - - apiVersion: v1 - kind: Pod - metadata: - name: example-pod - namespace: flytesnacks-development - labels: - - label_1: value-plugin - - label_2: value-compile - annotations: - - annotation_1: value-plugin - - annotation_2: value-compile - - foo: value-runtime - - bar: value-runtime - - baz: value-plugin - spec: - containers: - - name: default - image: docker.io/rwgrim/docker-noop - terminationMessagePath: "/dev/foo" - - name: primary - image: a.b.c/image:v1 - command: cmd - args: [] - // remaining container configuration omitted diff --git a/rsts/deployment/configuration/generated/datacatalog_config.rst b/rsts/deployment/configuration/generated/datacatalog_config.rst deleted file mode 100644 index d65ac218bb..0000000000 --- a/rsts/deployment/configuration/generated/datacatalog_config.rst +++ /dev/null @@ -1,996 +0,0 @@ -.. _flytedatacatalog-config-specification: - -######################################### -Flyte Datacatalog Configuration -######################################### - -- `application <#section-application>`_ - -- `database <#section-database>`_ - -- `datacatalog <#section-datacatalog>`_ - -- `logger <#section-logger>`_ - -- `otel <#section-otel>`_ - -- `storage <#section-storage>`_ - -Section: application -======================================================================================================================== - -grpcPort (int) ------------------------------------------------------------------------------------------------------------------------- - -On which grpc port to serve Catalog - -**Default Value**: - -.. code-block:: yaml - - "8081" - - -grpcServerReflection (bool) ------------------------------------------------------------------------------------------------------------------------- - -Enable GRPC Server Reflection - -**Default Value**: - -.. code-block:: yaml - - "true" - - -httpPort (int) ------------------------------------------------------------------------------------------------------------------------- - -On which http port to serve Catalog - -**Default Value**: - -.. code-block:: yaml - - "8080" - - -secure (bool) ------------------------------------------------------------------------------------------------------------------------- - -Whether to run Catalog in secure mode or not - -**Default Value**: - -.. code-block:: yaml - - "false" - - -readHeaderTimeoutSeconds (int) ------------------------------------------------------------------------------------------------------------------------- - -The amount of time allowed to read request headers. - -**Default Value**: - -.. code-block:: yaml - - "32" - - -Section: database -======================================================================================================================== - -host (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "" - - -port (int) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "0" - - -dbname (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "" - - -username (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "" - - -password (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "" - - -passwordPath (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "" - - -options (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "" - - -debug (bool) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "false" - - -enableForeignKeyConstraintWhenMigrating (bool) ------------------------------------------------------------------------------------------------------------------------- - -Whether to enable gorm foreign keys when migrating the db - -**Default Value**: - -.. code-block:: yaml - - "false" - - -maxIdleConnections (int) ------------------------------------------------------------------------------------------------------------------------- - -maxIdleConnections sets the maximum number of connections in the idle connection pool. - -**Default Value**: - -.. code-block:: yaml - - "10" - - -maxOpenConnections (int) ------------------------------------------------------------------------------------------------------------------------- - -maxOpenConnections sets the maximum number of open connections to the database. - -**Default Value**: - -.. code-block:: yaml - - "100" - - -connMaxLifeTime (`config.Duration`_) ------------------------------------------------------------------------------------------------------------------------- - -sets the maximum amount of time a connection may be reused - -**Default Value**: - -.. code-block:: yaml - - 1h0m0s - - -postgres (`database.PostgresConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - dbname: postgres - debug: false - host: postgres - options: sslmode=disable - password: "" - passwordPath: "" - port: 5432 - username: postgres - - -sqlite (`database.SQLiteConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - file: "" - - -config.Duration -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Duration (int64) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - 1h0m0s - - -database.PostgresConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -host (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -The host name of the database server - -**Default Value**: - -.. code-block:: yaml - - postgres - - -port (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -The port name of the database server - -**Default Value**: - -.. code-block:: yaml - - "5432" - - -dbname (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -The database name - -**Default Value**: - -.. code-block:: yaml - - postgres - - -username (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -The database user who is connecting to the server. - -**Default Value**: - -.. code-block:: yaml - - postgres - - -password (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -The database password. - -**Default Value**: - -.. code-block:: yaml - - "" - - -passwordPath (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Points to the file containing the database password. - -**Default Value**: - -.. code-block:: yaml - - "" - - -options (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -See http://gorm.io/docs/connecting_to_the_database.html for available options passed, in addition to the above. - -**Default Value**: - -.. code-block:: yaml - - sslmode=disable - - -debug (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Whether or not to start the database connection with debug mode enabled. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -database.SQLiteConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -file (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -The path to the file (existing or new) where the DB should be created / stored. If existing, then this will be re-used, else a new will be created - -**Default Value**: - -.. code-block:: yaml - - "" - - -Section: datacatalog -======================================================================================================================== - -storage-prefix (string) ------------------------------------------------------------------------------------------------------------------------- - -StoragePrefix specifies the prefix where DataCatalog stores offloaded ArtifactData in CloudStorage. If not specified, the data will be stored in the base container directly. - -**Default Value**: - -.. code-block:: yaml - - metadata - - -metrics-scope (string) ------------------------------------------------------------------------------------------------------------------------- - -Scope that the metrics will record under. - -**Default Value**: - -.. code-block:: yaml - - datacatalog - - -profiler-port (int) ------------------------------------------------------------------------------------------------------------------------- - -Port that the profiling service is listening on. - -**Default Value**: - -.. code-block:: yaml - - "10254" - - -heartbeat-grace-period-multiplier (int) ------------------------------------------------------------------------------------------------------------------------- - -Number of heartbeats before a reservation expires without an extension. - -**Default Value**: - -.. code-block:: yaml - - "3" - - -max-reservation-heartbeat (`config.Duration`_) ------------------------------------------------------------------------------------------------------------------------- - -The maximum available reservation extension heartbeat interval. - -**Default Value**: - -.. code-block:: yaml - - 10s - - -Section: logger -======================================================================================================================== - -show-source (bool) ------------------------------------------------------------------------------------------------------------------------- - -Includes source code location in logs. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -mute (bool) ------------------------------------------------------------------------------------------------------------------------- - -Mutes all logs regardless of severity. Intended for benchmarks/tests only. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -level (int) ------------------------------------------------------------------------------------------------------------------------- - -Sets the minimum logging level. - -**Default Value**: - -.. code-block:: yaml - - "3" - - -formatter (`logger.FormatterConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -Sets logging format. - -**Default Value**: - -.. code-block:: yaml - - type: json - - -logger.FormatterConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -type (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Sets logging format type. - -**Default Value**: - -.. code-block:: yaml - - json - - -Section: otel -======================================================================================================================== - -type (string) ------------------------------------------------------------------------------------------------------------------------- - -Sets the type of exporter to configure [noop/file/jaeger]. - -**Default Value**: - -.. code-block:: yaml - - noop - - -file (`otelutils.FileConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -Configuration for exporting telemetry traces to a file - -**Default Value**: - -.. code-block:: yaml - - filename: /tmp/trace.txt - - -jaeger (`otelutils.JaegerConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -Configuration for exporting telemetry traces to a jaeger - -**Default Value**: - -.. code-block:: yaml - - endpoint: http://localhost:14268/api/traces - - -otelutils.FileConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -filename (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Filename to store exported telemetry traces - -**Default Value**: - -.. code-block:: yaml - - /tmp/trace.txt - - -otelutils.JaegerConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -endpoint (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Endpoint for the jaeger telemtry trace ingestor - -**Default Value**: - -.. code-block:: yaml - - http://localhost:14268/api/traces - - -Section: storage -======================================================================================================================== - -type (string) ------------------------------------------------------------------------------------------------------------------------- - -Sets the type of storage to configure [s3/minio/local/mem/stow]. - -**Default Value**: - -.. code-block:: yaml - - s3 - - -connection (`storage.ConnectionConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - access-key: "" - auth-type: iam - disable-ssl: false - endpoint: "" - region: us-east-1 - secret-key: "" - - -stow (`storage.StowConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -Storage config for stow backend. - -**Default Value**: - -.. code-block:: yaml - - {} - - -container (string) ------------------------------------------------------------------------------------------------------------------------- - -Initial container (in s3 a bucket) to create -if it doesn't exist-.' - -**Default Value**: - -.. code-block:: yaml - - "" - - -enable-multicontainer (bool) ------------------------------------------------------------------------------------------------------------------------- - -If this is true, then the container argument is overlooked and redundant. This config will automatically open new connections to new containers/buckets as they are encountered - -**Default Value**: - -.. code-block:: yaml - - "false" - - -cache (`storage.CachingConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - max_size_mbs: 0 - target_gc_percent: 0 - - -limits (`storage.LimitsConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -Sets limits for stores. - -**Default Value**: - -.. code-block:: yaml - - maxDownloadMBs: 2 - - -defaultHttpClient (`storage.HTTPClientConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -Sets the default http client config. - -**Default Value**: - -.. code-block:: yaml - - headers: null - timeout: 0s - - -signedUrl (`storage.SignedURLConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -Sets config for SignedURL. - -**Default Value**: - -.. code-block:: yaml - - {} - - -storage.CachingConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -max_size_mbs (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Maximum size of the cache where the Blob store data is cached in-memory. If not specified or set to 0, cache is not used - -**Default Value**: - -.. code-block:: yaml - - "0" - - -target_gc_percent (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Sets the garbage collection target percentage. - -**Default Value**: - -.. code-block:: yaml - - "0" - - -storage.ConnectionConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -endpoint (`config.URL`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -URL for storage client to connect to. - -**Default Value**: - -.. code-block:: yaml - - "" - - -auth-type (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Auth Type to use [iam,accesskey]. - -**Default Value**: - -.. code-block:: yaml - - iam - - -access-key (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Access key to use. Only required when authtype is set to accesskey. - -**Default Value**: - -.. code-block:: yaml - - "" - - -secret-key (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Secret to use when accesskey is set. - -**Default Value**: - -.. code-block:: yaml - - "" - - -region (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Region to connect to. - -**Default Value**: - -.. code-block:: yaml - - us-east-1 - - -disable-ssl (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Disables SSL connection. Should only be used for development. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -config.URL -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -URL (`url.URL`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - ForceQuery: false - Fragment: "" - Host: "" - OmitHost: false - Opaque: "" - Path: "" - RawFragment: "" - RawPath: "" - RawQuery: "" - Scheme: "" - User: null - - -url.URL -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Scheme (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -Opaque (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -User (url.Userinfo) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -Host (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -Path (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -RawPath (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -OmitHost (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "false" - - -ForceQuery (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "false" - - -RawQuery (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -Fragment (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -RawFragment (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -storage.HTTPClientConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -headers (map[string][]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -timeout (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Sets time out on the http client. - -**Default Value**: - -.. code-block:: yaml - - 0s - - -storage.LimitsConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -maxDownloadMBs (int64) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Maximum allowed download size (in MBs) per call. - -**Default Value**: - -.. code-block:: yaml - - "2" - - -storage.SignedURLConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -stowConfigOverride (map[string]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -storage.StowConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -kind (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Kind of Stow backend to use. Refer to github/flyteorg/stow - -**Default Value**: - -.. code-block:: yaml - - "" - - -config (map[string]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Configuration for stow backend. Refer to github/flyteorg/stow - -**Default Value**: - -.. code-block:: yaml - - {} - - diff --git a/rsts/deployment/configuration/generated/flyteadmin_config.rst b/rsts/deployment/configuration/generated/flyteadmin_config.rst deleted file mode 100644 index 8952377f71..0000000000 --- a/rsts/deployment/configuration/generated/flyteadmin_config.rst +++ /dev/null @@ -1,5325 +0,0 @@ -.. _flyteadmin-config-specification: - -######################################### -Flyte Admin Configuration -######################################### - -- `admin <#section-admin>`_ - -- `auth <#section-auth>`_ - -- `cloudevents <#section-cloudevents>`_ - -- `cluster_resources <#section-cluster_resources>`_ - -- `clusterpools <#section-clusterpools>`_ - -- `clusters <#section-clusters>`_ - -- `database <#section-database>`_ - -- `domains <#section-domains>`_ - -- `externalevents <#section-externalevents>`_ - -- `flyteadmin <#section-flyteadmin>`_ - -- `logger <#section-logger>`_ - -- `namespace_mapping <#section-namespace_mapping>`_ - -- `notifications <#section-notifications>`_ - -- `otel <#section-otel>`_ - -- `plugins <#section-plugins>`_ - -- `propeller <#section-propeller>`_ - -- `qualityofservice <#section-qualityofservice>`_ - -- `queues <#section-queues>`_ - -- `registration <#section-registration>`_ - -- `remotedata <#section-remotedata>`_ - -- `scheduler <#section-scheduler>`_ - -- `secrets <#section-secrets>`_ - -- `server <#section-server>`_ - -- `storage <#section-storage>`_ - -- `task_resources <#section-task_resources>`_ - -- `task_type_whitelist <#section-task_type_whitelist>`_ - -Section: admin -======================================================================================================================== - -endpoint (`config.URL`_) ------------------------------------------------------------------------------------------------------------------------- - -For admin types, specify where the uri of the service is located. - -**Default Value**: - -.. code-block:: yaml - - "" - - -insecure (bool) ------------------------------------------------------------------------------------------------------------------------- - -Use insecure connection. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -insecureSkipVerify (bool) ------------------------------------------------------------------------------------------------------------------------- - -InsecureSkipVerify controls whether a client verifies the server's certificate chain and host name. Caution : shouldn't be use for production usecases' - -**Default Value**: - -.. code-block:: yaml - - "false" - - -caCertFilePath (string) ------------------------------------------------------------------------------------------------------------------------- - -Use specified certificate file to verify the admin server peer. - -**Default Value**: - -.. code-block:: yaml - - "" - - -maxBackoffDelay (`config.Duration`_) ------------------------------------------------------------------------------------------------------------------------- - -Max delay for grpc backoff - -**Default Value**: - -.. code-block:: yaml - - 8s - - -perRetryTimeout (`config.Duration`_) ------------------------------------------------------------------------------------------------------------------------- - -gRPC per retry timeout - -**Default Value**: - -.. code-block:: yaml - - 15s - - -maxRetries (int) ------------------------------------------------------------------------------------------------------------------------- - -Max number of gRPC retries - -**Default Value**: - -.. code-block:: yaml - - "4" - - -authType (uint8) ------------------------------------------------------------------------------------------------------------------------- - -Type of OAuth2 flow used for communicating with admin.ClientSecret,Pkce,ExternalCommand are valid values - -**Default Value**: - -.. code-block:: yaml - - ClientSecret - - -tokenRefreshWindow (`config.Duration`_) ------------------------------------------------------------------------------------------------------------------------- - -Max duration between token refresh attempt and token expiry. - -**Default Value**: - -.. code-block:: yaml - - 0s - - -useAuth (bool) ------------------------------------------------------------------------------------------------------------------------- - -Deprecated: Auth will be enabled/disabled based on admin's dynamically discovered information. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -clientId (string) ------------------------------------------------------------------------------------------------------------------------- - -Client ID - -**Default Value**: - -.. code-block:: yaml - - flytepropeller - - -clientSecretLocation (string) ------------------------------------------------------------------------------------------------------------------------- - -File containing the client secret - -**Default Value**: - -.. code-block:: yaml - - /etc/secrets/client_secret - - -clientSecretEnvVar (string) ------------------------------------------------------------------------------------------------------------------------- - -Environment variable containing the client secret - -**Default Value**: - -.. code-block:: yaml - - "" - - -scopes ([]string) ------------------------------------------------------------------------------------------------------------------------- - -List of scopes to request - -**Default Value**: - -.. code-block:: yaml - - [] - - -useAudienceFromAdmin (bool) ------------------------------------------------------------------------------------------------------------------------- - -Use Audience configured from admins public endpoint config. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -audience (string) ------------------------------------------------------------------------------------------------------------------------- - -Audience to use when initiating OAuth2 authorization requests. - -**Default Value**: - -.. code-block:: yaml - - "" - - -authorizationServerUrl (string) ------------------------------------------------------------------------------------------------------------------------- - -This is the URL to your IdP's authorization server. It'll default to Endpoint - -**Default Value**: - -.. code-block:: yaml - - "" - - -tokenUrl (string) ------------------------------------------------------------------------------------------------------------------------- - -OPTIONAL: Your IdP's token endpoint. It'll be discovered from flyte admin's OAuth Metadata endpoint if not provided. - -**Default Value**: - -.. code-block:: yaml - - "" - - -authorizationHeader (string) ------------------------------------------------------------------------------------------------------------------------- - -Custom metadata header to pass JWT - -**Default Value**: - -.. code-block:: yaml - - "" - - -pkceConfig (`pkce.Config`_) ------------------------------------------------------------------------------------------------------------------------- - -Config for Pkce authentication flow. - -**Default Value**: - -.. code-block:: yaml - - refreshTime: 5m0s - timeout: 2m0s - - -deviceFlowConfig (`deviceflow.Config`_) ------------------------------------------------------------------------------------------------------------------------- - -Config for Device authentication flow. - -**Default Value**: - -.. code-block:: yaml - - pollInterval: 5s - refreshTime: 5m0s - timeout: 10m0s - - -command ([]string) ------------------------------------------------------------------------------------------------------------------------- - -Command for external authentication token generation - -**Default Value**: - -.. code-block:: yaml - - [] - - -proxyCommand ([]string) ------------------------------------------------------------------------------------------------------------------------- - -Command for external proxy-authorization token generation - -**Default Value**: - -.. code-block:: yaml - - [] - - -defaultServiceConfig (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "" - - -httpProxyURL (`config.URL`_) ------------------------------------------------------------------------------------------------------------------------- - -OPTIONAL: HTTP Proxy to be used for OAuth requests. - -**Default Value**: - -.. code-block:: yaml - - "" - - -config.Duration -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Duration (int64) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - 8s - - -config.URL -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -URL (`url.URL`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - ForceQuery: false - Fragment: "" - Host: "" - OmitHost: false - Opaque: "" - Path: "" - RawFragment: "" - RawPath: "" - RawQuery: "" - Scheme: "" - User: null - - -url.URL -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Scheme (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -Opaque (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -User (url.Userinfo) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -Host (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -Path (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -RawPath (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -OmitHost (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "false" - - -ForceQuery (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "false" - - -RawQuery (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -Fragment (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -RawFragment (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -deviceflow.Config -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -refreshTime (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -grace period from the token expiry after which it would refresh the token. - -**Default Value**: - -.. code-block:: yaml - - 5m0s - - -timeout (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -amount of time the device flow should complete or else it will be cancelled. - -**Default Value**: - -.. code-block:: yaml - - 10m0s - - -pollInterval (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -amount of time the device flow would poll the token endpoint if auth server doesn't return a polling interval. Okta and google IDP do return an interval' - -**Default Value**: - -.. code-block:: yaml - - 5s - - -pkce.Config -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -timeout (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Amount of time the browser session would be active for authentication from client app. - -**Default Value**: - -.. code-block:: yaml - - 2m0s - - -refreshTime (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -grace period from the token expiry after which it would refresh the token. - -**Default Value**: - -.. code-block:: yaml - - 5m0s - - -Section: auth -======================================================================================================================== - -httpAuthorizationHeader (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - flyte-authorization - - -grpcAuthorizationHeader (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - flyte-authorization - - -disableForHttp (bool) ------------------------------------------------------------------------------------------------------------------------- - -Disables auth enforcement on HTTP Endpoints. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -disableForGrpc (bool) ------------------------------------------------------------------------------------------------------------------------- - -Disables auth enforcement on Grpc Endpoints. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -authorizedUris ([]config.URL) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - null - - -httpProxyURL (`config.URL`_) ------------------------------------------------------------------------------------------------------------------------- - -OPTIONAL: HTTP Proxy to be used for OAuth requests. - -**Default Value**: - -.. code-block:: yaml - - "" - - -userAuth (`config.UserAuthConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -Defines Auth options for users. - -**Default Value**: - -.. code-block:: yaml - - cookieBlockKeySecretName: cookie_block_key - cookieHashKeySecretName: cookie_hash_key - cookieSetting: - domain: "" - sameSitePolicy: DefaultMode - httpProxyURL: "" - openId: - baseUrl: "" - clientId: "" - clientSecretFile: "" - clientSecretName: oidc_client_secret - scopes: - - openid - - profile - redirectUrl: /console - - -appAuth (`config.OAuth2Options`_) ------------------------------------------------------------------------------------------------------------------------- - -Defines Auth options for apps. UserAuth must be enabled for AppAuth to work. - -**Default Value**: - -.. code-block:: yaml - - authServerType: Self - externalAuthServer: - allowedAudience: [] - baseUrl: "" - httpProxyURL: "" - metadataUrl: "" - retryAttempts: 5 - retryDelay: 1s - selfAuthServer: - accessTokenLifespan: 30m0s - authorizationCodeLifespan: 5m0s - claimSymmetricEncryptionKeySecretName: claim_symmetric_key - issuer: "" - oldTokenSigningRSAKeySecretName: token_rsa_key_old.pem - refreshTokenLifespan: 1h0m0s - staticClients: - flyte-cli: - audience: null - grant_types: - - refresh_token - - authorization_code - id: flyte-cli - public: true - redirect_uris: - - http://localhost:53593/callback - - http://localhost:12345/callback - response_types: - - code - - token - scopes: - - all - - offline - - access_token - flytectl: - audience: null - grant_types: - - refresh_token - - authorization_code - id: flytectl - public: true - redirect_uris: - - http://localhost:53593/callback - - http://localhost:12345/callback - response_types: - - code - - token - scopes: - - all - - offline - - access_token - flytepropeller: - audience: null - client_secret: JDJhJDA2JGQ2UFFuMlFBRlUzY0w1VjhNRGtldXVrNjN4dWJxVXhOeGp0ZlB3LkZjOU1nVjZ2cG15T0l5 - grant_types: - - refresh_token - - client_credentials - id: flytepropeller - public: false - redirect_uris: - - http://localhost:3846/callback - response_types: - - token - scopes: - - all - - offline - - access_token - tokenSigningRSAKeySecretName: token_rsa_key.pem - thirdPartyConfig: - flyteClient: - audience: "" - clientId: flytectl - redirectUri: http://localhost:53593/callback - scopes: - - all - - offline - - -config.OAuth2Options -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -authServerType (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - Self - - -selfAuthServer (`config.AuthorizationServer`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Authorization Server config to run as a service. Use this when using an IdP that does not offer a custom OAuth2 Authorization Server. - -**Default Value**: - -.. code-block:: yaml - - accessTokenLifespan: 30m0s - authorizationCodeLifespan: 5m0s - claimSymmetricEncryptionKeySecretName: claim_symmetric_key - issuer: "" - oldTokenSigningRSAKeySecretName: token_rsa_key_old.pem - refreshTokenLifespan: 1h0m0s - staticClients: - flyte-cli: - audience: null - grant_types: - - refresh_token - - authorization_code - id: flyte-cli - public: true - redirect_uris: - - http://localhost:53593/callback - - http://localhost:12345/callback - response_types: - - code - - token - scopes: - - all - - offline - - access_token - flytectl: - audience: null - grant_types: - - refresh_token - - authorization_code - id: flytectl - public: true - redirect_uris: - - http://localhost:53593/callback - - http://localhost:12345/callback - response_types: - - code - - token - scopes: - - all - - offline - - access_token - flytepropeller: - audience: null - client_secret: JDJhJDA2JGQ2UFFuMlFBRlUzY0w1VjhNRGtldXVrNjN4dWJxVXhOeGp0ZlB3LkZjOU1nVjZ2cG15T0l5 - grant_types: - - refresh_token - - client_credentials - id: flytepropeller - public: false - redirect_uris: - - http://localhost:3846/callback - response_types: - - token - scopes: - - all - - offline - - access_token - tokenSigningRSAKeySecretName: token_rsa_key.pem - - -externalAuthServer (`config.ExternalAuthorizationServer`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -External Authorization Server config. - -**Default Value**: - -.. code-block:: yaml - - allowedAudience: [] - baseUrl: "" - httpProxyURL: "" - metadataUrl: "" - retryAttempts: 5 - retryDelay: 1s - - -thirdPartyConfig (`config.ThirdPartyConfigOptions`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Defines settings to instruct flyte cli tools (and optionally others) on what config to use to setup their client. - -**Default Value**: - -.. code-block:: yaml - - flyteClient: - audience: "" - clientId: flytectl - redirectUri: http://localhost:53593/callback - scopes: - - all - - offline - - -config.AuthorizationServer -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -issuer (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Defines the issuer to use when issuing and validating tokens. The default value is https:/// - -**Default Value**: - -.. code-block:: yaml - - "" - - -accessTokenLifespan (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Defines the lifespan of issued access tokens. - -**Default Value**: - -.. code-block:: yaml - - 30m0s - - -refreshTokenLifespan (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Defines the lifespan of issued access tokens. - -**Default Value**: - -.. code-block:: yaml - - 1h0m0s - - -authorizationCodeLifespan (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Defines the lifespan of issued access tokens. - -**Default Value**: - -.. code-block:: yaml - - 5m0s - - -claimSymmetricEncryptionKeySecretName (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -OPTIONAL: Secret name to use to encrypt claims in authcode token. - -**Default Value**: - -.. code-block:: yaml - - claim_symmetric_key - - -tokenSigningRSAKeySecretName (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -OPTIONAL: Secret name to use to retrieve RSA Signing Key. - -**Default Value**: - -.. code-block:: yaml - - token_rsa_key.pem - - -oldTokenSigningRSAKeySecretName (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -OPTIONAL: Secret name to use to retrieve Old RSA Signing Key. This can be useful during key rotation to continue to accept older tokens. - -**Default Value**: - -.. code-block:: yaml - - token_rsa_key_old.pem - - -staticClients (map[string]*fosite.DefaultClient) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - flyte-cli: - audience: null - grant_types: - - refresh_token - - authorization_code - id: flyte-cli - public: true - redirect_uris: - - http://localhost:53593/callback - - http://localhost:12345/callback - response_types: - - code - - token - scopes: - - all - - offline - - access_token - flytectl: - audience: null - grant_types: - - refresh_token - - authorization_code - id: flytectl - public: true - redirect_uris: - - http://localhost:53593/callback - - http://localhost:12345/callback - response_types: - - code - - token - scopes: - - all - - offline - - access_token - flytepropeller: - audience: null - client_secret: JDJhJDA2JGQ2UFFuMlFBRlUzY0w1VjhNRGtldXVrNjN4dWJxVXhOeGp0ZlB3LkZjOU1nVjZ2cG15T0l5 - grant_types: - - refresh_token - - client_credentials - id: flytepropeller - public: false - redirect_uris: - - http://localhost:3846/callback - response_types: - - token - scopes: - - all - - offline - - access_token - - -config.ExternalAuthorizationServer -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -baseUrl (`config.URL`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -This should be the base url of the authorization server that you are trying to hit. With Okta for instance, it will look something like https://company.okta.com/oauth2/abcdef123456789/ - -**Default Value**: - -.. code-block:: yaml - - "" - - -allowedAudience ([]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Optional: A list of allowed audiences. If not provided, the audience is expected to be the public Uri of the service. - -**Default Value**: - -.. code-block:: yaml - - [] - - -metadataUrl (`config.URL`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Optional: If the server doesn't support /.well-known/oauth-authorization-server, you can set a custom metadata url here.' - -**Default Value**: - -.. code-block:: yaml - - "" - - -httpProxyURL (`config.URL`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -OPTIONAL: HTTP Proxy to be used for OAuth requests. - -**Default Value**: - -.. code-block:: yaml - - "" - - -retryAttempts (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Optional: The number of attempted retries on a transient failure to get the OAuth metadata - -**Default Value**: - -.. code-block:: yaml - - "5" - - -retryDelay (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Optional, Duration to wait between retries - -**Default Value**: - -.. code-block:: yaml - - 1s - - -config.ThirdPartyConfigOptions -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -flyteClient (`config.FlyteClientConfig`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - audience: "" - clientId: flytectl - redirectUri: http://localhost:53593/callback - scopes: - - all - - offline - - -config.FlyteClientConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -clientId (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -public identifier for the app which handles authorization for a Flyte deployment - -**Default Value**: - -.. code-block:: yaml - - flytectl - - -redirectUri (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -This is the callback uri registered with the app which handles authorization for a Flyte deployment - -**Default Value**: - -.. code-block:: yaml - - http://localhost:53593/callback - - -scopes ([]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Recommended scopes for the client to request. - -**Default Value**: - -.. code-block:: yaml - - - all - - offline - - -audience (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Audience to use when initiating OAuth2 authorization requests. - -**Default Value**: - -.. code-block:: yaml - - "" - - -config.UserAuthConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -redirectUrl (`config.URL`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - /console - - -openId (`config.OpenIDOptions`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -OpenID Configuration for User Auth - -**Default Value**: - -.. code-block:: yaml - - baseUrl: "" - clientId: "" - clientSecretFile: "" - clientSecretName: oidc_client_secret - scopes: - - openid - - profile - - -httpProxyURL (`config.URL`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -OPTIONAL: HTTP Proxy to be used for OAuth requests. - -**Default Value**: - -.. code-block:: yaml - - "" - - -cookieHashKeySecretName (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -OPTIONAL: Secret name to use for cookie hash key. - -**Default Value**: - -.. code-block:: yaml - - cookie_hash_key - - -cookieBlockKeySecretName (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -OPTIONAL: Secret name to use for cookie block key. - -**Default Value**: - -.. code-block:: yaml - - cookie_block_key - - -cookieSetting (`config.CookieSettings`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -settings used by cookies created for user auth - -**Default Value**: - -.. code-block:: yaml - - domain: "" - sameSitePolicy: DefaultMode - - -config.CookieSettings -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -sameSitePolicy (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -OPTIONAL: Allows you to declare if your cookie should be restricted to a first-party or same-site context.Wrapper around http.SameSite. - -**Default Value**: - -.. code-block:: yaml - - DefaultMode - - -domain (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -OPTIONAL: Allows you to set the domain attribute on the auth cookies. - -**Default Value**: - -.. code-block:: yaml - - "" - - -config.OpenIDOptions -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -clientId (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -clientSecretName (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - oidc_client_secret - - -clientSecretFile (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -baseUrl (`config.URL`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -scopes ([]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - - openid - - profile - - -Section: cloudevents -======================================================================================================================== - -enable (bool) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "false" - - -type (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - local - - -aws (`interfaces.AWSConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - region: "" - - -gcp (`interfaces.GCPConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - projectId: "" - - -kafka (`interfaces.KafkaConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - brokers: null - version: "" - - -eventsPublisher (`interfaces.EventsPublisherConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - eventTypes: null - topicName: "" - - -reconnectAttempts (int) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "0" - - -reconnectDelaySeconds (int) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "0" - - -interfaces.AWSConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -region (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -interfaces.EventsPublisherConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -topicName (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -eventTypes ([]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -interfaces.GCPConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -projectId (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -interfaces.KafkaConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -version (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -brokers ([]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -Section: cluster_resources -======================================================================================================================== - -templatePath (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "" - - -templateData (map[string]interfaces.DataSource) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - {} - - -refreshInterval (`config.Duration`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - 1m0s - - -customData (map[string]map[string]interfaces.DataSource) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - {} - - -standaloneDeployment (bool) ------------------------------------------------------------------------------------------------------------------------- - -Whether the cluster resource sync is running in a standalone deployment and should call flyteadmin service endpoints - -**Default Value**: - -.. code-block:: yaml - - "false" - - -Section: clusterpools -======================================================================================================================== - -clusterPoolAssignments (map[string]interfaces.ClusterPoolAssignment) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - {} - - -Section: clusters -======================================================================================================================== - -clusterConfigs ([]interfaces.ClusterConfig) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - null - - -labelClusterMap (map[string][]interfaces.ClusterEntity) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - null - - -defaultExecutionLabel (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "" - - -Section: database -======================================================================================================================== - -host (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "" - - -port (int) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "0" - - -dbname (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "" - - -username (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "" - - -password (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "" - - -passwordPath (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "" - - -options (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "" - - -debug (bool) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "false" - - -enableForeignKeyConstraintWhenMigrating (bool) ------------------------------------------------------------------------------------------------------------------------- - -Whether to enable gorm foreign keys when migrating the db - -**Default Value**: - -.. code-block:: yaml - - "false" - - -maxIdleConnections (int) ------------------------------------------------------------------------------------------------------------------------- - -maxIdleConnections sets the maximum number of connections in the idle connection pool. - -**Default Value**: - -.. code-block:: yaml - - "10" - - -maxOpenConnections (int) ------------------------------------------------------------------------------------------------------------------------- - -maxOpenConnections sets the maximum number of open connections to the database. - -**Default Value**: - -.. code-block:: yaml - - "100" - - -connMaxLifeTime (`config.Duration`_) ------------------------------------------------------------------------------------------------------------------------- - -sets the maximum amount of time a connection may be reused - -**Default Value**: - -.. code-block:: yaml - - 1h0m0s - - -postgres (`database.PostgresConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - dbname: postgres - debug: false - host: postgres - options: sslmode=disable - password: "" - passwordPath: "" - port: 5432 - username: postgres - - -sqlite (`database.SQLiteConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - file: "" - - -database.PostgresConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -host (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -The host name of the database server - -**Default Value**: - -.. code-block:: yaml - - postgres - - -port (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -The port name of the database server - -**Default Value**: - -.. code-block:: yaml - - "5432" - - -dbname (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -The database name - -**Default Value**: - -.. code-block:: yaml - - postgres - - -username (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -The database user who is connecting to the server. - -**Default Value**: - -.. code-block:: yaml - - postgres - - -password (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -The database password. - -**Default Value**: - -.. code-block:: yaml - - "" - - -passwordPath (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Points to the file containing the database password. - -**Default Value**: - -.. code-block:: yaml - - "" - - -options (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -See http://gorm.io/docs/connecting_to_the_database.html for available options passed, in addition to the above. - -**Default Value**: - -.. code-block:: yaml - - sslmode=disable - - -debug (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Whether or not to start the database connection with debug mode enabled. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -database.SQLiteConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -file (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -The path to the file (existing or new) where the DB should be created / stored. If existing, then this will be re-used, else a new will be created - -**Default Value**: - -.. code-block:: yaml - - "" - - -Section: domains -======================================================================================================================== - -id (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - development - - -name (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - development - - -Section: externalevents -======================================================================================================================== - -enable (bool) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "false" - - -type (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - local - - -aws (`interfaces.AWSConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - region: "" - - -gcp (`interfaces.GCPConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - projectId: "" - - -eventsPublisher (`interfaces.EventsPublisherConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - eventTypes: null - topicName: "" - - -reconnectAttempts (int) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "0" - - -reconnectDelaySeconds (int) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "0" - - -Section: flyteadmin -======================================================================================================================== - -roleNameKey (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "" - - -metricsScope (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - 'flyte:' - - -metricsKeys ([]string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - - project - - domain - - wf - - task - - phase - - tasktype - - runtime_type - - runtime_version - - app_name - - -profilerPort (int) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "10254" - - -metadataStoragePrefix ([]string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - - metadata - - admin - - -eventVersion (int) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "2" - - -asyncEventsBufferSize (int) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "100" - - -maxParallelism (int32) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "25" - - -labels (map[string]string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - null - - -annotations (map[string]string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - null - - -interruptible (bool) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "false" - - -overwriteCache (bool) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "false" - - -assumableIamRole (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "" - - -k8sServiceAccount (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "" - - -outputLocationPrefix (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "" - - -useOffloadedWorkflowClosure (bool) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "false" - - -envs (map[string]string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - null - - -Section: logger -======================================================================================================================== - -show-source (bool) ------------------------------------------------------------------------------------------------------------------------- - -Includes source code location in logs. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -mute (bool) ------------------------------------------------------------------------------------------------------------------------- - -Mutes all logs regardless of severity. Intended for benchmarks/tests only. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -level (int) ------------------------------------------------------------------------------------------------------------------------- - -Sets the minimum logging level. - -**Default Value**: - -.. code-block:: yaml - - "3" - - -formatter (`logger.FormatterConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -Sets logging format. - -**Default Value**: - -.. code-block:: yaml - - type: json - - -logger.FormatterConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -type (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Sets logging format type. - -**Default Value**: - -.. code-block:: yaml - - json - - -Section: namespace_mapping -======================================================================================================================== - -mapping (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "" - - -template (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - '{{ project }}-{{ domain }}' - - -templateData (map[string]interfaces.DataSource) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - null - - -Section: notifications -======================================================================================================================== - -type (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - local - - -region (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "" - - -aws (`interfaces.AWSConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - region: "" - - -gcp (`interfaces.GCPConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - projectId: "" - - -publisher (`interfaces.NotificationsPublisherConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - topicName: "" - - -processor (`interfaces.NotificationsProcessorConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - accountId: "" - queueName: "" - - -emailer (`interfaces.NotificationsEmailerConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - body: "" - emailServerConfig: - apiKeyEnvVar: "" - apiKeyFilePath: "" - serviceName: "" - sender: "" - subject: "" - - -reconnectAttempts (int) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "0" - - -reconnectDelaySeconds (int) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "0" - - -interfaces.NotificationsEmailerConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -emailServerConfig (`interfaces.EmailServerConfig`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - apiKeyEnvVar: "" - apiKeyFilePath: "" - serviceName: "" - - -subject (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -sender (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -body (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -interfaces.EmailServerConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -serviceName (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -apiKeyEnvVar (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -apiKeyFilePath (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -interfaces.NotificationsProcessorConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -queueName (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -accountId (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -interfaces.NotificationsPublisherConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -topicName (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -Section: otel -======================================================================================================================== - -type (string) ------------------------------------------------------------------------------------------------------------------------- - -Sets the type of exporter to configure [noop/file/jaeger]. - -**Default Value**: - -.. code-block:: yaml - - noop - - -file (`otelutils.FileConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -Configuration for exporting telemetry traces to a file - -**Default Value**: - -.. code-block:: yaml - - filename: /tmp/trace.txt - - -jaeger (`otelutils.JaegerConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -Configuration for exporting telemetry traces to a jaeger - -**Default Value**: - -.. code-block:: yaml - - endpoint: http://localhost:14268/api/traces - - -otelutils.FileConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -filename (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Filename to store exported telemetry traces - -**Default Value**: - -.. code-block:: yaml - - /tmp/trace.txt - - -otelutils.JaegerConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -endpoint (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Endpoint for the jaeger telemtry trace ingestor - -**Default Value**: - -.. code-block:: yaml - - http://localhost:14268/api/traces - - -Section: plugins -======================================================================================================================== - -catalogcache (`catalog.Config`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - reader: - maxItems: 10000 - maxRetries: 3 - workers: 10 - writer: - maxItems: 10000 - maxRetries: 3 - workers: 10 - - -k8s (`config.K8sPluginConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - co-pilot: - cpu: 500m - default-input-path: /var/flyte/inputs - default-output-path: /var/flyte/outputs - image: cr.flyte.org/flyteorg/flytecopilot:v0.0.15 - input-vol-name: flyte-inputs - memory: 128Mi - name: flyte-copilot- - output-vol-name: flyte-outputs - start-timeout: 1m40s - storage: "" - create-container-error-grace-period: 3m0s - default-annotations: - cluster-autoscaler.kubernetes.io/safe-to-evict: "false" - default-cpus: "1" - default-env-vars: null - default-env-vars-from-env: null - default-labels: null - default-memory: 1Gi - default-node-selector: null - default-pod-dns-config: null - default-pod-security-context: null - default-pod-template-name: "" - default-pod-template-resync: 30s - default-security-context: null - default-tolerations: null - delete-resource-on-finalize: false - enable-host-networking-pod: null - gpu-device-node-label: k8s.amazonaws.com/accelerator - gpu-partition-size-node-label: k8s.amazonaws.com/gpu-partition-size - gpu-resource-name: nvidia.com/gpu - gpu-unpartitioned-node-selector-requirement: null - gpu-unpartitioned-toleration: null - image-pull-backoff-grace-period: 3m0s - inject-finalizer: false - interruptible-node-selector: null - interruptible-node-selector-requirement: null - interruptible-tolerations: null - non-interruptible-node-selector-requirement: null - resource-tolerations: null - scheduler-name: "" - send-object-events: false - - -catalog.Config -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -reader (`workqueue.Config`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Catalog reader workqueue config. Make sure the index cache must be big enough to accommodate the biggest array task allowed to run on the system. - -**Default Value**: - -.. code-block:: yaml - - maxItems: 10000 - maxRetries: 3 - workers: 10 - - -writer (`workqueue.Config`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Catalog writer workqueue config. Make sure the index cache must be big enough to accommodate the biggest array task allowed to run on the system. - -**Default Value**: - -.. code-block:: yaml - - maxItems: 10000 - maxRetries: 3 - workers: 10 - - -workqueue.Config -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -workers (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Number of concurrent workers to start processing the queue. - -**Default Value**: - -.. code-block:: yaml - - "10" - - -maxRetries (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Maximum number of retries per item. - -**Default Value**: - -.. code-block:: yaml - - "3" - - -maxItems (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Maximum number of entries to keep in the index. - -**Default Value**: - -.. code-block:: yaml - - "10000" - - -config.K8sPluginConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -inject-finalizer (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Instructs the plugin to inject a finalizer on startTask and remove it on task termination. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -default-annotations (map[string]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - cluster-autoscaler.kubernetes.io/safe-to-evict: "false" - - -default-labels (map[string]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -default-env-vars (map[string]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -default-env-vars-from-env (map[string]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -default-cpus (`resource.Quantity`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Defines a default value for cpu for containers if not specified. - -**Default Value**: - -.. code-block:: yaml - - "1" - - -default-memory (`resource.Quantity`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Defines a default value for memory for containers if not specified. - -**Default Value**: - -.. code-block:: yaml - - 1Gi - - -default-tolerations ([]v1.Toleration) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -default-node-selector (map[string]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -default-affinity (v1.Affinity) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -scheduler-name (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Defines scheduler name. - -**Default Value**: - -.. code-block:: yaml - - "" - - -interruptible-tolerations ([]v1.Toleration) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -interruptible-node-selector (map[string]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -interruptible-node-selector-requirement (v1.NodeSelectorRequirement) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -non-interruptible-node-selector-requirement (v1.NodeSelectorRequirement) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -resource-tolerations (map[v1.ResourceName][]v1.Toleration) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -co-pilot (`config.FlyteCoPilotConfig`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Co-Pilot Configuration - -**Default Value**: - -.. code-block:: yaml - - cpu: 500m - default-input-path: /var/flyte/inputs - default-output-path: /var/flyte/outputs - image: cr.flyte.org/flyteorg/flytecopilot:v0.0.15 - input-vol-name: flyte-inputs - memory: 128Mi - name: flyte-copilot- - output-vol-name: flyte-outputs - start-timeout: 1m40s - storage: "" - - -delete-resource-on-finalize (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Instructs the system to delete the resource upon successful execution of a k8s pod rather than have the k8s garbage collector clean it up. This ensures that no resources are kept around (potentially consuming cluster resources). This, however, will cause k8s log links to expire as soon as the resource is finalized. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -create-container-error-grace-period (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - 3m0s - - -image-pull-backoff-grace-period (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - 3m0s - - -gpu-device-node-label (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - k8s.amazonaws.com/accelerator - - -gpu-partition-size-node-label (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - k8s.amazonaws.com/gpu-partition-size - - -gpu-unpartitioned-node-selector-requirement (v1.NodeSelectorRequirement) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -gpu-unpartitioned-toleration (v1.Toleration) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -gpu-resource-name (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - nvidia.com/gpu - - -default-pod-security-context (v1.PodSecurityContext) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -default-security-context (v1.SecurityContext) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -enable-host-networking-pod (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - - - -default-pod-dns-config (v1.PodDNSConfig) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -default-pod-template-name (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Name of the PodTemplate to use as the base for all k8s pods created by FlytePropeller. - -**Default Value**: - -.. code-block:: yaml - - "" - - -default-pod-template-resync (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Frequency of resyncing default pod templates - -**Default Value**: - -.. code-block:: yaml - - 30s - - -send-object-events (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -If true, will send k8s object events in TaskExecutionEvent updates. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -config.FlyteCoPilotConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -name (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Flyte co-pilot sidecar container name prefix. (additional bits will be added after this) - -**Default Value**: - -.. code-block:: yaml - - flyte-copilot- - - -image (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Flyte co-pilot Docker Image FQN - -**Default Value**: - -.. code-block:: yaml - - cr.flyte.org/flyteorg/flytecopilot:v0.0.15 - - -default-input-path (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Default path where the volume should be mounted - -**Default Value**: - -.. code-block:: yaml - - /var/flyte/inputs - - -default-output-path (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Default path where the volume should be mounted - -**Default Value**: - -.. code-block:: yaml - - /var/flyte/outputs - - -input-vol-name (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Name of the data volume that is created for storing inputs - -**Default Value**: - -.. code-block:: yaml - - flyte-inputs - - -output-vol-name (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Name of the data volume that is created for storing outputs - -**Default Value**: - -.. code-block:: yaml - - flyte-outputs - - -start-timeout (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - 1m40s - - -cpu (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Used to set cpu for co-pilot containers - -**Default Value**: - -.. code-block:: yaml - - 500m - - -memory (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Used to set memory for co-pilot containers - -**Default Value**: - -.. code-block:: yaml - - 128Mi - - -storage (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Default storage limit for individual inputs / outputs - -**Default Value**: - -.. code-block:: yaml - - "" - - -resource.Quantity -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -i (`resource.int64Amount`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - {} - - -d (`resource.infDecAmount`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - - - -s (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "1" - - -Format (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - DecimalSI - - -resource.infDecAmount -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Dec (inf.Dec) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -resource.int64Amount -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -value (int64) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "1" - - -scale (int32) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "0" - - -Section: propeller -======================================================================================================================== - -kube-config (string) ------------------------------------------------------------------------------------------------------------------------- - -Path to kubernetes client config file. - -**Default Value**: - -.. code-block:: yaml - - "" - - -master (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "" - - -workers (int) ------------------------------------------------------------------------------------------------------------------------- - -Number of threads to process workflows - -**Default Value**: - -.. code-block:: yaml - - "20" - - -workflow-reeval-duration (`config.Duration`_) ------------------------------------------------------------------------------------------------------------------------- - -Frequency of re-evaluating workflows - -**Default Value**: - -.. code-block:: yaml - - 10s - - -downstream-eval-duration (`config.Duration`_) ------------------------------------------------------------------------------------------------------------------------- - -Frequency of re-evaluating downstream tasks - -**Default Value**: - -.. code-block:: yaml - - 30s - - -limit-namespace (string) ------------------------------------------------------------------------------------------------------------------------- - -Namespaces to watch for this propeller - -**Default Value**: - -.. code-block:: yaml - - all - - -prof-port (`config.Port`_) ------------------------------------------------------------------------------------------------------------------------- - -Profiler port - -**Default Value**: - -.. code-block:: yaml - - 10254 - - -metadata-prefix (string) ------------------------------------------------------------------------------------------------------------------------- - -MetadataPrefix should be used if all the metadata for Flyte executions should be stored under a specific prefix in CloudStorage. If not specified, the data will be stored in the base container directly. - -**Default Value**: - -.. code-block:: yaml - - metadata/propeller - - -rawoutput-prefix (string) ------------------------------------------------------------------------------------------------------------------------- - -a fully qualified storage path of the form s3://flyte/abc/..., where all data sandboxes should be stored. - -**Default Value**: - -.. code-block:: yaml - - "" - - -queue (`config.CompositeQueueConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -Workflow workqueue configuration, affects the way the work is consumed from the queue. - -**Default Value**: - -.. code-block:: yaml - - batch-size: -1 - batching-interval: 1s - queue: - base-delay: 0s - capacity: 10000 - max-delay: 1m0s - rate: 1000 - type: maxof - sub-queue: - base-delay: 0s - capacity: 10000 - max-delay: 0s - rate: 1000 - type: bucket - type: batch - - -metrics-prefix (string) ------------------------------------------------------------------------------------------------------------------------- - -An optional prefix for all published metrics. - -**Default Value**: - -.. code-block:: yaml - - flyte - - -metrics-keys ([]string) ------------------------------------------------------------------------------------------------------------------------- - -Metrics labels applied to prometheus metrics emitted by the service. - -**Default Value**: - -.. code-block:: yaml - - - project - - domain - - wf - - task - - -enable-admin-launcher (bool) ------------------------------------------------------------------------------------------------------------------------- - -Enable remote Workflow launcher to Admin - -**Default Value**: - -.. code-block:: yaml - - "true" - - -max-workflow-retries (int) ------------------------------------------------------------------------------------------------------------------------- - -Maximum number of retries per workflow - -**Default Value**: - -.. code-block:: yaml - - "10" - - -max-ttl-hours (int) ------------------------------------------------------------------------------------------------------------------------- - -Maximum number of hours a completed workflow should be retained. Number between 1-23 hours - -**Default Value**: - -.. code-block:: yaml - - "23" - - -gc-interval (`config.Duration`_) ------------------------------------------------------------------------------------------------------------------------- - -Run periodic GC every 30 minutes - -**Default Value**: - -.. code-block:: yaml - - 30m0s - - -leader-election (`config.LeaderElectionConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -Config for leader election. - -**Default Value**: - -.. code-block:: yaml - - enabled: false - lease-duration: 15s - lock-config-map: - Name: "" - Namespace: "" - renew-deadline: 10s - retry-period: 2s - - -publish-k8s-events (bool) ------------------------------------------------------------------------------------------------------------------------- - -Enable events publishing to K8s events API. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -max-output-size-bytes (int64) ------------------------------------------------------------------------------------------------------------------------- - -Maximum size of outputs per task - -**Default Value**: - -.. code-block:: yaml - - "10485760" - - -enable-grpc-latency-metrics (bool) ------------------------------------------------------------------------------------------------------------------------- - -Enable grpc latency metrics. Note Histograms metrics can be expensive on Prometheus servers. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -kube-client-config (`config.KubeClientConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -Configuration to control the Kubernetes client - -**Default Value**: - -.. code-block:: yaml - - burst: 25 - qps: 100 - timeout: 30s - - -node-config (`config.NodeConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -config for a workflow node - -**Default Value**: - -.. code-block:: yaml - - default-deadlines: - node-active-deadline: 0s - node-execution-deadline: 0s - workflow-active-deadline: 0s - default-max-attempts: 1 - ignore-retry-cause: false - interruptible-failure-threshold: -1 - max-node-retries-system-failures: 3 - - -max-streak-length (int) ------------------------------------------------------------------------------------------------------------------------- - -Maximum number of consecutive rounds that one propeller worker can use for one workflow - >1 => turbo-mode is enabled. - -**Default Value**: - -.. code-block:: yaml - - "8" - - -event-config (`config.EventConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -Configures execution event behavior. - -**Default Value**: - -.. code-block:: yaml - - fallback-to-output-reference: false - raw-output-policy: reference - - -include-shard-key-label ([]string) ------------------------------------------------------------------------------------------------------------------------- - -Include the specified shard key label in the k8s FlyteWorkflow CRD label selector - -**Default Value**: - -.. code-block:: yaml - - [] - - -exclude-shard-key-label ([]string) ------------------------------------------------------------------------------------------------------------------------- - -Exclude the specified shard key label from the k8s FlyteWorkflow CRD label selector - -**Default Value**: - -.. code-block:: yaml - - [] - - -include-project-label ([]string) ------------------------------------------------------------------------------------------------------------------------- - -Include the specified project label in the k8s FlyteWorkflow CRD label selector - -**Default Value**: - -.. code-block:: yaml - - [] - - -exclude-project-label ([]string) ------------------------------------------------------------------------------------------------------------------------- - -Exclude the specified project label from the k8s FlyteWorkflow CRD label selector - -**Default Value**: - -.. code-block:: yaml - - [] - - -include-domain-label ([]string) ------------------------------------------------------------------------------------------------------------------------- - -Include the specified domain label in the k8s FlyteWorkflow CRD label selector - -**Default Value**: - -.. code-block:: yaml - - [] - - -exclude-domain-label ([]string) ------------------------------------------------------------------------------------------------------------------------- - -Exclude the specified domain label from the k8s FlyteWorkflow CRD label selector - -**Default Value**: - -.. code-block:: yaml - - [] - - -cluster-id (string) ------------------------------------------------------------------------------------------------------------------------- - -Unique cluster id running this flytepropeller instance with which to annotate execution events - -**Default Value**: - -.. code-block:: yaml - - propeller - - -create-flyteworkflow-crd (bool) ------------------------------------------------------------------------------------------------------------------------- - -Enable creation of the FlyteWorkflow CRD on startup - -**Default Value**: - -.. code-block:: yaml - - "false" - - -array-node-event-version (int) ------------------------------------------------------------------------------------------------------------------------- - -ArrayNode eventing version. 0 => legacy (drop-in replacement for maptask), 1 => new - -**Default Value**: - -.. code-block:: yaml - - "0" - - -config.CompositeQueueConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -type (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Type of composite queue to use for the WorkQueue - -**Default Value**: - -.. code-block:: yaml - - batch - - -queue (`config.WorkqueueConfig`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Workflow workqueue configuration, affects the way the work is consumed from the queue. - -**Default Value**: - -.. code-block:: yaml - - base-delay: 0s - capacity: 10000 - max-delay: 1m0s - rate: 1000 - type: maxof - - -sub-queue (`config.WorkqueueConfig`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -SubQueue configuration, affects the way the nodes cause the top-level Work to be re-evaluated. - -**Default Value**: - -.. code-block:: yaml - - base-delay: 0s - capacity: 10000 - max-delay: 0s - rate: 1000 - type: bucket - - -batching-interval (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Duration for which downstream updates are buffered - -**Default Value**: - -.. code-block:: yaml - - 1s - - -batch-size (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "-1" - - -config.WorkqueueConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -type (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Type of RateLimiter to use for the WorkQueue - -**Default Value**: - -.. code-block:: yaml - - maxof - - -base-delay (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -base backoff delay for failure - -**Default Value**: - -.. code-block:: yaml - - 0s - - -max-delay (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Max backoff delay for failure - -**Default Value**: - -.. code-block:: yaml - - 1m0s - - -rate (int64) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Bucket Refill rate per second - -**Default Value**: - -.. code-block:: yaml - - "1000" - - -capacity (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Bucket capacity as number of items - -**Default Value**: - -.. code-block:: yaml - - "10000" - - -config.EventConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -raw-output-policy (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -How output data should be passed along in execution events. - -**Default Value**: - -.. code-block:: yaml - - reference - - -fallback-to-output-reference (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Whether output data should be sent by reference when it is too large to be sent inline in execution events. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -config.KubeClientConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -qps (float32) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "100" - - -burst (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Max burst rate for throttle. 0 defaults to 10 - -**Default Value**: - -.. code-block:: yaml - - "25" - - -timeout (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Max duration allowed for every request to KubeAPI before giving up. 0 implies no timeout. - -**Default Value**: - -.. code-block:: yaml - - 30s - - -config.LeaderElectionConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -enabled (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Enables/Disables leader election. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -lock-config-map (`types.NamespacedName`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -ConfigMap namespace/name to use for resource lock. - -**Default Value**: - -.. code-block:: yaml - - Name: "" - Namespace: "" - - -lease-duration (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Duration that non-leader candidates will wait to force acquire leadership. This is measured against time of last observed ack. - -**Default Value**: - -.. code-block:: yaml - - 15s - - -renew-deadline (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Duration that the acting master will retry refreshing leadership before giving up. - -**Default Value**: - -.. code-block:: yaml - - 10s - - -retry-period (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Duration the LeaderElector clients should wait between tries of actions. - -**Default Value**: - -.. code-block:: yaml - - 2s - - -types.NamespacedName -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Namespace (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -Name (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -config.NodeConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -default-deadlines (`config.DefaultDeadlines`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Default value for timeouts - -**Default Value**: - -.. code-block:: yaml - - node-active-deadline: 0s - node-execution-deadline: 0s - workflow-active-deadline: 0s - - -max-node-retries-system-failures (int64) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Maximum number of retries per node for node failure due to infra issues - -**Default Value**: - -.. code-block:: yaml - - "3" - - -interruptible-failure-threshold (int32) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -number of failures for a node to be still considered interruptible. Negative numbers are treated as complementary (ex. -1 means last attempt is non-interruptible).' - -**Default Value**: - -.. code-block:: yaml - - "-1" - - -default-max-attempts (int32) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Default maximum number of attempts for a node - -**Default Value**: - -.. code-block:: yaml - - "1" - - -ignore-retry-cause (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Ignore retry cause and count all attempts toward a node's max attempts - -**Default Value**: - -.. code-block:: yaml - - "false" - - -config.DefaultDeadlines -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -node-execution-deadline (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Default value of node execution timeout that includes the time spent to run the node/workflow - -**Default Value**: - -.. code-block:: yaml - - 0s - - -node-active-deadline (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Default value of node timeout that includes the time spent queued. - -**Default Value**: - -.. code-block:: yaml - - 0s - - -workflow-active-deadline (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Default value of workflow timeout that includes the time spent queued. - -**Default Value**: - -.. code-block:: yaml - - 0s - - -config.Port -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -port (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "10254" - - -Section: qualityofservice -======================================================================================================================== - -tierExecutionValues (map[string]interfaces.QualityOfServiceSpec) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - {} - - -defaultTiers (map[string]string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - {} - - -Section: queues -======================================================================================================================== - -executionQueues (interfaces.ExecutionQueues) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - [] - - -workflowConfigs (interfaces.WorkflowConfigs) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - [] - - -Section: registration -======================================================================================================================== - -maxWorkflowNodes (int) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "100" - - -maxLabelEntries (int) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "0" - - -maxAnnotationEntries (int) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "0" - - -workflowSizeLimit (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "" - - -Section: remotedata -======================================================================================================================== - -scheme (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - none - - -region (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "" - - -signedUrls (`interfaces.SignedURL`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - durationMinutes: 0 - enabled: false - signingPrincipal: "" - - -maxSizeInBytes (int64) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "2097152" - - -inlineEventDataPolicy (int) ------------------------------------------------------------------------------------------------------------------------- - -Specifies how inline execution event data should be saved in the backend - -**Default Value**: - -.. code-block:: yaml - - Offload - - -interfaces.SignedURL -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -enabled (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Whether signed urls should even be returned with GetExecutionData, GetNodeExecutionData and GetTaskExecutionData response objects. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -durationMinutes (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "0" - - -signingPrincipal (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -Section: scheduler -======================================================================================================================== - -profilerPort (`config.Port`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - 10254 - - -eventScheduler (`interfaces.EventSchedulerConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - aws: null - local: {} - region: "" - scheduleNamePrefix: "" - scheduleRole: "" - scheme: local - targetName: "" - - -workflowExecutor (`interfaces.WorkflowExecutorConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - accountId: "" - aws: null - local: - adminRateLimit: - burst: 10 - tps: 100 - useUTCTz: false - region: "" - scheduleQueueName: "" - scheme: local - - -reconnectAttempts (int) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "0" - - -reconnectDelaySeconds (int) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "0" - - -interfaces.EventSchedulerConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -scheme (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - local - - -region (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -scheduleRole (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -targetName (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -scheduleNamePrefix (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -aws (interfaces.AWSSchedulerConfig) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -local (`interfaces.FlyteSchedulerConfig`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - {} - - -interfaces.FlyteSchedulerConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -interfaces.WorkflowExecutorConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -scheme (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - local - - -region (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -scheduleQueueName (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -accountId (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -aws (interfaces.AWSWorkflowExecutorConfig) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -local (`interfaces.FlyteWorkflowExecutorConfig`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - adminRateLimit: - burst: 10 - tps: 100 - useUTCTz: false - - -interfaces.FlyteWorkflowExecutorConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -adminRateLimit (`interfaces.AdminRateLimit`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - burst: 10 - tps: 100 - - -useUTCTz (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "false" - - -interfaces.AdminRateLimit -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -tps (float64) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "100" - - -burst (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "10" - - -Section: secrets -======================================================================================================================== - -secrets-prefix (string) ------------------------------------------------------------------------------------------------------------------------- - -Prefix where to look for secrets file - -**Default Value**: - -.. code-block:: yaml - - /etc/secrets - - -env-prefix (string) ------------------------------------------------------------------------------------------------------------------------- - -Prefix for environment variables - -**Default Value**: - -.. code-block:: yaml - - FLYTE_SECRET_ - - -Section: server -======================================================================================================================== - -httpPort (int) ------------------------------------------------------------------------------------------------------------------------- - -On which http port to serve admin - -**Default Value**: - -.. code-block:: yaml - - "8088" - - -grpcPort (int) ------------------------------------------------------------------------------------------------------------------------- - -deprecated - -**Default Value**: - -.. code-block:: yaml - - "0" - - -grpcServerReflection (bool) ------------------------------------------------------------------------------------------------------------------------- - -deprecated - -**Default Value**: - -.. code-block:: yaml - - "false" - - -kube-config (string) ------------------------------------------------------------------------------------------------------------------------- - -Path to kubernetes client config file, default is empty, useful for incluster config. - -**Default Value**: - -.. code-block:: yaml - - "" - - -master (string) ------------------------------------------------------------------------------------------------------------------------- - -The address of the Kubernetes API server. - -**Default Value**: - -.. code-block:: yaml - - "" - - -security (`config.ServerSecurityOptions`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - allowCors: true - allowedHeaders: - - Content-Type - - flyte-authorization - allowedOrigins: - - '*' - auditAccess: false - secure: false - ssl: - certificateFile: "" - keyFile: "" - useAuth: false - - -grpc (`config.GrpcConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - enableGrpcLatencyMetrics: false - maxMessageSizeBytes: 0 - port: 8089 - serverReflection: true - - -thirdPartyConfig (`config.ThirdPartyConfigOptions`_) ------------------------------------------------------------------------------------------------------------------------- - -Deprecated please use auth.appAuth.thirdPartyConfig instead. - -**Default Value**: - -.. code-block:: yaml - - flyteClient: - audience: "" - clientId: "" - redirectUri: "" - scopes: [] - - -dataProxy (`config.DataProxyConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -Defines data proxy configuration. - -**Default Value**: - -.. code-block:: yaml - - download: - maxExpiresIn: 1h0m0s - upload: - defaultFileNameLength: 20 - maxExpiresIn: 1h0m0s - maxSize: 6Mi - storagePrefix: "" - - -readHeaderTimeoutSeconds (int) ------------------------------------------------------------------------------------------------------------------------- - -The amount of time allowed to read request headers. - -**Default Value**: - -.. code-block:: yaml - - "32" - - -kubeClientConfig (`config.KubeClientConfig (kubeClientConfig)`_) ------------------------------------------------------------------------------------------------------------------------- - -Configuration to control the Kubernetes client - -**Default Value**: - -.. code-block:: yaml - - burst: 25 - qps: 100 - timeout: 30s - - -config.DataProxyConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -upload (`config.DataProxyUploadConfig`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Defines data proxy upload configuration. - -**Default Value**: - -.. code-block:: yaml - - defaultFileNameLength: 20 - maxExpiresIn: 1h0m0s - maxSize: 6Mi - storagePrefix: "" - - -download (`config.DataProxyDownloadConfig`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Defines data proxy download configuration. - -**Default Value**: - -.. code-block:: yaml - - maxExpiresIn: 1h0m0s - - -config.DataProxyDownloadConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -maxExpiresIn (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Maximum allowed expiration duration. - -**Default Value**: - -.. code-block:: yaml - - 1h0m0s - - -config.DataProxyUploadConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -maxSize (`resource.Quantity`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Maximum allowed upload size. - -**Default Value**: - -.. code-block:: yaml - - 6Mi - - -maxExpiresIn (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Maximum allowed expiration duration. - -**Default Value**: - -.. code-block:: yaml - - 1h0m0s - - -defaultFileNameLength (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Default length for the generated file name if not provided in the request. - -**Default Value**: - -.. code-block:: yaml - - "20" - - -storagePrefix (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Storage prefix to use for all upload requests. - -**Default Value**: - -.. code-block:: yaml - - "" - - -config.GrpcConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -port (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -On which grpc port to serve admin - -**Default Value**: - -.. code-block:: yaml - - "8089" - - -serverReflection (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Enable GRPC Server Reflection - -**Default Value**: - -.. code-block:: yaml - - "true" - - -maxMessageSizeBytes (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -The max size in bytes for incoming gRPC messages - -**Default Value**: - -.. code-block:: yaml - - "0" - - -enableGrpcLatencyMetrics (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Enable grpc latency metrics. Note Histograms metrics can be expensive on Prometheus servers. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -config.KubeClientConfig (kubeClientConfig) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -qps (int32) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Max QPS to the master for requests to KubeAPI. 0 defaults to 5. - -**Default Value**: - -.. code-block:: yaml - - "100" - - -burst (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Max burst rate for throttle. 0 defaults to 10 - -**Default Value**: - -.. code-block:: yaml - - "25" - - -timeout (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Max duration allowed for every request to KubeAPI before giving up. 0 implies no timeout. - -**Default Value**: - -.. code-block:: yaml - - 30s - - -config.ServerSecurityOptions -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -secure (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "false" - - -ssl (`config.SslOptions`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - certificateFile: "" - keyFile: "" - - -useAuth (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "false" - - -auditAccess (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "false" - - -allowCors (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "true" - - -allowedOrigins ([]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - - '*' - - -allowedHeaders ([]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - - Content-Type - - flyte-authorization - - -config.SslOptions -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -certificateFile (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -keyFile (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -Section: storage -======================================================================================================================== - -type (string) ------------------------------------------------------------------------------------------------------------------------- - -Sets the type of storage to configure [s3/minio/local/mem/stow]. - -**Default Value**: - -.. code-block:: yaml - - s3 - - -connection (`storage.ConnectionConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - access-key: "" - auth-type: iam - disable-ssl: false - endpoint: "" - region: us-east-1 - secret-key: "" - - -stow (`storage.StowConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -Storage config for stow backend. - -**Default Value**: - -.. code-block:: yaml - - {} - - -container (string) ------------------------------------------------------------------------------------------------------------------------- - -Initial container (in s3 a bucket) to create -if it doesn't exist-.' - -**Default Value**: - -.. code-block:: yaml - - "" - - -enable-multicontainer (bool) ------------------------------------------------------------------------------------------------------------------------- - -If this is true, then the container argument is overlooked and redundant. This config will automatically open new connections to new containers/buckets as they are encountered - -**Default Value**: - -.. code-block:: yaml - - "false" - - -cache (`storage.CachingConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - max_size_mbs: 0 - target_gc_percent: 0 - - -limits (`storage.LimitsConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -Sets limits for stores. - -**Default Value**: - -.. code-block:: yaml - - maxDownloadMBs: 2 - - -defaultHttpClient (`storage.HTTPClientConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -Sets the default http client config. - -**Default Value**: - -.. code-block:: yaml - - headers: null - timeout: 0s - - -signedUrl (`storage.SignedURLConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -Sets config for SignedURL. - -**Default Value**: - -.. code-block:: yaml - - {} - - -storage.CachingConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -max_size_mbs (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Maximum size of the cache where the Blob store data is cached in-memory. If not specified or set to 0, cache is not used - -**Default Value**: - -.. code-block:: yaml - - "0" - - -target_gc_percent (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Sets the garbage collection target percentage. - -**Default Value**: - -.. code-block:: yaml - - "0" - - -storage.ConnectionConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -endpoint (`config.URL`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -URL for storage client to connect to. - -**Default Value**: - -.. code-block:: yaml - - "" - - -auth-type (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Auth Type to use [iam,accesskey]. - -**Default Value**: - -.. code-block:: yaml - - iam - - -access-key (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Access key to use. Only required when authtype is set to accesskey. - -**Default Value**: - -.. code-block:: yaml - - "" - - -secret-key (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Secret to use when accesskey is set. - -**Default Value**: - -.. code-block:: yaml - - "" - - -region (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Region to connect to. - -**Default Value**: - -.. code-block:: yaml - - us-east-1 - - -disable-ssl (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Disables SSL connection. Should only be used for development. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -storage.HTTPClientConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -headers (map[string][]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -timeout (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Sets time out on the http client. - -**Default Value**: - -.. code-block:: yaml - - 0s - - -storage.LimitsConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -maxDownloadMBs (int64) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Maximum allowed download size (in MBs) per call. - -**Default Value**: - -.. code-block:: yaml - - "2" - - -storage.SignedURLConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -stowConfigOverride (map[string]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -storage.StowConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -kind (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Kind of Stow backend to use. Refer to github/flyteorg/stow - -**Default Value**: - -.. code-block:: yaml - - "" - - -config (map[string]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Configuration for stow backend. Refer to github/flyteorg/stow - -**Default Value**: - -.. code-block:: yaml - - {} - - -Section: task_resources -======================================================================================================================== - -defaults (`interfaces.TaskResourceSet`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - cpu: "2" - ephemeralStorage: "0" - gpu: "0" - memory: 200Mi - storage: "0" - - -limits (`interfaces.TaskResourceSet`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - cpu: "2" - ephemeralStorage: "0" - gpu: "1" - memory: 1Gi - storage: "0" - - -interfaces.TaskResourceSet -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -cpu (`resource.Quantity`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "2" - - -gpu (`resource.Quantity`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "0" - - -memory (`resource.Quantity`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - 200Mi - - -storage (`resource.Quantity`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "0" - - -ephemeralStorage (`resource.Quantity`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "0" - - diff --git a/rsts/deployment/configuration/generated/flytepropeller_config.rst b/rsts/deployment/configuration/generated/flytepropeller_config.rst deleted file mode 100644 index b238e7c961..0000000000 --- a/rsts/deployment/configuration/generated/flytepropeller_config.rst +++ /dev/null @@ -1,5590 +0,0 @@ -.. _flytepropeller-config-specification: - -######################################### -Flyte Propeller Configuration -######################################### - -- `admin <#section-admin>`_ - -- `catalog-cache <#section-catalog-cache>`_ - -- `event <#section-event>`_ - -- `logger <#section-logger>`_ - -- `otel <#section-otel>`_ - -- `plugins <#section-plugins>`_ - -- `propeller <#section-propeller>`_ - -- `secrets <#section-secrets>`_ - -- `storage <#section-storage>`_ - -- `tasks <#section-tasks>`_ - -- `webhook <#section-webhook>`_ - -Section: admin -======================================================================================================================== - -endpoint (`config.URL`_) ------------------------------------------------------------------------------------------------------------------------- - -For admin types, specify where the uri of the service is located. - -**Default Value**: - -.. code-block:: yaml - - "" - - -insecure (bool) ------------------------------------------------------------------------------------------------------------------------- - -Use insecure connection. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -insecureSkipVerify (bool) ------------------------------------------------------------------------------------------------------------------------- - -InsecureSkipVerify controls whether a client verifies the server's certificate chain and host name. Caution : shouldn't be use for production usecases' - -**Default Value**: - -.. code-block:: yaml - - "false" - - -caCertFilePath (string) ------------------------------------------------------------------------------------------------------------------------- - -Use specified certificate file to verify the admin server peer. - -**Default Value**: - -.. code-block:: yaml - - "" - - -maxBackoffDelay (`config.Duration`_) ------------------------------------------------------------------------------------------------------------------------- - -Max delay for grpc backoff - -**Default Value**: - -.. code-block:: yaml - - 8s - - -perRetryTimeout (`config.Duration`_) ------------------------------------------------------------------------------------------------------------------------- - -gRPC per retry timeout - -**Default Value**: - -.. code-block:: yaml - - 15s - - -maxRetries (int) ------------------------------------------------------------------------------------------------------------------------- - -Max number of gRPC retries - -**Default Value**: - -.. code-block:: yaml - - "4" - - -authType (uint8) ------------------------------------------------------------------------------------------------------------------------- - -Type of OAuth2 flow used for communicating with admin.ClientSecret,Pkce,ExternalCommand are valid values - -**Default Value**: - -.. code-block:: yaml - - ClientSecret - - -tokenRefreshWindow (`config.Duration`_) ------------------------------------------------------------------------------------------------------------------------- - -Max duration between token refresh attempt and token expiry. - -**Default Value**: - -.. code-block:: yaml - - 0s - - -useAuth (bool) ------------------------------------------------------------------------------------------------------------------------- - -Deprecated: Auth will be enabled/disabled based on admin's dynamically discovered information. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -clientId (string) ------------------------------------------------------------------------------------------------------------------------- - -Client ID - -**Default Value**: - -.. code-block:: yaml - - flytepropeller - - -clientSecretLocation (string) ------------------------------------------------------------------------------------------------------------------------- - -File containing the client secret - -**Default Value**: - -.. code-block:: yaml - - /etc/secrets/client_secret - - -clientSecretEnvVar (string) ------------------------------------------------------------------------------------------------------------------------- - -Environment variable containing the client secret - -**Default Value**: - -.. code-block:: yaml - - "" - - -scopes ([]string) ------------------------------------------------------------------------------------------------------------------------- - -List of scopes to request - -**Default Value**: - -.. code-block:: yaml - - [] - - -useAudienceFromAdmin (bool) ------------------------------------------------------------------------------------------------------------------------- - -Use Audience configured from admins public endpoint config. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -audience (string) ------------------------------------------------------------------------------------------------------------------------- - -Audience to use when initiating OAuth2 authorization requests. - -**Default Value**: - -.. code-block:: yaml - - "" - - -authorizationServerUrl (string) ------------------------------------------------------------------------------------------------------------------------- - -This is the URL to your IdP's authorization server. It'll default to Endpoint - -**Default Value**: - -.. code-block:: yaml - - "" - - -tokenUrl (string) ------------------------------------------------------------------------------------------------------------------------- - -OPTIONAL: Your IdP's token endpoint. It'll be discovered from flyte admin's OAuth Metadata endpoint if not provided. - -**Default Value**: - -.. code-block:: yaml - - "" - - -authorizationHeader (string) ------------------------------------------------------------------------------------------------------------------------- - -Custom metadata header to pass JWT - -**Default Value**: - -.. code-block:: yaml - - "" - - -pkceConfig (`pkce.Config`_) ------------------------------------------------------------------------------------------------------------------------- - -Config for Pkce authentication flow. - -**Default Value**: - -.. code-block:: yaml - - refreshTime: 5m0s - timeout: 2m0s - - -deviceFlowConfig (`deviceflow.Config`_) ------------------------------------------------------------------------------------------------------------------------- - -Config for Device authentication flow. - -**Default Value**: - -.. code-block:: yaml - - pollInterval: 5s - refreshTime: 5m0s - timeout: 10m0s - - -command ([]string) ------------------------------------------------------------------------------------------------------------------------- - -Command for external authentication token generation - -**Default Value**: - -.. code-block:: yaml - - [] - - -proxyCommand ([]string) ------------------------------------------------------------------------------------------------------------------------- - -Command for external proxy-authorization token generation - -**Default Value**: - -.. code-block:: yaml - - [] - - -defaultServiceConfig (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "" - - -httpProxyURL (`config.URL`_) ------------------------------------------------------------------------------------------------------------------------- - -OPTIONAL: HTTP Proxy to be used for OAuth requests. - -**Default Value**: - -.. code-block:: yaml - - "" - - -config.Duration -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Duration (int64) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - 8s - - -config.URL -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -URL (`url.URL`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - ForceQuery: false - Fragment: "" - Host: "" - OmitHost: false - Opaque: "" - Path: "" - RawFragment: "" - RawPath: "" - RawQuery: "" - Scheme: "" - User: null - - -url.URL -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Scheme (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -Opaque (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -User (url.Userinfo) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -Host (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -Path (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -RawPath (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -OmitHost (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "false" - - -ForceQuery (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "false" - - -RawQuery (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -Fragment (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -RawFragment (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -deviceflow.Config -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -refreshTime (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -grace period from the token expiry after which it would refresh the token. - -**Default Value**: - -.. code-block:: yaml - - 5m0s - - -timeout (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -amount of time the device flow should complete or else it will be cancelled. - -**Default Value**: - -.. code-block:: yaml - - 10m0s - - -pollInterval (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -amount of time the device flow would poll the token endpoint if auth server doesn't return a polling interval. Okta and google IDP do return an interval' - -**Default Value**: - -.. code-block:: yaml - - 5s - - -pkce.Config -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -timeout (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Amount of time the browser session would be active for authentication from client app. - -**Default Value**: - -.. code-block:: yaml - - 2m0s - - -refreshTime (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -grace period from the token expiry after which it would refresh the token. - -**Default Value**: - -.. code-block:: yaml - - 5m0s - - -Section: catalog-cache -======================================================================================================================== - -type (string) ------------------------------------------------------------------------------------------------------------------------- - -Catalog Implementation to use - -**Default Value**: - -.. code-block:: yaml - - noop - - -endpoint (string) ------------------------------------------------------------------------------------------------------------------------- - -Endpoint for catalog service - -**Default Value**: - -.. code-block:: yaml - - "" - - -insecure (bool) ------------------------------------------------------------------------------------------------------------------------- - -Use insecure grpc connection - -**Default Value**: - -.. code-block:: yaml - - "false" - - -max-cache-age (`config.Duration`_) ------------------------------------------------------------------------------------------------------------------------- - -Cache entries past this age will incur cache miss. 0 means cache never expires - -**Default Value**: - -.. code-block:: yaml - - 0s - - -use-admin-auth (bool) ------------------------------------------------------------------------------------------------------------------------- - -Use the same gRPC credentials option as the flyteadmin client - -**Default Value**: - -.. code-block:: yaml - - "false" - - -default-service-config (string) ------------------------------------------------------------------------------------------------------------------------- - -Set the default service config for the catalog gRPC client - -**Default Value**: - -.. code-block:: yaml - - "" - - -Section: event -======================================================================================================================== - -type (string) ------------------------------------------------------------------------------------------------------------------------- - -Sets the type of EventSink to configure [log/admin/file]. - -**Default Value**: - -.. code-block:: yaml - - admin - - -file-path (string) ------------------------------------------------------------------------------------------------------------------------- - -For file types, specify where the file should be located. - -**Default Value**: - -.. code-block:: yaml - - "" - - -rate (int64) ------------------------------------------------------------------------------------------------------------------------- - -Max rate at which events can be recorded per second. - -**Default Value**: - -.. code-block:: yaml - - "500" - - -capacity (int) ------------------------------------------------------------------------------------------------------------------------- - -The max bucket size for event recording tokens. - -**Default Value**: - -.. code-block:: yaml - - "1000" - - -Section: logger -======================================================================================================================== - -show-source (bool) ------------------------------------------------------------------------------------------------------------------------- - -Includes source code location in logs. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -mute (bool) ------------------------------------------------------------------------------------------------------------------------- - -Mutes all logs regardless of severity. Intended for benchmarks/tests only. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -level (int) ------------------------------------------------------------------------------------------------------------------------- - -Sets the minimum logging level. - -**Default Value**: - -.. code-block:: yaml - - "3" - - -formatter (`logger.FormatterConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -Sets logging format. - -**Default Value**: - -.. code-block:: yaml - - type: json - - -logger.FormatterConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -type (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Sets logging format type. - -**Default Value**: - -.. code-block:: yaml - - json - - -Section: otel -======================================================================================================================== - -type (string) ------------------------------------------------------------------------------------------------------------------------- - -Sets the type of exporter to configure [noop/file/jaeger]. - -**Default Value**: - -.. code-block:: yaml - - noop - - -file (`otelutils.FileConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -Configuration for exporting telemetry traces to a file - -**Default Value**: - -.. code-block:: yaml - - filename: /tmp/trace.txt - - -jaeger (`otelutils.JaegerConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -Configuration for exporting telemetry traces to a jaeger - -**Default Value**: - -.. code-block:: yaml - - endpoint: http://localhost:14268/api/traces - - -otelutils.FileConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -filename (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Filename to store exported telemetry traces - -**Default Value**: - -.. code-block:: yaml - - /tmp/trace.txt - - -otelutils.JaegerConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -endpoint (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Endpoint for the jaeger telemtry trace ingestor - -**Default Value**: - -.. code-block:: yaml - - http://localhost:14268/api/traces - - -Section: plugins -======================================================================================================================== - -agent-service (`agent.Config`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - agentForTaskTypes: null - agents: null - defaultAgent: - defaultServiceConfig: "" - defaultTimeout: 10s - endpoint: dns:///flyteagent.flyte.svc.cluster.local:80 - insecure: true - timeouts: null - resourceConstraints: - NamespaceScopeResourceConstraint: - Value: 50 - ProjectScopeResourceConstraint: - Value: 100 - supportedTaskTypes: - - task_type_1 - - task_type_2 - webApi: - caching: - maxSystemFailures: 5 - resyncInterval: 30s - size: 500000 - workers: 10 - readRateLimiter: - burst: 100 - qps: 10 - resourceMeta: null - resourceQuotas: - default: 1000 - writeRateLimiter: - burst: 100 - qps: 10 - - -athena (`athena.Config`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - defaultCatalog: AwsDataCatalog - defaultWorkGroup: primary - resourceConstraints: - NamespaceScopeResourceConstraint: - Value: 50 - ProjectScopeResourceConstraint: - Value: 100 - webApi: - caching: - maxSystemFailures: 5 - resyncInterval: 30s - size: 500000 - workers: 10 - readRateLimiter: - burst: 100 - qps: 10 - resourceMeta: null - resourceQuotas: - default: 1000 - writeRateLimiter: - burst: 100 - qps: 10 - - -aws (`aws.Config`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - accountId: "" - logLevel: 0 - region: us-east-2 - retries: 3 - - -bigquery (`bigquery.Config`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - googleTokenSource: - gke-task-workload-identity: - remoteClusterConfig: - auth: - caCertPath: "" - tokenPath: "" - enabled: false - endpoint: "" - name: "" - type: default - resourceConstraints: - NamespaceScopeResourceConstraint: - Value: 50 - ProjectScopeResourceConstraint: - Value: 100 - webApi: - caching: - maxSystemFailures: 5 - resyncInterval: 30s - size: 500000 - workers: 10 - readRateLimiter: - burst: 100 - qps: 10 - resourceMeta: null - resourceQuotas: - default: 1000 - writeRateLimiter: - burst: 100 - qps: 10 - - -catalogcache (`catalog.Config`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - reader: - maxItems: 10000 - maxRetries: 3 - workers: 10 - writer: - maxItems: 10000 - maxRetries: 3 - workers: 10 - - -databricks (`databricks.Config`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - databricksInstance: "" - databricksTokenKey: FLYTE_DATABRICKS_API_TOKEN - defaultWarehouse: COMPUTE_CLUSTER - entrypointFile: "" - resourceConstraints: - NamespaceScopeResourceConstraint: - Value: 50 - ProjectScopeResourceConstraint: - Value: 100 - webApi: - caching: - maxSystemFailures: 5 - resyncInterval: 30s - size: 500000 - workers: 10 - readRateLimiter: - burst: 100 - qps: 10 - resourceMeta: null - resourceQuotas: - default: 1000 - writeRateLimiter: - burst: 100 - qps: 10 - - -echo (`testing.Config`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - sleep-duration: 0s - - -k8s (`config.K8sPluginConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - co-pilot: - cpu: 500m - default-input-path: /var/flyte/inputs - default-output-path: /var/flyte/outputs - image: cr.flyte.org/flyteorg/flytecopilot:v0.0.15 - input-vol-name: flyte-inputs - memory: 128Mi - name: flyte-copilot- - output-vol-name: flyte-outputs - start-timeout: 1m40s - storage: "" - create-container-error-grace-period: 3m0s - default-annotations: - cluster-autoscaler.kubernetes.io/safe-to-evict: "false" - default-cpus: "1" - default-env-vars: null - default-env-vars-from-env: null - default-labels: null - default-memory: 1Gi - default-node-selector: null - default-pod-dns-config: null - default-pod-security-context: null - default-pod-template-name: "" - default-pod-template-resync: 30s - default-security-context: null - default-tolerations: null - delete-resource-on-finalize: false - enable-host-networking-pod: null - gpu-device-node-label: k8s.amazonaws.com/accelerator - gpu-partition-size-node-label: k8s.amazonaws.com/gpu-partition-size - gpu-resource-name: nvidia.com/gpu - gpu-unpartitioned-node-selector-requirement: null - gpu-unpartitioned-toleration: null - image-pull-backoff-grace-period: 3m0s - inject-finalizer: false - interruptible-node-selector: null - interruptible-node-selector-requirement: null - interruptible-tolerations: null - non-interruptible-node-selector-requirement: null - resource-tolerations: null - scheduler-name: "" - send-object-events: false - - -k8s-array (`k8s.Config`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - ErrorAssembler: - maxItems: 100000 - maxRetries: 5 - workers: 10 - OutputAssembler: - maxItems: 100000 - maxRetries: 5 - workers: 10 - logs: - config: - cloudwatch-enabled: false - cloudwatch-log-group: "" - cloudwatch-region: "" - cloudwatch-template-uri: "" - gcp-project: "" - kubernetes-enabled: true - kubernetes-template-uri: http://localhost:30082/#!/log/{{ .namespace }}/{{ .podName - }}/pod?namespace={{ .namespace }} - kubernetes-url: "" - stackdriver-enabled: false - stackdriver-logresourcename: "" - stackdriver-template-uri: "" - templates: null - maxArrayJobSize: 5000 - maxErrorLength: 1000 - namespaceTemplate: "" - node-selector: null - remoteClusterConfig: - auth: - certPath: "" - tokenPath: "" - type: "" - enabled: false - endpoint: "" - name: "" - resourceConfig: - limit: 0 - primaryLabel: "" - scheduler: "" - tolerations: null - - -kf-operator (`common.Config`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - timeout: 1m0s - - -logs (`logs.LogConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - cloudwatch-enabled: false - cloudwatch-log-group: "" - cloudwatch-region: "" - cloudwatch-template-uri: "" - gcp-project: "" - kubernetes-enabled: true - kubernetes-template-uri: http://localhost:30082/#!/log/{{ .namespace }}/{{ .podName - }}/pod?namespace={{ .namespace }} - kubernetes-url: "" - stackdriver-enabled: false - stackdriver-logresourcename: "" - stackdriver-template-uri: "" - templates: null - - -qubole (`config.Config`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - analyzeLinkPath: /v2/analyze - clusterConfigs: - - labels: - - default - limit: 100 - namespaceScopeQuotaProportionCap: 0.7 - primaryLabel: default - projectScopeQuotaProportionCap: 0.7 - commandApiPath: /api/v1.2/commands/ - defaultClusterLabel: default - destinationClusterConfigs: [] - endpoint: https://wellness.qubole.com - lruCacheSize: 2000 - quboleTokenKey: FLYTE_QUBOLE_CLIENT_TOKEN - workers: 15 - - -ray (`ray.Config`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - dashboardHost: 0.0.0.0 - dashboardURLTemplate: null - defaults: - headNode: - ipAddress: $MY_POD_IP - startParameters: - disable-usage-stats: "true" - workerNode: - ipAddress: $MY_POD_IP - startParameters: - disable-usage-stats: "true" - enableUsageStats: false - includeDashboard: true - logs: - cloudwatch-enabled: false - cloudwatch-log-group: "" - cloudwatch-region: "" - cloudwatch-template-uri: "" - gcp-project: "" - kubernetes-enabled: false - kubernetes-template-uri: "" - kubernetes-url: "" - stackdriver-enabled: false - stackdriver-logresourcename: "" - stackdriver-template-uri: "" - templates: null - logsSidecar: null - remoteClusterConfig: - auth: - caCertPath: "" - tokenPath: "" - enabled: false - endpoint: "" - name: "" - serviceType: NodePort - shutdownAfterJobFinishes: true - ttlSecondsAfterFinished: 3600 - - -snowflake (`snowflake.Config`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - defaultWarehouse: COMPUTE_WH - resourceConstraints: - NamespaceScopeResourceConstraint: - Value: 50 - ProjectScopeResourceConstraint: - Value: 100 - snowflakeTokenKey: FLYTE_SNOWFLAKE_CLIENT_TOKEN - webApi: - caching: - maxSystemFailures: 5 - resyncInterval: 30s - size: 500000 - workers: 10 - readRateLimiter: - burst: 100 - qps: 10 - resourceMeta: null - resourceQuotas: - default: 1000 - writeRateLimiter: - burst: 100 - qps: 10 - - -spark (`spark.Config`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - features: null - logs: - all-user: - cloudwatch-enabled: false - cloudwatch-log-group: "" - cloudwatch-region: "" - cloudwatch-template-uri: "" - gcp-project: "" - kubernetes-enabled: false - kubernetes-template-uri: "" - kubernetes-url: "" - stackdriver-enabled: false - stackdriver-logresourcename: "" - stackdriver-template-uri: "" - templates: null - mixed: - cloudwatch-enabled: false - cloudwatch-log-group: "" - cloudwatch-region: "" - cloudwatch-template-uri: "" - gcp-project: "" - kubernetes-enabled: true - kubernetes-template-uri: http://localhost:30082/#!/log/{{ .namespace }}/{{ .podName - }}/pod?namespace={{ .namespace }} - kubernetes-url: "" - stackdriver-enabled: false - stackdriver-logresourcename: "" - stackdriver-template-uri: "" - templates: null - system: - cloudwatch-enabled: false - cloudwatch-log-group: "" - cloudwatch-region: "" - cloudwatch-template-uri: "" - gcp-project: "" - kubernetes-enabled: false - kubernetes-template-uri: "" - kubernetes-url: "" - stackdriver-enabled: false - stackdriver-logresourcename: "" - stackdriver-template-uri: "" - templates: null - user: - cloudwatch-enabled: false - cloudwatch-log-group: "" - cloudwatch-region: "" - cloudwatch-template-uri: "" - gcp-project: "" - kubernetes-enabled: false - kubernetes-template-uri: "" - kubernetes-url: "" - stackdriver-enabled: false - stackdriver-logresourcename: "" - stackdriver-template-uri: "" - templates: null - spark-config-default: null - spark-history-server-url: "" - - -agent.Config -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -webApi (`webapi.PluginConfig`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Defines config for the base WebAPI plugin. - -**Default Value**: - -.. code-block:: yaml - - caching: - maxSystemFailures: 5 - resyncInterval: 30s - size: 500000 - workers: 10 - readRateLimiter: - burst: 100 - qps: 10 - resourceMeta: null - resourceQuotas: - default: 1000 - writeRateLimiter: - burst: 100 - qps: 10 - - -resourceConstraints (`core.ResourceConstraintsSpec`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - NamespaceScopeResourceConstraint: - Value: 50 - ProjectScopeResourceConstraint: - Value: 100 - - -defaultAgent (`agent.Agent`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -The default agent. - -**Default Value**: - -.. code-block:: yaml - - defaultServiceConfig: "" - defaultTimeout: 10s - endpoint: dns:///flyteagent.flyte.svc.cluster.local:80 - insecure: true - timeouts: null - - -agents (map[string]*agent.Agent) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -The agents. - -**Default Value**: - -.. code-block:: yaml - - null - - -agentForTaskTypes (map[string]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -supportedTaskTypes ([]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - - task_type_1 - - task_type_2 - - -agent.Agent -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -endpoint (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - dns:///flyteagent.flyte.svc.cluster.local:80 - - -insecure (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "true" - - -defaultServiceConfig (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -timeouts (map[string]config.Duration) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -defaultTimeout (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - 10s - - -core.ResourceConstraintsSpec -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -ProjectScopeResourceConstraint (`core.ResourceConstraint`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - Value: 100 - - -NamespaceScopeResourceConstraint (`core.ResourceConstraint`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - Value: 50 - - -core.ResourceConstraint -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Value (int64) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "100" - - -webapi.PluginConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -resourceQuotas (webapi.ResourceQuotas) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - default: 1000 - - -readRateLimiter (`webapi.RateLimiterConfig`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Defines rate limiter properties for read actions (e.g. retrieve status). - -**Default Value**: - -.. code-block:: yaml - - burst: 100 - qps: 10 - - -writeRateLimiter (`webapi.RateLimiterConfig`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Defines rate limiter properties for write actions. - -**Default Value**: - -.. code-block:: yaml - - burst: 100 - qps: 10 - - -caching (`webapi.CachingConfig`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Defines caching characteristics. - -**Default Value**: - -.. code-block:: yaml - - maxSystemFailures: 5 - resyncInterval: 30s - size: 500000 - workers: 10 - - -resourceMeta (interface) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - - - -webapi.CachingConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -size (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Defines the maximum number of items to cache. - -**Default Value**: - -.. code-block:: yaml - - "500000" - - -resyncInterval (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Defines the sync interval. - -**Default Value**: - -.. code-block:: yaml - - 30s - - -workers (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Defines the number of workers to start up to process items. - -**Default Value**: - -.. code-block:: yaml - - "10" - - -maxSystemFailures (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Defines the number of failures to fetch a task before failing the task. - -**Default Value**: - -.. code-block:: yaml - - "5" - - -webapi.RateLimiterConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -qps (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Defines the max rate of calls per second. - -**Default Value**: - -.. code-block:: yaml - - "10" - - -burst (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Defines the maximum burst size. - -**Default Value**: - -.. code-block:: yaml - - "100" - - -athena.Config -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -webApi (`webapi.PluginConfig`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Defines config for the base WebAPI plugin. - -**Default Value**: - -.. code-block:: yaml - - caching: - maxSystemFailures: 5 - resyncInterval: 30s - size: 500000 - workers: 10 - readRateLimiter: - burst: 100 - qps: 10 - resourceMeta: null - resourceQuotas: - default: 1000 - writeRateLimiter: - burst: 100 - qps: 10 - - -resourceConstraints (`core.ResourceConstraintsSpec`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - NamespaceScopeResourceConstraint: - Value: 50 - ProjectScopeResourceConstraint: - Value: 100 - - -defaultWorkGroup (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Defines the default workgroup to use when running on Athena unless overwritten by the task. - -**Default Value**: - -.. code-block:: yaml - - primary - - -defaultCatalog (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Defines the default catalog to use when running on Athena unless overwritten by the task. - -**Default Value**: - -.. code-block:: yaml - - AwsDataCatalog - - -aws.Config -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -region (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -AWS Region to connect to. - -**Default Value**: - -.. code-block:: yaml - - us-east-2 - - -accountId (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -AWS Account Identifier. - -**Default Value**: - -.. code-block:: yaml - - "" - - -retries (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Number of retries. - -**Default Value**: - -.. code-block:: yaml - - "3" - - -logLevel (uint64) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "0" - - -bigquery.Config -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -webApi (`webapi.PluginConfig`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Defines config for the base WebAPI plugin. - -**Default Value**: - -.. code-block:: yaml - - caching: - maxSystemFailures: 5 - resyncInterval: 30s - size: 500000 - workers: 10 - readRateLimiter: - burst: 100 - qps: 10 - resourceMeta: null - resourceQuotas: - default: 1000 - writeRateLimiter: - burst: 100 - qps: 10 - - -resourceConstraints (`core.ResourceConstraintsSpec`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - NamespaceScopeResourceConstraint: - Value: 50 - ProjectScopeResourceConstraint: - Value: 100 - - -googleTokenSource (`google.TokenSourceFactoryConfig`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Defines Google token source - -**Default Value**: - -.. code-block:: yaml - - gke-task-workload-identity: - remoteClusterConfig: - auth: - caCertPath: "" - tokenPath: "" - enabled: false - endpoint: "" - name: "" - type: default - - -bigQueryEndpoint (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -google.TokenSourceFactoryConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -type (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Defines type of TokenSourceFactory, possible values are 'default' and 'gke-task-workload-identity' - -**Default Value**: - -.. code-block:: yaml - - default - - -gke-task-workload-identity (`google.GkeTaskWorkloadIdentityTokenSourceFactoryConfig`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Extra configuration for GKE task workload identity token source factory - -**Default Value**: - -.. code-block:: yaml - - remoteClusterConfig: - auth: - caCertPath: "" - tokenPath: "" - enabled: false - endpoint: "" - name: "" - - -google.GkeTaskWorkloadIdentityTokenSourceFactoryConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -remoteClusterConfig (`k8s.ClusterConfig`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Configuration of remote GKE cluster - -**Default Value**: - -.. code-block:: yaml - - auth: - caCertPath: "" - tokenPath: "" - enabled: false - endpoint: "" - name: "" - - -k8s.ClusterConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -name (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Friendly name of the remote cluster - -**Default Value**: - -.. code-block:: yaml - - "" - - -endpoint (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Remote K8s cluster endpoint - -**Default Value**: - -.. code-block:: yaml - - "" - - -auth (`k8s.Auth`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - caCertPath: "" - tokenPath: "" - - -enabled (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Boolean flag to enable or disable - -**Default Value**: - -.. code-block:: yaml - - "false" - - -k8s.Auth -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -tokenPath (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Token path - -**Default Value**: - -.. code-block:: yaml - - "" - - -caCertPath (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Certificate path - -**Default Value**: - -.. code-block:: yaml - - "" - - -catalog.Config -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -reader (`workqueue.Config`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Catalog reader workqueue config. Make sure the index cache must be big enough to accommodate the biggest array task allowed to run on the system. - -**Default Value**: - -.. code-block:: yaml - - maxItems: 10000 - maxRetries: 3 - workers: 10 - - -writer (`workqueue.Config`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Catalog writer workqueue config. Make sure the index cache must be big enough to accommodate the biggest array task allowed to run on the system. - -**Default Value**: - -.. code-block:: yaml - - maxItems: 10000 - maxRetries: 3 - workers: 10 - - -workqueue.Config -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -workers (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Number of concurrent workers to start processing the queue. - -**Default Value**: - -.. code-block:: yaml - - "10" - - -maxRetries (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Maximum number of retries per item. - -**Default Value**: - -.. code-block:: yaml - - "3" - - -maxItems (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Maximum number of entries to keep in the index. - -**Default Value**: - -.. code-block:: yaml - - "10000" - - -common.Config -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -timeout (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - 1m0s - - -config.Config -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -endpoint (`config.URL`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Endpoint for qubole to use - -**Default Value**: - -.. code-block:: yaml - - https://wellness.qubole.com - - -commandApiPath (`config.URL`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -API Path where commands can be launched on Qubole. Should be a valid url. - -**Default Value**: - -.. code-block:: yaml - - /api/v1.2/commands/ - - -analyzeLinkPath (`config.URL`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -URL path where queries can be visualized on qubole website. Should be a valid url. - -**Default Value**: - -.. code-block:: yaml - - /v2/analyze - - -quboleTokenKey (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Name of the key where to find Qubole token in the secret manager. - -**Default Value**: - -.. code-block:: yaml - - FLYTE_QUBOLE_CLIENT_TOKEN - - -lruCacheSize (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Size of the AutoRefreshCache - -**Default Value**: - -.. code-block:: yaml - - "2000" - - -workers (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Number of parallel workers to refresh the cache - -**Default Value**: - -.. code-block:: yaml - - "15" - - -defaultClusterLabel (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -The default cluster label. This will be used if label is not specified on the hive job. - -**Default Value**: - -.. code-block:: yaml - - default - - -clusterConfigs ([]config.ClusterConfig) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - - labels: - - default - limit: 100 - namespaceScopeQuotaProportionCap: 0.7 - primaryLabel: default - projectScopeQuotaProportionCap: 0.7 - - -destinationClusterConfigs ([]config.DestinationClusterConfig) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - [] - - -config.K8sPluginConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -inject-finalizer (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Instructs the plugin to inject a finalizer on startTask and remove it on task termination. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -default-annotations (map[string]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - cluster-autoscaler.kubernetes.io/safe-to-evict: "false" - - -default-labels (map[string]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -default-env-vars (map[string]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -default-env-vars-from-env (map[string]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -default-cpus (`resource.Quantity`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Defines a default value for cpu for containers if not specified. - -**Default Value**: - -.. code-block:: yaml - - "1" - - -default-memory (`resource.Quantity`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Defines a default value for memory for containers if not specified. - -**Default Value**: - -.. code-block:: yaml - - 1Gi - - -default-tolerations ([]v1.Toleration) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -default-node-selector (map[string]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -default-affinity (v1.Affinity) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -scheduler-name (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Defines scheduler name. - -**Default Value**: - -.. code-block:: yaml - - "" - - -interruptible-tolerations ([]v1.Toleration) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -interruptible-node-selector (map[string]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -interruptible-node-selector-requirement (v1.NodeSelectorRequirement) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -non-interruptible-node-selector-requirement (v1.NodeSelectorRequirement) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -resource-tolerations (map[v1.ResourceName][]v1.Toleration) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -co-pilot (`config.FlyteCoPilotConfig`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Co-Pilot Configuration - -**Default Value**: - -.. code-block:: yaml - - cpu: 500m - default-input-path: /var/flyte/inputs - default-output-path: /var/flyte/outputs - image: cr.flyte.org/flyteorg/flytecopilot:v0.0.15 - input-vol-name: flyte-inputs - memory: 128Mi - name: flyte-copilot- - output-vol-name: flyte-outputs - start-timeout: 1m40s - storage: "" - - -delete-resource-on-finalize (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Instructs the system to delete the resource upon successful execution of a k8s pod rather than have the k8s garbage collector clean it up. This ensures that no resources are kept around (potentially consuming cluster resources). This, however, will cause k8s log links to expire as soon as the resource is finalized. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -create-container-error-grace-period (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - 3m0s - - -image-pull-backoff-grace-period (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - 3m0s - - -gpu-device-node-label (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - k8s.amazonaws.com/accelerator - - -gpu-partition-size-node-label (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - k8s.amazonaws.com/gpu-partition-size - - -gpu-unpartitioned-node-selector-requirement (v1.NodeSelectorRequirement) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -gpu-unpartitioned-toleration (v1.Toleration) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -gpu-resource-name (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - nvidia.com/gpu - - -default-pod-security-context (v1.PodSecurityContext) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -default-security-context (v1.SecurityContext) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -enable-host-networking-pod (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - - - -default-pod-dns-config (v1.PodDNSConfig) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -default-pod-template-name (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Name of the PodTemplate to use as the base for all k8s pods created by FlytePropeller. - -**Default Value**: - -.. code-block:: yaml - - "" - - -default-pod-template-resync (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Frequency of resyncing default pod templates - -**Default Value**: - -.. code-block:: yaml - - 30s - - -send-object-events (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -If true, will send k8s object events in TaskExecutionEvent updates. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -config.FlyteCoPilotConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -name (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Flyte co-pilot sidecar container name prefix. (additional bits will be added after this) - -**Default Value**: - -.. code-block:: yaml - - flyte-copilot- - - -image (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Flyte co-pilot Docker Image FQN - -**Default Value**: - -.. code-block:: yaml - - cr.flyte.org/flyteorg/flytecopilot:v0.0.15 - - -default-input-path (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Default path where the volume should be mounted - -**Default Value**: - -.. code-block:: yaml - - /var/flyte/inputs - - -default-output-path (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Default path where the volume should be mounted - -**Default Value**: - -.. code-block:: yaml - - /var/flyte/outputs - - -input-vol-name (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Name of the data volume that is created for storing inputs - -**Default Value**: - -.. code-block:: yaml - - flyte-inputs - - -output-vol-name (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Name of the data volume that is created for storing outputs - -**Default Value**: - -.. code-block:: yaml - - flyte-outputs - - -start-timeout (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - 1m40s - - -cpu (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Used to set cpu for co-pilot containers - -**Default Value**: - -.. code-block:: yaml - - 500m - - -memory (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Used to set memory for co-pilot containers - -**Default Value**: - -.. code-block:: yaml - - 128Mi - - -storage (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Default storage limit for individual inputs / outputs - -**Default Value**: - -.. code-block:: yaml - - "" - - -resource.Quantity -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -i (`resource.int64Amount`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - {} - - -d (`resource.infDecAmount`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - - - -s (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "1" - - -Format (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - DecimalSI - - -resource.infDecAmount -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Dec (inf.Dec) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -resource.int64Amount -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -value (int64) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "1" - - -scale (int32) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "0" - - -databricks.Config -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -webApi (`webapi.PluginConfig`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Defines config for the base WebAPI plugin. - -**Default Value**: - -.. code-block:: yaml - - caching: - maxSystemFailures: 5 - resyncInterval: 30s - size: 500000 - workers: 10 - readRateLimiter: - burst: 100 - qps: 10 - resourceMeta: null - resourceQuotas: - default: 1000 - writeRateLimiter: - burst: 100 - qps: 10 - - -resourceConstraints (`core.ResourceConstraintsSpec`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - NamespaceScopeResourceConstraint: - Value: 50 - ProjectScopeResourceConstraint: - Value: 100 - - -defaultWarehouse (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Defines the default warehouse to use when running on Databricks unless overwritten by the task. - -**Default Value**: - -.. code-block:: yaml - - COMPUTE_CLUSTER - - -databricksTokenKey (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Name of the key where to find Databricks token in the secret manager. - -**Default Value**: - -.. code-block:: yaml - - FLYTE_DATABRICKS_API_TOKEN - - -databricksInstance (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Databricks workspace instance name. - -**Default Value**: - -.. code-block:: yaml - - "" - - -entrypointFile (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -A URL of the entrypoint file. DBFS and cloud storage (s3://, gcs://, adls://, etc) locations are supported. - -**Default Value**: - -.. code-block:: yaml - - "" - - -databricksEndpoint (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -k8s.Config -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -scheduler (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Decides the scheduler to use when launching array-pods. - -**Default Value**: - -.. code-block:: yaml - - "" - - -maxErrorLength (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Determines the maximum length of the error string returned for the array. - -**Default Value**: - -.. code-block:: yaml - - "1000" - - -maxArrayJobSize (int64) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Maximum size of array job. - -**Default Value**: - -.. code-block:: yaml - - "5000" - - -resourceConfig (`k8s.ResourceConfig`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - limit: 0 - primaryLabel: "" - - -remoteClusterConfig (`k8s.ClusterConfig (remoteClusterConfig)`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - auth: - certPath: "" - tokenPath: "" - type: "" - enabled: false - endpoint: "" - name: "" - - -node-selector (map[string]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -tolerations ([]v1.Toleration) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -namespaceTemplate (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -OutputAssembler (`workqueue.Config`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - maxItems: 100000 - maxRetries: 5 - workers: 10 - - -ErrorAssembler (`workqueue.Config`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - maxItems: 100000 - maxRetries: 5 - workers: 10 - - -logs (`k8s.LogConfig`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Config for log links for k8s array jobs. - -**Default Value**: - -.. code-block:: yaml - - config: - cloudwatch-enabled: false - cloudwatch-log-group: "" - cloudwatch-region: "" - cloudwatch-template-uri: "" - gcp-project: "" - kubernetes-enabled: true - kubernetes-template-uri: http://localhost:30082/#!/log/{{ .namespace }}/{{ .podName - }}/pod?namespace={{ .namespace }} - kubernetes-url: "" - stackdriver-enabled: false - stackdriver-logresourcename: "" - stackdriver-template-uri: "" - templates: null - - -k8s.ClusterConfig (remoteClusterConfig) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -name (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Friendly name of the remote cluster - -**Default Value**: - -.. code-block:: yaml - - "" - - -endpoint (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Remote K8s cluster endpoint - -**Default Value**: - -.. code-block:: yaml - - "" - - -auth (`k8s.Auth (auth)`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - certPath: "" - tokenPath: "" - type: "" - - -enabled (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Boolean flag to enable or disable - -**Default Value**: - -.. code-block:: yaml - - "false" - - -k8s.Auth (auth) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -type (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Authentication type - -**Default Value**: - -.. code-block:: yaml - - "" - - -tokenPath (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Token path - -**Default Value**: - -.. code-block:: yaml - - "" - - -certPath (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Certificate path - -**Default Value**: - -.. code-block:: yaml - - "" - - -k8s.LogConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -config (`logs.LogConfig (config)`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Defines the log config for k8s logs. - -**Default Value**: - -.. code-block:: yaml - - cloudwatch-enabled: false - cloudwatch-log-group: "" - cloudwatch-region: "" - cloudwatch-template-uri: "" - gcp-project: "" - kubernetes-enabled: true - kubernetes-template-uri: http://localhost:30082/#!/log/{{ .namespace }}/{{ .podName - }}/pod?namespace={{ .namespace }} - kubernetes-url: "" - stackdriver-enabled: false - stackdriver-logresourcename: "" - stackdriver-template-uri: "" - templates: null - - -logs.LogConfig (config) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -cloudwatch-enabled (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Enable Cloudwatch Logging - -**Default Value**: - -.. code-block:: yaml - - "false" - - -cloudwatch-region (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -AWS region in which Cloudwatch logs are stored. - -**Default Value**: - -.. code-block:: yaml - - "" - - -cloudwatch-log-group (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Log group to which streams are associated. - -**Default Value**: - -.. code-block:: yaml - - "" - - -cloudwatch-template-uri (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Template Uri to use when building cloudwatch log links - -**Default Value**: - -.. code-block:: yaml - - "" - - -kubernetes-enabled (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Enable Kubernetes Logging - -**Default Value**: - -.. code-block:: yaml - - "true" - - -kubernetes-url (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Console URL for Kubernetes logs - -**Default Value**: - -.. code-block:: yaml - - "" - - -kubernetes-template-uri (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Template Uri to use when building kubernetes log links - -**Default Value**: - -.. code-block:: yaml - - http://localhost:30082/#!/log/{{ .namespace }}/{{ .podName }}/pod?namespace={{ .namespace - }} - - -stackdriver-enabled (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Enable Log-links to stackdriver - -**Default Value**: - -.. code-block:: yaml - - "false" - - -gcp-project (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Name of the project in GCP - -**Default Value**: - -.. code-block:: yaml - - "" - - -stackdriver-logresourcename (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Name of the logresource in stackdriver - -**Default Value**: - -.. code-block:: yaml - - "" - - -stackdriver-template-uri (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Template Uri to use when building stackdriver log links - -**Default Value**: - -.. code-block:: yaml - - "" - - -templates ([]tasklog.TemplateLogPlugin) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -k8s.ResourceConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -primaryLabel (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -PrimaryLabel of a given service cluster - -**Default Value**: - -.. code-block:: yaml - - "" - - -limit (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Resource quota (in the number of outstanding requests) for the cluster - -**Default Value**: - -.. code-block:: yaml - - "0" - - -logs.LogConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -cloudwatch-enabled (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Enable Cloudwatch Logging - -**Default Value**: - -.. code-block:: yaml - - "false" - - -cloudwatch-region (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -AWS region in which Cloudwatch logs are stored. - -**Default Value**: - -.. code-block:: yaml - - "" - - -cloudwatch-log-group (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Log group to which streams are associated. - -**Default Value**: - -.. code-block:: yaml - - "" - - -cloudwatch-template-uri (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Template Uri to use when building cloudwatch log links - -**Default Value**: - -.. code-block:: yaml - - "" - - -kubernetes-enabled (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Enable Kubernetes Logging - -**Default Value**: - -.. code-block:: yaml - - "true" - - -kubernetes-url (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Console URL for Kubernetes logs - -**Default Value**: - -.. code-block:: yaml - - "" - - -kubernetes-template-uri (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Template Uri to use when building kubernetes log links - -**Default Value**: - -.. code-block:: yaml - - http://localhost:30082/#!/log/{{ .namespace }}/{{ .podName }}/pod?namespace={{ .namespace - }} - - -stackdriver-enabled (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Enable Log-links to stackdriver - -**Default Value**: - -.. code-block:: yaml - - "false" - - -gcp-project (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Name of the project in GCP - -**Default Value**: - -.. code-block:: yaml - - "" - - -stackdriver-logresourcename (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Name of the logresource in stackdriver - -**Default Value**: - -.. code-block:: yaml - - "" - - -stackdriver-template-uri (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Template Uri to use when building stackdriver log links - -**Default Value**: - -.. code-block:: yaml - - "" - - -templates ([]tasklog.TemplateLogPlugin) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -ray.Config -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -shutdownAfterJobFinishes (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "true" - - -ttlSecondsAfterFinished (int32) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "3600" - - -serviceType (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - NodePort - - -includeDashboard (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "true" - - -dashboardHost (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - 0.0.0.0 - - -nodeIPAddress (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -remoteClusterConfig (`k8s.ClusterConfig`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Configuration of remote K8s cluster for ray jobs - -**Default Value**: - -.. code-block:: yaml - - auth: - caCertPath: "" - tokenPath: "" - enabled: false - endpoint: "" - name: "" - - -logs (`logs.LogConfig`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - cloudwatch-enabled: false - cloudwatch-log-group: "" - cloudwatch-region: "" - cloudwatch-template-uri: "" - gcp-project: "" - kubernetes-enabled: false - kubernetes-template-uri: "" - kubernetes-url: "" - stackdriver-enabled: false - stackdriver-logresourcename: "" - stackdriver-template-uri: "" - templates: null - - -logsSidecar (v1.Container) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -dashboardURLTemplate (tasklog.TemplateLogPlugin) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Template for URL of Ray dashboard running on a head node. - -**Default Value**: - -.. code-block:: yaml - - null - - -defaults (`ray.DefaultConfig`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - headNode: - ipAddress: $MY_POD_IP - startParameters: - disable-usage-stats: "true" - workerNode: - ipAddress: $MY_POD_IP - startParameters: - disable-usage-stats: "true" - - -enableUsageStats (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Enable usage stats for ray jobs. These stats are submitted to usage-stats.ray.io per https://docs.ray.io/en/latest/cluster/usage-stats.html - -**Default Value**: - -.. code-block:: yaml - - "false" - - -ray.DefaultConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -headNode (`ray.NodeConfig`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - ipAddress: $MY_POD_IP - startParameters: - disable-usage-stats: "true" - - -workerNode (`ray.NodeConfig`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - ipAddress: $MY_POD_IP - startParameters: - disable-usage-stats: "true" - - -ray.NodeConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -startParameters (map[string]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - disable-usage-stats: "true" - - -ipAddress (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - $MY_POD_IP - - -snowflake.Config -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -webApi (`webapi.PluginConfig`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Defines config for the base WebAPI plugin. - -**Default Value**: - -.. code-block:: yaml - - caching: - maxSystemFailures: 5 - resyncInterval: 30s - size: 500000 - workers: 10 - readRateLimiter: - burst: 100 - qps: 10 - resourceMeta: null - resourceQuotas: - default: 1000 - writeRateLimiter: - burst: 100 - qps: 10 - - -resourceConstraints (`core.ResourceConstraintsSpec`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - NamespaceScopeResourceConstraint: - Value: 50 - ProjectScopeResourceConstraint: - Value: 100 - - -defaultWarehouse (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Defines the default warehouse to use when running on Snowflake unless overwritten by the task. - -**Default Value**: - -.. code-block:: yaml - - COMPUTE_WH - - -snowflakeTokenKey (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Name of the key where to find Snowflake token in the secret manager. - -**Default Value**: - -.. code-block:: yaml - - FLYTE_SNOWFLAKE_CLIENT_TOKEN - - -snowflakeEndpoint (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -spark.Config -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -spark-config-default (map[string]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -spark-history-server-url (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -URL for SparkHistory Server that each job will publish the execution history to. - -**Default Value**: - -.. code-block:: yaml - - "" - - -features ([]spark.Feature) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -logs (`spark.LogConfig`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Config for log links for spark applications. - -**Default Value**: - -.. code-block:: yaml - - all-user: - cloudwatch-enabled: false - cloudwatch-log-group: "" - cloudwatch-region: "" - cloudwatch-template-uri: "" - gcp-project: "" - kubernetes-enabled: false - kubernetes-template-uri: "" - kubernetes-url: "" - stackdriver-enabled: false - stackdriver-logresourcename: "" - stackdriver-template-uri: "" - templates: null - mixed: - cloudwatch-enabled: false - cloudwatch-log-group: "" - cloudwatch-region: "" - cloudwatch-template-uri: "" - gcp-project: "" - kubernetes-enabled: true - kubernetes-template-uri: http://localhost:30082/#!/log/{{ .namespace }}/{{ .podName - }}/pod?namespace={{ .namespace }} - kubernetes-url: "" - stackdriver-enabled: false - stackdriver-logresourcename: "" - stackdriver-template-uri: "" - templates: null - system: - cloudwatch-enabled: false - cloudwatch-log-group: "" - cloudwatch-region: "" - cloudwatch-template-uri: "" - gcp-project: "" - kubernetes-enabled: false - kubernetes-template-uri: "" - kubernetes-url: "" - stackdriver-enabled: false - stackdriver-logresourcename: "" - stackdriver-template-uri: "" - templates: null - user: - cloudwatch-enabled: false - cloudwatch-log-group: "" - cloudwatch-region: "" - cloudwatch-template-uri: "" - gcp-project: "" - kubernetes-enabled: false - kubernetes-template-uri: "" - kubernetes-url: "" - stackdriver-enabled: false - stackdriver-logresourcename: "" - stackdriver-template-uri: "" - templates: null - - -spark.LogConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -mixed (`logs.LogConfig`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Defines the log config that's not split into user/system. - -**Default Value**: - -.. code-block:: yaml - - cloudwatch-enabled: false - cloudwatch-log-group: "" - cloudwatch-region: "" - cloudwatch-template-uri: "" - gcp-project: "" - kubernetes-enabled: true - kubernetes-template-uri: http://localhost:30082/#!/log/{{ .namespace }}/{{ .podName - }}/pod?namespace={{ .namespace }} - kubernetes-url: "" - stackdriver-enabled: false - stackdriver-logresourcename: "" - stackdriver-template-uri: "" - templates: null - - -user (`logs.LogConfig`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Defines the log config for user logs. - -**Default Value**: - -.. code-block:: yaml - - cloudwatch-enabled: false - cloudwatch-log-group: "" - cloudwatch-region: "" - cloudwatch-template-uri: "" - gcp-project: "" - kubernetes-enabled: false - kubernetes-template-uri: "" - kubernetes-url: "" - stackdriver-enabled: false - stackdriver-logresourcename: "" - stackdriver-template-uri: "" - templates: null - - -system (`logs.LogConfig`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Defines the log config for system logs. - -**Default Value**: - -.. code-block:: yaml - - cloudwatch-enabled: false - cloudwatch-log-group: "" - cloudwatch-region: "" - cloudwatch-template-uri: "" - gcp-project: "" - kubernetes-enabled: false - kubernetes-template-uri: "" - kubernetes-url: "" - stackdriver-enabled: false - stackdriver-logresourcename: "" - stackdriver-template-uri: "" - templates: null - - -all-user (`logs.LogConfig`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -All user logs across driver and executors. - -**Default Value**: - -.. code-block:: yaml - - cloudwatch-enabled: false - cloudwatch-log-group: "" - cloudwatch-region: "" - cloudwatch-template-uri: "" - gcp-project: "" - kubernetes-enabled: false - kubernetes-template-uri: "" - kubernetes-url: "" - stackdriver-enabled: false - stackdriver-logresourcename: "" - stackdriver-template-uri: "" - templates: null - - -testing.Config -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -sleep-duration (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Indicates the amount of time before transitioning to success - -**Default Value**: - -.. code-block:: yaml - - 0s - - -Section: propeller -======================================================================================================================== - -kube-config (string) ------------------------------------------------------------------------------------------------------------------------- - -Path to kubernetes client config file. - -**Default Value**: - -.. code-block:: yaml - - "" - - -master (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "" - - -workers (int) ------------------------------------------------------------------------------------------------------------------------- - -Number of threads to process workflows - -**Default Value**: - -.. code-block:: yaml - - "20" - - -workflow-reeval-duration (`config.Duration`_) ------------------------------------------------------------------------------------------------------------------------- - -Frequency of re-evaluating workflows - -**Default Value**: - -.. code-block:: yaml - - 10s - - -downstream-eval-duration (`config.Duration`_) ------------------------------------------------------------------------------------------------------------------------- - -Frequency of re-evaluating downstream tasks - -**Default Value**: - -.. code-block:: yaml - - 30s - - -limit-namespace (string) ------------------------------------------------------------------------------------------------------------------------- - -Namespaces to watch for this propeller - -**Default Value**: - -.. code-block:: yaml - - all - - -prof-port (`config.Port`_) ------------------------------------------------------------------------------------------------------------------------- - -Profiler port - -**Default Value**: - -.. code-block:: yaml - - 10254 - - -metadata-prefix (string) ------------------------------------------------------------------------------------------------------------------------- - -MetadataPrefix should be used if all the metadata for Flyte executions should be stored under a specific prefix in CloudStorage. If not specified, the data will be stored in the base container directly. - -**Default Value**: - -.. code-block:: yaml - - metadata/propeller - - -rawoutput-prefix (string) ------------------------------------------------------------------------------------------------------------------------- - -a fully qualified storage path of the form s3://flyte/abc/..., where all data sandboxes should be stored. - -**Default Value**: - -.. code-block:: yaml - - "" - - -queue (`config.CompositeQueueConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -Workflow workqueue configuration, affects the way the work is consumed from the queue. - -**Default Value**: - -.. code-block:: yaml - - batch-size: -1 - batching-interval: 1s - queue: - base-delay: 0s - capacity: 10000 - max-delay: 1m0s - rate: 1000 - type: maxof - sub-queue: - base-delay: 0s - capacity: 10000 - max-delay: 0s - rate: 1000 - type: bucket - type: batch - - -metrics-prefix (string) ------------------------------------------------------------------------------------------------------------------------- - -An optional prefix for all published metrics. - -**Default Value**: - -.. code-block:: yaml - - flyte - - -metrics-keys ([]string) ------------------------------------------------------------------------------------------------------------------------- - -Metrics labels applied to prometheus metrics emitted by the service. - -**Default Value**: - -.. code-block:: yaml - - - project - - domain - - wf - - task - - -enable-admin-launcher (bool) ------------------------------------------------------------------------------------------------------------------------- - -Enable remote Workflow launcher to Admin - -**Default Value**: - -.. code-block:: yaml - - "true" - - -max-workflow-retries (int) ------------------------------------------------------------------------------------------------------------------------- - -Maximum number of retries per workflow - -**Default Value**: - -.. code-block:: yaml - - "10" - - -max-ttl-hours (int) ------------------------------------------------------------------------------------------------------------------------- - -Maximum number of hours a completed workflow should be retained. Number between 1-23 hours - -**Default Value**: - -.. code-block:: yaml - - "23" - - -gc-interval (`config.Duration`_) ------------------------------------------------------------------------------------------------------------------------- - -Run periodic GC every 30 minutes - -**Default Value**: - -.. code-block:: yaml - - 30m0s - - -leader-election (`config.LeaderElectionConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -Config for leader election. - -**Default Value**: - -.. code-block:: yaml - - enabled: false - lease-duration: 15s - lock-config-map: - Name: "" - Namespace: "" - renew-deadline: 10s - retry-period: 2s - - -publish-k8s-events (bool) ------------------------------------------------------------------------------------------------------------------------- - -Enable events publishing to K8s events API. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -max-output-size-bytes (int64) ------------------------------------------------------------------------------------------------------------------------- - -Maximum size of outputs per task - -**Default Value**: - -.. code-block:: yaml - - "10485760" - - -enable-grpc-latency-metrics (bool) ------------------------------------------------------------------------------------------------------------------------- - -Enable grpc latency metrics. Note Histograms metrics can be expensive on Prometheus servers. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -kube-client-config (`config.KubeClientConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -Configuration to control the Kubernetes client - -**Default Value**: - -.. code-block:: yaml - - burst: 25 - qps: 100 - timeout: 30s - - -node-config (`config.NodeConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -config for a workflow node - -**Default Value**: - -.. code-block:: yaml - - default-deadlines: - node-active-deadline: 0s - node-execution-deadline: 0s - workflow-active-deadline: 0s - default-max-attempts: 1 - ignore-retry-cause: false - interruptible-failure-threshold: -1 - max-node-retries-system-failures: 3 - - -max-streak-length (int) ------------------------------------------------------------------------------------------------------------------------- - -Maximum number of consecutive rounds that one propeller worker can use for one workflow - >1 => turbo-mode is enabled. - -**Default Value**: - -.. code-block:: yaml - - "8" - - -event-config (`config.EventConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -Configures execution event behavior. - -**Default Value**: - -.. code-block:: yaml - - fallback-to-output-reference: false - raw-output-policy: reference - - -include-shard-key-label ([]string) ------------------------------------------------------------------------------------------------------------------------- - -Include the specified shard key label in the k8s FlyteWorkflow CRD label selector - -**Default Value**: - -.. code-block:: yaml - - [] - - -exclude-shard-key-label ([]string) ------------------------------------------------------------------------------------------------------------------------- - -Exclude the specified shard key label from the k8s FlyteWorkflow CRD label selector - -**Default Value**: - -.. code-block:: yaml - - [] - - -include-project-label ([]string) ------------------------------------------------------------------------------------------------------------------------- - -Include the specified project label in the k8s FlyteWorkflow CRD label selector - -**Default Value**: - -.. code-block:: yaml - - [] - - -exclude-project-label ([]string) ------------------------------------------------------------------------------------------------------------------------- - -Exclude the specified project label from the k8s FlyteWorkflow CRD label selector - -**Default Value**: - -.. code-block:: yaml - - [] - - -include-domain-label ([]string) ------------------------------------------------------------------------------------------------------------------------- - -Include the specified domain label in the k8s FlyteWorkflow CRD label selector - -**Default Value**: - -.. code-block:: yaml - - [] - - -exclude-domain-label ([]string) ------------------------------------------------------------------------------------------------------------------------- - -Exclude the specified domain label from the k8s FlyteWorkflow CRD label selector - -**Default Value**: - -.. code-block:: yaml - - [] - - -cluster-id (string) ------------------------------------------------------------------------------------------------------------------------- - -Unique cluster id running this flytepropeller instance with which to annotate execution events - -**Default Value**: - -.. code-block:: yaml - - propeller - - -create-flyteworkflow-crd (bool) ------------------------------------------------------------------------------------------------------------------------- - -Enable creation of the FlyteWorkflow CRD on startup - -**Default Value**: - -.. code-block:: yaml - - "false" - - -array-node-event-version (int) ------------------------------------------------------------------------------------------------------------------------- - -ArrayNode eventing version. 0 => legacy (drop-in replacement for maptask), 1 => new - -**Default Value**: - -.. code-block:: yaml - - "0" - - -admin-launcher (`launchplan.AdminConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - burst: 10 - cacheSize: 10000 - tps: 100 - workers: 10 - - -resourcemanager (`config.Config (resourcemanager)`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - redis: - hostKey: "" - hostPath: "" - hostPaths: [] - maxRetries: 0 - primaryName: "" - resourceMaxQuota: 1000 - type: noop - - -workflowstore (`workflowstore.Config`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - policy: ResourceVersionCache - - -config.CompositeQueueConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -type (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Type of composite queue to use for the WorkQueue - -**Default Value**: - -.. code-block:: yaml - - batch - - -queue (`config.WorkqueueConfig`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Workflow workqueue configuration, affects the way the work is consumed from the queue. - -**Default Value**: - -.. code-block:: yaml - - base-delay: 0s - capacity: 10000 - max-delay: 1m0s - rate: 1000 - type: maxof - - -sub-queue (`config.WorkqueueConfig`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -SubQueue configuration, affects the way the nodes cause the top-level Work to be re-evaluated. - -**Default Value**: - -.. code-block:: yaml - - base-delay: 0s - capacity: 10000 - max-delay: 0s - rate: 1000 - type: bucket - - -batching-interval (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Duration for which downstream updates are buffered - -**Default Value**: - -.. code-block:: yaml - - 1s - - -batch-size (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "-1" - - -config.WorkqueueConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -type (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Type of RateLimiter to use for the WorkQueue - -**Default Value**: - -.. code-block:: yaml - - maxof - - -base-delay (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -base backoff delay for failure - -**Default Value**: - -.. code-block:: yaml - - 0s - - -max-delay (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Max backoff delay for failure - -**Default Value**: - -.. code-block:: yaml - - 1m0s - - -rate (int64) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Bucket Refill rate per second - -**Default Value**: - -.. code-block:: yaml - - "1000" - - -capacity (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Bucket capacity as number of items - -**Default Value**: - -.. code-block:: yaml - - "10000" - - -config.Config (resourcemanager) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -type (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Which resource manager to use - -**Default Value**: - -.. code-block:: yaml - - noop - - -resourceMaxQuota (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Global limit for concurrent Qubole queries - -**Default Value**: - -.. code-block:: yaml - - "1000" - - -redis (`config.RedisConfig`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Config for Redis resourcemanager. - -**Default Value**: - -.. code-block:: yaml - - hostKey: "" - hostPath: "" - hostPaths: [] - maxRetries: 0 - primaryName: "" - - -config.RedisConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -hostPaths ([]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Redis hosts locations. - -**Default Value**: - -.. code-block:: yaml - - [] - - -primaryName (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Redis primary name, fill in only if you are connecting to a redis sentinel cluster. - -**Default Value**: - -.. code-block:: yaml - - "" - - -hostPath (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Redis host location - -**Default Value**: - -.. code-block:: yaml - - "" - - -hostKey (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Key for local Redis access - -**Default Value**: - -.. code-block:: yaml - - "" - - -maxRetries (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -See Redis client options for more info - -**Default Value**: - -.. code-block:: yaml - - "0" - - -config.EventConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -raw-output-policy (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -How output data should be passed along in execution events. - -**Default Value**: - -.. code-block:: yaml - - reference - - -fallback-to-output-reference (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Whether output data should be sent by reference when it is too large to be sent inline in execution events. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -config.KubeClientConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -qps (float32) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "100" - - -burst (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Max burst rate for throttle. 0 defaults to 10 - -**Default Value**: - -.. code-block:: yaml - - "25" - - -timeout (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Max duration allowed for every request to KubeAPI before giving up. 0 implies no timeout. - -**Default Value**: - -.. code-block:: yaml - - 30s - - -config.LeaderElectionConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -enabled (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Enables/Disables leader election. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -lock-config-map (`types.NamespacedName`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -ConfigMap namespace/name to use for resource lock. - -**Default Value**: - -.. code-block:: yaml - - Name: "" - Namespace: "" - - -lease-duration (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Duration that non-leader candidates will wait to force acquire leadership. This is measured against time of last observed ack. - -**Default Value**: - -.. code-block:: yaml - - 15s - - -renew-deadline (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Duration that the acting master will retry refreshing leadership before giving up. - -**Default Value**: - -.. code-block:: yaml - - 10s - - -retry-period (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Duration the LeaderElector clients should wait between tries of actions. - -**Default Value**: - -.. code-block:: yaml - - 2s - - -types.NamespacedName -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Namespace (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -Name (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -config.NodeConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -default-deadlines (`config.DefaultDeadlines`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Default value for timeouts - -**Default Value**: - -.. code-block:: yaml - - node-active-deadline: 0s - node-execution-deadline: 0s - workflow-active-deadline: 0s - - -max-node-retries-system-failures (int64) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Maximum number of retries per node for node failure due to infra issues - -**Default Value**: - -.. code-block:: yaml - - "3" - - -interruptible-failure-threshold (int32) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -number of failures for a node to be still considered interruptible. Negative numbers are treated as complementary (ex. -1 means last attempt is non-interruptible).' - -**Default Value**: - -.. code-block:: yaml - - "-1" - - -default-max-attempts (int32) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Default maximum number of attempts for a node - -**Default Value**: - -.. code-block:: yaml - - "1" - - -ignore-retry-cause (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Ignore retry cause and count all attempts toward a node's max attempts - -**Default Value**: - -.. code-block:: yaml - - "false" - - -config.DefaultDeadlines -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -node-execution-deadline (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Default value of node execution timeout that includes the time spent to run the node/workflow - -**Default Value**: - -.. code-block:: yaml - - 0s - - -node-active-deadline (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Default value of node timeout that includes the time spent queued. - -**Default Value**: - -.. code-block:: yaml - - 0s - - -workflow-active-deadline (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Default value of workflow timeout that includes the time spent queued. - -**Default Value**: - -.. code-block:: yaml - - 0s - - -config.Port -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -port (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "10254" - - -launchplan.AdminConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -tps (int64) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -The maximum number of transactions per second to flyte admin from this client. - -**Default Value**: - -.. code-block:: yaml - - "100" - - -burst (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Maximum burst for throttle - -**Default Value**: - -.. code-block:: yaml - - "10" - - -cacheSize (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Maximum cache in terms of number of items stored. - -**Default Value**: - -.. code-block:: yaml - - "10000" - - -workers (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Number of parallel workers to work on the queue. - -**Default Value**: - -.. code-block:: yaml - - "10" - - -workflowstore.Config -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -policy (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Workflow Store Policy to initialize - -**Default Value**: - -.. code-block:: yaml - - ResourceVersionCache - - -Section: secrets -======================================================================================================================== - -secrets-prefix (string) ------------------------------------------------------------------------------------------------------------------------- - -Prefix where to look for secrets file - -**Default Value**: - -.. code-block:: yaml - - /etc/secrets - - -env-prefix (string) ------------------------------------------------------------------------------------------------------------------------- - -Prefix for environment variables - -**Default Value**: - -.. code-block:: yaml - - FLYTE_SECRET_ - - -Section: storage -======================================================================================================================== - -type (string) ------------------------------------------------------------------------------------------------------------------------- - -Sets the type of storage to configure [s3/minio/local/mem/stow]. - -**Default Value**: - -.. code-block:: yaml - - s3 - - -connection (`storage.ConnectionConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - access-key: "" - auth-type: iam - disable-ssl: false - endpoint: "" - region: us-east-1 - secret-key: "" - - -stow (`storage.StowConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -Storage config for stow backend. - -**Default Value**: - -.. code-block:: yaml - - {} - - -container (string) ------------------------------------------------------------------------------------------------------------------------- - -Initial container (in s3 a bucket) to create -if it doesn't exist-.' - -**Default Value**: - -.. code-block:: yaml - - "" - - -enable-multicontainer (bool) ------------------------------------------------------------------------------------------------------------------------- - -If this is true, then the container argument is overlooked and redundant. This config will automatically open new connections to new containers/buckets as they are encountered - -**Default Value**: - -.. code-block:: yaml - - "false" - - -cache (`storage.CachingConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - max_size_mbs: 0 - target_gc_percent: 0 - - -limits (`storage.LimitsConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -Sets limits for stores. - -**Default Value**: - -.. code-block:: yaml - - maxDownloadMBs: 2 - - -defaultHttpClient (`storage.HTTPClientConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -Sets the default http client config. - -**Default Value**: - -.. code-block:: yaml - - headers: null - timeout: 0s - - -signedUrl (`storage.SignedURLConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -Sets config for SignedURL. - -**Default Value**: - -.. code-block:: yaml - - {} - - -storage.CachingConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -max_size_mbs (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Maximum size of the cache where the Blob store data is cached in-memory. If not specified or set to 0, cache is not used - -**Default Value**: - -.. code-block:: yaml - - "0" - - -target_gc_percent (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Sets the garbage collection target percentage. - -**Default Value**: - -.. code-block:: yaml - - "0" - - -storage.ConnectionConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -endpoint (`config.URL`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -URL for storage client to connect to. - -**Default Value**: - -.. code-block:: yaml - - "" - - -auth-type (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Auth Type to use [iam,accesskey]. - -**Default Value**: - -.. code-block:: yaml - - iam - - -access-key (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Access key to use. Only required when authtype is set to accesskey. - -**Default Value**: - -.. code-block:: yaml - - "" - - -secret-key (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Secret to use when accesskey is set. - -**Default Value**: - -.. code-block:: yaml - - "" - - -region (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Region to connect to. - -**Default Value**: - -.. code-block:: yaml - - us-east-1 - - -disable-ssl (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Disables SSL connection. Should only be used for development. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -storage.HTTPClientConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -headers (map[string][]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -timeout (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Sets time out on the http client. - -**Default Value**: - -.. code-block:: yaml - - 0s - - -storage.LimitsConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -maxDownloadMBs (int64) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Maximum allowed download size (in MBs) per call. - -**Default Value**: - -.. code-block:: yaml - - "2" - - -storage.SignedURLConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -stowConfigOverride (map[string]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -storage.StowConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -kind (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Kind of Stow backend to use. Refer to github/flyteorg/stow - -**Default Value**: - -.. code-block:: yaml - - "" - - -config (map[string]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Configuration for stow backend. Refer to github/flyteorg/stow - -**Default Value**: - -.. code-block:: yaml - - {} - - -Section: tasks -======================================================================================================================== - -task-plugins (`config.TaskPluginConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -Task plugin configuration - -**Default Value**: - -.. code-block:: yaml - - default-for-task-types: {} - enabled-plugins: [] - - -max-plugin-phase-versions (int32) ------------------------------------------------------------------------------------------------------------------------- - -Maximum number of plugin phase versions allowed for one phase. - -**Default Value**: - -.. code-block:: yaml - - "100000" - - -backoff (`config.BackOffConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -Config for Exponential BackOff implementation - -**Default Value**: - -.. code-block:: yaml - - base-second: 2 - max-duration: 20s - - -maxLogMessageLength (int) ------------------------------------------------------------------------------------------------------------------------- - -Deprecated!!! Max length of error message. - -**Default Value**: - -.. code-block:: yaml - - "0" - - -config.BackOffConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -base-second (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -The number of seconds representing the base duration of the exponential backoff - -**Default Value**: - -.. code-block:: yaml - - "2" - - -max-duration (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -The cap of the backoff duration - -**Default Value**: - -.. code-block:: yaml - - 20s - - -config.TaskPluginConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -enabled-plugins ([]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Plugins enabled currently - -**Default Value**: - -.. code-block:: yaml - - [] - - -default-for-task-types (map[string]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - {} - - -Section: webhook -======================================================================================================================== - -metrics-prefix (string) ------------------------------------------------------------------------------------------------------------------------- - -An optional prefix for all published metrics. - -**Default Value**: - -.. code-block:: yaml - - 'flyte:' - - -certDir (string) ------------------------------------------------------------------------------------------------------------------------- - -Certificate directory to use to write generated certs. Defaults to /etc/webhook/certs/ - -**Default Value**: - -.. code-block:: yaml - - /etc/webhook/certs - - -localCert (bool) ------------------------------------------------------------------------------------------------------------------------- - -write certs locally. Defaults to false - -**Default Value**: - -.. code-block:: yaml - - "false" - - -listenPort (int) ------------------------------------------------------------------------------------------------------------------------- - -The port to use to listen to webhook calls. Defaults to 9443 - -**Default Value**: - -.. code-block:: yaml - - "9443" - - -serviceName (string) ------------------------------------------------------------------------------------------------------------------------- - -The name of the webhook service. - -**Default Value**: - -.. code-block:: yaml - - flyte-pod-webhook - - -servicePort (int32) ------------------------------------------------------------------------------------------------------------------------- - -The port on the service that hosting webhook. - -**Default Value**: - -.. code-block:: yaml - - "443" - - -secretName (string) ------------------------------------------------------------------------------------------------------------------------- - -Secret name to write generated certs to. - -**Default Value**: - -.. code-block:: yaml - - flyte-pod-webhook - - -secretManagerType (int) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - K8s - - -awsSecretManager (`config.AWSSecretManagerConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -AWS Secret Manager config. - -**Default Value**: - -.. code-block:: yaml - - resources: - limits: - cpu: 200m - memory: 500Mi - requests: - cpu: 200m - memory: 500Mi - sidecarImage: docker.io/amazon/aws-secrets-manager-secret-sidecar:v0.1.4 - - -gcpSecretManager (`config.GCPSecretManagerConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -GCP Secret Manager config. - -**Default Value**: - -.. code-block:: yaml - - resources: - limits: - cpu: 200m - memory: 500Mi - requests: - cpu: 200m - memory: 500Mi - sidecarImage: gcr.io/google.com/cloudsdktool/cloud-sdk:alpine - - -vaultSecretManager (`config.VaultSecretManagerConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -Vault Secret Manager config. - -**Default Value**: - -.. code-block:: yaml - - annotations: null - kvVersion: "2" - role: flyte - - -config.AWSSecretManagerConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -sidecarImage (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Specifies the sidecar docker image to use - -**Default Value**: - -.. code-block:: yaml - - docker.io/amazon/aws-secrets-manager-secret-sidecar:v0.1.4 - - -resources (`v1.ResourceRequirements`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - limits: - cpu: 200m - memory: 500Mi - requests: - cpu: 200m - memory: 500Mi - - -v1.ResourceRequirements -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -limits (v1.ResourceList) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - cpu: 200m - memory: 500Mi - - -requests (v1.ResourceList) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - cpu: 200m - memory: 500Mi - - -claims ([]v1.ResourceClaim) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -config.GCPSecretManagerConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -sidecarImage (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Specifies the sidecar docker image to use - -**Default Value**: - -.. code-block:: yaml - - gcr.io/google.com/cloudsdktool/cloud-sdk:alpine - - -resources (`v1.ResourceRequirements`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - limits: - cpu: 200m - memory: 500Mi - requests: - cpu: 200m - memory: 500Mi - - -config.VaultSecretManagerConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -role (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Specifies the vault role to use - -**Default Value**: - -.. code-block:: yaml - - flyte - - -kvVersion (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "2" - - -annotations (map[string]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - diff --git a/rsts/deployment/configuration/generated/index.rst b/rsts/deployment/configuration/generated/index.rst deleted file mode 100644 index 101eac2594..0000000000 --- a/rsts/deployment/configuration/generated/index.rst +++ /dev/null @@ -1,56 +0,0 @@ -.. _deployment-configuration-generated: - -######################### -Configuration Reference -######################### - -This section documents the configuration settings for Flyte's backend services. - -.. panels:: - :header: text-center - :column: col-lg-12 p-2 - - .. link-button:: flytescheduler-config-specification - :type: ref - :text: Flyte Scheduler - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - The Flyte workflow scheduler service. - - --- - - .. link-button:: flytedatacatalog-config-specification - :type: ref - :text: Data Catalog - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - The Flyte Data Memoization (datacatalog) service. - - --- - - .. link-button:: flyteadmin-config-specification - :type: ref - :text: Flyte Admin - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - The Flyte control plane. - - --- - - .. link-button:: flytepropeller-config-specification - :type: url - :text: Flytectl - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - Execution engine configuration - -.. toctree:: - :maxdepth: 1 - :caption: Generated Configuration Documentation - :name: generatedconfigdoctoc - :hidden: - - datacatalog_config - flyteadmin_config - flytepropeller_config - scheduler_config diff --git a/rsts/deployment/configuration/generated/scheduler_config.rst b/rsts/deployment/configuration/generated/scheduler_config.rst deleted file mode 100644 index 81eb27bc44..0000000000 --- a/rsts/deployment/configuration/generated/scheduler_config.rst +++ /dev/null @@ -1,5325 +0,0 @@ -.. _flytescheduler-config-specification: - -######################################### -Flyte Scheduler Configuration -######################################### - -- `admin <#section-admin>`_ - -- `auth <#section-auth>`_ - -- `cloudevents <#section-cloudevents>`_ - -- `cluster_resources <#section-cluster_resources>`_ - -- `clusterpools <#section-clusterpools>`_ - -- `clusters <#section-clusters>`_ - -- `database <#section-database>`_ - -- `domains <#section-domains>`_ - -- `externalevents <#section-externalevents>`_ - -- `flyteadmin <#section-flyteadmin>`_ - -- `logger <#section-logger>`_ - -- `namespace_mapping <#section-namespace_mapping>`_ - -- `notifications <#section-notifications>`_ - -- `otel <#section-otel>`_ - -- `plugins <#section-plugins>`_ - -- `propeller <#section-propeller>`_ - -- `qualityofservice <#section-qualityofservice>`_ - -- `queues <#section-queues>`_ - -- `registration <#section-registration>`_ - -- `remotedata <#section-remotedata>`_ - -- `scheduler <#section-scheduler>`_ - -- `secrets <#section-secrets>`_ - -- `server <#section-server>`_ - -- `storage <#section-storage>`_ - -- `task_resources <#section-task_resources>`_ - -- `task_type_whitelist <#section-task_type_whitelist>`_ - -Section: admin -======================================================================================================================== - -endpoint (`config.URL`_) ------------------------------------------------------------------------------------------------------------------------- - -For admin types, specify where the uri of the service is located. - -**Default Value**: - -.. code-block:: yaml - - "" - - -insecure (bool) ------------------------------------------------------------------------------------------------------------------------- - -Use insecure connection. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -insecureSkipVerify (bool) ------------------------------------------------------------------------------------------------------------------------- - -InsecureSkipVerify controls whether a client verifies the server's certificate chain and host name. Caution : shouldn't be use for production usecases' - -**Default Value**: - -.. code-block:: yaml - - "false" - - -caCertFilePath (string) ------------------------------------------------------------------------------------------------------------------------- - -Use specified certificate file to verify the admin server peer. - -**Default Value**: - -.. code-block:: yaml - - "" - - -maxBackoffDelay (`config.Duration`_) ------------------------------------------------------------------------------------------------------------------------- - -Max delay for grpc backoff - -**Default Value**: - -.. code-block:: yaml - - 8s - - -perRetryTimeout (`config.Duration`_) ------------------------------------------------------------------------------------------------------------------------- - -gRPC per retry timeout - -**Default Value**: - -.. code-block:: yaml - - 15s - - -maxRetries (int) ------------------------------------------------------------------------------------------------------------------------- - -Max number of gRPC retries - -**Default Value**: - -.. code-block:: yaml - - "4" - - -authType (uint8) ------------------------------------------------------------------------------------------------------------------------- - -Type of OAuth2 flow used for communicating with admin.ClientSecret,Pkce,ExternalCommand are valid values - -**Default Value**: - -.. code-block:: yaml - - ClientSecret - - -tokenRefreshWindow (`config.Duration`_) ------------------------------------------------------------------------------------------------------------------------- - -Max duration between token refresh attempt and token expiry. - -**Default Value**: - -.. code-block:: yaml - - 0s - - -useAuth (bool) ------------------------------------------------------------------------------------------------------------------------- - -Deprecated: Auth will be enabled/disabled based on admin's dynamically discovered information. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -clientId (string) ------------------------------------------------------------------------------------------------------------------------- - -Client ID - -**Default Value**: - -.. code-block:: yaml - - flytepropeller - - -clientSecretLocation (string) ------------------------------------------------------------------------------------------------------------------------- - -File containing the client secret - -**Default Value**: - -.. code-block:: yaml - - /etc/secrets/client_secret - - -clientSecretEnvVar (string) ------------------------------------------------------------------------------------------------------------------------- - -Environment variable containing the client secret - -**Default Value**: - -.. code-block:: yaml - - "" - - -scopes ([]string) ------------------------------------------------------------------------------------------------------------------------- - -List of scopes to request - -**Default Value**: - -.. code-block:: yaml - - [] - - -useAudienceFromAdmin (bool) ------------------------------------------------------------------------------------------------------------------------- - -Use Audience configured from admins public endpoint config. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -audience (string) ------------------------------------------------------------------------------------------------------------------------- - -Audience to use when initiating OAuth2 authorization requests. - -**Default Value**: - -.. code-block:: yaml - - "" - - -authorizationServerUrl (string) ------------------------------------------------------------------------------------------------------------------------- - -This is the URL to your IdP's authorization server. It'll default to Endpoint - -**Default Value**: - -.. code-block:: yaml - - "" - - -tokenUrl (string) ------------------------------------------------------------------------------------------------------------------------- - -OPTIONAL: Your IdP's token endpoint. It'll be discovered from flyte admin's OAuth Metadata endpoint if not provided. - -**Default Value**: - -.. code-block:: yaml - - "" - - -authorizationHeader (string) ------------------------------------------------------------------------------------------------------------------------- - -Custom metadata header to pass JWT - -**Default Value**: - -.. code-block:: yaml - - "" - - -pkceConfig (`pkce.Config`_) ------------------------------------------------------------------------------------------------------------------------- - -Config for Pkce authentication flow. - -**Default Value**: - -.. code-block:: yaml - - refreshTime: 5m0s - timeout: 2m0s - - -deviceFlowConfig (`deviceflow.Config`_) ------------------------------------------------------------------------------------------------------------------------- - -Config for Device authentication flow. - -**Default Value**: - -.. code-block:: yaml - - pollInterval: 5s - refreshTime: 5m0s - timeout: 10m0s - - -command ([]string) ------------------------------------------------------------------------------------------------------------------------- - -Command for external authentication token generation - -**Default Value**: - -.. code-block:: yaml - - [] - - -proxyCommand ([]string) ------------------------------------------------------------------------------------------------------------------------- - -Command for external proxy-authorization token generation - -**Default Value**: - -.. code-block:: yaml - - [] - - -defaultServiceConfig (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "" - - -httpProxyURL (`config.URL`_) ------------------------------------------------------------------------------------------------------------------------- - -OPTIONAL: HTTP Proxy to be used for OAuth requests. - -**Default Value**: - -.. code-block:: yaml - - "" - - -config.Duration -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Duration (int64) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - 8s - - -config.URL -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -URL (`url.URL`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - ForceQuery: false - Fragment: "" - Host: "" - OmitHost: false - Opaque: "" - Path: "" - RawFragment: "" - RawPath: "" - RawQuery: "" - Scheme: "" - User: null - - -url.URL -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Scheme (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -Opaque (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -User (url.Userinfo) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -Host (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -Path (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -RawPath (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -OmitHost (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "false" - - -ForceQuery (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "false" - - -RawQuery (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -Fragment (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -RawFragment (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -deviceflow.Config -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -refreshTime (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -grace period from the token expiry after which it would refresh the token. - -**Default Value**: - -.. code-block:: yaml - - 5m0s - - -timeout (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -amount of time the device flow should complete or else it will be cancelled. - -**Default Value**: - -.. code-block:: yaml - - 10m0s - - -pollInterval (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -amount of time the device flow would poll the token endpoint if auth server doesn't return a polling interval. Okta and google IDP do return an interval' - -**Default Value**: - -.. code-block:: yaml - - 5s - - -pkce.Config -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -timeout (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Amount of time the browser session would be active for authentication from client app. - -**Default Value**: - -.. code-block:: yaml - - 2m0s - - -refreshTime (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -grace period from the token expiry after which it would refresh the token. - -**Default Value**: - -.. code-block:: yaml - - 5m0s - - -Section: auth -======================================================================================================================== - -httpAuthorizationHeader (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - flyte-authorization - - -grpcAuthorizationHeader (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - flyte-authorization - - -disableForHttp (bool) ------------------------------------------------------------------------------------------------------------------------- - -Disables auth enforcement on HTTP Endpoints. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -disableForGrpc (bool) ------------------------------------------------------------------------------------------------------------------------- - -Disables auth enforcement on Grpc Endpoints. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -authorizedUris ([]config.URL) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - null - - -httpProxyURL (`config.URL`_) ------------------------------------------------------------------------------------------------------------------------- - -OPTIONAL: HTTP Proxy to be used for OAuth requests. - -**Default Value**: - -.. code-block:: yaml - - "" - - -userAuth (`config.UserAuthConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -Defines Auth options for users. - -**Default Value**: - -.. code-block:: yaml - - cookieBlockKeySecretName: cookie_block_key - cookieHashKeySecretName: cookie_hash_key - cookieSetting: - domain: "" - sameSitePolicy: DefaultMode - httpProxyURL: "" - openId: - baseUrl: "" - clientId: "" - clientSecretFile: "" - clientSecretName: oidc_client_secret - scopes: - - openid - - profile - redirectUrl: /console - - -appAuth (`config.OAuth2Options`_) ------------------------------------------------------------------------------------------------------------------------- - -Defines Auth options for apps. UserAuth must be enabled for AppAuth to work. - -**Default Value**: - -.. code-block:: yaml - - authServerType: Self - externalAuthServer: - allowedAudience: [] - baseUrl: "" - httpProxyURL: "" - metadataUrl: "" - retryAttempts: 5 - retryDelay: 1s - selfAuthServer: - accessTokenLifespan: 30m0s - authorizationCodeLifespan: 5m0s - claimSymmetricEncryptionKeySecretName: claim_symmetric_key - issuer: "" - oldTokenSigningRSAKeySecretName: token_rsa_key_old.pem - refreshTokenLifespan: 1h0m0s - staticClients: - flyte-cli: - audience: null - grant_types: - - refresh_token - - authorization_code - id: flyte-cli - public: true - redirect_uris: - - http://localhost:53593/callback - - http://localhost:12345/callback - response_types: - - code - - token - scopes: - - all - - offline - - access_token - flytectl: - audience: null - grant_types: - - refresh_token - - authorization_code - id: flytectl - public: true - redirect_uris: - - http://localhost:53593/callback - - http://localhost:12345/callback - response_types: - - code - - token - scopes: - - all - - offline - - access_token - flytepropeller: - audience: null - client_secret: JDJhJDA2JGQ2UFFuMlFBRlUzY0w1VjhNRGtldXVrNjN4dWJxVXhOeGp0ZlB3LkZjOU1nVjZ2cG15T0l5 - grant_types: - - refresh_token - - client_credentials - id: flytepropeller - public: false - redirect_uris: - - http://localhost:3846/callback - response_types: - - token - scopes: - - all - - offline - - access_token - tokenSigningRSAKeySecretName: token_rsa_key.pem - thirdPartyConfig: - flyteClient: - audience: "" - clientId: flytectl - redirectUri: http://localhost:53593/callback - scopes: - - all - - offline - - -config.OAuth2Options -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -authServerType (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - Self - - -selfAuthServer (`config.AuthorizationServer`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Authorization Server config to run as a service. Use this when using an IdP that does not offer a custom OAuth2 Authorization Server. - -**Default Value**: - -.. code-block:: yaml - - accessTokenLifespan: 30m0s - authorizationCodeLifespan: 5m0s - claimSymmetricEncryptionKeySecretName: claim_symmetric_key - issuer: "" - oldTokenSigningRSAKeySecretName: token_rsa_key_old.pem - refreshTokenLifespan: 1h0m0s - staticClients: - flyte-cli: - audience: null - grant_types: - - refresh_token - - authorization_code - id: flyte-cli - public: true - redirect_uris: - - http://localhost:53593/callback - - http://localhost:12345/callback - response_types: - - code - - token - scopes: - - all - - offline - - access_token - flytectl: - audience: null - grant_types: - - refresh_token - - authorization_code - id: flytectl - public: true - redirect_uris: - - http://localhost:53593/callback - - http://localhost:12345/callback - response_types: - - code - - token - scopes: - - all - - offline - - access_token - flytepropeller: - audience: null - client_secret: JDJhJDA2JGQ2UFFuMlFBRlUzY0w1VjhNRGtldXVrNjN4dWJxVXhOeGp0ZlB3LkZjOU1nVjZ2cG15T0l5 - grant_types: - - refresh_token - - client_credentials - id: flytepropeller - public: false - redirect_uris: - - http://localhost:3846/callback - response_types: - - token - scopes: - - all - - offline - - access_token - tokenSigningRSAKeySecretName: token_rsa_key.pem - - -externalAuthServer (`config.ExternalAuthorizationServer`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -External Authorization Server config. - -**Default Value**: - -.. code-block:: yaml - - allowedAudience: [] - baseUrl: "" - httpProxyURL: "" - metadataUrl: "" - retryAttempts: 5 - retryDelay: 1s - - -thirdPartyConfig (`config.ThirdPartyConfigOptions`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Defines settings to instruct flyte cli tools (and optionally others) on what config to use to setup their client. - -**Default Value**: - -.. code-block:: yaml - - flyteClient: - audience: "" - clientId: flytectl - redirectUri: http://localhost:53593/callback - scopes: - - all - - offline - - -config.AuthorizationServer -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -issuer (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Defines the issuer to use when issuing and validating tokens. The default value is https:/// - -**Default Value**: - -.. code-block:: yaml - - "" - - -accessTokenLifespan (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Defines the lifespan of issued access tokens. - -**Default Value**: - -.. code-block:: yaml - - 30m0s - - -refreshTokenLifespan (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Defines the lifespan of issued access tokens. - -**Default Value**: - -.. code-block:: yaml - - 1h0m0s - - -authorizationCodeLifespan (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Defines the lifespan of issued access tokens. - -**Default Value**: - -.. code-block:: yaml - - 5m0s - - -claimSymmetricEncryptionKeySecretName (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -OPTIONAL: Secret name to use to encrypt claims in authcode token. - -**Default Value**: - -.. code-block:: yaml - - claim_symmetric_key - - -tokenSigningRSAKeySecretName (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -OPTIONAL: Secret name to use to retrieve RSA Signing Key. - -**Default Value**: - -.. code-block:: yaml - - token_rsa_key.pem - - -oldTokenSigningRSAKeySecretName (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -OPTIONAL: Secret name to use to retrieve Old RSA Signing Key. This can be useful during key rotation to continue to accept older tokens. - -**Default Value**: - -.. code-block:: yaml - - token_rsa_key_old.pem - - -staticClients (map[string]*fosite.DefaultClient) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - flyte-cli: - audience: null - grant_types: - - refresh_token - - authorization_code - id: flyte-cli - public: true - redirect_uris: - - http://localhost:53593/callback - - http://localhost:12345/callback - response_types: - - code - - token - scopes: - - all - - offline - - access_token - flytectl: - audience: null - grant_types: - - refresh_token - - authorization_code - id: flytectl - public: true - redirect_uris: - - http://localhost:53593/callback - - http://localhost:12345/callback - response_types: - - code - - token - scopes: - - all - - offline - - access_token - flytepropeller: - audience: null - client_secret: JDJhJDA2JGQ2UFFuMlFBRlUzY0w1VjhNRGtldXVrNjN4dWJxVXhOeGp0ZlB3LkZjOU1nVjZ2cG15T0l5 - grant_types: - - refresh_token - - client_credentials - id: flytepropeller - public: false - redirect_uris: - - http://localhost:3846/callback - response_types: - - token - scopes: - - all - - offline - - access_token - - -config.ExternalAuthorizationServer -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -baseUrl (`config.URL`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -This should be the base url of the authorization server that you are trying to hit. With Okta for instance, it will look something like https://company.okta.com/oauth2/abcdef123456789/ - -**Default Value**: - -.. code-block:: yaml - - "" - - -allowedAudience ([]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Optional: A list of allowed audiences. If not provided, the audience is expected to be the public Uri of the service. - -**Default Value**: - -.. code-block:: yaml - - [] - - -metadataUrl (`config.URL`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Optional: If the server doesn't support /.well-known/oauth-authorization-server, you can set a custom metadata url here.' - -**Default Value**: - -.. code-block:: yaml - - "" - - -httpProxyURL (`config.URL`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -OPTIONAL: HTTP Proxy to be used for OAuth requests. - -**Default Value**: - -.. code-block:: yaml - - "" - - -retryAttempts (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Optional: The number of attempted retries on a transient failure to get the OAuth metadata - -**Default Value**: - -.. code-block:: yaml - - "5" - - -retryDelay (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Optional, Duration to wait between retries - -**Default Value**: - -.. code-block:: yaml - - 1s - - -config.ThirdPartyConfigOptions -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -flyteClient (`config.FlyteClientConfig`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - audience: "" - clientId: flytectl - redirectUri: http://localhost:53593/callback - scopes: - - all - - offline - - -config.FlyteClientConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -clientId (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -public identifier for the app which handles authorization for a Flyte deployment - -**Default Value**: - -.. code-block:: yaml - - flytectl - - -redirectUri (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -This is the callback uri registered with the app which handles authorization for a Flyte deployment - -**Default Value**: - -.. code-block:: yaml - - http://localhost:53593/callback - - -scopes ([]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Recommended scopes for the client to request. - -**Default Value**: - -.. code-block:: yaml - - - all - - offline - - -audience (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Audience to use when initiating OAuth2 authorization requests. - -**Default Value**: - -.. code-block:: yaml - - "" - - -config.UserAuthConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -redirectUrl (`config.URL`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - /console - - -openId (`config.OpenIDOptions`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -OpenID Configuration for User Auth - -**Default Value**: - -.. code-block:: yaml - - baseUrl: "" - clientId: "" - clientSecretFile: "" - clientSecretName: oidc_client_secret - scopes: - - openid - - profile - - -httpProxyURL (`config.URL`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -OPTIONAL: HTTP Proxy to be used for OAuth requests. - -**Default Value**: - -.. code-block:: yaml - - "" - - -cookieHashKeySecretName (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -OPTIONAL: Secret name to use for cookie hash key. - -**Default Value**: - -.. code-block:: yaml - - cookie_hash_key - - -cookieBlockKeySecretName (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -OPTIONAL: Secret name to use for cookie block key. - -**Default Value**: - -.. code-block:: yaml - - cookie_block_key - - -cookieSetting (`config.CookieSettings`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -settings used by cookies created for user auth - -**Default Value**: - -.. code-block:: yaml - - domain: "" - sameSitePolicy: DefaultMode - - -config.CookieSettings -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -sameSitePolicy (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -OPTIONAL: Allows you to declare if your cookie should be restricted to a first-party or same-site context.Wrapper around http.SameSite. - -**Default Value**: - -.. code-block:: yaml - - DefaultMode - - -domain (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -OPTIONAL: Allows you to set the domain attribute on the auth cookies. - -**Default Value**: - -.. code-block:: yaml - - "" - - -config.OpenIDOptions -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -clientId (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -clientSecretName (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - oidc_client_secret - - -clientSecretFile (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -baseUrl (`config.URL`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -scopes ([]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - - openid - - profile - - -Section: cloudevents -======================================================================================================================== - -enable (bool) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "false" - - -type (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - local - - -aws (`interfaces.AWSConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - region: "" - - -gcp (`interfaces.GCPConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - projectId: "" - - -kafka (`interfaces.KafkaConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - brokers: null - version: "" - - -eventsPublisher (`interfaces.EventsPublisherConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - eventTypes: null - topicName: "" - - -reconnectAttempts (int) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "0" - - -reconnectDelaySeconds (int) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "0" - - -interfaces.AWSConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -region (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -interfaces.EventsPublisherConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -topicName (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -eventTypes ([]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -interfaces.GCPConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -projectId (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -interfaces.KafkaConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -version (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -brokers ([]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -Section: cluster_resources -======================================================================================================================== - -templatePath (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "" - - -templateData (map[string]interfaces.DataSource) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - {} - - -refreshInterval (`config.Duration`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - 1m0s - - -customData (map[string]map[string]interfaces.DataSource) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - {} - - -standaloneDeployment (bool) ------------------------------------------------------------------------------------------------------------------------- - -Whether the cluster resource sync is running in a standalone deployment and should call flyteadmin service endpoints - -**Default Value**: - -.. code-block:: yaml - - "false" - - -Section: clusterpools -======================================================================================================================== - -clusterPoolAssignments (map[string]interfaces.ClusterPoolAssignment) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - {} - - -Section: clusters -======================================================================================================================== - -clusterConfigs ([]interfaces.ClusterConfig) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - null - - -labelClusterMap (map[string][]interfaces.ClusterEntity) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - null - - -defaultExecutionLabel (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "" - - -Section: database -======================================================================================================================== - -host (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "" - - -port (int) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "0" - - -dbname (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "" - - -username (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "" - - -password (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "" - - -passwordPath (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "" - - -options (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "" - - -debug (bool) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "false" - - -enableForeignKeyConstraintWhenMigrating (bool) ------------------------------------------------------------------------------------------------------------------------- - -Whether to enable gorm foreign keys when migrating the db - -**Default Value**: - -.. code-block:: yaml - - "false" - - -maxIdleConnections (int) ------------------------------------------------------------------------------------------------------------------------- - -maxIdleConnections sets the maximum number of connections in the idle connection pool. - -**Default Value**: - -.. code-block:: yaml - - "10" - - -maxOpenConnections (int) ------------------------------------------------------------------------------------------------------------------------- - -maxOpenConnections sets the maximum number of open connections to the database. - -**Default Value**: - -.. code-block:: yaml - - "100" - - -connMaxLifeTime (`config.Duration`_) ------------------------------------------------------------------------------------------------------------------------- - -sets the maximum amount of time a connection may be reused - -**Default Value**: - -.. code-block:: yaml - - 1h0m0s - - -postgres (`database.PostgresConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - dbname: postgres - debug: false - host: postgres - options: sslmode=disable - password: "" - passwordPath: "" - port: 5432 - username: postgres - - -sqlite (`database.SQLiteConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - file: "" - - -database.PostgresConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -host (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -The host name of the database server - -**Default Value**: - -.. code-block:: yaml - - postgres - - -port (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -The port name of the database server - -**Default Value**: - -.. code-block:: yaml - - "5432" - - -dbname (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -The database name - -**Default Value**: - -.. code-block:: yaml - - postgres - - -username (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -The database user who is connecting to the server. - -**Default Value**: - -.. code-block:: yaml - - postgres - - -password (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -The database password. - -**Default Value**: - -.. code-block:: yaml - - "" - - -passwordPath (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Points to the file containing the database password. - -**Default Value**: - -.. code-block:: yaml - - "" - - -options (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -See http://gorm.io/docs/connecting_to_the_database.html for available options passed, in addition to the above. - -**Default Value**: - -.. code-block:: yaml - - sslmode=disable - - -debug (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Whether or not to start the database connection with debug mode enabled. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -database.SQLiteConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -file (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -The path to the file (existing or new) where the DB should be created / stored. If existing, then this will be re-used, else a new will be created - -**Default Value**: - -.. code-block:: yaml - - "" - - -Section: domains -======================================================================================================================== - -id (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - development - - -name (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - development - - -Section: externalevents -======================================================================================================================== - -enable (bool) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "false" - - -type (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - local - - -aws (`interfaces.AWSConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - region: "" - - -gcp (`interfaces.GCPConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - projectId: "" - - -eventsPublisher (`interfaces.EventsPublisherConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - eventTypes: null - topicName: "" - - -reconnectAttempts (int) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "0" - - -reconnectDelaySeconds (int) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "0" - - -Section: flyteadmin -======================================================================================================================== - -roleNameKey (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "" - - -metricsScope (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - 'flyte:' - - -metricsKeys ([]string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - - project - - domain - - wf - - task - - phase - - tasktype - - runtime_type - - runtime_version - - app_name - - -profilerPort (int) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "10254" - - -metadataStoragePrefix ([]string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - - metadata - - admin - - -eventVersion (int) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "2" - - -asyncEventsBufferSize (int) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "100" - - -maxParallelism (int32) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "25" - - -labels (map[string]string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - null - - -annotations (map[string]string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - null - - -interruptible (bool) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "false" - - -overwriteCache (bool) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "false" - - -assumableIamRole (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "" - - -k8sServiceAccount (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "" - - -outputLocationPrefix (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "" - - -useOffloadedWorkflowClosure (bool) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "false" - - -envs (map[string]string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - null - - -Section: logger -======================================================================================================================== - -show-source (bool) ------------------------------------------------------------------------------------------------------------------------- - -Includes source code location in logs. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -mute (bool) ------------------------------------------------------------------------------------------------------------------------- - -Mutes all logs regardless of severity. Intended for benchmarks/tests only. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -level (int) ------------------------------------------------------------------------------------------------------------------------- - -Sets the minimum logging level. - -**Default Value**: - -.. code-block:: yaml - - "3" - - -formatter (`logger.FormatterConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -Sets logging format. - -**Default Value**: - -.. code-block:: yaml - - type: json - - -logger.FormatterConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -type (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Sets logging format type. - -**Default Value**: - -.. code-block:: yaml - - json - - -Section: namespace_mapping -======================================================================================================================== - -mapping (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "" - - -template (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - '{{ project }}-{{ domain }}' - - -templateData (map[string]interfaces.DataSource) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - null - - -Section: notifications -======================================================================================================================== - -type (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - local - - -region (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "" - - -aws (`interfaces.AWSConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - region: "" - - -gcp (`interfaces.GCPConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - projectId: "" - - -publisher (`interfaces.NotificationsPublisherConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - topicName: "" - - -processor (`interfaces.NotificationsProcessorConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - accountId: "" - queueName: "" - - -emailer (`interfaces.NotificationsEmailerConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - body: "" - emailServerConfig: - apiKeyEnvVar: "" - apiKeyFilePath: "" - serviceName: "" - sender: "" - subject: "" - - -reconnectAttempts (int) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "0" - - -reconnectDelaySeconds (int) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "0" - - -interfaces.NotificationsEmailerConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -emailServerConfig (`interfaces.EmailServerConfig`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - apiKeyEnvVar: "" - apiKeyFilePath: "" - serviceName: "" - - -subject (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -sender (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -body (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -interfaces.EmailServerConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -serviceName (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -apiKeyEnvVar (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -apiKeyFilePath (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -interfaces.NotificationsProcessorConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -queueName (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -accountId (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -interfaces.NotificationsPublisherConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -topicName (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -Section: otel -======================================================================================================================== - -type (string) ------------------------------------------------------------------------------------------------------------------------- - -Sets the type of exporter to configure [noop/file/jaeger]. - -**Default Value**: - -.. code-block:: yaml - - noop - - -file (`otelutils.FileConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -Configuration for exporting telemetry traces to a file - -**Default Value**: - -.. code-block:: yaml - - filename: /tmp/trace.txt - - -jaeger (`otelutils.JaegerConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -Configuration for exporting telemetry traces to a jaeger - -**Default Value**: - -.. code-block:: yaml - - endpoint: http://localhost:14268/api/traces - - -otelutils.FileConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -filename (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Filename to store exported telemetry traces - -**Default Value**: - -.. code-block:: yaml - - /tmp/trace.txt - - -otelutils.JaegerConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -endpoint (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Endpoint for the jaeger telemtry trace ingestor - -**Default Value**: - -.. code-block:: yaml - - http://localhost:14268/api/traces - - -Section: plugins -======================================================================================================================== - -catalogcache (`catalog.Config`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - reader: - maxItems: 10000 - maxRetries: 3 - workers: 10 - writer: - maxItems: 10000 - maxRetries: 3 - workers: 10 - - -k8s (`config.K8sPluginConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - co-pilot: - cpu: 500m - default-input-path: /var/flyte/inputs - default-output-path: /var/flyte/outputs - image: cr.flyte.org/flyteorg/flytecopilot:v0.0.15 - input-vol-name: flyte-inputs - memory: 128Mi - name: flyte-copilot- - output-vol-name: flyte-outputs - start-timeout: 1m40s - storage: "" - create-container-error-grace-period: 3m0s - default-annotations: - cluster-autoscaler.kubernetes.io/safe-to-evict: "false" - default-cpus: "1" - default-env-vars: null - default-env-vars-from-env: null - default-labels: null - default-memory: 1Gi - default-node-selector: null - default-pod-dns-config: null - default-pod-security-context: null - default-pod-template-name: "" - default-pod-template-resync: 30s - default-security-context: null - default-tolerations: null - delete-resource-on-finalize: false - enable-host-networking-pod: null - gpu-device-node-label: k8s.amazonaws.com/accelerator - gpu-partition-size-node-label: k8s.amazonaws.com/gpu-partition-size - gpu-resource-name: nvidia.com/gpu - gpu-unpartitioned-node-selector-requirement: null - gpu-unpartitioned-toleration: null - image-pull-backoff-grace-period: 3m0s - inject-finalizer: false - interruptible-node-selector: null - interruptible-node-selector-requirement: null - interruptible-tolerations: null - non-interruptible-node-selector-requirement: null - resource-tolerations: null - scheduler-name: "" - send-object-events: false - - -catalog.Config -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -reader (`workqueue.Config`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Catalog reader workqueue config. Make sure the index cache must be big enough to accommodate the biggest array task allowed to run on the system. - -**Default Value**: - -.. code-block:: yaml - - maxItems: 10000 - maxRetries: 3 - workers: 10 - - -writer (`workqueue.Config`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Catalog writer workqueue config. Make sure the index cache must be big enough to accommodate the biggest array task allowed to run on the system. - -**Default Value**: - -.. code-block:: yaml - - maxItems: 10000 - maxRetries: 3 - workers: 10 - - -workqueue.Config -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -workers (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Number of concurrent workers to start processing the queue. - -**Default Value**: - -.. code-block:: yaml - - "10" - - -maxRetries (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Maximum number of retries per item. - -**Default Value**: - -.. code-block:: yaml - - "3" - - -maxItems (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Maximum number of entries to keep in the index. - -**Default Value**: - -.. code-block:: yaml - - "10000" - - -config.K8sPluginConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -inject-finalizer (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Instructs the plugin to inject a finalizer on startTask and remove it on task termination. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -default-annotations (map[string]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - cluster-autoscaler.kubernetes.io/safe-to-evict: "false" - - -default-labels (map[string]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -default-env-vars (map[string]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -default-env-vars-from-env (map[string]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -default-cpus (`resource.Quantity`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Defines a default value for cpu for containers if not specified. - -**Default Value**: - -.. code-block:: yaml - - "1" - - -default-memory (`resource.Quantity`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Defines a default value for memory for containers if not specified. - -**Default Value**: - -.. code-block:: yaml - - 1Gi - - -default-tolerations ([]v1.Toleration) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -default-node-selector (map[string]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -default-affinity (v1.Affinity) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -scheduler-name (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Defines scheduler name. - -**Default Value**: - -.. code-block:: yaml - - "" - - -interruptible-tolerations ([]v1.Toleration) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -interruptible-node-selector (map[string]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -interruptible-node-selector-requirement (v1.NodeSelectorRequirement) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -non-interruptible-node-selector-requirement (v1.NodeSelectorRequirement) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -resource-tolerations (map[v1.ResourceName][]v1.Toleration) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -co-pilot (`config.FlyteCoPilotConfig`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Co-Pilot Configuration - -**Default Value**: - -.. code-block:: yaml - - cpu: 500m - default-input-path: /var/flyte/inputs - default-output-path: /var/flyte/outputs - image: cr.flyte.org/flyteorg/flytecopilot:v0.0.15 - input-vol-name: flyte-inputs - memory: 128Mi - name: flyte-copilot- - output-vol-name: flyte-outputs - start-timeout: 1m40s - storage: "" - - -delete-resource-on-finalize (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Instructs the system to delete the resource upon successful execution of a k8s pod rather than have the k8s garbage collector clean it up. This ensures that no resources are kept around (potentially consuming cluster resources). This, however, will cause k8s log links to expire as soon as the resource is finalized. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -create-container-error-grace-period (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - 3m0s - - -image-pull-backoff-grace-period (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - 3m0s - - -gpu-device-node-label (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - k8s.amazonaws.com/accelerator - - -gpu-partition-size-node-label (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - k8s.amazonaws.com/gpu-partition-size - - -gpu-unpartitioned-node-selector-requirement (v1.NodeSelectorRequirement) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -gpu-unpartitioned-toleration (v1.Toleration) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -gpu-resource-name (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - nvidia.com/gpu - - -default-pod-security-context (v1.PodSecurityContext) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -default-security-context (v1.SecurityContext) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -enable-host-networking-pod (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - - - -default-pod-dns-config (v1.PodDNSConfig) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -default-pod-template-name (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Name of the PodTemplate to use as the base for all k8s pods created by FlytePropeller. - -**Default Value**: - -.. code-block:: yaml - - "" - - -default-pod-template-resync (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Frequency of resyncing default pod templates - -**Default Value**: - -.. code-block:: yaml - - 30s - - -send-object-events (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -If true, will send k8s object events in TaskExecutionEvent updates. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -config.FlyteCoPilotConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -name (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Flyte co-pilot sidecar container name prefix. (additional bits will be added after this) - -**Default Value**: - -.. code-block:: yaml - - flyte-copilot- - - -image (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Flyte co-pilot Docker Image FQN - -**Default Value**: - -.. code-block:: yaml - - cr.flyte.org/flyteorg/flytecopilot:v0.0.15 - - -default-input-path (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Default path where the volume should be mounted - -**Default Value**: - -.. code-block:: yaml - - /var/flyte/inputs - - -default-output-path (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Default path where the volume should be mounted - -**Default Value**: - -.. code-block:: yaml - - /var/flyte/outputs - - -input-vol-name (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Name of the data volume that is created for storing inputs - -**Default Value**: - -.. code-block:: yaml - - flyte-inputs - - -output-vol-name (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Name of the data volume that is created for storing outputs - -**Default Value**: - -.. code-block:: yaml - - flyte-outputs - - -start-timeout (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - 1m40s - - -cpu (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Used to set cpu for co-pilot containers - -**Default Value**: - -.. code-block:: yaml - - 500m - - -memory (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Used to set memory for co-pilot containers - -**Default Value**: - -.. code-block:: yaml - - 128Mi - - -storage (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Default storage limit for individual inputs / outputs - -**Default Value**: - -.. code-block:: yaml - - "" - - -resource.Quantity -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -i (`resource.int64Amount`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - {} - - -d (`resource.infDecAmount`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - - - -s (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "1" - - -Format (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - DecimalSI - - -resource.infDecAmount -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Dec (inf.Dec) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -resource.int64Amount -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -value (int64) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "1" - - -scale (int32) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "0" - - -Section: propeller -======================================================================================================================== - -kube-config (string) ------------------------------------------------------------------------------------------------------------------------- - -Path to kubernetes client config file. - -**Default Value**: - -.. code-block:: yaml - - "" - - -master (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "" - - -workers (int) ------------------------------------------------------------------------------------------------------------------------- - -Number of threads to process workflows - -**Default Value**: - -.. code-block:: yaml - - "20" - - -workflow-reeval-duration (`config.Duration`_) ------------------------------------------------------------------------------------------------------------------------- - -Frequency of re-evaluating workflows - -**Default Value**: - -.. code-block:: yaml - - 10s - - -downstream-eval-duration (`config.Duration`_) ------------------------------------------------------------------------------------------------------------------------- - -Frequency of re-evaluating downstream tasks - -**Default Value**: - -.. code-block:: yaml - - 30s - - -limit-namespace (string) ------------------------------------------------------------------------------------------------------------------------- - -Namespaces to watch for this propeller - -**Default Value**: - -.. code-block:: yaml - - all - - -prof-port (`config.Port`_) ------------------------------------------------------------------------------------------------------------------------- - -Profiler port - -**Default Value**: - -.. code-block:: yaml - - 10254 - - -metadata-prefix (string) ------------------------------------------------------------------------------------------------------------------------- - -MetadataPrefix should be used if all the metadata for Flyte executions should be stored under a specific prefix in CloudStorage. If not specified, the data will be stored in the base container directly. - -**Default Value**: - -.. code-block:: yaml - - metadata/propeller - - -rawoutput-prefix (string) ------------------------------------------------------------------------------------------------------------------------- - -a fully qualified storage path of the form s3://flyte/abc/..., where all data sandboxes should be stored. - -**Default Value**: - -.. code-block:: yaml - - "" - - -queue (`config.CompositeQueueConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -Workflow workqueue configuration, affects the way the work is consumed from the queue. - -**Default Value**: - -.. code-block:: yaml - - batch-size: -1 - batching-interval: 1s - queue: - base-delay: 0s - capacity: 10000 - max-delay: 1m0s - rate: 1000 - type: maxof - sub-queue: - base-delay: 0s - capacity: 10000 - max-delay: 0s - rate: 1000 - type: bucket - type: batch - - -metrics-prefix (string) ------------------------------------------------------------------------------------------------------------------------- - -An optional prefix for all published metrics. - -**Default Value**: - -.. code-block:: yaml - - flyte - - -metrics-keys ([]string) ------------------------------------------------------------------------------------------------------------------------- - -Metrics labels applied to prometheus metrics emitted by the service. - -**Default Value**: - -.. code-block:: yaml - - - project - - domain - - wf - - task - - -enable-admin-launcher (bool) ------------------------------------------------------------------------------------------------------------------------- - -Enable remote Workflow launcher to Admin - -**Default Value**: - -.. code-block:: yaml - - "true" - - -max-workflow-retries (int) ------------------------------------------------------------------------------------------------------------------------- - -Maximum number of retries per workflow - -**Default Value**: - -.. code-block:: yaml - - "10" - - -max-ttl-hours (int) ------------------------------------------------------------------------------------------------------------------------- - -Maximum number of hours a completed workflow should be retained. Number between 1-23 hours - -**Default Value**: - -.. code-block:: yaml - - "23" - - -gc-interval (`config.Duration`_) ------------------------------------------------------------------------------------------------------------------------- - -Run periodic GC every 30 minutes - -**Default Value**: - -.. code-block:: yaml - - 30m0s - - -leader-election (`config.LeaderElectionConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -Config for leader election. - -**Default Value**: - -.. code-block:: yaml - - enabled: false - lease-duration: 15s - lock-config-map: - Name: "" - Namespace: "" - renew-deadline: 10s - retry-period: 2s - - -publish-k8s-events (bool) ------------------------------------------------------------------------------------------------------------------------- - -Enable events publishing to K8s events API. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -max-output-size-bytes (int64) ------------------------------------------------------------------------------------------------------------------------- - -Maximum size of outputs per task - -**Default Value**: - -.. code-block:: yaml - - "10485760" - - -enable-grpc-latency-metrics (bool) ------------------------------------------------------------------------------------------------------------------------- - -Enable grpc latency metrics. Note Histograms metrics can be expensive on Prometheus servers. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -kube-client-config (`config.KubeClientConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -Configuration to control the Kubernetes client - -**Default Value**: - -.. code-block:: yaml - - burst: 25 - qps: 100 - timeout: 30s - - -node-config (`config.NodeConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -config for a workflow node - -**Default Value**: - -.. code-block:: yaml - - default-deadlines: - node-active-deadline: 0s - node-execution-deadline: 0s - workflow-active-deadline: 0s - default-max-attempts: 1 - ignore-retry-cause: false - interruptible-failure-threshold: -1 - max-node-retries-system-failures: 3 - - -max-streak-length (int) ------------------------------------------------------------------------------------------------------------------------- - -Maximum number of consecutive rounds that one propeller worker can use for one workflow - >1 => turbo-mode is enabled. - -**Default Value**: - -.. code-block:: yaml - - "8" - - -event-config (`config.EventConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -Configures execution event behavior. - -**Default Value**: - -.. code-block:: yaml - - fallback-to-output-reference: false - raw-output-policy: reference - - -include-shard-key-label ([]string) ------------------------------------------------------------------------------------------------------------------------- - -Include the specified shard key label in the k8s FlyteWorkflow CRD label selector - -**Default Value**: - -.. code-block:: yaml - - [] - - -exclude-shard-key-label ([]string) ------------------------------------------------------------------------------------------------------------------------- - -Exclude the specified shard key label from the k8s FlyteWorkflow CRD label selector - -**Default Value**: - -.. code-block:: yaml - - [] - - -include-project-label ([]string) ------------------------------------------------------------------------------------------------------------------------- - -Include the specified project label in the k8s FlyteWorkflow CRD label selector - -**Default Value**: - -.. code-block:: yaml - - [] - - -exclude-project-label ([]string) ------------------------------------------------------------------------------------------------------------------------- - -Exclude the specified project label from the k8s FlyteWorkflow CRD label selector - -**Default Value**: - -.. code-block:: yaml - - [] - - -include-domain-label ([]string) ------------------------------------------------------------------------------------------------------------------------- - -Include the specified domain label in the k8s FlyteWorkflow CRD label selector - -**Default Value**: - -.. code-block:: yaml - - [] - - -exclude-domain-label ([]string) ------------------------------------------------------------------------------------------------------------------------- - -Exclude the specified domain label from the k8s FlyteWorkflow CRD label selector - -**Default Value**: - -.. code-block:: yaml - - [] - - -cluster-id (string) ------------------------------------------------------------------------------------------------------------------------- - -Unique cluster id running this flytepropeller instance with which to annotate execution events - -**Default Value**: - -.. code-block:: yaml - - propeller - - -create-flyteworkflow-crd (bool) ------------------------------------------------------------------------------------------------------------------------- - -Enable creation of the FlyteWorkflow CRD on startup - -**Default Value**: - -.. code-block:: yaml - - "false" - - -array-node-event-version (int) ------------------------------------------------------------------------------------------------------------------------- - -ArrayNode eventing version. 0 => legacy (drop-in replacement for maptask), 1 => new - -**Default Value**: - -.. code-block:: yaml - - "0" - - -config.CompositeQueueConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -type (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Type of composite queue to use for the WorkQueue - -**Default Value**: - -.. code-block:: yaml - - batch - - -queue (`config.WorkqueueConfig`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Workflow workqueue configuration, affects the way the work is consumed from the queue. - -**Default Value**: - -.. code-block:: yaml - - base-delay: 0s - capacity: 10000 - max-delay: 1m0s - rate: 1000 - type: maxof - - -sub-queue (`config.WorkqueueConfig`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -SubQueue configuration, affects the way the nodes cause the top-level Work to be re-evaluated. - -**Default Value**: - -.. code-block:: yaml - - base-delay: 0s - capacity: 10000 - max-delay: 0s - rate: 1000 - type: bucket - - -batching-interval (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Duration for which downstream updates are buffered - -**Default Value**: - -.. code-block:: yaml - - 1s - - -batch-size (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "-1" - - -config.WorkqueueConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -type (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Type of RateLimiter to use for the WorkQueue - -**Default Value**: - -.. code-block:: yaml - - maxof - - -base-delay (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -base backoff delay for failure - -**Default Value**: - -.. code-block:: yaml - - 0s - - -max-delay (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Max backoff delay for failure - -**Default Value**: - -.. code-block:: yaml - - 1m0s - - -rate (int64) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Bucket Refill rate per second - -**Default Value**: - -.. code-block:: yaml - - "1000" - - -capacity (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Bucket capacity as number of items - -**Default Value**: - -.. code-block:: yaml - - "10000" - - -config.EventConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -raw-output-policy (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -How output data should be passed along in execution events. - -**Default Value**: - -.. code-block:: yaml - - reference - - -fallback-to-output-reference (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Whether output data should be sent by reference when it is too large to be sent inline in execution events. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -config.KubeClientConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -qps (float32) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "100" - - -burst (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Max burst rate for throttle. 0 defaults to 10 - -**Default Value**: - -.. code-block:: yaml - - "25" - - -timeout (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Max duration allowed for every request to KubeAPI before giving up. 0 implies no timeout. - -**Default Value**: - -.. code-block:: yaml - - 30s - - -config.LeaderElectionConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -enabled (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Enables/Disables leader election. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -lock-config-map (`types.NamespacedName`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -ConfigMap namespace/name to use for resource lock. - -**Default Value**: - -.. code-block:: yaml - - Name: "" - Namespace: "" - - -lease-duration (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Duration that non-leader candidates will wait to force acquire leadership. This is measured against time of last observed ack. - -**Default Value**: - -.. code-block:: yaml - - 15s - - -renew-deadline (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Duration that the acting master will retry refreshing leadership before giving up. - -**Default Value**: - -.. code-block:: yaml - - 10s - - -retry-period (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Duration the LeaderElector clients should wait between tries of actions. - -**Default Value**: - -.. code-block:: yaml - - 2s - - -types.NamespacedName -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Namespace (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -Name (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -config.NodeConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -default-deadlines (`config.DefaultDeadlines`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Default value for timeouts - -**Default Value**: - -.. code-block:: yaml - - node-active-deadline: 0s - node-execution-deadline: 0s - workflow-active-deadline: 0s - - -max-node-retries-system-failures (int64) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Maximum number of retries per node for node failure due to infra issues - -**Default Value**: - -.. code-block:: yaml - - "3" - - -interruptible-failure-threshold (int32) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -number of failures for a node to be still considered interruptible. Negative numbers are treated as complementary (ex. -1 means last attempt is non-interruptible).' - -**Default Value**: - -.. code-block:: yaml - - "-1" - - -default-max-attempts (int32) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Default maximum number of attempts for a node - -**Default Value**: - -.. code-block:: yaml - - "1" - - -ignore-retry-cause (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Ignore retry cause and count all attempts toward a node's max attempts - -**Default Value**: - -.. code-block:: yaml - - "false" - - -config.DefaultDeadlines -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -node-execution-deadline (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Default value of node execution timeout that includes the time spent to run the node/workflow - -**Default Value**: - -.. code-block:: yaml - - 0s - - -node-active-deadline (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Default value of node timeout that includes the time spent queued. - -**Default Value**: - -.. code-block:: yaml - - 0s - - -workflow-active-deadline (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Default value of workflow timeout that includes the time spent queued. - -**Default Value**: - -.. code-block:: yaml - - 0s - - -config.Port -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -port (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "10254" - - -Section: qualityofservice -======================================================================================================================== - -tierExecutionValues (map[string]interfaces.QualityOfServiceSpec) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - {} - - -defaultTiers (map[string]string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - {} - - -Section: queues -======================================================================================================================== - -executionQueues (interfaces.ExecutionQueues) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - [] - - -workflowConfigs (interfaces.WorkflowConfigs) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - [] - - -Section: registration -======================================================================================================================== - -maxWorkflowNodes (int) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "100" - - -maxLabelEntries (int) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "0" - - -maxAnnotationEntries (int) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "0" - - -workflowSizeLimit (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "" - - -Section: remotedata -======================================================================================================================== - -scheme (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - none - - -region (string) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "" - - -signedUrls (`interfaces.SignedURL`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - durationMinutes: 0 - enabled: false - signingPrincipal: "" - - -maxSizeInBytes (int64) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "2097152" - - -inlineEventDataPolicy (int) ------------------------------------------------------------------------------------------------------------------------- - -Specifies how inline execution event data should be saved in the backend - -**Default Value**: - -.. code-block:: yaml - - Offload - - -interfaces.SignedURL -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -enabled (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Whether signed urls should even be returned with GetExecutionData, GetNodeExecutionData and GetTaskExecutionData response objects. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -durationMinutes (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "0" - - -signingPrincipal (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -Section: scheduler -======================================================================================================================== - -profilerPort (`config.Port`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - 10254 - - -eventScheduler (`interfaces.EventSchedulerConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - aws: null - local: {} - region: "" - scheduleNamePrefix: "" - scheduleRole: "" - scheme: local - targetName: "" - - -workflowExecutor (`interfaces.WorkflowExecutorConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - accountId: "" - aws: null - local: - adminRateLimit: - burst: 10 - tps: 100 - useUTCTz: false - region: "" - scheduleQueueName: "" - scheme: local - - -reconnectAttempts (int) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "0" - - -reconnectDelaySeconds (int) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - "0" - - -interfaces.EventSchedulerConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -scheme (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - local - - -region (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -scheduleRole (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -targetName (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -scheduleNamePrefix (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -aws (interfaces.AWSSchedulerConfig) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -local (`interfaces.FlyteSchedulerConfig`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - {} - - -interfaces.FlyteSchedulerConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -interfaces.WorkflowExecutorConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -scheme (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - local - - -region (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -scheduleQueueName (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -accountId (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -aws (interfaces.AWSWorkflowExecutorConfig) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -local (`interfaces.FlyteWorkflowExecutorConfig`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - adminRateLimit: - burst: 10 - tps: 100 - useUTCTz: false - - -interfaces.FlyteWorkflowExecutorConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -adminRateLimit (`interfaces.AdminRateLimit`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - burst: 10 - tps: 100 - - -useUTCTz (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "false" - - -interfaces.AdminRateLimit -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -tps (float64) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "100" - - -burst (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "10" - - -Section: secrets -======================================================================================================================== - -secrets-prefix (string) ------------------------------------------------------------------------------------------------------------------------- - -Prefix where to look for secrets file - -**Default Value**: - -.. code-block:: yaml - - /etc/secrets - - -env-prefix (string) ------------------------------------------------------------------------------------------------------------------------- - -Prefix for environment variables - -**Default Value**: - -.. code-block:: yaml - - FLYTE_SECRET_ - - -Section: server -======================================================================================================================== - -httpPort (int) ------------------------------------------------------------------------------------------------------------------------- - -On which http port to serve admin - -**Default Value**: - -.. code-block:: yaml - - "8088" - - -grpcPort (int) ------------------------------------------------------------------------------------------------------------------------- - -deprecated - -**Default Value**: - -.. code-block:: yaml - - "0" - - -grpcServerReflection (bool) ------------------------------------------------------------------------------------------------------------------------- - -deprecated - -**Default Value**: - -.. code-block:: yaml - - "false" - - -kube-config (string) ------------------------------------------------------------------------------------------------------------------------- - -Path to kubernetes client config file, default is empty, useful for incluster config. - -**Default Value**: - -.. code-block:: yaml - - "" - - -master (string) ------------------------------------------------------------------------------------------------------------------------- - -The address of the Kubernetes API server. - -**Default Value**: - -.. code-block:: yaml - - "" - - -security (`config.ServerSecurityOptions`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - allowCors: true - allowedHeaders: - - Content-Type - - flyte-authorization - allowedOrigins: - - '*' - auditAccess: false - secure: false - ssl: - certificateFile: "" - keyFile: "" - useAuth: false - - -grpc (`config.GrpcConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - enableGrpcLatencyMetrics: false - maxMessageSizeBytes: 0 - port: 8089 - serverReflection: true - - -thirdPartyConfig (`config.ThirdPartyConfigOptions`_) ------------------------------------------------------------------------------------------------------------------------- - -Deprecated please use auth.appAuth.thirdPartyConfig instead. - -**Default Value**: - -.. code-block:: yaml - - flyteClient: - audience: "" - clientId: "" - redirectUri: "" - scopes: [] - - -dataProxy (`config.DataProxyConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -Defines data proxy configuration. - -**Default Value**: - -.. code-block:: yaml - - download: - maxExpiresIn: 1h0m0s - upload: - defaultFileNameLength: 20 - maxExpiresIn: 1h0m0s - maxSize: 6Mi - storagePrefix: "" - - -readHeaderTimeoutSeconds (int) ------------------------------------------------------------------------------------------------------------------------- - -The amount of time allowed to read request headers. - -**Default Value**: - -.. code-block:: yaml - - "32" - - -kubeClientConfig (`config.KubeClientConfig (kubeClientConfig)`_) ------------------------------------------------------------------------------------------------------------------------- - -Configuration to control the Kubernetes client - -**Default Value**: - -.. code-block:: yaml - - burst: 25 - qps: 100 - timeout: 30s - - -config.DataProxyConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -upload (`config.DataProxyUploadConfig`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Defines data proxy upload configuration. - -**Default Value**: - -.. code-block:: yaml - - defaultFileNameLength: 20 - maxExpiresIn: 1h0m0s - maxSize: 6Mi - storagePrefix: "" - - -download (`config.DataProxyDownloadConfig`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Defines data proxy download configuration. - -**Default Value**: - -.. code-block:: yaml - - maxExpiresIn: 1h0m0s - - -config.DataProxyDownloadConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -maxExpiresIn (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Maximum allowed expiration duration. - -**Default Value**: - -.. code-block:: yaml - - 1h0m0s - - -config.DataProxyUploadConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -maxSize (`resource.Quantity`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Maximum allowed upload size. - -**Default Value**: - -.. code-block:: yaml - - 6Mi - - -maxExpiresIn (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Maximum allowed expiration duration. - -**Default Value**: - -.. code-block:: yaml - - 1h0m0s - - -defaultFileNameLength (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Default length for the generated file name if not provided in the request. - -**Default Value**: - -.. code-block:: yaml - - "20" - - -storagePrefix (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Storage prefix to use for all upload requests. - -**Default Value**: - -.. code-block:: yaml - - "" - - -config.GrpcConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -port (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -On which grpc port to serve admin - -**Default Value**: - -.. code-block:: yaml - - "8089" - - -serverReflection (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Enable GRPC Server Reflection - -**Default Value**: - -.. code-block:: yaml - - "true" - - -maxMessageSizeBytes (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -The max size in bytes for incoming gRPC messages - -**Default Value**: - -.. code-block:: yaml - - "0" - - -enableGrpcLatencyMetrics (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Enable grpc latency metrics. Note Histograms metrics can be expensive on Prometheus servers. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -config.KubeClientConfig (kubeClientConfig) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -qps (int32) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Max QPS to the master for requests to KubeAPI. 0 defaults to 5. - -**Default Value**: - -.. code-block:: yaml - - "100" - - -burst (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Max burst rate for throttle. 0 defaults to 10 - -**Default Value**: - -.. code-block:: yaml - - "25" - - -timeout (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Max duration allowed for every request to KubeAPI before giving up. 0 implies no timeout. - -**Default Value**: - -.. code-block:: yaml - - 30s - - -config.ServerSecurityOptions -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -secure (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "false" - - -ssl (`config.SslOptions`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - certificateFile: "" - keyFile: "" - - -useAuth (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "false" - - -auditAccess (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "false" - - -allowCors (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "true" - - -allowedOrigins ([]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - - '*' - - -allowedHeaders ([]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - - Content-Type - - flyte-authorization - - -config.SslOptions -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -certificateFile (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -keyFile (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "" - - -Section: storage -======================================================================================================================== - -type (string) ------------------------------------------------------------------------------------------------------------------------- - -Sets the type of storage to configure [s3/minio/local/mem/stow]. - -**Default Value**: - -.. code-block:: yaml - - s3 - - -connection (`storage.ConnectionConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - access-key: "" - auth-type: iam - disable-ssl: false - endpoint: "" - region: us-east-1 - secret-key: "" - - -stow (`storage.StowConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -Storage config for stow backend. - -**Default Value**: - -.. code-block:: yaml - - {} - - -container (string) ------------------------------------------------------------------------------------------------------------------------- - -Initial container (in s3 a bucket) to create -if it doesn't exist-.' - -**Default Value**: - -.. code-block:: yaml - - "" - - -enable-multicontainer (bool) ------------------------------------------------------------------------------------------------------------------------- - -If this is true, then the container argument is overlooked and redundant. This config will automatically open new connections to new containers/buckets as they are encountered - -**Default Value**: - -.. code-block:: yaml - - "false" - - -cache (`storage.CachingConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - max_size_mbs: 0 - target_gc_percent: 0 - - -limits (`storage.LimitsConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -Sets limits for stores. - -**Default Value**: - -.. code-block:: yaml - - maxDownloadMBs: 2 - - -defaultHttpClient (`storage.HTTPClientConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -Sets the default http client config. - -**Default Value**: - -.. code-block:: yaml - - headers: null - timeout: 0s - - -signedUrl (`storage.SignedURLConfig`_) ------------------------------------------------------------------------------------------------------------------------- - -Sets config for SignedURL. - -**Default Value**: - -.. code-block:: yaml - - {} - - -storage.CachingConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -max_size_mbs (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Maximum size of the cache where the Blob store data is cached in-memory. If not specified or set to 0, cache is not used - -**Default Value**: - -.. code-block:: yaml - - "0" - - -target_gc_percent (int) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Sets the garbage collection target percentage. - -**Default Value**: - -.. code-block:: yaml - - "0" - - -storage.ConnectionConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -endpoint (`config.URL`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -URL for storage client to connect to. - -**Default Value**: - -.. code-block:: yaml - - "" - - -auth-type (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Auth Type to use [iam,accesskey]. - -**Default Value**: - -.. code-block:: yaml - - iam - - -access-key (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Access key to use. Only required when authtype is set to accesskey. - -**Default Value**: - -.. code-block:: yaml - - "" - - -secret-key (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Secret to use when accesskey is set. - -**Default Value**: - -.. code-block:: yaml - - "" - - -region (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Region to connect to. - -**Default Value**: - -.. code-block:: yaml - - us-east-1 - - -disable-ssl (bool) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Disables SSL connection. Should only be used for development. - -**Default Value**: - -.. code-block:: yaml - - "false" - - -storage.HTTPClientConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -headers (map[string][]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -timeout (`config.Duration`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Sets time out on the http client. - -**Default Value**: - -.. code-block:: yaml - - 0s - - -storage.LimitsConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -maxDownloadMBs (int64) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Maximum allowed download size (in MBs) per call. - -**Default Value**: - -.. code-block:: yaml - - "2" - - -storage.SignedURLConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -stowConfigOverride (map[string]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - null - - -storage.StowConfig -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -kind (string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Kind of Stow backend to use. Refer to github/flyteorg/stow - -**Default Value**: - -.. code-block:: yaml - - "" - - -config (map[string]string) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -Configuration for stow backend. Refer to github/flyteorg/stow - -**Default Value**: - -.. code-block:: yaml - - {} - - -Section: task_resources -======================================================================================================================== - -defaults (`interfaces.TaskResourceSet`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - cpu: "2" - ephemeralStorage: "0" - gpu: "0" - memory: 200Mi - storage: "0" - - -limits (`interfaces.TaskResourceSet`_) ------------------------------------------------------------------------------------------------------------------------- - -**Default Value**: - -.. code-block:: yaml - - cpu: "2" - ephemeralStorage: "0" - gpu: "1" - memory: 1Gi - storage: "0" - - -interfaces.TaskResourceSet -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -cpu (`resource.Quantity`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "2" - - -gpu (`resource.Quantity`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "0" - - -memory (`resource.Quantity`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - 200Mi - - -storage (`resource.Quantity`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "0" - - -ephemeralStorage (`resource.Quantity`_) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -**Default Value**: - -.. code-block:: yaml - - "0" - - diff --git a/rsts/deployment/configuration/index.rst b/rsts/deployment/configuration/index.rst deleted file mode 100644 index 81b3f9df5f..0000000000 --- a/rsts/deployment/configuration/index.rst +++ /dev/null @@ -1,130 +0,0 @@ -.. _deployment-configuration: - -###################### -Configuration -###################### - -This section will cover how to configure your Flyte cluster for features like -authentication, monitoring, and notifications. - -.. important:: - - The configuration instructions in this section are for the ``flyte`` and ``flyte-core`` Helm charts, which is for - the :ref:`multi-cluster setup `. - - If you're using the ``flyte-binary`` chart for the :ref:`single cluster setup `, - instead of specifying configuration under a yaml file like ``cloud_events.yaml`` in :ref:`deployment-configuration-cloud-event`, - you'll need to add the configuration settings under the ``inline`` section in the `eks-production.yaml` file: - - .. literalinclude:: ../../../charts/flyte-binary/eks-production.yaml - :language: yaml - :lines: 30-41 - :caption: charts/flyte-binary/eks-production.yaml - - -.. panels:: - :header: text-center - :column: col-lg-12 p-2 - - .. link-button:: deployment-configuration-auth-setup - :type: ref - :text: Authenticating in Flyte - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - Basic OIDC and Authentication Setup - - --- - - .. link-button:: deployment-configuration-auth-migration - :type: ref - :text: Migrating Your Authentication Config - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - Migration guide to move to Admin's own authorization server. - - --- - - .. link-button:: deployment-configuration-auth-appendix - :type: ref - :text: Understanding Authentication in Detail - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - Migration guide to move to Admin's own authorization server. - - --- - - .. link-button:: deployment-configuration-general - :type: ref - :text: Configuring Custom K8s Resources - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - Use Flyte's cluster-resource-controller to control specific Kubernetes resources and administer project/domain-specific CPU/GPU/memory resource quotas. - - --- - - .. link-button:: deployment-configuration-customizable-resources - :type: ref - :text: Adding New Customizable Resources - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - Create new default configurations or overriding certain values for specific combinations of user projects, domains and workflows through Flyte APIs. - - --- - - .. link-button:: deployment-configuration-notifications - :type: ref - :text: Notifications - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - Guide to setting up and configuring notifications. - - --- - - .. link-button:: deployment-configuration-cloud-event - :type: ref - :text: External Events - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - How to set up Flyte to emit events to third-parties. - - --- - - .. link-button:: deployment-configuration-monitoring - :type: ref - :text: Monitoring - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - Guide to setting up and configuring observability. - - --- - - .. link-button:: deployment-configuration-performance - :type: ref - :text: Optimizing Performance - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - Improve the performance of the core Flyte engine. - - --- - - .. link-button:: deployment-configuration-eventing - :type: ref - :text: Platform Events - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - Configure Flyte to to send events to external pub/sub systems. - -.. toctree:: - :maxdepth: 1 - :name: Cluster Config - :hidden: - - auth_setup - auth_migration - auth_appendix - general - customizable_resources - monitoring - notifications - performance - cloud_event diff --git a/rsts/deployment/configuration/monitoring.rst b/rsts/deployment/configuration/monitoring.rst deleted file mode 100644 index 75bc89adc4..0000000000 --- a/rsts/deployment/configuration/monitoring.rst +++ /dev/null @@ -1,99 +0,0 @@ -.. _deployment-configuration-monitoring: - -Monitoring ----------- - -.. tags:: Infrastructure, Advanced - -.. tip:: The Flyte core team publishes and maintains Grafana dashboards built using Prometheus data sources, which can be found `here `__. - -Metrics for Executions -====================== - -Flyte-provided Metrics -~~~~~~~~~~~~~~~~~~~~~~ - -Whenever you run a workflow, Flyte platform automatically emits high-level metrics. These metrics follow a consistent schema and aim to provide visibility into aspects of the platform which might otherwise be opaque. -These metrics help users diagnose whether an issue is inherent to the platform or one's own task or workflow implementation. - -We will be adding to this set of metrics as we implement the capabilities to pull more data from the system, so keep checking back for new stats! - -At a high level, workflow execution goes through the following discrete steps: - -.. image:: https://raw.githubusercontent.com/flyteorg/static-resources/main/flyte/deployment/monitoring/flyte_wf_timeline.svg?sanitize=true - -=================================== ================================================================================================================================== - Description of main events for workflow execution ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - Events Description -=================================== ================================================================================================================================== -Acceptance Measures the time consumed from receiving a service call to creating an Execution (Unknown) and moving to QUEUED. -Transition Latency Measures the latency between two consecutive node executions; the time spent in Flyte engine. -Queuing Latency Measures the latency between the node moving to QUEUED and the handler reporting the executable moving to RUNNING state. -Task Execution Actual time spent executing the user code. -Repeat steps 2-4 for every task -Transition Latency See #2 -Completion Latency Measures the time consumed by a workflow moving from SUCCEEDING/FAILING state to TERMINAL state. -=================================== ================================================================================================================================== - - -========================================================== =========== =============================================================================================================================================================== - Flyte Stats Schema ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Prefix Type Description -========================================================== =========== =============================================================================================================================================================== -``propeller.all.workflow.acceptance-latency-ms`` Timer (ms) Measures the time consumed from receiving a service call to creating an Execution (Unknown) and moving to QUEUED. -``propeller.all.node.queueing-latency-ms`` Timer (ms) Measures the latency between the node moving to QUEUED and the handler reporting the executable moving to RUNNING state. -``propeller.all.node.transition-latency-ms`` Timer (ms) Measures the latency between two consecutive node executions; the time spent in Flyte engine. -``propeller.all.workflow.completion-latency-ms`` Timer (ms) Measures the time consumed by a workflow moving from SUCCEEDING/FAILING state to TERMINAL state. -``propeller.all.node.success-duration-ms`` Timer (ms) Actual time spent executing user code (when the node ends with SUCCESS state). -``propeller.all.node.success-duration-ms-count`` Counter The number of times a node success has been reported. -``propeller.all.node.failure-duration-ms`` Timer (ms) Actual time spent executing user code (when the node ends with FAILURE state). -``propeller.all.node.failure-duration-ms-count`` Counter The number of times a node failure has been reported. - -========================================================== =========== =============================================================================================================================================================== - -All the above stats are automatically tagged with the following fields for further scoping. This includes user-produced stats. -Users can also provide additional tags (or override tags) for custom stats. - -.. _task_stats_tags: - -=============== ================================================================================= - Flyte Stats Tags --------------------------------------------------------------------------------------------------- - Tag Description -=============== ================================================================================= -wf Name of the workflow that was executing when this metric was emitted. - ``{{project}}:{{domain}}:{{workflow_name}}`` -=============== ================================================================================= - -User Stats With Flyte -~~~~~~~~~~~~~~~~~~~~~~ - -The workflow parameters object that the SDK injects into various tasks has a ``statsd`` handle that users should call -to emit stats of their workflows not captured by the default metrics. The usual caveats around cardinality apply, of course. - -.. todo: Reference to Flytekit task stats - -Users are encouraged to avoid creating their own stats handlers. -If not done correctly, these can pollute the general namespace and accidentally interfere with the production stats of live services, causing pages and wreaking havoc. -If you're using any libraries that emit stats, it's best to turn them off if possible. - - -Use Published Dashboards to Monitor Flyte Deployment -==================================================== - -Flyte Backend is written in Golang and exposes stats using Prometheus. The stats are labeled with workflow, task, project & domain, wherever appropriate. - -The dashboards are divided into two types: - -- **User-facing dashboards**: Dashboards that can be used to triage/investigate/observe performance and characteristics of workflows and tasks. - The user-facing dashboard is published under Grafana marketplace ID `13980 `__. - -- **System Dashboards**: Dashboards that are useful for the system maintainer to maintain their Flyte deployments. These are further divided into: - - DataPlane/FlytePropeller dashboards published @ `13979 `__ - - ControlPlane/Flyteadmin dashboards published @ `13981 `__ - -The above mentioned are basic dashboards and do no include all the metrics exposed by Flyte. -Please help us improve the dashboards by contributing to them 🙏. -Refer to the build scripts `here `__. \ No newline at end of file diff --git a/rsts/deployment/configuration/notifications.rst b/rsts/deployment/configuration/notifications.rst deleted file mode 100644 index e01dd1a0ca..0000000000 --- a/rsts/deployment/configuration/notifications.rst +++ /dev/null @@ -1,135 +0,0 @@ -.. _deployment-configuration-notifications: - -Notifications -------------- - -.. tags:: Infrastructure, Advanced - -When a workflow completes, users can be notified by email, `Pagerduty `__, -or `Slack `__. - -The content of these notifications is configurable at the platform level. - -***** -Usage -***** - -When a workflow reaches a specified `terminal workflow execution phase `__ -the :py:class:`flytekit:flytekit.Email`, :py:class:`flytekit:flytekit.PagerDuty`, or :py:class:`flytekit:flytekit.Slack` -objects can be used in the construction of a :py:class:`flytekit:flytekit.LaunchPlan`. - -For example - -.. code:: python - - from flytekit import Email, LaunchPlan - from flytekit.models.core.execution import WorkflowExecutionPhase - - # This launch plan triggers email notifications when the workflow execution it triggered reaches the phase `SUCCEEDED`. - my_notifiying_lp = LaunchPlan.create( - "my_notifiying_lp", - my_workflow_definition, - default_inputs={"a": 4}, - notifications=[ - Email( - phases=[WorkflowExecutionPhase.SUCCEEDED], - recipients_email=["admin@example.com"], - ) - ], - ) - - -See detailed usage examples in the :std:doc:`User Guide ` - -Notifications can be combined with schedules to automatically alert you when a scheduled job succeeds or fails. - -Future work -=========== - -Work is ongoing to support a generic event egress system that can be used to publish events for tasks, workflows and -workflow nodes. When this is complete, generic event subscribers can asynchronously process these vents for a rich -and fully customizable experience. - - -****************************** -Platform Configuration Changes -****************************** - -Setting Up Workflow Notifications -================================= - -The ``notifications`` top-level portion of the FlyteAdmin config specifies how to handle notifications. - -As with schedules, the notifications handling is composed of two parts. One handles enqueuing notifications asynchronously and the second part handles processing pending notifications and actually firing off emails and alerts. - -This is only supported for Flyte instances running on AWS. - -Config -======= - -To publish notifications, you'll need to set up an `SNS topic `_. - -In order to process notifications, you'll need to set up an `AWS SQS `_ queue to consume notification events. This queue must be configured as a subscription to your SNS topic you created above. - -In order to actually publish notifications, you'll need a `verified SES email address `_ which will be used to send notification emails and alerts using email APIs. - -The role you use to run FlyteAdmin must have permissions to read and write to your SNS topic and SQS queue. - -Let's look at the following config section and explain what each value represents: - -.. code-block:: yaml - - notifications: - # Because AWS is the only cloud back-end supported for executing scheduled - # workflows in this case, only ``"aws"`` is a valid value. By default, the - #no-op executor is used. - type: "aws" - - # This specifies which region AWS clients will use when creating SNS and SQS clients. - region: "us-east-1" - - # This handles pushing notification events to your SNS topic. - publisher: - - # This is the arn of your SNS topic. - topicName: "arn:aws:sns:us-east-1:{{ YOUR ACCOUNT ID }}:{{ YOUR TOPIC }}" - - # This handles the recording notification events and enqueueing them to be - # processed asynchronously. - processor: - - # This is the name of the SQS queue which will capture pending notification events. - queueName: "{{ YOUR QUEUE NAME }}" - - # Your AWS `account id, see: https://docs.aws.amazon.com/IAM/latest/UserGuide/console_account-alias.html#FindingYourAWSId - accountId: "{{ YOUR ACCOUNT ID }}" - - # This section encloses config details for sending and formatting emails - # used as notifications. - emailer: - - # Configurable subject line used in notification emails. - subject: "Notice: Execution \"{{ workflow.name }}\" has {{ phase }} in \"{{ domain }}\"." - - # Your verified SES email sender. - sender: "flyte-notifications@company.com" - - # Configurable email body used in notifications. - body: > - Execution \"{{ workflow.name }} [{{ name }}]\" has {{ phase }} in \"{{ domain }}\". View details at - - http://flyte.company.com/console/projects/{{ project }}/domains/{{ domain }}/executions/{{ name }}. {{ error }} - -The full set of parameters which can be used for email templating are checked -into `code `_. - -.. _admin-config-example: - -Example config -============== - -You can find the full configuration file `here `__. - -.. rli:: https://raw.githubusercontent.com/flyteorg/flyteadmin/master/flyteadmin_config.yaml - :caption: flyteadmin/flyteadmin_config.yaml - :lines: 91-105 diff --git a/rsts/deployment/configuration/performance.rst b/rsts/deployment/configuration/performance.rst deleted file mode 100644 index 9d6f71ea8b..0000000000 --- a/rsts/deployment/configuration/performance.rst +++ /dev/null @@ -1,264 +0,0 @@ -.. _deployment-configuration-performance: - -###################################################### -Optimizing Performance -###################################################### - -.. tags:: Infrastructure, Kubernetes, Advanced - -.. tip:: Before getting started, it is always important to measure the performance. Flyte project publishes and manages some grafana templates as described in - :ref:`deployment-configuration-monitoring`. - -The video below contains an overview of the Flyte architecture, what is meant by "performance", details of one loop in FlytePropeller, and a demo of the Grafana Labs dashboard. - -.. youtube:: FJ-rG9lZDhY - -Scaling up FlytePropeller -========================== -`FlytePropeller `_ is the core engine of Flyte that executes the workflows for Flyte. -It is designed as a `Kubernetes Controller `_, where the desired state is specified as a FlyteWorkflow `Custom Resource `_. - -One of the base assumptions of FlytePropeller is that every workflow is independent and can be executed by a completely distinct process, without a need for communication with other processes. Meanwhile, one workflow tracks the dependencies between tasks using a DAG structure and hence constantly needs synchronization. -Currently, FlytePropeller executes Workflows by using an event loop to periodically track and amend the execution status. Within each iteration, a single thread requests the state of Workflow nodes and performs operations (i.e., scheduling node executions, handling failures, etc) to gracefully transition a Workflow from the observed state to the desired state (i.e., Success). Consequently, actual node executions are performed by various FlytePlugins, a diverse collection of operations spanning k8s and other remote services, and FlytePropeller is only responsible for effectively monitoring and managing these executions. - -FlytePropeller has a lot of knobs that can be tweaked for performance. The default configuration is usually adequate for small to medium sized installations of Flyte, that are running about 500 workflows concurrently with no noticeable overhead. In the case when the number of workflows increases, -FlytePropeller will automatically slow down, without losing correctness. - -Signs of slowdown ------------------- - -.. list-table:: Important metrics to look out for in Prometheus dashboard - :widths: 25 25 50 100 - :header-rows: 1 - - * - Metric - - Dashboard - - Alerting factor - - Effect - * - ``flyte:propeller:all:free_workers_count`` - - Flyte Propeller Dashboard - - Number of free-workers in all FlytePropeller instances are very low. - - This will increase overall latency for Each workflow propagation - * - ``sum(rate(flyte:propeller:all:round:raw_ms[5m])) by (wf)`` - - Flyte Propeller Dashboard - - Round Latency for Each workflow increases - - Flyte propeller is taking more time to process each workflow - * - ``sum(rate(flyte:propeller:all:main_depth[5m]))`` - - Flyte Propeller Dashboard - - Workflows take longer to start or slow - - The processing queue depth is long and is taking long to drain - -For each of the metrics above you can dig deeper into the cause for this spike in latency. All of them are mostly related to one latency and should be correlated - ``The Round latency!``. -The round-latency is the time it takes for FlytePropeller to to perform a single iteration of workflow evaluation. To understand this, you have to understand the :ref:`divedeep-execution-timeline`. Once you understand this, continue reading on. - -Optimizing round latency -------------------------- - -Optimize FlytePropeller configuration -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Usually round-latency can be resolved by adjusting FlytePropeller config specified `here `_ or sometimes adjusting the global defaults for your deployment or per workflow-execution. -Let us first look at various config properties that can be set and would impact the performance of one round in Flyte and should be tweaked - -.. list-table:: Important Properties - :widths: 25 25 25 50 - :header-rows: 1 - - * - Property - - Section - - Rule of thumb - - Description - * - ``workers`` - - propeller - - Larger the number, implies more workflows can be evaluated in parallel. But it should depend on number of CPU cores assigned to FlytePropeller and evaluated against the cost of context switching. A number usually < 500 - 800 with 4-8 cpu cores works fine. - - Number of `logical threads` workers, that can work concurrently. Also implies number of workflows that can be executed in parallel. Since FlytePropeller uses go-routines, it can run way more than number of physical cores. - * - ``workflow-reeval-duration`` - - propeller - - lower the number - lower latency, lower throughput (low throughput is because the same workflow will be evaluated more times) - - frequency at which, given no external signal, a workflow should be re-evaluated by Flyte propellers reval loop - * - ``downstream-eval-duration`` - - propeller - - lower the number - lower latency and lower throughput (low throughput is because the same workflow will be evaluated more times) - - This indicates how often are external events like pods completion etc recorded. - * - ``max-streak-length`` - - propeller - - higher the number lower the latency for end to end workflow, especially for cached workflows - - number of consecutive rounds to try with one workflow - prioritize a hot workflow over others. - * - ``kube-client-config`` - - propeller - - This is how you can control the number of requests ceiling that FlytePropeller can initiate to KubeAPI. This is usual the #1 bottle neck - - this configures the kubernetes client used by FlytePropeller - * - ``workflowStore.policy`` - - propeller - - This config uses a trick in etcD to minimize number of redundant loops in FlytePropeller, thus improving free slots - - Use this to configure how FlytePropeller should evaluate workflows, the default is usually a good choice - * - ``storage.cache`` - - propeller - - This config is used to configure the write-through cache used by FlytePropeller on top of the metastore - - FlytePropeller uses the configure blob-store (can be changed to something more performant in the future) to optimize read and write latency, for all metadata IO operations. Metadata refers to the input and output pointers - * - ``admin-launcher.tps``, ``admin-launcher.cacheSize``, ``admin-launcher.workers`` - - propeller - - This config is used to configure the max rate and launch-plans that FlytePropeller can launch against FlyteAdmin - - It is essential to limit the number of writes from FlytePropeller to flyteadmin to prevent brown-outs or request throttling at the server. Also the cache reduces number of calls to the server. - * - ``tasks.backoff.max-duration`` - - propeller - - This config is used to configure the maximum back-off interval in case of resource-quota errors - - FlytePropeller will automatically back-off when k8s or other services request it to slowdown or when desired quotas are met. - * - ``max-parallelism`` - - admin, per workflow, per execution - - Refer to examples and documentation below - - docs below - - -In the above table the 2 most important configs are ``workers`` and ``kube-client-config``. - -The Kube client config controls the request throughput from FlytePropeller to the Kube API server. These requests may include creating/monitoring Pods or creating/updating FlyteWorkflow CRDs to track workflow execution. The default configuration (provided by k8s) contains very steep rate-limiting, and therefore FlytePropeller provides a default configuration that offers better performance. However, if your workload involves larger scales (e.g., >5k fanout dynamic or map tasks, >8k concurrent workflows, etc.,) the Kube client config rate limiting may still contribute to a noticeable drop in performance. Increasing the ``qps`` and ``burst`` values may help alleviate back pressure and improve FlytePropeller performance. An example of Kube-client-config is as follows: - -.. code-block:: yaml - - propeller: - kube-client-config: - qps: 100 # Refers to max rate of requests to KubeAPI server - burst: 50 # refers to max burst rate to Kube API server - timeout: 30s # Refers to timeout when talking with kubeapi server - - -.. note:: As you increase the number of workers in FlytePropeller it is important to increase the number of cpu's given to FlytePropeller pod. - -It is worth noting that the Kube API server tends to throttle requests transparently. This means that while tweaking performance by increasing the allowed frequency of Kube API server requests (e.g., increasing FlytePropeller workers or relaxing Kube client config rate-limiting), there may be steep performance decreases for no apparent reason. Looking at the Kube API server request queue metrics in these cases can assist in identifying whether throttling is to blame. Unfortunately, there is no one-size-fits-all solution here, and customizing these parameters for your workload will require trial and error. - -Another area of slowdown could be the size of the input-output cache that FlytePropeller maintains in-memory. This can be configured, while configuring -the storage for FlytePropeller. Rule of thumb, for FlytePropeller with x memory limit, allocate x/2 to the cache - -Learn: max-streak-length & ResourceVersionCaching -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Kubernetes controllers often use Informer caches, rather than reading data directly from KubeAPI. This is to prevent excessive requests to KubeAPI server. The caches are eventually consistent, i.e., every write by the controller is eventually replicated to the cache, but there can be time periods, when the cache lags. -Since FlytePropeller, runs Workflow evaluations as an event loop, which is triggered by any changes to one of the resources that a workflow spawned. -It is possible that a Workflow will be evaluated, even when the last write has not yet propagated to the Informer cache. EtcD also does not allow stale writes, i.e., writes with an object that is older than the object that was written. This is maintained using a server side vector-clock - called the resource version. -Stale writes are writes when the evaluation resulted in a mutation of an object that is older than the object recorded in etcD. -These stale writes often lead to conflicts and hence increase load on the KubeAPI server and on FlytePropeller as the workers are busy writing stale objects repeatedly. - -To prevent this duplication and redundancy, FlytePropeller employs a trick. For every write, it records the last known version number in the database and then tries to wait for the change to propagate to the informer cache. - -If `max-streaks` are enabled then instead of waiting for the informer cache to be refreshed, FlytePropeller uses its own inmemory copy to run multiple rounds as long as mutations occur or the max-streak-length configuration is met. This reduces the latency of cache propagation, which can be order of seconds. - -Worst case workflows: Poison Pills & max-parallelism -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -The worst case for FlytePropeller is workflows that have an extremely large fan-out. This is because FlytePropeller implements a greedy traversal algorithm, that tries to evaluate the entire unblocked nodes within a workflow in every round. -A solution for this is to limit the maximum number of nodes that can be evaluated. This can be done by setting max-parallelism for an execution. -This can done in multiple ways - -#. Platform default: This allows to set platform-wide defaults for maximum concurrency within a Workflow execution. This can be overridden per Launch plan or per execution. - The default `maxParallelism is configured to be 25 `_. - It can be overridden with this config block in flyteadmin - - .. code-block:: yaml - - flyteadmin: - maxParallelism: 25 - -#. Default for a specific launch plan. For any launch plan, the maxParallelism value can be changed or altered. This can be done using :py:meth:`flytekit.LaunchPlan.get_or_create` or the :std:ref:`protos/docs/admin/admin:launchplancreaterequest` - **Flytekit Example** - - .. code-block:: python - - LaunchPlan.get_or_create( - name="my_cron_scheduled_lp", - workflow=date_formatter_wf, - max_parallelism=30, - ) - -#. Specify for an execution. For any specific execution the max-parallelism can be overridden. This can be done using flytectl (and soon flyteconsole). Refer to :std:ref:`flyteCtl docs ` - - - - -Scaling out FlyteAdmin -======================= -FlyteAdmin is a stateless service. Often time before needing to scale FlyteAdmin, you need to scale the backing database. Check out the FlyteAdmin Dashboard to see signs of latency degradation and increase the size of backing postgres instance. -FlyteAdmin is a stateless service and its replicas (in the kubernetes deployment) can be simply increased to allow higher throughput. - -Scaling out Datacatalog -======================== -Datacatalog is a stateless service. Often time before needing to scale Datacatalog, you need to scale the backing database. Check out the Datacatalog Dashboard to see signs of latency degradation and increase the size of backing postgres instance. -Datacatalog is a stateless service and its replicas (in the kubernetes deployment) can be simply increased to allow higher throughput. - -Scaling out FlytePropeller -=========================== - -Manual scale-out ----------------- -FlytePropeller can be run manually per namespace. This is not a recommended solution as it is harder to deploy, but if your organization can deploy and maintain multiple copies of FlytePropeller, you can use this. - -Automatic scale-out -------------------- -FlytePropeller Manager is a new component introduced as part of `this RFC `_ to facilitate horizontal scaling of FlytePropeller through sharding. Effectively, the Manager is responsible for maintaining liveness and proper configuration over a collection of FlytePropeller instances. This scheme uses k8s label selectors to deterministically assign FlyteWorkflow CRD responsibilities to FlytePropeller instances, effectively distributing processing load over the shards. - -Deployment of FlytePropeller Manager requires k8s configuration updates including a modified FlytePropeller Deployment and a new PodTemplate defining managed FlytePropeller instances. The easiest way to apply these updates is by setting the "flytepropeller.manager" value to "true" in the `helm deployment `_ and setting the manager config at "configmap.core.manager". - -Flyte provides a variety of Shard Strategies to configure how FlyteWorkflows are sharded among managed FlytePropeller instances. These include hash, which uses consistent hashing to load-balance evaluation over shards, and project / domain, which map the respective IDs to specific managed FlytePropeller instances. Below we include examples of helm configurations for each of the existing Shard Strategies. - -The Hash Shard Strategy, denoted by "type: hash" in the configuration below, uses consistent hashing to evenly distribute FlyteWorkflows over managed FlytePropeller instances. This configuration requires a "shard-count" variable which defines the number of managed FlytePropeller instances. - -.. code-block:: yaml - - configmap: - core: - # a configuration example using the "hash" shard type - manager: - # pod and scanning configuration redacted - # ... - shard: - type: hash # use the "hash" shard strategy - shard-count: 4 # the total number of shards - -The Project and Domain Shard Strategies, denoted by "type: project" and "type: domain" respectively, use the FlyteWorkflow project and domain metadata to shard FlyteWorkflows. These Shard Strategies are configured using a "per-shard-mapping" option, which is a list of ID lists. Each element in the "per-shard-mapping" list defines a new shard and the ID list assigns responsibility for the specified IDs to that shard. A shard configured as a single wildcard ID (i.e. "*") is responsible for all IDs that are not covered by other shards. Only a single shard may be configured with a wildcard ID and on that shard their must be only one ID, namely the wildcard. - -.. code-block:: yaml - - configmap: - core: - # a configuration example using the "project" shard type - manager: - # pod and scanning configuration redacted - # ... - shard: - type: project # use the "project" shard strategy - per-shard-mapping: # a list of per shard mappings - one shard is created for each element - - ids: # the list of ids to be managed by the first shard - - flytesnacks - - ids: # the list of ids to be managed by the second shard - - flyteexamples - - flytelabs - - ids: # the list of ids to be managed by the third shard - - "*" # use the wildcard to manage all ids not managed by other shards - - configmap: - core: - # a configuration example using the "domain" shard type - manager: - # pod and scanning configuration redacted - # ... - shard: - type: domain # use the "domain" shard strategy - per-shard-mapping: # a list of per shard mappings - one shard is created for each element - - ids: # the list of ids to be managed by the first shard - - production - - ids: # the list of ids to be managed by the second shard - - "*" # use the wildcard to manage all ids not managed by other shards - -Multi-Cluster mode -=================== -In our experience at Lyft, we saw that the Kubernetes cluster would have problems before FlytePropeller or FlyteAdmin would have impact. Thus Flyte supports adding multiple dataplane clusters by default. Each dataplane cluster, has one or more FlytePropellers running in them, and flyteadmin manages the routing and assigning of workloads to these clusters. - - -Improving etcd Performance -=========================== - -Offloading Static Workflow Information from CRD ------------------------------------------------ - -Flyte uses a k8s CRD (Custom Resource Definition) to store and track workflow executions. This resource includes the workflow definition, for example tasks and subworkflows that are involved and the dependencies between nodes, but also includes the execution status of the workflow. The latter information (ie. runtime status) is dynamic, meaning changes during the workflow's execution as nodes transition phases and the workflow execution progresses. However, the former information (ie. workflow definition) remains static, meaning it will never change and is only consulted to retrieve node definitions and workflow dependencies. - -CRDs are stored within etcd, a key-value datastore heavily used in kubernetes. Etcd requires a complete rewrite of the value data every time a single field changes. Consequently, the read / write performance of etcd, as with all key-value stores, is strongly correlated with the size of the data. In Flyte's case, to guarantee only-once execution of nodes we need to persist workflow state by updating the CRD at every node phase change. As the size of a workflow increases this means we are frequently rewriting a large CRD. In addition to poor read / write performance in etcd this update may be restricted by a hard limit on the overall CRD size. - -To counter the challenges of large FlyteWorkflow CRDs Flyte includes a configuration option to offload the static portions of the CRD (ie. workflow / task / subworkflow definitions and node dependencies) to the blobstore. This functionality can be enabled by setting the ``useOffloadedWorkflowClosure`` option to ``true`` in the `FlyteAdmin configuration `_. When set, the FlyteWorkflow CRD will populate a ``WorkflowClosureReference`` field on the CRD with the location of the static data and FlytePropeller will read this information (through a cache) during each workflow evaluation. One important note is that currently this requires FlyteAdmin and FlytePropeller to have access to the same blobstore since FlyteAdmin only specifies a blobstore location in the CRD. diff --git a/rsts/deployment/deployment/cloud_production.rst b/rsts/deployment/deployment/cloud_production.rst deleted file mode 100644 index c5993dbe53..0000000000 --- a/rsts/deployment/deployment/cloud_production.rst +++ /dev/null @@ -1,74 +0,0 @@ -.. _deployment-deployment-cloud-production: - -################################################# -Single Cluster Production-grade Cloud Deployment -################################################# - -.. tags:: Kubernetes, Infrastructure, Advanced - -The following guide assumes you've successfully set up a -:ref:`Single Cluster Simple Cloud Deployment `. - -This guide describes additional setup steps to productionize your Flyte -deployment. While not strictly required, we recommend that you incorporate these -changes. - -*********** -Ingress/DNS -*********** - -Assuming your cluster has an existing Ingress controller, Flyte will be -accessible without port forwarding. The base chart installed in the previous -guide already contains the ingress rules, but they are not enabled by default. - -To turn on ingress, update your ``values.yaml`` file to include the following block. - -.. tabs:: - - .. group-tab:: ``flyte-binary`` on EKS using NGINX - - .. literalinclude:: ../../../charts/flyte-binary/eks-production.yaml - :caption: charts/flyte-binary/eks-production.yaml - :language: yaml - :lines: 93-102 - - .. group-tab:: ``flyte-binary``/ on EKS using ALB - - .. literalinclude:: ../../../charts/flyte-binary/eks-production.yaml - :caption: charts/flyte-binary/eks-production.yaml - :language: yaml - :lines: 106-118 - - .. group-tab:: ``flyte-core`` on GCP using NGINX - - .. literalinclude:: ../../../charts/flyte-core/values-gcp.yaml - :caption: charts/flyte-core/values-gcp.yaml - :language: yaml - :lines: 156-164 - - -*************** -Authentication -*************** - -Authentication comes with Flyte in the form of OAuth 2.0. Please see the -`authentication guide `__ for instructions. - -.. note:: - - Authorization is not supported out-of-the-box in Flyte. This is due to the - wide and variety of authorization requirements that different organizations use. - -*************** -Upgrade Path -*************** - -To upgrade, simply ``helm upgrade`` your relevant chart. - -One thing to keep in mind during upgrades is that Flyte is released regularly -using semantic versioning. Since Flyte ``1.0.0`` will be with us for a while, -you should expect large changes in minor version bumps, which backwards -compatibility being maintained, for the most part. - -If you're using the :ref:`multi-cluster ` -deployment model for Flyte, components should be upgraded together. diff --git a/rsts/deployment/deployment/cloud_simple.rst b/rsts/deployment/deployment/cloud_simple.rst deleted file mode 100644 index b280546708..0000000000 --- a/rsts/deployment/deployment/cloud_simple.rst +++ /dev/null @@ -1,132 +0,0 @@ -.. _deployment-deployment-cloud-simple: - -####################################### -Single Cluster Simple Cloud Deployment -####################################### - -.. tags:: Kubernetes, Infrastructure, Basic - -These instructions are suitable for the main cloud providers. - -**************** -Prerequisites -**************** -In order to install Flyte, you will need access to the following: - -* A Kubernetes cluster: `EKS `__, - `GKE `__, etc. -* At least one blob storage bucket: `S3 `__, - `GCS `__, etc. -* A Postgres database: `RDS `__, - `CloudSQL `__, etc. -* At least one IAM role on `AWS `__, - `GCP `__, etc. This is the role for the Flyte - backend service to assume. You can provision another role for user code to assume as well. - -As Flyte documentation cannot keep up with the pace of change of the cloud -provider APIs, please refer to their official documentation for each of -these prerequisites. - -.. note:: - - `Union.AI `__ plans to open-source a reference - implementation of these requirements for the major cloud providers in early - 2023. - -*************** -Installation -*************** - -Flyte is installed via a `Helm `__ chart. First, add the Flyte -chart repo to Helm: - -.. prompt:: bash $ - - helm repo add flyteorg https://flyteorg.github.io/flyte - -Then download and update the values files: - -.. prompt:: bash $ - - curl -sL https://raw.githubusercontent.com/flyteorg/flyte/master/charts/flyte-binary/eks-starter.yaml - -Finally, install the chart: - -.. prompt:: bash $ - - helm install flyte-backend flyteorg/flyte-binary \ - --dry-run --namespace flyte --values eks-starter.yaml - -When ready to install, remove the ``--dry-run`` switch. - -Verify the Installation -======================= - -The values supplied by the ``eks-starter.yaml`` file provides only the simplest -installation of Flyte. The core functionality and scalability of Flyte will be -there, but no plugins are included (e.g. Spark tasks will not work), there is no -DNS or SSL, and there is no authentication. - -Port Forward Flyte Service --------------------------- - -To verify the installation therefore you'll need to port forward the Kubernetes service. - -.. prompt:: bash $ - - kubectl -n flyte port-forward service/flyte-binary 8088:8088 8089:8089 - -You should be able to navigate to http://localhost:8088/console. - -The Flyte server operates on two different ports, one for HTTP traffic and one for gRPC traffic, which is why we port forward both. - -From here, you should be able to run through the :ref:`Getting Started ` -examples again. Save a backup copy of your existing configuration if you have one -and generate a new config with ``flytectl``. - -.. prompt:: bash $ - - mv ~/.flyte/config.yaml ~/.flyte/bak.config.yaml - flytectl config init --host localhost:8088 - -This will produce a file like: - -.. code-block:: yaml - :caption: ``~/.flyte/config.yaml`` - - admin: - # For GRPC endpoints you might want to use dns:///flyte.myexample.com - endpoint: dns:///localhost:8088 - authType: Pkce - insecure: true - logger: - show-source: true - level: 0 - -Test Workflow -------------- - -You can test a workflow by cloning the ``flytesnacks`` repo and running the -hello world example: - -.. prompt:: bash $ - - git clone https://github.com/flyteorg/flytesnacks - cd flytesnacks/cookbook - pyflyte run --remote core/flyte_basics/hello_world.py my_wf - -*********************************** -Flyte in on-premises infrastructure -*********************************** - -Sometimes, it's also helpful to be able to set up a Flyte environment in an on-premises Kubernetes environment or even on a laptop for testing and development purposes. -Check out `this community-maintained tutorial `__ to learn how to setup the required dependencies and deploy the `flyte-binary` chart to a local Kubernetes cluster. - - -************* -What's Next? -************* - -Congratulations ⭐️! Now that you have a Flyte cluster up and running on the cloud, -you can productionize it by following the :ref:`deployment-deployment-cloud-production` -guide. diff --git a/rsts/deployment/deployment/index.rst b/rsts/deployment/deployment/index.rst deleted file mode 100644 index eb06d0a6c0..0000000000 --- a/rsts/deployment/deployment/index.rst +++ /dev/null @@ -1,159 +0,0 @@ -.. _deployment-deployment: - -################### -Deployment Paths -################### - -The articles in this section will guide a new Flyte administrator through deploying Flyte. - -The most complex parts of a Flyte deployment are authentication, ingress, DNS, and SSL support. Due to the complexity -introduced by these components, we recommend deploying Flyte without these at first and relying on K8s port forwarding -to test your Flyte cluster. After the base deployment is tested, these additional features can be turned on more -seamlessly. - -******************************** -Components of a Flyte Deployment -******************************** - -.. important:: - - We recommend working with your infrastructure team to set up the cloud service requirements below. - -Relational Database -=================== - -Two of Flyte's components, :ref:`FlyteAdmin ` and :ref:`DataCatalog `, rely on -PostgreSQL to store persistent records. In the sandbox deployment, a containerized version of Postgres is included but -for a proper Flyte installation, we recommend one of the cloud provided databases. - -.. note:: - - We recommend the following services, depending on your cloud platform of choice: - - - **AWS**: `RDS `__ - - **GCP**: `Cloud SQL `__ - - **Azure**: `PostgreSQL `__ - -Production Grade Object Store -============================= - -Core Flyte components such as :ref:`FlyteAdmin `, :ref:`FlytePropeller `, -:ref:`DataCatalog `, and user runtime containers rely on an object store to hold files. The sandbox -deployment comes with a containerized `Minio `__, which offers AWS S3 compatibility. - -.. note:: - - We recommend swapping this out for a production-grade object store, depending on your cloud platform of choice: - - - **AWS**: `S3 `__ - - **GCP**: `GCS `__ - - **Azure**: `Azure Blob Storage `__ - -************************ -Flyte Deployment Paths -************************ - -There are three different paths for deploying a Flyte cluster: - -.. list-table:: - :header-rows: 1 - :widths: 25, 65, 20 - - * - Deployment Path - - Description - - Production-grade? - * - :ref:`Sandbox ` - - This uses portable replacements for the relational database and blob store. - It's good for testing out and experimenting with Flyte. - - ❌ - * - :ref:`Single Cluster ` - - This bundles Flyte as one executable. It runs on a single K8s cluster and - supports all of Flyte's extensions and plugins. Once the simple deployment - is established, you can follow steps to :ref:`productionize it `. - - ✅ - * - :ref:`Multiple Clusters ` - - For large-scale deployments that require multiple K8s clusters. Flyte's control - plane (:ref:`FlyteAdmin `, :ref:`FlyteConsole `, and :ref:`DataCatalog `) - is separated from Flyte's execution engine, :ref:`FlytePropeller `, which runs - typically once per compute cluster. - - ✅ - -.. important:: - - We recommend the **Single Cluster** option for a capable though not massively scalable cluster. - - This option is appropriate if all your compute can `fit on one EKS cluster `__ . - As of this writing, a single Flyte cluster can handle more than 13,000 nodes. - - Regardless of using single or multiple Kubernetes clusters for Flyte, note that ``FlytePropeller`` -the main data plane component- can be scaled out as well by using ``sharding`` if scale demands require it. - See `Automatic scale-out `__ to learn more about the sharding mechanism. - - - -Helm -==== - -Flyte uses `Helm `__ as the K8s release packaging solution, though you may still see some old -`Kustomize `__ artifacts in the `flyte `__ repo. The core Flyte -team maintains Helm charts that correspond with the latter two deployment paths. - -.. note:: - - Technically there is a Helm chart for the sandbox environment as well, but it's been tested only with the Dockerized - K3s bundled container. - -.. dropdown:: ``flyte-binary``: chart for the **Single Cluster** option. - :title: text-muted - - .. literalinclude:: ../../../charts/flyte-binary/Chart.yaml - :language: yaml - :caption: charts/flyte-binary/Chart.yaml - -.. dropdown:: ``flyte-core``: chart for the **Multiple Cluster** option. - :title: text-muted - - .. literalinclude:: ../../../charts/flyte-core/Chart.yaml - :language: yaml - :caption: charts/flyte-core/Chart.yaml - -.. dropdown:: ``flyte-deps``: chart that installs additional useful dependencies alongside Flyte. - :title: text-muted - - .. literalinclude:: ../../../charts/flyte-deps/Chart.yaml - :language: yaml - :caption: charts/flyte-deps/Chart.yaml - -.. dropdown:: ``flyte``: chart that depends on ``flyte-core``, installing additional dependencies to Flyte deployment. - :title: text-muted - - .. literalinclude:: ../../../charts/flyte/Chart.yaml - :language: yaml - :caption: charts/flyte/Chart.yaml - -************************************** -Deployment Tips and Tricks -************************************** - -Due to the many choices and constraints that you may face in your organization, the specific steps for deploying Flyte -can vary significantly. For example, which cloud platform to use is typically a big fork in the road for many, and there -are many choices to make in terms of Ingress controllers, auth providers, and versions of different dependent libraries that -may interact with other parts of your stack. - -Considering the above, we recommend checking out the `"Flyte The Hard Way" `__ set of community-maintained tutorials that can guide you through the process of preparing the infrastructure and -deploying Flyte. - -In addition to searching and posting on the `#flyte-deployment Slack channel `__, -we have a `Github Discussion `__ -section dedicated to deploying Flyte. Feel free to submit any hints you've found helpful as a discussion, ask questions, -or simply document what worked or what didn't work for you. - - -.. toctree:: - :maxdepth: 1 - :name: deployment options toc - :hidden: - - sandbox - cloud_simple - cloud_production - multicluster diff --git a/rsts/deployment/deployment/multicluster.rst b/rsts/deployment/deployment/multicluster.rst deleted file mode 100644 index e8c6b84f13..0000000000 --- a/rsts/deployment/deployment/multicluster.rst +++ /dev/null @@ -1,661 +0,0 @@ -.. _deployment-deployment-multicluster: - -###################################### -Multiple Kubernetes Cluster Deployment -###################################### - -.. tags:: Kubernetes, Infrastructure, Advanced - -.. note:: - - The multicluster deployment described in this section, assumes you have deployed - the ``flyte-core`` Helm chart, which runs the individual Flyte components separately. - This is needed because in a multicluster setup, the execution engine is - deployed to multiple K8s clusters; it won't work with the ``flyte-binary`` - Helm chart, since it deploys all Flyte services as one single binary. - -Scaling Beyond Kubernetes -------------------------- - -.. tip:: - - As described in the `Architecture Overview `_, - the Flyte ``Control Plane`` sends workflows off to the ``Data Plane`` for - execution. The data plane fulfills these workflows by launching pods in - Kubernetes. - - -.. image:: https://raw.githubusercontent.com/flyteorg/static-resources/main/common/flyte-multicluster-arch-v2.png - -The case for multiple Kubernetes clusters may arise due to security constraints, -cost effectiveness or a need to scale out computing resources. - -To address this, you can deploy Flyte's data plane to multiple Kubernetes clusters. -The control plane (FlyteAdmin) can be configured to submit workflows to -these individual data planes. Additionally, Flyte provides the mechanisms for -administrators to retain control on the workflow placement logic while enabling -users to reap the benefits using simple abstractions like ``projects`` and ``domains``. - -Prerequisites -************* - -To make sure that your multicluster deployment is able to scale and process -requests successfully, the following environment-specific requirements should be met: - -.. tabbed:: AWS - - 1. An IAM Policy that defines the permissions needed for Flyte. A minimum set of permissions include: - - .. code-block:: json - - "Action": [ - "s3:DeleteObject*", - "s3:GetObject*", - "s3:ListBucket", - "s3:PutObject*" - ], - "Resource": [ - "arn:aws:s3:::*", - "arn:aws:s3:::*/*" - ], - - - 2. Two IAM Roles configured: one for the control plane components, and another for the data plane where the worker Pods and ``flytepropeller`` run. - - .. note:: - - Using the guidance from this document, make sure to follow your organization's policies to configure IAM resources. - - 3. An OIDC Provider associated with each of your EKS clusters. You can use the following command to create and connect the Provider: - - .. prompt:: bash - - eksctl utils associate-iam-oidc-provider --cluster --approve - - 4. An IAM Trust Relationship that associates each EKS cluster type (control plane or data plane) with the Service Account(s) and namespaces - where the different elements of the system will run. - - Follow the steps in this section to complete the requirements indicated above: - - **Control plane role** - - 1. Use the following command to simplify the process of both creating a role and configuring an initial Trust Relationship: - - .. prompt:: bash - - eksctl create iamserviceaccount --cluster= --name=flyteadmin --role-only --role-name=flyte-controlplane-role --attach-policy-arn --approve --region --namespace flyte - - 2. Go to the **IAM** section in your **AWS Management Console** and select the role that was just created - 3. Go to the **Trust Relationships** tab and **Edit the Trust Policy** - 4. Add the ``datacatalog`` Service Account to the ``sub`` section - - .. note:: - - When caching is enabled, the ``datacatalog`` service store hashes of workflow inputs alongside with outputs on blob storage. Learn more `here `__. - - Example configuration: - - .. code-block:: json - - { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Principal": { - "Federated": "arn:aws:iam:::oidc-provider/oidc.eks..amazonaws.com/id/" - }, - "Action": "sts:AssumeRoleWithWebIdentity", - "Condition": { - "StringEquals": { - "oidc.eks..amazonaws.com/id/:aud": "sts.amazonaws.com", - "oidc.eks..amazonaws.com/id/:sub": [ - "system:serviceaccount:flyte:flyteadmin", - "system:serviceaccount:flyte:datacatalog" - ] - } - } - } - ] - } - - **Data plane role** - - 1. Create the role and Trust Relationship: - - .. prompt:: bash - - eksctl create iamserviceaccount --cluster= --name=flytepropeller --role-only --role-name=flyte-dataplane-role --attach-policy-arn --approve --region --namespace flyte - - 2. Edit the **Trust Relationship** of the data plane role - - .. note:: - - By default, every Pod created for Task execution, uses the ``default`` Service Account on their respective namespace. In your cluster, you'll have as many - namespaces as ``project`` and ``domain`` combinations you may have. Hence, it might be useful to use a ``StringLike`` condition and to use a wildcard for the namespace name in the Trust Policy - - 3. Add the ``default`` Service Account: - - - Example configuration for one data plane cluster: - - .. code-block:: json - - { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Principal": { - "Federated": "arn:aws:iam:::oidc-provider/oidc.eks..amazonaws.com/id/" - }, - "Action": "sts:AssumeRoleWithWebIdentity", - "Condition": { - "StringLike": { - "oidc.eks..amazonaws.com/id/.:aud": "sts.amazonaws.com", - "oidc.eks..amazonaws.com/id/.:sub": [ - "system:serviceaccount:flyte:flytepropeller", - "system:serviceaccount:*:default" - ] - } - } - } - - .. note:: - - To further refine the Trust Relationship, consider using a ``StringEquals`` condition and adding the ``default`` Service Account only for the ``project``-``domain`` - namespaces where Flyte tasks will run, instead of using a wildcard. - -.. _dataplane-deployment: - -Data Plane Deployment -********************* - -This guide assumes that you have two Kubernetes clusters and that you can access -them all with ``kubectl``. - -Let's call these clusters ``dataplane1`` and ``dataplane2``. In this section, you'll prepare -the first cluster only. - -1. Add the ``flyteorg`` Helm repo: - -.. prompt:: bash - - helm repo add flyteorg https://flyteorg.github.io/flyte - helm repo update - # Get flyte-core helm chart - helm fetch --untar --untardir . flyteorg/flyte-core - cd flyte-core - -2. Open the ``values-dataplane.yaml`` file and add the following contents: - - .. code-block:: yaml - - configmap: - admin: - admin: - endpoint: :443 #indicate the URL you're using to connect to Flyte - insecure: false #enables secure communication over SSL. Requires a signed certificate - catalog: - catalog-cache: - endpoint: :443 - insecure: false - -.. note:: - - This step is needed so the ``flytepropeller`` instance in the data plane cluster is able to send notifications - back to the ``flyteadmin`` service in the control plane. The ``catalog`` service runs in the control plane and is used when caching is enabled. - -3. Install Flyte data plane Helm chart: - -.. note:: - - Use the same ``values-eks.yaml`` or ``values-gcp.yaml`` file you used to deploy the control plane. - -.. tabbed:: AWS - - .. code-block:: - - helm install flyte-core-data flyteorg/flyte-core -n flyte \ - --values values-eks.yaml --values values-dataplane.yaml \ - --create-namespace - -.. tabbed:: GCP - - .. code-block:: - - helm install flyte-core-data -n flyte flyteorg/flyte-core \ - --values values-gcp.yaml \ - --values values-dataplane.yaml \ - --create-namespace flyte - -.. _control-plane-deployment: - -Control Plane configuration -********************************* - -For ``flyteadmin`` to access and create Kubernetes resources in one or more -Flyte data plane clusters, it needs credentials to each cluster. -Flyte makes use of Kubernetes Service Accounts to enable every control plane cluster to perform -authenticated requests to the data plane Kubernetes API Server. -The default behaviour is that the Helm chart creates a `ServiceAccount `_ -in each data plane cluster. -In order to verify requests, the Kubernetes API Server expects a `signed bearer token `__ -attached to the Service Account. As of Kubernetes 1.24 and above, the bearer token has to be generated manually. - - -1. Use the following manifest to create a long-lived bearer token for the ``flyteadmin`` Service Account in your data plane cluster: - - .. prompt:: bash - - kubectl apply -f - < - -5. Obtain the corresponding certificate: - -.. prompt:: bash $ - - kubectl get secret -n flyte dataplane1-token \ - -o jsonpath='{.data.ca\.crt}' | pbcopy - -6. Add another entry on your ``secrets.yaml`` file for the certificate: - -.. code-block:: yaml - :caption: secrets.yaml - - apiVersion: v1 - kind: Secret - metadata: - name: cluster-credentials - namespace: flyte - type: Opaque - data: - dataplane_1_token: - dataplane_1_cacert: - -7. Connect to your control plane cluster and create the ``cluster-credentials`` secret: - -.. prompt:: bash $ - - kubectl apply -f secrets.yaml - -8. Create a file named ``values-override.yaml`` and add the following config to it: - -.. code-block:: yaml - :caption: values-override.yaml - - flyteadmin: - additionalVolumes: - - name: cluster-credentials - secret: - secretName: cluster-credentials - additionalVolumeMounts: - - name: cluster-credentials - mountPath: /var/run/credentials - initContainerClusterSyncAdditionalVolumeMounts: - - name: cluster-credentials - mountPath: /etc/credentials - configmap: - clusters: - labelClusterMap: - label1: - - id: dataplane_1 - weight: 1 - clusterConfigs: - - name: "dataplane_1" - endpoint: https://:443 - enabled: true - auth: - type: "file_path" - tokenPath: "/var/run/credentials/dataplane_1_token" - certPath: "/var/run/credentials/dataplane_1_cacert" - -.. note:: - - Typically, you can obtain your Kubernetes API endpoint URL using the following command: - - .. prompt:: bash $ - - kubectl cluster-info - -In this configuration, ``label1`` and ``label2`` are just labels that we will use later in the process -to configure mappings that enable workflow executions matching those labels, to be scheduled -on one or multiple clusters depending on the weight (e.g. ``label1`` on ``dataplane_1``). The ``weight`` is the -priority of a specific cluster, relative to the other clusters under the ``labelClusterMap`` entry. The total sum of weights under a particular -label has to be 1. - -9. Add the ``flyte-dataplane-role`` IAM Role as the ``defaultIamRole`` in your ``values-eks.yaml`` file. `See section here `__ - -10. Update the control plane Helm release: - -.. note:: - This step will disable ``flytepropeller`` in the control plane cluster, leaving no possibility of running workflows there. If you require - the control plane to run workflows, edit the ``values-controlplane.yaml`` file and set ``flytepropeller.enabled`` to ``true``. Then, perform the ``helm upgrade`` operation and complete the steps in :ref:`this section ` to configure it - as a dataplane cluster. - -.. tabbed:: AWS - - .. code-block:: - - helm upgrade flyte-core flyteorg/flyte-core \ - --values values-eks-controlplane.yaml --values values-override.yaml \ - --values values-eks.yaml -n flyte - -.. tabbed:: GCP - - .. code-block:: - - helm upgrade flyte -n flyte flyteorg/flyte-core values.yaml \ - --values values-gcp.yaml \ - --values values-controlplane.yaml \ - --values values-override.yaml - -11. Verify that all Pods in the ``flyte`` namespace are ``Running``: - -Example output: - -.. prompt:: bash $ - - kubectl get pods -n flyte - NAME READY STATUS RESTARTS AGE - datacatalog-86f6b9bf64-bp2cj 1/1 Running 0 23h - datacatalog-86f6b9bf64-fjzcp 1/1 Running 0 23h - flyteadmin-84f666b6f5-7g65j 1/1 Running 0 23h - flyteadmin-84f666b6f5-sqfwv 1/1 Running 0 23h - flyteconsole-cdcb48b56-5qzlb 1/1 Running 0 23h - flyteconsole-cdcb48b56-zj75l 1/1 Running 0 23h - flytescheduler-947ccbd6-r8kg5 1/1 Running 0 23h - syncresources-6d8794bbcb-754wn 1/1 Running 0 23h - - -Configure Execution Cluster Labels -********************************** - -The next step is to configure project-domain or workflow labels to schedule on a specific -Kubernetes cluster. - -.. tabbed:: Configure Project & Domain - - 1. Create an ``ecl.yaml`` file with the following contents: - - .. code-block:: yaml - - domain: development - project: project1 - value: label1 - - .. note:: - - Change ``domain`` and ``project`` according to your environment. The ``value`` has - to match with the entry under ``labelClusterMap`` in the ``values-override.yaml`` file. - - 2. Repeat step 1 for every project-domain mapping you need to configure, creating a YAML file for each one. - - 3. Update the execution cluster label of the project and domain: - - .. prompt:: bash $ - - flytectl update execution-cluster-label --attrFile ecl.yaml - - Example output: - - .. prompt:: bash $ - - Updated attributes from team1 project and domain development - - - 4. Execute a workflow indicating project and domain: - - .. prompt:: bash $ - - pyflyte run --remote --project team1 --domain development example.py training_workflow \  ✔ ╱ docs-development-env  - --hyperparameters '{"C": 0.1}' - -.. tabbed:: Configure a Specific Workflow mapping - - 1. Create a ``workflow-ecl.yaml`` file with the following example contents: - - .. code-block:: yaml - - domain: development - project: project1 - workflow: example.training_workflow - value: project1 - - 2. Update execution cluster label of the project and domain - - .. prompt:: bash $ - - flytectl update execution-cluster-label \ - -p project1 -d development \ - example.training_workflow \ - --attrFile workflow-ecl.yaml - - 3. Execute a workflow indicating project and domain: - - .. prompt:: bash $ - - pyflyte run --remote --project team1 --domain development example.py training_workflow \  ✔ ╱ docs-development-env  - --hyperparameters '{"C": 0.1}' - -Congratulations 🎉! With this, the execution of workflows belonging to a specific -project-domain or a single specific workflow will be scheduled on the target label -cluster. - -Day 2 Operations ----------------- - -Add another Kubernetes cluster -****************************** - -Find in this section the necessary steps to scale out your deployment by adding one Kubernetes cluster. -The process can be repeated for additional clusters. - -.. tabbed:: AWS - - - - 1. Create the new cluster: - - .. prompt:: bash $ - - eksctl create cluster --name flyte-dataplane-2 --region --version 1.25 --vpc-private-subnets , --without-nodegroup - - .. note:: - - This is only one of multiple ways to provision an EKS cluster. Follow your organization's policies to complete this step. - - - 2. Add a nodegroup to the cluster. Typically ``t3.xlarge`` instances provide enough resources to get started. Follow your organization's policies in this regard. - - 4. Create an OIDC Provider for the new cluster: - - .. prompt:: bash $ - - eksctl utils associate-iam-oidc-provider --cluster flyte-dataplane-2 --region --approve - - 5. Take note of the OIDC Provider ID: - - .. prompt:: bash $ - - aws eks describe-cluster --region --name flyte-dataplane-2 --query "cluster.identity.oidc.issuer" --output text - - 6. Go to the **IAM** section in the **AWS Management Console** and edit the **Trust Policy** of the ``flyte-dataplane-role`` - 7. Add a new ``Principal`` with the new cluster's OIDC Provider ID. Include the ``Action`` and ``Conditions`` section: - - .. code-block:: json - - { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Principal": { - "Federated": "arn:aws:iam:::oidc-provider/oidc.eks..amazonaws.com/id/" - }, - "Action": "sts:AssumeRoleWithWebIdentity", - "Condition": { - "StringLike": { - "oidc.eks..amazonaws.com/id/:aud": "sts.amazonaws.com", - - "oidc.eks..amazonaws.com/id/:sub": [ - "system:serviceaccount:flyte:flytepropeller", - "system:serviceaccount:*:default" - ] - } - } - }, - { - "Effect": "Allow", - "Principal": { - "Federated": "arn:aws:iam:::oidc-provider/oidc.eks..amazonaws.com/id/" - }, - "Action": "sts:AssumeRoleWithWebIdentity", - "Condition": { - "StringLike": { - "oidc.eks..amazonaws.com/id/:aud": "sts.amazonaws.com", - "oidc.eks..amazonaws.com/id/:sub": [ - "system:serviceaccount:flyte:flytepropeller", - "system:serviceaccount:*:default" - ] - } - } - } - ] - } - - - - 7. Install the data plane Helm chart following the steps in the **Data plane deployment** section. See :ref:`section `. - 8. Follow steps 1-3 in the **control plane configuration** section (see :ref:`section `) to generate and populate a new section in your ``secrets.yaml`` file - - Example: - - .. code-block:: yaml - - apiVersion: v1 - kind: Secret - metadata: - name: cluster-credentials - namespace: flyte - type: Opaque - data: - dataplane_1_token: - dataplane_1_cacert: - dataplane_2_token: - dataplane_2_cacert: - - 9. Connect to the control plane cluster and update the ``cluster-credentials`` Secret: - - .. prompt:: bash $ - - kubect apply -f secrets.yaml - - 10. Go to your ``values-override.yaml`` file and add the information of the new cluster. Adding a new label is not entirely needed. - Nevertheless, in the following example a new label is created to illustrate Flyte's capability to schedule workloads on different clusters - in response to user-defined mappings of ``project``, ``domain`` and ``label``:abbr: - - .. code-block:: yaml - - ... #all the above content remains the same - configmap: - clusters: - labelClusterMap: - label1: - - id: dataplane_1 - weight: 1 - label2: - - id: dataplane_2 - weight: 1 - clusterConfigs: - - name: "dataplane_1" - endpoint: https://.com:443 - enabled: true - auth: - type: "file_path" - tokenPath: "/var/run/credentials/dataplane_1_token" - certPath: "/var/run/credentials/dataplane_1_cacert" - - name: "dataplane_2" - endpoint: https://:443 - enabled: true - auth: - type: "file_path" - tokenPath: "/var/run/credentials/dataplane_2_token" - certPath: "/var/run/credentials/dataplane_2_cacert" - - 11. Update the Helm release in the control plane cluster: - - .. prompt:: bash $ - - helm upgrade flyte-core-control flyteorg/flyte-core -n flyte --values values-controlplane.yaml --values values-eks.yaml --values values-override.yaml - - 12. Create a new execution cluster labels file with the following sample content: - - .. code-block:: yaml - - domain: production - project: team1 - value: label2 - - 13. Update the cluster execution labels for the project: - - .. prompt:: bash $ - - flytectl update execution-cluster-label --attrFile ecl-production.yaml - - 14. Finally, submit a workflow execution that matches the label of the new cluster: - - .. prompt:: bash $ - - pyflyte run --remote --project team1 --domain production example.py training_workflow \ - --hyperparameters '{"C": 0.1}' - - 15. A successful execution should be visible on the UI, confirming it ran in the new cluster: - - .. image:: https://raw.githubusercontent.com/flyteorg/static-resources/main/common/multicluster-execution.png \ No newline at end of file diff --git a/rsts/deployment/deployment/sandbox.rst b/rsts/deployment/deployment/sandbox.rst deleted file mode 100644 index 970d001fb5..0000000000 --- a/rsts/deployment/deployment/sandbox.rst +++ /dev/null @@ -1,144 +0,0 @@ -.. _deployment-deployment-sandbox: - -######################### -Sandbox Deployment -######################### - -.. tags:: Kubernetes, Infrastructure, Basic - -A sandbox deployment of Flyte bundles together portable versions of Flyte's -dependencies such as a relational database and durable object store. - -For the blob store requirements, Flyte Sandbox uses `Minio `__, -which offers an S3 compatible interface, and for Postgres, it uses the stock -Postgres Docker image and Helm chart. - -.. important:: - - The sandbox deployment is not suitable for production environments. For instructions on how to create a - production-ready Flyte deployment, checkout the :ref:`Deployment Paths ` guide. - -******************************************* -Flyte Sandbox as a Single Docker Container -******************************************* - -Flyte provides a way for creating a Flyte cluster as a self-contained Docker image. This is mini-replica of an -entire Flyte deployment, without the scalability and with minimal extensions. - -The Flyte Sandbox can be run on any environment that supports containers and makes it extremely easy for users of Flyte -to try out the platform and get a feel for the user experience, all without having to understand Kubernetes or dabble -with configuration. - -.. note:: - - The Flyte single container sandbox is also used by the team to run continuous integration tests and used by the - :ref:`cookbook:userguide`, :ref:`cookbook:tutorials` and :ref:`cookbook:integrations` documentation. - -Requirements -============ - -- Install `kubectl `__. -- Install `docker `__ or any other OCI-compatible tool, like Podman or LXD. -- Install `flytectl `__, the official CLI for Flyte. - -While Flyte can run any OCI-compatible task image using the default Kubernetes container runtime (``containerd``), the Flyte -core maintainers typically use Docker. Note that the ``flytectl demo`` command does rely on Docker APIs, but as this -demo environment is just one self-contained image, you can also run the image directly using another run time. - -Within the single container environment, a mini Kubernetes cluster is installed using `k3s `__. K3s -uses an in-container Docker daemon, run using `docker-in-docker configuration `__ -to orchestrate user containers. - -Start the Sandbox -================== - -To spin up a Flyte Sandbox, run: - -.. prompt:: bash $ - - flytectl demo start - -This command runs a Docker container, which itself comes with a Docker registry -on ``localhost:30000`` so you can build images outside of the docker-in-docker -container by tagging your containers with ``localhost:30000/imgname:tag`` and -pushing the image. - -The local Postgres installation is also available on port ``30001`` for users -who wish to dig deeper into the storage layer. - -.. div:: shadow p-3 mb-8 rounded - - **Expected Output:** - - .. code-block:: - - 👨‍💻 Flyte is ready! Flyte UI is available at http://localhost:30080/console 🚀 🚀 🎉 - ❇️ Run the following command to export sandbox environment variables for accessing flytectl - export FLYTECTL_CONFIG=~/.flyte/config-sandbox.yaml - 🐋 Flyte sandbox ships with a Docker registry. Tag and push custom workflow images to localhost:30000 - 📂 The Minio API is hosted on localhost:30002. Use http://localhost:30080/minio/login for Minio console - -Flytectl/Flyte-remote Configuration -___________________________________ - -The ``config-sandbox.yaml`` file contains configuration for clients to communicate with **FlyteAdmin**, which is the Flyte cluster backend component that processes all client requests such as workflow executions. The default values are enough to let you connect and use Flyte: - - -.. code-block:: yaml - - admin: - # For GRPC endpoints you might want to use dns:///flyte.myexample.com - endpoint: localhost:30080 - authType: Pkce - insecure: true - console: - endpoint: http://localhost:30080 - logger: - show-source: true - level: 0 - -.. note:: - - You can also create your own config file with `flytectl config init`, which - will create a config file at `~/.flyte/config.yaml`. - - Learn more about the configuration settings in the - {ref}`Deployment Guide ` - -Flyte Cluster Configuration -___________________________ - -Flyte Sandbox ships with a reasonable default configuration. However, you can specify overrides as necessary to fit your use case, in the ``~/.flyte/sandbox/config.yaml`` file. See the following example for enabling the Ray plugin (requires `kuberay-operator `__ to also be installed): - -.. code-block:: shell - - > cat ~/.flyte/sandbox/config.yaml - tasks: - task-plugins: - default-for-task-types: - ray: ray - enabled-plugins: - - container - - sidecar - - k8s-array - - agent-service - - ray - plugins: - ray: - ttlSecondsAfterFinished: 60 - -You can also specify additional cluster resource templates in the ``~/.flyte/sandbox/cluster-resource-templates`` directory. See the following example: - -.. code-block:: shell - - > cat ~/.flyte/sandbox/cluster-resource-templates/001-serviceaccount.yaml - apiVersion: v1 - kind: ServiceAccount - metadata: - name: flyte-worker - namespace: {{ namespace }} - -Once you are happy with the changes, simply run ``flytectl demo reload`` to trigger a reload of the sandbox with the updated configuration. - -Now that you have the sandbox cluster running, you can now go to the :ref:`User Guide ` or -:ref:`Tutorials ` to run tasks and workflows written in ``flytekit``, the Python SDK for Flyte. diff --git a/rsts/deployment/index.rst b/rsts/deployment/index.rst deleted file mode 100644 index 820e941bc4..0000000000 --- a/rsts/deployment/index.rst +++ /dev/null @@ -1,66 +0,0 @@ -.. _deployment: - -############# -Deployment -############# - -These *Deployment Guides* are primarily for platform and devops engineers to learn how to deploy and administer Flyte. - -The sections below walk through how to create a Flyte cluster and cover topics related to enabling and configuring -plugins, authentication, performance tuning, and maintaining Flyte as a production-grade service. - -.. panels:: - :header: text-center - :column: col-lg-12 p-2 - - .. link-button:: deployment-deployment - :type: ref - :text: 🛣 Deployment Paths - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - Walkthroughs for deploying Flyte, from the most basic to a fully-featured, multi-cluster production system. - - --- - - .. link-button:: deployment-plugin-setup - :type: ref - :text: 🔌 Plugin Setup - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - Enable backend plugins to extend Flyte's capabilities, such as hooks for K8s, AWS, GCP, and Web API services. - - --- - - .. link-button:: deployment-agent-setup - :type: ref - :text: 🤖 Agent Setup - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - Enable Flyte agents to extend Flyte's capabilities, including features like File sensor, Databricks job, and Snowflake query services. - - --- - - .. link-button:: deployment-configuration - :type: ref - :text: 🎛 Cluster Configuration - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - How to configure the various components of your cluster. - - --- - - .. link-button:: deployment-configuration-generated - :type: ref - :text: 📖 Configuration Reference - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - Reference docs for configuration settings for Flyte's backend services. - - --- - - .. link-button:: deployment-security-overview - :type: ref - :text: 🔒 Security Overview - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - Read for comments on security in Flyte. diff --git a/rsts/deployment/plugins/aws/athena.rst b/rsts/deployment/plugins/aws/athena.rst deleted file mode 100644 index 34edafc4bd..0000000000 --- a/rsts/deployment/plugins/aws/athena.rst +++ /dev/null @@ -1,87 +0,0 @@ -.. _deployment-plugin-setup-aws-athena: - -Athena Plugin -============= - -This guide provides an overview of setting up Athena in your Flyte deployment. - -.. note:: - Please note that the Athena plugin requires a Flyte deployment in the AWS cloud; it won't work with demo/GCP/Azure. - -Set up the AWS Flyte cluster ----------------------------- - -1. Ensure you have a functional Flyte cluster up and running in `AWS `__ -2. Verify that you possess the correct ``kubeconfig`` and have selected the appropriate Kubernetes context -3. Double-check that your ``~/.flyte/config.yaml`` file contains the correct Flytectl configuration - -Specify plugin configuration ----------------------------- - -.. tabs:: - - .. group-tab:: Flyte binary - - Edit the relevant YAML file to specify the plugin. - - .. code-block:: yaml - :emphasize-lines: 7,11 - - tasks: - task-plugins: - enabled-plugins: - - container - - sidecar - - k8s-array - - athena - default-for-task-types: - - container: container - - container_array: k8s-array - - athena: athena - - .. group-tab:: Flyte core - - Create a file named ``values-override.yaml`` and include the following configuration: - - .. code-block:: yaml - - configmap: - enabled_plugins: - tasks: - task-plugins: - enabled-plugins: - - container - - sidecar - - k8s-array - - athena - default-for-task-types: - container: container - sidecar: sidecar - container_array: k8s-array - athena: athena - -Ensure that the propeller has the correct service account for Athena. - -Upgrade the Flyte Helm release ------------------------------- - -.. tabs:: - - .. group-tab:: Flyte binary - - .. code-block:: bash - - helm upgrade flyteorg/flyte-binary -n --values - - Replace ```` with the name of your release (e.g., ``flyte-backend``), - ```` with the name of your namespace (e.g., ``flyte``), - and ```` with the name of your YAML file. - - .. group-tab:: Flyte core - - .. code-block:: bash - - helm upgrade flyte/flyte-core -n --values values-override.yaml - - Replace ```` with the name of your release (e.g., ``flyte``) - and ```` with the name of your namespace (e.g., ``flyte``). diff --git a/rsts/deployment/plugins/aws/batch.rst b/rsts/deployment/plugins/aws/batch.rst deleted file mode 100644 index ba6d069b74..0000000000 --- a/rsts/deployment/plugins/aws/batch.rst +++ /dev/null @@ -1,165 +0,0 @@ -.. _deployment-plugin-setup-aws-array: - -AWS Batch -========= - -This setup document applies to both :py:func:`map tasks ` -and single tasks running on AWS Batch. - -.. note:: - - For single [non-map] task use, please take note of - the additional code when updating the flytepropeller config. - -AWS Batch simplifies the process for developers, scientists and engineers to run -hundreds of thousands of batch computing jobs on AWS. - -Flyte abstracts away the complexity of integrating AWS Batch into users' workflows, -taking care of packaging inputs, reading outputs, scheduling map tasks and -optimizing AWS Batch job queues for load distribution and priority coordination. - -Set up AWS Batch ----------------- - -Follow the guide `Running batch jobs -at scale for less `__. - -By the end of this step, your AWS Account should have a configured compute environment -and one or more AWS Batch Job Queues. - -Modify users' AWS IAM role trust policy document ------------------------------------------------- - -Follow the guide `AWS Batch Execution -IAM role `__. - -When running workflows in Flyte, users can specify a Kubernetes service account and/or an IAM Role to run as. -For AWS Batch, an IAM Role must be specified. For each of these IAM Roles, modify the trust policy -to allow elastic container service (ECS) to assume the role. - -Modify system's AWS IAM role policies -------------------------------------- - -Follow the guide `Granting a user permissions to pass a -role to an AWS service `__. - -The best practice for granting permissions to Flyte components is by utilizing OIDC, -as described in the -`OIDC documentation `__. -This approach entails assigning an IAM Role to each service account being used. -To proceed, identify the IAM Role associated with the flytepropeller's Kubernetes service account, -and subsequently, modify the policy document to enable the role to pass other roles to AWS Batch. - -Update FlyteAdmin configuration -------------------------------- - -FlyteAdmin must be informed of all the AWS Batch job queues -and how the system should distribute the load among them. -The simplest setup is as follows: - -.. code-block:: yaml - - flyteadmin: - roleNameKey: "eks.amazonaws.com/role-arn" - queues: - # A list of items, one per AWS Batch Job Queue. - executionQueues: - # The name of the job queue from AWS Batch - - dynamic: "tutorial" - # A list of tags/attributes that can be used to match workflows to this queue. - attributes: - - default - # A list of configs to match project and/or domain and/or workflows to job queues using tags. - workflowConfigs: - # An empty rule to match any workflow to the queue tagged as "default" - - tags: - - default - -If you are using Helm, you can add this block under the ``configMaps.adminServer`` section, -as shown `here `__. - -For a more complex matching configuration, the example below defines three different queues -with distinct attributes and matching logic based on project/domain/workflowName. - -.. code-block:: yaml - - queues: - executionQueues: - - dynamic: "gpu_dynamic" - attributes: - - gpu - - dynamic: "critical" - attributes: - - critical - - dynamic: "default" - attributes: - - default - workflowConfigs: - - project: "my_queue_1" - domain: "production" - workflowName: "my_workflow_1" - tags: - - critical - - project: "production" - workflowName: "my_workflow_2" - tags: - - gpu - - project: "my_queue_3" - domain: "production" - workflowName: "my_workflow_3" - tags: - - critical - - tags: - - default - -These settings can also be dynamically altered through ``flytectl`` (or FlyteAdmin API). -Learn about the :ref:`core concept here `. -For guidance on how to dynamically update these configurations, refer to the :ref:`Flytectl docs `. - -Update FlytePropeller's configuration -------------------------------------- - -The AWS Array Plugin requires specific configurations to ensure proper communication with the AWS Batch Service. - -These configurations reside within FlytePropeller's configMap. Modify the config in the relevant YAML file to set the following keys: - -.. code-block:: yaml - - plugins: - aws: - batch: - # Must match that set in flyteAdmin's configMap flyteadmin.roleNameKey - roleAnnotationKey: eks.amazonaws.com/role-arn - # Must match the desired region to launch these tasks. - region: us-east-2 - tasks: - task-plugins: - enabled-plugins: - # Enable aws_array task plugin. - - aws_array - default-for-task-types: - # Set it as the default handler for array/map tasks. - container_array: aws_array - # Make sure to add this line to enable single (non-map) AWS Batch tasks - aws-batch: aws_array - -.. note:: - - To register the `map task - `__ on Flyte, - use the command ``pyflyte register ``. - Launch the execution through the FlyteConsole by selecting the appropriate ``IAM Role`` and entering the full - ``AWS Arn`` of an IAM Role configured according to the above guide. - - Once the task starts executing, you'll find a link for the AWS Array Job in the log links section of the Flyte Console. - As individual jobs start getting scheduled, links to their respective CloudWatch log streams will also appear in the UI. - - .. image:: https://raw.githubusercontent.com/flyteorg/static-resources/main/flyte/deployment/aws_plugin_setup/map_task_success.png - :alt: A screenshot of Flyte Console displaying log links for a successful array job. - - *A screenshot of Flyte Console displaying log links for a successful array job.* - - .. image:: https://raw.githubusercontent.com/flyteorg/static-resources/main/flyte/deployment/aws_plugin_setup/map_task_failure.png - :alt: A screenshot of Flyte Console displaying log links for a failed array job. - - *A screenshot of Flyte Console displaying log links for a failed array job.* diff --git a/rsts/deployment/plugins/aws/index.rst b/rsts/deployment/plugins/aws/index.rst deleted file mode 100644 index b2231ca574..0000000000 --- a/rsts/deployment/plugins/aws/index.rst +++ /dev/null @@ -1,37 +0,0 @@ -.. _deployment-plugin-setup-aws: - -Configure AWS Plugins -===================== - -.. tags:: AWS, Integration, MachineLearning, Data, Advanced - -Discover the process of setting up AWS plugins for Flyte. - -.. panels:: - :header: text-center - :column: col-lg-12 p-2 - - - .. link-button:: deployment-plugin-setup-aws-array - :type: ref - :text: AWS Batch - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - Guide to setting up the AWS Batch plugin. - - --- - - .. link-button:: deployment-plugin-setup-aws-athena - :type: ref - :text: AWS Athena - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - Guide to setting up the AWS Athena plugin. - -.. toctree:: - :maxdepth: 1 - :name: AWS plugin setup - :hidden: - - batch - athena diff --git a/rsts/deployment/plugins/gcp/bigquery.rst b/rsts/deployment/plugins/gcp/bigquery.rst deleted file mode 100644 index 03b21e02e1..0000000000 --- a/rsts/deployment/plugins/gcp/bigquery.rst +++ /dev/null @@ -1,90 +0,0 @@ -.. _deployment-plugin-setup-gcp-bigquery: - -Google BigQuery Plugin -====================== - -This guide provides an overview of setting up BigQuery in your Flyte deployment. -Please note that the BigQuery plugin requires Flyte deployment in the GCP cloud; -it is not compatible with demo/AWS/Azure. - -Set up the GCP Flyte cluster ----------------------------- - -* Ensure you have a functional Flyte cluster running in `GCP `__. -* Create a service account for BigQuery. For more details, refer to: https://cloud.google.com/bigquery/docs/quickstarts/quickstart-client-libraries. -* Verify that you have the correct kubeconfig and have selected the appropriate Kubernetes context. -* Confirm that you have the correct Flytectl configuration at ``~/.flyte/config.yaml``. - -Specify plugin configuration ----------------------------- - -.. tabs:: - - .. group-tab:: Flyte binary - - Edit the relevant YAML file to specify the plugin. - - .. code-block:: yaml - :emphasize-lines: 7,11 - - tasks: - task-plugins: - enabled-plugins: - - container - - sidecar - - k8s-array - - bigquery - default-for-task-types: - - container: container - - container_array: k8s-array - - bigquery_query_job_task: bigquery - - .. group-tab:: Flyte core - - Create a file named ``values-override.yaml`` and add the following configuration to it. - - .. code-block:: yaml - - configmap: - enabled_plugins: - # -- Tasks specific configuration [structure](https://pkg.go.dev/github.com/flyteorg/flytepropeller/pkg/controller/nodes/task/config#GetConfig) - tasks: - # -- Plugins configuration, [structure](https://pkg.go.dev/github.com/flyteorg/flytepropeller/pkg/controller/nodes/task/config#TaskPluginConfig) - task-plugins: - # -- [Enabled Plugins](https://pkg.go.dev/github.com/flyteorg/flyteplugins/go/tasks/config#Config). Enable sagemaker*, athena if you install the backend - enabled-plugins: - - container - - sidecar - - k8s-array - - bigquery - default-for-task-types: - container: container - sidecar: sidecar - container_array: k8s-array - bigquery_query_job_task: bigquery - -Ensure that the propeller has the correct service account for BigQuery. - -Upgrade the Flyte Helm release ------------------------------- - -.. tabs:: - - .. group-tab:: Flyte binary - - .. code-block:: bash - - helm upgrade flyteorg/flyte-binary -n --values - - Replace ```` with the name of your release (e.g., ``flyte-backend``), - ```` with the name of your namespace (e.g., ``flyte``), - and ```` with the name of your YAML file. - - .. group-tab:: Flyte core - - .. code-block:: bash - - helm upgrade flyte/flyte-core -n --values values-override.yaml - - Replace ```` with the name of your release (e.g., ``flyte``) - and ```` with the name of your namespace (e.g., ``flyte``). diff --git a/rsts/deployment/plugins/gcp/index.rst b/rsts/deployment/plugins/gcp/index.rst deleted file mode 100644 index 2fcd827ed6..0000000000 --- a/rsts/deployment/plugins/gcp/index.rst +++ /dev/null @@ -1,26 +0,0 @@ -.. _deployment-plugin-setup-gcp: - -Configure GCP Plugins -===================== - -.. tags:: GCP, Integration, Data, Advanced - -Discover the process of setting up GCP plugins for Flyte. - -.. panels:: - :header: text-center - :column: col-lg-12 p-2 - - .. link-button:: deployment-plugin-setup-gcp-bigquery - :type: ref - :text: Google BigQuery - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - Guide to setting up the Google BigQuery plugin. - -.. toctree:: - :maxdepth: 1 - :name: GCP plugin setup - :hidden: - - bigquery diff --git a/rsts/deployment/plugins/index.rst b/rsts/deployment/plugins/index.rst deleted file mode 100644 index d83bd79c54..0000000000 --- a/rsts/deployment/plugins/index.rst +++ /dev/null @@ -1,59 +0,0 @@ -.. _deployment-plugin-setup: - -Plugin Setup -============ - -Flyte integrates with a wide variety of `data, ML and analytical tools `__. -Some of these plugins, such as Databricks, Kubeflow, and Ray integrations, require the Flyte cluster administrator to enable them. - -This section of the *Deployment Guides* will cover how to configure your cluster -to use these plugins in your workflows written in ``flytekit``. - - -.. panels:: - :header: text-center - :column: col-lg-12 p-2 - - .. link-button:: deployment-plugin-setup-k8s - :type: ref - :text: K8s Plugins - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - Guide to setting up the K8s Operator Plugins. - - --- - - .. link-button:: deployment-plugin-setup-webapi - :type: ref - :text: Web API Plugin - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - Guide to setting up the Web API Plugins. - - --- - - .. link-button:: deployment-plugin-setup-aws - :type: ref - :text: AWS Plugins - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - Guide to setting up AWS-specific Plugins. - - --- - - .. link-button:: deployment-plugin-setup-gcp - :type: ref - :text: GCP Plugins - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - Guide to setting up GCP-specific Plugins. - -.. toctree:: - :maxdepth: 1 - :name: Plugin Setup - :hidden: - - k8s/index - aws/index - gcp/index - webapi/index diff --git a/rsts/deployment/plugins/k8s/index.rst b/rsts/deployment/plugins/k8s/index.rst deleted file mode 100644 index 9e81351043..0000000000 --- a/rsts/deployment/plugins/k8s/index.rst +++ /dev/null @@ -1,833 +0,0 @@ -.. _deployment-plugin-setup-k8s: - -Configure Kubernetes Plugins -============================ - -.. tags:: Kubernetes, Integration, Spark, AWS, GCP, Advanced - -This guide provides an overview of setting up the Kubernetes Operator backend plugin in your Flyte deployment. - -Spin up a cluster ------------------ - -.. tabs:: - - .. group-tab:: Flyte binary - - .. tabs:: - - .. group-tab:: Demo cluster - - .. tabs:: - - .. group-tab:: PyTorch - - Enable the PyTorch plugin on the demo cluster by adding the following block to ``~/.flyte/sandbox/config.yaml``: - - .. code-block:: yaml - - tasks: - task-plugins: - default-for-task-types: - container: container - container_array: k8s-array - sidecar: sidecar - pytorch: pytorch - enabled-plugins: - - container - - k8s-array - - sidecar - - pytorch - - .. group-tab:: TensorFlow - - Enable the TensorFlow plugin on the demo cluster by adding the following block to ``~/.flyte/sandbox/config.yaml``: - - .. code-block:: yaml - - tasks: - task-plugins: - default-for-task-types: - container: container - container_array: k8s-array - sidecar: sidecar - tensorflow: tensorflow - enabled-plugins: - - container - - k8s-array - - sidecar - - tensorflow - - .. group-tab:: MPI - - Enable the MPI plugin on the demo cluster by adding the following block to ``~/.flyte/sandbox/config.yaml``: - - .. code-block:: yaml - - tasks: - task-plugins: - default-for-task-types: - container: container - container_array: k8s-array - sidecar: sidecar - mpi: mpi - enabled-plugins: - - container - - k8s-array - - sidecar - - mpi - - .. group-tab:: Ray - - Enable the Ray plugin on the demo cluster by adding the following block to ``~/.flyte/sandbox/config.yaml``: - - .. code-block:: yaml - - tasks: - task-plugins: - default-for-task-types: - container: container - container_array: k8s-array - sidecar: sidecar - ray: ray - enabled-plugins: - - container - - k8s-array - - sidecar - - ray - - .. group-tab:: Spark - - Enable the Spark plugin on the demo cluster by adding the following config to ``~/.flyte/sandbox/config.yaml``: - - .. code-block:: yaml - - tasks: - task-plugins: - default-for-task-types: - container: container - container_array: k8s-array - sidecar: sidecar - spark: spark - enabled-plugins: - - container - - sidecar - - k8s-array - - spark - plugins: - spark: - spark-config-default: - - spark.driver.cores: "1" - - spark.hadoop.fs.s3a.aws.credentials.provider: "org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider" - - spark.hadoop.fs.s3a.endpoint: "http://minio.flyte:9000" - - spark.hadoop.fs.s3a.access.key: "minio" - - spark.hadoop.fs.s3a.secret.key: "miniostorage" - - spark.hadoop.fs.s3a.path.style.access: "true" - - spark.kubernetes.allocation.batch.size: "50" - - spark.hadoop.fs.s3a.acl.default: "BucketOwnerFullControl" - - spark.hadoop.fs.s3n.impl: "org.apache.hadoop.fs.s3a.S3AFileSystem" - - spark.hadoop.fs.AbstractFileSystem.s3n.impl: "org.apache.hadoop.fs.s3a.S3A" - - spark.hadoop.fs.s3.impl: "org.apache.hadoop.fs.s3a.S3AFileSystem" - - spark.hadoop.fs.AbstractFileSystem.s3.impl: "org.apache.hadoop.fs.s3a.S3A" - - spark.hadoop.fs.s3a.impl: "org.apache.hadoop.fs.s3a.S3AFileSystem" - - spark.hadoop.fs.AbstractFileSystem.s3a.impl: "org.apache.hadoop.fs.s3a.S3A" - cluster_resources: - refreshInterval: 5m - customData: - - production: - - projectQuotaCpu: - value: "5" - - projectQuotaMemory: - value: "4000Mi" - - staging: - - projectQuotaCpu: - value: "2" - - projectQuotaMemory: - value: "3000Mi" - - development: - - projectQuotaCpu: - value: "4" - - projectQuotaMemory: - value: "5000Mi" - refresh: 5m - - Also add the following cluster resource templates to the ``~/.flyte/sandbox/cluster-resource-templates`` directory: - - 1. ``serviceaccount.yaml`` - - .. code-block:: yaml - - apiVersion: v1 - kind: ServiceAccount - metadata: - name: default - namespace: "{{ namespace }}" - annotations: - eks.amazonaws.com/role-arn: "{{ defaultIamRole }}" - - 2. ``spark_role.yaml`` - - .. code-block:: yaml - - apiVersion: rbac.authorization.k8s.io/v1 - kind: Role - metadata: - name: spark-role - namespace: "{{ namespace }}" - rules: - - apiGroups: - - "" - resources: - - pods - - services - - configmaps - verbs: - - "*" - - 3. ``spark_service_account.yaml`` - - .. code-block:: yaml - - apiVersion: v1 - kind: ServiceAccount - metadata: - name: spark - namespace: "{{ namespace }}" - annotations: - eks.amazonaws.com/role-arn: "{{ defaultIamRole }}" - - 4. ``spark_role_binding.yaml`` - - .. code-block:: yaml - - apiVersion: rbac.authorization.k8s.io/v1 - kind: RoleBinding - metadata: - name: spark-role-binding - namespace: "{{ namespace }}" - roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: spark-role - subjects: - - kind: ServiceAccount - name: spark - namespace: "{{ namespace }}" - - .. group-tab:: Dask - - Enable the Dask plugin on the demo cluster by adding the following block to ``~/.flyte/sandbox/config.yaml``: - - .. code-block:: yaml - - tasks: - task-plugins: - default-for-task-types: - container: container - container_array: k8s-array - sidecar: sidecar - dask: dask - enabled-plugins: - - container - - k8s-array - - sidecar - - dask - - Start the demo cluster by running the following command: - - .. code-block:: bash - - flytectl demo start - - .. group-tab:: Helm chart - - 1. Add the following to your values file under `configmap.inline`: - - .. code-block:: yaml - - tasks: - task-plugins: - enabled-plugins: - - container - - sidecar - - K8S-ARRAY - - spark - - ray - default-for-task-types: - - container: container - - container_array: K8S-ARRAY - - spark: spark - - ray: ray - - 2. Install the :ref:`flyte-binary Helm chart `. - - .. group-tab:: Flyte core - - If you have installed Flyte using the `flyte-core Helm chart - `__, please ensure: - - * You have the correct kubeconfig and have selected the correct Kubernetes context. - * You have configured the correct flytectl settings in ``~/.flyte/config.yaml``. - -.. note:: - - Add the Flyte chart repo to Helm if you're installing via the Helm charts. - - .. code-block:: bash - - helm repo add flyteorg https://flyteorg.github.io/flyte - -Install the Kubernetes operator -------------------------------- - -.. tabs:: - - .. group-tab:: PyTorch/TensorFlow/MPI - - First, `install kustomize `__. - - Build and apply the training-operator. - - .. code-block:: bash - - export KUBECONFIG=$KUBECONFIG:~/.kube/config:~/.flyte/k3s/k3s.yaml - kustomize build "https://github.com/kubeflow/training-operator.git/manifests/overlays/standalone?ref=v1.5.0" | kubectl apply -f - - - **Optional: Using a gang scheduler** - - To address potential issues with worker pods of distributed training jobs being scheduled at different times - due to resource constraints, you can opt for a gang scheduler. This ensures that all worker pods are scheduled - simultaneously, reducing the likelihood of job failures caused by timeout errors. - - To `enable gang scheduling for the Kubeflow training-operator `__, - you can install the `Kubernetes scheduler plugins `__ - or the `Apache YuniKorn scheduler `__. - - 1. Install the `scheduler plugin `_ or - `Apache YuniKorn `_ as a second scheduler. - 2. Configure the Kubeflow training-operator to use the new scheduler: - - Create a manifest called ``kustomization.yaml`` with the following content: - - .. code-block:: yaml - - apiVersion: kustomize.config.k8s.io/v1beta1 - kind: Kustomization - - resources: - - github.com/kubeflow/training-operator/manifests/overlays/standalone - - patchesStrategicMerge: - - patch.yaml - - Create a patch file called ``patch.yaml`` with the following content: - - .. code-block:: yaml - - apiVersion: apps/v1 - kind: Deployment - metadata: - name: training-operator - spec: - template: - spec: - containers: - - name: training-operator - command: - - /manager - - --gang-scheduler-name= - - Install the patched kustomization with the following command: - - .. code-block:: bash - - kustomize build path/to/overlay/directory | kubectl apply -f - - - (Only for Apache YuniKorn) To configure gang scheduling with Apache YuniKorn, - make sure to set the following annotations in Flyte pod templates: - - - ``template.metadata.annotations.yunikorn.apache.org/task-group-name`` - - ``template.metadata.annotations.yunikorn.apache.org/task-groups`` - - ``template.metadata.annotations.yunikorn.apache.org/schedulingPolicyParameters`` - - For more configuration details, - refer to the `Apache YuniKorn Gang-Scheduling documentation - `__. - - 3. Use a Flyte pod template with ``template.spec.schedulerName: scheduler-plugins-scheduler`` - to use the new gang scheduler for your tasks. - - See the :ref:`using-k8s-podtemplates` section for more information on pod templates in Flyte. - You can set the scheduler name in the pod template passed to the ``@task`` decorator. However, to prevent the - two different schedulers from competing for resources, it is recommended to set the scheduler name in the pod template - in the ``flyte`` namespace which is applied to all tasks. Non distributed training tasks can be scheduled by the - gang scheduler as well. - - - For more information on pod templates in Flyte, refer to the :ref:`using-k8s-podtemplates` section. - You can set the scheduler name in the pod template passed to the ``@task`` decorator. - However, to avoid resource competition between the two different schedulers, - it is recommended to set the scheduler name in the pod template in the ``flyte`` namespace, - which is applied to all tasks. This allows non-distributed training tasks to be - scheduled by the gang scheduler as well. - - .. group-tab:: Ray - - To install the Ray Operator, run the following commands: - - .. code-block:: bash - - export KUBERAY_VERSION=v0.5.2 - kubectl create -k "github.com/ray-project/kuberay/manifests/cluster-scope-resources?ref=${KUBERAY_VERSION}&timeout=90s" - kubectl apply -k "github.com/ray-project/kuberay/manifests/base?ref=${KUBERAY_VERSION}&timeout=90s" - - .. group-tab:: Spark - - To add the Spark repository, run the following commands: - - .. code-block:: bash - - helm repo add spark-operator https://googlecloudplatform.github.io/spark-on-k8s-operator - - To install the Spark operator, run the following command: - - .. code-block:: bash - - helm install spark-operator spark-operator/spark-operator --namespace spark-operator --create-namespace - - .. group-tab:: Dask - - To add the Dask repository, run the following command: - - .. code-block:: bash - - helm repo add dask https://helm.dask.org - - To install the Dask operator, run the following command: - - .. code-block:: bash - - helm install dask-operator dask/dask-kubernetes-operator --namespace dask-operator --create-namespace - -Specify plugin configuration ----------------------------- - -.. tabs:: - - .. group-tab:: PyTorch - - .. tabs:: - - .. group-tab:: Flyte binary - - To specify the plugin when using the Helm chart, edit the relevant YAML file. - - .. code-block:: yaml - :emphasize-lines: 7,11 - - tasks: - task-plugins: - enabled-plugins: - - container - - sidecar - - k8s-array - - pytorch - default-for-task-types: - - container: container - - container_array: k8s-array - - pytorch: pytorch - - .. group-tab:: Flyte core - - Create a file named ``values-override.yaml`` and add the following config to it: - - .. code-block:: yaml - - configmap: - enabled_plugins: - tasks: - task-plugins: - enabled-plugins: - - container - - sidecar - - k8s-array - - pytorch - default-for-task-types: - container: container - sidecar: sidecar - container_array: k8s-array - pytorch: pytorch - - .. group-tab:: TensorFlow - - .. tabs:: - - .. group-tab:: Flyte binary - - To specify the plugin when using the Helm chart, edit the relevant YAML file. - - .. code-block:: yaml - :emphasize-lines: 7,11 - - tasks: - task-plugins: - enabled-plugins: - - container - - sidecar - - k8s-array - - tensorflow - default-for-task-types: - - container: container - - container_array: k8s-array - - tensorflow: tensorflow - - .. group-tab:: Flyte core - - Create a file named ``values-override.yaml`` and add the following config to it: - - .. code-block:: yaml - - configmap: - enabled_plugins: - tasks: - task-plugins: - enabled-plugins: - - container - - sidecar - - k8s-array - - tensorflow - default-for-task-types: - container: container - sidecar: sidecar - container_array: k8s-array - tensorflow: tensorflow - - .. group-tab:: MPI - - .. tabs:: - - .. group-tab:: Flyte binary - - To specify the plugin when using the Helm chart, edit the relevant YAML file. - - .. code-block:: yaml - :emphasize-lines: 7,11 - - tasks: - task-plugins: - enabled-plugins: - - container - - sidecar - - k8s-array - - mpi - default-for-task-types: - - container: container - - container_array: k8s-array - - mpi: mpi - - .. group-tab:: Flyte core - - Create a file named ``values-override.yaml`` and add the following config to it: - - .. code-block:: yaml - - configmap: - enabled_plugins: - tasks: - task-plugins: - enabled-plugins: - - container - - sidecar - - k8s-array - - mpi - default-for-task-types: - container: container - sidecar: sidecar - container_array: k8s-array - mpi: mpi - - .. group-tab:: Ray - - .. tabs:: - - .. group-tab:: Flyte binary - - 1. Make sure that your Helm values file includes the following configuration: - - .. code-block:: yaml - - configuration: - inline: - tasks: - task-plugins: - enabled-plugins: - - container - - sidecar - - k8s-array - - ray - default-for-task-types: - - container: container - - container_array: k8s-array - - ray: ray - - rbac: - extraRules: - - apiGroups: - - "ray.io" - resources: - - rayjob - verbs: - - create - - get - - list - - patch - - update - - 2. Run a ``helm upgrade`` operation - - .. group-tab:: Flyte core - - Create a file named ``values-override.yaml`` and add the following config to it: - - .. code-block:: yaml - - configmap: - enabled_plugins: - tasks: - task-plugins: - enabled-plugins: - - container - - sidecar - - k8s-array - - ray - default-for-task-types: - container: container - sidecar: sidecar - container_array: k8s-array - ray: ray - - .. group-tab:: Spark - - .. tabs:: - - .. group-tab:: Flyte binary - - To specify the plugin when using the Helm chart, edit the relevant YAML file. - - .. group-tab:: Flyte core - - Create a file named ``values-override.yaml`` and add the following config to it: - - .. code-block:: yaml - - cluster_resource_manager: - enabled: true - config: - cluster_resources: - refreshInterval: 5m - templatePath: "/etc/flyte/clusterresource/templates" - customData: - - production: - - projectQuotaCpu: - value: "5" - - projectQuotaMemory: - value: "4000Mi" - - staging: - - projectQuotaCpu: - value: "2" - - projectQuotaMemory: - value: "3000Mi" - - development: - - projectQuotaCpu: - value: "4" - - projectQuotaMemory: - value: "3000Mi" - refresh: 5m - - # -- Resource templates that should be applied - templates: - # -- Template for namespaces resources - - key: aa_namespace - value: | - apiVersion: v1 - kind: Namespace - metadata: - name: {{ namespace }} - spec: - finalizers: - - kubernetes - - - key: ab_project_resource_quota - value: | - apiVersion: v1 - kind: ResourceQuota - metadata: - name: project-quota - namespace: {{ namespace }} - spec: - hard: - limits.cpu: {{ projectQuotaCpu }} - limits.memory: {{ projectQuotaMemory }} - - - key: ac_spark_role - value: | - apiVersion: rbac.authorization.k8s.io/v1beta1 - kind: Role - metadata: - name: spark-role - namespace: {{ namespace }} - rules: - - apiGroups: ["*"] - resources: - - pods - verbs: - - '*' - - apiGroups: ["*"] - resources: - - services - verbs: - - '*' - - apiGroups: ["*"] - resources: - - configmaps - verbs: - - '*' - - - key: ad_spark_service_account - value: | - apiVersion: v1 - kind: ServiceAccount - metadata: - name: spark - namespace: {{ namespace }} - - - key: ae_spark_role_binding - value: | - apiVersion: rbac.authorization.k8s.io/v1beta1 - kind: RoleBinding - metadata: - name: spark-role-binding - namespace: {{ namespace }} - roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: spark-role - subjects: - - kind: ServiceAccount - name: spark - namespace: {{ namespace }} - - sparkoperator: - enabled: true - plugin_config: - plugins: - spark: - # Edit the Spark configuration as you see fit - spark-config-default: - - spark.driver.cores: "1" - - spark.hadoop.fs.s3a.aws.credentials.provider: "com.amazonaws.auth.DefaultAWSCredentialsProviderChain" - - spark.kubernetes.allocation.batch.size: "50" - - spark.hadoop.fs.s3a.acl.default: "BucketOwnerFullControl" - - spark.hadoop.fs.s3n.impl: "org.apache.hadoop.fs.s3a.S3AFileSystem" - - spark.hadoop.fs.AbstractFileSystem.s3n.impl: "org.apache.hadoop.fs.s3a.S3A" - - spark.hadoop.fs.s3.impl: "org.apache.hadoop.fs.s3a.S3AFileSystem" - - spark.hadoop.fs.AbstractFileSystem.s3.impl: "org.apache.hadoop.fs.s3a.S3A" - - spark.hadoop.fs.s3a.impl: "org.apache.hadoop.fs.s3a.S3AFileSystem" - - spark.hadoop.fs.AbstractFileSystem.s3a.impl: "org.apache.hadoop.fs.s3a.S3A" - - spark.network.timeout: 600s - - spark.executorEnv.KUBERNETES_REQUEST_TIMEOUT: 100000 - - spark.executor.heartbeatInterval: 60s - configmap: - enabled_plugins: - tasks: - task-plugins: - enabled-plugins: - - container - - sidecar - - k8s-array - - spark - default-for-task-types: - container: container - sidecar: sidecar - container_array: k8s-array - spark: spark - - .. group-tab:: Dask - - .. tabs:: - - .. group-tab:: Flyte binary - - Edit the relevant YAML file to specify the plugin. - - .. code-block:: yaml - :emphasize-lines: 7,11 - - tasks: - task-plugins: - enabled-plugins: - - container - - sidecar - - k8s-array - - dask - default-for-task-types: - - container: container - - container_array: k8s-array - - dask: dask - - .. group-tab:: Flyte core - - Create a file named ``values-override.yaml`` and add the following config to it: - - .. code-block:: yaml - - configmap: - enabled_plugins: - tasks: - task-plugins: - enabled-plugins: - - container - - sidecar - - k8s-array - - dask - default-for-task-types: - container: container - sidecar: sidecar - container_array: k8s-array - dask: dask - -Upgrade the deployment ----------------------- - -.. tabs:: - - .. group-tab:: Flyte binary - - If you are installing Flyte via the Helm chart, run the following command: - - .. note:: - - There is no need to run ``helm upgrade`` for Spark. - - .. code-block:: bash - - helm upgrade flyteorg/flyte-binary -n --values - - Replace ```` with the name of your release (e.g., ``flyte-backend``), - ```` with the name of your namespace (e.g., ``flyte``), - and ```` with the name of your YAML file. - - .. group-tab:: Flyte core - - .. code-block:: bash - - helm upgrade flyte/flyte-core -n --values values-override.yaml - - Replace ```` with the name of your release (e.g., ``flyte``) - and ```` with the name of your namespace (e.g., ``flyte``). - -Wait for the upgrade to complete. You can check the status of the deployment pods by running the following command: - -.. code-block:: bash - - kubectl get pods -n --all-namespaces diff --git a/rsts/deployment/plugins/webapi/databricks.rst b/rsts/deployment/plugins/webapi/databricks.rst deleted file mode 100644 index ee38a481df..0000000000 --- a/rsts/deployment/plugins/webapi/databricks.rst +++ /dev/null @@ -1,451 +0,0 @@ -.. _deployment-plugin-setup-webapi-databricks: - -Databricks Plugin -================= - -This guide provides an overview of how to set up Databricks in your Flyte deployment. - -Spin up a cluster ------------------ - -.. tabs:: - - .. group-tab:: Flyte binary - - You can spin up a demo cluster using the following command: - - .. code-block:: bash - - flytectl demo start - - Or install Flyte using the :ref:`flyte-binary helm chart `. - - .. group-tab:: Flyte core - - If you've installed Flyte using the - `flyte-core helm chart `__, please ensure: - - * You have the correct kubeconfig and have selected the correct Kubernetes context. - * You have configured the correct flytectl settings in ``~/.flyte/config.yaml``. - -.. note:: - - Add the Flyte chart repo to Helm if you're installing via the Helm charts. - - .. code-block:: bash - - helm repo add flyteorg https://flyteorg.github.io/flyte - -Databricks workspace --------------------- - -To set up your Databricks account, follow these steps: - -1. Create a `Databricks account `__. - -.. image:: https://raw.githubusercontent.com/flyteorg/static-resources/main/flyte/deployment/plugins/databricks/databricks_workspace.png - :alt: A screenshot of Databricks workspace creation. - -2. Ensure that you have a Databricks workspace up and running. - -.. image:: https://raw.githubusercontent.com/flyteorg/static-resources/main/flyte/deployment/plugins/databricks/open_workspace.png - :alt: A screenshot of Databricks workspace. - -3. Generate a `personal access token - `__ to be used in the Flyte configuration. - You can find the personal access token in the user settings within the workspace. ``User settings`` -> ``Developer`` -> ``Access tokens`` - -.. image:: https://raw.githubusercontent.com/flyteorg/static-resources/main/flyte/deployment/plugins/databricks/databricks_access_token.png - :alt: A screenshot of access token. - -4. Enable custom containers on your Databricks cluster before you trigger the workflow. - -.. code-block:: bash - - curl -X PATCH -n -H "Authorization: Bearer " \ - https:///api/2.0/workspace-conf \ - -d '{"enableDcs": "true"}' - -For more detail, check `custom containers `__. - -5. Create an `instance profile -`__ -for the Spark cluster. This profile enables the Spark job to access your data in the S3 bucket. - -Create an instance profile using the AWS console (For AWS Users) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -1. In the AWS console, go to the IAM service. -2. Click the Roles tab in the sidebar. -3. Click Create role. - - a. Under Trusted entity type, select AWS service. - b. Under Use case, select **EC2**. - c. Click Next. - d. At the bottom of the page, click Next. - e. In the Role name field, type a role name. - f. Click Create role. - -4. In the role list, click the **AmazonS3FullAccess** role. -5. Click Create role button. - -In the role summary, copy the Role ARN. - -.. image:: https://raw.githubusercontent.com/flyteorg/static-resources/main/flyte/deployment/plugins/databricks/s3_arn.png - :alt: A screenshot of s3 arn. - -Locate the IAM role that created the Databricks deployment -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -If you don’t know which IAM role created the Databricks deployment, do the following: - -1. As an account admin, log in to the account console. -2. Go to ``Workspaces`` and click your workspace name. -3. In the Credentials box, note the role name at the end of the Role ARN - -For example, in the Role ARN ``arn:aws:iam::123456789123:role/finance-prod``, the role name is finance-prod - -Edit the IAM role that created the Databricks deployment -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -1. In the AWS console, go to the IAM service. -2. Click the Roles tab in the sidebar. -3. Click the role that created the Databricks deployment. -4. On the Permissions tab, click the policy. -5. Click Edit Policy. -6. Append the following block to the end of the Statement array. Ensure that you don’t overwrite any of the existing policy. Replace with the role you created in Configure S3 access with instance profiles. - -.. code-block:: bash - - { - "Effect": "Allow", - "Action": "iam:PassRole", - "Resource": "arn:aws:iam:::role/" - } - - -6. Upload the following ``entrypoint.py`` file to either -`DBFS `__ -(the final path will be ``dbfs:///FileStore/tables/entrypoint.py``) or S3. -This file will be executed by the Spark driver node, overriding the default command of the -`Databricks `__ job. This entrypoint file will - -1. Download the inputs from S3 to the local filesystem. -2. Execute the spark task. -3. Upload the outputs from the local filesystem to S3 for the downstream tasks to consume. - - -.. image:: https://raw.githubusercontent.com/flyteorg/static-resources/main/flyte/deployment/plugins/databricks/dbfs.png - :alt: A screenshot of dbfs. - -.. code-block:: python - - import os - import sys - from typing import List - - import click - import pandas - from flytekit.bin.entrypoint import fast_execute_task_cmd as _fast_execute_task_cmd - from flytekit.bin.entrypoint import execute_task_cmd as _execute_task_cmd - from flytekit.exceptions.user import FlyteUserException - from flytekit.tools.fast_registration import download_distribution - - - def fast_execute_task_cmd(additional_distribution: str, dest_dir: str, task_execute_cmd: List[str]): - if additional_distribution is not None: - if not dest_dir: - dest_dir = os.getcwd() - download_distribution(additional_distribution, dest_dir) - - # Insert the call to fast before the unbounded resolver args - cmd = [] - for arg in task_execute_cmd: - if arg == "--resolver": - cmd.extend(["--dynamic-addl-distro", additional_distribution, "--dynamic-dest-dir", dest_dir]) - cmd.append(arg) - - click_ctx = click.Context(click.Command("dummy")) - parser = _execute_task_cmd.make_parser(click_ctx) - args, _, _ = parser.parse_args(cmd[1:]) - _execute_task_cmd.callback(test=False, **args) - - - def main(): - args = sys.argv - click_ctx = click.Context(click.Command("dummy")) - if args[1] == "pyflyte-fast-execute": - parser = _fast_execute_task_cmd.make_parser(click_ctx) - args, _, _ = parser.parse_args(args[2:]) - fast_execute_task_cmd(**args) - elif args[1] == "pyflyte-execute": - parser = _execute_task_cmd.make_parser(click_ctx) - args, _, _ = parser.parse_args(args[2:]) - _execute_task_cmd.callback(test=False, dynamic_addl_distro=None, dynamic_dest_dir=None, **args) - else: - raise FlyteUserException(f"Unrecognized command: {args[1:]}") - - - if __name__ == '__main__': - main() - -Specify plugin configuration ----------------------------- -.. note:: - - Demo cluster saves the data to minio, but Databricks job saves the data to S3. - Therefore, you need to update the AWS credentials for the single binary deployment, so the pod can - access the S3 bucket that DataBricks job writes to. - - -.. tabs:: - - .. group-tab:: Flyte binary - - .. tabs:: - - .. group-tab:: Demo cluster - - Enable the Databricks plugin on the demo cluster by adding the following config to ``~/.flyte/sandbox/config.yaml``: - - .. code-block:: yaml - - tasks: - task-plugins: - default-for-task-types: - container: container - container_array: k8s-array - sidecar: sidecar - spark: databricks - enabled-plugins: - - container - - sidecar - - k8s-array - - databricks - plugins: - databricks: - entrypointFile: dbfs:///FileStore/tables/entrypoint.py - databricksInstance: .cloud.databricks.com - k8s: - default-env-vars: - - FLYTE_AWS_ACCESS_KEY_ID: - - FLYTE_AWS_SECRET_ACCESS_KEY: - - AWS_DEFAULT_REGION: - remoteData: - region: - scheme: aws - signedUrls: - durationMinutes: 3 - propeller: - rawoutput-prefix: s3:/// - storage: - container: "" - type: s3 - stow: - kind: s3 - config: - region: - disable_ssl: true - v2_signing: false - auth_type: accesskey - access_key_id: - secret_key: - signedURL: - stowConfigOverride: - endpoint: "" - - Substitute ```` with the name of your Databricks account, - ```` with the region where you created your AWS bucket, - ```` with your AWS access key ID, - ```` with your AWS secret access key, - and ```` with the name of your S3 bucket. - - .. group-tab:: Helm chart - - Edit the relevant YAML file to specify the plugin. - - .. code-block:: yaml - :emphasize-lines: 7,11 - - tasks: - task-plugins: - enabled-plugins: - - container - - sidecar - - k8s-array - - databricks - default-for-task-types: - - container: container - - container_array: k8s-array - - spark: databricks - - .. code-block:: yaml - :emphasize-lines: 3-5 - - inline: - plugins: - databricks: - entrypointFile: dbfs:///FileStore/tables/entrypoint.py - databricksInstance: .cloud.databricks.com - - Substitute ```` with the name of your Databricks account. - - .. group-tab:: Flyte core - - Create a file named ``values-override.yaml`` and add the following config to it: - - .. code-block:: yaml - :emphasize-lines: 9,14,15-21 - - configmap: - enabled_plugins: - tasks: - task-plugins: - enabled-plugins: - - container - - sidecar - - k8s-array - - databricks - default-for-task-types: - container: container - sidecar: sidecar - container_array: k8s-array - spark: databricks - databricks: - enabled: True - plugin_config: - plugins: - databricks: - entrypointFile: dbfs:///FileStore/tables/entrypoint.py - databricksInstance: .cloud.databricks.com - - Substitute ```` with the name of your Databricks account. - -Add the Databricks access token -------------------------------- - -Add the Databricks access token to FlytePropeller: - -.. tabs:: - - .. group-tab:: Flyte binary - - .. tabs:: - - .. group-tab:: Demo cluster - - Add the access token as an environment variable to the ``flyte-sandbox`` deployment. - - .. code-block:: bash - - kubectl edit deploy flyte-sandbox -n flyte - - Update the ``env`` configuration: - - .. code-block:: yaml - :emphasize-lines: 12-13 - - env: - - name: POD_NAME - valueFrom: - fieldRef: - apiVersion: v1 - fieldPath: metadata.name - - name: POD_NAMESPACE - valueFrom: - fieldRef: - apiVersion: v1 - fieldPath: metadata.namespace - - name: FLYTE_SECRET_FLYTE_DATABRICKS_API_TOKEN - value: - image: flyte-binary:sandbox - ... - - .. group-tab:: Helm chart - - Create an external secret as follows: - - .. code-block:: bash - - cat < - EOF - - Reference the newly created secret in - ``.Values.configuration.auth.clientSecretsExternalSecretRef`` - in your YAML file as follows: - - .. code-block:: yaml - :emphasize-lines: 3 - - configuration: - auth: - clientSecretsExternalSecretRef: flyte-binary-client-secrets-external-secret - - Replace ```` with your access token. - - .. group-tab:: Flyte core - - Add the access token as a secret to ``flyte-secret-auth``. - - .. code-block:: bash - - kubectl edit secret -n flyte flyte-secret-auth - - .. code-block:: yaml - :emphasize-lines: 3 - - apiVersion: v1 - data: - FLYTE_DATABRICKS_API_TOKEN: - kind: Secret - ... - - Replace ```` with your access token. - -Upgrade the deployment ----------------------- - -.. tabs:: - - .. group-tab:: Flyte binary - - .. tabs:: - - .. group-tab:: Demo cluster - - .. code-block:: bash - - kubectl rollout restart deployment flyte-sandbox -n flyte - - .. group-tab:: Helm chart - - .. code-block:: bash - - helm upgrade flyteorg/flyte-binary -n --values - - Replace ```` with the name of your release (e.g., ``flyte-backend``), - ```` with the name of your namespace (e.g., ``flyte``), - and ```` with the name of your YAML file. - - .. group-tab:: Flyte core - - .. code-block:: - - helm upgrade flyte/flyte-core -n --values values-override.yaml - - Replace ```` with the name of your release (e.g., ``flyte``) - and ```` with the name of your namespace (e.g., ``flyte``). - -Wait for the upgrade to complete. You can check the status of the deployment pods by running the following command: - -.. code-block:: - - kubectl get pods -n flyte - -For databricks plugin on the Flyte cluster, please refer to `Databricks Plugin Example `_ diff --git a/rsts/deployment/plugins/webapi/index.rst b/rsts/deployment/plugins/webapi/index.rst deleted file mode 100644 index c54cb3cb87..0000000000 --- a/rsts/deployment/plugins/webapi/index.rst +++ /dev/null @@ -1,39 +0,0 @@ -.. _deployment-plugin-setup-webapi: - -Configure Web APIs -================== - -.. tags:: WebAPI, Integration, Data, Advanced - -Discover the process of setting up Web API plugins for Flyte. - -.. panels:: - :header: text-center - :column: col-lg-12 p-2 - - .. link-button:: deployment-plugin-setup-webapi-snowflake - :type: ref - :text: Snowflake Plugin - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - Guide to setting up the Snowflake plugin. - - --- - - .. link-button:: deployment-plugin-setup-webapi-databricks - :type: ref - :text: Databricks Plugin - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - Guide to setting up the Databricks plugin. - - -.. toctree:: - :maxdepth: 1 - :name: Web API plugin setup - :hidden: - - snowflake - databricks - - diff --git a/rsts/deployment/plugins/webapi/snowflake.rst b/rsts/deployment/plugins/webapi/snowflake.rst deleted file mode 100644 index ac1faaa9dc..0000000000 --- a/rsts/deployment/plugins/webapi/snowflake.rst +++ /dev/null @@ -1,245 +0,0 @@ -.. _deployment-plugin-setup-webapi-snowflake: - -Snowflake Plugin -================ - -This guide provides an overview of how to set up Snowflake in your Flyte deployment. - -Spin up a cluster ------------------ - -.. tabs:: - - .. group-tab:: Flyte binary - - You can spin up a demo cluster using the following command: - - .. code-block:: bash - - flytectl demo start - - Or install Flyte using the :ref:`flyte-binary helm chart `. - - .. group-tab:: Flyte core - - If you've installed Flyte using the - `flyte-core helm chart `__, - please ensure: - - * You have the correct kubeconfig and have selected the correct Kubernetes context. - * You have configured the correct flytectl settings in ``~/.flyte/config.yaml``. - -.. note:: - - Add the Flyte chart repo to Helm if you're installing via the Helm charts. - - .. code-block:: bash - - helm repo add flyteorg https://flyteorg.github.io/flyte - -Specify plugin configuration ----------------------------- - -.. tabs:: - - .. group-tab:: Flyte binary - - .. tabs:: - - .. group-tab:: Demo cluster - - Enable the Snowflake plugin on the demo cluster by adding the following block to ``~/.flyte/sandbox/config.yaml``: - - .. code-block:: yaml - - tasks: - task-plugins: - default-for-task-types: - container: container - container_array: k8s-array - sidecar: sidecar - snowflake: snowflake - enabled-plugins: - - container - - k8s-array - - sidecar - - snowflake - - .. group-tab:: Helm chart - - Edit the relevant YAML file to specify the plugin. - - .. code-block:: yaml - :emphasize-lines: 7,11 - - tasks: - task-plugins: - enabled-plugins: - - container - - sidecar - - k8s-array - - snowflake - default-for-task-types: - - container: container - - container_array: k8s-array - - snowflake: snowflake - - .. group-tab:: Flyte core - - Create a file named ``values-override.yaml`` and add the following config to it: - - .. code-block:: yaml - - configmap: - enabled_plugins: - # -- Tasks specific configuration [structure](https://pkg.go.dev/github.com/flyteorg/flytepropeller/pkg/controller/nodes/task/config#GetConfig) - tasks: - # -- Plugins configuration, [structure](https://pkg.go.dev/github.com/flyteorg/flytepropeller/pkg/controller/nodes/task/config#TaskPluginConfig) - task-plugins: - # -- [Enabled Plugins](https://pkg.go.dev/github.com/flyteorg/flyteplugins/go/tasks/config#Config). Enable sagemaker*, athena if you install the backend - # plugins - enabled-plugins: - - container - - sidecar - - k8s-array - - snowflake - default-for-task-types: - container: container - sidecar: sidecar - container_array: k8s-array - snowflake: snowflake - -Obtain and add the Snowflake JWT token --------------------------------------- - -Create a Snowflake account, and follow the `Snowflake docs -`__ -to generate a JWT token. -Then, add the Snowflake JWT token to FlytePropeller. - -.. tabs:: - - .. group-tab:: Flyte binary - - .. tabs:: - - .. group-tab:: Demo cluster - - Add the JWT token as an environment variable to the ``flyte-sandbox`` deployment. - - .. code-block:: bash - - kubectl edit deploy flyte-sandbox -n flyte - - Update the ``env`` configuration: - - .. code-block:: yaml - :emphasize-lines: 12-13 - - env: - - name: POD_NAME - valueFrom: - fieldRef: - apiVersion: v1 - fieldPath: metadata.name - - name: POD_NAMESPACE - valueFrom: - fieldRef: - apiVersion: v1 - fieldPath: metadata.namespace - - name: FLYTE_SECRET_FLYTE_SNOWFLAKE_CLIENT_TOKEN - value: - image: flyte-binary:sandbox - ... - - .. group-tab:: Helm chart - - Create an external secret as follows: - - .. code-block:: bash - - cat < - EOF - - Reference the newly created secret in - ``.Values.configuration.auth.clientSecretsExternalSecretRef`` - in your YAML file as follows: - - .. code-block:: yaml - :emphasize-lines: 3 - - configuration: - auth: - clientSecretsExternalSecretRef: flyte-binary-client-secrets-external-secret - - Replace ```` with your JWT token. - - .. group-tab:: Flyte core - - Add the JWT token as a secret to ``flyte-secret-auth``. - - .. code-block:: bash - - kubectl edit secret -n flyte flyte-secret-auth - - .. code-block:: yaml - :emphasize-lines: 3 - - apiVersion: v1 - data: - FLYTE_SNOWFLAKE_CLIENT_TOKEN: - client_secret: Zm9vYmFy - kind: Secret - ... - - Replace ```` with your JWT token. - -Upgrade the deployment ----------------------- - -.. tabs:: - - .. group-tab:: Flyte binary - - .. tabs:: - - .. group-tab:: Demo cluster - - .. code-block:: bash - - kubectl rollout restart deployment flyte-sandbox -n flyte - - .. group-tab:: Helm chart - - .. code-block:: bash - - helm upgrade flyteorg/flyte-binary -n --values - - Replace ```` with the name of your release (e.g., ``flyte-backend``), - ```` with the name of your namespace (e.g., ``flyte``), - and ```` with the name of your YAML file. - - .. group-tab:: Flyte core - - .. code-block:: - - helm upgrade flyte/flyte-core -n --values values-override.yaml - - Replace ```` with the name of your release (e.g., ``flyte``) - and ```` with the name of your namespace (e.g., ``flyte``). - -Wait for the upgrade to complete. You can check the status of the deployment pods by running the following command: - -.. code-block:: - - kubectl get pods -n flyte - -For snowflake plugin on the Flyte cluster, please refer to `Snowflake Plugin Example `_ diff --git a/rsts/deployment/security/index.rst b/rsts/deployment/security/index.rst deleted file mode 100644 index 6beccb5f95..0000000000 --- a/rsts/deployment/security/index.rst +++ /dev/null @@ -1,132 +0,0 @@ -.. _deployment-security-overview: - -################### -Security Overview -################### - -.. tags:: Kubernetes, Infrastructure, Advanced - -Here we cover the security aspects of running your flyte deployments. In the current state, we will cover the user -used for running the flyte services, and go through why we do this and not run them as a root user. - -************************ -Using the Non-root User -************************ - -It's considered to be a best practice to use a non-root user for security because -running in a constrained permission environment will prevent any malicious code -from utilizing the full permissions of the host `Ref `__ -Moreover, in certain container platforms like `OpenShift `__, -running non-root containers is mandatory. - -Flyte uses OCI-compatible container technology like Docker for container packaging, -and by default, its containers run as root. This gives full permissions to the -system but may not be suitable for production deployments where a security breach -could comprise your application deployments. - -.. important:: - - As a Flyte administrator, it's up to you a to enforce whatever policy complies - with the conventions and regulations of your industry/application. - -******* -Changes -******* - -A new user group and user have been added to the Docker files for all the Flyte components: -`Flyteadmin `__, -`Flytepropeller `__, -`Datacatalog `__, -`Flyteconsole `__. - -And Dockerfile uses the `USER command `__, which sets the user -and group, that's used for running the container. - -Additionally, the k8s manifest files for the flyte components define the overridden security context with the created -user and group to run them. The following shows the overridden security context added for flyteadmin -`Flyteadmin `__. - - -************ -Why override -************ -Certain init-containers still require root permissions, and hence we are required to override the security -context for these. -For example: in the case of `Flyteadmin `__, -the init container of check-db-ready that runs postgres-provided docker image cannot resolve the host for the checks and fails. This is mostly due to no read -permissions on etc/hosts file. Only the check-db-ready container is run using the root user, which we will also plan to fix. - - -************ -OAuth -************ -Flytectl requires CA-certified SSL cert for OAuth to work. Using a self-signed certificate throws the following error: - -.. code-block:: - - certificate is not standards compliant. - -There are two options to fix this: - -#. Switch to a full external OAuth Provider (okta, GCP cloud identity, keycloak, Azure AD, etc.). -#. Use a CA-certified SSL cert. - -******************************************************** -Running flyteadmin and flyteconsole on different domains -******************************************************** - -In some cases when flyteadmin and flyteconsole are running on different domains, -you'll would need to allow the flyteadmin's domain to allow cross origin request -from the flyteconsole's domain. Here are all the domains/namespaces to keep in -mind: - -- ````: the domain which will get the request. -- ````: the domain which will be sending the request as the originator. -- ````: the k8s namespace where your flyteconsole pod is running. -- ````: the k8s namespace where your flyteadmin pod is running. - -Modify FlyteAdmin Config -======================== - -To modify the FlyteConsole deployment to use ````, do the following: - -.. prompt:: bash $ - - kubectl edit deployment flyteconsole -n - -.. code-block:: yaml - - - env: - - name: ENABLE_GA - value: "true" - - name: GA_TRACKING_ID - value: G-0123456789 - - name: ADMIN_API_URL - value: https:// - -Rollout FlyteConsole - -.. prompt:: bash $ - - kubectl rollout restart deployment/flyteconsole -n - -Modify the flyte-admin-config as follows: - -.. prompt:: bash $ - - kubectl edit configmap flyte-admin-config -n - -.. code-block:: yaml - - security: - allowCors: true - ...... - allowedOrigins: - - 'https://' - ...... - -Finally, rollout FlyteAdmin - -.. prompt:: bash $ - - kubectl rollout restart deployment/flyteadmin -n diff --git a/rsts/images/flyte-and-lf.png b/rsts/images/flyte-and-lf.png deleted file mode 100644 index 47c8958805dcbe8a263900d79b02aef53b0d68f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 166426 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%0A)A#n%{mBmLs`Y{3GXpkvz}^3*Nku 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

o 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 diff --git a/rsts/images/flyte_lockup_gradient_on_light.png b/rsts/images/flyte_lockup_gradient_on_light.png deleted file mode 100644 index 1f986f45adae87bbf319c33f6cca89bba7a6eb7b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17200 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 - |book-reader| User Guide - |chalkboard| Tutorials - |project-diagram| Concepts - |rocket| Deployment and Administration - |book| API Reference - |hands-helping| Community - -.. toctree:: - :caption: Concepts - :maxdepth: -1 - :name: divedeeptoc - :hidden: - - concepts/basics - concepts/control_plane - concepts/architecture - -.. toctree:: - :caption: Deployment - :maxdepth: -1 - :name: deploymenttoc - :hidden: - - deployment/index - deployment/deployment/index - deployment/plugins/index - deployment/agents/index - deployment/configuration/index - deployment/configuration/generated/index - deployment/security/index - - -.. toctree:: - :caption: Community - :maxdepth: -1 - :name: roadmaptoc - :hidden: - - Community - community/contribute - community/roadmap - Frequently Asked Questions - community/troubleshoot - -.. toctree:: - :caption: API Reference - :maxdepth: -1 - :name: apireference - :hidden: - - API Reference - - -************************************************* -Production-grade Data and ML Workflows Made Easy -************************************************* - -.. image:: https://img.shields.io/badge/Graduate%20Project-Linux%20Foundation-purple?style=for-the-badge - :target: https://lfaidata.foundation/projects/flyte/ - :alt: Linux Foundation - -.. image:: https://img.shields.io/github/stars/flyteorg/flyte?label=github&logo=github&style=for-the-badge - :target: https://github.com/flyteorg/flyte - :alt: GitHub Repo stars - -.. image:: https://img.shields.io/github/release/flyteorg/flyte.svg?style=for-the-badge&color=blue - :target: https://github.com/flyteorg/flyte/releases/latest - :alt: Flyte Release - -.. image:: https://img.shields.io/github/actions/workflow/status/flyteorg/flyte/tests.yml?label=tests&style=for-the-badge - :target: https://github.com/flyteorg/flyte/actions/workflows/tests.yml - :alt: GitHub Test Status - -.. image:: https://img.shields.io/github/actions/workflow/status/flyteorg/flyte/sandbox.yml?label=Sandbox%20docker%20image&style=for-the-badge - :target: https://github.com/flyteorg/flyte/actions/workflows/sandbox.yml - :alt: GitHub Sandbox Status - -.. image:: https://img.shields.io/github/milestones/closed/flyteorg/flyte?style=for-the-badge - :target: https://github.com/flyteorg/flyte/milestones?state=closed - :alt: Completed Milestones - -.. image:: https://img.shields.io/pypi/dm/flytekit?color=blue&label=flytekit%20downloads&style=for-the-badge&logo=pypi&logoColor=white - :target: https://github.com/flyteorg/flytekit - :alt: Flytekit Downloads - -.. image:: https://img.shields.io/badge/Slack-Chat-pink?style=for-the-badge&logo=slack - :target: https://slack.flyte.org - :alt: Flyte Slack - -.. image:: https://img.shields.io/badge/LICENSE-Apache2.0-ff69b4.svg?style=for-the-badge - :target: http://www.apache.org/licenses/LICENSE-2.0.html - :alt: License - -.. raw:: html - -

- Highly scalable and flexible workflow orchestration for prototyping and production -

- -`Flyte Tags <_tags/tagsindex.html>`__ - -`Flyte `__ is an open-source, Kubernetes-native -workflow orchestrator implemented in `Go `__. It enables highly -concurrent, scalable and reproducible workflows for data processing, machine -learning and analytics. - -Created at `Lyft `__ in collaboration with Spotify, -Freenome, and many others, Flyte provides first-class support for -`Python `__, -`Java, and Scala `__. Data Scientists -and ML Engineers in the industry use Flyte to create: - -- ETL pipelines for petabyte-scale data processing. -- Analytics workflows for business and finance use cases. -- Machine learning pipelines for logistics, image processing, and cancer diagnostics. - -Explore Flyte -============= - -Get a birds-eye view 🦅 of Flyte at the `official website `__: - -.. panels:: - :header: text-center - :column: col-lg-12 p-2 - - .. link-button:: https://flyte.org/features - :type: url - :text: ⭐️ Core features - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - From strongly typed interfaces to container-native DAGs, Flyte mitigates the - trade-off between scalability and usability. - - --- - - .. link-button:: https://flyte.org/integrations - :type: url - :text: 🤝 Integrations - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - From strongly typed interfaces to container-native DAGs, Flyte mitigates the - trade-off between scalability and usability. - - --- - - .. link-button:: https://flyte.org/airflow-alternative - :type: url - :text: 💨 Flyte vs Airflow - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - Say goodbye to Airflow versioning pain and stepping over your teammate's toes - when you change your package versions. Ouch! - - --- - - .. link-button:: https://flyte.org/kubeflow-alternative - :type: url - :text: 🔁 Flyte vs Kubeflow - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - Unintuitive Python DSL boilerplate got you down? With ``flytekit`` you just - write Python code and Flyte compiles down to type-safe execution graphs. - - --- - - .. link-button:: https://flyte.org/blog - :type: url - :text: 📝 Blog - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - Learn more about orchestration, Flyte, and everything in between. - - --- - - .. link-button:: https://flyte.org/events - :type: url - :text: 🗓 Events - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - Keep up-to-date with Flyte's upcoming talks, conferences, and more. - - -Learn Flyte -=========== - -The following main sections in the documentation will guide you through your -Flyte journey, whether you want to write Flyte workflows, deploy the Flyte -platform to your K8s cluster, or extend and contribute its architecture and -design. - -.. panels:: - :header: text-center - :column: col-lg-12 p-2 - - .. link-button:: cookbook:getting_started_index - :type: ref - :text: 🔤 Getting Started - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - Get your first workflow running, learn about the Flyte development lifecycle, - and see the core use cases that Flyte enables. - - --- - - .. link-button:: cookbook:userguide - :type: ref - :text: 📖 User Guide - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - A comprehensive view of Flyte's functionality for data scientists, ML engineers, - data engineers, and data analysts. - - --- - - .. link-button:: cookbook:tutorials - :type: ref - :text: 📚 Tutorials - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - End-to-end examples of Flyte for data/feature engineering, machine learning, - bioinformatics, and more. - - --- - - .. link-button:: cookbook:integrations - :type: ref - :text: 🤝 Integrations - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - Learn how to leverage a rich ecosystem of third-party tools and libraries - to make your Flyte workflows even more effective. - - --- - - .. link-button:: deployment - :type: ref - :text: 🚀 Deployment Guide - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - Guides for platform engineers to deploy and maintain a Flyte cluster on your - own infrastructure. - - --- - - .. link-button:: reference - :type: ref - :text: 📒 API Reference - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - Reference for all of Flyte's component libraries. - - --- - - .. link-button:: divedeep - :type: ref - :text: 🧠 Concepts - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - Dive deep into all of Flyte's concepts, from tasks and workflows to the underlying Flyte scheduler. - - --- - - .. link-button:: community - :type: ref - :text: 🤗 Community - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - Join the fast-growing Flyte community to get help, ask questions, and contribute! - -Get Help -======== - -Have questions or need support? The best way to reach us is through Slack: - -.. panels:: - :header: text-center - :column: col-lg-12 p-2 - - .. link-button:: https://flyte-org.slack.com/archives/CP2HDHKE1 - :type: url - :text: 🤔 Ask the Community - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - Ask anything related to Flyte and get a response within a few hours. - - --- - - .. link-button:: https://flyte-org.slack.com/archives/C01RXBFV1M5 - :type: url - :text: 👋 Introduce yourself - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - Tell us about yourself. We'd love to know about you and what brings you to Flyte. - - --- - - .. link-button:: https://flyte-org.slack.com/archives/CPQ3ZFQ84 - :type: url - :text: 💭 Share ideas - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - Share any suggestions or feedback you have on how to make Flyte better. - - --- - - .. link-button:: https://flyte-org.slack.com/archives/C01P3B761A6 - :type: url - :text: 🛠 Get help with deploment - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - If you need any help with Flyte deployment, hit us up. diff --git a/rsts/reference/index.rst b/rsts/reference/index.rst deleted file mode 100644 index 489cf2e2b3..0000000000 --- a/rsts/reference/index.rst +++ /dev/null @@ -1,75 +0,0 @@ -.. _reference: - -############# -API Reference -############# - -.. panels:: - :header: text-center - :column: col-lg-12 p-2 - - .. link-button:: https://flytectl.readthedocs.io - :type: url - :text: Flytectl - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - The official Flyte Command-line Interface. - - --- - - .. link-button:: https://flyteidl.readthedocs.io - :type: url - :text: FlyteIDL - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - The core language specification and backend service API specification for Flyte. - - --- - - .. link-button:: https://flytekit.readthedocs.io - :type: url - :text: Flytekit - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - The Python SDK for Flyte. - - --- - - .. link-button:: https://github.com/spotify/flytekit-java - :type: url - :text: Flytekit-java - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - The Java/Scala SDK for Flyte. - - --- - - .. link-button:: https://docs.flyte.org/projects/flyteidl/en/latest/protos/docs/service/service.html - :type: url - :text: FlyteAdmin - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - Flyte Backend REST/gRPC API specification. - - --- - - .. link-button:: reference-swagger - :type: ref - :text: Flyte API Swagger Playground - :classes: btn-block stretched-link - ^^^^^^^^^^^^ - FlyteAdmin exposes a REST interface. Try out the API using an interactive environment. - - -.. toctree:: - :maxdepth: 1 - :caption: API Reference - :name: apitoc - :hidden: - - FlyteCTL - FlyteIDL - Flytekit Python - Flytekit Java - FlyteAdmin - swagger diff --git a/rsts/reference/swagger.rst b/rsts/reference/swagger.rst deleted file mode 100644 index 9344a81357..0000000000 --- a/rsts/reference/swagger.rst +++ /dev/null @@ -1,31 +0,0 @@ -.. _reference-swagger: - -############################# -Flyte API Playground: Swagger -############################# - -.. tags:: Basic - -Flyte services expose gRPC services for efficient/low latency communication across all services as well as for external clients (FlyteCTL, FlyteConsole, Flytekit Remote, etc.). - -The service definitions are defined `here `__. -FlyteIDL also houses open API schema definitions for the exposed services: - -- `Admin `__ -- `Auth `__ -- `Identity `__ - -To view the UI, run the following command: - -.. prompt:: bash $ - - flytectl demo start - -Once sandbox setup is complete, a ready-to-explore message is shown: - -.. prompt:: - - 👨‍💻 Flyte is ready! Flyte UI is available at http://localhost:30081/console 🚀 🚀 🎉 - - -Visit ``http://localhost:30080/api/v1/openapi`` to view the swagger documentation of the payload fields. From 3eedbdac98d4e317954b234baa8890b71769b259 Mon Sep 17 00:00:00 2001 From: Yee Hing Tong Date: Thu, 18 Jan 2024 13:06:27 -0800 Subject: [PATCH 16/30] docs/clarify propeller scaling (#4741) Signed-off-by: Yee Hing Tong --- docs/deployment/configuration/performance.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/deployment/configuration/performance.rst b/docs/deployment/configuration/performance.rst index ee65cdaa20..f7bb1d2d2d 100644 --- a/docs/deployment/configuration/performance.rst +++ b/docs/deployment/configuration/performance.rst @@ -189,7 +189,7 @@ Manual scale-out ---------------- FlytePropeller can be run manually per namespace. This is not a recommended solution as it is harder to deploy, but if your organization can deploy and maintain multiple copies of FlytePropeller, you can use this. -Automatic scale-out +Sharded scale-out ------------------- FlytePropeller Manager is a new component introduced as part of `this RFC `_ to facilitate horizontal scaling of FlytePropeller through sharding. Effectively, the Manager is responsible for maintaining liveness and proper configuration over a collection of FlytePropeller instances. This scheme uses k8s label selectors to deterministically assign FlyteWorkflow CRD responsibilities to FlytePropeller instances, effectively distributing processing load over the shards. @@ -197,7 +197,7 @@ Deployment of FlytePropeller Manager requires k8s configuration updates includin Flyte provides a variety of Shard Strategies to configure how FlyteWorkflows are sharded among managed FlytePropeller instances. These include hash, which uses consistent hashing to load-balance evaluation over shards, and project / domain, which map the respective IDs to specific managed FlytePropeller instances. Below we include examples of helm configurations for each of the existing Shard Strategies. -The Hash Shard Strategy, denoted by "type: hash" in the configuration below, uses consistent hashing to evenly distribute FlyteWorkflows over managed FlytePropeller instances. This configuration requires a "shard-count" variable which defines the number of managed FlytePropeller instances. +The Hash Shard Strategy, denoted by "type: Hash" in the configuration below, uses consistent hashing to evenly distribute FlyteWorkflows over managed FlytePropeller instances. This configuration requires a "shard-count" variable which defines the number of managed FlytePropeller instances. You may change the shard count without impacting existing workflows. Note that changing the shard-count is a manual step, it is not auto-scaling. .. code-block:: yaml @@ -208,7 +208,7 @@ The Hash Shard Strategy, denoted by "type: hash" in the configuration below, use # pod and scanning configuration redacted # ... shard: - type: hash # use the "hash" shard strategy + type: Hash # use the "hash" shard strategy shard-count: 4 # the total number of shards The Project and Domain Shard Strategies, denoted by "type: project" and "type: domain" respectively, use the FlyteWorkflow project and domain metadata to shard FlyteWorkflows. These Shard Strategies are configured using a "per-shard-mapping" option, which is a list of ID lists. Each element in the "per-shard-mapping" list defines a new shard and the ID list assigns responsibility for the specified IDs to that shard. A shard configured as a single wildcard ID (i.e. "*") is responsible for all IDs that are not covered by other shards. Only a single shard may be configured with a wildcard ID and on that shard their must be only one ID, namely the wildcard. From 2866d5ac032df1175c93094f3004bb1e6a00dd14 Mon Sep 17 00:00:00 2001 From: Flyte Bot Date: Thu, 18 Jan 2024 15:47:57 -0800 Subject: [PATCH 17/30] Update Flyte components (#4744) * Update Flyte Components Signed-off-by: Flyte-Bot * Bump version and changelog. --------- Signed-off-by: Flyte-Bot Co-authored-by: eapolinario --- CHANGELOG/CHANGELOG-v1.10.7-b1.md | 3 ++ charts/flyte-binary/README.md | 2 +- charts/flyte-binary/values.yaml | 2 +- charts/flyte-core/README.md | 12 +++---- charts/flyte-core/values.yaml | 10 +++--- charts/flyte/README.md | 16 ++++----- charts/flyte/values.yaml | 10 +++--- .../flyte_aws_scheduler_helm_generated.yaml | 30 ++++++++-------- .../flyte_helm_controlplane_generated.yaml | 20 +++++------ .../eks/flyte_helm_dataplane_generated.yaml | 14 ++++---- deployment/eks/flyte_helm_generated.yaml | 34 +++++++++---------- deployment/gcp/flyte_generated.yaml | 22 ++++++------ .../flyte_helm_controlplane_generated.yaml | 20 +++++------ .../gcp/flyte_helm_dataplane_generated.yaml | 14 ++++---- deployment/gcp/flyte_helm_generated.yaml | 34 +++++++++---------- .../flyte_sandbox_binary_helm_generated.yaml | 4 +-- deployment/sandbox/flyte_helm_generated.yaml | 34 +++++++++---------- .../manifests/complete-agent.yaml | 8 ++--- .../sandbox-bundled/manifests/complete.yaml | 8 ++--- docker/sandbox-bundled/manifests/dev.yaml | 4 +-- docs/conf.py | 2 +- .../generated/flyteadmin_config.rst | 13 +++++++ .../generated/flytepropeller_config.rst | 13 +++++++ .../generated/scheduler_config.rst | 13 +++++++ kustomize/overlays/gcp/kustomization.yaml | 8 ++--- 25 files changed, 196 insertions(+), 154 deletions(-) create mode 100644 CHANGELOG/CHANGELOG-v1.10.7-b1.md diff --git a/CHANGELOG/CHANGELOG-v1.10.7-b1.md b/CHANGELOG/CHANGELOG-v1.10.7-b1.md new file mode 100644 index 0000000000..4336ef670a --- /dev/null +++ b/CHANGELOG/CHANGELOG-v1.10.7-b1.md @@ -0,0 +1,3 @@ +# Flyte v1.10.7-b1 Release + +Pre-release testing. diff --git a/charts/flyte-binary/README.md b/charts/flyte-binary/README.md index 157598f0a6..5d1d10feeb 100644 --- a/charts/flyte-binary/README.md +++ b/charts/flyte-binary/README.md @@ -42,7 +42,7 @@ Chart for basic single Flyte executable deployment | configuration.auth.oidc.clientId | string | `""` | | | configuration.auth.oidc.clientSecret | string | `""` | | | configuration.co-pilot.image.repository | string | `"cr.flyte.org/flyteorg/flytecopilot"` | | -| configuration.co-pilot.image.tag | string | `"v1.10.7-b0"` | | +| configuration.co-pilot.image.tag | string | `"v1.10.7-b1"` | | | configuration.database.dbname | string | `"flyte"` | | | configuration.database.host | string | `"127.0.0.1"` | | | configuration.database.options | string | `"sslmode=disable"` | | diff --git a/charts/flyte-binary/values.yaml b/charts/flyte-binary/values.yaml index 0454ae3d30..5d91fcf5fc 100644 --- a/charts/flyte-binary/values.yaml +++ b/charts/flyte-binary/values.yaml @@ -159,7 +159,7 @@ configuration: # repository CoPilot sidecar image repository repository: cr.flyte.org/flyteorg/flytecopilot # FLYTECOPILOT_IMAGE # tag CoPilot sidecar image tag - tag: v1.10.7-b0 # FLYTECOPILOT_TAG + tag: v1.10.7-b1 # FLYTECOPILOT_TAG # agentService Flyte Agent configuration agentService: defaultAgent: diff --git a/charts/flyte-core/README.md b/charts/flyte-core/README.md index eff9cac0d1..fecd58959f 100644 --- a/charts/flyte-core/README.md +++ b/charts/flyte-core/README.md @@ -90,8 +90,8 @@ helm install gateway bitnami/contour -n flyte | configmap.clusters.clusterConfigs | list | `[]` | | | configmap.clusters.labelClusterMap | object | `{}` | | | configmap.console | object | `{"BASE_URL":"/console","CONFIG_DIR":"/etc/flyte/config"}` | Configuration for Flyte console UI | -| configmap.copilot | object | `{"plugins":{"k8s":{"co-pilot":{"image":"cr.flyte.org/flyteorg/flytecopilot:v1.10.7-b0","name":"flyte-copilot-","start-timeout":"30s"}}}}` | Copilot configuration | -| configmap.copilot.plugins.k8s.co-pilot | object | `{"image":"cr.flyte.org/flyteorg/flytecopilot:v1.10.7-b0","name":"flyte-copilot-","start-timeout":"30s"}` | Structure documented [here](https://pkg.go.dev/github.com/lyft/flyteplugins@v0.5.28/go/tasks/pluginmachinery/flytek8s/config#FlyteCoPilotConfig) | +| configmap.copilot | object | `{"plugins":{"k8s":{"co-pilot":{"image":"cr.flyte.org/flyteorg/flytecopilot:v1.10.7-b1","name":"flyte-copilot-","start-timeout":"30s"}}}}` | Copilot configuration | +| configmap.copilot.plugins.k8s.co-pilot | object | `{"image":"cr.flyte.org/flyteorg/flytecopilot:v1.10.7-b1","name":"flyte-copilot-","start-timeout":"30s"}` | Structure documented [here](https://pkg.go.dev/github.com/lyft/flyteplugins@v0.5.28/go/tasks/pluginmachinery/flytek8s/config#FlyteCoPilotConfig) | | configmap.core | object | `{"manager":{"pod-application":"flytepropeller","pod-template-container-name":"flytepropeller","pod-template-name":"flytepropeller-template"},"propeller":{"downstream-eval-duration":"30s","enable-admin-launcher":true,"leader-election":{"enabled":true,"lease-duration":"15s","lock-config-map":{"name":"propeller-leader","namespace":"flyte"},"renew-deadline":"10s","retry-period":"2s"},"limit-namespace":"all","max-workflow-retries":30,"metadata-prefix":"metadata/propeller","metrics-prefix":"flyte","prof-port":10254,"queue":{"batch-size":-1,"batching-interval":"2s","queue":{"base-delay":"5s","capacity":1000,"max-delay":"120s","rate":100,"type":"maxof"},"sub-queue":{"capacity":100,"rate":10,"type":"bucket"},"type":"batch"},"rawoutput-prefix":"s3://my-s3-bucket/","workers":4,"workflow-reeval-duration":"30s"},"webhook":{"certDir":"/etc/webhook/certs","serviceName":"flyte-pod-webhook"}}` | Core propeller configuration | | configmap.core.manager | object | `{"pod-application":"flytepropeller","pod-template-container-name":"flytepropeller","pod-template-name":"flytepropeller-template"}` | follows the structure specified [here](https://pkg.go.dev/github.com/flyteorg/flytepropeller/manager/config#Config). | | configmap.core.propeller | object | `{"downstream-eval-duration":"30s","enable-admin-launcher":true,"leader-election":{"enabled":true,"lease-duration":"15s","lock-config-map":{"name":"propeller-leader","namespace":"flyte"},"renew-deadline":"10s","retry-period":"2s"},"limit-namespace":"all","max-workflow-retries":30,"metadata-prefix":"metadata/propeller","metrics-prefix":"flyte","prof-port":10254,"queue":{"batch-size":-1,"batching-interval":"2s","queue":{"base-delay":"5s","capacity":1000,"max-delay":"120s","rate":100,"type":"maxof"},"sub-queue":{"capacity":100,"rate":10,"type":"bucket"},"type":"batch"},"rawoutput-prefix":"s3://my-s3-bucket/","workers":4,"workflow-reeval-duration":"30s"}` | follows the structure specified [here](https://pkg.go.dev/github.com/flyteorg/flytepropeller/pkg/controller/config). | @@ -125,7 +125,7 @@ helm install gateway bitnami/contour -n flyte | datacatalog.extraArgs | object | `{}` | Appends extra command line arguments to the main command | | datacatalog.image.pullPolicy | string | `"IfNotPresent"` | Docker image pull policy | | datacatalog.image.repository | string | `"cr.flyte.org/flyteorg/datacatalog"` | Docker image for Datacatalog deployment | -| datacatalog.image.tag | string | `"v1.10.7-b0"` | Docker image tag | +| datacatalog.image.tag | string | `"v1.10.7-b1"` | Docker image tag | | datacatalog.nodeSelector | object | `{}` | nodeSelector for Datacatalog deployment | | datacatalog.podAnnotations | object | `{}` | Annotations for Datacatalog pods | | datacatalog.priorityClassName | string | `""` | Sets priorityClassName for datacatalog pod(s). | @@ -157,7 +157,7 @@ helm install gateway bitnami/contour -n flyte | flyteadmin.extraArgs | object | `{}` | Appends extra command line arguments to the serve command | | flyteadmin.image.pullPolicy | string | `"IfNotPresent"` | | | flyteadmin.image.repository | string | `"cr.flyte.org/flyteorg/flyteadmin"` | Docker image for Flyteadmin deployment | -| flyteadmin.image.tag | string | `"v1.10.7-b0"` | | +| flyteadmin.image.tag | string | `"v1.10.7-b1"` | | | flyteadmin.initialProjects | list | `["flytesnacks","flytetester","flyteexamples"]` | Initial projects to create | | flyteadmin.nodeSelector | object | `{}` | nodeSelector for Flyteadmin deployment | | flyteadmin.podAnnotations | object | `{}` | Annotations for Flyteadmin pods | @@ -209,7 +209,7 @@ helm install gateway bitnami/contour -n flyte | flytepropeller.extraArgs | object | `{}` | Appends extra command line arguments to the main command | | flytepropeller.image.pullPolicy | string | `"IfNotPresent"` | | | flytepropeller.image.repository | string | `"cr.flyte.org/flyteorg/flytepropeller"` | Docker image for Flytepropeller deployment | -| flytepropeller.image.tag | string | `"v1.10.7-b0"` | | +| flytepropeller.image.tag | string | `"v1.10.7-b1"` | | | flytepropeller.manager | bool | `false` | | | flytepropeller.nodeSelector | object | `{}` | nodeSelector for Flytepropeller deployment | | flytepropeller.podAnnotations | object | `{}` | Annotations for Flytepropeller pods | @@ -236,7 +236,7 @@ helm install gateway bitnami/contour -n flyte | flytescheduler.configPath | string | `"/etc/flyte/config/*.yaml"` | Default regex string for searching configuration files | | flytescheduler.image.pullPolicy | string | `"IfNotPresent"` | Docker image pull policy | | flytescheduler.image.repository | string | `"cr.flyte.org/flyteorg/flytescheduler"` | Docker image for Flytescheduler deployment | -| flytescheduler.image.tag | string | `"v1.10.7-b0"` | Docker image tag | +| flytescheduler.image.tag | string | `"v1.10.7-b1"` | Docker image tag | | flytescheduler.nodeSelector | object | `{}` | nodeSelector for Flytescheduler deployment | | flytescheduler.podAnnotations | object | `{}` | Annotations for Flytescheduler pods | | flytescheduler.priorityClassName | string | `""` | Sets priorityClassName for flyte scheduler pod(s). | diff --git a/charts/flyte-core/values.yaml b/charts/flyte-core/values.yaml index 005a52e9ab..6fdb777763 100755 --- a/charts/flyte-core/values.yaml +++ b/charts/flyte-core/values.yaml @@ -16,7 +16,7 @@ flyteadmin: image: # -- Docker image for Flyteadmin deployment repository: cr.flyte.org/flyteorg/flyteadmin # FLYTEADMIN_IMAGE - tag: v1.10.7-b0 # FLYTEADMIN_TAG + tag: v1.10.7-b1 # FLYTEADMIN_TAG pullPolicy: IfNotPresent # -- Additional flyteadmin container environment variables # @@ -132,7 +132,7 @@ flytescheduler: # -- Docker image for Flytescheduler deployment repository: cr.flyte.org/flyteorg/flytescheduler # FLYTESCHEDULER_IMAGE # -- Docker image tag - tag: v1.10.7-b0 # FLYTESCHEDULER_TAG + tag: v1.10.7-b1 # FLYTESCHEDULER_TAG # -- Docker image pull policy pullPolicy: IfNotPresent # -- Default resources requests and limits for Flytescheduler deployment @@ -186,7 +186,7 @@ datacatalog: # -- Docker image for Datacatalog deployment repository: cr.flyte.org/flyteorg/datacatalog # DATACATALOG_IMAGE # -- Docker image tag - tag: v1.10.7-b0 # DATACATALOG_TAG + tag: v1.10.7-b1 # DATACATALOG_TAG # -- Docker image pull policy pullPolicy: IfNotPresent # -- Default resources requests and limits for Datacatalog deployment @@ -254,7 +254,7 @@ flytepropeller: image: # -- Docker image for Flytepropeller deployment repository: cr.flyte.org/flyteorg/flytepropeller # FLYTEPROPELLER_IMAGE - tag: v1.10.7-b0 # FLYTEPROPELLER_TAG + tag: v1.10.7-b1 # FLYTEPROPELLER_TAG pullPolicy: IfNotPresent # -- Default resources requests and limits for Flytepropeller deployment resources: @@ -654,7 +654,7 @@ configmap: # -- Structure documented [here](https://pkg.go.dev/github.com/lyft/flyteplugins@v0.5.28/go/tasks/pluginmachinery/flytek8s/config#FlyteCoPilotConfig) co-pilot: name: flyte-copilot- - image: cr.flyte.org/flyteorg/flytecopilot:v1.10.7-b0 # FLYTECOPILOT_IMAGE + image: cr.flyte.org/flyteorg/flytecopilot:v1.10.7-b1 # FLYTECOPILOT_IMAGE start-timeout: 30s # -- Core propeller configuration diff --git a/charts/flyte/README.md b/charts/flyte/README.md index 98bb1d4d78..8c7191885a 100644 --- a/charts/flyte/README.md +++ b/charts/flyte/README.md @@ -71,7 +71,7 @@ helm upgrade -f values-sandbox.yaml flyte . | contour.tolerations | list | `[]` | tolerations for Contour deployment | | daskoperator | object | `{"enabled":false}` | Optional: Dask Plugin using the Dask Operator | | daskoperator.enabled | bool | `false` | - enable or disable the dask operator deployment installation | -| flyte | object | `{"cluster_resource_manager":{"config":{"cluster_resources":{"customData":[{"production":[{"projectQuotaCpu":{"value":"5"}},{"projectQuotaMemory":{"value":"4000Mi"}}]},{"staging":[{"projectQuotaCpu":{"value":"2"}},{"projectQuotaMemory":{"value":"3000Mi"}}]},{"development":[{"projectQuotaCpu":{"value":"4"}},{"projectQuotaMemory":{"value":"3000Mi"}}]}],"refresh":"5m","refreshInterval":"5m","standaloneDeployment":false,"templatePath":"/etc/flyte/clusterresource/templates"}},"enabled":true,"service_account_name":"flyteadmin","templates":[{"key":"aa_namespace","value":"apiVersion: v1\nkind: Namespace\nmetadata:\n name: {{ namespace }}\nspec:\n finalizers:\n - kubernetes\n"},{"key":"ab_project_resource_quota","value":"apiVersion: v1\nkind: ResourceQuota\nmetadata:\n name: project-quota\n namespace: {{ namespace }}\nspec:\n hard:\n limits.cpu: {{ projectQuotaCpu }}\n limits.memory: {{ projectQuotaMemory }}\n"}]},"common":{"databaseSecret":{"name":"","secretManifest":{}},"flyteNamespaceTemplate":{"enabled":false},"ingress":{"albSSLRedirect":false,"annotations":{"nginx.ingress.kubernetes.io/app-root":"/console"},"enabled":true,"host":"","separateGrpcIngress":false,"separateGrpcIngressAnnotations":{"nginx.ingress.kubernetes.io/backend-protocol":"GRPC"},"tls":{"enabled":false},"webpackHMR":true}},"configmap":{"adminServer":{"auth":{"appAuth":{"thirdPartyConfig":{"flyteClient":{"clientId":"flytectl","redirectUri":"http://localhost:53593/callback","scopes":["offline","all"]}}},"authorizedUris":["https://localhost:30081","http://flyteadmin:80","http://flyteadmin.flyte.svc.cluster.local:80"],"userAuth":{"openId":{"baseUrl":"https://accounts.google.com","clientId":"657465813211-6eog7ek7li5k7i7fvgv2921075063hpe.apps.googleusercontent.com","scopes":["profile","openid"]}}},"flyteadmin":{"eventVersion":2,"metadataStoragePrefix":["metadata","admin"],"metricsScope":"flyte:","profilerPort":10254,"roleNameKey":"iam.amazonaws.com/role","testing":{"host":"http://flyteadmin"}},"server":{"grpcPort":8089,"httpPort":8088,"security":{"allowCors":true,"allowedHeaders":["Content-Type","flyte-authorization"],"allowedOrigins":["*"],"secure":false,"useAuth":false}}},"catalog":{"catalog-cache":{"endpoint":"datacatalog:89","insecure":true,"type":"datacatalog"}},"console":{"BASE_URL":"/console","CONFIG_DIR":"/etc/flyte/config"},"copilot":{"plugins":{"k8s":{"co-pilot":{"image":"cr.flyte.org/flyteorg/flytecopilot:v1.10.7-b0","name":"flyte-copilot-","start-timeout":"30s"}}}},"core":{"propeller":{"downstream-eval-duration":"30s","enable-admin-launcher":true,"leader-election":{"enabled":true,"lease-duration":"15s","lock-config-map":{"name":"propeller-leader","namespace":"flyte"},"renew-deadline":"10s","retry-period":"2s"},"limit-namespace":"all","max-workflow-retries":30,"metadata-prefix":"metadata/propeller","metrics-prefix":"flyte","prof-port":10254,"queue":{"batch-size":-1,"batching-interval":"2s","queue":{"base-delay":"5s","capacity":1000,"max-delay":"120s","rate":100,"type":"maxof"},"sub-queue":{"capacity":100,"rate":10,"type":"bucket"},"type":"batch"},"rawoutput-prefix":"s3://my-s3-bucket/","workers":4,"workflow-reeval-duration":"30s"},"webhook":{"certDir":"/etc/webhook/certs","serviceName":"flyte-pod-webhook"}},"datacatalogServer":{"application":{"grpcPort":8089,"grpcServerReflection":true,"httpPort":8080},"datacatalog":{"metrics-scope":"datacatalog","profiler-port":10254,"storage-prefix":"metadata/datacatalog"}},"domain":{"domains":[{"id":"development","name":"development"},{"id":"staging","name":"staging"},{"id":"production","name":"production"}]},"enabled_plugins":{"tasks":{"task-plugins":{"default-for-task-types":{"bigquery_query_job_task":"agent-service","container":"container","container_array":"k8s-array","sidecar":"sidecar"},"enabled-plugins":["container","sidecar","k8s-array","agent-service"]}}},"k8s":{"plugins":{"agent-service":{"defaultAgent":{"endpoint":"dns:///flyteagent.flyte.svc.cluster.local:8000","insecure":true},"supportedTaskTypes":["bigquery_query_job_task"]},"k8s":{"default-cpus":"100m","default-env-vars":[{"FLYTE_AWS_ENDPOINT":"http://minio.flyte:9000"},{"FLYTE_AWS_ACCESS_KEY_ID":"minio"},{"FLYTE_AWS_SECRET_ACCESS_KEY":"miniostorage"}],"default-memory":"200Mi"}}},"logger":{"logger":{"level":5,"show-source":true}},"remoteData":{"remoteData":{"region":"us-east-1","scheme":"local","signedUrls":{"durationMinutes":3}}},"resource_manager":{"propeller":{"resourcemanager":{"redis":null,"type":"noop"}}},"task_logs":{"plugins":{"logs":{"cloudwatch-enabled":false,"kubernetes-enabled":true,"kubernetes-template-uri":"http://localhost:30082/#/log/{{ \"{{\" }} .namespace {{ \"}}\" }}/{{ \"{{\" }} .podName {{ \"}}\" }}/pod?namespace={{ \"{{\" }} .namespace {{ \"}}\" }}"}}},"task_resource_defaults":{"task_resources":{"defaults":{"cpu":"100m","memory":"200Mi","storage":"5Mi"},"limits":{"cpu":2,"gpu":1,"memory":"1Gi","storage":"20Mi"}}}},"datacatalog":{"affinity":{},"configPath":"/etc/datacatalog/config/*.yaml","image":{"pullPolicy":"IfNotPresent","repository":"cr.flyte.org/flyteorg/datacatalog","tag":"v1.10.7-b0"},"nodeSelector":{},"podAnnotations":{},"replicaCount":1,"resources":{"limits":{"cpu":"500m","ephemeral-storage":"100Mi","memory":"500Mi"},"requests":{"cpu":"10m","ephemeral-storage":"50Mi","memory":"50Mi"}},"service":{"annotations":{"projectcontour.io/upstream-protocol.h2c":"grpc"},"type":"NodePort"},"serviceAccount":{"annotations":{},"create":true,"imagePullSecrets":[]},"tolerations":[]},"db":{"admin":{"database":{"dbname":"flyteadmin","host":"postgres","port":5432,"username":"postgres"}},"datacatalog":{"database":{"dbname":"datacatalog","host":"postgres","port":5432,"username":"postgres"}}},"deployRedoc":true,"flyteadmin":{"additionalVolumeMounts":[],"additionalVolumes":[],"affinity":{},"configPath":"/etc/flyte/config/*.yaml","env":[],"image":{"pullPolicy":"IfNotPresent","repository":"cr.flyte.org/flyteorg/flyteadmin","tag":"v1.10.7-b0"},"initialProjects":["flytesnacks","flytetester","flyteexamples"],"nodeSelector":{},"podAnnotations":{},"replicaCount":1,"resources":{"limits":{"cpu":"250m","ephemeral-storage":"100Mi","memory":"500Mi"},"requests":{"cpu":"10m","ephemeral-storage":"50Mi","memory":"50Mi"}},"secrets":{},"service":{"annotations":{"projectcontour.io/upstream-protocol.h2c":"grpc"},"loadBalancerSourceRanges":[],"type":"ClusterIP"},"serviceAccount":{"annotations":{},"create":true,"imagePullSecrets":[]},"tolerations":[]},"flyteconsole":{"affinity":{},"ga":{"enabled":true,"tracking_id":"G-0QW4DJWJ20"},"image":{"pullPolicy":"IfNotPresent","repository":"cr.flyte.org/flyteorg/flyteconsole","tag":"v1.10.2"},"nodeSelector":{},"podAnnotations":{},"replicaCount":1,"resources":{"limits":{"cpu":"500m","memory":"275Mi"},"requests":{"cpu":"10m","memory":"250Mi"}},"service":{"annotations":{},"type":"ClusterIP"},"tolerations":[]},"flytepropeller":{"affinity":{},"cacheSizeMbs":0,"configPath":"/etc/flyte/config/*.yaml","image":{"pullPolicy":"IfNotPresent","repository":"cr.flyte.org/flyteorg/flytepropeller","tag":"v1.10.7-b0"},"manager":false,"nodeSelector":{},"podAnnotations":{},"replicaCount":1,"resources":{"limits":{"cpu":"200m","ephemeral-storage":"100Mi","memory":"200Mi"},"requests":{"cpu":"10m","ephemeral-storage":"50Mi","memory":"50Mi"}},"serviceAccount":{"annotations":{},"create":true,"imagePullSecrets":[]},"tolerations":[]},"flytescheduler":{"affinity":{},"configPath":"/etc/flyte/config/*.yaml","image":{"pullPolicy":"IfNotPresent","repository":"cr.flyte.org/flyteorg/flytescheduler","tag":"v1.10.7-b0"},"nodeSelector":{},"podAnnotations":{},"resources":{"limits":{"cpu":"250m","ephemeral-storage":"100Mi","memory":"500Mi"},"requests":{"cpu":"10m","ephemeral-storage":"50Mi","memory":"50Mi"}},"secrets":{},"serviceAccount":{"annotations":{},"create":true,"imagePullSecrets":[]},"tolerations":[]},"storage":{"bucketName":"my-s3-bucket","custom":{},"gcs":null,"s3":{"region":"us-east-1"},"type":"sandbox"},"webhook":{"enabled":true,"service":{"annotations":{"projectcontour.io/upstream-protocol.h2c":"grpc"},"type":"ClusterIP"},"serviceAccount":{"annotations":{},"create":true,"imagePullSecrets":[]}},"workflow_notifications":{"config":{},"enabled":false},"workflow_scheduler":{"enabled":true,"type":"native"}}` | ------------------------------------------------------------------- Core System settings This section consists of Core components of Flyte and their deployment settings. This includes FlyteAdmin service, Datacatalog, FlytePropeller and Flyteconsole | +| flyte | object | `{"cluster_resource_manager":{"config":{"cluster_resources":{"customData":[{"production":[{"projectQuotaCpu":{"value":"5"}},{"projectQuotaMemory":{"value":"4000Mi"}}]},{"staging":[{"projectQuotaCpu":{"value":"2"}},{"projectQuotaMemory":{"value":"3000Mi"}}]},{"development":[{"projectQuotaCpu":{"value":"4"}},{"projectQuotaMemory":{"value":"3000Mi"}}]}],"refresh":"5m","refreshInterval":"5m","standaloneDeployment":false,"templatePath":"/etc/flyte/clusterresource/templates"}},"enabled":true,"service_account_name":"flyteadmin","templates":[{"key":"aa_namespace","value":"apiVersion: v1\nkind: Namespace\nmetadata:\n name: {{ namespace }}\nspec:\n finalizers:\n - kubernetes\n"},{"key":"ab_project_resource_quota","value":"apiVersion: v1\nkind: ResourceQuota\nmetadata:\n name: project-quota\n namespace: {{ namespace }}\nspec:\n hard:\n limits.cpu: {{ projectQuotaCpu }}\n limits.memory: {{ projectQuotaMemory }}\n"}]},"common":{"databaseSecret":{"name":"","secretManifest":{}},"flyteNamespaceTemplate":{"enabled":false},"ingress":{"albSSLRedirect":false,"annotations":{"nginx.ingress.kubernetes.io/app-root":"/console"},"enabled":true,"host":"","separateGrpcIngress":false,"separateGrpcIngressAnnotations":{"nginx.ingress.kubernetes.io/backend-protocol":"GRPC"},"tls":{"enabled":false},"webpackHMR":true}},"configmap":{"adminServer":{"auth":{"appAuth":{"thirdPartyConfig":{"flyteClient":{"clientId":"flytectl","redirectUri":"http://localhost:53593/callback","scopes":["offline","all"]}}},"authorizedUris":["https://localhost:30081","http://flyteadmin:80","http://flyteadmin.flyte.svc.cluster.local:80"],"userAuth":{"openId":{"baseUrl":"https://accounts.google.com","clientId":"657465813211-6eog7ek7li5k7i7fvgv2921075063hpe.apps.googleusercontent.com","scopes":["profile","openid"]}}},"flyteadmin":{"eventVersion":2,"metadataStoragePrefix":["metadata","admin"],"metricsScope":"flyte:","profilerPort":10254,"roleNameKey":"iam.amazonaws.com/role","testing":{"host":"http://flyteadmin"}},"server":{"grpcPort":8089,"httpPort":8088,"security":{"allowCors":true,"allowedHeaders":["Content-Type","flyte-authorization"],"allowedOrigins":["*"],"secure":false,"useAuth":false}}},"catalog":{"catalog-cache":{"endpoint":"datacatalog:89","insecure":true,"type":"datacatalog"}},"console":{"BASE_URL":"/console","CONFIG_DIR":"/etc/flyte/config"},"copilot":{"plugins":{"k8s":{"co-pilot":{"image":"cr.flyte.org/flyteorg/flytecopilot:v1.10.7-b1","name":"flyte-copilot-","start-timeout":"30s"}}}},"core":{"propeller":{"downstream-eval-duration":"30s","enable-admin-launcher":true,"leader-election":{"enabled":true,"lease-duration":"15s","lock-config-map":{"name":"propeller-leader","namespace":"flyte"},"renew-deadline":"10s","retry-period":"2s"},"limit-namespace":"all","max-workflow-retries":30,"metadata-prefix":"metadata/propeller","metrics-prefix":"flyte","prof-port":10254,"queue":{"batch-size":-1,"batching-interval":"2s","queue":{"base-delay":"5s","capacity":1000,"max-delay":"120s","rate":100,"type":"maxof"},"sub-queue":{"capacity":100,"rate":10,"type":"bucket"},"type":"batch"},"rawoutput-prefix":"s3://my-s3-bucket/","workers":4,"workflow-reeval-duration":"30s"},"webhook":{"certDir":"/etc/webhook/certs","serviceName":"flyte-pod-webhook"}},"datacatalogServer":{"application":{"grpcPort":8089,"grpcServerReflection":true,"httpPort":8080},"datacatalog":{"metrics-scope":"datacatalog","profiler-port":10254,"storage-prefix":"metadata/datacatalog"}},"domain":{"domains":[{"id":"development","name":"development"},{"id":"staging","name":"staging"},{"id":"production","name":"production"}]},"enabled_plugins":{"tasks":{"task-plugins":{"default-for-task-types":{"bigquery_query_job_task":"agent-service","container":"container","container_array":"k8s-array","sidecar":"sidecar"},"enabled-plugins":["container","sidecar","k8s-array","agent-service"]}}},"k8s":{"plugins":{"agent-service":{"defaultAgent":{"endpoint":"dns:///flyteagent.flyte.svc.cluster.local:8000","insecure":true},"supportedTaskTypes":["bigquery_query_job_task"]},"k8s":{"default-cpus":"100m","default-env-vars":[{"FLYTE_AWS_ENDPOINT":"http://minio.flyte:9000"},{"FLYTE_AWS_ACCESS_KEY_ID":"minio"},{"FLYTE_AWS_SECRET_ACCESS_KEY":"miniostorage"}],"default-memory":"200Mi"}}},"logger":{"logger":{"level":5,"show-source":true}},"remoteData":{"remoteData":{"region":"us-east-1","scheme":"local","signedUrls":{"durationMinutes":3}}},"resource_manager":{"propeller":{"resourcemanager":{"redis":null,"type":"noop"}}},"task_logs":{"plugins":{"logs":{"cloudwatch-enabled":false,"kubernetes-enabled":true,"kubernetes-template-uri":"http://localhost:30082/#/log/{{ \"{{\" }} .namespace {{ \"}}\" }}/{{ \"{{\" }} .podName {{ \"}}\" }}/pod?namespace={{ \"{{\" }} .namespace {{ \"}}\" }}"}}},"task_resource_defaults":{"task_resources":{"defaults":{"cpu":"100m","memory":"200Mi","storage":"5Mi"},"limits":{"cpu":2,"gpu":1,"memory":"1Gi","storage":"20Mi"}}}},"datacatalog":{"affinity":{},"configPath":"/etc/datacatalog/config/*.yaml","image":{"pullPolicy":"IfNotPresent","repository":"cr.flyte.org/flyteorg/datacatalog","tag":"v1.10.7-b1"},"nodeSelector":{},"podAnnotations":{},"replicaCount":1,"resources":{"limits":{"cpu":"500m","ephemeral-storage":"100Mi","memory":"500Mi"},"requests":{"cpu":"10m","ephemeral-storage":"50Mi","memory":"50Mi"}},"service":{"annotations":{"projectcontour.io/upstream-protocol.h2c":"grpc"},"type":"NodePort"},"serviceAccount":{"annotations":{},"create":true,"imagePullSecrets":[]},"tolerations":[]},"db":{"admin":{"database":{"dbname":"flyteadmin","host":"postgres","port":5432,"username":"postgres"}},"datacatalog":{"database":{"dbname":"datacatalog","host":"postgres","port":5432,"username":"postgres"}}},"deployRedoc":true,"flyteadmin":{"additionalVolumeMounts":[],"additionalVolumes":[],"affinity":{},"configPath":"/etc/flyte/config/*.yaml","env":[],"image":{"pullPolicy":"IfNotPresent","repository":"cr.flyte.org/flyteorg/flyteadmin","tag":"v1.10.7-b1"},"initialProjects":["flytesnacks","flytetester","flyteexamples"],"nodeSelector":{},"podAnnotations":{},"replicaCount":1,"resources":{"limits":{"cpu":"250m","ephemeral-storage":"100Mi","memory":"500Mi"},"requests":{"cpu":"10m","ephemeral-storage":"50Mi","memory":"50Mi"}},"secrets":{},"service":{"annotations":{"projectcontour.io/upstream-protocol.h2c":"grpc"},"loadBalancerSourceRanges":[],"type":"ClusterIP"},"serviceAccount":{"annotations":{},"create":true,"imagePullSecrets":[]},"tolerations":[]},"flyteconsole":{"affinity":{},"ga":{"enabled":true,"tracking_id":"G-0QW4DJWJ20"},"image":{"pullPolicy":"IfNotPresent","repository":"cr.flyte.org/flyteorg/flyteconsole","tag":"v1.10.2"},"nodeSelector":{},"podAnnotations":{},"replicaCount":1,"resources":{"limits":{"cpu":"500m","memory":"275Mi"},"requests":{"cpu":"10m","memory":"250Mi"}},"service":{"annotations":{},"type":"ClusterIP"},"tolerations":[]},"flytepropeller":{"affinity":{},"cacheSizeMbs":0,"configPath":"/etc/flyte/config/*.yaml","image":{"pullPolicy":"IfNotPresent","repository":"cr.flyte.org/flyteorg/flytepropeller","tag":"v1.10.7-b1"},"manager":false,"nodeSelector":{},"podAnnotations":{},"replicaCount":1,"resources":{"limits":{"cpu":"200m","ephemeral-storage":"100Mi","memory":"200Mi"},"requests":{"cpu":"10m","ephemeral-storage":"50Mi","memory":"50Mi"}},"serviceAccount":{"annotations":{},"create":true,"imagePullSecrets":[]},"tolerations":[]},"flytescheduler":{"affinity":{},"configPath":"/etc/flyte/config/*.yaml","image":{"pullPolicy":"IfNotPresent","repository":"cr.flyte.org/flyteorg/flytescheduler","tag":"v1.10.7-b1"},"nodeSelector":{},"podAnnotations":{},"resources":{"limits":{"cpu":"250m","ephemeral-storage":"100Mi","memory":"500Mi"},"requests":{"cpu":"10m","ephemeral-storage":"50Mi","memory":"50Mi"}},"secrets":{},"serviceAccount":{"annotations":{},"create":true,"imagePullSecrets":[]},"tolerations":[]},"storage":{"bucketName":"my-s3-bucket","custom":{},"gcs":null,"s3":{"region":"us-east-1"},"type":"sandbox"},"webhook":{"enabled":true,"service":{"annotations":{"projectcontour.io/upstream-protocol.h2c":"grpc"},"type":"ClusterIP"},"serviceAccount":{"annotations":{},"create":true,"imagePullSecrets":[]}},"workflow_notifications":{"config":{},"enabled":false},"workflow_scheduler":{"enabled":true,"type":"native"}}` | ------------------------------------------------------------------- Core System settings This section consists of Core components of Flyte and their deployment settings. This includes FlyteAdmin service, Datacatalog, FlytePropeller and Flyteconsole | | flyte.cluster_resource_manager | object | `{"config":{"cluster_resources":{"customData":[{"production":[{"projectQuotaCpu":{"value":"5"}},{"projectQuotaMemory":{"value":"4000Mi"}}]},{"staging":[{"projectQuotaCpu":{"value":"2"}},{"projectQuotaMemory":{"value":"3000Mi"}}]},{"development":[{"projectQuotaCpu":{"value":"4"}},{"projectQuotaMemory":{"value":"3000Mi"}}]}],"refresh":"5m","refreshInterval":"5m","standaloneDeployment":false,"templatePath":"/etc/flyte/clusterresource/templates"}},"enabled":true,"service_account_name":"flyteadmin","templates":[{"key":"aa_namespace","value":"apiVersion: v1\nkind: Namespace\nmetadata:\n name: {{ namespace }}\nspec:\n finalizers:\n - kubernetes\n"},{"key":"ab_project_resource_quota","value":"apiVersion: v1\nkind: ResourceQuota\nmetadata:\n name: project-quota\n namespace: {{ namespace }}\nspec:\n hard:\n limits.cpu: {{ projectQuotaCpu }}\n limits.memory: {{ projectQuotaMemory }}\n"}]}` | Configuration for the Cluster resource manager component. This is an optional component, that enables automatic cluster configuration. This is useful to set default quotas, manage namespaces etc that map to a project/domain | | flyte.cluster_resource_manager.config.cluster_resources | object | `{"customData":[{"production":[{"projectQuotaCpu":{"value":"5"}},{"projectQuotaMemory":{"value":"4000Mi"}}]},{"staging":[{"projectQuotaCpu":{"value":"2"}},{"projectQuotaMemory":{"value":"3000Mi"}}]},{"development":[{"projectQuotaCpu":{"value":"4"}},{"projectQuotaMemory":{"value":"3000Mi"}}]}],"refresh":"5m","refreshInterval":"5m","standaloneDeployment":false,"templatePath":"/etc/flyte/clusterresource/templates"}` | ClusterResource parameters Refer to the [structure](https://pkg.go.dev/github.com/lyft/flyteadmin@v0.3.37/pkg/runtime/interfaces#ClusterResourceConfig) to customize. | | flyte.cluster_resource_manager.config.cluster_resources.standaloneDeployment | bool | `false` | Starts the cluster resource manager in standalone mode with requisite auth credentials to call flyteadmin service endpoints | @@ -91,15 +91,15 @@ helm upgrade -f values-sandbox.yaml flyte . | flyte.common.ingress.separateGrpcIngressAnnotations | object | `{"nginx.ingress.kubernetes.io/backend-protocol":"GRPC"}` | - Extra Ingress annotations applied only to the GRPC ingress. Only makes sense if `separateGrpcIngress` is enabled. | | flyte.common.ingress.tls | object | `{"enabled":false}` | - TLS Settings | | flyte.common.ingress.webpackHMR | bool | `true` | - Enable or disable HMR route to flyteconsole. This is useful only for frontend development. | -| flyte.configmap | object | `{"adminServer":{"auth":{"appAuth":{"thirdPartyConfig":{"flyteClient":{"clientId":"flytectl","redirectUri":"http://localhost:53593/callback","scopes":["offline","all"]}}},"authorizedUris":["https://localhost:30081","http://flyteadmin:80","http://flyteadmin.flyte.svc.cluster.local:80"],"userAuth":{"openId":{"baseUrl":"https://accounts.google.com","clientId":"657465813211-6eog7ek7li5k7i7fvgv2921075063hpe.apps.googleusercontent.com","scopes":["profile","openid"]}}},"flyteadmin":{"eventVersion":2,"metadataStoragePrefix":["metadata","admin"],"metricsScope":"flyte:","profilerPort":10254,"roleNameKey":"iam.amazonaws.com/role","testing":{"host":"http://flyteadmin"}},"server":{"grpcPort":8089,"httpPort":8088,"security":{"allowCors":true,"allowedHeaders":["Content-Type","flyte-authorization"],"allowedOrigins":["*"],"secure":false,"useAuth":false}}},"catalog":{"catalog-cache":{"endpoint":"datacatalog:89","insecure":true,"type":"datacatalog"}},"console":{"BASE_URL":"/console","CONFIG_DIR":"/etc/flyte/config"},"copilot":{"plugins":{"k8s":{"co-pilot":{"image":"cr.flyte.org/flyteorg/flytecopilot:v1.10.7-b0","name":"flyte-copilot-","start-timeout":"30s"}}}},"core":{"propeller":{"downstream-eval-duration":"30s","enable-admin-launcher":true,"leader-election":{"enabled":true,"lease-duration":"15s","lock-config-map":{"name":"propeller-leader","namespace":"flyte"},"renew-deadline":"10s","retry-period":"2s"},"limit-namespace":"all","max-workflow-retries":30,"metadata-prefix":"metadata/propeller","metrics-prefix":"flyte","prof-port":10254,"queue":{"batch-size":-1,"batching-interval":"2s","queue":{"base-delay":"5s","capacity":1000,"max-delay":"120s","rate":100,"type":"maxof"},"sub-queue":{"capacity":100,"rate":10,"type":"bucket"},"type":"batch"},"rawoutput-prefix":"s3://my-s3-bucket/","workers":4,"workflow-reeval-duration":"30s"},"webhook":{"certDir":"/etc/webhook/certs","serviceName":"flyte-pod-webhook"}},"datacatalogServer":{"application":{"grpcPort":8089,"grpcServerReflection":true,"httpPort":8080},"datacatalog":{"metrics-scope":"datacatalog","profiler-port":10254,"storage-prefix":"metadata/datacatalog"}},"domain":{"domains":[{"id":"development","name":"development"},{"id":"staging","name":"staging"},{"id":"production","name":"production"}]},"enabled_plugins":{"tasks":{"task-plugins":{"default-for-task-types":{"bigquery_query_job_task":"agent-service","container":"container","container_array":"k8s-array","sidecar":"sidecar"},"enabled-plugins":["container","sidecar","k8s-array","agent-service"]}}},"k8s":{"plugins":{"agent-service":{"defaultAgent":{"endpoint":"dns:///flyteagent.flyte.svc.cluster.local:8000","insecure":true},"supportedTaskTypes":["bigquery_query_job_task"]},"k8s":{"default-cpus":"100m","default-env-vars":[{"FLYTE_AWS_ENDPOINT":"http://minio.flyte:9000"},{"FLYTE_AWS_ACCESS_KEY_ID":"minio"},{"FLYTE_AWS_SECRET_ACCESS_KEY":"miniostorage"}],"default-memory":"200Mi"}}},"logger":{"logger":{"level":5,"show-source":true}},"remoteData":{"remoteData":{"region":"us-east-1","scheme":"local","signedUrls":{"durationMinutes":3}}},"resource_manager":{"propeller":{"resourcemanager":{"redis":null,"type":"noop"}}},"task_logs":{"plugins":{"logs":{"cloudwatch-enabled":false,"kubernetes-enabled":true,"kubernetes-template-uri":"http://localhost:30082/#/log/{{ \"{{\" }} .namespace {{ \"}}\" }}/{{ \"{{\" }} .podName {{ \"}}\" }}/pod?namespace={{ \"{{\" }} .namespace {{ \"}}\" }}"}}},"task_resource_defaults":{"task_resources":{"defaults":{"cpu":"100m","memory":"200Mi","storage":"5Mi"},"limits":{"cpu":2,"gpu":1,"memory":"1Gi","storage":"20Mi"}}}}` | ----------------------------------------------------------------- CONFIGMAPS SETTINGS | +| flyte.configmap | object | `{"adminServer":{"auth":{"appAuth":{"thirdPartyConfig":{"flyteClient":{"clientId":"flytectl","redirectUri":"http://localhost:53593/callback","scopes":["offline","all"]}}},"authorizedUris":["https://localhost:30081","http://flyteadmin:80","http://flyteadmin.flyte.svc.cluster.local:80"],"userAuth":{"openId":{"baseUrl":"https://accounts.google.com","clientId":"657465813211-6eog7ek7li5k7i7fvgv2921075063hpe.apps.googleusercontent.com","scopes":["profile","openid"]}}},"flyteadmin":{"eventVersion":2,"metadataStoragePrefix":["metadata","admin"],"metricsScope":"flyte:","profilerPort":10254,"roleNameKey":"iam.amazonaws.com/role","testing":{"host":"http://flyteadmin"}},"server":{"grpcPort":8089,"httpPort":8088,"security":{"allowCors":true,"allowedHeaders":["Content-Type","flyte-authorization"],"allowedOrigins":["*"],"secure":false,"useAuth":false}}},"catalog":{"catalog-cache":{"endpoint":"datacatalog:89","insecure":true,"type":"datacatalog"}},"console":{"BASE_URL":"/console","CONFIG_DIR":"/etc/flyte/config"},"copilot":{"plugins":{"k8s":{"co-pilot":{"image":"cr.flyte.org/flyteorg/flytecopilot:v1.10.7-b1","name":"flyte-copilot-","start-timeout":"30s"}}}},"core":{"propeller":{"downstream-eval-duration":"30s","enable-admin-launcher":true,"leader-election":{"enabled":true,"lease-duration":"15s","lock-config-map":{"name":"propeller-leader","namespace":"flyte"},"renew-deadline":"10s","retry-period":"2s"},"limit-namespace":"all","max-workflow-retries":30,"metadata-prefix":"metadata/propeller","metrics-prefix":"flyte","prof-port":10254,"queue":{"batch-size":-1,"batching-interval":"2s","queue":{"base-delay":"5s","capacity":1000,"max-delay":"120s","rate":100,"type":"maxof"},"sub-queue":{"capacity":100,"rate":10,"type":"bucket"},"type":"batch"},"rawoutput-prefix":"s3://my-s3-bucket/","workers":4,"workflow-reeval-duration":"30s"},"webhook":{"certDir":"/etc/webhook/certs","serviceName":"flyte-pod-webhook"}},"datacatalogServer":{"application":{"grpcPort":8089,"grpcServerReflection":true,"httpPort":8080},"datacatalog":{"metrics-scope":"datacatalog","profiler-port":10254,"storage-prefix":"metadata/datacatalog"}},"domain":{"domains":[{"id":"development","name":"development"},{"id":"staging","name":"staging"},{"id":"production","name":"production"}]},"enabled_plugins":{"tasks":{"task-plugins":{"default-for-task-types":{"bigquery_query_job_task":"agent-service","container":"container","container_array":"k8s-array","sidecar":"sidecar"},"enabled-plugins":["container","sidecar","k8s-array","agent-service"]}}},"k8s":{"plugins":{"agent-service":{"defaultAgent":{"endpoint":"dns:///flyteagent.flyte.svc.cluster.local:8000","insecure":true},"supportedTaskTypes":["bigquery_query_job_task"]},"k8s":{"default-cpus":"100m","default-env-vars":[{"FLYTE_AWS_ENDPOINT":"http://minio.flyte:9000"},{"FLYTE_AWS_ACCESS_KEY_ID":"minio"},{"FLYTE_AWS_SECRET_ACCESS_KEY":"miniostorage"}],"default-memory":"200Mi"}}},"logger":{"logger":{"level":5,"show-source":true}},"remoteData":{"remoteData":{"region":"us-east-1","scheme":"local","signedUrls":{"durationMinutes":3}}},"resource_manager":{"propeller":{"resourcemanager":{"redis":null,"type":"noop"}}},"task_logs":{"plugins":{"logs":{"cloudwatch-enabled":false,"kubernetes-enabled":true,"kubernetes-template-uri":"http://localhost:30082/#/log/{{ \"{{\" }} .namespace {{ \"}}\" }}/{{ \"{{\" }} .podName {{ \"}}\" }}/pod?namespace={{ \"{{\" }} .namespace {{ \"}}\" }}"}}},"task_resource_defaults":{"task_resources":{"defaults":{"cpu":"100m","memory":"200Mi","storage":"5Mi"},"limits":{"cpu":2,"gpu":1,"memory":"1Gi","storage":"20Mi"}}}}` | ----------------------------------------------------------------- CONFIGMAPS SETTINGS | | flyte.configmap.adminServer | object | `{"auth":{"appAuth":{"thirdPartyConfig":{"flyteClient":{"clientId":"flytectl","redirectUri":"http://localhost:53593/callback","scopes":["offline","all"]}}},"authorizedUris":["https://localhost:30081","http://flyteadmin:80","http://flyteadmin.flyte.svc.cluster.local:80"],"userAuth":{"openId":{"baseUrl":"https://accounts.google.com","clientId":"657465813211-6eog7ek7li5k7i7fvgv2921075063hpe.apps.googleusercontent.com","scopes":["profile","openid"]}}},"flyteadmin":{"eventVersion":2,"metadataStoragePrefix":["metadata","admin"],"metricsScope":"flyte:","profilerPort":10254,"roleNameKey":"iam.amazonaws.com/role","testing":{"host":"http://flyteadmin"}},"server":{"grpcPort":8089,"httpPort":8088,"security":{"allowCors":true,"allowedHeaders":["Content-Type","flyte-authorization"],"allowedOrigins":["*"],"secure":false,"useAuth":false}}}` | FlyteAdmin server configuration | | flyte.configmap.adminServer.auth | object | `{"appAuth":{"thirdPartyConfig":{"flyteClient":{"clientId":"flytectl","redirectUri":"http://localhost:53593/callback","scopes":["offline","all"]}}},"authorizedUris":["https://localhost:30081","http://flyteadmin:80","http://flyteadmin.flyte.svc.cluster.local:80"],"userAuth":{"openId":{"baseUrl":"https://accounts.google.com","clientId":"657465813211-6eog7ek7li5k7i7fvgv2921075063hpe.apps.googleusercontent.com","scopes":["profile","openid"]}}}` | Authentication configuration | | flyte.configmap.adminServer.server.security.secure | bool | `false` | Controls whether to serve requests over SSL/TLS. | | flyte.configmap.adminServer.server.security.useAuth | bool | `false` | Controls whether to enforce authentication. Follow the guide in https://docs.flyte.org/ on how to setup authentication. | | flyte.configmap.catalog | object | `{"catalog-cache":{"endpoint":"datacatalog:89","insecure":true,"type":"datacatalog"}}` | Catalog Client configuration [structure](https://pkg.go.dev/github.com/flyteorg/flytepropeller/pkg/controller/nodes/task/catalog#Config) Additional advanced Catalog configuration [here](https://pkg.go.dev/github.com/lyft/flyteplugins/go/tasks/pluginmachinery/catalog#Config) | | flyte.configmap.console | object | `{"BASE_URL":"/console","CONFIG_DIR":"/etc/flyte/config"}` | Configuration for Flyte console UI | -| flyte.configmap.copilot | object | `{"plugins":{"k8s":{"co-pilot":{"image":"cr.flyte.org/flyteorg/flytecopilot:v1.10.7-b0","name":"flyte-copilot-","start-timeout":"30s"}}}}` | Copilot configuration | -| flyte.configmap.copilot.plugins.k8s.co-pilot | object | `{"image":"cr.flyte.org/flyteorg/flytecopilot:v1.10.7-b0","name":"flyte-copilot-","start-timeout":"30s"}` | Structure documented [here](https://pkg.go.dev/github.com/lyft/flyteplugins@v0.5.28/go/tasks/pluginmachinery/flytek8s/config#FlyteCoPilotConfig) | +| flyte.configmap.copilot | object | `{"plugins":{"k8s":{"co-pilot":{"image":"cr.flyte.org/flyteorg/flytecopilot:v1.10.7-b1","name":"flyte-copilot-","start-timeout":"30s"}}}}` | Copilot configuration | +| flyte.configmap.copilot.plugins.k8s.co-pilot | object | `{"image":"cr.flyte.org/flyteorg/flytecopilot:v1.10.7-b1","name":"flyte-copilot-","start-timeout":"30s"}` | Structure documented [here](https://pkg.go.dev/github.com/lyft/flyteplugins@v0.5.28/go/tasks/pluginmachinery/flytek8s/config#FlyteCoPilotConfig) | | flyte.configmap.core | object | `{"propeller":{"downstream-eval-duration":"30s","enable-admin-launcher":true,"leader-election":{"enabled":true,"lease-duration":"15s","lock-config-map":{"name":"propeller-leader","namespace":"flyte"},"renew-deadline":"10s","retry-period":"2s"},"limit-namespace":"all","max-workflow-retries":30,"metadata-prefix":"metadata/propeller","metrics-prefix":"flyte","prof-port":10254,"queue":{"batch-size":-1,"batching-interval":"2s","queue":{"base-delay":"5s","capacity":1000,"max-delay":"120s","rate":100,"type":"maxof"},"sub-queue":{"capacity":100,"rate":10,"type":"bucket"},"type":"batch"},"rawoutput-prefix":"s3://my-s3-bucket/","workers":4,"workflow-reeval-duration":"30s"},"webhook":{"certDir":"/etc/webhook/certs","serviceName":"flyte-pod-webhook"}}` | Core propeller configuration | | flyte.configmap.core.propeller | object | `{"downstream-eval-duration":"30s","enable-admin-launcher":true,"leader-election":{"enabled":true,"lease-duration":"15s","lock-config-map":{"name":"propeller-leader","namespace":"flyte"},"renew-deadline":"10s","retry-period":"2s"},"limit-namespace":"all","max-workflow-retries":30,"metadata-prefix":"metadata/propeller","metrics-prefix":"flyte","prof-port":10254,"queue":{"batch-size":-1,"batching-interval":"2s","queue":{"base-delay":"5s","capacity":1000,"max-delay":"120s","rate":100,"type":"maxof"},"sub-queue":{"capacity":100,"rate":10,"type":"bucket"},"type":"batch"},"rawoutput-prefix":"s3://my-s3-bucket/","workers":4,"workflow-reeval-duration":"30s"}` | follows the structure specified [here](https://pkg.go.dev/github.com/flyteorg/flytepropeller/pkg/controller/config). | | flyte.configmap.datacatalogServer | object | `{"application":{"grpcPort":8089,"grpcServerReflection":true,"httpPort":8080},"datacatalog":{"metrics-scope":"datacatalog","profiler-port":10254,"storage-prefix":"metadata/datacatalog"}}` | Datacatalog server config | @@ -120,7 +120,7 @@ helm upgrade -f values-sandbox.yaml flyte . | flyte.datacatalog.configPath | string | `"/etc/datacatalog/config/*.yaml"` | Default regex string for searching configuration files | | flyte.datacatalog.image.pullPolicy | string | `"IfNotPresent"` | Docker image pull policy | | flyte.datacatalog.image.repository | string | `"cr.flyte.org/flyteorg/datacatalog"` | Docker image for Datacatalog deployment | -| flyte.datacatalog.image.tag | string | `"v1.10.7-b0"` | Docker image tag | +| flyte.datacatalog.image.tag | string | `"v1.10.7-b1"` | Docker image tag | | flyte.datacatalog.nodeSelector | object | `{}` | nodeSelector for Datacatalog deployment | | flyte.datacatalog.podAnnotations | object | `{}` | Annotations for Datacatalog pods | | flyte.datacatalog.replicaCount | int | `1` | Replicas count for Datacatalog deployment | @@ -136,7 +136,7 @@ helm upgrade -f values-sandbox.yaml flyte . | flyte.flyteadmin.env | list | `[]` | Additional flyteadmin container environment variables e.g. SendGrid's API key - name: SENDGRID_API_KEY value: "" e.g. secret environment variable (you can combine it with .additionalVolumes): - name: SENDGRID_API_KEY valueFrom: secretKeyRef: name: sendgrid-secret key: api_key | | flyte.flyteadmin.image.pullPolicy | string | `"IfNotPresent"` | Docker image pull policy | | flyte.flyteadmin.image.repository | string | `"cr.flyte.org/flyteorg/flyteadmin"` | Docker image for Flyteadmin deployment | -| flyte.flyteadmin.image.tag | string | `"v1.10.7-b0"` | Docker image tag | +| flyte.flyteadmin.image.tag | string | `"v1.10.7-b1"` | Docker image tag | | flyte.flyteadmin.initialProjects | list | `["flytesnacks","flytetester","flyteexamples"]` | Initial projects to create | | flyte.flyteadmin.nodeSelector | object | `{}` | nodeSelector for Flyteadmin deployment | | flyte.flyteadmin.podAnnotations | object | `{}` | Annotations for Flyteadmin pods | @@ -162,7 +162,7 @@ helm upgrade -f values-sandbox.yaml flyte . | flyte.flytepropeller.configPath | string | `"/etc/flyte/config/*.yaml"` | Default regex string for searching configuration files | | flyte.flytepropeller.image.pullPolicy | string | `"IfNotPresent"` | Docker image pull policy | | flyte.flytepropeller.image.repository | string | `"cr.flyte.org/flyteorg/flytepropeller"` | Docker image for Flytepropeller deployment | -| flyte.flytepropeller.image.tag | string | `"v1.10.7-b0"` | Docker image tag | +| flyte.flytepropeller.image.tag | string | `"v1.10.7-b1"` | Docker image tag | | flyte.flytepropeller.nodeSelector | object | `{}` | nodeSelector for Flytepropeller deployment | | flyte.flytepropeller.podAnnotations | object | `{}` | Annotations for Flytepropeller pods | | flyte.flytepropeller.replicaCount | int | `1` | Replicas count for Flytepropeller deployment | @@ -176,7 +176,7 @@ helm upgrade -f values-sandbox.yaml flyte . | flyte.flytescheduler.configPath | string | `"/etc/flyte/config/*.yaml"` | Default regex string for searching configuration files | | flyte.flytescheduler.image.pullPolicy | string | `"IfNotPresent"` | Docker image pull policy | | flyte.flytescheduler.image.repository | string | `"cr.flyte.org/flyteorg/flytescheduler"` | Docker image for Flytescheduler deployment | -| flyte.flytescheduler.image.tag | string | `"v1.10.7-b0"` | Docker image tag | +| flyte.flytescheduler.image.tag | string | `"v1.10.7-b1"` | Docker image tag | | flyte.flytescheduler.nodeSelector | object | `{}` | nodeSelector for Flytescheduler deployment | | flyte.flytescheduler.podAnnotations | object | `{}` | Annotations for Flytescheduler pods | | flyte.flytescheduler.resources | object | `{"limits":{"cpu":"250m","ephemeral-storage":"100Mi","memory":"500Mi"},"requests":{"cpu":"10m","ephemeral-storage":"50Mi","memory":"50Mi"}}` | Default resources requests and limits for Flytescheduler deployment | diff --git a/charts/flyte/values.yaml b/charts/flyte/values.yaml index e35268c134..048226b73e 100755 --- a/charts/flyte/values.yaml +++ b/charts/flyte/values.yaml @@ -16,7 +16,7 @@ flyte: # -- Docker image for Flyteadmin deployment repository: cr.flyte.org/flyteorg/flyteadmin # FLYTEADMIN_IMAGE # -- Docker image tag - tag: v1.10.7-b0 # FLYTEADMIN_TAG + tag: v1.10.7-b1 # FLYTEADMIN_TAG # -- Docker image pull policy pullPolicy: IfNotPresent # -- Additional flyteadmin container environment variables @@ -84,7 +84,7 @@ flyte: # -- Docker image for Flytescheduler deployment repository: cr.flyte.org/flyteorg/flytescheduler # FLYTESCHEDULER_IMAGE # -- Docker image tag - tag: v1.10.7-b0 # FLYTESCHEDULER_TAG + tag: v1.10.7-b1 # FLYTESCHEDULER_TAG # -- Docker image pull policy pullPolicy: IfNotPresent # -- Default resources requests and limits for Flytescheduler deployment @@ -129,7 +129,7 @@ flyte: # -- Docker image for Datacatalog deployment repository: cr.flyte.org/flyteorg/datacatalog # DATACATALOG_IMAGE # -- Docker image tag - tag: v1.10.7-b0 # DATACATALOG_TAG + tag: v1.10.7-b1 # DATACATALOG_TAG # -- Docker image pull policy pullPolicy: IfNotPresent # -- Default resources requests and limits for Datacatalog deployment @@ -178,7 +178,7 @@ flyte: # -- Docker image for Flytepropeller deployment repository: cr.flyte.org/flyteorg/flytepropeller # FLYTEPROPELLER_IMAGE # -- Docker image tag - tag: v1.10.7-b0 # FLYTEPROPELLER_TAG + tag: v1.10.7-b1 # FLYTEPROPELLER_TAG # -- Docker image pull policy pullPolicy: IfNotPresent # -- Default resources requests and limits for Flytepropeller deployment @@ -471,7 +471,7 @@ flyte: # -- Structure documented [here](https://pkg.go.dev/github.com/lyft/flyteplugins@v0.5.28/go/tasks/pluginmachinery/flytek8s/config#FlyteCoPilotConfig) co-pilot: name: flyte-copilot- - image: cr.flyte.org/flyteorg/flytecopilot:v1.10.7-b0 # FLYTECOPILOT_IMAGE + image: cr.flyte.org/flyteorg/flytecopilot:v1.10.7-b1 # FLYTECOPILOT_IMAGE start-timeout: 30s # -- Core propeller configuration diff --git a/deployment/eks/flyte_aws_scheduler_helm_generated.yaml b/deployment/eks/flyte_aws_scheduler_helm_generated.yaml index 20f0cf0d7b..05fd72bdca 100644 --- a/deployment/eks/flyte_aws_scheduler_helm_generated.yaml +++ b/deployment/eks/flyte_aws_scheduler_helm_generated.yaml @@ -429,7 +429,7 @@ data: plugins: k8s: co-pilot: - image: cr.flyte.org/flyteorg/flytecopilot:v1.10.7-b0 + image: cr.flyte.org/flyteorg/flytecopilot:v1.10.7-b1 name: flyte-copilot- start-timeout: 30s core.yaml: | @@ -865,7 +865,7 @@ spec: - /etc/flyte/config/*.yaml - migrate - run - image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: run-migrations volumeMounts: @@ -882,7 +882,7 @@ spec: - flytesnacks - flytetester - flyteexamples - image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: seed-projects volumeMounts: @@ -896,7 +896,7 @@ spec: - /etc/flyte/config/*.yaml - clusterresource - sync - image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: sync-cluster-resources volumeMounts: @@ -909,7 +909,7 @@ spec: - mountPath: /etc/secrets/ name: admin-secrets - name: generate-secrets - image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b1" imagePullPolicy: "IfNotPresent" command: ["/bin/sh", "-c"] args: @@ -932,7 +932,7 @@ spec: - --config - /etc/flyte/config/*.yaml - serve - image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: flyteadmin ports: @@ -1033,7 +1033,7 @@ spec: - /etc/flyte/config/*.yaml - clusterresource - run - image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: sync-cluster-resources volumeMounts: @@ -1153,7 +1153,7 @@ spec: - /etc/datacatalog/config/*.yaml - migrate - run - image: "cr.flyte.org/flyteorg/datacatalog:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/datacatalog:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: run-migrations volumeMounts: @@ -1167,7 +1167,7 @@ spec: - --config - /etc/datacatalog/config/*.yaml - serve - image: "cr.flyte.org/flyteorg/datacatalog:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/datacatalog:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: datacatalog ports: @@ -1226,7 +1226,7 @@ spec: template: metadata: annotations: - configChecksum: "df1663080e3f9c7f97035ff969c5c5ea649f23c071e2e473c7c1513d0d5d9b4" + configChecksum: "bc166f55ba3c1c28dd69e3ed5515185a366105541f3168dbb7eec901ff7fba8" labels: app.kubernetes.io/name: flytepropeller app.kubernetes.io/instance: flyte @@ -1252,7 +1252,7 @@ spec: valueFrom: fieldRef: fieldPath: metadata.namespace - image: "cr.flyte.org/flyteorg/flytepropeller:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flytepropeller:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: flytepropeller ports: @@ -1306,9 +1306,9 @@ spec: labels: app: flyte-pod-webhook app.kubernetes.io/name: flyte-pod-webhook - app.kubernetes.io/version: v1.10.7-b0 + app.kubernetes.io/version: v1.10.7-b1 annotations: - configChecksum: "df1663080e3f9c7f97035ff969c5c5ea649f23c071e2e473c7c1513d0d5d9b4" + configChecksum: "bc166f55ba3c1c28dd69e3ed5515185a366105541f3168dbb7eec901ff7fba8" spec: securityContext: fsGroup: 65534 @@ -1317,7 +1317,7 @@ spec: serviceAccountName: flyte-pod-webhook initContainers: - name: generate-secrets - image: "cr.flyte.org/flyteorg/flytepropeller:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flytepropeller:v1.10.7-b1" imagePullPolicy: "IfNotPresent" command: - flytepropeller @@ -1340,7 +1340,7 @@ spec: mountPath: /etc/flyte/config containers: - name: webhook - image: "cr.flyte.org/flyteorg/flytepropeller:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flytepropeller:v1.10.7-b1" imagePullPolicy: "IfNotPresent" command: - flytepropeller diff --git a/deployment/eks/flyte_helm_controlplane_generated.yaml b/deployment/eks/flyte_helm_controlplane_generated.yaml index 68d7312345..4eaea054ab 100644 --- a/deployment/eks/flyte_helm_controlplane_generated.yaml +++ b/deployment/eks/flyte_helm_controlplane_generated.yaml @@ -571,7 +571,7 @@ spec: - /etc/flyte/config/*.yaml - migrate - run - image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: run-migrations volumeMounts: @@ -588,7 +588,7 @@ spec: - flytesnacks - flytetester - flyteexamples - image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: seed-projects volumeMounts: @@ -602,7 +602,7 @@ spec: - /etc/flyte/config/*.yaml - clusterresource - sync - image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: sync-cluster-resources volumeMounts: @@ -615,7 +615,7 @@ spec: - mountPath: /etc/secrets/ name: admin-secrets - name: generate-secrets - image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b1" imagePullPolicy: "IfNotPresent" command: ["/bin/sh", "-c"] args: @@ -638,7 +638,7 @@ spec: - --config - /etc/flyte/config/*.yaml - serve - image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: flyteadmin ports: @@ -739,7 +739,7 @@ spec: - /etc/flyte/config/*.yaml - clusterresource - run - image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: sync-cluster-resources volumeMounts: @@ -859,7 +859,7 @@ spec: - /etc/datacatalog/config/*.yaml - migrate - run - image: "cr.flyte.org/flyteorg/datacatalog:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/datacatalog:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: run-migrations volumeMounts: @@ -873,7 +873,7 @@ spec: - --config - /etc/datacatalog/config/*.yaml - serve - image: "cr.flyte.org/flyteorg/datacatalog:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/datacatalog:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: datacatalog ports: @@ -949,7 +949,7 @@ spec: - precheck - --config - /etc/flyte/config/*.yaml - image: "cr.flyte.org/flyteorg/flytescheduler:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flytescheduler:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: flytescheduler-check volumeMounts: @@ -965,7 +965,7 @@ spec: - run - --config - /etc/flyte/config/*.yaml - image: "cr.flyte.org/flyteorg/flytescheduler:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flytescheduler:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: flytescheduler ports: diff --git a/deployment/eks/flyte_helm_dataplane_generated.yaml b/deployment/eks/flyte_helm_dataplane_generated.yaml index 34c3ccc312..0b96d5abfa 100644 --- a/deployment/eks/flyte_helm_dataplane_generated.yaml +++ b/deployment/eks/flyte_helm_dataplane_generated.yaml @@ -94,7 +94,7 @@ data: plugins: k8s: co-pilot: - image: cr.flyte.org/flyteorg/flytecopilot:v1.10.7-b0 + image: cr.flyte.org/flyteorg/flytecopilot:v1.10.7-b1 name: flyte-copilot- start-timeout: 30s core.yaml: | @@ -427,7 +427,7 @@ spec: template: metadata: annotations: - configChecksum: "df1663080e3f9c7f97035ff969c5c5ea649f23c071e2e473c7c1513d0d5d9b4" + configChecksum: "bc166f55ba3c1c28dd69e3ed5515185a366105541f3168dbb7eec901ff7fba8" labels: app.kubernetes.io/name: flytepropeller app.kubernetes.io/instance: flyte @@ -453,7 +453,7 @@ spec: valueFrom: fieldRef: fieldPath: metadata.namespace - image: "cr.flyte.org/flyteorg/flytepropeller:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flytepropeller:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: flytepropeller ports: @@ -507,9 +507,9 @@ spec: labels: app: flyte-pod-webhook app.kubernetes.io/name: flyte-pod-webhook - app.kubernetes.io/version: v1.10.7-b0 + app.kubernetes.io/version: v1.10.7-b1 annotations: - configChecksum: "df1663080e3f9c7f97035ff969c5c5ea649f23c071e2e473c7c1513d0d5d9b4" + configChecksum: "bc166f55ba3c1c28dd69e3ed5515185a366105541f3168dbb7eec901ff7fba8" spec: securityContext: fsGroup: 65534 @@ -518,7 +518,7 @@ spec: serviceAccountName: flyte-pod-webhook initContainers: - name: generate-secrets - image: "cr.flyte.org/flyteorg/flytepropeller:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flytepropeller:v1.10.7-b1" imagePullPolicy: "IfNotPresent" command: - flytepropeller @@ -541,7 +541,7 @@ spec: mountPath: /etc/flyte/config containers: - name: webhook - image: "cr.flyte.org/flyteorg/flytepropeller:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flytepropeller:v1.10.7-b1" imagePullPolicy: "IfNotPresent" command: - flytepropeller diff --git a/deployment/eks/flyte_helm_generated.yaml b/deployment/eks/flyte_helm_generated.yaml index 30f1f82077..c198baf1a0 100644 --- a/deployment/eks/flyte_helm_generated.yaml +++ b/deployment/eks/flyte_helm_generated.yaml @@ -460,7 +460,7 @@ data: plugins: k8s: co-pilot: - image: cr.flyte.org/flyteorg/flytecopilot:v1.10.7-b0 + image: cr.flyte.org/flyteorg/flytecopilot:v1.10.7-b1 name: flyte-copilot- start-timeout: 30s core.yaml: | @@ -896,7 +896,7 @@ spec: - /etc/flyte/config/*.yaml - migrate - run - image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: run-migrations volumeMounts: @@ -913,7 +913,7 @@ spec: - flytesnacks - flytetester - flyteexamples - image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: seed-projects volumeMounts: @@ -927,7 +927,7 @@ spec: - /etc/flyte/config/*.yaml - clusterresource - sync - image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: sync-cluster-resources volumeMounts: @@ -940,7 +940,7 @@ spec: - mountPath: /etc/secrets/ name: admin-secrets - name: generate-secrets - image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b1" imagePullPolicy: "IfNotPresent" command: ["/bin/sh", "-c"] args: @@ -963,7 +963,7 @@ spec: - --config - /etc/flyte/config/*.yaml - serve - image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: flyteadmin ports: @@ -1064,7 +1064,7 @@ spec: - /etc/flyte/config/*.yaml - clusterresource - run - image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: sync-cluster-resources volumeMounts: @@ -1184,7 +1184,7 @@ spec: - /etc/datacatalog/config/*.yaml - migrate - run - image: "cr.flyte.org/flyteorg/datacatalog:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/datacatalog:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: run-migrations volumeMounts: @@ -1198,7 +1198,7 @@ spec: - --config - /etc/datacatalog/config/*.yaml - serve - image: "cr.flyte.org/flyteorg/datacatalog:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/datacatalog:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: datacatalog ports: @@ -1274,7 +1274,7 @@ spec: - precheck - --config - /etc/flyte/config/*.yaml - image: "cr.flyte.org/flyteorg/flytescheduler:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flytescheduler:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: flytescheduler-check volumeMounts: @@ -1290,7 +1290,7 @@ spec: - run - --config - /etc/flyte/config/*.yaml - image: "cr.flyte.org/flyteorg/flytescheduler:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flytescheduler:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: flytescheduler ports: @@ -1345,7 +1345,7 @@ spec: template: metadata: annotations: - configChecksum: "df1663080e3f9c7f97035ff969c5c5ea649f23c071e2e473c7c1513d0d5d9b4" + configChecksum: "bc166f55ba3c1c28dd69e3ed5515185a366105541f3168dbb7eec901ff7fba8" labels: app.kubernetes.io/name: flytepropeller app.kubernetes.io/instance: flyte @@ -1371,7 +1371,7 @@ spec: valueFrom: fieldRef: fieldPath: metadata.namespace - image: "cr.flyte.org/flyteorg/flytepropeller:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flytepropeller:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: flytepropeller ports: @@ -1425,9 +1425,9 @@ spec: labels: app: flyte-pod-webhook app.kubernetes.io/name: flyte-pod-webhook - app.kubernetes.io/version: v1.10.7-b0 + app.kubernetes.io/version: v1.10.7-b1 annotations: - configChecksum: "df1663080e3f9c7f97035ff969c5c5ea649f23c071e2e473c7c1513d0d5d9b4" + configChecksum: "bc166f55ba3c1c28dd69e3ed5515185a366105541f3168dbb7eec901ff7fba8" spec: securityContext: fsGroup: 65534 @@ -1436,7 +1436,7 @@ spec: serviceAccountName: flyte-pod-webhook initContainers: - name: generate-secrets - image: "cr.flyte.org/flyteorg/flytepropeller:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flytepropeller:v1.10.7-b1" imagePullPolicy: "IfNotPresent" command: - flytepropeller @@ -1459,7 +1459,7 @@ spec: mountPath: /etc/flyte/config containers: - name: webhook - image: "cr.flyte.org/flyteorg/flytepropeller:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flytepropeller:v1.10.7-b1" imagePullPolicy: "IfNotPresent" command: - flytepropeller diff --git a/deployment/gcp/flyte_generated.yaml b/deployment/gcp/flyte_generated.yaml index 3c880f0043..df7bef915e 100644 --- a/deployment/gcp/flyte_generated.yaml +++ b/deployment/gcp/flyte_generated.yaml @@ -8682,7 +8682,7 @@ spec: - --config - /etc/datacatalog/config/*.yaml - serve - image: cr.flyte.org/flyteorg/datacatalog:v1.10.7-b0 + image: cr.flyte.org/flyteorg/datacatalog:v1.10.7-b1 imagePullPolicy: IfNotPresent name: datacatalog ports: @@ -8705,7 +8705,7 @@ spec: - /etc/datacatalog/config/*.yaml - migrate - run - image: cr.flyte.org/flyteorg/datacatalog:v1.10.7-b0 + image: cr.flyte.org/flyteorg/datacatalog:v1.10.7-b1 imagePullPolicy: IfNotPresent name: run-migrations volumeMounts: @@ -8766,7 +8766,7 @@ spec: valueFrom: fieldRef: fieldPath: metadata.namespace - image: cr.flyte.org/flyteorg/flytepropeller:v1.10.7-b0 + image: cr.flyte.org/flyteorg/flytepropeller:v1.10.7-b1 imagePullPolicy: IfNotPresent name: webhook volumeMounts: @@ -8793,7 +8793,7 @@ spec: valueFrom: fieldRef: fieldPath: metadata.namespace - image: cr.flyte.org/flyteorg/flytepropeller:v1.10.7-b0 + image: cr.flyte.org/flyteorg/flytepropeller:v1.10.7-b1 imagePullPolicy: IfNotPresent name: generate-secrets volumeMounts: @@ -8841,7 +8841,7 @@ spec: - --config - /etc/flyte/config/*.yaml - serve - image: cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b0 + image: cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b1 imagePullPolicy: IfNotPresent name: flyteadmin ports: @@ -8888,7 +8888,7 @@ spec: - /etc/flyte/config/*.yaml - migrate - run - image: cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b0 + image: cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b1 imagePullPolicy: IfNotPresent name: run-migrations volumeMounts: @@ -8905,7 +8905,7 @@ spec: - flytesnacks - flytetester - flyteexamples - image: cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b0 + image: cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b1 imagePullPolicy: IfNotPresent name: seed-projects volumeMounts: @@ -8919,7 +8919,7 @@ spec: - /etc/flyte/config/*.yaml - clusterresource - sync - image: cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b0 + image: cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b1 imagePullPolicy: IfNotPresent name: sync-cluster-resources volumeMounts: @@ -8939,7 +8939,7 @@ spec: valueFrom: fieldRef: fieldPath: metadata.namespace - image: cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b0 + image: cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b1 imagePullPolicy: IfNotPresent name: generate-secrets volumeMounts: @@ -9044,7 +9044,7 @@ spec: valueFrom: fieldRef: fieldPath: metadata.namespace - image: cr.flyte.org/flyteorg/flytepropeller:v1.10.7-b0 + image: cr.flyte.org/flyteorg/flytepropeller:v1.10.7-b1 imagePullPolicy: IfNotPresent name: flytepropeller ports: @@ -9312,7 +9312,7 @@ spec: - /etc/flyte/config/*.yaml - clusterresource - sync - image: cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b0 + image: cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b1 imagePullPolicy: IfNotPresent name: sync-cluster-resources volumeMounts: diff --git a/deployment/gcp/flyte_helm_controlplane_generated.yaml b/deployment/gcp/flyte_helm_controlplane_generated.yaml index 66e8f1be18..afb124e36a 100644 --- a/deployment/gcp/flyte_helm_controlplane_generated.yaml +++ b/deployment/gcp/flyte_helm_controlplane_generated.yaml @@ -586,7 +586,7 @@ spec: - /etc/flyte/config/*.yaml - migrate - run - image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: run-migrations volumeMounts: @@ -603,7 +603,7 @@ spec: - flytesnacks - flytetester - flyteexamples - image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: seed-projects volumeMounts: @@ -617,7 +617,7 @@ spec: - /etc/flyte/config/*.yaml - clusterresource - sync - image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: sync-cluster-resources volumeMounts: @@ -630,7 +630,7 @@ spec: - mountPath: /etc/secrets/ name: admin-secrets - name: generate-secrets - image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b1" imagePullPolicy: "IfNotPresent" command: ["/bin/sh", "-c"] args: @@ -653,7 +653,7 @@ spec: - --config - /etc/flyte/config/*.yaml - serve - image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: flyteadmin ports: @@ -754,7 +754,7 @@ spec: - /etc/flyte/config/*.yaml - clusterresource - run - image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: sync-cluster-resources volumeMounts: @@ -874,7 +874,7 @@ spec: - /etc/datacatalog/config/*.yaml - migrate - run - image: "cr.flyte.org/flyteorg/datacatalog:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/datacatalog:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: run-migrations volumeMounts: @@ -888,7 +888,7 @@ spec: - --config - /etc/datacatalog/config/*.yaml - serve - image: "cr.flyte.org/flyteorg/datacatalog:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/datacatalog:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: datacatalog ports: @@ -964,7 +964,7 @@ spec: - precheck - --config - /etc/flyte/config/*.yaml - image: "cr.flyte.org/flyteorg/flytescheduler:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flytescheduler:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: flytescheduler-check volumeMounts: @@ -980,7 +980,7 @@ spec: - run - --config - /etc/flyte/config/*.yaml - image: "cr.flyte.org/flyteorg/flytescheduler:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flytescheduler:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: flytescheduler ports: diff --git a/deployment/gcp/flyte_helm_dataplane_generated.yaml b/deployment/gcp/flyte_helm_dataplane_generated.yaml index 3ea61f0d4f..c8c00f2367 100644 --- a/deployment/gcp/flyte_helm_dataplane_generated.yaml +++ b/deployment/gcp/flyte_helm_dataplane_generated.yaml @@ -94,7 +94,7 @@ data: plugins: k8s: co-pilot: - image: cr.flyte.org/flyteorg/flytecopilot:v1.10.7-b0 + image: cr.flyte.org/flyteorg/flytecopilot:v1.10.7-b1 name: flyte-copilot- start-timeout: 30s core.yaml: | @@ -435,7 +435,7 @@ spec: template: metadata: annotations: - configChecksum: "7df3601285098b6d72884ed505fef5888d16b2957484b97e006616363986b8e" + configChecksum: "d326dde27803fb8570a879090d4b9d49b249522825ee5c2360d1da4a76ca99b" labels: app.kubernetes.io/name: flytepropeller app.kubernetes.io/instance: flyte @@ -460,7 +460,7 @@ spec: valueFrom: fieldRef: fieldPath: metadata.namespace - image: "cr.flyte.org/flyteorg/flytepropeller:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flytepropeller:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: flytepropeller ports: @@ -514,9 +514,9 @@ spec: labels: app: flyte-pod-webhook app.kubernetes.io/name: flyte-pod-webhook - app.kubernetes.io/version: v1.10.7-b0 + app.kubernetes.io/version: v1.10.7-b1 annotations: - configChecksum: "7df3601285098b6d72884ed505fef5888d16b2957484b97e006616363986b8e" + configChecksum: "d326dde27803fb8570a879090d4b9d49b249522825ee5c2360d1da4a76ca99b" spec: securityContext: fsGroup: 65534 @@ -525,7 +525,7 @@ spec: serviceAccountName: flyte-pod-webhook initContainers: - name: generate-secrets - image: "cr.flyte.org/flyteorg/flytepropeller:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flytepropeller:v1.10.7-b1" imagePullPolicy: "IfNotPresent" command: - flytepropeller @@ -548,7 +548,7 @@ spec: mountPath: /etc/flyte/config containers: - name: webhook - image: "cr.flyte.org/flyteorg/flytepropeller:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flytepropeller:v1.10.7-b1" imagePullPolicy: "IfNotPresent" command: - flytepropeller diff --git a/deployment/gcp/flyte_helm_generated.yaml b/deployment/gcp/flyte_helm_generated.yaml index 2dacc9d51e..6e47caa492 100644 --- a/deployment/gcp/flyte_helm_generated.yaml +++ b/deployment/gcp/flyte_helm_generated.yaml @@ -473,7 +473,7 @@ data: plugins: k8s: co-pilot: - image: cr.flyte.org/flyteorg/flytecopilot:v1.10.7-b0 + image: cr.flyte.org/flyteorg/flytecopilot:v1.10.7-b1 name: flyte-copilot- start-timeout: 30s core.yaml: | @@ -919,7 +919,7 @@ spec: - /etc/flyte/config/*.yaml - migrate - run - image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: run-migrations volumeMounts: @@ -936,7 +936,7 @@ spec: - flytesnacks - flytetester - flyteexamples - image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: seed-projects volumeMounts: @@ -950,7 +950,7 @@ spec: - /etc/flyte/config/*.yaml - clusterresource - sync - image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: sync-cluster-resources volumeMounts: @@ -963,7 +963,7 @@ spec: - mountPath: /etc/secrets/ name: admin-secrets - name: generate-secrets - image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b1" imagePullPolicy: "IfNotPresent" command: ["/bin/sh", "-c"] args: @@ -986,7 +986,7 @@ spec: - --config - /etc/flyte/config/*.yaml - serve - image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: flyteadmin ports: @@ -1087,7 +1087,7 @@ spec: - /etc/flyte/config/*.yaml - clusterresource - run - image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: sync-cluster-resources volumeMounts: @@ -1207,7 +1207,7 @@ spec: - /etc/datacatalog/config/*.yaml - migrate - run - image: "cr.flyte.org/flyteorg/datacatalog:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/datacatalog:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: run-migrations volumeMounts: @@ -1221,7 +1221,7 @@ spec: - --config - /etc/datacatalog/config/*.yaml - serve - image: "cr.flyte.org/flyteorg/datacatalog:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/datacatalog:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: datacatalog ports: @@ -1297,7 +1297,7 @@ spec: - precheck - --config - /etc/flyte/config/*.yaml - image: "cr.flyte.org/flyteorg/flytescheduler:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flytescheduler:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: flytescheduler-check volumeMounts: @@ -1313,7 +1313,7 @@ spec: - run - --config - /etc/flyte/config/*.yaml - image: "cr.flyte.org/flyteorg/flytescheduler:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flytescheduler:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: flytescheduler ports: @@ -1368,7 +1368,7 @@ spec: template: metadata: annotations: - configChecksum: "7df3601285098b6d72884ed505fef5888d16b2957484b97e006616363986b8e" + configChecksum: "d326dde27803fb8570a879090d4b9d49b249522825ee5c2360d1da4a76ca99b" labels: app.kubernetes.io/name: flytepropeller app.kubernetes.io/instance: flyte @@ -1393,7 +1393,7 @@ spec: valueFrom: fieldRef: fieldPath: metadata.namespace - image: "cr.flyte.org/flyteorg/flytepropeller:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flytepropeller:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: flytepropeller ports: @@ -1447,9 +1447,9 @@ spec: labels: app: flyte-pod-webhook app.kubernetes.io/name: flyte-pod-webhook - app.kubernetes.io/version: v1.10.7-b0 + app.kubernetes.io/version: v1.10.7-b1 annotations: - configChecksum: "7df3601285098b6d72884ed505fef5888d16b2957484b97e006616363986b8e" + configChecksum: "d326dde27803fb8570a879090d4b9d49b249522825ee5c2360d1da4a76ca99b" spec: securityContext: fsGroup: 65534 @@ -1458,7 +1458,7 @@ spec: serviceAccountName: flyte-pod-webhook initContainers: - name: generate-secrets - image: "cr.flyte.org/flyteorg/flytepropeller:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flytepropeller:v1.10.7-b1" imagePullPolicy: "IfNotPresent" command: - flytepropeller @@ -1481,7 +1481,7 @@ spec: mountPath: /etc/flyte/config containers: - name: webhook - image: "cr.flyte.org/flyteorg/flytepropeller:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flytepropeller:v1.10.7-b1" imagePullPolicy: "IfNotPresent" command: - flytepropeller diff --git a/deployment/sandbox-binary/flyte_sandbox_binary_helm_generated.yaml b/deployment/sandbox-binary/flyte_sandbox_binary_helm_generated.yaml index 7ec69befea..cd4253135f 100644 --- a/deployment/sandbox-binary/flyte_sandbox_binary_helm_generated.yaml +++ b/deployment/sandbox-binary/flyte_sandbox_binary_helm_generated.yaml @@ -116,7 +116,7 @@ data: stackdriver-enabled: false k8s: co-pilot: - image: "cr.flyte.org/flyteorg/flytecopilot:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flytecopilot:v1.10.7-b1" k8s-array: logs: config: @@ -358,7 +358,7 @@ spec: app.kubernetes.io/instance: flyte app.kubernetes.io/component: flyte-binary annotations: - checksum/configuration: 55e7b2e56788afd27bbd6bb58479fa7bb0c3e60ec6161f2c62bb21d677ade59f + checksum/configuration: a6640da4257f8300cc2634da5cb5234f5b82abb4af31ef37eb983a4a44e6c177 checksum/configuration-secret: d5d93f4e67780b21593dc3799f0f6682aab0765e708e4020939975d14d44f929 checksum/cluster-resource-templates: 7dfa59f3d447e9c099b8f8ffad3af466fecbc9cf9f8c97295d9634254a55d4ae spec: diff --git a/deployment/sandbox/flyte_helm_generated.yaml b/deployment/sandbox/flyte_helm_generated.yaml index 70f7b7e2d2..1464917a33 100644 --- a/deployment/sandbox/flyte_helm_generated.yaml +++ b/deployment/sandbox/flyte_helm_generated.yaml @@ -585,7 +585,7 @@ data: plugins: k8s: co-pilot: - image: cr.flyte.org/flyteorg/flytecopilot:v1.10.7-b0 + image: cr.flyte.org/flyteorg/flytecopilot:v1.10.7-b1 name: flyte-copilot- start-timeout: 30s core.yaml: | @@ -6708,7 +6708,7 @@ spec: - /etc/flyte/config/*.yaml - migrate - run - image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: run-migrations volumeMounts: @@ -6724,7 +6724,7 @@ spec: - flytesnacks - flytetester - flyteexamples - image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: seed-projects volumeMounts: @@ -6737,7 +6737,7 @@ spec: - /etc/flyte/config/*.yaml - clusterresource - sync - image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: sync-cluster-resources volumeMounts: @@ -6749,7 +6749,7 @@ spec: - mountPath: /etc/secrets/ name: admin-secrets - name: generate-secrets - image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b1" imagePullPolicy: "IfNotPresent" command: ["/bin/sh", "-c"] args: @@ -6772,7 +6772,7 @@ spec: - --config - /etc/flyte/config/*.yaml - serve - image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: flyteadmin ports: @@ -6863,7 +6863,7 @@ spec: - /etc/flyte/config/*.yaml - clusterresource - run - image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flyteadmin:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: sync-cluster-resources volumeMounts: @@ -6978,7 +6978,7 @@ spec: - /etc/datacatalog/config/*.yaml - migrate - run - image: "cr.flyte.org/flyteorg/datacatalog:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/datacatalog:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: run-migrations volumeMounts: @@ -6991,7 +6991,7 @@ spec: - --config - /etc/datacatalog/config/*.yaml - serve - image: "cr.flyte.org/flyteorg/datacatalog:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/datacatalog:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: datacatalog ports: @@ -7057,7 +7057,7 @@ spec: - precheck - --config - /etc/flyte/config/*.yaml - image: "cr.flyte.org/flyteorg/flytescheduler:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flytescheduler:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: flytescheduler-check volumeMounts: @@ -7072,7 +7072,7 @@ spec: - run - --config - /etc/flyte/config/*.yaml - image: "cr.flyte.org/flyteorg/flytescheduler:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flytescheduler:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: flytescheduler ports: @@ -7124,7 +7124,7 @@ spec: template: metadata: annotations: - configChecksum: "dc2d55ef2d0966ee6101f1e99bc2a305863987d88e4510edfcaf851f6a97cec" + configChecksum: "12a9f70a50c75d12a2a6990a7772c72326b1595f5cc7e2355bc21b51d139db5" labels: app.kubernetes.io/name: flytepropeller app.kubernetes.io/instance: flyte @@ -7149,7 +7149,7 @@ spec: valueFrom: fieldRef: fieldPath: metadata.namespace - image: "cr.flyte.org/flyteorg/flytepropeller:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flytepropeller:v1.10.7-b1" imagePullPolicy: "IfNotPresent" name: flytepropeller ports: @@ -7196,9 +7196,9 @@ spec: labels: app: flyte-pod-webhook app.kubernetes.io/name: flyte-pod-webhook - app.kubernetes.io/version: v1.10.7-b0 + app.kubernetes.io/version: v1.10.7-b1 annotations: - configChecksum: "dc2d55ef2d0966ee6101f1e99bc2a305863987d88e4510edfcaf851f6a97cec" + configChecksum: "12a9f70a50c75d12a2a6990a7772c72326b1595f5cc7e2355bc21b51d139db5" spec: securityContext: fsGroup: 65534 @@ -7207,7 +7207,7 @@ spec: serviceAccountName: flyte-pod-webhook initContainers: - name: generate-secrets - image: "cr.flyte.org/flyteorg/flytepropeller:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flytepropeller:v1.10.7-b1" imagePullPolicy: "IfNotPresent" command: - flytepropeller @@ -7230,7 +7230,7 @@ spec: mountPath: /etc/flyte/config containers: - name: webhook - image: "cr.flyte.org/flyteorg/flytepropeller:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flytepropeller:v1.10.7-b1" imagePullPolicy: "IfNotPresent" command: - flytepropeller diff --git a/docker/sandbox-bundled/manifests/complete-agent.yaml b/docker/sandbox-bundled/manifests/complete-agent.yaml index 1521b5d23b..fc5f07c514 100644 --- a/docker/sandbox-bundled/manifests/complete-agent.yaml +++ b/docker/sandbox-bundled/manifests/complete-agent.yaml @@ -468,7 +468,7 @@ data: stackdriver-enabled: false k8s: co-pilot: - image: "cr.flyte.org/flyteorg/flytecopilot:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flytecopilot:v1.10.7-b1" k8s-array: logs: config: @@ -816,7 +816,7 @@ type: Opaque --- apiVersion: v1 data: - haSharedSecret: c1BOWHU1Z0FjTDlFNHNlYg== + haSharedSecret: MnY1ODh4a1hhSUlPVGdOag== proxyPassword: "" proxyUsername: "" kind: Secret @@ -1246,7 +1246,7 @@ spec: metadata: annotations: checksum/cluster-resource-templates: 6fd9b172465e3089fcc59f738b92b8dc4d8939360c19de8ee65f68b0e7422035 - checksum/configuration: ee67efb3dde411e499256060b26900d37a8aa5940da6c62d909b91b7f8a3da89 + checksum/configuration: 1e97a1eb142d01be67dc3dd40f6c7ba16a63386ab71d2ebffd28ae8377b6ff89 checksum/configuration-secret: 09216ffaa3d29e14f88b1f30af580d02a2a5e014de4d750b7f275cc07ed4e914 labels: app.kubernetes.io/component: flyte-binary @@ -1412,7 +1412,7 @@ spec: metadata: annotations: checksum/config: 8f50e768255a87f078ba8b9879a0c174c3e045ffb46ac8723d2eedbe293c8d81 - checksum/secret: d732f4e97ff544b63fd075fe756e252a3eec17631aacf9a9ab157eeafbfff4e8 + checksum/secret: 0991ead32b9fb4ecb157b5641ff3c8d2e4d845da6e465adef856d6f77c3ae3b1 labels: app: docker-registry release: flyte-sandbox diff --git a/docker/sandbox-bundled/manifests/complete.yaml b/docker/sandbox-bundled/manifests/complete.yaml index 11b835a2dc..3558a67d79 100644 --- a/docker/sandbox-bundled/manifests/complete.yaml +++ b/docker/sandbox-bundled/manifests/complete.yaml @@ -457,7 +457,7 @@ data: stackdriver-enabled: false k8s: co-pilot: - image: "cr.flyte.org/flyteorg/flytecopilot:v1.10.7-b0" + image: "cr.flyte.org/flyteorg/flytecopilot:v1.10.7-b1" k8s-array: logs: config: @@ -796,7 +796,7 @@ type: Opaque --- apiVersion: v1 data: - haSharedSecret: NjdPaTRkVGZ0a0xibnFDUA== + haSharedSecret: a1RJQ29GcFk5S1dTYVdGOA== proxyPassword: "" proxyUsername: "" kind: Secret @@ -1194,7 +1194,7 @@ spec: metadata: annotations: checksum/cluster-resource-templates: 6fd9b172465e3089fcc59f738b92b8dc4d8939360c19de8ee65f68b0e7422035 - checksum/configuration: e9a50159fd654000e9c3213be7f4b9afbfa1b62826665546b07eb1cda474be63 + checksum/configuration: fa883fbe6f4c3de94b39a5b90bbe9a48226a67c731e6cd7d369482ffd6f98208 checksum/configuration-secret: 09216ffaa3d29e14f88b1f30af580d02a2a5e014de4d750b7f275cc07ed4e914 labels: app.kubernetes.io/component: flyte-binary @@ -1360,7 +1360,7 @@ spec: metadata: annotations: checksum/config: 8f50e768255a87f078ba8b9879a0c174c3e045ffb46ac8723d2eedbe293c8d81 - checksum/secret: fe8e81ff2d03b918c0904af6b9d37f0157352bd44a95a49976093c3dac3fe89a + checksum/secret: f6dd7d7fdee05a64cbd1097976bfdd35343f9a60f49617bd8636caf1b4b5c6d4 labels: app: docker-registry release: flyte-sandbox diff --git a/docker/sandbox-bundled/manifests/dev.yaml b/docker/sandbox-bundled/manifests/dev.yaml index 49af22ccad..ac03a7d939 100644 --- a/docker/sandbox-bundled/manifests/dev.yaml +++ b/docker/sandbox-bundled/manifests/dev.yaml @@ -499,7 +499,7 @@ metadata: --- apiVersion: v1 data: - haSharedSecret: YlA5RGdRZVp5TkVyUndPbg== + haSharedSecret: ZTA3UlVMNVpZYkN0UDlpMw== proxyPassword: "" proxyUsername: "" kind: Secret @@ -934,7 +934,7 @@ spec: metadata: annotations: checksum/config: 8f50e768255a87f078ba8b9879a0c174c3e045ffb46ac8723d2eedbe293c8d81 - checksum/secret: 204ce8c497e0c0609e68a3a7775c527cb670fd3f8045485ad17a253a8fdebc55 + checksum/secret: ff5955e6516befcc8f1cb7e4d807d5a9d6f75948ea3baa578ad81d76150909f2 labels: app: docker-registry release: flyte-sandbox diff --git a/docs/conf.py b/docs/conf.py index 05651bf483..7dfc29bb42 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -35,7 +35,7 @@ # The short X.Y version version = "" # The full version, including alpha/beta/rc tags -release = "1.10.7-b0" +release = "1.10.7-b1" # -- General configuration --------------------------------------------------- diff --git a/docs/deployment/configuration/generated/flyteadmin_config.rst b/docs/deployment/configuration/generated/flyteadmin_config.rst index 082ba078c7..fe78df979c 100644 --- a/docs/deployment/configuration/generated/flyteadmin_config.rst +++ b/docs/deployment/configuration/generated/flyteadmin_config.rst @@ -3558,6 +3558,7 @@ config for a workflow node node-execution-deadline: 0s workflow-active-deadline: 0s default-max-attempts: 1 + enable-cr-debug-metadata: false ignore-retry-cause: false interruptible-failure-threshold: -1 max-node-retries-system-failures: 3 @@ -4056,6 +4057,18 @@ Ignore retry cause and count all attempts toward a node's max attempts "false" +enable-cr-debug-metadata (bool) +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +Collapse node on any terminal state, not just successful terminations. This is useful to reduce the size of workflow state in etcd. + +**Default Value**: + +.. code-block:: yaml + + "false" + + config.DefaultDeadlines ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/docs/deployment/configuration/generated/flytepropeller_config.rst b/docs/deployment/configuration/generated/flytepropeller_config.rst index 19344b2f53..85c318e082 100644 --- a/docs/deployment/configuration/generated/flytepropeller_config.rst +++ b/docs/deployment/configuration/generated/flytepropeller_config.rst @@ -4237,6 +4237,7 @@ config for a workflow node node-execution-deadline: 0s workflow-active-deadline: 0s default-max-attempts: 1 + enable-cr-debug-metadata: false ignore-retry-cause: false interruptible-failure-threshold: -1 max-node-retries-system-failures: 3 @@ -4881,6 +4882,18 @@ Ignore retry cause and count all attempts toward a node's max attempts "false" +enable-cr-debug-metadata (bool) +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +Collapse node on any terminal state, not just successful terminations. This is useful to reduce the size of workflow state in etcd. + +**Default Value**: + +.. code-block:: yaml + + "false" + + config.DefaultDeadlines ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/docs/deployment/configuration/generated/scheduler_config.rst b/docs/deployment/configuration/generated/scheduler_config.rst index 7a5413e9d7..c96746dd62 100644 --- a/docs/deployment/configuration/generated/scheduler_config.rst +++ b/docs/deployment/configuration/generated/scheduler_config.rst @@ -3558,6 +3558,7 @@ config for a workflow node node-execution-deadline: 0s workflow-active-deadline: 0s default-max-attempts: 1 + enable-cr-debug-metadata: false ignore-retry-cause: false interruptible-failure-threshold: -1 max-node-retries-system-failures: 3 @@ -4056,6 +4057,18 @@ Ignore retry cause and count all attempts toward a node's max attempts "false" +enable-cr-debug-metadata (bool) +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +Collapse node on any terminal state, not just successful terminations. This is useful to reduce the size of workflow state in etcd. + +**Default Value**: + +.. code-block:: yaml + + "false" + + config.DefaultDeadlines ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/kustomize/overlays/gcp/kustomization.yaml b/kustomize/overlays/gcp/kustomization.yaml index 4b96798fc5..aeb54b3308 100644 --- a/kustomize/overlays/gcp/kustomization.yaml +++ b/kustomize/overlays/gcp/kustomization.yaml @@ -23,7 +23,7 @@ bases: images: # FlyteAdmin - name: flyteadmin # match images with this name - newTag: v1.10.7-b0 # FLYTEADMIN_TAG override the tag + newTag: v1.10.7-b1 # FLYTEADMIN_TAG override the tag newName: cr.flyte.org/flyteorg/flyteadmin # override the name # FlyteConsole - name: flyteconsole # match images with this name @@ -31,15 +31,15 @@ images: newName: cr.flyte.org/flyteorg/flyteconsole # override the namep # Flyte DataCatalog - name: datacatalog # match images with this name - newTag: v1.10.7-b0 # DATACATALOG_TAG override the tag + newTag: v1.10.7-b1 # DATACATALOG_TAG override the tag newName: cr.flyte.org/flyteorg/datacatalog # override the name # FlytePropeller - name: flytepropeller # match images with this name - newTag: v1.10.7-b0 # FLYTEPROPELLER_TAG override the tag + newTag: v1.10.7-b1 # FLYTEPROPELLER_TAG override the tag newName: cr.flyte.org/flyteorg/flytepropeller # override the name # Webhook - name: webhook # match images with this name - newTag: v1.10.7-b0 # FLYTEPROPELLER_TAG override the tag + newTag: v1.10.7-b1 # FLYTEPROPELLER_TAG override the tag newName: cr.flyte.org/flyteorg/flytepropeller # override the name # Override postgres image to use alpine based (rather smaller) docker image - name: postgres From 8d3f96154c908ee41887b645182b2a3da7a8cbcc Mon Sep 17 00:00:00 2001 From: Katrina Rogan Date: Fri, 19 Jan 2024 07:14:23 -0800 Subject: [PATCH 18/30] Add org to all flyteadmin endpoints for consistency (#4746) * gen Signed-off-by: Katrina Rogan * regen Signed-off-by: Katrina Rogan * regen Signed-off-by: Katrina Rogan --------- Signed-off-by: Katrina Rogan --- .../flyteidl/admin/matchable_resource.pb.cc | 112 +- .../flyteidl/admin/matchable_resource.pb.h | 68 + .../gen/pb-cpp/flyteidl/admin/project.pb.cc | 97 +- .../gen/pb-cpp/flyteidl/admin/project.pb.h | 68 + .../gen/pb-cpp/flyteidl/service/admin.pb.cc | 738 +- .../gen/pb-cpp/flyteidl/service/signal.pb.cc | 27 +- .../flyteidl/admin/matchable_resource.pb.go | 189 +- .../gen/pb-go/flyteidl/admin/project.pb.go | 67 +- .../gen/pb-go/flyteidl/service/admin.pb.go | 341 +- .../gen/pb-go/flyteidl/service/admin.pb.gw.go | 808 +- .../pb-go/flyteidl/service/admin.swagger.json | 651 +- .../flyteidl/service/flyteadmin/README.md | 15 +- .../service/flyteadmin/api/swagger.yaml | 520 +- .../service/flyteadmin/api_admin_service.go | 1847 +++- .../gen/pb-go/flyteidl/service/openapi.go | 4 +- .../gen/pb-go/flyteidl/service/signal.pb.go | 45 +- .../pb-go/flyteidl/service/signal.pb.gw.go | 154 + .../flyteidl/service/signal.swagger.json | 122 + .../admin/MatchableResourceOuterClass.java | 200 +- .../flyteidl/admin/ProjectOuterClass.java | 190 +- .../gen/pb-java/flyteidl/service/Admin.java | 736 +- .../gen/pb-java/flyteidl/service/Signal.java | 25 +- flyteidl/gen/pb-js/flyteidl.d.ts | 12 + flyteidl/gen/pb-js/flyteidl.js | 34 + .../flyteidl/admin/matchable_resource_pb2.py | 12 +- .../flyteidl/admin/matchable_resource_pb2.pyi | 6 +- .../pb_python/flyteidl/admin/project_pb2.py | 16 +- .../pb_python/flyteidl/admin/project_pb2.pyi | 6 +- .../pb_python/flyteidl/service/admin_pb2.py | 32 +- .../flyteidl/service/flyteadmin/README.md | 15 +- .../flyteadmin/api/admin_service_api.py | 8633 ++++++++++------- .../flyteadmin/test/test_admin_service_api.py | 91 + .../pb_python/flyteidl/service/signal_pb2.py | 8 +- flyteidl/gen/pb_rust/flyteidl.admin.rs | 6 + .../flyteidl/admin/matchable_resource.proto | 3 + flyteidl/protos/flyteidl/admin/project.proto | 3 + flyteidl/protos/flyteidl/service/admin.proto | 51 +- flyteidl/protos/flyteidl/service/signal.proto | 7 + 38 files changed, 10808 insertions(+), 5151 deletions(-) diff --git a/flyteidl/gen/pb-cpp/flyteidl/admin/matchable_resource.pb.cc b/flyteidl/gen/pb-cpp/flyteidl/admin/matchable_resource.pb.cc index 82edc1a1ec..8bd580b5d2 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/admin/matchable_resource.pb.cc +++ b/flyteidl/gen/pb-cpp/flyteidl/admin/matchable_resource.pb.cc @@ -422,6 +422,7 @@ const ::google::protobuf::uint32 TableStruct_flyteidl_2fadmin_2fmatchable_5freso ~0u, // no _oneof_case_ ~0u, // no _weak_field_map_ PROTOBUF_FIELD_OFFSET(::flyteidl::admin::ListMatchableAttributesRequest, resource_type_), + PROTOBUF_FIELD_OFFSET(::flyteidl::admin::ListMatchableAttributesRequest, org_), ~0u, // no _has_bits_ PROTOBUF_FIELD_OFFSET(::flyteidl::admin::ListMatchableAttributesResponse, _internal_metadata_), ~0u, // no _extensions_ @@ -442,7 +443,7 @@ static const ::google::protobuf::internal::MigrationSchema schemas[] PROTOBUF_SE { 71, -1, sizeof(::flyteidl::admin::MatchingAttributes)}, { 85, -1, sizeof(::flyteidl::admin::MatchableAttributesConfiguration)}, { 96, -1, sizeof(::flyteidl::admin::ListMatchableAttributesRequest)}, - { 102, -1, sizeof(::flyteidl::admin::ListMatchableAttributesResponse)}, + { 103, -1, sizeof(::flyteidl::admin::ListMatchableAttributesResponse)}, }; static ::google::protobuf::Message const * const file_default_instances[] = { @@ -521,24 +522,25 @@ const char descriptor_table_protodef_flyteidl_2fadmin_2fmatchable_5fresource_2ep "ributes\030\001 \001(\0132\".flyteidl.admin.MatchingA" "ttributes\022\016\n\006domain\030\002 \001(\t\022\017\n\007project\030\003 \001" "(\t\022\020\n\010workflow\030\004 \001(\t\022\023\n\013launch_plan\030\005 \001(" - "\t\022\013\n\003org\030\006 \001(\t\"Z\n\036ListMatchableAttribute" + "\t\022\013\n\003org\030\006 \001(\t\"g\n\036ListMatchableAttribute" "sRequest\0228\n\rresource_type\030\001 \001(\0162!.flytei" - "dl.admin.MatchableResource\"k\n\037ListMatcha" - "bleAttributesResponse\022H\n\016configurations\030" - "\001 \003(\01320.flyteidl.admin.MatchableAttribut" - "esConfiguration*\340\001\n\021MatchableResource\022\021\n" - "\rTASK_RESOURCE\020\000\022\024\n\020CLUSTER_RESOURCE\020\001\022\023" - "\n\017EXECUTION_QUEUE\020\002\022\033\n\027EXECUTION_CLUSTER" - "_LABEL\020\003\022$\n QUALITY_OF_SERVICE_SPECIFICA" - "TION\020\004\022\023\n\017PLUGIN_OVERRIDE\020\005\022\035\n\031WORKFLOW_" - "EXECUTION_CONFIG\020\006\022\026\n\022CLUSTER_ASSIGNMENT" - "\020\007B=Z;github.com/flyteorg/flyte/flyteidl" - "/gen/pb-go/flyteidl/adminb\006proto3" + "dl.admin.MatchableResource\022\013\n\003org\030\002 \001(\t\"" + "k\n\037ListMatchableAttributesResponse\022H\n\016co" + "nfigurations\030\001 \003(\01320.flyteidl.admin.Matc" + "hableAttributesConfiguration*\340\001\n\021Matchab" + "leResource\022\021\n\rTASK_RESOURCE\020\000\022\024\n\020CLUSTER" + "_RESOURCE\020\001\022\023\n\017EXECUTION_QUEUE\020\002\022\033\n\027EXEC" + "UTION_CLUSTER_LABEL\020\003\022$\n QUALITY_OF_SERV" + "ICE_SPECIFICATION\020\004\022\023\n\017PLUGIN_OVERRIDE\020\005" + "\022\035\n\031WORKFLOW_EXECUTION_CONFIG\020\006\022\026\n\022CLUST" + "ER_ASSIGNMENT\020\007B=Z;github.com/flyteorg/f" + "lyte/flyteidl/gen/pb-go/flyteidl/adminb\006" + "proto3" ; ::google::protobuf::internal::DescriptorTable descriptor_table_flyteidl_2fadmin_2fmatchable_5fresource_2eproto = { false, InitDefaults_flyteidl_2fadmin_2fmatchable_5fresource_2eproto, descriptor_table_protodef_flyteidl_2fadmin_2fmatchable_5fresource_2eproto, - "flyteidl/admin/matchable_resource.proto", &assign_descriptors_table_flyteidl_2fadmin_2fmatchable_5fresource_2eproto, 2633, + "flyteidl/admin/matchable_resource.proto", &assign_descriptors_table_flyteidl_2fadmin_2fmatchable_5fresource_2eproto, 2646, }; void AddDescriptors_flyteidl_2fadmin_2fmatchable_5fresource_2eproto() { @@ -5547,6 +5549,7 @@ class ListMatchableAttributesRequest::HasBitSetters { #if !defined(_MSC_VER) || _MSC_VER >= 1900 const int ListMatchableAttributesRequest::kResourceTypeFieldNumber; +const int ListMatchableAttributesRequest::kOrgFieldNumber; #endif // !defined(_MSC_VER) || _MSC_VER >= 1900 ListMatchableAttributesRequest::ListMatchableAttributesRequest() @@ -5558,11 +5561,18 @@ ListMatchableAttributesRequest::ListMatchableAttributesRequest(const ListMatchab : ::google::protobuf::Message(), _internal_metadata_(nullptr) { _internal_metadata_.MergeFrom(from._internal_metadata_); + org_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + if (from.org().size() > 0) { + org_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.org_); + } resource_type_ = from.resource_type_; // @@protoc_insertion_point(copy_constructor:flyteidl.admin.ListMatchableAttributesRequest) } void ListMatchableAttributesRequest::SharedCtor() { + ::google::protobuf::internal::InitSCC( + &scc_info_ListMatchableAttributesRequest_flyteidl_2fadmin_2fmatchable_5fresource_2eproto.base); + org_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); resource_type_ = 0; } @@ -5572,6 +5582,7 @@ ListMatchableAttributesRequest::~ListMatchableAttributesRequest() { } void ListMatchableAttributesRequest::SharedDtor() { + org_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); } void ListMatchableAttributesRequest::SetCachedSize(int size) const { @@ -5589,6 +5600,7 @@ void ListMatchableAttributesRequest::Clear() { // Prevent compiler warnings about cached_has_bits being unused (void) cached_has_bits; + org_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); resource_type_ = 0; _internal_metadata_.Clear(); } @@ -5614,6 +5626,22 @@ const char* ListMatchableAttributesRequest::_InternalParse(const char* begin, co GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); break; } + // string org = 2; + case 2: { + if (static_cast<::google::protobuf::uint8>(tag) != 18) goto handle_unusual; + ptr = ::google::protobuf::io::ReadSize(ptr, &size); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + ctx->extra_parse_data().SetFieldName("flyteidl.admin.ListMatchableAttributesRequest.org"); + object = msg->mutable_org(); + if (size > end - ptr + ::google::protobuf::internal::ParseContext::kSlopBytes) { + parser_till_end = ::google::protobuf::internal::GreedyStringParserUTF8; + goto string_till_end; + } + GOOGLE_PROTOBUF_PARSER_ASSERT(::google::protobuf::internal::StringCheckUTF8(ptr, size, ctx)); + ::google::protobuf::internal::InlineGreedyStringParser(object, ptr, size, ctx); + ptr += size; + break; + } default: { handle_unusual: if ((tag & 7) == 4 || tag == 0) { @@ -5629,6 +5657,13 @@ const char* ListMatchableAttributesRequest::_InternalParse(const char* begin, co } // switch } // while return ptr; +string_till_end: + static_cast<::std::string*>(object)->clear(); + static_cast<::std::string*>(object)->reserve(size); + goto len_delim_till_end; +len_delim_till_end: + return ctx->StoreAndTailCall(ptr, end, {_InternalParse, msg}, + {parser_till_end, object}, size); } #else // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER bool ListMatchableAttributesRequest::MergePartialFromCodedStream( @@ -5655,6 +5690,21 @@ bool ListMatchableAttributesRequest::MergePartialFromCodedStream( break; } + // string org = 2; + case 2: { + if (static_cast< ::google::protobuf::uint8>(tag) == (18 & 0xFF)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadString( + input, this->mutable_org())); + DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::PARSE, + "flyteidl.admin.ListMatchableAttributesRequest.org")); + } else { + goto handle_unusual; + } + break; + } + default: { handle_unusual: if (tag == 0) { @@ -5688,6 +5738,16 @@ void ListMatchableAttributesRequest::SerializeWithCachedSizes( 1, this->resource_type(), output); } + // string org = 2; + if (this->org().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.admin.ListMatchableAttributesRequest.org"); + ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( + 2, this->org(), output); + } + if (_internal_metadata_.have_unknown_fields()) { ::google::protobuf::internal::WireFormat::SerializeUnknownFields( _internal_metadata_.unknown_fields(), output); @@ -5707,6 +5767,17 @@ ::google::protobuf::uint8* ListMatchableAttributesRequest::InternalSerializeWith 1, this->resource_type(), target); } + // string org = 2; + if (this->org().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.admin.ListMatchableAttributesRequest.org"); + target = + ::google::protobuf::internal::WireFormatLite::WriteStringToArray( + 2, this->org(), target); + } + if (_internal_metadata_.have_unknown_fields()) { target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( _internal_metadata_.unknown_fields(), target); @@ -5728,6 +5799,13 @@ size_t ListMatchableAttributesRequest::ByteSizeLong() const { // Prevent compiler warnings about cached_has_bits being unused (void) cached_has_bits; + // string org = 2; + if (this->org().size() > 0) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::StringSize( + this->org()); + } + // .flyteidl.admin.MatchableResource resource_type = 1; if (this->resource_type() != 0) { total_size += 1 + @@ -5761,6 +5839,10 @@ void ListMatchableAttributesRequest::MergeFrom(const ListMatchableAttributesRequ ::google::protobuf::uint32 cached_has_bits = 0; (void) cached_has_bits; + if (from.org().size() > 0) { + + org_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.org_); + } if (from.resource_type() != 0) { set_resource_type(from.resource_type()); } @@ -5791,6 +5873,8 @@ void ListMatchableAttributesRequest::Swap(ListMatchableAttributesRequest* other) void ListMatchableAttributesRequest::InternalSwap(ListMatchableAttributesRequest* other) { using std::swap; _internal_metadata_.Swap(&other->_internal_metadata_); + org_.Swap(&other->org_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), + GetArenaNoVirtual()); swap(resource_type_, other->resource_type_); } diff --git a/flyteidl/gen/pb-cpp/flyteidl/admin/matchable_resource.pb.h b/flyteidl/gen/pb-cpp/flyteidl/admin/matchable_resource.pb.h index 1bd845f182..7fb9357061 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/admin/matchable_resource.pb.h +++ b/flyteidl/gen/pb-cpp/flyteidl/admin/matchable_resource.pb.h @@ -1841,6 +1841,20 @@ class ListMatchableAttributesRequest final : // accessors ------------------------------------------------------- + // string org = 2; + void clear_org(); + static const int kOrgFieldNumber = 2; + const ::std::string& org() const; + void set_org(const ::std::string& value); + #if LANG_CXX11 + void set_org(::std::string&& value); + #endif + void set_org(const char* value); + void set_org(const char* value, size_t size); + ::std::string* mutable_org(); + ::std::string* release_org(); + void set_allocated_org(::std::string* org); + // .flyteidl.admin.MatchableResource resource_type = 1; void clear_resource_type(); static const int kResourceTypeFieldNumber = 1; @@ -1852,6 +1866,7 @@ class ListMatchableAttributesRequest final : class HasBitSetters; ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; + ::google::protobuf::internal::ArenaStringPtr org_; int resource_type_; mutable ::google::protobuf::internal::CachedSize _cached_size_; friend struct ::TableStruct_flyteidl_2fadmin_2fmatchable_5fresource_2eproto; @@ -3654,6 +3669,59 @@ inline void ListMatchableAttributesRequest::set_resource_type(::flyteidl::admin: // @@protoc_insertion_point(field_set:flyteidl.admin.ListMatchableAttributesRequest.resource_type) } +// string org = 2; +inline void ListMatchableAttributesRequest::clear_org() { + org_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline const ::std::string& ListMatchableAttributesRequest::org() const { + // @@protoc_insertion_point(field_get:flyteidl.admin.ListMatchableAttributesRequest.org) + return org_.GetNoArena(); +} +inline void ListMatchableAttributesRequest::set_org(const ::std::string& value) { + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); + // @@protoc_insertion_point(field_set:flyteidl.admin.ListMatchableAttributesRequest.org) +} +#if LANG_CXX11 +inline void ListMatchableAttributesRequest::set_org(::std::string&& value) { + + org_.SetNoArena( + &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); + // @@protoc_insertion_point(field_set_rvalue:flyteidl.admin.ListMatchableAttributesRequest.org) +} +#endif +inline void ListMatchableAttributesRequest::set_org(const char* value) { + GOOGLE_DCHECK(value != nullptr); + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); + // @@protoc_insertion_point(field_set_char:flyteidl.admin.ListMatchableAttributesRequest.org) +} +inline void ListMatchableAttributesRequest::set_org(const char* value, size_t size) { + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), + ::std::string(reinterpret_cast(value), size)); + // @@protoc_insertion_point(field_set_pointer:flyteidl.admin.ListMatchableAttributesRequest.org) +} +inline ::std::string* ListMatchableAttributesRequest::mutable_org() { + + // @@protoc_insertion_point(field_mutable:flyteidl.admin.ListMatchableAttributesRequest.org) + return org_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline ::std::string* ListMatchableAttributesRequest::release_org() { + // @@protoc_insertion_point(field_release:flyteidl.admin.ListMatchableAttributesRequest.org) + + return org_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline void ListMatchableAttributesRequest::set_allocated_org(::std::string* org) { + if (org != nullptr) { + + } else { + + } + org_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), org); + // @@protoc_insertion_point(field_set_allocated:flyteidl.admin.ListMatchableAttributesRequest.org) +} + // ------------------------------------------------------------------- // ListMatchableAttributesResponse diff --git a/flyteidl/gen/pb-cpp/flyteidl/admin/project.pb.cc b/flyteidl/gen/pb-cpp/flyteidl/admin/project.pb.cc index b283c46bfb..03f21267d0 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/admin/project.pb.cc +++ b/flyteidl/gen/pb-cpp/flyteidl/admin/project.pb.cc @@ -205,6 +205,7 @@ const ::google::protobuf::uint32 TableStruct_flyteidl_2fadmin_2fproject_2eproto: PROTOBUF_FIELD_OFFSET(::flyteidl::admin::ProjectListRequest, token_), PROTOBUF_FIELD_OFFSET(::flyteidl::admin::ProjectListRequest, filters_), PROTOBUF_FIELD_OFFSET(::flyteidl::admin::ProjectListRequest, sort_by_), + PROTOBUF_FIELD_OFFSET(::flyteidl::admin::ProjectListRequest, org_), ~0u, // no _has_bits_ PROTOBUF_FIELD_OFFSET(::flyteidl::admin::ProjectRegisterRequest, _internal_metadata_), ~0u, // no _extensions_ @@ -227,9 +228,9 @@ static const ::google::protobuf::internal::MigrationSchema schemas[] PROTOBUF_SE { 7, -1, sizeof(::flyteidl::admin::Project)}, { 19, -1, sizeof(::flyteidl::admin::Projects)}, { 26, -1, sizeof(::flyteidl::admin::ProjectListRequest)}, - { 35, -1, sizeof(::flyteidl::admin::ProjectRegisterRequest)}, - { 41, -1, sizeof(::flyteidl::admin::ProjectRegisterResponse)}, - { 46, -1, sizeof(::flyteidl::admin::ProjectUpdateResponse)}, + { 36, -1, sizeof(::flyteidl::admin::ProjectRegisterRequest)}, + { 42, -1, sizeof(::flyteidl::admin::ProjectRegisterResponse)}, + { 47, -1, sizeof(::flyteidl::admin::ProjectUpdateResponse)}, }; static ::google::protobuf::Message const * const file_default_instances[] = { @@ -260,19 +261,20 @@ const char descriptor_table_protodef_flyteidl_2fadmin_2fproject_2eproto[] = "\014ProjectState\022\n\n\006ACTIVE\020\000\022\014\n\010ARCHIVED\020\001\022" "\024\n\020SYSTEM_GENERATED\020\002\"D\n\010Projects\022)\n\010pro" "jects\030\001 \003(\0132\027.flyteidl.admin.Project\022\r\n\005" - "token\030\002 \001(\t\"j\n\022ProjectListRequest\022\r\n\005lim" + "token\030\002 \001(\t\"w\n\022ProjectListRequest\022\r\n\005lim" "it\030\001 \001(\r\022\r\n\005token\030\002 \001(\t\022\017\n\007filters\030\003 \001(\t" - "\022%\n\007sort_by\030\004 \001(\0132\024.flyteidl.admin.Sort\"" - "B\n\026ProjectRegisterRequest\022(\n\007project\030\001 \001" - "(\0132\027.flyteidl.admin.Project\"\031\n\027ProjectRe" - "gisterResponse\"\027\n\025ProjectUpdateResponseB" - "=Z;github.com/flyteorg/flyte/flyteidl/ge" - "n/pb-go/flyteidl/adminb\006proto3" + "\022%\n\007sort_by\030\004 \001(\0132\024.flyteidl.admin.Sort\022" + "\013\n\003org\030\005 \001(\t\"B\n\026ProjectRegisterRequest\022(" + "\n\007project\030\001 \001(\0132\027.flyteidl.admin.Project" + "\"\031\n\027ProjectRegisterResponse\"\027\n\025ProjectUp" + "dateResponseB=Z;github.com/flyteorg/flyt" + "e/flyteidl/gen/pb-go/flyteidl/adminb\006pro" + "to3" ; ::google::protobuf::internal::DescriptorTable descriptor_table_flyteidl_2fadmin_2fproject_2eproto = { false, InitDefaults_flyteidl_2fadmin_2fproject_2eproto, descriptor_table_protodef_flyteidl_2fadmin_2fproject_2eproto, - "flyteidl/admin/project.proto", &assign_descriptors_table_flyteidl_2fadmin_2fproject_2eproto, 750, + "flyteidl/admin/project.proto", &assign_descriptors_table_flyteidl_2fadmin_2fproject_2eproto, 763, }; void AddDescriptors_flyteidl_2fadmin_2fproject_2eproto() { @@ -1762,6 +1764,7 @@ const int ProjectListRequest::kLimitFieldNumber; const int ProjectListRequest::kTokenFieldNumber; const int ProjectListRequest::kFiltersFieldNumber; const int ProjectListRequest::kSortByFieldNumber; +const int ProjectListRequest::kOrgFieldNumber; #endif // !defined(_MSC_VER) || _MSC_VER >= 1900 ProjectListRequest::ProjectListRequest() @@ -1781,6 +1784,10 @@ ProjectListRequest::ProjectListRequest(const ProjectListRequest& from) if (from.filters().size() > 0) { filters_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.filters_); } + org_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + if (from.org().size() > 0) { + org_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.org_); + } if (from.has_sort_by()) { sort_by_ = new ::flyteidl::admin::Sort(*from.sort_by_); } else { @@ -1795,6 +1802,7 @@ void ProjectListRequest::SharedCtor() { &scc_info_ProjectListRequest_flyteidl_2fadmin_2fproject_2eproto.base); token_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); filters_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); ::memset(&sort_by_, 0, static_cast( reinterpret_cast(&limit_) - reinterpret_cast(&sort_by_)) + sizeof(limit_)); @@ -1808,6 +1816,7 @@ ProjectListRequest::~ProjectListRequest() { void ProjectListRequest::SharedDtor() { token_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); filters_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); if (this != internal_default_instance()) delete sort_by_; } @@ -1828,6 +1837,7 @@ void ProjectListRequest::Clear() { token_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); filters_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + org_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); if (GetArenaNoVirtual() == nullptr && sort_by_ != nullptr) { delete sort_by_; } @@ -1901,6 +1911,22 @@ const char* ProjectListRequest::_InternalParse(const char* begin, const char* en {parser_till_end, object}, ptr - size, ptr)); break; } + // string org = 5; + case 5: { + if (static_cast<::google::protobuf::uint8>(tag) != 42) goto handle_unusual; + ptr = ::google::protobuf::io::ReadSize(ptr, &size); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + ctx->extra_parse_data().SetFieldName("flyteidl.admin.ProjectListRequest.org"); + object = msg->mutable_org(); + if (size > end - ptr + ::google::protobuf::internal::ParseContext::kSlopBytes) { + parser_till_end = ::google::protobuf::internal::GreedyStringParserUTF8; + goto string_till_end; + } + GOOGLE_PROTOBUF_PARSER_ASSERT(::google::protobuf::internal::StringCheckUTF8(ptr, size, ctx)); + ::google::protobuf::internal::InlineGreedyStringParser(object, ptr, size, ctx); + ptr += size; + break; + } default: { handle_unusual: if ((tag & 7) == 4 || tag == 0) { @@ -1989,6 +2015,21 @@ bool ProjectListRequest::MergePartialFromCodedStream( break; } + // string org = 5; + case 5: { + if (static_cast< ::google::protobuf::uint8>(tag) == (42 & 0xFF)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadString( + input, this->mutable_org())); + DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::PARSE, + "flyteidl.admin.ProjectListRequest.org")); + } else { + goto handle_unusual; + } + break; + } + default: { handle_unusual: if (tag == 0) { @@ -2047,6 +2088,16 @@ void ProjectListRequest::SerializeWithCachedSizes( 4, HasBitSetters::sort_by(this), output); } + // string org = 5; + if (this->org().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.admin.ProjectListRequest.org"); + ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( + 5, this->org(), output); + } + if (_internal_metadata_.have_unknown_fields()) { ::google::protobuf::internal::WireFormat::SerializeUnknownFields( _internal_metadata_.unknown_fields(), output); @@ -2094,6 +2145,17 @@ ::google::protobuf::uint8* ProjectListRequest::InternalSerializeWithCachedSizesT 4, HasBitSetters::sort_by(this), target); } + // string org = 5; + if (this->org().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->org().data(), static_cast(this->org().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.admin.ProjectListRequest.org"); + target = + ::google::protobuf::internal::WireFormatLite::WriteStringToArray( + 5, this->org(), target); + } + if (_internal_metadata_.have_unknown_fields()) { target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( _internal_metadata_.unknown_fields(), target); @@ -2129,6 +2191,13 @@ size_t ProjectListRequest::ByteSizeLong() const { this->filters()); } + // string org = 5; + if (this->org().size() > 0) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::StringSize( + this->org()); + } + // .flyteidl.admin.Sort sort_by = 4; if (this->has_sort_by()) { total_size += 1 + @@ -2178,6 +2247,10 @@ void ProjectListRequest::MergeFrom(const ProjectListRequest& from) { filters_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.filters_); } + if (from.org().size() > 0) { + + org_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.org_); + } if (from.has_sort_by()) { mutable_sort_by()->::flyteidl::admin::Sort::MergeFrom(from.sort_by()); } @@ -2215,6 +2288,8 @@ void ProjectListRequest::InternalSwap(ProjectListRequest* other) { GetArenaNoVirtual()); filters_.Swap(&other->filters_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), GetArenaNoVirtual()); + org_.Swap(&other->org_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), + GetArenaNoVirtual()); swap(sort_by_, other->sort_by_); swap(limit_, other->limit_); } diff --git a/flyteidl/gen/pb-cpp/flyteidl/admin/project.pb.h b/flyteidl/gen/pb-cpp/flyteidl/admin/project.pb.h index 4645e8bf9c..33b8879252 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/admin/project.pb.h +++ b/flyteidl/gen/pb-cpp/flyteidl/admin/project.pb.h @@ -727,6 +727,20 @@ class ProjectListRequest final : ::std::string* release_filters(); void set_allocated_filters(::std::string* filters); + // string org = 5; + void clear_org(); + static const int kOrgFieldNumber = 5; + const ::std::string& org() const; + void set_org(const ::std::string& value); + #if LANG_CXX11 + void set_org(::std::string&& value); + #endif + void set_org(const char* value); + void set_org(const char* value, size_t size); + ::std::string* mutable_org(); + ::std::string* release_org(); + void set_allocated_org(::std::string* org); + // .flyteidl.admin.Sort sort_by = 4; bool has_sort_by() const; void clear_sort_by(); @@ -749,6 +763,7 @@ class ProjectListRequest final : ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; ::google::protobuf::internal::ArenaStringPtr token_; ::google::protobuf::internal::ArenaStringPtr filters_; + ::google::protobuf::internal::ArenaStringPtr org_; ::flyteidl::admin::Sort* sort_by_; ::google::protobuf::uint32 limit_; mutable ::google::protobuf::internal::CachedSize _cached_size_; @@ -1757,6 +1772,59 @@ inline void ProjectListRequest::set_allocated_sort_by(::flyteidl::admin::Sort* s // @@protoc_insertion_point(field_set_allocated:flyteidl.admin.ProjectListRequest.sort_by) } +// string org = 5; +inline void ProjectListRequest::clear_org() { + org_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline const ::std::string& ProjectListRequest::org() const { + // @@protoc_insertion_point(field_get:flyteidl.admin.ProjectListRequest.org) + return org_.GetNoArena(); +} +inline void ProjectListRequest::set_org(const ::std::string& value) { + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); + // @@protoc_insertion_point(field_set:flyteidl.admin.ProjectListRequest.org) +} +#if LANG_CXX11 +inline void ProjectListRequest::set_org(::std::string&& value) { + + org_.SetNoArena( + &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); + // @@protoc_insertion_point(field_set_rvalue:flyteidl.admin.ProjectListRequest.org) +} +#endif +inline void ProjectListRequest::set_org(const char* value) { + GOOGLE_DCHECK(value != nullptr); + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); + // @@protoc_insertion_point(field_set_char:flyteidl.admin.ProjectListRequest.org) +} +inline void ProjectListRequest::set_org(const char* value, size_t size) { + + org_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), + ::std::string(reinterpret_cast(value), size)); + // @@protoc_insertion_point(field_set_pointer:flyteidl.admin.ProjectListRequest.org) +} +inline ::std::string* ProjectListRequest::mutable_org() { + + // @@protoc_insertion_point(field_mutable:flyteidl.admin.ProjectListRequest.org) + return org_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline ::std::string* ProjectListRequest::release_org() { + // @@protoc_insertion_point(field_release:flyteidl.admin.ProjectListRequest.org) + + return org_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline void ProjectListRequest::set_allocated_org(::std::string* org) { + if (org != nullptr) { + + } else { + + } + org_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), org); + // @@protoc_insertion_point(field_set_allocated:flyteidl.admin.ProjectListRequest.org) +} + // ------------------------------------------------------------------- // ProjectRegisterRequest diff --git a/flyteidl/gen/pb-cpp/flyteidl/service/admin.pb.cc b/flyteidl/gen/pb-cpp/flyteidl/service/admin.pb.cc index 54b3861c05..2824f12e1c 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/service/admin.pb.cc +++ b/flyteidl/gen/pb-cpp/flyteidl/service/admin.pb.cc @@ -52,376 +52,392 @@ const char descriptor_table_protodef_flyteidl_2fservice_2fadmin_2eproto[] = "admin/task_execution.proto\032\034flyteidl/adm" "in/version.proto\032\033flyteidl/admin/common." "proto\032\'flyteidl/admin/description_entity" - ".proto2\265q\n\014AdminService\022m\n\nCreateTask\022!." - "flyteidl.admin.TaskCreateRequest\032\".flyte" - "idl.admin.TaskCreateResponse\"\030\202\323\344\223\002\022\"\r/a" - "pi/v1/tasks:\001*\022\330\001\n\007GetTask\022 .flyteidl.ad" - "min.ObjectGetRequest\032\024.flyteidl.admin.Ta" - "sk\"\224\001\202\323\344\223\002\215\001\022=/api/v1/tasks/{id.project}" - "/{id.domain}/{id.name}/{id.version}ZL\022J/" - "api/v1/tasks/org/{id.org}/{id.project}/{" - "id.domain}/{id.name}/{id.version}\022\305\001\n\013Li" - "stTaskIds\0220.flyteidl.admin.NamedEntityId" - "entifierListRequest\032).flyteidl.admin.Nam" - "edEntityIdentifierList\"Y\202\323\344\223\002S\022#/api/v1/" - "task_ids/{project}/{domain}Z,\022*/api/v1/t" - "asks/org/{org}/{project}/{domain}\022\250\002\n\tLi" - "stTasks\022#.flyteidl.admin.ResourceListReq" - "uest\032\030.flyteidl.admin.TaskList\"\333\001\202\323\344\223\002\324\001" - "\0220/api/v1/tasks/{id.project}/{id.domain}" - "/{id.name}Z\?\022=/api/v1/tasks/org/{id.org}" - "/{id.project}/{id.domain}/{id.name}Z(\022&/" - "api/v1/tasks/{id.project}/{id.domain}Z5\022" - "3/api/v1/tasks/org/{id.org}/{id.project}" - "/{id.domain}\022}\n\016CreateWorkflow\022%.flyteid" - "l.admin.WorkflowCreateRequest\032&.flyteidl" - ".admin.WorkflowCreateResponse\"\034\202\323\344\223\002\026\"\021/" - "api/v1/workflows:\001*\022\350\001\n\013GetWorkflow\022 .fl" - "yteidl.admin.ObjectGetRequest\032\030.flyteidl" - ".admin.Workflow\"\234\001\202\323\344\223\002\225\001\022A/api/v1/workf" - "lows/{id.project}/{id.domain}/{id.name}/" - "{id.version}ZP\022N/api/v1/workflows/org/{i" - "d.org}/{id.project}/{id.domain}/{id.name" - "}/{id.version}\022\321\001\n\017ListWorkflowIds\0220.fly" - "teidl.admin.NamedEntityIdentifierListReq" - "uest\032).flyteidl.admin.NamedEntityIdentif" - "ierList\"a\202\323\344\223\002[\022\'/api/v1/workflow_ids/{p" - "roject}/{domain}Z0\022./api/v1/workflows/or" - "g/{org}/{project}/{domain}\022\300\002\n\rListWorkf" - "lows\022#.flyteidl.admin.ResourceListReques" - "t\032\034.flyteidl.admin.WorkflowList\"\353\001\202\323\344\223\002\344" - "\001\0224/api/v1/workflows/{id.project}/{id.do" - "main}/{id.name}ZC\022A/api/v1/workflows/org" - "/{id.org}/{id.project}/{id.domain}/{id.n" - "ame}Z,\022*/api/v1/workflows/{id.project}/{" - "id.domain}Z9\0227/api/v1/workflows/org/{id." - "org}/{id.project}/{id.domain}\022\206\001\n\020Create" - "LaunchPlan\022\'.flyteidl.admin.LaunchPlanCr" - "eateRequest\032(.flyteidl.admin.LaunchPlanC" - "reateResponse\"\037\202\323\344\223\002\031\"\024/api/v1/launch_pl" - "ans:\001*\022\362\001\n\rGetLaunchPlan\022 .flyteidl.admi" - "n.ObjectGetRequest\032\032.flyteidl.admin.Laun" - "chPlan\"\242\001\202\323\344\223\002\233\001\022D/api/v1/launch_plans/{" + ".proto2\227v\n\014AdminService\022\216\001\n\nCreateTask\022!" + ".flyteidl.admin.TaskCreateRequest\032\".flyt" + "eidl.admin.TaskCreateResponse\"9\202\323\344\223\0023\"\r/" + "api/v1/tasks:\001*Z\037\"\032/api/v1/tasks/org/{id" + ".org}:\001*\022\330\001\n\007GetTask\022 .flyteidl.admin.Ob" + "jectGetRequest\032\024.flyteidl.admin.Task\"\224\001\202" + "\323\344\223\002\215\001\022=/api/v1/tasks/{id.project}/{id.d" + "omain}/{id.name}/{id.version}ZL\022J/api/v1" + "/tasks/org/{id.org}/{id.project}/{id.dom" + "ain}/{id.name}/{id.version}\022\305\001\n\013ListTask" + "Ids\0220.flyteidl.admin.NamedEntityIdentifi" + "erListRequest\032).flyteidl.admin.NamedEnti" + "tyIdentifierList\"Y\202\323\344\223\002S\022#/api/v1/task_i" + "ds/{project}/{domain}Z,\022*/api/v1/tasks/o" + "rg/{org}/{project}/{domain}\022\250\002\n\tListTask" + "s\022#.flyteidl.admin.ResourceListRequest\032\030" + ".flyteidl.admin.TaskList\"\333\001\202\323\344\223\002\324\001\0220/api" + "/v1/tasks/{id.project}/{id.domain}/{id.n" + "ame}Z\?\022=/api/v1/tasks/org/{id.org}/{id.p" + "roject}/{id.domain}/{id.name}Z(\022&/api/v1" + "/tasks/{id.project}/{id.domain}Z5\0223/api/" + "v1/tasks/org/{id.org}/{id.project}/{id.d" + "omain}\022\242\001\n\016CreateWorkflow\022%.flyteidl.adm" + "in.WorkflowCreateRequest\032&.flyteidl.admi" + "n.WorkflowCreateResponse\"A\202\323\344\223\002;\"\021/api/v" + "1/workflows:\001*Z#\"\036/api/v1/workflows/org/" + "{id.org}:\001*\022\350\001\n\013GetWorkflow\022 .flyteidl.a" + "dmin.ObjectGetRequest\032\030.flyteidl.admin.W" + "orkflow\"\234\001\202\323\344\223\002\225\001\022A/api/v1/workflows/{id" + ".project}/{id.domain}/{id.name}/{id.vers" + "ion}ZP\022N/api/v1/workflows/org/{id.org}/{" "id.project}/{id.domain}/{id.name}/{id.ve" - "rsion}ZS\022Q/api/v1/launch_plans/org/{id.o" - "rg}/{id.project}/{id.domain}/{id.name}/{" - "id.version}\022\363\001\n\023GetActiveLaunchPlan\022\'.fl" - "yteidl.admin.ActiveLaunchPlanRequest\032\032.f" - "lyteidl.admin.LaunchPlan\"\226\001\202\323\344\223\002\217\001\022>/api" - "/v1/active_launch_plans/{id.project}/{id" - ".domain}/{id.name}ZM\022K/api/v1/active_lau" - "nch_plans/org/{id.org}/{id.project}/{id." - "domain}/{id.name}\022\234\001\n\025ListActiveLaunchPl" - "ans\022+.flyteidl.admin.ActiveLaunchPlanLis" - "tRequest\032\036.flyteidl.admin.LaunchPlanList" - "\"6\202\323\344\223\0020\022./api/v1/active_launch_plans/{p" - "roject}/{domain}\022\334\001\n\021ListLaunchPlanIds\0220" - ".flyteidl.admin.NamedEntityIdentifierLis" - "tRequest\032).flyteidl.admin.NamedEntityIde" - "ntifierList\"j\202\323\344\223\002d\022*/api/v1/launch_plan" - "_ids/{project}/{domain}Z6\0224/api/v1/launc" - "h_plan_ids/org/{org}/{project}/{domain}\022" - "\320\002\n\017ListLaunchPlans\022#.flyteidl.admin.Res" - "ourceListRequest\032\036.flyteidl.admin.Launch" - "PlanList\"\367\001\202\323\344\223\002\360\001\0227/api/v1/launch_plans" - "/{id.project}/{id.domain}/{id.name}ZF\022D/" - "api/v1/launch_plans/org/{id.org}/{id.pro" - "ject}/{id.domain}/{id.name}Z/\022-/api/v1/l" - "aunch_plans/{id.project}/{id.domain}Z<\022:" - "/api/v1/launch_plans/org/{id.org}/{id.pr" - "oject}/{id.domain}\022\215\002\n\020UpdateLaunchPlan\022" - "\'.flyteidl.admin.LaunchPlanUpdateRequest" - "\032(.flyteidl.admin.LaunchPlanUpdateRespon" - "se\"\245\001\202\323\344\223\002\236\001\032D/api/v1/launch_plans/{id.p" - "roject}/{id.domain}/{id.name}/{id.versio" - "n}:\001*ZS\032Q/api/v1/launch_plans/org/{id.or" - "g}/{id.project}/{id.domain}/{id.name}/{i" - "d.version}\022\201\001\n\017CreateExecution\022&.flyteid" - "l.admin.ExecutionCreateRequest\032\'.flyteid" - "l.admin.ExecutionCreateResponse\"\035\202\323\344\223\002\027\"" - "\022/api/v1/executions:\001*\022\216\001\n\021RelaunchExecu" - "tion\022(.flyteidl.admin.ExecutionRelaunchR" - "equest\032\'.flyteidl.admin.ExecutionCreateR" - "esponse\"&\202\323\344\223\002 \"\033/api/v1/executions/rela" - "unch:\001*\022\213\001\n\020RecoverExecution\022\'.flyteidl." - "admin.ExecutionRecoverRequest\032\'.flyteidl" - ".admin.ExecutionCreateResponse\"%\202\323\344\223\002\037\"\032" - "/api/v1/executions/recover:\001*\022\334\001\n\014GetExe" - "cution\022+.flyteidl.admin.WorkflowExecutio" - "nGetRequest\032\031.flyteidl.admin.Execution\"\203" - "\001\202\323\344\223\002}\0225/api/v1/executions/{id.project}" - "/{id.domain}/{id.name}ZD\022B/api/v1/execut" - "ions/org/{id.org}/{id.project}/{id.domai" - "n}/{id.name}\022\357\001\n\017UpdateExecution\022&.flyte" - "idl.admin.ExecutionUpdateRequest\032\'.flyte" - "idl.admin.ExecutionUpdateResponse\"\212\001\202\323\344\223" - "\002\203\001\0325/api/v1/executions/{id.project}/{id" - ".domain}/{id.name}:\001*ZG\032B/api/v1/executi" - "ons/org/{id.org}/{id.project}/{id.domain" - "}/{id.name}:\001*\022\206\002\n\020GetExecutionData\022/.fl" - "yteidl.admin.WorkflowExecutionGetDataReq" - "uest\0320.flyteidl.admin.WorkflowExecutionG" - "etDataResponse\"\216\001\202\323\344\223\002\207\001\022:/api/v1/data/e" - "xecutions/{id.project}/{id.domain}/{id.n" - "ame}ZI\022G/api/v1/data/executions/org/{id." - "org}/{id.project}/{id.domain}/{id.name}\022" - "\305\001\n\016ListExecutions\022#.flyteidl.admin.Reso" - "urceListRequest\032\035.flyteidl.admin.Executi" - "onList\"o\202\323\344\223\002i\022+/api/v1/executions/{id.p" - "roject}/{id.domain}Z:\0228/api/v1/execution" - "s/org/{id.org}/{id.project}/{id.domain}\022" - "\375\001\n\022TerminateExecution\022).flyteidl.admin." - "ExecutionTerminateRequest\032*.flyteidl.adm" - "in.ExecutionTerminateResponse\"\217\001\202\323\344\223\002\210\001*" - "5/api/v1/executions/{id.project}/{id.dom" - "ain}/{id.name}:\001*ZL*G/api/v1/data/execut" - "ions/org/{id.org}/{id.project}/{id.domai" - "n}/{id.name}:\001*\022\342\002\n\020GetNodeExecution\022\'.f" - "lyteidl.admin.NodeExecutionGetRequest\032\035." - "flyteidl.admin.NodeExecution\"\205\002\202\323\344\223\002\376\001\022n" - "/api/v1/node_executions/{id.execution_id" - ".project}/{id.execution_id.domain}/{id.e" - "xecution_id.name}/{id.node_id}Z\213\001\022\210\001/api" - "/v1/node_executions/org/{id.execution_id" - ".org}/{id.execution_id.project}/{id.exec" + "rsion}\022\321\001\n\017ListWorkflowIds\0220.flyteidl.ad" + "min.NamedEntityIdentifierListRequest\032).f" + "lyteidl.admin.NamedEntityIdentifierList\"" + "a\202\323\344\223\002[\022\'/api/v1/workflow_ids/{project}/" + "{domain}Z0\022./api/v1/workflows/org/{org}/" + "{project}/{domain}\022\300\002\n\rListWorkflows\022#.f" + "lyteidl.admin.ResourceListRequest\032\034.flyt" + "eidl.admin.WorkflowList\"\353\001\202\323\344\223\002\344\001\0224/api/" + "v1/workflows/{id.project}/{id.domain}/{i" + "d.name}ZC\022A/api/v1/workflows/org/{id.org" + "}/{id.project}/{id.domain}/{id.name}Z,\022*" + "/api/v1/workflows/{id.project}/{id.domai" + "n}Z9\0227/api/v1/workflows/org/{id.org}/{id" + ".project}/{id.domain}\022\256\001\n\020CreateLaunchPl" + "an\022\'.flyteidl.admin.LaunchPlanCreateRequ" + "est\032(.flyteidl.admin.LaunchPlanCreateRes" + "ponse\"G\202\323\344\223\002A\"\024/api/v1/launch_plans:\001*Z&" + "\"!/api/v1/launch_plans/org/{id.org}:\001*\022\362" + "\001\n\rGetLaunchPlan\022 .flyteidl.admin.Object" + "GetRequest\032\032.flyteidl.admin.LaunchPlan\"\242" + "\001\202\323\344\223\002\233\001\022D/api/v1/launch_plans/{id.proje" + "ct}/{id.domain}/{id.name}/{id.version}ZS" + "\022Q/api/v1/launch_plans/org/{id.org}/{id." + "project}/{id.domain}/{id.name}/{id.versi" + "on}\022\363\001\n\023GetActiveLaunchPlan\022\'.flyteidl.a" + "dmin.ActiveLaunchPlanRequest\032\032.flyteidl." + "admin.LaunchPlan\"\226\001\202\323\344\223\002\217\001\022>/api/v1/acti" + "ve_launch_plans/{id.project}/{id.domain}" + "/{id.name}ZM\022K/api/v1/active_launch_plan" + "s/org/{id.org}/{id.project}/{id.domain}/" + "{id.name}\022\330\001\n\025ListActiveLaunchPlans\022+.fl" + "yteidl.admin.ActiveLaunchPlanListRequest" + "\032\036.flyteidl.admin.LaunchPlanList\"r\202\323\344\223\002l" + "\022./api/v1/active_launch_plans/{project}/" + "{domain}Z:\0228/api/v1/active_launch_plans/" + "org/{org}/{project}/{domain}\022\334\001\n\021ListLau" + "nchPlanIds\0220.flyteidl.admin.NamedEntityI" + "dentifierListRequest\032).flyteidl.admin.Na" + "medEntityIdentifierList\"j\202\323\344\223\002d\022*/api/v1" + "/launch_plan_ids/{project}/{domain}Z6\0224/" + "api/v1/launch_plan_ids/org/{org}/{projec" + "t}/{domain}\022\320\002\n\017ListLaunchPlans\022#.flytei" + "dl.admin.ResourceListRequest\032\036.flyteidl." + "admin.LaunchPlanList\"\367\001\202\323\344\223\002\360\001\0227/api/v1/" + "launch_plans/{id.project}/{id.domain}/{i" + "d.name}ZF\022D/api/v1/launch_plans/org/{id." + "org}/{id.project}/{id.domain}/{id.name}Z" + "/\022-/api/v1/launch_plans/{id.project}/{id" + ".domain}Z<\022:/api/v1/launch_plans/org/{id" + ".org}/{id.project}/{id.domain}\022\215\002\n\020Updat" + "eLaunchPlan\022\'.flyteidl.admin.LaunchPlanU" + "pdateRequest\032(.flyteidl.admin.LaunchPlan" + "UpdateResponse\"\245\001\202\323\344\223\002\236\001\032D/api/v1/launch" + "_plans/{id.project}/{id.domain}/{id.name" + "}/{id.version}:\001*ZS\032Q/api/v1/launch_plan" + "s/org/{id.org}/{id.project}/{id.domain}/" + "{id.name}/{id.version}\022\244\001\n\017CreateExecuti" + "on\022&.flyteidl.admin.ExecutionCreateReque" + "st\032\'.flyteidl.admin.ExecutionCreateRespo" + "nse\"@\202\323\344\223\002:\"\022/api/v1/executions:\001*Z!\032\034/a" + "pi/v1/executions/org/{org}:\001*\022\275\001\n\021Relaun" + "chExecution\022(.flyteidl.admin.ExecutionRe" + "launchRequest\032\'.flyteidl.admin.Execution" + "CreateResponse\"U\202\323\344\223\002O\"\033/api/v1/executio" + "ns/relaunch:\001*Z-\"(/api/v1/executions/org" + "/{id.org}/relaunch:\001*\022\271\001\n\020RecoverExecuti" + "on\022\'.flyteidl.admin.ExecutionRecoverRequ" + "est\032\'.flyteidl.admin.ExecutionCreateResp" + "onse\"S\202\323\344\223\002M\"\032/api/v1/executions/recover" + ":\001*Z,\"\'/api/v1/executions/org/{id.org}/r" + "ecover:\001*\022\334\001\n\014GetExecution\022+.flyteidl.ad" + "min.WorkflowExecutionGetRequest\032\031.flytei" + "dl.admin.Execution\"\203\001\202\323\344\223\002}\0225/api/v1/exe" + "cutions/{id.project}/{id.domain}/{id.nam" + "e}ZD\022B/api/v1/executions/org/{id.org}/{i" + "d.project}/{id.domain}/{id.name}\022\357\001\n\017Upd" + "ateExecution\022&.flyteidl.admin.ExecutionU" + "pdateRequest\032\'.flyteidl.admin.ExecutionU" + "pdateResponse\"\212\001\202\323\344\223\002\203\001\0325/api/v1/executi" + "ons/{id.project}/{id.domain}/{id.name}:\001" + "*ZG\032B/api/v1/executions/org/{id.org}/{id" + ".project}/{id.domain}/{id.name}:\001*\022\206\002\n\020G" + "etExecutionData\022/.flyteidl.admin.Workflo" + "wExecutionGetDataRequest\0320.flyteidl.admi" + "n.WorkflowExecutionGetDataResponse\"\216\001\202\323\344" + "\223\002\207\001\022:/api/v1/data/executions/{id.projec" + "t}/{id.domain}/{id.name}ZI\022G/api/v1/data" + "/executions/org/{id.org}/{id.project}/{i" + "d.domain}/{id.name}\022\305\001\n\016ListExecutions\022#" + ".flyteidl.admin.ResourceListRequest\032\035.fl" + "yteidl.admin.ExecutionList\"o\202\323\344\223\002i\022+/api" + "/v1/executions/{id.project}/{id.domain}Z" + ":\0228/api/v1/executions/org/{id.org}/{id.p" + "roject}/{id.domain}\022\370\001\n\022TerminateExecuti" + "on\022).flyteidl.admin.ExecutionTerminateRe" + "quest\032*.flyteidl.admin.ExecutionTerminat" + "eResponse\"\212\001\202\323\344\223\002\203\001*5/api/v1/executions/" + "{id.project}/{id.domain}/{id.name}:\001*ZG*" + "B/api/v1/executions/org/{id.org}/{id.pro" + "ject}/{id.domain}/{id.name}:\001*\022\342\002\n\020GetNo" + "deExecution\022\'.flyteidl.admin.NodeExecuti" + "onGetRequest\032\035.flyteidl.admin.NodeExecut" + "ion\"\205\002\202\323\344\223\002\376\001\022n/api/v1/node_executions/{" + "id.execution_id.project}/{id.execution_i" + "d.domain}/{id.execution_id.name}/{id.nod" + "e_id}Z\213\001\022\210\001/api/v1/node_executions/org/{" + "id.execution_id.org}/{id.execution_id.pr" + "oject}/{id.execution_id.domain}/{id.exec" + "ution_id.name}/{id.node_id}\022\371\002\n\022ListNode" + "Executions\022(.flyteidl.admin.NodeExecutio" + "nListRequest\032!.flyteidl.admin.NodeExecut" + "ionList\"\225\002\202\323\344\223\002\216\002\022s/api/v1/node_executio" + "ns/{workflow_execution_id.project}/{work" + "flow_execution_id.domain}/{workflow_exec" + "ution_id.name}Z\226\001\022\223\001/api/v1/node_executi" + "ons/org/{workflow_execution_id.org}/{wor" + "kflow_execution_id.project}/{workflow_ex" + "ecution_id.domain}/{workflow_execution_i" + "d.name}\022\217\010\n\031ListNodeExecutionsForTask\022/." + "flyteidl.admin.NodeExecutionForTaskListR" + "equest\032!.flyteidl.admin.NodeExecutionLis" + "t\"\235\007\202\323\344\223\002\226\007\022\251\003/api/v1/children/task_exec" + "utions/{task_execution_id.node_execution" + "_id.execution_id.project}/{task_executio" + "n_id.node_execution_id.execution_id.doma" + "in}/{task_execution_id.node_execution_id" + ".execution_id.name}/{task_execution_id.n" + "ode_execution_id.node_id}/{task_executio" + "n_id.task_id.project}/{task_execution_id" + ".task_id.domain}/{task_execution_id.task" + "_id.name}/{task_execution_id.task_id.ver" + "sion}/{task_execution_id.retry_attempt}Z" + "\347\003\022\344\003/api/v1/children/task_executions/or" + "g/{task_execution_id.node_execution_id.e" + "xecution_id.org}/{task_execution_id.node" + "_execution_id.execution_id.project}/{tas" + "k_execution_id.node_execution_id.executi" + "on_id.domain}/{task_execution_id.node_ex" + "ecution_id.execution_id.name}/{task_exec" + "ution_id.node_execution_id.node_id}/{tas" + "k_execution_id.task_id.project}/{task_ex" + "ecution_id.task_id.domain}/{task_executi" + "on_id.task_id.name}/{task_execution_id.t" + "ask_id.version}/{task_execution_id.retry" + "_attempt}\022\203\003\n\024GetNodeExecutionData\022+.fly" + "teidl.admin.NodeExecutionGetDataRequest\032" + ",.flyteidl.admin.NodeExecutionGetDataRes" + "ponse\"\217\002\202\323\344\223\002\210\002\022s/api/v1/data/node_execu" + "tions/{id.execution_id.project}/{id.exec" "ution_id.domain}/{id.execution_id.name}/" - "{id.node_id}\022\371\002\n\022ListNodeExecutions\022(.fl" - "yteidl.admin.NodeExecutionListRequest\032!." - "flyteidl.admin.NodeExecutionList\"\225\002\202\323\344\223\002" - "\216\002\022s/api/v1/node_executions/{workflow_ex" - "ecution_id.project}/{workflow_execution_" - "id.domain}/{workflow_execution_id.name}Z" - "\226\001\022\223\001/api/v1/node_executions/org/{workfl" - "ow_execution_id.org}/{workflow_execution" - "_id.project}/{workflow_execution_id.doma" - "in}/{workflow_execution_id.name}\022\217\010\n\031Lis" - "tNodeExecutionsForTask\022/.flyteidl.admin." - "NodeExecutionForTaskListRequest\032!.flytei" - "dl.admin.NodeExecutionList\"\235\007\202\323\344\223\002\226\007\022\251\003/" - "api/v1/children/task_executions/{task_ex" - "ecution_id.node_execution_id.execution_i" - "d.project}/{task_execution_id.node_execu" - "tion_id.execution_id.domain}/{task_execu" - "tion_id.node_execution_id.execution_id.n" - "ame}/{task_execution_id.node_execution_i" - "d.node_id}/{task_execution_id.task_id.pr" - "oject}/{task_execution_id.task_id.domain" - "}/{task_execution_id.task_id.name}/{task" - "_execution_id.task_id.version}/{task_exe" - "cution_id.retry_attempt}Z\347\003\022\344\003/api/v1/ch" - "ildren/task_executions/org/{task_executi" - "on_id.node_execution_id.execution_id.org" - "}/{task_execution_id.node_execution_id.e" - "xecution_id.project}/{task_execution_id." - "node_execution_id.execution_id.domain}/{" - "task_execution_id.node_execution_id.exec" - "ution_id.name}/{task_execution_id.node_e" - "xecution_id.node_id}/{task_execution_id." - "task_id.project}/{task_execution_id.task" - "_id.domain}/{task_execution_id.task_id.n" - "ame}/{task_execution_id.task_id.version}" - "/{task_execution_id.retry_attempt}\022\203\003\n\024G" - "etNodeExecutionData\022+.flyteidl.admin.Nod" - "eExecutionGetDataRequest\032,.flyteidl.admi" - "n.NodeExecutionGetDataResponse\"\217\002\202\323\344\223\002\210\002" - "\022s/api/v1/data/node_executions/{id.execu" - "tion_id.project}/{id.execution_id.domain" - "}/{id.execution_id.name}/{id.node_id}Z\220\001" - "\022\215\001/api/v1/data/node_executions/org/{id." - "execution_id.org}/{id.execution_id.proje" - "ct}/{id.execution_id.domain}/{id.executi" - "on_id.name}/{id.node_id}\022\177\n\017RegisterProj" - "ect\022&.flyteidl.admin.ProjectRegisterRequ" - "est\032\'.flyteidl.admin.ProjectRegisterResp" - "onse\"\033\202\323\344\223\002\025\"\020/api/v1/projects:\001*\022\227\001\n\rUp" - "dateProject\022\027.flyteidl.admin.Project\032%.f" - "lyteidl.admin.ProjectUpdateResponse\"F\202\323\344" - "\223\002@\032\025/api/v1/projects/{id}:\001*Z$\032\037/api/v1" - "/projects/org/{org}/{id}:\001*\022f\n\014ListProje" - "cts\022\".flyteidl.admin.ProjectListRequest\032" - "\030.flyteidl.admin.Projects\"\030\202\323\344\223\002\022\022\020/api/" - "v1/projects\022\231\001\n\023CreateWorkflowEvent\022-.fl" - "yteidl.admin.WorkflowExecutionEventReque" - "st\032..flyteidl.admin.WorkflowExecutionEve" - "ntResponse\"#\202\323\344\223\002\035\"\030/api/v1/events/workf" - "lows:\001*\022\211\001\n\017CreateNodeEvent\022).flyteidl.a" - "dmin.NodeExecutionEventRequest\032*.flyteid" - "l.admin.NodeExecutionEventResponse\"\037\202\323\344\223" - "\002\031\"\024/api/v1/events/nodes:\001*\022\211\001\n\017CreateTa" - "skEvent\022).flyteidl.admin.TaskExecutionEv" - "entRequest\032*.flyteidl.admin.TaskExecutio" - "nEventResponse\"\037\202\323\344\223\002\031\"\024/api/v1/events/t" - "asks:\001*\022\313\005\n\020GetTaskExecution\022\'.flyteidl." - "admin.TaskExecutionGetRequest\032\035.flyteidl" - ".admin.TaskExecution\"\356\004\202\323\344\223\002\347\004\022\231\002/api/v1" - "/task_executions/{id.node_execution_id.e" - "xecution_id.project}/{id.node_execution_" - "id.execution_id.domain}/{id.node_executi" - "on_id.execution_id.name}/{id.node_execut" - "ion_id.node_id}/{id.task_id.project}/{id" - ".task_id.domain}/{id.task_id.name}/{id.t" - "ask_id.version}/{id.retry_attempt}Z\310\002\022\305\002" - "/api/v1/task_executions/org/{id.node_exe" - "cution_id.execution_id.org}/{id.node_exe" - "cution_id.execution_id.project}/{id.node" - "_execution_id.execution_id.domain}/{id.n" - "ode_execution_id.execution_id.name}/{id." - "node_execution_id.node_id}/{id.task_id.p" - "roject}/{id.task_id.domain}/{id.task_id." - "name}/{id.task_id.version}/{id.retry_att" - "empt}\022\361\003\n\022ListTaskExecutions\022(.flyteidl." - "admin.TaskExecutionListRequest\032!.flyteid" - "l.admin.TaskExecutionList\"\215\003\202\323\344\223\002\206\003\022\252\001/a" - "pi/v1/task_executions/{node_execution_id" - ".execution_id.project}/{node_execution_i" - "d.execution_id.domain}/{node_execution_i" - "d.execution_id.name}/{node_execution_id." - "node_id}Z\326\001\022\323\001/api/v1/task_executions/or" - "g/{node_execution_id.execution_id.org}/{" + "{id.node_id}Z\220\001\022\215\001/api/v1/data/node_exec" + "utions/org/{id.execution_id.org}/{id.exe" + "cution_id.project}/{id.execution_id.doma" + "in}/{id.execution_id.name}/{id.node_id}\022" + "\250\001\n\017RegisterProject\022&.flyteidl.admin.Pro" + "jectRegisterRequest\032\'.flyteidl.admin.Pro" + "jectRegisterResponse\"D\202\323\344\223\002>\"\020/api/v1/pr" + "ojects:\001*Z\'\"\"/api/v1/projects/org/{proje" + "ct.org}:\001*\022\227\001\n\rUpdateProject\022\027.flyteidl." + "admin.Project\032%.flyteidl.admin.ProjectUp" + "dateResponse\"F\202\323\344\223\002@\032\025/api/v1/projects/{" + "id}:\001*Z$\032\037/api/v1/projects/org/{org}/{id" + "}:\001*\022\204\001\n\014ListProjects\022\".flyteidl.admin.P" + "rojectListRequest\032\030.flyteidl.admin.Proje" + "cts\"6\202\323\344\223\0020\022\020/api/v1/projectsZ\034\022\032/api/v1" + "/projects/org/{org}\022\325\001\n\023CreateWorkflowEv" + "ent\022-.flyteidl.admin.WorkflowExecutionEv" + "entRequest\032..flyteidl.admin.WorkflowExec" + "utionEventResponse\"_\202\323\344\223\002Y\"\030/api/v1/even" + "ts/workflows:\001*Z:\"5/api/v1/events/org/{e" + "vent.execution_id.org}/workflows:\001*\022\304\001\n\017" + "CreateNodeEvent\022).flyteidl.admin.NodeExe" + "cutionEventRequest\032*.flyteidl.admin.Node" + "ExecutionEventResponse\"Z\202\323\344\223\002T\"\024/api/v1/" + "events/nodes:\001*Z9\"4/api/v1/events/org/{e" + "vent.id.execution_id.org}/nodes:\001*\022\332\001\n\017C" + "reateTaskEvent\022).flyteidl.admin.TaskExec" + "utionEventRequest\032*.flyteidl.admin.TaskE" + "xecutionEventResponse\"p\202\323\344\223\002j\"\024/api/v1/e" + "vents/tasks:\001*ZO\"J/api/v1/events/org/{ev" + "ent.parent_node_execution_id.execution_i" + "d.org}/tasks:\001*\022\313\005\n\020GetTaskExecution\022\'.f" + "lyteidl.admin.TaskExecutionGetRequest\032\035." + "flyteidl.admin.TaskExecution\"\356\004\202\323\344\223\002\347\004\022\231" + "\002/api/v1/task_executions/{id.node_execut" + "ion_id.execution_id.project}/{id.node_ex" + "ecution_id.execution_id.domain}/{id.node" + "_execution_id.execution_id.name}/{id.nod" + "e_execution_id.node_id}/{id.task_id.proj" + "ect}/{id.task_id.domain}/{id.task_id.nam" + "e}/{id.task_id.version}/{id.retry_attemp" + "t}Z\310\002\022\305\002/api/v1/task_executions/org/{id." + "node_execution_id.execution_id.org}/{id." "node_execution_id.execution_id.project}/" - "{node_execution_id.execution_id.domain}/" - "{node_execution_id.execution_id.name}/{n" - "ode_execution_id.node_id}\022\354\005\n\024GetTaskExe" - "cutionData\022+.flyteidl.admin.TaskExecutio" - "nGetDataRequest\032,.flyteidl.admin.TaskExe" - "cutionGetDataResponse\"\370\004\202\323\344\223\002\361\004\022\236\002/api/v" - "1/data/task_executions/{id.node_executio" - "n_id.execution_id.project}/{id.node_exec" - "ution_id.execution_id.domain}/{id.node_e" - "xecution_id.execution_id.name}/{id.node_" - "execution_id.node_id}/{id.task_id.projec" - "t}/{id.task_id.domain}/{id.task_id.name}" - "/{id.task_id.version}/{id.retry_attempt}" - "Z\315\002\022\312\002/api/v1/data/task_executions/org/{" - "id.node_execution_id.execution_id.org}/{" - "id.node_execution_id.execution_id.projec" - "t}/{id.node_execution_id.execution_id.do" - "main}/{id.node_execution_id.execution_id" - ".name}/{id.node_execution_id.node_id}/{i" - "d.task_id.project}/{id.task_id.domain}/{" - "id.task_id.name}/{id.task_id.version}/{i" - "d.retry_attempt}\022\313\002\n\035UpdateProjectDomain" - "Attributes\0224.flyteidl.admin.ProjectDomai" - "nAttributesUpdateRequest\0325.flyteidl.admi" - "n.ProjectDomainAttributesUpdateResponse\"" - "\274\001\202\323\344\223\002\265\001\032J/api/v1/project_domain_attrib" - "utes/{attributes.project}/{attributes.do" - "main}:\001*Zd\032_/api/v1/project_domain_attri" - "butes/org/{attributes.org}/{attributes.p" - "roject}/{attributes.domain}:\001*\022\203\002\n\032GetPr" - "ojectDomainAttributes\0221.flyteidl.admin.P" - "rojectDomainAttributesGetRequest\0322.flyte" - "idl.admin.ProjectDomainAttributesGetResp" - "onse\"~\202\323\344\223\002x\0224/api/v1/project_domain_att" - "ributes/{project}/{domain}Z@\022>/api/v1/pr" - "oject_domain_attributes/org/{org}/{proje" - "ct}/{domain}\022\223\002\n\035DeleteProjectDomainAttr" - "ibutes\0224.flyteidl.admin.ProjectDomainAtt" - "ributesDeleteRequest\0325.flyteidl.admin.Pr" - "ojectDomainAttributesDeleteResponse\"\204\001\202\323" - "\344\223\002~*4/api/v1/project_domain_attributes/" - "{project}/{domain}:\001*ZC*>/api/v1/project" - "_domain_attributes/org/{org}/{project}/{" - "domain}:\001*\022\212\002\n\027UpdateProjectAttributes\022." - ".flyteidl.admin.ProjectAttributesUpdateR" - "equest\032/.flyteidl.admin.ProjectAttribute" - "sUpdateResponse\"\215\001\202\323\344\223\002\206\001\032//api/v1/proje" - "ct_attributes/{attributes.project}:\001*ZP\032" - "K/api/v1/project_domain_attributes/org/{" - "attributes.org}/{attributes.project}:\001*\022" - "\330\001\n\024GetProjectAttributes\022+.flyteidl.admi" - "n.ProjectAttributesGetRequest\032,.flyteidl" - ".admin.ProjectAttributesGetResponse\"e\202\323\344" - "\223\002_\022$/api/v1/project_attributes/{project" - "}Z7\0225/api/v1/project_domain_attributes/o" - "rg/{org}/{project}\022\347\001\n\027DeleteProjectAttr" + "{id.node_execution_id.execution_id.domai" + "n}/{id.node_execution_id.execution_id.na" + "me}/{id.node_execution_id.node_id}/{id.t" + "ask_id.project}/{id.task_id.domain}/{id." + "task_id.name}/{id.task_id.version}/{id.r" + "etry_attempt}\022\361\003\n\022ListTaskExecutions\022(.f" + "lyteidl.admin.TaskExecutionListRequest\032!" + ".flyteidl.admin.TaskExecutionList\"\215\003\202\323\344\223" + "\002\206\003\022\252\001/api/v1/task_executions/{node_exec" + "ution_id.execution_id.project}/{node_exe" + "cution_id.execution_id.domain}/{node_exe" + "cution_id.execution_id.name}/{node_execu" + "tion_id.node_id}Z\326\001\022\323\001/api/v1/task_execu" + "tions/org/{node_execution_id.execution_i" + "d.org}/{node_execution_id.execution_id.p" + "roject}/{node_execution_id.execution_id." + "domain}/{node_execution_id.execution_id." + "name}/{node_execution_id.node_id}\022\354\005\n\024Ge" + "tTaskExecutionData\022+.flyteidl.admin.Task" + "ExecutionGetDataRequest\032,.flyteidl.admin" + ".TaskExecutionGetDataResponse\"\370\004\202\323\344\223\002\361\004\022" + "\236\002/api/v1/data/task_executions/{id.node_" + "execution_id.execution_id.project}/{id.n" + "ode_execution_id.execution_id.domain}/{i" + "d.node_execution_id.execution_id.name}/{" + "id.node_execution_id.node_id}/{id.task_i" + "d.project}/{id.task_id.domain}/{id.task_" + "id.name}/{id.task_id.version}/{id.retry_" + "attempt}Z\315\002\022\312\002/api/v1/data/task_executio" + "ns/org/{id.node_execution_id.execution_i" + "d.org}/{id.node_execution_id.execution_i" + "d.project}/{id.node_execution_id.executi" + "on_id.domain}/{id.node_execution_id.exec" + "ution_id.name}/{id.node_execution_id.nod" + "e_id}/{id.task_id.project}/{id.task_id.d" + "omain}/{id.task_id.name}/{id.task_id.ver" + "sion}/{id.retry_attempt}\022\313\002\n\035UpdateProje" + "ctDomainAttributes\0224.flyteidl.admin.Proj" + "ectDomainAttributesUpdateRequest\0325.flyte" + "idl.admin.ProjectDomainAttributesUpdateR" + "esponse\"\274\001\202\323\344\223\002\265\001\032J/api/v1/project_domai" + "n_attributes/{attributes.project}/{attri" + "butes.domain}:\001*Zd\032_/api/v1/project_doma" + "in_attributes/org/{attributes.org}/{attr" + "ibutes.project}/{attributes.domain}:\001*\022\203" + "\002\n\032GetProjectDomainAttributes\0221.flyteidl" + ".admin.ProjectDomainAttributesGetRequest" + "\0322.flyteidl.admin.ProjectDomainAttribute" + "sGetResponse\"~\202\323\344\223\002x\0224/api/v1/project_do" + "main_attributes/{project}/{domain}Z@\022>/a" + "pi/v1/project_domain_attributes/org/{org" + "}/{project}/{domain}\022\223\002\n\035DeleteProjectDo" + "mainAttributes\0224.flyteidl.admin.ProjectD" + "omainAttributesDeleteRequest\0325.flyteidl." + "admin.ProjectDomainAttributesDeleteRespo" + "nse\"\204\001\202\323\344\223\002~*4/api/v1/project_domain_att" + "ributes/{project}/{domain}:\001*ZC*>/api/v1" + "/project_domain_attributes/org/{org}/{pr" + "oject}/{domain}:\001*\022\212\002\n\027UpdateProjectAttr" "ibutes\022..flyteidl.admin.ProjectAttribute" - "sDeleteRequest\032/.flyteidl.admin.ProjectA" - "ttributesDeleteResponse\"k\202\323\344\223\002e*$/api/v1" - "/project_attributes/{project}:\001*Z:*5/api" - "/v1/project_domain_attributes/org/{org}/" - "{project}:\001*\022\334\002\n\030UpdateWorkflowAttribute" - "s\022/.flyteidl.admin.WorkflowAttributesUpd" - "ateRequest\0320.flyteidl.admin.WorkflowAttr" - "ibutesUpdateResponse\"\334\001\202\323\344\223\002\325\001\032Z/api/v1/" - "workflow_attributes/{attributes.project}" - "/{attributes.domain}/{attributes.workflo" - "w}:\001*Zt\032o/api/v1/workflow_attributes/org" - "/{attributes.org}/{attributes.project}/{" - "attributes.domain}/{attributes.workflow}" - ":\001*\022\200\002\n\025GetWorkflowAttributes\022,.flyteidl" - ".admin.WorkflowAttributesGetRequest\032-.fl" - "yteidl.admin.WorkflowAttributesGetRespon" - "se\"\211\001\202\323\344\223\002\202\001\0229/api/v1/workflow_attribute" - "s/{project}/{domain}/{workflow}ZE\022C/api/" - "v1/workflow_attributes/org/{org}/{projec" - "t}/{domain}/{workflow}\022\217\002\n\030DeleteWorkflo" - "wAttributes\022/.flyteidl.admin.WorkflowAtt" - "ributesDeleteRequest\0320.flyteidl.admin.Wo" - "rkflowAttributesDeleteResponse\"\217\001\202\323\344\223\002\210\001" - "*9/api/v1/workflow_attributes/{project}/" - "{domain}/{workflow}:\001*ZH*C/api/v1/workfl" - "ow_attributes/org/{org}/{project}/{domai" - "n}/{workflow}:\001*\022\240\001\n\027ListMatchableAttrib" - "utes\022..flyteidl.admin.ListMatchableAttri" - "butesRequest\032/.flyteidl.admin.ListMatcha" - "bleAttributesResponse\"$\202\323\344\223\002\036\022\034/api/v1/m" - "atchable_attributes\022\350\001\n\021ListNamedEntitie" - "s\022&.flyteidl.admin.NamedEntityListReques" - "t\032\037.flyteidl.admin.NamedEntityList\"\211\001\202\323\344" - "\223\002\202\001\0229/api/v1/named_entities/{resource_t" - "ype}/{project}/{domain}ZE\022C/api/v1/named" - "_entities/{resource_type}/org/{org}/{pro" - "ject}/{domain}\022\203\002\n\016GetNamedEntity\022%.flyt" - "eidl.admin.NamedEntityGetRequest\032\033.flyte" - "idl.admin.NamedEntity\"\254\001\202\323\344\223\002\245\001\022I/api/v1" - "/named_entities/{resource_type}/{id.proj" - "ect}/{id.domain}/{id.name}ZX\022V/api/v1/na" - "med_entities/{resource_type}/org/{id.org" - "}/{id.project}/{id.domain}/{id.name}\022\235\002\n" - "\021UpdateNamedEntity\022(.flyteidl.admin.Name" - "dEntityUpdateRequest\032).flyteidl.admin.Na" - "medEntityUpdateResponse\"\262\001\202\323\344\223\002\253\001\032I/api/" - "v1/named_entities/{resource_type}/{id.pr" - "oject}/{id.domain}/{id.name}:\001*Z[\032V/api/" - "v1/named_entities/{resource_type}/org/{i" - "d.org}/{id.project}/{id.domain}/{id.name" - "}:\001*\022l\n\nGetVersion\022!.flyteidl.admin.GetV" - "ersionRequest\032\".flyteidl.admin.GetVersio" - "nResponse\"\027\202\323\344\223\002\021\022\017/api/v1/version\022\266\002\n\024G" - "etDescriptionEntity\022 .flyteidl.admin.Obj" - "ectGetRequest\032!.flyteidl.admin.Descripti" - "onEntity\"\330\001\202\323\344\223\002\321\001\022_/api/v1/description_" - "entities/{id.resource_type}/{id.project}" - "/{id.domain}/{id.name}/{id.version}Zn\022l/" - "api/v1/description_entities/org/{id.org}" - "/{id.resource_type}/{id.project}/{id.dom" - "ain}/{id.name}/{id.version}\022\310\003\n\027ListDesc" - "riptionEntities\022,.flyteidl.admin.Descrip" - "tionEntityListRequest\032%.flyteidl.admin.D" - "escriptionEntityList\"\327\002\202\323\344\223\002\320\002\022O/api/v1/" - "description_entities/{resource_type}/{id" - ".project}/{id.domain}/{id.name}Z^\022\\/api/" - "v1/description_entities/{resource_type}/" - "org/{id.org}/{id.project}/{id.domain}/{i" - "d.name}ZG\022E/api/v1/description_entities/" - "{resource_type}/{id.project}/{id.domain}" - "ZT\022R/api/v1/description_entities/{resour" - "ce_type}/org/{id.org}/{id.project}/{id.d" - "omain}\022\225\002\n\023GetExecutionMetrics\0222.flyteid" - "l.admin.WorkflowExecutionGetMetricsReque" - "st\0323.flyteidl.admin.WorkflowExecutionGet" - "MetricsResponse\"\224\001\202\323\344\223\002\215\001\022=/api/v1/metri" - "cs/executions/{id.project}/{id.domain}/{" - "id.name}ZL\022J/api/v1/metrics/executions/o" + "sUpdateRequest\032/.flyteidl.admin.ProjectA" + "ttributesUpdateResponse\"\215\001\202\323\344\223\002\206\001\032//api/" + "v1/project_attributes/{attributes.projec" + "t}:\001*ZP\032K/api/v1/project_domain_attribut" + "es/org/{attributes.org}/{attributes.proj" + "ect}:\001*\022\330\001\n\024GetProjectAttributes\022+.flyte" + "idl.admin.ProjectAttributesGetRequest\032,." + "flyteidl.admin.ProjectAttributesGetRespo" + "nse\"e\202\323\344\223\002_\022$/api/v1/project_attributes/" + "{project}Z7\0225/api/v1/project_domain_attr" + "ibutes/org/{org}/{project}\022\347\001\n\027DeletePro" + "jectAttributes\022..flyteidl.admin.ProjectA" + "ttributesDeleteRequest\032/.flyteidl.admin." + "ProjectAttributesDeleteResponse\"k\202\323\344\223\002e*" + "$/api/v1/project_attributes/{project}:\001*" + "Z:*5/api/v1/project_domain_attributes/or" + "g/{org}/{project}:\001*\022\334\002\n\030UpdateWorkflowA" + "ttributes\022/.flyteidl.admin.WorkflowAttri" + "butesUpdateRequest\0320.flyteidl.admin.Work" + "flowAttributesUpdateResponse\"\334\001\202\323\344\223\002\325\001\032Z" + "/api/v1/workflow_attributes/{attributes." + "project}/{attributes.domain}/{attributes" + ".workflow}:\001*Zt\032o/api/v1/workflow_attrib" + "utes/org/{attributes.org}/{attributes.pr" + "oject}/{attributes.domain}/{attributes.w" + "orkflow}:\001*\022\200\002\n\025GetWorkflowAttributes\022,." + "flyteidl.admin.WorkflowAttributesGetRequ" + "est\032-.flyteidl.admin.WorkflowAttributesG" + "etResponse\"\211\001\202\323\344\223\002\202\001\0229/api/v1/workflow_a" + "ttributes/{project}/{domain}/{workflow}Z" + "E\022C/api/v1/workflow_attributes/org/{org}" + "/{project}/{domain}/{workflow}\022\217\002\n\030Delet" + "eWorkflowAttributes\022/.flyteidl.admin.Wor" + "kflowAttributesDeleteRequest\0320.flyteidl." + "admin.WorkflowAttributesDeleteResponse\"\217" + "\001\202\323\344\223\002\210\001*9/api/v1/workflow_attributes/{p" + "roject}/{domain}/{workflow}:\001*ZH*C/api/v" + "1/workflow_attributes/org/{org}/{project" + "}/{domain}/{workflow}:\001*\022\312\001\n\027ListMatchab" + "leAttributes\022..flyteidl.admin.ListMatcha" + "bleAttributesRequest\032/.flyteidl.admin.Li" + "stMatchableAttributesResponse\"N\202\323\344\223\002H\022\034/" + "api/v1/matchable_attributesZ(\022&/api/v1/m" + "atchable_attributes/org/{org}\022\350\001\n\021ListNa" + "medEntities\022&.flyteidl.admin.NamedEntity" + "ListRequest\032\037.flyteidl.admin.NamedEntity" + "List\"\211\001\202\323\344\223\002\202\001\0229/api/v1/named_entities/{" + "resource_type}/{project}/{domain}ZE\022C/ap" + "i/v1/named_entities/{resource_type}/org/" + "{org}/{project}/{domain}\022\203\002\n\016GetNamedEnt" + "ity\022%.flyteidl.admin.NamedEntityGetReque" + "st\032\033.flyteidl.admin.NamedEntity\"\254\001\202\323\344\223\002\245" + "\001\022I/api/v1/named_entities/{resource_type" + "}/{id.project}/{id.domain}/{id.name}ZX\022V" + "/api/v1/named_entities/{resource_type}/o" "rg/{id.org}/{id.project}/{id.domain}/{id" - ".name}B\?Z=github.com/flyteorg/flyte/flyt" - "eidl/gen/pb-go/flyteidl/serviceb\006proto3" + ".name}\022\235\002\n\021UpdateNamedEntity\022(.flyteidl." + "admin.NamedEntityUpdateRequest\032).flyteid" + "l.admin.NamedEntityUpdateResponse\"\262\001\202\323\344\223" + "\002\253\001\032I/api/v1/named_entities/{resource_ty" + "pe}/{id.project}/{id.domain}/{id.name}:\001" + "*Z[\032V/api/v1/named_entities/{resource_ty" + "pe}/org/{id.org}/{id.project}/{id.domain" + "}/{id.name}:\001*\022l\n\nGetVersion\022!.flyteidl." + "admin.GetVersionRequest\032\".flyteidl.admin" + ".GetVersionResponse\"\027\202\323\344\223\002\021\022\017/api/v1/ver" + "sion\022\266\002\n\024GetDescriptionEntity\022 .flyteidl" + ".admin.ObjectGetRequest\032!.flyteidl.admin" + ".DescriptionEntity\"\330\001\202\323\344\223\002\321\001\022_/api/v1/de" + "scription_entities/{id.resource_type}/{i" + "d.project}/{id.domain}/{id.name}/{id.ver" + "sion}Zn\022l/api/v1/description_entities/or" + "g/{id.org}/{id.resource_type}/{id.projec" + "t}/{id.domain}/{id.name}/{id.version}\022\310\003" + "\n\027ListDescriptionEntities\022,.flyteidl.adm" + "in.DescriptionEntityListRequest\032%.flytei" + "dl.admin.DescriptionEntityList\"\327\002\202\323\344\223\002\320\002" + "\022O/api/v1/description_entities/{resource" + "_type}/{id.project}/{id.domain}/{id.name" + "}Z^\022\\/api/v1/description_entities/{resou" + "rce_type}/org/{id.org}/{id.project}/{id." + "domain}/{id.name}ZG\022E/api/v1/description" + "_entities/{resource_type}/{id.project}/{" + "id.domain}ZT\022R/api/v1/description_entiti" + "es/{resource_type}/org/{id.org}/{id.proj" + "ect}/{id.domain}\022\225\002\n\023GetExecutionMetrics" + "\0222.flyteidl.admin.WorkflowExecutionGetMe" + "tricsRequest\0323.flyteidl.admin.WorkflowEx" + "ecutionGetMetricsResponse\"\224\001\202\323\344\223\002\215\001\022=/ap" + "i/v1/metrics/executions/{id.project}/{id" + ".domain}/{id.name}ZL\022J/api/v1/metrics/ex" + "ecutions/org/{id.org}/{id.project}/{id.d" + "omain}/{id.name}B\?Z=github.com/flyteorg/" + "flyte/flyteidl/gen/pb-go/flyteidl/servic" + "eb\006proto3" ; ::google::protobuf::internal::DescriptorTable descriptor_table_flyteidl_2fservice_2fadmin_2eproto = { false, InitDefaults_flyteidl_2fservice_2fadmin_2eproto, descriptor_table_protodef_flyteidl_2fservice_2fadmin_2eproto, - "flyteidl/service/admin.proto", &assign_descriptors_table_flyteidl_2fservice_2fadmin_2eproto, 15199, + "flyteidl/service/admin.proto", &assign_descriptors_table_flyteidl_2fservice_2fadmin_2eproto, 15809, }; void AddDescriptors_flyteidl_2fservice_2fadmin_2eproto() { diff --git a/flyteidl/gen/pb-cpp/flyteidl/service/signal.pb.cc b/flyteidl/gen/pb-cpp/flyteidl/service/signal.pb.cc index a1f4aa5982..5a6d8e19a8 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/service/signal.pb.cc +++ b/flyteidl/gen/pb-cpp/flyteidl/service/signal.pb.cc @@ -39,24 +39,29 @@ ::google::protobuf::internal::AssignDescriptorsTable assign_descriptors_table_fl const char descriptor_table_protodef_flyteidl_2fservice_2fsignal_2eproto[] = "\n\035flyteidl/service/signal.proto\022\020flyteid" "l.service\032\034google/api/annotations.proto\032" - "\033flyteidl/admin/signal.proto2\232\003\n\rSignalS" + "\033flyteidl/admin/signal.proto2\336\004\n\rSignalS" "ervice\022W\n\021GetOrCreateSignal\022(.flyteidl.a" "dmin.SignalGetOrCreateRequest\032\026.flyteidl" - ".admin.Signal\"\000\022\301\001\n\013ListSignals\022!.flytei" + ".admin.Signal\"\000\022\324\002\n\013ListSignals\022!.flytei" "dl.admin.SignalListRequest\032\032.flyteidl.ad" - "min.SignalList\"s\202\323\344\223\002m\022k/api/v1/signals/" - "{workflow_execution_id.project}/{workflo" - "w_execution_id.domain}/{workflow_executi" - "on_id.name}\022l\n\tSetSignal\022 .flyteidl.admi" - "n.SignalSetRequest\032!.flyteidl.admin.Sign" - "alSetResponse\"\032\202\323\344\223\002\024\"\017/api/v1/signals:\001" - "*B\?Z=github.com/flyteorg/flyte/flyteidl/" - "gen/pb-go/flyteidl/serviceb\006proto3" + "min.SignalList\"\205\002\202\323\344\223\002\376\001\022k/api/v1/signal" + "s/{workflow_execution_id.project}/{workf" + "low_execution_id.domain}/{workflow_execu" + "tion_id.name}Z\216\001\022\213\001/api/v1/signals/org/{" + "workflow_execution_id.org}/{workflow_exe" + "cution_id.project}/{workflow_execution_i" + "d.domain}/{workflow_execution_id.name}\022\234" + "\001\n\tSetSignal\022 .flyteidl.admin.SignalSetR" + "equest\032!.flyteidl.admin.SignalSetRespons" + "e\"J\202\323\344\223\002D\"\017/api/v1/signals:\001*Z.\")/api/v1" + "/signals/org/{id.execution_id.org}:\001*B\?Z" + "=github.com/flyteorg/flyte/flyteidl/gen/" + "pb-go/flyteidl/serviceb\006proto3" ; ::google::protobuf::internal::DescriptorTable descriptor_table_flyteidl_2fservice_2fsignal_2eproto = { false, InitDefaults_flyteidl_2fservice_2fsignal_2eproto, descriptor_table_protodef_flyteidl_2fservice_2fsignal_2eproto, - "flyteidl/service/signal.proto", &assign_descriptors_table_flyteidl_2fservice_2fsignal_2eproto, 594, + "flyteidl/service/signal.proto", &assign_descriptors_table_flyteidl_2fservice_2fsignal_2eproto, 790, }; void AddDescriptors_flyteidl_2fservice_2fsignal_2eproto() { diff --git a/flyteidl/gen/pb-go/flyteidl/admin/matchable_resource.pb.go b/flyteidl/gen/pb-go/flyteidl/admin/matchable_resource.pb.go index 93810d4040..1ab204ede3 100644 --- a/flyteidl/gen/pb-go/flyteidl/admin/matchable_resource.pb.go +++ b/flyteidl/gen/pb-go/flyteidl/admin/matchable_resource.pb.go @@ -812,10 +812,12 @@ func (m *MatchableAttributesConfiguration) GetOrg() string { // See :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for more details type ListMatchableAttributesRequest struct { // +required - ResourceType MatchableResource `protobuf:"varint,1,opt,name=resource_type,json=resourceType,proto3,enum=flyteidl.admin.MatchableResource" json:"resource_type,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + ResourceType MatchableResource `protobuf:"varint,1,opt,name=resource_type,json=resourceType,proto3,enum=flyteidl.admin.MatchableResource" json:"resource_type,omitempty"` + // Optional, org filter applied to list project requests. + Org string `protobuf:"bytes,2,opt,name=org,proto3" json:"org,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *ListMatchableAttributesRequest) Reset() { *m = ListMatchableAttributesRequest{} } @@ -850,6 +852,13 @@ func (m *ListMatchableAttributesRequest) GetResourceType() MatchableResource { return MatchableResource_TASK_RESOURCE } +func (m *ListMatchableAttributesRequest) GetOrg() string { + if m != nil { + return m.Org + } + return "" +} + // Response for a request for all matching resource attributes for a resource type. // See :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for more details type ListMatchableAttributesResponse struct { @@ -914,90 +923,90 @@ func init() { } var fileDescriptor_1d15bcabb02640f4 = []byte{ - // 1350 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x56, 0x5b, 0x53, 0xdb, 0x46, - 0x14, 0xb6, 0xb9, 0x18, 0x73, 0xdc, 0x80, 0xd8, 0x04, 0x30, 0xd0, 0x24, 0x54, 0xbd, 0x84, 0xb6, - 0x13, 0xbb, 0x43, 0xfb, 0x90, 0x5e, 0x32, 0x53, 0xe3, 0x88, 0xe0, 0x89, 0xc1, 0xb0, 0xb6, 0x73, - 0xe9, 0x8b, 0x66, 0x2d, 0xaf, 0x65, 0x15, 0x49, 0x2b, 0x56, 0x2b, 0xc0, 0xd3, 0x3f, 0xd1, 0x87, - 0xf6, 0xa7, 0xf4, 0xff, 0xf4, 0xad, 0x0f, 0xed, 0x8f, 0xe8, 0x68, 0x75, 0xb1, 0x2d, 0xec, 0x4c, - 0xde, 0x76, 0xcf, 0x7e, 0xe7, 0xb2, 0x67, 0xcf, 0xf9, 0xce, 0xc2, 0x93, 0x81, 0x3d, 0x12, 0xd4, - 0xea, 0xdb, 0x55, 0xd2, 0x77, 0x2c, 0xb7, 0xea, 0x10, 0x61, 0x0c, 0x49, 0xcf, 0xa6, 0x3a, 0xa7, - 0x3e, 0x0b, 0xb8, 0x41, 0x2b, 0x1e, 0x67, 0x82, 0xa1, 0xb5, 0x04, 0x58, 0x91, 0xc0, 0xdd, 0xbd, - 0x8c, 0xa2, 0xc1, 0x1c, 0x87, 0xb9, 0x11, 0x78, 0x37, 0x6b, 0xd5, 0xb0, 0x03, 0x5f, 0x50, 0xae, - 0x13, 0xdf, 0xb7, 0x4c, 0xd7, 0xa1, 0xae, 0x88, 0x81, 0x0f, 0x53, 0xa0, 0xc1, 0x38, 0xad, 0xd2, - 0x5b, 0x6a, 0x04, 0xc2, 0x4a, 0xed, 0x7c, 0x3c, 0x7d, 0xec, 0x53, 0x23, 0xe0, 0x96, 0x18, 0xc5, - 0xa7, 0x8f, 0x4c, 0xc6, 0x4c, 0x9b, 0x56, 0xe5, 0xae, 0x17, 0x0c, 0xaa, 0x37, 0x9c, 0x78, 0x1e, - 0xe5, 0x7e, 0x74, 0xae, 0xfe, 0x99, 0x07, 0xa5, 0x43, 0xfc, 0x4b, 0x1c, 0xdf, 0xa4, 0xed, 0x51, - 0x03, 0x29, 0xb0, 0x68, 0x78, 0x41, 0x39, 0xbf, 0x9f, 0x3f, 0x58, 0xc5, 0xe1, 0x32, 0x94, 0x98, - 0x5e, 0x50, 0x5e, 0x88, 0x24, 0xa6, 0x17, 0xa0, 0x2d, 0x28, 0x38, 0xd4, 0x61, 0x7c, 0x54, 0x5e, - 0x94, 0xc2, 0x78, 0x87, 0xca, 0xb0, 0xe2, 0x0b, 0xc6, 0x89, 0x49, 0xcb, 0x4b, 0xf2, 0x20, 0xd9, - 0xa2, 0xaf, 0x61, 0x83, 0x7a, 0x43, 0xea, 0x50, 0x4e, 0x6c, 0x3d, 0xc1, 0x2c, 0x4b, 0x8c, 0x92, - 0x1e, 0xb4, 0x23, 0xb9, 0xfa, 0x7b, 0x1e, 0xb6, 0x26, 0xe3, 0xaa, 0x09, 0xc1, 0xad, 0x5e, 0x20, - 0xa8, 0x8f, 0x7e, 0x82, 0x62, 0x9f, 0x0e, 0x48, 0x60, 0x0b, 0x5f, 0x86, 0x58, 0x3a, 0xdc, 0xaf, - 0x4c, 0x27, 0xbe, 0x92, 0xbd, 0x11, 0x4e, 0x35, 0xd0, 0x33, 0x28, 0xd8, 0x96, 0x63, 0x09, 0x5f, - 0x5e, 0xe6, 0x43, 0x74, 0x63, 0xbc, 0xfa, 0x57, 0x1e, 0x76, 0xea, 0xd1, 0x23, 0xcd, 0x88, 0xea, - 0x1d, 0x00, 0x49, 0x77, 0xe5, 0xfc, 0xfe, 0xe2, 0x41, 0xe9, 0xf0, 0xfb, 0xac, 0xed, 0xb9, 0xea, - 0x95, 0xf1, 0x52, 0x73, 0x05, 0x1f, 0xe1, 0x09, 0x63, 0xbb, 0xcf, 0x61, 0x3d, 0x73, 0x1c, 0xbe, - 0xc7, 0x25, 0x1d, 0x25, 0x2f, 0x74, 0x49, 0x47, 0xe8, 0x01, 0x2c, 0x5f, 0x13, 0x3b, 0xa0, 0xf1, - 0x1b, 0x45, 0x9b, 0x1f, 0x16, 0x9e, 0xe5, 0xd5, 0x0a, 0x94, 0xb5, 0xa4, 0x66, 0x2e, 0x02, 0x1a, - 0x4c, 0x46, 0x8d, 0x60, 0x49, 0x10, 0x33, 0x8a, 0x77, 0x15, 0xcb, 0xb5, 0xfa, 0x14, 0x36, 0x53, - 0x7c, 0x1c, 0x70, 0x93, 0xf4, 0xa8, 0x3d, 0x76, 0x91, 0x9f, 0x70, 0xa1, 0xfe, 0x97, 0x87, 0xb5, - 0x73, 0x3b, 0x30, 0x2d, 0xb7, 0x75, 0x4d, 0x39, 0xb7, 0xfa, 0x14, 0xed, 0xc1, 0xaa, 0x20, 0xfe, - 0xa5, 0x2e, 0x46, 0x5e, 0x02, 0x2e, 0x86, 0x82, 0xce, 0xc8, 0x93, 0x87, 0x9e, 0x84, 0xeb, 0x56, - 0xbf, 0xbc, 0x20, 0xfd, 0x16, 0x23, 0x41, 0xa3, 0x8f, 0x6c, 0xd8, 0x76, 0x2c, 0xdf, 0xb7, 0x5c, - 0x53, 0x8f, 0x41, 0x3d, 0x3a, 0x24, 0xd7, 0x16, 0xe3, 0xb2, 0x9a, 0xd6, 0x0e, 0xbf, 0xcb, 0xa6, - 0x74, 0xda, 0x75, 0xe5, 0x34, 0xd2, 0x8e, 0xa4, 0x47, 0xb1, 0x2e, 0xde, 0x74, 0x66, 0x89, 0xd5, - 0x43, 0xd8, 0x9c, 0x89, 0x47, 0x45, 0x58, 0x3a, 0xae, 0x35, 0x9a, 0x4a, 0x0e, 0xad, 0x43, 0xa9, - 0xdb, 0xd6, 0xf4, 0x17, 0xda, 0x71, 0xad, 0xdb, 0xec, 0x28, 0x79, 0xb5, 0x05, 0xeb, 0xd3, 0x2e, - 0xc3, 0x82, 0x5c, 0x65, 0xc9, 0x26, 0x7e, 0xf9, 0x47, 0xef, 0x0f, 0x13, 0x8f, 0x15, 0xd4, 0x7f, - 0x17, 0x61, 0xfb, 0x0d, 0xe3, 0x97, 0x03, 0x9b, 0xdd, 0x8c, 0xf3, 0xce, 0xdc, 0x81, 0x65, 0xa2, - 0x27, 0xb0, 0xee, 0x90, 0x5b, 0xdd, 0x23, 0x9c, 0xd8, 0x36, 0xb5, 0x2d, 0xdf, 0x91, 0xe9, 0x5c, - 0xc6, 0x6b, 0x0e, 0xb9, 0x3d, 0x1f, 0x4b, 0x51, 0x03, 0x94, 0xa4, 0xf1, 0x75, 0x83, 0xb9, 0x82, - 0xde, 0x8a, 0xb8, 0xbe, 0x27, 0x22, 0x09, 0xf9, 0xa1, 0xd2, 0x8e, 0x61, 0xf5, 0x08, 0x85, 0xd7, - 0xfd, 0x69, 0x01, 0x7a, 0x0b, 0x5b, 0x9c, 0xdc, 0xe8, 0x2c, 0x10, 0x5e, 0x20, 0xf4, 0x3e, 0x11, - 0x24, 0xb4, 0x38, 0xb0, 0x4c, 0xd9, 0xe8, 0xa5, 0xc3, 0x4f, 0xb3, 0x57, 0xc3, 0xe4, 0xa6, 0x25, - 0xc1, 0x2f, 0x88, 0x20, 0x51, 0xe0, 0xf8, 0x3e, 0xbf, 0x2b, 0x44, 0x15, 0x28, 0xd8, 0x61, 0x21, - 0xf9, 0xf2, 0x2d, 0x4b, 0x87, 0x5b, 0x59, 0x4b, 0xb2, 0xcc, 0x7c, 0x1c, 0xa3, 0xd0, 0x73, 0x28, - 0x11, 0xd7, 0x65, 0x82, 0x84, 0x19, 0xf1, 0x25, 0x55, 0x94, 0x0e, 0xf7, 0xb2, 0x4a, 0xb5, 0x31, - 0x04, 0x4f, 0xe2, 0xd1, 0xcf, 0x70, 0xcf, 0x72, 0x05, 0xe5, 0x3c, 0xf0, 0x84, 0xd5, 0xb3, 0x69, - 0xb9, 0x20, 0x0d, 0xec, 0x56, 0x22, 0x4a, 0xac, 0x24, 0x94, 0x58, 0x39, 0x62, 0xcc, 0x7e, 0x1d, - 0xd6, 0x32, 0x9e, 0x56, 0x08, 0xd3, 0x1f, 0xbe, 0xd3, 0x0d, 0xb7, 0x04, 0xd5, 0x0d, 0x62, 0x0c, - 0x69, 0x79, 0x65, 0x3f, 0x7f, 0x50, 0xc4, 0x6b, 0xa9, 0xb8, 0x1e, 0x4a, 0xd1, 0x01, 0x2c, 0x51, - 0xf7, 0xda, 0x2f, 0x17, 0xa5, 0x87, 0x07, 0xd9, 0x10, 0x35, 0xf7, 0xda, 0xc7, 0x12, 0xa1, 0xfe, - 0x51, 0x00, 0x74, 0x1a, 0xce, 0x0f, 0xcb, 0x35, 0x27, 0xfa, 0xb0, 0x07, 0x65, 0xd9, 0x31, 0xc9, - 0x40, 0xd1, 0xa7, 0xb8, 0x24, 0x34, 0xfa, 0xc5, 0xfb, 0x78, 0x6a, 0x6c, 0xe9, 0x24, 0x87, 0xb7, - 0xc4, 0x6c, 0xde, 0xbc, 0x84, 0xbd, 0x64, 0xc6, 0xcc, 0x72, 0x13, 0x95, 0xcb, 0x97, 0x1f, 0x4c, - 0x59, 0x27, 0x39, 0xbc, 0x63, 0xcc, 0xa5, 0xc3, 0x21, 0xec, 0xa6, 0x83, 0x4a, 0xbf, 0x0a, 0x59, - 0x67, 0xd2, 0x57, 0x54, 0x49, 0x07, 0x77, 0xf2, 0x34, 0x87, 0xa6, 0x4e, 0x72, 0xb8, 0x4c, 0xe7, - 0x51, 0x98, 0x0e, 0xdb, 0x63, 0x4f, 0xc9, 0x05, 0x65, 0x05, 0xc5, 0x65, 0xf6, 0xf9, 0x5c, 0x37, - 0x93, 0xec, 0x76, 0x92, 0xc3, 0x9b, 0x74, 0x26, 0xed, 0xb5, 0x00, 0x5d, 0x05, 0xc4, 0x0e, 0x5b, - 0x8b, 0x0d, 0x74, 0x9f, 0xf2, 0x6b, 0xcb, 0xa0, 0x71, 0x35, 0x3e, 0xce, 0x74, 0xd7, 0x45, 0x04, - 0x6c, 0x0d, 0xda, 0x11, 0xec, 0x24, 0x87, 0x95, 0xab, 0x8c, 0x0c, 0x35, 0x41, 0x89, 0xc9, 0x6d, - 0x4c, 0x1b, 0x85, 0xac, 0xb9, 0x59, 0xb4, 0x11, 0x26, 0x62, 0xdd, 0xcb, 0xb0, 0x0f, 0x85, 0x9d, - 0x9b, 0x98, 0x3e, 0xf4, 0x89, 0x44, 0x44, 0x2d, 0xbb, 0x22, 0xcd, 0x3e, 0xc9, 0x9a, 0x9d, 0xc3, - 0x37, 0x27, 0x39, 0xbc, 0x7d, 0x33, 0x87, 0x8a, 0x30, 0xa0, 0xbb, 0x3f, 0x94, 0xb8, 0xe0, 0x3f, - 0x99, 0x53, 0x34, 0xb5, 0x14, 0x78, 0x92, 0xc3, 0x1b, 0x46, 0x56, 0x78, 0x54, 0x84, 0x82, 0x20, - 0xdc, 0xa4, 0x42, 0xfd, 0x27, 0x0f, 0xfb, 0xa7, 0xc9, 0xb7, 0x6a, 0xfc, 0xb8, 0x91, 0xef, 0x80, - 0xcb, 0x8e, 0x46, 0x47, 0x99, 0x11, 0x1b, 0xba, 0x56, 0xb3, 0xae, 0xef, 0x36, 0xd7, 0xe4, 0x2c, - 0x0d, 0xbf, 0x2d, 0x7d, 0xe6, 0x10, 0xcb, 0x8d, 0xe7, 0x64, 0xbc, 0x0b, 0xbf, 0x2d, 0x1e, 0x67, - 0xbf, 0x52, 0x43, 0xc4, 0xff, 0x99, 0x64, 0x8b, 0x76, 0xa1, 0x98, 0xe4, 0x24, 0xfe, 0xd1, 0xa4, - 0x7b, 0xf4, 0x18, 0x4a, 0x36, 0x09, 0x5c, 0x63, 0xa8, 0x7b, 0x36, 0x71, 0xe3, 0xcf, 0x0c, 0x44, - 0xa2, 0x73, 0x9b, 0xb8, 0xe1, 0x9c, 0x66, 0xdc, 0x94, 0xaf, 0xbb, 0x8a, 0xc3, 0xa5, 0x3a, 0x84, - 0x47, 0x4d, 0xcb, 0x17, 0x33, 0x2e, 0x8b, 0xe9, 0x55, 0x40, 0x7d, 0x81, 0x8e, 0xe1, 0x5e, 0xda, - 0x9f, 0xe9, 0x04, 0x5d, 0xbb, 0x9b, 0xe4, 0xd4, 0x44, 0xd2, 0x7e, 0xf8, 0xa3, 0x44, 0x2f, 0x1c, - 0xb4, 0xea, 0x6f, 0xf0, 0x78, 0xae, 0x27, 0xdf, 0x63, 0xae, 0x4f, 0xd1, 0x5b, 0x58, 0x33, 0x26, - 0x53, 0x9c, 0x8c, 0xaf, 0x6f, 0xe6, 0xfa, 0x9a, 0xf3, 0x36, 0x38, 0x63, 0xe7, 0xab, 0xbf, 0xf3, - 0xb0, 0x71, 0x27, 0x40, 0xb4, 0x01, 0xf7, 0x3a, 0xb5, 0xf6, 0x2b, 0x1d, 0x6b, 0xed, 0x56, 0x17, - 0xd7, 0x35, 0x25, 0x87, 0x1e, 0x80, 0x52, 0x6f, 0x76, 0xdb, 0x1d, 0x0d, 0x8f, 0xa5, 0x79, 0x74, - 0x1f, 0xd6, 0xb5, 0xb7, 0x5a, 0xbd, 0xdb, 0x69, 0xb4, 0xce, 0xf4, 0x8b, 0xae, 0xd6, 0xd5, 0x94, - 0x05, 0xb4, 0x07, 0xdb, 0x63, 0x61, 0xa2, 0xd4, 0xac, 0x1d, 0x69, 0x4d, 0x65, 0x11, 0x7d, 0x06, - 0xfb, 0x17, 0xdd, 0x5a, 0xb3, 0xd1, 0x79, 0xa7, 0xb7, 0x8e, 0xf5, 0xb6, 0x86, 0x5f, 0x37, 0xea, - 0x9a, 0xde, 0x3e, 0xd7, 0xea, 0x8d, 0xe3, 0x46, 0xbd, 0x16, 0xea, 0x28, 0x4b, 0xa1, 0xdd, 0xf3, - 0x66, 0xf7, 0x65, 0xe3, 0x4c, 0x6f, 0xbd, 0xd6, 0x30, 0x6e, 0xbc, 0xd0, 0x94, 0x65, 0xf4, 0x10, - 0x76, 0xde, 0xb4, 0xf0, 0xab, 0xe3, 0x66, 0xeb, 0x8d, 0x3e, 0xe1, 0xa0, 0x75, 0x76, 0xdc, 0x78, - 0xa9, 0x14, 0xd0, 0x16, 0xa0, 0xc4, 0x59, 0xad, 0xdd, 0x6e, 0xbc, 0x3c, 0x3b, 0xd5, 0xce, 0x3a, - 0xca, 0xca, 0xd1, 0xf3, 0x5f, 0x7e, 0x34, 0x2d, 0x31, 0x0c, 0x7a, 0x15, 0x83, 0x39, 0x55, 0x99, - 0x30, 0xc6, 0xcd, 0x68, 0x51, 0x4d, 0x3f, 0xe5, 0x26, 0x75, 0xab, 0x5e, 0xef, 0xa9, 0xc9, 0xaa, - 0xd3, 0xff, 0xfd, 0x5e, 0x41, 0xce, 0x9f, 0x6f, 0xff, 0x0f, 0x00, 0x00, 0xff, 0xff, 0xeb, 0x2e, - 0x6f, 0x69, 0x5e, 0x0c, 0x00, 0x00, + // 1357 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x57, 0x5b, 0x53, 0xdb, 0xc6, + 0x17, 0xb7, 0xb8, 0x18, 0x73, 0xfc, 0x0f, 0x88, 0x4d, 0x00, 0x03, 0xff, 0x24, 0xd4, 0xbd, 0x84, + 0xb6, 0x13, 0xbb, 0x43, 0xfb, 0x90, 0x5e, 0x32, 0x53, 0xe3, 0x88, 0xe0, 0x89, 0xc1, 0xb0, 0xb6, + 0x73, 0xe9, 0x8b, 0x66, 0x2d, 0xaf, 0x85, 0x8a, 0xa4, 0x15, 0xab, 0x15, 0xc6, 0xed, 0x97, 0xe8, + 0x43, 0xfb, 0x51, 0xfa, 0x7d, 0xfa, 0xd6, 0x87, 0xf6, 0x43, 0x74, 0xb4, 0xba, 0xd8, 0x16, 0x76, + 0x26, 0x6f, 0xda, 0xb3, 0xbf, 0x73, 0xd9, 0xb3, 0xe7, 0xfc, 0xce, 0x0a, 0x9e, 0x0c, 0xec, 0x91, + 0xa0, 0x56, 0xdf, 0xae, 0x92, 0xbe, 0x63, 0xb9, 0x55, 0x87, 0x08, 0xe3, 0x92, 0xf4, 0x6c, 0xaa, + 0x73, 0xea, 0xb3, 0x80, 0x1b, 0xb4, 0xe2, 0x71, 0x26, 0x18, 0x5a, 0x4b, 0x80, 0x15, 0x09, 0xdc, + 0xdd, 0xcb, 0x28, 0x1a, 0xcc, 0x71, 0x98, 0x1b, 0x81, 0x77, 0xb3, 0x56, 0x0d, 0x3b, 0xf0, 0x05, + 0xe5, 0x3a, 0xf1, 0x7d, 0xcb, 0x74, 0x1d, 0xea, 0x8a, 0x18, 0xf8, 0x30, 0x05, 0x1a, 0x8c, 0xd3, + 0x2a, 0xbd, 0xa5, 0x46, 0x20, 0xac, 0xd4, 0xce, 0xff, 0xa7, 0xb7, 0x7d, 0x6a, 0x04, 0xdc, 0x12, + 0xa3, 0x78, 0xf7, 0x91, 0xc9, 0x98, 0x69, 0xd3, 0xaa, 0x5c, 0xf5, 0x82, 0x41, 0x75, 0xc8, 0x89, + 0xe7, 0x51, 0xee, 0x47, 0xfb, 0xe5, 0x3f, 0x14, 0x50, 0x3b, 0xc4, 0xbf, 0xc2, 0xf1, 0x49, 0xda, + 0x1e, 0x35, 0x90, 0x0a, 0x8b, 0x86, 0x17, 0x94, 0x94, 0x7d, 0xe5, 0x60, 0x15, 0x87, 0x9f, 0xa1, + 0xc4, 0xf4, 0x82, 0xd2, 0x42, 0x24, 0x31, 0xbd, 0x00, 0x6d, 0x41, 0xde, 0xa1, 0x0e, 0xe3, 0xa3, + 0xd2, 0xa2, 0x14, 0xc6, 0x2b, 0x54, 0x82, 0x15, 0x5f, 0x30, 0x4e, 0x4c, 0x5a, 0x5a, 0x92, 0x1b, + 0xc9, 0x12, 0x7d, 0x09, 0x1b, 0xd4, 0xbb, 0xa4, 0x0e, 0xe5, 0xc4, 0xd6, 0x13, 0xcc, 0xb2, 0xc4, + 0xa8, 0xe9, 0x46, 0x3b, 0x92, 0x97, 0x7f, 0x53, 0x60, 0x6b, 0x32, 0xae, 0x9a, 0x10, 0xdc, 0xea, + 0x05, 0x82, 0xfa, 0xe8, 0x07, 0x28, 0xf4, 0xe9, 0x80, 0x04, 0xb6, 0xf0, 0x65, 0x88, 0xc5, 0xc3, + 0xfd, 0xca, 0x74, 0xe2, 0x2b, 0xd9, 0x13, 0xe1, 0x54, 0x03, 0x3d, 0x83, 0xbc, 0x6d, 0x39, 0x96, + 0xf0, 0xe5, 0x61, 0x3e, 0x44, 0x37, 0xc6, 0x97, 0xff, 0x54, 0x60, 0xa7, 0x1e, 0x5d, 0xd2, 0x8c, + 0xa8, 0xde, 0x01, 0x90, 0x74, 0x55, 0x52, 0xf6, 0x17, 0x0f, 0x8a, 0x87, 0xdf, 0x66, 0x6d, 0xcf, + 0x55, 0xaf, 0x8c, 0x3f, 0x35, 0x57, 0xf0, 0x11, 0x9e, 0x30, 0xb6, 0xfb, 0x1c, 0xd6, 0x33, 0xdb, + 0xe1, 0x7d, 0x5c, 0xd1, 0x51, 0x72, 0x43, 0x57, 0x74, 0x84, 0x1e, 0xc0, 0xf2, 0x0d, 0xb1, 0x03, + 0x1a, 0xdf, 0x51, 0xb4, 0xf8, 0x6e, 0xe1, 0x99, 0x52, 0xae, 0x40, 0x49, 0x4b, 0x6a, 0xe6, 0x22, + 0xa0, 0xc1, 0x64, 0xd4, 0x08, 0x96, 0x04, 0x31, 0xa3, 0x78, 0x57, 0xb1, 0xfc, 0x2e, 0x3f, 0x85, + 0xcd, 0x14, 0x1f, 0x07, 0xdc, 0x24, 0x3d, 0x6a, 0x8f, 0x5d, 0x28, 0x13, 0x2e, 0xca, 0xff, 0x2a, + 0xb0, 0x76, 0x6e, 0x07, 0xa6, 0xe5, 0xb6, 0x6e, 0x28, 0xe7, 0x56, 0x9f, 0xa2, 0x3d, 0x58, 0x15, + 0xc4, 0xbf, 0xd2, 0xc5, 0xc8, 0x4b, 0xc0, 0x85, 0x50, 0xd0, 0x19, 0x79, 0x72, 0xd3, 0x93, 0x70, + 0xdd, 0xea, 0x97, 0x16, 0xa4, 0xdf, 0x42, 0x24, 0x68, 0xf4, 0x91, 0x0d, 0xdb, 0x8e, 0xe5, 0xfb, + 0x96, 0x6b, 0xea, 0x31, 0xa8, 0x47, 0x2f, 0xc9, 0x8d, 0xc5, 0xb8, 0xac, 0xa6, 0xb5, 0xc3, 0x6f, + 0xb2, 0x29, 0x9d, 0x76, 0x5d, 0x39, 0x8d, 0xb4, 0x23, 0xe9, 0x51, 0xac, 0x8b, 0x37, 0x9d, 0x59, + 0xe2, 0xf2, 0x21, 0x6c, 0xce, 0xc4, 0xa3, 0x02, 0x2c, 0x1d, 0xd7, 0x1a, 0x4d, 0x35, 0x87, 0xd6, + 0xa1, 0xd8, 0x6d, 0x6b, 0xfa, 0x0b, 0xed, 0xb8, 0xd6, 0x6d, 0x76, 0x54, 0xa5, 0xdc, 0x82, 0xf5, + 0x69, 0x97, 0x61, 0x41, 0xae, 0xb2, 0x64, 0x11, 0xdf, 0xfc, 0xa3, 0xf7, 0x87, 0x89, 0xc7, 0x0a, + 0xe5, 0x7f, 0x16, 0x61, 0xfb, 0x0d, 0xe3, 0x57, 0x03, 0x9b, 0x0d, 0xc7, 0x79, 0x67, 0xee, 0xc0, + 0x32, 0xd1, 0x13, 0x58, 0x77, 0xc8, 0xad, 0xee, 0x11, 0x4e, 0x6c, 0x9b, 0xda, 0x96, 0xef, 0xc8, + 0x74, 0x2e, 0xe3, 0x35, 0x87, 0xdc, 0x9e, 0x8f, 0xa5, 0xa8, 0x01, 0x6a, 0xd2, 0xf8, 0xba, 0xc1, + 0x5c, 0x41, 0x6f, 0x45, 0x5c, 0xdf, 0x13, 0x91, 0x84, 0xfc, 0x50, 0x69, 0xc7, 0xb0, 0x7a, 0x84, + 0xc2, 0xeb, 0xfe, 0xb4, 0x00, 0xbd, 0x85, 0x2d, 0x4e, 0x86, 0x3a, 0x0b, 0x84, 0x17, 0x08, 0xbd, + 0x4f, 0x04, 0x09, 0x2d, 0x0e, 0x2c, 0x53, 0x36, 0x7a, 0xf1, 0xf0, 0xe3, 0xec, 0xd1, 0x30, 0x19, + 0xb6, 0x24, 0xf8, 0x05, 0x11, 0x24, 0x0a, 0x1c, 0xdf, 0xe7, 0x77, 0x85, 0xa8, 0x02, 0x79, 0x3b, + 0x2c, 0x24, 0x5f, 0xde, 0x65, 0xf1, 0x70, 0x2b, 0x6b, 0x49, 0x96, 0x99, 0x8f, 0x63, 0x14, 0x7a, + 0x0e, 0x45, 0xe2, 0xba, 0x4c, 0x90, 0x30, 0x23, 0xbe, 0xa4, 0x8a, 0xe2, 0xe1, 0x5e, 0x56, 0xa9, + 0x36, 0x86, 0xe0, 0x49, 0x3c, 0xfa, 0x11, 0xee, 0x59, 0xae, 0xa0, 0x9c, 0x07, 0x9e, 0xb0, 0x7a, + 0x36, 0x2d, 0xe5, 0xa5, 0x81, 0xdd, 0x4a, 0x44, 0x89, 0x95, 0x84, 0x12, 0x2b, 0x47, 0x8c, 0xd9, + 0xaf, 0xc3, 0x5a, 0xc6, 0xd3, 0x0a, 0x61, 0xfa, 0xc3, 0x7b, 0x1a, 0x72, 0x4b, 0x50, 0xdd, 0x20, + 0xc6, 0x25, 0x2d, 0xad, 0xec, 0x2b, 0x07, 0x05, 0xbc, 0x96, 0x8a, 0xeb, 0xa1, 0x14, 0x1d, 0xc0, + 0x12, 0x75, 0x6f, 0xfc, 0x52, 0x41, 0x7a, 0x78, 0x90, 0x0d, 0x51, 0x73, 0x6f, 0x7c, 0x2c, 0x11, + 0xe5, 0xdf, 0xf3, 0x80, 0x4e, 0xc3, 0xf9, 0x61, 0xb9, 0xe6, 0x44, 0x1f, 0xf6, 0xa0, 0x24, 0x3b, + 0x26, 0x19, 0x28, 0xfa, 0x14, 0x97, 0x84, 0x46, 0x3f, 0x7b, 0x1f, 0x4f, 0x8d, 0x2d, 0x9d, 0xe4, + 0xf0, 0x96, 0x98, 0xcd, 0x9b, 0x57, 0xb0, 0x97, 0xcc, 0x98, 0x59, 0x6e, 0xa2, 0x72, 0xf9, 0xfc, + 0x83, 0x29, 0xeb, 0x24, 0x87, 0x77, 0x8c, 0xb9, 0x74, 0x78, 0x09, 0xbb, 0xe9, 0xa0, 0xd2, 0xaf, + 0x43, 0xd6, 0x99, 0xf4, 0x15, 0x55, 0xd2, 0xc1, 0x9d, 0x3c, 0xcd, 0xa1, 0xa9, 0x93, 0x1c, 0x2e, + 0xd1, 0x79, 0x14, 0xa6, 0xc3, 0xf6, 0xd8, 0x53, 0x72, 0x40, 0x59, 0x41, 0x71, 0x99, 0x7d, 0x3a, + 0xd7, 0xcd, 0x24, 0xbb, 0x9d, 0xe4, 0xf0, 0x26, 0x9d, 0x49, 0x7b, 0x2d, 0x40, 0xd7, 0x01, 0xb1, + 0xc3, 0xd6, 0x62, 0x03, 0xdd, 0xa7, 0xfc, 0xc6, 0x32, 0x68, 0x5c, 0x8d, 0x8f, 0x33, 0xdd, 0x75, + 0x11, 0x01, 0x5b, 0x83, 0x76, 0x04, 0x3b, 0xc9, 0x61, 0xf5, 0x3a, 0x23, 0x43, 0x4d, 0x50, 0x63, + 0x72, 0x1b, 0xd3, 0x46, 0x3e, 0x6b, 0x6e, 0x16, 0x6d, 0x84, 0x89, 0x58, 0xf7, 0x32, 0xec, 0x43, + 0x61, 0x67, 0x18, 0xd3, 0x87, 0x3e, 0x91, 0x88, 0xa8, 0x65, 0x57, 0xa4, 0xd9, 0x27, 0x59, 0xb3, + 0x73, 0xf8, 0xe6, 0x24, 0x87, 0xb7, 0x87, 0x73, 0xa8, 0x08, 0x03, 0xba, 0xfb, 0x42, 0x89, 0x0b, + 0xfe, 0xa3, 0x39, 0x45, 0x53, 0x4b, 0x81, 0x27, 0x39, 0xbc, 0x61, 0x64, 0x85, 0x47, 0x05, 0xc8, + 0x0b, 0xc2, 0x4d, 0x2a, 0xca, 0x7f, 0x2b, 0xb0, 0x7f, 0x9a, 0x3c, 0xab, 0xc6, 0x97, 0x1b, 0xf9, + 0x0e, 0xb8, 0xec, 0x68, 0x74, 0x94, 0x19, 0xb1, 0xa1, 0xeb, 0x72, 0xd6, 0xf5, 0xdd, 0xe6, 0x9a, + 0x9c, 0xa5, 0xe1, 0xb3, 0xa5, 0xcf, 0x1c, 0x62, 0xb9, 0xf1, 0x9c, 0x8c, 0x57, 0xe1, 0xb3, 0xc5, + 0xe3, 0xec, 0x67, 0x6a, 0x88, 0xf8, 0x3d, 0x93, 0x2c, 0xd1, 0x2e, 0x14, 0x92, 0x9c, 0xc4, 0x2f, + 0x9a, 0x74, 0x8d, 0x1e, 0x43, 0xd1, 0x26, 0x81, 0x6b, 0x5c, 0xea, 0x9e, 0x4d, 0xdc, 0xf8, 0x31, + 0x03, 0x91, 0xe8, 0xdc, 0x26, 0x6e, 0x38, 0xa7, 0x19, 0x37, 0xe5, 0xed, 0xae, 0xe2, 0xf0, 0xb3, + 0xfc, 0x0b, 0x3c, 0x6a, 0x5a, 0xbe, 0x98, 0x71, 0x58, 0x4c, 0xaf, 0x03, 0xea, 0x0b, 0x74, 0x0c, + 0xf7, 0xd2, 0xfe, 0x4c, 0x27, 0xe8, 0xda, 0xdd, 0x24, 0xa7, 0x26, 0x92, 0xf6, 0xc3, 0xff, 0x4b, + 0xf4, 0xe4, 0xa0, 0x8d, 0x7d, 0x2f, 0x8c, 0x7d, 0xff, 0x0a, 0x8f, 0xe7, 0xfa, 0xf6, 0x3d, 0xe6, + 0xfa, 0x14, 0xbd, 0x85, 0x35, 0x63, 0x32, 0xe9, 0xc9, 0x40, 0xfb, 0x6a, 0xae, 0xf7, 0x39, 0xb7, + 0x85, 0x33, 0x76, 0xbe, 0xf8, 0x4b, 0x81, 0x8d, 0x3b, 0x21, 0xa3, 0x0d, 0xb8, 0xd7, 0xa9, 0xb5, + 0x5f, 0xe9, 0x58, 0x6b, 0xb7, 0xba, 0xb8, 0xae, 0xa9, 0x39, 0xf4, 0x00, 0xd4, 0x7a, 0xb3, 0xdb, + 0xee, 0x68, 0x78, 0x2c, 0x55, 0xd0, 0x7d, 0x58, 0xd7, 0xde, 0x6a, 0xf5, 0x6e, 0xa7, 0xd1, 0x3a, + 0xd3, 0x2f, 0xba, 0x5a, 0x57, 0x53, 0x17, 0xd0, 0x1e, 0x6c, 0x8f, 0x85, 0x89, 0x52, 0xb3, 0x76, + 0xa4, 0x35, 0xd5, 0x45, 0xf4, 0x09, 0xec, 0x5f, 0x74, 0x6b, 0xcd, 0x46, 0xe7, 0x9d, 0xde, 0x3a, + 0xd6, 0xdb, 0x1a, 0x7e, 0xdd, 0xa8, 0x6b, 0x7a, 0xfb, 0x5c, 0xab, 0x37, 0x8e, 0x1b, 0xf5, 0x5a, + 0xa8, 0xa3, 0x2e, 0x85, 0x76, 0xcf, 0x9b, 0xdd, 0x97, 0x8d, 0x33, 0xbd, 0xf5, 0x5a, 0xc3, 0xb8, + 0xf1, 0x42, 0x53, 0x97, 0xd1, 0x43, 0xd8, 0x79, 0xd3, 0xc2, 0xaf, 0x8e, 0x9b, 0xad, 0x37, 0xfa, + 0x84, 0x83, 0xd6, 0xd9, 0x71, 0xe3, 0xa5, 0x9a, 0x47, 0x5b, 0x80, 0x12, 0x67, 0xb5, 0x76, 0xbb, + 0xf1, 0xf2, 0xec, 0x54, 0x3b, 0xeb, 0xa8, 0x2b, 0x47, 0xcf, 0x7f, 0xfa, 0xde, 0xb4, 0xc4, 0x65, + 0xd0, 0xab, 0x18, 0xcc, 0xa9, 0xca, 0x84, 0x31, 0x6e, 0x46, 0x1f, 0xd5, 0xf4, 0x99, 0x6e, 0x52, + 0xb7, 0xea, 0xf5, 0x9e, 0x9a, 0xac, 0x3a, 0xfd, 0x07, 0xd0, 0xcb, 0xcb, 0x89, 0xf4, 0xf5, 0x7f, + 0x01, 0x00, 0x00, 0xff, 0xff, 0xe3, 0xc1, 0x68, 0x9a, 0x70, 0x0c, 0x00, 0x00, } diff --git a/flyteidl/gen/pb-go/flyteidl/admin/project.pb.go b/flyteidl/gen/pb-go/flyteidl/admin/project.pb.go index 790ab90e6d..7864459c54 100644 --- a/flyteidl/gen/pb-go/flyteidl/admin/project.pb.go +++ b/flyteidl/gen/pb-go/flyteidl/admin/project.pb.go @@ -263,7 +263,9 @@ type ProjectListRequest struct { Filters string `protobuf:"bytes,3,opt,name=filters,proto3" json:"filters,omitempty"` // Sort ordering. // +optional - SortBy *Sort `protobuf:"bytes,4,opt,name=sort_by,json=sortBy,proto3" json:"sort_by,omitempty"` + SortBy *Sort `protobuf:"bytes,4,opt,name=sort_by,json=sortBy,proto3" json:"sort_by,omitempty"` + // Optional, org filter applied to list project requests. + Org string `protobuf:"bytes,5,opt,name=org,proto3" json:"org,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -322,6 +324,13 @@ func (m *ProjectListRequest) GetSortBy() *Sort { return nil } +func (m *ProjectListRequest) GetOrg() string { + if m != nil { + return m.Org + } + return "" +} + // Adds a new user-project within the Flyte deployment. // See :ref:`ref_flyteidl.admin.Project` for more details type ProjectRegisterRequest struct { @@ -442,35 +451,35 @@ func init() { func init() { proto.RegisterFile("flyteidl/admin/project.proto", fileDescriptor_2db065ce03bf106d) } var fileDescriptor_2db065ce03bf106d = []byte{ - // 468 bytes of a gzipped FileDescriptorProto + // 474 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0xcd, 0x6e, 0xd3, 0x40, 0x10, 0xc7, 0xb1, 0xd3, 0xd8, 0x61, 0x52, 0x22, 0x6b, 0x15, 0x9a, 0xe5, 0xe3, 0x60, 0x59, 0x1c, 0x72, 0xa0, 0x36, 0xa4, 0x37, 0x10, 0x48, 0x69, 0x63, 0x41, 0x45, 0x41, 0x68, 0x93, 0x56, 0x82, - 0x4b, 0x65, 0xc7, 0x5b, 0xb3, 0x60, 0x7b, 0xcd, 0xee, 0xf6, 0x90, 0x47, 0xe0, 0xa9, 0x78, 0x35, - 0xe4, 0xf5, 0xba, 0x6a, 0x43, 0x41, 0x3d, 0x79, 0x3e, 0x7e, 0x9e, 0xf9, 0xcf, 0x8e, 0x06, 0x9e, - 0x5e, 0x14, 0x1b, 0x45, 0x59, 0x56, 0x44, 0x49, 0x56, 0xb2, 0x2a, 0xaa, 0x05, 0xff, 0x4e, 0xd7, - 0x2a, 0xac, 0x05, 0x57, 0x1c, 0x8d, 0xba, 0x6c, 0xa8, 0xb3, 0x8f, 0x9f, 0x6c, 0xd1, 0x6b, 0x5e, - 0x96, 0xbc, 0x6a, 0xe1, 0xe0, 0x39, 0x38, 0x0b, 0x5e, 0x26, 0xac, 0x42, 0x23, 0xb0, 0x59, 0x86, - 0x2d, 0xdf, 0x9a, 0xde, 0x27, 0x36, 0xcb, 0x10, 0x82, 0x9d, 0x2a, 0x29, 0x29, 0xb6, 0x75, 0x44, - 0xdb, 0xc1, 0x6f, 0x1b, 0xdc, 0xcf, 0x6d, 0xb3, 0xbb, 0xf0, 0xe8, 0x05, 0xb8, 0x99, 0xae, 0x2e, - 0x71, 0xcf, 0xef, 0x4d, 0x87, 0xb3, 0xbd, 0xf0, 0xa6, 0xb8, 0xb0, 0x6d, 0x4e, 0x3a, 0x0c, 0xf9, - 0x30, 0xcc, 0xa8, 0x5c, 0x0b, 0x56, 0x2b, 0xc6, 0x2b, 0xbc, 0xa3, 0x8b, 0x5d, 0x0f, 0xa1, 0x10, - 0x9c, 0x22, 0x49, 0x69, 0x21, 0x71, 0xdf, 0xb7, 0x6e, 0x2b, 0x79, 0xa2, 0xb3, 0xc4, 0x50, 0xe8, - 0x15, 0xf4, 0xa5, 0x4a, 0x14, 0xc5, 0x8e, 0x6f, 0x4d, 0x47, 0xb3, 0x67, 0xdb, 0xb8, 0x99, 0xa7, - 0xfb, 0x2e, 0x1b, 0x96, 0xb4, 0xbf, 0x20, 0x0f, 0x7a, 0x5c, 0xe4, 0xd8, 0xd5, 0x2a, 0x1a, 0x33, - 0x78, 0x0b, 0xbb, 0xd7, 0x41, 0x04, 0xe0, 0xcc, 0x8f, 0x56, 0xc7, 0x67, 0xb1, 0x77, 0x0f, 0xed, - 0xc2, 0x60, 0x4e, 0x8e, 0xde, 0x1f, 0x9f, 0xc5, 0x0b, 0xcf, 0x42, 0x63, 0xf0, 0x96, 0x5f, 0x96, - 0xab, 0xf8, 0xe3, 0xf9, 0xbb, 0xf8, 0x53, 0x4c, 0xe6, 0xab, 0x78, 0xe1, 0xd9, 0xc1, 0x29, 0x0c, - 0xcc, 0xff, 0x12, 0x1d, 0xc0, 0xc0, 0x6c, 0x4e, 0x62, 0x4b, 0x3f, 0xcf, 0xe4, 0x1f, 0xe2, 0xc8, - 0x15, 0x88, 0xc6, 0xd0, 0x57, 0xfc, 0x07, 0xad, 0xcc, 0x3b, 0xb7, 0x4e, 0xf0, 0xcb, 0x02, 0x64, - 0xd8, 0x13, 0x26, 0x15, 0xa1, 0x3f, 0x2f, 0xa9, 0x54, 0x0d, 0x5c, 0xb0, 0x92, 0x29, 0xbd, 0xa6, - 0x07, 0xa4, 0x75, 0x6e, 0x2f, 0x81, 0x30, 0xb8, 0x17, 0xac, 0x50, 0x54, 0x34, 0xbb, 0x6a, 0xe2, - 0x9d, 0x8b, 0xf6, 0xc1, 0x95, 0x5c, 0xa8, 0xf3, 0x74, 0xa3, 0xf7, 0x31, 0x9c, 0x8d, 0xb7, 0x65, - 0x2e, 0xb9, 0x50, 0xc4, 0x69, 0xa0, 0xc3, 0x4d, 0xf0, 0x01, 0xf6, 0x3a, 0xd9, 0x34, 0x67, 0x52, - 0x51, 0xd1, 0xc9, 0x79, 0x09, 0xae, 0x99, 0x43, 0x0b, 0xfa, 0xcf, 0xbc, 0x1d, 0x17, 0x3c, 0x82, - 0xc9, 0x5f, 0xc5, 0x64, 0xcd, 0x2b, 0x49, 0x83, 0x09, 0x3c, 0x34, 0xa9, 0xd3, 0x3a, 0x6b, 0x96, - 0x66, 0x12, 0x87, 0x6f, 0xbe, 0xbe, 0xce, 0x99, 0xfa, 0x76, 0x99, 0x86, 0x6b, 0x5e, 0x46, 0xba, - 0x03, 0x17, 0x79, 0x6b, 0x44, 0x57, 0xc7, 0x90, 0xd3, 0x2a, 0xaa, 0xd3, 0xfd, 0x9c, 0x47, 0x37, - 0xef, 0x23, 0x75, 0xf4, 0x65, 0x1c, 0xfc, 0x09, 0x00, 0x00, 0xff, 0xff, 0xb2, 0x1f, 0xe5, 0x14, - 0x66, 0x03, 0x00, 0x00, + 0x4b, 0x65, 0xc7, 0x5b, 0xb3, 0x60, 0x7b, 0xcd, 0xee, 0xf6, 0x90, 0x67, 0xe1, 0x61, 0x78, 0x35, + 0xe4, 0xf5, 0xba, 0xb4, 0xa1, 0x20, 0x4e, 0xde, 0x99, 0xf9, 0x79, 0xe6, 0x3f, 0x33, 0x1a, 0x78, + 0x7c, 0x51, 0x6c, 0x14, 0x65, 0x59, 0x11, 0x25, 0x59, 0xc9, 0xaa, 0xa8, 0x16, 0xfc, 0x2b, 0x5d, + 0xab, 0xb0, 0x16, 0x5c, 0x71, 0x34, 0xea, 0xa2, 0xa1, 0x8e, 0x3e, 0x7c, 0xb4, 0x45, 0xaf, 0x79, + 0x59, 0xf2, 0xaa, 0x85, 0x83, 0xa7, 0xe0, 0x2c, 0x78, 0x99, 0xb0, 0x0a, 0x8d, 0xc0, 0x66, 0x19, + 0xb6, 0x7c, 0x6b, 0x7a, 0x97, 0xd8, 0x2c, 0x43, 0x08, 0x76, 0xaa, 0xa4, 0xa4, 0xd8, 0xd6, 0x1e, + 0xfd, 0x0e, 0x7e, 0xda, 0xe0, 0x7e, 0x6c, 0x8b, 0xfd, 0x0f, 0x8f, 0x9e, 0x81, 0x9b, 0xe9, 0xec, + 0x12, 0xf7, 0xfc, 0xde, 0x74, 0x38, 0xdb, 0x0b, 0x6f, 0x8a, 0x0b, 0xdb, 0xe2, 0xa4, 0xc3, 0x90, + 0x0f, 0xc3, 0x8c, 0xca, 0xb5, 0x60, 0xb5, 0x62, 0xbc, 0xc2, 0x3b, 0x3a, 0xd9, 0x75, 0x17, 0x0a, + 0xc1, 0x29, 0x92, 0x94, 0x16, 0x12, 0xf7, 0x7d, 0xeb, 0xb6, 0x94, 0x27, 0x3a, 0x4a, 0x0c, 0x85, + 0x5e, 0x40, 0x5f, 0xaa, 0x44, 0x51, 0xec, 0xf8, 0xd6, 0x74, 0x34, 0x7b, 0xb2, 0x8d, 0x9b, 0x7e, + 0xba, 0xef, 0xb2, 0x61, 0x49, 0xfb, 0x0b, 0xf2, 0xa0, 0xc7, 0x45, 0x8e, 0x5d, 0xad, 0xa2, 0x79, + 0x06, 0xaf, 0x61, 0xf7, 0x3a, 0x88, 0x00, 0x9c, 0xf9, 0xd1, 0xea, 0xf8, 0x2c, 0xf6, 0xee, 0xa0, + 0x5d, 0x18, 0xcc, 0xc9, 0xd1, 0xdb, 0xe3, 0xb3, 0x78, 0xe1, 0x59, 0x68, 0x0c, 0xde, 0xf2, 0xd3, + 0x72, 0x15, 0xbf, 0x3f, 0x7f, 0x13, 0x7f, 0x88, 0xc9, 0x7c, 0x15, 0x2f, 0x3c, 0x3b, 0x38, 0x85, + 0x81, 0xf9, 0x5f, 0xa2, 0x03, 0x18, 0x98, 0xcd, 0x49, 0x6c, 0xe9, 0xf1, 0x4c, 0xfe, 0x22, 0x8e, + 0x5c, 0x81, 0x68, 0x0c, 0x7d, 0xc5, 0xbf, 0xd1, 0xca, 0xcc, 0xb9, 0x35, 0x82, 0x1f, 0x16, 0x20, + 0xc3, 0x9e, 0x30, 0xa9, 0x08, 0xfd, 0x7e, 0x49, 0xa5, 0x6a, 0xe0, 0x82, 0x95, 0x4c, 0xe9, 0x35, + 0xdd, 0x23, 0xad, 0x71, 0x7b, 0x0a, 0x84, 0xc1, 0xbd, 0x60, 0x85, 0xa2, 0xa2, 0xd9, 0x55, 0xe3, + 0xef, 0x4c, 0xb4, 0x0f, 0xae, 0xe4, 0x42, 0x9d, 0xa7, 0x1b, 0xbd, 0x8f, 0xe1, 0x6c, 0xbc, 0x2d, + 0x73, 0xc9, 0x85, 0x22, 0x4e, 0x03, 0x1d, 0x6e, 0xba, 0xa1, 0xf5, 0x7f, 0x0f, 0xed, 0x1d, 0xec, + 0x75, 0x8d, 0xd0, 0x9c, 0x49, 0x45, 0x45, 0x27, 0xf0, 0x39, 0xb8, 0xa6, 0x33, 0x2d, 0xf1, 0x1f, + 0x13, 0xe8, 0xb8, 0xe0, 0x01, 0x4c, 0xfe, 0x48, 0x26, 0x6b, 0x5e, 0x49, 0x1a, 0x4c, 0xe0, 0xbe, + 0x09, 0x9d, 0xd6, 0x59, 0xb3, 0x46, 0x13, 0x38, 0x7c, 0xf5, 0xf9, 0x65, 0xce, 0xd4, 0x97, 0xcb, + 0x34, 0x5c, 0xf3, 0x32, 0xd2, 0x15, 0xb8, 0xc8, 0xdb, 0x47, 0x74, 0x75, 0x1e, 0x39, 0xad, 0xa2, + 0x3a, 0xdd, 0xcf, 0x79, 0x74, 0xf3, 0x62, 0x52, 0x47, 0xdf, 0xca, 0xc1, 0xaf, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xed, 0xc0, 0x53, 0xec, 0x78, 0x03, 0x00, 0x00, } diff --git a/flyteidl/gen/pb-go/flyteidl/service/admin.pb.go b/flyteidl/gen/pb-go/flyteidl/service/admin.pb.go index 6b0eaa86a8..db03215645 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/admin.pb.go +++ b/flyteidl/gen/pb-go/flyteidl/service/admin.pb.go @@ -29,172 +29,181 @@ const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package func init() { proto.RegisterFile("flyteidl/service/admin.proto", fileDescriptor_5cfa31da1d67295d) } var fileDescriptor_5cfa31da1d67295d = []byte{ - // 2633 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0x5b, 0x6c, 0x1c, 0x57, - 0x19, 0xd6, 0x19, 0xa7, 0x04, 0x4e, 0x73, 0x71, 0xfe, 0x26, 0xd8, 0x99, 0xc4, 0x49, 0x3a, 0xb9, - 0x38, 0x59, 0x27, 0x1e, 0x37, 0x69, 0x5a, 0x6a, 0x51, 0xda, 0x34, 0x76, 0x96, 0xb4, 0x49, 0x1a, - 0x9c, 0x50, 0x60, 0x8b, 0x58, 0x8d, 0x77, 0x4f, 0x9c, 0x69, 0x76, 0x77, 0xb6, 0x33, 0x63, 0xb7, - 0x56, 0xe4, 0x02, 0x35, 0x84, 0xb4, 0x95, 0x13, 0xa4, 0x90, 0xa0, 0x8a, 0xb6, 0x42, 0x48, 0x95, - 0xb8, 0x3d, 0x21, 0x95, 0x27, 0x1e, 0x78, 0x89, 0x54, 0x51, 0x21, 0xb5, 0x2a, 0x97, 0x4a, 0xe4, - 0x09, 0x45, 0x4a, 0x25, 0x10, 0x50, 0x78, 0x00, 0x1e, 0x40, 0x68, 0xce, 0x65, 0xe7, 0x7a, 0xe6, - 0xb2, 0xb6, 0xab, 0x4a, 0xe4, 0xcd, 0xde, 0xff, 0x3b, 0xff, 0xf9, 0xff, 0xef, 0xbf, 0x9c, 0x73, - 0x66, 0xce, 0xe0, 0xcd, 0x67, 0x1a, 0xb3, 0x2e, 0x31, 0xeb, 0x0d, 0xdd, 0x21, 0xf6, 0x8c, 0x59, - 0x23, 0xba, 0x51, 0x6f, 0x9a, 0xad, 0xe1, 0xb6, 0x6d, 0xb9, 0x16, 0xf4, 0x0a, 0xe9, 0x30, 0x97, - 0xaa, 0x9b, 0xa7, 0x2c, 0x6b, 0xaa, 0x41, 0x74, 0xa3, 0x6d, 0xea, 0x46, 0xab, 0x65, 0xb9, 0x86, - 0x6b, 0x5a, 0x2d, 0x87, 0xe1, 0x55, 0x5f, 0x1b, 0xd5, 0xa2, 0xb7, 0x6d, 0xeb, 0x29, 0x52, 0x73, - 0xb9, 0x74, 0x38, 0x59, 0x5a, 0xad, 0x5b, 0x4d, 0xc3, 0x6c, 0x55, 0x0d, 0xd7, 0xb5, 0xcd, 0xc9, - 0x69, 0x97, 0x08, 0x6d, 0x83, 0x12, 0x7c, 0x0c, 0xb8, 0x31, 0x02, 0x74, 0x0d, 0xe7, 0x1c, 0x17, - 0x0d, 0x44, 0x44, 0xcf, 0x58, 0xf6, 0xb9, 0x33, 0x0d, 0xeb, 0x19, 0x2e, 0xde, 0x2d, 0x11, 0xc7, - 0xe7, 0xd8, 0x16, 0x41, 0x36, 0x8c, 0xe9, 0x56, 0xed, 0x6c, 0xb5, 0xdd, 0x30, 0x38, 0x59, 0xaa, - 0x1a, 0x41, 0x90, 0x19, 0xd2, 0x12, 0xae, 0x6f, 0x89, 0xca, 0x9e, 0x25, 0xb5, 0x69, 0x8f, 0x39, - 0x89, 0xab, 0x4d, 0xc3, 0xad, 0x9d, 0x35, 0x26, 0x1b, 0xa4, 0x6a, 0x13, 0xc7, 0x9a, 0xb6, 0x6b, - 0x84, 0x03, 0xb7, 0x47, 0x80, 0x2d, 0xab, 0x4e, 0xaa, 0x51, 0x6d, 0xdb, 0x13, 0xf8, 0x88, 0x81, - 0xa2, 0xb1, 0x9a, 0x21, 0xb6, 0xe3, 0x4b, 0x37, 0x45, 0xa4, 0x35, 0xab, 0xd9, 0x94, 0x5a, 0x5b, - 0x27, 0x4e, 0xcd, 0x36, 0xdb, 0x9e, 0xf2, 0x2a, 0x69, 0xb9, 0xa6, 0x3b, 0xcb, 0x80, 0xfb, 0xdf, - 0x78, 0x1a, 0xaf, 0x3a, 0xe4, 0x41, 0x4e, 0xb1, 0xf4, 0x81, 0x26, 0xc6, 0x87, 0x6d, 0x62, 0xb8, - 0xe4, 0xb4, 0xe1, 0x9c, 0x83, 0xbb, 0x3b, 0x19, 0x31, 0xcc, 0xb2, 0xce, 0xfb, 0x95, 0xc9, 0x27, - 0xc8, 0xd3, 0xd3, 0xc4, 0x71, 0x55, 0x2d, 0x0d, 0xe2, 0xb4, 0xad, 0x96, 0x43, 0xb4, 0xfe, 0xe7, - 0xdf, 0xbd, 0x79, 0x45, 0x01, 0x6d, 0x35, 0xcd, 0xca, 0x99, 0x7b, 0xa8, 0xbf, 0xce, 0x28, 0x2a, - 0xc1, 0x7b, 0x08, 0xaf, 0x2c, 0x13, 0x97, 0x4e, 0xb6, 0x2d, 0xaa, 0xe9, 0xf1, 0x49, 0x2f, 0x9b, - 0xca, 0xc4, 0x15, 0x73, 0xad, 0x4f, 0x9a, 0x4b, 0xfb, 0x0e, 0xa2, 0xea, 0x17, 0x10, 0x3c, 0x18, - 0xd2, 0xaf, 0x9f, 0x37, 0xeb, 0xc3, 0x3c, 0x25, 0xe7, 0xe8, 0x3f, 0x2c, 0x8f, 0xd9, 0xdf, 0x2d, - 0xa3, 0x49, 0xd8, 0x5f, 0x9c, 0xd7, 0xb9, 0xca, 0x31, 0x78, 0x34, 0xac, 0xc0, 0xb2, 0xa7, 0x28, - 0xc2, 0xb2, 0xa7, 0xe6, 0x8a, 0x6a, 0x83, 0xeb, 0x08, 0xdf, 0x79, 0xcc, 0x74, 0xa8, 0x6f, 0x47, - 0xeb, 0x0e, 0x8c, 0x44, 0x8d, 0x3f, 0x61, 0x34, 0x49, 0x7d, 0x9c, 0x46, 0xe3, 0x68, 0xdd, 0x8b, - 0xca, 0x19, 0x93, 0xd8, 0xde, 0x08, 0xe1, 0xee, 0x9e, 0xdc, 0x23, 0xb4, 0x2f, 0x51, 0x0a, 0x4e, - 0xc1, 0xf6, 0xa0, 0x03, 0x55, 0xb3, 0xee, 0xe8, 0xe7, 0x7d, 0x9b, 0xb9, 0xc1, 0x95, 0xbd, 0x50, - 0x4a, 0xf0, 0x93, 0x39, 0x19, 0x43, 0xc3, 0x0f, 0x15, 0xfc, 0x09, 0xe1, 0x87, 0x03, 0xdb, 0xa3, - 0x36, 0x4d, 0xf0, 0xf4, 0x0f, 0x1a, 0xde, 0x9f, 0x14, 0x27, 0x6a, 0xe7, 0x1f, 0x58, 0xac, 0x7e, - 0x83, 0x60, 0xa4, 0x68, 0xac, 0x2a, 0x0f, 0x45, 0xe3, 0x5b, 0x30, 0x3c, 0x95, 0xdd, 0xb0, 0x2b, - 0xdf, 0xa4, 0x95, 0x83, 0x70, 0xa0, 0x8b, 0xa9, 0x60, 0x0e, 0xaf, 0x61, 0x99, 0xff, 0x05, 0xde, - 0xa5, 0x60, 0x67, 0x94, 0x09, 0x21, 0x09, 0x17, 0xd1, 0xae, 0x2c, 0x18, 0x2f, 0xa4, 0xcd, 0x94, - 0xbd, 0x4f, 0x6a, 0xeb, 0x84, 0x75, 0xa2, 0x1d, 0xd2, 0x62, 0x7a, 0x1f, 0xe1, 0x3b, 0xcb, 0xc4, - 0xed, 0x4c, 0x9e, 0x5d, 0x50, 0xfd, 0xb2, 0x79, 0xb5, 0x57, 0x58, 0xa0, 0xae, 0x22, 0x38, 0x14, - 0x9b, 0xab, 0x70, 0x61, 0x9d, 0x84, 0x13, 0x71, 0x25, 0x8b, 0x2a, 0xae, 0x77, 0x10, 0x5e, 0xeb, - 0x25, 0x94, 0xb0, 0x77, 0xd9, 0x0b, 0xcc, 0xa0, 0x74, 0x3c, 0x09, 0x83, 0x51, 0x47, 0x64, 0x45, - 0x36, 0x02, 0xc3, 0x12, 0x9f, 0x65, 0x85, 0xf6, 0x4b, 0x05, 0xaf, 0x0e, 0xfa, 0x94, 0xb3, 0xd8, - 0x36, 0xcb, 0x62, 0x48, 0xed, 0xfe, 0x13, 0x8b, 0xe3, 0x4d, 0x04, 0xf7, 0x76, 0x13, 0xc7, 0xca, - 0xe1, 0xa4, 0xf8, 0x17, 0x2d, 0xbc, 0x40, 0xc3, 0xc9, 0x9e, 0xbc, 0xf2, 0x00, 0xdc, 0xdf, 0xe5, - 0x94, 0x70, 0x01, 0xe1, 0x5e, 0x56, 0x32, 0xc7, 0xe8, 0xea, 0x7f, 0xb2, 0x61, 0xb4, 0x60, 0x30, - 0x4a, 0x90, 0x2f, 0x0b, 0x57, 0xe1, 0xee, 0x6c, 0x20, 0xaf, 0xc3, 0xad, 0x94, 0xd4, 0x8d, 0xda, - 0x7a, 0x61, 0x68, 0x60, 0xb3, 0x41, 0x4b, 0xf1, 0xef, 0x08, 0xaf, 0x2e, 0x13, 0x37, 0x60, 0x45, - 0x76, 0x31, 0xaa, 0xf2, 0xe9, 0xb5, 0x1f, 0xb0, 0x30, 0x7e, 0x0f, 0xc1, 0x58, 0xd2, 0x94, 0x85, - 0x2b, 0xf2, 0x14, 0x7c, 0x2e, 0x51, 0xcf, 0xa2, 0x8a, 0xf2, 0x1f, 0x08, 0xdf, 0x55, 0x26, 0xee, - 0xa1, 0x9a, 0x6b, 0xce, 0xa4, 0x06, 0x20, 0x8a, 0xc8, 0xc3, 0xc0, 0x35, 0xc6, 0xc0, 0x65, 0x04, - 0x9f, 0x11, 0x96, 0x1b, 0x54, 0x4d, 0xb5, 0x20, 0x11, 0x95, 0xe3, 0xf0, 0x58, 0x9a, 0x86, 0x82, - 0x14, 0xc0, 0x2b, 0x08, 0x6f, 0xf0, 0x4a, 0x2d, 0xea, 0x94, 0x03, 0x43, 0x59, 0x7e, 0x07, 0xcb, - 0x78, 0x8b, 0xdc, 0x77, 0x5a, 0xc8, 0xf7, 0x51, 0xf7, 0x03, 0x5d, 0x25, 0xd1, 0xfb, 0x78, 0x57, - 0xb9, 0x81, 0xf0, 0x3a, 0x4f, 0x81, 0xaf, 0x6e, 0xd9, 0x7b, 0xe5, 0x53, 0xd4, 0xd4, 0xba, 0x5f, - 0xf4, 0x01, 0x1b, 0x65, 0xed, 0xf2, 0x3e, 0xbf, 0x3f, 0x45, 0xd1, 0xa9, 0x4d, 0xf3, 0x6d, 0x85, - 0x2d, 0x04, 0x41, 0xde, 0x73, 0xb5, 0xcd, 0x2c, 0xbe, 0xff, 0xc9, 0xf2, 0xed, 0x6f, 0xc8, 0xef, - 0x46, 0x45, 0x13, 0xed, 0x88, 0xa4, 0x58, 0x8b, 0xb6, 0x4f, 0x1d, 0xf6, 0x15, 0x32, 0xa1, 0xf2, - 0x69, 0x18, 0xed, 0x7e, 0x62, 0x58, 0x50, 0x70, 0xef, 0xe7, 0xdb, 0xf5, 0xdc, 0x4d, 0x94, 0x61, - 0x73, 0x34, 0x51, 0x01, 0xe4, 0x4d, 0xf4, 0x75, 0xc6, 0xf0, 0x6b, 0x48, 0x5d, 0x92, 0x9e, 0x36, - 0x8a, 0x4a, 0x95, 0x53, 0xea, 0x32, 0xb4, 0xb5, 0xaf, 0x23, 0xbc, 0x96, 0xf5, 0xff, 0x71, 0x71, - 0x42, 0x83, 0xd8, 0x86, 0xad, 0x23, 0x0a, 0x2f, 0x29, 0x83, 0x99, 0x38, 0x4e, 0xc6, 0x00, 0xe5, - 0xa2, 0x4f, 0x03, 0x61, 0x7f, 0xe7, 0x34, 0x48, 0xd7, 0x93, 0x4b, 0x08, 0xaf, 0x9b, 0x20, 0xcc, - 0x27, 0xdf, 0x8a, 0xdd, 0x52, 0xed, 0x02, 0x5b, 0xd8, 0x8e, 0x5d, 0xd4, 0x8e, 0x6d, 0xda, 0xa6, - 0xb8, 0x1d, 0xba, 0xcd, 0x95, 0x7a, 0x06, 0xbd, 0x84, 0x70, 0xef, 0x04, 0xa9, 0x59, 0x33, 0xc4, - 0xf6, 0xed, 0x19, 0x4c, 0xb1, 0x87, 0x42, 0x0b, 0x9b, 0xb3, 0x93, 0x9a, 0xb3, 0x55, 0x53, 0x13, - 0xcd, 0xa1, 0x3a, 0x3d, 0x6b, 0x6e, 0x20, 0xbc, 0xaa, 0x4c, 0x5c, 0xdf, 0x92, 0x21, 0xd9, 0xa6, - 0xa8, 0x03, 0x09, 0x2c, 0xbc, 0x1b, 0xa5, 0xd6, 0x68, 0xf3, 0x2c, 0x47, 0xe7, 0xe0, 0x60, 0x82, - 0x01, 0x39, 0x4a, 0x77, 0x0c, 0x1e, 0x49, 0x18, 0x58, 0x74, 0x89, 0xf9, 0x2b, 0xc2, 0x6b, 0x59, - 0xf1, 0xe4, 0xc9, 0xc0, 0x70, 0x3d, 0x0e, 0x66, 0xe2, 0x38, 0xd5, 0x2f, 0x32, 0x57, 0xe7, 0x91, - 0xda, 0x9d, 0xaf, 0x5e, 0xfd, 0x95, 0xd5, 0x25, 0x70, 0xd7, 0x0b, 0xe8, 0x05, 0x05, 0xf7, 0x06, - 0x03, 0x3a, 0x66, 0xb8, 0x06, 0xe8, 0x79, 0x82, 0xea, 0x21, 0x85, 0xef, 0x23, 0xf9, 0x07, 0x70, - 0x12, 0x2e, 0x31, 0x12, 0xbe, 0x85, 0xfc, 0x0e, 0x5a, 0x37, 0x5c, 0xa3, 0x60, 0xd4, 0x8f, 0x42, - 0x59, 0x36, 0xba, 0x68, 0xe8, 0xaf, 0x23, 0xbc, 0xc6, 0x5b, 0x8f, 0x3a, 0x16, 0xe7, 0x5c, 0xde, - 0x06, 0xa4, 0x61, 0xa7, 0xab, 0x9b, 0x45, 0xdd, 0x34, 0x61, 0xa8, 0x40, 0xa8, 0x2b, 0xa3, 0xf0, - 0xa9, 0x6e, 0xa3, 0x0b, 0xff, 0x41, 0x18, 0x4e, 0x13, 0xbb, 0x69, 0xb6, 0x42, 0x59, 0xbc, 0x47, - 0x6a, 0x66, 0x07, 0x2c, 0x3c, 0x2a, 0xe5, 0x81, 0xf2, 0x30, 0x5e, 0x66, 0x61, 0xbc, 0x88, 0x4a, - 0xdd, 0xe7, 0xf2, 0xb1, 0xd2, 0x52, 0x05, 0xd1, 0x4b, 0xe8, 0x3f, 0xb2, 0x84, 0x3e, 0x61, 0xd5, - 0x49, 0x4a, 0xbf, 0x0c, 0x89, 0x03, 0x1d, 0x6a, 0x20, 0x15, 0xa8, 0x7d, 0x53, 0xa1, 0xee, 0xfe, - 0x17, 0x41, 0x4b, 0x98, 0x1c, 0x7e, 0xec, 0xc8, 0x7c, 0xee, 0xfc, 0x5b, 0x8d, 0x9a, 0x1c, 0x92, - 0x04, 0xed, 0x0f, 0x09, 0xfc, 0xb5, 0x91, 0x6a, 0x37, 0xeb, 0x73, 0x95, 0x97, 0x10, 0x5c, 0x44, - 0xb2, 0x39, 0x05, 0x4d, 0x21, 0x25, 0x1d, 0xce, 0x96, 0xde, 0x1a, 0xf8, 0xb7, 0x82, 0xc1, 0x4b, - 0xef, 0x10, 0x3b, 0x4e, 0x7c, 0x99, 0x0c, 0xc9, 0x83, 0x55, 0x73, 0x77, 0x26, 0x52, 0xbb, 0xca, - 0xb8, 0xbe, 0xa4, 0x80, 0x23, 0xe5, 0xba, 0xf3, 0x6c, 0x40, 0xe2, 0x63, 0xb2, 0xbc, 0xe3, 0x69, - 0xb2, 0x98, 0xb5, 0x96, 0x6b, 0x08, 0xae, 0xa4, 0x13, 0x9e, 0x3c, 0x9a, 0xd1, 0xbe, 0x7c, 0x86, - 0xc1, 0xe5, 0x8f, 0xe3, 0x8d, 0x71, 0xee, 0x8f, 0x58, 0x36, 0x7d, 0xb6, 0xab, 0xa7, 0x12, 0xcb, - 0x51, 0x05, 0x23, 0xf1, 0xea, 0x4a, 0x1a, 0x89, 0x6b, 0x2b, 0xe1, 0x47, 0x3d, 0x82, 0x91, 0xda, - 0x59, 0xb3, 0x51, 0xb7, 0x49, 0xf4, 0x89, 0xba, 0xa3, 0x9f, 0x0f, 0xff, 0x50, 0x15, 0x69, 0x13, - 0xfa, 0x45, 0xc2, 0x4a, 0xe1, 0xa1, 0x1d, 0xc2, 0x0a, 0x8f, 0xe4, 0x49, 0x9d, 0x67, 0x9c, 0xc8, - 0xfa, 0x24, 0x34, 0x7f, 0xfa, 0x9b, 0xea, 0x83, 0xc0, 0xa4, 0x18, 0x2b, 0x20, 0x52, 0xab, 0x04, - 0x40, 0xec, 0x95, 0x93, 0x30, 0x36, 0x71, 0xed, 0xd9, 0xaa, 0xe1, 0xba, 0xa4, 0xd9, 0x76, 0xe7, - 0x2a, 0xb7, 0x7a, 0xe0, 0x66, 0x76, 0xb8, 0x68, 0x26, 0x17, 0x66, 0x8f, 0x25, 0xf9, 0xed, 0x48, - 0x7f, 0x24, 0x22, 0x0d, 0xf3, 0x3d, 0x78, 0x7d, 0x74, 0xc9, 0xa3, 0xfb, 0xb8, 0xa1, 0xac, 0x65, - 0x2f, 0xb8, 0x87, 0xdb, 0x9b, 0x0f, 0x2c, 0x16, 0x7e, 0xd6, 0x9d, 0x2f, 0x06, 0xba, 0x33, 0x5d, - 0xbc, 0x3f, 0xa4, 0xe5, 0xf0, 0xdb, 0x08, 0x16, 0x50, 0xea, 0xc4, 0x1f, 0xfa, 0x9a, 0xf8, 0x55, - 0xbc, 0x76, 0x82, 0x4c, 0x99, 0x8e, 0x4b, 0xec, 0x93, 0x4c, 0x61, 0xfc, 0xe8, 0xc0, 0x05, 0x02, - 0x27, 0x3d, 0x3a, 0xc4, 0x70, 0x9c, 0xf5, 0x4d, 0x94, 0xf4, 0x0d, 0x5a, 0xaf, 0x70, 0x9d, 0x9b, - 0x4e, 0x8f, 0xae, 0xdf, 0x45, 0x78, 0x35, 0x3b, 0x6a, 0x88, 0xf9, 0xfb, 0x24, 0x7a, 0xd5, 0x9d, - 0x12, 0x41, 0xe4, 0xa4, 0x72, 0x84, 0x4e, 0xf7, 0xb0, 0xba, 0x21, 0x3a, 0x9d, 0xe7, 0x39, 0xdd, - 0xbb, 0xed, 0x50, 0xb7, 0xc6, 0x64, 0x81, 0xc7, 0x48, 0x0c, 0x05, 0x67, 0xf0, 0x2a, 0x6f, 0x21, - 0xe1, 0x93, 0x38, 0xa0, 0x49, 0xa6, 0x4f, 0x7d, 0xb5, 0x25, 0x46, 0x8b, 0x97, 0x9c, 0x10, 0x23, - 0x01, 0x5e, 0x46, 0xf8, 0xae, 0xf0, 0x7b, 0xa1, 0xf1, 0x19, 0xd2, 0x72, 0x61, 0x5f, 0xe6, 0xf1, - 0x84, 0xe2, 0xc4, 0xd4, 0xc3, 0x79, 0xe1, 0x9c, 0xa6, 0xed, 0xd4, 0xa0, 0x01, 0xad, 0xbf, 0xb3, - 0x05, 0xf6, 0xc4, 0x4e, 0xf8, 0x9d, 0xd1, 0x0b, 0x9d, 0x87, 0x1b, 0xb4, 0xae, 0xa8, 0x5d, 0x7b, - 0x52, 0x4b, 0x2e, 0x64, 0x53, 0x29, 0x0f, 0x54, 0xf6, 0xd0, 0x9c, 0xdb, 0xe3, 0xa5, 0x6a, 0xc4, - 0x16, 0x6f, 0x37, 0x20, 0xb1, 0x85, 0x8a, 0xf2, 0xd9, 0x92, 0x04, 0xcd, 0xb0, 0xa5, 0xf3, 0x62, - 0xfa, 0xad, 0x3b, 0xe8, 0x7e, 0x3d, 0xa4, 0x22, 0xbe, 0x5f, 0x0f, 0x89, 0xd3, 0xf6, 0xeb, 0x21, - 0xa0, 0xf6, 0x97, 0x15, 0x74, 0xfa, 0x5b, 0x2b, 0xe0, 0x65, 0x25, 0xf4, 0xc2, 0x36, 0xd2, 0xa1, - 0x72, 0xaf, 0x5b, 0x05, 0x16, 0xaa, 0xdc, 0x2b, 0x53, 0xc6, 0x52, 0x94, 0xb8, 0xf6, 0x24, 0x2d, - 0x36, 0xf1, 0xd5, 0x25, 0x71, 0x39, 0x89, 0xef, 0x14, 0xde, 0x54, 0xe0, 0xba, 0x94, 0x1e, 0xd1, - 0x47, 0x73, 0xed, 0x08, 0xfe, 0xdf, 0xa9, 0x84, 0x0f, 0x7a, 0xd8, 0xc1, 0x28, 0x94, 0x86, 0x09, - 0x07, 0xa3, 0x90, 0x3c, 0x75, 0x3b, 0x1e, 0x43, 0x6a, 0x0b, 0x3d, 0x34, 0xa9, 0x2f, 0xf4, 0xc0, - 0x8f, 0x91, 0x34, 0xa9, 0x73, 0x87, 0x21, 0x6f, 0x0c, 0xf2, 0x05, 0x40, 0xce, 0x7e, 0xe5, 0x77, - 0x08, 0xde, 0x45, 0xa9, 0x59, 0x96, 0x2b, 0xc5, 0x3e, 0x72, 0x8e, 0xc1, 0x9f, 0xef, 0xa0, 0xdb, - 0xaf, 0x50, 0xa0, 0x92, 0xb7, 0x5f, 0xd1, 0x2e, 0x96, 0xba, 0xfd, 0x4a, 0x06, 0xf3, 0xb6, 0xfa, - 0x2f, 0xd6, 0xd8, 0x3e, 0x58, 0x01, 0xaf, 0x29, 0xa1, 0x6d, 0xd0, 0xed, 0xee, 0x16, 0xed, 0x6e, - 0xbf, 0x56, 0xe0, 0x57, 0xe9, 0x1c, 0xdd, 0x6e, 0x71, 0x45, 0x5a, 0xdc, 0x5b, 0x0a, 0x1e, 0x08, - 0x6d, 0x33, 0xc7, 0xa8, 0xca, 0x43, 0x9d, 0x6b, 0x82, 0x70, 0xaf, 0x64, 0xeb, 0x16, 0x05, 0x86, - 0x9f, 0x9f, 0x1f, 0x2c, 0x38, 0x8a, 0x57, 0xc2, 0x2f, 0xd8, 0x13, 0xc8, 0x37, 0x90, 0xfa, 0x68, - 0x64, 0x3f, 0x18, 0xbf, 0x4d, 0xa9, 0x9f, 0x0f, 0x5f, 0x66, 0xe4, 0xf4, 0x04, 0x7e, 0xe4, 0xf4, - 0x78, 0x5b, 0xdb, 0xba, 0x5a, 0xcd, 0x56, 0x48, 0x53, 0x27, 0x30, 0x9e, 0xe5, 0x48, 0xfe, 0x59, - 0x60, 0x5e, 0xc1, 0x6a, 0x99, 0xb8, 0x32, 0x2a, 0xef, 0xc9, 0x49, 0x4a, 0x60, 0x4b, 0xb4, 0xbf, - 0xc8, 0x10, 0x4e, 0xe2, 0x73, 0x94, 0xc3, 0x67, 0xfd, 0x57, 0xc3, 0x29, 0x14, 0xc6, 0x5f, 0x29, - 0x3f, 0xec, 0xdf, 0x14, 0xc8, 0x60, 0x4a, 0xf6, 0x72, 0xf9, 0x8a, 0x82, 0x07, 0xc6, 0x48, 0x83, - 0x2c, 0x3e, 0xa7, 0x98, 0x96, 0xa2, 0x39, 0x25, 0x46, 0x71, 0x3a, 0xbe, 0xc1, 0x72, 0xea, 0xb9, - 0x52, 0x57, 0x7c, 0x78, 0xc9, 0x73, 0xb8, 0xb4, 0x48, 0x4a, 0xbc, 0xdc, 0x78, 0x51, 0xc1, 0x7d, - 0xa1, 0x4a, 0x0b, 0xf0, 0x31, 0x2c, 0xf1, 0x4c, 0x56, 0x5d, 0x7a, 0x6e, 0x3c, 0xe7, 0x60, 0x81, - 0x71, 0x70, 0x01, 0xa9, 0x7a, 0xd4, 0x93, 0x8c, 0x82, 0xf2, 0xfc, 0x3f, 0xa9, 0x3e, 0xb6, 0x84, - 0xc5, 0xc3, 0x2f, 0xb0, 0xae, 0xf7, 0x0b, 0x25, 0xc0, 0xc4, 0x50, 0xa6, 0x67, 0x81, 0xe2, 0xd8, - 0x9b, 0x0f, 0xcc, 0x39, 0x20, 0x94, 0x82, 0x2a, 0xec, 0x48, 0x63, 0x40, 0x18, 0x59, 0xb9, 0xdf, - 0x7f, 0x77, 0x59, 0x28, 0xe6, 0x70, 0x0b, 0xe1, 0xbe, 0x50, 0xf6, 0x17, 0x8a, 0x73, 0x38, 0xe3, - 0xf5, 0xdc, 0x78, 0xee, 0xe3, 0x39, 0xea, 0x23, 0x29, 0xe5, 0xf2, 0xd1, 0x0b, 0xed, 0x68, 0xa9, - 0x3b, 0x37, 0xe9, 0xeb, 0x63, 0x05, 0xf7, 0xb3, 0x3c, 0x13, 0x47, 0xea, 0x80, 0xab, 0xd2, 0xb7, - 0x8e, 0xb2, 0x9c, 0x1e, 0xc9, 0x3f, 0x80, 0x3b, 0x7b, 0x83, 0x25, 0xf5, 0x6f, 0x91, 0x5a, 0x89, - 0x5d, 0x2f, 0xec, 0x62, 0x99, 0x08, 0xfd, 0x26, 0x14, 0x51, 0x92, 0x5c, 0xd5, 0x4a, 0x9b, 0x60, - 0x51, 0xcb, 0x86, 0x74, 0x56, 0xf8, 0x9a, 0x82, 0x37, 0x04, 0xee, 0xa5, 0x06, 0xb8, 0xdd, 0x9b, - 0x4d, 0x55, 0xa0, 0x4a, 0xf6, 0xe5, 0x44, 0x73, 0x56, 0x5f, 0x60, 0xac, 0x3e, 0x8f, 0xe0, 0x81, - 0x54, 0x56, 0x63, 0x4d, 0xce, 0x7f, 0xd1, 0x31, 0x57, 0x19, 0x87, 0xc3, 0x99, 0x8c, 0x49, 0x7a, - 0x65, 0x40, 0x0d, 0x5c, 0x56, 0x70, 0x3f, 0xcb, 0xf0, 0xee, 0x32, 0x2c, 0x5c, 0x4d, 0x23, 0xf9, - 0x07, 0xc4, 0x5e, 0x88, 0x76, 0xcf, 0x85, 0x97, 0x40, 0x9f, 0x2d, 0x2d, 0x05, 0x1d, 0x5e, 0x52, - 0x7c, 0x1f, 0xe1, 0x3e, 0xef, 0xdc, 0x78, 0x5c, 0x7c, 0x48, 0x91, 0xd6, 0x5d, 0x24, 0x40, 0x69, - 0x77, 0x91, 0xe2, 0x39, 0x1d, 0x3b, 0x28, 0x1b, 0x5b, 0x60, 0xb3, 0x70, 0xc6, 0xff, 0x9c, 0xc3, - 0xf7, 0x06, 0xde, 0xe7, 0x57, 0xe7, 0xfc, 0x9b, 0x6e, 0x26, 0x71, 0xe2, 0x4f, 0x4f, 0x03, 0x17, - 0xe1, 0x82, 0x47, 0xe6, 0xad, 0x19, 0xb8, 0xa4, 0xfc, 0xf4, 0xb6, 0xbc, 0x75, 0xf6, 0x85, 0x86, - 0xe9, 0x85, 0x43, 0x7c, 0x5b, 0x52, 0x75, 0x67, 0xdb, 0x24, 0x89, 0xd4, 0x60, 0x7e, 0x66, 0x0c, - 0x4e, 0xdd, 0xe9, 0xcc, 0x2b, 0x78, 0x4d, 0x99, 0x04, 0x3c, 0x9d, 0x8d, 0x5f, 0x5d, 0x0f, 0x08, - 0x03, 0x45, 0xb9, 0x29, 0x05, 0xa6, 0xfd, 0x94, 0xb9, 0xf8, 0x3a, 0x82, 0xa3, 0x79, 0x5d, 0xcc, - 0xbe, 0x5d, 0xf1, 0x45, 0x78, 0xa2, 0x88, 0xcb, 0x05, 0x2e, 0x5b, 0xbc, 0xaa, 0xe0, 0x75, 0xac, - 0x35, 0x07, 0x89, 0xd8, 0x9d, 0xe2, 0x61, 0xb8, 0xf3, 0xef, 0xc9, 0x81, 0xe4, 0x19, 0xf8, 0x33, - 0xc6, 0xcc, 0x4f, 0x90, 0xba, 0x74, 0xcc, 0x78, 0x05, 0xfa, 0xa4, 0xba, 0x4c, 0xe4, 0x78, 0x35, - 0xdb, 0xc0, 0xb8, 0x4c, 0xdc, 0x27, 0xd8, 0x29, 0x2c, 0xfe, 0x71, 0x90, 0x2f, 0x93, 0x7e, 0x1c, - 0x14, 0x84, 0x70, 0x26, 0xfa, 0x28, 0x11, 0xeb, 0x60, 0xad, 0xb0, 0x9b, 0x9f, 0xf2, 0xe0, 0xe7, - 0x0a, 0xdd, 0x5a, 0x8d, 0xf9, 0xdf, 0x2e, 0xf1, 0x80, 0x64, 0x5f, 0xa5, 0x8e, 0x99, 0x16, 0x53, - 0xa2, 0xbd, 0xc7, 0x02, 0xf0, 0x0e, 0x82, 0xce, 0x79, 0x2a, 0xf6, 0x95, 0x14, 0xa5, 0x8d, 0x1e, - 0x35, 0x0b, 0x46, 0x22, 0x7c, 0xd9, 0xba, 0x05, 0x8d, 0xd4, 0x29, 0x62, 0x91, 0x58, 0xdc, 0x7c, - 0xf0, 0x66, 0x0f, 0x6b, 0xad, 0x51, 0xa7, 0xcd, 0xa4, 0x15, 0x37, 0xc6, 0x4c, 0xb0, 0x87, 0xed, - 0xcc, 0x85, 0xd6, 0x7e, 0xcf, 0xde, 0xba, 0xbd, 0xad, 0xc0, 0xe3, 0xe9, 0x5c, 0x16, 0x2f, 0xf6, - 0xaf, 0xc0, 0x97, 0x0b, 0xa9, 0x2c, 0x7a, 0xb7, 0xb6, 0x0c, 0xe3, 0x4b, 0x62, 0x72, 0xe5, 0x34, - 0x4c, 0x2c, 0xbd, 0xa1, 0x70, 0x55, 0xa1, 0x57, 0xea, 0x3b, 0x0f, 0xdc, 0x8e, 0x13, 0xd7, 0x36, - 0x6b, 0x0e, 0xec, 0xcf, 0x73, 0xb3, 0x8d, 0x83, 0x45, 0x30, 0x0f, 0x14, 0x1a, 0xc3, 0xab, 0x33, - 0xe1, 0xe3, 0xba, 0x26, 0x83, 0x14, 0xbc, 0x13, 0x17, 0xf8, 0xb8, 0x2e, 0x41, 0x41, 0xc1, 0xb0, - 0x3d, 0xf2, 0x50, 0xe5, 0xc1, 0x29, 0xd3, 0x3d, 0x3b, 0x3d, 0x39, 0x5c, 0xb3, 0x9a, 0x3a, 0xf5, - 0xcb, 0x53, 0x41, 0xff, 0xd0, 0x3b, 0x1f, 0x3f, 0x4e, 0x91, 0x96, 0xde, 0x9e, 0xdc, 0x37, 0x65, - 0xe9, 0xd1, 0x8f, 0x68, 0x27, 0x3f, 0x46, 0xbf, 0x7f, 0x3c, 0xf0, 0xbf, 0x00, 0x00, 0x00, 0xff, - 0xff, 0xfe, 0xfe, 0x7b, 0xca, 0x5f, 0x3b, 0x00, 0x00, + // 2771 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0x6b, 0x8c, 0x15, 0x57, + 0x1d, 0xcf, 0x99, 0xa5, 0xa2, 0xa7, 0x3c, 0x96, 0x7f, 0x21, 0xc0, 0xf0, 0x2a, 0x43, 0x61, 0x97, + 0x0b, 0xec, 0xdd, 0xf2, 0x68, 0x65, 0xb5, 0x2d, 0x5b, 0x16, 0x6e, 0xa1, 0xbc, 0x5c, 0x68, 0xb5, + 0xb7, 0xc6, 0x9b, 0xd9, 0x7b, 0x0f, 0xcb, 0xc0, 0xdd, 0x3b, 0xd7, 0x99, 0xd9, 0x6d, 0x09, 0xd9, + 0xc6, 0x94, 0x8a, 0x58, 0x03, 0x98, 0x20, 0x34, 0x46, 0xdb, 0x0f, 0x8d, 0x4d, 0xea, 0x23, 0x7e, + 0x30, 0xd1, 0xc4, 0x44, 0x13, 0x3f, 0x48, 0xd2, 0xb4, 0x31, 0x69, 0x53, 0xab, 0x8d, 0xf6, 0x93, + 0x21, 0xa1, 0x89, 0x46, 0xad, 0x7e, 0xb0, 0x7e, 0x31, 0x66, 0xce, 0x63, 0xe6, 0xcc, 0xe3, 0xcc, + 0x63, 0x59, 0x9a, 0x26, 0xe5, 0xdb, 0xee, 0x3d, 0xff, 0x73, 0xce, 0xef, 0xf7, 0xfb, 0x3f, 0xce, + 0x39, 0x33, 0x67, 0xf0, 0xca, 0xe3, 0xed, 0xd3, 0x1e, 0xb1, 0x5a, 0xed, 0xaa, 0x4b, 0x9c, 0x29, + 0xab, 0x49, 0xaa, 0x66, 0x6b, 0xc2, 0xea, 0x0c, 0x74, 0x1d, 0xdb, 0xb3, 0xa1, 0x57, 0xb4, 0x0e, + 0xf0, 0x56, 0x7d, 0xe5, 0xb8, 0x6d, 0x8f, 0xb7, 0x49, 0xd5, 0xec, 0x5a, 0x55, 0xb3, 0xd3, 0xb1, + 0x3d, 0xd3, 0xb3, 0xec, 0x8e, 0xcb, 0xec, 0xf5, 0x70, 0x34, 0x3a, 0x4a, 0xb5, 0xeb, 0xd8, 0x27, + 0x49, 0xd3, 0xe3, 0xad, 0x03, 0xe9, 0xad, 0x8d, 0x96, 0x3d, 0x61, 0x5a, 0x9d, 0x86, 0xe9, 0x79, + 0x8e, 0x35, 0x36, 0xe9, 0x11, 0x31, 0x5a, 0x9f, 0xc2, 0x3e, 0x61, 0xb8, 0x3c, 0x66, 0xe8, 0x99, + 0xee, 0x29, 0xde, 0xb4, 0x2a, 0xd6, 0xf4, 0x94, 0xed, 0x9c, 0x3a, 0xde, 0xb6, 0x9f, 0xe2, 0xcd, + 0xfd, 0x8a, 0xe6, 0xe4, 0x1c, 0x77, 0xc7, 0x2c, 0xdb, 0xe6, 0x64, 0xa7, 0x79, 0xa2, 0xd1, 0x6d, + 0x9b, 0x5c, 0x2c, 0x5d, 0x8f, 0x59, 0x90, 0x29, 0xd2, 0x11, 0xd4, 0x57, 0xc7, 0xdb, 0x9e, 0x26, + 0xcd, 0x49, 0x5f, 0x39, 0x05, 0xd5, 0x09, 0xd3, 0x6b, 0x9e, 0x30, 0xc7, 0xda, 0xa4, 0xe1, 0x10, + 0xd7, 0x9e, 0x74, 0x9a, 0x84, 0x1b, 0xae, 0x8b, 0x19, 0x76, 0xec, 0x16, 0x69, 0xc4, 0x47, 0x5b, + 0x97, 0xa2, 0x47, 0xc2, 0x28, 0xee, 0xab, 0x29, 0xe2, 0xb8, 0x61, 0xeb, 0x8a, 0x58, 0x6b, 0xd3, + 0x9e, 0x98, 0x50, 0xa2, 0x6d, 0x11, 0xb7, 0xe9, 0x58, 0x5d, 0x7f, 0xf0, 0x06, 0xe9, 0x78, 0x96, + 0x77, 0x9a, 0x19, 0x6e, 0x7d, 0x61, 0x0a, 0xcf, 0x1b, 0xf6, 0x4d, 0x8e, 0xb2, 0xf0, 0x81, 0x8b, + 0x08, 0xe3, 0xdd, 0x0e, 0x31, 0x3d, 0x72, 0xcc, 0x74, 0x4f, 0xc1, 0xda, 0x20, 0x24, 0x06, 0x58, + 0xd8, 0xf9, 0xbf, 0xb2, 0xf6, 0x51, 0xf2, 0xd5, 0x49, 0xe2, 0x7a, 0xba, 0x91, 0x65, 0xe2, 0x76, + 0xed, 0x8e, 0x4b, 0x8c, 0x9d, 0xcf, 0xbe, 0x7d, 0xfd, 0xb2, 0xb6, 0xcd, 0x98, 0x4f, 0xc3, 0x72, + 0xea, 0x5e, 0x4a, 0xd8, 0x1d, 0x42, 0x95, 0xfa, 0x1a, 0x43, 0x8f, 0xfc, 0x56, 0xb5, 0x9d, 0xf1, + 0xea, 0x19, 0xab, 0x35, 0x60, 0x3b, 0xe3, 0xd3, 0x43, 0xa8, 0x02, 0xef, 0x22, 0x3c, 0xb7, 0x46, + 0x3c, 0x8a, 0xe6, 0xee, 0xf8, 0x54, 0x87, 0xc7, 0xfc, 0x78, 0xab, 0x11, 0x4f, 0x80, 0x59, 0x9c, + 0x06, 0xc6, 0xf8, 0x0e, 0xa2, 0xf3, 0x5f, 0x40, 0xf0, 0x40, 0x74, 0x32, 0x7f, 0x22, 0x1e, 0xb4, + 0xd3, 0xf4, 0x1f, 0x16, 0xe9, 0xec, 0xef, 0x8e, 0x39, 0x41, 0xd8, 0x5f, 0x5c, 0xf9, 0xe9, 0xfa, + 0x01, 0xd8, 0xaf, 0x46, 0x5b, 0x76, 0x34, 0xb8, 0x86, 0xf0, 0x9d, 0x07, 0x2c, 0x97, 0x72, 0xdb, + 0xd7, 0x72, 0x61, 0x30, 0x0e, 0xfe, 0x90, 0x39, 0x41, 0x5a, 0x7b, 0xa8, 0xbf, 0xf6, 0xb5, 0x7c, + 0xbf, 0x1d, 0xb7, 0x88, 0xe3, 0xf7, 0x10, 0x74, 0x37, 0x16, 0xee, 0x61, 0x3c, 0x41, 0x25, 0x38, + 0x0a, 0xeb, 0x64, 0x02, 0x0d, 0xab, 0xe5, 0x56, 0xcf, 0x84, 0x98, 0x39, 0xe0, 0xfa, 0x66, 0xa8, + 0xa4, 0xf0, 0x64, 0x24, 0x13, 0xd6, 0xf0, 0xaa, 0x86, 0x3f, 0x23, 0x78, 0xb8, 0xb0, 0x2e, 0x8e, + 0x69, 0x94, 0x27, 0x88, 0x0c, 0x7c, 0x59, 0x9a, 0x9f, 0x28, 0xce, 0x3f, 0x33, 0x5f, 0xfd, 0x1e, + 0xc1, 0x60, 0x59, 0x5f, 0xd5, 0x1f, 0x8a, 0xfb, 0xb7, 0xa4, 0x7b, 0xea, 0xfd, 0xb0, 0xa1, 0xd8, + 0xa4, 0xf5, 0x1d, 0xb0, 0x6d, 0x06, 0x53, 0xc1, 0xcb, 0x08, 0x2f, 0x60, 0xb9, 0xf1, 0x45, 0x5e, + 0xc8, 0x60, 0x7d, 0x5c, 0x0a, 0xd1, 0x12, 0x4d, 0xb3, 0x0d, 0x79, 0x66, 0x3c, 0xd5, 0x86, 0xa9, + 0x7c, 0x9f, 0x33, 0x16, 0x09, 0x78, 0xa2, 0x62, 0xd2, 0x74, 0x5b, 0x67, 0xac, 0x4e, 0xfc, 0x9e, + 0x48, 0xb9, 0xf7, 0x11, 0xbe, 0xb3, 0x46, 0xbc, 0x00, 0x61, 0x7e, 0xda, 0x2d, 0x53, 0x81, 0x33, + 0xbe, 0xcf, 0xdc, 0x79, 0x05, 0xc1, 0x70, 0x72, 0xe2, 0xb2, 0xe9, 0x77, 0x04, 0x0e, 0x65, 0xa3, + 0x2f, 0x9d, 0x82, 0x6f, 0x21, 0xbc, 0xd0, 0x0f, 0x3b, 0x81, 0xf7, 0x96, 0xa7, 0xa1, 0x49, 0xe5, + 0x78, 0x12, 0xfa, 0xe2, 0x44, 0x54, 0xa9, 0x38, 0x08, 0x03, 0x0a, 0xce, 0xaa, 0x74, 0xfc, 0x8d, + 0x86, 0xe7, 0xcb, 0x9c, 0x0a, 0xa6, 0xe4, 0x4a, 0x95, 0x0f, 0x29, 0xee, 0xbf, 0x32, 0x3f, 0x5e, + 0x47, 0xb0, 0x7d, 0x26, 0x7e, 0xac, 0xef, 0x4e, 0xf3, 0x7f, 0xd9, 0xf4, 0x94, 0xca, 0x52, 0xfe, + 0xe4, 0xf5, 0x9d, 0x70, 0xff, 0x0c, 0xa7, 0x84, 0x9f, 0x22, 0xdc, 0xcb, 0xf2, 0xea, 0x00, 0xdd, + 0x45, 0x1c, 0x69, 0x9b, 0x1d, 0xe8, 0x8b, 0x0b, 0x14, 0xb6, 0x45, 0x53, 0xb5, 0x3f, 0xdf, 0x90, + 0x27, 0x6b, 0x8d, 0x8a, 0x3a, 0x6c, 0x2c, 0x16, 0x40, 0xa5, 0x4d, 0x0b, 0xcd, 0xd7, 0x0d, 0xc6, + 0xda, 0xb4, 0xa6, 0x44, 0xca, 0xfe, 0x0b, 0xe1, 0xf9, 0x35, 0xe2, 0x49, 0x68, 0xf3, 0x93, 0x56, + 0x57, 0xc3, 0x34, 0x5e, 0x66, 0xee, 0xfe, 0x1e, 0x82, 0x91, 0xd4, 0xf9, 0xcb, 0x66, 0xee, 0x51, + 0xf8, 0x42, 0x2e, 0x8f, 0xd2, 0xc9, 0xfb, 0x6f, 0x84, 0xef, 0xaa, 0x11, 0x6f, 0xb8, 0xe9, 0x59, + 0x53, 0x99, 0x8e, 0x8a, 0x5b, 0x14, 0x51, 0xe0, 0x2a, 0x53, 0xe0, 0x12, 0x82, 0x07, 0x05, 0x72, + 0x93, 0x0e, 0xd3, 0x28, 0x29, 0x44, 0xfd, 0x20, 0x3c, 0x9a, 0x35, 0x42, 0x49, 0x09, 0xfc, 0x0d, + 0xd1, 0x12, 0x3f, 0x25, 0xe3, 0xa4, 0x5c, 0xd8, 0x94, 0xc7, 0x5b, 0x4e, 0xf7, 0xd5, 0x6a, 0xee, + 0x34, 0xe1, 0x1d, 0x4a, 0xbf, 0x1d, 0x56, 0x9f, 0x54, 0xf6, 0xc9, 0x7a, 0x35, 0x04, 0x9f, 0xcd, + 0x65, 0xab, 0xaa, 0x5c, 0xef, 0x21, 0xbc, 0xc8, 0x9f, 0x3c, 0x84, 0x72, 0xcb, 0xeb, 0xf1, 0x49, + 0x4a, 0xb3, 0x15, 0x16, 0x16, 0x09, 0xad, 0xaa, 0x24, 0xdf, 0x17, 0xd6, 0xc0, 0xb8, 0x75, 0x26, + 0xbd, 0x37, 0x35, 0xb6, 0xd8, 0xc8, 0x3e, 0x2b, 0x54, 0x9a, 0xf3, 0x7c, 0xf5, 0x1f, 0x16, 0xab, + 0xff, 0x44, 0x61, 0xc5, 0x2b, 0x1b, 0xa4, 0x7b, 0x15, 0x89, 0x5e, 0xb6, 0x44, 0x57, 0x61, 0x4b, + 0x29, 0x08, 0xf5, 0xcf, 0xc3, 0xd0, 0xcc, 0x27, 0x86, 0x0b, 0x1a, 0xee, 0x7d, 0xac, 0xdb, 0x2a, + 0x5c, 0xa8, 0x99, 0x6d, 0x81, 0x42, 0x2d, 0x0c, 0x79, 0xa1, 0x7e, 0x85, 0x29, 0xfc, 0x12, 0xd2, + 0x67, 0xa5, 0x1e, 0xfa, 0xa5, 0xfd, 0xa8, 0x7e, 0x0b, 0x4a, 0xe2, 0x0f, 0x10, 0x5e, 0xc8, 0xd6, + 0x98, 0x3d, 0xe2, 0x34, 0x09, 0x89, 0x9d, 0x63, 0xd0, 0x14, 0x5d, 0xb6, 0xfa, 0x72, 0xed, 0xb8, + 0x18, 0xbb, 0xa8, 0x16, 0x43, 0x06, 0x08, 0xfc, 0xc1, 0xc9, 0x95, 0xae, 0x59, 0x6b, 0xf5, 0x95, + 0xc9, 0x86, 0x30, 0x33, 0xfc, 0xe5, 0xea, 0xd7, 0x08, 0x2f, 0x1a, 0x25, 0x8c, 0x76, 0x08, 0xb4, + 0x5f, 0x09, 0x40, 0xd8, 0x96, 0x86, 0xfa, 0x18, 0x85, 0x7a, 0xd8, 0x58, 0x91, 0x82, 0xc8, 0xe1, + 0x83, 0xfa, 0x98, 0xb7, 0x18, 0xfd, 0x2a, 0xcc, 0xc2, 0x15, 0x92, 0x39, 0xfc, 0x12, 0xe1, 0xde, + 0x51, 0xd2, 0xb4, 0xa7, 0x88, 0x13, 0xc2, 0xef, 0xcb, 0x80, 0x4f, 0x4d, 0x4b, 0xa3, 0x3f, 0x4a, + 0xd1, 0x1f, 0x0c, 0x8f, 0xc8, 0x11, 0xf4, 0x74, 0x4c, 0x1f, 0xfc, 0x66, 0xa3, 0x2f, 0x1f, 0xbc, + 0xb0, 0xf6, 0x8b, 0xec, 0xbc, 0x1a, 0xf1, 0x42, 0xdc, 0x9b, 0x54, 0x1b, 0xbf, 0xc0, 0x44, 0xda, + 0x34, 0x2c, 0x57, 0x62, 0x37, 0xce, 0xb2, 0x1c, 0x99, 0x86, 0x1d, 0x29, 0x68, 0x0a, 0x94, 0x8e, + 0x11, 0x78, 0x38, 0x8f, 0x46, 0x81, 0xe5, 0xf1, 0x1f, 0x08, 0x2f, 0x64, 0xc9, 0x5b, 0x24, 0x03, + 0xa2, 0xf5, 0xa0, 0x2f, 0xd7, 0x8e, 0x3b, 0xe6, 0x79, 0x46, 0xf5, 0x2c, 0xd2, 0x67, 0xc6, 0xd5, + 0xf7, 0x5a, 0x4d, 0x9f, 0x05, 0xba, 0xbe, 0x43, 0xcf, 0x69, 0xb8, 0x57, 0x76, 0xe8, 0x88, 0xe9, + 0x99, 0x50, 0x2d, 0xe2, 0x54, 0xdf, 0x52, 0x70, 0x1f, 0x2c, 0xde, 0x81, 0x8b, 0x70, 0x91, 0x89, + 0xf0, 0x0d, 0x14, 0x56, 0xf0, 0x96, 0xe9, 0x99, 0x25, 0xbd, 0xbe, 0x0f, 0x6a, 0xaa, 0xde, 0x65, + 0x5d, 0x7f, 0x0d, 0xe1, 0x05, 0xfe, 0x7a, 0x18, 0x20, 0x2e, 0xb8, 0xbc, 0xae, 0x52, 0xba, 0x9d, + 0xae, 0xae, 0x36, 0xa5, 0x69, 0xc1, 0xa6, 0x12, 0xae, 0x96, 0xb7, 0x41, 0x65, 0x19, 0xc1, 0x87, + 0x08, 0xc3, 0x31, 0xe2, 0x4c, 0x58, 0x9d, 0x48, 0x14, 0x6f, 0x54, 0xc2, 0x0c, 0x8c, 0x05, 0xa3, + 0x4a, 0x11, 0xd3, 0x78, 0x2c, 0x57, 0x6e, 0x22, 0x96, 0x2b, 0xb3, 0x14, 0xcb, 0x7f, 0x61, 0xb1, + 0x7c, 0xc8, 0x6e, 0x91, 0x8c, 0xc2, 0x1a, 0x69, 0x96, 0x8a, 0xd3, 0xaa, 0x4c, 0x43, 0xe3, 0xeb, + 0x1a, 0x65, 0xfa, 0x3f, 0x04, 0x1d, 0x81, 0x36, 0xfa, 0x74, 0x96, 0xd1, 0x0d, 0xfe, 0x6d, 0xc4, + 0x21, 0x47, 0x5a, 0x64, 0xfc, 0x91, 0x86, 0x70, 0x59, 0xa6, 0xa3, 0x5b, 0xad, 0xe9, 0xfa, 0xb7, + 0x10, 0x9c, 0x47, 0xaa, 0x39, 0x85, 0x4c, 0x91, 0x41, 0x02, 0xcd, 0x66, 0x1f, 0x0d, 0xfc, 0x57, + 0xc3, 0xe0, 0x47, 0x76, 0x44, 0x1d, 0x37, 0xb9, 0xfc, 0x46, 0xda, 0xe5, 0x84, 0x59, 0x9b, 0x6b, + 0x69, 0x5c, 0x61, 0x5a, 0x5f, 0xd4, 0xc0, 0x55, 0x6a, 0x1d, 0x3c, 0xfa, 0x50, 0x70, 0x4c, 0x6f, + 0x0f, 0x98, 0xa6, 0x37, 0xb3, 0xaa, 0x72, 0x15, 0xc1, 0xe5, 0x6c, 0xc1, 0xd3, 0x7b, 0x33, 0xd9, + 0x6f, 0x1d, 0x30, 0xb8, 0xf4, 0x69, 0xbc, 0x3c, 0xa9, 0xfd, 0x5e, 0xdb, 0xa1, 0x0f, 0xb8, 0xab, + 0x99, 0xc2, 0x72, 0xab, 0x92, 0x9e, 0x78, 0x71, 0x2e, 0xf5, 0xc4, 0xd5, 0xb9, 0xf0, 0xc3, 0x1e, + 0xa1, 0x48, 0xf3, 0x84, 0xd5, 0x6e, 0x39, 0x24, 0xfe, 0xe2, 0xc1, 0xad, 0x9e, 0x89, 0xfe, 0xd0, + 0x10, 0x61, 0x13, 0xf9, 0x45, 0xa1, 0x4a, 0xe9, 0xae, 0x81, 0x60, 0xa5, 0x7b, 0xf2, 0xa0, 0x2e, + 0xd2, 0x4f, 0x44, 0x7d, 0x9a, 0x35, 0x7f, 0x04, 0x9e, 0xc9, 0x41, 0xd8, 0x64, 0x80, 0x15, 0x26, + 0x4a, 0x54, 0xc2, 0x40, 0x6c, 0xd3, 0xd3, 0x6c, 0x1c, 0xe2, 0x39, 0xa7, 0x1b, 0xa6, 0xe7, 0x91, + 0x89, 0xae, 0x37, 0x5d, 0xbf, 0xd1, 0x03, 0xd7, 0xf3, 0xdd, 0x45, 0x23, 0xb9, 0xb4, 0x7a, 0x2c, + 0xc8, 0x6f, 0x7b, 0xfa, 0x63, 0xe1, 0x69, 0x38, 0xdb, 0x83, 0x17, 0xc7, 0x97, 0x3c, 0xba, 0x85, + 0xdb, 0x94, 0xb7, 0xec, 0xc9, 0xdb, 0xb7, 0xcd, 0xc5, 0x8c, 0xf9, 0x9a, 0x7f, 0x89, 0x55, 0xe7, + 0xf3, 0x52, 0x75, 0xa6, 0x9b, 0xaf, 0x8f, 0x68, 0x39, 0xfc, 0x36, 0x82, 0x0b, 0x28, 0x73, 0xe2, + 0x8f, 0x7c, 0x4d, 0x7c, 0x15, 0xe1, 0x85, 0xa3, 0x64, 0xdc, 0x72, 0x3d, 0xe2, 0x1c, 0x61, 0x23, + 0x26, 0x8f, 0x0d, 0xbc, 0x41, 0xd8, 0x29, 0x8f, 0x0d, 0x09, 0x3b, 0x2e, 0xfb, 0x08, 0x55, 0xfd, + 0x41, 0xa3, 0x57, 0x70, 0xe7, 0xd8, 0xe9, 0xb1, 0xb9, 0xcf, 0x30, 0xe2, 0x3f, 0x33, 0x19, 0xc4, + 0x3b, 0x7a, 0x71, 0x78, 0x7e, 0x01, 0xe1, 0xf9, 0xec, 0x3c, 0x22, 0x80, 0x2e, 0x55, 0x00, 0xd0, + 0xd7, 0x2b, 0x1a, 0x62, 0xc7, 0x99, 0xbd, 0x14, 0xd7, 0x2e, 0x7d, 0x49, 0x02, 0xc0, 0x19, 0xab, + 0x45, 0x37, 0x78, 0xf7, 0xe8, 0x6b, 0xd2, 0xc1, 0x09, 0x9f, 0x50, 0x64, 0xcf, 0x21, 0x3c, 0xcf, + 0x5f, 0x73, 0xf8, 0x2c, 0x2e, 0x18, 0x8a, 0xf9, 0x33, 0x5f, 0x05, 0x8a, 0xde, 0xc6, 0x7d, 0x14, + 0xd6, 0x20, 0x24, 0xe4, 0xaa, 0xaf, 0x04, 0x5d, 0x0d, 0x07, 0xde, 0x41, 0xf8, 0xae, 0xe8, 0x4b, + 0xb6, 0x3d, 0x53, 0xa4, 0xe3, 0xc1, 0x96, 0xdc, 0x23, 0x0e, 0xb5, 0x13, 0xc0, 0x06, 0x8a, 0x9a, + 0x73, 0x15, 0x1b, 0x14, 0xee, 0x13, 0xc6, 0xb2, 0x60, 0x2b, 0xec, 0x37, 0xbb, 0xd1, 0x17, 0x70, + 0x43, 0xc6, 0x8e, 0x58, 0x33, 0xc5, 0xcd, 0xae, 0x22, 0x24, 0xa3, 0x5d, 0xee, 0x0b, 0xbf, 0x0d, + 0x1e, 0xee, 0xd0, 0xe4, 0xa6, 0x9c, 0x36, 0x66, 0xe6, 0x7d, 0x84, 0x4f, 0xa5, 0x88, 0x29, 0xe7, + 0x52, 0xa7, 0x5c, 0x8e, 0x85, 0x2f, 0x26, 0x38, 0x58, 0x3f, 0x5f, 0x28, 0x8f, 0x9d, 0xc6, 0x76, + 0x35, 0x8f, 0xd4, 0xc4, 0x15, 0x5d, 0xe1, 0x4f, 0x01, 0x0d, 0x7f, 0x37, 0xa3, 0xa0, 0x41, 0x9b, + 0x8a, 0xd1, 0x48, 0x33, 0xe5, 0x34, 0xba, 0x94, 0xc6, 0xc9, 0x04, 0x8d, 0xe0, 0xfa, 0xc1, 0x61, + 0x63, 0xbf, 0x9a, 0x46, 0xd7, 0x74, 0x48, 0xc7, 0x6b, 0x14, 0x59, 0x4d, 0xc5, 0x80, 0xf0, 0xc6, + 0x1d, 0xf4, 0x00, 0x13, 0xc1, 0x94, 0x3c, 0xc0, 0x44, 0x9a, 0xb3, 0x0e, 0x30, 0x11, 0x43, 0xe3, + 0xef, 0x73, 0x28, 0x9f, 0x1b, 0x73, 0xe0, 0xbb, 0x5a, 0xe4, 0x35, 0x7e, 0xac, 0x64, 0x17, 0x5e, + 0xc8, 0x4b, 0xac, 0xdc, 0x85, 0x97, 0xea, 0x9c, 0xb5, 0x39, 0x75, 0x31, 0x4e, 0x5b, 0x7d, 0x93, + 0xcb, 0x6d, 0xea, 0xfa, 0x9a, 0xdc, 0x3a, 0xbd, 0xa6, 0xc1, 0x35, 0xa5, 0x3c, 0x62, 0x61, 0x29, + 0xb4, 0x45, 0xfa, 0xa4, 0x4b, 0x09, 0x1f, 0xf4, 0xb0, 0x93, 0x62, 0x24, 0x0c, 0x53, 0x4e, 0x8a, + 0x91, 0xf6, 0xcc, 0xf3, 0x49, 0xc2, 0xd2, 0xb8, 0xd0, 0x43, 0x83, 0xfa, 0x5c, 0x0f, 0xfc, 0x08, + 0x29, 0x83, 0xba, 0xb0, 0x1b, 0x8a, 0xfa, 0xa0, 0x98, 0x03, 0xd4, 0xea, 0xd7, 0xff, 0x80, 0xe0, + 0x6d, 0x94, 0x19, 0x65, 0x85, 0x42, 0xec, 0x63, 0x47, 0x0c, 0xfe, 0x76, 0x07, 0xdd, 0x8f, 0x46, + 0x1c, 0x95, 0xbe, 0x1f, 0x8d, 0x57, 0xb1, 0xcc, 0xfd, 0x68, 0xba, 0x31, 0xaf, 0xd3, 0x1f, 0xb2, + 0xc2, 0xf6, 0xc1, 0x1c, 0x78, 0x49, 0x8b, 0xec, 0x0b, 0x6f, 0x57, 0xb7, 0x78, 0x75, 0xfb, 0x9d, + 0x06, 0xaf, 0x67, 0x6b, 0x74, 0xbb, 0xc4, 0x95, 0x29, 0x71, 0x6f, 0x68, 0x78, 0x55, 0x64, 0x37, + 0x3d, 0x42, 0x87, 0x1c, 0x0e, 0xae, 0x97, 0xc2, 0x76, 0xc5, 0x06, 0x35, 0x6e, 0x18, 0x7d, 0x97, + 0xb0, 0xa3, 0x64, 0x2f, 0x9e, 0x09, 0xbf, 0x62, 0x4f, 0x63, 0x7f, 0x8e, 0xf4, 0xfd, 0xb1, 0x1d, + 0x6e, 0xf2, 0x16, 0x6e, 0xf5, 0x4c, 0xf4, 0x12, 0x2c, 0x97, 0x47, 0xfa, 0x91, 0xcb, 0xe3, 0xef, + 0x74, 0x5a, 0x7a, 0x23, 0x7f, 0x40, 0x1a, 0x3a, 0x52, 0x7f, 0x16, 0x23, 0xc5, 0x67, 0x81, 0xb3, + 0x1a, 0xd6, 0x6b, 0xc4, 0x53, 0x49, 0x79, 0x6f, 0x41, 0x51, 0xa4, 0x2d, 0xd1, 0xd6, 0x32, 0x5d, + 0xb8, 0x88, 0xcf, 0x50, 0x0d, 0x9f, 0x0e, 0x5f, 0xd3, 0x67, 0x48, 0x98, 0x7c, 0xbd, 0xbf, 0x2b, + 0xbc, 0xf1, 0x91, 0xa3, 0x94, 0xea, 0x45, 0xff, 0x65, 0x0d, 0xaf, 0x1a, 0x21, 0x6d, 0x72, 0xf3, + 0x31, 0xc5, 0x46, 0x29, 0x1b, 0x53, 0xa2, 0x17, 0x97, 0xe3, 0x39, 0x16, 0x53, 0xcf, 0x54, 0x66, + 0xa4, 0x87, 0x1f, 0x3c, 0xbb, 0x2b, 0x37, 0x29, 0x89, 0x1f, 0x1b, 0xcf, 0x6b, 0x78, 0x69, 0x24, + 0xd3, 0x24, 0x3d, 0x06, 0x14, 0xcc, 0x54, 0xd9, 0x55, 0x2d, 0x6c, 0xcf, 0x35, 0xb8, 0xc0, 0x34, + 0x38, 0x87, 0xf4, 0x6a, 0x9c, 0x49, 0x4e, 0x42, 0xf9, 0xfc, 0x8f, 0xe8, 0x8f, 0xce, 0x62, 0xf2, + 0xf0, 0x6b, 0xcd, 0x8b, 0xc3, 0x44, 0x91, 0x94, 0xd8, 0x94, 0xcb, 0x4c, 0x4a, 0x8e, 0xcd, 0xc5, + 0x8c, 0xb9, 0x06, 0x84, 0x4a, 0xd0, 0x80, 0x7b, 0xb2, 0x14, 0x10, 0x20, 0xeb, 0xf7, 0x87, 0xef, + 0x71, 0x4b, 0xf9, 0x1c, 0x6e, 0x20, 0xbc, 0x34, 0x12, 0xfd, 0xa5, 0xfc, 0x1c, 0x8d, 0xf8, 0x6a, + 0x61, 0x7b, 0xce, 0xf1, 0x14, 0xe5, 0x48, 0x2a, 0x85, 0x38, 0xd2, 0x03, 0x79, 0x65, 0x66, 0x34, + 0xe9, 0xab, 0x74, 0x0d, 0x2f, 0x63, 0x71, 0x26, 0x1e, 0x0d, 0x48, 0x54, 0x95, 0x6f, 0x60, 0x55, + 0x31, 0x3d, 0x58, 0xbc, 0x03, 0x27, 0xfb, 0x1e, 0x0b, 0xea, 0x77, 0x90, 0x5e, 0x4f, 0x5c, 0x27, + 0x9d, 0xc1, 0x32, 0x11, 0xf9, 0x4d, 0x0c, 0x44, 0x45, 0xf2, 0x74, 0x3b, 0x6b, 0x82, 0x9b, 0x5a, + 0x36, 0x94, 0xb3, 0xc2, 0xd7, 0x34, 0xbc, 0x44, 0xba, 0x87, 0x2c, 0x69, 0xbb, 0x39, 0x5f, 0x2a, + 0x29, 0x4b, 0xb6, 0x14, 0xb4, 0xe6, 0xaa, 0x7e, 0x93, 0xa9, 0xfa, 0x2c, 0x82, 0x9d, 0x99, 0xaa, + 0x26, 0x8a, 0x5c, 0xf8, 0xe6, 0x67, 0xba, 0xbe, 0x07, 0x76, 0xe7, 0x2a, 0xa6, 0xa8, 0x95, 0xd2, + 0x30, 0x70, 0x49, 0xc3, 0xcb, 0x58, 0x84, 0xcf, 0x2c, 0xc2, 0xa2, 0xd9, 0x34, 0x58, 0xbc, 0x83, + 0x78, 0x50, 0xcc, 0xb4, 0x38, 0x8f, 0x2a, 0x33, 0xd7, 0xc2, 0x0f, 0xa0, 0x47, 0x2a, 0xb3, 0x21, + 0x87, 0x1f, 0x14, 0xaf, 0x23, 0xbc, 0xd4, 0x3f, 0x37, 0x1e, 0x14, 0x1f, 0xe0, 0x64, 0x55, 0x17, + 0x85, 0xa1, 0xb2, 0xba, 0x28, 0xed, 0xb9, 0x1c, 0x87, 0xa8, 0x1a, 0x8f, 0x40, 0x70, 0xc1, 0x29, + 0xfc, 0x0c, 0x28, 0x64, 0x23, 0x7f, 0x45, 0x90, 0xd6, 0x2e, 0x3d, 0xa9, 0x7c, 0x9f, 0x5f, 0x78, + 0x0c, 0xef, 0x27, 0x5a, 0xc4, 0x4d, 0x3e, 0x77, 0x96, 0xae, 0x2f, 0xca, 0x87, 0xeb, 0x35, 0x39, + 0x76, 0x69, 0x91, 0xec, 0x6f, 0x8e, 0x5b, 0xec, 0x1b, 0x20, 0xcb, 0x77, 0x9c, 0xf8, 0x7a, 0xa9, + 0xe1, 0x9d, 0xee, 0x92, 0x34, 0xf9, 0xe5, 0x48, 0xce, 0xe9, 0x9c, 0xb9, 0x27, 0x3a, 0xab, 0xe1, + 0x05, 0x35, 0x22, 0x31, 0x3d, 0x9d, 0xfc, 0xf2, 0x41, 0x6a, 0x94, 0xd2, 0x77, 0x45, 0x86, 0x99, + 0xf1, 0x13, 0x46, 0xf1, 0x15, 0x04, 0xfb, 0x8a, 0x52, 0xcc, 0xbf, 0x93, 0xf2, 0x25, 0x78, 0xbc, + 0x0c, 0xe5, 0x12, 0x57, 0x54, 0x5e, 0xd4, 0xf0, 0x22, 0x56, 0xc4, 0x65, 0x21, 0xfa, 0x33, 0x18, + 0x46, 0xd7, 0x88, 0x8d, 0x05, 0x2c, 0x79, 0xac, 0xfe, 0x8c, 0x29, 0xf3, 0x63, 0xa4, 0xcf, 0x9e, + 0x32, 0x7e, 0x2a, 0x3f, 0xa9, 0xdf, 0x22, 0x71, 0xfc, 0xec, 0x6e, 0x63, 0x5c, 0x23, 0xde, 0xe3, + 0xec, 0xbc, 0x96, 0xfc, 0xfa, 0x2c, 0x6c, 0x53, 0x7e, 0x7d, 0x26, 0x9b, 0x70, 0x25, 0x96, 0x52, + 0x21, 0x16, 0xc1, 0x42, 0x81, 0x9b, 0x9f, 0x07, 0xe1, 0x17, 0x1a, 0xdd, 0x84, 0x8d, 0x84, 0x5f, + 0xc7, 0x71, 0x87, 0xe4, 0x5f, 0x9e, 0x4f, 0x40, 0x4b, 0x0c, 0x62, 0xbc, 0xcb, 0x1c, 0xf0, 0x16, + 0x82, 0xe0, 0xe4, 0x95, 0xf8, 0x0e, 0x8f, 0xca, 0x46, 0x0f, 0xa5, 0x25, 0x3d, 0x11, 0xbd, 0x5e, + 0xdf, 0x81, 0x76, 0xe6, 0x14, 0x09, 0x4f, 0xdc, 0xdc, 0x7c, 0xf0, 0x5a, 0x0f, 0x2b, 0xc2, 0x71, + 0xd2, 0x56, 0xda, 0xda, 0x9c, 0x50, 0x46, 0xae, 0x61, 0xeb, 0x0b, 0x59, 0x1b, 0x7f, 0x64, 0x2f, + 0x2c, 0xdf, 0xd4, 0xe0, 0x70, 0xb6, 0x96, 0xe5, 0x93, 0xfd, 0x2b, 0xf0, 0xe5, 0x52, 0x43, 0x96, + 0xbd, 0x11, 0x5d, 0x83, 0x3d, 0xb3, 0x02, 0xb9, 0x7e, 0x0c, 0x46, 0x67, 0x1f, 0x28, 0x5c, 0xd1, + 0xe8, 0x47, 0x14, 0xc1, 0xa3, 0xb9, 0x83, 0xc4, 0x73, 0xac, 0xa6, 0x0b, 0x5b, 0x8b, 0xdc, 0x07, + 0xe4, 0xc6, 0xc2, 0x99, 0xdb, 0x4a, 0xf5, 0xe1, 0xd9, 0x99, 0xf2, 0x71, 0xe6, 0x04, 0x33, 0x29, + 0x79, 0x93, 0x50, 0xfa, 0x38, 0x33, 0x65, 0x80, 0x92, 0x6e, 0x7b, 0xf8, 0xa1, 0xfa, 0x03, 0xe3, + 0x96, 0x77, 0x62, 0x72, 0x6c, 0xa0, 0x69, 0x4f, 0x54, 0x29, 0x2f, 0x7f, 0x08, 0xfa, 0x47, 0x35, + 0xf8, 0xbc, 0x76, 0x9c, 0x74, 0xaa, 0xdd, 0xb1, 0x2d, 0xe3, 0x76, 0x35, 0xfe, 0x99, 0xf6, 0xd8, + 0xa7, 0xe8, 0x17, 0xb6, 0xdb, 0xfe, 0x1f, 0x00, 0x00, 0xff, 0xff, 0x62, 0x8b, 0x12, 0xc0, 0xc1, + 0x3d, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/flyteidl/gen/pb-go/flyteidl/service/admin.pb.gw.go b/flyteidl/gen/pb-go/flyteidl/service/admin.pb.gw.go index fcdbb30992..3bffe4954b 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/admin.pb.gw.go +++ b/flyteidl/gen/pb-go/flyteidl/service/admin.pb.gw.go @@ -47,6 +47,41 @@ func request_AdminService_CreateTask_0(ctx context.Context, marshaler runtime.Ma } +func request_AdminService_CreateTask_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.TaskCreateRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id.org"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.org") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.org", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.org", err) + } + + msg, err := client.CreateTask(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + var ( filter_AdminService_GetTask_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "project": 1, "domain": 2, "name": 3, "version": 4}, Base: []int{1, 1, 1, 2, 3, 4, 0, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 2, 3, 4, 5, 6}} ) @@ -566,6 +601,41 @@ func request_AdminService_CreateWorkflow_0(ctx context.Context, marshaler runtim } +func request_AdminService_CreateWorkflow_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.WorkflowCreateRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id.org"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.org") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.org", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.org", err) + } + + msg, err := client.CreateWorkflow(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + var ( filter_AdminService_GetWorkflow_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "project": 1, "domain": 2, "name": 3, "version": 4}, Base: []int{1, 1, 1, 2, 3, 4, 0, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 2, 3, 4, 5, 6}} ) @@ -1085,6 +1155,41 @@ func request_AdminService_CreateLaunchPlan_0(ctx context.Context, marshaler runt } +func request_AdminService_CreateLaunchPlan_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.LaunchPlanCreateRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id.org"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.org") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.org", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.org", err) + } + + msg, err := client.CreateLaunchPlan(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + var ( filter_AdminService_GetLaunchPlan_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "project": 1, "domain": 2, "name": 3, "version": 4}, Base: []int{1, 1, 1, 2, 3, 4, 0, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 2, 3, 4, 5, 6}} ) @@ -1418,6 +1523,66 @@ func request_AdminService_ListActiveLaunchPlans_0(ctx context.Context, marshaler } +var ( + filter_AdminService_ListActiveLaunchPlans_1 = &utilities.DoubleArray{Encoding: map[string]int{"org": 0, "project": 1, "domain": 2}, Base: []int{1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 1, 1, 2, 3, 4}} +) + +func request_AdminService_ListActiveLaunchPlans_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.ActiveLaunchPlanListRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["org"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "org") + } + + protoReq.Org, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "org", err) + } + + val, ok = pathParams["project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "project") + } + + protoReq.Project, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "project", err) + } + + val, ok = pathParams["domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "domain") + } + + protoReq.Domain, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "domain", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListActiveLaunchPlans_1); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ListActiveLaunchPlans(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + var ( filter_AdminService_ListLaunchPlanIds_0 = &utilities.DoubleArray{Encoding: map[string]int{"project": 0, "domain": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}} ) @@ -1934,6 +2099,41 @@ func request_AdminService_CreateExecution_0(ctx context.Context, marshaler runti } +func request_AdminService_CreateExecution_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.ExecutionCreateRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["org"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "org") + } + + protoReq.Org, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "org", err) + } + + msg, err := client.CreateExecution(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + func request_AdminService_RelaunchExecution_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq admin.ExecutionRelaunchRequest var metadata runtime.ServerMetadata @@ -1951,6 +2151,41 @@ func request_AdminService_RelaunchExecution_0(ctx context.Context, marshaler run } +func request_AdminService_RelaunchExecution_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.ExecutionRelaunchRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id.org"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.org") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.org", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.org", err) + } + + msg, err := client.RelaunchExecution(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + func request_AdminService_RecoverExecution_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq admin.ExecutionRecoverRequest var metadata runtime.ServerMetadata @@ -1968,6 +2203,41 @@ func request_AdminService_RecoverExecution_0(ctx context.Context, marshaler runt } +func request_AdminService_RecoverExecution_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.ExecutionRecoverRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id.org"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.org") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.org", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.org", err) + } + + msg, err := client.RecoverExecution(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + var ( filter_AdminService_GetExecution_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "project": 1, "domain": 2, "name": 3}, Base: []int{1, 1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 3, 4, 5}} ) @@ -3306,6 +3576,41 @@ func request_AdminService_RegisterProject_0(ctx context.Context, marshaler runti } +func request_AdminService_RegisterProject_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.ProjectRegisterRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["project.org"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "project.org") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "project.org", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "project.org", err) + } + + msg, err := client.RegisterProject(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + func request_AdminService_UpdateProject_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq admin.Project var metadata runtime.ServerMetadata @@ -3407,6 +3712,44 @@ func request_AdminService_ListProjects_0(ctx context.Context, marshaler runtime. } +var ( + filter_AdminService_ListProjects_1 = &utilities.DoubleArray{Encoding: map[string]int{"org": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_AdminService_ListProjects_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.ProjectListRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["org"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "org") + } + + protoReq.Org, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "org", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListProjects_1); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ListProjects(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + func request_AdminService_CreateWorkflowEvent_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq admin.WorkflowExecutionEventRequest var metadata runtime.ServerMetadata @@ -3424,6 +3767,41 @@ func request_AdminService_CreateWorkflowEvent_0(ctx context.Context, marshaler r } +func request_AdminService_CreateWorkflowEvent_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.WorkflowExecutionEventRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["event.execution_id.org"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "event.execution_id.org") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "event.execution_id.org", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "event.execution_id.org", err) + } + + msg, err := client.CreateWorkflowEvent(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + func request_AdminService_CreateNodeEvent_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq admin.NodeExecutionEventRequest var metadata runtime.ServerMetadata @@ -3441,6 +3819,41 @@ func request_AdminService_CreateNodeEvent_0(ctx context.Context, marshaler runti } +func request_AdminService_CreateNodeEvent_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.NodeExecutionEventRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["event.id.execution_id.org"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "event.id.execution_id.org") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "event.id.execution_id.org", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "event.id.execution_id.org", err) + } + + msg, err := client.CreateNodeEvent(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + func request_AdminService_CreateTaskEvent_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq admin.TaskExecutionEventRequest var metadata runtime.ServerMetadata @@ -3458,6 +3871,41 @@ func request_AdminService_CreateTaskEvent_0(ctx context.Context, marshaler runti } +func request_AdminService_CreateTaskEvent_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.TaskExecutionEventRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["event.parent_node_execution_id.execution_id.org"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "event.parent_node_execution_id.execution_id.org") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "event.parent_node_execution_id.execution_id.org", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "event.parent_node_execution_id.execution_id.org", err) + } + + msg, err := client.CreateTaskEvent(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + var ( filter_AdminService_GetTaskExecution_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "node_execution_id": 1, "execution_id": 2, "project": 3, "domain": 4, "name": 5, "node_id": 6, "task_id": 7, "version": 8, "retry_attempt": 9}, Base: []int{1, 20, 1, 1, 1, 4, 3, 2, 7, 5, 3, 0, 0, 0, 9, 6, 0, 15, 9, 0, 17, 12, 0, 19, 15, 0, 19, 18, 0, 20, 0}, Check: []int{0, 1, 2, 3, 4, 2, 6, 7, 2, 9, 10, 5, 8, 11, 2, 15, 16, 2, 18, 19, 2, 21, 22, 2, 24, 25, 2, 27, 28, 2, 30}} ) @@ -5086,14 +5534,52 @@ var ( filter_AdminService_ListMatchableAttributes_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} ) -func request_AdminService_ListMatchableAttributes_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq admin.ListMatchableAttributesRequest - var metadata runtime.ServerMetadata +func request_AdminService_ListMatchableAttributes_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.ListMatchableAttributesRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListMatchableAttributes_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ListMatchableAttributes(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +var ( + filter_AdminService_ListMatchableAttributes_1 = &utilities.DoubleArray{Encoding: map[string]int{"org": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_AdminService_ListMatchableAttributes_1(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.ListMatchableAttributesRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["org"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "org") + } + + protoReq.Org, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "org", err) + } if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListMatchableAttributes_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AdminService_ListMatchableAttributes_1); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -6226,6 +6712,26 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu }) + mux.Handle("POST", pattern_AdminService_CreateTask_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_CreateTask_1(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_CreateTask_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_AdminService_GetTask_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -6406,6 +6912,26 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu }) + mux.Handle("POST", pattern_AdminService_CreateWorkflow_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_CreateWorkflow_1(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_CreateWorkflow_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_AdminService_GetWorkflow_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -6586,6 +7112,26 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu }) + mux.Handle("POST", pattern_AdminService_CreateLaunchPlan_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_CreateLaunchPlan_1(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_CreateLaunchPlan_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_AdminService_GetLaunchPlan_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -6686,6 +7232,26 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu }) + mux.Handle("GET", pattern_AdminService_ListActiveLaunchPlans_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_ListActiveLaunchPlans_1(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_ListActiveLaunchPlans_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_AdminService_ListLaunchPlanIds_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -6866,6 +7432,26 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu }) + mux.Handle("PUT", pattern_AdminService_CreateExecution_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_CreateExecution_1(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_CreateExecution_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("POST", pattern_AdminService_RelaunchExecution_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -6886,6 +7472,26 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu }) + mux.Handle("POST", pattern_AdminService_RelaunchExecution_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_RelaunchExecution_1(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_RelaunchExecution_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("POST", pattern_AdminService_RecoverExecution_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -6906,6 +7512,26 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu }) + mux.Handle("POST", pattern_AdminService_RecoverExecution_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_RecoverExecution_1(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_RecoverExecution_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_AdminService_GetExecution_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -7286,6 +7912,26 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu }) + mux.Handle("POST", pattern_AdminService_RegisterProject_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_RegisterProject_1(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_RegisterProject_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("PUT", pattern_AdminService_UpdateProject_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -7346,6 +7992,26 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu }) + mux.Handle("GET", pattern_AdminService_ListProjects_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_ListProjects_1(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_ListProjects_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("POST", pattern_AdminService_CreateWorkflowEvent_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -7366,6 +8032,26 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu }) + mux.Handle("POST", pattern_AdminService_CreateWorkflowEvent_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_CreateWorkflowEvent_1(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_CreateWorkflowEvent_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("POST", pattern_AdminService_CreateNodeEvent_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -7386,6 +8072,26 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu }) + mux.Handle("POST", pattern_AdminService_CreateNodeEvent_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_CreateNodeEvent_1(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_CreateNodeEvent_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("POST", pattern_AdminService_CreateTaskEvent_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -7406,6 +8112,26 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu }) + mux.Handle("POST", pattern_AdminService_CreateTaskEvent_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_CreateTaskEvent_1(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_CreateTaskEvent_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_AdminService_GetTaskExecution_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -7906,6 +8632,26 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu }) + mux.Handle("GET", pattern_AdminService_ListMatchableAttributes_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_ListMatchableAttributes_1(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_ListMatchableAttributes_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_AdminService_ListNamedEntities_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -8212,6 +8958,8 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu var ( pattern_AdminService_CreateTask_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"api", "v1", "tasks"}, "")) + pattern_AdminService_CreateTask_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"api", "v1", "tasks", "org", "id.org"}, "")) + pattern_AdminService_GetTask_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6}, []string{"api", "v1", "tasks", "id.project", "id.domain", "id.name", "id.version"}, "")) pattern_AdminService_GetTask_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8}, []string{"api", "v1", "tasks", "org", "id.org", "id.project", "id.domain", "id.name", "id.version"}, "")) @@ -8230,6 +8978,8 @@ var ( pattern_AdminService_CreateWorkflow_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"api", "v1", "workflows"}, "")) + pattern_AdminService_CreateWorkflow_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"api", "v1", "workflows", "org", "id.org"}, "")) + pattern_AdminService_GetWorkflow_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6}, []string{"api", "v1", "workflows", "id.project", "id.domain", "id.name", "id.version"}, "")) pattern_AdminService_GetWorkflow_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8}, []string{"api", "v1", "workflows", "org", "id.org", "id.project", "id.domain", "id.name", "id.version"}, "")) @@ -8248,6 +8998,8 @@ var ( pattern_AdminService_CreateLaunchPlan_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"api", "v1", "launch_plans"}, "")) + pattern_AdminService_CreateLaunchPlan_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"api", "v1", "launch_plans", "org", "id.org"}, "")) + pattern_AdminService_GetLaunchPlan_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6}, []string{"api", "v1", "launch_plans", "id.project", "id.domain", "id.name", "id.version"}, "")) pattern_AdminService_GetLaunchPlan_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8}, []string{"api", "v1", "launch_plans", "org", "id.org", "id.project", "id.domain", "id.name", "id.version"}, "")) @@ -8258,6 +9010,8 @@ var ( pattern_AdminService_ListActiveLaunchPlans_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{"api", "v1", "active_launch_plans", "project", "domain"}, "")) + pattern_AdminService_ListActiveLaunchPlans_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"api", "v1", "active_launch_plans", "org", "project", "domain"}, "")) + pattern_AdminService_ListLaunchPlanIds_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{"api", "v1", "launch_plan_ids", "project", "domain"}, "")) pattern_AdminService_ListLaunchPlanIds_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"api", "v1", "launch_plan_ids", "org", "project", "domain"}, "")) @@ -8276,10 +9030,16 @@ var ( pattern_AdminService_CreateExecution_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"api", "v1", "executions"}, "")) + pattern_AdminService_CreateExecution_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 3}, []string{"api", "v1", "executions", "org"}, "")) + pattern_AdminService_RelaunchExecution_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"api", "v1", "executions", "relaunch"}, "")) + pattern_AdminService_RelaunchExecution_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{"api", "v1", "executions", "org", "id.org", "relaunch"}, "")) + pattern_AdminService_RecoverExecution_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"api", "v1", "executions", "recover"}, "")) + pattern_AdminService_RecoverExecution_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{"api", "v1", "executions", "org", "id.org", "recover"}, "")) + pattern_AdminService_GetExecution_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"api", "v1", "executions", "id.project", "id.domain", "id.name"}, "")) pattern_AdminService_GetExecution_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7}, []string{"api", "v1", "executions", "org", "id.org", "id.project", "id.domain", "id.name"}, "")) @@ -8298,7 +9058,7 @@ var ( pattern_AdminService_TerminateExecution_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"api", "v1", "executions", "id.project", "id.domain", "id.name"}, "")) - pattern_AdminService_TerminateExecution_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8}, []string{"api", "v1", "data", "executions", "org", "id.org", "id.project", "id.domain", "id.name"}, "")) + pattern_AdminService_TerminateExecution_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7}, []string{"api", "v1", "executions", "org", "id.org", "id.project", "id.domain", "id.name"}, "")) pattern_AdminService_GetNodeExecution_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6}, []string{"api", "v1", "node_executions", "id.execution_id.project", "id.execution_id.domain", "id.execution_id.name", "id.node_id"}, "")) @@ -8318,18 +9078,28 @@ var ( pattern_AdminService_RegisterProject_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"api", "v1", "projects"}, "")) + pattern_AdminService_RegisterProject_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"api", "v1", "projects", "org", "project.org"}, "")) + pattern_AdminService_UpdateProject_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"api", "v1", "projects", "id"}, "")) pattern_AdminService_UpdateProject_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{"api", "v1", "projects", "org", "id"}, "")) pattern_AdminService_ListProjects_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"api", "v1", "projects"}, "")) + pattern_AdminService_ListProjects_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 3}, []string{"api", "v1", "projects", "org"}, "")) + pattern_AdminService_CreateWorkflowEvent_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"api", "v1", "events", "workflows"}, "")) + pattern_AdminService_CreateWorkflowEvent_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{"api", "v1", "events", "org", "event.execution_id.org", "workflows"}, "")) + pattern_AdminService_CreateNodeEvent_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"api", "v1", "events", "nodes"}, "")) + pattern_AdminService_CreateNodeEvent_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{"api", "v1", "events", "org", "event.id.execution_id.org", "nodes"}, "")) + pattern_AdminService_CreateTaskEvent_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"api", "v1", "events", "tasks"}, "")) + pattern_AdminService_CreateTaskEvent_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{"api", "v1", "events", "org", "event.parent_node_execution_id.execution_id.org", "tasks"}, "")) + pattern_AdminService_GetTaskExecution_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8, 1, 0, 4, 1, 5, 9, 1, 0, 4, 1, 5, 10, 1, 0, 4, 1, 5, 11}, []string{"api", "v1", "task_executions", "id.node_execution_id.execution_id.project", "id.node_execution_id.execution_id.domain", "id.node_execution_id.execution_id.name", "id.node_execution_id.node_id", "id.task_id.project", "id.task_id.domain", "id.task_id.name", "id.task_id.version", "id.retry_attempt"}, "")) pattern_AdminService_GetTaskExecution_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8, 1, 0, 4, 1, 5, 9, 1, 0, 4, 1, 5, 10, 1, 0, 4, 1, 5, 11, 1, 0, 4, 1, 5, 12, 1, 0, 4, 1, 5, 13}, []string{"api", "v1", "task_executions", "org", "id.node_execution_id.execution_id.org", "id.node_execution_id.execution_id.project", "id.node_execution_id.execution_id.domain", "id.node_execution_id.execution_id.name", "id.node_execution_id.node_id", "id.task_id.project", "id.task_id.domain", "id.task_id.name", "id.task_id.version", "id.retry_attempt"}, "")) @@ -8380,6 +9150,8 @@ var ( pattern_AdminService_ListMatchableAttributes_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"api", "v1", "matchable_attributes"}, "")) + pattern_AdminService_ListMatchableAttributes_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 3}, []string{"api", "v1", "matchable_attributes", "org"}, "")) + pattern_AdminService_ListNamedEntities_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"api", "v1", "named_entities", "resource_type", "project", "domain"}, "")) pattern_AdminService_ListNamedEntities_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6}, []string{"api", "v1", "named_entities", "resource_type", "org", "project", "domain"}, "")) @@ -8414,6 +9186,8 @@ var ( var ( forward_AdminService_CreateTask_0 = runtime.ForwardResponseMessage + forward_AdminService_CreateTask_1 = runtime.ForwardResponseMessage + forward_AdminService_GetTask_0 = runtime.ForwardResponseMessage forward_AdminService_GetTask_1 = runtime.ForwardResponseMessage @@ -8432,6 +9206,8 @@ var ( forward_AdminService_CreateWorkflow_0 = runtime.ForwardResponseMessage + forward_AdminService_CreateWorkflow_1 = runtime.ForwardResponseMessage + forward_AdminService_GetWorkflow_0 = runtime.ForwardResponseMessage forward_AdminService_GetWorkflow_1 = runtime.ForwardResponseMessage @@ -8450,6 +9226,8 @@ var ( forward_AdminService_CreateLaunchPlan_0 = runtime.ForwardResponseMessage + forward_AdminService_CreateLaunchPlan_1 = runtime.ForwardResponseMessage + forward_AdminService_GetLaunchPlan_0 = runtime.ForwardResponseMessage forward_AdminService_GetLaunchPlan_1 = runtime.ForwardResponseMessage @@ -8460,6 +9238,8 @@ var ( forward_AdminService_ListActiveLaunchPlans_0 = runtime.ForwardResponseMessage + forward_AdminService_ListActiveLaunchPlans_1 = runtime.ForwardResponseMessage + forward_AdminService_ListLaunchPlanIds_0 = runtime.ForwardResponseMessage forward_AdminService_ListLaunchPlanIds_1 = runtime.ForwardResponseMessage @@ -8478,10 +9258,16 @@ var ( forward_AdminService_CreateExecution_0 = runtime.ForwardResponseMessage + forward_AdminService_CreateExecution_1 = runtime.ForwardResponseMessage + forward_AdminService_RelaunchExecution_0 = runtime.ForwardResponseMessage + forward_AdminService_RelaunchExecution_1 = runtime.ForwardResponseMessage + forward_AdminService_RecoverExecution_0 = runtime.ForwardResponseMessage + forward_AdminService_RecoverExecution_1 = runtime.ForwardResponseMessage + forward_AdminService_GetExecution_0 = runtime.ForwardResponseMessage forward_AdminService_GetExecution_1 = runtime.ForwardResponseMessage @@ -8520,18 +9306,28 @@ var ( forward_AdminService_RegisterProject_0 = runtime.ForwardResponseMessage + forward_AdminService_RegisterProject_1 = runtime.ForwardResponseMessage + forward_AdminService_UpdateProject_0 = runtime.ForwardResponseMessage forward_AdminService_UpdateProject_1 = runtime.ForwardResponseMessage forward_AdminService_ListProjects_0 = runtime.ForwardResponseMessage + forward_AdminService_ListProjects_1 = runtime.ForwardResponseMessage + forward_AdminService_CreateWorkflowEvent_0 = runtime.ForwardResponseMessage + forward_AdminService_CreateWorkflowEvent_1 = runtime.ForwardResponseMessage + forward_AdminService_CreateNodeEvent_0 = runtime.ForwardResponseMessage + forward_AdminService_CreateNodeEvent_1 = runtime.ForwardResponseMessage + forward_AdminService_CreateTaskEvent_0 = runtime.ForwardResponseMessage + forward_AdminService_CreateTaskEvent_1 = runtime.ForwardResponseMessage + forward_AdminService_GetTaskExecution_0 = runtime.ForwardResponseMessage forward_AdminService_GetTaskExecution_1 = runtime.ForwardResponseMessage @@ -8582,6 +9378,8 @@ var ( forward_AdminService_ListMatchableAttributes_0 = runtime.ForwardResponseMessage + forward_AdminService_ListMatchableAttributes_1 = runtime.ForwardResponseMessage + forward_AdminService_ListNamedEntities_0 = runtime.ForwardResponseMessage forward_AdminService_ListNamedEntities_1 = runtime.ForwardResponseMessage diff --git a/flyteidl/gen/pb-go/flyteidl/service/admin.swagger.json b/flyteidl/gen/pb-go/flyteidl/service/admin.swagger.json index 2d8da7eabf..e3661ae4f5 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/admin.swagger.json +++ b/flyteidl/gen/pb-go/flyteidl/service/admin.swagger.json @@ -62,6 +62,80 @@ ] } }, + "/api/v1/active_launch_plans/org/{org}/{project}/{domain}": { + "get": { + "summary": "List active versions of :ref:`ref_flyteidl.admin.LaunchPlan`.", + "operationId": "ListActiveLaunchPlans2", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminLaunchPlanList" + } + } + }, + "parameters": [ + { + "name": "org", + "description": "Optional, org key applied to the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "project", + "description": "Name of the project that contains the identifiers.\n+required.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "domain", + "description": "Name of the domain the identifiers belongs to within the project.\n+required.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "limit", + "description": "Indicates the number of resources to be returned.\n+required.", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "token", + "description": "In the case of multiple pages of results, the server-provided token can be used to fetch the next page\nin a query.\n+optional.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sort_by.key", + "description": "Indicates an attribute to sort the response values.\n+required.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sort_by.direction", + "description": "Indicates the direction to apply sort key for response values.\n+optional.\n\n - DESCENDING: By default, fields are sorted in descending order.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "DESCENDING", + "ASCENDING" + ], + "default": "DESCENDING" + } + ], + "tags": [ + "AdminService" + ] + } + }, "/api/v1/active_launch_plans/{id.project}/{id.domain}/{id.name}": { "get": { "summary": "Fetch the active version of a :ref:`ref_flyteidl.admin.LaunchPlan`.", @@ -530,59 +604,6 @@ "tags": [ "AdminService" ] - }, - "delete": { - "summary": "Terminates an in-progress :ref:`ref_flyteidl.admin.Execution`.", - "operationId": "TerminateExecution2", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/adminExecutionTerminateResponse" - } - } - }, - "parameters": [ - { - "name": "id.org", - "description": "Optional, org key applied to the resource.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "id.project", - "description": "Name of the project the resource belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "id.domain", - "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "id.name", - "description": "User or system provided value for the resource.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/adminExecutionTerminateRequest" - } - } - ], - "tags": [ - "AdminService" - ] } }, "/api/v1/data/executions/{id.project}/{id.domain}/{id.name}": { @@ -1529,6 +1550,108 @@ ] } }, + "/api/v1/events/org/{event.execution_id.org}/workflows": { + "post": { + "summary": "Indicates a :ref:`ref_flyteidl.event.WorkflowExecutionEvent` has occurred.", + "operationId": "CreateWorkflowEvent2", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminWorkflowExecutionEventResponse" + } + } + }, + "parameters": [ + { + "name": "event.execution_id.org", + "description": "Optional, org key applied to the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/adminWorkflowExecutionEventRequest" + } + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/events/org/{event.id.execution_id.org}/nodes": { + "post": { + "summary": "Indicates a :ref:`ref_flyteidl.event.NodeExecutionEvent` has occurred.", + "operationId": "CreateNodeEvent2", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminNodeExecutionEventResponse" + } + } + }, + "parameters": [ + { + "name": "event.id.execution_id.org", + "description": "Optional, org key applied to the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/adminNodeExecutionEventRequest" + } + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/events/org/{event.parent_node_execution_id.execution_id.org}/tasks": { + "post": { + "summary": "Indicates a :ref:`ref_flyteidl.event.TaskExecutionEvent` has occurred.", + "operationId": "CreateTaskEvent2", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminTaskExecutionEventResponse" + } + } + }, + "parameters": [ + { + "name": "event.parent_node_execution_id.execution_id.org", + "description": "Optional, org key applied to the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/adminTaskExecutionEventRequest" + } + } + ], + "tags": [ + "AdminService" + ] + } + }, "/api/v1/events/tasks": { "post": { "summary": "Indicates a :ref:`ref_flyteidl.event.TaskExecutionEvent` has occurred.", @@ -1610,6 +1733,74 @@ ] } }, + "/api/v1/executions/org/{id.org}/recover": { + "post": { + "summary": "Recreates a previously-run workflow execution that will only start executing from the last known failure point.\nIn Recover mode, users cannot change any input parameters or update the version of the execution.\nThis is extremely useful to recover from system errors and byzantine faults like - Loss of K8s cluster, bugs in platform or instability, machine failures,\ndownstream system failures (downstream services), or simply to recover executions that failed because of retry exhaustion and should complete if tried again.\nSee :ref:`ref_flyteidl.admin.ExecutionRecoverRequest` for more details.", + "operationId": "RecoverExecution2", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminExecutionCreateResponse" + } + } + }, + "parameters": [ + { + "name": "id.org", + "description": "Optional, org key applied to the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/adminExecutionRecoverRequest" + } + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/executions/org/{id.org}/relaunch": { + "post": { + "summary": "Triggers the creation of an identical :ref:`ref_flyteidl.admin.Execution`", + "operationId": "RelaunchExecution2", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminExecutionCreateResponse" + } + } + }, + "parameters": [ + { + "name": "id.org", + "description": "Optional, org key applied to the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/adminExecutionRelaunchRequest" + } + } + ], + "tags": [ + "AdminService" + ] + } + }, "/api/v1/executions/org/{id.org}/{id.project}/{id.domain}": { "get": { "summary": "Fetch a list of :ref:`ref_flyteidl.admin.Execution`.", @@ -1744,6 +1935,59 @@ "AdminService" ] }, + "delete": { + "summary": "Terminates an in-progress :ref:`ref_flyteidl.admin.Execution`.", + "operationId": "TerminateExecution2", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminExecutionTerminateResponse" + } + } + }, + "parameters": [ + { + "name": "id.org", + "description": "Optional, org key applied to the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.project", + "description": "Name of the project the resource belongs to.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.domain", + "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id.name", + "description": "User or system provided value for the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/adminExecutionTerminateRequest" + } + } + ], + "tags": [ + "AdminService" + ] + }, "put": { "summary": "Update execution belonging to project domain :ref:`ref_flyteidl.admin.Execution`.", "operationId": "UpdateExecution2", @@ -1778,8 +2022,42 @@ "type": "string" }, { - "name": "id.name", - "description": "User or system provided value for the resource.", + "name": "id.name", + "description": "User or system provided value for the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/adminExecutionUpdateRequest" + } + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/executions/org/{org}": { + "put": { + "summary": "Triggers the creation of a :ref:`ref_flyteidl.admin.Execution`", + "operationId": "CreateExecution2", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminExecutionCreateResponse" + } + } + }, + "parameters": [ + { + "name": "org", + "description": "Optional, org key applied to the resource.", "in": "path", "required": true, "type": "string" @@ -1789,7 +2067,7 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/adminExecutionUpdateRequest" + "$ref": "#/definitions/adminExecutionCreateRequest" } } ], @@ -2268,6 +2546,40 @@ ] } }, + "/api/v1/launch_plans/org/{id.org}": { + "post": { + "summary": "Create and upload a :ref:`ref_flyteidl.admin.LaunchPlan` definition", + "operationId": "CreateLaunchPlan2", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminLaunchPlanCreateResponse" + } + } + }, + "parameters": [ + { + "name": "id.org", + "description": "Optional, org key applied to the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/adminLaunchPlanCreateRequest" + } + } + ], + "tags": [ + "AdminService" + ] + } + }, "/api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}": { "get": { "summary": "Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions.", @@ -2876,6 +3188,57 @@ } }, "parameters": [ + { + "name": "resource_type", + "description": "+required.\n\n - TASK_RESOURCE: Applies to customizable task resource requests and limits.\n - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources.\n - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment.\n - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run\n - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec.\n - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type.\n - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides.\n - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "TASK_RESOURCE", + "CLUSTER_RESOURCE", + "EXECUTION_QUEUE", + "EXECUTION_CLUSTER_LABEL", + "QUALITY_OF_SERVICE_SPECIFICATION", + "PLUGIN_OVERRIDE", + "WORKFLOW_EXECUTION_CONFIG", + "CLUSTER_ASSIGNMENT" + ], + "default": "TASK_RESOURCE" + }, + { + "name": "org", + "description": "Optional, org filter applied to list project requests.", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/api/v1/matchable_attributes/org/{org}": { + "get": { + "summary": "Lists custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a specific resource type.", + "operationId": "ListMatchableAttributes2", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminListMatchableAttributesResponse" + } + } + }, + "parameters": [ + { + "name": "org", + "description": "Optional, org filter applied to list project requests.", + "in": "path", + "required": true, + "type": "string" + }, { "name": "resource_type", "description": "+required.\n\n - TASK_RESOURCE: Applies to customizable task resource requests and limits.\n - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources.\n - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment.\n - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run\n - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec.\n - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type.\n - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides.\n - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run.", @@ -4334,6 +4697,13 @@ "ASCENDING" ], "default": "DESCENDING" + }, + { + "name": "org", + "description": "Optional, org filter applied to list project requests.", + "in": "query", + "required": false, + "type": "string" } ], "tags": [ @@ -4366,6 +4736,73 @@ ] } }, + "/api/v1/projects/org/{org}": { + "get": { + "summary": "Fetches a list of :ref:`ref_flyteidl.admin.Project`", + "operationId": "ListProjects2", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminProjects" + } + } + }, + "parameters": [ + { + "name": "org", + "description": "Optional, org filter applied to list project requests.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "limit", + "description": "Indicates the number of projects to be returned.\n+required.", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "token", + "description": "In the case of multiple pages of results, this server-provided token can be used to fetch the next page\nin a query.\n+optional.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "filters", + "description": "Indicates a list of filters passed as string.\nMore info on constructing filters : \u003cLink\u003e\n+optional.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sort_by.key", + "description": "Indicates an attribute to sort the response values.\n+required.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sort_by.direction", + "description": "Indicates the direction to apply sort key for response values.\n+optional.\n\n - DESCENDING: By default, fields are sorted in descending order.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "DESCENDING", + "ASCENDING" + ], + "default": "DESCENDING" + } + ], + "tags": [ + "AdminService" + ] + } + }, "/api/v1/projects/org/{org}/{id}": { "put": { "summary": "Updates an existing :ref:`ref_flyteidl.admin.Project`\nflyteidl.admin.Project should be passed but the domains property should be empty;\nit will be ignored in the handler as domains cannot be updated via this API.", @@ -4407,6 +4844,40 @@ ] } }, + "/api/v1/projects/org/{project.org}": { + "post": { + "summary": "Registers a :ref:`ref_flyteidl.admin.Project` with the Flyte deployment.", + "operationId": "RegisterProject2", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminProjectRegisterResponse" + } + } + }, + "parameters": [ + { + "name": "project.org", + "description": "Optional, org key applied to the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/adminProjectRegisterRequest" + } + } + ], + "tags": [ + "AdminService" + ] + } + }, "/api/v1/projects/{id}": { "put": { "summary": "Updates an existing :ref:`ref_flyteidl.admin.Project`\nflyteidl.admin.Project should be passed but the domains property should be empty;\nit will be ignored in the handler as domains cannot be updated via this API.", @@ -4957,6 +5428,40 @@ ] } }, + "/api/v1/tasks/org/{id.org}": { + "post": { + "summary": "Create and upload a :ref:`ref_flyteidl.admin.Task` definition", + "operationId": "CreateTask2", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/flyteidladminTaskCreateResponse" + } + } + }, + "parameters": [ + { + "name": "id.org", + "description": "Optional, org key applied to the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/flyteidladminTaskCreateRequest" + } + } + ], + "tags": [ + "AdminService" + ] + } + }, "/api/v1/tasks/org/{id.org}/{id.project}/{id.domain}": { "get": { "summary": "Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions.", @@ -5984,6 +6489,40 @@ ] } }, + "/api/v1/workflows/org/{id.org}": { + "post": { + "summary": "Create and upload a :ref:`ref_flyteidl.admin.Workflow` definition", + "operationId": "CreateWorkflow2", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminWorkflowCreateResponse" + } + } + }, + "parameters": [ + { + "name": "id.org", + "description": "Optional, org key applied to the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/adminWorkflowCreateRequest" + } + } + ], + "tags": [ + "AdminService" + ] + } + }, "/api/v1/workflows/org/{id.org}/{id.project}/{id.domain}": { "get": { "summary": "Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions.", diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/README.md b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/README.md index 11a3a648af..4809e080ec 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/README.md +++ b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/README.md @@ -22,12 +22,19 @@ All URIs are relative to *http://localhost* Class | Method | HTTP request | Description ------------ | ------------- | ------------- | ------------- *AdminServiceApi* | [**CreateExecution**](docs/AdminServiceApi.md#createexecution) | **Post** /api/v1/executions | Triggers the creation of a :ref:`ref_flyteidl.admin.Execution` +*AdminServiceApi* | [**CreateExecution2**](docs/AdminServiceApi.md#createexecution2) | **Put** /api/v1/executions/org/{org} | Triggers the creation of a :ref:`ref_flyteidl.admin.Execution` *AdminServiceApi* | [**CreateLaunchPlan**](docs/AdminServiceApi.md#createlaunchplan) | **Post** /api/v1/launch_plans | Create and upload a :ref:`ref_flyteidl.admin.LaunchPlan` definition +*AdminServiceApi* | [**CreateLaunchPlan2**](docs/AdminServiceApi.md#createlaunchplan2) | **Post** /api/v1/launch_plans/org/{id.org} | Create and upload a :ref:`ref_flyteidl.admin.LaunchPlan` definition *AdminServiceApi* | [**CreateNodeEvent**](docs/AdminServiceApi.md#createnodeevent) | **Post** /api/v1/events/nodes | Indicates a :ref:`ref_flyteidl.event.NodeExecutionEvent` has occurred. +*AdminServiceApi* | [**CreateNodeEvent2**](docs/AdminServiceApi.md#createnodeevent2) | **Post** /api/v1/events/org/{event.id.execution_id.org}/nodes | Indicates a :ref:`ref_flyteidl.event.NodeExecutionEvent` has occurred. *AdminServiceApi* | [**CreateTask**](docs/AdminServiceApi.md#createtask) | **Post** /api/v1/tasks | Create and upload a :ref:`ref_flyteidl.admin.Task` definition +*AdminServiceApi* | [**CreateTask2**](docs/AdminServiceApi.md#createtask2) | **Post** /api/v1/tasks/org/{id.org} | Create and upload a :ref:`ref_flyteidl.admin.Task` definition *AdminServiceApi* | [**CreateTaskEvent**](docs/AdminServiceApi.md#createtaskevent) | **Post** /api/v1/events/tasks | Indicates a :ref:`ref_flyteidl.event.TaskExecutionEvent` has occurred. +*AdminServiceApi* | [**CreateTaskEvent2**](docs/AdminServiceApi.md#createtaskevent2) | **Post** /api/v1/events/org/{event.parent_node_execution_id.execution_id.org}/tasks | Indicates a :ref:`ref_flyteidl.event.TaskExecutionEvent` has occurred. *AdminServiceApi* | [**CreateWorkflow**](docs/AdminServiceApi.md#createworkflow) | **Post** /api/v1/workflows | Create and upload a :ref:`ref_flyteidl.admin.Workflow` definition +*AdminServiceApi* | [**CreateWorkflow2**](docs/AdminServiceApi.md#createworkflow2) | **Post** /api/v1/workflows/org/{id.org} | Create and upload a :ref:`ref_flyteidl.admin.Workflow` definition *AdminServiceApi* | [**CreateWorkflowEvent**](docs/AdminServiceApi.md#createworkflowevent) | **Post** /api/v1/events/workflows | Indicates a :ref:`ref_flyteidl.event.WorkflowExecutionEvent` has occurred. +*AdminServiceApi* | [**CreateWorkflowEvent2**](docs/AdminServiceApi.md#createworkflowevent2) | **Post** /api/v1/events/org/{event.execution_id.org}/workflows | Indicates a :ref:`ref_flyteidl.event.WorkflowExecutionEvent` has occurred. *AdminServiceApi* | [**DeleteProjectAttributes**](docs/AdminServiceApi.md#deleteprojectattributes) | **Delete** /api/v1/project_attributes/{project} | Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. *AdminServiceApi* | [**DeleteProjectAttributes2**](docs/AdminServiceApi.md#deleteprojectattributes2) | **Delete** /api/v1/project_domain_attributes/org/{org}/{project} | Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. *AdminServiceApi* | [**DeleteProjectDomainAttributes**](docs/AdminServiceApi.md#deleteprojectdomainattributes) | **Delete** /api/v1/project_domain_attributes/{project}/{domain} | Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. @@ -68,6 +75,7 @@ Class | Method | HTTP request | Description *AdminServiceApi* | [**GetWorkflowAttributes**](docs/AdminServiceApi.md#getworkflowattributes) | **Get** /api/v1/workflow_attributes/{project}/{domain}/{workflow} | Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. *AdminServiceApi* | [**GetWorkflowAttributes2**](docs/AdminServiceApi.md#getworkflowattributes2) | **Get** /api/v1/workflow_attributes/org/{org}/{project}/{domain}/{workflow} | Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. *AdminServiceApi* | [**ListActiveLaunchPlans**](docs/AdminServiceApi.md#listactivelaunchplans) | **Get** /api/v1/active_launch_plans/{project}/{domain} | List active versions of :ref:`ref_flyteidl.admin.LaunchPlan`. +*AdminServiceApi* | [**ListActiveLaunchPlans2**](docs/AdminServiceApi.md#listactivelaunchplans2) | **Get** /api/v1/active_launch_plans/org/{org}/{project}/{domain} | List active versions of :ref:`ref_flyteidl.admin.LaunchPlan`. *AdminServiceApi* | [**ListDescriptionEntities**](docs/AdminServiceApi.md#listdescriptionentities) | **Get** /api/v1/description_entities/{resource_type}/{id.project}/{id.domain}/{id.name} | Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. *AdminServiceApi* | [**ListDescriptionEntities2**](docs/AdminServiceApi.md#listdescriptionentities2) | **Get** /api/v1/description_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain}/{id.name} | Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. *AdminServiceApi* | [**ListDescriptionEntities3**](docs/AdminServiceApi.md#listdescriptionentities3) | **Get** /api/v1/description_entities/{resource_type}/{id.project}/{id.domain} | Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. @@ -81,6 +89,7 @@ Class | Method | HTTP request | Description *AdminServiceApi* | [**ListLaunchPlans3**](docs/AdminServiceApi.md#listlaunchplans3) | **Get** /api/v1/launch_plans/{id.project}/{id.domain} | Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. *AdminServiceApi* | [**ListLaunchPlans4**](docs/AdminServiceApi.md#listlaunchplans4) | **Get** /api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain} | Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. *AdminServiceApi* | [**ListMatchableAttributes**](docs/AdminServiceApi.md#listmatchableattributes) | **Get** /api/v1/matchable_attributes | Lists custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a specific resource type. +*AdminServiceApi* | [**ListMatchableAttributes2**](docs/AdminServiceApi.md#listmatchableattributes2) | **Get** /api/v1/matchable_attributes/org/{org} | Lists custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a specific resource type. *AdminServiceApi* | [**ListNamedEntities**](docs/AdminServiceApi.md#listnamedentities) | **Get** /api/v1/named_entities/{resource_type}/{project}/{domain} | Returns a list of :ref:`ref_flyteidl.admin.NamedEntity` objects. *AdminServiceApi* | [**ListNamedEntities2**](docs/AdminServiceApi.md#listnamedentities2) | **Get** /api/v1/named_entities/{resource_type}/org/{org}/{project}/{domain} | Returns a list of :ref:`ref_flyteidl.admin.NamedEntity` objects. *AdminServiceApi* | [**ListNodeExecutions**](docs/AdminServiceApi.md#listnodeexecutions) | **Get** /api/v1/node_executions/{workflow_execution_id.project}/{workflow_execution_id.domain}/{workflow_execution_id.name} | Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution`. @@ -88,6 +97,7 @@ Class | Method | HTTP request | Description *AdminServiceApi* | [**ListNodeExecutionsForTask**](docs/AdminServiceApi.md#listnodeexecutionsfortask) | **Get** /api/v1/children/task_executions/{task_execution_id.node_execution_id.execution_id.project}/{task_execution_id.node_execution_id.execution_id.domain}/{task_execution_id.node_execution_id.execution_id.name}/{task_execution_id.node_execution_id.node_id}/{task_execution_id.task_id.project}/{task_execution_id.task_id.domain}/{task_execution_id.task_id.name}/{task_execution_id.task_id.version}/{task_execution_id.retry_attempt} | Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution` launched by the reference :ref:`ref_flyteidl.admin.TaskExecution`. *AdminServiceApi* | [**ListNodeExecutionsForTask2**](docs/AdminServiceApi.md#listnodeexecutionsfortask2) | **Get** /api/v1/children/task_executions/org/{task_execution_id.node_execution_id.execution_id.org}/{task_execution_id.node_execution_id.execution_id.project}/{task_execution_id.node_execution_id.execution_id.domain}/{task_execution_id.node_execution_id.execution_id.name}/{task_execution_id.node_execution_id.node_id}/{task_execution_id.task_id.project}/{task_execution_id.task_id.domain}/{task_execution_id.task_id.name}/{task_execution_id.task_id.version}/{task_execution_id.retry_attempt} | Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution` launched by the reference :ref:`ref_flyteidl.admin.TaskExecution`. *AdminServiceApi* | [**ListProjects**](docs/AdminServiceApi.md#listprojects) | **Get** /api/v1/projects | Fetches a list of :ref:`ref_flyteidl.admin.Project` +*AdminServiceApi* | [**ListProjects2**](docs/AdminServiceApi.md#listprojects2) | **Get** /api/v1/projects/org/{org} | Fetches a list of :ref:`ref_flyteidl.admin.Project` *AdminServiceApi* | [**ListTaskExecutions**](docs/AdminServiceApi.md#listtaskexecutions) | **Get** /api/v1/task_executions/{node_execution_id.execution_id.project}/{node_execution_id.execution_id.domain}/{node_execution_id.execution_id.name}/{node_execution_id.node_id} | Fetches a list of :ref:`ref_flyteidl.admin.TaskExecution`. *AdminServiceApi* | [**ListTaskExecutions2**](docs/AdminServiceApi.md#listtaskexecutions2) | **Get** /api/v1/task_executions/org/{node_execution_id.execution_id.org}/{node_execution_id.execution_id.project}/{node_execution_id.execution_id.domain}/{node_execution_id.execution_id.name}/{node_execution_id.node_id} | Fetches a list of :ref:`ref_flyteidl.admin.TaskExecution`. *AdminServiceApi* | [**ListTaskIds**](docs/AdminServiceApi.md#listtaskids) | **Get** /api/v1/task_ids/{project}/{domain} | Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of task objects. @@ -103,10 +113,13 @@ Class | Method | HTTP request | Description *AdminServiceApi* | [**ListWorkflows3**](docs/AdminServiceApi.md#listworkflows3) | **Get** /api/v1/workflows/{id.project}/{id.domain} | Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. *AdminServiceApi* | [**ListWorkflows4**](docs/AdminServiceApi.md#listworkflows4) | **Get** /api/v1/workflows/org/{id.org}/{id.project}/{id.domain} | Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. *AdminServiceApi* | [**RecoverExecution**](docs/AdminServiceApi.md#recoverexecution) | **Post** /api/v1/executions/recover | Recreates a previously-run workflow execution that will only start executing from the last known failure point. In Recover mode, users cannot change any input parameters or update the version of the execution. This is extremely useful to recover from system errors and byzantine faults like - Loss of K8s cluster, bugs in platform or instability, machine failures, downstream system failures (downstream services), or simply to recover executions that failed because of retry exhaustion and should complete if tried again. See :ref:`ref_flyteidl.admin.ExecutionRecoverRequest` for more details. +*AdminServiceApi* | [**RecoverExecution2**](docs/AdminServiceApi.md#recoverexecution2) | **Post** /api/v1/executions/org/{id.org}/recover | Recreates a previously-run workflow execution that will only start executing from the last known failure point. In Recover mode, users cannot change any input parameters or update the version of the execution. This is extremely useful to recover from system errors and byzantine faults like - Loss of K8s cluster, bugs in platform or instability, machine failures, downstream system failures (downstream services), or simply to recover executions that failed because of retry exhaustion and should complete if tried again. See :ref:`ref_flyteidl.admin.ExecutionRecoverRequest` for more details. *AdminServiceApi* | [**RegisterProject**](docs/AdminServiceApi.md#registerproject) | **Post** /api/v1/projects | Registers a :ref:`ref_flyteidl.admin.Project` with the Flyte deployment. +*AdminServiceApi* | [**RegisterProject2**](docs/AdminServiceApi.md#registerproject2) | **Post** /api/v1/projects/org/{project.org} | Registers a :ref:`ref_flyteidl.admin.Project` with the Flyte deployment. *AdminServiceApi* | [**RelaunchExecution**](docs/AdminServiceApi.md#relaunchexecution) | **Post** /api/v1/executions/relaunch | Triggers the creation of an identical :ref:`ref_flyteidl.admin.Execution` +*AdminServiceApi* | [**RelaunchExecution2**](docs/AdminServiceApi.md#relaunchexecution2) | **Post** /api/v1/executions/org/{id.org}/relaunch | Triggers the creation of an identical :ref:`ref_flyteidl.admin.Execution` *AdminServiceApi* | [**TerminateExecution**](docs/AdminServiceApi.md#terminateexecution) | **Delete** /api/v1/executions/{id.project}/{id.domain}/{id.name} | Terminates an in-progress :ref:`ref_flyteidl.admin.Execution`. -*AdminServiceApi* | [**TerminateExecution2**](docs/AdminServiceApi.md#terminateexecution2) | **Delete** /api/v1/data/executions/org/{id.org}/{id.project}/{id.domain}/{id.name} | Terminates an in-progress :ref:`ref_flyteidl.admin.Execution`. +*AdminServiceApi* | [**TerminateExecution2**](docs/AdminServiceApi.md#terminateexecution2) | **Delete** /api/v1/executions/org/{id.org}/{id.project}/{id.domain}/{id.name} | Terminates an in-progress :ref:`ref_flyteidl.admin.Execution`. *AdminServiceApi* | [**UpdateExecution**](docs/AdminServiceApi.md#updateexecution) | **Put** /api/v1/executions/{id.project}/{id.domain}/{id.name} | Update execution belonging to project domain :ref:`ref_flyteidl.admin.Execution`. *AdminServiceApi* | [**UpdateExecution2**](docs/AdminServiceApi.md#updateexecution2) | **Put** /api/v1/executions/org/{id.org}/{id.project}/{id.domain}/{id.name} | Update execution belonging to project domain :ref:`ref_flyteidl.admin.Execution`. *AdminServiceApi* | [**UpdateLaunchPlan**](docs/AdminServiceApi.md#updatelaunchplan) | **Put** /api/v1/launch_plans/{id.project}/{id.domain}/{id.name}/{id.version} | Updates the status of a registered :ref:`ref_flyteidl.admin.LaunchPlan`. diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api/swagger.yaml b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api/swagger.yaml index 3170fbe45f..3e787f292d 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api/swagger.yaml +++ b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api/swagger.yaml @@ -50,6 +50,73 @@ paths: description: "A successful response." schema: $ref: "#/definitions/adminLaunchPlan" + /api/v1/active_launch_plans/org/{org}/{project}/{domain}: + get: + tags: + - "AdminService" + summary: "List active versions of :ref:`ref_flyteidl.admin.LaunchPlan`." + operationId: "ListActiveLaunchPlans2" + parameters: + - name: "org" + in: "path" + description: "Optional, org key applied to the resource." + required: true + type: "string" + x-exportParamName: "Org" + - name: "project" + in: "path" + description: "Name of the project that contains the identifiers.\n+required." + required: true + type: "string" + x-exportParamName: "Project" + - name: "domain" + in: "path" + description: "Name of the domain the identifiers belongs to within the project.\n\ + +required." + required: true + type: "string" + x-exportParamName: "Domain" + - name: "limit" + in: "query" + description: "Indicates the number of resources to be returned.\n+required." + required: false + type: "integer" + format: "int64" + x-exportParamName: "Limit" + x-optionalDataType: "Int64" + - name: "token" + in: "query" + description: "In the case of multiple pages of results, the server-provided\ + \ token can be used to fetch the next page\nin a query.\n+optional." + required: false + type: "string" + x-exportParamName: "Token" + x-optionalDataType: "String" + - name: "sort_by.key" + in: "query" + description: "Indicates an attribute to sort the response values.\n+required." + required: false + type: "string" + x-exportParamName: "SortByKey" + x-optionalDataType: "String" + - name: "sort_by.direction" + in: "query" + description: "Indicates the direction to apply sort key for response values.\n\ + +optional.\n\n - DESCENDING: By default, fields are sorted in descending\ + \ order." + required: false + type: "string" + default: "DESCENDING" + enum: + - "DESCENDING" + - "ASCENDING" + x-exportParamName: "SortByDirection" + x-optionalDataType: "String" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminLaunchPlanList" /api/v1/active_launch_plans/{id.project}/{id.domain}/{id.name}: get: tags: @@ -486,48 +553,6 @@ paths: description: "A successful response." schema: $ref: "#/definitions/adminWorkflowExecutionGetDataResponse" - delete: - tags: - - "AdminService" - summary: "Terminates an in-progress :ref:`ref_flyteidl.admin.Execution`." - operationId: "TerminateExecution2" - parameters: - - name: "id.org" - in: "path" - description: "Optional, org key applied to the resource." - required: true - type: "string" - x-exportParamName: "IdOrg" - - name: "id.project" - in: "path" - description: "Name of the project the resource belongs to." - required: true - type: "string" - x-exportParamName: "IdProject" - - name: "id.domain" - in: "path" - description: "Name of the domain the resource belongs to.\nA domain can be\ - \ considered as a subset within a specific project." - required: true - type: "string" - x-exportParamName: "IdDomain" - - name: "id.name" - in: "path" - description: "User or system provided value for the resource." - required: true - type: "string" - x-exportParamName: "IdName" - - in: "body" - name: "body" - required: true - schema: - $ref: "#/definitions/adminExecutionTerminateRequest" - x-exportParamName: "Body" - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/adminExecutionTerminateResponse" /api/v1/data/executions/{id.project}/{id.domain}/{id.name}: get: tags: @@ -1371,6 +1396,78 @@ paths: description: "A successful response." schema: $ref: "#/definitions/adminNodeExecutionEventResponse" + /api/v1/events/org/{event.execution_id.org}/workflows: + post: + tags: + - "AdminService" + summary: "Indicates a :ref:`ref_flyteidl.event.WorkflowExecutionEvent` has occurred." + operationId: "CreateWorkflowEvent2" + parameters: + - name: "event.execution_id.org" + in: "path" + description: "Optional, org key applied to the resource." + required: true + type: "string" + x-exportParamName: "EventExecutionIdOrg" + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/adminWorkflowExecutionEventRequest" + x-exportParamName: "Body" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminWorkflowExecutionEventResponse" + /api/v1/events/org/{event.id.execution_id.org}/nodes: + post: + tags: + - "AdminService" + summary: "Indicates a :ref:`ref_flyteidl.event.NodeExecutionEvent` has occurred." + operationId: "CreateNodeEvent2" + parameters: + - name: "event.id.execution_id.org" + in: "path" + description: "Optional, org key applied to the resource." + required: true + type: "string" + x-exportParamName: "EventIdExecutionIdOrg" + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/adminNodeExecutionEventRequest" + x-exportParamName: "Body" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminNodeExecutionEventResponse" + /api/v1/events/org/{event.parent_node_execution_id.execution_id.org}/tasks: + post: + tags: + - "AdminService" + summary: "Indicates a :ref:`ref_flyteidl.event.TaskExecutionEvent` has occurred." + operationId: "CreateTaskEvent2" + parameters: + - name: "event.parent_node_execution_id.execution_id.org" + in: "path" + description: "Optional, org key applied to the resource." + required: true + type: "string" + x-exportParamName: "EventParentNodeExecutionIdExecutionIdOrg" + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/adminTaskExecutionEventRequest" + x-exportParamName: "Body" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminTaskExecutionEventResponse" /api/v1/events/tasks: post: tags: @@ -1425,6 +1522,61 @@ paths: description: "A successful response." schema: $ref: "#/definitions/adminExecutionCreateResponse" + /api/v1/executions/org/{id.org}/recover: + post: + tags: + - "AdminService" + summary: "Recreates a previously-run workflow execution that will only start\ + \ executing from the last known failure point.\nIn Recover mode, users cannot\ + \ change any input parameters or update the version of the execution.\nThis\ + \ is extremely useful to recover from system errors and byzantine faults like\ + \ - Loss of K8s cluster, bugs in platform or instability, machine failures,\n\ + downstream system failures (downstream services), or simply to recover executions\ + \ that failed because of retry exhaustion and should complete if tried again.\n\ + See :ref:`ref_flyteidl.admin.ExecutionRecoverRequest` for more details." + operationId: "RecoverExecution2" + parameters: + - name: "id.org" + in: "path" + description: "Optional, org key applied to the resource." + required: true + type: "string" + x-exportParamName: "IdOrg" + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/adminExecutionRecoverRequest" + x-exportParamName: "Body" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminExecutionCreateResponse" + /api/v1/executions/org/{id.org}/relaunch: + post: + tags: + - "AdminService" + summary: "Triggers the creation of an identical :ref:`ref_flyteidl.admin.Execution`" + operationId: "RelaunchExecution2" + parameters: + - name: "id.org" + in: "path" + description: "Optional, org key applied to the resource." + required: true + type: "string" + x-exportParamName: "IdOrg" + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/adminExecutionRelaunchRequest" + x-exportParamName: "Body" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminExecutionCreateResponse" /api/v1/executions/org/{id.org}/{id.project}/{id.domain}: get: tags: @@ -1588,6 +1740,72 @@ paths: description: "A successful response." schema: $ref: "#/definitions/adminExecutionUpdateResponse" + delete: + tags: + - "AdminService" + summary: "Terminates an in-progress :ref:`ref_flyteidl.admin.Execution`." + operationId: "TerminateExecution2" + parameters: + - name: "id.org" + in: "path" + description: "Optional, org key applied to the resource." + required: true + type: "string" + x-exportParamName: "IdOrg" + - name: "id.project" + in: "path" + description: "Name of the project the resource belongs to." + required: true + type: "string" + x-exportParamName: "IdProject" + - name: "id.domain" + in: "path" + description: "Name of the domain the resource belongs to.\nA domain can be\ + \ considered as a subset within a specific project." + required: true + type: "string" + x-exportParamName: "IdDomain" + - name: "id.name" + in: "path" + description: "User or system provided value for the resource." + required: true + type: "string" + x-exportParamName: "IdName" + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/adminExecutionTerminateRequest" + x-exportParamName: "Body" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminExecutionTerminateResponse" + /api/v1/executions/org/{org}: + put: + tags: + - "AdminService" + summary: "Triggers the creation of a :ref:`ref_flyteidl.admin.Execution`" + operationId: "CreateExecution2" + parameters: + - name: "org" + in: "path" + description: "Optional, org key applied to the resource." + required: true + type: "string" + x-exportParamName: "Org" + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/adminExecutionCreateRequest" + x-exportParamName: "Body" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminExecutionCreateResponse" /api/v1/executions/recover: post: tags: @@ -1995,6 +2213,30 @@ paths: description: "A successful response." schema: $ref: "#/definitions/adminLaunchPlanCreateResponse" + /api/v1/launch_plans/org/{id.org}: + post: + tags: + - "AdminService" + summary: "Create and upload a :ref:`ref_flyteidl.admin.LaunchPlan` definition" + operationId: "CreateLaunchPlan2" + parameters: + - name: "id.org" + in: "path" + description: "Optional, org key applied to the resource." + required: true + type: "string" + x-exportParamName: "IdOrg" + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/adminLaunchPlanCreateRequest" + x-exportParamName: "Body" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminLaunchPlanCreateResponse" /api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}: get: tags: @@ -2550,6 +2792,59 @@ paths: \ for a specific resource type." operationId: "ListMatchableAttributes" parameters: + - name: "resource_type" + in: "query" + description: "+required.\n\n - TASK_RESOURCE: Applies to customizable task\ + \ resource requests and limits.\n - CLUSTER_RESOURCE: Applies to configuring\ + \ templated kubernetes cluster resources.\n - EXECUTION_QUEUE: Configures\ + \ task and dynamic task execution queue assignment.\n - EXECUTION_CLUSTER_LABEL:\ + \ Configures the K8s cluster label to be used for execution to be run\n\ + \ - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service\ + \ when undefined in an execution spec.\n - PLUGIN_OVERRIDE: Selects configurable\ + \ plugin implementation behavior for a given task type.\n - WORKFLOW_EXECUTION_CONFIG:\ + \ Adds defaults for customizable workflow-execution specifications and overrides.\n\ + \ - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which\ + \ this execution should run." + required: false + type: "string" + default: "TASK_RESOURCE" + enum: + - "TASK_RESOURCE" + - "CLUSTER_RESOURCE" + - "EXECUTION_QUEUE" + - "EXECUTION_CLUSTER_LABEL" + - "QUALITY_OF_SERVICE_SPECIFICATION" + - "PLUGIN_OVERRIDE" + - "WORKFLOW_EXECUTION_CONFIG" + - "CLUSTER_ASSIGNMENT" + x-exportParamName: "ResourceType" + x-optionalDataType: "String" + - name: "org" + in: "query" + description: "Optional, org filter applied to list project requests." + required: false + type: "string" + x-exportParamName: "Org" + x-optionalDataType: "String" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminListMatchableAttributesResponse" + /api/v1/matchable_attributes/org/{org}: + get: + tags: + - "AdminService" + summary: "Lists custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration`\ + \ for a specific resource type." + operationId: "ListMatchableAttributes2" + parameters: + - name: "org" + in: "path" + description: "Optional, org filter applied to list project requests." + required: true + type: "string" + x-exportParamName: "Org" - name: "resource_type" in: "query" description: "+required.\n\n - TASK_RESOURCE: Applies to customizable task\ @@ -3850,6 +4145,13 @@ paths: - "ASCENDING" x-exportParamName: "SortByDirection" x-optionalDataType: "String" + - name: "org" + in: "query" + description: "Optional, org filter applied to list project requests." + required: false + type: "string" + x-exportParamName: "Org" + x-optionalDataType: "String" responses: 200: description: "A successful response." @@ -3872,6 +4174,68 @@ paths: description: "A successful response." schema: $ref: "#/definitions/adminProjectRegisterResponse" + /api/v1/projects/org/{org}: + get: + tags: + - "AdminService" + summary: "Fetches a list of :ref:`ref_flyteidl.admin.Project`" + operationId: "ListProjects2" + parameters: + - name: "org" + in: "path" + description: "Optional, org filter applied to list project requests." + required: true + type: "string" + x-exportParamName: "Org" + - name: "limit" + in: "query" + description: "Indicates the number of projects to be returned.\n+required." + required: false + type: "integer" + format: "int64" + x-exportParamName: "Limit" + x-optionalDataType: "Int64" + - name: "token" + in: "query" + description: "In the case of multiple pages of results, this server-provided\ + \ token can be used to fetch the next page\nin a query.\n+optional." + required: false + type: "string" + x-exportParamName: "Token" + x-optionalDataType: "String" + - name: "filters" + in: "query" + description: "Indicates a list of filters passed as string.\nMore info on\ + \ constructing filters : \n+optional." + required: false + type: "string" + x-exportParamName: "Filters" + x-optionalDataType: "String" + - name: "sort_by.key" + in: "query" + description: "Indicates an attribute to sort the response values.\n+required." + required: false + type: "string" + x-exportParamName: "SortByKey" + x-optionalDataType: "String" + - name: "sort_by.direction" + in: "query" + description: "Indicates the direction to apply sort key for response values.\n\ + +optional.\n\n - DESCENDING: By default, fields are sorted in descending\ + \ order." + required: false + type: "string" + default: "DESCENDING" + enum: + - "DESCENDING" + - "ASCENDING" + x-exportParamName: "SortByDirection" + x-optionalDataType: "String" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminProjects" /api/v1/projects/org/{org}/{id}: put: tags: @@ -3904,6 +4268,30 @@ paths: description: "A successful response." schema: $ref: "#/definitions/adminProjectUpdateResponse" + /api/v1/projects/org/{project.org}: + post: + tags: + - "AdminService" + summary: "Registers a :ref:`ref_flyteidl.admin.Project` with the Flyte deployment." + operationId: "RegisterProject2" + parameters: + - name: "project.org" + in: "path" + description: "Optional, org key applied to the resource." + required: true + type: "string" + x-exportParamName: "ProjectOrg" + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/adminProjectRegisterRequest" + x-exportParamName: "Body" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminProjectRegisterResponse" /api/v1/projects/{id}: put: tags: @@ -4398,6 +4786,30 @@ paths: description: "A successful response." schema: $ref: "#/definitions/flyteidladminTaskCreateResponse" + /api/v1/tasks/org/{id.org}: + post: + tags: + - "AdminService" + summary: "Create and upload a :ref:`ref_flyteidl.admin.Task` definition" + operationId: "CreateTask2" + parameters: + - name: "id.org" + in: "path" + description: "Optional, org key applied to the resource." + required: true + type: "string" + x-exportParamName: "IdOrg" + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/flyteidladminTaskCreateRequest" + x-exportParamName: "Body" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/flyteidladminTaskCreateResponse" /api/v1/tasks/org/{id.org}/{id.project}/{id.domain}: get: tags: @@ -5338,6 +5750,30 @@ paths: description: "A successful response." schema: $ref: "#/definitions/adminWorkflowCreateResponse" + /api/v1/workflows/org/{id.org}: + post: + tags: + - "AdminService" + summary: "Create and upload a :ref:`ref_flyteidl.admin.Workflow` definition" + operationId: "CreateWorkflow2" + parameters: + - name: "id.org" + in: "path" + description: "Optional, org key applied to the resource." + required: true + type: "string" + x-exportParamName: "IdOrg" + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/adminWorkflowCreateRequest" + x-exportParamName: "Body" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/adminWorkflowCreateResponse" /api/v1/workflows/org/{id.org}/{id.project}/{id.domain}: get: tags: diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api_admin_service.go b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api_admin_service.go index e106763b6c..92678dc67b 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api_admin_service.go +++ b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api_admin_service.go @@ -116,23 +116,25 @@ func (a *AdminServiceApiService) CreateExecution(ctx context.Context, body Admin } /* -AdminServiceApiService Create and upload a :ref:`ref_flyteidl.admin.LaunchPlan` definition +AdminServiceApiService Triggers the creation of a :ref:`ref_flyteidl.admin.Execution` * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param org Optional, org key applied to the resource. * @param body -@return AdminLaunchPlanCreateResponse +@return AdminExecutionCreateResponse */ -func (a *AdminServiceApiService) CreateLaunchPlan(ctx context.Context, body AdminLaunchPlanCreateRequest) (AdminLaunchPlanCreateResponse, *http.Response, error) { +func (a *AdminServiceApiService) CreateExecution2(ctx context.Context, org string, body AdminExecutionCreateRequest) (AdminExecutionCreateResponse, *http.Response, error) { var ( - localVarHttpMethod = strings.ToUpper("Post") + localVarHttpMethod = strings.ToUpper("Put") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminLaunchPlanCreateResponse + localVarReturnValue AdminExecutionCreateResponse ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/launch_plans" + localVarPath := a.client.cfg.BasePath + "/api/v1/executions/org/{org}" + localVarPath = strings.Replace(localVarPath, "{"+"org"+"}", fmt.Sprintf("%v", org), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -188,7 +190,7 @@ func (a *AdminServiceApiService) CreateLaunchPlan(ctx context.Context, body Admi } if localVarHttpResponse.StatusCode == 200 { - var v AdminLaunchPlanCreateResponse + var v AdminExecutionCreateResponse err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -205,23 +207,23 @@ func (a *AdminServiceApiService) CreateLaunchPlan(ctx context.Context, body Admi } /* -AdminServiceApiService Indicates a :ref:`ref_flyteidl.event.NodeExecutionEvent` has occurred. +AdminServiceApiService Create and upload a :ref:`ref_flyteidl.admin.LaunchPlan` definition * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). * @param body -@return AdminNodeExecutionEventResponse +@return AdminLaunchPlanCreateResponse */ -func (a *AdminServiceApiService) CreateNodeEvent(ctx context.Context, body AdminNodeExecutionEventRequest) (AdminNodeExecutionEventResponse, *http.Response, error) { +func (a *AdminServiceApiService) CreateLaunchPlan(ctx context.Context, body AdminLaunchPlanCreateRequest) (AdminLaunchPlanCreateResponse, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminNodeExecutionEventResponse + localVarReturnValue AdminLaunchPlanCreateResponse ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/events/nodes" + localVarPath := a.client.cfg.BasePath + "/api/v1/launch_plans" localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -277,7 +279,7 @@ func (a *AdminServiceApiService) CreateNodeEvent(ctx context.Context, body Admin } if localVarHttpResponse.StatusCode == 200 { - var v AdminNodeExecutionEventResponse + var v AdminLaunchPlanCreateResponse err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -294,23 +296,25 @@ func (a *AdminServiceApiService) CreateNodeEvent(ctx context.Context, body Admin } /* -AdminServiceApiService Create and upload a :ref:`ref_flyteidl.admin.Task` definition +AdminServiceApiService Create and upload a :ref:`ref_flyteidl.admin.LaunchPlan` definition * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param idOrg Optional, org key applied to the resource. * @param body -@return FlyteidladminTaskCreateResponse +@return AdminLaunchPlanCreateResponse */ -func (a *AdminServiceApiService) CreateTask(ctx context.Context, body FlyteidladminTaskCreateRequest) (FlyteidladminTaskCreateResponse, *http.Response, error) { +func (a *AdminServiceApiService) CreateLaunchPlan2(ctx context.Context, idOrg string, body AdminLaunchPlanCreateRequest) (AdminLaunchPlanCreateResponse, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue FlyteidladminTaskCreateResponse + localVarReturnValue AdminLaunchPlanCreateResponse ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/tasks" + localVarPath := a.client.cfg.BasePath + "/api/v1/launch_plans/org/{id.org}" + localVarPath = strings.Replace(localVarPath, "{"+"id.org"+"}", fmt.Sprintf("%v", idOrg), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -366,7 +370,7 @@ func (a *AdminServiceApiService) CreateTask(ctx context.Context, body Flyteidlad } if localVarHttpResponse.StatusCode == 200 { - var v FlyteidladminTaskCreateResponse + var v AdminLaunchPlanCreateResponse err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -383,23 +387,23 @@ func (a *AdminServiceApiService) CreateTask(ctx context.Context, body Flyteidlad } /* -AdminServiceApiService Indicates a :ref:`ref_flyteidl.event.TaskExecutionEvent` has occurred. +AdminServiceApiService Indicates a :ref:`ref_flyteidl.event.NodeExecutionEvent` has occurred. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). * @param body -@return AdminTaskExecutionEventResponse +@return AdminNodeExecutionEventResponse */ -func (a *AdminServiceApiService) CreateTaskEvent(ctx context.Context, body AdminTaskExecutionEventRequest) (AdminTaskExecutionEventResponse, *http.Response, error) { +func (a *AdminServiceApiService) CreateNodeEvent(ctx context.Context, body AdminNodeExecutionEventRequest) (AdminNodeExecutionEventResponse, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminTaskExecutionEventResponse + localVarReturnValue AdminNodeExecutionEventResponse ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/events/tasks" + localVarPath := a.client.cfg.BasePath + "/api/v1/events/nodes" localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -455,7 +459,7 @@ func (a *AdminServiceApiService) CreateTaskEvent(ctx context.Context, body Admin } if localVarHttpResponse.StatusCode == 200 { - var v AdminTaskExecutionEventResponse + var v AdminNodeExecutionEventResponse err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -472,23 +476,25 @@ func (a *AdminServiceApiService) CreateTaskEvent(ctx context.Context, body Admin } /* -AdminServiceApiService Create and upload a :ref:`ref_flyteidl.admin.Workflow` definition +AdminServiceApiService Indicates a :ref:`ref_flyteidl.event.NodeExecutionEvent` has occurred. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param eventIdExecutionIdOrg Optional, org key applied to the resource. * @param body -@return AdminWorkflowCreateResponse +@return AdminNodeExecutionEventResponse */ -func (a *AdminServiceApiService) CreateWorkflow(ctx context.Context, body AdminWorkflowCreateRequest) (AdminWorkflowCreateResponse, *http.Response, error) { +func (a *AdminServiceApiService) CreateNodeEvent2(ctx context.Context, eventIdExecutionIdOrg string, body AdminNodeExecutionEventRequest) (AdminNodeExecutionEventResponse, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminWorkflowCreateResponse + localVarReturnValue AdminNodeExecutionEventResponse ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/workflows" + localVarPath := a.client.cfg.BasePath + "/api/v1/events/org/{event.id.execution_id.org}/nodes" + localVarPath = strings.Replace(localVarPath, "{"+"event.id.execution_id.org"+"}", fmt.Sprintf("%v", eventIdExecutionIdOrg), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -544,7 +550,7 @@ func (a *AdminServiceApiService) CreateWorkflow(ctx context.Context, body AdminW } if localVarHttpResponse.StatusCode == 200 { - var v AdminWorkflowCreateResponse + var v AdminNodeExecutionEventResponse err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -561,23 +567,23 @@ func (a *AdminServiceApiService) CreateWorkflow(ctx context.Context, body AdminW } /* -AdminServiceApiService Indicates a :ref:`ref_flyteidl.event.WorkflowExecutionEvent` has occurred. +AdminServiceApiService Create and upload a :ref:`ref_flyteidl.admin.Task` definition * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). * @param body -@return AdminWorkflowExecutionEventResponse +@return FlyteidladminTaskCreateResponse */ -func (a *AdminServiceApiService) CreateWorkflowEvent(ctx context.Context, body AdminWorkflowExecutionEventRequest) (AdminWorkflowExecutionEventResponse, *http.Response, error) { +func (a *AdminServiceApiService) CreateTask(ctx context.Context, body FlyteidladminTaskCreateRequest) (FlyteidladminTaskCreateResponse, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminWorkflowExecutionEventResponse + localVarReturnValue FlyteidladminTaskCreateResponse ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/events/workflows" + localVarPath := a.client.cfg.BasePath + "/api/v1/tasks" localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -633,7 +639,7 @@ func (a *AdminServiceApiService) CreateWorkflowEvent(ctx context.Context, body A } if localVarHttpResponse.StatusCode == 200 { - var v AdminWorkflowExecutionEventResponse + var v FlyteidladminTaskCreateResponse err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -650,25 +656,25 @@ func (a *AdminServiceApiService) CreateWorkflowEvent(ctx context.Context, body A } /* -AdminServiceApiService Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. +AdminServiceApiService Create and upload a :ref:`ref_flyteidl.admin.Task` definition * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param project Unique project id which this set of attributes references. +required + * @param idOrg Optional, org key applied to the resource. * @param body -@return AdminProjectAttributesDeleteResponse +@return FlyteidladminTaskCreateResponse */ -func (a *AdminServiceApiService) DeleteProjectAttributes(ctx context.Context, project string, body AdminProjectAttributesDeleteRequest) (AdminProjectAttributesDeleteResponse, *http.Response, error) { +func (a *AdminServiceApiService) CreateTask2(ctx context.Context, idOrg string, body FlyteidladminTaskCreateRequest) (FlyteidladminTaskCreateResponse, *http.Response, error) { var ( - localVarHttpMethod = strings.ToUpper("Delete") + localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminProjectAttributesDeleteResponse + localVarReturnValue FlyteidladminTaskCreateResponse ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/project_attributes/{project}" - localVarPath = strings.Replace(localVarPath, "{"+"project"+"}", fmt.Sprintf("%v", project), -1) + localVarPath := a.client.cfg.BasePath + "/api/v1/tasks/org/{id.org}" + localVarPath = strings.Replace(localVarPath, "{"+"id.org"+"}", fmt.Sprintf("%v", idOrg), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -724,7 +730,7 @@ func (a *AdminServiceApiService) DeleteProjectAttributes(ctx context.Context, pr } if localVarHttpResponse.StatusCode == 200 { - var v AdminProjectAttributesDeleteResponse + var v FlyteidladminTaskCreateResponse err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -741,27 +747,23 @@ func (a *AdminServiceApiService) DeleteProjectAttributes(ctx context.Context, pr } /* -AdminServiceApiService Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. +AdminServiceApiService Indicates a :ref:`ref_flyteidl.event.TaskExecutionEvent` has occurred. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param org Optional, org key applied to the project. - * @param project Unique project id which this set of attributes references. +required * @param body -@return AdminProjectAttributesDeleteResponse +@return AdminTaskExecutionEventResponse */ -func (a *AdminServiceApiService) DeleteProjectAttributes2(ctx context.Context, org string, project string, body AdminProjectAttributesDeleteRequest) (AdminProjectAttributesDeleteResponse, *http.Response, error) { +func (a *AdminServiceApiService) CreateTaskEvent(ctx context.Context, body AdminTaskExecutionEventRequest) (AdminTaskExecutionEventResponse, *http.Response, error) { var ( - localVarHttpMethod = strings.ToUpper("Delete") + localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminProjectAttributesDeleteResponse + localVarReturnValue AdminTaskExecutionEventResponse ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/project_domain_attributes/org/{org}/{project}" - localVarPath = strings.Replace(localVarPath, "{"+"org"+"}", fmt.Sprintf("%v", org), -1) - localVarPath = strings.Replace(localVarPath, "{"+"project"+"}", fmt.Sprintf("%v", project), -1) + localVarPath := a.client.cfg.BasePath + "/api/v1/events/tasks" localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -817,7 +819,7 @@ func (a *AdminServiceApiService) DeleteProjectAttributes2(ctx context.Context, o } if localVarHttpResponse.StatusCode == 200 { - var v AdminProjectAttributesDeleteResponse + var v AdminTaskExecutionEventResponse err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -834,27 +836,25 @@ func (a *AdminServiceApiService) DeleteProjectAttributes2(ctx context.Context, o } /* -AdminServiceApiService Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. +AdminServiceApiService Indicates a :ref:`ref_flyteidl.event.TaskExecutionEvent` has occurred. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param project Unique project id which this set of attributes references. +required - * @param domain Unique domain id which this set of attributes references. +required + * @param eventParentNodeExecutionIdExecutionIdOrg Optional, org key applied to the resource. * @param body -@return AdminProjectDomainAttributesDeleteResponse +@return AdminTaskExecutionEventResponse */ -func (a *AdminServiceApiService) DeleteProjectDomainAttributes(ctx context.Context, project string, domain string, body AdminProjectDomainAttributesDeleteRequest) (AdminProjectDomainAttributesDeleteResponse, *http.Response, error) { +func (a *AdminServiceApiService) CreateTaskEvent2(ctx context.Context, eventParentNodeExecutionIdExecutionIdOrg string, body AdminTaskExecutionEventRequest) (AdminTaskExecutionEventResponse, *http.Response, error) { var ( - localVarHttpMethod = strings.ToUpper("Delete") + localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminProjectDomainAttributesDeleteResponse + localVarReturnValue AdminTaskExecutionEventResponse ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/project_domain_attributes/{project}/{domain}" - localVarPath = strings.Replace(localVarPath, "{"+"project"+"}", fmt.Sprintf("%v", project), -1) - localVarPath = strings.Replace(localVarPath, "{"+"domain"+"}", fmt.Sprintf("%v", domain), -1) + localVarPath := a.client.cfg.BasePath + "/api/v1/events/org/{event.parent_node_execution_id.execution_id.org}/tasks" + localVarPath = strings.Replace(localVarPath, "{"+"event.parent_node_execution_id.execution_id.org"+"}", fmt.Sprintf("%v", eventParentNodeExecutionIdExecutionIdOrg), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -910,7 +910,7 @@ func (a *AdminServiceApiService) DeleteProjectDomainAttributes(ctx context.Conte } if localVarHttpResponse.StatusCode == 200 { - var v AdminProjectDomainAttributesDeleteResponse + var v AdminTaskExecutionEventResponse err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -927,29 +927,23 @@ func (a *AdminServiceApiService) DeleteProjectDomainAttributes(ctx context.Conte } /* -AdminServiceApiService Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. +AdminServiceApiService Create and upload a :ref:`ref_flyteidl.admin.Workflow` definition * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param org Optional, org key applied to the attributes. - * @param project Unique project id which this set of attributes references. +required - * @param domain Unique domain id which this set of attributes references. +required * @param body -@return AdminProjectDomainAttributesDeleteResponse +@return AdminWorkflowCreateResponse */ -func (a *AdminServiceApiService) DeleteProjectDomainAttributes2(ctx context.Context, org string, project string, domain string, body AdminProjectDomainAttributesDeleteRequest) (AdminProjectDomainAttributesDeleteResponse, *http.Response, error) { +func (a *AdminServiceApiService) CreateWorkflow(ctx context.Context, body AdminWorkflowCreateRequest) (AdminWorkflowCreateResponse, *http.Response, error) { var ( - localVarHttpMethod = strings.ToUpper("Delete") + localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminProjectDomainAttributesDeleteResponse + localVarReturnValue AdminWorkflowCreateResponse ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/project_domain_attributes/org/{org}/{project}/{domain}" - localVarPath = strings.Replace(localVarPath, "{"+"org"+"}", fmt.Sprintf("%v", org), -1) - localVarPath = strings.Replace(localVarPath, "{"+"project"+"}", fmt.Sprintf("%v", project), -1) - localVarPath = strings.Replace(localVarPath, "{"+"domain"+"}", fmt.Sprintf("%v", domain), -1) + localVarPath := a.client.cfg.BasePath + "/api/v1/workflows" localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -1005,7 +999,7 @@ func (a *AdminServiceApiService) DeleteProjectDomainAttributes2(ctx context.Cont } if localVarHttpResponse.StatusCode == 200 { - var v AdminProjectDomainAttributesDeleteResponse + var v AdminWorkflowCreateResponse err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -1022,29 +1016,25 @@ func (a *AdminServiceApiService) DeleteProjectDomainAttributes2(ctx context.Cont } /* -AdminServiceApiService Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. +AdminServiceApiService Create and upload a :ref:`ref_flyteidl.admin.Workflow` definition * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param project Unique project id which this set of attributes references. +required - * @param domain Unique domain id which this set of attributes references. +required - * @param workflow Workflow name which this set of attributes references. +required + * @param idOrg Optional, org key applied to the resource. * @param body -@return AdminWorkflowAttributesDeleteResponse +@return AdminWorkflowCreateResponse */ -func (a *AdminServiceApiService) DeleteWorkflowAttributes(ctx context.Context, project string, domain string, workflow string, body AdminWorkflowAttributesDeleteRequest) (AdminWorkflowAttributesDeleteResponse, *http.Response, error) { +func (a *AdminServiceApiService) CreateWorkflow2(ctx context.Context, idOrg string, body AdminWorkflowCreateRequest) (AdminWorkflowCreateResponse, *http.Response, error) { var ( - localVarHttpMethod = strings.ToUpper("Delete") + localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminWorkflowAttributesDeleteResponse + localVarReturnValue AdminWorkflowCreateResponse ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/workflow_attributes/{project}/{domain}/{workflow}" - localVarPath = strings.Replace(localVarPath, "{"+"project"+"}", fmt.Sprintf("%v", project), -1) - localVarPath = strings.Replace(localVarPath, "{"+"domain"+"}", fmt.Sprintf("%v", domain), -1) - localVarPath = strings.Replace(localVarPath, "{"+"workflow"+"}", fmt.Sprintf("%v", workflow), -1) + localVarPath := a.client.cfg.BasePath + "/api/v1/workflows/org/{id.org}" + localVarPath = strings.Replace(localVarPath, "{"+"id.org"+"}", fmt.Sprintf("%v", idOrg), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -1100,7 +1090,7 @@ func (a *AdminServiceApiService) DeleteWorkflowAttributes(ctx context.Context, p } if localVarHttpResponse.StatusCode == 200 { - var v AdminWorkflowAttributesDeleteResponse + var v AdminWorkflowCreateResponse err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -1117,31 +1107,23 @@ func (a *AdminServiceApiService) DeleteWorkflowAttributes(ctx context.Context, p } /* -AdminServiceApiService Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. +AdminServiceApiService Indicates a :ref:`ref_flyteidl.event.WorkflowExecutionEvent` has occurred. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param org Optional, org key applied to the attributes. - * @param project Unique project id which this set of attributes references. +required - * @param domain Unique domain id which this set of attributes references. +required - * @param workflow Workflow name which this set of attributes references. +required * @param body -@return AdminWorkflowAttributesDeleteResponse +@return AdminWorkflowExecutionEventResponse */ -func (a *AdminServiceApiService) DeleteWorkflowAttributes2(ctx context.Context, org string, project string, domain string, workflow string, body AdminWorkflowAttributesDeleteRequest) (AdminWorkflowAttributesDeleteResponse, *http.Response, error) { +func (a *AdminServiceApiService) CreateWorkflowEvent(ctx context.Context, body AdminWorkflowExecutionEventRequest) (AdminWorkflowExecutionEventResponse, *http.Response, error) { var ( - localVarHttpMethod = strings.ToUpper("Delete") + localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminWorkflowAttributesDeleteResponse + localVarReturnValue AdminWorkflowExecutionEventResponse ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/workflow_attributes/org/{org}/{project}/{domain}/{workflow}" - localVarPath = strings.Replace(localVarPath, "{"+"org"+"}", fmt.Sprintf("%v", org), -1) - localVarPath = strings.Replace(localVarPath, "{"+"project"+"}", fmt.Sprintf("%v", project), -1) - localVarPath = strings.Replace(localVarPath, "{"+"domain"+"}", fmt.Sprintf("%v", domain), -1) - localVarPath = strings.Replace(localVarPath, "{"+"workflow"+"}", fmt.Sprintf("%v", workflow), -1) + localVarPath := a.client.cfg.BasePath + "/api/v1/events/workflows" localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -1197,7 +1179,7 @@ func (a *AdminServiceApiService) DeleteWorkflowAttributes2(ctx context.Context, } if localVarHttpResponse.StatusCode == 200 { - var v AdminWorkflowAttributesDeleteResponse + var v AdminWorkflowExecutionEventResponse err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -1214,43 +1196,30 @@ func (a *AdminServiceApiService) DeleteWorkflowAttributes2(ctx context.Context, } /* -AdminServiceApiService Fetch the active version of a :ref:`ref_flyteidl.admin.LaunchPlan`. +AdminServiceApiService Indicates a :ref:`ref_flyteidl.event.WorkflowExecutionEvent` has occurred. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param idProject Name of the project the resource belongs to. - * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. - * @param idName User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' - * @param optional nil or *GetActiveLaunchPlanOpts - Optional Parameters: - * @param "IdOrg" (optional.String) - Optional, org key applied to the resource. + * @param eventExecutionIdOrg Optional, org key applied to the resource. + * @param body -@return AdminLaunchPlan +@return AdminWorkflowExecutionEventResponse */ - -type GetActiveLaunchPlanOpts struct { - IdOrg optional.String -} - -func (a *AdminServiceApiService) GetActiveLaunchPlan(ctx context.Context, idProject string, idDomain string, idName string, localVarOptionals *GetActiveLaunchPlanOpts) (AdminLaunchPlan, *http.Response, error) { +func (a *AdminServiceApiService) CreateWorkflowEvent2(ctx context.Context, eventExecutionIdOrg string, body AdminWorkflowExecutionEventRequest) (AdminWorkflowExecutionEventResponse, *http.Response, error) { var ( - localVarHttpMethod = strings.ToUpper("Get") + localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminLaunchPlan + localVarReturnValue AdminWorkflowExecutionEventResponse ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/active_launch_plans/{id.project}/{id.domain}/{id.name}" - localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) + localVarPath := a.client.cfg.BasePath + "/api/v1/events/org/{event.execution_id.org}/workflows" + localVarPath = strings.Replace(localVarPath, "{"+"event.execution_id.org"+"}", fmt.Sprintf("%v", eventExecutionIdOrg), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} localVarFormParams := url.Values{} - if localVarOptionals != nil && localVarOptionals.IdOrg.IsSet() { - localVarQueryParams.Add("id.org", parameterToString(localVarOptionals.IdOrg.Value(), "")) - } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json"} @@ -1268,6 +1237,8 @@ func (a *AdminServiceApiService) GetActiveLaunchPlan(ctx context.Context, idProj if localVarHttpHeaderAccept != "" { localVarHeaderParams["Accept"] = localVarHttpHeaderAccept } + // body params + localVarPostBody = &body r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) if err != nil { return localVarReturnValue, nil, err @@ -1299,7 +1270,7 @@ func (a *AdminServiceApiService) GetActiveLaunchPlan(ctx context.Context, idProj } if localVarHttpResponse.StatusCode == 200 { - var v AdminLaunchPlan + var v AdminWorkflowExecutionEventResponse err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -1316,30 +1287,25 @@ func (a *AdminServiceApiService) GetActiveLaunchPlan(ctx context.Context, idProj } /* -AdminServiceApiService Fetch the active version of a :ref:`ref_flyteidl.admin.LaunchPlan`. +AdminServiceApiService Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param idOrg Optional, org key applied to the resource. - * @param idProject Name of the project the resource belongs to. - * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. - * @param idName User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' + * @param project Unique project id which this set of attributes references. +required + * @param body -@return AdminLaunchPlan +@return AdminProjectAttributesDeleteResponse */ -func (a *AdminServiceApiService) GetActiveLaunchPlan2(ctx context.Context, idOrg string, idProject string, idDomain string, idName string) (AdminLaunchPlan, *http.Response, error) { +func (a *AdminServiceApiService) DeleteProjectAttributes(ctx context.Context, project string, body AdminProjectAttributesDeleteRequest) (AdminProjectAttributesDeleteResponse, *http.Response, error) { var ( - localVarHttpMethod = strings.ToUpper("Get") + localVarHttpMethod = strings.ToUpper("Delete") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminLaunchPlan + localVarReturnValue AdminProjectAttributesDeleteResponse ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/active_launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name}" - localVarPath = strings.Replace(localVarPath, "{"+"id.org"+"}", fmt.Sprintf("%v", idOrg), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) + localVarPath := a.client.cfg.BasePath + "/api/v1/project_attributes/{project}" + localVarPath = strings.Replace(localVarPath, "{"+"project"+"}", fmt.Sprintf("%v", project), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -1362,6 +1328,8 @@ func (a *AdminServiceApiService) GetActiveLaunchPlan2(ctx context.Context, idOrg if localVarHttpHeaderAccept != "" { localVarHeaderParams["Accept"] = localVarHttpHeaderAccept } + // body params + localVarPostBody = &body r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) if err != nil { return localVarReturnValue, nil, err @@ -1393,7 +1361,7 @@ func (a *AdminServiceApiService) GetActiveLaunchPlan2(ctx context.Context, idOrg } if localVarHttpResponse.StatusCode == 200 { - var v AdminLaunchPlan + var v AdminProjectAttributesDeleteResponse err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -1410,17 +1378,686 @@ func (a *AdminServiceApiService) GetActiveLaunchPlan2(ctx context.Context, idOrg } /* -AdminServiceApiService Fetch a :ref:`ref_flyteidl.admin.DescriptionEntity` object. +AdminServiceApiService Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param idResourceType Identifies the specific type of resource that this identifier corresponds to. - * @param idProject Name of the project the resource belongs to. - * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. - * @param idName User provided value for the resource. - * @param idVersion Specific version of the resource. - * @param optional nil or *GetDescriptionEntityOpts - Optional Parameters: - * @param "IdOrg" (optional.String) - Optional, org key applied to the resource. + * @param org Optional, org key applied to the project. + * @param project Unique project id which this set of attributes references. +required + * @param body -@return AdminDescriptionEntity +@return AdminProjectAttributesDeleteResponse +*/ +func (a *AdminServiceApiService) DeleteProjectAttributes2(ctx context.Context, org string, project string, body AdminProjectAttributesDeleteRequest) (AdminProjectAttributesDeleteResponse, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Delete") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminProjectAttributesDeleteResponse + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/project_domain_attributes/org/{org}/{project}" + localVarPath = strings.Replace(localVarPath, "{"+"org"+"}", fmt.Sprintf("%v", org), -1) + localVarPath = strings.Replace(localVarPath, "{"+"project"+"}", fmt.Sprintf("%v", project), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + // body params + localVarPostBody = &body + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminProjectAttributesDeleteResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param project Unique project id which this set of attributes references. +required + * @param domain Unique domain id which this set of attributes references. +required + * @param body + +@return AdminProjectDomainAttributesDeleteResponse +*/ +func (a *AdminServiceApiService) DeleteProjectDomainAttributes(ctx context.Context, project string, domain string, body AdminProjectDomainAttributesDeleteRequest) (AdminProjectDomainAttributesDeleteResponse, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Delete") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminProjectDomainAttributesDeleteResponse + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/project_domain_attributes/{project}/{domain}" + localVarPath = strings.Replace(localVarPath, "{"+"project"+"}", fmt.Sprintf("%v", project), -1) + localVarPath = strings.Replace(localVarPath, "{"+"domain"+"}", fmt.Sprintf("%v", domain), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + // body params + localVarPostBody = &body + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminProjectDomainAttributesDeleteResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param org Optional, org key applied to the attributes. + * @param project Unique project id which this set of attributes references. +required + * @param domain Unique domain id which this set of attributes references. +required + * @param body + +@return AdminProjectDomainAttributesDeleteResponse +*/ +func (a *AdminServiceApiService) DeleteProjectDomainAttributes2(ctx context.Context, org string, project string, domain string, body AdminProjectDomainAttributesDeleteRequest) (AdminProjectDomainAttributesDeleteResponse, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Delete") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminProjectDomainAttributesDeleteResponse + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/project_domain_attributes/org/{org}/{project}/{domain}" + localVarPath = strings.Replace(localVarPath, "{"+"org"+"}", fmt.Sprintf("%v", org), -1) + localVarPath = strings.Replace(localVarPath, "{"+"project"+"}", fmt.Sprintf("%v", project), -1) + localVarPath = strings.Replace(localVarPath, "{"+"domain"+"}", fmt.Sprintf("%v", domain), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + // body params + localVarPostBody = &body + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminProjectDomainAttributesDeleteResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param project Unique project id which this set of attributes references. +required + * @param domain Unique domain id which this set of attributes references. +required + * @param workflow Workflow name which this set of attributes references. +required + * @param body + +@return AdminWorkflowAttributesDeleteResponse +*/ +func (a *AdminServiceApiService) DeleteWorkflowAttributes(ctx context.Context, project string, domain string, workflow string, body AdminWorkflowAttributesDeleteRequest) (AdminWorkflowAttributesDeleteResponse, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Delete") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminWorkflowAttributesDeleteResponse + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/workflow_attributes/{project}/{domain}/{workflow}" + localVarPath = strings.Replace(localVarPath, "{"+"project"+"}", fmt.Sprintf("%v", project), -1) + localVarPath = strings.Replace(localVarPath, "{"+"domain"+"}", fmt.Sprintf("%v", domain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"workflow"+"}", fmt.Sprintf("%v", workflow), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + // body params + localVarPostBody = &body + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminWorkflowAttributesDeleteResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param org Optional, org key applied to the attributes. + * @param project Unique project id which this set of attributes references. +required + * @param domain Unique domain id which this set of attributes references. +required + * @param workflow Workflow name which this set of attributes references. +required + * @param body + +@return AdminWorkflowAttributesDeleteResponse +*/ +func (a *AdminServiceApiService) DeleteWorkflowAttributes2(ctx context.Context, org string, project string, domain string, workflow string, body AdminWorkflowAttributesDeleteRequest) (AdminWorkflowAttributesDeleteResponse, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Delete") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminWorkflowAttributesDeleteResponse + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/workflow_attributes/org/{org}/{project}/{domain}/{workflow}" + localVarPath = strings.Replace(localVarPath, "{"+"org"+"}", fmt.Sprintf("%v", org), -1) + localVarPath = strings.Replace(localVarPath, "{"+"project"+"}", fmt.Sprintf("%v", project), -1) + localVarPath = strings.Replace(localVarPath, "{"+"domain"+"}", fmt.Sprintf("%v", domain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"workflow"+"}", fmt.Sprintf("%v", workflow), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + // body params + localVarPostBody = &body + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminWorkflowAttributesDeleteResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Fetch the active version of a :ref:`ref_flyteidl.admin.LaunchPlan`. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param idProject Name of the project the resource belongs to. + * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param idName User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' + * @param optional nil or *GetActiveLaunchPlanOpts - Optional Parameters: + * @param "IdOrg" (optional.String) - Optional, org key applied to the resource. + +@return AdminLaunchPlan +*/ + +type GetActiveLaunchPlanOpts struct { + IdOrg optional.String +} + +func (a *AdminServiceApiService) GetActiveLaunchPlan(ctx context.Context, idProject string, idDomain string, idName string, localVarOptionals *GetActiveLaunchPlanOpts) (AdminLaunchPlan, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminLaunchPlan + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/active_launch_plans/{id.project}/{id.domain}/{id.name}" + localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.IdOrg.IsSet() { + localVarQueryParams.Add("id.org", parameterToString(localVarOptionals.IdOrg.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminLaunchPlan + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Fetch the active version of a :ref:`ref_flyteidl.admin.LaunchPlan`. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param idOrg Optional, org key applied to the resource. + * @param idProject Name of the project the resource belongs to. + * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param idName User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' + +@return AdminLaunchPlan +*/ +func (a *AdminServiceApiService) GetActiveLaunchPlan2(ctx context.Context, idOrg string, idProject string, idDomain string, idName string) (AdminLaunchPlan, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminLaunchPlan + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/active_launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name}" + localVarPath = strings.Replace(localVarPath, "{"+"id.org"+"}", fmt.Sprintf("%v", idOrg), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminLaunchPlan + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Fetch a :ref:`ref_flyteidl.admin.DescriptionEntity` object. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param idResourceType Identifies the specific type of resource that this identifier corresponds to. + * @param idProject Name of the project the resource belongs to. + * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param idName User provided value for the resource. + * @param idVersion Specific version of the resource. + * @param optional nil or *GetDescriptionEntityOpts - Optional Parameters: + * @param "IdOrg" (optional.String) - Optional, org key applied to the resource. + +@return AdminDescriptionEntity */ type GetDescriptionEntityOpts struct { @@ -4571,28 +5208,148 @@ type GetWorkflowAttributes2Opts struct { ResourceType optional.String } -func (a *AdminServiceApiService) GetWorkflowAttributes2(ctx context.Context, org string, project string, domain string, workflow string, localVarOptionals *GetWorkflowAttributes2Opts) (AdminWorkflowAttributesGetResponse, *http.Response, error) { +func (a *AdminServiceApiService) GetWorkflowAttributes2(ctx context.Context, org string, project string, domain string, workflow string, localVarOptionals *GetWorkflowAttributes2Opts) (AdminWorkflowAttributesGetResponse, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminWorkflowAttributesGetResponse + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/workflow_attributes/org/{org}/{project}/{domain}/{workflow}" + localVarPath = strings.Replace(localVarPath, "{"+"org"+"}", fmt.Sprintf("%v", org), -1) + localVarPath = strings.Replace(localVarPath, "{"+"project"+"}", fmt.Sprintf("%v", project), -1) + localVarPath = strings.Replace(localVarPath, "{"+"domain"+"}", fmt.Sprintf("%v", domain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"workflow"+"}", fmt.Sprintf("%v", workflow), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.ResourceType.IsSet() { + localVarQueryParams.Add("resource_type", parameterToString(localVarOptionals.ResourceType.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminWorkflowAttributesGetResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService List active versions of :ref:`ref_flyteidl.admin.LaunchPlan`. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param project Name of the project that contains the identifiers. +required. + * @param domain Name of the domain the identifiers belongs to within the project. +required. + * @param optional nil or *ListActiveLaunchPlansOpts - Optional Parameters: + * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. + * @param "Token" (optional.String) - In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. + * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + * @param "Org" (optional.String) - Optional, org key applied to the resource. + +@return AdminLaunchPlanList +*/ + +type ListActiveLaunchPlansOpts struct { + Limit optional.Int64 + Token optional.String + SortByKey optional.String + SortByDirection optional.String + Org optional.String +} + +func (a *AdminServiceApiService) ListActiveLaunchPlans(ctx context.Context, project string, domain string, localVarOptionals *ListActiveLaunchPlansOpts) (AdminLaunchPlanList, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminWorkflowAttributesGetResponse + localVarReturnValue AdminLaunchPlanList ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/workflow_attributes/org/{org}/{project}/{domain}/{workflow}" - localVarPath = strings.Replace(localVarPath, "{"+"org"+"}", fmt.Sprintf("%v", org), -1) + localVarPath := a.client.cfg.BasePath + "/api/v1/active_launch_plans/{project}/{domain}" localVarPath = strings.Replace(localVarPath, "{"+"project"+"}", fmt.Sprintf("%v", project), -1) localVarPath = strings.Replace(localVarPath, "{"+"domain"+"}", fmt.Sprintf("%v", domain), -1) - localVarPath = strings.Replace(localVarPath, "{"+"workflow"+"}", fmt.Sprintf("%v", workflow), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} localVarFormParams := url.Values{} - if localVarOptionals != nil && localVarOptionals.ResourceType.IsSet() { - localVarQueryParams.Add("resource_type", parameterToString(localVarOptionals.ResourceType.Value(), "")) + if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { + localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Token.IsSet() { + localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { + localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { + localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Org.IsSet() { + localVarQueryParams.Add("org", parameterToString(localVarOptionals.Org.Value(), "")) } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json"} @@ -4642,7 +5399,7 @@ func (a *AdminServiceApiService) GetWorkflowAttributes2(ctx context.Context, org } if localVarHttpResponse.StatusCode == 200 { - var v AdminWorkflowAttributesGetResponse + var v AdminLaunchPlanList err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -4661,27 +5418,26 @@ func (a *AdminServiceApiService) GetWorkflowAttributes2(ctx context.Context, org /* AdminServiceApiService List active versions of :ref:`ref_flyteidl.admin.LaunchPlan`. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param org Optional, org key applied to the resource. * @param project Name of the project that contains the identifiers. +required. * @param domain Name of the domain the identifiers belongs to within the project. +required. - * @param optional nil or *ListActiveLaunchPlansOpts - Optional Parameters: + * @param optional nil or *ListActiveLaunchPlans2Opts - Optional Parameters: * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. * @param "Token" (optional.String) - In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - * @param "Org" (optional.String) - Optional, org key applied to the resource. @return AdminLaunchPlanList */ -type ListActiveLaunchPlansOpts struct { +type ListActiveLaunchPlans2Opts struct { Limit optional.Int64 Token optional.String SortByKey optional.String SortByDirection optional.String - Org optional.String } -func (a *AdminServiceApiService) ListActiveLaunchPlans(ctx context.Context, project string, domain string, localVarOptionals *ListActiveLaunchPlansOpts) (AdminLaunchPlanList, *http.Response, error) { +func (a *AdminServiceApiService) ListActiveLaunchPlans2(ctx context.Context, org string, project string, domain string, localVarOptionals *ListActiveLaunchPlans2Opts) (AdminLaunchPlanList, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} @@ -4691,7 +5447,8 @@ func (a *AdminServiceApiService) ListActiveLaunchPlans(ctx context.Context, proj ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/active_launch_plans/{project}/{domain}" + localVarPath := a.client.cfg.BasePath + "/api/v1/active_launch_plans/org/{org}/{project}/{domain}" + localVarPath = strings.Replace(localVarPath, "{"+"org"+"}", fmt.Sprintf("%v", org), -1) localVarPath = strings.Replace(localVarPath, "{"+"project"+"}", fmt.Sprintf("%v", project), -1) localVarPath = strings.Replace(localVarPath, "{"+"domain"+"}", fmt.Sprintf("%v", domain), -1) @@ -4711,9 +5468,6 @@ func (a *AdminServiceApiService) ListActiveLaunchPlans(ctx context.Context, proj if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) } - if localVarOptionals != nil && localVarOptionals.Org.IsSet() { - localVarQueryParams.Add("org", parameterToString(localVarOptionals.Org.Value(), "")) - } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json"} @@ -6311,12 +7065,14 @@ AdminServiceApiService Lists custom :ref:`ref_flyteidl.admin.MatchableAttri * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). * @param optional nil or *ListMatchableAttributesOpts - Optional Parameters: * @param "ResourceType" (optional.String) - +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. + * @param "Org" (optional.String) - Optional, org filter applied to list project requests. @return AdminListMatchableAttributesResponse */ type ListMatchableAttributesOpts struct { ResourceType optional.String + Org optional.String } func (a *AdminServiceApiService) ListMatchableAttributes(ctx context.Context, localVarOptionals *ListMatchableAttributesOpts) (AdminListMatchableAttributesResponse, *http.Response, error) { @@ -6335,6 +7091,107 @@ func (a *AdminServiceApiService) ListMatchableAttributes(ctx context.Context, lo localVarQueryParams := url.Values{} localVarFormParams := url.Values{} + if localVarOptionals != nil && localVarOptionals.ResourceType.IsSet() { + localVarQueryParams.Add("resource_type", parameterToString(localVarOptionals.ResourceType.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Org.IsSet() { + localVarQueryParams.Add("org", parameterToString(localVarOptionals.Org.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminListMatchableAttributesResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Lists custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a specific resource type. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param org Optional, org filter applied to list project requests. + * @param optional nil or *ListMatchableAttributes2Opts - Optional Parameters: + * @param "ResourceType" (optional.String) - +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. + +@return AdminListMatchableAttributesResponse +*/ + +type ListMatchableAttributes2Opts struct { + ResourceType optional.String +} + +func (a *AdminServiceApiService) ListMatchableAttributes2(ctx context.Context, org string, localVarOptionals *ListMatchableAttributes2Opts) (AdminListMatchableAttributesResponse, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminListMatchableAttributesResponse + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/matchable_attributes/org/{org}" + localVarPath = strings.Replace(localVarPath, "{"+"org"+"}", fmt.Sprintf("%v", org), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + if localVarOptionals != nil && localVarOptionals.ResourceType.IsSet() { localVarQueryParams.Add("resource_type", parameterToString(localVarOptionals.ResourceType.Value(), "")) } @@ -7218,6 +8075,7 @@ AdminServiceApiService Fetches a list of :ref:`ref_flyteidl.admin.Project&# * @param "Filters" (optional.String) - Indicates a list of filters passed as string. More info on constructing filters : <Link> +optional. * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + * @param "Org" (optional.String) - Optional, org filter applied to list project requests. @return AdminProjects */ @@ -7228,9 +8086,130 @@ type ListProjectsOpts struct { Filters optional.String SortByKey optional.String SortByDirection optional.String + Org optional.String +} + +func (a *AdminServiceApiService) ListProjects(ctx context.Context, localVarOptionals *ListProjectsOpts) (AdminProjects, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminProjects + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/projects" + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { + localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Token.IsSet() { + localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { + localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { + localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { + localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Org.IsSet() { + localVarQueryParams.Add("org", parameterToString(localVarOptionals.Org.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminProjects + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Fetches a list of :ref:`ref_flyteidl.admin.Project` + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param org Optional, org filter applied to list project requests. + * @param optional nil or *ListProjects2Opts - Optional Parameters: + * @param "Limit" (optional.Int64) - Indicates the number of projects to be returned. +required. + * @param "Token" (optional.String) - In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + * @param "Filters" (optional.String) - Indicates a list of filters passed as string. More info on constructing filters : <Link> +optional. + * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. + * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + +@return AdminProjects +*/ + +type ListProjects2Opts struct { + Limit optional.Int64 + Token optional.String + Filters optional.String + SortByKey optional.String + SortByDirection optional.String } -func (a *AdminServiceApiService) ListProjects(ctx context.Context, localVarOptionals *ListProjectsOpts) (AdminProjects, *http.Response, error) { +func (a *AdminServiceApiService) ListProjects2(ctx context.Context, org string, localVarOptionals *ListProjects2Opts) (AdminProjects, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} @@ -7240,7 +8219,8 @@ func (a *AdminServiceApiService) ListProjects(ctx context.Context, localVarOptio ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/projects" + localVarPath := a.client.cfg.BasePath + "/api/v1/projects/org/{org}" + localVarPath = strings.Replace(localVarPath, "{"+"org"+"}", fmt.Sprintf("%v", org), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -8515,9 +9495,260 @@ func (a *AdminServiceApiService) ListWorkflowIds2(ctx context.Context, org strin if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) } - if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { - localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) - } + if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { + localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminNamedEntityIdentifierList + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param idProject Name of the project the resource belongs to. + * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param idName User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' + * @param optional nil or *ListWorkflowsOpts - Optional Parameters: + * @param "IdOrg" (optional.String) - Optional, org key applied to the resource. + * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. + * @param "Token" (optional.String) - In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + * @param "Filters" (optional.String) - Indicates a list of filters passed as string. More info on constructing filters : <Link> +optional. + * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. + * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + +@return AdminWorkflowList +*/ + +type ListWorkflowsOpts struct { + IdOrg optional.String + Limit optional.Int64 + Token optional.String + Filters optional.String + SortByKey optional.String + SortByDirection optional.String +} + +func (a *AdminServiceApiService) ListWorkflows(ctx context.Context, idProject string, idDomain string, idName string, localVarOptionals *ListWorkflowsOpts) (AdminWorkflowList, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminWorkflowList + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/workflows/{id.project}/{id.domain}/{id.name}" + localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.IdOrg.IsSet() { + localVarQueryParams.Add("id.org", parameterToString(localVarOptionals.IdOrg.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { + localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Token.IsSet() { + localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { + localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { + localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { + localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminWorkflowList + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param idOrg Optional, org key applied to the resource. + * @param idProject Name of the project the resource belongs to. + * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. + * @param idName User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' + * @param optional nil or *ListWorkflows2Opts - Optional Parameters: + * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. + * @param "Token" (optional.String) - In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + * @param "Filters" (optional.String) - Indicates a list of filters passed as string. More info on constructing filters : <Link> +optional. + * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. + * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + +@return AdminWorkflowList +*/ + +type ListWorkflows2Opts struct { + Limit optional.Int64 + Token optional.String + Filters optional.String + SortByKey optional.String + SortByDirection optional.String +} + +func (a *AdminServiceApiService) ListWorkflows2(ctx context.Context, idOrg string, idProject string, idDomain string, idName string, localVarOptionals *ListWorkflows2Opts) (AdminWorkflowList, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminWorkflowList + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/workflows/org/{id.org}/{id.project}/{id.domain}/{id.name}" + localVarPath = strings.Replace(localVarPath, "{"+"id.org"+"}", fmt.Sprintf("%v", idOrg), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { + localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Token.IsSet() { + localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { + localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { + localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { + localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) + } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json"} @@ -8566,7 +9797,7 @@ func (a *AdminServiceApiService) ListWorkflowIds2(ctx context.Context, org strin } if localVarHttpResponse.StatusCode == 200 { - var v AdminNamedEntityIdentifierList + var v AdminWorkflowList err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -8587,8 +9818,8 @@ AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.Workflow&#x * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). * @param idProject Name of the project the resource belongs to. * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. - * @param idName User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' - * @param optional nil or *ListWorkflowsOpts - Optional Parameters: + * @param optional nil or *ListWorkflows3Opts - Optional Parameters: + * @param "IdName" (optional.String) - User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. * @param "IdOrg" (optional.String) - Optional, org key applied to the resource. * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. * @param "Token" (optional.String) - In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. @@ -8599,7 +9830,8 @@ AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.Workflow&#x @return AdminWorkflowList */ -type ListWorkflowsOpts struct { +type ListWorkflows3Opts struct { + IdName optional.String IdOrg optional.String Limit optional.Int64 Token optional.String @@ -8608,7 +9840,7 @@ type ListWorkflowsOpts struct { SortByDirection optional.String } -func (a *AdminServiceApiService) ListWorkflows(ctx context.Context, idProject string, idDomain string, idName string, localVarOptionals *ListWorkflowsOpts) (AdminWorkflowList, *http.Response, error) { +func (a *AdminServiceApiService) ListWorkflows3(ctx context.Context, idProject string, idDomain string, localVarOptionals *ListWorkflows3Opts) (AdminWorkflowList, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} @@ -8618,15 +9850,17 @@ func (a *AdminServiceApiService) ListWorkflows(ctx context.Context, idProject st ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/workflows/{id.project}/{id.domain}/{id.name}" + localVarPath := a.client.cfg.BasePath + "/api/v1/workflows/{id.project}/{id.domain}" localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} localVarFormParams := url.Values{} + if localVarOptionals != nil && localVarOptionals.IdName.IsSet() { + localVarQueryParams.Add("id.name", parameterToString(localVarOptionals.IdName.Value(), "")) + } if localVarOptionals != nil && localVarOptionals.IdOrg.IsSet() { localVarQueryParams.Add("id.org", parameterToString(localVarOptionals.IdOrg.Value(), "")) } @@ -8715,8 +9949,8 @@ AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.Workflow&#x * @param idOrg Optional, org key applied to the resource. * @param idProject Name of the project the resource belongs to. * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. - * @param idName User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' - * @param optional nil or *ListWorkflows2Opts - Optional Parameters: + * @param optional nil or *ListWorkflows4Opts - Optional Parameters: + * @param "IdName" (optional.String) - User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. * @param "Token" (optional.String) - In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. * @param "Filters" (optional.String) - Indicates a list of filters passed as string. More info on constructing filters : <Link> +optional. @@ -8726,7 +9960,8 @@ AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.Workflow&#x @return AdminWorkflowList */ -type ListWorkflows2Opts struct { +type ListWorkflows4Opts struct { + IdName optional.String Limit optional.Int64 Token optional.String Filters optional.String @@ -8734,7 +9969,7 @@ type ListWorkflows2Opts struct { SortByDirection optional.String } -func (a *AdminServiceApiService) ListWorkflows2(ctx context.Context, idOrg string, idProject string, idDomain string, idName string, localVarOptionals *ListWorkflows2Opts) (AdminWorkflowList, *http.Response, error) { +func (a *AdminServiceApiService) ListWorkflows4(ctx context.Context, idOrg string, idProject string, idDomain string, localVarOptionals *ListWorkflows4Opts) (AdminWorkflowList, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} @@ -8744,16 +9979,18 @@ func (a *AdminServiceApiService) ListWorkflows2(ctx context.Context, idOrg strin ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/workflows/org/{id.org}/{id.project}/{id.domain}/{id.name}" + localVarPath := a.client.cfg.BasePath + "/api/v1/workflows/org/{id.org}/{id.project}/{id.domain}" localVarPath = strings.Replace(localVarPath, "{"+"id.org"+"}", fmt.Sprintf("%v", idOrg), -1) localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.name"+"}", fmt.Sprintf("%v", idName), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} localVarFormParams := url.Values{} + if localVarOptionals != nil && localVarOptionals.IdName.IsSet() { + localVarQueryParams.Add("id.name", parameterToString(localVarOptionals.IdName.Value(), "")) + } if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) } @@ -8834,71 +10071,28 @@ func (a *AdminServiceApiService) ListWorkflows2(ctx context.Context, idOrg strin } /* -AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. +AdminServiceApiService Recreates a previously-run workflow execution that will only start executing from the last known failure point. In Recover mode, users cannot change any input parameters or update the version of the execution. This is extremely useful to recover from system errors and byzantine faults like - Loss of K8s cluster, bugs in platform or instability, machine failures, downstream system failures (downstream services), or simply to recover executions that failed because of retry exhaustion and should complete if tried again. See :ref:`ref_flyteidl.admin.ExecutionRecoverRequest` for more details. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param idProject Name of the project the resource belongs to. - * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. - * @param optional nil or *ListWorkflows3Opts - Optional Parameters: - * @param "IdName" (optional.String) - User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. - * @param "IdOrg" (optional.String) - Optional, org key applied to the resource. - * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. - * @param "Token" (optional.String) - In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. - * @param "Filters" (optional.String) - Indicates a list of filters passed as string. More info on constructing filters : <Link> +optional. - * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. - * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + * @param body -@return AdminWorkflowList +@return AdminExecutionCreateResponse */ - -type ListWorkflows3Opts struct { - IdName optional.String - IdOrg optional.String - Limit optional.Int64 - Token optional.String - Filters optional.String - SortByKey optional.String - SortByDirection optional.String -} - -func (a *AdminServiceApiService) ListWorkflows3(ctx context.Context, idProject string, idDomain string, localVarOptionals *ListWorkflows3Opts) (AdminWorkflowList, *http.Response, error) { +func (a *AdminServiceApiService) RecoverExecution(ctx context.Context, body AdminExecutionRecoverRequest) (AdminExecutionCreateResponse, *http.Response, error) { var ( - localVarHttpMethod = strings.ToUpper("Get") + localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminWorkflowList + localVarReturnValue AdminExecutionCreateResponse ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/workflows/{id.project}/{id.domain}" - localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) + localVarPath := a.client.cfg.BasePath + "/api/v1/executions/recover" localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} localVarFormParams := url.Values{} - if localVarOptionals != nil && localVarOptionals.IdName.IsSet() { - localVarQueryParams.Add("id.name", parameterToString(localVarOptionals.IdName.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.IdOrg.IsSet() { - localVarQueryParams.Add("id.org", parameterToString(localVarOptionals.IdOrg.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { - localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Token.IsSet() { - localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { - localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { - localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { - localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) - } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json"} @@ -8916,6 +10110,8 @@ func (a *AdminServiceApiService) ListWorkflows3(ctx context.Context, idProject s if localVarHttpHeaderAccept != "" { localVarHeaderParams["Accept"] = localVarHttpHeaderAccept } + // body params + localVarPostBody = &body r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) if err != nil { return localVarReturnValue, nil, err @@ -8947,7 +10143,7 @@ func (a *AdminServiceApiService) ListWorkflows3(ctx context.Context, idProject s } if localVarHttpResponse.StatusCode == 200 { - var v AdminWorkflowList + var v AdminExecutionCreateResponse err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -8964,68 +10160,30 @@ func (a *AdminServiceApiService) ListWorkflows3(ctx context.Context, idProject s } /* -AdminServiceApiService Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. +AdminServiceApiService Recreates a previously-run workflow execution that will only start executing from the last known failure point. In Recover mode, users cannot change any input parameters or update the version of the execution. This is extremely useful to recover from system errors and byzantine faults like - Loss of K8s cluster, bugs in platform or instability, machine failures, downstream system failures (downstream services), or simply to recover executions that failed because of retry exhaustion and should complete if tried again. See :ref:`ref_flyteidl.admin.ExecutionRecoverRequest` for more details. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). * @param idOrg Optional, org key applied to the resource. - * @param idProject Name of the project the resource belongs to. - * @param idDomain Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. - * @param optional nil or *ListWorkflows4Opts - Optional Parameters: - * @param "IdName" (optional.String) - User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. - * @param "Limit" (optional.Int64) - Indicates the number of resources to be returned. +required. - * @param "Token" (optional.String) - In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. - * @param "Filters" (optional.String) - Indicates a list of filters passed as string. More info on constructing filters : <Link> +optional. - * @param "SortByKey" (optional.String) - Indicates an attribute to sort the response values. +required. - * @param "SortByDirection" (optional.String) - Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + * @param body -@return AdminWorkflowList +@return AdminExecutionCreateResponse */ - -type ListWorkflows4Opts struct { - IdName optional.String - Limit optional.Int64 - Token optional.String - Filters optional.String - SortByKey optional.String - SortByDirection optional.String -} - -func (a *AdminServiceApiService) ListWorkflows4(ctx context.Context, idOrg string, idProject string, idDomain string, localVarOptionals *ListWorkflows4Opts) (AdminWorkflowList, *http.Response, error) { +func (a *AdminServiceApiService) RecoverExecution2(ctx context.Context, idOrg string, body AdminExecutionRecoverRequest) (AdminExecutionCreateResponse, *http.Response, error) { var ( - localVarHttpMethod = strings.ToUpper("Get") + localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminWorkflowList + localVarReturnValue AdminExecutionCreateResponse ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/workflows/org/{id.org}/{id.project}/{id.domain}" + localVarPath := a.client.cfg.BasePath + "/api/v1/executions/org/{id.org}/recover" localVarPath = strings.Replace(localVarPath, "{"+"id.org"+"}", fmt.Sprintf("%v", idOrg), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) - localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} localVarFormParams := url.Values{} - if localVarOptionals != nil && localVarOptionals.IdName.IsSet() { - localVarQueryParams.Add("id.name", parameterToString(localVarOptionals.IdName.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Limit.IsSet() { - localVarQueryParams.Add("limit", parameterToString(localVarOptionals.Limit.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Token.IsSet() { - localVarQueryParams.Add("token", parameterToString(localVarOptionals.Token.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Filters.IsSet() { - localVarQueryParams.Add("filters", parameterToString(localVarOptionals.Filters.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.SortByKey.IsSet() { - localVarQueryParams.Add("sort_by.key", parameterToString(localVarOptionals.SortByKey.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.SortByDirection.IsSet() { - localVarQueryParams.Add("sort_by.direction", parameterToString(localVarOptionals.SortByDirection.Value(), "")) - } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json"} @@ -9043,6 +10201,8 @@ func (a *AdminServiceApiService) ListWorkflows4(ctx context.Context, idOrg strin if localVarHttpHeaderAccept != "" { localVarHeaderParams["Accept"] = localVarHttpHeaderAccept } + // body params + localVarPostBody = &body r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) if err != nil { return localVarReturnValue, nil, err @@ -9074,7 +10234,7 @@ func (a *AdminServiceApiService) ListWorkflows4(ctx context.Context, idOrg strin } if localVarHttpResponse.StatusCode == 200 { - var v AdminWorkflowList + var v AdminExecutionCreateResponse err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -9091,23 +10251,23 @@ func (a *AdminServiceApiService) ListWorkflows4(ctx context.Context, idOrg strin } /* -AdminServiceApiService Recreates a previously-run workflow execution that will only start executing from the last known failure point. In Recover mode, users cannot change any input parameters or update the version of the execution. This is extremely useful to recover from system errors and byzantine faults like - Loss of K8s cluster, bugs in platform or instability, machine failures, downstream system failures (downstream services), or simply to recover executions that failed because of retry exhaustion and should complete if tried again. See :ref:`ref_flyteidl.admin.ExecutionRecoverRequest` for more details. +AdminServiceApiService Registers a :ref:`ref_flyteidl.admin.Project` with the Flyte deployment. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). * @param body -@return AdminExecutionCreateResponse +@return AdminProjectRegisterResponse */ -func (a *AdminServiceApiService) RecoverExecution(ctx context.Context, body AdminExecutionRecoverRequest) (AdminExecutionCreateResponse, *http.Response, error) { +func (a *AdminServiceApiService) RegisterProject(ctx context.Context, body AdminProjectRegisterRequest) (AdminProjectRegisterResponse, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue AdminExecutionCreateResponse + localVarReturnValue AdminProjectRegisterResponse ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/executions/recover" + localVarPath := a.client.cfg.BasePath + "/api/v1/projects" localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -9163,7 +10323,7 @@ func (a *AdminServiceApiService) RecoverExecution(ctx context.Context, body Admi } if localVarHttpResponse.StatusCode == 200 { - var v AdminExecutionCreateResponse + var v AdminProjectRegisterResponse err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -9182,11 +10342,12 @@ func (a *AdminServiceApiService) RecoverExecution(ctx context.Context, body Admi /* AdminServiceApiService Registers a :ref:`ref_flyteidl.admin.Project` with the Flyte deployment. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param projectOrg Optional, org key applied to the resource. * @param body @return AdminProjectRegisterResponse */ -func (a *AdminServiceApiService) RegisterProject(ctx context.Context, body AdminProjectRegisterRequest) (AdminProjectRegisterResponse, *http.Response, error) { +func (a *AdminServiceApiService) RegisterProject2(ctx context.Context, projectOrg string, body AdminProjectRegisterRequest) (AdminProjectRegisterResponse, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} @@ -9196,7 +10357,8 @@ func (a *AdminServiceApiService) RegisterProject(ctx context.Context, body Admin ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/projects" + localVarPath := a.client.cfg.BasePath + "/api/v1/projects/org/{project.org}" + localVarPath = strings.Replace(localVarPath, "{"+"project.org"+"}", fmt.Sprintf("%v", projectOrg), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -9357,6 +10519,97 @@ func (a *AdminServiceApiService) RelaunchExecution(ctx context.Context, body Adm return localVarReturnValue, localVarHttpResponse, nil } +/* +AdminServiceApiService Triggers the creation of an identical :ref:`ref_flyteidl.admin.Execution` + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param idOrg Optional, org key applied to the resource. + * @param body + +@return AdminExecutionCreateResponse +*/ +func (a *AdminServiceApiService) RelaunchExecution2(ctx context.Context, idOrg string, body AdminExecutionRelaunchRequest) (AdminExecutionCreateResponse, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Post") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue AdminExecutionCreateResponse + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/api/v1/executions/org/{id.org}/relaunch" + localVarPath = strings.Replace(localVarPath, "{"+"id.org"+"}", fmt.Sprintf("%v", idOrg), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + // body params + localVarPostBody = &body + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v AdminExecutionCreateResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + /* AdminServiceApiService Terminates an in-progress :ref:`ref_flyteidl.admin.Execution`. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). @@ -9473,7 +10726,7 @@ func (a *AdminServiceApiService) TerminateExecution2(ctx context.Context, idOrg ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/api/v1/data/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}" + localVarPath := a.client.cfg.BasePath + "/api/v1/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}" localVarPath = strings.Replace(localVarPath, "{"+"id.org"+"}", fmt.Sprintf("%v", idOrg), -1) localVarPath = strings.Replace(localVarPath, "{"+"id.project"+"}", fmt.Sprintf("%v", idProject), -1) localVarPath = strings.Replace(localVarPath, "{"+"id.domain"+"}", fmt.Sprintf("%v", idDomain), -1) diff --git a/flyteidl/gen/pb-go/flyteidl/service/openapi.go b/flyteidl/gen/pb-go/flyteidl/service/openapi.go index 2629dfb916..d8912c8295 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/openapi.go +++ b/flyteidl/gen/pb-go/flyteidl/service/openapi.go @@ -78,7 +78,7 @@ func (fi bindataFileInfo) Sys() interface{} { return nil } -var _adminSwaggerJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\x7b\x73\xe3\xb8\xb5\x2f\x0c\xff\xbf\x3f\x05\xaa\xf7\x5b\xd5\x33\x89\xed\x9e\x5c\xce\x7e\x53\xde\x75\xea\x79\x34\xb6\xba\x47\x67\xdc\xb6\x63\xcb\xd3\x7b\xea\x68\x97\x06\x22\x21\x09\x31\x05\x68\x00\xd0\x6e\x65\x57\xbe\xfb\x53\x58\x00\x48\x90\x22\x29\xea\x66\x4b\x6e\x24\x55\x89\x5b\x24\x71\x59\x00\x16\xd6\xf5\xb7\xfe\xe7\xdf\x10\x7a\x27\x9f\xf1\x64\x42\xc4\xbb\x73\xf4\xee\xcf\x67\x3f\xbc\x3b\xd1\xbf\x51\x36\xe6\xef\xce\x91\x7e\x8e\xd0\x3b\x45\x55\x42\xf4\xf3\x71\xb2\x50\x84\xc6\xc9\x07\x49\xc4\x13\x8d\xc8\x07\x1c\xcf\x28\x3b\x9b\x0b\xae\x38\x7c\x88\xd0\xbb\x27\x22\x24\xe5\x4c\xbf\x6e\xff\x44\x8c\x2b\x24\x89\x7a\xf7\x6f\x08\xfd\x0b\x9a\x97\xd1\x94\xcc\x88\x7c\x77\x8e\xfe\xaf\xf9\x68\xaa\xd4\xdc\x35\xa0\xff\x96\xfa\xdd\xff\x86\x77\x23\xce\x64\x5a\x78\x19\xcf\xe7\x09\x8d\xb0\xa2\x9c\x7d\xf8\x87\xe4\x2c\x7f\x77\x2e\x78\x9c\x46\x2d\xdf\xc5\x6a\x2a\xf3\x39\x7e\xc0\x73\xfa\xe1\xe9\x4f\x1f\x70\xa4\xe8\x13\x19\x26\x38\x65\xd1\x74\x38\x4f\x30\x93\x1f\xb8\x98\x7c\xf8\x1f\x1a\x9f\x71\x31\xf9\x17\xfc\x31\x17\xfc\x1f\x24\x52\xe6\x1f\x31\x9f\x61\xca\xcc\xdf\x0c\xcf\xc8\xbf\xb2\x46\x11\x7a\x37\x21\xca\xfb\xa7\x9e\x7a\x3a\x9b\x61\xb1\xd0\xe4\xf9\x48\x54\x34\x45\x6a\x4a\x90\xe9\x14\x39\x7a\xf1\x31\xc2\xe8\x5c\x90\xf1\xf9\x6f\x82\x8c\x87\x8e\xea\x67\x86\xda\x57\x30\xb4\xdb\x04\xb3\xdf\xce\x2c\xcd\xa0\x65\x3e\x27\x02\x26\xda\x8b\x75\xeb\x9f\x88\xea\x40\xb3\xf9\xfb\x7f\xf6\x5f\x17\x44\xce\x39\x93\x44\x16\xc6\x87\xd0\xbb\x3f\xff\xf0\x43\xe9\x27\x84\xde\xc5\x44\x46\x82\xce\x95\x5d\xd9\x0e\x92\x69\x14\x11\x29\xc7\x69\x82\x5c\x4b\xfe\x68\xcc\x5c\xf5\x32\xe3\xa5\xc6\x10\x7a\xf7\xff\x13\x64\xac\xdb\xf9\xf7\x0f\x31\x19\x53\x46\x75\xbb\xd2\xec\xa6\x7c\xb8\xef\x0a\x5f\xfd\xeb\xdf\xaa\xfe\xfe\x97\x37\xa3\x39\x16\x78\x46\x14\x11\xf9\xfa\x9b\xff\x94\xe6\xa2\x17\x49\x77\x6e\x56\xb4\x3c\xe8\xd2\x4c\x6f\xe0\x2f\x9c\x9c\x20\x2e\x26\xe8\x91\x2c\x10\x6c\x29\x12\x23\xc5\x61\xed\x04\x91\x3c\x15\xd1\xf2\xec\x29\x7c\xaf\xb7\x59\xf9\x89\x20\xbf\xa7\x54\x10\xbd\x4c\x4a\xa4\xa4\xf4\x54\x2d\xe6\x30\x3c\xa9\x04\x65\x13\x9f\x08\xff\x3a\x69\x35\x29\xbb\x3b\x57\x4c\xec\x1a\xcf\x88\xde\x69\x7a\x0e\xf6\x8b\xc2\x7c\xd0\x88\x24\x9c\x4d\x24\x52\xfc\x70\xa6\x66\xce\xda\x1a\x33\x33\x1f\xd4\x4e\x6c\xc0\x3a\xee\x95\x08\x33\x34\x22\x48\xb3\x1b\x1a\x13\x41\x62\x84\x25\xc2\x48\xa6\x23\x49\x14\x7a\xa6\x6a\x4a\x99\xfe\xf7\x9c\x44\x74\x4c\x23\x47\xb3\xc3\xa1\x0d\xfc\xd9\x4c\x99\x07\x49\x84\x1e\xf8\x13\x8d\x49\x8c\x9e\x70\x92\x12\x34\xe6\xa2\xb8\x8f\x07\xac\x3f\xd5\x74\x98\x8d\x28\x03\x7e\xa2\x69\xe9\x76\xc8\x1f\x1d\xb9\xfe\x88\x74\x7f\x28\x65\xf4\xf7\x94\x24\x0b\x44\x63\xc2\x14\x1d\x53\x22\xcb\xad\xfd\x91\xdb\x23\x84\x4e\x91\xa6\x33\x11\x0a\xe8\xcd\x99\x22\x5f\x95\x44\xa7\x28\xa1\x8f\x04\xbd\xbf\xa2\x52\xa1\xce\x6d\xef\xfd\x09\x7a\x6f\x98\x00\x02\xf6\xfb\xfe\x05\x28\x9c\xfd\xfd\xdf\x1e\x3f\x51\x78\x52\xe6\x24\xef\x3a\x9a\x45\xdd\x9b\xdb\x2f\x6f\xe1\xbf\xff\xcd\x6f\xc7\xae\x57\xe3\x95\x72\xc4\xb7\x48\xb8\x44\x02\xbf\x0d\xfc\x36\xf0\xdb\xfd\x53\x78\xff\xd2\xd9\xef\x29\x11\x8b\x86\x59\x8d\x71\x22\x0f\xfa\x1a\xc9\xef\x10\x7b\x81\xb4\xbd\x36\x60\xf5\x8b\x37\x86\xd4\x1b\x6f\xdb\x0b\x43\xb7\x5b\xbe\x31\xe4\x71\x5d\x19\x7a\x0a\xfb\xbe\x36\xb6\xb9\x33\xb0\x82\xc3\x8c\x29\x33\x67\x3f\x63\x05\x42\xea\xe3\xef\xb6\xef\x81\x70\xca\x6d\xae\x10\x6f\x66\xde\x2d\xe2\x2e\x07\x8f\x2a\x07\x38\xef\x84\xce\xe8\xaa\xf5\xed\xb1\x98\x46\x58\x59\x1e\xce\xd2\xd9\x88\x08\x4d\x06\xc7\xb5\x60\xb6\x23\xcd\xc5\x54\x2a\x18\x89\x5b\x4c\x73\x1b\x8e\x46\x99\x22\x13\x22\xca\x5f\x8f\xb9\x98\x61\x65\x5f\xf8\x8f\xbf\xae\x4b\x08\xc5\x1f\xc9\xaa\xf5\xef\x99\xd5\x8c\xb0\x84\x6d\x30\x4b\x13\x45\xe7\x09\x41\x73\x3c\x21\xd2\x52\x24\x4d\x94\x3c\x81\xd7\x24\x11\x4f\x44\x9c\x66\x17\x2b\xf4\xe0\x04\x8a\x54\x1a\xee\x3f\xce\xe4\x62\x46\xbe\x2a\x68\x69\xc0\x40\xa4\x00\x12\xf9\x17\xe5\xcb\x5c\x0e\x2d\x48\x25\xb9\x50\xc3\xd1\xe2\xec\x91\x2c\xf5\x5b\xbb\x73\x30\x43\x58\x29\x41\x47\xa9\x22\x7a\xde\xba\x0d\x77\xf5\x01\x7b\x34\x72\x47\x1b\xd6\xf0\x7a\x13\x8e\xa9\x20\x11\xcc\x6d\x9d\x03\x93\x7d\xa5\xe7\xad\x2f\xfe\x85\x99\xbd\x96\x03\xb4\x98\x55\x41\x81\x6c\xc9\x07\x6c\xc0\xd0\x29\xba\xec\xde\x5f\x74\xaf\x2f\x7b\xd7\x9f\xce\xd1\x8f\x0b\x14\x93\x31\x4e\x13\x75\x82\xc6\x94\x24\xb1\x44\x58\x10\x68\x92\xc4\x5a\x94\xd2\x83\x21\x2c\xa6\x6c\x82\xb8\x88\x89\xd8\x1f\x19\x4b\x4f\x09\x4b\x67\xa5\x7b\x05\x7e\xcf\x47\x5f\xfa\x42\x8b\x18\xd9\xa3\xc2\x93\xff\x5e\x22\x30\xcc\x58\xf7\xed\xb5\xb6\xe6\x32\x06\x41\xcd\x17\xd4\xa2\x29\x4d\x62\x41\xd8\x07\x85\xe5\xe3\x90\x7c\x25\x51\x6a\xe4\x0c\xb0\x23\x17\x7f\x1c\x6a\x45\x82\xc7\xa4\xf8\x4b\xe1\x1f\xc6\xea\xbc\xf6\x67\xb9\x64\xb8\xf6\xa7\x99\x2d\x62\xed\x2f\xc1\x72\xd1\xee\x3b\xf8\x85\xc6\x95\x6f\xc3\x2f\x2b\xe6\xe0\xde\x69\x18\xac\x7b\xa5\x76\x54\xee\x05\x2b\x00\x57\xbe\x23\x88\x12\x8b\x21\x56\x8a\xcc\xe6\x6a\x4d\xab\x0c\x46\x89\x16\xb3\x9b\xc4\xea\x6b\x1e\x93\xae\xeb\xef\x37\x64\xa4\x7b\x12\xa3\xd1\xc2\x1e\x8b\x31\x11\x84\x45\xa4\xbe\x85\x3e\x96\x8f\x79\x0b\xab\x64\xf3\x42\x7f\xf2\x23\x17\xfa\xf3\xa3\x70\x0c\x14\x46\xfe\x12\x32\xfa\x26\x27\xf5\x8d\x79\x13\x36\xe5\x3a\x6f\xce\x16\xb6\x21\x0f\x0d\x96\xb3\xed\x29\xd9\xd6\xce\xc6\x05\x92\x0b\xa9\xc8\x6c\xa5\xc5\xed\x78\x08\x61\x2f\xc9\x43\x1d\x70\xe9\x9e\xfe\x06\x4e\x7d\x51\xea\x08\xc7\x7b\x0d\x92\xed\xca\x5e\x7e\xe8\xf3\x74\x01\x30\xcd\x53\xbd\x77\xcb\xe7\xb9\xeb\x8e\x62\x9a\x05\x79\x78\xd7\x83\xdc\x93\x05\xaa\x76\xad\x1c\xb5\x87\x30\x80\x15\xb6\x87\xa2\xc7\x25\x3b\x7f\xfa\x53\xdf\x68\x67\x2c\xb4\x6a\x4a\xa5\x67\xbf\x44\x11\x17\x46\x1c\x8e\xed\x79\x37\xe6\x87\x4e\xbf\x73\xdf\xed\x9f\xa3\x0e\x8a\xb1\xc2\xfa\x80\x0b\x32\x17\x44\x12\xa6\xc0\xb4\xa3\xbf\x57\x0b\x34\xe3\x31\x49\x8c\x11\xe2\xa3\x96\xfe\xd1\x25\x56\xf8\x02\x2b\x9c\xf0\xc9\x19\xea\xc0\x3f\xf5\xc7\x54\x22\x9c\x48\x8e\xb0\xdb\x56\x24\x76\x4d\x60\x16\x3b\xd6\x82\x51\xc4\x67\x73\x9a\x64\xde\xa6\xcc\xde\x46\x59\x4c\x9f\x68\x9c\xe2\x04\xf1\x91\xe6\x2a\xf2\x6c\xc0\xba\x4f\x84\xa9\x14\x27\xc9\x02\xe1\x24\x41\xb6\x5b\xf7\x02\x92\x53\x9e\x26\xb1\x6e\xd7\x8d\x52\xd2\x19\x4d\xb0\xd0\x32\xad\x19\xed\x8d\x6d\x0b\xf5\xa7\x24\x1b\x2b\x8c\x4b\x53\x73\x86\x1f\x89\x44\x54\xa1\x39\x97\x92\x8e\x92\xfc\xcc\x3f\xf4\x10\x8c\xfb\xe2\xaa\x07\x26\x9e\x48\x21\x6e\x78\xa8\xeb\xdc\x9a\xf4\x5c\x8f\x33\xcc\x18\x81\x8e\xb9\x9a\x12\x61\xbb\xb7\x2f\xbf\xb6\xb5\xe6\xe1\xfa\xfe\xb6\x7b\xd1\xfb\xd8\xeb\x5e\x2e\x9b\x6b\xfa\x9d\xfb\x9f\x97\x7f\xfd\x72\x73\xf7\xf3\xc7\xab\x9b\x2f\xcb\x4f\xae\x3a\x0f\xd7\x17\x3f\x0d\x6f\xaf\x3a\xd7\xcb\x0f\xed\xb6\x6a\x6d\xf9\xf1\x47\xb6\xb3\xb3\x75\x74\x46\xa1\x60\xd4\x5f\x63\xd9\x77\x6d\xd4\x3f\x79\xbb\x56\xfd\x31\x4d\xc0\xe8\xd0\xda\xa2\x9f\x59\x8d\xec\x97\x68\x8e\xa5\x34\x72\xa0\x19\xc1\xd9\x80\x7d\xe6\x42\xb3\xeb\x31\xd7\x1c\x51\xcb\x8a\x4a\xa4\x91\xa2\x6c\x92\x7d\x74\x8e\x06\xe9\x0f\x3f\xfc\x25\xba\xa2\xec\x11\xfe\x22\x87\x48\x9c\xe0\xf2\x08\x2e\x8f\x83\x73\x79\xfc\x5b\xc5\xa7\xfb\x77\x0f\x04\x1b\x7f\xb0\xf1\xef\xcf\xc6\x1f\x4c\xfc\xde\x18\x82\x7d\x7b\x5b\x42\x04\x03\x58\xb0\x6f\x6f\x4f\x88\x60\xdf\x3e\xd0\x19\x87\xe3\x1d\xec\xdb\xc1\xbe\x1d\xec\xdb\xc1\xbe\x1d\xec\xdb\xc1\xbe\xfd\xcd\xd8\xb7\x0f\x30\xe4\x29\x18\xf9\x83\x91\x3f\x18\xf9\x83\x91\x3f\x18\xf9\x83\x91\xff\x78\x8c\xfc\x5a\xda\xfd\x50\x0e\xfd\xdf\x13\x84\x8c\x16\x2e\xd9\x3c\x55\x20\x4a\xf2\x54\xe9\x3f\x75\xff\xb0\x57\x1a\x20\x00\xda\x19\x94\x3f\x11\x95\xbd\xa8\x45\xdb\xa3\x88\x15\xff\xc2\xc5\xe3\x38\xe1\xcf\xd9\xc8\x3f\x11\xa5\x07\x7f\x67\x7b\x09\xd0\x32\x01\x5a\x06\x05\xa8\x83\x5d\x43\x1d\x1c\x94\x89\x7a\x57\xfc\xdd\x7d\xfd\x4e\x2b\xff\x8a\xd4\xf2\xe2\x3e\x11\x33\xca\x9c\xec\x42\x99\x16\x72\x27\x82\x48\xb9\x2d\x07\xce\x1a\xce\x5e\x3f\x0a\x1e\x9c\x8d\x36\x1b\x7f\xe0\xbe\x81\xfb\xd6\x4c\x2d\x70\xdf\x37\xc6\x7d\x5b\x4c\x6d\xc4\xe3\x25\x75\xc2\x8c\xa4\xea\x49\xf3\x48\x76\xc6\xa1\x7e\x4f\x49\xbb\xb0\x83\x97\xd0\x1a\x8e\x5a\x51\x38\x86\x3b\xea\x00\xf4\x84\xc0\xd4\x03\x53\xaf\xa6\xcc\x51\x32\xf5\x63\xf4\x09\xec\x9f\xa7\x17\xbd\x28\xb9\x39\xa8\x02\xe8\xa1\x3e\xc6\xb3\x36\x84\xb3\x26\x42\xd3\x0b\xc0\x7c\x91\x6b\xa2\x18\xe6\xb8\xe2\xaa\x28\xbc\x7c\x34\x76\xa5\xc2\xa8\x5f\xfe\xae\x78\xe3\x68\x03\xdf\x4a\xb0\x65\x88\xa5\xdc\x90\x50\x6f\xf8\xd2\x7c\xb9\x48\xc8\x97\xbf\xed\xbe\xd9\x3b\x2d\x5c\x69\xf6\x3f\x81\xe1\x07\x86\x1f\x18\xfe\x2b\x31\xfc\x0d\xe8\x1e\x54\xb8\xa5\x4b\xad\x12\xcc\xaf\x2d\x7a\xdf\x3a\xa9\x7c\x6b\xe4\xee\xb5\x4e\xd6\x5b\x91\x9d\x57\x99\x8e\x57\x95\x7f\xb7\x9c\x70\x57\x99\x61\xb7\x5d\x4a\xdd\xa6\x77\x75\xfb\x24\xb9\x4f\x44\x15\x5e\x3e\x1a\xfd\xb3\x30\xea\x97\xbf\xac\x5f\x3d\x18\xf4\xb5\xf8\xf4\xb7\x97\x10\x18\x32\x00\xf7\x48\xba\xb7\x2e\xd6\x1c\x6e\x8e\xdf\x37\x90\xd4\x17\xb2\xf8\xd6\xa2\xd1\xdb\x4a\xdb\x7b\xab\x79\x7a\xc7\x99\x98\x17\x32\xf1\x42\x26\xde\x4e\x55\xde\xd2\xd3\x6f\x2a\x13\xef\x98\x53\xef\x5e\xde\x3c\x11\x4c\x0e\x87\x6f\x72\x08\x16\x07\xfb\x9f\xa0\x7d\xaf\x3d\xf3\x20\xda\x07\xed\xbb\xcd\xcc\x83\xf6\x1d\xb4\xef\x03\x3c\xa2\x41\xfb\x0e\xda\x77\xd0\xbe\x83\xf6\x1d\xb4\x6f\x14\xb4\x6f\xaf\xa1\xd7\x02\x6c\x38\x04\xe7\xe6\x51\xd9\x1c\xf2\xa9\x0f\xdd\x01\x5f\x06\x39\x28\xb0\xdd\x36\xb8\x07\xf0\x97\x53\xea\xd7\xc5\xe1\xad\xd5\xd2\x2f\xf3\xc1\x76\x81\x49\xfe\x66\x59\xc5\x0a\x85\x7d\xe9\xbb\xa3\x88\x11\x58\x1a\x75\x48\xb7\xdd\x54\xe4\x79\x25\xa1\x61\x4f\x14\x38\x92\xeb\x6b\xfd\x85\x7a\xc3\xba\x64\xd0\x21\xb7\x4f\xa1\x3b\x1a\xdd\xf1\x78\x74\xc6\x97\x97\x2d\xde\xa2\x38\x11\xa4\x09\x6f\x0c\xe1\xe2\x0d\x17\x6f\xb8\x78\xc3\xc5\x1b\x2e\xde\x90\x81\x6f\xdf\xdf\xab\x3c\x51\x12\x26\x5a\x01\x34\xee\xbc\x32\x50\x85\x28\xe1\xdd\xc0\xab\xea\xfc\x94\xbf\xa6\x44\xfe\xf5\x28\x65\x8a\x97\x28\xf5\x13\x84\x8a\x23\x11\x2a\xde\xa4\x2d\x29\x48\x4a\x41\x52\xaa\xa6\x4c\x2b\x49\x69\xc0\xfa\x53\x4d\x87\xd9\x88\xb2\xcc\x9b\xe7\x76\xc8\x1f\x1d\xb9\xfe\x88\x74\x7f\x28\x65\xf4\xf7\x94\x24\x8b\x9c\x27\xc9\x72\x6b\x19\x5e\x34\x3a\x45\x9a\xce\x44\x28\xa0\x37\x67\x8a\x7c\x55\x12\x9d\xa2\x84\x3e\x12\xf4\x5e\x33\x66\xd4\xb9\xed\xbd\x3f\x41\xef\xaf\xa0\x6c\x1d\x9a\x27\x98\xc9\xf7\x07\xe3\xb8\x09\x60\xfd\xfb\x02\xeb\x0f\x58\xfd\x01\xab\xbf\x2d\x81\x02\x56\x7f\xc0\xea\x3f\x5e\xac\xfe\x9d\xe9\x87\x1b\xe2\x72\xbe\x8a\xa6\x78\x9c\xbe\xec\xa0\x29\xa2\xa0\x29\x06\x4d\x31\x68\x8a\x41\x53\x3c\x12\x4d\xf1\x30\x28\x1c\xd4\xc4\xa0\x26\x06\x35\x71\x87\xc4\x09\x6a\x62\x50\x13\x83\x9a\xb8\xa4\x26\x1e\xaf\xe7\xf0\x2f\x41\x1f\x0c\xfa\xa0\xff\xfb\xf1\xe9\x83\x41\x75\x0a\xaa\x53\x35\x65\x8e\x53\x75\x3a\x18\xd9\xe7\x18\x43\x8a\x82\x52\xd8\x9e\x10\x41\x29\x6c\x4d\xaa\xa0\x14\x36\x10\x27\x28\x85\x41\x29\x0c\x4a\x61\x6b\xa5\xf0\x98\xdc\x85\x41\x3b\x0c\xda\xa1\xff\x7b\xd0\x0e\x83\x76\x18\xb4\xc3\xe0\x58\x0b\xaa\x61\x50\x0d\x83\x6a\x18\x54\xc3\x55\xc4\x09\xaa\x61\x50\x0d\xbf\x2d\xd5\x90\x3c\x11\xa6\x24\x14\x43\xf4\x15\xa5\x77\x73\x2e\xeb\x15\x3c\x9f\x3b\x54\x28\x77\xd0\x66\xb1\x28\x21\xa0\xb6\xfd\x86\xa6\x58\x22\x1e\x45\xa9\x28\x9d\x81\xb2\x7a\x77\x21\x08\x56\x04\x5a\xd0\x1f\x1e\x83\x5a\xb7\x3c\xdd\x97\x02\x20\x1e\xf1\x78\x69\xb7\x9b\x83\x50\xf5\xa4\x59\xcc\xda\xd9\xd4\x7f\x4f\x49\x3b\xad\x76\x8f\x9b\x5a\x61\xf9\xb8\xe3\x4d\x5d\x00\x9a\xde\x68\x53\x43\x0b\xc7\xb2\xa9\x97\xa7\xfb\xcd\x6c\xea\xaa\xa9\x1f\xc2\xa6\x7e\xe6\xe2\x71\x9c\xf0\xe7\x1d\x6f\xec\x2f\xb6\xd9\xed\x36\x77\xd6\xca\xb1\x6c\xf0\xea\x69\x7f\x33\x9b\xbc\x6e\xfa\xaf\xbb\xd1\xb3\xfa\x10\xad\xb7\x78\x5f\xd0\xc9\x44\xab\x19\xa0\xe1\xe9\xad\x68\x4d\x1f\x0d\x00\x49\x79\x45\x84\x95\xdb\x3a\x7b\xf5\x18\xb6\x74\x36\x58\x33\xf6\x6f\x66\x2f\x2f\xcd\xfb\x40\x36\xf1\x2b\x81\x76\xb4\x2b\xf8\x71\x45\xa5\xca\xde\x3c\x8e\x6c\xab\x6c\xb8\x2f\xe1\x37\x09\xf9\x3b\xc1\xcd\x10\xdc\x0c\x87\xef\x66\x38\x18\x83\x5a\x30\xc9\xef\xc9\x24\x4f\x65\xb0\xc9\x07\x9b\x7c\x5b\x02\x05\x9b\x7c\xb0\xc9\x1f\xaf\x4d\x7e\x4d\xdd\x61\xc3\x08\xad\x3a\x83\xd0\x3a\xfa\xc3\x27\x92\xab\x0f\xc7\xa5\x3d\x04\xcd\x21\x68\x0e\x41\x73\xd8\xb9\xe6\x70\x50\xe5\x08\x77\xc5\xa5\xdd\xd7\xef\xe6\x69\x3d\x4f\x7d\x98\xc7\x58\x11\x94\x31\x6f\xbb\x13\xf4\xc5\xa8\x78\x76\x08\xec\x7e\xd8\x92\xed\x9a\xbe\x8e\x94\xf3\x9a\xc1\xbf\x60\x79\xd6\xc0\x87\x03\x1f\x0e\x7c\xf8\xb0\xf1\xcd\x0f\xc7\x7d\xe0\xd8\xd3\xa1\xb8\x0f\x04\x89\xf8\x13\x11\xad\x7d\x61\x77\x04\x1c\x60\x20\xdd\xcf\x05\x79\xa2\x3c\x95\xc9\xe2\x54\xa4\x0c\x39\xdf\xb1\x77\x49\x41\x0c\xff\x33\x4d\x12\xc4\x99\x56\x15\x15\x16\xca\x3d\x66\x13\x34\x16\x7c\x06\xdb\x25\xc1\x52\xa1\x47\xc6\x9f\x19\x1a\x63\x9a\xa4\x82\xa0\x39\xa7\x4c\x9d\x0d\x58\x8f\xa1\x3b\x33\x46\xa8\xb9\x78\x82\x52\x49\x84\xd4\x47\x8d\x71\x85\xa2\x29\x66\x13\x82\x30\x5b\xd8\xe2\xe5\x39\x03\xd7\x9b\x34\x35\xb7\xa6\xee\xa2\x04\x58\x9f\x8d\x11\xac\x8d\x54\x22\x2a\x11\xf9\xaa\x04\x99\x91\x64\xa1\xfb\xd0\x57\x94\xe2\xc8\xd2\xc7\x0c\xd5\xee\x79\x22\x04\x17\x12\xaa\x35\x8e\x16\xff\xc4\x4c\x51\x46\x10\xe8\x74\xd2\x58\x12\x4f\xd1\x15\x97\x60\x62\xfa\xf9\x6f\x12\x45\x49\x2a\x15\x11\x27\x68\x94\x4e\xa4\x56\x6a\xe7\x09\x56\x63\x2e\x66\x7a\x84\x94\x49\x85\x47\x34\xa1\x6a\x71\x82\x66\x38\x9a\x9a\xb6\x80\x06\xf2\x64\xc0\x62\xfe\xcc\xa4\x12\x04\x67\xbd\xbb\x87\xe8\x3b\xff\x99\xd9\x00\xf2\xfb\x13\x38\x9b\x74\xa6\x35\x73\x6f\xf8\xf9\x8a\x9b\x35\xd1\x8d\x90\x18\x8d\x48\x84\x53\x69\xf3\x2e\x94\x58\x20\xf2\x75\x8a\x53\x09\x6b\xa7\xa7\x67\xeb\x5d\x46\x7c\x36\x4f\x88\x22\x88\x8e\x91\x12\xfa\xe2\xc2\x13\x4c\x35\xe9\xee\x09\x69\x21\x6d\xd8\x05\xb4\xbb\xfe\x37\xe0\x12\x33\x2e\x08\x8a\x89\xc2\x34\x69\xcc\xc5\xb1\xdf\x06\x27\xe9\x31\x71\xb9\xe2\x82\x1f\x04\x9b\x4b\xc0\xa0\xbf\x03\x9f\x3f\xb3\x9e\x86\x08\x27\x5b\xba\xff\xef\xec\xa0\xc2\xde\x3e\xae\xbd\x6d\x56\xed\x70\x36\xf7\x41\x7b\xfd\x8f\x6a\x4f\xbf\x90\xd3\x3f\x68\x57\x41\xbb\xaa\xa6\x4c\xf0\x8f\x87\x4c\xbc\xe5\x69\x05\xb7\x7f\x70\xfb\x07\xb7\xff\x2e\x89\x13\xdc\xfe\xc1\xed\xff\xcd\xba\xfd\x0f\xdc\xd3\x7f\x54\x1a\x43\xd0\x16\x82\xb6\x10\x7c\x31\x6b\x4e\xed\xe8\x64\xf4\x5d\x71\xe6\xcc\xd5\x1f\x93\x84\x28\x52\x6f\x7d\x24\x62\xa6\x75\x3b\x23\x75\x50\xa6\xc5\xd3\x89\x20\x52\x6e\xcb\x67\xb3\x86\x8f\x93\xdb\x66\xc3\x7f\x41\xff\x7e\x60\xbf\x81\xfd\x56\x53\xe6\x28\xd9\xef\xe1\x18\xd2\xbd\xc3\xfc\x52\x96\xf4\x8c\xff\x1e\x68\xa8\xd5\x51\x31\xe3\x17\x8f\xb4\x0a\x9c\x38\x70\xe2\x6a\xca\x04\x4e\x7c\xfc\x41\x49\xc6\xab\x3a\x9c\x27\x98\x0d\x69\x6c\x93\x13\x4c\x66\x42\x6e\xac\xd8\x97\x67\x53\x1f\xad\xd8\x00\xa6\x66\x00\xa5\xe2\x37\xfd\x49\x92\x3b\x3a\x10\x1f\xe9\x61\xac\x84\x8e\x35\xbe\x91\xdb\x04\xb3\x5e\x7c\x1c\x59\xcf\x95\xd3\x7f\x09\x67\xe8\xdb\x0b\x9e\xdd\xe6\x92\xc2\x0a\x9c\x6e\x98\x32\x63\x76\xcd\x81\x6f\x0b\x46\xe5\xc3\x98\xe8\x36\x57\x96\x37\x31\xef\xd6\x72\x97\x91\x47\x94\xc3\x9b\x76\xf0\xc5\x05\x54\xcc\xe0\x6d\x6a\x39\xe1\xe0\x6d\x3a\x5c\x6f\x53\x8b\x65\xdc\x8b\x0b\xf9\x85\x8f\xe7\x8b\xca\xac\x47\x2d\xa9\x06\x41\x15\x05\xb1\x2e\x88\x75\xf5\xb3\x0e\x62\x5d\x10\xeb\x82\x58\x17\xc4\xba\x20\xd6\xbd\xbe\x58\xd7\x62\x9a\xdf\x6c\x94\xc1\x2a\x51\xb5\x3d\xf2\xa9\xc9\xf1\x81\x54\xc0\x74\x9e\x70\x1c\x37\x45\x7a\xe5\xc2\xa4\x5f\x68\xab\x41\x02\x35\xad\xe7\x9f\x1d\x83\x00\x9a\x8f\xf6\x1b\xcb\x7f\x5a\x9e\xf8\xa1\x78\x0b\x5e\x0b\x03\xb5\x7a\xbf\xaf\xa1\x73\xc9\xbf\x1e\xd7\x8e\x0f\x90\xa8\x01\x50\xa3\x62\x6a\xc1\x77\x1d\x52\xbe\x42\x6e\xd4\x9b\x53\xdc\x43\x6e\x54\xc8\x8d\x0a\x66\x8d\xe6\x69\x07\xb3\xc6\x9b\xc8\x8d\x5a\x5f\x99\xd8\x63\xd9\xea\xed\xd5\x8a\xa3\x08\x39\x0a\x6a\x45\x50\x2b\x82\x5a\x11\xd4\x8a\x43\x2c\xe8\x1c\x74\x8a\xa0\x53\x04\x9d\x22\xe8\x14\x41\xa7\xd8\x39\x19\x83\x4e\xd1\x42\xa7\x80\xbf\x2c\x60\xe9\xda\x0a\xc6\x9a\x8a\xc5\x0a\x54\x86\xfc\xa3\x23\xd3\x2a\x82\x46\x11\x34\x8a\xa0\x51\xbc\xb8\x46\x71\x30\x13\xb2\xec\x73\xc5\x9c\xee\xdd\x82\x94\xe0\xa1\x0f\x6f\x3e\x6e\x44\x43\x68\x69\x85\x30\x51\x54\xd0\xb2\x5d\xa7\x3f\xf5\x75\x14\x13\x9b\x0a\x62\x79\x1e\xba\x89\x22\x2e\x0c\x53\x8e\xed\x2e\x37\xf2\x44\xa7\xdf\xb9\xef\xf6\xcf\x51\x07\xc5\x58\x61\xbd\xad\x05\x99\x0b\x22\x09\x53\x20\xab\x11\x88\xca\x05\x90\xee\xc4\x48\x15\x1f\xf5\xfd\x83\x2e\xb1\xc2\x17\x58\xe1\x84\x4f\xce\x50\x07\xfe\xa9\x3f\xa6\x12\xe1\x44\x72\x84\x1d\xe9\x49\xec\x9a\xc0\x2c\x76\x07\x0a\x03\xf6\x34\x4d\x32\xe5\x34\x53\x2f\x28\x8b\xe9\x13\x8d\x53\x9c\x64\xc1\xce\x03\x53\x60\x38\xc5\x49\xb2\x40\x38\x49\x90\xed\xd6\xbd\xe0\xe0\xac\x47\x24\x1b\xa5\xa4\x33\x9a\x60\xa1\xd9\xb1\x19\xed\x8d\x6d\x0b\x69\xc5\xd8\x8d\x15\xc6\xa5\xa9\x39\xc3\x8f\x44\x22\xaa\xd0\x9c\x4b\x49\x47\x49\x7e\x00\x1e\x7a\x08\xc6\x7d\x71\xd5\x03\x99\x2d\x52\x88\x1b\xce\xe1\x3a\xb7\x0a\x8c\xeb\x71\x86\x19\x23\xd0\x31\x57\x53\x22\x6c\xf7\xf6\xe5\xd7\x16\xbf\x1e\xae\xef\x6f\xbb\x17\xbd\x8f\xbd\xee\xe5\xb2\xfc\xd5\xef\xdc\xff\xbc\xfc\xeb\x97\x9b\xbb\x9f\x3f\x5e\xdd\x7c\x59\x7e\x72\xd5\x79\xb8\xbe\xf8\x69\x78\x7b\xd5\xb9\x5e\x7e\x68\xb7\x55\x6b\x51\xce\x1f\xd9\x3e\x64\x39\xf7\x75\x0b\x84\x00\x7b\xb8\x14\x56\xa9\x34\xd5\xa0\x05\x99\x50\xa9\x80\xfd\xb7\x91\xc2\x56\x03\x03\x1c\xad\xf4\x15\xaa\xb0\x04\x59\x2c\xc8\x62\x41\x16\x3b\x36\x59\xec\xe5\x4c\x02\x47\x14\xa6\xf8\x97\xe3\xba\x7b\x02\x88\x7b\x60\xce\x87\xcf\x9c\x0f\xce\xf5\x76\x30\xa6\xf3\x63\x04\x88\x0c\x4e\xc5\xf6\x84\x08\x4e\xc5\xf6\xb4\x0a\x4e\xc5\x06\xe2\x04\xa7\x62\x70\x2a\x7e\xc3\x4e\xc5\xa3\x8c\x4d\x0c\xaa\x84\x7b\x2f\xa8\x12\x41\x95\x78\xa3\xaa\xc4\xc1\x50\x38\xe8\x11\x41\x8f\x08\x7a\x44\xd0\x23\x9a\x89\x13\xf4\x88\xa0\x47\x04\x3d\xe2\xd8\xe2\x11\x8f\x4b\x93\x08\x5a\x44\xd0\x22\x0e\x5b\x8b\x38\x98\x09\x1d\x8f\xb7\xb8\xdd\x7c\x42\xe4\x5e\x88\xdc\x0b\x91\x7b\xb5\x91\x7b\x6f\x54\x93\xdf\x95\xfc\xe6\xbe\x3e\xb4\x80\xc4\xe3\x12\xbf\x42\xad\xa2\xec\x69\x10\xc6\x82\x30\xf6\x8d\x0a\x63\x07\x04\xa2\x78\x10\x25\x97\x66\x58\x45\x53\x3c\x4a\xc8\x30\xb3\x65\xc9\xb6\xea\xfd\x15\x95\x4a\xa2\x28\x95\x8a\xcf\xea\x2f\x97\xcf\xae\x87\x4e\xd6\xc1\x05\x67\x63\x3a\x49\xcd\xdd\xf2\x1b\x6c\x7d\xef\x44\xe7\x02\xee\x62\x4e\x56\xf9\x15\x2b\x5a\x3f\x8a\x6b\xa9\x7a\xe8\x2f\x75\x3b\xad\xa3\x8f\xe4\xb6\x4b\xab\x4c\x68\x11\x72\x78\xd7\xbd\xbf\x79\xb8\xbb\xe8\x9e\xa3\x0e\x88\x58\xe0\x4e\x30\x5b\x81\xfe\x53\x4f\x0a\x29\x2c\x1f\xf3\xb5\x14\x66\x9b\x4b\x90\xb3\xc1\x7f\xa1\x45\x7e\x74\x8a\x2e\xae\x1e\xee\xfb\xdd\xbb\x9a\x06\xed\x46\x81\xc2\x8b\x64\x36\x4f\xb0\x22\x31\x7a\x4c\x47\x44\x30\xa2\xa5\x9d\x28\x49\xb5\x70\x93\x7b\x35\x4c\xa3\xdd\xff\xea\x5e\x3c\xf4\x7b\x37\xd7\xc3\xbf\x3f\x74\x1f\xba\xe7\xc8\xed\x38\xdd\xac\x1e\x97\x1e\x45\xbc\x60\x78\xa6\x15\x2b\xfd\x43\x5e\xea\xf1\xf7\x94\xa4\x04\x61\x29\xe9\x84\xcd\x08\x53\xe5\x16\xdd\x80\xaf\x3a\x3f\x76\xaf\x8a\x2d\x4f\x09\xfa\xf9\x6f\xf9\xa0\x12\x3c\x22\x89\x75\xb3\x80\xe7\x40\x6f\xf4\xbc\x23\xeb\x7f\x49\x0d\x55\xff\xfe\xd0\xb9\xea\xf5\x7f\x1d\xde\x7c\x1c\xde\x77\xef\x7e\xe9\x5d\x74\x87\x56\x58\xbe\xe8\xe8\x7e\x0b\x3d\x59\x99\x1a\xfd\x9e\xe2\x44\x2b\x5d\x7c\x0c\x7e\x0b\x1a\x11\xf4\x3c\x25\x0c\xa5\x0c\x76\x9c\xd1\xe4\xb4\x7a\x97\x75\xaa\x4f\x99\x99\xd1\xed\xd5\xc3\xa7\xde\xf5\xf0\xe6\x97\xee\xdd\x5d\xef\xb2\x7b\x8e\xee\x49\x02\xba\x8e\x23\x3a\xac\xe2\x3c\x49\x27\x94\x21\x3a\x9b\x27\x44\x53\xc3\xe8\x72\x23\x32\xc5\x4f\x94\x0b\x7b\x74\x27\xf4\x89\x30\x43\x47\x38\xb3\xd0\xbe\xd3\x29\x86\x1e\xe9\x6e\xae\x3f\xf6\x3e\x9d\xa3\x4e\x1c\x67\x73\x90\xd0\x46\x61\xe7\x3c\x73\xf1\x38\x4e\xf8\xf3\x69\x71\xd8\x9a\x39\x40\xf7\x66\x13\xf1\x27\x22\x04\x8d\x49\x69\x1f\x75\xee\xef\x7b\x9f\xae\x3f\x77\xaf\xfb\x40\x31\x25\x78\x22\xd1\x94\x3f\x83\x85\x1e\x66\x08\x86\xfb\x27\x4c\x13\xe8\xcc\x2d\x16\x67\xe8\x79\x4a\xc1\xab\x43\xa5\x4f\x30\xa3\x76\x8a\x94\xbd\xba\xd1\xb9\x70\xf0\x96\xb5\xb1\xf2\x49\x5a\x7e\xa3\x74\x2c\x9a\x5e\x28\xec\xf2\xe5\x17\x57\xed\xd6\xe5\x2f\x4a\xdb\xad\x5e\x07\x5d\xda\x2f\xf5\x33\xcd\xd7\xba\xb5\x0a\x5a\xa4\xe1\xcb\x5d\xb3\x44\x09\x1a\xc9\x0f\xd9\xbe\xda\x2f\xc8\x18\x91\x7a\xc3\x2a\x3a\x23\xc8\xf6\x6c\x4f\xea\x96\xb5\x6a\x3f\x11\x95\xbd\xf8\xd9\x34\x7c\x14\x59\x69\x5f\x2c\x47\xc9\x06\xff\x89\x28\x3b\xfe\x90\xa0\x16\x12\xd4\x6a\xa6\x16\xb4\xdc\xed\xb5\xdc\x63\xab\xc8\x1b\x93\xf9\x72\x87\xa5\x89\xc1\x3b\xc6\x5f\xb9\x14\x5e\x63\x2c\xc1\xd6\x16\x9e\x90\x27\x92\x80\x20\xab\x04\xd6\x7a\xb1\x15\xcf\x46\x82\xe0\x47\x2d\xd3\xc6\xfc\xd9\x17\xce\x62\xa2\x30\x4d\xe4\x2b\x85\xdf\xfc\xe5\xcf\xaf\x7a\x1f\x1e\xef\x15\x18\x6e\xc0\x60\x12\x0d\x97\xc5\x37\x78\x59\x1c\xa3\x53\x2a\xdc\x81\x87\x72\x07\x6a\x72\xc7\x43\xe7\x9e\xfe\xf0\x3f\x05\xa3\xdc\xbf\xf6\xa5\x1f\xde\x41\xbc\xaf\x6c\xba\x08\xbd\x0a\x9b\xbf\x59\xa7\xf6\x8a\x1b\xd1\xfb\xe2\x28\xf4\x41\x6f\xbc\x87\x64\x6a\xbd\xf3\x2d\xdf\xee\x9e\x98\x11\x85\x63\xac\xb0\x3e\x42\x13\xa2\xce\xd0\x0d\x83\x67\x7d\x2c\x1f\x4f\x90\xbb\xd7\x35\xef\xcc\x5d\x0b\x2f\x50\x5c\xb3\xa5\xcd\xea\xb5\x83\x11\x0e\x91\xa3\x07\x2d\x7d\x97\x53\x0b\x82\x57\x48\x2f\x3a\x64\x1c\x18\xf7\x75\xab\xe8\x9d\xdd\xdd\xca\xa6\xc5\x23\xbe\x98\x5f\x36\x5e\x67\xa7\xd7\x74\x0a\x43\x0f\x77\xb0\xf9\x4f\xb8\x83\xc3\x1d\x1c\xee\xe0\x26\xca\x84\x3b\xf8\x88\x03\xba\x2a\xae\xac\x57\x8d\xe8\x6a\x63\x56\x30\x36\x85\xdc\xa0\xb0\x26\xf0\x5c\x6e\x43\x58\x09\x17\x51\x21\xb5\xac\xc4\x8a\xc8\xbf\xa1\xe4\x38\xfc\xcb\xde\x2c\x5f\x02\x2f\x62\xa7\xc2\x8a\xc9\x58\x0e\x56\x85\x3d\x4a\x34\x6f\x4f\x9c\xd9\x46\x96\xc1\x0a\x2e\x19\x4c\x99\xb9\x93\xf2\xec\x25\xf9\x02\x3b\x6c\xcd\x89\x6e\x23\xd9\x78\x13\xf3\x84\x1b\x27\xb3\x78\x44\x39\x90\x45\xdd\x0b\xac\xc4\xeb\xd8\xf1\x5f\x1f\x4a\x82\xbc\x5d\x24\x89\x00\x96\xb0\xd6\x21\x09\x60\x09\x2f\x01\x96\xd0\x62\x19\xf7\x82\x80\xf2\xc2\xc7\xf3\x35\x55\x87\xe3\x71\x42\x1e\x99\xce\x70\x54\xfa\x42\xf0\x41\xee\xdf\xfe\x19\x4c\x85\xc1\x54\x58\x4d\x99\x60\x2a\xfc\xb6\xc2\xb5\x76\x75\xdf\xbb\xaf\x5f\xdb\x0b\x79\x64\x37\x73\x70\x42\x86\x4b\x38\x5c\xc2\xe1\x12\x0e\x97\xf0\xae\x28\x1c\xfc\x75\x6b\x2a\xdd\x47\xe1\xa5\x3b\xb2\x6b\x3d\x38\xe9\xc2\x8d\xef\x3e\x0e\x2e\xad\x55\xf3\x0c\x2e\xad\xe0\xd2\x0a\x2e\xad\xe0\xd2\x0a\x2e\xad\xec\xf7\xe0\xd2\x7a\xd1\xdd\xfa\xcd\x9a\xed\xaa\x35\x06\x1e\x93\x61\x05\x92\x4c\xf6\xd3\xd0\x4f\x1b\x2c\xfc\x5a\x70\xdf\x15\x9e\xf8\xbe\xbc\xc2\x83\x1c\xfe\x1d\xfa\xa5\xf1\xda\x79\xf8\x4d\xe6\x44\x1e\x93\xd6\x79\xf7\x85\x97\x0f\x3d\x2e\xd0\x4d\xd4\xa8\x1e\xfe\xc8\x5f\x20\xcf\xbe\xbc\x13\xde\x58\xf4\x59\xcd\xae\x7e\x8b\x96\xba\x8a\x33\x1a\xcc\x76\x2b\x09\xf5\x86\x01\x07\x2c\x13\x7e\x81\xf1\xbc\xfc\x1d\xe6\x80\xff\x86\x15\x37\x59\xf5\xb3\xfc\x3e\xab\x7e\x9e\xdd\x6a\xd5\x8f\xf7\x53\x22\xb1\xfd\xa5\x06\x76\x34\xff\xed\x23\x09\x77\xf7\x87\xfc\x12\xb6\xb4\xda\x8d\xf1\xc6\x2e\xb6\xc6\x4d\xfe\xe6\xae\xb7\xa6\x23\x1b\x2e\xb9\x96\xe4\x7a\xab\x57\x5d\xa8\x71\xd8\x64\xc5\x0b\x45\x04\x0f\xd0\x4a\x11\x8c\x88\xc1\x88\x78\x8c\x46\x44\x13\x7c\x30\x9c\x63\x41\x98\xaa\xd0\x2d\xca\xd7\x09\xbc\xee\x17\x9d\x72\x52\x07\x34\x80\xb4\x68\x8f\xec\x85\x9c\x5d\x55\x6f\x2c\x50\xbe\xa4\xbd\xbc\x61\x3b\xdb\x81\xeb\x23\x87\x63\x66\x7b\xab\x52\x7a\x30\x42\x05\x23\x54\x79\x9e\x2f\x67\x84\xda\x80\xee\xc1\x59\xd4\x78\x55\x7d\x23\x86\xb4\x03\xbf\xb7\x0e\xc9\x8e\xf6\x56\x6f\xae\x60\x5f\xda\x01\xb9\xde\xea\x2d\xf6\x5a\x26\xe5\x97\xd7\xd2\x83\x25\x2d\x58\xd2\x82\x25\x2d\x58\xd2\x82\x25\xcd\xff\x3d\x58\xd2\x9a\xe8\xfe\x62\xea\x89\x15\x81\xbc\xea\xa3\x1f\xfe\x27\xff\x3b\x53\x4b\x7c\xd5\xa2\x29\x83\xf5\x42\x10\x38\x15\x5c\xd8\xfc\xc7\x5d\xd4\x27\xc5\xaa\x20\xf4\x42\x45\x83\x06\x5d\xc4\x64\x15\xdd\x9a\xb7\x8f\xab\x2c\xe9\xd2\xa0\x5f\x36\xff\x75\x79\xe1\xdb\x1d\x20\xb7\x32\xd4\x94\xd8\xf4\xea\x38\x6a\xb9\x9b\x8f\xf3\x8b\x41\xa2\x67\x9a\x24\x5a\x92\xb1\x52\xdb\x81\x48\xa3\xaf\x9e\x15\x57\xbb\xf2\xaf\x9a\x1b\x57\xc5\x1d\xaa\x58\x42\x1b\xeb\xf8\xae\xea\x14\xbb\xcd\x06\x25\x64\x41\xef\x5b\x61\x4e\x7f\x1b\x9c\xe0\x13\x51\x2f\xc5\x06\x36\x3d\xfb\x8d\xe7\x5e\x90\x31\x11\x84\x45\xe4\x00\x33\xb2\xd6\x49\x15\xfc\x62\x26\x69\xf3\x04\xb3\xf2\xdd\xfe\x54\x15\xb7\x7a\x5a\x41\xd4\x0d\xd5\x9b\x43\xf5\xe6\x50\xbd\xb9\x7c\xd4\x43\xf5\xe6\xb7\x51\xbd\xb9\x05\x97\xdd\x81\x6d\xaf\xd9\x60\x7b\xa0\x7a\x97\xfb\xfa\x5d\x4c\x12\xa2\x48\xad\xa0\x74\x09\x8f\x5f\x4b\x50\x32\xbd\xbf\x0d\x59\xc9\xcc\x25\x88\x4b\xdf\x8c\xb2\xe4\x16\xfc\x20\x94\x25\x73\xd6\x7c\x9d\x09\x92\x2b\x3c\xe5\xda\x64\x54\xbc\x4d\x33\xcb\x51\x24\x50\x1c\x8e\x9d\x65\xef\x97\xe2\x4b\x33\x87\x60\x43\x5a\x1e\x49\xb0\x21\x6d\xc7\x16\x0b\x3f\x56\xa0\x30\xbd\x38\xab\xdc\x44\xc0\x2a\xf0\xcb\x4b\x78\xfd\x38\xb9\x66\x79\xec\xc7\xcc\x3b\xbd\xd6\x0e\x83\x89\x7c\xbb\xec\x73\xe9\x88\xb7\x9b\xb8\x0d\xfd\x39\xde\x79\x1f\xca\xb5\x51\x77\xac\x0f\xf9\xf2\x28\xd6\xd1\x3a\x5e\x8f\xc4\x31\xb1\xff\x57\x71\x49\xbc\x39\x31\xf9\x9b\x33\x1a\x04\x1f\x4b\xf0\xb1\x04\x1f\x4b\xf0\xb1\x04\x1f\x0b\xda\xd4\xc7\xb2\x2b\x49\xeb\xa8\x1d\x12\xc7\x29\x2a\xbd\xac\x47\x22\x48\x4b\xc7\x2e\x2d\x1d\x8a\x52\x78\x5c\x2e\x96\x2d\xcb\x2a\x1f\x8a\x5e\xf8\x96\x8c\x83\xc7\xa5\x23\x1e\x9c\x39\xf0\x9b\x63\x7c\x9b\x99\xfe\x8e\x76\xba\x41\x2b\x0e\x5a\x71\xd0\x8a\x83\x56\x1c\xb4\x62\x14\xb4\xe2\xb5\xb5\xe2\xb7\x24\x28\x1e\x9d\x86\x1c\x64\xc5\xd7\x9e\xf0\x37\x26\x2b\x1e\x8a\x4d\xa0\xee\xe4\x1e\xa8\x65\xe0\xdb\x0c\x28\x3a\xe2\x9b\x20\xe4\xbc\x22\x6f\xe9\x42\xc0\xcd\xb7\xc2\x47\x0f\x3c\xe0\xe6\xed\xd9\x55\x8f\x98\x47\x86\x6c\xe0\x20\x56\xee\x68\xba\xc1\x04\x19\x4c\x90\xc1\x04\x19\x4c\x90\xc1\x04\x89\x0e\x3b\xf9\x79\xa5\xc1\x29\xe4\x3f\xef\xcb\xb0\x7a\xc4\x92\x62\xc8\x85\x0e\xc2\xe2\xee\xa6\x7b\xa8\xba\xf3\x21\xd9\x20\xe5\xfa\x75\x23\x56\x22\x71\xdb\x69\xff\xd6\xc0\xc0\xae\xa8\x74\x8a\xee\x31\xf1\x2b\xb9\x6f\x96\xb4\x0d\xfc\xae\x5b\xd1\x37\x8b\xbe\xbb\x45\x35\x7a\xe0\x5d\x6f\xb4\x1c\x7d\x00\x07\x6e\x20\x4e\x00\x07\x5e\x8b\x9b\x04\x70\xe0\x97\x00\x07\xde\xb9\xb2\x32\xe7\xb2\xfe\xe6\xbe\x23\x13\x2a\xe1\xc8\x36\xd4\x7c\x72\x77\x36\x14\x1e\x80\xad\xf0\x51\xbf\x80\x62\x32\x4f\xf8\x02\xec\x43\x0d\xd7\xb9\xeb\xe2\x76\x49\xa2\x3e\xf4\x1b\xdd\x8d\xfc\xa5\x74\x8e\x43\x91\x49\xf3\x79\x1f\x84\x14\xea\x87\xc4\x97\x8a\x99\x35\xb9\xb7\x1f\xac\x4f\x1b\x4c\x7f\x54\xc2\xfd\xb4\x72\x8b\x0f\x58\xf5\x03\x67\x02\x1b\x11\x77\x21\x8e\x52\xe5\x15\xf5\x90\x5a\xc2\x9a\x13\xa1\x16\xde\x9b\x64\x36\x57\x8b\xff\x1c\x30\xaa\x32\x07\x22\x9d\x30\x2e\x0c\x7b\xd3\x1f\x4f\x31\x8b\x13\x22\xf4\xed\xea\xda\x89\x30\x63\x5c\x81\xdc\x01\x13\x88\xd1\x13\xc5\x46\x4a\xe9\xdc\xf6\x5a\xbb\xd1\x8f\x29\x82\xea\x65\xfd\xe4\x6f\xaf\xd8\xf3\x4a\x78\xf8\x4f\x09\x1f\xe1\x24\x59\xa0\xb4\x68\xaf\xd0\x0d\x1c\xc8\x1c\x0e\x85\xf7\xbd\x3a\xb3\x0b\x2c\xae\x2d\x8b\x0b\x1c\x2e\xf0\x83\x56\x23\x39\x46\x7e\xa0\xb0\x7c\xf4\xab\xed\x81\x0c\xe4\x0a\x26\x16\x2a\x4d\x95\xcb\x4e\xfd\xab\xcd\x7b\x85\xb2\xb2\x2b\xde\xf5\x0b\xcd\xae\x78\xb5\x54\x7a\xb6\xf8\xcc\x16\xa3\x85\xc7\x30\xbd\xf2\x38\xdc\x8f\x7e\x87\xee\xb7\xbc\x65\xf7\xcb\x13\x11\x92\x72\xfb\x9a\x20\x4a\x2c\x86\x58\x29\xcd\x90\x76\x59\xef\xb6\x8f\xe5\x63\xeb\x7a\xb7\x85\x97\x0f\x5d\x02\x2b\x14\xbc\x2d\x8c\xfc\x05\x0a\xde\xae\xde\xc6\x6f\x4e\x46\x6b\x79\x24\x57\xcc\xfb\xf8\x8a\x27\xb6\x65\x30\x6b\x4c\xfc\x5b\x29\xa4\xd8\x8e\xe1\xae\xf2\xd9\x1d\x63\x51\xc5\xa6\x1b\xe4\x60\x46\x58\xba\xc4\xde\xe2\xc9\x2d\x5e\xc9\xe1\x88\x36\xd1\xa8\xed\x59\x3c\x9a\x13\x58\x92\xb4\x56\xcc\xed\xde\x2d\x90\x7d\xdd\xed\x84\xc3\x9b\x57\x41\x58\xdc\xf5\xa8\xf6\xe3\xf3\xf4\x56\x63\x9d\x30\xd7\x9e\x2b\x08\x68\x3c\x38\xd9\x19\x72\x81\xaf\xd9\xd1\x54\x53\x00\x4d\xa7\xd2\xaf\x21\x18\x71\x61\xa4\xcd\xd8\x9e\x59\xe3\xc3\xe9\xf4\x3b\xf7\xdd\xfe\x39\xea\xa0\x18\x2b\xac\x0f\xa9\x20\x73\x41\x24\x61\xca\x98\x22\x98\xa2\x6a\x81\x66\x3c\x26\x89\xb1\x03\x18\x77\xc1\x25\x56\xf8\x02\x2b\x9c\xf0\xc9\x19\xea\xc0\x3f\xf5\xc7\x54\x22\x9c\x48\x8e\xb0\xdb\x38\x24\x76\x4d\x60\x16\x3b\xf6\x80\x51\xc4\x67\x73\x9a\x98\xd8\x4b\xdf\xa5\x4b\x59\x4c\x9f\x68\x9c\xe2\x04\xf1\x11\xd8\x50\xce\x06\xac\xfb\x44\x98\x4a\x41\xc7\xc5\x49\x82\x6c\xb7\xee\x05\xcf\x80\xe1\x46\x29\xe9\x8c\x26\x58\x68\xe9\xd1\x8c\xf6\xc6\xb6\x85\xfa\x53\x92\x8d\x15\xc6\xa5\xa9\x39\xc3\x8f\x44\x22\xaa\xd0\x9c\x4b\x49\x47\x49\x7e\x8c\x1f\x7a\x08\xc6\x7d\x71\xd5\x03\x3f\x59\xa4\x10\x37\x7c\xd0\x75\x6e\x9d\xc6\xae\xc7\x19\x66\x8c\x40\xc7\x5c\x4d\x89\xb0\xdd\xdb\x97\x5f\xdb\xe5\xf5\x70\x6d\x43\x1a\xbb\x97\xcb\x3e\xaf\x7e\xe7\xfe\xe7\xfa\x18\xc6\xe5\x27\x57\x9d\x87\xeb\x8b\x9f\x86\xb7\x57\x9d\x8a\xd8\x48\xbb\xad\x5a\xbb\xcf\xfc\x91\x6d\x7e\x98\x8e\xae\x4c\xf3\xcb\x1b\x1d\x5a\x59\x1c\x5a\x9b\x1b\xda\xda\x1a\xda\x19\x1a\xea\xad\x0c\x7b\x08\x5d\x6a\x6f\x0a\xb8\xa2\xb2\x68\x0b\x38\x8e\x84\xf6\xc2\x90\xf5\x1c\xf6\x6d\x08\xf8\xe6\xac\x00\xdf\xa8\x09\x20\xe8\xff\x7b\xa1\xdb\x5b\x55\xfe\x0f\x5c\xf3\xdf\x26\x0e\x33\xcb\xd1\x0a\x81\x98\xcb\x81\x98\x24\xc4\x61\x86\x38\xcc\xb6\x04\x0a\x71\x98\x21\x0e\xf3\x18\xe2\x30\x5b\x29\x5a\xc1\x63\x7b\x08\x1e\xdb\x03\xd7\xd1\x0e\xd9\x61\xfb\x56\x35\x97\xe0\xbc\x0c\xce\xcb\xe0\xbc\x3c\xd2\x93\x1b\x9c\x97\xed\x69\x14\x9c\x97\xc1\x79\x19\x9c\x97\xc1\x79\x19\x9c\x97\xc1\x79\xf9\x9a\xa6\x91\x43\x88\x0d\x3d\x66\x97\x6d\xf0\xc4\xae\xf0\xc4\x1e\xb8\x92\x7f\x90\x8e\xd8\xb7\xaa\x23\x04\xd5\x3e\xf8\x25\xb7\x9a\xf6\x41\x29\xf5\x6f\xed\xde\x0c\xae\xd8\xf6\x84\x08\xae\xd8\xd6\xa4\x0a\xae\xd8\x06\xe2\x04\x57\x6c\x70\xc5\x7e\x83\xae\x58\x1a\x6f\x0d\x0b\xdf\x46\x6f\xd1\xb2\x62\xdc\x05\xf3\x50\x66\xdc\x12\xbf\x81\xf4\x88\xe5\x63\x66\x01\x6a\xa1\xcf\xf4\xe2\xa3\x50\x64\x2a\x27\xfc\x12\x0a\xcd\x36\x1a\x0b\x56\x9a\x83\x2b\x80\x2a\xd0\x4f\x72\xa3\xe2\x01\xe2\x58\x6e\xa3\xa3\x78\x13\xf3\xd4\x14\xa7\x7d\xf8\xc5\x93\x0f\x6e\xda\x41\xf0\x0b\x82\x5f\x90\x6d\x5a\x4e\x38\xc8\x36\x87\x2b\xdb\xbc\x96\xc2\x72\x78\xc7\xf3\xe8\xec\x13\x7b\x17\x4b\x0b\xf8\xcb\x8d\x30\x8e\xa6\x94\x1b\xb8\xee\xd2\x79\xc2\x71\xbc\x2a\x40\xee\x37\x94\xcb\x6a\x0d\xe2\xa6\x69\x57\x7f\x70\xe0\xd2\xe6\x52\x6c\x9c\x19\xf9\xb7\x80\xdc\x58\x3b\xf5\x57\x05\x6f\x84\xfd\x9b\xa1\x16\x65\xb0\x44\x85\xe8\xd1\x7d\xa9\x59\xe5\x0d\xde\x4a\xa3\x92\x7f\x3d\xf0\x2d\x9e\xad\xef\x4b\xe8\x4f\x6f\x32\xfb\xee\x0d\x7b\xb2\x82\xb7\xaa\x39\xa4\x60\x47\xd1\x6d\x03\xd6\xd7\x8a\x14\x9f\x8d\x28\xcb\x82\x79\xdc\x0e\xf9\xa3\x23\xd7\x1f\x01\x48\xcf\x82\xeb\x25\x8b\x5c\xcf\x96\xe5\xd6\x32\x29\x0c\x9d\x6a\x11\x38\x22\x42\x01\xbd\x39\x53\xe4\xab\x92\xe8\x14\x25\xf4\x91\xa0\xf7\xfa\xc8\xa3\xce\x6d\xef\xfd\x09\x7a\x7f\x85\x53\x16\x4d\xd1\x3c\xc1\x4c\xbe\x3f\x18\xe9\x2d\x28\xe4\xa1\x3a\x41\x70\xc5\xec\x43\x7b\x0f\xe6\x8a\x95\xd3\x0e\xe6\x8a\x37\xe3\x8a\x69\xa9\x33\x98\x8c\x35\x3c\x23\x87\xa2\x3d\x1c\x0d\xc0\x47\xd0\x1e\x82\xf6\x50\x31\xb5\xa0\x3d\x7c\x83\xda\xc3\x61\x50\x38\xa8\x0e\x41\x75\x08\xaa\x43\x50\x1d\x82\xea\xb0\x73\x32\x06\xd5\xa1\x49\x75\x80\xbf\x1c\x28\xc5\xba\x7a\x44\x6b\xfd\xa1\x05\x02\xc5\xd1\x28\x0f\x41\x71\x08\x8a\x43\x50\x1c\x5e\x5c\x71\x38\x98\x09\xbd\xbd\x64\xfa\x90\x8e\x1e\xd2\xd1\x43\x3a\x7a\x4d\x3a\xfa\x4b\x89\x6c\x46\x5e\x3b\xb2\xf8\xfb\xa3\x10\xda\x5e\x2d\x00\xff\xed\x89\x71\x21\xa5\x20\xa4\x14\x04\x33\x64\x48\x29\x08\x86\xb6\x60\x68\x3b\x68\x43\xdb\x6b\x59\xcf\x5f\xf8\x78\xbe\x80\x70\x7a\xe0\x11\xcb\x7f\x39\x06\x09\xf4\x05\x63\x0e\x82\x95\x2d\x58\xd9\xaa\x29\x73\x9c\xee\xf9\x83\xb9\xf5\x03\x7a\x4c\x90\xf8\x43\xe0\x41\x08\x3c\x58\x49\x9c\xa0\x0f\x05\x7d\xe8\xe0\xf4\xa1\x57\x54\x14\x0e\x2e\x4c\x39\x68\x0c\x41\x63\x08\x1a\xc3\x9b\xd5\x18\x0e\x86\xc2\x41\x5d\x08\xea\x42\x50\x17\x82\xba\xd0\x4c\x9c\xa0\x2e\x04\x75\x21\xa8\x0b\x07\x1d\x9a\x7c\x2c\x0a\x43\x50\x16\x82\xb2\x70\xd8\xca\xc2\xc1\x4c\x28\x04\xf1\x86\x20\xde\x10\xc4\xfb\xcd\x04\xf1\xbe\x51\x85\x7d\xaf\x62\x9a\x63\x91\x4d\x82\xd7\xb2\xbc\xf4\xcb\x12\x63\x3d\x58\x91\x29\x1f\xed\xa6\x10\x89\xbb\x22\xf5\x33\x17\x8f\xe3\x84\x3f\x0f\x33\xad\xce\x06\x85\xe7\xff\xb6\xf9\x7c\xde\x0f\xb9\xf0\xec\xfd\x98\x09\xd1\xde\x6f\xae\xf5\x82\x0c\x3d\x4f\x57\x21\x69\x4a\xc4\x05\x4a\xe7\x31\xfc\x19\xa5\x52\xf1\x59\xbd\x54\xfd\x19\xab\x68\x8a\x47\x09\xe9\x64\xfd\x5e\x70\x36\xa6\x93\xd4\xec\x8f\xdf\x80\x15\x62\x27\xd9\x9c\x38\xc9\x48\x33\x45\x37\xbe\x26\x49\xfc\x01\xc6\xf1\xc5\xbe\x99\x77\x72\x14\x01\xe8\xcb\xc3\x36\xd3\x79\x29\x64\xce\xe2\x2e\xda\x96\xc5\x79\xad\x1d\x86\xf8\xb3\x7c\x26\x56\x89\xaa\x60\x85\xce\x34\x13\x1a\xc3\xe6\x7c\x9e\x52\xb0\xac\x81\x25\x0e\xac\x4f\x79\xc3\xe8\x99\x26\x09\x48\x1c\x86\x16\x87\x37\xf3\x56\xda\x8b\x9d\xb8\x3d\x7b\x6f\x62\xde\x8e\x79\xac\x98\xb9\x3b\x82\xc6\x0d\x71\xa4\xd3\x7e\x4d\x84\xdd\x15\x8c\xec\x55\x71\x76\x6b\xaf\xcf\x9a\x9c\xaa\x0f\xff\x53\x79\x25\xb6\x29\xcc\xf8\xda\xf7\xe0\x27\xa2\xde\xcc\x25\xf8\x89\xa8\x97\xba\x01\xdf\xe2\xb5\xb7\xe9\x5d\xd7\xc8\xf8\x04\x19\x13\x41\x58\x44\x8e\x35\x27\x6b\xe9\x8a\x3b\xda\xe9\x6e\x74\xb3\x1d\xed\x6c\xd7\x31\x60\x7d\x31\x93\xb4\xe6\xaa\x99\x63\xb9\xfe\x54\x15\xb7\xee\xe5\x82\x0b\xcc\x1a\xab\xfa\x9d\xfb\x9f\x87\x77\xdd\xfb\x9b\x87\xbb\x8b\xee\x39\xea\xc0\x41\x87\x6f\x0c\x7b\xa7\xff\x84\xe6\x20\x1f\x36\x33\x86\x09\x73\xc7\x49\x60\xd5\xe0\x06\xd7\x54\x44\xa7\xe8\xe2\xea\xe1\xbe\xdf\xbd\xab\x69\xd0\x32\x7f\xca\x26\x48\x91\xd9\x3c\xc1\x8a\xc4\xe8\x31\x1d\x11\xc1\x08\x28\x56\x49\x2a\x15\x11\xb9\x73\xdc\x34\xda\xfd\xaf\xee\xc5\x43\xbf\x77\x73\x3d\xfc\xfb\x43\xf7\xa1\x7b\x8e\xdc\x2d\xa2\x9b\xd5\xe3\xd2\xa3\x88\x17\x0c\xcf\x68\x64\x7e\xc8\xea\x5c\xa2\xdf\x53\x92\x12\x84\xa5\xa4\x13\x36\x23\x4c\x95\x5b\x74\x03\xbe\xea\xfc\xd8\xbd\x2a\xb6\x3c\x25\xe8\xe7\xbf\xe5\x83\x4a\xf0\x88\x24\xd6\x5b\x0f\x0e\x68\x7d\x79\xe5\x1d\x59\x37\x7e\x6a\xa8\xfa\xf7\x87\xce\x55\xaf\xff\xeb\xf0\xe6\xe3\xf0\xbe\x7b\xf7\x4b\xef\xa2\x3b\xb4\xc6\x98\x8b\x8e\xee\xb7\xd0\x93\xb5\xd9\xa0\xdf\x53\x9c\x50\xb5\xd0\xeb\x28\xcd\xa5\x8f\x9e\xa7\x84\xa1\x94\xc1\x05\x62\x2c\x85\x98\x79\x9d\xca\x39\x89\xcc\x8c\x6e\xaf\x1e\x3e\xf5\xae\x87\x37\xbf\x74\xef\xee\x7a\x97\xdd\x73\x74\x4f\x12\xb0\xa5\x39\xa2\xc3\x2a\xce\x93\x74\xa2\x39\xc1\x6c\x9e\x10\x4d\x0d\x63\x2b\x1c\x91\x29\x7e\xa2\x5c\xd8\xeb\x78\x42\x9f\x08\x33\x74\xd4\xdb\xca\xb4\xef\x6c\x56\x43\x8f\x74\x37\xd7\x1f\x7b\x9f\xce\x51\x27\x8e\xb3\x39\x48\x68\xa3\xb0\x73\xdc\xd1\x3d\x2d\x0e\x9b\x8e\x69\x04\xdd\x9b\x4d\xc4\x9f\x88\x10\x34\x26\xa5\x7d\xd4\xb9\xbf\xef\x7d\xba\xfe\xdc\xbd\xee\x03\xc5\x94\xe0\x89\x44\x53\xfe\x0c\x8e\x5e\x98\x21\xf8\x7f\x9f\x30\x4d\xa0\x33\xb7\x58\x9c\xf9\xa7\xdf\xeb\xd9\x98\x35\x45\xca\x5e\xdd\x77\x59\x38\x78\xcb\xd6\xbe\xf2\x49\x5a\x7e\xa3\x74\x2c\x9a\x5e\x28\xec\xf2\xe5\x17\x57\xed\xd6\xe5\x2f\x4a\xdb\xad\xde\xc6\xb9\xb4\x5f\xea\x67\x9a\xaf\x75\x6b\x13\x67\x91\x86\xfb\x90\xb1\xdd\xd7\xef\x62\x92\x10\x45\x6a\x65\xe2\x4b\x78\xfc\xfa\x32\xb1\x19\xc7\x9b\x11\x8b\xcd\x74\x82\x64\x1c\x24\xe3\xd6\x13\x0e\x92\x71\xd5\x84\xdf\x88\x64\x7c\x80\x56\x1f\xc7\xa2\x0e\xce\xea\x13\xfc\x23\xa5\x95\x3a\xce\x2b\xf0\xd5\xdc\x23\xc1\x7f\xb0\xde\x15\x72\xfc\xf3\x0e\xfe\x83\xe0\x3f\xa8\xbc\x49\xde\xbc\xd7\xe0\x38\xaf\x86\x17\x74\x1a\x04\x35\xa2\x61\xbe\x41\x8d\x38\xb2\xd9\x06\x03\x7b\x30\xb0\x07\x03\x7b\x30\xb0\x07\x03\x3b\xda\xd4\xc0\xde\x82\xcb\xbe\x84\x39\xf5\x40\x83\x88\xdf\x8a\xdb\xe0\x38\xe5\xe2\x97\xf5\x1a\x04\xd1\xb8\x61\xbe\x41\x34\x3e\xb2\xd9\x1e\xa0\x5d\xe4\xb0\x2c\xec\x34\xae\x32\x88\xbc\x20\x34\xbd\x1b\x49\x5b\x78\x7a\x47\xd0\x5e\x7c\x14\xec\xfc\xd5\x10\xea\x03\x9e\x7b\xc0\x73\x0f\x70\x2d\x01\xcf\x1d\x05\x40\x92\x00\x48\x72\xc8\x80\x24\x2d\x96\xf1\x2d\xe0\xb9\xbf\x8c\x85\xe1\x0d\x25\x29\x3b\xc1\x50\x16\x62\x37\xb8\x5c\x15\xbc\x01\x56\x82\x74\x9e\x70\x1c\x37\x81\xc5\x38\x39\xd2\x07\x8c\x69\x10\x3d\x4d\xdb\x5f\x96\x95\xa7\x83\x95\x3c\xdd\x58\xcd\xc8\x5f\xca\x7c\x70\x30\x0a\x97\x9b\xf6\x41\xa8\x59\x2d\x6b\xb7\xee\x5c\xed\xaa\xda\xe4\xad\x35\x2c\xf9\xd7\x63\xda\xe6\x2f\x04\xa9\xfa\xf6\x0a\x7f\x05\xe8\xa7\x00\xfd\x54\x4b\x99\xe3\xc4\x89\x3d\x18\x89\x2e\x28\xe9\x01\x53\x35\x60\xaa\xee\x43\xa3\x0f\x26\x8c\x95\xd3\x0e\x26\x8c\x37\x81\xa9\xba\xa6\x0e\xb1\xc7\x9a\x0c\xdb\x69\x13\x47\x95\xb3\x17\xb4\x89\xa0\x4d\x54\x4c\x2d\x68\x13\xdf\xa0\x36\x71\x18\x14\x0e\xaa\x44\x50\x25\x82\x2a\x11\x54\x89\xa0\x4a\xec\x9c\x8c\x41\x95\x78\x9d\x7a\x0d\x55\xfa\x44\xcb\x5c\xb7\xa3\x52\x26\x82\x22\x11\x14\x89\xa0\x48\x84\x8a\x14\xcd\x73\x0a\x15\x29\x42\x45\x8a\x50\x91\xe2\x0d\x54\xa4\x78\x49\x11\xae\x06\x06\xf9\x38\xe2\xf7\x8f\x42\x88\x7b\xb5\x00\xfe\xb7\x27\xd2\x85\x94\x84\x90\x92\x10\x4c\x94\x21\x25\x21\x18\xe1\x82\x11\xee\xa0\x8d\x70\xaf\x65\x59\x7f\xe1\xe3\xf9\x42\x82\xea\x91\x44\x3b\xff\xe5\x18\xa4\xd1\x17\x8e\x4f\x08\x16\xb8\x60\x81\xab\xa6\xcc\x71\xba\xf2\x0f\x46\x0a\x38\xc6\x92\x94\x41\x03\x68\x4f\x88\x10\xa4\xd0\x9e\x56\x21\x48\xa1\x81\x38\x41\x3f\x0a\xfa\xd1\xc1\xe9\x47\xaf\xac\x38\x1c\x6c\x88\x73\xd0\x20\xcc\x7b\x41\x83\x08\x1a\xc4\x1b\xd5\x20\x0e\x86\xc2\x41\x7d\x08\xea\x43\x50\x1f\x82\xfa\xd0\x4c\x9c\xa0\x3e\x04\xf5\x21\xa8\x0f\x47\x13\xd6\x7c\x4c\x0a\x44\x50\x1e\x82\xf2\x70\xd8\xca\xc3\xc1\x4c\x28\x04\x00\x87\x00\xe0\x10\x00\xfc\xcd\x04\x00\xbf\x51\x05\x7e\xb7\x62\xdb\xbf\x59\x42\xbd\xf3\x04\x8c\x4c\x12\x79\xf7\x63\xc2\x47\xfd\xc5\x9c\xe8\xff\xbf\xa4\x33\xc2\x24\x50\x82\xaa\x85\x2f\xa6\xd5\x6c\xa8\xe5\xad\xf4\xee\xbe\x77\xfd\xe9\xca\xaf\x3b\xf2\xee\xf3\xc3\x55\xbf\x77\xdb\xb9\xcb\x96\x3b\x9b\x95\xbf\xc4\xf6\xbb\x82\xa4\x69\x4f\xf2\x1d\xd1\x2a\x35\x30\x83\x7b\x85\x55\x2a\x37\x1b\xd9\x5d\xf7\xbe\x7b\xf7\x0b\xd4\x4d\x19\x5e\xf6\xee\x3b\x3f\x5e\x15\xf6\x79\xe1\x79\xe7\xe2\xef\x0f\xbd\xbb\xfa\xe7\xdd\xff\xea\xdd\xf7\xef\xeb\x9e\xde\x75\xaf\xba\x9d\xfb\xfa\xaf\x3f\x76\x7a\x57\x0f\x77\xdd\x46\x7a\x34\x8e\xb6\x59\xb7\x92\x40\x24\xa8\x1d\x80\x22\xcb\x0c\x45\x4e\x43\x94\x49\xc5\x8e\xcb\x57\xf5\x75\x8e\x1e\xac\xa9\x82\xda\xc6\xcd\xbd\xe1\x35\x64\x74\xac\x98\x4a\x3c\x4a\x48\xbc\xd4\x92\xa3\x61\x5d\x4b\xb8\x30\xa8\x67\x2c\x3d\x49\x5a\xb3\xf2\xc8\x1c\x1f\x04\xd5\x9c\x14\x61\x71\x45\x1f\x66\x1d\x6a\x7b\x60\x9a\x25\xd3\x27\x52\xe8\x29\x4a\x85\x20\x4c\x25\x0b\x44\xbe\x52\xa9\xe4\x52\xa3\x6e\xf9\xea\x9a\xb5\x0c\x21\x6b\x70\x8a\x25\x1a\x11\xc2\x8a\xe3\x17\x24\x21\x58\x56\x8c\xd9\xae\x7e\x3b\xb2\x64\x6b\x65\x8d\x4c\xe6\x8e\x1d\x63\x9a\xa4\x82\x94\x4e\x0b\x9f\xcd\xb1\xa0\x92\xb3\xee\x57\x7d\x45\xeb\x83\x7c\x03\x9f\x73\xb1\xd9\x89\xe9\xfe\xdd\xdf\xc1\xd7\xc5\x7f\x7e\xea\x17\xff\x55\x38\xf3\x57\xfd\xe2\xbf\x9a\xf7\xba\xd7\x70\x79\x67\x9f\xa2\x4f\xfd\x73\xf4\x09\x20\x46\x05\xea\x4f\xb1\xd9\xb1\x57\xfd\x73\x74\x45\xa4\x84\x5f\xf2\x8f\x15\x55\x09\xcc\xed\x47\xca\xb0\x58\x20\x37\x7d\x53\x12\x0c\x47\x53\x44\x32\xd2\x94\x89\xc7\xfe\x91\x32\xb0\x48\xe4\xd4\xbb\xe2\x13\x1a\xe1\x64\x3b\x22\x76\xae\x0b\x7c\xe0\xe6\xae\x91\x14\xfe\xdb\xcb\xb4\xe8\x5c\x5f\x42\xb9\x2d\x37\xd4\x8a\x99\x5f\x13\xa9\x37\x49\xc4\x59\x6c\x7d\x6a\x5a\xa8\x59\x78\xba\xca\x3f\x38\x94\x2c\x4b\x25\x65\x13\xdd\x22\xfa\x80\x6e\xee\x06\xec\x46\xc4\xc6\xbe\x4b\xb4\x90\x6f\xf6\x1c\x95\x88\x71\x85\xe8\x6c\xce\x85\xc2\x4c\x69\xfd\x06\xa4\x1b\x4b\x11\xc3\x01\x2e\xf8\x6c\x96\x2a\xac\x0f\xda\x12\x51\x99\xb1\xf2\xdc\x13\xd5\x8b\xc1\x11\x56\x41\x43\x23\xfe\xe4\x73\x99\x0b\xdd\xbe\x16\xbd\x8a\xa6\x01\x1a\x2f\x69\xe8\xae\x09\x2c\x04\x2e\x5e\xc0\xef\xa8\x22\xb3\xf2\xfb\x2d\xaf\xdd\x7f\x55\xda\x3d\x2e\x4c\x56\x04\x11\x1d\x11\x4d\xa9\x22\x91\xd2\x47\x70\xa3\x3d\xf1\x70\xfd\xf3\xf5\xcd\x17\x5f\x30\x7a\xd7\xf9\x7c\xf9\x1f\x05\x18\xd8\xce\xdd\xe7\xa5\x1f\x86\xbf\xfc\xc7\xd2\x2f\xff\xff\xc6\xfd\x54\xee\x69\xc9\x7c\xe1\xcd\xe5\x14\x34\x05\x30\x75\xbb\xa9\x22\x3a\xc3\x13\x82\x64\x3a\xd7\x3b\x40\x9e\x15\xd7\x57\x4b\xca\x57\x1c\xc7\x94\x4d\x4c\x55\xa9\x2b\xaa\x88\xc0\xc9\x67\x3c\xff\xe8\xcc\xf2\x1b\x50\xe7\xff\xdc\x17\x2a\x9b\xbd\xfb\xb5\xf3\xd9\xaf\x8d\xf6\xee\xf6\xee\xa6\x7f\xd3\x38\xeb\x42\x0b\xcb\xc7\x48\x3f\x3e\x87\xff\x45\x1f\x90\x6e\x3d\x13\xe8\x67\x44\x61\xad\xe8\xa0\xef\x4c\x21\x9e\x2c\x13\x86\xb2\x04\x4e\xcd\x5c\xd0\x19\x85\x2b\xc5\x18\x26\xbf\x37\x3a\x43\xa6\x14\x65\xe7\xc6\x7c\x00\x46\x00\x77\x29\xb3\x18\x8b\x18\xfd\x43\x96\x0b\xed\x81\x3d\xdc\xfc\x40\x62\x74\x8a\xa6\x4a\xcd\xe5\xf9\x87\x0f\xcf\xcf\xcf\x67\xfa\x6d\x2d\xc0\x7e\xd0\x7f\x9c\x12\x76\x36\x55\xb3\xc4\x14\x16\xd4\x54\x38\x47\xb7\x82\xeb\x2b\x04\xec\x0e\x44\x50\x9c\xd0\x7f\x92\x18\x8d\x0c\xff\xe3\x63\xf4\x5b\xc4\x05\x39\xcb\x17\xc6\xda\xca\xec\x3d\x62\xed\x69\x1f\xf4\x4b\x15\xcc\xa4\xbc\x9e\x28\x26\x11\x8d\xad\x98\x41\x58\xc4\xc1\xa0\x6a\x5c\x30\xba\x3d\x57\xbd\x48\x2b\x6a\xf3\x54\xe5\xe4\xf4\x74\x30\x1c\x13\xaf\x2e\xa0\x95\xaf\xb3\x0d\xa7\xf5\xb9\x9e\xd1\xc6\x53\x49\x04\xdc\xad\x18\x6e\x55\xf7\xea\x5c\x4f\x38\xe2\x09\x1a\xa5\xe3\x31\x11\x7e\xf8\xc0\x89\x56\xd2\xa8\x44\x82\x44\x7c\x36\x03\x89\x41\x7f\x95\x4a\xb3\xab\x81\x62\x76\xb4\x67\x03\x06\xeb\xaf\xb5\x37\xd8\x01\x31\x07\x56\xc7\x08\x89\x11\x66\x0b\xd3\xcd\x28\x1d\xfb\xed\x9b\x82\x9d\x38\x46\x54\x0d\x58\x27\x49\x90\x20\x33\xae\x88\x57\x97\x09\x5c\x9d\x45\x82\x03\x8b\x14\x64\x9e\xe0\x88\xc4\x66\x3f\x24\x3c\xc2\x09\x1a\xd3\x84\xc8\x85\x54\x64\xe6\x37\xf0\x1d\x98\xa0\x34\xcd\xa8\x44\x31\x7f\x66\x09\xc7\x76\x1e\xe5\xcf\xbe\x2f\x9e\xc6\xae\x2b\xa6\xd8\x15\x82\x0b\xf8\x9f\x9f\x29\x8b\x77\xc6\xa1\x1e\xee\xbb\x77\xfe\xbf\xef\x7f\xbd\xef\x77\x3f\xaf\xc7\x7d\xb2\x9d\x05\xc3\x03\xd3\xc4\x39\xba\x37\x44\xe0\x42\x4b\x44\xa2\x66\x52\x9f\xed\x56\xca\x7f\xe0\xf1\x86\xdc\xf7\x73\xe7\xfa\xa1\x53\xe0\x28\xf7\x17\x3f\x75\x2f\x1f\x4a\xfa\x80\x9d\x5f\x41\x86\x37\x5a\xad\xff\xdb\xc5\x4f\xbd\xab\xcb\x61\x85\x1e\xfc\xee\xae\x7b\x71\xf3\x4b\xf7\x2e\x57\x59\x2b\x49\x54\x1a\x4c\x99\x59\xf5\x0d\x53\x9a\xf2\x18\x8d\x16\xd5\xa5\x33\xb5\xe4\x9c\x80\xe7\x3c\x2f\x1e\x6b\x5a\x3d\x07\xde\xe4\xaa\x98\xe6\x5f\xcc\x78\x4c\x4e\xec\x3b\x50\x73\xd4\xd8\x8c\x8c\xc4\x5c\xdd\xb0\xee\x1d\x33\xcf\xfe\x62\xca\x81\x66\x84\x3b\x47\x1d\x24\xf5\x8b\xa9\x3e\xd4\x82\x4e\x26\x60\x0f\x2d\x0d\xd5\xb4\x66\x3f\x05\xf2\xc2\x77\x66\xfd\xe7\x82\xc3\x39\xd7\xdd\x5a\x43\x7a\x66\x6c\x31\x1f\x42\x7d\xda\x62\x8b\x02\x83\x1d\xa5\x62\x68\x6e\xb1\x34\x11\x6a\xe9\x65\xce\xa3\x31\x83\xe9\xc3\x05\x6c\x4b\x1a\x33\xee\x5c\x90\x27\xca\x53\xef\x53\x5b\x02\xb5\xb0\xe2\x95\xcd\xe7\x04\x00\xb2\x19\x5b\x4f\xa9\x99\x6c\x7b\x54\xb6\xa0\x59\xd8\x13\xb4\x30\x16\x7c\x56\xd1\x46\xf1\x98\xf4\x6e\xee\x95\xc0\x8a\x4c\x16\x97\x96\x65\x6c\x7e\x3c\x2e\x6f\xbe\x5c\x5f\xdd\x74\x2e\x87\xdd\xce\xa7\xe2\x89\xcf\x9e\xdc\xf7\xef\xba\x9d\xcf\xc5\x47\xc3\xeb\x9b\xfe\xd0\xbd\xd1\xb8\xe5\x6b\x3a\x58\xbe\xa7\x8b\x2f\x9e\x23\xcd\x72\x81\x35\x3e\xd3\x24\xd1\x97\x89\xc7\x1f\x47\x64\xcc\x85\xe1\xf3\x33\x17\x68\x62\x45\x18\x47\x5b\xab\x8b\x95\x66\x71\x0e\x06\xbf\xaa\x26\x8d\x31\x5f\x09\x82\x67\x70\x4f\x60\x86\xba\x2c\x3e\xbd\x19\x9f\xde\x9b\x1f\x67\x58\x3c\x12\x91\x7d\xfa\x2c\xa8\x52\x84\x15\x54\x3a\xec\x86\x9c\x29\x89\x79\x07\x67\xe8\x4e\xf3\x7d\xfd\x7e\x76\xa9\xe9\xcd\x1e\x13\x85\x69\x22\xed\x60\x0b\x74\x3d\x47\x57\x58\x4c\x72\xf3\xe2\x77\x7c\x3c\x36\x8d\x7d\x6f\x86\xa1\xef\xb0\xc2\x2c\x2a\x78\xaf\xde\x1a\xee\x5e\x84\xfe\xec\xcb\x99\x3c\xbc\xbc\xab\x1e\xe6\xdb\xed\xa9\x87\x5b\xa0\xb8\xd1\xd8\x0b\xba\xa1\x7d\x52\xb1\xd7\x60\xe2\xe6\x71\xf3\x25\x53\xdd\xf6\xf2\x76\x2a\xbe\x58\xb1\x9d\x4c\x2d\x13\xbd\xf2\x63\xad\x6d\x56\xec\x25\xf2\x95\x5a\x83\x81\x3f\xee\xd2\x16\xca\x9b\x01\xab\x31\x9e\xcf\x09\x16\xb2\x6a\xb5\x8b\x62\x60\xcd\xda\x9b\x9e\xfc\x3e\xec\x22\xbb\x7e\x4e\x10\x67\x60\x70\xc8\x84\x88\xd2\x8e\x6c\xb1\x07\x4c\x5b\x4b\x3b\xe0\x16\xea\x52\xdf\xd8\x1a\xd0\x9f\xa9\xd4\x4a\xa3\xf9\xf1\x47\x5b\x9c\x7a\xb3\x0d\xf1\xb1\xd3\xbb\x2a\x09\x17\xc3\xcb\xee\xc7\xce\xc3\x55\xb3\x99\xb0\xf0\x5d\x79\x89\xd1\x29\xd2\xcf\x8b\xe1\x00\x74\x6c\xee\x0c\x57\x62\xdb\xa8\xb4\x84\x81\xd1\xca\x96\xbf\x35\x66\xf8\x98\xcc\x13\xbe\x98\x11\x06\x26\x9e\xc2\x4d\xa8\xe9\x39\xc6\xd4\x5e\x2d\xde\x60\xc1\x8a\x63\xcd\x6e\x70\x8d\x9d\xba\xba\xde\x24\xce\x6e\xde\x62\x59\xef\x12\xeb\xbe\x35\x4e\x41\xfb\x7f\xf7\x0a\xab\x0d\xcf\x58\xe7\xa2\xdf\xfb\xa5\x5b\xd4\x0f\x2f\x7e\xea\xfd\x52\x25\xd5\x0c\x3f\x75\xaf\xbb\x77\x9d\xfe\x0a\xe1\xa4\xd4\x64\x95\x70\x22\xf5\x80\xcb\x4e\x61\x2a\xb3\x40\xa7\xc8\x14\x07\x47\x54\x49\xf4\x44\x25\x1d\x51\x28\xa5\x6e\x1d\xac\x0f\x3d\xe0\xac\x4f\x38\xa1\x31\x55\x0b\x27\xbe\x98\x7e\x8b\xeb\xa8\x39\xa9\x6d\xdf\x98\x1d\x7c\xb7\x2b\x58\xf9\xcc\xe2\xb8\x49\x9f\x23\xd0\x6d\x9f\x40\x69\xf3\x3e\x63\x5a\x90\x66\x13\x22\xcc\x70\xc0\xa9\xe4\x8f\xc5\x7b\xae\x47\xe5\x0b\x2b\x39\xd5\x32\xa1\x75\x42\x18\x11\x50\x2e\x3f\xeb\xc4\x08\x52\x82\xb0\xf7\x5a\xe6\x9a\x27\x34\xa2\x2a\x59\xa0\x08\x6c\x58\x60\xce\x9c\x61\x86\x27\x56\x38\x00\x35\xa7\xb4\x25\xfe\x6e\xea\xcd\xdf\x8c\xad\x69\xbf\x4f\xc9\x86\xc7\xec\xe1\xfa\xb2\xfb\xb1\x77\x5d\xdc\x02\x3f\xf5\x3e\x15\x44\xd8\xcf\xdd\xcb\xde\x43\xe1\x36\xd7\x92\x6c\xb3\x5c\x5f\x6e\xb6\xe2\x28\x66\x2f\x9d\xa3\x4b\xf3\xe9\xb9\x26\x6e\x45\x31\xfd\x4c\xf9\x2d\xd1\xe1\xce\x45\x1a\xba\x3f\xba\x4c\x89\x4a\xbf\x44\x5b\x13\x92\xf5\x0a\x15\x6c\x48\xd5\x11\x18\x4b\x7d\x5f\x97\x7d\xe5\xe5\x29\xbb\x17\x21\x44\xf6\x2c\xb7\x2c\xf9\xa1\x19\x60\x34\xa8\x33\x62\x55\x78\xeb\x72\x86\xfd\x0b\x78\xde\x67\xa9\x54\xc6\x43\x0a\x9b\x13\x3d\xfe\x4d\x6a\x82\x82\x07\xf5\x0c\xdd\x13\x32\x60\xce\x7a\x30\xa1\x6a\x9a\x8e\xce\x22\x3e\xfb\xf0\x98\x8e\x88\x60\x44\x11\xf9\x01\xcf\xe9\x0c\x6b\x49\x9a\x88\xc5\x87\x51\xc2\x47\x1f\x66\x58\x2a\x22\x3e\xcc\x1f\x27\x10\xd8\xe3\x3c\x5d\x1f\xb2\x66\x27\xfc\xdf\xaf\xfe\xf2\xc3\xe9\xd5\xdf\x7e\x78\xb7\x6c\x21\xab\x5b\xff\x2e\x8b\xf0\x5c\xa6\x89\x0d\x04\x14\x3e\x6d\xdc\x91\x4f\xc9\xaa\xf5\xbe\x2e\x2e\xd7\x76\xfa\xeb\xc5\xed\x43\xc1\x62\x5d\xfc\xe7\xe7\xee\xe7\x9b\xbb\x5f\x0b\x9c\xb2\x7f\x73\xd7\xf9\x54\x60\xa8\xdd\xdb\x9f\xba\x9f\xbb\x77\x9d\xab\xa1\x7b\xb8\x8d\xed\xed\x67\xc6\x9f\x59\x91\x34\xd2\x71\xc0\xa5\x9e\xce\xd1\x47\x2e\xd0\xcf\xd9\x4a\x9e\x8e\xb0\x84\x2b\xc6\xdd\x59\xf2\x04\xcd\x79\x0c\x8c\x17\x91\xf9\x94\xcc\x88\xc0\x89\xb5\x19\x48\xc5\x05\x9e\x98\x9b\x5e\x46\x02\xab\x68\x8a\xe4\x1c\x47\xe4\x04\x45\xb0\x1b\x26\x27\xb0\x28\xa0\x6a\xf1\x49\xd9\xce\x77\x97\x32\x45\x67\xc4\xa9\xe0\xf6\x9f\x7d\xb3\x18\x1b\x2c\xce\x4d\xff\xa7\xa2\xb0\xf7\xf1\xea\xd7\x7e\x77\x78\x7f\xf9\x73\x23\x3d\xcd\x67\x85\x91\xdd\x43\x5c\xd5\x05\x4f\xd2\x19\xf3\xff\xde\x7c\x6c\xbd\xeb\x7e\xf7\x53\x79\x74\x37\x9d\x7e\x71\x67\xdc\x15\xe3\xf6\xde\xfd\x78\x73\x73\xd5\x2d\x78\xba\xdf\x5d\x76\xfa\xdd\x7e\xef\x73\x61\xff\x5c\x3e\xdc\x81\x0f\xa8\x71\x9a\x6e\x04\x15\x13\xd5\xd3\xf2\xa7\xb9\x6b\x56\xd8\x8a\x13\x75\x6c\xf8\xbf\x39\xcb\xa7\x1e\x5e\x8e\x89\x72\x03\xab\xce\x69\x66\x52\x8d\xcc\x48\x2b\xd9\xa1\x2a\x2e\x13\xaa\x67\xc7\x8d\x0b\xdd\xc4\x95\xfb\xd9\x10\x60\x5c\x67\x46\xd9\xc6\x49\xc2\x9f\x4d\x84\xf2\x8c\xea\x5b\xd9\x16\x5b\xd7\xaf\xc8\xdc\x43\x78\x56\xc1\xf1\x8a\xcb\x42\x22\x41\xd4\x67\x9e\x32\xb5\xf9\x96\xeb\x5c\x17\xf8\x4e\xf7\xfa\x97\xe1\x2f\x9d\xe2\x0e\xec\x5d\x35\xb3\x1a\xbf\x89\x8a\xab\xb8\x73\xfd\x6b\x76\x09\x43\x1c\xfb\x49\xa6\xa1\x1a\xd9\x35\x4a\xa8\x16\x7b\x23\xac\xb5\xd7\x04\x24\x1a\x44\x28\x98\x1c\x66\x7a\x72\x10\x37\x3b\x37\xfe\x24\xc3\x9f\xcc\x20\xcf\xdd\x1f\xa5\xf6\x24\xd0\x05\xac\xa9\x2e\x4d\x00\xda\xb1\x5a\x35\x43\x84\x3d\x51\xc1\x19\x08\xdb\x4f\x58\x50\x2d\x8d\x9b\x96\xf5\x5c\xcf\xe1\x7f\xd7\x6b\x13\x0c\xa3\x25\xc6\x75\xcf\x85\xba\xcc\xe2\x93\x37\xb3\x86\x54\xc5\xe9\x2e\x47\xe8\x56\x1b\x3a\x96\xbf\xad\x58\x9c\x2d\xe3\x98\x8b\x13\xfe\x3d\xb9\xa4\x38\xd1\x0c\x60\x77\xf2\x62\xe7\xfa\xbe\x57\x94\x1f\x8b\x6a\x86\xc7\x97\x37\x96\x17\xc1\x50\x69\x46\xee\x94\x89\xfb\xbf\x5f\x19\xed\x42\x6f\x12\x7b\x6e\x3d\xc5\x02\x04\x20\x57\x85\x74\x8e\x85\x2c\x7d\x21\x11\x20\x99\xe5\x71\x64\xfa\xce\x82\x28\xad\x27\x4e\xe3\x01\x23\x5f\xe7\x84\x49\x08\x0e\x30\xf7\x59\xee\x6b\x97\x67\xa8\x37\x06\x96\xa0\x5f\x67\x28\x65\xd6\x01\xa6\x2f\x5c\x33\xc8\x13\x2d\xca\xda\x21\x64\x1a\x22\x18\x5e\x18\x71\x31\x60\xf9\xe0\x07\xec\x4b\xe6\x44\x83\x47\x63\xae\x19\x90\x5e\x45\xdb\xde\x39\xc2\x4c\xd2\x13\xa4\x15\x96\xf2\x9a\x42\x46\x84\x56\x28\x6d\x64\x9a\xe6\x34\xf6\xcf\x97\xbf\x06\x96\xc2\x9f\xfd\xcb\xa0\xfa\x2e\x28\x5d\x05\x35\xa2\x71\x62\x3c\x26\xc3\xf6\x77\x42\xc4\x05\xb1\x7e\x96\xb5\xaf\x81\x55\x8c\xbd\x8f\xe5\xe3\x92\xef\xa1\xc7\xa4\xc2\x2c\x22\x17\x09\x96\x1b\x06\x21\x39\x1b\xc7\x49\x51\xe2\xb8\xbb\x7b\xb8\xed\xf7\x7e\x5c\xc1\xe5\xcb\x1f\x2f\x87\x01\x45\x49\xea\xdc\x73\x23\xc1\x71\x8c\x34\xfb\x9c\x70\xe3\x0a\xb4\x82\xbf\x39\x41\x66\x4d\xa8\xf4\xe2\x44\xb1\x7c\x2c\x18\xa9\x6d\x96\x85\xb5\x73\xf8\xae\x04\x6a\x09\x81\x22\x4d\x09\xe4\x99\x3c\xdc\x52\x83\x67\xd1\x44\xd1\x59\xeb\xd6\x3c\xc1\x6a\xcc\xc5\xcc\x70\xf9\xc2\xa4\x4d\xe3\xcd\x8d\x52\xa6\x88\x10\xe9\x5c\x81\xca\xae\xc7\x5a\x96\x52\xf5\x92\x5d\xf1\xc9\x67\x22\x25\x9e\x90\x6d\x1c\xd0\x55\xca\xc3\xfd\x2f\xfe\x3f\xc1\xc1\xdc\x46\xf6\x2f\x8c\xd0\x05\xf4\xbb\xfd\x74\xc3\x3e\x9a\x40\x9e\x5b\x9e\xd0\x68\xc3\x80\xbb\x8f\x9d\xde\xd5\xb0\xf7\x59\x2b\xf1\x9d\x7e\xf7\xaa\x20\x4a\xc0\xb3\xce\xc7\x7e\xf7\x6e\xd8\xfd\xaf\xee\xc5\x43\xbf\xf3\xe3\x55\x77\x78\x7d\x73\xd9\xbd\x1f\x5e\xdc\x7c\xbe\xbd\xea\xae\x88\xcc\xa9\x6d\x7c\xd9\xba\x5a\x7e\xf5\x7c\xe9\x17\x58\x61\xcd\xcb\x7c\x7b\x19\x24\xc3\x61\x9a\x80\x13\x9c\x1b\x67\x38\x46\x8c\xc7\x04\x7e\x96\xce\x3a\xe3\xb2\x4d\xce\x50\x4f\xbd\x4f\x12\x84\x53\xc5\x67\x18\xbc\x36\xc9\x62\xc0\xf0\x48\xb3\x56\x9c\x24\x5e\x78\x97\x48\x19\xd3\x2c\x56\x37\x26\x4d\x7c\x71\x42\x34\x3b\x9f\x7b\x39\x8c\xd6\x6f\x30\xa6\x0c\x02\x88\x67\x58\x3c\x1a\x37\x53\xde\x65\x7e\x28\x24\xc2\x72\xc0\xf4\xb8\x88\x35\x0c\xb5\xa1\xf0\x79\xab\xb7\x6a\xa9\x33\xc3\x8f\x44\x53\x65\x96\x46\x53\x34\x17\x7c\x22\x88\x94\xd6\xb6\x1c\x61\x66\x02\x10\xec\xeb\xfa\x1a\x1a\x30\xc6\x35\x29\x9c\x09\x3b\x26\x73\xc2\x62\xc2\x22\x6a\xb2\x15\xc1\x77\x9f\x99\x36\x27\x02\xcf\xa7\x48\x72\x70\x7a\x03\xd9\xc1\x7e\x65\x3e\x72\x37\x99\x99\xb1\x79\xec\x5b\xa0\x45\xaa\xf9\xc4\x0d\xc8\x89\x86\xca\xf0\xb1\xbb\x0c\x9d\xdb\xc5\xd8\x01\x67\xf3\x84\x40\x97\x96\xe4\xb0\x18\x9a\xd6\x85\xf5\xd0\xcb\x54\xb5\x08\xfa\xc2\x76\x63\xc6\xd2\x8e\xe8\xac\xc2\xb2\x6d\x8f\x14\xfa\x09\xb3\x38\xd1\xad\x38\x1f\x46\xf1\x2c\x42\x86\x4d\x47\xef\x1a\x77\x1a\xb7\xb9\x45\x23\x9c\xca\x6d\xae\xd1\x52\x8a\xa9\xb1\x0a\x9e\xe6\x41\x21\xb0\xbd\x6d\x7e\x29\x50\x77\xae\x59\x24\x4e\xb8\xa5\x92\x79\x3d\xb5\x41\xcb\x30\x9a\x9a\x6b\x76\x2e\x28\x8b\xe8\x1c\x27\x1b\xe9\x7e\xa5\x1c\x03\x1b\xba\xff\x1d\x1d\xeb\xed\xf3\xfd\x92\xdb\x56\x11\x31\x83\x74\x72\x3b\xcc\x6c\x09\xd7\xb0\x24\xd9\x64\x0d\x22\xf3\x68\x12\x2c\x78\x6a\xfc\x71\x40\x17\x12\x57\x1c\xd5\xb3\xaa\xe5\xd6\x27\x03\x17\x03\xa0\x37\x58\x6c\x13\xf9\x53\x47\xbf\x52\x2b\xb6\x77\x13\x8c\x87\x93\xdb\xea\x36\xab\x56\xc0\x7b\xf8\xaf\xa6\xbd\xf3\x19\xcf\xf5\x9e\x89\x52\xa9\xc0\x53\x9c\xcd\xd1\x2a\x49\xa5\x50\x76\xcf\x77\x9e\x05\xb5\xb7\x5f\x8d\x9c\x84\x36\x00\x6a\xb9\x93\x42\x0c\x81\x87\x08\x60\xf7\xf8\x38\xd5\xb2\x2c\xc2\x10\x85\x80\xbe\x23\x67\x93\x33\x74\xf3\x4b\xf7\xee\xae\x77\xd9\x3d\x41\x9d\xdb\xdb\xee\xf5\xe5\x09\x22\x2a\xfa\xde\xc5\x2c\xda\x80\xa5\x01\x53\xdc\x4a\x2b\x0b\x34\xe5\xcf\xc0\x1b\x89\x98\x90\xc2\x9c\x5d\x74\x13\x84\x2a\x4f\xa8\x54\x36\x7c\x56\xf3\x95\x7c\x58\x5a\xde\xaf\xdc\x21\xa9\x9a\x6e\xb3\x35\xb0\x94\xe9\x4c\xeb\xb2\x43\x8a\x67\x43\xc1\x93\x6d\x98\xc2\x25\x4c\x05\xd4\xe5\x0c\x4c\x81\xe2\x19\xd2\xcd\xda\x50\x90\xcc\xe5\x98\x89\x74\x5a\x30\xd2\x7c\x59\xdf\x9b\xde\xbd\xe5\xbc\x0f\x36\x1e\x8d\xba\x10\x08\x00\x5b\xa8\x61\x15\xb9\xd9\x78\x68\x2d\xf5\x43\x1c\x45\x5a\xe5\xde\xf1\xa4\xf2\x8e\x32\x97\x80\xed\x68\x6f\xd3\x5c\xb5\xcf\xdd\x30\xe7\x9a\x83\x41\x30\xb0\xbe\x72\x25\x8f\x68\xde\x7e\x45\xbf\xa3\xc5\x52\xaf\xb0\x65\xcf\x06\xec\x41\x66\x26\x15\x73\x09\x4b\x02\x2b\x29\xd1\xf3\x94\xc0\xd1\x58\xa0\x29\x7e\x22\x85\x2e\x5d\x0e\x89\x6e\x78\xc1\x53\x51\xc5\xe8\x06\xec\x92\xcc\x05\xd1\x92\x7e\xd9\x81\x92\xed\xe9\xbb\xe2\x4e\x0c\xfb\x3a\xec\xeb\xa3\xdf\xd7\x17\x49\x2a\x15\x11\x1d\x29\xe9\x04\x0c\x89\x5b\x09\x70\xa6\xb1\xe1\x9c\xf3\x64\xd8\xc2\x26\xd2\x9e\xe2\x05\x4f\x58\x21\xe0\x43\x1a\xa4\x03\x9e\x82\x7c\x54\xb8\x36\xb9\xbe\xeb\xbc\xcc\x61\x3b\xbc\x06\x32\x38\x97\x59\xc7\x01\x4a\x6c\x25\xe2\xe0\xaa\x56\x9a\x5a\x42\x7b\x17\x73\x2e\x8c\x7c\x93\xb9\xcb\xf2\x21\x96\x0e\x93\x13\x45\x28\x73\x64\xcb\x3f\x82\xfd\xac\x09\x6c\xe4\x8e\xdf\x53\xae\xb0\xfc\xfe\x6c\xc0\xb4\x10\xf5\x48\x16\xc6\xdc\xaa\xc5\x94\x3f\x68\x59\xfc\x54\x12\x26\x21\xdc\xfb\x0f\xc6\x3d\xa7\xb7\xb8\x33\x57\x1b\xd5\x94\xcc\xe6\x09\x56\x10\x74\x9d\xf5\x02\x21\xba\xb6\x51\x2b\x25\xe5\x01\xd0\x20\xe7\x9b\xb9\xd8\x67\x66\xf8\x13\xa2\x20\x73\x5c\x51\x05\x3a\x53\x9c\x6a\xf2\x2c\x0f\x7d\xa5\xe9\xca\xec\x0a\xc1\xc1\x4f\x12\xa7\xdb\x31\x7e\xb9\xdc\xc6\x4a\xce\x98\x69\x0b\xf7\x36\xe6\xfd\x83\xb3\x1b\x45\x82\xb3\x52\x34\x8c\x56\xe6\xcc\x4a\x8f\x0c\x3b\x70\xfe\x6b\xc2\xce\x9e\xe9\x23\x9d\x93\x98\x62\x88\x80\xd7\xff\xfa\xa0\xe7\xf5\xef\x17\x77\x37\xd7\xc3\x3c\x93\xe7\x3f\x07\xac\x93\x48\x9e\x65\x29\x20\xc6\x59\x16\x6e\x3f\x17\xc4\x89\x84\x76\x2e\x60\x75\xcd\xcd\x88\x03\x56\x37\x82\x98\x47\xf2\x0c\x3f\xcb\x33\x3c\xc3\xff\xe4\x0c\x5c\xe9\x1d\xf8\xf3\x22\xe1\x69\xfc\x05\xab\x68\xfa\x01\xce\xb5\xfa\x40\x9e\x08\x53\xc6\x4d\xa5\xc9\x15\x43\x4e\xb2\x84\x68\xfd\x7f\xd7\x63\xce\x93\x8a\xa4\xd6\x64\x23\x32\x57\xe8\xff\x15\x64\xc4\xb9\xaa\xbe\xa4\xf8\x78\x2c\xc9\x5a\x17\x52\xae\xa4\xdd\xdf\xa0\xbf\xfd\xc7\x0f\x7f\xd2\x5b\x68\x13\x1a\xf7\xee\x6f\x86\xfa\xfb\x7f\xbf\xb4\xdf\xcb\x35\xd8\x9d\x49\xa5\x95\xd6\xd5\x6c\xa8\x61\x02\xe7\x53\x06\xb7\x9f\x00\xe7\x05\xb0\x37\xd8\x0e\xf9\x3a\x56\x71\xb7\xcb\x42\xeb\xdb\xa9\x6c\x1b\x11\x13\x54\x6c\x6f\x8e\xe8\x14\x31\x8e\x66\x26\xd6\x14\x33\xf4\xd7\x9f\x7f\xac\x5e\xc0\x54\xd0\x8d\x3a\xa4\x16\x85\xc2\xeb\x52\xd2\x7f\x12\x89\xf4\xae\xd1\xbb\x98\xcf\x74\xd7\x82\xc8\x29\x4f\x62\xf4\x4c\x40\x4d\xb2\x71\xa0\x99\x56\x2e\xc8\x80\xf9\x4d\x40\xc8\x21\xc2\x89\xe2\x13\x02\x77\xb5\x53\xd4\x14\x11\x5a\x54\x31\x59\x1a\x8a\x0b\x72\x62\x80\xd9\xee\xff\xe2\x62\xab\x61\x9a\xf0\xc8\x25\xb5\x58\x93\x5c\x3c\xaa\x9e\xf9\xb8\x6c\x7a\x45\xf5\x36\xfc\xf2\x22\x5b\xb3\x6d\x35\x69\x6c\x12\x8a\xb5\x61\x95\x57\xa6\x7a\x30\x34\xe2\x6c\x98\x50\xf6\xb8\xd1\x62\xb8\xc4\x70\xa4\x5b\xb0\x34\xd3\x2d\x66\x76\x6e\x63\x01\x59\xe3\x7c\x7c\x4c\x93\xc4\xa4\xb6\xf8\xcb\x03\x72\x97\xa1\x1b\x08\x03\x73\x93\x03\x4a\x62\xeb\xf7\xb2\x9a\xb0\x20\x0c\x02\xde\x06\x6c\xb4\xb0\x3e\x5b\x79\x82\x64\x1a\x4d\x5d\x66\x5e\xc4\x99\xd4\x62\x34\x17\x28\xe2\xb3\x99\xd6\x7a\x61\xc9\x14\xe7\x89\xb4\xd1\xee\xec\x54\xe1\x48\x0d\x58\xde\xdf\x8a\x93\x67\x8a\x32\x6d\x97\xba\xd7\xde\xa5\x93\x17\x7f\x6a\x14\xb8\x69\xec\x43\x51\x80\x11\xcc\x78\xa2\x3c\x50\x0b\xbe\x7c\x96\xcc\x82\xd5\x68\x06\x72\xca\x85\x1a\xc6\x95\x3c\x67\xe5\xa6\x29\x33\x42\x46\x4e\x13\x08\x1a\xe6\x4f\x5a\xf8\x27\xcf\x99\xf1\xb5\x69\x08\x7a\x57\x37\x8d\xa0\xdd\x31\x6a\x1c\xd9\xba\x5b\xb0\x86\x56\x06\x98\x24\x2a\xc6\x84\xaf\x1a\xe3\x3d\x7c\x75\xa1\x3f\x6a\x24\x5e\xf9\xdc\x39\x21\x88\xc7\x39\x86\x9e\xb9\xd7\x6d\x46\x48\x13\x4d\x2d\x74\xc2\xfe\x32\x47\x9b\xa6\xf2\x50\xb4\xe4\xea\xb1\x80\xc9\x5e\x12\x90\x35\xb1\x18\x51\x25\xb0\x28\x00\xa0\x64\xfa\xa0\x24\x58\x40\x7c\xd6\x80\x19\x38\x3c\xa3\x29\xc4\x28\xa6\x12\x12\x44\xe0\x2e\xf5\x9c\x61\xa8\x9d\x12\x58\x3a\xda\x79\x9e\xa3\x89\x3f\x87\xc0\xb2\x7c\x6b\x38\x66\xa7\x3b\xca\x60\xbf\xb4\x7e\xc6\xa3\x34\x17\xe4\x22\x90\x70\x2d\x54\x10\xa2\x4c\xd2\xc9\x54\x21\xca\xac\xdd\x11\x27\x13\x2e\xa8\x9a\xce\xe4\x09\x1a\xa5\x52\x6b\xa1\x26\x58\xcd\xc4\xa3\x10\x15\xb5\xe2\x42\xdb\x26\x11\xc7\xa5\x06\x97\x55\x94\x0d\xb6\x46\xbb\x43\xd9\x2d\xdd\x15\x2b\x36\x4e\x27\x83\x4f\x2c\xb7\x41\x89\xcc\x50\x37\x91\x89\x03\xe4\x0e\xb0\xea\xf7\x94\x48\x55\x77\x0e\x00\xec\x72\x67\x5e\x8a\x97\xa8\xa4\x85\x4c\x32\xa8\x20\x2e\x76\x1b\x24\xaf\x22\xe0\xa6\x01\xa5\xca\x9c\x4e\xb3\xb9\xaa\x0c\xdc\x5a\x76\x15\xdd\x79\x50\x46\xed\x88\x0d\xc9\x58\xb0\x9b\x01\x80\x6e\xc0\xee\x09\xa9\xc7\xa7\x5b\x5a\xfb\xdf\xe0\x28\xc1\x14\x6c\xa2\x47\xf3\x96\xdf\xc6\x89\x7d\xd9\xbd\xbf\xb8\xeb\xdd\x1a\xc8\x89\x9b\xbb\xcf\x9d\xfe\xb0\xc2\xaf\x5d\xf1\xd6\xe7\xce\xdd\xcf\x97\xab\x5f\xfb\xa9\x5f\xcc\xca\xae\x78\xe5\xee\xbe\x39\x99\xa3\xc5\x10\x2b\x92\xc2\x2a\xfb\x39\x47\xf3\x85\x9a\x72\x96\x85\x28\xc4\x05\xde\x74\x8a\x4c\x46\xb0\x82\x10\x22\x21\x55\x85\xe3\xb0\x0f\x71\x39\xab\x25\xcc\xe2\x62\x19\x74\xb9\x9d\x8a\x46\x6b\x9c\xc8\x4f\x09\x1f\x81\xdf\xda\xca\x3e\x16\x98\xae\x21\x02\x7d\xcb\x78\x9f\x4b\x2a\xe7\x09\x5e\x2c\xf5\xb0\xea\xca\xb9\xc6\x33\x02\x11\xc7\x39\x2c\x9e\x4b\x16\xd1\x2b\x03\x09\x4c\xd9\xbd\x4e\xc7\x90\xc9\xa4\x28\x56\x04\x8d\x88\x7a\x86\xbc\x39\xf7\x6b\x66\x4b\x75\x01\x23\xf2\x6c\xc0\xc0\x9c\x33\xd0\x44\x8e\x53\x88\xf6\x1b\xbc\x3b\x41\x83\x77\x31\x79\x22\x09\x9f\xeb\x95\xd7\x3f\xd4\x5c\x32\xdd\x19\xa6\xc9\x35\x57\x99\x65\x6e\x9b\xf5\x14\x24\xa2\x73\x90\xcc\x87\x44\xb7\xfb\x72\x82\x47\x61\x27\x3b\x76\x06\x63\x40\x38\x8e\xb5\x92\x0d\xac\xcc\x0d\x2f\x0f\x01\x62\xde\xd4\x0b\xc5\x2e\xd7\x11\x29\x32\xf3\xb7\xe9\xd1\x6f\xb3\x68\xf6\xac\x5c\x01\xf6\xb4\x47\x97\xec\xb6\x17\xb9\xd6\x4a\x7e\x26\x0b\x48\xc1\xb8\xc5\x54\x6c\xe8\x9a\xad\x8a\x79\xdd\x8b\x93\xb6\x5b\xd1\xd1\x01\xb9\x6b\xab\xe9\xb0\x9d\xe3\x36\x8b\xd5\x7b\x29\x2d\xd5\xc5\x72\x65\x1d\xb7\x54\x5b\x1f\xea\x94\xd4\xda\x10\x06\x54\x56\xbc\xe6\x24\x5a\x43\xe3\xca\x06\x78\xaf\xbf\x5b\xa9\xa9\x64\xe2\x9a\x8b\xbf\xcb\x57\xc1\x26\xc7\x97\xf3\xf1\xc9\xca\x11\x47\x09\x97\x45\xac\x9c\xd6\x83\xbe\xb0\x9f\x36\x8d\xbb\xeb\x6f\x5f\x2d\x17\xae\x15\xd0\x50\x41\xf8\x12\xc6\xa5\xb9\x67\x94\xf5\x90\xd9\xb7\x4f\x10\x85\x68\x4b\x50\xc8\x92\x1c\x39\x80\xc5\x28\x77\x83\x0c\x58\x1e\xb3\x22\xd1\x33\x49\x20\xcc\x2d\xe2\xb3\x39\x98\xf8\xed\x70\x6d\x4b\x24\x36\x11\xc3\x27\x88\xa7\x4a\x37\x66\x72\x72\x9c\x11\xd7\x26\xfc\xe4\x6e\x0f\xe3\x7b\xb3\xc1\xef\x19\x5e\xb6\xd9\xeb\xe6\x2e\xa5\x0c\x7d\x22\x0a\x5a\x81\x32\x0b\xfe\x04\x41\x4f\x28\x87\x50\x56\xd3\x7e\x8b\x13\x65\x67\xb2\xc6\xca\xe7\xc0\x29\x3f\x26\x7c\xd4\x6c\x24\x80\xc6\xd1\xc3\x5d\xcf\x59\x24\xf3\xf8\x29\x0f\x94\xb9\xe0\x51\xec\xde\xde\x75\x2f\x3a\xfd\xee\xe5\x19\x7a\x90\x44\x93\x27\x9b\x2e\xe4\x57\x67\x2a\x89\x19\xb9\x45\x62\x61\x52\x11\x5c\x67\x08\x21\x42\x14\xb2\xa0\x57\x30\x8e\x22\x4c\x4b\xf3\xc6\x06\x90\x14\x6a\x0d\x75\x00\x2c\x54\x9e\xa7\x8d\xcc\x5b\x75\x02\x21\x4e\x6a\x78\x3c\x51\x6a\x66\xbc\xb3\xe5\xc8\xbc\x55\xdb\xa7\x18\xd1\xb7\xef\xc9\xc0\xd1\x52\x53\x42\x05\x6a\x35\x2d\xb3\xa9\x86\xed\xe7\xe4\x85\xb8\x7f\xc6\xf3\xe6\xf4\x53\xfc\x5c\xd8\xb4\x46\x14\xf6\x7c\xf7\xfb\x3e\x07\x8e\xad\x0d\x0d\x2b\xdc\x7e\x82\xb9\x43\xcb\xf0\xd6\x8c\x6f\x9a\x8c\x0f\xe9\x8c\x64\xfe\xc4\x4a\x83\xb0\x71\xac\x12\xc1\xd9\x81\x5f\x28\x43\x85\x2b\xf1\x04\x8d\xe9\x57\xdb\x68\x1e\xdf\xee\x5e\xf5\x02\x1e\x6a\xe2\x29\xa7\x78\xf9\x4c\xad\x21\x36\xdc\xc2\xf7\x8d\x42\x24\x97\x5a\x24\x8a\xb4\xb8\x24\x48\xc4\x85\xbe\x29\xa0\xdb\xdc\x0b\xb1\x4a\x64\x50\x58\x68\xa2\x2c\x7b\x65\x9a\x4e\x7f\x5e\x5a\x25\xc6\x8a\x9c\x6a\xd1\x6b\x45\x02\xb4\xcd\x91\x81\x6c\x1a\xac\x3c\x38\xb0\xfc\xe6\x19\x91\x09\x66\x2e\x34\xbb\x66\xb8\xee\xca\xdb\x82\x55\x69\x15\x08\x43\x7a\x18\xc8\x57\x90\xfa\x53\x18\x87\x9c\x03\x3d\x1b\xc7\x61\xa3\x5f\x0e\x81\x6c\xcf\x38\x0b\xc6\xa9\x19\x6c\x3a\x8f\x0f\x69\xb0\x09\x96\x0a\xd9\x31\xd5\x99\x22\x3c\x15\x71\xbf\x46\xd8\x82\x6e\xdf\x56\x79\xd3\x5b\xa8\xa8\xc5\x12\xf0\x8c\x48\x87\x9b\x62\x50\x62\xb4\x4e\xe3\x04\xe1\x0b\x58\xa1\xec\x6c\xdf\x19\x29\xcb\xdd\x12\x3e\x33\x81\x20\xfd\xe5\xa6\xcf\x50\x87\x2d\xe1\x65\xb9\xb8\xac\x02\xbd\xcc\x9d\x84\x93\x67\xbc\x90\x68\x2e\x0c\xb4\x8c\x89\xdc\x77\x93\x07\x0d\xac\xf8\x51\x16\x0a\xa1\x5c\xea\x04\x02\x5b\xcc\xea\xa0\x39\x27\xf7\x0e\xf7\xe0\xca\x2b\x45\x95\x67\x02\x79\xde\x5c\x6e\xab\x68\xc1\xea\x14\x19\x46\x53\xcc\x26\x64\xe8\x8c\xac\x9b\x68\x4b\xba\x9d\x0b\x68\xe6\xd2\xb6\x52\x7d\x39\xdd\x1a\x85\xc9\x96\xb5\x31\xaf\x66\x06\x44\x7d\x08\xa4\xc2\x13\x82\xcc\x88\x5a\x99\xa5\x0b\x11\x63\x16\x6c\x18\xf4\x04\xdb\x6a\xb7\x18\x45\x5f\x27\xbc\x43\xe8\xd3\x15\x1e\x91\xe4\x75\x22\x27\xa0\x6b\x6b\x9c\x07\x6f\x9d\xc9\x06\x20\xe8\x19\xec\xf9\x25\x96\x61\xad\xf7\x22\xad\xca\x0d\x68\x9a\x27\x1c\x39\x7b\xd2\xb6\x99\xa8\x2b\x81\xb2\xc9\x54\xeb\x0a\xa3\xf8\xd7\x9e\x57\x40\xa4\xca\xc0\xe6\x5f\x7f\x65\x9b\xf2\x66\x03\xf1\xea\x98\xd4\x8c\x63\xeb\x42\x26\x2b\xa7\xb2\x31\xc8\x40\xcb\x9a\x85\xbd\x31\x62\x9c\x11\x44\x65\xfe\xb2\x2a\xa6\x43\x65\x10\x3d\x5a\xc4\x37\xc6\x97\xac\xf8\x58\x56\x53\x6a\xdf\x96\x96\x1c\x3c\x21\xb3\x0d\xb8\xfc\x6e\x46\xb4\xa2\x8a\xc5\x02\x20\x3e\x0d\x1f\x2e\xca\x74\x2b\xc7\xb9\x73\x81\xbb\xef\x10\x5c\xbd\x48\x5d\xc5\x11\x88\x91\xa5\xc1\x21\x83\x83\x6a\x5f\xb2\x1f\x59\x98\x9a\x01\xcb\x2c\x1b\xb0\x11\xa9\x44\x33\x3c\x07\x9f\x1e\xe3\x2a\xff\xca\xc0\x2e\xa9\x6c\x09\x4f\x9c\x20\x2e\x4d\x69\xb0\xd5\x14\xe0\x62\xb2\x4d\xa8\x46\xfb\xf2\x0f\xed\x0d\x4b\xee\xf2\xcf\x57\xb5\x08\xae\xe9\x80\x81\x27\xf4\x89\x30\x77\xa2\x4e\xdc\x89\xd4\x24\x71\x53\x4e\x16\xa7\x18\x82\x9c\x49\xec\xfb\x5d\x9a\xf9\xa1\x31\x07\x1d\x82\x35\xb4\x3d\xc9\xfa\x95\x41\x3c\x06\xa2\xad\x80\xad\xef\xc2\xd2\xfd\x33\x62\x51\x83\x4d\x1e\x3a\x96\xe8\x0f\x8c\xab\x3f\x78\xb8\xca\xce\x74\x02\x9f\x3a\x03\xd8\xc9\x52\x1d\x1c\x60\x19\x76\xdb\x22\xec\xe1\x7b\xad\xa4\xfc\xb6\x91\x09\x79\xd8\xfd\x5e\x65\xe1\xee\x72\x0e\x5e\x5d\x21\xb1\x10\x2f\x80\xca\x97\x52\xd9\xdc\x6a\x6a\x15\xe6\x27\xbd\x60\x66\x95\xab\x02\x04\xb2\xb5\x68\x15\x18\xb0\x84\x47\xb0\xcd\x6e\x9b\xb5\x8e\xdb\x5a\x01\xc1\x5c\x6d\x15\xd9\x24\xcb\xb4\x4e\x2b\x10\xc5\xc0\x39\x5b\x84\xa3\x06\x63\xf8\x6c\xc0\x3e\x72\x61\x05\x00\x69\xab\x1c\x8c\x70\xf4\x78\x4a\x58\x8c\x70\xaa\xa6\x06\xeb\xd7\x7a\x35\x16\x76\x37\x68\x39\x07\xb6\x4d\x06\xe4\x41\x65\x84\x45\xec\xea\x6d\x3c\x71\x37\x8a\x01\xf3\x1a\x81\x3a\x0a\x50\x3d\x0b\xca\x1a\xd7\x29\xba\x44\x6a\xed\xae\x8e\x16\x55\x95\x6d\x97\xea\xda\x36\x9f\xb3\x42\xa5\x5e\xa8\x00\x01\xe1\x55\x7c\xbc\x4c\x9d\x9e\xb3\x75\x3a\xed\x52\xef\xe7\x65\x1f\xc8\x89\xd5\x67\x8c\x41\xcc\xce\x40\xcb\x59\x3f\x38\x5e\x5b\xc0\x2c\x1e\xa7\x02\x82\x85\xab\xda\xfc\x2e\x9a\xd2\x24\xf7\x9c\x7c\x7f\x92\x0d\x53\x37\x99\x90\x27\x92\x18\xc4\xfc\x48\x40\x5e\x80\xb1\x59\xfe\x80\xfe\xb7\xa9\xf6\x8a\xfe\x34\x60\x9f\x80\x0d\x27\xc9\x02\xf0\x3c\xb3\x96\xb1\x2a\x35\xf3\x58\x39\x00\x65\x13\x91\x50\x71\x20\x66\xad\xa7\xf8\x89\x0c\x98\x6b\xe6\x7f\xa3\x47\xf4\x47\xf4\xa7\x3a\xe5\xd2\x85\xf7\xef\xd9\xca\xf2\xd1\x0b\x9e\xf7\x6e\x39\xcb\x28\x2d\xbf\x71\x46\x98\x82\x09\xb4\x02\xd7\x23\x83\xe5\xa6\xec\x89\x47\x4b\x39\x24\xfe\xa9\xc5\x82\x30\x35\x64\x3c\x26\x43\x52\xe1\x50\x6d\x60\x12\x5a\x08\xb8\xe6\x31\x59\xe9\x0e\xcd\x98\xe9\x17\x30\x1c\xc9\x74\x94\x2d\x07\xc0\x0b\x64\xb9\xe4\x99\xed\xa3\xb8\xd3\xaa\x47\x9e\x61\xdf\x6e\x32\xee\x4d\x5d\xb9\xb9\xd8\x88\x73\xf0\xdd\x6a\x77\x62\x82\x95\x93\x26\xcb\xc7\xb1\xec\x86\xd0\x2f\xeb\x99\xdb\xcb\xca\x43\xf5\x85\xca\x2b\x82\x4e\xa8\xd6\x1e\xda\xbb\x8b\x81\x13\x6e\xe2\x4b\x31\x10\xa7\xad\x9c\x29\x39\x29\x1c\xcc\xcb\x69\xb6\xff\x72\x17\xe8\x88\xa7\x65\xf5\xc1\x12\x80\x4a\x3f\xd8\xc0\x6a\x0a\x0b\xcd\x87\x27\x26\xff\x90\x4c\xa9\xc9\xf8\xef\x5c\x5c\x21\x7d\x3a\xf8\xcc\xc0\x62\x01\xd1\x52\x35\xe5\x82\xfe\xb3\x69\x6f\x63\xa1\xe8\x18\x47\x6a\xb8\x93\x2a\x32\xf5\x9b\xa9\x63\xfb\xe9\xd5\x57\xaa\x5b\x42\x38\xc0\x4f\xc4\x0b\x40\x84\xf0\x42\xdb\x8a\xcc\x1c\xb9\x65\x7e\xcb\x05\x62\xfc\x39\x87\xc5\x72\xdf\x03\x12\xb4\x97\xb8\x81\xb5\xca\x35\x87\x08\x62\x49\x61\x7f\x02\x48\xd5\x7b\x65\x92\x32\x01\xe0\xdc\xc0\x4b\xe9\xed\x39\xc5\x2c\x4e\xdc\x15\x82\xb8\x89\xe8\x59\x3c\xe3\xc5\x5a\x3e\x75\x3f\xae\x32\xcf\xd2\x33\xcb\x5f\x54\x82\x80\x07\x18\x49\x4d\x15\x54\xcd\x2a\x45\x18\x8d\x52\x00\xd6\xd5\x34\x19\xa7\x89\xa9\xc6\x11\x71\x11\x9f\x0d\x98\x0d\xa8\xf6\x7a\xd3\x22\xa0\xd3\x9a\xb0\xca\x1a\xa4\x16\x7f\xd4\xd6\xfb\x30\x66\xb9\x46\xb9\xfe\xef\x29\x49\x77\x94\x56\xf9\xaa\x81\xe8\x7d\x3c\x91\x79\x64\xb9\xa1\x8d\xbe\xf2\x72\xfa\xfe\xae\x67\x2a\xbd\x44\x64\x67\x2e\xce\x70\xbd\x8c\x9d\xc5\x14\xb1\x5d\xcb\x4c\x77\x67\xea\x19\xec\xc0\x4e\xf7\x12\x41\x3a\xcb\xa2\x67\x05\x57\xb7\xdb\xef\x29\x4b\xcb\x45\x2f\x63\xfc\x72\x85\x21\x4a\x42\xdd\x1e\xed\x60\x1b\xdc\x1d\xcb\xba\x4a\x63\xa8\x7b\x6e\x15\xcb\x6e\x8b\x8a\x0c\x79\xc5\x21\x97\xe6\x59\x50\x80\xfd\x5b\xe4\x2f\x67\xf5\x9a\xdd\x2d\xec\xf3\x18\x2d\xfc\x19\x6d\x01\x82\x75\x1c\x09\x17\xd5\x57\xe7\x1a\x76\x1d\xdb\x50\xb1\xeb\xe5\x60\x8c\xba\x13\x61\x58\xd2\xa1\x1e\x89\x65\xcc\x9f\x95\x87\x21\x2b\xef\xf2\x3a\x56\xe1\x4c\x62\x7c\xb9\x93\x91\x6d\xc7\x61\x84\xa3\x69\xed\xa4\x46\x9c\x27\x04\xb3\x3a\xa5\xa0\xf2\x71\xf9\x88\x18\xc4\x5a\x60\xdd\x49\x02\xb0\xcd\x8e\x04\xb6\xd4\x67\xae\x15\xb1\x18\xe0\xf6\x0d\x0f\x37\x01\x9f\x6e\xa0\x8a\x30\x67\x50\xa3\x6c\x92\x90\x32\xad\x6c\x5d\x84\x13\xdb\x49\x12\xa5\x89\x57\xeb\x73\x4e\x84\x1e\xb5\x26\xf1\x13\x61\x5a\x15\xb3\xe3\x70\x1e\xaa\x67\x97\xe5\x9e\x55\xf8\x3a\xc9\xba\x76\x4e\x52\x48\x25\x8d\x07\x0c\x0e\x2e\x2f\x1e\x56\xbd\x57\xa5\xd6\xde\x7c\x73\xdf\xc6\xa7\xd3\x13\x22\xd6\x3e\x9e\xf7\x45\xdb\xff\xda\x67\xd2\xf4\x3d\x84\xc0\x91\xad\xfd\xa5\x9e\x4f\x2d\xc7\xdf\x30\x0b\xeb\x30\xd6\x5e\xc8\x33\x00\xa1\x38\xc5\x58\x62\x2f\x12\xa7\x0e\xe3\x6b\xaf\x77\x49\x5e\xd3\xc4\xdd\x06\x2d\x87\xd2\x18\x7f\xd0\x32\x9a\x00\x8c\xbe\x4d\xe7\xf6\xca\x4a\xf5\x45\x3f\x7c\x96\xb4\x95\xc7\xae\xda\xaa\xbd\x4a\x60\x80\x9c\x00\xa0\x80\x2f\xc6\x70\x41\xa5\x11\xee\x5d\xed\x92\xd9\x5c\x2d\x6c\xa9\x3b\xb8\x17\x0b\xf2\x3e\xc0\xf8\x55\xf9\xfc\xcb\x77\x64\x5c\xf0\xfa\x57\x75\x06\x1d\x59\x6b\x4d\x65\x93\x8e\xd0\x3e\x2c\x4c\x09\x86\xa3\x2e\xc4\xc7\x54\x0d\x1e\xe2\xa4\xd6\x44\xb8\x03\xa6\x09\xca\x51\x0e\xbd\x61\x11\x7d\x95\x48\x89\xe6\x5d\x38\x49\x4a\xf3\xc2\x90\xe3\xae\xb2\xca\x81\xa3\xbc\xbc\x71\xfb\x08\x84\x04\x8f\xc8\x5a\x31\x07\x57\xe6\x83\xc6\x5d\x04\xaf\x40\xb8\xfe\x7c\x9e\x2c\xda\xa5\x09\xf8\xda\x6f\x25\xf2\xdd\xaa\x81\xf9\x78\x79\x8d\x77\x53\x11\x73\x6e\xb3\x21\x4a\x12\xa5\x82\xaa\xc5\xd0\xda\x52\xdb\x33\xad\x7b\xfb\xe5\x85\xfd\xb0\x8d\xa1\xe2\x1c\xb9\xfe\x9c\xed\x16\xee\x29\x41\x4d\x59\x24\x3b\x85\x36\xcb\x8d\x53\x35\xad\x44\xc4\x6a\x22\xac\x83\xe4\x6a\x37\x54\xdd\xc5\xa6\xc3\xb3\xe5\x56\x86\x7c\xec\xc0\xae\xda\x13\xb6\x5c\x87\x66\x0d\x23\xb4\xc3\xd4\x9e\x0b\xca\x85\x2d\xf7\xd2\x26\x52\x71\x86\xbf\x0e\xe7\x58\xe0\x24\x21\x09\x95\xb3\xcd\x4d\xe6\x7f\xf9\x73\xe3\x68\x2f\x4c\x59\x22\x33\xd8\x19\xfe\x4a\x67\xe9\x0c\xb1\x74\x36\xb2\x52\x2e\x96\x8f\x3e\xa2\xa9\xc3\x5f\x30\xc0\x5c\x6e\x80\x05\x14\x08\xe1\x61\xd4\x0e\x98\x87\x56\x6e\x4d\x15\x38\x9a\x52\xf2\x04\x58\xaa\x82\x11\x29\xcf\xd0\x35\x57\xe4\x1c\x7d\xc6\xf3\x3e\x08\x6a\xa6\x4e\xe8\xc4\x38\x1d\xb0\x44\x5a\x6a\x4d\x19\x55\x27\x03\x66\x21\xce\x1d\x55\x3e\x44\x9c\x19\x98\xdb\x08\x08\x9b\x35\x01\x56\x74\x87\xf7\xaa\x5c\xb6\x2a\x95\x35\xc4\x16\xf8\x79\xe8\x85\x24\x0f\x4d\xca\xc7\x1a\xfb\xf8\x0e\x3f\x9b\x20\xfc\x4b\xac\xb0\x29\x01\xdc\x24\xb9\xdb\x28\x37\x5b\x16\xca\xa0\x3b\xbb\x68\x20\x6e\x21\x46\xb2\x82\x76\x26\xe4\xf8\x3b\x7a\x46\xce\xd0\x8f\x09\x1f\xc9\x93\xdc\x54\x65\x1e\x4a\xa2\xe4\x89\xf1\xfb\xc1\xbf\x4d\x7e\xdf\xf7\x8e\xfa\x39\xdf\x87\x5a\x8e\x63\xfa\xd5\x20\x9b\xc8\xbf\x9c\x7f\xf8\x30\x5b\x9c\x8e\xd2\xe8\x91\x28\xfd\x17\xc8\x14\x95\x14\x72\xb0\x60\xb8\x0a\x64\x6c\x15\x75\x96\x01\xca\x5a\xed\x48\x9b\x2b\x25\x09\x80\xe1\xeb\x2b\x3d\xab\x96\xeb\xf0\xac\x38\xab\x2e\x05\x6a\xa7\x2c\xd2\xba\xe3\x55\x40\xd1\x7e\x19\x6d\xc5\x54\x03\xf6\xc1\xbb\xc7\x09\x9e\x94\x54\x96\x35\x94\x94\x9b\x19\xb5\xbb\x48\xcf\x1d\x82\x68\xf4\x29\x2b\x86\x0e\xbe\x77\x5e\x5e\xf0\xd6\x5a\x2f\xd6\xd9\x80\x75\x24\x7a\x26\xa6\xc8\x2f\x24\x9a\x82\xd3\x27\xa5\x72\x9a\xa5\x99\x82\x19\x1a\x1a\x35\x18\xc7\x06\x0a\xc3\x2a\x8e\x4e\xb3\x72\x6e\x31\xab\x81\xe2\x44\x92\x13\xdd\x30\x98\x54\x5d\x74\x28\x7a\x16\x78\x3e\x27\x62\xc0\x2c\x5e\x2d\xa0\xb2\x73\x6e\x23\x7f\xea\x52\x04\x82\x46\xf9\xb2\x1a\xa5\x47\x7b\x52\xcc\x42\x5d\x75\xbe\x21\x69\xb5\x89\xc2\x55\x79\x98\x8e\x7c\x5a\x16\x6d\x1b\xbe\xff\xfa\x66\xe3\x96\x63\x5e\xa5\x9d\x77\x4a\xb9\x17\x50\x43\x7c\x06\x0a\xa4\xcc\x4b\xa5\x3a\x5b\x5f\xa6\xbe\x17\xc4\x1c\x80\x3b\x87\x8f\x63\x4e\xa4\x67\xc4\x47\x99\x2d\x2e\xa1\x63\xa2\xa5\x8f\x01\xd3\xdb\xd8\x77\x38\x18\xd4\x74\x07\xa2\xae\x3b\x8d\x04\x97\xd2\xa6\x53\x98\x76\x9a\x93\xe2\xb6\x28\xd0\x68\xa0\xdf\x7b\x37\xd7\xc3\xe5\x52\x8d\xde\x33\x57\xb4\xd1\x3e\xac\x44\x4e\xa8\x6d\x6a\x65\x89\xc6\x9c\x16\x6b\x14\x69\xfc\x70\x71\xd5\xcb\x2a\x93\x95\xba\x5e\xae\xd2\xe8\xc3\xe5\xd7\xd7\x69\x5c\x9e\xb1\x57\xb1\xb1\xd4\x44\x43\xcd\xc6\xd5\x8b\x55\x0c\xe2\xde\x06\x0b\xb1\xb4\xf4\x2b\xf9\x43\x71\xcf\xac\xca\x35\xd8\xd1\x32\xd5\x5c\x2b\x11\x08\x8c\xfb\x0e\x5c\x00\xc1\x4b\xbf\x25\x15\x9e\xcd\xfd\x3c\x5a\x07\x06\x6b\xa7\x69\x8e\x5a\xdd\x25\xf8\xa2\x20\xf5\x11\x36\x41\x42\xe5\xc1\x2d\x2d\xc5\x7a\x1e\xaf\xbe\xc5\xbe\xdf\x45\x6c\xfa\xcb\x25\xa6\x27\x8b\x3c\x18\x52\x5a\xd9\xcd\xd5\x55\xaf\xb1\xfb\x8f\x48\x86\xf3\x5f\xbb\xa0\xdb\x66\x9e\x66\x78\x60\x82\x60\x69\xdd\xdf\x90\xa0\x59\x4a\xde\x5a\xc3\x3c\x9c\x8d\xd9\xa4\x78\x9f\x66\x95\x35\xbc\xab\xc6\x16\x8b\x8b\xdc\x41\xa4\x42\x90\x27\x22\x60\xef\xd8\x50\x2a\x56\x3c\xaa\x38\x11\x04\xc7\x0b\x8f\x22\x59\x1c\x87\xe9\x19\xcc\x63\x92\xce\xb4\x02\x0f\xaa\x09\xe3\xa7\x7c\xee\x74\x96\xc2\x5b\x50\x16\x85\x8e\xf5\x8d\xe5\x45\x81\xe8\x2f\xd8\x29\xf9\x4a\xa5\xd2\x72\x45\x45\x08\xac\x6b\x04\x24\x1e\x28\x96\x36\x25\xf6\x86\x1b\xbc\xeb\xfc\x78\x73\xd7\xef\x5e\x0e\xde\xe5\x29\x17\x2e\xa7\x30\x83\xf9\x72\x55\x1b\x38\x1b\xb0\x2c\x4e\x39\x43\xb5\x86\xb5\x44\x38\x8e\xf3\xf8\x68\xab\x44\x1a\x99\xad\x91\x23\x7b\xa7\x62\x65\x84\x72\x43\x33\x0f\x90\x58\x76\xa8\x27\xab\xc1\x75\x56\x38\x39\x26\x3d\xae\x21\x8f\x69\x47\x97\x8d\x0f\xc8\xab\x8c\xae\x4d\x94\x43\x8c\x64\xe4\xd9\xe9\x4a\x70\x3b\x7f\xc0\xe6\x12\x5e\x8f\xdb\xb9\x05\xd9\x60\x51\x3f\xd2\xaf\x24\xbe\xab\x91\xaa\x76\x92\xa6\xd4\x2a\xc0\xb2\x72\x15\x52\x46\xd7\xd1\xf8\xb3\xa9\x3c\xe8\xef\xda\xb3\xa5\x9b\x1c\x67\x2f\xc7\xcc\x05\xc0\x5c\x85\x30\x8a\x88\x50\x98\x32\x34\x86\x83\xcd\xa2\x05\x02\x14\x16\x02\x3e\xec\x3f\xa3\x19\x65\x00\x07\xd1\x44\xda\x87\xe2\x3c\xd6\x10\x5a\x3f\xf7\xae\x1f\xfa\x05\x51\xf5\xa7\x9b\x87\x62\xa5\xfe\xce\xaf\x8d\xb2\x6a\xa9\x85\xa6\x60\x21\x6f\x8a\x79\x6a\xa9\x85\x0e\xce\x28\x53\x39\xd1\x64\xa1\xc8\xc3\xdd\xd5\x56\xf2\x5d\xb5\xb3\xac\x16\xf8\xdd\x97\xae\xaa\x61\x2e\xda\x7c\x1a\x93\x68\x15\x34\x6d\xfb\x7d\x64\xa2\xa0\x34\x1d\xac\x35\xd1\xc2\xd6\x61\x89\xe6\x58\x58\x3f\x54\x6c\x02\xa0\x8a\xe5\xde\x8c\xe6\xd5\x04\x0b\xf2\x89\xa8\x5f\xf4\xd5\xc7\xd9\x2e\x92\x4b\xac\x28\x0b\xfe\x51\x32\x7c\x32\x0d\xaf\x71\xd2\xec\x50\x1a\xf2\x97\x9c\xb0\x0c\x3d\x20\xdb\x83\x0f\xa6\x71\x66\xca\xfe\x77\x74\x73\x40\x11\x17\xa6\xa9\x55\x52\xce\xf4\x8e\x34\x18\xb9\x0e\x58\xd7\x6b\x8e\x8f\xcd\xc7\x2d\x61\x06\xbd\x64\x01\xdd\x56\x4e\x4a\xd4\xb9\xed\x55\xd0\xfa\xaa\xec\x42\x7a\x5b\x35\x8a\x92\xcc\x9b\xb5\x6b\xe4\x2b\x2f\xe7\xf4\x20\xa0\xae\xec\x4c\xb7\xc3\xb6\x32\x4e\xff\xdb\x62\x24\xc1\x21\x40\x30\x57\xa9\x0c\x85\x5c\xf2\x15\x68\xcb\xeb\xa5\x57\xe6\x64\x58\x13\xc9\xca\x1f\x90\xcd\xae\xf1\xd1\x9b\x96\x43\xb7\x4f\x7c\x34\x27\x6e\xaa\x20\xdb\xd8\x82\x9d\x21\x5c\xe5\xb3\x69\x03\x71\xf5\x8b\xd9\xd1\x19\x02\x0a\x60\xba\xb8\x2a\x9b\x2e\xe4\xda\x02\x12\xf8\xd3\xf5\x77\xdb\x7a\xa8\x58\xf9\xf8\x9c\xf9\xdb\x02\x8c\xe3\x39\xb6\x76\x07\x50\xa2\x5c\xf9\x8b\xaa\x6a\x89\x67\x03\xe6\x05\xac\x48\xa3\xf6\xe8\x33\xe2\x2a\xce\x40\x19\x63\x06\x68\xe5\x90\xfb\x94\x09\x3f\x85\x15\x28\xe3\x1e\xa8\x69\xb1\x66\xcc\x52\x3f\xf6\x74\xca\x29\x76\xd9\xa5\xce\x82\x62\xe3\x00\x7d\xfb\x12\xb4\xe7\x55\x89\xb0\x1d\x83\x39\x1a\x8c\x16\xd8\xab\x41\xe8\x21\x12\xc4\x9c\x48\xf6\x5e\x65\xf9\xbb\x34\x59\xb8\x90\xea\x92\x7b\x40\x4b\x75\x98\xda\x96\x9b\x0f\xf8\x0e\x20\xb7\xd6\x55\x1c\xbc\x63\xb5\xd2\x4c\xe5\x7c\xbc\xb0\x13\xfc\x58\x24\xe8\xb4\xce\xaa\xfe\x75\x4e\xa2\x4d\x70\x81\x6e\xb1\xc0\x33\xa2\x88\x68\x0a\x47\x2a\x56\x08\x07\x11\xc7\xad\xa0\xed\xd7\xac\xa2\x29\x9f\x52\xae\xb3\x93\x69\xb7\x57\xab\x70\x7e\xb2\x59\xac\x05\x69\xa6\xa7\xf1\x8b\xb5\xfc\xaf\x39\x0b\xdb\x4f\x3e\x0d\x1b\x6d\xe5\xc1\x3a\x6d\x3b\xa7\x97\xc1\xb7\xe9\x2f\x21\xc5\x14\xc2\x85\x0e\x04\xd8\x66\xf5\x28\xeb\x10\x6d\x56\xf1\xd2\x9d\xf0\x6e\x97\xe1\xe0\x32\x93\x4b\x87\xaa\x90\x3b\x01\xbb\x04\x54\x2a\x03\xee\x52\x8d\x4a\x03\x42\x4b\x55\x84\xa4\xe7\xf6\xb3\x98\x85\xb9\x41\xd7\x4a\x56\xe5\x8a\x61\x25\x72\xad\xe0\x71\xbb\x42\xec\x08\x12\xcd\xae\x25\x9a\x55\x5b\xb9\x10\x5d\xab\x77\x27\x11\x25\xf0\x20\x5b\xc9\xdb\xa2\x3e\x14\x27\x08\x29\x5d\xf6\x8a\xb4\xe5\x80\xe1\xea\xa7\x2c\xfb\x57\x91\x83\xbb\x4d\xed\x6f\xd5\xaa\x5c\xd5\x33\xcf\x05\x05\x1e\xa8\xc4\x97\x06\x6c\x5c\x0d\x8c\xd6\x84\x41\x1a\x2b\x7f\xef\xda\x38\xb0\x20\x67\x7c\xc1\x53\xf4\x4c\xe5\x14\x29\x3e\x60\x10\x27\x98\x79\x03\x14\x47\xe6\xc5\x13\x78\x0b\xb0\x2d\x64\x3a\x9a\x51\x85\xb0\x37\xc3\x82\x49\xf2\xc4\x9e\x67\xfd\x01\xcc\xb8\x12\xbe\xa0\x0a\x77\x69\xc5\xa1\xd9\xc0\xbe\x96\x37\xb2\x2d\x42\x81\x17\xd3\xbc\x5f\x8c\x02\x4f\xe3\xf1\x35\xcc\xca\x33\x17\x40\x0a\x50\xb5\xb5\xc1\x22\xc1\x02\x5c\x2f\x95\xaa\x74\xb7\x58\x43\xcf\x0a\x80\x82\x7c\x21\x5a\x21\x14\xe4\xaf\xef\x02\xa2\xa0\xae\xf6\x5c\x53\xca\xaa\xfb\xa4\xc6\xfe\xed\x52\xa1\x15\x77\x81\xf3\xbe\xa4\x74\x5b\x2b\x29\x1d\x1a\x54\x5d\x9e\x10\xb0\x79\x78\x79\x5d\xf4\x32\x9c\xf1\x88\xb3\x98\xae\x11\x2f\x0c\xf5\xc5\x46\xe9\xb8\xc3\x16\xab\x91\x8f\x66\x7e\xa0\xbe\xb5\x97\x78\x92\x48\x35\xe6\xe6\x4a\x95\x35\x6f\xdf\xdf\xe9\x5e\x4a\x68\x11\x8c\x88\x94\x6f\x27\xc6\x15\xe4\xfd\x44\x2a\x59\x54\xe4\xa2\x0e\x58\xb5\x94\xd4\xcc\xb7\xb7\x4d\x23\xd9\x29\xec\x9e\xc7\x23\xdc\x2c\xac\xd5\xed\x4b\x16\x88\x67\x14\x7a\x62\x41\x36\x4a\x62\x70\xee\x86\xac\x0b\xa0\xd2\xc2\xd1\x26\xb9\xe6\x15\x9c\xa3\x7a\xe8\x4b\x49\x1e\x2b\xcf\xae\x15\x0c\x76\xa8\x7e\x2e\xdd\x20\xad\x73\x62\x32\x39\xde\xde\x18\x36\xa8\x3b\xce\x6c\x0d\x25\x77\xf2\x26\xe5\x8d\x01\xce\x76\x67\x20\xbc\x65\x64\x0a\xdd\xf8\x09\xb8\xa0\xed\xd8\xb1\x09\xc7\xc9\xa0\xe1\x4b\x6b\x52\x98\xb1\x09\xa9\xdc\xcb\xac\xd7\xad\x49\xed\xf9\x44\x85\x8d\x49\xa6\xbe\x75\x03\x8a\x51\xdb\x50\xce\xd2\x6d\x91\x09\xa0\x29\x8b\x89\x60\x04\xab\xe9\xcb\x65\x82\x5c\x6c\x6b\x42\xf7\xc6\xb7\xdf\xac\x10\x3b\x52\x5c\x4c\x0e\xd9\x66\xb8\xc5\xe2\xfc\x2b\xc7\xa9\x5f\x6f\x63\xcd\xb2\x01\x12\x59\x79\xea\x25\xf5\xb6\xc2\xb4\xe9\xe1\x0f\xad\xb3\x4b\xb7\x4a\x16\xa9\x56\x39\xf7\x93\x36\x53\x61\x9b\x5a\x4a\x98\xd1\xa7\xdd\x2f\xea\xbd\x82\x24\x6f\x22\x3f\x65\xff\x29\x13\x4d\xe5\xc3\x53\x2f\x8b\x02\x6a\xb8\x2b\x4c\x99\xe5\x5e\x4d\x89\x13\x5a\xee\x9d\xe1\xaa\x5c\x89\x83\xcf\xc2\x79\xf3\x49\x38\x21\x25\x23\xa4\x64\x54\xac\x51\x48\xc9\x40\xe8\xd0\x52\x32\x56\xa9\xa0\x4d\x46\xda\xcc\x6f\x08\x65\x5e\x0b\xb5\x95\xcc\xfa\xae\xd0\x23\x37\x4f\x3b\x70\x76\x4e\x3f\x66\xcb\xfe\x62\x7f\xa8\x0c\xdb\x5a\xfa\xac\x3c\x5b\xdf\xe6\xca\x16\x65\xd7\x05\x16\x71\x62\x21\x08\x6d\x50\x75\xd1\x46\xd6\x64\xce\x1d\xb0\x9f\xf8\x33\x79\x22\xe2\x04\x61\x85\x66\x1c\x70\xad\xf2\x18\x1e\x38\x08\x05\x2c\x7d\x13\xab\x81\xd1\x35\x9e\x91\xd8\x94\xda\xf4\x42\x2f\xad\x51\xd9\xba\x83\xab\x90\x76\x01\x34\xd6\x2c\x83\x8b\xed\x18\x30\x13\x0e\x69\x42\xf0\x40\x56\xa0\x6e\x62\xb0\x61\xfe\x90\x39\xab\xff\x70\x86\xfa\xfa\x7e\xa2\xb2\x38\x5e\x0f\x78\xaf\x6e\x6c\x03\x36\x11\x3c\x9d\x67\x76\x3e\x3e\x32\x35\x97\x4d\x84\xd6\xb2\xb3\x1a\x06\xe3\x3c\xd5\x11\x8e\xb5\x2e\xde\xbc\x71\x5e\x25\x52\x76\x23\x98\x25\x7f\x03\xe9\x63\x98\x85\xff\xd9\x70\x7c\xe3\x63\xf6\xc0\x65\x9a\x2a\x00\xec\xc9\x01\x7e\x49\x24\x58\x85\x32\xcf\x40\x21\xd7\xbd\x88\xa7\x50\x39\xce\x26\xbb\x6d\xe6\x5b\x71\xfe\x87\x6a\xa8\x86\xbc\x73\x1b\x97\x66\x12\x69\xed\x3d\xb1\x37\x8b\x6e\xeb\x08\xdf\x3a\x7e\x71\x9b\x8a\x39\x07\x49\x2c\x59\x38\x68\x09\x0b\xf2\x37\xe7\xf3\xd4\xc4\xde\x51\x3f\x14\xab\x72\x67\x53\xa9\x3e\x63\x15\x4d\x35\xe7\xce\x51\xd9\x76\x14\x93\x98\x73\xe5\xfd\x5a\x79\x2b\x66\x70\xe1\xf7\x5e\xe3\xf6\x68\xda\x3d\x5e\x8c\x61\x16\xc8\x99\x49\x12\x33\xdd\x9f\x71\x0d\xda\x4a\xea\x9e\x5d\xd4\x7d\x62\x9f\xe8\x89\xae\xda\x45\xab\xc6\xdf\x6e\x6f\x15\x4b\xbd\xed\x3c\xda\x71\x0b\x98\x9b\x4b\x0b\x2a\x96\xbf\x68\x4b\x03\xd7\x84\x28\x08\xba\x59\xa6\x92\x2d\xcf\xf0\xa4\xc5\x91\xcc\xe2\x3a\xc3\x73\xad\x44\x28\xae\x6f\x49\x31\x31\x72\xac\x89\xe5\x45\x18\xa5\x82\xba\xb3\x5f\xca\x5b\xaf\xdf\x1d\x60\xa1\xfc\xe0\x97\xf2\x8a\xb0\x57\xe5\xd0\x04\x25\xe0\x48\xa5\x38\x0b\x9e\x84\x3d\xe1\xaa\xef\x9b\x1c\x7d\xe7\xfc\x17\x4e\xbc\xab\x58\xd3\x95\x1b\x7b\x8b\x55\xc6\x55\x18\x8c\xad\x4e\x1a\x65\x13\x0f\xc0\xb1\xda\x4a\xdc\xa6\xe8\x46\xe5\x97\xed\x0a\x87\x54\x7e\xea\x64\x9f\x4d\xbe\x6d\x00\x98\x6a\x15\xb2\x7e\x88\x15\x13\xbc\x4c\x00\x1b\x2a\x6c\x65\x37\x1f\xd8\xd3\x76\x04\xb0\xc7\x14\x42\x19\xb0\x93\xe5\xbe\xf3\xcb\x26\xe8\xa1\x7d\xff\x9f\xf9\x43\xd0\xdf\x6d\x71\x96\x8a\x17\x07\x8c\x0b\xfb\xea\x49\xf6\x9e\x7e\x2d\xc7\x27\xd6\x52\xe2\xf2\x97\x39\xfa\xa8\x28\xe2\x14\x02\x5a\x8b\xc5\x99\x33\xf0\xd4\x59\x59\x0b\x3d\xf8\xc7\x74\x44\x04\x23\x7a\x4e\x0e\xd7\x21\xe3\xc1\x33\xcc\xf0\x04\xc0\xb0\x4f\x20\xe8\x10\xa4\xec\x5c\x83\x32\x27\xd1\xd4\x07\x05\x26\xab\x79\xbc\x4d\x65\xce\xeb\x64\x43\x9f\x46\x02\xb7\x58\xbc\x79\xe4\x4a\xf5\xa1\xbd\xb3\xfd\x6f\xa6\x68\xf4\x3b\xf7\x3f\x0f\xef\xba\xf7\x37\x0f\x77\x17\x05\x6d\xe3\xe2\xea\xe1\xbe\xdf\xbd\xab\x7c\x96\xa7\x01\xff\xfd\xa1\xfb\x50\xf3\xc8\x35\x70\xd5\xf9\xb1\x5b\x28\x3a\xff\xf7\x87\xce\x55\xaf\xff\xeb\xf0\xe6\xe3\xf0\xbe\x7b\xf7\x4b\xef\xa2\x3b\xbc\xbf\xed\x5e\xf4\x3e\xf6\x2e\x3a\xfa\x4b\xff\xdd\xdb\xab\x87\x4f\xbd\xeb\xa1\x8b\xe8\xf6\x1f\x7d\xb9\xb9\xfb\xf9\xe3\xd5\xcd\x97\xa1\xd7\xe5\xcd\xf5\xc7\xde\xa7\xaa\x59\x74\xee\xef\x7b\x9f\xae\x3f\x77\xaf\x9b\x8b\xdb\x57\x53\xa3\xb6\x6e\xb6\x77\xff\x7a\xb6\x2e\x4f\xba\x1b\x2d\xec\x99\xa0\xff\x04\x97\xcb\xad\xd9\xa2\xa7\x27\xee\x2f\x53\x8a\xfe\x54\x73\x6e\xe7\xce\xcb\x99\xde\x80\x65\x3e\xe1\x4c\x16\x50\x78\x22\x5d\x56\x77\x61\xb4\xe7\xa8\x03\x87\x0c\xf4\x9c\x42\xa7\x90\x34\x92\x8d\xd4\x45\x11\xc0\x3e\x4c\xe8\x8c\x42\x40\x01\x3a\x45\xe5\x05\x2f\x36\x68\xe7\x04\x43\xb0\xee\xc6\xb8\xe9\x34\xc8\x72\xc2\x38\xec\x94\x73\xe4\x2e\x16\x62\xac\x20\x06\xd6\x77\xc1\xf0\x8c\x46\xe5\xec\x16\x40\xb6\x45\x39\x8a\x4b\xb9\xc5\xc2\x06\x2b\xb6\x3c\x25\xe8\xe7\xbf\xe5\x83\x02\xc7\x8b\x35\x18\xa4\x4b\x15\x28\xed\x03\x91\x1a\xaa\xae\xda\x9e\x85\x9e\xdc\x31\xb7\x16\x71\x38\xb7\xb6\xd2\x3d\x78\xc9\x52\xe6\x21\xb9\x15\x5c\x66\xfa\x78\x9b\x19\x95\xf6\xf8\x39\xba\x07\x14\x19\x99\x5b\x1c\xf4\x2a\xce\x93\x74\x42\x19\xa2\xb3\x79\x02\x3c\xc6\x98\x21\x46\x64\x8a\x9f\x28\x77\x05\x57\x4c\x5d\x1a\xa0\xa3\x95\x08\xd1\x29\xaa\x3d\x28\xe7\xa8\x13\xc7\xb2\xc8\xe0\x0a\x3b\xc7\x71\xd1\xd3\xe2\xb0\x7d\xf0\x35\xcd\x58\x2d\xdb\x2c\xed\xa3\xfc\xc8\x01\xc5\x76\x8f\x93\xb3\xcc\x0e\x8b\x22\xc3\x16\x52\x8b\xa6\xe0\xd0\x6d\xe5\xe1\x46\x32\x4c\x1f\xcb\x47\xc7\x9a\x57\xc9\x31\x0e\xb1\x68\xbb\x1e\x2d\x74\x51\xdb\x4e\x33\xca\x0e\xe1\xa0\x6d\xd6\x67\x2d\xe0\xf6\x8a\x2e\xdd\x8c\x93\x52\xa9\xbb\xd6\xfd\x15\x4a\xe5\x55\x76\xb6\x53\x27\x55\xb5\x10\x09\x47\x72\x98\xed\xff\x35\xe6\x71\x0b\x9f\xde\x64\x5f\x36\x4a\x9a\x43\x8f\x6e\xeb\xba\xae\x96\xf2\x9f\xad\xfb\xaa\x71\x1f\xee\x08\x39\xab\xbd\x14\x09\xa5\x42\x68\x04\x5e\x4a\x4c\x99\x2d\x20\x45\x32\x37\x9a\x2b\xd8\xae\xcf\x71\x56\x52\x11\x8f\xf8\x53\x41\x27\x9e\x11\x29\x71\x0d\x16\x8c\x67\xc9\xdb\x86\x31\x64\x27\xd4\x7e\xd8\x72\x3f\xb9\x33\xd9\xd7\x5f\x35\xc9\xe8\x77\xbe\x42\xef\x26\xaa\x65\xd8\xd8\x05\x31\xa3\x1b\x93\xca\xa8\xf9\xcb\x49\x1e\x03\xc4\x85\x17\x1a\x55\xe7\xb5\x6a\x69\x0d\x2c\x13\xac\xb2\x2e\x98\xef\x79\x5c\x3f\x74\xc8\x6b\x7d\x63\xb0\x71\xeb\x0e\xc2\x45\xfa\xac\xb1\xeb\x0a\x6e\x5a\xbf\x62\x7b\xc4\x67\x33\x23\x17\x14\x4c\xc0\x27\x08\x9b\x0c\xd2\x5c\x9a\x92\x69\x34\x35\xce\x31\x7d\x65\x9c\x0c\xd8\xb3\xb7\x20\x85\x18\xeb\x8e\xdf\x12\x00\xb5\x7e\xd5\xc7\x8d\x3e\x15\x22\xd7\x41\x64\xa4\x10\x46\xed\x6d\x04\xe3\xc7\xcc\x0b\x9e\xad\xd8\xe0\xde\x7a\x6d\xb1\xd5\x37\xa8\xad\x59\xa2\x6f\x5d\x85\xcd\x6c\x6e\x5e\x61\xcb\x2d\x14\xfc\xb6\x43\xf0\x6a\x6b\x56\x8d\x60\x07\xa5\x35\x5f\x14\x39\x3d\xcb\x84\x35\x89\xd3\xb3\x91\x85\xff\xd0\xd3\x75\xd4\xfe\xa3\x9b\xd1\x1f\x8d\x22\x9c\xd6\xe0\xc5\x78\xad\x65\xe0\xe9\xe8\x54\xcb\xac\x0e\xc7\xc0\xc6\x8f\x48\x74\x6a\x00\x19\xdf\x43\x10\x6b\xe7\xb6\xf7\xfe\x04\xbd\xf7\x13\xf9\xde\x1f\x8d\xe9\x22\x3f\xfe\x96\x6a\xb6\xb8\x27\xe8\x72\x85\x5c\x92\xe2\xa1\x87\x9d\x52\xe2\x03\x76\xc7\x58\x36\x80\xea\xb8\x80\xfe\xb2\xf0\x0d\x78\xf4\xa1\x5c\xa4\x71\x7a\x67\x91\xec\xd6\x6f\x66\x24\x6c\x2a\x2b\x56\x2e\x1e\xb0\xd1\xa2\xec\x19\x3b\xc9\x5c\x63\xad\x79\xc4\xd6\x25\x10\x75\x7b\xcb\x79\xe7\x3b\x8e\xb0\x6e\xbe\x8d\x56\x64\xb2\x77\xb2\x3a\x3d\x39\x0f\xad\x0b\xed\x08\xa9\x09\x55\xb3\x2a\x98\xf9\x1c\x31\x2b\x17\x65\x95\xf4\x75\x6c\xdb\xad\x45\x3c\x7f\xa7\x8a\x22\x36\x95\xa3\x46\xb4\x0f\xbb\x6c\xbf\xbb\x6c\x17\xa9\x2c\xc5\xc1\xad\x7f\x7d\x5f\x18\x29\xd2\x6b\xc6\x99\x7b\xb5\x2a\x93\x31\xf8\x42\x9d\xcc\xd5\xe5\xad\xd7\x74\x94\x7b\x34\x59\xed\x29\xbf\x37\xd1\x16\xc6\x57\xbd\x3c\xd6\xf2\x50\x3b\xca\x56\x97\xe2\xd4\xa4\xad\x2a\x3a\x23\x27\xa6\x9c\x59\x1e\x21\x62\xcf\x2b\x6c\x37\x13\xd8\x35\x25\x54\xb8\x4e\x2c\x78\xe4\x5a\x38\x07\x6b\xea\x02\x75\x7b\x64\x8b\xf0\x9c\xeb\xce\xe7\xee\xe5\xb0\x7b\xdd\xef\xf5\x7f\xad\x00\x06\x2d\x3e\x76\xd8\xa0\xde\x0b\xf7\xbf\xde\xf7\xbb\x9f\x87\x9f\xba\xd7\xdd\xbb\x4e\x7f\x05\x6e\x68\x53\x67\x75\x98\x94\xa9\xac\x52\x1e\xd7\xc1\xa5\x74\x46\xe6\x8a\xde\x97\xd1\x43\xbd\x4e\x28\xa9\x41\x10\x35\x98\x0e\x2c\x26\x02\xc5\xe4\x89\x24\x7c\x9e\x1b\x75\x2b\x09\xe6\x41\x8b\x56\xb4\xdf\x04\x2f\x0a\x6d\x96\x69\x7c\x8e\x4c\x6d\x44\xaf\x3c\x74\xd6\x20\x88\x7c\x58\x10\xf6\x5e\x21\xf2\x75\x9e\xd0\x88\x2a\x2f\xe7\x93\x0b\xeb\xdc\x31\x3e\x57\x08\xe9\x5d\xb1\xb9\x76\x16\xc2\xb3\x73\x8b\x83\x1f\x7e\xb0\x6c\x6b\xc8\x4e\x54\x06\x75\xb7\xb2\x32\xd4\x0e\xcc\x0a\x35\x9e\xf6\x25\x24\xbe\x0d\x46\xb7\x0f\xe3\xc4\x72\x62\x93\xcd\xdb\xac\x41\xe9\xab\x1e\xe4\xea\xdb\xb0\x29\xb8\xa8\x70\xae\x9b\xa3\x8b\xda\xed\xd4\x57\x8e\x11\x2a\x14\xa2\xdd\x01\xa4\x8a\x0d\xf8\x5f\x33\xca\x63\xa9\x10\x10\x33\x81\xba\x18\x09\x32\xe3\x4a\x2b\x60\x26\x8c\xe2\x44\x0b\x55\x14\x27\xf4\x9f\x00\x3e\x26\xc8\x99\x17\x76\xe2\x20\xdb\x72\xe7\x85\x05\x06\x39\x1b\xb0\xcb\xee\xed\x5d\xf7\x42\x33\xa4\x33\xf4\x20\x01\x57\xac\x30\xf5\x4b\xbb\xbd\x8d\x38\xe6\x87\x7f\x50\x26\x15\xc1\x75\x11\x74\x44\x08\x2e\xda\xf3\x87\xac\xbf\x2e\x7c\x57\xbd\xbd\xe1\x59\xc1\x32\xe6\xcc\x0f\xd7\xb5\x55\xc4\xbd\x44\x8b\x9d\x27\xb2\xdd\xe1\xe7\x02\x45\x7c\x5c\x15\x90\x44\x8a\x54\xdf\x23\xb5\x01\x99\xb5\xfd\xfc\x0a\x7d\xde\xc2\xb7\x4d\xf3\xec\x43\x5c\xa2\x54\x39\xcc\xab\x41\x82\xcd\xca\x19\x95\xe6\x59\x2b\x2a\x8a\xd7\xc0\x60\x29\x6d\xfd\x11\x99\x60\x86\x44\xca\x58\x09\xf7\xd7\xb7\xf3\x2d\x47\x1a\xad\x7b\x54\x35\xcd\xf0\x8c\xa7\xcc\xd4\xe3\xd5\xa3\xaa\x18\x8c\x9c\x13\xa6\x56\x0c\xe6\xb5\x10\x76\x4a\x43\x3d\x5c\x90\x9d\x8a\x81\xd6\xe1\xec\x54\x79\xb3\xa0\x54\xf9\x7a\xd7\xb2\x8b\x64\x2c\xb8\xb4\xf4\xa1\xca\xee\xe7\x6a\x2d\x1b\xcb\xc7\xad\xbb\xeb\x63\xf9\xb8\xba\xab\x98\x44\x8f\xeb\x5e\x36\xe5\x74\xd6\xc4\x56\x7a\x5f\x32\xf6\x2d\xf4\x53\x5b\x73\x07\x0a\xfc\x47\x8f\xe8\xa7\xfe\xe7\x2b\x34\xa6\x5a\xee\xd5\xd7\xca\x35\xd6\x32\xf6\x83\x48\x9c\x55\xda\x5a\x76\x53\x91\x64\x77\x2f\x2c\xbc\x13\xa5\x3c\x29\x41\xdf\x68\x78\x42\x9c\xa9\x59\x58\x18\xc5\x52\xcd\x1d\x81\x59\xcc\x67\x66\x1e\x1f\x64\x3a\x1e\xd3\xaf\x67\x0a\x8b\xef\x6b\xe8\x61\x62\x3a\x86\xff\xe0\xa3\xa1\x1e\xd1\x96\x17\x71\x55\x73\xc8\x16\x20\xcf\xc8\x66\x67\x76\x69\xde\xfd\x3f\x7c\x04\x10\x01\x80\x72\xe0\x7c\x83\x36\x4e\xc2\xbe\xe2\x76\x52\x5e\x91\xbb\x80\x5e\x13\x71\x21\x88\x45\x16\x30\x45\x63\xe7\x58\x28\x0a\xd6\x5a\x87\x7e\x53\x28\x7b\x90\x2f\x91\x5f\x22\x7f\x8a\x73\x88\xf1\x11\x21\xe0\x5e\x9a\xd3\x64\x3d\xa5\xf7\xa2\xe0\x19\x2d\x9d\x40\x1b\xae\x6b\x01\x51\xc1\x20\xb3\x52\xc4\xea\x3e\x11\xa6\x76\xa2\x9f\x40\x13\x15\x58\x07\xed\x7c\x1c\xa6\x76\x6b\xef\x32\xbf\xdc\x5c\x1c\xb4\x1f\x53\xa5\x04\x86\x7b\xde\x66\x97\x59\x87\x7e\x5d\x98\xc1\x53\x6b\xcf\x35\xbc\xba\x4c\x97\x15\xf9\x04\x96\xda\x79\x69\xfc\x3c\x16\xd8\xd5\x6c\xd8\x10\xa1\x49\x12\x63\xc5\xf0\x90\x41\xac\x72\x5a\x5e\x73\xd3\xa7\xde\x5b\xa5\x2e\x57\x2e\xf9\x06\x70\x44\x85\x66\x3e\x11\xc8\x83\xdd\x45\xf4\xfe\x3a\x80\x07\x30\x90\x07\x91\x40\xdc\x79\xa3\x15\xcb\xd4\x8f\xd7\x9c\x2f\x93\xec\x70\x0b\x19\xdd\x0c\x46\x0b\x8d\x64\x2e\x48\xa4\xaf\xb2\x73\x74\x9b\x10\x2d\x79\xa5\x5a\xfa\x4a\x93\xc4\x41\xb7\x35\x4b\x87\x6b\xc1\x0d\xee\x7d\x5e\x9e\xee\xd1\x30\x31\x07\x5d\xd8\x3c\x33\x8f\x06\xbb\x87\xa9\xf0\xe8\x0b\x26\x64\x30\x24\x16\xb5\x48\xe0\xf0\x0b\x13\xb5\x0b\xa6\x24\x5c\xb8\xc8\xe8\x3f\x35\xfb\x15\x44\x4e\x79\x6d\x66\xa8\x3f\xdb\xfd\xcc\xc1\x91\x72\x8f\x93\x70\xf7\x61\x5d\x30\x7a\x0b\xb9\xa6\x74\x07\x16\x44\x9c\x36\xbe\xd8\x3c\xf6\xc4\x02\xe9\xda\xbb\xd5\x0e\x0d\x6e\xc9\xdc\xd4\xe6\x83\xda\xe5\xae\x8b\x5c\x99\x59\x18\xdf\x6b\xf6\x79\x6e\x40\xce\xf3\x28\xa8\x92\x79\x39\x41\xa4\xef\xda\xba\x25\xd6\xf3\x1c\xa6\x62\x2d\x1c\x8f\x1c\x8e\x7e\x1d\xce\x6d\x33\x78\xf2\x61\x69\x22\x54\xb3\x4b\x5b\x25\x04\xc4\x68\x1b\xe8\x24\x0b\x10\x7f\x76\xdb\x18\x32\x56\xaa\x78\xf5\x4c\x79\x5b\xb7\x1a\x48\xc9\xb9\x28\xb3\x2f\xef\x5a\x61\x07\x16\x26\x10\x40\xe3\xd6\x07\x8d\xb3\x25\x63\xb2\xbd\x07\x10\x8f\x4a\x00\x5a\x42\xee\x40\x2b\x0b\x0e\xd6\xe8\xbd\x2a\x5d\xac\xb0\x3a\xad\x72\xc3\x0a\x5f\x68\x5e\x72\xb9\xa5\x07\x4e\x4f\x66\x31\x84\x6c\xdb\x6d\x62\x80\x0a\xf3\x37\xde\x03\x68\x93\xc4\xc8\x40\x3e\x18\x48\x6b\x4b\xbb\xcc\x73\x32\xc7\x82\x30\x35\x60\x77\x7a\x14\xe6\x8b\x3c\x12\xc3\x45\x01\xb9\x32\x03\x50\x8c\x78\x8c\xb0\xfd\x0a\x88\x5e\x17\x86\x27\x87\xe6\x25\x50\x4d\xf7\x88\x4c\xf0\xa3\x79\xc7\x00\x45\x58\xa0\x24\x3d\x55\x3a\xce\xd5\x78\x2d\x40\x46\x53\x0a\x38\x0d\x31\x91\xf6\x42\xa2\xca\x02\x71\x64\xe2\x77\x4a\x1c\xb0\x36\x7c\x96\xf1\xaf\x2a\x86\xed\x0c\x05\xcc\x19\xe8\xe4\x80\x79\x7d\x34\xe0\xb0\x1a\x65\x7d\x43\x55\x02\xd6\x99\xc6\x99\xe3\x0b\xfe\x69\x56\x88\x0b\x3a\xa1\xcc\xab\x86\x65\xa7\x37\xc3\x73\x30\xef\x9a\x33\xc8\xc7\xd9\x9d\xd6\xb7\x39\x0e\x67\x30\xe2\xff\xfb\x5f\xff\x7d\x46\xeb\xbc\x1f\x72\x68\x29\x70\x08\x2b\xb9\xde\xb2\xf8\x2b\xef\x41\xaf\xd4\x40\x7a\x78\x3a\xad\x2c\xe4\x6d\xe4\xbf\xda\xcb\x4d\x6f\x1a\xae\xa6\xc6\xdd\x5b\xdc\xee\xe0\x1b\x11\x69\xc3\xd9\x30\x57\xcc\xeb\xd2\x92\x4a\xc8\x4d\xd0\x23\x31\x27\x39\x33\x10\xf8\x95\xe6\x97\xcc\x34\x03\x96\x7f\x22\x0d\x88\x8c\xc1\xed\x35\x3f\xe4\xd4\x69\x49\x98\x26\xde\x9f\x47\x4a\xe4\xee\x70\x2f\x16\xda\xd5\x45\x31\x31\xac\xba\xfd\xd2\x4d\x5b\xe2\xdc\x1e\x80\xe5\x36\x31\xa3\x53\x2c\xf7\x17\x9a\x53\x59\xcf\xcb\x58\xd3\x7d\xe1\x61\x55\x90\x8e\x19\xa4\x49\x91\xd5\x0b\x92\x4a\x22\x0c\xa7\xcb\x30\xc4\xec\x4e\xf0\xe1\x39\x21\x42\x74\x85\xaf\x91\xcc\x30\x5d\x2b\x9b\x41\xbf\x5f\x0d\x1e\x5a\x70\x36\xe0\x09\x11\xc3\x38\x55\x4b\xc7\xa2\x29\xc3\x40\x7f\x74\x99\xaa\xc5\xea\xf6\x65\x82\x97\xeb\x19\x35\x01\xb6\xea\xf7\x6b\x9a\x5d\x2d\x31\x7b\x21\x3e\x45\xa9\xb9\x06\x0e\x95\x94\xe0\x50\x6d\xc4\x6b\xc1\x44\x02\x37\x30\x53\x80\x43\x98\x6b\x52\xf6\x8a\x36\xa0\xed\x30\x72\x34\x4a\x73\x93\x52\x56\x06\x23\x3e\x1b\xb0\x8f\xa6\x8e\x0c\x68\x79\x66\x00\x11\xa4\x1b\x91\xaf\x73\x2e\x49\x21\xff\xad\xa2\xb4\x85\x4d\x7c\xb5\xc3\xa8\x16\xd6\xf3\x8f\xb6\x97\xd5\x5f\x1d\xd8\x76\x79\xc1\x97\xa7\x5c\xbd\x03\xb7\x12\x07\x23\x3a\xa7\x7a\xef\x0c\x2b\x4f\xda\xfe\xca\x2b\xe7\x31\x5d\x00\x1e\xa6\x92\xc5\x09\xca\xa6\x57\xda\x10\x09\x79\x22\x60\x4e\x87\x31\xfa\x05\x4c\x8a\x76\xbd\x1a\x76\xb2\xea\x00\xe5\xc9\xa7\xc0\x16\x50\x5c\x1e\x41\x31\x45\xaf\x6a\x2f\x16\x93\x8f\xb6\xce\x93\xab\x0a\x4c\x59\x43\x3c\xef\xf8\x85\x5c\x16\x44\x21\xf2\x55\x11\x5b\xea\xb5\xef\x32\x19\x97\x93\x1f\x50\x75\x32\x56\xbd\xec\xb8\xf7\xa2\xdb\x1d\x97\xf8\xee\x52\x35\x63\x77\xe5\xdb\xd4\xc5\x29\x66\xb1\xcd\xc7\xb5\x4a\x86\x16\xb6\x60\x76\xc6\xe8\x96\x65\x2a\xd8\xac\x52\x0f\x01\xdf\xb4\x69\xa0\xfa\xe1\x22\x73\x0a\xa3\x56\x59\x20\xbc\x82\x0b\x2d\xb9\xa7\x4c\xd1\x44\x6f\x0e\x3b\x06\x89\xc6\x10\x19\x67\xd1\x1d\x21\xb2\xbd\x0e\x40\x90\x4a\x49\xd9\x64\x68\x29\xe9\x52\x4b\xdb\x5d\x0c\xc5\x3d\xf5\xd9\x34\x65\x7e\xfc\xd1\x35\xd4\x6c\x54\x37\xdb\x1a\xc0\xdd\x5c\x52\x2b\x68\x1c\x8c\xbb\xc9\x58\x54\x3e\x97\x0b\x3b\xa4\xb1\x21\x05\x35\x15\xc5\x61\xa2\xeb\xd8\xdd\x41\xa6\x5b\x06\xbf\xc8\xaf\x10\x69\x13\x55\x4d\xfa\x19\x44\xea\xab\x9a\x4c\x5c\x59\x9b\x81\xdb\x63\x99\x88\x66\xeb\x99\x65\x38\x03\xa5\x64\x5e\xec\xba\xb3\xe9\x08\x38\x49\x46\x38\x7a\xcc\xb4\xb0\xcc\x16\xc1\x85\xab\x07\xa1\xe5\x4a\x28\x78\x67\x36\x97\x1e\x68\x04\xd2\x8d\xef\x2d\x34\xf0\x47\x76\xd8\x79\xe7\x86\x6a\x16\x57\xce\xe0\x5d\x99\xd1\x9b\xdc\x86\x98\xcc\x13\xbe\x98\xd5\xdc\x67\xe5\x04\xc6\x6d\x22\x75\xea\xf2\x27\x77\x7a\x95\x95\x98\xde\xda\x97\xd9\x52\x36\xd4\x0e\xc0\xb8\xd6\xe0\x92\x9f\x12\x3e\x02\x93\xaa\x35\x3f\xb8\x0c\x1f\x2f\xd5\xa3\x7c\x9e\xd7\xcd\x3b\x2a\x9f\x48\x2a\xe7\x89\x56\x66\xea\x7b\x30\x39\x27\xfb\x5d\x37\x83\x90\xb0\xda\x3a\xd8\x3e\x5a\xbb\xf2\xf3\x7d\xc0\x3e\x5f\x39\x49\xc0\xbc\x6b\xf8\x57\xc9\xca\x66\x52\x0d\xcf\x8c\x93\x5a\xf1\x01\x53\x78\xe2\x16\xd7\x0a\x97\xfc\x99\x11\x21\xa7\x74\x5e\x28\x84\xb9\x75\x78\xb8\xdd\xd1\xf6\xff\x4c\x30\x74\x65\x9b\x07\x98\xba\xd5\xe7\xf3\x53\x83\xce\xa2\x77\xa7\x9c\xe3\x28\xb7\xc9\x46\x09\x96\x92\x8e\x17\x1e\xa8\x4a\x16\xe7\x0b\xa9\x6b\x45\x23\x86\x57\xf9\xae\x8a\xcd\x19\xea\xec\x06\x55\x60\xfb\x8c\xca\x87\xe2\xe1\xa7\xb1\x0f\xba\xa7\x6f\xb3\x65\xe8\x1d\x27\x27\x58\xaa\xd7\x82\x07\x1b\xf8\x84\xcd\x50\x00\xda\xe2\x35\xed\x79\x27\x55\xa4\x61\x2e\x6d\xa4\x1c\x2d\x2c\x93\xa3\x2d\xcd\xac\x0e\x97\x21\xad\xf8\xf0\x45\xaa\x90\xc3\x0a\x3b\x4f\xeb\x8c\xce\x24\xae\xcf\x65\x86\xd2\x02\x60\x16\xf9\xc7\x27\x48\x6e\x05\xca\xd6\x66\x53\x5e\x92\x84\xec\x24\xd8\x7c\x83\x1d\x5a\x8e\xe4\xf0\xf6\x66\xe3\xbe\xcc\xcb\x52\xac\xb6\xab\x6c\x10\x03\x5f\x83\x91\x54\x3d\xf4\x2f\x66\xa0\x36\x0c\xbe\x6a\x15\xc1\x26\x0a\x54\x5e\x3d\xda\x43\xda\xe5\x5e\x68\x89\x19\xbe\xdd\xef\xf9\x1c\x0b\x9b\x3a\x9f\x71\x26\x27\x1e\xe2\x3e\x7f\xe5\x50\xf5\xa5\x71\x7d\x22\x6d\xc2\x6a\x56\x9e\xbe\x8d\x78\xef\xf2\x0d\xd5\x6e\x5f\x58\xc7\xb5\xe2\x68\x42\x00\x89\x87\xb2\x98\x3e\xd1\x38\xc5\xc9\x51\xed\x89\x9d\x25\xda\xec\x88\xfa\xd5\x1c\xa6\x95\xa5\x27\x8f\x07\x25\x4a\xba\xfb\x68\x09\xf3\xd3\x2e\xce\x01\x2e\xc1\x61\x1c\x4b\xa3\x30\xbc\x79\x89\x6d\x6b\x68\x0c\x3b\x32\x0b\x10\x11\x44\xc9\xc2\x25\x9b\x8f\x7d\xf7\xd2\xa4\xa1\x71\x6c\xbf\xc8\xe0\x20\x0a\x30\x6c\xb8\x80\x66\x69\xd6\xe8\xf5\xb9\x6e\xf9\x68\xbd\x75\xb9\x73\xfd\x33\x56\x1e\x55\x7e\xba\x82\x30\x7c\x08\xe7\xb4\xbd\x3c\xec\x00\x68\x0f\x50\xf8\xa9\x3b\x86\x87\x79\xff\x1e\x80\x70\xbc\x24\x12\xec\x4e\x44\x3e\xa2\x6d\x72\x10\x92\xf2\xd2\x52\xbc\x94\xbc\x7c\xea\xb0\xbd\x72\xa4\xac\xc3\x5d\xa2\xc3\x38\xc9\x77\xd6\xfd\xb8\xbf\x0b\x7e\xf5\x7e\xd9\xc9\xfe\x00\x98\x5b\x0c\xf9\xf8\xa9\x2d\xf7\x03\x87\xd7\x8b\xe1\x5c\xf2\x79\xad\x88\x8e\xb5\xc3\x6b\x15\x17\xbb\x44\xce\x7d\x2c\xaf\x4d\xbe\x6c\xbd\xb8\xfb\xdc\x6a\xeb\x8e\x65\x17\x3a\xda\x9e\xbd\x87\x76\x37\x7a\x1f\x84\x20\xf5\x76\xb7\x68\x05\xa4\x93\x5b\xb2\x5d\x1e\xb2\xaa\x1a\x8d\xdb\xc3\x47\xb8\xdc\xd2\xe1\x5c\x90\x31\xfd\xba\x91\x2a\x70\x0b\x9f\x5a\xf5\x5a\x93\xb9\x54\xf5\x11\xdc\x82\x50\x25\xd2\x0b\xa4\xb5\x94\xb6\x95\xe1\x06\x2c\xcf\xc8\xb5\xe9\xb8\x5a\x18\xe6\xa2\xf0\xd3\xa6\xd0\xa7\xbb\xaf\x50\x69\xd6\x75\xaa\xd4\x5c\x9e\x7f\xf8\x30\xa1\x6a\x9a\x8e\xce\x22\x3e\x33\xf9\x1f\x5c\x4c\xcc\x1f\x1f\xa8\x94\x29\x91\x1f\xfe\xfc\xa7\x3f\xe5\x4b\x3c\xc2\xd1\xe3\xc4\xc0\x39\x2d\xfb\x3b\x8b\x4b\x4e\xb0\xdc\x2e\xa2\xcc\xa5\x4e\xee\x39\x85\xde\xeb\xc6\x25\x2d\xeb\x6f\xa4\xc2\xb3\xb9\x1f\x82\x6c\x6a\x3c\x4a\x85\xf3\xca\x32\x90\x0f\xab\xa7\x89\xa6\x78\x3e\x27\xac\xde\xec\x62\x12\x9c\xb7\x60\x3d\x2e\x45\xda\x8e\x90\x7c\x9d\x27\x98\x15\x61\x3f\xa0\x4c\x9a\x20\x11\x61\xca\x42\x52\xe4\xb5\xe9\x61\x37\x1a\xe8\x29\xc3\xff\xd7\x4b\x81\x85\x39\x52\x99\xd7\x3f\x74\xc3\xb1\xb5\x88\x5d\x85\x5a\xec\x91\xae\x5c\xff\x39\xa7\x1d\x71\x54\x6b\x4a\x8e\xbd\xb7\xb5\xde\xb6\xd9\x41\x91\xe0\x6c\x48\xbe\x6a\x26\x27\x37\x05\x8a\x7b\x90\x44\xa2\xce\x97\x7b\x24\x17\x4c\xe1\xaf\xe7\xe8\x33\x65\x20\xc0\xfe\xc4\x53\x21\xd1\x25\x5e\x9c\xf2\xf1\xe9\x8c\x33\x35\x45\x9f\xe1\x7f\xed\x4f\xcf\x84\x3c\xa2\x5f\x09\x16\x96\x3f\xd8\xfa\x91\xae\x84\x1d\x6c\x21\x91\x32\x89\xc8\x93\x3e\xa1\x7f\xfa\x5f\x68\x66\x5a\x3e\x47\x3f\x7c\xf8\xd3\xff\x42\x7f\x80\xff\xfe\x3f\xe8\x0f\x35\x96\x86\xf5\xa0\xe6\xa0\xcc\xf8\x5d\x6d\x18\x01\x50\x4a\x2e\x93\x7c\x55\xb3\x17\x82\xe7\x2b\x55\xd9\xf2\x23\x8d\x1e\xf9\x78\x3c\xd4\x1b\xc3\x24\x90\x0e\xf1\x56\x66\x07\x1f\x35\x98\xda\x42\xf1\xa6\xec\x64\x5e\xf0\xc9\x76\x6a\x90\x46\x1c\xbb\x96\x69\x6e\x9e\x80\xe0\xb5\x42\xe9\x71\x2a\xe1\x2b\x12\x6b\xae\xba\xce\xe9\x70\xd6\x45\x07\x3a\xe0\x2c\x48\x3e\x32\x8f\x13\x88\x0b\x01\xa7\x7e\xf4\xb4\x09\x30\xb3\x84\xac\x3c\x0e\x4b\x61\xdd\x6f\x26\x56\x17\xa6\xf6\x5a\x71\xba\x72\xa9\xf3\xd5\x21\xba\xf7\x5c\x6c\xa5\x6f\x3d\x92\xda\x14\x9a\x15\xc5\xcd\x5c\xc1\x6d\xec\x1b\x35\x14\x47\x92\x8b\x0c\xbd\xdb\xd8\x45\x6c\x09\xd4\xd5\x56\x54\x2a\x4c\x50\x63\xbb\x43\xaf\xa7\x7e\x99\x7d\xb2\x6a\x98\x10\xe1\xe8\xde\xce\x8b\x3b\xc2\x68\xb5\x88\xa4\x59\x62\xc5\x88\x2b\x40\x36\x57\x2d\xe8\x7d\x86\xab\x02\x8d\x43\xb8\x2d\xe4\x0d\x31\x27\xd9\x5a\xe0\x8a\xea\xf5\x4c\x45\x44\x2e\xf8\x76\xe1\xd6\x09\x65\x4b\x79\x1a\xb5\xc1\x6d\xf5\x32\xf9\x95\xad\x10\xe7\x70\xa8\x79\x9c\x2b\x0b\xc6\x2d\x61\x6b\xaf\x78\x00\xb8\xc5\xd9\x00\x90\xe2\x2e\x30\x56\x97\x2a\x82\x6c\xc1\xb5\x8d\xe1\x3a\x67\x78\xae\xa0\x4c\xa9\x8e\x8c\xc0\x9a\x17\x36\xc4\x4c\x42\x38\xd9\xd6\xe3\xf0\x6a\x23\xe5\x31\x6a\x85\x2a\xc5\x30\x12\xc8\xb7\xdc\x10\x23\xd7\x94\x29\x3b\x41\x02\x43\x30\xb0\x9a\xea\xf6\x24\x11\xa7\x63\x1c\x51\x36\x39\xf1\xe0\x51\x01\xaa\xc4\xbf\x0e\xaa\x36\x69\x1f\xcb\xc7\xdd\x06\xb8\x6e\x5d\x6d\x96\xc6\x79\xc5\x43\x0b\x68\x64\x1c\x2b\x74\x09\x1b\x52\x61\xf9\x58\x87\xe8\xb5\x04\x27\xd8\x30\xba\x8c\x14\x0e\x84\xb0\x69\x7c\x0e\xfa\x80\xf8\xfa\x14\x54\x2a\x71\xf5\xcf\x2d\xb8\xa8\xcb\x34\xc5\x19\xfa\x4f\x19\x55\xb7\x61\xfc\x72\xca\x85\x1a\x6e\x88\x47\x5c\x76\xa9\x30\x72\x9a\x00\x90\x10\x7f\x22\xe2\x89\x92\xe7\x22\xac\xef\x3a\x7b\xd1\x18\xcd\xbc\x78\x4a\xc0\x7d\x9d\xcd\x39\xa4\x6e\x8d\xd1\x0c\xb3\x85\x61\x94\x9a\xb9\x60\xf9\x28\xb3\xaa\xcb\x48\xce\x70\x92\x9c\x20\x41\x52\x69\xaa\x91\x4b\x92\x8c\x4f\x5d\x01\x98\x18\x25\x7c\x42\x23\x9c\xa0\x51\xc2\xa3\x47\x69\x32\x2b\xd9\xc4\x30\xa9\xb9\xe0\x11\x91\xd2\x93\xac\x72\x14\x05\x9b\xdb\x0a\x25\x97\x15\x11\x33\xca\xa8\x54\x34\x72\x22\x53\x0e\x86\x62\x0a\xff\x47\x18\x4c\xc2\x90\x29\x0c\xc3\xd5\x92\x1e\x31\xa0\xb0\x29\xb3\xa5\xc2\xe0\xba\xb6\x58\x8f\x2e\x39\xa1\xee\x00\xed\x00\xba\xd2\xed\x90\xa1\x2a\x1e\xc8\x15\x47\xea\xc2\x7e\x06\xc7\xb8\x69\x0b\xdc\x15\x4f\x54\xb6\x21\xb3\x93\x56\x80\xd3\x82\x5c\x86\x2c\xf5\xa2\x20\xb9\x64\x19\x09\x07\x86\xa4\x07\x43\xae\xc1\xcf\x5b\xb5\xa7\x35\x15\x41\xe4\x81\xea\x74\x65\xaf\x3d\x65\x51\x92\xc6\x59\x59\x55\x2d\x02\x3c\xe9\x4d\xe2\xc8\xa3\x69\xaf\x05\x85\x13\x84\x25\x7a\x26\x49\xa2\xff\xdf\x64\x5e\x9c\x66\xe5\x42\x34\x4b\x36\x25\x5d\xa0\x13\xc7\xa5\xeb\x76\xd4\xc1\xa1\xa2\xde\x62\x35\x35\x58\x13\x33\xae\x4c\x45\x5b\x83\x8a\xea\xec\x5b\x06\x46\x73\x94\xf0\x11\x9c\x74\x00\x4c\x75\xf9\xd5\x5e\x3a\x67\x1a\x45\x84\xc4\x24\x36\xf5\x39\x33\x30\x4f\x7b\x44\xbf\xaf\x86\xef\x2c\x50\xe4\x00\xc0\x52\xcb\x86\xb5\x5a\xc8\xd4\x62\x75\xc3\x33\x74\x5b\x02\x04\xf2\x28\x33\xc6\x65\x78\xb8\x93\xa5\x25\x7c\x1d\x80\xd5\xd2\x24\xf6\xb7\x42\x6b\x02\xac\x16\xfa\xdc\x01\xc0\x6a\x69\x9e\x35\x39\x23\x7c\xb2\xd7\x5c\x77\x3d\xa9\x2b\xde\x3e\x01\xd1\x00\xd3\x99\xbb\xb3\xb0\x05\xdd\x81\x5c\x54\x6d\xc4\xc3\x02\x8f\x2d\xd5\x00\x7d\x5d\xf0\xd8\xd2\x60\x0e\x19\x3c\xb6\x34\xd4\xc3\x05\x8f\xad\x18\x68\x0b\xf0\x58\xe3\xdc\x1f\xea\x4d\xdd\x8e\x29\x40\x42\xd5\x28\x1d\xdf\x03\xc4\x40\xe3\x18\x2f\x4c\xe0\x80\xb9\xc6\xdc\x1d\x6d\xe3\x8b\x60\xb4\x36\xf7\xb6\x2e\x1c\xab\xe4\x84\x58\x77\xef\x65\xde\x37\x03\x3a\xb2\xae\xd9\xfd\xc4\xb7\x76\x83\x1d\x32\xc2\x73\x8b\x65\x50\x57\xe2\xe8\x70\xb2\xb6\x37\xc3\xe5\x05\xec\xcb\x02\xcb\x6f\x85\x5c\xf7\xb9\x54\x2d\x64\xca\x9f\x6d\xc5\x2e\xd8\x86\x66\x53\xd6\x6e\x41\xe8\x74\x68\x95\xb6\x3a\xca\x51\xa6\xc8\xa4\xac\xd3\xe6\x87\x86\x32\xf5\x97\x3f\xaf\xe4\x44\x06\xda\xd3\xa9\x87\x5e\xcd\x8e\xcc\xd9\x61\x9f\x91\x18\x45\x53\xad\x15\x49\xad\xbe\xe8\xe9\x98\x9b\x55\xa2\x19\xa6\x4e\x91\x4a\xa5\x71\x2d\x51\x39\x60\x05\x2c\xdc\x33\xf4\x11\xca\x20\xe3\xd9\x5c\xeb\x5f\xd9\xfc\xa8\xde\x49\x83\xf4\x87\x1f\xfe\x42\xd0\x0f\x68\x46\x30\x2b\xe8\xb0\xa0\x36\xe9\xab\x0f\xb0\x23\xd5\x94\x0c\x58\xe5\x52\xa0\xee\x57\x53\xdb\xcc\xc5\x1b\xf6\xd8\x98\x3b\x9d\x18\xca\x7b\xe2\x68\x8a\x64\x3a\x32\xf5\xa9\x3d\x1b\x86\x13\xa4\xaf\xf8\x04\x1c\xd5\x70\x23\xbb\x41\x37\x9d\xc2\xfd\xc6\x00\x58\x77\x63\xdb\xdb\xb8\x03\xf7\xc8\xa9\x24\x05\x4c\xb1\x0a\xa7\x99\xe1\x7c\xfe\xc1\x97\x06\x6f\xe8\xc4\xf8\x10\xb4\x7e\x86\xad\x65\x5f\xcb\xd2\x10\x4e\x0c\x5e\xb2\x34\xc1\xc2\x1e\xfd\x01\xd3\x8a\x86\x20\x4f\x94\xa7\x32\x59\xa0\x98\x33\x72\x02\x3b\x21\x8d\xa6\xc6\xb1\xaa\x75\x16\x6c\x0b\xa5\x3c\x51\x99\x6a\x85\x16\xda\x72\x75\x59\xa4\xc2\x06\x0b\x6d\x4a\xa1\x1f\xad\x7e\x13\xf8\x4a\x79\xf9\x91\xa8\x9d\x16\xe5\xc3\x15\x97\x78\x7e\x4b\xb8\xe2\xc2\xae\x0a\x70\xc5\x19\x5c\xf1\x32\x5d\x0e\x11\xae\xb8\xb4\xe6\xed\xe0\x8a\xab\x96\x7c\x03\xb8\xe2\x42\x33\x6f\x06\xae\xb8\x44\xd1\x37\x03\x57\x5c\x9a\x57\x80\x2b\x7e\x7b\x70\xc5\x5b\x02\xf2\x56\xf3\x62\x83\xeb\xa5\x28\x5b\xac\xbd\xc9\xde\x4b\xd4\xbb\xd1\x1b\x2c\x7a\x2c\x06\xb5\x65\xd7\xd5\xf6\x20\xc0\xd5\x4c\x68\x3d\x10\xe0\x4a\x55\xbd\x9e\xd5\x6d\x0b\x2c\x06\x8a\xc1\x0b\x83\x00\x17\x26\x10\xe2\x2b\xd7\x8f\xaf\xac\xdc\x7c\xb6\x6f\x3d\x3c\x17\x74\x59\xbe\x90\x5b\xc2\x00\x17\xd6\xa7\x55\x24\x26\x88\xee\x3b\xd8\x89\xfb\x95\xe6\xfb\x85\x43\xbe\x52\x96\xf7\xa9\x28\x2d\x20\xb9\x96\xf0\x1c\x4a\xa1\x51\xc2\x7d\xff\x7f\xd8\xb9\x1b\x44\x06\x97\xc8\x9b\xf9\x55\xcc\x5e\x6c\xb1\x55\x5b\xef\x50\xa7\x95\xee\x26\x51\xd8\x25\x6f\xae\xe9\x62\x76\x83\xb8\x9f\x93\xa8\xc6\xc6\x4c\x67\x74\x57\xcd\xae\xba\xc8\x32\x0c\x36\x50\xc8\x97\xf2\x52\xf5\xf5\x64\x86\x63\x64\xfc\x52\x3a\x30\xa0\xa4\x98\x2f\x27\x54\x2a\x51\x1b\xdb\xb4\x34\xc2\x6d\x5c\xa5\xf3\xb4\x75\x40\x8c\x47\xd5\xc9\x66\x9f\xcd\xc8\x8c\x8b\x55\x81\x55\x95\x5f\xda\x12\x4b\x9b\x7c\x4a\xe6\x53\x32\xd3\x92\xcc\x70\xdd\x46\xda\xae\x77\x96\xb4\x6c\x73\xd7\x4c\xa0\x63\x61\x13\x78\x8e\x50\xfd\x6e\x6c\x90\x50\x5b\x2f\xf7\xb6\xcb\x6c\xb1\x5a\xd7\x74\x08\x39\x10\xef\x66\x83\x9b\x7d\xa9\xe0\xee\x86\xfd\x5d\x19\xd3\x91\x85\xd4\xac\x8e\xda\x68\x88\xd7\x68\xc2\x3b\xcb\xbf\xb2\x05\xc8\xd7\x70\xe5\x17\xbd\xf3\x9a\x13\xfa\xd5\xa7\xd7\x0f\xf0\xa8\x41\xeb\x5d\x26\x0f\x44\xe6\x48\x22\x4e\x7d\xcd\xa0\x30\x98\x65\x7a\x15\x76\x89\xd3\x28\xb7\xd8\x24\xa9\xa8\x8d\x32\x6d\x63\xd0\x8e\x54\x8a\x13\xd0\x24\xfc\xaa\xa9\xe5\x45\x1d\x2d\x2a\xd2\x1e\xdb\x79\x4c\x28\x53\xff\xf1\xd7\xb5\x56\x53\xab\x56\x96\x6e\x50\xe9\x0d\x47\x11\x91\xc6\xc6\x6e\xa3\x90\xf1\x88\x3f\x41\x91\xb7\x6d\x56\x55\x1f\x65\x3d\x6f\xcd\xe0\x33\x08\xec\x38\xdf\xea\x46\x5c\x98\x0a\x9e\x4e\xa6\xce\x86\xa4\xcf\x8c\x9e\x5a\xd5\x5a\xfe\xb2\x64\x23\x5f\x7b\x2d\x7f\x4c\x69\xb2\x99\x85\xee\xbe\x50\xfe\xee\x53\xaf\x8f\xe4\x34\x3b\xad\x23\x68\xb6\x72\x61\x97\x07\xdd\xbe\x4f\xfb\x6d\xe6\xaf\x81\x6e\x4e\x1c\xec\xeb\x98\x27\x09\x78\x1a\x24\x99\x3d\x11\x51\xdd\x3d\x4c\xb8\x4f\xd7\x43\x6c\xcc\x06\x00\x5f\xe7\x89\x11\xad\xe4\xaf\x5b\x23\x1a\x4a\xe4\x46\x5f\x0e\x5a\x30\xa1\x6a\x9c\x11\x56\x65\x63\xfb\xb2\x5c\x79\xe8\xc8\x02\x06\x5d\xf4\xd8\xce\x82\x06\x1d\x49\x5e\x38\x70\x70\xc5\x3c\x0e\x35\x78\xb0\xc4\xec\xb2\x58\xbe\xfc\x9a\x71\x81\x43\x46\xf1\xe9\x68\x12\x0f\x58\xa7\x90\x4f\xe1\x2a\xb4\x8f\x16\x79\x40\xb6\xd1\x21\x7c\x66\x06\xf5\x5d\xac\x61\x05\xdc\x68\xfa\x2f\xd0\x74\x0c\x68\xb2\x09\x29\x74\x61\x83\x10\x4d\x4e\xe2\x53\x1c\x2d\xa2\x84\x46\x9e\xce\x3c\x11\x78\x3e\xad\xe2\x78\x6e\xe5\x03\xea\xd0\x6b\xa1\x0e\xd5\x15\x42\x5b\x27\x6e\xdb\xed\x2b\x86\x67\x24\xa0\x21\x1d\x22\x1a\xd2\x49\x86\xb7\xc1\xf2\x92\x72\xaf\x08\xe3\xb0\x7c\xee\x03\x24\xd2\x2b\x40\x22\x6d\x72\xf8\x73\xbc\xa3\xc2\xb1\x0f\x30\x4d\x6d\x88\xf7\xfa\x30\x4d\x99\x10\x70\x50\xc8\x3b\xf5\xfc\xe0\x95\x11\x5d\x96\x07\xf6\x9a\xb0\x4c\x15\xe2\xd2\x3a\x72\x63\x13\x2e\x53\xd3\xbe\x68\x45\x97\xd7\x45\x49\x5a\x8f\x32\x6b\x01\x20\x55\xde\x9d\x07\x02\x87\x54\xbf\x0c\x07\x72\x6e\x76\x99\xd5\xb3\x5e\xcd\x5e\x3f\xb3\x67\x1d\x05\x73\xbd\x24\x9f\x6c\x3f\x1c\x57\xa2\x4f\x5e\xdc\x70\xb3\x64\x9f\x8e\xf3\xc1\x13\x81\xa6\x3c\x89\x1d\x08\x47\x46\xad\xac\x83\x2c\x13\x22\x23\x90\x5b\x8c\xfb\x39\x89\x8c\xb6\x99\x17\xe2\x6b\x4a\xe9\xc9\x16\x11\x86\xbb\x03\x46\xb3\x0b\x2b\x4a\xc6\x49\x36\xb1\x9f\xac\x94\x2e\x64\xd1\xfc\xdf\x30\xc6\x02\x85\xc0\x6b\x50\x3d\xcc\x95\x76\xef\x15\x83\x6b\x12\x3d\x3c\xe3\xa8\xa8\x2a\xb1\x6b\xf6\x19\x3c\x7d\xa2\xce\x10\x83\xfd\x1e\x1b\xbd\x94\x6e\x76\xad\x3c\x95\xe5\xcd\xb2\x41\x30\xdc\x52\xc5\xc4\xed\xc1\x91\x66\xf8\xeb\x70\x8e\x05\x4e\x12\x92\x50\x39\xdb\x5b\x30\xf4\x45\xd1\x5d\xad\xcf\xaa\xe0\xc6\x44\xc6\xd2\xd9\xc8\x6c\x45\x37\x10\x5b\x64\x53\x71\x24\x52\xe6\x43\xbb\x65\x0b\x93\x15\xf1\x4c\xe1\x5e\x00\xab\x5a\x34\x85\x6a\xc9\x63\x4c\x05\x23\xb2\xb6\x36\x2d\x89\x52\x41\xd5\x62\x68\x4b\xfd\xb6\x3f\x70\xf7\xf6\xcb\x0b\xfb\x61\xb3\x87\xdf\xa1\x1a\xb8\xfe\xb2\xd2\xc2\x73\x22\xa0\x3c\x97\x2b\x34\xe5\x95\x33\xb6\xa8\x15\x24\xab\xf1\x05\xe1\xdf\x4b\xd7\x76\x5d\xe0\x34\x7e\x1e\x7a\x19\x65\xc3\xa8\xbc\x39\x56\x1d\xd6\x2a\xdc\xad\xa6\x49\xee\x19\x79\xaa\xc6\x8b\xbe\x87\xea\x3e\x36\x6d\xc4\x34\xad\x07\xec\xb9\xc2\xc1\x5e\x9b\x2f\x8c\x97\xf2\x5f\x51\xec\xc6\x1b\xa7\xc5\x3a\xaa\x0a\xbe\x6a\x18\x6c\xc7\xfb\xaa\xc5\x88\xbd\x4e\x76\x34\x6c\x7d\xd0\x85\x48\xe7\x8a\x8e\x96\xa1\x7d\x1c\x37\xd8\x41\xe9\xde\x4e\x02\x69\xe6\xce\xcd\x52\xe8\xd6\xd4\xf3\x2d\x70\x62\x3b\x3b\x2d\xff\x5b\x1c\x35\x87\x90\x64\x10\xa6\xfc\x3c\xc6\x9b\x19\x55\xca\x25\x4a\x18\x03\xbc\xde\x9d\x45\xdb\xf4\x7b\x17\xee\x82\xa1\xc2\xb2\x31\x51\x9d\x0d\x58\x47\xa2\x67\x82\x18\xb1\x10\x1a\x15\xb5\x93\x33\xab\x3e\xd4\x5c\x1b\x11\xdd\x53\x16\x9b\xa3\x85\x07\xaa\x64\x56\xf6\xcf\xf4\x31\xc6\x89\x24\x27\xba\x61\xa8\x16\xac\x38\x04\xbf\x62\xf4\x2c\xf0\x7c\x4e\xc4\x80\xd9\x2c\x16\x70\x38\x71\x9e\x98\xf6\xeb\x42\x7c\x2d\x0d\xc8\x30\xc2\xd1\xf4\x85\xd6\x08\x43\x32\x52\x34\x25\xb1\xcb\x97\x2e\x2e\x8f\x9b\xb7\x31\xd8\xaf\xb1\x58\xbd\xb1\x2b\x5b\x77\x62\x3b\x49\x22\xcd\x51\xb2\xf2\xee\x73\x22\xf4\xa8\xf5\x1e\x7e\x22\x0c\xd1\xb1\x1b\x87\x8d\x5d\x42\xcf\xe0\x99\xd3\x5b\xff\x09\xd3\xc4\x00\x10\xb8\xae\x9d\x10\x68\xdc\x0f\x03\x66\xdc\xfd\x2c\x2a\x64\xe8\x52\x46\xe5\x54\x73\xea\x14\x7c\xb2\xa0\x66\xd4\x25\x0e\xb1\xa7\x75\x4e\x73\x57\xbf\xde\xcc\x41\x9f\xa8\xe0\x6c\x06\x49\x42\x16\x97\xca\x91\x4f\x12\x95\x1d\x8f\xca\x14\xcf\x95\x12\x71\x1c\xcb\xa2\xf1\xd5\xa8\x95\xf4\x9f\x05\xb3\xcb\x69\x21\x2b\x32\xf2\x60\x95\x20\x88\xd5\x55\xf4\x6b\x92\x7f\x43\x6a\xc7\x72\x6a\x47\x35\x6d\x0e\x31\xbd\x23\x3b\xc4\xeb\xa6\x78\xd4\x2d\xff\x2e\x24\xdb\x1d\xa6\x7a\xbc\x72\x4e\xc4\x7e\xd2\x21\x5e\x37\x7f\x65\x1f\xa9\x2b\x21\xc1\xe3\x15\x13\x3c\x5a\x5b\x6a\x8b\xb1\xe9\xf5\xc7\x76\xad\xe4\x88\x15\x60\x56\x55\xbd\x7c\x26\x4a\xd0\x48\xee\x82\x3f\xc8\x39\x6e\x19\xd5\x07\x5a\xe0\x7c\x85\xd4\xa4\x5f\xc8\x9c\xa0\x10\x27\x97\x55\xb8\x1c\x09\x82\x1f\x63\xfe\xbc\x64\xab\x93\x3e\x9a\xc8\x67\xae\xc5\x1e\x41\x22\x2a\x49\x21\x92\x87\x4a\xc4\x88\xb4\xc6\x4e\x3c\x60\x53\x4a\x04\x16\xd1\x14\xb2\x3b\xf3\x85\x31\x59\xc2\x06\xd0\xc9\xc4\x72\xf8\xde\xae\x35\x16\xbd\x05\xdd\xcb\x16\xa6\x0c\x9f\xcf\xae\xb9\x1e\xc9\xcc\x7c\x92\x09\x33\x56\xca\xf0\x4d\x72\xad\x96\x7f\xdb\x44\x84\x8c\xd8\x7b\x4d\x46\xc8\x82\xa9\xbc\x2f\x5a\x26\x24\xe4\xbb\x21\x24\x25\xec\x29\x29\xa1\x82\xc4\xeb\x25\x26\x6c\x64\xf2\x7b\xf9\x98\x69\xd7\xf3\x4b\xc4\x4d\xaf\x0a\x5a\x4b\x47\xc3\xbd\x1f\xbd\xca\x39\xb7\x3d\x81\x5f\xb2\x4d\x61\x24\x62\xa1\xf7\xd9\x88\xc4\x31\x70\x5a\xc5\x6d\x85\xf6\x7c\xef\x38\xf3\x80\xbe\x7b\xb1\xd4\x9b\x1d\x27\x9c\x4d\x24\x8d\x0d\xd8\xcc\x1c\x43\xad\x62\xdf\x78\x01\xe0\x0a\xb0\xbe\x49\x42\x84\xf3\x4a\x08\xf4\x9d\xa4\xcc\xa2\x49\x66\xbf\xc5\x9c\x48\xf6\x5e\x19\x63\x01\x66\x0b\xf4\xc8\xf8\x73\x42\xe2\x09\xac\x50\x79\x30\xa7\x88\x92\x13\x44\x55\xf6\x99\x00\x34\x06\x9e\xaa\x81\x1e\x3b\xc4\xda\x19\x0d\x80\xd8\x6f\x85\xad\x5e\xe1\x71\x60\xf9\xfd\x19\x42\x3d\x86\xc6\x38\x52\x27\x48\xa6\xa3\xbc\xfd\x98\x9b\xe2\xf2\x5a\xfb\xf6\x26\x9e\x37\x12\x62\xe6\x2b\x3a\xaf\x3e\x1b\x8e\x3b\xe8\xed\xda\x49\x28\xde\x2a\xb6\xf0\x09\x6f\x03\xb1\xfa\x39\x95\x36\x08\x03\x71\x96\x1d\x7d\x0b\x2f\x95\x61\x64\x03\xde\xa9\xc1\x9b\x66\x3c\xae\xb5\x75\x96\xa6\xb2\xee\x58\xf2\x40\x50\x2b\x28\x59\x47\x15\xb4\x6b\xc8\xad\xa5\x26\xa9\x04\xc1\x33\xeb\x1c\xd0\x57\x0d\x88\x35\x26\x0c\x54\x8f\x9e\x0a\x23\x61\xae\xb3\xc4\x57\x94\x3d\xea\xd5\xcd\x51\xc1\x39\xe0\x25\xeb\x9e\xab\x16\x6d\xae\x6f\x3c\x72\xc1\x99\x71\x10\x6e\x25\x77\xd2\x09\xc3\xc9\x9a\x36\x8e\x25\xca\x2d\xfb\xf4\x9c\x9c\x65\xc5\x05\x2d\x45\x18\x63\x1f\x32\x3d\xae\x65\x43\x2a\xcd\xd7\x97\xf7\x30\x8a\xc9\x9c\xb0\x98\xb0\x68\x01\x5b\x84\x01\x72\x90\x60\x38\x41\x18\xbe\xc3\xc9\x19\xba\x34\xf9\x45\x99\x84\x67\xaf\x75\xb8\xd0\x67\x98\xd1\xb1\xd6\x13\xc0\x08\x6b\x47\x39\x60\x66\x98\xce\x07\x42\x72\xeb\x6a\x46\xb1\xaa\x95\xd1\x37\xc8\xf5\x96\xa8\xcc\xac\xf8\x3d\x6a\xbe\x70\xa0\xb7\xa6\xd5\xd1\xcd\xb9\x1a\x0c\x32\x1d\x9d\xc2\xbf\x0b\x09\x77\x0e\xa8\x28\x47\xd1\x21\x09\x01\x73\xa0\xf5\x78\xc1\xc5\x58\x07\xac\xb7\x0b\xbf\xdd\x8a\x3c\x16\xaf\x8f\x82\x52\x33\xa3\x8c\xce\xd2\x99\xe7\xbc\x33\x15\x1b\x22\x6b\xbf\x34\x99\x28\x73\xad\x07\x44\x0e\xbc\x1d\xe9\xcb\x95\x2d\xd0\x84\x3e\x11\x36\x60\x73\x4e\x99\x3a\x43\xd7\x5c\x11\xaf\x44\x86\x81\xce\xe2\x73\x45\x67\x06\xed\x55\x10\x7d\x0e\x0c\x28\x38\x00\x6d\x4e\xb1\x3a\x41\x71\x0a\x47\x95\x11\xa5\x59\x87\xbe\x71\x15\xac\x0c\xc4\x87\x8b\x01\x33\x37\xdd\x18\xd3\x24\x15\xc4\xca\xac\xd8\xe4\x05\xe5\x43\xce\x47\x66\x91\xe0\xbc\x49\xcc\xe8\x64\xaa\xf4\x12\x69\x19\xcf\xfa\x1b\xa7\x9a\x1b\xf1\x01\x1b\x11\x84\xd1\x9c\x4b\xaa\xe8\x53\xe6\xbf\xa4\x63\x84\xa5\x04\x0b\xca\x19\xba\x2c\xd8\xff\xa9\x04\xd5\xbb\x2e\xae\x98\xb2\xa1\xb5\x3d\xd7\xe7\x23\x6d\xbd\x90\x85\x5e\x2c\x95\xf1\x48\xf2\x24\x55\xbe\x0b\xb6\x7a\x6d\x73\xd3\xb8\x2b\x5c\x00\x06\x62\x3e\x1e\x30\xb7\xaf\xe5\x19\xea\x48\x24\xb9\x5e\x25\x69\x96\x32\x12\x54\x11\x41\x0d\x8a\x15\x51\x66\x11\xb2\x73\x9a\x9d\x81\x19\x16\x8f\x5a\x84\xf2\x2d\xf0\x06\x53\xb5\x60\xed\x18\x19\x09\x09\x60\xbd\xfc\xe5\x00\xd3\x3f\x62\x9c\x9d\x32\x32\xc1\xab\x56\x64\xc0\x0a\x4b\x82\xbe\xa3\xe3\x5c\x21\xad\xf3\x39\x7a\xb4\x1b\x42\xe4\x53\xdd\x2a\x99\x8e\xeb\x16\x69\x9c\x70\xbc\xc2\x6d\x3c\xce\x0f\x3d\xfa\x07\x1f\x99\x31\x6a\xbd\x9f\x2b\x90\x02\xb5\x7a\x35\xe6\x82\x4c\x31\x8b\x4f\xdc\x62\x15\xc7\x06\x37\xa3\x35\xb5\x39\x65\x0c\x24\x41\x07\xa2\x4c\x0c\x16\x15\x66\xde\x5a\x58\xc5\xcd\x2e\x45\xbe\x0e\x6b\xdd\x15\x59\x6b\x50\xfb\xc5\x18\x20\x0c\xcb\x5b\xcc\xed\x11\x97\x74\x36\x4f\xf2\x9c\x2e\xcf\x36\x3a\xd6\x22\x96\xe3\x91\xfc\x09\x4c\x57\x4e\x6b\x83\x5b\xdd\xae\x9c\xde\x67\x15\x23\xcf\x18\x29\xdc\x1a\xce\xe6\x65\xca\x80\x7a\x2c\xec\x3b\x49\xf4\x3f\x15\xc9\xd5\x3e\x23\xac\x0f\x98\x13\x41\xbe\x07\x2e\x63\x9b\xf5\x8c\x67\x5a\x84\x36\x30\xb7\x96\x7e\x28\x32\x4e\xee\xc2\x39\xb1\x87\xc1\xbd\x5a\x79\x51\x29\xaa\xc5\xec\x1f\x29\x20\x74\x5d\x6e\x09\xbb\x4f\x59\x4c\x6a\x8b\x59\xb5\xe2\x1a\x75\x77\x8b\x61\xa8\xc3\x4d\xeb\x4f\xf4\xa7\x44\x12\xa4\x9e\x33\xa0\x38\xad\x57\x81\xc9\x52\x90\x84\x3c\xe1\xfc\x8e\xcb\xfa\xb2\xec\x32\xc2\xb2\xa6\x3c\x0c\xa0\xad\xe9\xf1\x6f\x9e\x38\x9d\x8d\xef\x46\x0f\xe5\x09\x27\x36\x71\xc5\xfa\xca\x65\xfd\x82\xf5\x2e\xb7\x8a\x21\xb5\xad\x54\xd1\xb3\x5e\xc4\x70\x7d\xff\x4c\x16\xd5\x14\x59\x01\x62\xd8\x94\x8d\x9e\x91\x7d\x0d\x5b\xf5\x6d\xfe\xcd\x32\x8d\x6b\x29\xf7\x73\x61\xca\xaf\x90\x44\x75\xbb\x54\x81\x1b\xfe\x94\xe9\x78\x4c\xbf\x82\x56\xeb\x6e\x12\xa7\x79\x44\x82\x4b\xcd\xc5\x40\x56\x41\x6e\xf1\x8c\x23\x79\x9b\x84\xaa\xca\x2f\xb5\x96\xb5\xf6\x8e\xae\xa5\xf6\xdf\x53\x22\xb6\xa2\x77\xb6\x55\xd7\x09\x47\xf4\x4e\x49\xb5\x8e\xe8\x1a\x55\xb8\x65\x4c\x92\xdf\x6a\x1f\xd7\x90\x6e\x35\xfc\x79\xe5\x67\x23\xc3\x7c\xd7\x1f\x88\xcf\xb5\x1b\x6d\x6a\x79\x7c\x5a\x16\x9b\xec\x8a\x12\x69\xfe\x76\x62\x01\xd6\xb1\x0d\x9c\xca\x52\x9d\xb1\x8b\x19\x31\x8e\x11\x53\xb3\x4a\xd9\x4a\x0b\x9e\xa6\x6e\x1b\xa3\x6c\x32\x60\x8e\xb6\xf2\x04\x99\x30\xf1\x12\x43\x2d\x60\xdb\x63\xef\xd3\x6c\x63\xb7\x33\xa9\x1a\xbf\x3a\x23\x52\xea\x8b\x51\x2a\x81\x29\xb3\x3e\x1c\x47\x1f\x39\x60\xe8\xb4\x1c\xa7\x7e\x02\x76\x84\x13\x97\xed\x7a\x92\x0f\x50\x0e\x98\xc9\x38\x41\x7f\x46\xdf\x29\x3c\x31\xb7\x04\xa0\x57\xe2\x04\x70\x2f\x41\x4b\xb0\x5a\xb9\x97\x1c\x90\x9d\x48\x1a\x7f\x7f\xde\xd4\xa7\xb1\x21\x7c\x07\xcd\xc0\x21\xd7\x34\xcc\x09\x44\xc7\xf9\x3f\x48\xfc\x7d\x53\x4b\xf9\x47\x8f\x64\x71\x52\x26\x72\xfd\xbd\xd1\xc7\x5b\x45\x68\xee\xeb\xe2\x80\x41\xb7\x77\x52\xe2\x11\x49\x7e\xc9\x27\x8a\x1a\x59\xd1\x8f\x94\xe1\xed\x78\x50\xe5\xf0\xda\x45\xa0\x8f\x16\x75\x75\xeb\x2a\x58\xcf\xc6\x88\x2b\x1d\x23\xcb\x12\xa4\xbb\xb3\x12\xbb\xab\x6a\x88\x21\xea\x71\x4a\x92\x39\x8a\xe9\x18\x5c\x6f\x0a\xf6\x4b\x06\x1e\x6b\xea\xfd\x68\x85\x66\x96\x32\x03\x04\x6c\xa2\x3e\x9e\xed\x49\xb7\x2c\x23\x6f\xfc\x6c\xc0\x7a\xea\xbd\x44\x52\x09\xce\x26\x5a\x99\x8e\x9f\xa8\xcc\x0b\xd9\xe9\x03\x99\xce\x88\xb0\x5d\x50\x69\xa4\x6e\x5b\x04\x0a\xbb\x8b\x4d\x8f\x4d\x5f\x7d\x20\xf8\xb8\x62\x8b\xfa\x47\xa3\x57\xe8\x51\x4a\x17\x35\x55\x11\xf6\x6e\x17\xb7\xc4\x3b\x5f\xd8\x74\xf9\x8b\x6f\x9d\x44\xb3\xdc\x90\xe9\xf8\xe5\x87\xb2\x19\xd3\x52\xbd\xc1\x84\xb9\xf6\x85\xd0\xf6\x22\x70\x55\x13\x52\x93\xe6\xa4\xfb\x71\x8e\x2d\x33\xb8\xb5\x54\xac\xd2\x04\xed\xa8\x8d\xf6\xe4\x9b\x30\x09\x05\xfb\x87\x54\x58\xd1\xc8\xde\x02\x5c\x58\x2b\xae\xd5\xab\xeb\x97\x76\x5b\x9d\x44\x46\x38\x59\x5e\xe1\x06\x9f\xba\x79\xbf\xd9\xd0\x69\x8f\x9b\x69\xbb\x11\xd8\x25\xe2\x49\xb2\x4e\x99\xba\xd2\xcc\x2f\xf2\xcf\x9b\x47\x94\xf7\xa3\x17\xc0\xad\x05\x9c\x1a\x63\xa0\xc0\x89\x75\x17\x49\x65\x57\xc9\x7f\xc9\x5c\x6a\x0b\xab\x3e\x0e\x18\x1f\x43\x21\xc3\xa4\x2e\x72\x7d\x2e\xf8\x8c\xae\x53\x49\xc3\x04\x73\xdf\x39\xdf\xff\x0a\x4f\x8a\x8b\x10\x00\xf3\x9b\xd9\x5e\xb6\x47\xc0\x64\xc0\xd6\xa4\xd6\x70\x86\x66\x78\xbe\x11\xc1\x57\x45\xbe\x74\xd0\xcc\x84\x1d\x59\xea\x01\xa6\x36\x81\xe4\x54\x20\xf2\x33\x5e\xe4\xf0\x37\x75\x35\x12\xd8\x5a\xdb\xe1\x41\xbf\xde\x63\x63\xbe\xc6\xe1\xcc\xe1\x6a\xec\xe9\xc3\x6e\xcf\x7a\xe7\x2f\x8b\xc4\x30\xab\x6f\x68\xda\xe6\x3c\x5e\x54\x6d\xea\xb5\x4f\xa6\xa3\xe0\x3e\xfd\xb0\x3e\x13\xf1\xbe\xf9\xd7\x3a\x77\x6b\xf1\x68\x79\x2d\x22\x18\x4e\x33\xa9\x3e\x17\xf6\xe1\xce\x69\x54\x6a\x07\x9e\xe5\x09\x63\xb7\xd5\xad\xbe\x00\xcd\xec\x21\x69\x45\xac\x2d\xf1\xb9\xd6\xab\xf5\xe0\x7a\xcc\x2a\x3b\x6c\xad\xc9\xad\x22\x06\x70\x33\x69\xb5\x86\x3c\xfb\xc4\xc2\x00\x8c\x69\x42\xe4\x19\xea\x55\x38\x71\x5d\x12\x7e\x16\x34\x6e\xd2\x01\x9d\xf4\x94\x0a\xea\x15\x7f\x77\x32\x12\xa2\x50\x84\xce\x0f\x64\xf1\x9c\x16\xe0\x3e\x9d\xf2\x67\x93\x81\x27\xa8\xe6\x59\x46\x58\x55\xe0\xd2\xd2\xbc\x80\x5a\x8f\x90\x71\xa8\x65\x1f\x70\x93\x17\xa1\xd5\x9c\xcc\x19\xe6\x5b\x20\xca\x4b\xba\x8b\x32\x9e\xed\x31\x0e\x5c\xaf\x7d\xfd\x45\x1b\xa5\xc0\xbd\xbb\xc5\xe8\x32\x29\x7f\x7d\x7b\xe4\x47\xf8\xd4\x19\x76\x31\x1a\x0b\x02\x5a\xf6\xff\xc7\xde\xbb\x36\x37\x6e\x24\xe9\xc2\xdf\xf7\x57\xd4\x7a\xdf\x88\xee\x3e\x4b\x51\x6e\xfb\xcc\x84\x57\x1b\x8e\x78\x69\xb5\xda\xe6\x58\x2d\x69\x74\xb1\x67\xcf\x70\x82\x5d\x04\x8a\x24\x46\x60\x15\x8c\x02\xa4\xe6\xec\xce\x7f\x3f\x51\x99\x59\x17\xdc\x48\x40\x94\xda\xde\x3d\xf3\x61\xc6\x2d\x02\xa8\x7b\x65\x65\x65\x3e\xf9\xe4\xc6\xf1\xa6\x61\xe2\x04\xa5\xe0\xbc\xbb\x79\xf7\xe3\xf1\xdd\x94\x89\x22\x62\x69\x72\x2f\x66\x32\xd2\x0f\x70\xe9\xfb\xa5\x14\x85\xf9\xb9\xc3\x08\x94\x6c\x84\xd4\x20\x09\x92\xa2\xe7\x7d\xcd\x0e\x8c\xf9\xef\xbb\xea\xf7\x7d\x6e\xe5\x8e\xeb\xd3\xac\x5d\x9b\xd3\x10\x96\x29\xa4\x6d\xc3\xa1\x6d\xb1\x6b\x7e\x87\xfe\xd6\xb3\xb6\x8c\xe7\x4f\x08\x89\x96\x7f\x2d\xe5\x40\xa5\xeb\xd4\x7f\x14\xb4\xa2\x43\xa7\xdb\x64\x1c\xf2\x99\x0c\x8b\xb5\xc6\x6f\x5a\x4b\xdf\x27\x44\x3c\xf5\x8d\xf5\x9f\xfb\xe4\xf0\xac\xc8\x85\x00\x11\xe2\xd6\x13\x9d\xf5\xc4\xb6\xe6\x3a\x16\x7c\x34\x9e\xc9\x0f\x16\x55\xe7\x7f\xd5\xde\xd7\xb0\x59\x04\x69\x5e\xaa\xa5\x40\xb1\x71\xa2\xdd\x0f\x90\xb4\x4f\x97\x69\x81\x59\x8b\x97\x89\xe4\xa9\x6b\x28\x3e\x69\x93\x12\x39\x97\xd1\xfa\x50\x37\x79\xb2\x9c\x8b\x74\x88\x26\x3a\x5d\x9e\xa5\xda\xac\xef\xe8\xbe\x63\x77\x3e\x25\x2f\xb7\xef\x0c\x7a\x9c\x28\xb7\x27\xf3\x6e\x76\x9e\x62\xd6\x60\xc1\x00\x87\x55\x8f\x90\x47\x12\x30\x33\x8b\xa4\xa9\x23\x0c\x0b\x43\x53\x5d\xd8\x19\xd4\xc2\x78\x31\x93\x79\x29\x21\xa1\x98\x43\x65\x72\xe6\x73\xc2\x44\x16\x23\x41\x88\x95\x95\x11\x13\x98\x72\x05\x5f\x36\xf7\x33\x55\x6a\xf0\x47\x6d\x44\x61\x0e\xa8\xd7\x90\xeb\x1f\x61\xd1\x23\x96\xe5\xc9\x06\x5c\xca\xfa\x4d\xcb\xd4\x9d\xf2\x82\xa7\x6a\xf5\xdc\x56\xa5\x27\x86\xd8\xd8\x66\xb0\xe9\x3b\x33\xf8\x2b\x21\x45\x0e\x1d\x05\x5b\x76\xeb\x16\xee\x61\xe5\xee\x90\xdc\xe0\x49\x24\xe7\xaf\x76\x16\x0b\x5e\x16\x6a\x63\xee\xb7\x3c\x4d\xb7\x23\xf4\x3a\x0b\xb6\xe6\x7a\x6d\x27\x1a\x1d\x86\x7d\xce\x26\x1a\xdc\x53\x1e\xad\xc5\x4d\xc1\x8b\xb2\x15\x99\x55\x6b\xe5\x17\x42\x96\x9b\x2f\x4e\xd8\x9f\x7d\x1f\x4f\x27\xa7\x3f\x9c\xcd\xdf\x4d\x6f\x26\xdf\x9d\x9f\xbd\x0b\xfa\x43\x4f\x3e\x4c\x6f\x6e\x9a\xbf\xfe\x30\xbd\x6d\xfe\x78\x75\x79\x75\x77\x3e\xb9\x6d\x2b\xe5\xfc\xf2\xf2\xc7\xbb\xab\xf9\xfb\xc9\xf4\xfc\xee\xfa\xac\xe5\xd3\xbb\xdb\xee\x87\x37\x3f\x4e\xaf\xae\xda\x4a\x3d\xfb\x69\x7a\x6a\xaa\xa3\xdf\xff\x12\x6c\x3b\x70\x9d\x9b\x11\xe8\xe8\x5f\x7d\x67\x1e\xb1\xea\x8b\x27\xec\xae\x9e\xf7\x8a\x02\xb1\x90\x44\xec\x91\x6b\x23\xdc\x20\x0e\x10\x4c\xb0\x7e\xb4\xba\x3e\x45\xac\x72\xb4\x16\x2c\x55\xea\xbe\xcc\x48\xe6\xa1\xb5\x5d\x2a\xb4\x08\x09\x1d\x94\xf6\xc3\xf4\xf6\xa4\x99\x7f\xcb\x15\x16\xd0\xa5\x3a\xe3\xf2\x23\x47\xea\x00\x90\xb3\x60\x64\xb1\x79\x99\xbc\xeb\x3a\xa8\xc1\x4d\xd9\xae\x7a\xb0\x34\x2e\x8b\x5a\x35\x71\xec\x49\x96\xa0\x63\x41\xc1\xd5\x09\xdf\x35\x9a\x6e\x38\x30\xf1\x28\x5b\x88\x88\x97\x88\xe8\x36\x07\x58\x9e\xab\x3c\x6c\xb0\x5f\x28\xcf\x57\x28\x2d\xb0\xd6\x02\x6b\x73\x66\x3a\xae\xef\x93\x2c\xab\x4c\x3b\x2d\xc4\xfd\x33\x0f\xa9\xde\x1e\x92\xa8\x10\xf1\x17\x4d\xbd\xc8\xc7\xe0\xa3\xde\x6c\x76\xb5\x69\x72\xb0\xd7\x13\xb9\x42\x5b\x82\x4d\xba\xb7\xde\x3a\x14\x12\x80\x5e\x3d\x0c\x18\x92\x80\x98\xb3\xc6\x25\x45\x4b\x00\x56\xc4\x0b\xf6\x28\x80\x8e\xa6\xa4\xac\xa3\x78\xa7\x37\x32\x03\xaa\x43\x3c\x80\xcd\x21\x5c\xa1\xa9\xe9\x14\xf2\xcf\xa1\xc8\x9b\xef\xb5\x18\xe6\xc4\xdb\xcb\x29\xf2\x0e\x0b\x05\xa9\x6f\xe3\x05\xa0\xc5\xcf\xe9\xf4\x6b\x39\xe9\xf6\x1c\x42\xe6\x38\xe8\xd3\x1e\xcb\xe3\x56\x49\x8e\xd2\xbf\x61\x95\x04\x1a\x7b\xc7\xea\x56\xc5\x7c\x6b\x16\x07\x80\x1e\x74\x99\x65\x2a\x2f\x58\x47\x19\x08\x81\xc4\xf6\xc1\x59\x46\xfd\x70\x22\x12\x0a\x31\x9a\x8b\x6e\xc9\xc3\xd6\x8f\x5a\x8a\xc6\x35\xf0\x9d\x05\xc1\x45\x70\xc1\x74\x39\x33\x37\x95\xab\x7a\x65\x85\xb6\x29\xd5\x87\x44\x67\x66\x46\x71\xe8\x9b\xc2\xb9\xad\xf6\x4b\x5b\x42\xeb\x94\xa7\x62\x59\xcc\x07\x3a\xbb\xa0\x44\xd9\xc5\x06\x98\xac\xd6\xcf\x50\x62\xff\xdb\xc7\x57\x04\x8a\x36\x57\x8e\xc0\xf2\x90\x2b\x55\xa0\xde\xeb\xef\x46\xcc\x8e\x26\x98\x2d\xa8\x52\x8a\xa3\x77\xca\xa5\xb9\x4b\x20\x96\xcc\x85\x9c\x8f\x67\xf2\x0c\xc0\xa7\xfe\x82\x63\xc3\xeb\xe1\x76\xb1\xf7\x5e\x51\x49\x58\xff\x59\x23\x5d\xba\xb3\x03\xf8\x75\x8f\x90\x45\x91\x6e\x1d\x47\x54\xcc\x2a\xdf\xf5\xd9\x3d\x68\x4d\xb7\xaa\x25\x76\x18\xb7\x8e\x2e\x44\x46\x16\x7f\xec\xa7\x47\x49\x83\xb7\xd9\x54\x35\x66\x3f\x5b\x8b\x12\x04\x0d\xb9\x20\x1a\x8b\x7b\x4d\xf9\xd6\x12\x8a\xb7\x0d\xec\x73\x70\x74\x3f\x77\x18\xd1\xee\x01\x76\x64\x9c\x2d\xa3\x5c\xb9\xd8\x4b\x89\x96\xde\x01\x30\xa4\x53\xf7\xd1\x8d\xd8\x8d\xa8\x7c\x0f\x29\xdc\x09\x95\x0e\x3a\x8b\x4c\xb7\xff\x8c\x93\x85\x2c\x1e\x16\xa4\x41\x29\xb5\xc9\x33\x6b\xf6\x0f\x78\x16\x91\xe4\x83\x2d\x93\x34\x05\x3d\x60\xcc\x26\x72\x6b\x49\x30\xcc\x51\x68\xc1\xa9\xc9\x4a\xaa\x7d\xf1\xf9\x1d\x8b\x29\x0a\x16\xd3\x4d\xf7\x62\x42\xfc\x87\xe7\x40\x7a\x9e\x15\xf5\x0c\x7c\x78\x46\xb6\xf0\x66\x36\x95\xfe\x2c\x78\x03\x8c\x02\xe1\x69\xfe\xb9\x22\xcb\x1a\xcd\x0d\x3e\xfc\x7b\x7b\xd3\xbf\x2f\x79\xce\x65\x01\xf1\x52\xa4\xb4\xe6\x22\x08\xdb\x16\x9f\x00\xdb\x2a\xd1\xc0\x0c\x3f\x85\x93\x6b\xa1\x04\x08\x3f\x4b\xe2\x11\x4b\xc6\x62\x0c\x99\x7d\x73\xa3\x4b\x2c\xfc\x9b\x6b\xa3\x39\xcc\x64\x23\x0e\x64\xcc\x26\xa9\x56\xf4\x85\x90\x51\xaa\x34\x40\x7b\x17\x21\xe9\x3a\xac\x7c\x72\x57\x2d\xb6\x70\xbf\x81\xa9\xf4\xc5\x2b\x7a\x10\x7c\x08\x09\x6a\xc1\xd7\x9e\xc2\x4e\xf7\xbf\xff\xab\x22\xfa\xd8\x2e\xfc\xc5\x0b\xa6\x02\x6b\x1c\x43\x2f\x36\x49\x98\x66\x7a\xd7\x04\xc1\x1b\x30\x31\x3e\x3e\x27\x60\xaf\x63\xaf\x79\xc1\x52\xc1\x75\xc1\xde\xbe\x19\x84\x39\xb1\x1d\xf4\xd2\x95\xb6\xaf\x0f\xb2\xb7\x61\x9a\xa1\x72\xe7\x2a\x86\xbc\xc3\x3c\x2f\x18\x67\x52\x3c\x86\x51\x39\x0a\x02\xa9\x6c\x32\x61\x11\xf0\x82\x20\x16\x1f\x59\x8d\x20\xd2\x15\xaf\x4c\x1d\x72\xc4\xa6\xca\x20\xb7\x2c\x35\xab\x65\x65\x8d\x1c\xaa\x0d\x60\xec\xe6\x25\x1f\x30\xb9\xe6\xc5\x4c\x92\x64\xb5\x70\x94\x20\x44\x7e\x92\xa6\xd5\x20\x45\x0e\x71\xb8\xd2\x74\xd8\xb4\x3e\x1e\xbb\x01\xba\x80\xeb\x97\x8b\x14\xab\xd8\xff\xfc\x66\xc1\x58\x06\xc7\x15\x19\x96\xdd\xaa\xed\xb4\xd9\xad\x3f\xa3\x12\xdc\x52\xfd\xb9\x5a\x25\x11\x4f\x7b\x28\xc3\xa2\xad\xc9\x7b\x36\x56\xd3\x57\xb0\x43\x37\x7e\xee\x0a\xfa\xab\xca\xed\x76\x77\x38\x66\x1f\x55\x8b\x19\xbf\x63\x72\x03\xdd\xe2\x90\x0b\xb8\x0b\x59\xfc\x5c\x9e\xe4\x4a\xd3\xa7\x31\x10\x26\xec\x97\x82\x9e\x80\xc0\x8a\x0e\x8c\x5b\x8b\x83\x78\xe8\x20\xfc\x92\x40\xa4\x28\xf8\xe8\xcd\x0e\x8f\x6e\xf6\xdf\xbb\xfb\x23\xdf\x7f\xdb\x15\x07\xae\x6b\x76\xbc\x5b\xd9\x9b\xc4\x7f\xe5\x11\x44\x49\x42\x4d\x36\x3e\xb3\x49\x66\x69\x53\xa0\x70\x70\x12\xb4\xaa\x87\x59\xae\x22\xa1\xf5\x98\x9d\xc1\x41\x43\x7f\x32\xbe\xb4\x8e\x8e\xe0\xe5\x99\x34\x37\x13\xcb\x7d\x17\x94\x5f\x5d\xe2\x6d\x3b\x00\x89\x74\x0f\xf2\x11\x6d\xf6\xe7\xb7\xeb\xba\x4d\x58\x1e\x5f\x28\x03\x52\x62\xb1\xb3\xd5\x09\x8b\x55\x74\x2f\xf2\xe3\x5c\xc4\x89\x3e\x01\x9f\x7d\xd1\xe9\x2c\xdc\x98\xdb\xf6\xc1\x9a\x46\x17\x00\x61\x0f\xa1\xc0\x29\xd6\x4f\x21\x05\x36\x34\x69\xc4\x92\x25\x5c\x27\x6c\x3c\x2b\x06\x70\x59\xaa\x40\x21\x8b\x7c\x8b\x68\x67\x6b\xca\xaa\x0d\x84\xbd\x69\x18\xa5\xad\x2b\x12\x3b\x7f\x0e\x6c\xcf\x13\xbb\x8d\x11\x3f\x04\x64\xc0\x4e\x15\x8a\xe2\xc0\x50\x5c\x64\xbc\x58\x6b\xa0\xfd\xa8\x8e\x01\x5d\xba\xe0\x53\x33\x42\x3c\x03\x1c\x04\x5a\x29\xfc\x47\x8e\x9c\x42\x17\x49\x9a\xce\x24\x06\x6e\x00\x43\xc7\xab\x56\x76\x21\xf3\xe9\x88\xf1\x38\x66\xff\xdf\xeb\xf7\xe7\xff\x71\x7b\x36\x9f\x5e\x80\xcd\x7b\x7a\x7e\xf6\x66\xe4\x7e\xbc\xbc\xbb\x75\xbf\xa2\x85\xe5\x41\xe4\x6c\xc3\xef\xe1\x8a\x27\xb5\xa0\xc0\x53\x31\x93\x61\x4b\x2d\xef\x92\x79\xa2\x85\x45\xd0\x92\x9a\xe2\xe8\xa7\x69\x0e\xbb\x48\x5b\x89\x8e\x73\xc0\xe5\xf7\xda\x7d\xb2\x7b\x0d\xda\xc5\xe3\xaa\xb0\x6a\x20\xc4\x17\x73\x1d\x10\xf1\xd0\xdd\xd7\x2f\x38\x21\x57\x89\xec\xc2\xf9\x09\xf9\xf0\x92\x4a\xfc\x8f\x62\x0b\x40\xf3\x2b\x9e\xe4\xbd\xd7\x5e\x3b\x93\xa2\xdd\x31\xe6\x9e\xce\x75\x7d\x53\x69\xd4\x85\x31\x52\xb9\x13\x4b\xda\x46\xa2\xfb\xab\x77\x97\xa8\x39\xc5\xa7\x22\xb7\x0c\x5f\x2e\x16\xd6\xd2\x60\xba\x83\xc6\xaf\xc1\x99\xbc\xbd\x7c\x77\x79\xc2\x44\xca\x17\x0a\xc2\x20\x09\x6a\x64\x8b\xa0\x01\x8b\xd4\x26\x28\xa8\xc2\xee\x36\x62\x99\x67\x77\x0b\x8d\x68\x63\x2c\x63\x0f\xcb\x5b\xa6\xf2\x26\x37\xda\xf3\x5e\x01\xa9\xb3\x57\x2a\xef\x73\xfc\x9b\xd7\x30\x2e\x24\x33\x17\xb9\x9a\xe4\xa5\xb3\x79\x29\x38\x30\x7f\x90\x5b\x88\x6c\xf9\x04\x8c\x4d\xd3\x4a\x2e\x6e\xb3\x71\xf4\x98\x5c\xfb\xfe\x4d\x25\xd9\x8f\xdf\x68\xb6\x28\x8b\x99\xac\x96\xa1\x24\x9b\xfc\x7c\xc3\xbe\xe3\x45\xb4\x7e\x33\x93\x10\x97\xf8\xe3\x37\x1d\x34\x94\x83\x99\x9d\xcd\x98\xbc\xe3\x05\x3f\x57\x3c\x4e\xe4\xaa\x8d\xd6\xd9\xe7\x1e\x3c\xbb\x9d\x9c\x30\x9b\x02\xc6\x47\xd1\x16\x96\x4e\x25\x28\x08\x04\x32\x74\xc4\x4a\x11\x10\xe5\xb2\x4a\x7d\x8b\x37\x33\x38\xb0\x66\xf2\x16\xf9\xac\x8d\x54\x4d\x0a\x96\x29\xca\x7f\x69\x6e\x65\xc8\xf4\xcd\x6d\x74\xb9\x48\xb7\xcc\x8c\x0e\x2c\x63\x37\x19\xa4\x8f\x81\x3e\xd3\x14\xf6\x33\x09\x17\x74\x17\xd7\x9b\xaa\x88\xa7\x80\xf5\x3b\x0a\x6c\x7a\xe6\xda\xae\x4a\xe0\xd6\x01\x90\x8d\xdc\x56\x21\xb9\x8e\xee\xc9\x29\x65\xe1\x44\x81\x01\x00\xe6\x91\xfc\x90\x1b\x65\x24\x0e\xf2\xd8\x82\xf1\x2d\xc5\xd1\x31\x1f\x3a\x5e\x5b\x1c\x16\xf3\xd4\x85\xbc\xab\x52\x5a\x1e\xb7\x08\xcc\xf7\x72\x0b\xb0\x70\x48\x58\xa7\x00\x52\xe2\xa5\x33\x2d\xca\xc6\x2c\xba\x33\x31\xf8\x6c\x26\x11\x81\x58\x99\x97\x90\xf9\x30\xa8\x5d\x49\x00\x48\x36\xe3\xec\xcb\x8c\x00\x93\xa4\xeb\x67\xb9\x38\x72\xd1\xe3\x71\x65\x4c\xcd\x09\x3b\x66\xd7\xe1\xf5\x3a\x56\x51\xb9\xb1\x59\x29\x20\xf2\x9c\x90\x75\x74\x88\xba\x15\x82\x07\xfb\xbe\x15\x0f\x0c\x77\x85\x00\xea\x9d\xde\xf7\x63\x5c\x30\x93\xf0\xd3\xa6\xa6\xde\xad\xf8\x82\xec\x38\x0c\x0d\x87\x05\xcd\xb3\x6a\x49\x95\xd2\x0e\xe6\x74\xb8\xf0\xcc\xf9\x2a\x07\x65\x4b\x7c\xca\x14\x18\xb9\x31\xb0\x5a\xc5\xaf\x34\x9b\x5e\x19\x0d\xc8\xdc\x78\xdd\x1e\x2c\x75\x81\xa0\x35\x8c\x7f\x86\xaf\x31\x0c\x61\xc4\xbe\x64\xb3\xf2\xcb\x2f\xbf\x8e\xd8\x27\xfb\x8f\xdf\xff\xee\x77\x5f\xff\x7e\x48\x98\x8a\xbd\x90\x43\xb9\x7e\x8c\x5c\x2a\xd2\xaa\x4a\x14\xce\x40\x53\x52\x1d\x30\x0b\xb4\x01\xbb\x86\xff\x29\x0c\xd9\x01\x26\x89\xaf\x68\x87\xeb\x70\x67\xb2\xca\xd6\xf4\x48\x02\x2d\x8a\x51\x55\x42\x38\x65\x97\x34\xfa\x7f\xde\x41\xf4\x3a\x37\x5b\xe5\x69\xd8\xa9\x24\x75\xea\xb5\x29\x84\xbd\x26\xfb\x5f\x01\x0e\xc4\x37\xf6\x80\x53\x69\x2c\x72\x6c\x93\x33\xd9\x39\x43\x22\x08\x07\xf1\x29\x4b\x55\x6c\xa9\xe5\x3d\x8f\x42\x02\x0a\xc2\xd9\x27\x6e\x24\xf7\x88\x28\x48\x29\x6e\x15\x3c\x2f\x4b\x1e\x09\x8a\xb1\x7e\xfd\xe9\xc4\xfc\x36\x62\xdb\x13\x00\xa7\x8e\xd8\xdf\x4e\x88\x69\x90\xe7\xc5\xdc\xfc\xf4\xc6\xea\xda\x54\x04\x34\x3a\xd1\xec\xd5\xf1\x03\xcf\x8f\x41\x3c\x1f\x63\x8b\x5e\x91\x64\x75\x39\x95\x43\xdd\x3c\x55\xea\x9e\x80\xbb\x8d\x0f\x8f\x2d\x69\x2d\x2c\x6f\xe7\x37\xc1\xa9\x77\xa4\x46\x05\x3b\x82\x17\x04\x1b\x67\x0b\x36\xfe\xab\x56\x92\x8d\xb7\x7c\x93\xd2\xaf\xf6\x29\xe1\x8a\xb9\xa6\x58\xbb\xd8\x61\x84\xd2\x2d\x5a\x4a\xbf\x4b\xd5\x02\x7a\xf5\xc1\xf6\x14\x91\xb9\xd0\x50\x7f\xfa\xf8\x03\x8b\x3a\x62\x49\x3c\x80\x7b\x71\xa3\x0a\x7c\x85\xc2\x66\x9b\xbd\xfa\xe4\x9a\xf4\x27\xf4\x0b\xc3\xa0\xd8\xe0\x40\x34\x0e\x3b\x54\x9c\x29\xf4\x13\x7b\x4d\x22\xe8\x8d\x39\x63\x08\x06\x8d\xc3\xd0\x56\xc1\xd6\x55\xf0\x1f\x41\x05\x89\x64\x18\xee\xb9\xe3\xcb\xbf\x1d\x8f\xc7\x63\xf7\x35\x30\xfe\xfc\x1f\x96\x14\x5a\xa4\x4b\x2c\xc9\x9e\x60\xdb\x99\xfc\x60\x93\x56\x59\xe3\xb5\xa7\xc3\xce\x72\x55\xa8\x48\xa5\xec\xc8\x1b\x74\x63\x15\x69\xf6\x2f\x46\xad\x0d\x86\x12\x7e\x34\xf7\xb8\x0e\x0a\x7d\xcc\x92\xf1\x99\x36\x15\x19\xc4\xeb\xdb\x2a\x64\xc0\x75\x17\x5b\xae\xc3\x20\x67\x58\x0b\x66\xe5\x1c\x13\x4b\x6e\x9e\x9b\x97\xc5\xa7\x02\x1e\x75\x90\x10\xb7\x42\xe4\xdb\x4f\xca\x86\xb8\xf5\x5c\xc4\xb8\xac\x3b\x06\x80\xb8\x42\x49\x32\x60\x3f\x47\xa1\xfb\xc4\x1c\x2e\x32\x4c\xa3\xa4\xcb\xcd\x86\xe7\xdb\x63\xbf\xdb\x9a\x8b\xd3\xb3\xd4\x82\x8c\x49\xed\x00\x80\x0b\x37\xa5\xad\x45\x28\x06\x52\x2f\xed\x89\xe6\xf6\x6e\x04\x79\xb0\x03\xb6\x27\x21\x23\x15\xd3\xba\xf6\x51\xad\x55\x8d\xc5\xbd\xd3\xd4\x55\x2c\x22\x46\x7b\x63\x9c\x2c\x90\xfe\x8c\xde\xb0\x1f\x77\x88\x6f\x35\xd7\x85\x11\x94\xab\x01\xee\xd1\xe9\xe5\x8d\xfd\xa6\xff\xa1\x0b\xe3\x50\x55\xd9\x79\x1a\x72\x0b\xcb\x15\xcb\xf9\xa3\x3f\x7e\x01\xdb\x81\xd6\x99\xd2\xc5\xfc\xe2\xdf\xa7\xea\x2a\x49\xcd\xa9\x05\x6b\x7c\x3c\x93\x95\x9f\x47\x4c\xa4\xc9\x26\x91\x0e\x5b\x87\xc2\x5d\x2d\x51\x7b\xbe\x4f\x0a\x33\x65\x3a\xbe\x37\x12\xcc\x72\x62\x06\x57\xaa\x89\xdc\xda\xa5\xe3\x1c\x53\x64\x81\x28\xb5\x69\x97\xbf\xa3\x03\x1b\x40\x12\x8b\x23\x52\x48\x93\x60\xe1\xc1\xfe\x9d\x49\x53\x9a\xdd\x4b\x1e\x86\x1c\x94\x17\x14\x77\x64\x93\x09\x05\x12\x00\xea\xa8\x60\x89\x9d\xfe\xdb\xa2\xa0\x9c\xc9\x72\x73\x68\x10\x0b\xc1\x92\x7f\x2d\x33\xdd\x55\x2e\xec\x49\x45\x01\x51\x42\x96\x1b\xbb\xa1\x06\xac\xb8\x33\x52\x7f\x62\x11\xa5\x1c\x59\xfe\x4c\x41\x80\x7c\x1c\xa1\x83\x34\x0b\xea\xc2\xe3\x05\xab\xc1\xfc\x84\xa9\x90\xaf\xf1\xef\x37\x8c\xce\x86\x2f\x47\x74\x9e\xe7\xda\xb1\xa7\xe1\x9c\x43\x7e\x6f\x11\xa3\x0d\x1d\x32\x3a\xac\x78\x1e\xa3\xb5\x3c\xbc\x55\x60\x64\xb0\xd1\xbf\xb6\xaa\x64\x8f\x89\x5e\xcf\xe4\xad\xb2\x06\x47\x26\x95\xcb\x89\x31\x82\xcb\x68\xa3\x3e\xae\x41\x08\x40\xab\xdb\x56\x80\x11\xc2\x07\xc5\x30\x01\x88\x76\x2e\x55\x2c\x0e\x23\x7f\xbc\xf5\xbe\x0a\xeb\xbf\xce\x05\xc6\x99\xc1\x49\xd1\x15\xa6\x2b\xb4\x1e\x68\x9b\xaf\x4f\x3c\x9c\x43\x54\x8e\xa9\x55\x3d\x0e\xca\x4c\x12\xf2\xaa\xba\x53\x0d\x4a\xb1\x37\xce\x20\xca\xb8\x32\xf6\x2e\xd3\xc4\xa1\x93\x10\xb5\x30\x3d\xf6\x3a\xfb\xb1\xef\x11\x0c\xbb\x03\x18\x73\xb6\xca\x55\x99\xb9\x50\x7c\x1b\x46\x88\xd3\x40\x3a\xcd\x54\x2e\xd5\x09\xdd\xa9\xce\x13\x79\x8f\x2b\xfe\xa5\xe6\x08\x93\x89\x88\xb8\x42\x81\x6b\x33\xfc\x43\x1f\x8e\x58\x22\xa3\xb4\x84\x83\x4f\x17\x3c\xba\xc7\x84\x28\x5d\x46\x5f\xf3\xcd\x7c\x7f\x90\x66\x87\xc6\x54\xa6\x29\x55\xeb\x0f\x50\x20\x99\x03\x13\xd0\x43\xc2\x19\x67\x77\xd7\xd3\xf6\xba\xef\x93\xa6\x33\xa7\xfd\xf4\xac\x2e\x10\xf8\xbf\x1f\x93\x41\xb8\xcb\x1a\xa5\xb0\xa8\x2c\x75\x67\x5c\xea\x22\xac\xc7\x45\x5a\x98\x0b\x44\x7c\xdd\x62\xda\x1f\xbc\x4e\x57\x59\x39\x37\x03\x95\x0e\x01\x08\x98\x56\x7c\x7f\x75\x37\x09\xbe\xdb\xb5\x54\xbe\xbf\xba\x63\x41\x1d\x48\x16\x9d\x8a\xa8\x70\x48\xe3\x31\x3b\xf5\x39\x1c\xea\x9a\x79\x2c\x1e\x92\x08\x43\x67\x47\x46\x2b\x9a\x49\xa0\x46\x37\x77\x9d\x23\xcb\xa7\xc9\xbe\xbf\xba\x23\x16\x4e\xcf\x9b\x83\xe9\x28\x80\x1a\x63\xd8\xb1\x53\x23\x25\x97\x4a\x1e\x21\x65\x50\x1e\x7b\x6f\xc7\x08\x2e\xd7\x11\xcf\x8a\x92\x14\x8c\x87\xb7\x63\x3b\x27\xd7\xde\x13\x62\x9a\xa5\x66\xd2\xe8\x4a\x18\x63\x00\x99\xd3\x4c\xa7\x9b\x53\x5b\x1b\xd4\x43\xc0\x01\x30\x68\x07\x09\xff\xc4\x45\x0e\x72\xb9\x65\x3c\x5f\x24\x45\x6e\xae\x61\xf8\xf1\x08\x19\xce\xd6\x36\x3b\x16\xce\x9b\xd7\x8c\x28\xd9\x1d\x4c\x70\x22\x0b\x3d\x93\x41\x00\x8c\x8b\x36\xc6\xe0\x85\x44\x32\xa0\x12\x06\xec\x8d\xa5\x36\x8d\x52\x55\xc6\xf6\x58\xcd\x5d\xf2\xbc\x6d\x86\x4a\xd4\x4c\x02\xe3\x89\x39\x5b\x95\x51\x43\xfd\xd9\x7f\xc2\x3e\xca\x87\x24\x4e\xf8\x51\x21\x74\xca\x8f\x8a\xff\xfd\x71\x54\xfb\x89\xbf\xfd\xf2\xcb\x8f\x98\x07\xb0\x8b\xce\x21\x60\x6d\x3a\xd0\xc0\xd3\xee\xa7\x70\xfc\x87\x66\x95\x1e\x30\x4f\xe7\xc9\xbd\x60\x1f\x71\xba\x3f\x12\xf9\xf1\xd3\xa6\x6d\x26\xdb\xe6\x8d\x3d\x65\xda\x80\x8a\xbe\x7d\xde\xd8\x8e\x69\x7b\xbb\x1a\xff\x6e\xb5\x30\xb3\xf5\xd5\x6a\xfc\xf6\x4b\xf8\x67\x6d\x8e\xf6\x6d\x5e\x17\x3d\xd3\xd6\xec\x16\x41\xd4\xb2\x2d\x9d\x2c\x9a\xc9\xfd\xc2\x88\x0d\x93\x45\xb0\x6a\xdb\x36\x3e\x2f\xc4\xa1\x51\xb3\xc8\x89\x3d\x00\x7d\xdd\x20\x1b\xdf\xe9\x11\x3c\x90\xa9\xdb\xb3\x6c\x03\xdc\xb3\x9b\x32\x3c\x04\xe0\xc2\xc3\x01\x3c\x3f\xf0\x7e\xbf\xfe\xd4\xde\xdd\xd3\x9d\xdd\xcd\x4c\x85\x18\xc0\x4c\x73\x63\x5e\xef\xd9\xc8\xca\xab\xbb\xda\xf8\xc8\x31\x1b\x61\x33\x09\x4e\x4c\xb7\xf5\x21\xbb\xc8\x2e\x47\x34\x99\x68\x17\x36\xe8\x5a\x62\xa1\x95\xee\x7e\x6d\xeb\x5d\xd1\x5e\x0a\x93\x1d\x3a\xaf\x5b\xcb\xc2\x0f\x4c\x11\x07\x42\xe1\xcc\x95\x7a\xbe\xe9\x4d\xb0\xee\x2b\x7e\x47\x1f\x7f\x68\xd0\xad\x3b\xf5\xf2\x03\x44\x7c\x3b\x92\xad\x0d\x97\x46\x5b\xb3\xb5\x76\x38\x96\xf0\x96\xff\xa4\x26\xdd\x65\x4f\x6a\x10\xd6\xd8\x2f\x58\xcb\x56\x65\x4b\x79\x44\xdf\x2a\x4f\xd1\x77\x50\xac\xc1\xac\xec\xf3\xe7\x5a\x31\xe7\xcd\xcb\x98\x6b\x37\xe5\xf9\x0a\x8d\x5e\x5a\x14\xfa\x4d\xcb\x0c\xfb\x38\xb6\x03\x66\xd8\xaa\x5d\xf3\x61\xfc\x21\x56\x1f\x03\x93\xca\xae\x9d\xe6\x5a\x59\x4d\xb6\xe1\x6e\x5a\xb6\xfe\x90\x49\xde\x07\xd7\x45\x2a\xc7\xcc\x54\xc0\xf3\xda\xcd\xaf\x75\x20\xcd\xec\x05\xdf\x38\xf6\x18\x2a\xcd\x86\xfc\x62\xe3\x16\x02\xf2\xc4\x74\xb7\xa1\x17\x87\x6c\xdf\x26\x10\xd3\x6d\x57\x0b\x66\x72\x62\x5f\xf1\x6c\xd7\x3a\x41\x2b\x0b\x86\x23\x96\x0b\x8c\x70\x01\x9b\x19\xf7\xa3\x4e\x9d\xeb\xe8\xc4\xd0\x40\xff\x5a\x17\xee\xb4\xc8\xfd\x69\xe4\xd9\x50\xc3\x7e\x74\xd4\xdc\x8f\x0d\x79\xa7\x44\xb7\x5d\xa4\xa2\xec\x58\xee\xa9\x58\xe5\xfb\x98\x25\x77\x55\x6a\x11\x17\x66\x17\xaf\x80\xd7\x2c\x48\xe3\xdc\x55\x7b\xff\x6b\x12\x75\x83\x68\xb8\x11\x43\x01\x51\x09\xe9\xd6\x6f\x12\x4f\xd9\x5e\xab\xac\x29\x2b\x8a\x83\xce\x82\x84\x6f\xe6\xb9\xea\x4e\x2e\xdd\x63\xbc\x6c\x11\x15\x8f\xc1\x1a\x93\x4d\x6e\xd9\x2f\x25\x4f\xf1\x68\x95\xb4\x19\x6c\xb3\xc1\xf8\xf2\xd5\xef\xd9\x04\xce\x3e\xf6\x01\xa4\x32\x40\xc6\xa0\xb4\x42\xb1\x64\x93\x89\x5c\x2b\xc9\x3b\xb3\xac\xdf\x7f\xa3\xe7\x94\x29\xd6\x5c\xcc\x55\xd9\xcc\x0a\x3b\xa0\x27\x2d\xa5\x85\x9d\xe2\xec\xbe\x5c\x88\x5c\x0a\xcc\x24\x0f\xef\x31\xfb\x5e\xaf\xe6\x2a\x5e\x16\xeb\xaf\xe6\x51\x9a\xf4\x4e\x5f\x0b\xf1\xaa\x13\xf3\xd9\x29\x7e\xb5\xab\x03\x95\xf2\x2b\x4d\x97\x0c\x9f\x31\x7c\x36\x66\xdf\xf1\xe8\x5e\xc8\x98\x65\x69\xb9\x4a\x88\xf6\x06\x2f\x1b\x49\xd5\xac\x50\xed\x18\x6a\x36\x58\xbe\x39\x04\x67\x72\xc3\xef\x31\xa5\x0c\xa9\xb0\xe6\xde\xd2\x45\x9a\xe8\x0c\x35\xf3\xa4\xb9\x76\xf7\xce\x96\x3b\x8d\x9b\xc5\xd4\xd7\x9e\x2e\x31\x5a\xef\x71\xad\x08\xe3\x54\xb1\x13\x0d\xd8\xb8\x6e\xb5\x36\xd8\xc9\x2c\x83\x8c\x16\x51\x99\x9b\x37\xa8\x31\xb8\x7b\xc1\x81\x08\x69\x91\x4a\xc9\x38\x10\x9c\xbd\xd2\xac\xcc\xac\x10\x01\xcf\x56\x0a\x38\x23\x9c\x02\xf3\x20\x4b\xa2\x7b\x44\xb6\x42\xec\x06\x73\xdd\x6b\xa4\x9e\x66\xc2\x43\x2c\xdb\x44\xc3\x12\xe9\x7d\x0e\x43\xcd\x34\xb2\x2a\xed\x59\xa7\x3d\xe3\x52\x8a\xb5\x90\xf3\x27\x24\xf7\xe9\x3f\x69\x95\x18\x14\x52\xc2\x9d\x87\xd0\x0d\x61\x29\x13\x22\xf3\xf6\x37\x7c\x97\xb9\x22\x59\xd6\x94\xf8\x44\x33\xcd\x8b\x44\x1b\x59\xd6\x3a\xe2\x9e\x54\xe9\x90\x51\xe7\xc3\x98\x9c\x5a\x58\x9c\x6a\x63\xe1\xe2\xdc\xc6\xec\x3d\xf8\x55\x82\x7b\x89\x72\x9c\x48\x5d\x02\xab\x58\x8b\x4e\x72\xe0\xe7\x00\x88\xda\x1e\x04\xef\xef\x74\x97\xb9\x98\xc6\x31\x9b\x78\x7f\x36\xb2\x42\xa1\xa7\x7a\x4f\x8f\x44\xaa\xc5\x53\x16\x5f\x2f\xd7\x0f\x60\xbe\x60\x01\x31\xd0\xe3\xb4\xf9\xdd\xb3\xc4\xbb\x66\x3e\x02\x6d\x00\xbf\x17\x72\x97\x7d\xbf\x7f\x0b\xd1\x01\xb3\xd3\x20\xe1\x3c\x3b\x0a\x9d\x3b\x4f\x69\x60\xff\x6d\xe7\x89\xb8\x92\xe5\xb1\x19\x72\x73\x09\x8a\xee\x29\x58\x11\xfd\x7b\x44\xe5\xf5\xb8\x56\x3a\xdc\x67\x76\xfe\xf0\x1e\x9d\x97\x2e\x67\x17\x04\x7b\xba\x01\x46\x94\xa7\x54\x21\xd3\x17\xb4\xda\x6d\x52\x34\x2a\xb9\xf9\x66\x56\x84\xc2\x30\x00\x2e\xc2\x16\xd5\xb2\x9b\x65\x56\x3e\x57\x4e\x98\xfd\xf4\xda\xcd\x11\x6e\x34\xe8\xc7\x6f\xf4\x25\xd4\xf7\x1c\x64\x34\x68\x65\x7c\xfe\x40\xb0\x27\xba\xc0\x1d\xc4\xd9\x5a\x3f\x15\x04\x89\xd0\x41\x99\xa9\x98\xf9\xf5\xde\x15\x69\x23\xa5\x42\x88\xeb\x6f\xb0\x5b\x41\xe3\x7a\xf7\x6d\xdf\x56\xfb\x10\xe0\xe4\xd8\xa2\x4c\xd2\x18\x59\x0a\x03\x0d\x55\x59\x15\x08\xd2\x23\x81\x3e\x92\x68\x77\xc0\xb5\x2c\xfa\x1f\xbf\xd1\x57\x2a\x3e\x64\x61\x0d\x67\xa2\x6d\xae\xeb\x1e\x61\x34\x3a\xc4\x32\x6d\xf6\x8f\x44\xa6\xba\x03\x20\xe2\xb9\xae\xe6\x03\xde\xd1\x60\x40\xbc\x2d\xca\xe5\x0d\x24\x1f\xed\x22\x65\x0a\xf2\xf2\xd9\x28\x6b\x33\xcf\xa6\x1a\x17\xf3\xd7\x35\x29\x04\xa0\xf2\xfa\x08\x67\x7f\xb8\xb9\xbc\x38\xda\xf0\x5c\xaf\x39\x90\x5e\xd8\xb2\x46\x36\x9f\x3b\x5a\x0b\x2c\xb0\x23\x91\x33\x79\xc4\x56\x6a\x84\x30\xa2\x13\xb6\x2e\x8a\x4c\x9f\x1c\x1f\xaf\x92\x62\x5d\x2e\xc6\x91\xda\x1c\xfb\xa1\x39\xe6\x59\x72\xbc\x48\xd5\xe2\x38\x17\x10\x48\x72\xf4\x76\xfc\xd5\x5b\x98\x99\xe3\x87\xb7\xc7\x00\x1e\x19\xaf\xd4\xbf\x9c\x7f\xf5\x6f\x5f\xff\xde\x14\x9c\x6d\x8b\xb5\x92\x27\x84\x51\xda\x59\xf6\x11\x5e\x13\x8e\xf1\x93\x5a\x2d\xff\x36\xfe\x32\x6c\x06\xbd\xba\x51\xb1\x48\xf5\xf1\xc3\xdb\xb9\x9d\x98\x71\xd6\x91\x31\xe3\x1f\xa1\x17\x9f\x21\xf4\xe2\x3e\x29\xfe\x11\x7a\xf1\xab\x86\x5e\xf4\x57\xb9\x9c\x8c\x01\x8e\x6c\x2f\x1f\xcd\xef\x4e\x46\x5a\x4f\xc4\x3e\x39\xd4\x72\x38\x84\x81\x71\x07\x1c\x11\x03\x13\xd8\xd5\xba\xeb\xee\x32\x1d\x16\xc7\xa1\x79\x6a\x3a\x6f\x17\x83\x78\x40\x00\xe8\x98\x44\x60\x2b\x44\x0b\x69\xc6\x93\xb6\x80\x8a\x20\x6f\xcf\x01\x43\x88\x79\x44\xda\x49\xcf\xfa\xa4\xdb\xa2\x8c\x53\x22\x9e\x3f\x4b\xe2\xad\xd6\x3a\x10\x13\x3a\xb8\xfc\x86\xde\xdd\x43\x35\x26\x94\xf4\x41\x23\xfa\x82\x29\x52\x9e\x3b\x37\x0a\x75\xf7\x89\x79\x51\x52\xfc\xda\x62\xba\xd5\xa3\xcd\x87\xf2\x1c\x59\x44\x3c\x5e\xbd\x5f\x06\x11\x5c\xa4\xd0\x16\xdb\xae\x8e\x66\xac\xb9\x7e\x5a\x70\xc0\x04\x29\x88\x9d\x2f\x18\x91\xd5\x89\xb6\x15\xda\xd3\xd8\xb2\x2f\x99\xc3\xdd\x92\x3c\x66\x65\x9e\x29\x2d\xf4\x98\xbd\x57\x39\xd2\x7a\x11\xe7\x8e\x0f\x78\xb8\x7e\x7f\xca\xde\x7e\xf3\x6f\x5f\xcf\xe4\xeb\x16\x65\x08\x0e\x51\x95\xaf\x28\xfe\x02\x54\xa0\x0d\xd7\x85\xc8\x8f\xf3\x65\x74\x8c\x47\xc7\xb1\xf9\xfe\x88\x2a\x3d\x52\xcb\x23\x97\x22\xe1\x88\xd8\xe2\xc7\x9b\xf8\x4d\x17\x32\xb1\x5d\xe1\xfe\xd5\x2e\x3d\x93\x0e\xc5\xbc\x6d\x7e\xf7\x0b\xd6\xca\x16\x42\x45\x84\xb4\x10\x0d\x1a\x0b\x52\x31\xaa\xa5\x4b\xea\x83\x71\xbe\x98\xff\x4b\x2d\x5b\xfe\xf1\x5d\xaa\x16\xfa\x8d\x23\x80\xe5\xda\xd6\xe1\x19\x19\xdb\xe4\x76\x63\xcf\x1d\x72\xfb\xa6\xa1\x78\x49\xb3\x9a\x95\x89\xe1\xb4\x0d\x19\xf8\x76\xa1\xe1\x75\x41\xe4\xa3\xe2\xb9\x2a\xa5\xcd\x9a\xa1\xa4\x50\x4b\x80\x39\xc1\x35\xc9\xa2\x34\xc1\xb3\x00\xd8\x3f\xc7\x3d\x95\x8b\x0c\xb5\x0f\xf0\x81\x75\x0f\xf7\x81\x99\x63\xf6\x8d\xf3\x4b\x64\x8e\x39\x74\xdc\x49\x30\xfe\x4a\x03\x7e\x68\x28\x05\x6e\xa5\x21\x08\x24\xf3\xfe\x5e\xb4\x81\x93\x03\x3e\x73\xb5\x4f\xd2\x90\xf1\x1c\x34\x78\x71\x54\xa8\x23\x20\xed\x03\x2a\x38\xcc\xe5\xd4\x05\x41\x02\x94\xc6\x90\xe3\xde\xbc\xdf\xa3\x9d\x78\x6b\xfb\x14\x34\x94\x14\x56\x8d\x0c\xe8\x04\x49\x4f\xa4\x14\x39\x79\x80\xf7\x6a\x06\x03\x31\x1c\xe1\x54\xee\x46\xa4\x7b\x33\x45\x98\x67\xc7\xc5\x23\xf2\x40\x08\x8c\x19\x5c\x4d\xd6\x6a\xa3\x8c\xae\xab\x4a\x1d\x3c\xc4\xab\x2d\x28\x13\x9d\x8a\xf9\x86\x67\xa8\xaf\xfe\x7a\xbd\x31\x5b\xcb\x3c\x42\x13\x74\xf8\xd2\xa0\xd4\x65\x8b\x6a\xb2\xa6\x3d\xed\x77\x59\x76\x76\xaf\x1b\x40\x08\x6d\xc0\xe5\xb7\xe6\x0f\xc2\xe6\xce\x48\xfe\x66\x2e\xbd\x66\x49\xb9\x6b\xa4\xd3\x40\x10\xd0\x86\x5c\xd4\x21\x7c\xd3\x9e\xba\x9d\x6c\x31\xe5\x66\xe0\x1c\xb8\x20\xab\x3e\x13\xc0\x25\x86\x1d\xd9\x78\xa3\xa3\xd6\x80\xa3\xae\x7d\x09\x76\xb5\xd2\xdc\x4c\x2c\x5f\xfa\xb0\xa6\xde\xb8\x02\x88\x1a\xbd\xd9\x6e\x4f\x37\x09\xd1\x69\x38\xc6\x28\x10\xac\x6e\xd1\x05\x72\x1e\xbe\x19\x21\x71\xdd\x90\xb1\x83\x4a\x70\x71\x36\x46\x30\xd8\x0b\x5d\x03\x38\xcc\xfe\xba\xcb\x9c\xd9\x86\x6f\x47\x86\x5e\x1f\xbd\x6c\x5a\xd9\xb0\x2c\xb8\x0f\x1f\x7c\x72\x64\x80\xff\x2e\x4a\x78\x7e\x71\x79\x1b\x22\x9b\x12\xec\xed\x51\xb4\x16\xd1\x3d\x58\xd3\xf0\xc8\xc3\xcd\x40\xc1\xf8\x00\xb7\xf6\x29\x55\x0b\x65\x81\x32\x5b\x97\x65\xc6\x65\x5a\x52\x39\x8b\x13\x9d\xa5\x7c\x0b\x90\x04\x89\x71\x8a\x1e\xce\xe0\x02\x7c\x8d\x28\xd8\xe7\x4c\xe8\x3f\xd3\x66\x56\x26\xfe\xbb\xa1\x63\xe9\x81\xe7\x7e\x30\x9b\xf2\x80\x69\xb1\xe1\xb2\x48\xa2\x99\xdc\x08\x2e\x43\x04\x2b\x41\x32\xcc\x20\xc7\x4a\x50\xbe\x84\xe5\x52\x44\x85\x27\x5c\x86\x4b\x88\x1b\xa9\x7d\x7b\x70\x58\xdf\xdd\xce\xdb\xd9\xf5\x1f\x6c\xda\xe7\x64\x03\xf8\x68\x5a\x43\x74\x34\x3e\xd1\xd5\x08\x29\x78\xe9\xc8\xb5\x97\x5a\xf8\xcb\xae\x29\xb6\x10\xc5\xa3\x00\x3e\x21\x22\x40\x68\xd3\xf1\x0f\x4e\xc3\x74\x48\xf0\xe0\xc4\xf1\x0f\x12\xbd\x7c\x83\x40\x98\x36\x58\x08\xbc\x74\xc4\x87\xb2\xc6\x60\xf8\x8a\x28\x19\xc0\x14\xf8\x8a\x8c\x9a\xaf\xe0\x98\x36\xb7\xe0\xfc\x41\xc4\x33\x59\xa5\x95\x24\x9d\xd1\x6f\x38\xe6\x13\x8c\x3e\x8f\xb4\xb1\x63\xdc\xcb\xd1\x73\x06\x54\x5a\x9e\x44\xdb\x91\x0e\xec\x48\x78\x8a\x9d\x7e\xc9\x5b\x95\xcd\xb5\xdc\xf7\x32\xec\x73\x90\x52\x02\x41\xca\x37\x5c\x41\xff\xb8\x45\xe9\x48\xf3\x90\x51\xd7\x81\xc5\xc9\x68\xdd\x30\x83\xb7\x95\x31\x93\x96\x4d\x66\x59\xa6\xc8\x92\xde\x15\xb3\x43\x1c\x9a\x36\xf2\xf5\xd7\x8b\x80\x76\x46\x57\x16\xe4\x6c\x75\x20\x9d\x00\xb8\x8f\xb2\xce\xae\x7a\x21\x75\x09\x2a\x85\x4d\xd7\x08\x5e\x89\x95\x28\xe0\x34\x8f\xcb\x14\x01\x9b\xe0\x4e\x01\x3e\x4e\x9e\xa6\x2c\x29\xf4\x4c\x3a\xfa\x50\x0c\xcc\x01\x09\x6b\xfd\x2d\x31\x5d\xb9\xa0\x0a\x28\x16\x1e\x73\x09\x7a\x58\x12\x25\x45\x23\xdc\x61\x1b\xa6\x38\xcb\x32\xc1\x31\x96\x1f\xa7\x6d\x26\xc3\x3b\x57\x7d\x12\x28\xf0\x1d\xb2\xe2\x3f\x47\x0c\xfa\x0e\xc3\xad\xa9\xe2\x49\x28\x1b\xec\x9d\xb9\x70\xd9\xec\xe5\xd8\x5a\xe2\x0f\x22\x54\xb2\xb9\xd5\x14\xda\x3a\x50\xfc\xbd\x15\x62\x7a\xa2\x32\xe5\x39\x06\x33\x2d\xcb\x94\x25\xcb\x20\x11\x3b\xcc\x01\x92\x47\x9a\xe9\x8a\x14\x9c\xd5\xd6\x85\xa2\xf9\x46\x04\xbc\x35\x64\xde\x49\x03\xc4\x0f\x66\xc4\x40\x28\x89\x29\xeb\xcd\x98\xbd\xf3\xf4\xb8\x38\xc3\xb0\x27\x02\xd2\xe9\x44\xa3\xf8\x73\xed\x0d\x28\x17\xa0\x77\xa6\x89\x4a\x9a\x1d\xe9\x76\x5d\xc7\x0c\x42\xf2\x9a\x61\x70\x22\x9b\xba\x68\x37\xc2\xbe\x95\x72\xc5\x7c\x5a\x03\x19\xb9\x0d\xd1\xd1\x40\x7b\x2a\x0c\x6c\x64\x48\xd8\xfd\x84\x86\x3a\x42\xf4\x96\xc6\x6e\x76\xe4\x7d\x87\x79\x1c\xd8\xd4\x20\x8b\xe2\xf0\x86\x06\x2b\x27\x04\x8f\xf5\x19\xd9\x15\x2f\x86\x22\xc9\x5c\xe0\xda\xf0\x86\xb6\xa2\xf6\xfa\x34\x13\xa4\xc7\xc0\x76\x4e\xcc\x37\x4f\x6c\xa8\x2e\x17\x47\x28\xa0\x5d\x3e\x24\x10\x15\x82\x47\xeb\x2a\x87\x84\x65\x7a\x76\x3d\x80\x18\x42\xd8\x8f\xc3\xe9\x2f\x26\x7e\xcd\x41\x22\x49\x66\x9a\x3f\x66\x97\x52\x20\xce\x53\x2d\x83\x43\x85\x1a\x40\x19\x27\x21\xd9\x8e\x93\x72\x0b\xd3\x30\x79\x6f\xa9\xb5\xcc\x96\x1b\x31\xee\x4b\x07\xa9\x87\xcb\x06\xa5\x48\x87\x2e\xd9\x96\x9a\xea\x00\xf5\xb2\x1f\x41\x45\xfb\x9d\x3f\x80\x4b\x0f\x97\x00\x6d\xfd\xe8\x3f\x2d\x3b\xe3\x1e\xdc\x2d\xce\x06\x3b\x54\xd7\x0d\x43\xf0\xf3\xbe\xf1\xbd\x5a\x57\x31\xb3\x03\x12\x44\xde\x5d\xbc\x3b\x7b\x3f\xbd\xa8\xe6\x5f\xfc\xe3\xdd\xd9\x5d\xf5\x97\xeb\xbb\x8b\x8b\xe9\xc5\xf7\xe1\x4f\x37\x77\xa7\xa7\x67\x67\xef\xaa\xef\xbd\x9f\x4c\xcf\x6b\xef\x99\x9f\xaa\x2f\x4d\xbe\xbb\xbc\xae\xe5\x91\x6c\x49\x02\x79\x3b\xfd\x70\xf6\x6e\x7e\x79\x57\x49\x45\xf9\xee\x3f\x2e\x26\x1f\xa6\xa7\xf3\x96\xf6\x5c\x9f\x9d\x5e\xfe\x74\x76\xbd\x27\x61\xa4\xef\x6f\xeb\x90\x3e\x07\xb6\xf0\xc9\x79\x45\x27\x6c\x99\x27\x42\xc6\xe9\x16\x23\x45\xec\xcd\xb6\x06\xfd\x0e\xcf\xde\x64\x23\x54\x79\x48\xc0\xc7\xed\x5a\x30\xf5\x20\x72\x60\x01\xc3\xd2\x88\x32\xc4\x33\x0e\xd4\x6b\xcd\x45\x91\x37\xbd\x02\x3b\xa3\xea\x8a\x7c\xeb\xe2\x36\x77\x35\xc7\x33\x48\x52\x25\x2c\x13\xf9\xae\xb6\x80\x66\x94\x97\x59\x91\x2c\xba\x43\x78\x06\x07\xde\xf7\xbd\x7b\x23\xdf\x71\x3b\x39\xdc\x45\xbb\x60\xac\x44\xb2\x1c\x02\x93\x87\x12\x9e\x9a\x2e\xd7\x7d\x6d\xa1\xc5\x59\xb9\x48\x93\x88\x25\x71\xdd\x9e\x42\x7c\x18\x60\x32\xae\xd3\xa2\x67\x22\x07\x55\xd5\xdc\x00\xb2\x5c\x1c\xf1\xb2\x58\x23\x85\x27\x05\xce\x50\x12\x9b\x99\xd4\x22\xca\x05\xfa\x02\x84\x06\x23\x2d\xa6\x43\x0d\x6a\x82\xc6\x10\x83\x4d\x0c\x64\x79\xe3\x20\x45\x4d\x87\x8f\x00\xbf\xc4\xd2\x07\x18\x49\xf1\xfd\x9d\x43\x43\x2d\x4e\x30\xe1\x6a\x00\x0b\x83\x13\x1e\x1f\xda\xa4\xaa\xa6\xdf\x46\x52\xbb\xa4\xa2\x38\xc9\x36\xd2\xa8\xbd\x1b\xfb\xd6\x58\xb8\x50\xaa\xa1\x37\x54\x3a\x3d\x3a\xcd\x05\x1c\x22\x04\x69\xb0\xf6\x0b\xc0\x35\x51\x64\x12\x04\x24\x99\xab\xda\x42\xac\x79\xba\x44\x8d\xc3\x4c\x4d\x3b\xab\x08\x96\x7f\xab\xee\x85\xbc\xc6\x09\xfb\x55\xc4\xa1\xc4\x9b\x8f\xe7\x34\x72\x16\x21\x6f\xc2\x34\x6d\xb4\xab\xca\xc6\x85\x82\x32\x55\xe0\x3d\x21\x78\x8c\x01\x48\x3e\x63\x81\x0d\x29\x5d\x2e\x93\x4f\xa6\xc0\x99\x14\xad\x9c\xed\x00\x26\xb3\xec\x92\x4e\x2e\x03\x70\x0e\x29\xfa\xee\x85\x84\x7c\xaa\x40\x0e\xb8\x7f\xcd\x0e\xb3\x9f\x37\xe7\x62\x87\x41\x1f\x6c\x7e\x49\x25\xcd\x6c\xe8\xe5\xb1\xe3\x54\x60\x44\x98\xe3\xe0\x80\x75\x73\x7a\x3e\x3d\xbb\xb8\x9d\x9f\x5e\x9f\xbd\x3b\xbb\xb8\x9d\x4e\xce\x6f\xfa\x6e\xbf\xe7\x88\xe2\xab\xed\xbe\x7a\x30\x9b\x93\x10\xc7\xb4\xf3\x7c\x28\xbb\xeb\x94\xdf\x76\x30\x25\xfb\x5b\x9f\xc4\xd9\x3c\x4e\x74\x64\x8e\xbf\xed\x5c\xc8\x18\x92\x5d\x3c\x69\xa9\xb6\x17\x55\xef\x85\x7b\x83\xb9\x37\xac\x04\xc1\xd3\xee\xc1\xae\x68\xf7\x1c\x20\x99\x60\x86\xcc\x85\xd9\xfc\x71\x85\x63\x64\xbc\x3f\xc3\x99\x29\xee\xb0\xbe\x55\x8b\xa8\xf7\x09\xdb\x9b\x68\x5d\x02\x95\x89\x7d\x0d\xf0\xa8\x1d\xa3\x42\x0c\xc4\x61\xc6\x8d\x24\xc8\x42\xcf\x12\x3d\x93\x1b\x2e\x63\x5e\xa8\x7c\xdb\xd1\xc5\x7e\xc2\x33\xdc\x36\x55\x11\x1a\x1e\xd9\x52\x88\xd8\xce\x02\xbe\xca\x65\x7d\x29\x61\x5e\x8e\xdb\xcb\x1f\xcf\x2e\x6e\xe6\x67\x17\x3f\xcd\xaf\xae\xcf\xde\x4f\xff\xe4\x60\xb2\x19\xd7\x6d\xc9\xa5\xb3\x5c\x18\xe9\x62\x69\xce\x5a\xe5\x0b\xa6\x6c\xb6\xe5\x50\x9a\xce\x64\x39\x93\x56\xb2\xe4\xbe\xf8\x75\xae\xca\xd5\xba\xbd\xa0\x7a\x2b\xaf\x26\xb7\x3f\x3c\xa9\x99\x40\x42\x89\x79\x5d\x71\xb7\x35\xe1\xc2\xc9\x92\xe4\x1e\x62\x8c\x6b\xcd\x03\x2a\x55\x78\xb5\xcd\xcb\xd0\x21\xd1\x9e\x74\x7b\x69\x0a\xad\x9d\xca\x7f\xcb\xeb\x5d\x0b\xe8\x36\x90\x9b\x95\x63\x04\xe0\xeb\x98\x1c\xbc\x51\xda\x49\xcb\x6f\x95\x13\xec\xab\xa3\x54\xac\x56\x22\xc6\xe5\x55\x2f\x98\x6c\x70\x24\x02\x23\x7f\xae\xb7\x8d\x22\x25\xf0\x3d\xe0\x60\x76\x78\xaf\xfe\x02\xfc\xca\x7d\xd2\x2e\x2b\x4e\x89\x48\x0a\xfc\x9b\x05\x97\x1d\x8e\xe4\xfd\xf1\x60\xed\xc5\x5f\xe6\xcc\x85\xea\x91\xc1\xc4\xba\x0c\xfc\x3e\xe8\x02\xbc\x1c\x8e\x6f\x75\xed\xb8\x16\x59\xca\x23\xe1\x02\x5c\x90\x01\x18\xee\xf5\x4f\x71\xe0\x51\x9a\x64\x49\xf6\x96\x20\x7d\xb2\xcf\x0c\xd7\xb6\x04\xc0\x72\x7b\x6d\xe5\xf1\xcb\x9b\x56\x76\x5e\xdc\x88\xf7\x13\x0c\xcd\x98\xa7\x92\xe2\x22\xd0\x16\x05\xc9\x5f\x3b\x31\xeb\x83\x96\x43\xad\xe6\x9f\x68\xe2\xf1\xce\x5c\x35\x74\x73\xcb\xac\xeb\x96\x87\x53\x1d\x77\xd9\x0b\x8b\x22\xdf\x49\xc6\xfd\x1c\xee\x88\xab\x5c\x6d\x12\x2d\x26\x45\x91\x27\x8b\x32\xcc\x46\x3c\x10\x30\x57\xb9\x9c\xf8\x0e\x67\xb9\x8a\xcb\xc8\xd2\x67\x41\x6f\x3d\xec\x87\xac\x7c\x56\xeb\x88\xd9\x91\x59\x7d\x74\x73\x13\xf1\x11\x44\x7b\x20\xbf\x5b\x9b\x8f\xcd\x0a\xc6\x0e\xdb\xdf\x95\x3d\xca\x9f\x39\x66\xb4\x7b\x30\xed\x1a\xe8\x17\x06\xce\xec\xeb\xa0\x01\x77\xa0\xa6\x68\xb9\x2c\x38\x3a\xd0\xab\x3a\x4a\x17\x5b\x8e\x3b\x6a\x86\x81\xbb\xfa\x61\x63\xaa\xe1\x54\xa8\x37\xac\xb9\x46\x75\xbe\x88\xd6\xd5\x86\x43\x6f\xaa\xac\xc1\xf5\xe6\x3a\xf5\xf8\x30\xb3\x49\x2f\x37\xda\x08\x0d\x0d\x09\x19\xb6\x2b\x19\x60\x5d\x3a\xeb\x4e\xfb\x3d\x86\x5c\xcc\x7f\x29\xc5\x90\xac\xce\x36\x54\xe3\x8f\xf0\xd9\x5e\x40\x4a\x82\xd8\x2d\x67\x7b\x2d\x92\x8d\xd1\x80\x78\x1e\xad\xd9\x82\x6b\xa2\x23\x0c\xd9\x12\x30\xfd\x3c\x4b\xcc\x57\x3c\x2a\x28\x1d\xaf\xad\xd6\xa6\xe4\xbd\xb5\x50\x48\xa3\xd6\x7a\xab\x47\xdb\x72\xdb\x37\x00\x43\xac\xd7\xb6\x19\xd3\x77\x83\x7c\x08\xa1\x1e\xee\xee\xc9\x78\xc4\xc2\xe9\x94\xf2\x52\x46\x6b\x96\xa5\x1c\x09\x25\xd6\x5c\xa3\xa0\xb0\x08\x1d\xbe\x48\xd2\xa4\x00\x9e\x30\x74\x1c\xd7\xd6\xad\xb9\x3c\xf3\xfc\xde\xa6\x5b\xe0\x9e\x14\x6e\x97\x28\x39\x10\x09\xed\x7a\xf5\x59\xb1\xd0\x5e\x10\x86\xc2\xbd\xdf\x66\x27\x1c\xb4\x9f\x0e\x73\xbc\xc1\x66\xf7\x7d\x19\xe6\x1d\xa2\x12\xaf\xea\x9f\xd7\xc6\x1b\x09\x28\x0f\x22\x09\xde\x19\x97\xf5\x22\xa0\x73\x1f\x55\xb6\xfb\x18\x6d\x76\xb8\x45\x09\x1e\x0e\x7c\xa2\xc4\x49\x03\x94\x98\x7a\x5a\xa5\xd6\x7d\xbf\x4c\x15\x2f\x76\x47\xb9\x61\x96\xa4\xae\xb2\x63\x55\x2e\xba\xf2\x72\x60\xab\x9e\x1e\x43\x67\xc5\xff\x73\xd9\xdc\xc3\x73\x94\x17\xc2\x48\xdf\xa7\x0d\xa8\xf9\xfa\x08\x3e\x6f\x2f\x9c\xa2\x98\x07\x33\x52\xb8\x65\xe0\x73\xf5\x39\xdd\x1f\x20\xa9\x2d\xdb\xa9\xae\xe4\x1d\x14\xf3\x78\xd8\x7c\x25\x72\xcf\x52\xda\x9f\xfe\xeb\xeb\xaf\xfa\x44\x23\xfe\xb1\xe4\xe6\x00\xb8\x5c\xde\x20\x41\xd8\x21\x9d\x2e\x92\xe6\xb6\x6a\x17\x03\xf5\x5a\x6f\xab\x5e\xda\x70\xe1\xf7\x66\x3b\x68\xeb\xcd\x8d\xf9\xba\xbf\xd8\x9d\x56\xac\xb1\x59\x9e\x28\x20\xca\x52\xcb\x8a\xae\xd1\x22\x89\x5b\xeb\x3d\x60\x24\x7f\x29\x45\x29\xcc\x02\x5a\x94\xf1\xaa\xe9\x2c\x19\x70\xe1\xf2\x5d\x5a\xab\x47\xb6\x29\xa3\x35\xb3\x85\xb3\x58\xa4\x7c\x5b\x55\xa3\xcc\x5d\xa3\x50\x40\xa1\x3c\x88\x2f\x30\x20\xbe\x8f\x4a\x5d\xa8\x0d\xe0\xd4\x7d\xb9\x79\x29\x61\x97\x33\x6e\x77\x57\xdb\x81\x56\x21\xf4\x7c\xa2\x87\xfc\xe6\xea\xec\x74\xfa\x7e\x5a\x73\x4f\x4f\x6e\x7e\x0c\xff\xfe\xf9\xf2\xfa\xc7\xf7\xe7\x97\x3f\x87\xbf\x9d\x4f\xee\x2e\x4e\x7f\x98\x5f\x9d\x4f\x2e\x2a\x4e\xec\xc9\xed\xe4\xe6\xec\x76\x8f\x9f\xba\x59\x6b\xf7\x44\xf0\x80\x6f\xd4\x22\xe7\x6d\x32\x1d\x6b\xae\xa2\x5a\x4f\xd8\xc4\xb2\xaf\x56\xf8\x81\x2d\xd6\x00\xc0\x49\x29\x62\x2c\x11\x92\xf0\x8e\x17\xfc\x94\x17\x3c\x55\xab\x31\x9b\x30\x8a\x2b\xc0\x78\x11\x6d\x54\x42\xa2\xa6\x34\xb3\x83\x45\x18\xbd\x30\xf2\xa6\x20\x9f\x2d\x5c\x2d\x89\x14\x36\x15\x61\x5e\x29\x1b\xe4\x39\x93\x67\x0f\x42\x16\x25\x28\xda\x3c\x4d\x19\x55\x6b\x5f\x08\x58\x41\x6c\x2b\x75\xb2\x49\x52\x9e\xfb\xc4\xce\x97\x54\x16\x5c\x76\x6d\x5b\x1d\x2b\x5d\x93\x72\xc2\xda\x03\xee\xa6\x0c\xda\x7d\x7a\x3e\x05\x45\x37\x2a\x6c\xd6\x42\x5b\xf9\x4c\x22\xe9\x28\xd5\xb8\xe1\x10\xc3\x54\x28\x32\xd0\x63\xf5\xf4\x72\xf7\x42\x3c\x48\xb1\xb2\xae\xac\x97\x32\x4c\xb8\x46\xda\x7f\x9c\xc9\x22\xdf\xf6\xd6\x5e\x6f\x81\xd1\x41\xc3\xbd\x8e\x20\x91\xd5\x64\xcf\x68\x3f\x65\xb6\xf4\x0b\x50\x69\x2d\x5e\x97\xdc\x7b\xce\x8b\x87\xf0\xa8\x8e\x2b\x51\x6a\x4e\xde\xdf\xea\x38\x84\x2c\x60\x30\x0a\x0b\x55\xca\x58\x13\x78\x73\x93\xc8\xe3\x0d\xff\xf4\xc6\xf6\x14\x49\x6c\x5c\xca\x35\x60\x4c\x14\xa9\xb9\x0f\x6e\x8d\x90\xdb\x3d\x5c\x33\xb9\x63\xbc\xf6\xdf\x09\xac\x64\x05\x93\x81\xb7\xef\x20\x0c\xf5\x41\x6c\xdb\xe6\xaf\x91\x36\x93\x85\xb9\x1f\xa0\x90\x2c\x17\xe6\x45\x87\x71\x4d\x11\xba\xec\xfe\x86\x58\x96\x4a\x6a\xef\x76\xd9\x1d\xc2\x46\x0e\xda\x36\xad\x80\x95\xfe\x8a\x4f\xef\xbc\xa7\x54\x93\x99\x33\x84\xaf\x58\xcf\x09\xc5\xee\x90\x5f\xde\x4c\xd6\x5f\xd5\x82\x2d\x21\x90\x8d\xec\x04\xb9\x00\x4f\x19\x4c\x85\x4d\xd4\x03\xbc\x7a\x0d\x4c\x8c\x5d\x02\xa9\xd0\xe0\x3f\x92\xe6\x52\x2d\x7e\x29\x09\x02\xf0\xf6\xcb\x61\xe7\x6c\x81\xd9\x1e\x90\xde\xbb\x9e\x07\xc1\x9d\xe5\xd0\xae\x52\x26\x6d\x64\x9b\xd7\xa5\x34\x47\xf1\x73\xa0\xa7\xfa\xbb\xc7\x6b\x95\xd2\x9f\x7b\x63\xcd\xac\x67\x27\xc7\xf7\x5f\x8c\xb9\xf9\xa7\x1a\x61\x33\x55\x07\x91\x0d\x54\x7a\x78\xa0\x2d\x78\x74\xff\xc8\xf3\x18\xcd\xff\x00\x67\x1a\xb3\x1f\xd4\xa3\x78\x10\xf9\x88\x45\x22\x2f\x38\xf1\x15\x6a\xc0\x73\xc0\x86\xa2\x72\x66\x12\x02\x7d\x90\xfc\x51\xea\x32\x17\xac\x48\x56\xeb\x42\xe4\x21\x1a\x47\xe5\x46\x1c\x15\x48\x55\x9b\x89\x88\x08\xd9\x3a\x06\x60\x99\xf2\x87\x26\x01\xe3\x53\x98\x64\xd8\xd4\x45\x2b\x5b\x77\xb7\x4d\x7e\xb6\x0b\x3f\x45\x03\x46\x42\x13\x29\xb4\x46\x6c\xa5\x52\x2e\x57\xe3\xf1\x18\x12\x7d\xbc\x19\xb4\xd0\xa9\xc0\xd0\x81\xee\x50\xfa\xa9\x52\x5a\xa4\x5b\x47\x22\xe6\xe2\xa8\x00\xb8\xfb\xa9\x10\x52\x27\x68\xd8\x6a\x59\xfe\x37\x75\xe7\xd2\xe7\xf5\xc5\xb5\x5f\xcf\x07\x47\xe9\x76\x94\x03\xb9\x54\x07\x94\x84\xef\xb7\xdf\xbc\x9e\x14\x75\xde\x5e\x96\x54\x72\x68\x28\xf5\x4f\x2a\xe9\x80\x82\x3c\x89\x6c\xb4\xb5\x24\x22\x42\x7a\x52\xf8\x69\xfb\x98\x35\x22\x82\x0f\x08\x06\xde\x11\xd7\x3b\x30\xa4\xb7\x8f\x21\xe0\xa6\x3e\xdd\x83\xb7\xc5\xfe\xf4\x6e\xad\x1d\x1a\x18\x32\xed\xb9\x0d\x86\xa8\x4e\x18\x75\x99\x6e\xe1\xc6\xe5\x02\xa8\xc1\x3d\x10\x07\x5e\xa5\x8a\xd3\x0c\x42\xf9\xbc\xd7\xcd\x11\xd4\x05\x4e\x36\x5d\xa8\x9c\xaf\x04\xdb\x88\x38\x29\x37\xad\xc2\xc6\x35\xf7\x10\xf8\xa8\x4a\xcb\x4d\x37\x55\xe8\xa1\x0a\xb4\x6f\x24\xfe\xeb\x14\xaa\xeb\xcf\xa1\xe3\x22\x23\x6c\x96\x4d\x6a\x2f\xba\x90\x68\xac\xcd\x49\x99\x27\x1a\x58\x76\x9f\x12\x39\xeb\x8a\xc1\xa2\xc1\x01\xbf\xcd\xd0\xc8\x5e\x99\xdd\x23\xeb\x19\xa5\x4f\x34\xce\x2a\x78\xed\xbb\x0f\x85\x3a\x28\x75\x78\xae\xbd\x5c\x95\x0d\xee\xa9\x5e\x40\x09\x50\x1b\x83\xcc\x1b\x84\x9a\x83\x02\x09\xda\x53\x28\xb6\xb4\xb1\x98\xf7\x22\xa0\x3e\x8c\x21\x27\xc7\x23\x52\x3e\xfd\xf8\x8d\xb6\x20\x20\xc2\x69\x79\x8d\xa5\xf0\x95\xa0\x07\xe8\xe1\xad\x85\xe7\x61\x0f\xb1\x08\x20\x28\x8c\xb9\x2c\x5a\x0b\xf0\xe8\x55\x28\x0b\x3f\xf9\x89\x97\x69\xfb\xeb\x54\x3e\xbc\x8a\x39\x5b\x27\x3f\xdf\x30\x1c\x6a\xca\x9f\x90\xef\x6a\x68\x50\xc8\x7e\x80\x20\x0c\xd7\xfc\x09\x9a\x60\x65\x1e\x70\xd0\x6d\xfa\x0e\x33\xec\xa2\x88\xd6\x5e\xf3\x00\x82\x46\x47\x2c\x49\x09\xb9\xa9\x9f\x1b\x9f\x11\x02\xb1\xd7\x21\x88\x35\x59\x49\x15\xa6\x52\x52\x52\x80\x2b\xce\x08\x20\x15\x16\xcb\x92\x62\x3f\x52\x70\x20\x2b\xe1\xbe\xa5\x56\x28\x44\x80\x51\x3f\x2b\x7e\x6a\xb8\x52\x24\x48\x57\x65\x61\xd6\x78\x27\xa2\xfc\xce\xf5\x4c\x01\x55\x02\x90\x99\xac\x56\xd5\x18\x24\x0b\xe5\x4b\x72\x81\x04\xdf\xda\x68\x6f\x45\xf2\x60\x36\x6a\x73\x59\xbb\x05\x0a\x12\xa0\xb9\xf6\xc8\x6d\xcb\x02\x96\xf0\x7b\xb1\xd5\x61\x32\x69\x5a\x51\xac\x6b\x41\x26\xa6\x3f\x34\x5f\xfb\xa7\x02\x06\x6e\x9e\xfb\x94\x90\xfd\xce\x32\xac\xf4\x83\xf9\x78\x07\x46\xb8\x51\xb8\x59\x83\x3e\xd8\xd5\xdb\x14\x49\x4c\xf8\x71\xa6\x39\xf4\x30\x40\x00\x79\x86\x30\xce\x30\x72\x09\x2e\xbe\xe6\x7e\x3b\x93\x94\x48\x20\x38\xe4\x8c\xc0\x69\x4e\x1b\x45\xe0\x23\x7d\xf9\xb6\xc2\x1e\x04\xd4\xaa\x96\x66\xb6\x5a\xa5\xf5\x2e\x43\x5e\x3e\x58\x1e\x50\x35\xc6\x28\x5b\x1b\x5e\x6b\x85\x4f\xc4\x96\xd2\xe4\x76\xe2\x49\x83\x40\x40\x7c\x93\xd8\x45\x31\x2b\x39\xde\x7e\x22\x61\x86\x6f\x22\x5b\xa1\x9c\x16\xc8\x79\x73\x76\x7a\x7d\x76\xfb\xd9\xf0\xa6\x16\xec\x39\x18\x70\x6a\xdb\xf9\xee\xec\xfd\xe4\xee\xfc\x76\xfe\x6e\x7a\xfd\x12\x88\x53\x7a\xf4\x04\xc8\xe9\x0d\xe5\x27\x39\x55\xb2\x10\x9f\x0e\x3a\x93\xf3\x52\xce\xf9\x80\xd0\x27\x97\xa1\x68\x97\xba\x83\x85\x36\xf3\xab\xb8\xe4\x27\xc4\x6d\x4b\xa8\x13\x9b\x4e\x65\xe9\x8d\x86\xcb\x24\x4d\x21\x12\xdc\x99\xd7\x29\xca\xd0\x0c\x2a\xc8\x1f\x4b\xe7\x4b\x32\x75\x26\x17\x95\xf4\x37\x60\xf2\x5b\x9b\x4b\x30\xc6\x80\x67\x66\x00\xf2\x04\x22\x6c\x77\xa5\x60\x59\x25\x52\xf8\x66\xc0\xac\x99\xf6\x75\xd2\xd4\xd3\x24\xbe\x24\xb2\x8e\x14\xaf\xbe\xba\xa6\x5d\x71\x95\xf5\x69\xd5\x4f\xfb\xd0\xf5\x10\x37\x71\x22\x51\x31\xad\xec\xe6\x9b\xf6\xa5\x7b\xec\xb7\x00\x8c\xbb\x99\x49\x0e\x3e\x08\x5d\xf0\xbc\xf0\x13\x49\x13\x81\x89\xe1\xbc\x73\xe2\x3e\x41\x04\x9a\x5a\xd6\xc6\xd9\x88\x42\x33\xd6\x09\x78\x2a\x38\x91\xdb\x44\x69\xa9\x0b\x91\x93\xd9\x64\xf2\xf3\xcd\x4c\x7e\x67\x8e\xaf\x37\x74\x0a\x51\xfa\x2e\xac\x02\x91\x3a\xaa\x52\xbf\xd5\x50\x42\x09\xf6\x1a\x6d\xd4\x1b\xc1\xa5\x66\xb0\x35\xd2\x54\xe4\x7e\x65\x60\x7b\x84\x88\x29\x89\x36\x50\x3d\xfb\xef\xdf\x30\x02\xb7\x9a\xa1\x30\xed\x75\x69\xc4\x36\xaa\x68\xae\xa7\x2e\xa2\x01\x40\x9c\xbf\xe4\xca\x69\x09\x7c\xea\xbb\x8a\x08\xac\xdf\xba\x88\xaa\x61\x48\xbd\xd6\xd2\x2d\x16\xf7\x8f\xa5\xf4\x8c\x4b\xa9\xc7\xb9\x1e\x9e\x12\x6c\xad\x8c\x00\x75\xb9\xad\xbc\x9b\xd9\x11\x9d\xa4\x80\x72\x33\xc3\xd8\x7a\xea\xd4\xb2\xcb\x1e\x82\xfd\x80\xa2\x0e\x43\x68\x4f\x5a\x18\x95\x7c\x1a\x43\xeb\xdb\xd9\x99\xb8\xf6\x65\x98\x0b\x27\x16\xab\x2a\x55\x61\x39\x48\x1c\x3c\x94\xb0\xae\xe6\x05\x47\x7e\xb3\xb3\x8d\x44\x28\x63\xb5\x94\xf9\x81\xc9\x1f\x6f\x43\x4c\x6d\x25\x2a\x1b\x5b\x11\xf2\x39\x58\x0e\x07\xc7\x01\x33\x64\xf1\x3d\x3d\xbd\x70\x75\xcd\x39\x3e\xd1\x27\x81\x1d\x2e\x2e\x2f\xce\x42\xa8\xc2\xf4\xe2\xf6\xec\xfb\xb3\xeb\x4a\x3c\xff\xf9\xe5\xa4\x12\x93\x7f\x73\x7b\x5d\x0b\xc5\xff\xee\xf2\xf2\xfc\xac\x81\x79\x38\xbb\x9d\x7e\xa8\x14\xfe\xee\xee\x7a\x72\x3b\xbd\xac\xbc\xf7\xdd\xf4\x62\x72\xfd\x1f\xe1\x2f\x67\xd7\xd7\x97\xd7\xb5\xfa\xee\x4e\x77\xa3\x27\x2a\xdd\x68\x37\xff\x78\xe7\x6c\x40\xad\xda\xba\x8d\xab\xe9\x97\x0f\xd8\xc5\x3d\x91\x67\xfb\x96\xa3\x0d\xd7\x8f\xc3\x74\x1c\xb8\x31\x4c\x53\x07\xad\xba\xe7\xcf\x17\x5d\x19\xba\x8c\x1f\x26\xf6\xcc\xa9\x36\x7f\x0e\x24\xe0\x4e\x05\xd0\xd5\x52\x33\xdc\x52\x7a\x76\x1c\xda\x0c\x3c\x58\x2b\xde\x99\xaf\x4c\xc6\x2f\xde\x52\x5b\xc7\xbe\x76\x7a\x2a\xaf\x3d\x8c\x48\xcf\xc5\x86\xb2\xab\xd1\x41\x65\x96\x6c\x20\x89\xad\xa2\x60\x1f\x86\xb0\x7b\xd3\x0d\xb3\x72\x82\xe5\xd8\x95\xd8\xb7\x3d\x6c\x69\x37\xfb\xde\xd0\xf6\x53\x25\xcd\xb6\xd7\xa8\x5a\x06\xb4\x1b\x28\xb3\x86\xb4\xfb\x96\xeb\xfb\xa1\xed\xa6\x4a\x9a\xed\x06\xb5\xef\x49\xed\x06\x83\x77\xd1\x4e\xa3\x33\x40\x88\x85\xc5\x54\x9b\xe7\x62\xfc\xdd\x2b\x41\xfe\xec\x7e\x6d\x34\x1b\xe0\x65\xaf\x97\x19\xef\xef\xc8\x80\xd6\xb8\xed\xca\x6b\xac\xf2\x37\xf0\x14\x7a\xb8\xc8\x05\xbf\x8f\xd5\x23\xcd\x47\x1d\x19\xca\x7a\x49\xf3\xea\x00\x19\x19\x6e\x8f\x88\x22\x27\x0f\x14\xa2\xd4\x7c\xf1\x00\x93\x4b\x88\x17\x1d\x75\xb0\x20\xf5\x72\x9d\x88\x08\xa8\x9f\xa4\x9f\x9d\x99\x44\x6d\xbe\x2d\x7d\xb3\x99\x55\xd3\x22\xa2\x0e\x81\xae\x3a\x1d\x1a\x9d\xeb\x3a\x98\x58\x8a\x03\x2a\x73\x00\xd3\x2d\x72\xb8\x33\xc1\x80\x24\x12\x8c\xc9\xb9\xb9\xf0\xe4\x22\x4a\xb4\x08\x32\xc6\xb5\x9e\xd8\xbf\x1c\x96\x0a\xa5\xe0\x45\xab\xd9\xb5\xb7\x3d\x9c\x47\x45\xc9\x53\x06\xe1\x4a\xc4\xc0\x88\xb6\x4a\xfc\x25\xe2\x12\x43\x63\x0a\xb1\xc9\x20\xaa\x3f\x8c\xe9\x98\xc9\x9f\x01\x28\x81\x53\xf0\x4a\xb3\xef\x01\xf2\x60\x5f\xa6\x43\x78\xc3\x0b\x38\x8b\xff\x88\x75\xb8\x67\xe3\x99\xac\x64\x60\x0a\xbe\xaa\x24\x63\x1a\xcf\xa4\xcd\xd6\x11\xab\x48\x8f\xe1\xc6\x37\x56\xf9\xea\x98\x72\xa9\x9b\xc5\xae\xee\x17\x4a\xdd\x1f\x0b\x79\x0c\x36\xa9\xe2\x98\x97\x85\x3a\x06\xb8\x14\xce\xbf\x3e\xb6\x49\x8f\x6d\xd6\x68\x7d\xbc\x4e\x1e\x04\xfc\xdf\x78\x5d\x6c\xd2\x7f\xd1\xd9\xfa\xd3\xd1\x2a\xcd\x8f\xcc\xb7\x47\xe1\xb7\x47\xf6\xdb\x23\xfb\xed\x91\xf9\x0c\xff\x2f\xdb\xa2\x7b\x47\x7c\xe2\xe6\x2c\x1b\xcd\x64\x22\xb5\xc8\x0b\xd0\x7e\x1e\xf3\xa4\xf0\xa9\xae\xb6\xec\xd5\x7f\xfe\x27\x1b\xe7\xfc\x11\x23\x62\xdf\xf1\x82\x5f\xa1\x7d\xf1\xef\x7f\x7f\x05\x0e\x55\x8c\x62\xca\x78\xfe\x4b\x29\x8a\x99\xd4\xc2\x6c\x42\xf6\xbf\x66\x12\x3c\xb0\x9b\xed\xbc\x40\xbb\x2b\xda\x20\x63\xcd\xbe\xc5\x32\xa7\xc8\x46\x1a\x6b\x53\x52\x47\x38\x41\xc2\xd3\x96\x2c\xfd\x1d\x26\xfa\x5f\xd2\x77\xf4\xfe\x80\x6d\xfd\x4b\x5a\xdd\xd5\x36\xd9\x92\xfe\x25\x85\x03\x34\x55\xdc\x82\xb5\x98\x5b\xbc\x70\x4f\xa6\xc6\xb5\xed\x91\x06\x34\xe0\x45\xdd\xf4\xed\x7b\xe5\x06\x19\xd1\xad\xe5\xbe\x21\x46\xc0\x57\xe0\xfd\x10\xe0\x3d\x4f\xcc\x0e\xb9\x41\x4b\x28\x68\x6e\xd8\x73\xd0\x49\xc9\x75\xee\xca\x43\xc3\x85\xfe\xfa\xe4\xf8\x78\xc4\x56\x1a\xfe\xb3\xf8\x05\xfe\x03\xe8\xa1\xe7\x22\xf5\x6d\x0c\xa6\x03\xc2\x35\x67\x79\xff\x4c\x3c\x07\x8a\xee\x73\xf0\xc8\xd7\x96\xe9\x77\xa5\x8c\x53\xe1\x43\x1b\x2b\x2e\x91\x54\x99\x99\xb4\x13\xd5\xcc\x3c\x04\x73\xbc\x10\x11\x37\x82\xaf\x51\x37\x82\x4b\xd5\xb2\x10\x12\xad\x61\xb9\xcf\xf6\xc8\xd1\x72\x05\x6a\x31\x40\x21\x79\x41\x90\x73\x01\x3f\x42\x25\x40\xcc\x3e\xaa\x3f\x62\x5b\x55\x12\xc7\x38\x30\xe7\xc6\x22\x4a\x21\x91\x83\x65\x0f\x62\xb9\x28\xca\x5c\x32\xce\x32\x2e\x63\xae\x61\x05\x2e\x73\xf0\x76\xe6\x8c\x37\x1b\x3a\x42\x38\xae\x2a\x0b\xe0\xc4\x42\x64\x41\x38\x12\x48\x02\x1f\xb4\x79\x14\x34\x02\xcf\x04\xe0\xa2\x6e\x7c\x38\x9e\x49\x9b\x8f\x90\xb0\x70\x68\x29\x8b\x54\xb6\x25\xc6\xa3\xfa\xa0\x27\xd6\x72\x46\xc3\x3d\xf2\x78\x93\xfa\xbb\x23\x96\x54\x5d\x6b\xc0\x37\x5f\x04\x29\xde\x6d\x92\xfc\xd7\x42\x46\x2a\x16\xb9\x7e\x63\xb6\x61\xe2\xee\x1d\xa8\x3f\x24\xda\x4f\x06\x48\x29\x73\xb8\x91\xb5\xd0\x14\xef\x12\x4c\x99\xd1\xa9\x30\x94\xb7\xe9\x39\xfb\xb7\xca\x6f\x1d\x05\xd3\xd6\x5e\xfa\xe7\x67\x45\xc4\x84\xb8\x4e\x7b\xe7\x7c\xba\x09\x02\xb7\x6c\x28\x71\xb1\x50\xd4\x71\x48\x39\xb1\xf9\xb4\x93\x02\x32\x64\xe6\x42\x17\x33\x49\x27\xf0\x88\x2d\x05\x37\x7a\xde\x88\x45\xfa\x01\x85\x31\x1e\xf7\xc5\xa3\xf2\x18\x1c\x9b\xde\x06\xc0\xb0\x95\xc2\xbd\x91\x18\x5f\xe3\x14\x81\x8d\x00\x83\xae\x1b\xba\x53\x55\x60\xb0\x5a\x05\xe2\x13\xc6\xc1\x66\x4b\xa9\x67\x58\x0b\x93\xf5\xc0\x48\x6c\xd1\x51\xcc\xea\xed\xc0\x07\x46\xf0\x60\xef\x10\x06\x12\x08\x47\xd0\xb8\x09\x4b\x8b\xfb\xcc\xfb\x70\x43\xca\x7a\xb0\xcd\x74\x6d\xaa\x1d\x03\x01\x0d\x78\x9a\xdd\xc2\x7c\xba\xd7\x60\xa5\x45\x6e\x53\xb9\x60\x5f\x91\x60\x72\x9d\xe4\xf1\x51\xc6\xf3\x62\x6b\x97\x6f\x9a\x2c\x20\x03\x44\x9a\xdc\x0b\x36\xc9\x73\xf5\xf8\xdc\xa3\xd0\x29\x5a\xba\x6e\xd8\x87\x20\xd9\x87\xde\xf2\x5b\xe9\x65\xeb\xe6\x8e\xa7\x51\xd9\x76\x19\x3e\x5a\xeb\xc9\x45\x91\x6f\xe7\x66\x21\x6e\xb2\x4e\x49\xd1\x2b\x68\xa2\xbf\x92\x3b\x8c\x25\xb7\x66\xc2\xe8\x64\xc9\xad\xcc\xea\x6f\x87\x25\xb7\x85\x00\xb7\xc9\x92\x3b\xbd\x98\xde\x4e\x27\xe7\xd3\xff\x53\x2b\xf1\xe7\xc9\xf4\x76\x7a\xf1\xfd\xfc\xfd\xe5\xf5\xfc\xfa\xec\xe6\xf2\xee\xfa\xf4\x6c\x37\xed\x55\xb3\xf5\x5e\x05\x3f\x62\x61\x3d\x27\xec\x36\x00\x6a\x60\xb0\x01\xe9\xdf\x94\x1f\x17\x56\x95\xd9\xcc\x89\x5c\x8d\x60\xa3\x9e\xb0\xb3\x3c\x9f\x6e\xf8\x4a\x5c\x95\x69\x0a\x70\x2a\x8c\xec\x39\xcd\x05\x5c\x3c\x47\xec\x4a\xc5\xd3\xe0\x3b\x08\x47\x6c\xed\x06\xd4\xcf\xe3\x38\x17\x5a\x63\xf5\x23\xaa\x3f\x00\x0f\xb9\x50\x47\x02\xcf\xf1\x07\x9e\xa4\xe6\xfe\x76\xc2\xbe\xe3\xd1\xbd\x5a\x2e\x31\x7c\x66\xe4\x02\xa7\xd8\x2f\xa5\x2a\x38\x13\x9f\x22\xa0\x7a\x6b\x5f\x27\xe7\x6a\xf5\x2b\x40\x95\x7b\xb8\xa7\x3a\x2e\x29\x90\xea\x6e\xde\x7e\x9c\xb7\x0b\x02\xea\xe5\x07\xfc\xf4\x3d\x7e\xd9\x6e\xa0\x2c\xd2\x67\x08\x8f\x3f\x57\xab\xf6\xc4\x43\xa0\x5d\x53\xb6\x24\x72\x24\x44\xc4\x2e\xa2\x56\x4c\x27\xf2\x7e\x26\x7f\x5e\x0b\xc9\x54\x99\xe3\x4f\x70\xcd\x37\x6a\x66\x5a\xea\xb5\x80\x34\xd5\x23\xf6\x28\xd8\x86\x6f\x51\x6d\x86\x3b\x81\xcb\x96\x02\x4b\x06\x4e\x11\xf3\x75\x9a\x48\x23\x2d\xb2\xc4\xc6\x25\xd4\xa7\xfe\x39\x6e\x5c\x96\xe8\x90\x1f\xce\x43\xbc\xeb\x3c\xad\xe0\xf3\xc0\x54\xe6\x71\x93\x16\x20\x44\x92\x1b\x92\xca\x2a\x75\x5f\x66\x9e\x12\xf5\x95\x75\x4e\xc2\x70\x3f\xa8\x24\x66\x71\x99\xa5\x49\xe4\xe4\xee\xa3\xca\x3b\x79\x9f\x31\x80\xa6\xff\xa9\x53\x0f\x0b\xdb\xd5\xb1\x96\xe8\x9c\x00\x49\xb7\x83\x01\xfa\x85\x39\xb0\x59\x22\xa3\xb4\x84\x34\x73\xa5\x16\xf9\x91\x4b\x1d\xed\x62\xfd\x7e\xfb\x24\xd9\x9e\x84\xf3\xf0\xb0\xb6\x30\xe8\x3c\x55\xab\x24\xe2\x69\x08\x6e\xf6\xa8\x08\xc7\xc2\x6b\xb7\x3d\x25\x13\x86\x38\x08\xdb\xa0\x4e\x22\xad\x2c\x17\x40\x04\x3d\x07\x51\x3e\x27\x71\x77\x48\xbb\x97\xcc\x5c\xd0\xb1\x5d\x21\x47\xae\x75\x2f\xd8\x13\xce\xd7\x6d\x33\xb1\x81\x8a\x89\x29\xfc\x99\x7a\x94\x22\x07\x0d\x16\x60\x1f\xa6\xa7\x52\x81\x6e\xe2\xb2\xb3\x39\x7c\xb2\xcd\x4e\xb8\x74\x40\x6c\x8c\x9c\x5d\x25\x0f\x42\x7e\x7e\x52\xf3\xa0\x82\x88\x47\x6b\x31\xb7\x7a\xf9\x73\x8b\x2c\x77\x00\x0c\x14\x56\x36\x4d\x4a\x28\x4a\x9d\x7b\x13\xae\x4e\xd8\xe2\xa6\xec\x42\x47\xe2\x8e\x88\x2c\xd3\x88\x79\x2c\xa2\xfb\xcf\x2e\x9a\x3d\xc8\xca\x36\x84\x71\xf6\x4e\x44\xf7\xec\xee\x7a\x8a\xd1\xc0\x49\xc1\x8c\x28\xd0\x6b\x9f\xf6\xa9\xf3\xee\x56\xf0\xd5\x0b\x50\x58\xf5\xcd\x5b\xe5\x53\x15\xb8\x6c\x7d\xa6\x41\x04\x88\x82\x78\x49\x23\x24\x29\x96\x06\x80\x60\xbc\xb0\xd9\x8c\xc0\x10\xcf\xf4\x06\x92\x17\x95\x45\x90\xf1\x2f\xe5\x0b\x91\x76\x10\x77\x66\x2a\x9e\x5b\x3f\xc9\xa1\x60\x9e\x46\x59\xd6\x8e\x41\x5e\x47\x1b\xc7\xc0\x8d\xc6\x7a\x4b\x2f\xb2\xfb\x6f\x74\x40\xaf\xa1\x42\xfe\x70\xb8\xd7\x73\x0d\xe1\xdd\xcb\x64\x65\xbd\x6d\xc9\x92\x52\x2c\x61\x40\xbf\xd1\x83\x41\x5e\x9a\x92\xae\x54\x4c\x30\x3d\xc7\x85\x67\xb4\x20\x41\xd6\x13\x8f\xab\x08\x9b\x60\x71\x80\x50\xaf\xd9\x11\x82\xc7\x4c\x2d\xc9\x9a\x98\x65\x69\x02\xcc\xd0\x31\x92\xd0\x03\x7b\x86\xae\xa2\xe3\xc3\xd2\x6c\x63\x03\x92\x8f\x2b\x0b\xc4\xeb\x4a\xc6\x0b\x02\x03\x23\x18\xe6\xc0\x06\x37\x7f\xe0\xdd\x64\x6a\x2f\x9e\x31\xad\xa3\x3d\xce\x9b\x5c\xa5\x84\xad\x90\xf6\x91\xad\x00\x8f\x75\x1b\x90\x1f\xf1\x34\x2a\xc9\x4f\x06\xe9\xf2\x6d\x16\xfc\xdd\x08\x42\xef\xf5\x33\x13\x5d\xb5\xfa\xd7\x95\xcc\x43\xb3\x2b\xba\x00\xad\xa7\xda\x14\x76\x9b\x17\x57\xa9\x5a\xc0\xca\xe9\x46\x09\xee\x38\xb1\x8c\xb8\xce\x93\x78\x88\xbe\x63\xc7\xe4\xd2\x7d\xba\xab\x81\x97\xd6\xf4\xe3\x6a\xb2\xeb\x9e\x51\x22\x83\x1a\x73\xe3\x30\x0a\x84\x25\x65\x55\xad\x5e\x4f\x0a\x4a\xe3\x01\xcb\xca\x9d\x4f\x1d\x76\x86\x6a\x5f\x0e\x9a\xe8\x26\x53\xcc\x9e\xb1\xf4\xe4\x32\xbb\x27\xf9\x00\xba\x0f\x14\x65\x8e\xf3\xa3\xdb\xb2\x28\x63\x11\xcf\x9f\xd0\x87\x33\xfa\xb6\x5f\x5f\xdc\x48\x63\xf3\xc0\x06\x28\x8f\x8c\xaa\x10\xf3\x3c\xf6\xfd\x18\xc1\x7e\x8f\x78\x06\x66\x78\x70\x6b\x3c\xbc\x1d\xdb\x3a\xae\x7d\x74\x91\x91\x97\x18\xf3\x8f\xf8\x6d\xd5\x92\x03\x67\xdf\x3a\x72\x8b\x14\xe1\xdd\x66\xe5\xf8\xe5\x5a\x89\xbb\xe9\xb5\x76\xeb\x2b\xcc\x0a\xf0\x43\x16\xd7\x4b\xc8\x8e\xb2\x50\xde\xdb\x03\xfd\x99\x02\xed\x70\x18\xd1\x07\x02\x72\x1a\x77\x20\x45\xac\xfa\x6d\x85\xd0\x00\xfc\xf1\x20\x04\x74\x96\x0b\xeb\x37\xdc\x8a\xc2\xf1\x3a\xa4\x36\xaf\x20\xb8\xc5\x5c\xaf\xab\xc4\x36\x96\xbb\xc2\x91\x91\x81\x13\x8b\x54\xfd\x48\x6d\x32\x25\x01\x96\x84\x51\x6a\x33\x49\x85\xdb\xec\xf0\xce\xb3\x56\x09\x75\x1c\x91\x41\x13\x03\x67\x84\x56\xe9\x03\xb9\x50\x83\x24\x26\x90\x57\xd2\x34\xf0\xd4\xdc\x0d\x55\x8e\x04\x5b\xf6\x64\x87\x48\x80\x5a\x8a\xf4\x5c\xac\x12\x5d\x88\x30\x3a\x34\xfc\xfe\xd9\xb2\xd9\x56\x8c\x27\xbb\x86\xbe\x33\x9b\xed\xbe\x5b\x90\x91\x4f\x03\xda\xb3\xcd\x44\x3c\x75\xdf\xed\x5e\x0c\xb5\x00\x7e\x2f\x0e\x2b\xe7\x1d\xae\x01\xbc\xfd\x69\xa4\xfa\xd2\x2e\xfd\x88\x9b\x24\x22\x61\xe2\x1e\xd0\x68\xa6\x68\x55\xf2\x9c\xcb\x42\x08\x3d\x93\xe4\x78\x46\xca\xba\x90\x95\xa5\x06\x84\x74\x77\x9b\x48\xe9\x02\x19\xa0\xe0\x93\x25\x4f\xd2\x32\xef\x34\x37\xe0\xaa\x7c\x12\xed\xc4\xae\x51\x3a\x85\x62\x59\xdb\xa4\xb9\x00\xe6\x60\x17\x39\xd6\x94\xba\xdb\xb8\x1a\xdf\xdb\xd1\x05\x7b\xb8\xf4\x9f\x6f\x67\x6b\xee\x88\x69\xfe\x46\xcf\x33\x35\x40\xe2\xfd\xf8\x8d\xbe\x52\x1d\xd1\xe0\xfa\x97\x86\x4d\x74\x07\x7c\xe2\x97\xae\x84\x2c\x5c\xdf\x83\xe7\x71\x9f\x29\xa6\x17\x1b\xe7\x5e\xff\x64\xa7\xec\x82\x55\xbb\xe6\x32\x4e\x8d\xca\xcb\x8b\x3a\xef\xb5\xc3\x79\x9b\x2b\x51\x61\x85\x63\x77\x50\x1f\xc4\xc8\xcc\xa3\x46\x80\xe5\xbe\x71\xaa\x45\x66\xee\xc4\x52\xd6\x6a\xa9\xc6\x4b\xb6\xc5\xe9\x78\x1d\x86\xd2\x20\xbb\x0d\xfb\xab\xeb\x2f\x67\x61\xdb\x3f\x93\xfa\x52\xdd\x6b\xcb\x64\xf5\x1b\x30\x24\x7c\x68\x1e\x09\x11\xc9\x1c\x3a\xa8\x5d\x74\xc3\x81\x52\x07\x02\xc9\x8c\xd4\x0e\x19\xc7\x67\x92\xd2\xc1\x23\xba\x00\xdc\xca\xc8\xb7\xa6\xd9\x5b\x17\x5d\xfc\xf6\x77\x96\x6d\x6b\xcb\x96\xb0\xa8\x80\xd2\x4e\x45\x51\x99\x83\xeb\x9f\xcc\x93\x4c\xe0\x21\xac\x07\x11\xc9\x80\xea\xe1\x00\x5b\xa8\x27\xb6\xa9\x49\xce\x1e\x5d\xe9\xd4\x2d\x98\x21\x31\xb1\xbd\x3b\xf4\x29\x5f\x59\xae\x0b\xa6\x0b\x91\xb5\x8a\xdf\x8a\x76\xb9\xcd\xc4\x44\x4a\x55\xd4\xe3\x53\x06\xeb\x97\xdc\x95\xd2\x73\xeb\x0c\x38\x8c\x26\x81\xc9\xe8\x0f\x37\x97\x17\x2c\xe3\x5b\xc0\x3e\x16\x8a\xe1\xab\x40\x38\x5a\x17\x54\xfb\x66\xa0\xda\xf9\xaa\x54\xc1\x31\xb5\x20\xea\x76\xff\x04\xd5\xd8\x54\x16\x61\xcd\xd0\x92\x34\x32\x2b\x57\xe9\x51\x96\x72\x19\xc0\xdb\xf5\x98\xd5\xaa\x0f\xf1\x0c\xce\xb3\x49\x88\x31\x68\x00\xd8\x2b\x68\x2d\xe4\x65\x2b\x00\x1a\x78\x77\xec\x82\x3a\x0c\xc2\xd0\x29\x23\x76\x02\x3b\x3f\x60\x16\x18\xcc\x89\x80\xec\x19\x16\x96\xe1\x90\x3d\x5c\x03\xe8\xb6\x93\x01\x9c\x47\x29\xd7\x7a\x27\x4a\xe7\x45\xa8\xe4\x83\xa8\xc5\xfd\xe2\xab\xda\x4e\x84\x11\x02\xb7\x09\xde\x4b\xdd\x63\x60\x4b\xb0\xa2\xcb\x27\x7d\x0b\xf4\xfd\x20\x1b\x04\x41\x1f\x88\x2f\x0a\xbe\x47\x26\xc8\x7b\xb1\xb5\x16\x2e\x12\x55\x7c\x23\x46\xce\xd8\xea\xac\x89\x01\xe8\xaf\x59\xf0\x4c\x02\x2a\xf6\x7d\xd8\x3c\xf6\x5e\xa9\x11\xe2\x33\xa9\x72\x8e\xc5\xf2\x10\xe1\x34\x93\xef\x95\x1a\x73\x77\x89\xa5\xf6\x93\xb8\xa9\x57\x48\xa8\x28\xc0\x1c\xd6\xa6\xb3\xff\xde\xfc\x21\x91\x98\x9e\x30\xd9\x98\x0b\x14\x8d\x13\xac\x28\x68\x90\xcd\x86\xaf\x1e\x35\x8b\x91\x52\xa6\x4c\xf4\x1a\xdc\x2e\xe8\xe7\x84\xfa\xe9\x48\x41\x40\x56\xce\xa5\x36\x7b\x18\x5c\x35\xe2\x41\x90\xbd\xb6\x82\x31\x98\xbe\x3b\x77\xb0\x25\xdc\x97\x94\xba\xa3\x63\xb7\x05\x97\x8e\x43\x2e\xe7\x00\x37\x1f\x40\x68\x47\x06\xce\x0f\x3c\xdb\x15\x0c\x7b\x70\x89\xfb\x66\xc9\x11\x6a\xd5\x6f\x54\x90\xc9\x1c\x72\x18\x56\x22\x62\xc3\xd1\xbb\x93\x07\x9e\x38\xad\x9c\xf6\xfb\x53\xee\xf4\x36\x30\x0c\x14\x15\xfb\x8f\x9b\x80\xdb\xd2\x41\x06\xdd\x5d\xd0\x08\x76\xc8\x10\x07\xa4\x7c\xb8\xa5\xc7\xec\x46\x08\xf6\x11\x46\xca\x54\xf6\x91\x32\x90\x02\x0a\xba\xe0\x49\x6b\x82\x38\x78\x7b\x2a\x97\xea\x30\xf9\x9f\xaf\x1a\x28\xdb\x83\x46\xa5\xbd\x9d\x87\xe2\x78\xc1\xd2\x2f\x5f\x96\x56\xa4\xd7\xc1\x50\x9b\xeb\x2b\x6f\x6f\xa2\x60\x63\xdb\x52\xa3\x92\xc1\x14\x3f\x85\xb8\xae\xb6\x48\x4c\x2f\x47\x48\xc6\x7e\x2f\xd5\xa3\x44\x79\x4c\x35\xb1\xd7\x66\xff\x81\xce\x82\x7e\x21\xd4\x04\x4b\x94\x86\x6f\x80\x1d\x7e\xe2\xfe\x66\x37\xe8\x02\xc7\x36\x43\xea\x30\x0d\xfa\x2e\x25\xfd\x82\x03\xfc\xf5\x64\xc4\xbe\x1b\xb1\xd3\x11\x1b\x8f\xc7\x6f\x46\x4c\xf0\x68\x6d\x5b\x84\x9f\xa0\xe8\x2f\xf8\xca\x94\x4d\x69\x7f\x96\x41\x05\x90\x1e\xd0\xe8\x27\x96\x04\x91\xfb\xb7\x02\xab\x9a\xed\x02\x86\x66\x53\x1c\x19\xc1\x85\xa2\xb5\x4a\x7c\xa3\x00\x79\x2e\x22\x95\x5b\xec\xba\x2e\x54\x6e\x71\xb8\x0f\x3c\xe7\x89\x04\xc6\x0a\xde\x8c\x42\xa0\x9a\x03\xce\x7a\xf1\x89\x6f\xa0\xff\x89\x74\xb4\xbd\x66\x98\x6e\x5d\xfb\x8b\x6d\x46\x7e\xb6\xc7\x3c\x29\x0a\xa3\x90\xe9\x99\xbc\x61\x27\xdf\xb2\x49\x96\xa5\x82\x4d\xd8\x7f\xb1\xef\xb8\xe4\x92\xb3\xef\xd8\x7f\xb1\x53\x2e\x0b\x9e\xaa\x32\x13\xec\x94\xfd\x97\x19\x36\x53\xde\x85\x32\x1a\xd0\x76\xc4\x38\x93\x65\x8a\x8a\xde\x6b\x8b\x71\x7d\xe3\xfa\xc5\xfd\xec\x2c\x44\xf1\x28\x84\x64\x5a\x6d\xe8\x28\xfc\x93\x3b\xfd\x75\x22\x57\xa9\x28\x68\x3d\x54\xd1\xc8\x58\xc1\x11\xf4\xf4\x64\x26\x9d\x9d\xfa\x4f\xa6\xc5\x7f\x62\xff\xc5\x2e\xca\x34\x35\x4d\x32\x82\xc6\x2c\xa4\x13\x66\xa3\xc3\x84\x1c\x3f\x26\xf7\x49\x26\xe2\x84\x43\x7c\x98\xf9\xeb\xf8\x16\x66\x7b\x5e\x7a\x2a\xd0\x70\x4f\xbb\x74\x6c\x87\x88\x9e\x17\xe1\x9a\x70\xc9\x02\x43\x6d\xa5\x13\x84\x12\x7e\x3a\x5c\x09\xf6\x04\xc8\xb4\x1f\xe8\x8e\x82\xa9\xf4\x42\x07\x65\x7b\xfd\x2e\xeb\x57\x66\xfe\xd5\x4a\xff\xd1\x2b\xfb\xd7\xae\xf1\xf0\x6d\x04\xe5\x14\x27\xc7\x07\x67\xc2\x45\x06\x62\x09\x71\xdf\x6d\x21\xe5\x87\x2d\x1b\xaf\x9d\xe8\xde\x36\x57\x69\xd4\x46\x0b\xbe\x1a\xb1\xcc\xe5\x91\xb2\x9b\xca\x39\xb6\x71\x1f\x63\xce\x04\x52\x36\x5f\x5b\x00\x91\x59\xcb\x14\x7f\x78\x1c\xab\x0d\x4f\xe4\x1b\xa8\xc3\x52\xe7\xed\x19\xa8\x96\xeb\xca\xfe\x11\xba\xe5\x3b\xd1\x8c\xdd\xd4\xfe\x55\x65\xa7\x96\xc2\xad\x6d\x3b\x1c\x98\xc3\xcc\x67\x38\xfd\x8c\xd7\xa1\x9f\x1a\x4b\xb4\x77\xee\x03\xca\x37\x56\x61\x4f\x01\x5d\xde\x33\xc8\xf5\xf2\xad\xbb\xcc\x65\x3f\x55\x53\xbc\x56\x86\x58\x25\xbd\x72\xe1\xd6\x1a\x7b\x47\x37\x31\x8c\x7b\x36\x62\x32\x49\x8f\x8d\xa8\x3c\xbe\x50\x52\x30\xae\x75\xb2\x42\xd6\x3b\x30\xa8\x61\x12\x59\xab\x94\xdd\x56\xaf\x0c\x81\x08\x02\xfd\xcc\x34\x09\x11\xd3\x85\x91\xc2\x66\x0a\xd2\xed\x4c\x9a\x2f\x48\x23\x80\xe8\xa9\xc4\x91\xa3\x63\x6d\xc4\x3d\x6e\xeb\xa2\x03\x31\x28\xbc\x65\x81\xed\xa2\x66\x38\x60\xc1\xd1\x4e\x3c\xc0\xe3\x76\x11\x10\x83\x52\x69\x96\x35\x0a\xe1\x34\x0b\x91\x2a\xb9\x32\xab\xa2\x4b\x08\x83\x14\x78\xa6\x26\x60\x61\x9d\x2d\x30\xca\x0a\xbd\x42\x53\x62\xf4\x94\x24\xf6\x26\x35\x5d\x2e\x8c\x1e\xe7\xbc\x3d\x4e\x1b\xa1\xce\x75\xf1\x54\x1c\x06\x5b\xba\x33\x32\x58\xe5\x16\x38\xe7\x3c\x89\xa8\xb8\x78\x0e\x27\xec\x51\x17\x42\x23\x1f\x64\xca\xe9\xf0\x6c\x8f\x98\xca\x91\xbe\xd3\x7a\xb0\x1d\xff\x56\xb3\xf6\xee\x2d\xbd\x33\xda\xa3\xdd\xf6\x49\x7e\xd2\x06\x5f\x48\x8f\xdd\xf0\x6b\x06\x7e\xf4\x09\x07\x79\x3f\x99\x9e\xd7\xde\x6b\x86\x83\xb4\xc4\x8c\xdc\x4e\x3f\x9c\xbd\x9b\x5f\xde\xdd\x36\xde\x33\xa5\xd1\x4f\x7b\x22\x42\x3a\x47\xef\x39\x30\xf1\xbf\x60\x0e\xb3\xb9\x5a\x5a\x7a\x80\xfe\xc7\x73\x23\x8b\x5c\x3f\xe8\x65\x11\xdc\xae\xc3\x6c\x6b\xcd\x85\xd3\x49\x72\x22\xe7\xe4\x6b\xed\xd7\xd8\xfa\x80\x5d\xca\xf7\xf8\xf9\x95\x4a\x93\x68\x37\x92\xdb\x1e\x96\x46\xab\x6a\x42\x63\x17\x02\x42\x1b\xc8\xe0\x4b\x8d\xc2\xfb\x59\x21\xa2\xc2\x63\x09\x9a\x9d\xfb\x7f\x1a\x3d\xba\xdf\x02\x83\x76\x58\x37\x6c\x90\x9c\xdc\xa1\x13\xe0\x64\x07\xd6\x68\x48\x96\x82\x5a\x2e\x58\x76\x41\xe6\x45\x9c\x7c\x4e\x95\x91\x87\xe3\xe1\x71\xad\x52\xb2\xc7\x22\x03\xf7\x4c\x66\x22\x8f\x14\xa0\x2e\x91\xdc\x45\xb1\x68\x9d\xa4\xb1\xcf\x48\xf6\x1a\xc2\x54\x00\x4c\xfe\x86\x92\xeb\x0a\x87\x9e\xb1\xc5\xef\x38\xf3\xed\xb2\x7b\x87\xbb\xfb\x20\xe4\xd9\x73\xe2\xce\x77\x2d\xfb\x9f\x09\x1f\x8d\x43\x41\x9c\x79\x35\x1c\x04\xa8\xfd\x61\x7b\x06\xb9\x74\xcc\x61\x4f\xc9\xa6\x22\x7f\x6d\x2e\x6a\xf3\x4a\xcb\xac\x3e\x94\xc0\xa4\x8e\x76\x74\x04\x01\x6a\x01\xcd\xd9\x08\x8e\x9a\xa0\xe7\x35\xa6\x49\x9d\x49\x8f\xfc\x78\xa5\x43\xad\xb0\x75\x9e\xd1\xfa\x6e\x91\xed\x23\xf6\xaa\xd2\xd1\x57\xc0\xb4\x2d\x15\xd4\x47\xde\xf9\xca\xd0\xc0\x72\x1d\xb1\xa4\x98\x49\x73\x67\x33\x2b\x33\x17\xa9\x78\x30\xad\x0b\xbd\x43\x84\x57\xb4\x96\x13\xdb\x6d\x08\x8e\xe2\x96\x53\x83\x96\x0d\x6d\xc2\x3c\x64\x6c\x46\xb7\x74\x2c\xb4\xd1\x5a\x21\xd7\x94\xf8\x64\x36\x40\x02\xce\x4f\x04\xb6\xc5\x42\xda\xf6\x01\xde\x0d\xf3\xfc\xcf\xe4\x74\x09\xc4\x06\x40\xa7\x10\xc7\x68\x83\xb0\xd9\x87\x1c\x7d\x66\x42\xde\x20\x45\x16\x19\x3b\x11\x94\x1b\x1a\x77\x92\x78\x10\xf9\xb6\x00\x93\x3e\x8c\xab\x14\xbc\x58\xb3\xa4\x18\x01\xef\xa9\x95\x94\x33\xc9\xe3\x98\xe2\xc1\xb1\xb8\xe0\x3a\xdb\x39\xcf\xf4\x7c\xa1\x1e\x76\xa9\xd5\x87\x22\x77\x71\x57\x67\x29\x97\x73\x3c\x41\x7e\x05\xec\x6e\x90\xb6\xbb\x0b\xc4\x51\x2e\xe6\x8e\xab\xed\x59\xda\xe9\xe4\xfd\xb5\x85\x2e\xd3\xd5\xa6\x5c\xd8\x8a\x46\x15\x68\xf6\xc2\xd3\x7a\x38\x2b\x1d\xe1\xa6\x72\x66\xb1\x25\xfd\xa5\x80\x87\xf5\xf2\x1a\xc6\xca\xae\xd6\x7d\xb8\x5e\xbb\x02\x7e\xab\xc8\xcb\x3e\x33\x5f\x3b\x43\xea\xd3\x3e\x1c\xf4\xd7\xd0\x10\x9f\x04\xfc\xdb\xd3\xac\x97\x05\xff\x75\x5a\x71\x9a\x20\x40\xdb\xdb\xc0\xbf\x4f\xa1\x03\x68\x85\x75\x06\xb4\xf6\xb4\xec\xe1\x2d\x50\xb5\xe0\xe3\x9f\xd3\x43\x01\x72\xaa\xaf\x9d\xc6\x13\x8a\x40\xbb\xc6\x6c\x2a\x99\x55\xf7\x46\xec\x15\x2e\x2c\xfd\x8a\x0c\xd0\x94\xdb\x9f\xc0\x32\x31\xed\x1e\xa2\x60\xa8\x83\xcc\x30\x10\xce\x6f\x37\xf4\x03\xee\xe4\xeb\x7d\xd1\x71\xf9\x2e\x81\x40\xbc\xa7\x70\xad\xa0\x0f\x79\x81\x05\xd8\x38\x92\xc0\x14\x4a\xdd\x05\x5f\x86\xef\xb0\xf5\x76\xb2\xef\xec\x87\x66\x88\xb2\x92\xce\x53\xfb\x9c\xa9\x7c\x26\x6d\x69\x64\x90\xd6\x98\x20\xb0\x5e\x54\x10\x17\x44\x3a\x7f\xb0\x52\x01\x0a\x60\x73\x42\x42\xaa\x51\x4f\x2a\x5e\x97\x02\x80\x82\x5a\x38\x04\x2a\x64\xa1\xf0\xb5\x19\xc5\xc3\x2c\xf0\x0d\x1e\xf3\x75\xe2\xe1\x34\x35\x83\x92\x14\x96\xe7\x38\x88\xd9\xd3\x25\xb0\x75\x2f\x4b\x23\x8c\x02\x4a\xf3\x99\x34\x83\xc7\x96\x09\xc4\x6e\xd0\xb8\xcc\xe4\x07\xa5\x2d\x45\x8c\xf6\xe3\x61\x81\x05\x34\x6c\xaf\x5c\x6a\x4c\xfa\xe1\x1d\x1c\xda\xe4\xf1\x41\xb2\x37\x77\xb4\x40\xb0\x26\xf1\x3c\x6d\x55\x99\xfb\x4e\x45\x5c\xce\xe4\x5f\xcd\xf0\xc0\x75\x8a\x4b\x3b\xad\x6a\x89\x5b\x18\x66\x10\x5c\x65\x1f\xb1\xd0\xd7\xbf\x7b\xf3\xf1\x0d\x06\x57\x95\x1a\xb2\x11\x8f\xaa\x07\x88\xcb\x6e\x51\xa6\x29\xe0\x10\x6c\x0f\x1c\xc3\x92\xaf\x62\x27\x0e\x8f\x2e\x75\x73\x59\x55\x31\xfa\x6c\xf4\x7e\x66\xfd\x09\x8b\x78\x11\xad\x8f\xac\x2e\x47\x62\xcc\x9e\x7e\x34\x7d\x18\x05\x65\x34\x2d\xd6\x9a\xe0\xc1\x5c\x38\xf3\x8d\xa3\x9c\xad\xac\x17\xd3\x05\x30\xff\xdf\xd6\xb3\x9d\x39\x46\x6c\x5c\x9c\x88\x03\xaa\xea\x79\xee\x75\x9b\x6b\xd4\xdf\x38\xc9\x47\x22\xf9\x46\xc4\xec\x15\x84\x01\xbf\xb2\x93\x3f\x93\xd9\x62\x9c\x6e\x97\x05\xf1\x16\x9a\x41\x19\x43\x56\xbe\x3d\xa7\xdc\x3c\x6e\x5e\x93\xf6\x0c\x76\xe7\x45\xab\x5d\xd7\x71\x63\xe3\x6a\xea\xaf\xb0\xa0\x8d\xcb\x8d\xce\x4d\x15\x13\x58\x4d\x0f\xc2\xf5\xfd\x88\x2d\x72\x2e\x21\xa1\x52\x1c\x2a\x55\x7e\x77\xc2\xe5\x19\x49\x01\x6d\x5c\xa0\xe4\xe9\x16\xe2\x7f\x46\x33\x89\x0c\x8a\x40\xb5\xbf\x8d\xd2\x24\x62\xab\x9c\x67\xeb\x9a\x1e\x24\x1e\x84\x2c\x20\x2f\xf7\xb5\xe0\xfa\x30\xac\x46\x5e\x2f\x81\xf5\xf6\xa6\x4d\x24\xdc\x3e\xb8\xac\x71\x5e\x43\xf3\x3a\x8e\x16\xc0\x67\x8a\x78\x3e\x8c\xef\x6a\x2f\x2b\x73\x85\xeb\x93\x88\xe7\xc0\xff\x6c\x3a\xc7\x6c\xad\xfb\xc0\x0f\x38\xae\x44\xc5\x64\x11\xbd\x87\x02\x36\x1c\xb5\xd3\x41\x04\xbd\xd3\xaa\x16\xc9\x3d\x67\x95\xb7\x9b\x93\xdb\x0f\x2d\x15\x36\x0c\xc2\x09\x8e\x11\xe5\x4d\x05\xf2\x4e\xf6\xc7\x72\xa1\x52\xcb\x7e\x3a\x7d\xc7\x54\x0e\x89\x87\x0a\x45\x3f\x25\x71\x97\x76\x90\xc8\x58\x7c\x3a\x88\x82\x68\xf7\x41\x6f\xd5\x66\x53\x4d\x90\xdf\xa6\xde\x59\x90\x4e\xb9\x30\x87\x70\x61\x6f\xc6\x8d\xb7\x74\x1d\xaa\x3c\x49\x8b\x35\xe0\x87\x31\x44\xc7\x0f\xea\x86\x6f\x59\xb4\xe6\x72\x15\x98\x26\x00\xce\x29\x32\x95\x63\x82\xde\x07\xe0\xfa\x54\xb9\xa5\x78\x20\xe2\x02\x8a\x13\x72\x6e\x0c\x84\xe7\x2b\xcb\x4e\xc0\x57\xab\x5c\xac\x20\x8c\x75\x26\x2b\xd4\x2b\xc0\x73\x6a\x73\x03\x61\x3d\xbb\x98\x2b\x9e\x87\xfe\xa9\xeb\x36\x58\xe4\x5b\x17\xf7\x4f\xd9\xad\xfd\x7e\xae\x0f\xeb\x88\x25\x62\x3c\x62\x5f\xf9\x90\x04\x11\x29\xe9\x88\x03\x3a\xa2\xc6\x6b\x26\x7f\xb6\xe7\xea\xd0\xe4\x89\x6a\x6f\x3b\x3c\x6b\xe4\xc8\x6e\x5d\x34\x3b\x99\x17\x0a\x5e\x94\x03\xce\xa0\x53\x5e\xf0\x54\xad\x4e\xcd\xc7\x37\xf8\xed\xae\x75\x7d\x8a\xf1\x02\x96\xa3\xcf\xbc\x6f\x4e\x4e\x53\xb7\xe7\xf0\x6f\x1b\xeb\xbd\x06\xe4\x54\x75\x1b\x90\x9f\x43\x55\xb7\x44\x4c\xfb\x6d\xc8\x69\x07\xb9\xd0\x8e\x3e\x0d\x35\x11\x5b\x54\x3f\x05\x26\xe9\xfa\x35\xb6\x45\x02\x64\xb9\x8a\xcb\x48\xc4\x66\xe7\xc2\x7d\x08\xf1\x50\x8e\xe3\xa8\x22\x24\xdb\x0e\xda\x0a\x51\x1b\x9c\xba\x9f\xcb\xe6\xd0\x8b\x1b\xdf\x0d\xff\x5d\x87\xbd\xc1\x6a\x7c\x6d\x83\x1e\xee\x4f\x1c\xa7\x7c\xe0\x39\xe5\xaa\xaf\x32\xda\xab\x3c\x59\x25\x92\x17\x2a\x67\xaf\x1d\x93\xc1\x1b\x97\x06\xaf\x5b\x43\x18\x28\x26\x2a\x43\x84\x62\xe2\xb3\x2a\x1e\x6d\x8b\xd4\xbc\xa5\x0b\xbe\xc9\x42\x8e\x68\xb0\x02\x07\x23\x93\xe2\x20\x38\xdd\x04\x6c\xa7\x89\xf6\x51\xbb\x33\x49\x1e\x07\x9c\x37\x95\x87\x49\x0e\x3a\xcf\xe6\xac\x2c\xe6\x4f\xe4\x3d\xc3\x8f\x87\x19\x9e\x08\x04\xf1\x81\x67\xbb\x99\xa4\x38\x99\x1c\x30\x6c\x91\xcc\x11\x5e\x53\xa9\xae\xcf\xdd\x69\x84\x06\x32\x5b\xd7\x1d\xf7\xd7\xe7\xd6\x51\xe4\xef\x83\x95\x0b\x16\x4c\x04\x52\xea\x62\x18\x18\x5e\xed\x9d\x58\x33\xa7\xb8\xa5\x9f\x3a\x4d\x55\x19\x33\x12\x6a\x04\x02\xc8\xc7\x78\x3a\x02\xc7\xf5\x78\xdc\x15\xd6\x36\x30\xbd\xb9\x93\x3f\xf0\x5d\xfb\x0e\x84\x67\x1d\x12\x78\xe7\xd6\xa7\x91\x7d\xb1\xa9\xa7\x91\x86\xb9\x77\xe2\x78\xd0\xdc\x3b\x2b\x38\x10\x6e\x0e\x33\x90\xc2\x7d\x34\x89\x53\xd8\x6f\xa1\x03\xa1\x85\x12\xbc\xe2\x98\xd5\xf7\x07\x57\x67\x59\x28\x76\x57\x95\xf1\x5c\xc8\x62\x0e\x35\x0e\xab\x0c\x2a\xb9\x82\xcf\x2b\x0a\x53\x2f\x43\xf0\x9f\x6f\x15\xda\xf7\x2d\xbb\xd6\x5f\xd8\x0d\xd9\xb4\x8c\xbc\x4a\x00\x42\xac\xef\xd9\xeb\x04\x10\x4f\x81\x2f\xd4\x4d\x5c\xc7\x74\x51\x87\x9e\x30\x7a\x41\x87\x2a\xa2\xbd\x57\x87\x7c\xeb\xc1\x55\x0d\xa5\x90\x79\x8f\x38\x01\x8c\xa8\xb5\xbf\x05\x19\x37\x2e\x2a\x7f\x03\x3b\xb2\x99\xbf\x94\xfd\x4d\xe4\xca\xc7\x7f\xa1\xb1\x2a\x2c\x78\xa7\xbe\xfe\xf4\x64\xe1\xa8\x8f\x63\x9a\xea\x30\x4f\x2b\xfc\x42\x04\x66\x68\x51\x58\x6c\xed\x75\xa4\xc3\x85\x94\x89\x68\xde\x91\x94\xa7\x57\x53\x82\x8b\x67\x98\x64\x27\xa9\x1d\x66\x76\x83\x1e\x83\xbd\x82\x02\xab\x36\x3c\x23\x74\x21\x01\xc9\xeb\xce\x9b\x31\x74\xe2\xcf\x7f\xfa\xcb\x38\xe9\x08\xf1\x86\xa6\x0f\x05\x6b\xb9\xc6\xbf\xcf\x13\x21\x63\x70\xc6\xf2\xb8\x99\x2f\x4e\x56\xac\xf3\x15\xf1\x6c\x96\xe1\xb3\xc4\x83\xb7\x1f\xb5\x7a\x8e\x8b\xe8\x33\x78\xf4\xbd\x90\x75\xdb\xb7\xe2\xef\xeb\x52\x25\xf4\x3c\xde\x4a\xbe\x49\xa2\xcf\xda\xc6\x6d\x22\xd2\x18\x9a\x48\xb5\xef\xf3\x4a\xc5\x22\xba\x1f\xaa\x13\x3c\x39\xdb\x85\x88\xee\xd9\x0f\xb7\x1f\xce\x31\xb9\x71\xa2\x67\xf2\x82\x17\xc9\x83\xb8\xcb\x53\xe7\x0e\x20\x90\x76\x9e\xda\x3d\x52\x65\x5f\x0f\x98\xbe\x2c\x55\xbb\x55\x1c\xc2\xe4\x18\x9b\xed\xd1\xa2\x8c\xee\x45\x71\x9c\x73\x19\xab\x0d\x76\xe3\x58\x97\xcb\x65\xf2\x69\x5c\xf0\xbc\x23\x53\x06\xda\x11\x7e\x45\x3d\xd7\xe7\x3f\x2b\xbc\xce\x8b\xaa\xee\x23\x84\x79\x53\x56\xfd\x8a\x72\x8b\x51\x89\x7c\x23\x80\xea\x94\x55\xb3\xcc\x40\x29\x18\x39\x0d\xc9\x58\xb5\xa6\xf8\x09\x45\xa9\xde\x3f\x06\xca\xfd\xc7\xa0\x55\xde\x85\x1d\x36\xca\x27\x38\xdd\xf0\x7b\xbc\x1f\xae\x72\xa1\xf5\x88\x69\x05\x2d\x9e\x49\x1b\x89\x60\xa3\xe5\x00\xf7\x02\x64\xc9\xe9\x96\x45\x2a\x73\x90\x79\xec\xd7\x5a\x3d\x82\x9d\x3e\x8c\x13\x86\x14\xde\xa5\x2c\x92\x94\xf1\x65\x41\x46\x7c\xc8\x0c\x61\x33\xc1\xe9\xf1\x4c\x82\x2b\x36\x82\xee\x03\x44\xc2\xb9\x5f\x5c\x27\x34\x5b\xf2\x28\x49\x93\x82\xf8\xea\x20\xc4\x8c\x9b\xfe\x9a\xf3\xc0\x8c\x65\xce\xb7\x3c\xf5\x17\x2b\x9e\x96\x3e\x34\xfa\x48\x8b\x1d\x7c\xa8\x89\x9e\xa3\x81\xe0\xe5\x36\xb8\x47\x01\x26\xa1\xf3\x01\xb9\xe3\x27\xa6\xf2\x8b\xda\x29\xfa\x4f\xe1\x7f\x2b\xf7\xf0\x5d\x5a\xc1\x01\x17\xf2\x43\x0e\xc7\xe6\x95\xdb\xa5\x4f\xf7\x7a\x46\x12\x5b\x74\x72\x45\x15\xf7\xc1\xc7\xee\x78\x04\x9f\x49\xc7\xa5\x7f\x6c\x93\xde\x35\x6b\x18\x30\x7a\xed\x4a\xe2\x67\x32\x67\x74\x11\xfa\xf7\x69\xbe\xb5\xc6\x5f\x29\x95\x1e\x6a\x91\x27\x4a\x8e\x44\xc9\x39\xe4\x81\x3e\xe4\x3a\x89\x0b\xc0\x19\xb6\xa6\xef\x9c\xcf\xdd\x31\xe4\x57\xb3\xc7\x11\x1c\x8c\x9a\x00\x82\x0c\x1a\xb1\x03\xa7\xae\xb3\x16\xd0\xc5\x40\xbc\x3d\x94\x81\x68\x2d\xab\xda\x37\x5d\x04\x01\x3b\x0b\xf7\x6d\x04\x16\xe1\x5a\x0b\x07\x19\xeb\x30\x6b\x73\xad\x2a\x67\xb8\x0b\xd9\xc6\xdd\x38\x06\x75\xdb\xf1\xdc\x70\x49\x96\x3f\xd2\xe2\x67\x32\xd0\xd8\x91\x11\xcf\x06\x34\xb8\x51\x6b\xb3\xe7\x55\x96\xe1\xc1\xf6\xbc\x43\x52\x4a\xec\x94\x9c\xef\xc2\xe4\x90\x80\x05\x89\xd4\x66\x91\x48\xcb\x49\x41\x46\x6e\xb8\x6a\x4c\x2c\x63\xaf\x73\x48\xd8\x2b\x03\xa6\x0c\xaa\x8d\xbd\x53\x73\x42\xf2\xe3\x50\x64\xed\xbb\x8e\x87\xf7\xbb\xe7\xcd\x7e\xd1\xe1\x69\xac\xf7\xc0\x1c\x20\xe9\x23\xdf\x6a\x48\xa0\x2e\x8c\x54\x5c\xa2\x61\xb7\xda\xfe\x51\xa0\x7e\x58\x36\xe8\x99\x84\x11\x42\xb6\x30\x2b\x48\x8d\x64\x85\x05\x98\xda\x54\xf1\x9e\xe9\xed\x95\x6e\x1f\x9c\x5f\xc7\x57\x93\xef\xf4\xd5\xa0\x13\xfa\xbf\x87\x7b\x66\x87\x11\xf8\x40\x5b\x74\x70\x4c\xa2\xc6\x48\x30\x21\x08\x1b\x73\x2e\xea\x11\xdb\xf0\x44\xd2\x36\xc0\x74\x9c\xb1\x58\x94\xab\x55\xa7\x89\xf4\xb7\xef\x6b\xa9\xee\x93\xff\xf1\xb6\xf0\x9d\x5c\x85\xcf\x61\x2d\x9e\xda\x9a\xd0\x7c\x6d\xee\x7d\x9f\xc7\x40\xfc\x2b\x5a\xe3\x5b\x5d\x62\x8d\x45\xf4\x3c\xd6\xf8\x69\x1f\x6b\xbc\xc5\x76\x41\x80\x1f\x5d\xa7\x2d\xfe\xe6\x1f\x66\xfa\xcf\x63\xa6\xef\xb5\x28\x90\xd4\x67\x9e\x54\x15\xf4\x1d\x2d\x7c\x22\xef\xa5\xa3\x82\x86\x56\x21\xb7\x9c\x91\xee\xb1\x66\x0b\x1e\xbd\x00\x11\x26\x9c\x8e\x87\xdb\x03\xf7\x80\x5f\x6e\xd4\x46\x30\xa8\x4a\x63\x22\x27\x46\x51\x8c\x23\x40\xab\x9a\x0e\x7a\xc4\x08\xe1\x51\xe0\x38\x45\xe4\x4a\xec\x95\xea\xd7\x52\x3c\x32\x73\x5a\x8d\x42\xf8\x5e\x30\x3d\x90\xe1\xef\x8d\xd1\x0e\x2b\x58\x7f\x47\xd8\x91\x8b\x15\xcf\x63\x88\x30\xa1\x2d\x99\xf2\xe8\xde\xfc\x1b\xda\x47\x35\x12\xc4\xd0\x72\x05\x20\xec\xd5\x97\x96\xc8\x08\xa9\x10\x2d\xa7\xbb\x6b\x1f\x7e\xae\x19\x8f\x72\xa5\xd1\x68\xe4\x12\x63\x43\x7c\x35\x28\xb0\x0f\x49\x5c\xf2\x14\x6b\xec\xb4\xb4\x0f\x85\xaf\xd5\x01\x47\x41\x0e\xbb\x26\x9a\x8d\xa6\x03\x19\xaa\x60\x18\xc7\x33\xf9\xce\x39\x4c\x4e\xd8\x9d\x16\x84\x32\xd3\x36\x0b\xc0\xce\x96\xbe\x98\xfa\xd0\xc0\x04\x76\xea\x10\x3b\x06\xc0\x82\xac\x83\x81\xd0\xdd\x23\xb1\x87\x4e\xf5\x90\x49\x19\x4c\x0b\x3d\x0d\x12\xe9\xfb\x61\xc1\x7b\x42\x2e\x78\xbc\x0d\xb9\x18\x13\xc9\xc0\x4b\xc7\x78\xbc\x49\xa4\xd9\x04\x36\x59\xab\x3b\x69\x6c\xde\x06\x84\x1c\x43\x4e\xb3\x34\xad\x09\x41\xcd\xa4\x30\xca\x25\xcf\x93\x74\x0b\xf7\x89\x2c\x17\x47\x41\x3d\xc1\xfc\x50\xc4\x13\x64\xa0\x20\x12\x99\x52\x8b\x65\x99\xe2\xad\x03\xee\xe5\xae\x03\x24\x91\xee\xa6\x23\xa3\x70\x14\x94\x49\x28\xa8\x18\xf3\x73\x3e\x47\xf4\x48\xc3\x5b\x39\xcc\xe3\xe6\xb9\x42\x73\x00\xb9\xaf\xd5\xa3\x0d\x75\x7b\xe4\x1e\xcb\xdc\x75\xba\x3e\x9b\x97\x65\xb7\x1e\x6a\x6f\x80\x56\x4e\x05\x84\x7f\xce\xb5\x46\xcf\x44\xec\x64\x53\x22\xa1\x3b\x94\xe2\xda\x5b\xae\x4b\x8d\x11\x73\x66\x2e\xe1\xfc\xb2\x86\x8e\xaa\xe1\x9a\xb9\xde\x25\x5a\x49\x36\x2b\xbf\xfc\xf2\x6b\xc1\xbe\x84\x10\x42\xba\x8f\xa0\x7f\x0c\xd8\x42\xb1\x74\x10\xd9\xae\x02\x81\x54\xa2\x8d\x19\x61\x6d\x10\x55\x1b\xaf\x0f\x20\x4f\x1e\xad\x99\x2e\x17\x88\x60\xe4\xe4\x62\xe1\xd2\xb1\x8e\x9f\x2b\x00\x23\xe2\xc9\x6e\x5b\xff\xff\x88\x43\x01\x93\xbe\xcc\x64\xa6\x90\x18\x1f\xa0\x9f\x0b\xc1\x36\x3c\xbf\x87\x1c\xbe\x68\x9e\x87\x44\x00\xaf\x13\x31\xae\xba\x17\xde\x54\xda\x43\x0e\x1d\x24\xbc\x66\x79\x29\xa5\x4d\x4a\xc6\x8c\x62\xea\x6d\xfd\xa3\x99\x5c\x94\xe1\xdd\xb3\xe2\x2c\xf0\x4b\x0b\x1c\x06\x20\x6c\x15\x30\x95\x50\xa3\xb8\xf6\xed\x1a\xb3\x1e\x5e\x83\x99\x7c\x66\xb7\xc1\x3e\x83\xdf\x15\xe9\x60\xd6\x98\x17\xc4\x2b\x40\x77\xc3\xbc\xd9\x30\x1d\xb8\xec\x41\xc9\xb9\x82\xe4\xd9\x23\xf6\x43\xf2\x20\x46\xec\x26\xe3\xf9\xfd\x88\xbd\x43\xf7\xdf\x1f\xd4\xa2\xcd\x86\xd7\x20\x94\x38\xd8\x8e\xf7\x34\x33\xd6\x2e\x9a\x97\x76\xed\xff\xe7\x06\x31\x00\xeb\xf2\x7d\xff\xf7\x44\xe4\x75\x70\x7d\xfc\x4f\xb7\x44\xec\x71\x53\xff\x03\xbc\xf6\x3f\xf2\x56\xbc\x9b\xe6\xe3\x9f\xc2\xff\x5a\xf9\x65\x35\x2e\xd0\x3d\x49\xca\xb5\xa2\xd2\x7e\x5b\x81\xcd\x49\x5c\x3f\x94\x9b\xf1\xcd\xfd\xb6\x02\x85\x8f\xc7\x2e\xb4\x7d\x00\xe8\x9e\x3e\xb5\xe3\x75\x9a\x2a\x5d\xe6\xbb\x37\xff\x75\xb5\xd5\xb6\xf6\x16\xa2\x57\x58\x6c\x9b\x85\x00\xd6\x82\xbe\xf0\x13\x7c\x6d\xfe\x57\xb5\x98\x03\xd6\xea\xb0\x1d\xde\x56\x9c\xa3\x8f\x56\x51\xa5\xa9\xfe\x84\xbc\xc9\x04\xf0\x5d\x79\x55\xd4\x3b\x04\x6a\x2b\xcc\x99\x46\x66\xd2\x32\xee\x63\xc4\x6c\x9e\x0b\xa0\x06\xcf\x05\x24\x7a\x64\xc4\x70\x98\x6e\x03\x8d\x28\xb8\xf9\x78\x50\x4c\x18\xe5\x06\xc1\xaa\x74\xdf\x5a\x08\x21\xdd\x68\x0f\x51\x25\x80\x06\xbb\x36\xfa\x84\x76\x7b\x14\x36\xf1\x42\x47\x52\xda\xc6\x77\xc1\x5d\x10\x54\xee\x95\x28\x02\x69\x5e\x53\x2d\x2a\x5b\xb3\xe2\xa1\xfa\x4d\x21\xfe\x5b\x7d\xd0\x35\x72\xae\x8a\x01\xa5\x97\x4f\xef\x39\xec\xe5\x57\xbc\x58\xe3\x85\x76\xa3\x0a\x81\x32\x13\x59\x82\x70\xbd\xa0\xd5\x79\x91\xaa\x05\x64\x58\x2c\x76\x30\x48\x46\xb4\xb5\x7b\x0d\x5d\x73\xc2\xfa\x48\x06\x23\x4d\x20\xd2\x36\x17\x1a\x08\x57\x9a\x5e\xaa\xbe\xf8\xe4\x61\x97\xee\x66\x73\x8d\xd0\x7f\xd7\xb8\x6c\x37\x53\x72\x98\x6d\x0d\x60\xd5\xb3\x27\x44\xd0\x34\x12\x9c\x10\x55\x35\xb9\x81\x91\xad\xb6\xd6\x5f\x9b\xc8\x7f\x26\x27\xf8\x24\x38\x04\xb8\xcf\xb1\xe5\xf0\xa0\x94\xb3\xd9\xed\x3f\x0c\x5f\x65\x93\x10\x81\x48\x16\x82\x91\xb7\x65\xc2\x65\x60\x04\x51\x8d\xb2\x48\x72\xc1\x24\xa0\x10\x66\x52\x97\x8b\x23\x4f\x4c\x62\x6e\x71\x0f\x40\xa6\xa3\x45\xc6\xe1\x2a\x03\x7c\x45\x47\x2d\xc7\x30\x5a\x26\x7d\xae\x1c\x4b\x1f\xc8\x53\x12\xfe\x10\x2b\x89\x91\xf1\xae\xef\xae\x1c\x73\x59\x83\x5b\xb4\x85\x2b\xe1\x61\xb7\x4b\x5e\x40\x36\x2f\x88\xc0\xbc\x46\x14\xc5\xaf\x7d\x80\x87\xde\xd0\xbe\x47\x37\xf8\xd3\x66\xf2\x5f\xed\xd9\xd0\x0d\x2a\x1e\xb0\xd2\xcd\xc8\x98\x23\xaa\x13\xec\x5c\x69\x9b\xbd\x42\x06\x4a\x60\x77\xa3\x1a\x4b\xbe\xad\x54\x6e\x71\x2d\x61\x4a\x17\x45\xe1\xb2\xf0\xf4\x21\xd1\x01\xd9\x3b\xd4\x76\x23\x04\x3b\xc9\xc5\xf2\xe4\x63\x2e\x96\x73\x3b\xd3\x63\xe8\xd0\xd8\xf4\xa8\x49\xf9\xde\x73\x71\xe8\x4c\xc9\x76\xf2\xc3\x3d\xd4\xa8\xb5\x2e\x61\x39\x41\x9f\x92\x25\xf3\xd9\x6d\x4d\x7f\x80\x01\x42\xc4\x75\x2e\xfa\x46\xcb\x3e\xfb\x31\xd7\x85\x04\xeb\x01\xb5\xea\x48\x82\xfa\x3f\xff\x78\xab\x8c\x59\x9f\xe3\xed\xb6\x0a\x99\xb1\xc2\x9e\x4b\x77\xe0\x75\xe3\x42\x3f\x2f\x3a\x1d\x26\x50\x67\xfc\x51\x12\x8f\xcd\x20\xd3\x53\xbf\x63\xad\x06\x20\x0a\x8e\xb5\x06\x06\xce\xef\x32\x69\x2d\x7d\x89\xcb\xa3\x39\x62\xfe\x06\xcd\xd3\x34\xcc\xa8\xe1\x3d\x6d\x33\xe9\xe3\x52\x8d\xd6\x9a\xa6\xd6\x84\x57\xd1\x37\x5c\xc2\x63\x5d\xf0\x42\x8c\x2c\xe9\x0a\xd1\x15\x92\x3f\xec\x68\xc1\x21\xb5\xb5\xcb\xa1\xb6\x6f\x37\x3f\xd7\x25\xf2\x37\x16\x17\xbd\xc7\xf3\x8c\xd5\xce\xef\x45\x03\xce\xbc\xb7\xad\xed\x9e\x8e\x80\x52\x02\x36\xb3\x95\xb2\x11\xcf\x73\x8b\xf2\xa7\x5a\x99\xa5\x3b\x0f\x6f\x25\x1d\xed\x5c\x8b\xe8\x3e\x53\x89\x1c\x2c\x8b\x2a\x14\x17\xb0\xd8\x0b\xe6\x4b\x73\xb7\xc3\x5e\x87\x63\x45\x9f\xc4\x8e\x68\x80\x57\x58\x68\xa8\x27\x63\xe3\xcc\x65\xca\xee\x5e\x76\xcf\x6d\xbf\x10\xfe\x6c\x78\x01\x5b\x6c\x8b\x7f\xa8\x76\xaa\xf0\x16\xc3\x4e\x85\x09\x94\x37\xa2\xbf\x7a\x0e\x36\x67\x15\x0a\xc3\xd6\x21\x05\x13\xe4\x3f\x2c\x43\xff\xb0\x0c\xfd\x37\xb7\x0c\x7d\x4e\xb3\x10\x60\x63\x5e\xd2\x26\xb4\xc3\x41\x7e\xc0\x76\x74\xb5\x0e\x8e\x71\x6c\xd5\x8e\x47\x41\xd2\xef\x20\xd2\xb1\x09\xf4\xb7\x44\x18\x66\x7c\x16\x3c\xba\x17\xb2\xd3\x47\x6f\xe9\x8b\x3a\xf3\xaf\x3e\x2f\x82\xa5\x8d\x7d\x29\xf8\x7a\x37\x94\xc5\x43\x9d\x88\x34\xb8\x8d\x10\xc4\xec\x13\xd0\x3d\x4d\xc7\x8f\x00\x34\xa6\x72\x47\x6c\xad\x29\x0a\x0f\x9d\x91\x48\x93\x84\x60\xa9\x1a\x15\x74\x5f\x4c\x9c\xad\x78\x9e\x29\x95\xb6\x42\xe3\x9e\x75\x00\x1b\x81\x32\x7d\x07\x6f\x8a\xca\xa8\x0e\x01\x63\x76\x14\x7d\xd0\x85\x0f\xd1\xc0\x78\x0c\xc8\xc4\x01\xab\x29\x2e\x21\x96\xd2\x0f\x47\x90\x5e\x91\x3b\x83\x0b\x61\xc4\x16\x22\xe2\x90\xf8\xd5\x82\xf7\x22\xee\xa2\x4f\x42\x52\xa4\x46\x38\x88\x6e\xd6\xd3\xe1\xb5\x84\x72\xe7\x49\x5b\xda\x8d\xa1\x9b\xab\xa6\x21\x58\x68\x39\xb6\xdc\x22\x49\x2c\xed\xe2\xbe\x84\xc6\x96\x63\x7a\x0e\xd9\x17\xfb\x9d\x70\xad\x72\x67\x4a\x05\x9d\x42\x39\xfd\x05\xe9\x0f\x10\x8e\xb3\xe9\x89\xdc\x99\xc9\x89\xcb\x73\xeb\xb1\x5f\x0e\xb9\x87\xee\x52\xc4\x2c\x36\xa6\x06\xb9\x1c\xfd\xcd\x65\xc4\x74\x19\xad\x81\xad\xb2\x2a\xa7\x42\xb9\xd5\xdc\xb1\xa3\x99\x34\x17\x22\x30\xb5\x6c\x38\xc4\xc5\x3f\x1a\x65\x55\x27\x7f\x13\x0e\x9e\x45\xe4\x5d\x21\x22\x0b\x2f\x4e\x4a\xb6\xa2\xd7\x2c\x71\x28\x02\x2c\x3c\xa6\xa4\xcc\x62\x5e\x88\xf1\xcc\xa3\x6d\x12\xb4\x74\x5a\x94\x07\xa9\xcc\x3a\xec\x58\x88\x63\xac\x49\xda\x34\x59\x8a\x68\x1b\x35\xb2\x10\xed\xa6\x89\xf8\xc7\xb5\xed\xb7\x75\x6d\x43\x96\x5d\x8c\x19\x1c\x32\xb4\xd4\xd4\x6b\xff\xf9\x61\x83\x2b\x58\xd0\x12\x3d\x60\x9c\x3f\xe3\xb5\xb3\x45\x07\x1e\xa6\xcf\xf7\xbe\x07\xed\x3e\xce\xfc\xc5\xd6\x1f\xd6\x01\x05\x42\x43\x2d\x0c\x9d\x8b\x45\xb8\x74\x8c\x42\xdb\xdb\xad\xdf\xcd\x32\xf3\x9b\x02\x27\xf5\xb9\xb8\x1a\x8d\xdb\xc1\x95\x2e\xac\xa6\x2d\x05\x9e\x77\x3b\x34\xee\x80\xd5\x9d\x17\xaf\xb4\x1b\xf5\xaa\x04\xb4\xd8\xff\x89\xdc\x1e\x14\x80\xb9\xcd\xc4\xbc\xcc\xd3\x83\xe0\xc6\x77\xd7\xe7\xc7\x4e\xdb\x00\xcd\xb9\x33\xef\x51\x51\x4b\x0d\x6d\x73\x12\x8b\x98\xe0\xa0\x91\x4a\xd9\xa2\x5c\x2e\x21\x7f\x09\x01\x43\xad\x30\x82\xcc\xf4\xa5\x2e\xec\x79\x82\x4c\x33\x5c\x17\x33\xa9\xa4\x60\xb3\x2f\x8e\x67\x5f\x98\xa3\x2c\xe7\x51\x21\x72\x24\x19\x48\xb9\x2e\x98\x16\x2b\x50\xb5\xa8\xd2\xbb\xeb\x73\x88\x4a\x2c\xd6\x58\x9c\xbb\xb2\x62\xbc\x27\x72\x3e\x43\xae\x1f\x20\xa8\x96\x41\xc6\x2d\x68\xfb\x6b\xae\x59\x22\x67\xf2\xa3\x29\xe2\x78\xa5\xd4\x2a\x15\x63\x3b\x21\xe3\x77\x64\x7a\xfc\xf8\x06\x5b\x00\x9f\x87\xb0\x7e\x73\x20\x72\xa9\x64\x12\xf1\x14\x02\x72\x66\x12\xb4\xe6\x91\xe9\x0c\x98\x46\x67\x5f\x8c\x67\x5f\x30\x70\x9f\x16\x8c\x47\x91\xc8\x0a\x11\x63\x6a\xd3\xa9\x64\x19\xe0\x17\x23\x31\x62\x85\xe0\x1b\x6d\x29\x9d\x59\x66\xee\x98\x70\x35\x64\x89\x24\xa4\xd3\x22\x91\x3c\xdf\x22\x98\x09\x93\x95\x53\xf0\xc7\x76\x26\xc5\x27\xa0\xff\x4c\x80\x01\xb4\xd4\x8e\x96\x86\x12\x13\x98\x2e\x4f\xe4\x76\xcc\x7e\x40\x86\x06\xa4\x40\xbd\xbb\x3e\xb7\xf4\x46\x14\x03\x3a\x93\x3a\x5a\x8b\x8d\x60\x1f\xd7\x45\x91\x7d\x1c\xe1\x7f\xf5\x47\xf0\x38\x4a\xc5\xf0\xe9\x88\x99\x29\x32\x8a\xaa\xc5\xcb\xa7\x5b\xc8\x21\x5b\x66\x94\x70\x7e\x26\x81\x8b\x3d\x0f\xd1\xbd\x66\xb4\xa1\xc6\xe0\x0a\x5e\xc1\x85\x1b\x29\x0e\xc9\x1d\x4f\xcc\xe0\xfc\x2f\x36\x5d\xfa\x2a\xcd\x00\xda\xdc\x62\xae\x55\xa0\x90\x68\x08\xd9\x1a\x9b\x0f\x26\x92\xfd\x70\x7b\x7b\xc5\xbe\x3f\xbb\xb5\xca\xce\xdd\xf5\x39\xae\x0b\xa0\x53\x61\x9c\xfd\xb9\x3e\xc5\xb7\xdb\x4c\xfc\xe5\xcf\x7f\x99\x49\x66\x73\x94\x4b\x3b\xd2\xb8\xa3\x47\x48\x09\x0b\x78\x27\x70\xcc\x02\x95\x33\xd4\x87\x29\x77\xa8\xf9\x39\x6a\xe7\x8f\x64\x2d\x80\x33\x2a\x55\xea\xbe\xcc\x9c\x99\x3b\xd4\xc3\x4c\x85\x77\xd7\xe7\x50\x3a\xd0\x29\x15\x6b\xc8\x9f\x26\x9c\xf5\x05\x26\x9e\xdb\xc6\x98\x7f\x3f\xa8\x24\x66\x5c\x6e\xcd\xb7\x58\x34\x2c\xcb\x5c\x2c\x55\x2e\x46\xf6\x4d\x53\x00\x2f\x92\x45\x92\x26\xc5\x16\xa4\x94\xcd\x6b\x9f\x59\x8e\x7c\x53\x80\xb9\xcd\x10\xc0\xdb\x2c\x30\x4c\x63\xfb\xfa\x4e\x87\x08\x70\x98\x34\x97\x1b\x11\x2f\x3a\xe6\xdb\x45\x2e\xf8\xbd\x59\xdd\x54\xc2\xf8\x0d\xe5\x8c\x15\x27\x78\xc6\x2c\x4b\x19\xe1\xd2\x30\x6d\xa0\xd5\x4f\x37\xa7\x74\xcb\xf8\x03\x4f\x30\xa7\xac\x75\x97\x2f\x97\x49\x94\xf0\x94\x24\xc7\xa2\x5c\x42\xda\x18\xae\x29\x65\x11\x82\x0f\x4d\x21\x70\xcb\xb0\x09\xfb\x71\x41\x2d\xc4\x2a\x41\xc0\xf1\x63\x52\xac\x31\xae\x60\x8c\xf3\xcc\xb3\x44\x8f\x23\xb5\x81\xfd\x76\x03\x4b\x49\xd3\xa5\x17\x70\xe0\xb5\x75\xce\x5e\x5b\xa8\xdd\x26\x2b\xb6\xb4\xf6\xde\xb0\x4d\xb2\x5a\x17\x90\xc8\x05\x6a\x07\x48\x44\xb2\xc9\x52\xb8\xf4\x91\x87\xd1\xe2\x7d\xb5\xd8\x70\x59\x24\x51\x97\x4f\xa9\x35\x25\x78\x3f\x8c\xe7\x62\x5b\xec\xb6\xe3\x7d\x20\x9e\x7d\x8e\x14\xfa\x81\x44\x66\x75\x81\x4c\x32\x10\xd2\xcb\x04\x04\xfe\xf5\x94\xb3\xfb\xae\x50\x1f\x27\x72\xfb\xd1\x93\x90\x72\x19\xe4\xbe\xda\x51\xbb\xdd\xff\x3c\x55\x34\x6b\x8c\xcf\x24\xa0\x3a\x8d\xc0\xa0\x64\xb4\x3b\xcf\x18\x77\xa4\x98\x99\xbd\xb2\x8b\x26\x4d\x16\x50\x37\xc9\x0a\xcd\x74\x99\x41\x3c\x41\xa1\x58\xc6\xa3\xfb\xe3\x52\x9a\xff\x18\x61\x88\xdb\x5d\x87\xe4\x44\x33\xa9\x96\xac\x2c\x70\xe3\xd8\x25\x0c\x46\x91\xc0\x14\xe0\x2f\x68\x1b\x51\xac\x55\xec\xe2\xc2\x4c\x99\x30\x7e\xa6\x45\x67\x44\x2f\xfd\xf6\x84\x5d\x99\x0a\xcd\x22\xa6\xba\xb9\xeb\x7e\x22\xd9\xe9\xbf\xfe\x2b\xbc\x6f\x06\xf7\xbd\x52\x6c\xa9\x14\xfb\x96\x8d\xc7\xe3\x7f\xc7\xdf\x4c\xa1\x5c\x6e\xe9\x2f\x2e\xb7\x63\x53\xdc\xfb\x5c\x6d\x5e\x2f\x95\x7a\x43\xbf\x43\xd2\x66\xf3\x8f\x64\xc9\x5e\x9b\x97\xee\xa0\xaa\x5b\xf5\x7a\x56\x7e\xf9\xe5\x57\xbf\x37\xaf\xbe\x61\xff\x89\xef\x04\xaf\xff\x3d\x6c\xea\x57\x7b\x9a\xfa\x07\xfe\xc0\xfb\xb4\x95\x7d\x0b\x67\x8d\x29\x60\x67\x1b\x13\xfd\xfa\xbd\x52\x63\xb8\xfd\x87\xad\xc3\x62\xcd\x1b\xd8\x8a\xe0\xad\x7f\x0f\x9a\xcd\x6c\xbb\xbf\xde\xd3\x6e\x44\xd5\xbb\x96\x63\xf1\xef\x95\x7a\x3d\x1e\x1b\xb9\x45\xe3\x8a\xad\x7e\xfd\xa6\x3a\xd0\xd0\x81\x66\xfb\xcd\xe3\x29\x36\xff\xdd\xd9\xcd\xe9\xf5\xf4\xea\xf6\xf2\xfa\xcd\x89\xed\x81\x9f\x81\xe0\x7b\x66\x53\x6b\xbb\x86\xff\xef\x3d\x0d\xff\x5e\xd9\x36\x43\xa3\x4f\xbe\x65\x38\x9b\xd9\x62\xfc\x5e\xa9\xff\x1c\x8f\xc7\x7f\xa7\xc7\x5c\x6e\x47\xe6\x60\x32\xef\x64\x28\xca\x3f\xf0\x5c\xaf\x79\x6a\xfa\x14\xb4\xc1\x75\xa2\xb5\x44\x5b\x5c\xb2\xac\x15\x76\x27\x37\xbe\x38\xa8\x0c\x26\x16\xde\xfa\xe7\x6f\x99\x4c\x52\x3f\x7d\x41\x1d\x30\x4f\xb7\x40\x2d\x11\xdd\xbb\xed\xe2\x72\x84\x2e\xb6\x2c\xab\x6f\x5c\x8c\x3b\xdb\xda\x0c\x05\x46\xdc\xcf\xe4\xab\x16\x89\x7e\x6c\x54\xbb\x31\x3c\x30\x07\xd4\x2b\x9b\x3d\xde\x1e\x0b\x2e\xb3\x16\x8e\x2c\x38\xa2\x71\xb7\x4a\x8a\x51\x6b\xd3\x0f\xdd\x81\x17\x90\x55\x81\xda\xf9\xea\xf8\x15\x05\x0a\xf9\x2a\xaa\x44\xf2\xb3\x2f\x96\x4a\x8d\x17\x3c\x87\xd6\x7d\x3a\xde\x8e\xff\x36\xfb\x02\xfb\x83\xca\x07\x2a\x46\x50\xf8\xec\x0b\x78\x0a\xcb\x61\x26\xff\x70\x73\x79\x31\x93\xdf\x7e\xfb\xed\xb7\x38\x5a\xe6\xef\x16\xdf\x8b\x39\xae\x40\xdc\xa2\x9e\x52\x6a\x9b\x52\x52\xac\xca\x94\xe7\x33\xd9\xee\xae\x89\x85\x17\x9a\x23\xef\xbc\xa1\x75\x36\xb2\xd9\x2d\x20\x49\x99\x95\x71\x68\x9b\xfc\xf8\xff\x9b\x26\x7f\x24\x15\xd1\x09\xf9\x70\x08\xc6\x76\x31\x9f\xd8\xa5\x6a\x06\xdb\xac\x5f\xaf\x67\x2d\x93\x54\xd0\xc6\xb5\x8b\xfb\x4a\xe4\x5a\x49\xbf\x66\xe8\x42\x00\xdc\x66\xe0\x00\x60\xdf\xb2\xb7\xff\x5e\x7b\x6a\xe6\xc1\x3e\xfc\xaa\x22\x09\x18\xf3\x45\xcd\xbe\x80\x56\xcf\xbe\x38\x61\xb3\x2f\xda\xd6\x4d\xb5\x61\x63\x6c\xca\xec\x8b\x91\x2f\x00\x9a\x71\xc1\x37\x58\x48\xf9\xe5\x97\x5f\x47\xd8\x04\x0c\x5d\x0b\xde\x34\x4d\xea\x7e\x31\x68\xe2\xb4\xe6\x3a\xb3\x03\x61\x43\x20\x1f\x45\x9a\x1e\xdd\x4b\xf5\x88\x79\xc6\xc1\x4f\x44\x51\xca\x0c\x97\x47\x75\x72\x29\x37\x59\x6d\xc6\x6d\xd0\xa6\xab\xc6\xa5\xb7\x83\x09\x9d\xc9\x8f\xb0\x74\xec\x8c\x12\x1d\x11\xd0\x81\xba\x9a\xe0\x52\x43\x2b\xc1\xc6\x58\xd0\x42\x98\x49\x28\xc6\xcd\x39\x7b\x0d\xc0\x2f\xea\x4a\x43\xb3\xb6\x97\xa7\xbf\xfc\xf9\x2f\x6f\x4e\x0e\x99\xa7\x6a\x71\x95\xa9\x82\xfe\x60\x19\x6f\xc7\x5f\xbd\xfd\x4a\xcf\xbe\xa0\x51\x6f\xbf\x62\x9f\x27\xba\xf8\xa9\xa6\x81\x3d\x21\xd9\xb9\x51\x1c\x5e\xca\x79\x61\x9b\x8a\xcd\xec\xeb\xb4\xb8\xae\xba\x15\xd4\xd2\x9a\x75\xe0\x72\x66\xd3\xc0\x9b\x76\x0f\x52\xef\xdc\x78\xe1\x65\x8b\x3d\xe6\x3c\xcb\x44\x6e\x6d\xe5\x0d\x77\x06\xe4\x54\x87\x5a\xac\xe8\x6f\x13\x66\x66\xd9\xd4\x8a\x86\xd7\x60\xe8\xc6\xed\x33\x77\x51\xa6\x69\xe7\xcc\xed\x4f\x96\x7c\x71\x77\x7e\x3e\xff\x69\x72\x7e\x77\x66\xbb\xdf\x9a\x7c\x38\x78\xad\x73\x4c\x5c\x4b\x68\x4c\x10\x57\x55\x00\x96\xaa\xdc\x88\xdc\x32\x85\xf9\x5e\x23\x8e\xa4\x4c\xd3\x6a\x5a\xec\x99\xfc\x48\xe5\x80\x18\x28\x65\x62\xd5\x94\x9d\x03\x57\xad\x1f\x5e\xfb\x68\x0a\xff\x88\xdf\x1e\x31\xdf\x89\x13\x76\xe1\x6a\xed\x18\x57\x22\x9c\x38\x60\x3b\x60\xbc\x6d\xd7\x76\x78\xee\xc4\xff\x4f\xdb\x1e\x77\x12\x92\x7e\x19\xc9\x8b\xf9\xfa\x9f\x65\x77\xe0\xd8\x7d\xac\x42\xc1\x9d\xb9\x34\x46\xaf\x21\x94\x3b\xc2\x74\xed\xba\x20\xce\x62\x1c\xb3\x99\x44\x41\x6c\xda\x54\xa8\xee\x36\xb1\x29\x79\x90\x52\x2e\x57\x25\x5f\x09\x3d\x62\xb6\xf2\x99\xb4\xb7\x53\x7b\xd7\x71\xc0\x1c\x60\x64\xad\x2d\xa1\x5a\x08\x70\x22\x67\x92\xfa\x04\x27\x2c\x15\x8f\xe1\xa8\x7f\xb8\x71\xdd\xa1\xb8\x6f\x2c\x88\x32\xce\xcb\x99\xc4\xc9\x45\xdb\x98\x05\x1b\x82\xda\xd1\x3c\x9b\x38\xc0\x83\xf1\x5e\x17\xb3\x42\xad\x00\xf6\x38\x93\x8e\x05\x0b\xc1\x19\xf6\xbe\xe6\x73\x83\x62\x93\xf6\xcb\x13\x3b\x19\x76\x4f\x50\xdb\xda\x57\xfd\xc1\x67\x80\xd9\x70\xf3\xd6\xbb\xfc\xee\x65\xeb\xc5\x58\x4f\x40\x0e\x0f\x04\x47\x17\x35\x22\x50\x9f\xb5\xb7\xc6\xf6\x0b\xdf\xe9\x8c\x1e\x55\xe5\x22\x1d\xd0\x24\x7c\x7f\x67\xa3\x50\x24\xef\x6e\x54\x0f\x8b\xf4\x75\x6d\x6b\x99\x65\xba\xab\xda\x85\x52\x1d\xf3\xf2\x8c\x98\xdd\x4a\xa3\xe8\x83\x7d\x83\x51\x46\xc5\x53\xd6\x4b\x0f\x3e\xa0\xfa\x10\x59\xe9\xb3\xab\x41\x69\xa2\x9f\xd4\x1c\xaf\x3f\xf5\x6e\x91\xd3\x10\xe8\xb0\x1b\x24\x61\xe9\x9c\xab\x08\xd8\x0e\x31\x69\xaf\x29\x18\xde\x22\x12\x14\x2f\x66\xf3\x8c\x60\x13\x99\xf5\x3f\x72\x8b\x68\xe4\x67\x6e\x04\x8d\x8c\xca\x5c\x1b\x71\x49\xf2\x8e\xa4\xb6\xca\x19\x9f\x49\xcb\x06\x63\xc5\xf1\xc4\xda\x83\x73\xf7\x2b\x72\x2c\x65\x98\xb2\x0e\x9c\x42\x05\x58\xc9\x49\x1a\xce\xe4\x03\xcf\x13\x2e\x01\xd3\xbc\xd0\x90\x6f\x18\xae\x74\x5b\x46\x0f\x1c\x01\x87\x0e\x8d\xcc\x7b\x64\x5e\x4d\x0d\xa8\x9c\xf3\xff\x64\xfe\xf7\xf7\x7f\xfa\xbf\x01\x00\x00\xff\xff\xde\xaa\xee\x8d\xa0\xa7\x06\x00") +var _adminSwaggerJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\x7b\x73\xe3\x36\xb6\x2f\x0c\xff\x3f\x9f\x02\xd5\xfb\xad\xea\x64\xc6\x76\x67\x2e\x67\xbf\x53\xde\x75\xea\x79\x14\x5b\xdd\xd1\x89\xdb\x76\x7c\x49\x76\xea\x68\x97\x02\x91\x90\x84\x31\x05\x28\x00\x68\xb7\x66\x6a\xbe\xfb\x53\x58\x00\x48\x90\x22\x25\xea\x6a\xca\x8d\x9e\xaa\x89\x2c\x91\xb8\x2c\x00\x0b\xeb\xfa\x5b\xff\xfa\x03\x42\xef\xe4\x0b\x1e\x8f\x89\x78\x77\x8e\xde\xfd\xe5\xec\xbb\x77\x27\xfa\x3b\xca\x46\xfc\xdd\x39\xd2\xbf\x23\xf4\x4e\x51\x95\x10\xfd\xfb\x28\x99\x2b\x42\xe3\xe4\x83\x24\xe2\x99\x46\xe4\x03\x8e\xa7\x94\x9d\xcd\x04\x57\x1c\x5e\x44\xe8\xdd\x33\x11\x92\x72\xa6\x1f\xb7\x1f\x11\xe3\x0a\x49\xa2\xde\xfd\x01\xa1\x7f\x43\xf3\x32\x9a\x90\x29\x91\xef\xce\xd1\xff\x35\x2f\x4d\x94\x9a\xb9\x06\xf4\x67\xa9\x9f\xfd\x1f\x78\x36\xe2\x4c\xa6\x85\x87\xf1\x6c\x96\xd0\x08\x2b\xca\xd9\x87\x7f\x48\xce\xf2\x67\x67\x82\xc7\x69\xd4\xf0\x59\xac\x26\x32\x9f\xe3\x07\x3c\xa3\x1f\x9e\xff\xfc\x01\x47\x8a\x3e\x93\x41\x82\x53\x16\x4d\x06\xb3\x04\x33\xf9\x81\x8b\xf1\x87\x7f\xd1\xf8\x8c\x8b\xf1\xbf\xe1\xc3\x4c\xf0\x7f\x90\x48\x99\x3f\x62\x3e\xc5\x94\x99\xcf\x0c\x4f\xc9\xbf\xb3\x46\x11\x7a\x37\x26\xca\xfb\x53\x4f\x3d\x9d\x4e\xb1\x98\x6b\xf2\x7c\x24\x2a\x9a\x20\x35\x21\xc8\x74\x8a\x1c\xbd\xf8\x08\x61\x74\x2e\xc8\xe8\xfc\x37\x41\x46\x03\x47\xf5\x33\x43\xed\x2b\x18\xda\x6d\x82\xd9\x6f\x67\x96\x66\xd0\x32\x9f\x11\x01\x13\xed\xc5\xba\xf5\x4f\x44\x75\xa0\xd9\xfc\xf9\xbf\xf8\x8f\x0b\x22\x67\x9c\x49\x22\x0b\xe3\x43\xe8\xdd\x5f\xbe\xfb\xae\xf4\x15\x42\xef\x62\x22\x23\x41\x67\xca\xae\x6c\x07\xc9\x34\x8a\x88\x94\xa3\x34\x41\xae\x25\x7f\x34\x66\xae\x7a\x99\xf1\x42\x63\x08\xbd\xfb\xff\x09\x32\xd2\xed\xfc\xc7\x87\x98\x8c\x28\xa3\xba\x5d\x69\x76\x53\x3e\xdc\x77\x85\xb7\xfe\xfd\x87\xaa\xcf\xff\xf6\x66\x34\xc3\x02\x4f\x89\x22\x22\x5f\x7f\xf3\xaf\x34\x17\xbd\x48\xba\x73\xb3\xa2\xe5\x41\x97\x66\x7a\x03\x9f\x70\x72\x82\xb8\x18\xa3\x27\x32\x47\xb0\xa5\x48\x8c\x14\x87\xb5\x13\x44\xf2\x54\x44\x8b\xb3\xa7\xf0\xbe\xde\x66\xe5\x5f\x04\xf9\x3d\xa5\x82\xe8\x65\x52\x22\x25\xa5\x5f\xd5\x7c\x06\xc3\x93\x4a\x50\x36\xf6\x89\xf0\xef\x93\x46\x93\xb2\xbb\x73\xc5\xc4\xae\xf1\x94\xe8\x9d\xa6\xe7\x60\xdf\x28\xcc\x07\x0d\x49\xc2\xd9\x58\x22\xc5\xdb\x33\x35\x73\xd6\xd6\x98\x99\x79\xa1\x76\x62\x7d\xd6\x71\x8f\x44\x98\xa1\x21\x41\x9a\xdd\xd0\x98\x08\x12\x23\x2c\x11\x46\x32\x1d\x4a\xa2\xd0\x0b\x55\x13\xca\xf4\xdf\x33\x12\xd1\x11\x8d\x1c\xcd\xda\x43\x1b\xf8\xb8\x9c\x32\x8f\x92\x08\x3d\xf0\x67\x1a\x93\x18\x3d\xe3\x24\x25\x68\xc4\x45\x71\x1f\xf7\xd9\xc3\x44\xd3\x61\x3a\xa4\x0c\xf8\x89\xa6\xa5\xdb\x21\x7f\x72\xe4\xfa\x13\xd2\xfd\xa1\x94\xd1\xdf\x53\x92\xcc\x11\x8d\x09\x53\x74\x44\x89\x2c\xb7\xf6\x27\x6e\x8f\x10\x3a\x45\x9a\xce\x44\x28\xa0\x37\x67\x8a\x7c\x51\x12\x9d\xa2\x84\x3e\x11\xf4\xfe\x8a\x4a\x85\x3a\xb7\xbd\xf7\x27\xe8\xbd\x61\x02\x08\xd8\xef\xfb\x03\x50\x38\xfb\xfc\x3f\x1e\x3f\x51\x78\x5c\xe6\x24\xef\x3a\x9a\x45\xdd\x9b\xdb\x2f\x6f\xe1\x7f\xfe\xe0\xb7\x63\xd7\x6b\xf5\x95\x62\xee\x93\xfc\x32\xb1\x37\x49\xd3\xfb\x03\x08\x56\xbc\x3a\xa4\x5e\xab\x6d\x6f\x0e\xdd\x6e\xf9\xea\x90\x47\x76\x77\xe8\x39\xec\xfb\xfe\x78\x7b\x97\xc7\x36\x37\x07\x56\x70\xa4\x31\x65\x86\x03\x64\x0c\x41\x48\xcd\x04\xdc\xb0\x5b\x32\xd3\x6d\x2e\x12\x6f\x66\xde\x5d\xe2\xae\x08\x8f\x2a\x2d\x9c\x77\x42\xa7\x74\xd5\xfa\xf6\x58\xac\x45\x66\xcb\xc9\x59\x3a\x1d\x12\xa1\xc9\xe0\x36\x2b\xcc\x76\xa8\x37\xaf\x4a\x05\x23\x71\x83\x69\xfe\x9e\x12\x31\x5f\x32\xcf\x11\x4e\x64\xdd\x44\x29\x53\x44\xeb\x27\xa5\x9f\x47\x5c\x4c\xb1\xb2\x0f\xfc\xe7\xdf\xd6\x25\x84\xe2\x4f\x64\xd5\xfa\xf7\xcc\x6a\x46\x58\xc2\x36\x98\xa6\x89\xa2\xb3\x84\xa0\x19\x1e\x13\x69\x29\x92\x26\x4a\x9e\xc0\x63\x5a\x27\x22\xe2\x34\xbb\x5e\xa1\x07\x27\x56\xa4\xd2\x1c\xfa\x51\x26\xf3\x33\xf2\x45\x41\x4b\x7d\x06\x82\x05\x90\xc8\xbf\x2e\xf7\x40\xca\xcd\xf6\x8c\xe4\x42\x0d\x86\xf3\xb3\x27\xb2\xd0\x6f\xed\xce\xc1\x0c\x61\xa5\x04\x1d\xa6\x8a\xe8\x79\xeb\x36\x1c\xc7\x03\x86\x6f\xa4\x8f\x26\xac\xe1\xf5\x26\x1c\x53\x41\x22\x98\xdb\x3a\x07\x26\x7b\x4b\xcf\x5b\xf3\xfb\xb9\x99\xbd\x66\xff\x5a\xd8\xaa\xa0\x40\xb6\xe4\x7d\xd6\x67\xe8\x14\x5d\x76\xef\x2f\xba\xd7\x97\xbd\xeb\x4f\xe7\xe8\xfb\x39\x8a\xc9\x08\xa7\x89\x3a\x41\x23\x4a\x92\x58\x22\x2c\x08\x34\x49\x62\x2d\x50\xe9\xc1\x10\x16\x53\x36\x46\x5c\xc4\x44\xec\x8f\x8c\xa5\x5f\x09\x4b\xa7\xa5\x9b\x12\xbe\xcf\x47\x5f\x7a\x43\xcb\x4f\xd9\x4f\x85\x5f\xfe\x67\x81\xc0\x30\x63\xdd\xb7\xd7\xda\xab\x4a\x6c\x47\xac\xf7\x1f\x97\xe8\x76\x00\xb5\x3f\x68\xc8\x41\x43\xae\xa6\x4c\xd0\x90\xb7\xa2\xf0\xfe\x55\xa2\x1d\x4b\x03\x87\xbf\x46\x8e\x43\xdd\x3f\xae\x2b\xe3\x10\xda\x7e\xd0\x8d\x83\x6e\x1c\x74\xe3\xa0\x1b\x17\x49\x15\x74\xe3\xa0\x1b\xb7\x4e\x37\x6e\xb0\x8c\x41\x50\xf3\x05\xb5\x68\x42\x93\x58\x10\xf6\x41\x61\xf9\x34\x20\x5f\x48\x94\x1a\x39\x03\xdc\x34\xc5\x2f\x07\x5a\x91\xe0\x31\x29\x7e\x53\xf8\xc3\xf8\x75\xd6\x7e\x2d\x97\x0c\xd7\x7e\x35\xb3\x45\xac\xfd\x26\x58\x2e\x9a\xbd\x07\xdf\xd0\xb8\xf2\x69\xf8\x66\xc5\x1c\xdc\x33\x4b\x06\xeb\x1e\xa9\x1d\x95\x7b\xc0\x0a\xc0\x95\xcf\x08\xa2\xc4\x7c\x80\x95\x22\xd3\x99\x5a\xd3\x2a\x83\x51\xa2\xc5\xec\x65\x62\xf5\x35\x8f\x49\xd7\xf5\xf7\x1b\x32\xd2\x3d\x89\xd1\x70\x6e\x8f\xc5\x88\x08\xc2\x22\x52\xdf\xc2\x03\x96\x4f\x79\x0b\xab\x64\xf3\x42\x7f\xf2\x23\x17\xfa\xf5\xa3\x70\xc7\x15\x46\x7e\x08\x19\x7d\x93\x93\xfa\xc6\x5c\x78\x9b\x72\x9d\x37\x67\x0b\xdb\x90\x87\x06\xcb\xd9\xf6\x94\x6c\x6a\x67\xe3\x02\xc9\xb9\x54\x64\xba\xd2\xe2\x76\x3c\x84\xb0\x97\x64\x5b\x07\x5c\xba\xa7\xbf\x82\x53\x5f\x94\x3a\xc2\xf1\x5e\x83\x64\xbb\xb2\x97\xb7\x7d\x9e\x2e\x64\x79\xf9\x54\xef\xdd\xf2\x79\xee\xba\xa3\x98\x66\x41\x1e\xde\xf5\x20\xf7\x64\x81\xaa\x5d\x2b\x47\xed\x01\x0c\x60\x85\xed\xa1\xe8\x71\xc9\xce\x9f\x7e\xd5\x37\xda\x19\x0b\xad\x9a\x50\xe9\xd9\x2f\x51\xc4\x85\x11\x87\x63\x7b\xde\x8d\xf9\xa1\xf3\xd0\xb9\xef\x3e\x9c\xa3\x0e\x8a\xb1\xc2\xfa\x80\x0b\x32\x13\x44\x12\xa6\xc0\xb4\xa3\xdf\x57\x73\x34\xe5\x31\x49\x8c\x11\xe2\xa3\x96\xfe\xd1\x25\x56\xf8\x02\x2b\x9c\xf0\xf1\x19\xea\xc0\x9f\xfa\x65\x2a\x11\x4e\x24\x47\xd8\x6d\x2b\x12\xbb\x26\x30\x8b\x1d\x6b\xc1\x28\xe2\xd3\x19\x4d\x32\x6f\x53\x66\x6f\xa3\x2c\xa6\xcf\x34\x4e\x71\x82\xf8\x50\x73\x15\x79\xd6\x67\xdd\x67\xc2\x54\x8a\x93\x64\x8e\x70\x92\x20\xdb\xad\x7b\x00\xc9\x09\x4f\x93\x58\xb7\xeb\x46\x29\xe9\x94\x26\x58\x68\x99\xd6\x8c\xf6\xc6\xb6\x85\x1e\x26\x24\x1b\x2b\x8c\x4b\x53\x73\x8a\x9f\x88\x44\x54\xa1\x19\x97\x92\x0e\x93\xfc\xcc\x3f\xf6\x10\x8c\xfb\xe2\xaa\x07\x26\x9e\x48\x21\x6e\x78\xa8\xeb\xdc\x9a\xf4\x5c\x8f\x53\xcc\x18\x81\x8e\xb9\x9a\x10\x61\xbb\xb7\x0f\xbf\xb6\xb5\xe6\xf1\xfa\xfe\xb6\x7b\xd1\xfb\xd8\xeb\x5e\x2e\x9a\x6b\x1e\x3a\xf7\x3f\x2e\x7e\xfb\xcb\xcd\xdd\x8f\x1f\xaf\x6e\x7e\x59\xfc\xe5\xaa\xf3\x78\x7d\xf1\xc3\xe0\xf6\xaa\x73\xbd\xf8\xa3\xdd\x56\x8d\x2d\x3f\xfe\xc8\x76\x76\xb6\x8e\xce\x28\x14\x8c\xfa\x6b\x2c\xfb\xae\x8d\xfa\x27\x6f\xd7\xaa\x3f\xa2\x09\x18\x1d\x1a\x5b\xf4\x33\xab\x91\x7d\x13\xcd\xb0\x94\x46\x0e\x34\x23\x38\xeb\xb3\xcf\x5c\x68\x76\x3d\xe2\x9a\x23\x6a\x59\x51\x89\x34\x52\x94\x8d\xb3\x97\xce\x51\x3f\xfd\xee\xbb\xbf\x46\x57\x94\x3d\xc1\x27\xd2\x46\xe2\x04\x97\x47\x70\x79\xb4\xce\xe5\xf1\x87\x8a\x57\xf7\xef\x1e\x08\x36\xfe\x60\xe3\xdf\x9f\x8d\x3f\x98\xf8\xbd\x31\x04\xfb\xf6\xb6\x84\x08\x06\xb0\x60\xdf\xde\x9e\x10\xc1\xbe\xdd\xd2\x19\x87\xe3\x1d\xec\xdb\xc1\xbe\x1d\xec\xdb\xc1\xbe\x1d\xec\xdb\xc1\xbe\xfd\xd5\xd8\xb7\x5b\x18\xf2\x14\x8c\xfc\xc1\xc8\x1f\x8c\xfc\xc1\xc8\x1f\x8c\xfc\xc1\xc8\x7f\x3c\x46\x7e\x2d\xed\x7e\x28\x87\xfe\xef\x09\xf4\x4f\x0b\x97\x6c\x96\x2a\x10\x25\x79\xaa\xf4\x47\xdd\x3f\xec\x95\x25\x10\x00\xcd\x0c\xca\x9f\x88\xca\x1e\xd4\xa2\xed\x51\xc4\x8a\xff\xc2\xc5\xd3\x28\xe1\x2f\xd9\xc8\x3f\x11\xa5\x07\x7f\x67\x7b\x09\x60\x80\x01\x0c\x10\x05\xa8\x83\x5d\x43\x1d\xb4\xca\x44\x7d\x50\xfe\x7e\xd4\x2c\x3d\x70\xf4\xc0\xfc\x02\xf3\xab\xa3\xcd\x51\x32\xbf\x66\x53\x3b\x3a\xeb\xcd\xfe\x79\x7a\xd1\xde\x95\x0b\xee\x15\x29\xb9\xf5\xd1\x38\xb5\xc1\x36\x35\xb1\x34\x5e\xa8\xcc\x41\xae\x89\x62\x40\xca\x8a\xab\xa2\xf0\xf0\xd1\x68\x00\x85\x51\x1f\xfe\xae\x78\xe3\x79\xa1\x5f\x4b\x58\x4c\x88\x7a\xd9\x90\x50\x6f\xf8\xd2\x3c\x5c\xcc\xca\xe1\x6f\xbb\xaf\xf6\x4e\x0b\x57\x9a\xfd\x17\x18\x7e\x60\xf8\x81\xe1\xbf\x12\xc3\xdf\x80\xee\x41\x85\x5b\xb8\xd4\x2a\x61\x97\x9a\xe2\x2c\xad\x93\x74\xb1\x46\x96\x45\xe3\xb4\x8a\x15\x79\x14\x95\x89\x13\x55\x99\x12\x8b\xa9\x11\x95\xb9\x10\xdb\x25\x3f\x6c\x7a\x57\x37\x4f\x67\xf8\x44\x54\xe1\xe1\xa3\xd1\x3f\x0b\xa3\x3e\xfc\x65\xfd\xea\x61\x3b\xaf\xc5\xa7\xbf\xbe\xd4\x8d\x90\xab\xb1\x47\xd2\xbd\x75\xb1\xa6\xbd\xd9\x18\x5f\x41\xfa\x45\xc8\xb7\x58\x8b\x46\x6f\x2b\xc1\xe2\xad\x66\x54\x1c\x67\x0a\x45\xc8\x99\x08\x39\x13\x3b\x55\x79\x4b\xbf\x7e\x55\x39\x13\xc7\x9c\x24\x71\x78\xf3\x44\x30\x39\xb4\xdf\xe4\x10\x2c\x0e\xf6\x5f\xd0\xbe\xd7\x9e\x79\x10\xed\x83\xf6\xdd\x64\xe6\x41\xfb\x0e\xda\x77\x0b\x8f\x68\xd0\xbe\x83\xf6\x1d\xb4\xef\xa0\x7d\x07\xed\x1b\x05\xed\xdb\x6b\xe8\xb5\x52\x6b\xdb\xe0\xdc\x3c\x2a\x9b\x43\x3e\xf5\x81\x3b\xe0\x8b\xe9\xa8\x05\xb6\xdb\x24\x43\x15\x3e\x39\xa5\x7e\x5d\xc4\xc4\x5a\x2d\xfd\x32\x1f\x6c\x17\x98\xe4\x6f\x96\x55\xac\x50\xd8\x17\xde\x3b\x8a\x18\x81\x85\x51\x87\xb4\xd4\x4d\x45\x9e\x57\x12\x1a\xf6\x44\x81\x23\xb9\xbe\xd6\x5f\xa8\x37\xac\x4b\x06\x1d\x72\xfb\x14\xba\xa3\xd1\x1d\x8f\x47\x67\x3c\xbc\x6c\xf1\x16\xc5\x89\x20\x4d\x78\x63\x08\x17\x6f\xb8\x78\xc3\xc5\x1b\x2e\xde\x70\xf1\x86\x0c\x7c\xfb\xfc\x5e\xe5\x89\x92\x30\xd1\x08\x4a\x6b\xe7\x35\x1c\x2a\x44\x09\xef\x06\x5e\x55\x91\xa1\xfc\x36\x25\xf2\x6f\x47\x29\x53\x1c\xa2\x28\x43\x10\x2a\x8e\x44\xa8\x78\x93\xb6\xa4\x20\x29\x05\x49\xa9\x9a\x32\x8d\x24\xa5\x3e\x7b\x98\x68\x3a\x4c\x87\x94\x65\xde\x3c\xb7\x43\xfe\xe4\xc8\xf5\x27\xa4\xfb\x43\x29\xa3\xbf\xa7\x24\x99\xe7\x3c\x49\x96\x5b\xcb\x90\x3d\xd1\x29\xd2\x74\x26\x42\x01\xbd\x39\x53\xe4\x8b\x92\xe8\x14\x25\xf4\x89\xa0\xf7\x9a\x31\xa3\xce\x6d\xef\xfd\x09\x7a\x7f\x05\x05\x86\xd0\x2c\xc1\x4c\xbe\x6f\x8d\xe3\x26\xc0\x2a\xef\x0b\x56\x39\xa0\x2a\x07\x54\xe5\xa6\x04\x0a\xa8\xca\x01\x55\xf9\x78\x51\x95\x77\xa6\x1f\x6e\x88\xcb\xf9\x2a\x9a\xe2\x71\xfa\xb2\x83\xa6\x88\x82\xa6\x18\x34\xc5\xa0\x29\x06\x4d\xf1\x48\x34\xc5\x76\x50\x38\xa8\x89\x41\x4d\x0c\x6a\xe2\x0e\x89\x13\xd4\xc4\xa0\x26\x06\x35\x71\x41\x4d\x3c\x5e\xcf\xe1\x5f\x83\x3e\x18\xf4\x41\xff\xfb\xe3\xd3\x07\x83\xea\x14\x54\xa7\x6a\xca\x1c\xa7\xea\xd4\x1a\xd9\xe7\x18\x43\x8a\x82\x52\xd8\x9c\x10\x41\x29\x6c\x4c\xaa\xa0\x14\x2e\x21\x4e\x50\x0a\x83\x52\x18\x94\xc2\xc6\x4a\xe1\x31\xb9\x0b\x83\x76\x18\xb4\x43\xff\xfb\xa0\x1d\x06\xed\x30\x68\x87\xc1\xb1\x16\x54\xc3\xa0\x1a\x06\xd5\x30\xa8\x86\xab\x88\x13\x54\xc3\xa0\x1a\x7e\x5d\xaa\x21\x79\x26\x4c\x49\x28\x86\xe8\x2b\x4a\xef\x66\x5c\xd6\x2b\x78\x3e\x77\xa8\x50\xee\xa0\xcd\x62\x51\x42\x40\x6d\xfb\x0d\x4d\xb0\x44\x3c\x8a\x52\x51\x3a\x03\x65\xf5\xee\x42\x10\xac\x08\xb4\xa0\x5f\x3c\x06\xb5\x6e\x71\xba\x87\x02\x20\x1e\xf2\x78\x61\xb7\x9b\x83\x50\xf5\xcb\x72\x31\x6b\x67\x53\xff\x3d\x25\xcd\xb4\xda\x3d\x6e\x6a\x88\x86\x36\x9b\x71\xb1\xda\xd9\x8b\x2d\xaa\xbf\xe3\x5d\xbf\x50\xab\x7f\xa3\x9d\x9f\xb5\xa2\x5f\x3e\x8a\x18\xe8\xea\x79\x1f\xea\x08\x54\x2f\xf2\x1b\x0b\xbb\x7d\xf5\x73\x5e\xb7\xc6\x2d\x3b\xeb\x95\xc5\x0d\xdb\x7d\xc1\x1d\xc5\x11\x7f\xbd\x1b\xae\x76\x5d\xc3\x09\xff\xea\x6e\xf2\x19\x16\x84\xa9\x41\x93\x82\xa6\x0a\xcb\xa7\x1d\x9f\xf9\x42\xa1\x89\x8d\xce\x3c\xb4\x70\x34\x67\x7e\x71\xbe\x87\x3d\xf3\x8d\x57\x3b\x70\x82\xdd\x72\x82\xaa\x85\x6f\x03\x27\x68\xf7\x99\x0e\x47\x1a\xfe\x85\x4d\xbd\xde\xa6\x3e\x1e\x5d\xf4\x18\x36\xf8\xeb\xaa\xa2\xaf\xbe\xc9\xdb\xa9\xa5\x65\x35\xdf\x1a\x6f\xf1\x07\x41\xc7\x63\x22\x8c\xa5\x39\xd2\x5b\xd1\xba\x33\x97\x80\x9e\xe6\x55\xce\x56\x6e\xeb\xec\xd1\x63\xd8\xd2\xd9\x60\xcd\xd8\xbf\x9a\xbd\xbc\x30\xef\x96\x6c\xe2\x22\xd0\x82\x20\x11\x7f\x26\xa2\xf1\xce\xbe\x23\xb0\x9d\x81\x79\xcf\x04\x79\xa6\x3c\x95\xc9\xfc\x54\xa4\x0c\xb9\x9b\x00\x65\x7d\x99\x28\x9b\x17\x9a\x24\x88\xb3\x64\x8e\xa4\xc2\x42\xb9\x9f\xd9\x18\x8d\x04\x9f\xc2\x11\x49\xb0\x54\xe8\x89\xf1\x17\x86\x46\x98\x26\xa9\x20\x68\xc6\x29\x53\x67\x7d\xd6\x63\xe8\xce\x8c\x11\xaa\xa2\x9c\xa0\x54\xea\x83\x15\x61\xc6\xb8\x42\xd1\x04\xb3\x31\x41\x98\xcd\x6d\x79\xc1\x7c\x9b\x20\x2e\x50\x3a\x8b\xb1\x22\xd0\x45\x09\x52\x32\x1b\x23\x84\x1d\x50\x89\xa8\x44\xe4\x8b\x12\x64\x4a\x92\xb9\xee\x43\x1f\x04\xc5\x91\xa5\x8f\x19\xaa\x2d\x56\x46\x84\xe0\x42\x42\x3d\x95\xe1\xfc\x9f\x98\x29\xca\x08\x02\x4f\x88\x34\x21\x05\xa7\xe8\x8a\x4b\xf0\xcb\xfe\xf8\x77\x89\xa2\x24\x95\x8a\x88\x13\x34\x4c\xc7\x12\x51\x86\x66\x09\x56\x23\x2e\xa6\x7a\x84\x94\x49\x85\x87\x34\xa1\x6a\x7e\x82\xa6\x38\x9a\x98\xb6\x80\x06\xf2\xa4\xcf\x62\xfe\xc2\xa4\x12\x04\x67\xbd\xbb\x1f\xd1\x37\xfe\x6f\x66\x37\xc8\x6f\x4f\xa0\xa8\x1a\x9d\xce\x92\xb9\x3f\xfc\x7c\xf9\xcd\x9a\xe8\x46\x48\x8c\x86\x24\xc2\xa9\xb4\x91\x51\x4a\xcc\x11\xf9\x32\xc1\xa9\x84\xb5\xd3\xd3\xb3\x15\x69\x22\x3e\x9d\x25\x44\x11\x44\x47\x48\x09\xad\x79\xe0\x31\xa6\x9a\x74\xf7\x84\x34\xe0\x68\x76\x01\xed\x11\xf8\x0d\xfc\x6b\x53\x2e\x08\x8a\x89\xc2\x34\x59\x1a\x2d\x67\xdf\xcd\xda\x3a\x0a\xd5\xf3\x95\x78\x5e\x50\x27\xf7\xca\xc8\x8b\xdb\xb8\x7d\x9c\x3c\x81\xe0\xa5\x1d\x08\x29\xcc\x46\x55\x45\x38\xd9\x52\x5e\xb9\xb3\x83\x0a\xc7\x37\x1c\xdf\xf2\x48\x0e\x7f\x7c\xcd\x5e\x6c\xe9\xf9\x3d\x58\x62\x73\xb3\x72\xca\x57\x54\xaa\xec\xc9\xe3\xc0\xb2\xca\x86\x7b\x88\xa8\xf4\x37\x79\x58\x43\x10\x77\x08\xe2\xae\xa5\xcc\x71\x06\x71\xb7\x26\x5c\x31\x04\x3c\xef\x29\xe0\x99\xca\x10\xf1\x1c\x22\x9e\x9b\x12\x28\x44\x3c\x87\x88\xe7\xe3\x8d\x78\x5e\x53\x77\xd8\x30\xff\xb5\xce\x35\xb7\x8e\xfe\xf0\x89\xa8\x23\x55\xfa\x83\xe6\x10\x34\x87\xa0\x39\xec\x5c\x73\xe0\xc2\x79\x30\x5a\x50\xb5\x6c\x57\x5c\xda\xbd\xfd\x2e\x26\x09\x51\xa4\xde\xd6\x4a\xc4\x54\x2b\x44\x46\x02\xa1\x4c\x8b\xaa\x63\x41\xa4\xdc\x96\xcd\x66\x0d\x1f\x29\xb3\xcd\xc6\x1f\x8c\xac\x81\xfb\xd6\x4c\x2d\x70\xdf\x37\xc6\x7d\x8f\xca\x6d\xe0\x71\xa8\x43\xf9\x0d\xb2\x5b\x65\x96\xd6\x4b\xea\x8f\x26\xb6\x21\x0f\xb6\x30\x3b\x5c\xab\x5b\x8a\x67\x87\xdb\xee\xf3\x2d\x6f\x19\xd3\xd7\x91\x5e\x31\x66\xf0\xe1\x7e\x09\xf7\x4b\xcd\xd4\xc2\xfd\x12\xee\x97\xd7\xbb\x5f\x1c\x7b\x6a\x95\x53\x9a\x8b\x71\xc1\x64\xb4\xec\x22\x3a\x54\xb0\xeb\x71\xdd\x3a\x87\x0d\x1d\x79\x7b\x57\x4e\x7b\x0e\x68\xdb\xe2\x77\x43\xc8\x6e\x08\xd9\x3d\xaa\x90\xdd\xc0\xb7\x8f\x80\xcb\xb5\x2e\xb8\xf5\x38\xe2\x59\xc3\xde\x3e\x8a\xbd\xdd\xb6\xc8\xcf\x56\x07\x7b\x1e\xd5\x9e\x3e\x50\xac\x67\x30\x7f\x04\xf3\x47\x35\x65\x42\x58\x64\x80\xb7\x5d\x9c\x56\x88\xf6\x0c\xd1\x9e\x21\xda\x73\x97\xc4\x09\xd1\x9e\x21\xda\xf3\xab\x8d\xf6\x6c\x79\x80\xe7\x51\x69\x0c\x41\x5b\x08\xda\x42\x70\x96\xae\x39\xb5\xa3\x93\xd1\x77\xc5\x99\xdd\xdb\x2d\x8a\xf0\x3c\x2a\x6e\xfb\x1a\x01\x9e\x81\xfd\x06\xf6\x5b\x4d\x99\xa3\x64\xbf\xed\x31\xa4\x87\x58\xc8\x85\x58\xc8\xa3\x62\xc6\x07\x0f\x85\x0c\x9c\x38\x70\xe2\x6a\xca\x04\x4e\x7c\xfc\x51\x83\xc6\xab\x3a\x98\x25\x98\x0d\x68\xec\x85\x0e\x7e\xf8\x57\x6e\xac\xd8\x97\x67\x53\x1f\xad\xd8\x54\x21\xcd\xaa\x7e\x8a\xdf\xf4\x2b\x49\xee\xe8\x40\x7c\xa8\x87\xb1\xb2\x1e\xab\xf1\x8d\xdc\x26\x98\xf5\xe2\xe3\x00\xbb\xa9\x9c\xfe\x21\x9c\xa1\x6f\x2f\xd4\x70\x9b\x4b\x0a\x2b\x70\xba\x61\xca\x8c\xd9\x35\xaf\x26\x5b\x30\x2a\xb7\x63\xa2\xdb\x5c\x59\xde\xc4\xbc\x5b\xcb\x5d\x46\x1e\x51\xda\x37\xed\xe0\x8b\x0b\xa5\x26\x83\xb7\xa9\xe1\x84\x83\xb7\xa9\xbd\xde\xa6\x06\xcb\xb8\x17\x17\xf2\x81\x8f\xe7\x41\x65\xd6\xa3\x96\x54\x83\xa0\x8a\x82\x58\x17\xc4\xba\xfa\x59\x07\xb1\x2e\x88\x75\x41\xac\x0b\x62\x5d\x10\xeb\x5e\x5f\xac\x6b\x30\xcd\xaf\x36\xca\x60\x95\xa8\xda\xbc\xf4\x90\xc9\xf1\x81\x54\xc0\x74\x96\x70\x1c\x2f\x8b\xf4\xca\x85\xc9\xdf\x50\x2e\xb8\x2d\x91\x40\x4d\xeb\xf9\x6b\xc7\x20\x80\xe6\xa3\xfd\xca\xf2\x9f\x16\x27\xde\x16\x6f\x41\x11\xbe\xb2\xa5\x7b\xfb\x28\xdc\x00\xaf\xb5\xb9\xdf\x24\xcc\x4d\x38\xb1\x0d\x4f\xec\xe1\xf2\x17\xab\x4f\xf1\x1a\x56\x12\xf9\xb7\xe3\x3a\xc6\xa1\x76\x45\xc0\xa8\xaa\x98\x5a\x88\x36\x09\x49\x9a\x21\x9b\xf1\xcd\x99\xda\x42\x36\x63\xc8\x66\x0c\x86\xc8\xe5\xd3\x0e\x86\xc8\x37\x91\xcd\xb8\xbe\x32\xb1\x61\x72\xe3\x61\xd4\x8a\x23\xb3\x0e\x04\xb5\x22\xa8\x15\x15\x53\x0b\x6a\xc5\x57\xa8\x56\xb4\x83\xc2\x41\xa7\x08\x3a\x45\xd0\x29\x82\x4e\x11\x74\x8a\x9d\x93\x31\xe8\x14\x0d\x74\x0a\xf8\x64\x21\x86\xd7\x56\x30\xd6\x54\x2c\x56\xe0\xa8\x1c\xad\xcf\x31\x68\x14\x41\xa3\x08\x1a\xc5\xc1\x35\x8a\xd6\x4c\xc8\xb2\xcf\x15\x73\xba\x77\x0b\x52\x02\x74\x6f\xdf\x7c\xdc\x88\x06\xd0\xd2\x0a\x61\xa2\xa8\xa0\x65\xbb\x4e\xbf\xea\xeb\x28\x26\x9a\x1c\xc4\xf2\x3c\xd8\x1a\x45\x5c\x18\xa6\x1c\xdb\x5d\x6e\xe4\x89\xce\x43\xe7\xbe\xfb\x70\x8e\x3a\x28\xc6\x0a\xeb\x6d\x2d\xc8\x4c\x10\x49\x98\x02\x59\x8d\x40\x1c\x3d\xc0\xea\x27\x46\xaa\xf8\xa8\xef\x1f\x74\x89\x15\xbe\xc0\x0a\x27\x7c\x7c\x86\x3a\xf0\xa7\x7e\x99\x4a\x84\x13\xc9\x11\x76\xa4\x27\xb1\x6b\x02\xb3\xd8\x1d\x28\x0c\x68\xf1\x34\xc9\x94\xd3\x4c\xbd\xa0\x2c\xa6\xcf\x34\x4e\x71\x92\xa5\x27\xf4\x59\xf7\x99\x30\x95\xe2\x24\x99\x23\x9c\x24\xc8\x76\xeb\x1e\x70\x00\xf4\x43\x92\x8d\x52\xd2\x29\x4d\xb0\xd0\xec\xd8\x8c\xf6\xc6\xb6\x85\xb4\x62\xec\xc6\x0a\xe3\xd2\xd4\x9c\xe2\x27\x22\x11\x55\x68\xc6\xa5\xa4\xc3\x24\x3f\x00\x8f\x3d\x04\xe3\xbe\xb8\xea\x81\xcc\x16\x29\xc4\x0d\xe7\x70\x9d\x5b\x05\xc6\xf5\x38\xc5\x8c\x11\xe8\x98\xab\x09\x11\xb6\x7b\xfb\xf0\x6b\x8b\x5f\x8f\xd7\xf7\xb7\xdd\x8b\xde\xc7\x5e\xf7\x72\x51\xfe\x7a\xe8\xdc\xff\xb8\xf8\xed\x2f\x37\x77\x3f\x7e\xbc\xba\xf9\x65\xf1\x97\xab\xce\xe3\xf5\xc5\x0f\x83\xdb\xab\xce\xf5\xe2\x8f\x76\x5b\x35\x16\xe5\xfc\x91\xed\x43\x96\x73\x6f\x37\xc0\xf4\xb0\x87\x4b\x61\x95\x4a\x53\x53\x46\x90\x31\x95\x0a\xd8\x7f\x13\x29\x6c\x35\x94\xc7\xd1\x4a\x5f\xa1\xb0\x59\x90\xc5\x82\x2c\x16\x64\xb1\x63\x93\xc5\x0e\x67\x12\x38\xa2\x30\xc5\xbf\x1e\xd7\xdd\x13\xca\x2e\x04\xe6\xdc\x7e\xe6\xdc\x3a\xd7\x5b\x6b\x4c\xe7\xc7\x08\xe9\x1a\x9c\x8a\xcd\x09\x11\x9c\x8a\xcd\x69\x15\x9c\x8a\x4b\x88\x13\x9c\x8a\xc1\xa9\xf8\x15\x3b\x15\x8f\x32\x36\x31\xa8\x12\xee\xb9\xa0\x4a\x04\x55\xe2\x8d\xaa\x12\xad\xa1\x70\xd0\x23\x82\x1e\x11\xf4\x88\xa0\x47\x2c\x27\x4e\xd0\x23\x82\x1e\x11\xf4\x88\x63\x8b\x47\x3c\x2e\x4d\x22\x68\x11\x41\x8b\x68\xb7\x16\xd1\x9a\x09\x1d\x8f\xb7\xb8\xd9\x7c\x42\xe4\x5e\x88\xdc\x0b\x91\x7b\xb5\x91\x7b\x6f\x54\x93\xdf\x95\xfc\xe6\xde\x6e\x5b\x40\xe2\x71\x89\x5f\xa1\xba\x58\xf6\x6b\x10\xc6\x82\x30\xf6\x95\x0a\x63\x2d\x02\x51\x6c\x45\x91\xb4\x29\x56\xd1\x04\x0f\x13\x32\xc8\x6c\x59\xb2\xa9\x7a\x7f\x45\xa5\x92\x28\x4a\xa5\xe2\xd3\xfa\xcb\xe5\xb3\xeb\xa1\x93\x75\x70\xc1\xd9\x88\x8e\x53\x73\xb7\xfc\x06\x5b\xdf\x3b\xd1\xb9\x80\x3b\x9f\x91\x55\x7e\xc5\x8a\xd6\x8f\xe2\x5a\xaa\x1e\xfa\xa1\x6e\xa7\x75\xf4\x91\xdc\x76\x69\x95\x09\x2d\x42\x0e\xee\xba\xf7\x37\x8f\x77\x17\xdd\x73\xd4\x01\x11\x0b\xdc\x09\x66\x2b\xd0\x7f\xea\x49\x21\x85\xe5\x53\xbe\x96\xc2\x6c\x73\x09\x72\x36\xf8\x2f\xb4\xc8\x8f\x4e\xd1\xc5\xd5\xe3\xfd\x43\xf7\xae\xa6\x41\xbb\x51\xa0\x54\x2a\x99\xce\x12\xac\x48\x8c\x9e\xd2\x21\x11\x8c\x68\x69\x27\x4a\x52\x2d\xdc\xe4\x5e\x0d\xd3\x68\xf7\xbf\xbb\x17\x8f\x0f\xbd\x9b\xeb\xc1\x4f\x8f\xdd\xc7\xee\x39\x72\x3b\x4e\x37\xab\xc7\xa5\x47\x11\xcf\x19\x9e\x6a\xc5\x4a\x7f\x91\x17\x67\xfd\x3d\x25\x29\x41\x58\x4a\x3a\x66\x53\xc2\x54\xb9\x45\x37\xe0\xab\xce\xf7\xdd\xab\x62\xcb\x13\x82\x7e\xfc\x7b\x3e\xa8\x04\x0f\x49\x62\xdd\x2c\xe0\x39\xd0\x1b\x3d\xef\xc8\xfa\x5f\x52\x43\xd5\x9f\x1e\x3b\x57\xbd\x87\x5f\x07\x37\x1f\x07\xf7\xdd\xbb\x9f\x7b\x17\xdd\x81\x15\x96\x2f\x3a\xba\xdf\x42\x4f\x56\xa6\x46\xbf\xa7\x38\xd1\x4a\x17\x1f\x81\xdf\x82\x46\x04\xbd\x4c\x08\x43\x29\x83\x1d\x67\x34\x39\xad\xde\x65\x9d\xea\x53\x66\x66\x74\x7b\xf5\xf8\xa9\x77\x3d\xb8\xf9\xb9\x7b\x77\xd7\xbb\xec\x9e\xa3\x7b\x92\x80\xae\xe3\x88\x0e\xab\x38\x4b\xd2\x31\x65\x88\x4e\x67\x09\xd1\xd4\x30\xba\xdc\x90\x4c\xf0\x33\xe5\xc2\x1e\xdd\x31\x7d\x26\xcc\xd0\x11\xce\x2c\xb4\xef\x74\x8a\x81\x47\xba\x9b\xeb\x8f\xbd\x4f\xe7\xa8\x13\xc7\xd9\x1c\x24\xb4\x51\xd8\x39\x2f\x5c\x3c\x8d\x12\xfe\x72\x5a\x1c\xb6\x66\x0e\xd0\xbd\xd9\x44\xfc\x99\x08\x41\x63\x52\xda\x47\x9d\xfb\xfb\xde\xa7\xeb\xcf\xdd\xeb\x07\xa0\x98\x12\x3c\x91\x68\xc2\x5f\xc0\x42\x0f\x33\x04\xc3\xfd\x33\xa6\x09\x74\xe6\x16\x8b\x33\xf4\x32\xa1\xe0\xd5\xa1\xd2\x27\x98\x51\x3b\x45\xca\x5e\xdd\xe8\x5c\x38\x78\x8b\xda\x58\xf9\x24\x2d\x3e\x51\x3a\x16\xcb\x1e\x28\xec\xf2\xc5\x07\x57\xed\xd6\xc5\x37\x4a\xdb\xad\x5e\x07\x5d\xd8\x2f\xf5\x33\xcd\xd7\xba\xb1\x0a\x5a\xa4\xe1\x9a\xc2\xc3\xba\x1a\xa8\xf1\x81\xf9\x4a\x28\xb8\xd4\x9c\x98\xef\x78\xe2\x71\x69\xa3\x8d\xc5\x88\xbc\xe0\xea\x91\x0b\x14\xc7\x91\x78\xf7\xba\x12\xc5\x61\x8f\xc6\xa1\xb5\x86\x20\x2f\x05\x79\x29\xc8\x4b\x41\x5e\x0a\xf2\x52\xf6\x6f\xcf\xf2\x04\x51\x82\x46\xf2\x43\xb6\xaf\xf6\x0b\xca\x4a\xa4\xde\xb0\x8a\x4e\x09\xb2\x3d\xdb\x93\x5a\x2b\x84\x64\xa5\xee\x97\x5a\xcc\x3f\x11\x95\x3d\xf8\xd9\x34\x7c\x14\xc2\xc4\x2f\x96\xa3\x64\x83\xff\x44\x94\x1d\x7f\x48\xe8\x0f\x09\xfd\x35\x53\x0b\x5e\x81\xed\xbd\x02\x5c\x20\x39\x97\x8a\x4c\x8f\xc4\x3f\x10\x93\xd9\x62\x87\xa5\x89\xc1\x33\x26\xbe\x6b\x21\x1c\xd9\x78\xce\x6d\xec\x40\x42\x9e\x49\x02\x82\xac\x12\xf8\x99\x08\x69\xc5\xb3\xa1\x20\xf8\x49\xcb\xb4\x31\x7f\xf1\x85\xb3\x98\x28\x4c\x93\x7d\xe8\xcf\x4d\xc2\x95\xff\xfa\x97\x57\xbd\x0f\x8f\xf7\x0a\x0c\x37\x60\x70\x21\x87\xcb\xe2\x2b\xbc\x2c\x8e\x31\x88\x27\xdc\x81\x6d\xb9\x03\x35\xb9\xe3\x81\x0b\xe7\xfb\xf0\xaf\x82\x51\xee\xdf\xfb\xd2\x0f\xef\x20\x3f\x4a\x2e\xbb\x08\x35\x97\x8a\xbb\xb0\x7c\xbf\xd9\x20\xc0\x15\x37\xa2\xf7\xc6\x51\xe8\x83\xde\x78\xdb\xe4\x9a\xbe\xf3\x0d\xfb\xee\x9e\x98\x12\x85\x63\xac\xb0\x3e\x42\x63\xa2\xce\xd0\x0d\x83\xdf\x1e\xb0\x7c\x3a\x41\xee\x5e\xd7\xbc\x33\x0f\xc5\xf0\x53\x74\xf6\xc4\x2a\x1b\xda\xac\x5e\x3b\x78\xb3\x8d\x1c\x3d\x68\xe9\xbb\x9c\x5a\x10\xbc\x42\x3a\x76\x9b\x71\xf3\xdc\xdb\x8d\xa2\x9d\x77\x77\x2b\x9b\x16\x8f\xf8\x62\x3e\x6c\x7c\xf3\x4e\xaf\xe9\x14\x86\x1e\xee\x60\xf3\x2f\xdc\xc1\xe1\x0e\x0e\x77\xf0\x32\xca\x84\x3b\xf8\x88\x03\xe0\x2b\xae\xac\x57\x8d\x80\x6f\x62\x56\x30\x36\x85\xdc\xa0\xb0\x26\x50\x6f\x6e\x43\x58\x09\xaf\x55\x21\xb5\xac\xc4\xd6\xca\xdf\xa1\x47\x12\xac\xe6\xcd\xf2\x10\xf8\x5a\x3b\x15\x56\x0c\xc2\x4b\xb0\x2a\xec\x51\xa2\x79\x7b\xe2\xcc\x36\xb2\x0c\x56\x70\xc9\x60\xca\xcc\x9d\x94\x67\x7b\xcb\x03\xec\xb0\x35\x27\xba\x8d\x64\xe3\x4d\xcc\x13\x6e\x9c\xcc\xe2\x11\xa5\x25\x8b\xba\x17\x18\xae\xd7\xb1\xe3\xbf\x3e\xf4\x16\x79\xbb\xc8\x5b\x01\x5c\x6a\xad\x43\x12\xc0\xa5\x0e\x01\x2e\xd5\x60\x19\xf7\x82\x18\x77\xe0\xe3\xf9\x9a\xaa\xc3\xf1\x38\x21\x8f\x4c\x67\x38\x2a\x7d\x21\xf8\x20\xf7\x6f\xff\x0c\xa6\xc2\x60\x2a\xac\xa6\x4c\x30\x15\x7e\x5d\xe1\x5a\xbb\xba\xef\xdd\xdb\xaf\xed\x85\x3c\xb2\x9b\x39\x38\x21\xc3\x25\x1c\x2e\xe1\x70\x09\x87\x4b\x78\x57\x14\x0e\xfe\xba\x35\x95\xee\xa3\xf0\xd2\x1d\xd9\xb5\x1e\x9c\x74\xe1\xc6\x77\x2f\x07\x97\xd6\xaa\x79\x06\x97\x56\x70\x69\x05\x97\x56\x70\x69\x05\x97\x56\xf6\x7d\x70\x69\x1d\x74\xb7\x7e\xb5\x66\xbb\x6a\x8d\x81\xc7\x64\x50\x81\x24\x93\x7d\x35\xf0\xd3\x06\x0b\xdf\x16\xdc\x77\x85\x5f\x7c\x5f\x5e\xe1\x87\xbc\x5c\x0e\xf4\x4b\xe3\xb5\xf3\xf0\x97\x99\x13\x79\x4c\x1a\xe7\xdd\x17\x1e\x6e\x7b\x5c\xa0\x9b\xa8\x51\x3d\xfc\x91\x1f\x20\xcf\xbe\xbc\x13\xde\x58\xf4\x59\xcd\xae\x7e\x8b\x96\xba\x8a\x33\x1a\xcc\x76\x2b\x09\xf5\x86\x01\x07\x2c\x13\x3e\xc0\x78\x0e\x7f\x87\x39\xe0\xbf\x41\xc5\x4d\x56\xfd\x5b\x7e\x9f\x55\xff\x9e\xdd\x6a\xd5\x3f\xef\xa7\xa4\x74\xf3\x4b\x0d\xec\x68\xfe\xd3\x47\x12\xee\xee\x0f\xf9\x10\xb6\xb4\xda\x8d\xf1\xc6\x2e\xb6\xa5\x9b\xfc\xcd\x5d\x6f\xcb\x8e\x6c\xb8\xe4\x1a\x92\xeb\xad\x5e\x75\xa1\x26\xf4\x32\x2b\x5e\x28\xba\xdc\x42\x2b\x45\x30\x22\x06\x23\xe2\x31\x1a\x11\x4d\xf0\xc1\x60\x86\x05\x61\xaa\x42\xb7\x28\x5f\x27\xf0\xb8\x5f\xa4\xd3\x49\x1d\xd0\x00\xd2\xa2\x3d\xb2\x17\x72\x76\x55\xbd\xb1\x40\xf9\x92\xf6\xf2\x86\xed\x6c\x2d\xd7\x47\xda\x63\x66\x7b\xab\x52\x7a\x30\x42\x05\x23\x54\x79\x9e\x87\x33\x42\x6d\x40\xf7\xe0\x2c\x5a\x7a\x55\x7d\x25\x86\xb4\x96\xdf\x5b\x6d\xb2\xa3\xbd\xd5\x9b\x2b\xd8\x97\x76\x40\xae\xb7\x7a\x8b\xbd\x96\x49\xf9\xf0\x5a\x7a\xb0\xa4\x05\x4b\x5a\xb0\xa4\x05\x4b\x5a\xb0\xa4\xf9\xdf\x07\x4b\xda\x32\xba\x1f\x4c\x3d\xb1\x22\x90\x5f\x66\xf5\x5f\xf9\xe7\x4c\x2d\xf1\x55\x8b\x65\x19\xac\x17\x82\xc0\xa9\xe0\xc2\xe6\x3f\xee\xa2\xfc\x2a\x56\x05\xa1\x17\x2a\x1a\x2c\xd1\x45\x4c\x56\xd1\xad\x79\xfa\xb8\xca\xb8\x2f\x0c\xfa\xb0\xf9\xaf\x8b\x0b\xdf\xec\x00\xb9\x95\xa1\xa6\xc4\xa6\x57\xc7\x51\xcb\xdd\x7c\x94\x5f\x0c\x12\xbd\xd0\x24\xd1\x92\x8c\x95\xda\x5a\x22\x8d\xbe\x7a\x56\x5c\xed\xca\xbf\x6a\x6e\x5c\x15\x77\xa8\x62\x09\x4d\xac\xe3\xbb\x2a\xc3\xec\x36\x1b\x94\x90\x05\xbd\x6f\x85\x39\xfd\x6d\x70\x82\x4f\x44\x1d\x8a\x0d\x6c\x7a\xf6\x97\x9e\x7b\x41\x46\x44\x10\x16\x91\x16\x66\x64\xad\x93\x2a\xf8\x8b\x99\xa4\xcd\x13\xcc\xea\x94\xfb\x53\x55\xdc\xea\x69\x05\x51\x37\x54\x6f\x0e\xd5\x9b\x43\xf5\xe6\xf2\x51\x0f\xd5\x9b\xdf\x46\xf5\xe6\x06\x5c\x76\x07\xb6\xbd\xe5\x06\xdb\x96\xea\x5d\xee\xed\x77\x31\x49\x88\x22\xb5\x82\xd2\x25\xfc\xfc\x5a\x82\x92\xe9\xfd\x6d\xc8\x4a\x66\x2e\x41\x5c\xfa\x6a\x94\x25\xb7\xe0\xad\x50\x96\xcc\x59\xf3\x75\x26\x48\xae\xf0\x94\x6b\x93\x51\xf1\x36\xcd\x2c\x47\x91\x40\xd1\x1e\x3b\xcb\xde\x2f\xc5\x43\x33\x87\x60\x43\x5a\x1c\x49\xb0\x21\x6d\xc7\x16\x0b\x5f\x56\xa0\x30\x1d\x9c\x55\x6e\x22\x60\x15\xf8\xe5\x25\x3c\x7e\x9c\x5c\xb3\x3c\xf6\x63\xe6\x9d\x5e\x6b\xed\x60\x22\x5f\x2f\xfb\x5c\x38\xe2\xcd\x26\x6e\x43\x7f\x8e\x77\xde\x6d\xb9\x36\xea\x8e\x75\x9b\x2f\x8f\x62\x1d\xad\xe3\xf5\x48\x1c\x13\xfb\x7f\x15\x97\xc4\x9b\x13\x93\xbf\x3a\xa3\x41\xf0\xb1\x04\x1f\x4b\xf0\xb1\x04\x1f\x4b\xf0\xb1\xa0\x4d\x7d\x2c\xbb\x92\xb4\x8e\xda\x21\x71\x9c\xa2\xd2\x61\x3d\x12\x41\x5a\x3a\x76\x69\xa9\x2d\x4a\xe1\x71\xb9\x58\xb6\x2c\xab\xdc\x16\xbd\xf0\x2d\x19\x07\x8f\x4b\x47\x6c\x9d\x39\xf0\xab\x63\x7c\x9b\x99\xfe\x8e\x76\xba\x41\x2b\x0e\x5a\x71\xd0\x8a\x83\x56\x1c\xb4\x62\x14\xb4\xe2\xb5\xb5\xe2\xb7\x24\x28\x1e\x9d\x86\x1c\x64\xc5\xd7\x9e\xf0\x57\x26\x2b\xb6\xc5\x26\x50\x77\x72\x5b\x6a\x19\xf8\x3a\x03\x8a\x8e\xf8\x26\x08\x39\xaf\xc8\x5b\xba\x10\x70\xf3\xb5\xf0\xd1\x96\x07\xdc\xbc\x3d\xbb\xea\x11\xf3\xc8\x90\x0d\x1c\xc4\xca\x1d\x4d\x37\x98\x20\x83\x09\x32\x98\x20\x83\x09\x32\x98\x20\x51\xbb\x93\x9f\x57\x1a\x9c\x42\xfe\xf3\xbe\x0c\xab\x47\x2c\x29\x86\x5c\xe8\x20\x2c\xee\x6e\xba\x6d\xd5\x9d\xdb\x64\x83\x94\xeb\xd7\x8d\x58\x89\xc4\x6d\xa7\xfd\xdb\x12\x06\x76\x45\xa5\x53\x74\x8f\x89\x5f\xc9\x7d\xb3\xa4\x6d\xe0\x77\xdd\x8a\xbe\x59\xf4\xdd\x2d\xaa\xd1\x03\xef\x7a\xa3\xe5\xe8\x03\x38\xf0\x12\xe2\x04\x70\xe0\xb5\xb8\x49\x00\x07\x6e\x09\x38\xf0\xba\x2a\x98\x39\x95\xbe\x16\x06\x87\xdc\x49\xad\xce\x2c\x75\xa4\xca\xd8\x8c\xcb\x7a\xc9\xe4\x8e\x8c\xa9\x04\x96\xb4\xa4\xa6\x95\x93\x49\xa0\xb0\x02\x6c\xf5\x8f\xfa\x01\x14\x93\x59\xc2\xe7\x60\xff\x5a\x22\xae\xb8\x2e\x6e\x17\x34\x86\xb6\x4b\x2c\x6e\xe4\x87\xd2\xa9\xda\x22\x73\xe7\xf3\x6e\x85\x94\x9d\x87\xfc\xbf\xbe\xbc\x7d\x4c\x81\x57\x7b\x17\xb8\x0f\xcb\x67\x8f\xa9\x2e\x6e\x50\x27\x82\x3a\xd1\x64\xd7\x04\x75\x62\x15\x81\x82\x3a\x11\xd4\x89\x7d\xaa\x13\x07\x96\x60\x3e\xfc\xab\x54\x6e\x76\x59\x00\xe2\xa3\x8d\x3a\x04\xe7\x2c\x95\x70\xe4\x57\x0a\x32\x7d\x56\xfd\x83\x73\x52\x0e\x89\xe3\x31\xc3\x54\x79\x65\xd7\xa4\xbe\xb4\x66\x44\xa8\xb9\xf7\x24\x99\xce\xd4\xfc\xbf\xfa\x8c\xaa\x2c\xc4\x8b\x8e\x19\x17\x66\xc7\xe8\x97\x27\x98\xc5\x89\xbe\xd4\x65\xd6\x4e\x84\x19\xe3\x0a\x58\x39\x4c\x20\x46\xcf\x14\x1b\xc6\xdf\xb9\xed\x35\x0e\x74\x3c\x26\x51\xeb\xb0\x91\x8c\xfb\xaf\x9d\x76\xf8\xca\xa2\x2b\x26\xf4\x29\xe1\x43\x9c\x24\x73\x94\x16\x3d\x4a\xba\x81\x96\xcc\xa1\x2d\xda\x5b\x3b\xd4\x35\x07\x2b\x50\x56\xdb\x5a\x66\x8d\x38\x26\x26\x73\x68\x73\x84\xb7\x84\x6f\x8c\xdd\xb4\xe5\xa8\xb6\xcd\xd0\x12\x84\x93\xa6\xc2\xc9\x11\xb1\x8d\xc3\xca\x26\xe1\x26\x3f\xfe\x9b\x5c\x61\xf9\xe4\x57\x32\x87\x0b\xdd\x15\xa3\x2f\x54\xf1\x2d\x97\xf4\xfd\x77\x93\xe7\xf2\xf4\x82\xd5\xcf\x66\xd5\xd0\x57\x3f\x0a\x95\xd1\x6b\x1e\xb4\x65\xf4\xcd\xcf\x30\xbd\xf2\x38\xdc\x97\x7e\x87\xee\xbb\xbc\x65\xf7\xcd\x33\x11\x92\x72\xfb\x98\x20\x4a\xcc\x07\x58\x29\xcd\x90\x36\xb0\x51\xd7\x72\xcd\x07\x2c\x9f\x9a\x55\x65\xff\x44\x54\xe1\xe1\xb6\x8b\x35\x6e\xa2\x30\xcf\xc2\xc8\xf7\xcf\x9f\x1a\x6c\xe3\x37\x26\xee\x34\x3e\x92\x2b\xe6\x7d\x7c\x85\xe9\x9b\x32\x98\x35\x26\xfe\xb5\x14\xa9\x6f\xc6\x70\x57\xc5\x43\x1e\x63\xc1\xfa\x65\x37\x48\x6b\x46\x58\xba\xc4\xde\xe2\xc9\x2d\x5e\xc9\xe1\x88\x2e\xa3\x51\xd3\xb3\x78\x34\x27\xb0\x24\x69\xad\x98\xdb\xbd\x5b\x20\xfb\xb8\xdb\x09\xed\x9b\x57\x41\x58\xdc\xf5\xa8\xf6\xe3\x00\xf6\x56\x63\x9d\x14\xc2\x9e\x2b\xb6\x6e\xdc\x59\xd9\x19\x72\x49\x85\xd9\xd1\x54\x13\x28\x48\x45\xa5\x5f\x9f\x3d\xe2\xc2\x48\x9b\xb1\x3d\xb3\xc6\xa1\xd5\x79\xe8\xdc\x77\x1f\xce\x51\x07\xc5\x58\x61\x7d\x48\x05\x99\x09\x22\x09\x53\xc6\x14\xc1\x14\x55\x73\x34\xe5\x31\x49\x8c\x1d\xc0\x18\x07\x2f\xb1\xc2\x17\x58\xe1\x84\x8f\xcf\x50\x07\xfe\xd4\x2f\x53\x89\x70\x22\x39\xc2\x6e\xe3\x90\xd8\x35\x81\x59\xec\xd8\x03\x46\x11\x9f\xce\x68\x62\xf2\xda\x7c\xff\x36\x65\x31\x7d\xa6\x71\x8a\x13\xc4\x87\x60\x43\x39\xeb\xb3\xee\x33\x61\x2a\x05\x1d\x17\x27\x09\xb2\xdd\xba\x07\x3c\x03\x86\x1b\xa5\xa4\x53\x9a\x60\xa1\xa5\x47\x33\xda\x1b\xdb\x16\x7a\x98\x90\x6c\xac\x30\x2e\x4d\xcd\x29\x7e\x22\x12\x51\x85\x66\x5c\x4a\x3a\x4c\xf2\x63\xfc\xd8\x43\x30\xee\x8b\xab\x1e\x38\x0d\x23\x85\xb8\xe1\x83\xae\x73\xeb\x41\x77\x3d\x4e\x31\x63\x04\x3a\xe6\x6a\x42\x84\xed\xde\x3e\xfc\xda\xfe\xbf\xc7\x6b\x9b\x2e\xd6\xbd\x5c\x74\x00\x3e\x74\xee\x7f\x5c\xfc\xd6\xe5\x87\x2d\xfe\x72\xd5\x79\xbc\xbe\xf8\x61\x70\x7b\xd5\xa9\xc8\x3b\xb3\xdb\xaa\xb1\x2f\xd1\x1f\xd9\xe6\x87\x69\xff\x8a\x46\x4b\x43\x13\x9b\x1b\x1d\x1a\x59\x1c\x1a\x9b\x1b\x9a\xda\x1a\x9a\x19\x1a\xea\xad\x0c\x7b\x08\x53\x6b\x6e\x0a\xb8\xa2\xb2\x68\x0b\x38\x8e\x98\xb5\xc2\x90\xf5\x1c\xf6\x6d\x08\xf8\xea\xac\x00\x5f\xa9\x09\x20\xe8\xff\x7b\xa1\xdb\x5b\x55\xfe\x5b\xae\xf9\x6f\x13\x94\x9a\xe1\x5f\x84\xa8\xd4\xc5\xa8\x54\x12\x82\x52\x43\x50\x6a\x53\x02\x85\xa0\xd4\x10\x94\x7a\xb4\x41\xa9\x65\x45\x2b\x78\x6c\xdb\xe0\xb1\x6d\xb9\x8e\xd6\x66\x87\xed\x5b\xd5\x5c\x82\xf3\x32\x38\x2f\x83\xf3\xf2\x48\x4f\x6e\x70\x5e\x36\xa7\x51\x70\x5e\x06\xe7\x65\x70\x5e\x06\xe7\x65\x70\x5e\x06\xe7\xe5\x6b\x9a\x46\xda\x10\x1b\x7a\xcc\x2e\xdb\xe0\x89\x5d\xe1\x89\x6d\xb9\x92\xdf\x4a\x47\xec\x5b\xd5\x11\x82\x6a\x1f\xfc\x92\x5b\x4d\xbb\x55\x4a\xfd\x5b\xbb\x37\x83\x2b\xb6\x39\x21\x82\x2b\xb6\x31\xa9\x82\x2b\x76\x09\x71\x82\x2b\x36\xb8\x62\xbf\x42\x57\x2c\x8d\xb7\x2e\xb9\xd5\x44\x6f\xd1\xb2\x62\xdc\x05\xf3\x50\x66\xdc\x12\xbf\x81\xf4\x88\xe5\x53\x66\x01\x6a\xa0\xcf\xf4\xe2\xa3\x50\x64\x2a\x27\x7c\x08\x85\x66\x1b\x8d\x05\x2b\xcd\xc1\x15\x40\x15\xe8\x5f\x72\xa3\x62\x0b\x6b\x04\x6c\xa3\xa3\x78\x13\xf3\xd4\x14\xa7\x7d\x78\x44\x69\xdf\xb4\x83\xe0\x17\x04\xbf\x20\xdb\x34\x9c\x70\x90\x6d\xda\x2b\xdb\xbc\x96\xc2\xd2\xbe\xe3\x79\x74\xf6\x89\xbd\x8b\xa5\xb2\x31\x68\x9b\x29\x93\x0d\xae\xbb\x74\x96\x70\x1c\xaf\x0a\x90\xfb\x0d\xe5\xb2\xda\x12\x71\xd3\xb4\xab\x5f\x68\xb9\xb4\xb9\x10\x1b\x67\x46\xfe\x35\xa0\xc6\xd7\x4e\xfd\x55\xf1\xcc\x60\xff\x66\xa8\x45\x6b\x21\x10\xee\x7f\x33\xb7\x3d\x1b\xef\x95\x77\xf3\x9b\x4c\xbd\x0b\x47\x74\xf5\x11\x85\x0f\x85\x00\xef\x7d\x59\x42\xca\xc7\xb6\x91\xd1\x43\xfe\xad\xe5\xe7\x36\x5b\xdf\x43\x98\x38\xde\xe4\x29\x7d\xc3\xce\xe6\xe0\x50\x5e\x1e\xf5\xb3\xa3\x00\xd4\x3e\x7b\x98\x68\x3a\x4c\x87\x94\x65\xf1\x76\x6e\x87\xfc\xc9\x91\xeb\x4f\x80\x75\x69\xf1\x2f\x93\x79\x6e\x0a\x93\xe5\xd6\x32\x45\x09\x9d\x6a\x2d\x35\x22\x42\x01\xbd\x39\x53\xe4\x8b\x92\xe8\x14\x25\xf4\x89\xa0\xf7\xfa\xc8\xa3\xce\x6d\xef\xfd\x09\x7a\x7f\x85\x53\x16\x4d\xd0\x2c\xc1\x4c\xbe\x6f\x8d\x82\x15\x6c\x66\xa1\x9a\x4a\xf0\x96\xee\x92\x38\xc1\xa2\x18\x2c\x8a\xad\xb3\x28\xb6\x45\x67\x30\x49\xa5\x78\x4a\xda\xa2\x3d\xb4\x5d\xeb\x0f\xda\x43\xd0\x1e\x82\xf6\x10\xb4\x87\x82\xf6\xd0\x0e\x0a\x07\xd5\x21\xa8\x0e\x41\x75\x08\xaa\x43\x50\x1d\x76\x4e\xc6\xa0\x3a\x2c\x53\x1d\xe0\x93\xc3\x8d\x59\x57\x8f\x68\xac\x3f\x34\x00\x89\x39\x1a\xe5\x21\x28\x0e\x41\x71\x08\x8a\xc3\xc1\x15\x87\xd6\x4c\xe8\xed\xe1\x5d\x04\xc4\x88\x80\x18\x11\x10\x23\x6a\x10\x23\x0e\x25\xb2\x19\x79\xed\xc8\x52\x64\x8e\x42\x68\x7b\xb5\x1c\x99\xb7\x27\xc6\x85\xac\x9f\x90\xf5\x13\xcc\x90\x21\xeb\x27\x18\xda\x82\xa1\xad\xd5\x86\xb6\xd7\xb2\x9e\x1f\xf8\x78\x1e\x40\x38\x6d\x79\xc4\xf2\x5f\x8f\x41\x02\x3d\x60\xcc\x41\xb0\xb2\x05\x2b\x5b\x35\x65\x8e\xd3\x3d\xdf\x9a\x5b\x3f\x00\x3c\x05\x89\x3f\x04\x1e\x84\xc0\x83\x95\xc4\x09\xfa\x50\xd0\x87\x5a\xa7\x0f\xbd\xa2\xa2\xd0\xba\x30\xe5\xa0\x31\x04\x8d\x21\x68\x0c\x6f\x56\x63\x68\x0d\x85\x83\xba\x10\xd4\x85\xa0\x2e\x04\x75\x61\x39\x71\x82\xba\x10\xd4\x85\xa0\x2e\xb4\x3a\x34\xf9\x58\x14\x86\xa0\x2c\x04\x65\xa1\xdd\xca\x42\x6b\x26\x14\x82\x78\x43\x10\x6f\x08\xe2\xfd\x6a\x82\x78\xdf\xa8\xc2\xbe\x57\x31\xcd\xb1\xc8\x65\x82\xd7\xa2\xbc\xf4\xf3\x02\x63\x6d\xad\xc8\x94\x8f\x76\x53\xdc\xc7\x5d\x91\xfa\x85\x8b\xa7\x51\xc2\x5f\x06\x99\x56\x67\x83\xc2\xf3\xbf\x6d\x3e\x9f\xf7\x45\x2e\x3c\x7b\x5f\x66\x42\xb4\xf7\x9d\x6b\xbd\x08\x10\x9a\xae\xc2\x07\x95\x88\x0b\x94\xce\x62\xf8\x18\xa5\x52\xf1\x69\xbd\x54\xfd\x19\xab\x68\x82\x87\x09\xe9\x64\xfd\x5e\x70\x36\xa2\xe3\xd4\xec\x8f\xdf\x80\x15\x62\x27\xd9\x9c\x38\xc9\x48\x33\x45\x37\xbe\x65\x92\xf8\x23\x8c\xe3\x17\xfb\x64\xde\xc9\x51\x04\xa0\x2f\x0e\xdb\x4c\xe7\x50\x70\xa3\xc5\x5d\xb4\x2d\x8b\xf3\x5a\x6b\x87\xf8\xb3\x78\x26\x56\x89\xaa\x60\x85\xce\x34\x13\x1a\xc3\xe6\x7c\x99\x50\xb0\xac\x81\x25\x0e\xac\x4f\x79\xc3\xe8\x85\x26\x09\x48\x1c\x86\x16\xed\x9b\x79\x23\xed\xc5\x4e\xdc\x9e\xbd\x37\x31\x6f\xc7\x3c\x56\xcc\xdc\x1d\x41\xe3\x86\x38\xd2\x69\xbf\x26\xc2\xee\x0a\x46\xf6\xaa\x38\xbb\xb5\xd7\x67\x4d\x4e\xd5\x87\x7f\x55\x5e\x89\x4d\x6a\xa7\xbe\xf6\x3d\xf8\x89\xa8\x37\x73\x09\x7e\x22\xea\x50\x37\xe0\x5b\xbc\xf6\x36\xbd\xeb\x96\x32\x3e\x41\x46\x44\x10\x16\x91\x63\xcd\xc9\x5a\xb8\xe2\x8e\x76\xba\x1b\xdd\x6c\x47\x3b\xdb\x75\x0c\x58\xbf\x98\x49\x5a\x73\xd5\xd4\xb1\x5c\x7f\xaa\x8a\x5b\xf7\x72\xc1\x05\x66\x8d\x55\x0f\x9d\xfb\x1f\x07\x77\xdd\xfb\x9b\xc7\xbb\x8b\xee\x39\xea\xc0\x41\x87\x77\x0c\x7b\xa7\xff\x84\xe6\x20\x1f\x36\x33\x86\x09\x73\xc7\x49\x60\xd5\xe0\x06\xd7\x54\x44\xa7\xe8\xe2\xea\xf1\xfe\xa1\x7b\x57\xd3\xa0\x65\xfe\x94\x8d\x91\x22\xd3\x59\x82\x15\x89\xd1\x53\x3a\x24\x82\x11\x50\xac\x92\x54\x2a\x22\x72\xe7\xb8\x69\xb4\xfb\xdf\xdd\x8b\xc7\x87\xde\xcd\xf5\xe0\xa7\xc7\xee\x63\xf7\x1c\xb9\x5b\x44\x37\xab\xc7\xa5\x47\x11\xcf\x19\x9e\xd2\xc8\x7c\x91\x95\xa2\x45\xbf\xa7\x24\x25\x08\x4b\x49\xc7\x6c\x4a\x98\x2a\xb7\xe8\x06\x7c\xd5\xf9\xbe\x7b\x55\x6c\x79\x42\xd0\x8f\x7f\xcf\x07\x95\xe0\x21\x49\xac\xb7\x1e\x1c\xd0\xfa\xf2\xca\x3b\xb2\x6e\xfc\xd4\x50\xf5\xa7\xc7\xce\x55\xef\xe1\xd7\xc1\xcd\xc7\xc1\x7d\xf7\xee\xe7\xde\x45\x77\x60\x8d\x31\x17\x1d\xdd\x6f\xa1\x27\x6b\xb3\x41\xbf\xa7\x38\xa1\x6a\xae\xd7\x51\x9a\x4b\x1f\xbd\x4c\x08\x43\x29\x83\x0b\xc4\x58\x0a\x31\xf3\x3a\x95\x33\x12\x99\x19\xdd\x5e\x3d\x7e\xea\x5d\x0f\x6e\x7e\xee\xde\xdd\xf5\x2e\xbb\xe7\xe8\x9e\x24\x60\x4b\x73\x44\x87\x55\x9c\x25\xe9\x58\x73\x82\xe9\x2c\x21\x9a\x1a\xc6\x56\x38\x24\x13\xfc\x4c\xb9\xb0\xd7\xf1\x98\x3e\x13\x66\xe8\xa8\xb7\x95\x69\xdf\xd9\xac\x06\x1e\xe9\x6e\xae\x3f\xf6\x3e\x9d\xa3\x4e\x1c\x67\x73\x90\xd0\x46\x61\xe7\xb8\xa3\x7b\x5a\x1c\x36\x1d\xd1\x08\xba\x37\x9b\x88\x3f\x13\x21\x68\x4c\x4a\xfb\xa8\x73\x7f\xdf\xfb\x74\xfd\xb9\x7b\xfd\x00\x14\x53\x82\x27\x12\x4d\xf8\x0b\x38\x7a\x61\x86\xe0\xff\x7d\xc6\x34\x81\xce\xdc\x62\x71\xe6\x9f\x7e\xaf\x67\x63\xd6\x14\x29\x7b\x75\xdf\x65\xe1\xe0\x2d\x5a\xfb\xca\x27\x69\xf1\x89\xd2\xb1\x58\xf6\x40\x61\x97\x2f\x3e\xb8\x6a\xb7\x2e\xbe\x51\xda\x6e\xf5\x36\xce\x85\xfd\x52\x3f\xd3\x7c\xad\x1b\x9b\x38\x8b\x34\xdc\x87\x8c\xed\xde\x7e\x17\x93\x84\x28\x52\x2b\x13\x5f\xc2\xcf\xaf\x2f\x13\x9b\x71\xbc\x19\xb1\xd8\x4c\x27\x48\xc6\x41\x32\x6e\x3c\xe1\x20\x19\x57\x4d\xf8\x8d\x48\xc6\x2d\xb4\xfa\x38\x16\xd5\x3a\xab\x4f\xf0\x8f\x94\x56\xea\x38\xaf\xc0\x57\x73\x8f\x04\xff\xc1\x7a\x57\xc8\xf1\xcf\x3b\xf8\x0f\x82\xff\xa0\xf2\x26\x79\xf3\x5e\x83\xe3\xbc\x1a\x0e\xe8\x34\x08\x6a\xc4\x92\xf9\x06\x35\xe2\xc8\x66\x1b\x0c\xec\xc1\xc0\x1e\x0c\xec\xc1\xc0\x1e\x0c\xec\x68\x53\x03\x7b\x03\x2e\x7b\x08\x73\x6a\x4b\x83\x88\xdf\x8a\xdb\xe0\x38\xe5\xe2\xc3\x7a\x0d\x82\x68\xbc\x64\xbe\x41\x34\x3e\xb2\xd9\xb6\xd0\x2e\xd2\x2e\x0b\x3b\x8d\xab\x0c\x22\x07\x84\xa6\x77\x23\x69\x0a\x4f\xef\x08\xda\x8b\x8f\x82\x9d\xbf\x1a\x42\x7d\xc0\x73\x0f\x78\xee\x01\xae\x25\xe0\xb9\xa3\x00\x48\x12\x00\x49\xda\x0c\x48\xd2\x60\x19\xdf\x02\x9e\xfb\x61\x2c\x0c\x6f\x28\x49\xd9\x09\x86\xb2\x10\xbb\xc1\xe5\xaa\xe0\x0d\xb0\x12\xa4\xb3\x84\xe3\x78\x19\x58\x8c\x93\x23\x7d\xc0\x98\x25\xa2\xa7\x69\xfb\x97\x45\xe5\xa9\xb5\x92\xa7\x1b\xab\x19\xf9\xa1\xcc\x07\xad\x51\xb8\xdc\xb4\x5b\xa1\x66\x15\x6b\xb7\xb6\x70\x43\x1f\x55\x40\xed\x61\x77\xf4\x9b\x2c\xda\x1a\x8e\xe9\xea\x63\x7a\xb8\xfa\x28\x55\x47\xb7\xb1\x21\x44\xfe\xed\x98\xce\xee\x81\x90\x8f\xdf\xde\x89\x0d\x08\x6d\x01\xa1\xad\x96\x32\xc7\x09\xe7\xdc\x1a\xc5\x2b\xd8\xd2\x02\xf4\x71\x80\x3e\xde\x25\x71\x82\xa5\x31\x58\x1a\x5b\x67\x69\x6c\x93\x0e\xb1\xc7\xd2\x29\xdb\x69\x13\x47\x65\x09\x08\xda\x44\xd0\x26\x2a\xa6\x16\xb4\x89\xaf\x50\x9b\x68\x07\x85\x83\x2a\x11\x54\x89\xa0\x4a\x04\x55\x22\xa8\x12\x3b\x27\x63\x50\x25\x5e\xa7\xac\x4a\x95\x3e\xd1\x30\x25\xf5\xa8\x94\x89\xa0\x48\x04\x45\x22\x28\x12\xa1\x70\xcc\xf2\x39\x85\xc2\x31\xa1\x70\x4c\x28\x1c\xf3\x06\x0a\xc7\x1c\x52\x84\xab\x41\x2b\x3f\x8e\x34\x9b\xa3\x10\xe2\x5e\x2d\xcf\xe6\xed\x89\x74\x21\x73\x28\x64\x0e\x05\x13\x65\xc8\x1c\x0a\x46\xb8\x60\x84\x6b\xb5\x11\xee\xb5\x2c\xeb\x07\x3e\x9e\x07\x12\x54\x8f\x24\xda\xf9\xaf\xc7\x20\x8d\x1e\x38\x3e\x21\x58\xe0\x82\x05\xae\x9a\x32\xc7\xe9\xca\x6f\x8d\x14\x70\x8c\x95\x63\x83\x06\xd0\x9c\x10\x21\x48\xa1\x39\xad\x42\x90\xc2\x12\xe2\x04\xfd\x28\xe8\x47\xad\xd3\x8f\x5e\x59\x71\x68\x6d\x88\x73\xd0\x20\xcc\x73\x41\x83\x08\x1a\xc4\x1b\xd5\x20\x5a\x43\xe1\xa0\x3e\x04\xf5\x21\xa8\x0f\x41\x7d\x58\x4e\x9c\xa0\x3e\x04\xf5\x21\xa8\x0f\x47\x13\xd6\x7c\x4c\x0a\x44\x50\x1e\x82\xf2\xd0\x6e\xe5\xa1\x35\x13\x0a\x01\xc0\x21\x00\x38\x04\x00\x7f\x35\x01\xc0\x6f\x54\x81\xdf\xad\xd8\xf6\x07\x4b\xa8\x77\x9e\x80\x91\x49\x22\xef\xbe\x4f\xf8\xf0\x61\x3e\x23\xfa\xbf\x97\x74\x4a\x98\x04\x4a\x50\x35\xf7\xc5\xb4\x9a\x0d\xb5\xb8\x95\xde\xdd\xf7\xae\x3f\x5d\xf9\xe5\x81\xde\x7d\x7e\xbc\x7a\xe8\xdd\x76\xee\xb2\xe5\xce\x66\xe5\x2f\xb1\x7d\xaf\x20\x69\xda\x93\x7c\x47\xb4\x4a\x0d\xcc\xe0\x5e\x61\x95\xca\xcd\x46\x76\xd7\xbd\xef\xde\xfd\x0c\xe5\x8d\x06\x97\xbd\xfb\xce\xf7\x57\x85\x7d\x5e\xf8\xbd\x73\xf1\xd3\x63\xef\xae\xfe\xf7\xee\x7f\xf7\xee\x1f\xee\xeb\x7e\xbd\xeb\x5e\x75\x3b\xf7\xf5\x6f\x7f\xec\xf4\xae\x1e\xef\xba\x4b\xe9\xb1\x74\xb4\xcb\x75\x2b\x09\x44\x82\x12\x1f\x28\xb2\xcc\x50\xe4\x34\x44\x99\x54\xec\xb8\x7c\x55\x5f\xe7\xe8\xd1\x9a\x2a\xa8\x6d\xdc\xdc\x1b\x5e\x43\x46\xc7\x8a\xa9\xc4\xc3\x84\xc4\x0b\x2d\x39\x1a\xd6\xb5\x84\x0b\x83\x7a\xc1\xd2\x93\xa4\x35\x2b\x8f\xcc\xf1\x41\x50\x74\x4d\x11\x16\x57\xf4\x61\xd6\xa1\xb6\x07\xa6\x59\x32\x7d\x26\x85\x9e\xa2\x54\x08\xc2\x54\x32\x47\xe4\x0b\x95\x4a\x2e\x34\xea\x96\xaf\xae\x59\xcb\x10\xb2\x06\x27\x58\xa2\x21\x21\xac\x38\x7e\x41\x12\x82\x65\xc5\x98\xed\xea\x37\x23\x4b\xb6\x56\xd6\xc8\x64\xee\xd8\x11\xa6\x49\x2a\x48\xe9\xb4\xf0\xe9\x0c\x0b\x2a\x39\xeb\x7e\xd1\x57\xb4\x3e\xc8\x37\xf0\x3a\x17\x9b\x9d\x98\xee\x4f\xfe\x0e\xbe\x2e\xfe\xf9\xe9\xa1\xf8\x57\xe1\xcc\x5f\x3d\x14\xff\x5a\xbe\xd7\xbd\x86\xcb\x3b\xfb\x14\x7d\x7a\x38\x47\x9f\x00\x62\x54\xa0\x87\x09\x36\x3b\xf6\xea\xe1\x1c\x5d\x11\x29\xe1\x9b\xfc\x65\x45\x55\x02\x73\xfb\x9e\x32\x2c\xe6\xc8\x4d\xdf\x54\xee\xc3\xd1\x04\x91\x8c\x34\x65\xe2\xb1\x7f\xa4\x0c\x2c\x12\x39\xf5\xae\xf8\x98\x46\x38\xd9\x8e\x88\x9d\xeb\x02\x1f\xb8\xb9\x5b\x4a\x0a\xff\xe9\x45\x5a\x74\xae\x2f\xa1\x2a\x9e\x1b\x6a\xc5\xcc\xaf\x89\xd4\x9b\x24\xe2\x2c\xb6\x3e\x35\x2d\xd4\xcc\x3d\x5d\xe5\x1f\x1c\x2a\x0b\xa6\x92\xb2\xb1\x6e\x11\x7d\x40\x37\x77\x7d\x76\x23\x62\x63\xdf\x25\x5a\xc8\x37\x7b\x8e\x4a\xc4\xb8\x42\x74\x3a\xe3\x42\x61\xa6\xb4\x7e\x03\xd2\x8d\xa5\x88\xe1\x00\x17\x7c\x3a\x4d\x15\xd6\x07\x6d\x81\xa8\xcc\x58\x79\xee\x89\xea\xc5\xe0\x08\xab\xa0\xa1\x11\x7f\xf2\xb9\xcc\x84\x6e\x5f\x8b\x5e\x45\xd3\x00\x8d\x17\x34\x74\xd7\x04\x16\x02\x17\x2f\xe0\x77\x54\x91\x69\xf9\xf9\x86\xd7\xee\xbf\x2b\xed\x1e\x17\x26\x2b\x82\x88\x8e\x88\x26\x54\x91\x48\xe9\x23\xb8\xd1\x9e\x78\xbc\xfe\xf1\xfa\xe6\x17\x5f\x30\x7a\xd7\xf9\x7c\xf9\x9f\x05\x18\xd8\xce\xdd\xe7\x85\x2f\x06\x3f\xff\xe7\xc2\x37\xff\xff\xa5\xfb\xa9\xdc\xd3\x82\xf9\xc2\x9b\xcb\x29\x68\x0a\x60\xea\x76\x53\x45\x74\x8a\xc7\x04\xc9\x74\xa6\x77\x80\x3c\x2b\xae\xaf\x96\x94\xaf\x38\x8e\x29\x1b\x9b\xe2\x6f\x57\x54\x11\x81\x93\xcf\x78\xf6\xd1\x99\xe5\x37\xa0\xce\xff\xb9\x2f\x14\x20\x7c\xf7\x6b\xe7\xb3\x5f\xc2\xf0\xdd\xed\xdd\xcd\xc3\xcd\xd2\x59\x17\x5a\x58\x3c\x46\xfa\xe7\x73\xf8\x7f\xf4\x01\xe9\xd6\x33\x81\x7e\x4a\x14\xd6\x8a\x0e\xfa\xc6\xd4\xcb\xca\x32\x61\x28\x4b\xe0\xd4\xcc\x04\x9d\x52\xb8\x52\x8c\x61\xf2\x5b\xa3\x33\x64\x4a\x51\x76\x6e\xcc\x0b\x60\x04\x70\x97\x32\x8b\xb1\x88\xd1\x3f\x64\xb9\x1e\x26\xd8\xc3\xcd\x17\x24\x46\xa7\x68\xa2\xd4\x4c\x9e\x7f\xf8\xf0\xf2\xf2\x72\xa6\x9f\xd6\x02\xec\x07\xfd\xe1\x94\xb0\xb3\x89\x9a\x26\xa6\xfe\xa7\xa6\xc2\x39\xba\x15\x5c\x5f\x21\x60\x77\x20\x82\xe2\x84\xfe\x93\xc4\x68\x68\xf8\x1f\x1f\xa1\xdf\x22\x2e\xc8\x59\xbe\x30\xd6\x56\x66\xef\x11\x6b\x4f\xfb\xa0\x1f\xaa\x60\x26\xe5\xf5\x44\x31\x89\x68\x6c\xc5\x0c\xc2\x22\x0e\x06\x55\xe3\x82\xd1\xed\xb9\x22\x63\x5a\x51\x9b\xa5\x2a\x27\xa7\xa7\x83\xe1\x98\x78\xe5\x3b\xad\x7c\x9d\x6d\x38\xad\xcf\xf5\x8c\x36\x9e\x4a\x22\xe0\x6e\xc5\x70\xab\xba\x47\x67\x7a\xc2\x11\x4f\xd0\x30\x1d\x8d\x88\xf0\xc3\x07\x4e\xb4\x92\x46\x25\x12\x24\xe2\xd3\x29\x48\x0c\xfa\xad\x54\x9a\x5d\x0d\x14\xb3\xa3\x3d\xeb\x33\x58\x7f\xad\xbd\xc1\x0e\x88\x39\xb0\x3a\x46\x48\x8c\x30\x9b\x9b\x6e\x86\xe9\xc8\x6f\xdf\xd4\xd5\xc5\x31\xa2\xaa\xcf\x3a\x49\x82\x04\x99\x72\x45\xbc\xf2\x69\xe0\xea\x2c\x12\x1c\x58\xa4\x20\xb3\x04\x47\x24\x36\xfb\x21\xe1\x11\x4e\xd0\x88\x26\x44\xce\xa5\x22\x53\xbf\x81\x6f\xc0\x04\xa5\x69\x46\x25\x8a\xf9\x0b\x4b\x38\xb6\xf3\x28\xbf\xf6\x6d\xf1\x34\x76\x5d\xcd\xd3\xae\x10\x5c\xc0\xff\xfd\x48\x59\xbc\x33\x0e\xf5\x78\xdf\xbd\xf3\xff\xbe\xff\xf5\xfe\xa1\xfb\x79\x3d\xee\x93\xed\x2c\x18\x1e\x98\x26\xce\xd1\xbd\x21\x02\x17\x5a\x22\x12\x35\x93\xfa\x6c\xb7\x52\xfe\x05\x8f\x37\xe4\xbe\x9f\x3b\xd7\x8f\x9d\x02\x47\xb9\xbf\xf8\xa1\x7b\xf9\x58\xd2\x07\xec\xfc\x0a\x32\xbc\xd1\x6a\xfd\xef\x2e\x7e\xe8\x5d\x5d\x0e\x2a\xf4\xe0\x77\x77\xdd\x8b\x9b\x9f\xbb\x77\xb9\xca\x5a\x49\xa2\xd2\x60\xca\xcc\xea\xc1\x30\xa5\x09\x8f\xd1\x70\x5e\x5d\xe1\x56\x4b\xce\x09\x78\xce\xf3\x1a\xcf\xa6\xd5\x73\xe0\x4d\xae\xd8\x70\xfe\xc6\x94\xc7\xe4\xc4\x3e\x03\xa5\x81\x8d\xcd\xc8\x48\xcc\xd5\x0d\xeb\xde\x31\xf3\xec\x2f\xa6\x6a\x6f\x46\xb8\x73\xd4\x41\x52\x3f\x98\xea\x43\x2d\xe8\x78\x0c\xf6\xd0\xd2\x50\x4d\x6b\xf6\x55\x20\x2f\xbc\x67\xd6\x7f\x26\x38\x9c\x73\xdd\xad\x35\xa4\x67\xc6\x16\xf3\x22\x94\x91\x2e\xb6\x28\x30\xd8\x51\x2a\x86\xe6\x16\x4b\x13\xa1\x96\x5e\xe6\x3c\x1a\x33\x98\x3e\x5c\xc0\xb6\xa4\x31\xe3\xce\x04\x79\xa6\x3c\xf5\x5e\xb5\x95\x8a\x0b\x2b\x5e\xd9\x7c\x4e\x00\x20\x9b\xb1\xf5\x94\x9a\xc9\xb6\x47\x65\x0b\x9a\x85\x3d\x43\x0b\x23\xc1\xa7\x15\x6d\x14\x8f\x49\xef\xe6\x5e\x09\xac\xc8\x78\x7e\x69\x59\xc6\xe6\xc7\xe3\xf2\xe6\x97\xeb\xab\x9b\xce\xe5\xa0\xdb\xf9\x54\x3c\xf1\xd9\x2f\xf7\x0f\x77\xdd\xce\xe7\xe2\x4f\x83\xeb\x9b\x87\x81\x7b\x62\xe9\x96\xaf\xe9\x60\xf1\x9e\x2e\x3e\x78\x8e\x34\xcb\x05\xd6\xf8\x42\x93\x44\x5f\x26\x1e\x7f\x1c\x92\x11\x17\x86\xcf\x4f\x5d\xa0\x89\x15\x61\x1c\x6d\xad\x2e\x56\x9a\xc5\x39\x18\xfc\xaa\x9a\x34\xc6\x7c\x25\x08\x9e\xc2\x3d\x81\x19\xea\xb2\xf8\xf4\x66\x74\x7a\x6f\xbe\x9c\x62\xf1\x44\x44\xf6\xea\x8b\xa0\x4a\x11\x56\x50\xe9\xb0\x1b\x72\xa6\x24\xe6\x1d\x9c\xa1\x3b\xcd\xf7\xf5\xf3\xd9\xa5\xa6\x37\x7b\x4c\x14\xa6\x89\xb4\x83\x2d\xd0\xf5\x1c\x5d\x61\x31\xce\xcd\x8b\xdf\xf0\xd1\xc8\x34\xf6\xad\x19\x86\xbe\xc3\x0a\xb3\xa8\xe0\xbd\x7a\x6b\xb8\x7b\x11\xfa\xb3\x0f\x67\xf2\xf0\xe2\xae\x7a\x9c\x6d\xb7\xa7\x1e\x6f\x81\xe2\x46\x63\x2f\xe8\x86\xf6\x97\x8a\xbd\x06\x13\x37\x3f\x2f\xbf\x64\xaa\xdb\x5e\xdc\x4e\xc5\x07\x2b\xb6\x93\xa9\xd0\xa2\x57\x7e\xa4\xb5\xcd\x8a\xbd\x44\xbe\x50\x6b\x30\xf0\xc7\x5d\xda\x42\x79\x33\x60\x35\xc6\xb3\x19\xc1\x42\x56\xad\x76\x51\x0c\xac\x59\x7b\xd3\x93\xdf\x87\x5d\x64\xd7\xcf\x09\xe2\x0c\x0c\x0e\x99\x10\x51\xda\x91\x0d\xf6\x80\x69\x6b\x61\x07\xdc\x42\xf9\xf8\x1b\x5b\xaa\xfd\x33\x95\x5a\x69\x34\x5f\x7e\x6f\x6b\xc8\x6f\xb6\x21\x3e\x76\x7a\x57\x25\xe1\x62\x70\xd9\xfd\xd8\x79\xbc\x5a\x6e\x26\x2c\xbc\x57\x5e\x62\x74\x8a\xf4\xef\xc5\x70\x00\x3a\x32\x77\x86\xab\x84\x6f\x54\x5a\xc2\xc0\x68\x65\xab\x54\x1b\x33\x7c\x4c\x66\x09\x9f\x4f\x09\x03\x13\x4f\xe1\x26\xd4\xf4\x1c\x61\x6a\xaf\x16\x6f\xb0\x60\xc5\xb1\x66\x37\xb8\xc6\x4e\x5d\xf9\x7d\x12\x67\x37\x6f\xb1\xfa\x7e\x89\x75\xdf\x1a\xa7\xa0\xfd\xcf\xbd\xc2\x6a\xc3\x33\xd6\xb9\x78\xe8\xfd\xdc\x2d\xea\x87\x17\x3f\xf4\x7e\xae\x92\x6a\x06\x9f\xba\xd7\xdd\xbb\xce\xc3\x0a\xe1\xa4\xd4\x64\x95\x70\x22\xf5\x80\xcb\x4e\x61\x2a\xb3\x40\xa7\xc8\xd4\xf0\x47\x54\x49\xf4\x4c\x25\x1d\xd2\x84\xaa\x39\xb2\x0e\xd6\xc7\x1e\x70\xd6\x67\x9c\xd0\x98\xaa\xb9\x13\x5f\x4c\xbf\xc5\x75\xd4\x9c\xd4\xb6\x6f\xcc\x0e\xbe\xdb\x15\xac\x7c\x66\x71\xdc\xa4\xcf\x11\xe8\xb6\xcf\xa0\xb4\x79\xaf\x31\x2d\x48\xb3\x31\x11\x66\x38\xe0\x54\xf2\xc7\xe2\xfd\xae\x47\xe5\x0b\x2b\x39\xd5\x32\xa1\x75\x4c\x18\xd1\x2c\xd2\xeb\xc4\x08\x52\x82\xb0\xf7\x5a\xe6\x9a\x25\x34\xa2\x2a\x99\xa3\x08\x6c\x58\x60\xce\x9c\x62\x86\xc7\x56\x38\x00\x35\xa7\xb4\x25\x7e\x4a\xc1\x00\x7f\x33\xb2\xa6\xfd\x07\x4a\x36\x3c\x66\x8f\xd7\x97\xdd\x8f\xbd\xeb\xe2\x16\xf8\xa1\xf7\xa9\x20\xc2\x7e\xee\x5e\xf6\x1e\x0b\xb7\xb9\x96\x64\x97\xcb\xf5\xe5\x66\x2b\x8e\x62\xf6\xd0\x39\xba\x34\xaf\x9e\x6b\xe2\xfe\x6e\x26\xa7\xb7\x8c\x34\xd3\xcb\x95\xdf\x12\x1d\xee\x5c\xa4\xa1\xfb\xd0\x65\x4a\x54\xfa\x25\x9a\x9a\x90\xac\x57\xa8\x60\x43\xaa\x8e\xc0\x58\xe8\xfb\xba\xec\x2b\x2f\x4f\xd9\x3d\x08\x21\xb2\x67\xb9\x65\xc9\x0f\xcd\x00\xa3\x41\x9d\x11\xab\xc2\x5b\x97\x33\xec\x9f\xc1\xf3\x3e\x4d\xa5\x32\x1e\x52\xd8\x9c\xe8\xe9\xef\x52\x13\x14\x3c\xa8\x67\xe8\x9e\x90\x3e\x73\xd6\x83\x31\x55\x93\x74\x78\x16\xf1\xe9\x87\xa7\x74\x48\x04\x23\x8a\xc8\x0f\x78\x46\xa7\x58\x4b\xd2\x44\xcc\x3f\x0c\x13\x3e\xfc\x30\xc5\x52\x11\xf1\x61\xf6\x34\x86\xc0\x1e\xe7\xe9\xfa\x90\x35\x3b\xe6\xff\x71\xf5\xd7\xef\x4e\xaf\xfe\xfe\xdd\xbb\x45\x0b\x59\xdd\xfa\x77\x59\x84\x67\x32\x4d\x6c\x20\xa0\xf0\x69\xe3\x8e\x7c\x4a\x56\xad\xf7\x75\x71\xb9\xb6\xd3\x5f\x2f\x6e\x1f\x0b\x16\xeb\xe2\x9f\x9f\xbb\x9f\x6f\xee\x7e\x2d\x70\xca\x87\x9b\xbb\xce\xa7\x02\x43\xed\xde\xfe\xd0\xfd\xdc\xbd\xeb\x5c\x0d\xdc\x8f\xdb\xd8\xde\x7e\x64\xfc\x85\x15\x49\x23\x1d\x07\x5c\xe8\xe9\x1c\x7d\xe4\x02\xfd\x98\xad\xe4\xe9\x10\x4b\xb8\x62\xdc\x9d\x25\x4f\xd0\x8c\xc7\xc0\x78\x11\x99\x4d\xc8\x94\x08\x9c\x58\x9b\x81\x54\x5c\xe0\xb1\xb9\xe9\x65\x24\xb0\x8a\x26\x48\xce\x70\x44\x4e\x50\x04\xbb\x61\x7c\x02\x8b\x02\xaa\x16\x1f\x97\xed\x7c\x77\x29\x53\x74\x4a\x9c\x0a\x6e\xff\x7c\x30\x8b\xb1\xc1\xe2\xdc\x3c\xfc\x50\x14\xf6\x3e\x5e\xfd\xfa\xd0\x1d\xdc\x5f\xfe\xb8\x94\x9e\xe6\xb5\xc2\xc8\xee\x21\xae\xea\x82\x27\xe9\x94\xf9\x9f\x37\x1f\x5b\xef\xfa\xa1\xfb\xa9\x3c\xba\x9b\xce\x43\x71\x67\xdc\x15\xe3\xf6\xde\x7d\x7f\x73\x73\xd5\x2d\x78\xba\xdf\x5d\x76\x1e\xba\x0f\xbd\xcf\x85\xfd\x73\xf9\x78\x07\x3e\xa0\xa5\xd3\x74\x23\xa8\x98\xa8\x9e\x96\x3f\xcd\x5d\xb3\xc2\x46\x9c\xa8\x63\xc3\xff\xcd\x59\x3e\xf5\xf0\x72\x4c\x94\x1b\x58\x75\x4e\x33\x93\x6a\x64\x46\x5a\xc9\x0e\x55\x71\x99\x50\x3d\x3b\x5e\xba\xd0\xcb\xb8\xf2\x43\x36\x04\x18\xd7\x99\x51\xb6\x71\x92\xf0\x17\x13\xa1\x3c\xa5\xfa\x56\x96\x04\x02\x95\xf5\x23\x32\xf7\x10\x9e\x55\x70\xbc\xe2\xb2\x90\x48\x10\xf5\x99\xa7\x4c\x6d\xbe\xe5\x3a\xd7\x05\xbe\xd3\xbd\xfe\x79\xf0\x73\xa7\xb8\x03\x7b\x57\xcb\x59\x8d\xdf\x44\xc5\x55\xdc\xb9\xfe\x35\xbb\x84\x21\x8e\xfd\x24\xd3\x50\x8d\xec\x1a\x25\x54\x8b\xbd\x11\xd6\xda\x6b\x02\x12\x0d\x22\x14\x4c\x0e\x53\x3d\x39\x88\x9b\x9d\x19\x7f\x92\xe1\x4f\x66\x90\xe7\xee\x43\xa9\x3d\x09\x74\x01\x6b\xaa\x4b\x13\x80\x76\xac\x56\xcd\x10\x61\xcf\x54\x70\x06\xc2\xf6\x33\x16\x54\x4b\xe3\xa6\x65\x3d\xd7\x73\xf8\xff\xf5\xda\x04\xc3\x68\x89\x71\xdd\x73\xa1\x2e\xb3\xf8\xe4\xcd\xac\x21\x55\x71\xba\x8b\x11\xba\xd5\x86\x8e\xc5\x77\x2b\x16\x67\xcb\x38\xe6\xe2\x84\x7f\x4f\x2e\x29\x4e\x34\x03\xd8\x9d\xbc\xd8\xb9\xbe\xef\x15\xe5\xc7\xa2\x9a\xe1\xf1\xe5\x8d\xe5\x45\x30\x54\x9a\x91\x3b\x65\xe2\xfe\xa7\x2b\xa3\x5d\xe8\x4d\x62\xcf\xad\xa7\x58\x80\x00\xe4\x6a\xab\xce\xb0\x90\xa5\x37\x24\x02\x24\xb3\x3c\x8e\x4c\xdf\x59\x10\xa5\xf5\xcc\x69\xdc\x67\xe4\xcb\x8c\x30\x09\xc1\x01\xe6\x3e\xcb\x7d\xed\xf2\x0c\xf5\x46\xc0\x12\xf4\xe3\x0c\xa5\xcc\x3a\xc0\xf4\x85\x6b\x06\x79\xa2\x45\x59\x3b\x84\x4c\x43\x04\xc3\x0b\x23\x2e\x06\x2c\x1f\x7c\x9f\xfd\x92\x39\xd1\xe0\xa7\x11\xd7\x0c\x48\xaf\xa2\x6d\xef\x1c\x61\x26\xe9\x09\xd2\x0a\x4b\x79\x4d\x21\x23\x42\x2b\x94\x36\x32\x4d\x73\x1a\xfb\xf1\xf0\xd7\xc0\x42\xf8\xb3\x7f\x19\x54\xdf\x05\xa5\xab\xa0\x46\x34\x4e\x8c\xc7\x64\xd0\xfc\x4e\x88\xb8\x20\xd6\xcf\xb2\xf6\x35\xb0\x8a\xb1\x3f\x60\xf9\xb4\xe0\x7b\xe8\x31\xa9\x30\x8b\xc8\x45\x82\xe5\x86\x41\x48\xce\xc6\x71\x52\x94\x38\xee\xee\x1e\x6f\x1f\x7a\xdf\xaf\xe0\xf2\xe5\x97\x17\xc3\x80\xa2\x24\x75\xee\xb9\xa1\xe0\x38\x46\x9a\x7d\x8e\xb9\x71\x05\x5a\xc1\xdf\x9c\x20\xb3\x26\x54\x7a\x71\xa2\x58\x3e\x15\x8c\xd4\x36\xcb\xc2\xda\x39\x7c\x57\x02\xb5\x84\x40\x91\xa6\x04\xf2\x4c\x1e\x6e\xa9\xc1\xb3\x68\xa2\xe8\xac\x75\x6b\x96\x60\x35\xe2\x62\x6a\xb8\x7c\x61\xd2\xa6\xf1\xe5\x8d\x52\xa6\x88\x10\xe9\x4c\x81\xca\xae\xc7\x5a\x96\x52\xf5\x92\x5d\xf1\xf1\x67\x22\x25\x1e\x93\x6d\x1c\xd0\x55\xca\xc3\xfd\xcf\xfe\x9f\xe0\x60\x6e\x22\xfb\x17\x46\xe8\x02\xfa\xdd\x7e\xba\x61\x1f\x4d\x20\xcf\x2d\x4f\x68\xb4\x61\xc0\xdd\xc7\x4e\xef\x6a\xd0\xfb\xac\x95\xf8\xce\x43\xf7\xaa\x20\x4a\xc0\x6f\x9d\x8f\x0f\xdd\xbb\x41\xf7\xbf\xbb\x17\x8f\x0f\x9d\xef\xaf\xba\x83\xeb\x9b\xcb\xee\xfd\xe0\xe2\xe6\xf3\xed\x55\x77\x45\x64\x4e\x6d\xe3\x8b\xd6\xd5\xf2\xa3\xe7\x0b\xdf\xc0\x0a\x6b\x5e\xe6\xdb\xcb\x20\x19\x0e\xd3\x04\x9c\xe0\xdc\x38\xc3\x31\x62\x3c\x26\xf0\xb5\x74\xd6\x19\x97\x6d\x72\x86\x7a\xea\x7d\x92\x20\x9c\x2a\x3e\xc5\xe0\xb5\x49\xe6\x7d\x86\x87\x9a\xb5\xe2\x24\xf1\xc2\xbb\x44\xca\x98\x66\xb1\xba\x31\x69\xe2\x8b\x13\xa2\xd9\xf9\xcc\xcb\x61\xb4\x7e\x83\x11\x65\x10\x40\x3c\xc5\xe2\xc9\xb8\x99\xf2\x2e\xf3\x43\x21\x11\x96\x7d\xa6\xc7\x45\xac\x61\xa8\x09\x85\xcf\x1b\x3d\x55\x4b\x9d\x29\x7e\x22\x9a\x2a\xd3\x34\x9a\xa0\x99\xe0\x63\x41\xa4\xb4\xb6\xe5\x08\x33\x13\x80\x60\x1f\xd7\xd7\x50\x9f\x31\xae\x49\xe1\x4c\xd8\x31\x99\x11\x16\x13\x16\x51\x93\xad\x08\xbe\xfb\xcc\xb4\x39\x16\x78\x36\x41\x92\x83\xd3\x1b\xc8\x0e\xf6\x2b\xf3\x92\xbb\xc9\xcc\x8c\xcd\xcf\xbe\x05\x5a\xa4\x9a\x4f\xdc\x80\x9c\x68\xa8\x0c\x2f\xbb\xcb\xd0\xb9\x5d\x8c\x1d\x70\x3a\x4b\x08\x74\x69\x49\x0e\x8b\xa1\x69\x5d\x58\x0f\xbd\x4c\x55\x8b\xa0\x2f\x6c\x37\x66\x2c\xed\x88\xce\x2a\x2c\xdb\xf6\x48\xa1\x1f\x30\x8b\x13\xdd\x8a\xf3\x61\x14\xcf\x22\x64\xd8\x74\xf4\xae\x71\xa7\x71\x9b\x5b\x34\xc2\xa9\xdc\xe6\x1a\x2d\xa5\x98\x1a\xab\xe0\x69\x1e\x14\x02\xdb\xdb\xe6\x97\x02\x75\x67\x9a\x45\xe2\x84\x5b\x2a\x99\xc7\x53\x1b\xb4\x0c\xa3\xa9\xb9\x66\x67\x82\xb2\x88\xce\x70\xb2\x91\xee\x57\xca\x31\xb0\xa1\xfb\xdf\xd0\x91\xde\x3e\xdf\x2e\xb8\x6d\x15\x11\x53\x48\x27\xb7\xc3\xcc\x96\x70\x0d\x4b\x92\x4d\xd6\x20\x32\x8f\x26\xc1\x82\xa7\xc6\x1f\x07\x74\x21\x71\xc5\x51\x3d\xab\x5a\x6e\x7d\x32\x70\x31\x00\x7a\x83\xc5\x36\x91\x3f\x75\xf4\x2b\xb5\x62\x7b\x37\xc1\x78\x38\xb9\xad\x6e\xb3\x6a\x05\xbc\x1f\xff\xbd\x6c\xef\x7c\xc6\x33\xbd\x67\xa2\x54\x2a\xf0\x14\x67\x73\xb4\x4a\x52\x29\x94\xdd\xf3\x9d\x67\x41\xed\xcd\x57\x23\x27\xa1\x0d\x80\x5a\xec\xa4\x10\x43\xe0\x21\x02\xd8\x3d\x3e\x4a\xb5\x2c\x8b\x30\x44\x21\xa0\x6f\xc8\xd9\xf8\x0c\xdd\xfc\xdc\xbd\xbb\xeb\x5d\x76\x4f\x50\xe7\xf6\xb6\x7b\x7d\x79\x82\x88\x8a\xbe\x75\x31\x8b\x36\x60\xa9\xcf\x14\xb7\xd2\xca\x1c\x4d\xf8\x0b\xf0\x46\x22\xc6\xa4\x30\x67\x17\xdd\x04\xa1\xca\x63\x2a\x95\x0d\x9f\xd5\x7c\x25\x1f\x96\x96\xf7\x2b\x77\x48\xaa\x26\xdb\x6c\x0d\x2c\x65\x3a\xd5\xba\xec\x80\xe2\xe9\x40\xf0\x64\x1b\xa6\x70\x09\x53\x01\x75\x39\x03\x53\xa0\x78\x8a\x74\xb3\x36\x14\x24\x73\x39\x66\x22\x9d\x16\x8c\x34\x5f\xd6\xf7\xa6\x77\x6f\x39\xef\x83\x8d\x47\xa3\x2e\x04\x02\xc0\x16\x6a\x58\x45\x6e\x36\x1e\x58\x4b\xfd\x00\x47\x91\x56\xb9\x77\x3c\xa9\xbc\xa3\xcc\x25\x60\x3b\xda\xdb\x34\x57\xed\x73\x37\xcc\x99\xe6\x60\x10\x0c\xac\xaf\x5c\xc9\x23\x9a\xb7\x5f\xd1\xef\x70\xbe\xd0\x2b\x6c\xd9\xb3\x3e\x7b\x94\x99\x49\xc5\x5c\xc2\x92\xc0\x4a\x4a\xf4\x32\x21\x70\x34\xe6\x68\x82\x9f\x49\xa1\x4b\x97\x43\xa2\x1b\x9e\xf3\x54\x54\x31\xba\x3e\xbb\x24\x33\x41\xb4\xa4\x5f\x76\xa0\x64\x7b\xfa\xae\xb8\x13\xc3\xbe\x0e\xfb\xfa\xe8\xf7\xf5\x45\x92\x4a\x45\x44\x47\x4a\x3a\x06\x43\xe2\x56\x02\x9c\x69\x6c\x30\xe3\x3c\x19\x34\xb0\x89\x34\xa7\x78\xc1\x13\x56\x08\xf8\x90\x06\xe9\x80\xa7\x20\x1f\x15\xae\x4d\xae\xef\x3a\x2f\x73\xd8\x0e\x6f\x09\x19\x9c\xcb\xac\xe3\x00\x25\xb6\x12\x71\x70\x55\x2b\xcb\x5a\x42\x7b\x17\x73\x2e\x8c\x7c\x93\xb9\xcb\xf2\x21\x96\x0e\x93\x13\x45\x28\x73\x64\xcb\x5f\x82\xfd\xac\x09\x6c\xe4\x8e\xdf\x53\xae\xb0\xfc\xf6\xac\xcf\xb4\x10\xf5\x44\xe6\xc6\xdc\xaa\xc5\x94\x3f\x6a\x59\xfc\x54\x12\x26\x21\xdc\xfb\x8f\xc6\x3d\xa7\xb7\xb8\x33\x57\x1b\xd5\x94\x4c\x67\x09\x56\x10\x74\x9d\xf5\x02\x21\xba\xb6\x51\x2b\x25\xe5\x01\xd0\x20\xe7\x9b\xb9\xd8\xdf\xcc\xf0\xc7\x44\x41\xe6\xb8\xa2\x0a\x74\xa6\x38\xd5\xe4\x59\x1c\xfa\x4a\xd3\x95\xd9\x15\x82\x83\x9f\x24\x4e\xb7\x63\xfc\x72\xb1\x8d\x95\x9c\x31\xd3\x16\xee\x6d\xcc\xfb\x07\x67\x37\x8a\x04\x67\xa5\x68\x18\xad\xcc\x99\x95\x1e\x1a\x76\xe0\xfc\xd7\x84\x9d\xbd\xd0\x27\x3a\x23\x31\xc5\x10\x01\xaf\xff\xfa\xa0\xe7\xf5\x1f\x17\x77\x37\xd7\x83\x3c\x93\xe7\xbf\xfa\xac\x93\x48\x9e\x65\x29\x20\xc6\x59\x16\x6e\x3f\x13\xc4\x89\x84\x76\x2e\x60\x75\xcd\xcd\x88\x7d\x56\x37\x82\x98\x47\xf2\x0c\xbf\xc8\x33\x3c\xc5\xff\xe4\x0c\x5c\xe9\x1d\xf8\x78\x91\xf0\x34\xfe\x05\xab\x68\xf2\x01\xce\xb5\xfa\x40\x9e\x09\x53\xc6\x4d\xa5\xc9\x15\x43\x4e\xb2\x84\x68\xfd\xff\xd0\x63\xce\x93\x8a\xa4\xd6\x64\x23\x32\x53\xe8\xff\x15\x64\xc8\xb9\xaa\xbe\xa4\xf8\x68\x24\xc9\x5a\x17\x52\xae\xa4\xdd\xdf\xa0\xbf\xff\xe7\x77\x7f\xd6\x5b\x68\x13\x1a\xf7\xee\x6f\x06\xfa\xfd\xff\xb8\xb4\xef\xcb\x35\xd8\x9d\x49\xa5\x95\xd6\xd5\x6c\xa8\x61\x02\xe7\x53\x06\xb7\x9f\x00\xe7\x05\xb0\x37\xd8\x0e\xf9\x3a\x56\x71\xb7\xcb\x42\xeb\xdb\xa9\x6c\x1b\x11\x13\x54\x6c\x6f\x8e\xe8\x14\x31\x8e\xa6\x26\xd6\x14\x33\xf4\xb7\x1f\xbf\xaf\x5e\xc0\x54\xd0\x8d\x3a\xa4\x16\x85\xc2\xeb\x52\xd2\x7f\x12\x89\xf4\xae\xd1\xbb\x98\x4f\x75\xd7\x82\xc8\x09\x4f\x62\xf4\x42\x40\x4d\xb2\x71\xa0\x99\x56\x2e\x48\x9f\xf9\x4d\x40\xc8\x21\xc2\x89\xe2\x63\x02\x77\xb5\x53\xd4\x14\x11\x5a\x54\x31\x59\x1a\x8a\x0b\x72\x62\x80\xd9\xee\xff\xea\x62\xab\x61\x9a\xf0\x93\x4b\x6a\xb1\x26\xb9\x78\x58\x3d\xf3\x51\xd9\xf4\x8a\xea\x6d\xf8\xe5\x45\xb6\x66\xdb\x6a\xd2\xd8\x24\x14\x6b\xc3\x2a\xaf\x4c\xf5\x60\x68\xc4\xd9\x20\xa1\xec\x69\xa3\xc5\x70\x89\xe1\x48\xb7\x60\x69\xa6\x5b\xcc\xec\xdc\xc6\x02\xb2\xc6\xf9\xf8\x98\x26\x89\x49\x6d\xf1\x97\x07\xe4\x2e\x43\x37\x10\x06\x66\x26\x07\x94\xc4\xd6\xef\x65\x35\x61\x41\x18\x04\xbc\xf5\xd9\x70\x6e\x7d\xb6\xf2\x04\xc9\x34\x9a\xb8\xcc\xbc\x88\x33\xa9\xc5\x68\x2e\x50\xc4\xa7\x53\xad\xf5\xc2\x92\x29\xce\x13\x69\xa3\xdd\xd9\xa9\xc2\x91\xea\xb3\xbc\xbf\x15\x27\xcf\x14\x65\xda\x2e\x75\xaf\xb9\x4b\x27\x2f\xfe\xb4\x54\xe0\xa6\xb1\x0f\x45\x01\x46\x30\xe3\x89\xf2\x40\x2d\xf8\xe2\x59\x32\x0b\x56\xa3\x19\xc8\x09\x17\x6a\x10\x57\xf2\x9c\x95\x9b\xa6\xcc\x08\x19\x39\x4d\x20\x68\x98\x3f\x6b\xe1\x9f\xbc\x64\xc6\xd7\x65\x43\xd0\xbb\x7a\xd9\x08\x9a\x1d\xa3\xa5\x23\x5b\x77\x0b\xd6\xd0\xca\x00\x93\x44\xc5\x98\xf0\x55\x63\xbc\x87\xb7\x2e\xf4\x4b\x4b\x89\x57\x3e\x77\x4e\x08\xe2\x71\x8e\xa1\x67\xee\x75\x9b\x11\xb2\x8c\xa6\x16\x3a\x61\x7f\x99\xa3\xcb\xa6\xf2\x58\xb4\xe4\xea\xb1\x80\xc9\x5e\x12\x90\x35\xb1\x18\x52\x25\xb0\x28\x00\xa0\x64\xfa\xa0\x24\x58\x40\x7c\x56\x9f\x19\x38\x3c\xa3\x29\xc4\x28\xa6\x12\x12\x44\xe0\x2e\xf5\x9c\x61\xa8\x99\x12\x58\x3a\xda\x79\x9e\xa3\x89\x3f\x87\xc0\xb2\x7c\x6b\x38\x66\xa7\x3b\xca\x60\xbf\xb4\x7e\xc6\xa3\x34\x17\xe4\x22\x90\x70\x2d\x54\x10\xa2\x4c\xd2\xf1\x44\x21\xca\xac\xdd\x11\x27\x63\x2e\xa8\x9a\x4c\xe5\x09\x1a\xa6\x52\x6b\xa1\x26\x58\xcd\xc4\xa3\x10\x15\x35\xe2\x42\xdb\x26\x11\xc7\xa5\x06\x17\x55\x94\x0d\xb6\x46\xb3\x43\xd9\x2d\xdd\x15\x2b\x36\x4e\x27\x83\x4f\x2c\xb7\x41\x89\xcc\x50\x37\x91\x89\x03\xe4\x0e\xb0\xea\xf7\x94\x48\x55\x77\x0e\x00\xec\x72\x67\x5e\x8a\x43\x54\xd2\x42\x26\x19\x54\x10\x17\xbb\x0d\x92\x57\x11\x70\xd3\x80\x52\x65\x4e\xa7\xe9\x4c\x55\x06\x6e\x2d\xba\x8a\xee\x3c\x28\xa3\x66\xc4\x86\x64\x2c\xd8\xcd\x00\x40\xd7\x67\xf7\x84\xd4\xe3\xd3\x2d\xac\xfd\x6f\x70\x94\x60\x0a\x36\xd1\x63\xf9\x96\xdf\xc6\x89\x7d\xd9\xbd\xbf\xb8\xeb\xdd\x1a\xc8\x89\x9b\xbb\xcf\x9d\x87\x41\x85\x5f\xbb\xe2\xa9\xcf\x9d\xbb\x1f\x2f\x57\x3f\xf6\xc3\x43\x31\x2b\xbb\xe2\x91\xbb\xfb\xe5\xc9\x1c\x0d\x86\x58\x91\x14\x56\xd9\xcf\x39\x9a\xcd\xd5\x84\xb3\x2c\x44\x21\x2e\xf0\xa6\x53\x64\x32\x82\x15\x84\x10\x09\xa9\x2a\x1c\x87\x0f\x10\x97\xb3\x5a\xc2\x2c\x2e\x96\x41\x97\xdb\xa9\x68\xb4\xc6\x89\xfc\x94\xf0\x21\xf8\xad\xad\xec\x63\x81\xe9\x96\x44\xa0\x6f\x19\xef\x73\x49\xe5\x2c\xc1\xf3\x85\x1e\x56\x5d\x39\xd7\x78\x4a\x20\xe2\x38\x87\xc5\x73\xc9\x22\x7a\x65\x20\x81\x29\xbb\xd7\xe9\x08\x32\x99\x14\xc5\x8a\xa0\x21\x51\x2f\x90\x37\xe7\xbe\xcd\x6c\xa9\x2e\x60\x44\x9e\xf5\x19\x98\x73\xfa\x9a\xc8\x71\x0a\xd1\x7e\xfd\x77\x27\xa8\xff\x2e\x26\xcf\x24\xe1\x33\xbd\xf2\xfa\x8b\x9a\x4b\xa6\x3b\xc5\x34\xb9\xe6\x2a\xb3\xcc\x6d\xb3\x9e\x82\x44\x74\x06\x92\xf9\x80\xe8\x76\x0f\x27\x78\x14\x76\xb2\x63\x67\x30\x06\x84\xe3\x58\x2b\xd9\xc0\xca\xdc\xf0\xf2\x10\x20\xe6\x4d\xbd\x50\xec\x72\x1d\x91\x22\x33\x7f\x9b\x1e\xfd\x36\x8b\x66\xcf\xca\x15\x60\xcf\x7b\x74\xc9\x6e\x7b\x91\x6b\xad\xe4\x47\x32\x87\x14\x8c\x5b\x4c\xc5\x86\xae\xd9\xaa\x98\xd7\xbd\x38\x69\xbb\x15\x1d\xb5\xc8\x5d\x5b\x4d\x87\xed\x1c\xb7\x59\xac\xde\xa1\xb4\x54\x17\xcb\x95\x75\xdc\x50\x6d\x7d\xac\x53\x52\x6b\x43\x18\x50\x59\xf1\x9a\x91\x68\x0d\x8d\x2b\x1b\xe0\xbd\x7e\x6f\xa5\xa6\x92\x89\x6b\x2e\xfe\x2e\x5f\x05\x9b\x1c\x5f\xce\xc7\x27\x2b\x47\x1c\x25\x5c\x16\xb1\x72\x1a\x0f\xfa\xc2\xbe\xba\x6c\xdc\x5d\x7f\xfb\x6a\xb9\x70\xad\x80\x86\x0a\xc2\x97\x30\x2e\xcd\x3d\xa3\xac\x87\xcc\x3e\x7d\x82\x28\x44\x5b\x82\x42\x96\xe4\xc8\x01\x2c\x46\xb9\x1b\xa4\xcf\xf2\x98\x15\x89\x5e\x48\x02\x61\x6e\x11\x9f\xce\xc0\xc4\x6f\x87\x6b\x5b\x22\xb1\x89\x18\x3e\x41\x3c\x55\xba\x31\x93\x93\xe3\x8c\xb8\x36\xe1\x27\x77\x7b\x18\xdf\x9b\x0d\x7e\xcf\xf0\xb2\xcd\x5e\x37\x77\x29\x65\xe8\x13\x51\xd0\x0a\x94\x59\xf0\x27\x08\x7a\x42\x39\x84\xb2\x9a\xf6\x5b\x9c\x28\x3b\x93\x35\x56\x3e\x07\x4e\xf9\x3e\xe1\xc3\xe5\x46\x02\x68\x1c\x3d\xde\xf5\x9c\x45\x32\x8f\x9f\xf2\x40\x99\x0b\x1e\xc5\xee\xed\x5d\xf7\xa2\xf3\xd0\xbd\x3c\x43\x8f\x92\x68\xf2\x64\xd3\x85\xfc\xea\x4c\x25\x31\x23\xb7\x48\x2c\x4c\x2a\x82\xeb\x0c\x21\x44\x88\x42\x16\xf4\x0a\xc6\x51\x84\x69\x59\xbe\xb1\x01\x24\x85\x5a\x43\x1d\x00\x0b\x95\xe7\x69\x23\xf3\x56\x9d\x40\x88\x93\x1a\x1c\x4f\x94\x9a\x19\xef\x74\x31\x32\x6f\xd5\xf6\x29\x46\xf4\xed\x7b\x32\x70\xb4\xd4\x84\x50\x81\x1a\x4d\xcb\x6c\xaa\x41\xf3\x39\x79\x21\xee\x9f\xf1\x6c\x79\xfa\x29\x7e\x29\x6c\x5a\x23\x0a\x7b\xbe\xfb\x7d\x9f\x03\xc7\xd6\x06\x86\x15\x6e\x3f\xc1\xdc\xa1\x65\x78\x6b\xc6\x37\x4d\xc6\x87\x74\x46\x32\x7f\x62\xa5\x41\xd8\x38\x56\x89\xe0\xec\xc0\x37\x94\xa1\xc2\x95\x78\x82\x46\xf4\x8b\x6d\x34\x8f\x6f\x77\x8f\x7a\x01\x0f\x35\xf1\x94\x13\xbc\x78\xa6\xd6\x10\x1b\x6e\xe1\xfd\xa5\x42\x24\x97\x5a\x24\x8a\xb4\xb8\x24\x48\xc4\x85\xbe\x29\xa0\xdb\xdc\x0b\xb1\x4a\x64\x50\x58\x68\xa2\x2c\x7a\x65\x96\x9d\xfe\xbc\xb4\x4a\x8c\x15\x39\xd5\xa2\xd7\x8a\x04\x68\x9b\x23\x03\xd9\x34\x58\x79\x70\x60\xf9\xcd\x33\x24\x63\xcc\x5c\x68\x76\xcd\x70\xdd\x95\xb7\x05\xab\xd2\x2a\x10\x86\xf4\x30\x90\xaf\x20\xf5\xa7\x30\x0e\x39\x03\x7a\x2e\x1d\x87\x8d\x7e\x69\x03\xd9\x5e\x70\x16\x8c\x53\x33\xd8\x74\x16\xb7\x69\xb0\x09\x96\x0a\xd9\x31\xd5\x99\x22\x3c\x15\x71\xbf\x46\xd8\x82\x6e\xdf\x54\x79\xd3\x5b\xa8\xa8\xc5\x12\xf0\x8c\x48\x87\x9b\x62\x50\x62\xb4\x4e\xe3\x04\xe1\x0b\x58\xa1\xec\x6c\xdf\x19\x29\xcb\xdd\x12\x3e\x33\x81\x20\xfd\xc5\xa6\xcf\x50\x87\x2d\xe0\x65\xb9\xb8\xac\x02\xbd\xcc\x9d\x84\x93\x17\x3c\x97\x68\x26\x0c\xb4\x8c\x89\xdc\x77\x93\x07\x0d\xac\xf8\x52\x16\x0a\xa1\x5c\xea\x04\x02\x5b\xcc\xea\xa0\x39\x27\xf7\x0e\xf6\xe0\xca\x2b\x45\x95\x67\x02\x79\xde\x5c\x6e\xab\x68\xc0\xea\x14\x19\x44\x13\xcc\xc6\x64\xe0\x8c\xac\x9b\x68\x4b\xba\x9d\x0b\x68\xe6\xd2\xb6\x52\x7d\x39\xdd\x1a\x85\xc9\x96\xb5\x31\x8f\x66\x06\x44\x7d\x08\xa4\xc2\x63\x82\xcc\x88\x1a\x99\xa5\x0b\x11\x63\x16\x6c\x18\xf4\x04\xdb\x6a\xb7\x18\x45\x5f\x27\xbc\x43\xe8\xd3\x15\x1e\x92\xe4\x75\x22\x27\xa0\x6b\x6b\x9c\x07\x6f\x9d\xc9\x06\x20\xe8\x05\xec\xf9\x25\x96\x61\xad\xf7\x22\xad\xca\x0d\x58\x36\x4f\x38\x72\xf6\xa4\x6d\x33\x51\x57\x02\x65\x93\xa9\xd6\x15\x46\xf1\xaf\x3d\xaf\x80\x48\x95\x81\xcd\xbf\xfe\xca\x36\xe5\xcd\x06\xe2\xd5\x31\xa9\x19\xc7\xd6\x85\x4c\x56\x4e\x65\x63\x90\x81\x86\x35\x0b\x7b\x23\xc4\x38\x23\x88\xca\xfc\x61\x55\x4c\x87\xca\x20\x7a\xb4\x88\x6f\x8c\x2f\x59\xf1\xb1\xac\xa6\xd4\xbe\x2d\x2d\x39\x78\x42\x66\x1b\x70\xf9\xdd\x8c\x68\x45\x15\x8b\x39\x40\x7c\x1a\x3e\x5c\x94\xe9\x56\x8e\x73\xe7\x02\xf7\x83\x43\x70\xf5\x22\x75\x15\x47\x20\x46\x96\x06\x87\x0c\x0e\xaa\x7d\xc8\xbe\x64\x61\x6a\xfa\x2c\xb3\x6c\xc0\x46\xa4\x12\x4d\xf1\x0c\x7c\x7a\x8c\xab\xfc\x2d\x03\xbb\xa4\xb2\x25\x3c\x71\x82\xb8\x34\xa5\xc1\x56\x53\x80\x8b\xf1\x36\xa1\x1a\xcd\xcb\x3f\x34\x37\x2c\xb9\xcb\x3f\x5f\xd5\x22\xb8\xa6\x03\x06\x1e\xd3\x67\xc2\xdc\x89\x3a\x71\x27\x52\x93\xc4\x4d\x39\x99\x9f\x62\x08\x72\x26\xb1\xef\x77\x59\xce\x0f\x8d\x39\xa8\x0d\xd6\xd0\xe6\x24\x7b\xa8\x0c\xe2\x31\x10\x6d\x05\x6c\x7d\x17\x96\xee\x9f\x11\x8b\x1a\x6c\xf2\xd0\xb1\x44\x7f\x64\x5c\xfd\xd1\xc3\x55\x76\xa6\x13\x78\xd5\x19\xc0\x4e\x16\xea\xe0\x00\xcb\xb0\xdb\x16\x61\x0f\xdf\x6b\x25\xe5\xb7\x8d\x4c\xc8\xc3\xee\xf7\x2a\x0b\x77\x17\x73\xf0\xea\x0a\x89\x85\x78\x01\x54\xbe\x94\xca\xe6\x56\x53\xab\x30\x3f\xe9\x05\x33\xab\x5c\x15\x20\x90\xad\x45\xa3\xc0\x80\x05\x3c\x82\x6d\x76\xdb\xb4\x71\xdc\xd6\x0a\x08\xe6\x6a\xab\xc8\x26\x59\xa6\x75\x5a\x81\x28\x06\xce\xd9\x22\x1c\x35\x18\xc3\x67\x7d\xf6\x91\x0b\x2b\x00\x48\x5b\xe5\x60\x88\xa3\xa7\x53\xc2\x62\x84\x53\x35\x31\x58\xbf\xd6\xab\x31\xb7\xbb\x41\xcb\x39\xb0\x6d\x32\x20\x0f\x2a\x23\x2c\x62\x57\x6f\xe3\x99\xbb\x51\xf4\x99\xd7\x08\xd4\x51\x80\xea\x59\x50\xd6\xb8\x4e\xd1\x25\x52\x6b\x77\x75\xb4\xa8\xaa\x6c\xbb\x50\xd7\x76\xf9\x39\x2b\x54\xea\x85\x0a\x10\x10\x5e\xc5\x47\x8b\xd4\xe9\x39\x5b\xa7\xd3\x2e\xf5\x7e\x5e\xf4\x81\x9c\x58\x7d\xc6\x18\xc4\xec\x0c\xb4\x9c\xf5\x9d\xe3\xb5\x05\xcc\xe2\x51\x2a\x20\x58\xb8\xaa\xcd\x6f\xa2\x09\x4d\x72\xcf\xc9\xb7\x27\xd9\x30\x75\x93\x09\x79\x26\x89\x41\xcc\x8f\x04\xe4\x05\x18\x9b\xe5\x77\xe8\x7f\x9b\x6a\xaf\xe8\xcf\x7d\xf6\x09\xd8\x70\x92\xcc\x01\xcf\x33\x6b\x19\xab\x52\x33\x4f\x95\x03\x50\x36\x11\x09\x15\x07\x62\xd6\x7a\x82\x9f\x49\x9f\xb9\x66\xfe\x37\x7a\x42\x7f\x42\x7f\xae\x53\x2e\x5d\x78\xff\x9e\xad\x2c\x1f\xbd\xe0\x79\xef\x96\xb3\x8c\xd2\xf2\x1b\x67\x84\x29\x98\x40\x2b\x70\x3d\x32\x58\x6e\xca\x9e\x79\xb4\x90\x43\xe2\x9f\x5a\x2c\x08\x53\x03\xc6\x63\x32\x20\x15\x0e\xd5\x25\x4c\x42\x0b\x01\xd7\x3c\x26\x2b\xdd\xa1\x19\x33\xfd\x05\x0c\x47\x32\x1d\x66\xcb\x01\xf0\x02\x59\x2e\x79\x66\xfb\x28\xee\xb4\xea\x91\x67\xd8\xb7\x9b\x8c\x7b\x53\x57\x6e\x2e\x36\xe2\x1c\x7c\xb7\xda\x9d\x98\x60\xe5\xa4\xc9\xf2\x71\x2c\xbb\x21\xf4\xc3\x7a\xe6\xf6\xb2\xf2\x50\x7d\xa1\xf2\x8a\xa0\x63\xaa\xb5\x87\xe6\xee\x62\xe0\x84\x9b\xf8\x52\x0c\xc4\x69\x23\x67\x4a\x4e\x0a\x07\xf3\x72\x9a\xed\xbf\xdc\x05\x3a\xe4\x69\x59\x7d\xb0\x04\xa0\xd2\x0f\x36\xb0\x9a\xc2\x5c\xf3\xe1\xb1\xc9\x3f\x24\x13\x6a\x32\xfe\x3b\x17\x57\x48\x9f\x0e\x3e\x35\xb0\x58\x40\xb4\x54\x4d\xb8\xa0\xff\x5c\xb6\xb7\xb1\x50\x74\x84\x23\x35\xd8\x49\x15\x99\xfa\xcd\xd4\xb1\xfd\xf4\xea\x2b\xd5\x2d\x20\x1c\xe0\x67\xe2\x05\x20\x42\x78\xa1\x6d\x45\x66\x8e\xdc\x32\xbf\xe5\x02\x31\xfe\x92\xc3\x62\xb9\xf7\x01\x09\xda\x4b\xdc\xc0\x5a\xe5\x9a\x41\x04\xb1\xa4\xb0\x3f\x01\xa4\xea\xbd\x32\x49\x99\x00\x70\x6e\xe0\xa5\xf4\xf6\x9c\x60\x16\x27\xee\x0a\x41\xdc\x44\xf4\xcc\x5f\xf0\x7c\x2d\x9f\xba\x1f\x57\x99\x67\xe9\x99\xe5\x2f\x2a\x41\xc0\x03\x8c\xa4\xa6\x0a\xaa\x66\x95\x22\x8c\x86\x29\x00\xeb\x6a\x9a\x8c\xd2\xc4\x54\xe3\x88\xb8\x88\xcf\xfa\xcc\x06\x54\x7b\xbd\x69\x11\xd0\x69\x4d\x58\x65\x0d\x52\x8b\x3f\x6a\xeb\x7d\x18\xb3\xdc\x52\xb9\xfe\xa7\x94\xa4\x3b\x4a\xab\x7c\xd5\x40\xf4\x07\x3c\x96\x79\x64\xb9\xa1\x8d\xbe\xf2\x72\xfa\xfe\xae\x67\x2a\xbd\x44\x64\x67\x2e\xce\x70\xbd\x8c\x9d\xc5\x14\xb1\x5d\xcb\x4c\x77\x67\xea\x19\xec\xc0\x4e\x77\x88\x20\x9d\x45\xd1\xb3\x82\xab\xdb\xed\xf7\x9c\xa5\xe5\xa2\xc3\x18\xbf\x5c\x61\x88\x92\x50\xb7\x47\x3b\xd8\x06\x77\xc7\xa2\xae\xb2\x34\xd4\x3d\xb7\x8a\x65\xb7\x45\x45\x86\xbc\xe2\x90\x4b\xf3\x22\x28\xc0\xfe\xcd\xf3\x87\xb3\x7a\xcd\xee\x16\xf6\x79\x8c\x16\xfe\x8c\xb6\x00\xc1\x3a\x8e\x84\xf3\xea\xab\x73\x0d\xbb\x8e\x6d\xa8\xd8\xf5\x62\x30\x46\xdd\x89\x30\x2c\xa9\xad\x47\x62\x11\xf3\x67\xe5\x61\xc8\xca\xbb\xbc\x8e\x55\x38\x93\x18\x0f\x77\x32\xb2\xed\x38\x88\x70\x34\xa9\x9d\xd4\x90\xf3\x84\x60\x56\xa7\x14\x54\xfe\x5c\x3e\x22\x06\xb1\x16\x58\x77\x92\x00\x6c\xb3\x23\x81\x2d\xf5\x99\x6b\x45\x2c\x06\xb8\x7d\xc3\xc3\x4d\xc0\xa7\x1b\xa8\x22\xcc\x19\xd4\x28\x1b\x27\xa4\x4c\x2b\x5b\x17\xe1\xc4\x76\x92\x44\x69\xe2\xd5\xfa\x9c\x11\xa1\x47\xad\x49\xfc\x4c\x98\x56\xc5\xec\x38\x9c\x87\xea\xc5\x65\xb9\x67\x15\xbe\x4e\xb2\xae\x9d\x93\x14\x52\x49\xe3\x3e\x83\x83\xcb\x8b\x87\x55\xef\x55\xa9\xb5\x37\xdf\xdc\xb7\xf1\xe9\xf4\x84\x88\xb5\x8f\xe7\x7d\xd1\xf6\xbf\xf6\x99\x34\x7d\x0f\x20\x70\x64\x6b\x7f\xa9\xe7\x53\xcb\xf1\x37\xcc\xc2\x3a\x8c\xb5\x03\x79\x06\x20\x14\xa7\x18\x4b\xec\x45\xe2\xd4\x61\x7c\xed\xf5\x2e\xc9\x6b\x9a\xb8\xdb\xa0\xe1\x50\x96\xc6\x1f\x34\x8c\x26\x00\xa3\xef\xb2\x73\x7b\x65\xa5\xfa\xa2\x1f\x3e\x4b\xda\xca\x63\x57\x6d\xd5\x5e\x25\x30\x40\x4e\x00\x50\xc0\x2f\xc6\x70\x41\xa5\x11\xee\x5d\xed\x92\xe9\x4c\xcd\x6d\xa9\x3b\xb8\x17\x0b\xf2\x3e\xc0\xf8\x55\xf9\xfc\xcb\x77\x64\x5c\xf0\xfa\x57\x75\x06\x1d\x59\x6b\x4d\x65\x93\x8e\xd0\x3e\x2c\x4c\x09\x86\xa3\x2e\xc4\xc7\x54\x0d\x1e\xe0\xa4\xd6\x44\xb8\x03\xa6\x09\xca\x51\x0e\xbd\x61\x11\x7d\x95\x48\x89\xe6\x5d\x38\x49\x4a\xf3\xc2\x90\xe3\xae\xb2\xca\x81\xc3\xbc\xbc\x71\xf3\x08\x84\x04\x0f\xc9\x5a\x31\x07\x57\xe6\x85\xa5\xbb\x08\x1e\x81\x70\xfd\xd9\x2c\x99\x37\x4b\x13\xf0\xb5\xdf\x4a\xe4\xbb\x55\x03\xf3\xf1\xf2\x96\xde\x4d\x45\xcc\xb9\xcd\x86\x28\x49\x94\x0a\xaa\xe6\x03\x6b\x4b\x6d\xce\xb4\xee\xed\x9b\x17\xf6\xc5\x26\x86\x8a\x73\xe4\xfa\x73\xb6\x5b\xb8\xa7\x04\x35\x65\x91\xec\x14\x9a\x2c\x37\x4e\xd5\xa4\x12\x11\x6b\x19\x61\x1d\x24\x57\xb3\xa1\xea\x2e\x36\x1d\x9e\x2d\xb7\x32\xe0\x23\x07\x76\xd5\x9c\xb0\xe5\x3a\x34\x6b\x18\xa1\x1d\xa6\xf6\x4c\x50\x2e\x6c\xb9\x97\x26\x91\x8a\x53\xfc\x65\x30\xc3\x02\x27\x09\x49\xa8\x9c\x6e\x6e\x32\xff\xeb\x5f\x96\x8e\xf6\xc2\x94\x25\x32\x83\x9d\xe2\x2f\x74\x9a\x4e\x11\x4b\xa7\x43\x2b\xe5\x62\xf9\xe4\x23\x9a\x3a\xfc\x05\x03\xcc\xe5\x06\x58\x40\x81\x10\x1e\x46\x6d\x9f\x79\x68\xe5\xd6\x54\x81\xa3\x09\x25\xcf\x80\xa5\x2a\x18\x91\xf2\x0c\x5d\x73\x45\xce\xd1\x67\x3c\x7b\x00\x41\xcd\xd4\x09\x1d\x1b\xa7\x03\x96\x48\x4b\xad\x29\xa3\xea\xa4\xcf\x2c\xc4\xb9\xa3\xca\x87\x88\x33\x03\x73\x1b\x01\x61\xb3\x26\xc0\x8a\xee\xf0\x5e\x95\xcb\x56\xa5\xb2\x86\xd8\x02\xbf\x0c\xbc\x90\xe4\x81\x49\xf9\x58\x63\x1f\xdf\xe1\x17\x13\x84\x7f\x89\x15\x36\x25\x80\x97\x49\xee\x36\xca\xcd\x96\x85\x32\xe8\xce\x2e\x1a\x88\x5b\x88\x91\xac\xa0\x9d\x09\x39\xfe\x86\x9e\x91\x33\xf4\x7d\xc2\x87\xf2\x24\x37\x55\x99\x1f\x25\x51\xf2\xc4\xf8\xfd\xe0\x6f\x93\xdf\xf7\xad\xa3\x7e\xce\xf7\xa1\x96\xe3\x88\x7e\x31\xc8\x26\xf2\xaf\xe7\x1f\x3e\x4c\xe7\xa7\xc3\x34\x7a\x22\x4a\x7f\x02\x99\xa2\x92\x42\x0e\x16\x0c\x57\x81\x8c\xad\xa2\xce\x22\x40\x59\xa3\x1d\x69\x73\xa5\x24\x01\x30\x7c\x7d\xa5\x67\xd5\x72\x1d\x9e\x15\x67\xd5\xa5\x40\xed\x94\x45\x5a\x77\xbc\x0a\x28\xda\x87\xd1\x56\x4c\x35\x60\x1f\xbc\x7b\x94\xe0\x71\x49\x65\x59\x43\x49\xb9\x99\x52\xbb\x8b\xf4\xdc\x21\x88\x46\x9f\xb2\x62\xe8\xe0\x7b\xe7\xe5\x05\x6f\xad\xf5\x62\x9d\xf5\x59\x47\xa2\x17\x62\x8a\xfc\x42\xa2\x29\x38\x7d\x52\x2a\x27\x59\x9a\x29\x98\xa1\xa1\x51\x83\x71\x6c\xa0\x30\xac\xe2\xe8\x34\x2b\xe7\x16\xb3\x1a\x28\x4e\x24\x39\xd1\x0d\x83\x49\xd5\x45\x87\xa2\x17\x81\x67\x33\x22\xfa\xcc\xe2\xd5\x02\x2a\x3b\xe7\x36\xf2\xa7\x2e\x45\x20\x68\x94\x87\xd5\x28\x3d\xda\x93\x62\x16\xea\xaa\xf3\x0d\x49\xab\xcb\x28\x5c\x95\x87\xe9\xc8\xa7\x65\xd1\xa6\xe1\xfb\xaf\x6f\x36\x6e\x38\xe6\x55\xda\x79\xa7\x94\x7b\x01\x35\xc4\xa7\xa0\x40\xca\xbc\x54\xaa\xb3\xf5\x65\xea\x7b\x41\xcc\x01\xb8\x73\x78\x39\xe6\x44\x7a\x46\x7c\x94\xd9\xe2\x12\x3a\x22\x5a\xfa\xe8\x33\xbd\x8d\x7d\x87\x83\x41\x4d\x77\x20\xea\xba\xd3\x48\x70\x29\x6d\x3a\x85\x69\x67\x79\x52\xdc\x16\x05\x1a\x0d\xf4\x7b\xef\xe6\x7a\xb0\x58\xaa\xd1\xfb\xcd\x15\x6d\xb4\x3f\x56\x22\x27\xd4\x36\xb5\xb2\x44\x63\x4e\x8b\x35\x8a\x34\x7e\xb8\xb8\xea\x65\x95\xc9\x4a\x5d\x2f\x56\x69\xf4\xe1\xf2\xeb\xeb\x34\x2e\xce\xd8\xab\xd8\x58\x6a\x62\x49\xcd\xc6\xd5\x8b\x55\x0c\xe2\xde\x06\x0b\xb1\xb4\xf4\x2b\xf9\x43\x71\xcf\xac\xca\x35\xd8\xd1\x32\xd5\x5c\x2b\x11\x08\x8c\xfb\x0e\x5c\x00\xc1\x4b\x3f\x25\x15\x9e\xce\xfc\x3c\x5a\x07\x06\x6b\xa7\x69\x8e\x5a\xdd\x25\x78\x50\x90\xfa\x08\x9b\x20\xa1\xf2\xe0\x16\x96\x62\x3d\x8f\xd7\x83\xc5\xbe\xdf\x45\x6c\xfa\xe1\x12\xd3\x93\x79\x1e\x0c\x29\xad\xec\xe6\xea\xaa\xd7\xd8\xfd\x87\x24\xc3\xf9\xaf\x5d\xd0\x6d\x33\x4f\x33\x3c\x30\x41\xb0\xb4\xee\x6f\x48\xd0\x2c\x25\x6f\xad\x61\x1e\xce\xc6\x6c\x52\xbc\x4f\xb3\xca\x1a\xde\x55\x63\x8b\xc5\x45\xee\x20\x52\x21\xc8\x33\x11\xb0\x77\x6c\x28\x15\x2b\x1e\x55\x9c\x08\x82\xe3\xb9\x47\x91\x2c\x8e\xc3\xf4\x0c\xe6\x31\x49\xa7\x5a\x81\x07\xd5\x84\xf1\x53\x3e\x73\x3a\x4b\xe1\x29\x28\x8b\x42\x47\xfa\xc6\xf2\xa2\x40\xf4\x1b\xec\x94\x7c\xa1\x52\x69\xb9\xa2\x22\x04\xd6\x35\x02\x12\x0f\x14\x4b\x9b\x10\x7b\xc3\xf5\xdf\x75\xbe\xbf\xb9\x7b\xe8\x5e\xf6\xdf\xe5\x29\x17\x2e\xa7\x30\x83\xf9\x72\x55\x1b\x38\xeb\xb3\x2c\x4e\x39\x43\xb5\x86\xb5\x44\x38\x8e\xf3\xf8\x68\xab\x44\x1a\x99\x6d\x29\x47\xf6\x4e\xc5\xca\x08\xe5\x25\xcd\x3c\x42\x62\x59\x5b\x4f\xd6\x12\xd7\x59\xe1\xe4\x98\xf4\xb8\x25\x79\x4c\x3b\xba\x6c\x7c\x40\x5e\x65\x74\x6d\xa2\x1c\x62\x24\x23\x2f\x4e\x57\x82\xdb\xf9\x03\x36\x97\xf0\x7a\xdc\xce\x2d\xc8\x06\x8b\xfa\x91\x7e\x21\xf1\x5d\x8d\x54\xb5\x93\x34\xa5\x46\x01\x96\x95\xab\x90\x32\xba\x8e\xc6\x9f\x4d\xe5\x51\xbf\xd7\x9c\x2d\xdd\xe4\x38\x7b\x39\x66\x2e\x00\xe6\x2a\x84\x51\x44\x84\xc2\x94\xa1\x11\x1c\x6c\x16\xcd\x11\xa0\xb0\x10\xf0\x61\xff\x05\x4d\x29\x03\x38\x88\x65\xa4\x7d\x2c\xce\x63\x0d\xa1\xf5\x73\xef\xfa\xf1\xa1\x20\xaa\xfe\x70\xf3\x58\xac\xd4\xdf\xf9\x75\xa9\xac\x5a\x6a\x61\x59\xb0\x90\x37\xc5\x3c\xb5\xd4\x42\x07\x67\x94\xa9\x9c\x68\x32\x57\xe4\xf1\xee\x6a\x2b\xf9\xae\xda\x59\x56\x0b\xfc\xee\x4b\x57\xd5\x30\x17\x4d\x5e\x8d\x49\xb4\x0a\x9a\xb6\xf9\x3e\x32\x51\x50\x9a\x0e\xd6\x9a\x68\x61\xeb\xb0\x44\x33\x2c\xac\x1f\x2a\x36\x01\x50\xc5\x72\x6f\x46\xf3\x5a\x06\x0b\xf2\x89\xa8\x9f\xf5\xd5\xc7\xd9\x2e\x92\x4b\xac\x28\x0b\xfe\x51\x32\x78\x36\x0d\xaf\x71\xd2\xec\x50\x96\xe4\x2f\x39\x61\x19\x7a\x40\xb6\x07\x1f\x4c\xe3\xcc\x94\xfd\xef\xe8\xe6\x80\x22\x2e\x4c\x53\xab\xa4\x9c\xe9\x1d\x69\x30\x72\x1d\xb0\xae\xd7\x1c\x1f\x99\x97\x1b\xc2\x0c\x7a\xc9\x02\xba\xad\x9c\x94\xa8\x73\xdb\xab\xa0\xf5\x55\xd9\x85\xf4\xb6\x6a\x14\x25\x99\x37\x6b\xd7\xc8\x57\x5e\xce\x69\x2b\xa0\xae\xec\x4c\xb7\xc3\xb6\x32\x4e\xff\xdb\x62\x24\x41\x1b\x20\x98\xab\x54\x86\x42\x2e\xf9\x0a\xb4\xe5\xf5\xd2\x2b\x73\x32\xac\x89\x64\xe5\x0f\xc8\x66\xd7\xf8\xe8\x4d\x8b\xa1\xdb\x27\x3e\x9a\x13\x37\x55\x90\x6d\x6c\xc1\xce\x10\xae\xf2\xd9\x34\x81\xb8\xfa\xd9\xec\xe8\x0c\x01\x05\x30\x5d\x5c\x95\x4d\x17\x72\x6d\x01\x09\xfc\xe9\xfa\xbb\x6d\x3d\x54\xac\x7c\x7c\xce\xfc\x6d\x01\xc6\xf1\x0c\x5b\xbb\x03\x28\x51\xae\xfc\x45\x55\xb5\xc4\xb3\x3e\xf3\x02\x56\xa4\x51\x7b\xf4\x19\x71\x15\x67\xa0\x8c\x31\x03\xb4\x72\xc8\x7d\xca\x84\x9f\xc2\x0a\x94\x71\x0f\xd4\xa4\x58\x33\x66\xa1\x1f\x7b\x3a\xe5\x04\xbb\xec\x52\x67\x41\xb1\x71\x80\xbe\x7d\x09\xda\xf3\xaa\x44\xd8\x8e\xc1\x1c\x0d\x46\x0b\xec\xd5\x20\xf4\x10\x09\x62\x4e\x24\x7b\xaf\xb2\xfc\x5d\x9a\xcc\x5d\x48\x75\xc9\x3d\xa0\xa5\x3a\x4c\x6d\xcb\xcb\x0f\xf8\x0e\x20\xb7\xd6\x55\x1c\xbc\x63\xb5\xd2\x4c\xe5\x7c\xbc\xb0\x13\xfc\x58\x24\xe8\xb4\xce\xaa\xfe\x65\x46\xa2\x4d\x70\x81\x6e\xb1\xc0\x53\xa2\x88\x58\x16\x8e\x54\xac\x10\x0e\x22\x8e\x5b\x41\xdb\xaf\x59\x45\x53\x3e\xa5\x5c\x67\x27\xd3\x6e\xaf\x56\xe1\xfc\x64\xb3\x58\x0b\xd2\x4c\x4f\xe3\x67\x6b\xf9\x5f\x73\x16\xb6\x9f\x7c\x1a\x36\xda\xca\x83\x75\xda\x76\x4e\x87\xc1\xb7\x79\x58\x40\x8a\x29\x84\x0b\xb5\x04\xd8\x66\xf5\x28\xeb\x10\x6d\x56\xf1\xd2\x9d\xf0\x6e\x97\xe1\xe0\x32\x93\x4b\x87\xaa\x90\x3b\x01\xbb\x04\x54\x2a\x03\xee\x52\x8d\x4a\x03\x42\x4b\x55\x84\xa4\xe7\xf6\xb3\x98\x85\xb9\x41\xd7\x4a\x56\xe5\x8a\x61\x25\x72\xad\xe0\x71\xbb\x42\xec\x08\x12\xcd\xae\x25\x9a\x55\x5b\xb9\x10\x5d\xab\x77\x27\x11\x25\xf0\x20\x5b\xc9\xdb\xa2\x3e\x14\x27\x08\x29\x5d\xf6\x8a\xb4\xe5\x80\xe1\xea\xa7\x2c\xfb\xab\xc8\xc1\xdd\xa6\xf6\xb7\x6a\x55\xae\xea\x99\xe7\x82\x02\x0f\x54\xe2\x4b\x03\x36\xae\x06\x46\x6b\xc2\x20\x8d\x95\xbf\x77\x6d\x1c\x58\x90\x33\x3e\xe7\x29\x7a\xa1\x72\x82\x14\xef\x33\x88\x13\xcc\xbc\x01\x8a\x23\xf3\xe0\x09\x3c\x05\xd8\x16\x32\x1d\x4e\xa9\x42\xd8\x9b\x61\xc1\x24\x79\x62\xcf\xb3\x7e\x01\x66\x5c\x09\x5f\x50\x85\xbb\xb4\xe2\xd0\x6c\x60\x5f\xcb\x1b\xd9\x16\xa1\xc0\x8b\x69\xde\x2f\x46\x81\xa7\xf1\xf8\x1a\x66\xe5\x99\x0b\x20\x05\xa8\xda\xda\x60\x91\x60\x01\xae\x97\x4a\x55\xba\x5b\xac\xa1\x67\x05\x40\x41\xbe\x10\x8d\x10\x0a\xf2\xc7\x77\x01\x51\x50\x57\x7b\x6e\x59\xca\xaa\x7b\xa5\xc6\xfe\xed\x52\xa1\x15\x77\x81\xf3\xbe\xa4\x74\x5b\x2b\x29\xb5\x0d\xaa\x2e\x4f\x08\xd8\x3c\xbc\xbc\x2e\x7a\x19\xce\x78\xc4\x59\x4c\xd7\x88\x17\x86\xfa\x62\xc3\x74\xd4\x61\xf3\xd5\xc8\x47\x53\x3f\x50\xdf\xda\x4b\x3c\x49\xa4\x1a\x73\x73\xa5\xca\x9a\xb7\xef\xef\x74\x2f\x25\xb4\x08\x46\x44\xca\xb7\x13\xe3\x0a\xf2\x7e\x22\x95\xcc\x2b\x72\x51\xfb\xac\x5a\x4a\x5a\xce\xb7\xb7\x4d\x23\xd9\x29\xec\x9e\xc7\x23\xdc\x2c\xac\xd5\xed\x97\x2c\x10\xcf\x28\xf4\xc4\x82\x6c\x94\xc4\xe0\xdc\x0d\x59\x17\x40\xa5\x85\xa3\x4d\x72\xcd\x2b\x38\x47\xf5\xd0\x17\x92\x3c\x56\x9e\x5d\x2b\x18\xec\x50\xfd\x5c\xb8\x41\x1a\xe7\xc4\x64\x72\xbc\xbd\x31\x6c\x50\x77\x9c\xd9\x1a\x4a\xee\xe4\x4d\xca\x1b\x03\x9c\xed\xce\x40\x78\xcb\xc8\x14\xba\xf1\x13\x70\x41\xdb\xb1\x63\x13\x8e\x93\x41\xc3\x97\xd6\xa4\x30\x63\x13\x52\xb9\x97\x59\xaf\x5b\x93\xda\xf3\x89\x0a\x1b\x93\x4c\x7d\xeb\x06\x14\xa3\xb6\xa1\x9c\xa5\xdb\x22\x13\x40\x53\x16\x13\xc1\x08\x56\x93\xc3\x65\x82\x5c\x6c\x6b\x42\xf7\xc6\xb7\xdf\xac\x10\x3b\x52\x5c\x4c\x0e\xd9\x66\xb8\xc5\xe2\xfc\x2b\xc7\xa9\x1f\x6f\x62\xcd\xb2\x01\x12\x59\x79\xea\x05\xf5\xb6\xc2\xb4\xe9\xe1\x0f\xad\xb3\x4b\xb7\x4a\x16\xa9\x56\x39\xf7\x93\x36\x53\x61\x9b\x5a\x48\x98\xd1\xa7\xdd\x2f\xea\xbd\x82\x24\x6f\x22\x3f\x65\xff\x29\x13\xcb\xca\x87\xa7\x5e\x16\x05\xd4\x70\x57\x98\x32\xcb\xbd\x96\x25\x4e\x68\xb9\x77\x8a\xab\x72\x25\x5a\x9f\x85\xf3\xe6\x93\x70\x42\x4a\x46\x48\xc9\xa8\x58\xa3\x90\x92\x81\x50\xdb\x52\x32\x56\xa9\xa0\xcb\x8c\xb4\x99\xdf\x10\xca\xbc\x16\x6a\x2b\x99\xf5\x5d\xa1\x47\x6e\x9e\x76\xe0\xec\x9c\x7e\xcc\x96\xfd\xc6\x7e\x51\x19\xb6\xb5\xf0\x5a\x79\xb6\xbe\xcd\x95\xcd\xcb\xae\x0b\x2c\xe2\xc4\x42\x10\xda\xa0\xea\xa2\x8d\x6c\x99\x39\xb7\xcf\x7e\xe0\x2f\xe4\x99\x88\x13\x84\x15\x9a\x72\xc0\xb5\xca\x63\x78\xe0\x20\x14\xb0\xf4\x4d\xac\x06\x46\xd7\x78\x4a\x62\x53\x6a\xd3\x0b\xbd\xb4\x46\x65\xeb\x0e\xae\x42\xda\x05\xd0\x58\xb3\x0c\x2e\xb6\xa3\xcf\x4c\x38\xa4\x09\xc1\x03\x59\x81\xba\x89\xc1\x86\xf9\x63\xe6\xac\xfe\xe3\x19\x7a\xd0\xf7\x13\x95\xc5\xf1\x7a\xc0\x7b\x75\x63\xeb\xb3\xb1\xe0\xe9\x2c\xb3\xf3\xf1\xa1\xa9\xb9\x6c\x22\xb4\x16\x9d\xd5\x30\x18\xe7\xa9\x8e\x70\xac\x75\xf1\xe5\x1b\xe7\x55\x22\x65\x37\x82\x59\xf2\x37\x90\x3e\x86\x59\xf8\x9f\x0d\xc7\x37\x3e\x66\x0f\x5c\x66\x59\x05\x80\x3d\x39\xc0\x2f\x89\x04\xab\x50\xe6\x19\x28\xe4\xba\x17\xf1\x14\x2a\xc7\xb9\xcc\x6e\x9b\xf9\x56\x9c\xff\xa1\x1a\xaa\x21\xef\xdc\xc6\xa5\x99\x44\x5a\x7b\x4f\xec\xcd\xa2\xdb\x38\xc2\xb7\x8e\x5f\xdc\xa6\x62\xc6\x41\x12\x4b\xe6\x0e\x5a\xc2\x82\xfc\xcd\xf8\x2c\x35\xb1\x77\xd4\x0f\xc5\xaa\xdc\xd9\x54\xaa\xcf\x58\x45\x13\xcd\xb9\x73\x54\xb6\x1d\xc5\x24\xe6\x5c\x79\xbf\x56\xde\x8a\x19\x5c\xf8\xbd\xd7\xb8\x3d\x96\xed\x1e\x2f\xc6\x30\x0b\xe4\xcc\x24\x89\xa9\xee\xcf\xb8\x06\x6d\x25\x75\xcf\x2e\xea\x5e\xb1\xbf\xe8\x89\xae\xda\x45\xab\xc6\xdf\x6c\x6f\x15\x4b\xbd\xed\x3c\xda\x71\x0b\x98\x9b\x4b\x0b\x2a\x96\x3f\x68\x4b\x03\xd7\x84\x28\x08\xba\x59\xa6\x92\x2d\xcf\xf0\xac\xc5\x91\xcc\xe2\x3a\xc5\x33\xad\x44\x28\xae\x6f\x49\x31\x36\x72\xac\x89\xe5\x45\x18\xa5\x82\xba\xb3\x5f\xca\x5b\xaf\xdf\x1d\x60\xa1\xfc\xe0\x97\xf2\x8a\xb0\x57\xe5\xd0\x04\x25\xe0\x48\xa5\x38\x0b\x9e\x84\x3d\xe1\xaa\xef\x9b\x1c\x7d\xe7\xfc\x17\x4e\xbc\xab\x58\xd3\x95\x1b\x7b\x8b\x55\xc6\x55\x18\x8c\x8d\x4e\x1a\x65\x63\x0f\xc0\xb1\xda\x4a\xdc\xa4\xe8\x46\xe5\x9b\xcd\x0a\x87\x54\xbe\xea\x64\x9f\x4d\xde\x5d\x02\x30\xd5\x28\x64\xbd\x8d\x15\x13\xbc\x4c\x00\x1b\x2a\x6c\x65\x37\x1f\xd8\xd3\x76\x04\xb0\xc7\x14\x42\x19\xb0\x93\xe5\xbe\xf1\xcb\x26\xe8\xa1\x7d\xfb\x5f\xf9\x8f\xa0\xbf\xdb\xe2\x2c\x15\x0f\xf6\x19\x17\xf6\xd1\x93\xec\x39\xfd\x58\x8e\x4f\xac\xa5\xc4\xc5\x37\x73\xf4\x51\x51\xc4\x29\x04\xb4\x16\x8b\x33\x67\xe0\xa9\xb3\xb2\x16\x7a\xf0\x4f\xe9\x90\x08\x46\xf4\x9c\x1c\xae\x43\xc6\x83\xa7\x98\xe1\x31\x80\x61\x9f\x40\xd0\x21\x48\xd9\xb9\x06\x65\x4e\xa2\xa9\x0f\x0a\x4c\x56\xf3\x78\x9b\xca\x9c\xd7\xc9\x86\x3e\x8d\x04\x6e\xb1\x78\xf3\xc8\x95\xea\x43\x7b\x67\xfb\xdf\x4c\xd1\x78\xe8\xdc\xff\x38\xb8\xeb\xde\xdf\x3c\xde\x5d\x14\xb4\x8d\x8b\xab\xc7\xfb\x87\xee\x5d\xe5\x6f\x79\x1a\xf0\x4f\x8f\xdd\xc7\x9a\x9f\x5c\x03\x57\x9d\xef\xbb\x85\xa2\xf3\x3f\x3d\x76\xae\x7a\x0f\xbf\x0e\x6e\x3e\x0e\xee\xbb\x77\x3f\xf7\x2e\xba\x83\xfb\xdb\xee\x45\xef\x63\xef\xa2\xa3\xdf\xf4\x9f\xbd\xbd\x7a\xfc\xd4\xbb\x1e\xb8\x88\x6e\xff\xa7\x5f\x6e\xee\x7e\xfc\x78\x75\xf3\xcb\xc0\xeb\xf2\xe6\xfa\x63\xef\x53\xd5\x2c\x3a\xf7\xf7\xbd\x4f\xd7\x9f\xbb\xd7\xcb\x8b\xdb\x57\x53\xa3\xb6\x6e\xb6\x77\xff\x7a\xb6\x2e\x4f\xba\x1b\xce\xed\x99\xa0\xff\x04\x97\xcb\xad\xd9\xa2\xa7\x27\xee\x93\x29\x45\x7f\xaa\x39\xb7\x73\xe7\xe5\x4c\xaf\xcf\x32\x9f\x70\x26\x0b\x28\x3c\x96\x2e\xab\xbb\x30\xda\x73\xd4\x81\x43\x06\x7a\x4e\xa1\x53\x48\x1a\xc9\x46\xea\xa2\x08\x60\x1f\x26\x74\x4a\x21\xa0\x00\x9d\xa2\xf2\x82\x17\x1b\xb4\x73\x82\x21\x58\x77\x63\xbc\xec\x34\xc8\x72\xc2\x38\xec\x94\x73\xe4\x2e\x16\x62\xac\x20\x06\xd6\x77\xce\xf0\x94\x46\xe5\xec\x16\x40\xb6\x45\x39\x8a\x4b\xb9\xc5\xc2\x06\x2b\xb6\x3c\x21\xe8\xc7\xbf\xe7\x83\x02\xc7\x8b\x35\x18\xa4\x0b\x15\x28\xed\x0f\x22\x35\x54\x5d\xb5\x3d\x0b\x3d\xb9\x63\x6e\x2d\xe2\x70\x6e\x6d\xa5\x7b\xf0\x92\xa5\xcc\x43\x72\x2b\xb8\xcc\xf4\xf1\x36\x33\x2a\xed\xf1\x73\x74\x0f\x28\x32\x32\xb7\x38\xe8\x55\x9c\x25\xe9\x98\x32\x44\xa7\xb3\x04\x78\x8c\x31\x43\x0c\xc9\x04\x3f\x53\xee\x0a\xae\x98\xba\x34\x40\x47\x2b\x11\xa2\x53\x54\x7b\x50\xce\x51\x27\x8e\x65\x91\xc1\x15\x76\x8e\xe3\xa2\xa7\xc5\x61\xfb\xe0\x6b\x9a\xb1\x5a\xb6\x59\xda\x47\xf9\x91\x03\x8a\xed\x1e\x27\x67\x91\x1d\x16\x45\x86\x2d\xa4\x16\x4d\xc1\x81\xdb\xca\x83\x8d\x64\x98\x07\x2c\x9f\x1c\x6b\x5e\x25\xc7\x38\xc4\xa2\xed\x7a\xb4\xd0\x45\x4d\x3b\xcd\x28\x3b\x80\x83\xb6\x59\x9f\xb5\x80\xdb\x2b\xba\x74\x33\x4e\x4a\xa5\xee\x1a\xf7\x57\x28\x95\x57\xd9\xd9\x4e\x9d\x54\xd5\x42\x24\x1c\xc9\x41\xb6\xff\xd7\x98\xc7\x2d\xbc\x7a\x93\xbd\xb9\x54\xd2\x1c\x78\x74\x5b\xd7\x75\xb5\x90\xff\x6c\xdd\x57\x4b\xf7\xe1\x8e\x90\xb3\x9a\x4b\x91\x50\x2a\x84\x46\xe0\xa5\xc4\x94\xd9\x02\x52\x24\x73\xa3\xb9\x82\xed\xfa\x1c\x67\x25\x15\xf1\x90\x3f\x17\x74\xe2\x29\x91\x12\xd7\x60\xc1\x78\x96\xbc\x6d\x18\x43\x76\x42\xed\x8b\x0d\xf7\x93\x3b\x93\x0f\xfa\xad\x65\x32\xfa\x9d\xaf\xd0\xbb\x89\x6a\x19\x36\x76\x41\xcc\xe8\xc6\xa4\x32\x6a\xfe\x72\x92\xc7\x00\x71\xe1\x85\x46\xd5\x79\xad\x1a\x5a\x03\xcb\x04\xab\xac\x0b\xe6\x7b\x1e\xd7\x0f\x1d\xf2\x5a\xdf\x18\x6c\xdc\xba\x83\x70\x91\x3e\x6b\xec\xba\x82\x9b\xd6\xaf\xd8\x1e\xf1\xe9\xd4\xc8\x05\x05\x13\xf0\x09\xc2\x26\x83\x34\x97\xa6\x64\x1a\x4d\x8c\x73\x4c\x5f\x19\x27\x7d\xf6\xe2\x2d\x48\x21\xc6\xba\xe3\xb7\x04\x40\xad\x5f\xf4\x71\xa3\xcf\x85\xc8\x75\x10\x19\x29\x84\x51\x7b\x1b\xc1\xf8\x31\xf3\x82\x67\x2b\x36\xb8\xb7\x5e\x5b\x6c\xf5\x0d\x6a\x6b\x96\xe8\x5b\x57\x61\x33\x9b\x9b\x57\xd8\x72\x0b\x05\xbf\xe9\x10\xbc\xda\x9a\x55\x23\xd8\x41\x69\xcd\x83\x22\xa7\x67\x99\xb0\x26\x71\x7a\x3a\xb4\xf0\x1f\x7a\xba\x8e\xda\x7f\x72\x33\xfa\x93\x51\x84\xd3\x1a\xbc\x18\xaf\xb5\x0c\x3c\x1d\x9d\x6a\x99\xd5\xe1\x18\xd8\xf8\x11\x89\x4e\x0d\x20\xe3\x7b\x08\x62\xed\xdc\xf6\xde\x9f\xa0\xf7\x7e\x22\xdf\xfb\xa3\x31\x5d\xe4\xc7\xdf\x52\xcd\x16\xf7\x04\x5d\xae\x90\x4b\x52\x3c\xf4\xb0\x53\x4a\x7c\xc0\xee\x18\xcb\x06\x50\x1d\x17\xd0\x6f\x16\xde\x01\x8f\x3e\x94\x8b\x34\x4e\xef\x2c\x92\xdd\xfa\xcd\x8c\x84\x4d\x65\xc5\xca\xc5\x7d\x36\x9c\x97\x3d\x63\x27\x99\x6b\xac\x31\x8f\xd8\xba\x04\xa2\x6e\x6f\x31\xef\x7c\xc7\x11\xd6\xcb\x6f\xa3\x15\x99\xec\x9d\xac\x4e\x4f\xce\x43\xeb\x42\x3b\x42\x6a\x42\xd5\xac\x0a\x66\x3e\x47\xcc\xca\x45\x59\x25\x7d\x1d\xdb\x76\x6b\x10\xcf\xdf\xa9\xa2\x88\x4d\xe5\xa8\x11\xed\xc3\x2e\xdb\xef\x2e\xdb\x45\x2a\x4b\x71\x70\xeb\x5f\xdf\x17\x46\x8a\xf4\x9a\x71\xe6\x5e\xad\xca\x64\x0c\xbe\x50\x27\x73\x75\x79\xeb\x35\x1d\xe5\x1e\x4d\x56\x7b\xca\xef\x4d\xb4\x85\xf1\x55\x2f\x8e\xb5\x3c\xd4\x8e\xb2\xd5\xa5\x38\x35\x69\xab\x8a\x4e\xc9\x89\x29\x67\x96\x47\x88\xd8\xf3\x0a\xdb\xcd\x04\x76\x4d\x08\x15\xae\x13\x0b\x1e\xb9\x16\xce\xc1\x9a\xba\x40\xdd\x1e\xd9\x22\x3c\xe7\xba\xf3\xb9\x7b\x39\xe8\x5e\x3f\xf4\x1e\x7e\xad\x00\x06\x2d\xfe\xec\xb0\x41\xbd\x07\xee\x7f\xbd\x7f\xe8\x7e\x1e\x7c\xea\x5e\x77\xef\x3a\x0f\x2b\x70\x43\x97\x75\x56\x87\x49\x99\xca\x2a\xe5\x71\x1d\x5c\x4a\x67\x64\xae\xe8\x7d\x11\x3d\xd4\xeb\x84\x92\x1a\x04\x51\x83\xe9\xc0\x62\x22\x50\x4c\x9e\x49\xc2\x67\xb9\x51\xb7\x92\x60\x1e\xb4\x68\x45\xfb\xcb\xe0\x45\xa1\xcd\x32\x8d\xcf\x91\xa9\x8d\xe8\x95\x87\xce\x1a\x04\x91\x0f\x0b\xc2\xde\x2b\x44\xbe\xcc\x12\x1a\x51\xe5\xe5\x7c\x72\x61\x9d\x3b\xc6\xe7\x0a\x21\xbd\x2b\x36\xd7\xce\x42\x78\x76\x6e\x71\xf0\xc3\x0f\x16\x6d\x0d\xd9\x89\xca\xa0\xee\x56\x56\x86\xda\x81\x59\xa1\xc6\xd3\xbe\x80\xc4\xb7\xc1\xe8\xf6\x61\x9c\x58\x4c\x6c\xb2\x79\x9b\x35\x28\x7d\xd5\x83\x5c\x7d\x1b\x2e\x0b\x2e\x2a\x9c\xeb\xe5\xd1\x45\xcd\x76\xea\x2b\xc7\x08\x15\x0a\xd1\xee\x00\x52\xc5\x06\xfc\xaf\x19\xe5\xb1\x50\x08\x88\x99\x40\x5d\x8c\x04\x99\x72\xa5\x15\x30\x13\x46\x71\xa2\x85\x2a\x8a\x13\xfa\x4f\x00\x1f\x13\xe4\xcc\x0b\x3b\x71\x90\x6d\xb9\xf3\xc2\x02\x83\x9c\xf5\xd9\x65\xf7\xf6\xae\x7b\xa1\x19\xd2\x19\x7a\x94\x80\x2b\x56\x98\xfa\xa5\xdd\xde\x46\x1c\xf3\xc3\x3f\x28\x93\x8a\xe0\xba\x08\x3a\x22\x04\x17\xcd\xf9\x43\xd6\x5f\x17\xde\xab\xde\xde\xf0\x5b\xc1\x32\xe6\xcc\x0f\xd7\xb5\x55\xc4\xbd\x44\x8b\x9d\x27\xb2\xdd\xe1\x97\x02\x45\x7c\x5c\x15\x90\x44\x8a\x54\xdf\x23\xb5\x01\x99\xb5\xf9\xfc\x0a\x7d\xde\xc2\xbb\xcb\xe6\xf9\x00\x71\x89\x52\xe5\x30\xaf\x06\x09\x36\x2b\x67\x54\x9a\x67\xad\xa8\x28\x5e\x03\x83\xa5\xb4\xf5\x87\x64\x8c\x19\x12\x29\x63\x25\xdc\x5f\xdf\xce\xb7\x18\x69\xb4\xee\x51\xd5\x34\xc3\x53\x9e\x32\x53\x8f\x57\x8f\xaa\x62\x30\x72\x46\x98\x5a\x31\x98\xd7\x42\xd8\x29\x0d\xb5\xbd\x20\x3b\x15\x03\xad\xc3\xd9\xa9\xf2\x66\x41\xa9\xf2\xf5\xae\x65\x17\xc9\x58\x70\x69\xe9\x43\x95\xdd\xcf\xd5\x5a\x36\x96\x4f\x5b\x77\xf7\x80\xe5\xd3\xea\xae\x62\x12\x3d\xad\x7b\xd9\x94\xd3\x59\x13\x5b\xe9\x7d\xc1\xd8\x37\xd7\xbf\xda\x9a\x3b\x50\xe0\x3f\x7a\x42\x3f\x3c\x7c\xbe\x42\x23\xaa\xe5\x5e\x7d\xad\x5c\x63\x2d\x63\x3f\x8a\xc4\x59\xa5\xad\x65\x37\x15\x49\x76\xf7\xc2\xc2\x3b\x51\xca\x93\x12\xf4\x8d\x86\xc7\xc4\x99\x9a\x85\x85\x51\x2c\xd5\xdc\x11\x98\xc5\x7c\x6a\xe6\xf1\x41\xa6\xa3\x11\xfd\x72\xa6\xb0\xf8\xb6\x86\x1e\x26\xa6\x63\xf0\x0f\x3e\x1c\xe8\x11\x6d\x79\x11\x57\x35\x87\x6c\x01\xf2\x8c\x6c\x76\x66\x97\xe6\xd9\xff\xc3\x87\x00\x11\x00\x28\x07\xce\x37\x68\xe3\x24\xec\x23\x6e\x27\xe5\x15\xb9\x0b\xe8\x35\x11\x17\x82\x58\x64\x01\x53\x34\x76\x86\x85\xa2\x60\xad\x75\xe8\x37\x85\xb2\x07\xf9\x12\xf9\x25\xf2\x27\x38\x87\x18\x1f\x12\x02\xee\xa5\x19\x4d\xd6\x53\x7a\x2f\x0a\x9e\xd1\xd2\x09\xb4\xe1\xba\x16\x10\x15\x0c\x32\x2b\x45\xac\xee\x33\x61\x6a\x27\xfa\x09\x34\x51\x81\x75\xd0\xcc\xc7\x61\x6a\xb7\xf6\x2e\xf3\xcb\xcd\xc5\x41\xfb\x31\x55\x4a\x60\xb8\xe7\x6d\x76\x99\x75\xe8\xd7\x85\x19\x3c\x37\xf6\x5c\xc3\xa3\x8b\x74\x59\x91\x4f\x60\xa9\x9d\x97\xc6\xcf\x63\x81\x5d\xcd\x86\x0d\x11\x9a\x24\x31\x56\x0c\x0f\x19\xc4\x2a\xa7\xe5\x35\x37\x7d\xea\xbd\x55\xea\x72\xe5\x92\x6f\x00\x47\x54\x68\xe6\x13\x81\x3c\xd8\x5d\x44\xef\xaf\x03\x78\x00\x03\x79\x14\x09\xc4\x9d\x2f\xb5\x62\x99\xfa\xf1\x9a\xf3\x65\x92\x1d\x6e\x20\xa3\x9b\xc1\x68\xa1\x91\xcc\x04\x89\xf4\x55\x76\x8e\x6e\x13\xa2\x25\xaf\x54\x4b\x5f\x69\x92\x38\xe8\xb6\xe5\xd2\xe1\x5a\x70\x83\x7b\x9f\x97\xa7\x7b\x2c\x99\x98\x83\x2e\x5c\x3e\x33\x8f\x06\xbb\x87\xa9\xf0\xe8\x0b\x26\x64\x30\x24\x16\xb5\x48\xe0\xf0\x73\x13\xb5\x0b\xa6\x24\x5c\xb8\xc8\xe8\x3f\x35\xfb\x15\x44\x4e\x78\x6d\x66\xa8\x3f\xdb\xfd\xcc\xc1\x91\x72\x8f\x93\x70\xf7\x61\x5d\x30\x7a\x03\xb9\xa6\x74\x07\x16\x44\x9c\x26\xbe\xd8\x3c\xf6\xc4\x02\xe9\xda\xbb\xd5\x0e\x0d\x6e\xc9\xdc\xd4\xe6\x83\xda\xe5\xae\x8b\x5c\x99\x99\x1b\xdf\x6b\xf6\x7a\x6e\x40\xce\xf3\x28\xa8\x92\x79\x39\x41\xa4\xef\xda\xba\x25\xd6\xf3\x1c\xa4\x62\x2d\x1c\x8f\x1c\x8e\x7e\x1d\xce\x6d\x33\x78\xf2\x61\x69\x22\x54\xb3\x4b\x5b\x25\x04\xc4\x68\x1b\xe8\x24\x0b\x10\x7f\x76\xdb\x18\x32\x56\xaa\x78\xf5\x4c\x79\x5b\xb7\x1a\x48\xc9\xb9\x28\xb3\x2f\xef\x5a\x61\x07\x16\x26\x10\x40\xe3\xd6\x07\x8d\xb3\x25\x63\xb2\xbd\x07\x10\x8f\x4a\x00\x5a\x42\xee\x40\x2b\x0b\x0e\xd6\xe8\xbd\x2a\x5d\xac\xb0\x3a\x8d\x72\xc3\x0a\x6f\x68\x5e\x72\xb9\xa5\x07\x4e\x4f\x66\x3e\x80\x6c\xdb\x6d\x62\x80\x0a\xf3\x37\xde\x03\x68\x93\xc4\xc8\x40\x3e\x18\x48\x6b\x4b\xbb\xcc\x73\x32\xc3\x82\x30\xd5\x67\x77\x7a\x14\xe6\x8d\x3c\x12\xc3\x45\x01\xb9\x32\x03\x50\x8c\x78\x84\xb0\x7d\x0b\x88\x5e\x17\x86\x27\x07\xe6\x21\x50\x4d\xf7\x88\x4c\xf0\xbd\x79\xc6\x00\x45\x58\xa0\x24\x3d\x55\x3a\xca\xd5\x78\x2d\x40\x46\x13\x0a\x38\x0d\x31\x91\xf6\x42\xa2\xca\x02\x71\x64\xe2\x77\x4a\x1c\xb0\x36\xbc\x96\xf1\xaf\x2a\x86\xed\x0c\x05\xcc\x19\xe8\x64\x9f\x79\x7d\x2c\xc1\x61\x35\xca\xfa\x86\xaa\x04\xac\x33\x8d\x33\xc7\x17\xfc\x69\x56\x88\x0b\x3a\xa6\xcc\xab\x86\x65\xa7\x37\xc5\x33\x30\xef\x9a\x33\xc8\x47\xd9\x9d\xf6\x60\x73\x1c\xce\x60\xc4\xff\xf7\xbf\xff\xe7\x8c\xd6\x79\x3f\xe4\xc0\x52\xa0\x0d\x2b\xb9\xde\xb2\xf8\x2b\xef\x41\xaf\xd4\x40\x7a\x78\x3a\xad\x2c\xe4\x6d\xe4\xdf\xda\xcb\x4d\x6f\x1a\xae\x26\xc6\xdd\x5b\xdc\xee\xe0\x1b\x11\xe9\x92\xb3\x61\xae\x98\xd7\xa5\x25\x95\x90\x9b\xa0\x47\x62\x4e\x72\x66\x20\xf0\x2b\xcd\x2f\x98\x69\xfa\x2c\x7f\x45\x1a\x10\x19\x83\xdb\x6b\xbe\xc8\xa9\xd3\x90\x30\xcb\x78\x7f\x1e\x29\x91\xbb\xc3\xbd\x58\x68\x57\x17\xc5\xc4\xb0\xea\xf6\x4b\x37\x6d\x89\x73\x7b\x00\x96\xdb\xc4\x8c\x4e\xb0\xdc\x5f\x68\x4e\x65\x3d\x2f\x63\x4d\xf7\x85\x87\x55\x41\x3a\x66\x90\x26\x45\x56\x2f\x48\x2a\x89\x30\x9c\x2e\xc3\x10\xb3\x3b\xc1\x87\xe7\x84\x08\xd1\x15\xbe\x46\x32\xc5\x74\xad\x6c\x06\xfd\x7c\x35\x78\x68\xc1\xd9\x80\xc7\x44\x0c\xe2\x54\x2d\x1c\x8b\x65\x19\x06\xfa\xa5\xcb\x54\xcd\x57\xb7\x2f\x13\xbc\x58\xcf\x68\x19\x60\xab\x7e\xbe\xa6\xd9\xd5\x12\xb3\x17\xe2\x53\x94\x9a\x6b\xe0\x50\x49\x09\x0e\xd5\x46\xbc\x16\x4c\x24\x70\x03\x33\x05\x38\x84\xb9\x26\x65\xaf\x68\x03\xda\x0e\x23\x47\xc3\x34\x37\x29\x65\x65\x30\xe2\xb3\x3e\xfb\x68\xea\xc8\x80\x96\x67\x06\x10\x41\xba\x11\xf9\x32\xe3\x92\x14\xf2\xdf\x2a\x4a\x5b\xd8\xc4\x57\x3b\x8c\x6a\x61\x3d\x7f\x69\x7b\x59\xfd\xd5\x81\x6d\x17\x17\x7c\x71\xca\xd5\x3b\x70\x2b\x71\x30\xa2\x33\xaa\xf7\xce\xa0\xf2\xa4\xed\xaf\xbc\x72\x1e\xd3\x05\xe0\x61\x2a\x99\x9f\xa0\x6c\x7a\xa5\x0d\x91\x90\x67\x02\xe6\x74\x18\xa3\x5f\xc0\xa4\x68\xd7\xab\x61\x27\xab\x0e\x50\x9e\x7c\x0a\x6c\x01\xc5\xe5\x11\x14\x53\xf4\xaa\xf6\x62\x31\xf9\x68\xeb\x3c\xb9\xaa\xc0\x94\x35\xc4\xf3\x8e\x5f\xc8\x65\x4e\x14\x22\x5f\x14\xb1\xa5\x5e\x1f\x5c\x26\xe3\x62\xf2\x03\xaa\x4e\xc6\xaa\x97\x1d\xf7\x5e\x74\xbb\xe3\x12\xdf\x5d\xaa\x66\xec\xae\x7c\x9b\xba\x38\xc1\x2c\xb6\xf9\xb8\x56\xc9\xd0\xc2\x16\xcc\xce\x18\xdd\xb2\x4c\x05\x9b\x55\xea\x21\xe0\x9b\x36\x0d\x54\x3f\x5c\x64\x4e\x61\xd4\x2a\x0b\x84\x57\x70\xa1\x25\xf7\x94\x29\x9a\xe8\xcd\x61\xc7\x20\xd1\x08\x22\xe3\x2c\xba\x23\x44\xb6\xd7\x01\x08\x52\x29\x29\x1b\x0f\x2c\x25\x5d\x6a\x69\xb3\x8b\xa1\xb8\xa7\x3e\x9b\xa6\xcc\x97\xdf\xbb\x86\x96\x1b\xd5\xcd\xb6\x06\x70\x37\x97\xd4\x0a\x1a\x07\xe3\x6e\x32\x16\x95\xcf\xe5\xc2\x0e\x68\x6c\x48\x41\x4d\x45\x71\x98\xe8\x3a\x76\x77\x90\xe9\x16\xc1\x2f\xf2\x2b\x44\xda\x44\x55\x93\x7e\x06\x91\xfa\xaa\x26\x13\x57\xd6\x66\xe0\xf6\x58\x26\xa2\xd9\x7a\x66\x19\xce\x40\x29\x99\x17\xbb\xee\x6c\x3a\x02\x4e\x92\x21\x8e\x9e\x32\x2d\x2c\xb3\x45\x70\xe1\xea\x41\x68\xb9\x12\x0a\xde\x99\xcd\xa5\x07\x1a\x81\x74\xe3\x7b\x0b\x0d\xfc\x91\x1d\x76\xde\xb9\xa1\x9a\xc5\x95\x33\x78\x57\x66\xf4\x26\xb7\x21\x26\xb3\x84\xcf\xa7\x35\xf7\x59\x39\x81\x71\x9b\x48\x9d\xba\xfc\xc9\x9d\x5e\x65\x25\xa6\xb7\xf6\x65\xb6\x90\x0d\xb5\x03\x30\xae\x35\xb8\xe4\xa7\x84\x0f\xc1\xa4\x6a\xcd\x0f\x2e\xc3\xc7\x4b\xf5\x28\x9f\xe7\x75\xf3\x8e\xca\x27\x92\xca\x59\xa2\x95\x99\xfa\x1e\x4c\xce\xc9\x7e\xd7\xcd\x20\x24\xac\xb6\x0e\x36\x8f\xd6\xae\x7c\x7d\x1f\xb0\xcf\x57\x4e\x12\x30\xcf\x1a\xfe\x55\xb2\xb2\x99\x54\xc3\x33\xe3\xa4\x56\xbc\xcf\x14\x1e\xbb\xc5\xb5\xc2\x25\x7f\x61\x44\xc8\x09\x9d\x15\x0a\x61\x6e\x1d\x1e\x6e\x77\xb4\xfd\x8f\x09\x86\xae\x6c\xb3\x85\xa9\x5b\x0f\x7c\x76\x6a\xd0\x59\xf4\xee\x94\x33\x1c\xe5\x36\xd9\x28\xc1\x52\xd2\xd1\xdc\x03\x55\xc9\xe2\x7c\x21\x75\xad\x68\xc4\xf0\x2a\xdf\x55\xb1\x39\x43\x9d\xdd\xa0\x0a\x6c\x9f\x51\xf9\x58\x3c\xfc\x34\xf6\x41\xf7\xf4\x6d\xb6\x08\xbd\xe3\xe4\x04\x4b\xf5\x5a\xf0\x60\x03\x9f\xb0\x19\x0a\x40\x53\xbc\xa6\x3d\xef\xa4\x8a\x34\xcc\x85\x8d\x94\xa3\x85\x65\x72\xb4\xa5\x99\xd5\xe1\x32\xa4\x15\x1f\xbe\x48\x15\x72\x58\x61\xe7\x69\x9d\xd1\x99\xc4\xf5\xb9\xcc\x50\x5a\x00\xcc\x22\x7f\xf9\x04\xc9\xad\x40\xd9\x9a\x6c\xca\x4b\x92\x90\x9d\x04\x9b\x6f\xb0\x43\xcb\x91\x1c\xde\xde\x5c\xba\x2f\xf3\xb2\x14\xab\xed\x2a\x1b\xc4\xc0\xd7\x60\x24\x55\x0f\xfd\x17\x33\x50\x1b\x06\x5f\xb5\x8a\x60\x13\x05\x2a\xaf\x1e\x6d\x9b\x76\xb9\x17\x5a\x62\x86\x6f\xf7\x7b\x3e\xc7\xc2\xa6\xce\x67\x9c\xc9\x89\x6d\xdc\xe7\xaf\x1c\xaa\xbe\x30\xae\x4f\xa4\x49\x58\xcd\xca\xd3\xb7\x11\xef\x5d\xbc\xa1\x9a\xed\x0b\xeb\xb8\x56\x1c\x8d\x09\x20\xf1\x50\x16\xd3\x67\x1a\xa7\x38\x39\xaa\x3d\xb1\xb3\x44\x9b\x1d\x51\xbf\x9a\xc3\x34\xb2\xf4\xe4\xf1\xa0\x44\x49\x77\x1f\x2d\x60\x7e\xda\xc5\x69\xe1\x12\xb4\xe3\x58\x1a\x85\xe1\xcd\x4b\x6c\x5b\x43\x63\xd8\x91\x59\x80\x88\x20\x4a\x16\x2e\xd9\x7c\xec\xbb\x97\x26\x0d\x8d\x63\xfb\x46\x06\x07\x51\x80\x61\xc3\x05\x34\x4b\xb3\x46\xaf\xcf\x75\xcb\x47\xeb\xad\xcb\x9d\xeb\x9f\xb1\xf2\xa8\xf2\xd3\x15\x84\xe1\x36\x9c\xd3\xe6\xf2\xb0\x03\xa0\x6d\xa1\xf0\x53\x77\x0c\xdb\x79\xff\xb6\x40\x38\x5e\x10\x09\x76\x27\x22\x1f\xd1\x36\x69\x85\xa4\xbc\xb0\x14\x87\x92\x97\x4f\x1d\xb6\x57\x8e\x94\xd5\xde\x25\x6a\xc7\x49\xbe\xb3\xee\xc7\xfd\x5d\xf0\xab\xf7\xcb\x4e\xf6\x07\xc0\xdc\x62\xc8\xc7\x4f\x6d\xb9\x1f\x38\xbc\x5e\x0c\xe7\x82\xcf\x6b\x45\x74\xac\x1d\x5e\xa3\xb8\xd8\x05\x72\xee\x63\x79\x6d\xf2\x65\xe3\xc5\xdd\xe7\x56\x5b\x77\x2c\xbb\xd0\xd1\xf6\xec\x3d\xb4\xbb\xd1\x7b\x21\x04\xa9\x37\xbb\x45\x2b\x20\x9d\xdc\x92\xed\xf2\x90\x55\xd5\x68\xdc\x1e\x3e\xc2\xe5\x96\x0e\x66\x82\x8c\xe8\x97\x8d\x54\x81\x5b\x78\xd5\xaa\xd7\x9a\xcc\xa5\xaa\x8f\xe0\x16\x84\x2a\x91\x5e\x20\xad\xa5\xb4\xad\x0c\xd7\x67\x79\x46\xae\x4d\xc7\xd5\xc2\x30\x17\x85\xaf\x36\x85\x3e\xdd\x7d\x85\x4a\xb3\xae\x13\xa5\x66\xf2\xfc\xc3\x87\x31\x55\x93\x74\x78\x16\xf1\xa9\xc9\xff\xe0\x62\x6c\x3e\x7c\xa0\x52\xa6\x44\x7e\xf8\xcb\x9f\xff\x9c\x2f\xf1\x10\x47\x4f\x63\x03\xe7\xb4\xe8\xef\x2c\x2e\x39\xc1\x72\xbb\x88\x32\x97\x3a\xb9\xe7\x14\x7a\xaf\x1b\x97\xb4\xac\xdf\x91\x0a\x4f\x67\x7e\x08\xb2\xa9\xf1\x28\x15\xce\x2b\xcb\x40\x3e\xac\x9e\x26\x9a\xe0\xd9\x8c\xb0\x7a\xb3\x8b\x49\x70\xde\x82\xf5\xb8\x14\x69\x3b\x42\xf2\x65\x96\x60\x56\x84\xfd\x80\x32\x69\x82\x44\x84\x29\x0b\x49\x91\xd7\xa6\x87\xdd\x68\xa0\xa7\x0c\xff\x5f\x2f\x05\x16\xe6\x48\x65\x5e\xff\xd0\x0d\xc7\xd6\x22\x76\x15\x6a\xb1\x47\xba\x72\xfd\xe7\x9c\x76\xc4\x51\x6d\x59\x72\xec\xbd\xad\xf5\xb6\xcd\x0e\x8a\x04\x67\x03\xf2\x45\x33\x39\xb9\x29\x50\xdc\xa3\x24\x12\x75\x7e\xb9\x47\x72\xce\x14\xfe\x72\x8e\x3e\x53\x06\x02\xec\x0f\x3c\x15\x12\x5d\xe2\xf9\x29\x1f\x9d\x4e\x39\x53\x13\xf4\x19\xfe\xdf\x7e\xf5\x42\xc8\x13\xfa\x95\x60\x61\xf9\x83\xad\x1f\xe9\x4a\xd8\xc1\x16\x12\x29\x93\x88\x3c\xeb\x13\xfa\xe7\xff\x85\xa6\xa6\xe5\x73\xf4\xdd\x87\x3f\xff\x2f\xf4\x47\xf8\xdf\xff\x83\xfe\x58\x63\x69\x58\x0f\x6a\x0e\xca\x8c\xdf\xd5\x86\x11\x00\xa5\xe4\x22\xc9\x57\x35\x7b\x21\x78\xbe\x52\x95\x2d\x3f\xd1\xe8\x89\x8f\x46\x03\xbd\x31\x4c\x02\xe9\x00\x6f\x65\x76\xf0\x51\x83\xa9\x2d\x14\x6f\xca\x4e\xe6\x05\x9f\x6c\xa7\x06\x69\xc4\xb1\x6b\x99\xe6\xe6\x09\x08\x5e\x2b\x94\x1e\xa7\x12\xde\x22\xb1\xe6\xaa\xeb\x9c\x0e\x67\x5d\x74\xa0\x03\xce\x82\xe4\x23\xf3\x38\x81\xb8\x10\x70\xea\x47\x4f\x9b\x00\x33\x4b\xc8\xca\xe3\xb0\x10\xd6\xfd\x66\x62\x75\x61\x6a\xaf\x15\xa7\x2b\x17\x3a\x5f\x1d\xa2\x7b\xcf\xc5\x56\xfa\xd6\x13\xa9\x4d\xa1\x59\x51\xdc\xcc\x15\xdc\xc6\xbe\x51\x43\x71\x24\xb9\xc8\xd0\xbb\x8d\x5d\xc4\x96\x40\x5d\x6d\x45\xa5\xc2\x04\x35\x36\x3b\xf4\x7a\xea\x97\xd9\x2b\xab\x86\x09\x11\x8e\xee\xe9\xbc\xb8\x23\x8c\x56\x8b\x48\x9a\x25\x56\x8c\xb8\x02\x64\x73\xd5\x82\xde\x67\xb8\x2a\xd0\x38\x84\xdb\x42\xde\x10\x73\x92\xad\x05\xae\xa8\x5e\xcf\x54\x44\xe4\x82\x6f\x17\x6e\x9d\x50\xb6\x90\xa7\x51\x1b\xdc\x56\x2f\x93\x5f\xd9\x0a\x71\x0e\x87\x9a\xc7\xb9\xb2\x60\xdc\x12\xb6\xf6\x8a\x07\x80\x5b\x9c\x0d\x00\x29\xee\x02\x63\x75\xa1\x22\xc8\x16\x5c\xdb\x18\xae\x73\x86\xe7\x0a\xca\x94\xea\xc8\x08\xac\x79\xe1\x92\x98\x49\x08\x27\xdb\x7a\x1c\x5e\x6d\xa4\x3c\x46\xad\x50\xa5\x18\x46\x02\xf9\x96\x1b\x62\xe4\x9a\x32\x65\x27\x48\x60\x08\x06\x56\x13\xdd\x9e\x24\xe2\x74\x84\x23\xca\xc6\x27\x1e\x3c\x2a\x40\x95\xf8\xd7\x41\xd5\x26\x7d\xc0\xf2\x69\xb7\x01\xae\x5b\x57\x9b\xa5\x71\x5e\xf1\xd0\x02\x1a\x19\xc7\x0a\x5d\xc0\x86\x54\x58\x3e\xd5\x21\x7a\x2d\xc0\x09\x2e\x19\x5d\x46\x0a\x07\x42\xb8\x6c\x7c\x0e\xfa\x80\xf8\xfa\x14\x54\x2a\x71\xf5\xcf\x2d\xb8\xa8\xcb\x34\xc5\x19\xfa\x4f\x19\x55\x77\xc9\xf8\xe5\x84\x0b\x35\xd8\x10\x8f\xb8\xec\x52\x61\xe4\x34\x01\x20\x21\xfe\x4c\xc4\x33\x25\x2f\x45\x58\xdf\x75\xf6\xa2\x31\x9a\x79\xf1\x94\x80\xfb\x3a\x9d\x71\x48\xdd\x1a\xa1\x29\x66\x73\xc3\x28\x35\x73\xc1\xf2\x49\x66\x55\x97\x91\x9c\xe2\x24\x39\x41\x82\xa4\xd2\x54\x23\x97\x24\x19\x9d\xba\x02\x30\x31\x4a\xf8\x98\x46\x38\x41\xc3\x84\x47\x4f\xd2\x64\x56\xb2\xb1\x61\x52\x33\xc1\x23\x22\xa5\x27\x59\xe5\x28\x0a\x36\xb7\x15\x4a\x2e\x2b\x22\xa6\x94\x51\xa9\x68\xe4\x44\xa6\x1c\x0c\xc5\x14\xfe\x8f\x30\x98\x84\x21\x53\x18\x86\xab\x25\x3d\x62\x40\x61\x53\x66\x4b\x85\xc1\x75\x6d\xb1\x1e\x5d\x72\x42\xdd\x01\xda\x01\x74\xa5\xdb\x21\x03\x55\x3c\x90\x2b\x8e\xd4\x85\x7d\x0d\x8e\xf1\xb2\x2d\x70\x57\x3c\x51\xd9\x86\xcc\x4e\x5a\x01\x4e\x0b\x72\x19\xb2\xd4\x8b\x82\xe4\x92\x65\x24\xb4\x0c\x49\x0f\x86\x5c\x83\x9f\xb7\x6a\x4f\x6b\x2a\x82\xc8\x03\xd5\xe9\xca\x5e\x7b\xca\xa2\x24\x8d\xb3\xb2\xaa\x5a\x04\x78\xd6\x9b\xc4\x91\x47\xd3\x5e\x0b\x0a\x27\x08\x4b\xf4\x42\x92\x44\xff\xd7\x64\x5e\x9c\x66\xe5\x42\x34\x4b\x36\x25\x5d\xa0\x13\xc7\xa5\xeb\x76\x54\xeb\x50\x51\x6f\xb1\x9a\x18\xac\x89\x29\x57\xa6\xa2\xad\x41\x45\x75\xf6\x2d\x03\xa3\x39\x4c\xf8\x10\x4e\x3a\x00\xa6\xba\xfc\x6a\x2f\x9d\x33\x8d\x22\x42\x62\x12\x9b\xfa\x9c\x19\x98\xa7\x3d\xa2\xdf\x56\xc3\x77\x16\x28\xd2\x02\xb0\xd4\xb2\x61\xad\x16\x32\xb5\x58\xdd\xf0\x0c\xdd\x96\x00\x81\x3c\xca\x8c\x70\x19\x1e\xee\x64\x61\x09\x5f\x07\x60\xb5\x34\x89\xfd\xad\xd0\x9a\x00\xab\x85\x3e\x77\x00\xb0\x5a\x9a\x67\x4d\xce\x08\x1f\xef\x35\xd7\x5d\x4f\xea\x8a\x37\x4f\x40\x34\xc0\x74\xe6\xee\x2c\x6c\x41\x77\x20\xe7\x55\x1b\xb1\x5d\xe0\xb1\xa5\x1a\xa0\xaf\x0b\x1e\x5b\x1a\x4c\x9b\xc1\x63\x4b\x43\x6d\x2f\x78\x6c\xc5\x40\x1b\x80\xc7\x1a\xe7\xfe\x40\x6f\xea\x66\x4c\x01\x12\xaa\x86\xe9\xe8\x1e\x20\x06\x96\x8e\xf1\xc2\x04\x0e\x98\x6b\xcc\xdd\xd1\x36\xbe\x08\x46\x6b\x73\x6f\xeb\xc2\xb1\x4a\x4e\x88\x75\xf7\x5e\xe6\x7d\x33\xa0\x23\xeb\x9a\xdd\x4f\x7c\x6b\x37\xd8\x21\x23\x3c\xb3\x58\x06\x75\x25\x8e\xda\x93\xb5\xbd\x19\x2e\x2f\x60\x5f\x16\x58\x7e\x23\xe4\xba\xcf\xa5\x6a\x21\x13\xfe\x62\x2b\x76\xc1\x36\x34\x9b\xb2\x76\x0b\x42\xa7\x03\xab\xb4\xd5\x51\x8e\x32\x45\xc6\x65\x9d\x36\x3f\x34\x94\xa9\xbf\xfe\x65\x25\x27\x32\xd0\x9e\x4e\x3d\xf4\x6a\x76\x64\xce\x0e\xfb\x1b\x89\x51\x34\xd1\x5a\x91\xd4\xea\x8b\x9e\x8e\xb9\x59\x25\x9a\x62\xea\x14\xa9\x54\x1a\xd7\x12\x95\x7d\x56\xc0\xc2\x3d\x43\x1f\xa1\x0c\x32\x9e\xce\xb4\xfe\x95\xcd\x8f\xea\x9d\xd4\x4f\xbf\xfb\xee\xaf\x04\x7d\x87\xa6\x04\xb3\x82\x0e\x0b\x6a\x93\xbe\xfa\x00\x3b\x52\x4d\x48\x9f\x55\x2e\x05\xea\x7e\x31\xb5\xcd\x5c\xbc\x61\x8f\x8d\xb8\xd3\x89\xa1\xbc\x27\x8e\x26\x48\xa6\x43\x53\x9f\xda\xb3\x61\x38\x41\xfa\x8a\x8f\xc1\x51\x0d\x37\xb2\x1b\xf4\xb2\x53\xb8\xdf\x18\x00\xeb\x6e\x6c\x7a\x1b\x77\xe0\x1e\x39\x95\xa4\x80\x29\x56\xe1\x34\x33\x9c\xcf\x3f\xf8\xd2\xe0\x0d\x9d\x18\x1f\x82\xd6\xcf\xb0\xb5\xec\x6b\x59\x1a\xc2\x89\xc1\x4b\x96\x26\x58\xd8\xa3\xdf\x67\x5a\xd1\x10\xe4\x99\xf2\x54\x26\x73\x14\x73\x46\x4e\x60\x27\xa4\xd1\xc4\x38\x56\xb5\xce\x82\x6d\xa1\x94\x67\x2a\x53\xad\xd0\x42\x5b\xae\x2e\x8b\x54\xd8\x60\xa1\x4d\x28\xf4\xa3\xd5\x6f\x02\x6f\x29\x2f\x3f\x12\x35\xd3\xa2\x7c\xb8\xe2\x12\xcf\x6f\x08\x57\x5c\xd8\x55\x01\xae\x38\x83\x2b\x5e\xa4\x4b\x1b\xe1\x8a\x4b\x6b\xde\x0c\xae\xb8\x6a\xc9\x37\x80\x2b\x2e\x34\xf3\x66\xe0\x8a\x4b\x14\x7d\x33\x70\xc5\xa5\x79\x05\xb8\xe2\xb7\x07\x57\xbc\x25\x20\x6f\x35\x2f\x36\xb8\x5e\x8a\xb2\xf9\xda\x9b\xec\xbd\x44\xbd\x1b\xbd\xc1\xa2\xa7\x62\x50\x5b\x76\x5d\x6d\x0f\x02\x5c\xcd\x84\xd6\x03\x01\xae\x54\xd5\xeb\x59\xdd\xb6\xc0\x62\xa0\x18\x1c\x18\x04\xb8\x30\x81\x10\x5f\xb9\x7e\x7c\x65\xe5\xe6\xb3\x7d\xeb\xe1\xb9\xa0\xcb\xf2\x85\xdc\x10\x06\xb8\xb0\x3e\x8d\x22\x31\x41\x74\xdf\xc1\x4e\xdc\xaf\x34\xff\x50\x38\xe4\x2b\x65\x79\x9f\x8a\xd2\x02\x92\x6b\x09\xcf\xa1\x14\x1a\x25\xdc\xf7\xff\x87\x9d\xbb\x41\x64\x70\x89\xbc\x99\x5f\xc5\xec\xc5\x06\x5b\xb5\xf1\x0e\x75\x5a\xe9\x6e\x12\x85\x5d\xf2\xe6\x9a\x2e\x66\x37\x88\xfb\x19\x89\x6a\x6c\xcc\x74\x4a\x77\xd5\xec\xaa\x8b\x2c\xc3\x60\x03\x85\x7c\x21\x2f\x55\x5f\x4f\x66\x38\x46\xc6\x2f\xa5\x03\x03\x4a\x8a\x79\x73\x4c\xa5\x12\xb5\xb1\x4d\x0b\x23\xdc\xc6\x55\x3a\x4b\x1b\x07\xc4\x78\x54\x1d\x6f\xf6\xda\x94\x4c\xb9\x58\x15\x58\x55\xf9\xa6\x2d\xb1\xb4\xc9\xab\x64\x36\x21\x53\x2d\xc9\x0c\xd6\x6d\xa4\xe9\x7a\x67\x49\xcb\x36\x77\xcd\x04\x3a\x16\x36\x81\xe7\x08\xd5\xcf\xc6\x06\x09\xb5\xf1\x72\x6f\xbb\xcc\x16\xab\x75\x4d\x87\x90\x03\xf1\x5e\x6e\x70\xb3\x0f\x15\xdc\xdd\xb0\xbf\x2b\x63\x3a\xb2\x90\x9a\xd5\x51\x1b\x4b\xe2\x35\x96\xe1\x9d\xe5\x6f\xd9\x02\xe4\x6b\xb8\xf2\x8b\xde\x79\xcd\x09\xfd\xea\xd3\xeb\x07\x78\xd4\xa0\xf5\x2e\x92\x07\x22\x73\x24\x11\xa7\xbe\x66\x50\x18\xcc\x22\xbd\x0a\xbb\xc4\x69\x94\x5b\x6c\x92\x54\xd4\x46\x99\x36\x31\x68\x47\x2a\xc5\x09\x68\x12\x7e\xd5\xd4\xf2\xa2\x0e\xe7\x15\x69\x8f\xcd\x3c\x26\x94\xa9\xff\xfc\xdb\x5a\xab\xa9\x55\x2b\x4b\x37\xa8\xf4\x86\xa3\x88\x48\x63\x63\xb7\x51\xc8\x78\xc8\x9f\xa1\xc8\xdb\x36\xab\xaa\x8f\xb2\x9e\xb7\x66\xf0\x19\x04\x76\x9c\x6f\x75\x23\x2e\x4c\x04\x4f\xc7\x13\x67\x43\xd2\x67\x46\x4f\xad\x6a\x2d\x7f\x5e\xb0\x91\xaf\xbd\x96\xdf\xa7\x34\xd9\xcc\x42\x77\x5f\x28\x7f\xf7\xa9\xf7\x80\xe4\x24\x3b\xad\x43\x68\xb6\x72\x61\x17\x07\xdd\xbc\x4f\xfb\x6e\xe6\xaf\x81\x6e\x4e\x1c\xec\xeb\x88\x27\x09\x78\x1a\x24\x99\x3e\x13\x51\xdd\x3d\x4c\xf8\x81\xae\x87\xd8\x98\x0d\x00\xde\xce\x13\x23\x1a\xc9\x5f\xb7\x46\x34\x94\xc8\x8d\xbe\x1c\xb4\x60\x42\xd5\x38\x23\xac\xca\xc6\xf6\xcb\x62\xe5\xa1\x23\x0b\x18\x74\xd1\x63\x3b\x0b\x1a\x74\x24\x39\x70\xe0\xe0\x8a\x79\xb4\x35\x78\xb0\xc4\xec\xb2\x58\xbe\xfc\x9a\x71\x81\x43\x46\xf1\xe9\x68\x12\xf7\x59\xa7\x90\x4f\xe1\x2a\xb4\x0f\xe7\x79\x40\xb6\xd1\x21\x7c\x66\x06\xf5\x5d\xac\x61\x05\xdc\x68\xfa\x13\x68\x3a\x06\x34\xd9\x84\x14\xba\xb0\x41\x88\x26\x27\xf1\x29\x8e\xe6\x51\x42\x23\x4f\x67\x1e\x0b\x3c\x9b\x54\x71\x3c\xb7\xf2\x01\x75\xe8\xb5\x50\x87\xea\x0a\xa1\xad\x13\xb7\xed\xf6\x15\xc3\x53\x12\xd0\x90\xda\x88\x86\x74\x92\xe1\x6d\xb0\xbc\xa4\xdc\x2b\xc2\x38\x2c\x9e\xfb\x00\x89\xf4\x0a\x90\x48\x9b\x1c\xfe\x1c\xef\xa8\x70\xec\x03\x4c\x53\x13\xe2\xbd\x3e\x4c\x53\x26\x04\xb4\x0a\x79\xa7\x9e\x1f\xbc\x32\xa2\xcb\xe2\xc0\x5e\x13\x96\xa9\x42\x5c\x5a\x47\x6e\x5c\x86\xcb\xb4\x6c\x5f\x34\xa2\xcb\xeb\xa2\x24\xad\x47\x99\xb5\x00\x90\x2a\xef\xce\x96\xc0\x21\xd5\x2f\x43\x4b\xce\xcd\x2e\xb3\x7a\xd6\xab\xd9\xeb\x67\xf6\xac\xa3\x60\xae\x97\xe4\x93\xed\x87\xe3\x4a\xf4\xc9\x8b\x1b\x6e\x96\xec\xd3\x71\x3e\x78\x22\xd0\x84\x27\xb1\x03\xe1\xc8\xa8\x95\x75\x90\x65\x42\x64\x04\x72\x8b\x71\x3f\x23\x91\xd1\x36\xf3\x42\x7c\xcb\x52\x7a\xb2\x45\x84\xe1\xee\x80\xd1\xec\xc2\x8a\x92\x71\x92\x4d\xec\x27\x2b\xa5\x0b\x59\x34\xff\x2f\x19\x63\x81\x42\xe0\x35\xa8\x1e\xe6\x4a\xbb\xf7\x8a\xc1\x2d\x13\x3d\x3c\xe3\xa8\xa8\x2a\xb1\x6b\xf6\x19\xfc\xfa\x4c\x9d\x21\x06\xfb\x3d\x2e\xf5\x52\xba\xd9\x35\xf2\x54\x96\x37\xcb\x06\xc1\x70\x0b\x15\x13\xb7\x07\x47\x9a\xe2\x2f\x83\x19\x16\x38\x49\x48\x42\xe5\x74\x6f\xc1\xd0\x17\x45\x77\xb5\x3e\xab\x82\x1b\x13\x19\x4b\xa7\x43\xb3\x15\xdd\x40\x6c\x91\x4d\xc5\x91\x48\x99\x0f\xed\x96\x2d\x4c\x56\xc4\x33\x85\x7b\x01\xac\x6a\xd1\x04\xaa\x25\x8f\x30\x15\x8c\xc8\xda\xda\xb4\x24\x4a\x05\x55\xf3\x81\x2d\xf5\xdb\xfc\xc0\xdd\xdb\x37\x2f\xec\x8b\xcb\x3d\xfc\x0e\xd5\xc0\xf5\x97\x95\x16\x9e\x11\x01\xe5\xb9\x5c\xa1\x29\xaf\x9c\xb1\x45\xad\x20\x59\x8d\x2f\x08\xff\x5e\xb8\xb6\xeb\x02\xa7\xf1\xcb\xc0\xcb\x28\x1b\x44\xe5\xcd\xb1\xea\xb0\x56\xe1\x6e\x2d\x9b\xe4\x9e\x91\xa7\x6a\xbc\xe8\x7b\xa8\xee\x63\xd3\x46\x4c\xd3\x7a\xc0\x9e\x2b\x1c\xec\xb5\xf9\xc2\x78\x29\xff\x15\xc5\x6e\xbc\x71\x5a\xac\xa3\xaa\xe0\xab\x25\x83\xed\x78\x6f\x35\x18\xb1\xd7\xc9\x8e\x86\xad\x0f\xba\x10\xe9\x4c\xd1\xe1\x22\xb4\x8f\xe3\x06\x3b\x28\xdd\xdb\x49\x20\xcd\xdc\xb9\x59\x0a\xdd\x9a\x7a\xbe\x05\x4e\x6c\x67\xa7\xe5\x7f\x8b\xa3\xe6\x10\x92\x0c\xc2\x94\x9f\xc7\x78\x33\xa5\x4a\xb9\x44\x09\x63\x80\xd7\xbb\xb3\x68\x9b\x7e\xef\xc2\x5d\x30\x54\x58\x36\x26\xaa\xb3\x3e\xeb\x48\xf4\x42\x10\x23\x16\x42\xa3\xa2\x76\x72\x66\xd5\x87\x9a\x6b\x43\xa2\x7b\xca\x62\x73\xb4\xf0\x40\x95\xcc\xca\xfe\x99\x3e\x46\x38\x91\xe4\x44\x37\x0c\xd5\x82\x15\x87\xe0\x57\x8c\x5e\x04\x9e\xcd\x88\xe8\x33\x9b\xc5\x02\x0e\x27\xce\x13\xd3\x7e\x5d\x88\xaf\xa5\x01\x19\x44\x38\x9a\x1c\x68\x8d\x30\x24\x23\x45\x13\x12\xbb\x7c\xe9\xe2\xf2\xb8\x79\x1b\x83\xfd\x1a\x8b\xd5\x1b\xb9\xb2\x75\x27\xb6\x93\x24\xd2\x1c\x25\x2b\xef\x3e\x23\x42\x8f\x5a\xef\xe1\x67\xc2\x10\x1d\xb9\x71\xd8\xd8\x25\xf4\x02\x9e\x39\xbd\xf5\x9f\x31\x4d\x0c\x00\x81\xeb\xda\x09\x81\xc6\xfd\xd0\x67\xc6\xdd\xcf\xa2\x42\x86\x2e\x65\x54\x4e\x34\xa7\x4e\xc1\x27\x0b\x6a\x46\x5d\xe2\x10\x7b\x5e\xe7\x34\x77\xf5\xe3\xcb\x39\xe8\x33\x15\x9c\x4d\x21\x49\xc8\xe2\x52\x39\xf2\x49\xa2\xb2\xe3\x51\x99\xe2\xb9\x52\x22\x8e\x63\x59\x34\xbe\x1a\xb5\x92\xfe\xb3\x60\x76\x39\x2d\x64\x45\x46\x1e\xac\x12\x04\xb1\xba\x8a\x7e\xcb\xe4\xdf\x90\xda\xb1\x98\xda\x51\x4d\x9b\x36\xa6\x77\x64\x87\x78\xdd\x14\x8f\xba\xe5\xdf\x85\x64\xbb\xc3\x54\x8f\x57\xce\x89\xd8\x4f\x3a\xc4\xeb\xe6\xaf\xec\x23\x75\x25\x24\x78\xbc\x62\x82\x47\x63\x4b\x6d\x31\x36\xbd\xfe\xd8\xae\x95\x1c\xb1\x02\xcc\xaa\xaa\x97\xcf\x44\x09\x1a\xc9\x5d\xf0\x07\x39\xc3\x0d\xa3\xfa\x40\x0b\x9c\xad\x90\x9a\xf4\x03\x99\x13\x14\xe2\xe4\xb2\x0a\x97\x43\x41\xf0\x53\xcc\x5f\x16\x6c\x75\xd2\x47\x13\xf9\xcc\xb5\xd8\x23\x48\x44\x25\x29\x44\xf2\x50\x89\x18\x91\xd6\xd8\x89\xfb\x6c\x42\x89\xc0\x22\x9a\x40\x76\x67\xbe\x30\x26\x4b\xd8\x00\x3a\x99\x58\x0e\xdf\xdb\xb5\xc6\xa2\x37\xa0\x7b\xd9\xc2\x94\xe1\xf3\xd9\x35\xd7\x23\x99\x9a\x57\x32\x61\xc6\x4a\x19\xbe\x49\xae\xd1\xf2\x6f\x9b\x88\x90\x11\x7b\xaf\xc9\x08\x59\x30\x95\xf7\x46\xc3\x84\x84\x7c\x37\x84\xa4\x84\x3d\x25\x25\x54\x90\x78\xbd\xc4\x84\x8d\x4c\x7e\x87\x8f\x99\x76\x3d\x1f\x22\x6e\x7a\x55\xd0\x5a\x3a\x1c\xec\xfd\xe8\x55\xce\xb9\xe9\x09\xfc\x25\xdb\x14\x46\x22\x16\x7a\x9f\x0d\x49\x1c\x03\xa7\x55\xdc\x56\x68\xcf\xf7\x8e\x33\x0f\xe8\xbb\x17\x4b\xbd\xd9\x71\xc2\xd9\x58\xd2\xd8\x80\xcd\xcc\x30\xd4\x2a\xf6\x8d\x17\x00\xae\x00\xeb\x9b\x24\x44\x38\xaf\x84\x40\xdf\x48\xca\x2c\x9a\x64\xf6\x5d\xcc\x89\x64\xef\x95\x31\x16\x60\x36\x47\x4f\x8c\xbf\x24\x24\x1e\xc3\x0a\x95\x07\x73\x8a\x28\x39\x41\x54\x65\xaf\x09\x40\x63\xe0\xa9\xea\xeb\xb1\x43\xac\x9d\xd1\x00\x88\x7d\x57\xd8\xea\x15\x1e\x07\x96\xdf\x9e\x21\xd4\x63\x68\x84\x23\x75\x82\x64\x3a\xcc\xdb\x8f\xb9\x29\x2e\xaf\xb5\x6f\x6f\xe2\x79\x23\x21\x66\xbe\xa2\xf3\xea\xb3\xe1\xb8\x83\xde\xae\x9d\x84\xe2\xad\x62\x0b\x9f\xf1\x36\x10\xab\x9f\x53\x69\x83\x30\x10\x67\xd9\xd1\xb7\xf0\x52\x19\x46\x36\xe0\x9d\x1a\xbc\x69\xc6\xe3\x5a\x5b\x67\x69\x2a\xeb\x8e\x25\x0f\x04\xb5\x82\x92\x75\x54\x41\xbb\x86\xdc\x5a\x6a\x92\x4a\x10\x3c\xb5\xce\x01\x7d\xd5\x80\x58\x63\xc2\x40\xf5\xe8\xa9\x30\x12\xe6\x3a\x4b\x7c\x45\xd9\x93\x5e\xdd\x1c\x15\x9c\x03\x5e\xb2\xee\xb9\x6a\xd1\x66\xfa\xc6\x23\x17\x9c\x19\x07\xe1\x56\x72\x27\x1d\x33\x9c\xac\x69\xe3\x58\xa0\xdc\xa2\x4f\xcf\xc9\x59\x56\x5c\xd0\x52\x84\x31\xf6\x21\xd3\xe3\x5a\x36\xa4\xd2\x7c\x7d\x79\x0f\xa3\x98\xcc\x08\x8b\x09\x8b\xe6\xb0\x45\x18\x20\x07\x09\x86\x13\x84\xe1\x3d\x9c\x9c\xa1\x4b\x93\x5f\x94\x49\x78\xf6\x5a\x87\x0b\x7d\x8a\x19\x1d\x69\x3d\x01\x8c\xb0\x76\x94\x7d\x66\x86\xe9\x7c\x20\x24\xb7\xae\x66\x14\xab\x5a\x19\x7d\x83\x5c\x6f\x89\xca\xcc\x8a\xef\xa3\xe5\x17\x0e\xf4\xb6\x6c\x75\x74\x73\xae\x06\x83\x4c\x87\xa7\xf0\x77\x21\xe1\xce\x01\x15\xe5\x28\x3a\x24\x21\x60\x0e\xb4\x1e\x2f\xb8\x18\xeb\x80\xf5\x76\xe1\xb7\x5b\x91\xc7\xe2\xf5\x51\x50\x6a\xa6\x94\xd1\x69\x3a\xf5\x9c\x77\xa6\x62\x43\x64\xed\x97\x26\x13\x65\xa6\xf5\x80\xc8\x81\xb7\x23\x7d\xb9\xb2\x39\x1a\xd3\x67\xc2\xfa\x6c\xc6\x29\x53\x67\xe8\x9a\x2b\xe2\x95\xc8\x30\xd0\x59\x7c\xa6\xe8\xd4\xa0\xbd\x0a\xa2\xcf\x81\x01\x05\x07\xa0\xcd\x09\x56\x27\x28\x4e\xe1\xa8\x32\xa2\x34\xeb\xd0\x37\xae\x82\x95\x81\xf8\x70\xd1\x67\xe6\xa6\x1b\x61\x9a\xa4\x82\x58\x99\x15\x9b\xbc\xa0\x7c\xc8\xf9\xc8\x2c\x12\x9c\x37\x89\x29\x1d\x4f\x94\x5e\x22\x2d\xe3\x59\x7f\xe3\x44\x73\x23\xde\x67\x43\x82\x30\x9a\x71\x49\x15\x7d\xce\xfc\x97\x74\x84\xb0\x94\x60\x41\x39\x43\x97\x05\xfb\x3f\x95\xa0\x7a\xd7\xc5\x15\x53\x36\xb0\xb6\xe7\xfa\x7c\xa4\xad\x17\xb2\xd0\x8b\xa5\x32\x1e\x4a\x9e\xa4\xca\x77\xc1\x56\xaf\x6d\x6e\x1a\x77\x85\x0b\xc0\x40\xcc\x47\x7d\xe6\xf6\xb5\x3c\x43\x1d\x89\x24\xd7\xab\x24\xcd\x52\x46\x82\x2a\x22\xa8\x41\xb1\x22\xca\x2c\x42\x76\x4e\xb3\x33\x30\xc5\xe2\x49\x8b\x50\xbe\x05\xde\x60\xaa\x16\xac\x1d\x43\x23\x21\x01\xac\x97\xbf\x1c\x60\xfa\x47\x8c\xb3\x53\x46\xc6\x78\xd5\x8a\xf4\x59\x61\x49\xd0\x37\x74\x94\x2b\xa4\x75\x3e\x47\x8f\x76\x03\x88\x7c\xaa\x5b\x25\xd3\x71\xdd\x22\x8d\x12\x8e\x57\xb8\x8d\x47\xf9\xa1\x47\xff\xe0\x43\x33\x46\xad\xf7\x73\x05\x52\xa0\x56\xaf\x46\x5c\x90\x09\x66\xf1\x89\x5b\xac\xe2\xd8\xe0\x66\xb4\xa6\x36\xa7\x8c\x81\x24\xe8\x40\x94\x89\xc1\xa2\xc2\xcc\x5b\x0b\xab\xb8\xd9\xa5\xc8\xd7\x61\xad\xbb\x22\x6b\x0d\x6a\xbf\x18\x03\x84\x61\x79\xf3\x99\x3d\xe2\x92\x4e\x67\x49\x9e\xd3\xe5\xd9\x46\x47\x5a\xc4\x72\x3c\x92\x3f\x83\xe9\xca\x69\x6d\x70\xab\xdb\x95\xd3\xfb\xac\x62\xe4\x19\x23\x85\x5b\xc3\xd9\xbc\x4c\x19\x50\x8f\x85\x7d\x23\x89\xfe\x53\x91\x5c\xed\x33\xc2\x7a\x9f\x39\x11\xe4\x5b\xe0\x32\xb6\x59\xcf\x78\xa6\x45\x68\x03\x73\x6b\xe9\x87\x22\xe3\xe4\x2e\x9c\x13\x7b\x18\xdc\xa3\x95\x17\x95\xa2\x5a\xcc\xfe\x9e\x02\x42\xd7\xe5\x96\xb0\xfb\x94\xc5\xa4\xb6\x98\x55\x23\xae\x51\x77\xb7\x18\x86\x3a\xd8\xb4\xfe\xc4\xc3\x84\x48\x82\xd4\x4b\x06\x14\xa7\xf5\x2a\x30\x59\x0a\x92\x90\x67\x9c\xdf\x71\x59\x5f\x96\x5d\x46\x58\xd6\x94\x87\x01\xb4\x35\x3d\xfe\xcd\x13\xa7\xb3\xf1\xdd\xe8\xa1\x3c\xe3\xc4\x26\xae\x58\x5f\xb9\xac\x5f\xb0\xde\xe5\x56\x31\xa4\xb6\x95\x2a\x7a\xd6\x8b\x18\xae\xef\x1f\xc9\xbc\x9a\x22\x2b\x40\x0c\x97\x65\xa3\x67\x64\x5f\xc3\x56\x7d\x9b\xbf\xb3\x48\xe3\x5a\xca\xfd\x58\x98\xf2\x2b\x24\x51\xdd\x2e\x54\xe0\x86\x8f\x32\x1d\x8d\xe8\x17\xd0\x6a\xdd\x4d\xe2\x34\x8f\x48\x70\xa9\xb9\x18\xc8\x2a\xc8\x2d\x9e\x71\x24\x6f\x93\x50\x55\xf9\xa6\xd6\xb2\xd6\xde\xd1\xb5\xd4\xfe\x29\x25\x62\x2b\x7a\x67\x5b\x75\x9d\x70\x44\xef\x94\x54\xeb\x88\xae\x51\x85\x1b\xc6\x24\xf9\xad\x3e\xe0\x1a\xd2\xad\x86\x3f\xaf\x7c\x6d\x68\x98\xef\xfa\x03\xf1\xb9\xf6\x52\x9b\x5a\x1e\x9f\x96\xc5\x26\xbb\xa2\x44\x9a\xbf\x9d\x58\x80\x75\x6c\x03\xa7\xb2\x54\x67\xec\x62\x46\x8c\x63\xc4\xd4\xac\x52\xb6\xd2\x82\xa7\xa9\xdb\xc6\x28\x1b\xf7\x99\xa3\xad\x3c\x41\x26\x4c\xbc\xc4\x50\x0b\xd8\xf6\xd8\x7b\x35\xdb\xd8\xcd\x4c\xaa\xc6\xaf\xce\x88\x94\xfa\x62\x94\x4a\x60\xca\xac\x0f\xc7\xd1\x47\xf6\x19\x3a\x2d\xc7\xa9\x9f\x80\x1d\xe1\xc4\x65\xbb\x9e\xe4\x03\x94\x7d\x66\x32\x4e\xd0\x5f\xd0\x37\x0a\x8f\xcd\x2d\x01\xe8\x95\x38\x01\xdc\x4b\xd0\x12\xac\x56\xee\x25\x07\x64\x27\x92\xc6\xdf\x9e\x2f\xeb\xd3\xd8\x10\xbe\x81\x66\xe0\x90\x6b\x1a\xe6\x04\xa2\xa3\xfc\x0f\x12\x7f\xbb\xac\xa5\xfc\xa5\x27\x32\x3f\x29\x13\xb9\xfe\xde\x78\xc0\x5b\x45\x68\xee\xeb\xe2\x80\x41\x37\x77\x52\xe2\x21\x49\x7e\xce\x27\x8a\x96\xb2\xa2\xef\x29\xc3\xdb\xf1\xa0\xca\xe1\x35\x8b\x40\x1f\xce\xeb\xea\xd6\x55\xb0\x9e\x8d\x11\x57\x3a\x46\x96\x25\x48\x77\x67\x25\x76\x57\xd5\x10\x43\xd4\xe3\x84\x24\x33\x14\xd3\x11\xb8\xde\x14\xec\x97\x0c\x3c\xd6\xd4\xfb\xd1\x0a\xcd\x34\x65\x06\x08\xd8\x44\x7d\xbc\xd8\x93\x6e\x59\x46\xde\xf8\x59\x9f\xf5\xd4\x7b\x89\xa4\x12\x9c\x8d\xb5\x32\x1d\x3f\x53\x99\x17\xb2\xd3\x07\x32\x9d\x12\x61\xbb\xa0\xd2\x48\xdd\xb6\x08\x14\x76\x17\x9b\x1e\x9b\xbe\xfa\x40\xf0\x71\xc5\x16\xf5\x97\x46\xaf\xd0\xa3\x94\x2e\x6a\xaa\x22\xec\xdd\x2e\x6e\x89\x77\x1e\xd8\x74\xf9\xb3\x6f\x9d\x44\xd3\xdc\x90\xe9\xf8\xe5\x87\xb2\x19\xd3\x52\x7d\x89\x09\x73\xed\x0b\xa1\xe9\x45\xe0\xaa\x26\xa4\x26\xcd\x49\xf7\xe3\x1c\x5b\x66\x70\x6b\xa9\x58\xa5\x09\xda\x51\x1b\xed\xc9\x37\x61\x12\x0a\xf6\x0f\xa9\xb0\xa2\x91\xbd\x05\xb8\xb0\x56\x5c\xab\x57\xd7\x2f\xed\xb6\x3a\x89\x8c\x70\xb2\xb8\xc2\x4b\x7c\xea\xe6\xf9\xe5\x86\x4e\x7b\xdc\x4c\xdb\x4b\x81\x5d\x22\x9e\x24\xeb\x94\xa9\x2b\xcd\xfc\x22\x7f\x7d\xf9\x88\xf2\x7e\xf4\x02\xb8\xb5\x80\x53\x63\x0c\x14\x38\xb1\xee\x22\xa9\xec\x2a\xf9\x0f\x99\x4b\x6d\x6e\xd5\xc7\x3e\xe3\x23\x28\x64\x98\xd4\x45\xae\xcf\xfe\x3f\xf6\xde\xb5\xb9\x71\x23\x49\x17\xfe\xbe\xbf\xa2\xd6\xfb\x46\x74\xf7\x59\x8a\x72\xdb\x67\x26\xbc\xda\x70\xc4\x4b\xab\xd5\x36\xc7\x6a\x49\xa3\x8b\x3d\x7b\x86\x13\xec\x22\x50\x24\x31\x02\xab\x60\x14\x20\x35\x67\x77\xfe\xfb\x89\xca\xcc\xba\xe0\x46\x02\xa2\xd4\xf6\xee\x99\x0f\x33\x6e\x11\x40\xdd\x2b\x2b\x2b\xf3\xc9\x27\x73\xb5\x49\x86\x64\xd2\x40\x30\xf7\xb5\xf5\xfd\xef\xf1\xa4\x58\x84\x00\x98\xdf\x70\x79\x51\x8d\xc0\xc9\xc0\xc9\xa4\xb6\x63\x0f\x6d\x78\xf6\xa4\x01\xdf\x87\x7c\x99\xb0\x0d\xc2\x8e\x68\xf4\x80\x53\x5b\x40\x70\x2a\x0c\xf2\x23\xdf\x7a\xfa\x9b\xae\x1c\x09\x72\xd0\x72\xb8\x33\xaf\x4f\xe5\x52\x0d\xd8\x9c\x9e\xae\x86\x76\x1f\xb7\x6b\x36\xd8\x7f\x0e\x89\x81\xb3\x8f\x63\xda\x67\x3f\x9e\xb6\x2d\xea\xc1\x3b\xd3\x8e\xe0\x4b\xfa\x61\x43\x21\x12\x7c\xf3\xf7\x21\x67\x6b\x75\x6b\x05\x25\x32\x68\xce\xee\xa1\xfa\x50\x59\x87\xcf\x3e\x46\xb5\x72\xe0\x99\x0f\x18\xbb\x6a\x2f\xf5\x33\x8c\x19\x6d\x92\x5e\x83\x75\x20\x3f\xd7\xb0\x5c\x0f\xb6\x46\x97\xd9\xe1\xe0\x9b\xdc\xbe\xc1\x00\x69\xa6\xe9\xd6\xe0\xa3\x4f\x88\x06\x60\x99\xa4\x42\x8f\xd9\xb4\xc5\x89\x6b\x83\xf0\x1d\x68\x1c\xc3\x01\xad\xf6\x54\xe6\x49\x90\xfc\xdd\xea\x48\x2c\x81\x24\x74\x21\x90\x25\x70\x5a\x80\xfb\x74\xad\x1e\x31\x02\x2f\x4f\x8c\xcc\x42\x65\xb5\x00\x97\x96\x91\x05\x09\x79\x84\xd0\xa1\xe6\x3e\x50\x18\x17\x61\xae\x39\xce\x19\x16\x5a\x20\xea\x53\xfa\x1c\x69\x3c\xfb\x73\x1c\xd8\x5a\x6f\xcd\x17\x7d\x2e\x05\xf6\xdd\x03\x5a\xe7\xb4\xfc\xe1\xf6\xc8\xf7\xf0\xa9\x35\xec\x72\xb6\xcc\x05\xdc\xb2\x37\x8e\x37\x0d\x13\x27\x28\x05\xe7\xdd\xcd\xbb\x1f\x8f\xef\xa6\x4c\x14\x11\x4b\x93\x7b\x31\x93\x91\x7e\x80\x4b\xdf\x2f\xa5\x28\xcc\xcf\x1d\x46\xa0\x64\x23\xa4\x06\x49\x90\x14\x3d\xef\x6b\x76\x60\xcc\x7f\xdf\x55\xbf\xef\x73\x2b\x77\x5c\x9f\x66\xed\xda\x9c\x86\xb0\x4c\x21\x6d\x1b\x0e\x6d\x8b\x5d\xf3\x3b\xf4\xb7\x9e\xb5\x65\x3c\x7f\x42\x48\xb4\xfc\x6b\x29\x07\x2a\x5d\xa7\xfe\xa3\xa0\x15\x1d\x3a\xdd\x26\xe3\x90\xcf\x64\x58\xac\x35\x7e\xd3\x5a\xfa\x3e\x21\xe2\xa9\x6f\xac\xff\xdc\x27\x87\x67\x45\x2e\x04\x88\x10\xb7\x9e\xe8\xac\x27\xb6\x35\xd7\xb1\xe0\xa3\xf1\x4c\x7e\xb0\xa8\x3a\xff\xab\xf6\xbe\x86\xcd\x22\x48\xf3\x52\x2d\x05\x8a\x8d\x13\xed\x7e\x80\xa4\x7d\xba\x4c\x0b\xcc\x5a\xbc\x4c\x24\x4f\x5d\x43\xf1\x49\x9b\x94\xc8\xb9\x8c\xd6\x87\xba\xc9\x93\xe5\x5c\xa4\x43\x34\xd1\xe9\xf2\x2c\xd5\x66\x7d\x47\xf7\x1d\xbb\xf3\x29\x79\xb9\x7d\x67\xd0\xe3\x44\xb9\x3d\x99\x77\xb3\xf3\x14\xb3\x06\x0b\x06\x38\xac\x7a\x84\x3c\x92\x80\x99\x59\x24\x4d\x1d\x61\x58\x18\x9a\xea\xc2\xce\xa0\x16\xc6\x8b\x99\xcc\x4b\x09\x09\xc5\x1c\x2a\x93\x33\x9f\x13\x26\xb2\x18\x09\x42\xac\xac\x8c\x98\xc0\x94\x2b\xf8\xb2\xb9\x9f\xa9\x52\x83\x3f\x6a\x23\x0a\x73\x40\xbd\x86\x5c\xff\x08\x8b\x1e\xb1\x2c\x4f\x36\xe0\x52\xd6\x6f\x5a\xa6\xee\x94\x17\x3c\x55\xab\xe7\xb6\x2a\x3d\x31\xc4\xc6\x36\x83\x4d\xdf\x99\xc1\x5f\x09\x29\x72\xe8\x28\xd8\xb2\x5b\xb7\x70\x0f\x2b\x77\x87\xe4\x06\x4f\x22\x39\x7f\xb5\xb3\x58\xf0\xb2\x50\x1b\x73\xbf\xe5\x69\xba\x1d\xa1\xd7\x59\xb0\x35\xd7\x6b\x3b\xd1\xe8\x30\xec\x73\x36\xd1\xe0\x9e\xf2\x68\x2d\x6e\x0a\x5e\x94\xad\xc8\xac\x5a\x2b\xbf\x10\xb2\xdc\x7c\x71\xc2\xfe\xec\xfb\x78\x3a\x39\xfd\xe1\x6c\xfe\x6e\x7a\x33\xf9\xee\xfc\xec\x5d\xd0\x1f\x7a\xf2\x61\x7a\x73\xd3\xfc\xf5\x87\xe9\x6d\xf3\xc7\xab\xcb\xab\xbb\xf3\xc9\x6d\x5b\x29\xe7\x97\x97\x3f\xde\x5d\xcd\xdf\x4f\xa6\xe7\x77\xd7\x67\x2d\x9f\xde\xdd\x76\x3f\xbc\xf9\x71\x7a\x75\xd5\x56\xea\xd9\x4f\xd3\x53\x53\x1d\xfd\xfe\x97\x60\xdb\x81\xeb\xdc\x8c\x40\x47\xff\xea\x3b\xf3\x88\x55\x5f\x3c\x61\x77\xf5\xbc\x57\x14\x88\x85\x24\x62\x8f\x5c\x1b\xe1\x06\x71\x80\x60\x82\xf5\xa3\xd5\xf5\x29\x62\x95\xa3\xb5\x60\xa9\x52\xf7\x65\x46\x32\x0f\xad\xed\x52\xa1\x45\x48\xe8\xa0\xb4\x1f\xa6\xb7\x27\xcd\xfc\x5b\xae\xb0\x80\x2e\xd5\x19\x97\x1f\x39\x52\x07\x80\x9c\x05\x23\x8b\xcd\xcb\xe4\x5d\xd7\x41\x0d\x6e\xca\x76\xd5\x83\xa5\x71\x59\xd4\xaa\x89\x63\x4f\xb2\x04\x1d\x0b\x0a\xae\x4e\xf8\xae\xd1\x74\xc3\x81\x89\x47\xd9\x42\x44\xbc\x44\x44\xb7\x39\xc0\xf2\x5c\xe5\x61\x83\xfd\x42\x79\xbe\x42\x69\x81\xb5\x16\x58\x9b\x33\xd3\x71\x7d\x9f\x64\x59\x65\xda\x69\x21\xee\x9f\x79\x48\xf5\xf6\x90\x44\x85\x88\xbf\x68\xea\x45\x3e\x06\x1f\xf5\x66\xb3\xab\x4d\x93\x83\xbd\x9e\xc8\x15\xda\x12\x6c\xd2\xbd\xf5\xd6\xa1\x90\x00\xf4\xea\x61\xc0\x90\x04\xc4\x9c\x35\x2e\x29\x5a\x02\xb0\x22\x5e\xb0\x47\x01\x74\x34\x25\x65\x1d\xc5\x3b\xbd\x91\x19\x50\x1d\xe2\x01\x6c\x0e\xe1\x0a\x4d\x4d\xa7\x90\x7f\x0e\x45\xde\x7c\xaf\xc5\x30\x27\xde\x5e\x4e\x91\x77\x58\x28\x48\x7d\x1b\x2f\x00\x2d\x7e\x4e\xa7\x5f\xcb\x49\xb7\xe7\x10\x32\xc7\x41\x9f\xf6\x58\x1e\xb7\x4a\x72\x94\xfe\x0d\xab\x24\xd0\xd8\x3b\x56\xb7\x2a\xe6\x5b\xb3\x38\x00\xf4\xa0\xcb\x2c\x53\x79\xc1\x3a\xca\x40\x08\x24\xb6\x0f\xce\x32\xea\x87\x13\x91\x50\x88\xd1\x5c\x74\x4b\x1e\xb6\x7e\xd4\x52\x34\xae\x81\xef\x2c\x08\x2e\x82\x0b\xa6\xcb\x99\xb9\xa9\x5c\xd5\x2b\x2b\xb4\x4d\xa9\x3e\x24\x3a\x33\x33\x8a\x43\xdf\x14\xce\x6d\xb5\x5f\xda\x12\x5a\xa7\x3c\x15\xcb\x62\x3e\xd0\xd9\x05\x25\xca\x2e\x36\xc0\x64\xb5\x7e\x86\x12\xfb\xdf\x3e\xbe\x22\x50\xb4\xb9\x72\x04\x96\x87\x5c\xa9\x02\xf5\x5e\x7f\x37\x62\x76\x34\xc1\x6c\x41\x95\x52\x1c\xbd\x53\x2e\xcd\x5d\x02\xb1\x64\x2e\xe4\x7c\x3c\x93\x67\x00\x3e\xf5\x17\x1c\x1b\x5e\x0f\xb7\x8b\xbd\xf7\x8a\x4a\xc2\xfa\xcf\x1a\xe9\xd2\x9d\x1d\xc0\xaf\x7b\x84\x2c\x8a\x74\xeb\x38\xa2\x62\x56\xf9\xae\xcf\xee\x41\x6b\xba\x55\x2d\xb1\xc3\xb8\x75\x74\x21\x32\xb2\xf8\x63\x3f\x3d\x4a\x1a\xbc\xcd\xa6\xaa\x31\xfb\xd9\x5a\x94\x20\x68\xc8\x05\xd1\x58\xdc\x6b\xca\xb7\x96\x50\xbc\x6d\x60\x9f\x83\xa3\xfb\xb9\xc3\x88\x76\x0f\xb0\x23\xe3\x6c\x19\xe5\xca\xc5\x5e\x4a\xb4\xf4\x0e\x80\x21\x9d\xba\x8f\x6e\xc4\x6e\x44\xe5\x7b\x48\xe1\x4e\xa8\x74\xd0\x59\x64\xba\xfd\x67\x9c\x2c\x64\xf1\xb0\x20\x0d\x4a\xa9\x4d\x9e\x59\xb3\x7f\xc0\xb3\x88\x24\x1f\x6c\x99\xa4\x29\xe8\x01\x63\x36\x91\x5b\x4b\x82\x61\x8e\x42\x0b\x4e\x4d\x56\x52\xed\x8b\xcf\xef\x58\x4c\x51\xb0\x98\x6e\xba\x17\x13\xe2\x3f\x3c\x07\xd2\xf3\xac\xa8\x67\xe0\xc3\x33\xb2\x85\x37\xb3\xa9\xf4\x67\xc1\x1b\x60\x14\x08\x4f\xf3\xcf\x15\x59\xd6\x68\x6e\xf0\xe1\xdf\xdb\x9b\xfe\x7d\xc9\x73\x2e\x0b\x88\x97\x22\xa5\x35\x17\x41\xd8\xb6\xf8\x04\xd8\x56\x89\x06\x66\xf8\x29\x9c\x5c\x0b\x25\x40\xf8\x59\x12\x8f\x58\x32\x16\x63\xc8\xec\x9b\x1b\x5d\x62\xe1\xdf\x5c\x1b\xcd\x61\x26\x1b\x71\x20\x63\x36\x49\xb5\xa2\x2f\x84\x8c\x52\xa5\x01\xda\xbb\x08\x49\xd7\x61\xe5\x93\xbb\x6a\xb1\x85\xfb\x0d\x4c\xa5\x2f\x5e\xd1\x83\xe0\x43\x48\x50\x0b\xbe\xf6\x14\x76\xba\xff\xfd\x5f\x15\xd1\xc7\x76\xe1\x2f\x5e\x30\x15\x58\xe3\x18\x7a\xb1\x49\xc2\x34\xd3\xbb\x26\x08\xde\x80\x89\xf1\xf1\x39\x01\x7b\x1d\x7b\xcd\x0b\x96\x0a\xae\x0b\xf6\xf6\xcd\x20\xcc\x89\xed\xa0\x97\xae\xb4\x7d\x7d\x90\xbd\x0d\xd3\x0c\x95\x3b\x57\x31\xe4\x1d\xe6\x79\xc1\x38\x93\xe2\x31\x8c\xca\x51\x10\x48\x65\x93\x09\x8b\x80\x17\x04\xb1\xf8\xc8\x6a\x04\x91\xae\x78\x65\xea\x90\x23\x36\x55\x06\xb9\x65\xa9\x59\x2d\x2b\x6b\xe4\x50\x6d\x00\x63\x37\x2f\xf9\x80\xc9\x35\x2f\x66\x92\x24\xab\x85\xa3\x04\x21\xf2\x93\x34\xad\x06\x29\x72\x88\xc3\x95\xa6\xc3\xa6\xf5\xf1\xd8\x0d\xd0\x05\x5c\xbf\x5c\xa4\x58\xc5\xfe\xe7\x37\x0b\xc6\x32\x38\xae\xc8\xb0\xec\x56\x6d\xa7\xcd\x6e\xfd\x19\x95\xe0\x96\xea\xcf\xd5\x2a\x89\x78\xda\x43\x19\x16\x6d\x4d\xde\xb3\xb1\x9a\xbe\x82\x1d\xba\xf1\x73\x57\xd0\x5f\x55\x6e\xb7\xbb\xc3\x31\xfb\xa8\x5a\xcc\xf8\x1d\x93\x1b\xe8\x16\x87\x5c\xc0\x5d\xc8\xe2\xe7\xf2\x24\x57\x9a\x3e\x8d\x81\x30\x61\xbf\x14\xf4\x04\x04\x56\x74\x60\xdc\x5a\x1c\xc4\x43\x07\xe1\x97\x04\x22\x45\xc1\x47\x6f\x76\x78\x74\xb3\xff\xde\xdd\x1f\xf9\xfe\xdb\xae\x38\x70\x5d\xb3\xe3\xdd\xca\xde\x24\xfe\x2b\x8f\x20\x4a\x12\x6a\xb2\xf1\x99\x4d\x32\x4b\x9b\x02\x85\x83\x93\xa0\x55\x3d\xcc\x72\x15\x09\xad\xc7\xec\x0c\x0e\x1a\xfa\x93\xf1\xa5\x75\x74\x04\x2f\xcf\xa4\xb9\x99\x58\xee\xbb\xa0\xfc\xea\x12\x6f\xdb\x01\x48\xa4\x7b\x90\x8f\x68\xb3\x3f\xbf\x5d\xd7\x6d\xc2\xf2\xf8\x42\x19\x90\x12\x8b\x9d\xad\x4e\x58\xac\xa2\x7b\x91\x1f\xe7\x22\x4e\xf4\x09\xf8\xec\x8b\x4e\x67\xe1\xc6\xdc\xb6\x0f\xd6\x34\xba\x00\x08\x7b\x08\x05\x4e\xb1\x7e\x0a\x29\xb0\xa1\x49\x23\x96\x2c\xe1\x3a\x61\xe3\x59\x31\x80\xcb\x52\x05\x0a\x59\xe4\x5b\x44\x3b\x5b\x53\x56\x6d\x20\xec\x4d\xc3\x28\x6d\x5d\x91\xd8\xf9\x73\x60\x7b\x9e\xd8\x6d\x8c\xf8\x21\x20\x03\x76\xaa\x50\x14\x07\x86\xe2\x22\xe3\xc5\x5a\x03\xed\x47\x75\x0c\xe8\xd2\x05\x9f\x9a\x11\xe2\x19\xe0\x20\xd0\x4a\xe1\x3f\x72\xe4\x14\xba\x48\xd2\x74\x26\x31\x70\x03\x18\x3a\x5e\xb5\xb2\x0b\x99\x4f\x47\x8c\xc7\x31\xfb\xff\x5e\xbf\x3f\xff\x8f\xdb\xb3\xf9\xf4\x02\x6c\xde\xd3\xf3\xb3\x37\x23\xf7\xe3\xe5\xdd\xad\xfb\x15\x2d\x2c\x0f\x22\x67\x1b\x7e\x0f\x57\x3c\xa9\x05\x05\x9e\x8a\x99\x0c\x5b\x6a\x79\x97\xcc\x13\x2d\x2c\x82\x96\xd4\x14\x47\x3f\x4d\x73\xd8\x45\xda\x4a\x74\x9c\x03\x2e\xbf\xd7\xee\x93\xdd\x6b\xd0\x2e\x1e\x57\x85\x55\x03\x21\xbe\x98\xeb\x80\x88\x87\xee\xbe\x7e\xc1\x09\xb9\x4a\x64\x17\xce\x4f\xc8\x87\x97\x54\xe2\x7f\x14\x5b\x00\x9a\x5f\xf1\x24\xef\xbd\xf6\xda\x99\x14\xed\x8e\x31\xf7\x74\xae\xeb\x9b\x4a\xa3\x2e\x8c\x91\xca\x9d\x58\xd2\x36\x12\xdd\x5f\xbd\xbb\x44\xcd\x29\x3e\x15\xb9\x65\xf8\x72\xb1\xb0\x96\x06\xd3\x1d\x34\x7e\x0d\xce\xe4\xed\xe5\xbb\xcb\x13\x26\x52\xbe\x50\x10\x06\x49\x50\x23\x5b\x04\x0d\x58\xa4\x36\x41\x41\x15\x76\xb7\x11\xcb\x3c\xbb\x5b\x68\x44\x1b\x63\x19\x7b\x58\xde\x32\x95\x37\xb9\xd1\x9e\xf7\x0a\x48\x9d\xbd\x52\x79\x9f\xe3\xdf\xbc\x86\x71\x21\x99\xb9\xc8\xd5\x24\x2f\x9d\xcd\x4b\xc1\x81\xf9\x83\xdc\x42\x64\xcb\x27\x60\x6c\x9a\x56\x72\x71\x9b\x8d\xa3\xc7\xe4\xda\xf7\x6f\x2a\xc9\x7e\xfc\x46\xb3\x45\x59\xcc\x64\xb5\x0c\x25\xd9\xe4\xe7\x1b\xf6\x1d\x2f\xa2\xf5\x9b\x99\x84\xb8\xc4\x1f\xbf\xe9\xa0\xa1\x1c\xcc\xec\x6c\xc6\xe4\x1d\x2f\xf8\xb9\xe2\x71\x22\x57\x6d\xb4\xce\x3e\xf7\xe0\xd9\xed\xe4\x84\xd9\x14\x30\x3e\x8a\xb6\xb0\x74\x2a\x41\x41\x20\x90\xa1\x23\x56\x8a\x80\x28\x97\x55\xea\x5b\xbc\x99\xc1\x81\x35\x93\xb7\xc8\x67\x6d\xa4\x6a\x52\xb0\x4c\x51\xfe\x4b\x73\x2b\x43\xa6\x6f\x6e\xa3\xcb\x45\xba\x65\x66\x74\x60\x19\xbb\xc9\x20\x7d\x0c\xf4\x99\xa6\xb0\x9f\x49\xb8\xa0\xbb\xb8\xde\x54\x45\x3c\x05\xac\xdf\x51\x60\xd3\x33\xd7\x76\x55\x02\xb7\x0e\x80\x6c\xe4\xb6\x0a\xc9\x75\x74\x4f\x4e\x29\x0b\x27\x0a\x0c\x00\x30\x8f\xe4\x87\xdc\x28\x23\x71\x90\xc7\x16\x8c\x6f\x29\x8e\x8e\xf9\xd0\xf1\xda\xe2\xb0\x98\xa7\x2e\xe4\x5d\x95\xd2\xf2\xb8\x45\x60\xbe\x97\x5b\x80\x85\x43\xc2\x3a\x05\x90\x12\x2f\x9d\x69\x51\x36\x66\xd1\x9d\x89\xc1\x67\x33\x89\x08\xc4\xca\xbc\x84\xcc\x87\x41\xed\x4a\x02\x40\xb2\x19\x67\x5f\x66\x04\x98\x24\x5d\x3f\xcb\xc5\x91\x8b\x1e\x8f\x2b\x63\x6a\x4e\xd8\x31\xbb\x0e\xaf\xd7\xb1\x8a\xca\x8d\xcd\x4a\x01\x91\xe7\x84\xac\xa3\x43\xd4\xad\x10\x3c\xd8\xf7\xad\x78\x60\xb8\x2b\x04\x50\xef\xf4\xbe\x1f\xe3\x82\x99\x84\x9f\x36\x35\xf5\x6e\xc5\x17\x64\xc7\x61\x68\x38\x2c\x68\x9e\x55\x4b\xaa\x94\x76\x30\xa7\xc3\x85\x67\xce\x57\x39\x28\x5b\xe2\x53\xa6\xc0\xc8\x8d\x81\xd5\x2a\x7e\xa5\xd9\xf4\xca\x68\x40\xe6\xc6\xeb\xf6\x60\xa9\x0b\x04\xad\x61\xfc\x33\x7c\x8d\x61\x08\x23\xf6\x25\x9b\x95\x5f\x7e\xf9\x75\xc4\x3e\xd9\x7f\xfc\xfe\x77\xbf\xfb\xfa\xf7\x43\xc2\x54\xec\x85\x1c\xca\xf5\x63\xe4\x52\x91\x56\x55\xa2\x70\x06\x9a\x92\xea\x80\x59\xa0\x0d\xd8\x35\xfc\x4f\x61\xc8\x0e\x30\x49\x7c\x45\x3b\x5c\x87\x3b\x93\x55\xb6\xa6\x47\x12\x68\x51\x8c\xaa\x12\xc2\x29\xbb\xa4\xd1\xff\xf3\x0e\xa2\xd7\xb9\xd9\x2a\x4f\xc3\x4e\x25\xa9\x53\xaf\x4d\x21\xec\x35\xd9\xff\x0a\x70\x20\xbe\xb1\x07\x9c\x4a\x63\x91\x63\x9b\x9c\xc9\xce\x19\x12\x41\x38\x88\x4f\x59\xaa\x62\x4b\x2d\xef\x79\x14\x12\x50\x10\xce\x3e\x71\x23\xb9\x47\x44\x41\x4a\x71\xab\xe0\x79\x59\xf2\x48\x50\x8c\xf5\xeb\x4f\x27\xe6\xb7\x11\xdb\x9e\x00\x38\x75\xc4\xfe\x76\x42\x4c\x83\x3c\x2f\xe6\xe6\xa7\x37\x56\xd7\xa6\x22\xa0\xd1\x89\x66\xaf\x8e\x1f\x78\x7e\x0c\xe2\xf9\x18\x5b\xf4\x8a\x24\xab\xcb\xa9\x1c\xea\xe6\xa9\x52\xf7\x04\xdc\x6d\x7c\x78\x6c\x49\x6b\x61\x79\x3b\xbf\x09\x4e\xbd\x23\x35\x2a\xd8\x11\xbc\x20\xd8\x38\x5b\xb0\xf1\x5f\xb5\x92\x6c\xbc\xe5\x9b\x94\x7e\xb5\x4f\x09\x57\xcc\x35\xc5\xda\xc5\x0e\x23\x94\x6e\xd1\x52\xfa\x5d\xaa\x16\xd0\xab\x0f\xb6\xa7\x88\xcc\x85\x86\xfa\xd3\xc7\x1f\x58\xd4\x11\x4b\xe2\x01\xdc\x8b\x1b\x55\xe0\x2b\x14\x36\xdb\xec\xd5\x27\xd7\xa4\x3f\xa1\x5f\x18\x06\xc5\x06\x07\xa2\x71\xd8\xa1\xe2\x4c\xa1\x9f\xd8\x6b\x12\x41\x6f\xcc\x19\x43\x30\x68\x1c\x86\xb6\x0a\xb6\xae\x82\xff\x08\x2a\x48\x24\xc3\x70\xcf\x1d\x5f\xfe\xed\x78\x3c\x1e\xbb\xaf\x81\xf1\xe7\xff\xb0\xa4\xd0\x22\x5d\x62\x49\xf6\x04\xdb\xce\xe4\x07\x9b\xb4\xca\x1a\xaf\x3d\x1d\x76\x96\xab\x42\x45\x2a\x65\x47\xde\xa0\x1b\xab\x48\xb3\x7f\x31\x6a\x6d\x30\x94\xf0\xa3\xb9\xc7\x75\x50\xe8\x63\x96\x8c\xcf\xb4\xa9\xc8\x20\x5e\xdf\x56\x21\x03\xae\xbb\xd8\x72\x1d\x06\x39\xc3\x5a\x30\x2b\xe7\x98\x58\x72\xf3\xdc\xbc\x2c\x3e\x15\xf0\xa8\x83\x84\xb8\x15\x22\xdf\x7e\x52\x36\xc4\xad\xe7\x22\xc6\x65\xdd\x31\x00\xc4\x15\x4a\x92\x01\xfb\x39\x0a\xdd\x27\xe6\x70\x91\x61\x1a\x25\x5d\x6e\x36\x3c\xdf\x1e\xfb\xdd\xd6\x5c\x9c\x9e\xa5\x16\x64\x4c\x6a\x07\x00\x5c\xb8\x29\x6d\x2d\x42\x31\x90\x7a\x69\x4f\x34\xb7\x77\x23\xc8\x83\x1d\xb0\x3d\x09\x19\xa9\x98\xd6\xb5\x8f\x6a\xad\x6a\x2c\xee\x9d\xa6\xae\x62\x11\x31\xda\x1b\xe3\x64\x81\xf4\x67\xf4\x86\xfd\xb8\x43\x7c\xab\xb9\x2e\x8c\xa0\x5c\x0d\x70\x8f\x4e\x2f\x6f\xec\x37\xfd\x0f\x5d\x18\x87\xaa\xca\xce\xd3\x90\x5b\x58\xae\x58\xce\x1f\xfd\xf1\x0b\xd8\x0e\xb4\xce\x94\x2e\xe6\x17\xff\x3e\x55\x57\x49\x6a\x4e\x2d\x58\xe3\xe3\x99\xac\xfc\x3c\x62\x22\x4d\x36\x89\x74\xd8\x3a\x14\xee\x6a\x89\xda\xf3\x7d\x52\x98\x29\xd3\xf1\xbd\x91\x60\x96\x13\x33\xb8\x52\x4d\xe4\xd6\x2e\x1d\xe7\x98\x22\x0b\x44\xa9\x4d\xbb\xfc\x1d\x1d\xd8\x00\x92\x58\x1c\x91\x42\x9a\x04\x0b\x0f\xf6\xef\x4c\x9a\xd2\xec\x5e\xf2\x30\xe4\xa0\xbc\xa0\xb8\x23\x9b\x4c\x28\x90\x00\x50\x47\x05\x4b\xec\xf4\xdf\x16\x05\xe5\x4c\x96\x9b\x43\x83\x58\x08\x96\xfc\x6b\x99\xe9\xae\x72\x61\x4f\x2a\x0a\x88\x12\xb2\xdc\xd8\x0d\x35\x60\xc5\x9d\x91\xfa\x13\x8b\x28\xe5\xc8\xf2\x67\x0a\x02\xe4\xe3\x08\x1d\xa4\x59\x50\x17\x1e\x2f\x58\x0d\xe6\x27\x4c\x85\x7c\x8d\x7f\xbf\x61\x74\x36\x7c\x39\xa2\xf3\x3c\xd7\x8e\x3d\x0d\xe7\x1c\xf2\x7b\x8b\x18\x6d\xe8\x90\xd1\x61\xc5\xf3\x18\xad\xe5\xe1\xad\x02\x23\x83\x8d\xfe\xb5\x55\x25\x7b\x4c\xf4\x7a\x26\x6f\x95\x35\x38\x32\xa9\x5c\x4e\x8c\x11\x5c\x46\x1b\xf5\x71\x0d\x42\x00\x5a\xdd\xb6\x02\x8c\x10\x3e\x28\x86\x09\x40\xb4\x73\xa9\x62\x71\x18\xf9\xe3\xad\xf7\x55\x58\xff\x75\x2e\x30\xce\x0c\x4e\x8a\xae\x30\x5d\xa1\xf5\x40\xdb\x7c\x7d\xe2\xe1\x1c\xa2\x72\x4c\xad\xea\x71\x50\x66\x92\x90\x57\xd5\x9d\x6a\x50\x8a\xbd\x71\x06\x51\xc6\x95\xb1\x77\x99\x26\x0e\x9d\x84\xa8\x85\xe9\xb1\xd7\xd9\x8f\x7d\x8f\x60\xd8\x1d\xc0\x98\xb3\x55\xae\xca\xcc\x85\xe2\xdb\x30\x42\x9c\x06\xd2\x69\xa6\x72\xa9\x4e\xe8\x4e\x75\x9e\xc8\x7b\x5c\xf1\x2f\x35\x47\x98\x4c\x44\xc4\x15\x0a\x5c\x9b\xe1\x1f\xfa\x70\xc4\x12\x19\xa5\x25\x1c\x7c\xba\xe0\xd1\x3d\x26\x44\xe9\x32\xfa\x9a\x6f\xe6\xfb\x83\x34\x3b\x34\xa6\x32\x4d\xa9\x5a\x7f\x80\x02\xc9\x1c\x98\x80\x1e\x12\xce\x38\xbb\xbb\x9e\xb6\xd7\x7d\x9f\x34\x9d\x39\xed\xa7\x67\x75\x81\xc0\xff\xfd\x98\x0c\xc2\x5d\xd6\x28\x85\x45\x65\xa9\x3b\xe3\x52\x17\x61\x3d\x2e\xd2\xc2\x5c\x20\xe2\xeb\x16\xd3\xfe\xe0\x75\xba\xca\xca\xb9\x19\xa8\x74\x08\x40\xc0\xb4\xe2\xfb\xab\xbb\x49\xf0\xdd\xae\xa5\xf2\xfd\xd5\x1d\x0b\xea\x40\xb2\xe8\x54\x44\x85\x43\x1a\x8f\xd9\xa9\xcf\xe1\x50\xd7\xcc\x63\xf1\x90\x44\x18\x3a\x3b\x32\x5a\xd1\x4c\x02\x35\xba\xb9\xeb\x1c\x59\x3e\x4d\xf6\xfd\xd5\x1d\xb1\x70\x7a\xde\x1c\x4c\x47\x01\xd4\x18\xc3\x8e\x9d\x1a\x29\xb9\x54\xf2\x08\x29\x83\xf2\xd8\x7b\x3b\x46\x70\xb9\x8e\x78\x56\x94\xa4\x60\x3c\xbc\x1d\xdb\x39\xb9\xf6\x9e\x10\xd3\x2c\x35\x93\x46\x57\xc2\x18\x03\xc8\x9c\x66\x3a\xdd\x9c\xda\xda\xa0\x1e\x02\x0e\x80\x41\x3b\x48\xf8\x27\x2e\x72\x90\xcb\x2d\xe3\xf9\x22\x29\x72\x73\x0d\xc3\x8f\x47\xc8\x70\xb6\xb6\xd9\xb1\x70\xde\xbc\x66\x44\xc9\xee\x60\x82\x13\x59\xe8\x99\x0c\x02\x60\x5c\xb4\x31\x06\x2f\x24\x92\x01\x95\x30\x60\x6f\x2c\xb5\x69\x94\xaa\x32\xb6\xc7\x6a\xee\x92\xe7\x6d\x33\x54\xa2\x66\x12\x18\x4f\xcc\xd9\xaa\x8c\x1a\xea\xcf\xfe\x13\xf6\x51\x3e\x24\x71\xc2\x8f\x0a\xa1\x53\x7e\x54\xfc\xef\x8f\xa3\xda\x4f\xfc\xed\x97\x5f\x7e\xc4\x3c\x80\x5d\x74\x0e\x01\x6b\xd3\x81\x06\x9e\x76\x3f\x85\xe3\x3f\x34\xab\xf4\x80\x79\x3a\x4f\xee\x05\xfb\x88\xd3\xfd\x91\xc8\x8f\x9f\x36\x6d\x33\xd9\x36\x6f\xec\x29\xd3\x06\x54\xf4\xed\xf3\xc6\x76\x4c\xdb\xdb\xd5\xf8\x77\xab\x85\x99\xad\xaf\x56\xe3\xb7\x5f\xc2\x3f\x6b\x73\xb4\x6f\xf3\xba\xe8\x99\xb6\x66\xb7\x08\xa2\x96\x6d\xe9\x64\xd1\x4c\xee\x17\x46\x6c\x98\x2c\x82\x55\xdb\xb6\xf1\x79\x21\x0e\x8d\x9a\x45\x4e\xec\x01\xe8\xeb\x06\xd9\xf8\x4e\x8f\xe0\x81\x4c\xdd\x9e\x65\x1b\xe0\x9e\xdd\x94\xe1\x21\x00\x17\x1e\x0e\xe0\xf9\x81\xf7\xfb\xf5\xa7\xf6\xee\x9e\xee\xec\x6e\x66\x2a\xc4\x00\x66\x9a\x1b\xf3\x7a\xcf\x46\x56\x5e\xdd\xd5\xc6\x47\x8e\xd9\x08\x9b\x49\x70\x62\xba\xad\x0f\xd9\x45\x76\x39\xa2\xc9\x44\xbb\xb0\x41\xd7\x12\x0b\xad\x74\xf7\x6b\x5b\xef\x8a\xf6\x52\x98\xec\xd0\x79\xdd\x5a\x16\x7e\x60\x8a\x38\x10\x0a\x67\xae\xd4\xf3\x4d\x6f\x82\x75\x5f\xf1\x3b\xfa\xf8\x43\x83\x6e\xdd\xa9\x97\x1f\x20\xe2\xdb\x91\x6c\x6d\xb8\x34\xda\x9a\xad\xb5\xc3\xb1\x84\xb7\xfc\x27\x35\xe9\x2e\x7b\x52\x83\xb0\xc6\x7e\xc1\x5a\xb6\x2a\x5b\xca\x23\xfa\x56\x79\x8a\xbe\x83\x62\x0d\x66\x65\x9f\x3f\xd7\x8a\x39\x6f\x5e\xc6\x5c\xbb\x29\xcf\x57\x68\xf4\xd2\xa2\xd0\x6f\x5a\x66\xd8\xc7\xb1\x1d\x30\xc3\x56\xed\x9a\x0f\xe3\x0f\xb1\xfa\x18\x98\x54\x76\xed\x34\xd7\xca\x6a\xb2\x0d\x77\xd3\xb2\xf5\x87\x4c\xf2\x3e\xb8\x2e\x52\x39\x66\xa6\x02\x9e\xd7\x6e\x7e\xad\x03\x69\x66\x2f\xf8\xc6\xb1\xc7\x50\x69\x36\xe4\x17\x1b\xb7\x10\x90\x27\xa6\xbb\x0d\xbd\x38\x64\xfb\x36\x81\x98\x6e\xbb\x5a\x30\x93\x13\xfb\x8a\x67\xbb\xd6\x09\x5a\x59\x30\x1c\xb1\x5c\x60\x84\x0b\xd8\xcc\xb8\x1f\x75\xea\x5c\x47\x27\x86\x06\xfa\xd7\xba\x70\xa7\x45\xee\x4f\x23\xcf\x86\x1a\xf6\xa3\xa3\xe6\x7e\x6c\xc8\x3b\x25\xba\xed\x22\x15\x65\xc7\x72\x4f\xc5\x2a\xdf\xc7\x2c\xb9\xab\x52\x8b\xb8\x30\xbb\x78\x05\xbc\x66\x41\x1a\xe7\xae\xda\xfb\x5f\x93\xa8\x1b\x44\xc3\x8d\x18\x0a\x88\x4a\x48\xb7\x7e\x93\x78\xca\xf6\x5a\x65\x4d\x59\x51\x1c\x74\x16\x24\x7c\x33\xcf\x55\x77\x72\xe9\x1e\xe3\x65\x8b\xa8\x78\x0c\xd6\x98\x6c\x72\xcb\x7e\x29\x79\x8a\x47\xab\xa4\xcd\x60\x9b\x0d\xc6\x97\xaf\x7e\xcf\x26\x70\xf6\xb1\x0f\x20\x95\x01\x32\x06\xa5\x15\x8a\x25\x9b\x4c\xe4\x5a\x49\xde\x99\x65\xfd\xfe\x1b\x3d\xa7\x4c\xb1\xe6\x62\xae\xca\x66\x56\xd8\x01\x3d\x69\x29\x2d\xec\x14\x67\xf7\xe5\x42\xe4\x52\x60\x26\x79\x78\x8f\xd9\xf7\x7a\x35\x57\xf1\xb2\x58\x7f\x35\x8f\xd2\xa4\x77\xfa\x5a\x88\x57\x9d\x98\xcf\x4e\xf1\xab\x5d\x1d\xa8\x94\x5f\x69\xba\x64\xf8\x8c\xe1\xb3\x31\xfb\x8e\x47\xf7\x42\xc6\x2c\x4b\xcb\x55\x42\xb4\x37\x78\xd9\x48\xaa\x66\x85\x6a\xc7\x50\xb3\xc1\xf2\xcd\x21\x38\x93\x1b\x7e\x8f\x29\x65\x48\x85\x35\xf7\x96\x2e\xd2\x44\x67\xa8\x99\x27\xcd\xb5\xbb\x77\xb6\xdc\x69\xdc\x2c\xa6\xbe\xf6\x74\x89\xd1\x7a\x8f\x6b\x45\x18\xa7\x8a\x9d\x68\xc0\xc6\x75\xab\xb5\xc1\x4e\x66\x19\x64\xb4\x88\xca\xdc\xbc\x41\x8d\xc1\xdd\x0b\x0e\x44\x48\x8b\x54\x4a\xc6\x81\xe0\xec\x95\x66\x65\x66\x85\x08\x78\xb6\x52\xc0\x19\xe1\x14\x98\x07\x59\x12\xdd\x23\xb2\x15\x62\x37\x98\xeb\x5e\x23\xf5\x34\x13\x1e\x62\xd9\x26\x1a\x96\x48\xef\x73\x18\x6a\xa6\x91\x55\x69\xcf\x3a\xed\x19\x97\x52\xac\x85\x9c\x3f\x21\xb9\x4f\xff\x49\xab\xc4\xa0\x90\x12\xee\x3c\x84\x6e\x08\x4b\x99\x10\x99\xb7\xbf\xe1\xbb\xcc\x15\xc9\xb2\xa6\xc4\x27\x9a\x69\x5e\x24\xda\xc8\xb2\xd6\x11\xf7\xa4\x4a\x87\x8c\x3a\x1f\xc6\xe4\xd4\xc2\xe2\x54\x1b\x0b\x17\xe7\x36\x66\xef\xc1\xaf\x12\xdc\x4b\x94\xe3\x44\xea\x12\x58\xc5\x5a\x74\x92\x03\x3f\x07\x40\xd4\xf6\x20\x78\x7f\xa7\xbb\xcc\xc5\x34\x8e\xd9\xc4\xfb\xb3\x91\x15\x0a\x3d\xd5\x7b\x7a\x24\x52\x2d\x9e\xb2\xf8\x7a\xb9\x7e\x00\xf3\x05\x0b\x88\x81\x1e\xa7\xcd\xef\x9e\x25\xde\x35\xf3\x11\x68\x03\xf8\xbd\x90\xbb\xec\xfb\xfd\x5b\x88\x0e\x98\x9d\x06\x09\xe7\xd9\x51\xe8\xdc\x79\x4a\x03\xfb\x6f\x3b\x4f\xc4\x95\x2c\x8f\xcd\x90\x9b\x4b\x50\x74\x4f\xc1\x8a\xe8\xdf\x23\x2a\xaf\xc7\xb5\xd2\xe1\x3e\xb3\xf3\x87\xf7\xe8\xbc\x74\x39\xbb\x20\xd8\xd3\x0d\x30\xa2\x3c\xa5\x0a\x99\xbe\xa0\xd5\x6e\x93\xa2\x51\xc9\xcd\x37\xb3\x22\x14\x86\x01\x70\x11\xb6\xa8\x96\xdd\x2c\xb3\xf2\xb9\x72\xc2\xec\xa7\xd7\x6e\x8e\x70\xa3\x41\x3f\x7e\xa3\x2f\xa1\xbe\xe7\x20\xa3\x41\x2b\xe3\xf3\x07\x82\x3d\xd1\x05\xee\x20\xce\xd6\xfa\xa9\x20\x48\x84\x0e\xca\x4c\xc5\xcc\xaf\xf7\xae\x48\x1b\x29\x15\x42\x5c\x7f\x83\xdd\x0a\x1a\xd7\xbb\x6f\xfb\xb6\xda\x87\x00\x27\xc7\x16\x65\x92\xc6\xc8\x52\x18\x68\xa8\xca\xaa\x40\x90\x1e\x09\xf4\x91\x44\xbb\x03\xae\x65\xd1\xff\xf8\x8d\xbe\x52\xf1\x21\x0b\x6b\x38\x13\x6d\x73\x5d\xf7\x08\xa3\xd1\x21\x96\x69\xb3\x7f\x24\x32\xd5\x1d\x00\x11\xcf\x75\x35\x1f\xf0\x8e\x06\x03\xe2\x6d\x51\x2e\x6f\x20\xf9\x68\x17\x29\x53\x90\x97\xcf\x46\x59\x9b\x79\x36\xd5\xb8\x98\xbf\xae\x49\x21\x00\x95\xd7\x47\x38\xfb\xc3\xcd\xe5\xc5\xd1\x86\xe7\x7a\xcd\x81\xf4\xc2\x96\x35\xb2\xf9\xdc\xd1\x5a\x60\x81\x1d\x89\x9c\xc9\x23\xb6\x52\x23\x84\x11\x9d\xb0\x75\x51\x64\xfa\xe4\xf8\x78\x95\x14\xeb\x72\x31\x8e\xd4\xe6\xd8\x0f\xcd\x31\xcf\x92\xe3\x45\xaa\x16\xc7\xb9\x80\x40\x92\xa3\xb7\xe3\xaf\xde\xc2\xcc\x1c\x3f\xbc\x3d\x06\xf0\xc8\x78\xa5\xfe\xe5\xfc\xab\x7f\xfb\xfa\xf7\xa6\xe0\x6c\x5b\xac\x95\x3c\x21\x8c\xd2\xce\xb2\x8f\xf0\x9a\x70\x8c\x9f\xd4\x6a\xf9\xb7\xf1\x97\x61\x33\xe8\xd5\x8d\x8a\x45\xaa\x8f\x1f\xde\xce\xed\xc4\x8c\xb3\x8e\x8c\x19\xff\x08\xbd\xf8\x0c\xa1\x17\xf7\x49\xf1\x8f\xd0\x8b\x5f\x35\xf4\xa2\xbf\xca\xe5\x64\x0c\x70\x64\x7b\xf9\x68\x7e\x77\x32\xd2\x7a\x22\xf6\xc9\xa1\x96\xc3\x21\x0c\x8c\x3b\xe0\x88\x18\x98\xc0\xae\xd6\x5d\x77\x97\xe9\xb0\x38\x0e\xcd\x53\xd3\x79\xbb\x18\xc4\x03\x02\x40\xc7\x24\x02\x5b\x21\x5a\x48\x33\x9e\xb4\x05\x54\x04\x79\x7b\x0e\x18\x42\xcc\x23\xd2\x4e\x7a\xd6\x27\xdd\x16\x65\x9c\x12\xf1\xfc\x59\x12\x6f\xb5\xd6\x81\x98\xd0\xc1\xe5\x37\xf4\xee\x1e\xaa\x31\xa1\xa4\x0f\x1a\xd1\x17\x4c\x91\xf2\xdc\xb9\x51\xa8\xbb\x4f\xcc\x8b\x92\xe2\xd7\x16\xd3\xad\x1e\x6d\x3e\x94\xe7\xc8\x22\xe2\xf1\xea\xfd\x32\x88\xe0\x22\x85\xb6\xd8\x76\x75\x34\x63\xcd\xf5\xd3\x82\x03\x26\x48\x41\xec\x7c\xc1\x88\xac\x4e\xb4\xad\xd0\x9e\xc6\x96\x7d\xc9\x1c\xee\x96\xe4\x31\x2b\xf3\x4c\x69\xa1\xc7\xec\xbd\xca\x91\xd6\x8b\x38\x77\x7c\xc0\xc3\xf5\xfb\x53\xf6\xf6\x9b\x7f\xfb\x7a\x26\x5f\xb7\x28\x43\x70\x88\xaa\x7c\x45\xf1\x17\xa0\x02\x6d\xb8\x2e\x44\x7e\x9c\x2f\xa3\x63\x3c\x3a\x8e\xcd\xf7\x47\x54\xe9\x91\x5a\x1e\xb9\x14\x09\x47\xc4\x16\x3f\xde\xc4\x6f\xba\x90\x89\xed\x0a\xf7\xaf\x76\xe9\x99\x74\x28\xe6\x6d\xf3\xbb\x5f\xb0\x56\xb6\x10\x2a\x22\xa4\x85\x68\xd0\x58\x90\x8a\x51\x2d\x5d\x52\x1f\x8c\xf3\xc5\xfc\x5f\x6a\xd9\xf2\x8f\xef\x52\xb5\xd0\x6f\x1c\x01\x2c\xd7\xb6\x0e\xcf\xc8\xd8\x26\xb7\x1b\x7b\xee\x90\xdb\x37\x0d\xc5\x4b\x9a\xd5\xac\x4c\x0c\xa7\x6d\xc8\xc0\xb7\x0b\x0d\xaf\x0b\x22\x1f\x15\xcf\x55\x29\x6d\xd6\x0c\x25\x85\x5a\x02\xcc\x09\xae\x49\x16\xa5\x09\x9e\x05\xc0\xfe\x39\xee\xa9\x5c\x64\xa8\x7d\x80\x0f\xac\x7b\xb8\x0f\xcc\x1c\xb3\x6f\x9c\x5f\x22\x73\xcc\xa1\xe3\x4e\x82\xf1\x57\x1a\xf0\x43\x43\x29\x70\x2b\x0d\x41\x20\x99\xf7\xf7\xa2\x0d\x9c\x1c\xf0\x99\xab\x7d\x92\x86\x8c\xe7\xa0\xc1\x8b\xa3\x42\x1d\x01\x69\x1f\x50\xc1\x61\x2e\xa7\x2e\x08\x12\xa0\x34\x86\x1c\xf7\xe6\xfd\x1e\xed\xc4\x5b\xdb\xa7\xa0\xa1\xa4\xb0\x6a\x64\x40\x27\x48\x7a\x22\xa5\xc8\xc9\x03\xbc\x57\x33\x18\x88\xe1\x08\xa7\x72\x37\x22\xdd\x9b\x29\xc2\x3c\x3b\x2e\x1e\x91\x07\x42\x60\xcc\xe0\x6a\xb2\x56\x1b\x65\x74\x5d\x55\xea\xe0\x21\x5e\x6d\x41\x99\xe8\x54\xcc\x37\x3c\x43\x7d\xf5\xd7\xeb\x8d\xd9\x5a\xe6\x11\x9a\xa0\xc3\x97\x06\xa5\x2e\x5b\x54\x93\x35\xed\x69\xbf\xcb\xb2\xb3\x7b\xdd\x00\x42\x68\x03\x2e\xbf\x35\x7f\x10\x36\x77\x46\xf2\x37\x73\xe9\x35\x4b\xca\x5d\x23\x9d\x06\x82\x80\x36\xe4\xa2\x0e\xe1\x9b\xf6\xd4\xed\x64\x8b\x29\x37\x03\xe7\xc0\x05\x59\xf5\x99\x00\x2e\x31\xec\xc8\xc6\x1b\x1d\xb5\x06\x1c\x75\xed\x4b\xb0\xab\x95\xe6\x66\x62\xf9\xd2\x87\x35\xf5\xc6\x15\x40\xd4\xe8\xcd\x76\x7b\xba\x49\x88\x4e\xc3\x31\x46\x81\x60\x75\x8b\x2e\x90\xf3\xf0\xcd\x08\x89\xeb\x86\x8c\x1d\x54\x82\x8b\xb3\x31\x82\xc1\x5e\xe8\x1a\xc0\x61\xf6\xd7\x5d\xe6\xcc\x36\x7c\x3b\x32\xf4\xfa\xe8\x65\xd3\xca\x86\x65\xc1\x7d\xf8\xe0\x93\x23\x03\xfc\x77\x51\xc2\xf3\x8b\xcb\xdb\x10\xd9\x94\x60\x6f\x8f\xa2\xb5\x88\xee\xc1\x9a\x86\x47\x1e\x6e\x06\x0a\xc6\x07\xb8\xb5\x4f\xa9\x5a\x28\x0b\x94\xd9\xba\x2c\x33\x2e\xd3\x92\xca\x59\x9c\xe8\x2c\xe5\x5b\x80\x24\x48\x8c\x53\xf4\x70\x06\x17\xe0\x6b\x44\xc1\x3e\x67\x42\xff\x99\x36\xb3\x32\xf1\xdf\x0d\x1d\x4b\x0f\x3c\xf7\x83\xd9\x94\x07\x4c\x8b\x0d\x97\x45\x12\xcd\xe4\x46\x70\x19\x22\x58\x09\x92\x61\x06\x39\x56\x82\xf2\x25\x2c\x97\x22\x2a\x3c\xe1\x32\x5c\x42\xdc\x48\xed\xdb\x83\xc3\xfa\xee\x76\xde\xce\xae\xff\x60\xd3\x3e\x27\x1b\xc0\x47\xd3\x1a\xa2\xa3\xf1\x89\xae\x46\x48\xc1\x4b\x47\xae\xbd\xd4\xc2\x5f\x76\x4d\xb1\x85\x28\x1e\x05\xf0\x09\x11\x01\x42\x9b\x8e\x7f\x70\x1a\xa6\x43\x82\x07\x27\x8e\x7f\x90\xe8\xe5\x1b\x04\xc2\xb4\xc1\x42\xe0\xa5\x23\x3e\x94\x35\x06\xc3\x57\x44\xc9\x00\xa6\xc0\x57\x64\xd4\x7c\x05\xc7\xb4\xb9\x05\xe7\x0f\x22\x9e\xc9\x2a\xad\x24\xe9\x8c\x7e\xc3\x31\x9f\x60\xf4\x79\xa4\x8d\x1d\xe3\x5e\x8e\x9e\x33\xa0\xd2\xf2\x24\xda\x8e\x74\x60\x47\xc2\x53\xec\xf4\x4b\xde\xaa\x6c\xae\xe5\xbe\x97\x61\x9f\x83\x94\x12\x08\x52\xbe\xe1\x0a\xfa\xc7\x2d\x4a\x47\x9a\x87\x8c\xba\x0e\x2c\x4e\x46\xeb\x86\x19\xbc\xad\x8c\x99\xb4\x6c\x32\xcb\x32\x45\x96\xf4\xae\x98\x1d\xe2\xd0\xb4\x91\xaf\xbf\x5e\x04\xb4\x33\xba\xb2\x20\x67\xab\x03\xe9\x04\xc0\x7d\x94\x75\x76\xd5\x0b\xa9\x4b\x50\x29\x6c\xba\x46\xf0\x4a\xac\x44\x01\xa7\x79\x5c\xa6\x08\xd8\x04\x77\x0a\xf0\x71\xf2\x34\x65\x49\xa1\x67\xd2\xd1\x87\x62\x60\x0e\x48\x58\xeb\x6f\x89\xe9\xca\x05\x55\x40\xb1\xf0\x98\x4b\xd0\xc3\x92\x28\x29\x1a\xe1\x0e\xdb\x30\xc5\x59\x96\x09\x8e\xb1\xfc\x38\x6d\x33\x19\xde\xb9\xea\x93\x40\x81\xef\x90\x15\xff\x39\x62\xd0\x77\x18\x6e\x4d\x15\x4f\x42\xd9\x60\xef\xcc\x85\xcb\x66\x2f\xc7\xd6\x12\x7f\x10\xa1\x92\xcd\xad\xa6\xd0\xd6\x81\xe2\xef\xad\x10\xd3\x13\x95\x29\xcf\x31\x98\x69\x59\xa6\x2c\x59\x06\x89\xd8\x61\x0e\x90\x3c\xd2\x4c\x57\xa4\xe0\xac\xb6\x2e\x14\xcd\x37\x22\xe0\xad\x21\xf3\x4e\x1a\x20\x7e\x30\x23\x06\x42\x49\x4c\x59\x6f\xc6\xec\x9d\xa7\xc7\xc5\x19\x86\x3d\x11\x90\x4e\x27\x1a\xc5\x9f\x6b\x6f\x40\xb9\x00\xbd\x33\x4d\x54\xd2\xec\x48\xb7\xeb\x3a\x66\x10\x92\xd7\x0c\x83\x13\xd9\xd4\x45\xbb\x11\xf6\xad\x94\x2b\xe6\xd3\x1a\xc8\xc8\x6d\x88\x8e\x06\xda\x53\x61\x60\x23\x43\xc2\xee\x27\x34\xd4\x11\xa2\xb7\x34\x76\xb3\x23\xef\x3b\xcc\xe3\xc0\xa6\x06\x59\x14\x87\x37\x34\x58\x39\x21\x78\xac\xcf\xc8\xae\x78\x31\x14\x49\xe6\x02\xd7\x86\x37\xb4\x15\xb5\xd7\xa7\x99\x20\x3d\x06\xb6\x73\x62\xbe\x79\x62\x43\x75\xb9\x38\x42\x01\xed\xf2\x21\x81\xa8\x10\x3c\x5a\x57\x39\x24\x2c\xd3\xb3\xeb\x01\xc4\x10\xc2\x7e\x1c\x4e\x7f\x31\xf1\x6b\x0e\x12\x49\x32\xd3\xfc\x31\xbb\x94\x02\x71\x9e\x6a\x19\x1c\x2a\xd4\x00\xca\x38\x09\xc9\x76\x9c\x94\x5b\x98\x86\xc9\x7b\x4b\xad\x65\xb6\xdc\x88\x71\x5f\x3a\x48\x3d\x5c\x36\x28\x45\x3a\x74\xc9\xb6\xd4\x54\x07\xa8\x97\xfd\x08\x2a\xda\xef\xfc\x01\x5c\x7a\xb8\x04\x68\xeb\x47\xff\x69\xd9\x19\xf7\xe0\x6e\x71\x36\xd8\xa1\xba\x6e\x18\x82\x9f\xf7\x8d\xef\xd5\xba\x8a\x99\x1d\x90\x20\xf2\xee\xe2\xdd\xd9\xfb\xe9\x45\x35\xff\xe2\x1f\xef\xce\xee\xaa\xbf\x5c\xdf\x5d\x5c\x4c\x2f\xbe\x0f\x7f\xba\xb9\x3b\x3d\x3d\x3b\x7b\x57\x7d\xef\xfd\x64\x7a\x5e\x7b\xcf\xfc\x54\x7d\x69\xf2\xdd\xe5\x75\x2d\x8f\x64\x4b\x12\xc8\xdb\xe9\x87\xb3\x77\xf3\xcb\xbb\x4a\x2a\xca\x77\xff\x71\x31\xf9\x30\x3d\x9d\xb7\xb4\xe7\xfa\xec\xf4\xf2\xa7\xb3\xeb\x3d\x09\x23\x7d\x7f\x5b\x87\xf4\x39\xb0\x85\x4f\xce\x2b\x3a\x61\xcb\x3c\x11\x32\x4e\xb7\x18\x29\x62\x6f\xb6\x35\xe8\x77\x78\xf6\x26\x1b\xa1\xca\x43\x02\x3e\x6e\xd7\x82\xa9\x07\x91\x03\x0b\x18\x96\x46\x94\x21\x9e\x71\xa0\x5e\x6b\x2e\x8a\xbc\xe9\x15\xd8\x19\x55\x57\xe4\x5b\x17\xb7\xb9\xab\x39\x9e\x41\x92\x2a\x61\x99\xc8\x77\xb5\x05\x34\xa3\xbc\xcc\x8a\x64\xd1\x1d\xc2\x33\x38\xf0\xbe\xef\xdd\x1b\xf9\x8e\xdb\xc9\xe1\x2e\xda\x05\x63\x25\x92\xe5\x10\x98\x3c\x94\xf0\xd4\x74\xb9\xee\x6b\x0b\x2d\xce\xca\x45\x9a\x44\x2c\x89\xeb\xf6\x14\xe2\xc3\x00\x93\x71\x9d\x16\x3d\x13\x39\xa8\xaa\xe6\x06\x90\xe5\xe2\x88\x97\xc5\x1a\x29\x3c\x29\x70\x86\x92\xd8\xcc\xa4\x16\x51\x2e\xd0\x17\x20\x34\x18\x69\x31\x1d\x6a\x50\x13\x34\x86\x18\x6c\x62\x20\xcb\x1b\x07\x29\x6a\x3a\x7c\x04\xf8\x25\x96\x3e\xc0\x48\x8a\xef\xef\x1c\x1a\x6a\x71\x82\x09\x57\x03\x58\x18\x9c\xf0\xf8\xd0\x26\x55\x35\xfd\x36\x92\xda\x25\x15\xc5\x49\xb6\x91\x46\xed\xdd\xd8\xb7\xc6\xc2\x85\x52\x0d\xbd\xa1\xd2\xe9\xd1\x69\x2e\xe0\x10\x21\x48\x83\xb5\x5f\x00\xae\x89\x22\x93\x20\x20\xc9\x5c\xd5\x16\x62\xcd\xd3\x25\x6a\x1c\x66\x6a\xda\x59\x45\xb0\xfc\x5b\x75\x2f\xe4\x35\x4e\xd8\xaf\x22\x0e\x25\xde\x7c\x3c\xa7\x91\xb3\x08\x79\x13\xa6\x69\xa3\x5d\x55\x36\x2e\x14\x94\xa9\x02\xef\x09\xc1\x63\x0c\x40\xf2\x19\x0b\x6c\x48\xe9\x72\x99\x7c\x32\x05\xce\xa4\x68\xe5\x6c\x07\x30\x99\x65\x97\x74\x72\x19\x80\x73\x48\xd1\x77\x2f\x24\xe4\x53\x05\x72\xc0\xfd\x6b\x76\x98\xfd\xbc\x39\x17\x3b\x0c\xfa\x60\xf3\x4b\x2a\x69\x66\x43\x2f\x8f\x1d\xa7\x02\x23\xc2\x1c\x07\x07\xac\x9b\xd3\xf3\xe9\xd9\xc5\xed\xfc\xf4\xfa\xec\xdd\xd9\xc5\xed\x74\x72\x7e\xd3\x77\xfb\x3d\x47\x14\x5f\x6d\xf7\xd5\x83\xd9\x9c\x84\x38\xa6\x9d\xe7\x43\xd9\x5d\xa7\xfc\xb6\x83\x29\xd9\xdf\xfa\x24\xce\xe6\x71\xa2\x23\x73\xfc\x6d\xe7\x42\xc6\x90\xec\xe2\x49\x4b\xb5\xbd\xa8\x7a\x2f\xdc\x1b\xcc\xbd\x61\x25\x08\x9e\x76\x0f\x76\x45\xbb\xe7\x00\xc9\x04\x33\x64\x2e\xcc\xe6\x8f\x2b\x1c\x23\xe3\xfd\x19\xce\x4c\x71\x87\xf5\xad\x5a\x44\xbd\x4f\xd8\xde\x44\xeb\x12\xa8\x4c\xec\x6b\x80\x47\xed\x18\x15\x62\x20\x0e\x33\x6e\x24\x41\x16\x7a\x96\xe8\x99\xdc\x70\x19\xf3\x42\xe5\xdb\x8e\x2e\xf6\x13\x9e\xe1\xb6\xa9\x8a\xd0\xf0\xc8\x96\x42\xc4\x76\x16\xf0\x55\x2e\xeb\x4b\x09\xf3\x72\xdc\x5e\xfe\x78\x76\x71\x33\x3f\xbb\xf8\x69\x7e\x75\x7d\xf6\x7e\xfa\x27\x07\x93\xcd\xb8\x6e\x4b\x2e\x9d\xe5\xc2\x48\x17\x4b\x73\xd6\x2a\x5f\x30\x65\xb3\x2d\x87\xd2\x74\x26\xcb\x99\xb4\x92\x25\xf7\xc5\xaf\x73\x55\xae\xd6\xed\x05\xd5\x5b\x79\x35\xb9\xfd\xe1\x49\xcd\x04\x12\x4a\xcc\xeb\x8a\xbb\xad\x09\x17\x4e\x96\x24\xf7\x10\x63\x5c\x6b\x1e\x50\xa9\xc2\xab\x6d\x5e\x86\x0e\x89\xf6\xa4\xdb\x4b\x53\x68\xed\x54\xfe\x5b\x5e\xef\x5a\x40\xb7\x81\xdc\xac\x1c\x23\x00\x5f\xc7\xe4\xe0\x8d\xd2\x4e\x5a\x7e\xab\x9c\x60\x5f\x1d\xa5\x62\xb5\x12\x31\x2e\xaf\x7a\xc1\x64\x83\x23\x11\x18\xf9\x73\xbd\x6d\x14\x29\x81\xef\x01\x07\xb3\xc3\x7b\xf5\x17\xe0\x57\xee\x93\x76\x59\x71\x4a\x44\x52\xe0\xdf\x2c\xb8\xec\x70\x24\xef\x8f\x07\x6b\x2f\xfe\x32\x67\x2e\x54\x8f\x0c\x26\xd6\x65\xe0\xf7\x41\x17\xe0\xe5\x70\x7c\xab\x6b\xc7\xb5\xc8\x52\x1e\x09\x17\xe0\x82\x0c\xc0\x70\xaf\x7f\x8a\x03\x8f\xd2\x24\x4b\xb2\xb7\x04\xe9\x93\x7d\x66\xb8\xb6\x25\x00\x96\xdb\x6b\x2b\x8f\x5f\xde\xb4\xb2\xf3\xe2\x46\xbc\x9f\x60\x68\xc6\x3c\x95\x14\x17\x81\xb6\x28\x48\xfe\xda\x89\x59\x1f\xb4\x1c\x6a\x35\xff\x44\x13\x8f\x77\xe6\xaa\xa1\x9b\x5b\x66\x5d\xb7\x3c\x9c\xea\xb8\xcb\x5e\x58\x14\xf9\x4e\x32\xee\xe7\x70\x47\x5c\xe5\x6a\x93\x68\x31\x29\x8a\x3c\x59\x94\x61\x36\xe2\x81\x80\xb9\xca\xe5\xc4\x77\x38\xcb\x55\x5c\x46\x96\x3e\x0b\x7a\xeb\x61\x3f\x64\xe5\xb3\x5a\x47\xcc\x8e\xcc\xea\xa3\x9b\x9b\x88\x8f\x20\xda\x03\xf9\xdd\xda\x7c\x6c\x56\x30\x76\xd8\xfe\xae\xec\x51\xfe\xcc\x31\xa3\xdd\x83\x69\xd7\x40\xbf\x30\x70\x66\x5f\x07\x0d\xb8\x03\x35\x45\xcb\x65\xc1\xd1\x81\x5e\xd5\x51\xba\xd8\x72\xdc\x51\x33\x0c\xdc\xd5\x0f\x1b\x53\x0d\xa7\x42\xbd\x61\xcd\x35\xaa\xf3\x45\xb4\xae\x36\x1c\x7a\x53\x65\x0d\xae\x37\xd7\xa9\xc7\x87\x99\x4d\x7a\xb9\xd1\x46\x68\x68\x48\xc8\xb0\x5d\xc9\x00\xeb\xd2\x59\x77\xda\xef\x31\xe4\x62\xfe\x4b\x29\x86\x64\x75\xb6\xa1\x1a\x7f\x84\xcf\xf6\x02\x52\x12\xc4\x6e\x39\xdb\x6b\x91\x6c\x8c\x06\xc4\xf3\x68\xcd\x16\x5c\x13\x1d\x61\xc8\x96\x80\xe9\xe7\x59\x62\xbe\xe2\x51\x41\xe9\x78\x6d\xb5\x36\x25\xef\xad\x85\x42\x1a\xb5\xd6\x5b\x3d\xda\x96\xdb\xbe\x01\x18\x62\xbd\xb6\xcd\x98\xbe\x1b\xe4\x43\x08\xf5\x70\x77\x4f\xc6\x23\x16\x4e\xa7\x94\x97\x32\x5a\xb3\x2c\xe5\x48\x28\xb1\xe6\x1a\x05\x85\x45\xe8\xf0\x45\x92\x26\x05\xf0\x84\xa1\xe3\xb8\xb6\x6e\xcd\xe5\x99\xe7\xf7\x36\xdd\x02\xf7\xa4\x70\xbb\x44\xc9\x81\x48\x68\xd7\xab\xcf\x8a\x85\xf6\x82\x30\x14\xee\xfd\x36\x3b\xe1\xa0\xfd\x74\x98\xe3\x0d\x36\xbb\xef\xcb\x30\xef\x10\x95\x78\x55\xff\xbc\x36\xde\x48\x40\x79\x10\x49\xf0\xce\xb8\xac\x17\x01\x9d\xfb\xa8\xb2\xdd\xc7\x68\xb3\xc3\x2d\x4a\xf0\x70\xe0\x13\x25\x4e\x1a\xa0\xc4\xd4\xd3\x2a\xb5\xee\xfb\x65\xaa\x78\xb1\x3b\xca\x0d\xb3\x24\x75\x95\x1d\xab\x72\xd1\x95\x97\x03\x5b\xf5\xf4\x18\x3a\x2b\xfe\x9f\xcb\xe6\x1e\x9e\xa3\xbc\x10\x46\xfa\x3e\x6d\x40\xcd\xd7\x47\xf0\x79\x7b\xe1\x14\xc5\x3c\x98\x91\xc2\x2d\x03\x9f\xab\xcf\xe9\xfe\x00\x49\x6d\xd9\x4e\x75\x25\xef\xa0\x98\xc7\xc3\xe6\x2b\x91\x7b\x96\xd2\xfe\xf4\x5f\x5f\x7f\xd5\x27\x1a\xf1\x8f\x25\x37\x07\xc0\xe5\xf2\x06\x09\xc2\x0e\xe9\x74\x91\x34\xb7\x55\xbb\x18\xa8\xd7\x7a\x5b\xf5\xd2\x86\x0b\xbf\x37\xdb\x41\x5b\x6f\x6e\xcc\xd7\xfd\xc5\xee\xb4\x62\x8d\xcd\xf2\x44\x01\x51\x96\x5a\x56\x74\x8d\x16\x49\xdc\x5a\xef\x01\x23\xf9\x4b\x29\x4a\x61\x16\xd0\xa2\x8c\x57\x4d\x67\xc9\x80\x0b\x97\xef\xd2\x5a\x3d\xb2\x4d\x19\xad\x99\x2d\x9c\xc5\x22\xe5\xdb\xaa\x1a\x65\xee\x1a\x85\x02\x0a\xe5\x41\x7c\x81\x01\xf1\x7d\x54\xea\x42\x6d\x00\xa7\xee\xcb\xcd\x4b\x09\xbb\x9c\x71\xbb\xbb\xda\x0e\xb4\x0a\xa1\xe7\x13\x3d\xe4\x37\x57\x67\xa7\xd3\xf7\xd3\x9a\x7b\x7a\x72\xf3\x63\xf8\xf7\xcf\x97\xd7\x3f\xbe\x3f\xbf\xfc\x39\xfc\xed\x7c\x72\x77\x71\xfa\xc3\xfc\xea\x7c\x72\x51\x71\x62\x4f\x6e\x27\x37\x67\xb7\x7b\xfc\xd4\xcd\x5a\xbb\x27\x82\x07\x7c\xa3\x16\x39\x6f\x93\xe9\x58\x73\x15\xd5\x7a\xc2\x26\x96\x7d\xb5\xc2\x0f\x6c\xb1\x06\x00\x4e\x4a\x11\x63\x89\x90\x84\x77\xbc\xe0\xa7\xbc\xe0\xa9\x5a\x8d\xd9\x84\x51\x5c\x01\xc6\x8b\x68\xa3\x12\x12\x35\xa5\x99\x1d\x2c\xc2\xe8\x85\x91\x37\x05\xf9\x6c\xe1\x6a\x49\xa4\xb0\xa9\x08\xf3\x4a\xd9\x20\xcf\x99\x3c\x7b\x10\xb2\x28\x41\xd1\xe6\x69\xca\xa8\x5a\xfb\x42\xc0\x0a\x62\x5b\xa9\x93\x4d\x92\xf2\xdc\x27\x76\xbe\xa4\xb2\xe0\xb2\x6b\xdb\xea\x58\xe9\x9a\x94\x13\xd6\x1e\x70\x37\x65\xd0\xee\xd3\xf3\x29\x28\xba\x51\x61\xb3\x16\xda\xca\x67\x12\x49\x47\xa9\xc6\x0d\x87\x18\xa6\x42\x91\x81\x1e\xab\xa7\x97\xbb\x17\xe2\x41\x8a\x95\x75\x65\xbd\x94\x61\xc2\x35\xd2\xfe\xe3\x4c\x16\xf9\xb6\xb7\xf6\x7a\x0b\x8c\x0e\x1a\xee\x75\x04\x89\xac\x26\x7b\x46\xfb\x29\xb3\xa5\x5f\x80\x4a\x6b\xf1\xba\xe4\xde\x73\x5e\x3c\x84\x47\x75\x5c\x89\x52\x73\xf2\xfe\x56\xc7\x21\x64\x01\x83\x51\x58\xa8\x52\xc6\x9a\xc0\x9b\x9b\x44\x1e\x6f\xf8\xa7\x37\xb6\xa7\x48\x62\xe3\x52\xae\x01\x63\xa2\x48\xcd\x7d\x70\x6b\x84\xdc\xee\xe1\x9a\xc9\x1d\xe3\xb5\xff\x4e\x60\x25\x2b\x98\x0c\xbc\x7d\x07\x61\xa8\x0f\x62\xdb\x36\x7f\x8d\xb4\x99\x2c\xcc\xfd\x00\x85\x64\xb9\x30\x2f\x3a\x8c\x6b\x8a\xd0\x65\xf7\x37\xc4\xb2\x54\x52\x7b\xb7\xcb\xee\x10\x36\x72\xd0\xb6\x69\x05\xac\xf4\x57\x7c\x7a\xe7\x3d\xa5\x9a\xcc\x9c\x21\x7c\xc5\x7a\x4e\x28\x76\x87\xfc\xf2\x66\xb2\xfe\xaa\x16\x6c\x09\x81\x6c\x64\x27\xc8\x05\x78\xca\x60\x2a\x6c\xa2\x1e\xe0\xd5\x6b\x60\x62\xec\x12\x48\x85\x06\xff\x91\x34\x97\x6a\xf1\x4b\x49\x10\x80\xb7\x5f\x0e\x3b\x67\x0b\xcc\xf6\x80\xf4\xde\xf5\x3c\x08\xee\x2c\x87\x76\x95\x32\x69\x23\xdb\xbc\x2e\xa5\x39\x8a\x9f\x03\x3d\xd5\xdf\x3d\x5e\xab\x94\xfe\xdc\x1b\x6b\x66\x3d\x3b\x39\xbe\xff\x62\xcc\xcd\x3f\xd5\x08\x9b\xa9\x3a\x88\x6c\xa0\xd2\xc3\x03\x6d\xc1\xa3\xfb\x47\x9e\xc7\x68\xfe\x07\x38\xd3\x98\xfd\xa0\x1e\xc5\x83\xc8\x47\x2c\x12\x79\xc1\x89\xaf\x50\x03\x9e\x03\x36\x14\x95\x33\x93\x10\xe8\x83\xe4\x8f\x52\x97\xb9\x60\x45\xb2\x5a\x17\x22\x0f\xd1\x38\x2a\x37\xe2\xa8\x40\xaa\xda\x4c\x44\x44\xc8\xd6\x31\x00\xcb\x94\x3f\x34\x09\x18\x9f\xc2\x24\xc3\xa6\x2e\x5a\xd9\xba\xbb\x6d\xf2\xb3\x5d\xf8\x29\x1a\x30\x12\x9a\x48\xa1\x35\x62\x2b\x95\x72\xb9\x1a\x8f\xc7\x90\xe8\xe3\xcd\xa0\x85\x4e\x05\x86\x0e\x74\x87\xd2\x4f\x95\xd2\x22\xdd\x3a\x12\x31\x17\x47\x05\xc0\xdd\x4f\x85\x90\x3a\x41\xc3\x56\xcb\xf2\xbf\xa9\x3b\x97\x3e\xaf\x2f\xae\xfd\x7a\x3e\x38\x4a\xb7\xa3\x1c\xc8\xa5\x3a\xa0\x24\x7c\xbf\xfd\xe6\xf5\xa4\xa8\xf3\xf6\xb2\xa4\x92\x43\x43\xa9\x7f\x52\x49\x07\x14\xe4\x49\x64\xa3\xad\x25\x11\x11\xd2\x93\xc2\x4f\xdb\xc7\xac\x11\x11\x7c\x40\x30\xf0\x8e\xb8\xde\x81\x21\xbd\x7d\x0c\x01\x37\xf5\xe9\x1e\xbc\x2d\xf6\xa7\x77\x6b\xed\xd0\xc0\x90\x69\xcf\x6d\x30\x44\x75\xc2\xa8\xcb\x74\x0b\x37\x2e\x17\x40\x0d\xee\x81\x38\xf0\x2a\x55\x9c\x66\x10\xca\xe7\xbd\x6e\x8e\xa0\x2e\x70\xb2\xe9\x42\xe5\x7c\x25\xd8\x46\xc4\x49\xb9\x69\x15\x36\xae\xb9\x87\xc0\x47\x55\x5a\x6e\xba\xa9\x42\x0f\x55\xa0\x7d\x23\xf1\x5f\xa7\x50\x5d\x7f\x0e\x1d\x17\x19\x61\xb3\x6c\x52\x7b\xd1\x85\x44\x63\x6d\x4e\xca\x3c\xd1\xc0\xb2\xfb\x94\xc8\x59\x57\x0c\x16\x0d\x0e\xf8\x6d\x86\x46\xf6\xca\xec\x1e\x59\xcf\x28\x7d\xa2\x71\x56\xc1\x6b\xdf\x7d\x28\xd4\x41\xa9\xc3\x73\xed\xe5\xaa\x6c\x70\x4f\xf5\x02\x4a\x80\xda\x18\x64\xde\x20\xd4\x1c\x14\x48\xd0\x9e\x42\xb1\xa5\x8d\xc5\xbc\x17\x01\xf5\x61\x0c\x39\x39\x1e\x91\xf2\xe9\xc7\x6f\xb4\x05\x01\x11\x4e\xcb\x6b\x2c\x85\xaf\x04\x3d\x40\x0f\x6f\x2d\x3c\x0f\x7b\x88\x45\x00\x41\x61\xcc\x65\xd1\x5a\x80\x47\xaf\x42\x59\xf8\xc9\x4f\xbc\x4c\xdb\x5f\xa7\xf2\xe1\x55\xcc\xd9\x3a\xf9\xf9\x86\xe1\x50\x53\xfe\x84\x7c\x57\x43\x83\x42\xf6\x03\x04\x61\xb8\xe6\x4f\xd0\x04\x2b\xf3\x80\x83\x6e\xd3\x77\x98\x61\x17\x45\xb4\xf6\x9a\x07\x10\x34\x3a\x62\x49\x4a\xc8\x4d\xfd\xdc\xf8\x8c\x10\x88\xbd\x0e\x41\xac\xc9\x4a\xaa\x30\x95\x92\x92\x02\x5c\x71\x46\x00\xa9\xb0\x58\x96\x14\xfb\x91\x82\x03\x59\x09\xf7\x2d\xb5\x42\x21\x02\x8c\xfa\x59\xf1\x53\xc3\x95\x22\x41\xba\x2a\x0b\xb3\xc6\x3b\x11\xe5\x77\xae\x67\x0a\xa8\x12\x80\xcc\x64\xb5\xaa\xc6\x20\x59\x28\x5f\x92\x0b\x24\xf8\xd6\x46\x7b\x2b\x92\x07\xb3\x51\x9b\xcb\xda\x2d\x50\x90\x00\xcd\xb5\x47\x6e\x5b\x16\xb0\x84\xdf\x8b\xad\x0e\x93\x49\xd3\x8a\x62\x5d\x0b\x32\x31\xfd\xa1\xf9\xda\x3f\x15\x30\x70\xf3\xdc\xa7\x84\xec\x77\x96\x61\xa5\x1f\xcc\xc7\x3b\x30\xc2\x8d\xc2\xcd\x1a\xf4\xc1\xae\xde\xa6\x48\x62\xc2\x8f\x33\xcd\xa1\x87\x01\x02\xc8\x33\x84\x71\x86\x91\x4b\x70\xf1\x35\xf7\xdb\x99\xa4\x44\x02\xc1\x21\x67\x04\x4e\x73\xda\x28\x02\x1f\xe9\xcb\xb7\x15\xf6\x20\xa0\x56\xb5\x34\xb3\xd5\x2a\xad\x77\x19\xf2\xf2\xc1\xf2\x80\xaa\x31\x46\xd9\xda\xf0\x5a\x2b\x7c\x22\xb6\x94\x26\xb7\x13\x4f\x1a\x04\x02\xe2\x9b\xc4\x2e\x8a\x59\xc9\xf1\xf6\x13\x09\x33\x7c\x13\xd9\x0a\xe5\xb4\x40\xce\x9b\xb3\xd3\xeb\xb3\xdb\xcf\x86\x37\xb5\x60\xcf\xc1\x80\x53\xdb\xce\x77\x67\xef\x27\x77\xe7\xb7\xf3\x77\xd3\xeb\x97\x40\x9c\xd2\xa3\x27\x40\x4e\x6f\x28\x3f\xc9\xa9\x92\x85\xf8\x74\xd0\x99\x9c\x97\x72\xce\x07\x84\x3e\xb9\x0c\x45\xbb\xd4\x1d\x2c\xb4\x99\x5f\xc5\x25\x3f\x21\x6e\x5b\x42\x9d\xd8\x74\x2a\x4b\x6f\x34\x5c\x26\x69\x0a\x91\xe0\xce\xbc\x4e\x51\x86\x66\x50\x41\xfe\x58\x3a\x5f\x92\xa9\x33\xb9\xa8\xa4\xbf\x01\x93\xdf\xda\x5c\x82\x31\x06\x3c\x33\x03\x90\x27\x10\x61\xbb\x2b\x05\xcb\x2a\x91\xc2\x37\x03\x66\xcd\xb4\xaf\x93\xa6\x9e\x26\xf1\x25\x91\x75\xa4\x78\xf5\xd5\x35\xed\x8a\xab\xac\x4f\xab\x7e\xda\x87\xae\x87\xb8\x89\x13\x89\x8a\x69\x65\x37\xdf\xb4\x2f\xdd\x63\xbf\x05\x60\xdc\xcd\x4c\x72\xf0\x41\xe8\x82\xe7\x85\x9f\x48\x9a\x08\x4c\x0c\xe7\x9d\x13\xf7\x09\x22\xd0\xd4\xb2\x36\xce\x46\x14\x9a\xb1\x4e\xc0\x53\xc1\x89\xdc\x26\x4a\x4b\x5d\x88\x9c\xcc\x26\x93\x9f\x6f\x66\xf2\x3b\x73\x7c\xbd\xa1\x53\x88\xd2\x77\x61\x15\x88\xd4\x51\x95\xfa\xad\x86\x12\x4a\xb0\xd7\x68\xa3\xde\x08\x2e\x35\x83\xad\x91\xa6\x22\xf7\x2b\x03\xdb\x23\x44\x4c\x49\xb4\x81\xea\xd9\x7f\xff\x86\x11\xb8\xd5\x0c\x85\x69\xaf\x4b\x23\xb6\x51\x45\x73\x3d\x75\x11\x0d\x00\xe2\xfc\x25\x57\x4e\x4b\xe0\x53\xdf\x55\x44\x60\xfd\xd6\x45\x54\x0d\x43\xea\xb5\x96\x6e\xb1\xb8\x7f\x2c\xa5\x67\x5c\x4a\x3d\xce\xf5\xf0\x94\x60\x6b\x65\x04\xa8\xcb\x6d\xe5\xdd\xcc\x8e\xe8\x24\x05\x94\x9b\x19\xc6\xd6\x53\xa7\x96\x5d\xf6\x10\xec\x07\x14\x75\x18\x42\x7b\xd2\xc2\xa8\xe4\xd3\x18\x5a\xdf\xce\xce\xc4\xb5\x2f\xc3\x5c\x38\xb1\x58\x55\xa9\x0a\xcb\x41\xe2\xe0\xa1\x84\x75\x35\x2f\x38\xf2\x9b\x9d\x6d\x24\x42\x19\xab\xa5\xcc\x0f\x4c\xfe\x78\x1b\x62\x6a\x2b\x51\xd9\xd8\x8a\x90\xcf\xc1\x72\x38\x38\x0e\x98\x21\x8b\xef\xe9\xe9\x85\xab\x6b\xce\xf1\x89\x3e\x09\xec\x70\x71\x79\x71\x16\x42\x15\xa6\x17\xb7\x67\xdf\x9f\x5d\x57\xe2\xf9\xcf\x2f\x27\x95\x98\xfc\x9b\xdb\xeb\x5a\x28\xfe\x77\x97\x97\xe7\x67\x0d\xcc\xc3\xd9\xed\xf4\x43\xa5\xf0\x77\x77\xd7\x93\xdb\xe9\x65\xe5\xbd\xef\xa6\x17\x93\xeb\xff\x08\x7f\x39\xbb\xbe\xbe\xbc\xae\xd5\x77\x77\xba\x1b\x3d\x51\xe9\x46\xbb\xf9\xc7\x3b\x67\x03\x6a\xd5\xd6\x6d\x5c\x4d\xbf\x7c\xc0\x2e\xee\x89\x3c\xdb\xb7\x1c\x6d\xb8\x7e\x1c\xa6\xe3\xc0\x8d\x61\x9a\x3a\x68\xd5\x3d\x7f\xbe\xe8\xca\xd0\x65\xfc\x30\xb1\x67\x4e\xb5\xf9\x73\x20\x01\x77\x2a\x80\xae\x96\x9a\xe1\x96\xd2\xb3\xe3\xd0\x66\xe0\xc1\x5a\xf1\xce\x7c\x65\x32\x7e\xf1\x96\xda\x3a\xf6\xb5\xd3\x53\x79\xed\x61\x44\x7a\x2e\x36\x94\x5d\x8d\x0e\x2a\xb3\x64\x03\x49\x6c\x15\x05\xfb\x30\x84\xdd\x9b\x6e\x98\x95\x13\x2c\xc7\xae\xc4\xbe\xed\x61\x4b\xbb\xd9\xf7\x86\xb6\x9f\x2a\x69\xb6\xbd\x46\xd5\x32\xa0\xdd\x40\x99\x35\xa4\xdd\xb7\x5c\xdf\x0f\x6d\x37\x55\xd2\x6c\x37\xa8\x7d\x4f\x6a\x37\x18\xbc\x8b\x76\x1a\x9d\x01\x42\x2c\x2c\xa6\xda\x3c\x17\xe3\xef\x5e\x09\xf2\x67\xf7\x6b\xa3\xd9\x00\x2f\x7b\xbd\xcc\x78\x7f\x47\x06\xb4\xc6\x6d\x57\x5e\x63\x95\xbf\x81\xa7\xd0\xc3\x45\x2e\xf8\x7d\xac\x1e\x69\x3e\xea\xc8\x50\xd6\x4b\x9a\x57\x07\xc8\xc8\x70\x7b\x44\x14\x39\x79\xa0\x10\xa5\xe6\x8b\x07\x98\x5c\x42\xbc\xe8\xa8\x83\x05\xa9\x97\xeb\x44\x44\x40\xfd\x24\xfd\xec\xcc\x24\x6a\xf3\x6d\xe9\x9b\xcd\xac\x9a\x16\x11\x75\x08\x74\xd5\xe9\xd0\xe8\x5c\xd7\xc1\xc4\x52\x1c\x50\x99\x03\x98\x6e\x91\xc3\x9d\x09\x06\x24\x91\x60\x4c\xce\xcd\x85\x27\x17\x51\xa2\x45\x90\x31\xae\xf5\xc4\xfe\xe5\xb0\x54\x28\x05\x2f\x5a\xcd\xae\xbd\xed\xe1\x3c\x2a\x4a\x9e\x32\x08\x57\x22\x06\x46\xb4\x55\xe2\x2f\x11\x97\x18\x1a\x53\x88\x4d\x06\x51\xfd\x61\x4c\xc7\x4c\xfe\x0c\x40\x09\x9c\x82\x57\x9a\x7d\x0f\x90\x07\xfb\x32\x1d\xc2\x1b\x5e\xc0\x59\xfc\x47\xac\xc3\x3d\x1b\xcf\x64\x25\x03\x53\xf0\x55\x25\x19\xd3\x78\x26\x6d\xb6\x8e\x58\x45\x7a\x0c\x37\xbe\xb1\xca\x57\xc7\x94\x4b\xdd\x2c\x76\x75\xbf\x50\xea\xfe\x58\xc8\x63\xb0\x49\x15\xc7\xbc\x2c\xd4\x31\xc0\xa5\x70\xfe\xf5\xb1\x4d\x7a\x6c\xb3\x46\xeb\xe3\x75\xf2\x20\xe0\xff\xc6\xeb\x62\x93\xfe\x8b\xce\xd6\x9f\x8e\x56\x69\x7e\x64\xbe\x3d\x0a\xbf\x3d\xb2\xdf\x1e\xd9\x6f\x8f\xcc\x67\xf8\x7f\xd9\x16\xdd\x3b\xe2\x13\x37\x67\xd9\x68\x26\x13\xa9\x45\x5e\x80\xf6\xf3\x98\x27\x85\x4f\x75\xb5\x65\xaf\xfe\xf3\x3f\xd9\x38\xe7\x8f\x18\x11\xfb\x8e\x17\xfc\x0a\xed\x8b\x7f\xff\xfb\x2b\x70\xa8\x62\x14\x53\xc6\xf3\x5f\x4a\x51\xcc\xa4\x16\x66\x13\xb2\xff\x35\x93\xe0\x81\xdd\x6c\xe7\x05\xda\x5d\xd1\x06\x19\x6b\xf6\x2d\x96\x39\x45\x36\xd2\x58\x9b\x92\x3a\xc2\x09\x12\x9e\xb6\x64\xe9\xef\x30\xd1\xff\x92\xbe\xa3\xf7\x07\x6c\xeb\x5f\xd2\xea\xae\xb6\xc9\x96\xf4\x2f\x29\x1c\xa0\xa9\xe2\x16\xac\xc5\xdc\xe2\x85\x7b\x32\x35\xae\x6d\x8f\x34\xa0\x01\x2f\xea\xa6\x6f\xdf\x2b\x37\xc8\x88\x6e\x2d\xf7\x0d\x31\x02\xbe\x02\xef\x87\x00\xef\x79\x62\x76\xc8\x0d\x5a\x42\x41\x73\xc3\x9e\x83\x4e\x4a\xae\x73\x57\x1e\x1a\x2e\xf4\xd7\x27\xc7\xc7\x23\xb6\xd2\xf0\x9f\xc5\x2f\xf0\x1f\x40\x0f\x3d\x17\xa9\x6f\x63\x30\x1d\x10\xae\x39\xcb\xfb\x67\xe2\x39\x50\x74\x9f\x83\x47\xbe\xb6\x4c\xbf\x2b\x65\x9c\x0a\x1f\xda\x58\x71\x89\xa4\xca\xcc\xa4\x9d\xa8\x66\xe6\x21\x98\xe3\x85\x88\xb8\x11\x7c\x8d\xba\x11\x5c\xaa\x96\x85\x90\x68\x0d\xcb\x7d\xb6\x47\x8e\x96\x2b\x50\x8b\x01\x0a\xc9\x0b\x82\x9c\x0b\xf8\x11\x2a\x01\x62\xf6\x51\xfd\x11\xdb\xaa\x92\x38\xc6\x81\x39\x37\x16\x51\x0a\x89\x1c\x2c\x7b\x10\xcb\x45\x51\xe6\x92\x71\x96\x71\x19\x73\x0d\x2b\x70\x99\x83\xb7\x33\x67\xbc\xd9\xd0\x11\xc2\x71\x55\x59\x00\x27\x16\x22\x0b\xc2\x91\x40\x12\xf8\xa0\xcd\xa3\xa0\x11\x78\x26\x00\x17\x75\xe3\xc3\xf1\x4c\xda\x7c\x84\x84\x85\x43\x4b\x59\xa4\xb2\x2d\x31\x1e\xd5\x07\x3d\xb1\x96\x33\x1a\xee\x91\xc7\x9b\xd4\xdf\x1d\xb1\xa4\xea\x5a\x03\xbe\xf9\x22\x48\xf1\x6e\x93\xe4\xbf\x16\x32\x52\xb1\xc8\xf5\x1b\xb3\x0d\x13\x77\xef\x40\xfd\x21\xd1\x7e\x32\x40\x4a\x99\xc3\x8d\xac\x85\xa6\x78\x97\x60\xca\x8c\x4e\x85\xa1\xbc\x4d\xcf\xd9\xbf\x55\x7e\xeb\x28\x98\xb6\xf6\xd2\x3f\x3f\x2b\x22\x26\xc4\x75\xda\x3b\xe7\xd3\x4d\x10\xb8\x65\x43\x89\x8b\x85\xa2\x8e\x43\xca\x89\xcd\xa7\x9d\x14\x90\x21\x33\x17\xba\x98\x49\x3a\x81\x47\x6c\x29\xb8\xd1\xf3\x46\x2c\xd2\x0f\x28\x8c\xf1\xb8\x2f\x1e\x95\xc7\xe0\xd8\xf4\x36\x00\x86\xad\x14\xee\x8d\xc4\xf8\x1a\xa7\x08\x6c\x04\x18\x74\xdd\xd0\x9d\xaa\x02\x83\xd5\x2a\x10\x9f\x30\x0e\x36\x5b\x4a\x3d\xc3\x5a\x98\xac\x07\x46\x62\x8b\x8e\x62\x56\x6f\x07\x3e\x30\x82\x07\x7b\x87\x30\x90\x40\x38\x82\xc6\x4d\x58\x5a\xdc\x67\xde\x87\x1b\x52\xd6\x83\x6d\xa6\x6b\x53\xed\x18\x08\x68\xc0\xd3\xec\x16\xe6\xd3\xbd\x06\x2b\x2d\x72\x9b\xca\x05\xfb\x8a\x04\x93\xeb\x24\x8f\x8f\x32\x9e\x17\x5b\xbb\x7c\xd3\x64\x01\x19\x20\xd2\xe4\x5e\xb0\x49\x9e\xab\xc7\xe7\x1e\x85\x4e\xd1\xd2\x75\xc3\x3e\x04\xc9\x3e\xf4\x96\xdf\x4a\x2f\x5b\x37\x77\x3c\x8d\xca\xb6\xcb\xf0\xd1\x5a\x4f\x2e\x8a\x7c\x3b\x37\x0b\x71\x93\x75\x4a\x8a\x5e\x41\x13\xfd\x95\xdc\x61\x2c\xb9\x35\x13\x46\x27\x4b\x6e\x65\x56\x7f\x3b\x2c\xb9\x2d\x04\xb8\x4d\x96\xdc\xe9\xc5\xf4\x76\x3a\x39\x9f\xfe\x9f\x5a\x89\x3f\x4f\xa6\xb7\xd3\x8b\xef\xe7\xef\x2f\xaf\xe7\xd7\x67\x37\x97\x77\xd7\xa7\x67\xbb\x69\xaf\x9a\xad\xf7\x2a\xf8\x11\x0b\xeb\x39\x61\xb7\x01\x50\x03\x83\x0d\x48\xff\xa6\xfc\xb8\xb0\xaa\xcc\x66\x4e\xe4\x6a\x04\x1b\xf5\x84\x9d\xe5\xf9\x74\xc3\x57\xe2\xaa\x4c\x53\x80\x53\x61\x64\xcf\x69\x2e\xe0\xe2\x39\x62\x57\x2a\x9e\x06\xdf\x41\x38\x62\x6b\x37\xa0\x7e\x1e\xc7\xb9\xd0\x1a\xab\x1f\x51\xfd\x01\x78\xc8\x85\x3a\x12\x78\x8e\x3f\xf0\x24\x35\xf7\xb7\x13\xf6\x1d\x8f\xee\xd5\x72\x89\xe1\x33\x23\x17\x38\xc5\x7e\x29\x55\xc1\x99\xf8\x14\x01\xd5\x5b\xfb\x3a\x39\x57\xab\x5f\x01\xaa\xdc\xc3\x3d\xd5\x71\x49\x81\x54\x77\xf3\xf6\xe3\xbc\x5d\x10\x50\x2f\x3f\xe0\xa7\xef\xf1\xcb\x76\x03\x65\x91\x3e\x43\x78\xfc\xb9\x5a\xb5\x27\x1e\x02\xed\x9a\xb2\x25\x91\x23\x21\x22\x76\x11\xb5\x62\x3a\x91\xf7\x33\xf9\xf3\x5a\x48\xa6\xca\x1c\x7f\x82\x6b\xbe\x51\x33\xd3\x52\xaf\x05\xa4\xa9\x1e\xb1\x47\xc1\x36\x7c\x8b\x6a\x33\xdc\x09\x5c\xb6\x14\x58\x32\x70\x8a\x98\xaf\xd3\x44\x1a\x69\x91\x25\x36\x2e\xa1\x3e\xf5\xcf\x71\xe3\xb2\x44\x87\xfc\x70\x1e\xe2\x5d\xe7\x69\x05\x9f\x07\xa6\x32\x8f\x9b\xb4\x00\x21\x92\xdc\x90\x54\x56\xa9\xfb\x32\xf3\x94\xa8\xaf\xac\x73\x12\x86\xfb\x41\x25\x31\x8b\xcb\x2c\x4d\x22\x27\x77\x1f\x55\xde\xc9\xfb\x8c\x01\x34\xfd\x4f\x9d\x7a\x58\xd8\xae\x8e\xb5\x44\xe7\x04\x48\xba\x1d\x0c\xd0\x2f\xcc\x81\xcd\x12\x19\xa5\x25\xa4\x99\x2b\xb5\xc8\x8f\x5c\xea\x68\x17\xeb\xf7\xdb\x27\xc9\xf6\x24\x9c\x87\x87\xb5\x85\x41\xe7\xa9\x5a\x25\x11\x4f\x43\x70\xb3\x47\x45\x38\x16\x5e\xbb\xed\x29\x99\x30\xc4\x41\xd8\x06\x75\x12\x69\x65\xb9\x00\x22\xe8\x39\x88\xf2\x39\x89\xbb\x43\xda\xbd\x64\xe6\x82\x8e\xed\x0a\x39\x72\xad\x7b\xc1\x9e\x70\xbe\x6e\x9b\x89\x0d\x54\x4c\x4c\xe1\xcf\xd4\xa3\x14\x39\x68\xb0\x00\xfb\x30\x3d\x95\x0a\x74\x13\x97\x9d\xcd\xe1\x93\x6d\x76\xc2\xa5\x03\x62\x63\xe4\xec\x2a\x79\x10\xf2\xf3\x93\x9a\x07\x15\x44\x3c\x5a\x8b\xb9\xd5\xcb\x9f\x5b\x64\xb9\x03\x60\xa0\xb0\xb2\x69\x52\x42\x51\xea\xdc\x9b\x70\x75\xc2\x16\x37\x65\x17\x3a\x12\x77\x44\x64\x99\x46\xcc\x63\x11\xdd\x7f\x76\xd1\xec\x41\x56\xb6\x21\x8c\xb3\x77\x22\xba\x67\x77\xd7\x53\x8c\x06\x4e\x0a\x66\x44\x81\x5e\xfb\xb4\x4f\x9d\x77\xb7\x82\xaf\x5e\x80\xc2\xaa\x6f\xde\x2a\x9f\xaa\xc0\x65\xeb\x33\x0d\x22\x40\x14\xc4\x4b\x1a\x21\x49\xb1\x34\x00\x04\xe3\x85\xcd\x66\x04\x86\x78\xa6\x37\x90\xbc\xa8\x2c\x82\x8c\x7f\x29\x5f\x88\xb4\x83\xb8\x33\x53\xf1\xdc\xfa\x49\x0e\x05\xf3\x34\xca\xb2\x76\x0c\xf2\x3a\xda\x38\x06\x6e\x34\xd6\x5b\x7a\x91\xdd\x7f\xa3\x03\x7a\x0d\x15\xf2\x87\xc3\xbd\x9e\x6b\x08\xef\x5e\x26\x2b\xeb\x6d\x4b\x96\x94\x62\x09\x03\xfa\x8d\x1e\x0c\xf2\xd2\x94\x74\xa5\x62\x82\xe9\x39\x2e\x3c\xa3\x05\x09\xb2\x9e\x78\x5c\x45\xd8\x04\x8b\x03\x84\x7a\xcd\x8e\x10\x3c\x66\x6a\x49\xd6\xc4\x2c\x4b\x13\x60\x86\x8e\x91\x84\x1e\xd8\x33\x74\x15\x1d\x1f\x96\x66\x1b\x1b\x90\x7c\x5c\x59\x20\x5e\x57\x32\x5e\x10\x18\x18\xc1\x30\x07\x36\xb8\xf9\x03\xef\x26\x53\x7b\xf1\x8c\x69\x1d\xed\x71\xde\xe4\x2a\x25\x6c\x85\xb4\x8f\x6c\x05\x78\xac\xdb\x80\xfc\x88\xa7\x51\x49\x7e\x32\x48\x97\x6f\xb3\xe0\xef\x46\x10\x7a\xaf\x9f\x99\xe8\xaa\xd5\xbf\xae\x64\x1e\x9a\x5d\xd1\x05\x68\x3d\xd5\xa6\xb0\xdb\xbc\xb8\x4a\xd5\x02\x56\x4e\x37\x4a\x70\xc7\x89\x65\xc4\x75\x9e\xc4\x43\xf4\x1d\x3b\x26\x97\xee\xd3\x5d\x0d\xbc\xb4\xa6\x1f\x57\x93\x5d\xf7\x8c\x12\x19\xd4\x98\x1b\x87\x51\x20\x2c\x29\xab\x6a\xf5\x7a\x52\x50\x1a\x0f\x58\x56\xee\x7c\xea\xb0\x33\x54\xfb\x72\xd0\x44\x37\x99\x62\xf6\x8c\xa5\x27\x97\xd9\x3d\xc9\x07\xd0\x7d\xa0\x28\x73\x9c\x1f\xdd\x96\x45\x19\x8b\x78\xfe\x84\x3e\x9c\xd1\xb7\xfd\xfa\xe2\x46\x1a\x9b\x07\x36\x40\x79\x64\x54\x85\x98\xe7\xb1\xef\xc7\x08\xf6\x7b\xc4\x33\x30\xc3\x83\x5b\xe3\xe1\xed\xd8\xd6\x71\xed\xa3\x8b\x8c\xbc\xc4\x98\x7f\xc4\x6f\xab\x96\x1c\x38\xfb\xd6\x91\x5b\xa4\x08\xef\x36\x2b\xc7\x2f\xd7\x4a\xdc\x4d\xaf\xb5\x5b\x5f\x61\x56\x80\x1f\xb2\xb8\x5e\x42\x76\x94\x85\xf2\xde\x1e\xe8\xcf\x14\x68\x87\xc3\x88\x3e\x10\x90\xd3\xb8\x03\x29\x62\xd5\x6f\x2b\x84\x06\xe0\x8f\x07\x21\xa0\xb3\x5c\x58\xbf\xe1\x56\x14\x8e\xd7\x21\xb5\x79\x05\xc1\x2d\xe6\x7a\x5d\x25\xb6\xb1\xdc\x15\x8e\x8c\x0c\x9c\x58\xa4\xea\x47\x6a\x93\x29\x09\xb0\x24\x8c\x52\x9b\x49\x2a\xdc\x66\x87\x77\x9e\xb5\x4a\xa8\xe3\x88\x0c\x9a\x18\x38\x23\xb4\x4a\x1f\xc8\x85\x1a\x24\x31\x81\xbc\x92\xa6\x81\xa7\xe6\x6e\xa8\x72\x24\xd8\xb2\x27\x3b\x44\x02\xd4\x52\xa4\xe7\x62\x95\xe8\x42\x84\xd1\xa1\xe1\xf7\xcf\x96\xcd\xb6\x62\x3c\xd9\x35\xf4\x9d\xd9\x6c\xf7\xdd\x82\x8c\x7c\x1a\xd0\x9e\x6d\x26\xe2\xa9\xfb\x6e\xf7\x62\xa8\x05\xf0\x7b\x71\x58\x39\xef\x70\x0d\xe0\xed\x4f\x23\xd5\x97\x76\xe9\x47\xdc\x24\x11\x09\x13\xf7\x80\x46\x33\x45\xab\x92\xe7\x5c\x16\x42\xe8\x99\x24\xc7\x33\x52\xd6\x85\xac\x2c\x35\x20\xa4\xbb\xdb\x44\x4a\x17\xc8\x00\x05\x9f\x2c\x79\x92\x96\x79\xa7\xb9\x01\x57\xe5\x93\x68\x27\x76\x8d\xd2\x29\x14\xcb\xda\x26\xcd\x05\x30\x07\xbb\xc8\xb1\xa6\xd4\xdd\xc6\xd5\xf8\xde\x8e\x2e\xd8\xc3\xa5\xff\x7c\x3b\x5b\x73\x47\x4c\xf3\x37\x7a\x9e\xa9\x01\x12\xef\xc7\x6f\xf4\x95\xea\x88\x06\xd7\xbf\x34\x6c\xa2\x3b\xe0\x13\xbf\x74\x25\x64\xe1\xfa\x1e\x3c\x8f\xfb\x4c\x31\xbd\xd8\x38\xf7\xfa\x27\x3b\x65\x17\xac\xda\x35\x97\x71\x6a\x54\x5e\x5e\xd4\x79\xaf\x1d\xce\xdb\x5c\x89\x0a\x2b\x1c\xbb\x83\xfa\x20\x46\x66\x1e\x35\x02\x2c\xf7\x8d\x53\x2d\x32\x73\x27\x96\xb2\x56\x4b\x35\x5e\xb2\x2d\x4e\xc7\xeb\x30\x94\x06\xd9\x6d\xd8\x5f\x5d\x7f\x39\x0b\xdb\xfe\x99\xd4\x97\xea\x5e\x5b\x26\xab\xdf\x80\x21\xe1\x43\xf3\x48\x88\x48\xe6\xd0\x41\xed\xa2\x1b\x0e\x94\x3a\x10\x48\x66\xa4\x76\xc8\x38\x3e\x93\x94\x0e\x1e\xd1\x05\xe0\x56\x46\xbe\x35\xcd\xde\xba\xe8\xe2\xb7\xbf\xb3\x6c\x5b\x5b\xb6\x84\x45\x05\x94\x76\x2a\x8a\xca\x1c\x5c\xff\x64\x9e\x64\x02\x0f\x61\x3d\x88\x48\x06\x54\x0f\x07\xd8\x42\x3d\xb1\x4d\x4d\x72\xf6\xe8\x4a\xa7\x6e\xc1\x0c\x89\x89\xed\xdd\xa1\x4f\xf9\xca\x72\x5d\x30\x5d\x88\xac\x55\xfc\x56\xb4\xcb\x6d\x26\x26\x52\xaa\xa2\x1e\x9f\x32\x58\xbf\xe4\xae\x94\x9e\x5b\x67\xc0\x61\x34\x09\x4c\x46\x7f\xb8\xb9\xbc\x60\x19\xdf\x02\xf6\xb1\x50\x0c\x5f\x05\xc2\xd1\xba\xa0\xda\x37\x03\xd5\xce\x57\xa5\x0a\x8e\xa9\x05\x51\xb7\xfb\x27\xa8\xc6\xa6\xb2\x08\x6b\x86\x96\xa4\x91\x59\xb9\x4a\x8f\xb2\x94\xcb\x00\xde\xae\xc7\xac\x56\x7d\x88\x67\x70\x9e\x4d\x42\x8c\x41\x03\xc0\x5e\x41\x6b\x21\x2f\x5b\x01\xd0\xc0\xbb\x63\x17\xd4\x61\x10\x86\x4e\x19\xb1\x13\xd8\xf9\x01\xb3\xc0\x60\x4e\x04\x64\xcf\xb0\xb0\x0c\x87\xec\xe1\x1a\x40\xb7\x9d\x0c\xe0\x3c\x4a\xb9\xd6\x3b\x51\x3a\x2f\x42\x25\x1f\x44\x2d\xee\x17\x5f\xd5\x76\x22\x8c\x10\xb8\x4d\xf0\x5e\xea\x1e\x03\x5b\x82\x15\x5d\x3e\xe9\x5b\xa0\xef\x07\xd9\x20\x08\xfa\x40\x7c\x51\xf0\x3d\x32\x41\xde\x8b\xad\xb5\x70\x91\xa8\xe2\x1b\x31\x72\xc6\x56\x67\x4d\x0c\x40\x7f\xcd\x82\x67\x12\x50\xb1\xef\xc3\xe6\xb1\xf7\x4a\x8d\x10\x9f\x49\x95\x73\x2c\x96\x87\x08\xa7\x99\x7c\xaf\xd4\x98\xbb\x4b\x2c\xb5\x9f\xc4\x4d\xbd\x42\x42\x45\x01\xe6\xb0\x36\x9d\xfd\xf7\xe6\x0f\x89\xc4\xf4\x84\xc9\xc6\x5c\xa0\x68\x9c\x60\x45\x41\x83\x6c\x36\x7c\xf5\xa8\x59\x8c\x94\x32\x65\xa2\xd7\xe0\x76\x41\x3f\x27\xd4\x4f\x47\x0a\x02\xb2\x72\x2e\xb5\xd9\xc3\xe0\xaa\x11\x0f\x82\xec\xb5\x15\x8c\xc1\xf4\xdd\xb9\x83\x2d\xe1\xbe\xa4\xd4\x1d\x1d\xbb\x2d\xb8\x74\x1c\x72\x39\x07\xb8\xf9\x00\x42\x3b\x32\x70\x7e\xe0\xd9\xae\x60\xd8\x83\x4b\xdc\x37\x4b\x8e\x50\xab\x7e\xa3\x82\x4c\xe6\x90\xc3\xb0\x12\x11\x1b\x8e\xde\x9d\x3c\xf0\xc4\x69\xe5\xb4\xdf\x9f\x72\xa7\xb7\x81\x61\xa0\xa8\xd8\x7f\xdc\x04\xdc\x96\x0e\x32\xe8\xee\x82\x46\xb0\x43\x86\x38\x20\xe5\xc3\x2d\x3d\x66\x37\x42\xb0\x8f\x30\x52\xa6\xb2\x8f\x94\x81\x14\x50\xd0\x05\x4f\x5a\x13\xc4\xc1\xdb\x53\xb9\x54\x87\xc9\xff\x7c\xd5\x40\xd9\x1e\x34\x2a\xed\xed\x3c\x14\xc7\x0b\x96\x7e\xf9\xb2\xb4\x22\xbd\x0e\x86\xda\x5c\x5f\x79\x7b\x13\x05\x1b\xdb\x96\x1a\x95\x0c\xa6\xf8\x29\xc4\x75\xb5\x45\x62\x7a\x39\x42\x32\xf6\x7b\xa9\x1e\x25\xca\x63\xaa\x89\xbd\x36\xfb\x0f\x74\x16\xf4\x0b\xa1\x26\x58\xa2\x34\x7c\x03\xec\xf0\x13\xf7\x37\xbb\x41\x17\x38\xb6\x19\x52\x87\x69\xd0\x77\x29\xe9\x17\x1c\xe0\xaf\x27\x23\xf6\xdd\x88\x9d\x8e\xd8\x78\x3c\x7e\x33\x62\x82\x47\x6b\xdb\x22\xfc\x04\x45\x7f\xc1\x57\xa6\x6c\x4a\xfb\xb3\x0c\x2a\x80\xf4\x80\x46\x3f\xb1\x24\x88\xdc\xbf\x15\x58\xd5\x6c\x17\x30\x34\x9b\xe2\xc8\x08\x2e\x14\xad\x55\xe2\x1b\x05\xc8\x73\x11\xa9\xdc\x62\xd7\x75\xa1\x72\x8b\xc3\x7d\xe0\x39\x4f\x24\x30\x56\xf0\x66\x14\x02\xd5\x1c\x70\xd6\x8b\x4f\x7c\x03\xfd\x4f\xa4\xa3\xed\x35\xc3\x74\xeb\xda\x5f\x6c\x33\xf2\xb3\x3d\xe6\x49\x51\x18\x85\x4c\xcf\xe4\x0d\x3b\xf9\x96\x4d\xb2\x2c\x15\x6c\xc2\xfe\x8b\x7d\xc7\x25\x97\x9c\x7d\xc7\xfe\x8b\x9d\x72\x59\xf0\x54\x95\x99\x60\xa7\xec\xbf\xcc\xb0\x99\xf2\x2e\x94\xd1\x80\xb6\x23\xc6\x99\x2c\x53\x54\xf4\x5e\x5b\x8c\xeb\x1b\xd7\x2f\xee\x67\x67\x21\x8a\x47\x21\x24\xd3\x6a\x43\x47\xe1\x9f\xdc\xe9\xaf\x13\xb9\x4a\x45\x41\xeb\xa1\x8a\x46\xc6\x0a\x8e\xa0\xa7\x27\x33\xe9\xec\xd4\x7f\x32\x2d\xfe\x13\xfb\x2f\x76\x51\xa6\xa9\x69\x92\x11\x34\x66\x21\x9d\x30\x1b\x1d\x26\xe4\xf8\x31\xb9\x4f\x32\x11\x27\x1c\xe2\xc3\xcc\x5f\xc7\xb7\x30\xdb\xf3\xd2\x53\x81\x86\x7b\xda\xa5\x63\x3b\x44\xf4\xbc\x08\xd7\x84\x4b\x16\x18\x6a\x2b\x9d\x20\x94\xf0\xd3\xe1\x4a\xb0\x27\x40\xa6\xfd\x40\x77\x14\x4c\xa5\x17\x3a\x28\xdb\xeb\x77\x59\xbf\x32\xf3\xaf\x56\xfa\x8f\x5e\xd9\xbf\x76\x8d\x87\x6f\x23\x28\xa7\x38\x39\x3e\x38\x13\x2e\x32\x10\x4b\x88\xfb\x6e\x0b\x29\x3f\x6c\xd9\x78\xed\x44\xf7\xb6\xb9\x4a\xa3\x36\x5a\xf0\xd5\x88\x65\x2e\x8f\x94\xdd\x54\xce\xb1\x8d\xfb\x18\x73\x26\x90\xb2\xf9\xda\x02\x88\xcc\x5a\xa6\xf8\xc3\xe3\x58\x6d\x78\x22\xdf\x40\x1d\x96\x3a\x6f\xcf\x40\xb5\x5c\x57\xf6\x8f\xd0\x2d\xdf\x89\x66\xec\xa6\xf6\xaf\x2a\x3b\xb5\x14\x6e\x6d\xdb\xe1\xc0\x1c\x66\x3e\xc3\xe9\x67\xbc\x0e\xfd\xd4\x58\xa2\xbd\x73\x1f\x50\xbe\xb1\x0a\x7b\x0a\xe8\xf2\x9e\x41\xae\x97\x6f\xdd\x65\x2e\xfb\xa9\x9a\xe2\xb5\x32\xc4\x2a\xe9\x95\x0b\xb7\xd6\xd8\x3b\xba\x89\x61\xdc\xb3\x11\x93\x49\x7a\x6c\x44\xe5\xf1\x85\x92\x82\x71\xad\x93\x15\xb2\xde\x81\x41\x0d\x93\xc8\x5a\xa5\xec\xb6\x7a\x65\x08\x44\x10\xe8\x67\xa6\x49\x88\x98\x2e\x8c\x14\x36\x53\x90\x6e\x67\xd2\x7c\x41\x1a\x01\x44\x4f\x25\x8e\x1c\x1d\x6b\x23\xee\x71\x5b\x17\x1d\x88\x41\xe1\x2d\x0b\x6c\x17\x35\xc3\x01\x0b\x8e\x76\xe2\x01\x1e\xb7\x8b\x80\x18\x94\x4a\xb3\xac\x51\x08\xa7\x59\x88\x54\xc9\x95\x59\x15\x5d\x42\x18\xa4\xc0\x33\x35\x01\x0b\xeb\x6c\x81\x51\x56\xe8\x15\x9a\x12\xa3\xa7\x24\xb1\x37\xa9\xe9\x72\x61\xf4\x38\xe7\xed\x71\xda\x08\x75\xae\x8b\xa7\xe2\x30\xd8\xd2\x9d\x91\xc1\x2a\xb7\xc0\x39\xe7\x49\x44\xc5\xc5\x73\x38\x61\x8f\xba\x10\x1a\xf9\x20\x53\x4e\x87\x67\x7b\xc4\x54\x8e\xf4\x9d\xd6\x83\xed\xf8\xb7\x9a\xb5\x77\x6f\xe9\x9d\xd1\x1e\xed\xb6\x4f\xf2\x93\x36\xf8\x42\x7a\xec\x86\x5f\x33\xf0\xa3\x4f\x38\xc8\xfb\xc9\xf4\xbc\xf6\x5e\x33\x1c\xa4\x25\x66\xe4\x76\xfa\xe1\xec\xdd\xfc\xf2\xee\xb6\xf1\x9e\x29\x8d\x7e\xda\x13\x11\xd2\x39\x7a\xcf\x81\x89\xff\x05\x73\x98\xcd\xd5\xd2\xd2\x03\xf4\x3f\x9e\x1b\x59\xe4\xfa\x41\x2f\x8b\xe0\x76\x1d\x66\x5b\x6b\x2e\x9c\x4e\x92\x13\x39\x27\x5f\x6b\xbf\xc6\xd6\x07\xec\x52\xbe\xc7\xcf\xaf\x54\x9a\x44\xbb\x91\xdc\xf6\xb0\x34\x5a\x55\x13\x1a\xbb\x10\x10\xda\x40\x06\x5f\x6a\x14\xde\xcf\x0a\x11\x15\x1e\x4b\xd0\xec\xdc\xff\xd3\xe8\xd1\xfd\x16\x18\xb4\xc3\xba\x61\x83\xe4\xe4\x0e\x9d\x00\x27\x3b\xb0\x46\x43\xb2\x14\xd4\x72\xc1\xb2\x0b\x32\x2f\xe2\xe4\x73\xaa\x8c\x3c\x1c\x0f\x8f\x6b\x95\x92\x3d\x16\x19\xb8\x67\x32\x13\x79\xa4\x00\x75\x89\xe4\x2e\x8a\x45\xeb\x24\x8d\x7d\x46\xb2\xd7\x10\xa6\x02\x60\xf2\x37\x94\x5c\x57\x38\xf4\x8c\x2d\x7e\xc7\x99\x6f\x97\xdd\x3b\xdc\xdd\x07\x21\xcf\x9e\x13\x77\xbe\x6b\xd9\xff\x4c\xf8\x68\x1c\x0a\xe2\xcc\xab\xe1\x20\x40\xed\x0f\xdb\x33\xc8\xa5\x63\x0e\x7b\x4a\x36\x15\xf9\x6b\x73\x51\x9b\x57\x5a\x66\xf5\xa1\x04\x26\x75\xb4\xa3\x23\x08\x50\x0b\x68\xce\x46\x70\xd4\x04\x3d\xaf\x31\x4d\xea\x4c\x7a\xe4\xc7\x2b\x1d\x6a\x85\xad\xf3\x8c\xd6\x77\x8b\x6c\x1f\xb1\x57\x95\x8e\xbe\x02\xa6\x6d\xa9\xa0\x3e\xf2\xce\x57\x86\x06\x96\xeb\x88\x25\xc5\x4c\x9a\x3b\x9b\x59\x99\xb9\x48\xc5\x83\x69\x5d\xe8\x1d\x22\xbc\xa2\xb5\x9c\xd8\x6e\x43\x70\x14\xb7\x9c\x1a\xb4\x6c\x68\x13\xe6\x21\x63\x33\xba\xa5\x63\xa1\x8d\xd6\x0a\xb9\xa6\xc4\x27\xb3\x01\x12\x70\x7e\x22\xb0\x2d\x16\xd2\xb6\x0f\xf0\x6e\x98\xe7\x7f\x26\xa7\x4b\x20\x36\x00\x3a\x85\x38\x46\x1b\x84\xcd\x3e\xe4\xe8\x33\x13\xf2\x06\x29\xb2\xc8\xd8\x89\xa0\xdc\xd0\xb8\x93\xc4\x83\xc8\xb7\x05\x98\xf4\x61\x5c\xa5\xe0\xc5\x9a\x25\xc5\x08\x78\x4f\xad\xa4\x9c\x49\x1e\xc7\x14\x0f\x8e\xc5\x05\xd7\xd9\xce\x79\xa6\xe7\x0b\xf5\xb0\x4b\xad\x3e\x14\xb9\x8b\xbb\x3a\x4b\xb9\x9c\xe3\x09\xf2\x2b\x60\x77\x83\xb4\xdd\x5d\x20\x8e\x72\x31\x77\x5c\x6d\xcf\xd2\x4e\x27\xef\xaf\x2d\x74\x99\xae\x36\xe5\xc2\x56\x34\xaa\x40\xb3\x17\x9e\xd6\xc3\x59\xe9\x08\x37\x95\x33\x8b\x2d\xe9\x2f\x05\x3c\xac\x97\xd7\x30\x56\x76\xb5\xee\xc3\xf5\xda\x15\xf0\x5b\x45\x5e\xf6\x99\xf9\xda\x19\x52\x9f\xf6\xe1\xa0\xbf\x86\x86\xf8\x24\xe0\xdf\x9e\x66\xbd\x2c\xf8\xaf\xd3\x8a\xd3\x04\x01\xda\xde\x06\xfe\x7d\x0a\x1d\x40\x2b\xac\x33\xa0\xb5\xa7\x65\x0f\x6f\x81\xaa\x05\x1f\xff\x9c\x1e\x0a\x90\x53\x7d\xed\x34\x9e\x50\x04\xda\x35\x66\x53\xc9\xac\xba\x37\x62\xaf\x70\x61\xe9\x57\x64\x80\xa6\xdc\xfe\x04\x96\x89\x69\xf7\x10\x05\x43\x1d\x64\x86\x81\x70\x7e\xbb\xa1\x1f\x70\x27\x5f\xef\x8b\x8e\xcb\x77\x09\x04\xe2\x3d\x85\x6b\x05\x7d\xc8\x0b\x2c\xc0\xc6\x91\x04\xa6\x50\xea\x2e\xf8\x32\x7c\x87\xad\xb7\x93\x7d\x67\x3f\x34\x43\x94\x95\x74\x9e\xda\xe7\x4c\xe5\x33\x69\x4b\x23\x83\xb4\xc6\x04\x81\xf5\xa2\x82\xb8\x20\xd2\xf9\x83\x95\x0a\x50\x00\x9b\x13\x12\x52\x8d\x7a\x52\xf1\xba\x14\x00\x14\xd4\xc2\x21\x50\x21\x0b\x85\xaf\xcd\x28\x1e\x66\x81\x6f\xf0\x98\xaf\x13\x0f\xa7\xa9\x19\x94\xa4\xb0\x3c\xc7\x41\xcc\x9e\x2e\x81\xad\x7b\x59\x1a\x61\x14\x50\x9a\xcf\xa4\x19\x3c\xb6\x4c\x20\x76\x83\xc6\x65\x26\x3f\x28\x6d\x29\x62\xb4\x1f\x0f\x0b\x2c\xa0\x61\x7b\xe5\x52\x63\xd2\x0f\xef\xe0\xd0\x26\x8f\x0f\x92\xbd\xb9\xa3\x05\x82\x35\x89\xe7\x69\xab\xca\xdc\x77\x2a\xe2\x72\x26\xff\x6a\x86\x07\xae\x53\x5c\xda\x69\x55\x4b\xdc\xc2\x30\x83\xe0\x2a\xfb\x88\x85\xbe\xfe\xdd\x9b\x8f\x6f\x30\xb8\xaa\xd4\x90\x8d\x78\x54\x3d\x40\x5c\x76\x8b\x32\x4d\x01\x87\x60\x7b\xe0\x18\x96\x7c\x15\x3b\x71\x78\x74\xa9\x9b\xcb\xaa\x8a\xd1\x67\xa3\xf7\x33\xeb\x4f\x58\xc4\x8b\x68\x7d\x64\x75\x39\x12\x63\xf6\xf4\xa3\xe9\xc3\x28\x28\xa3\x69\xb1\xd6\x04\x0f\xe6\xc2\x99\x6f\x1c\xe5\x6c\x65\xbd\x98\x2e\x80\xf9\xff\xb6\x9e\xed\xcc\x31\x62\xe3\xe2\x44\x1c\x50\x55\xcf\x73\xaf\xdb\x5c\xa3\xfe\xc6\x49\x3e\x12\xc9\x37\x22\x66\xaf\x20\x0c\xf8\x95\x9d\xfc\x99\xcc\x16\xe3\x74\xbb\x2c\x88\xb7\xd0\x0c\xca\x18\xb2\xf2\xed\x39\xe5\xe6\x71\xf3\x9a\xb4\x67\xb0\x3b\x2f\x5a\xed\xba\x8e\x1b\x1b\x57\x53\x7f\x85\x05\x6d\x5c\x6e\x74\x6e\xaa\x98\xc0\x6a\x7a\x10\xae\xef\x47\x6c\x91\x73\x09\x09\x95\xe2\x50\xa9\xf2\xbb\x13\x2e\xcf\x48\x0a\x68\xe3\x02\x25\x4f\xb7\x10\xff\x33\x9a\x49\x64\x50\x04\xaa\xfd\x6d\x94\x26\x11\x5b\xe5\x3c\x5b\xd7\xf4\x20\xf1\x20\x64\x01\x79\xb9\xaf\x05\xd7\x87\x61\x35\xf2\x7a\x09\xac\xb7\x37\x6d\x22\xe1\xf6\xc1\x65\x8d\xf3\x1a\x9a\xd7\x71\xb4\x00\x3e\x53\xc4\xf3\x61\x7c\x57\x7b\x59\x99\x2b\x5c\x9f\x44\x3c\x07\xfe\x67\xd3\x39\x66\x6b\xdd\x07\x7e\xc0\x71\x25\x2a\x26\x8b\xe8\x3d\x14\xb0\xe1\xa8\x9d\x0e\x22\xe8\x9d\x56\xb5\x48\xee\x39\xab\xbc\xdd\x9c\xdc\x7e\x68\xa9\xb0\x61\x10\x4e\x70\x8c\x28\x6f\x2a\x90\x77\xb2\x3f\x96\x0b\x95\x5a\xf6\xd3\xe9\x3b\xa6\x72\x48\x3c\x54\x28\xfa\x29\x89\xbb\xb4\x83\x44\xc6\xe2\xd3\x41\x14\x44\xbb\x0f\x7a\xab\x36\x9b\x6a\x82\xfc\x36\xf5\xce\x82\x74\xca\x85\x39\x84\x0b\x7b\x33\x6e\xbc\xa5\xeb\x50\xe5\x49\x5a\xac\x01\x3f\x8c\x21\x3a\x7e\x50\x37\x7c\xcb\xa2\x35\x97\xab\xc0\x34\x01\x70\x4e\x91\xa9\x1c\x13\xf4\x3e\x00\xd7\xa7\xca\x2d\xc5\x03\x11\x17\x50\x9c\x90\x73\x63\x20\x3c\x5f\x59\x76\x02\xbe\x5a\xe5\x62\x05\x61\xac\x33\x59\xa1\x5e\x01\x9e\x53\x9b\x1b\x08\xeb\xd9\xc5\x5c\xf1\x3c\xf4\x4f\x5d\xb7\xc1\x22\xdf\xba\xb8\x7f\xca\x6e\xed\xf7\x73\x7d\x58\x47\x2c\x11\xe3\x11\xfb\xca\x87\x24\x88\x48\x49\x47\x1c\xd0\x11\x35\x5e\x33\xf9\xb3\x3d\x57\x87\x26\x4f\x54\x7b\xdb\xe1\x59\x23\x47\x76\xeb\xa2\xd9\xc9\xbc\x50\xf0\xa2\x1c\x70\x06\x9d\xf2\x82\xa7\x6a\x75\x6a\x3e\xbe\xc1\x6f\x77\xad\xeb\x53\x8c\x17\xb0\x1c\x7d\xe6\x7d\x73\x72\x9a\xba\x3d\x87\x7f\xdb\x58\xef\x35\x20\xa7\xaa\xdb\x80\xfc\x1c\xaa\xba\x25\x62\xda\x6f\x43\x4e\x3b\xc8\x85\x76\xf4\x69\xa8\x89\xd8\xa2\xfa\x29\x30\x49\xd7\xaf\xb1\x2d\x12\x20\xcb\x55\x5c\x46\x22\x36\x3b\x17\xee\x43\x88\x87\x72\x1c\x47\x15\x21\xd9\x76\xd0\x56\x88\xda\xe0\xd4\xfd\x5c\x36\x87\x5e\xdc\xf8\x6e\xf8\xef\x3a\xec\x0d\x56\xe3\x6b\x1b\xf4\x70\x7f\xe2\x38\xe5\x03\xcf\x29\x57\x7d\x95\xd1\x5e\xe5\xc9\x2a\x91\xbc\x50\x39\x7b\xed\x98\x0c\xde\xb8\x34\x78\xdd\x1a\xc2\x40\x31\x51\x19\x22\x14\x13\x9f\x55\xf1\x68\x5b\xa4\xe6\x2d\x5d\xf0\x4d\x16\x72\x44\x83\x15\x38\x18\x99\x14\x07\xc1\xe9\x26\x60\x3b\x4d\xb4\x8f\xda\x9d\x49\xf2\x38\xe0\xbc\xa9\x3c\x4c\x72\xd0\x79\x36\x67\x65\x31\x7f\x22\xef\x19\x7e\x3c\xcc\xf0\x44\x20\x88\x0f\x3c\xdb\xcd\x24\xc5\xc9\xe4\x80\x61\x8b\x64\x8e\xf0\x9a\x4a\x75\x7d\xee\x4e\x23\x34\x90\xd9\xba\xee\xb8\xbf\x3e\xb7\x8e\x22\x7f\x1f\xac\x5c\xb0\x60\x22\x90\x52\x17\xc3\xc0\xf0\x6a\xef\xc4\x9a\x39\xc5\x2d\xfd\xd4\x69\xaa\xca\x98\x91\x50\x23\x10\x40\x3e\xc6\xd3\x11\x38\xae\xc7\xe3\xae\xb0\xb6\x81\xe9\xcd\x9d\xfc\x81\xef\xda\x77\x20\x3c\xeb\x90\xc0\x3b\xb7\x3e\x8d\xec\x8b\x4d\x3d\x8d\x34\xcc\xbd\x13\xc7\x83\xe6\xde\x59\xc1\x81\x70\x73\x98\x81\x14\xee\xa3\x49\x9c\xc2\x7e\x0b\x1d\x08\x2d\x94\xe0\x15\xc7\xac\xbe\x3f\xb8\x3a\xcb\x42\xb1\xbb\xaa\x8c\xe7\x42\x16\x73\xa8\x71\x58\x65\x50\xc9\x15\x7c\x5e\x51\x98\x7a\x19\x82\xff\x7c\xab\xd0\xbe\x6f\xd9\xb5\xfe\xc2\x6e\xc8\xa6\x65\xe4\x55\x02\x10\x62\x7d\xcf\x5e\x27\x80\x78\x0a\x7c\xa1\x6e\xe2\x3a\xa6\x8b\x3a\xf4\x84\xd1\x0b\x3a\x54\x11\xed\xbd\x3a\xe4\x5b\x0f\xae\x6a\x28\x85\xcc\x7b\xc4\x09\x60\x44\xad\xfd\x2d\xc8\xb8\x71\x51\xf9\x1b\xd8\x91\xcd\xfc\xa5\xec\x6f\x22\x57\x3e\xfe\x0b\x8d\x55\x61\xc1\x3b\xf5\xf5\xa7\x27\x0b\x47\x7d\x1c\xd3\x54\x87\x79\x5a\xe1\x17\x22\x30\x43\x8b\xc2\x62\x6b\xaf\x23\x1d\x2e\xa4\x4c\x44\xf3\x8e\xa4\x3c\xbd\x9a\x12\x5c\x3c\xc3\x24\x3b\x49\xed\x30\xb3\x1b\xf4\x18\xec\x15\x14\x58\xb5\xe1\x19\xa1\x0b\x09\x48\x5e\x77\xde\x8c\xa1\x13\x7f\xfe\xd3\x5f\xc6\x49\x47\x88\x37\x34\x7d\x28\x58\xcb\x35\xfe\x7d\x9e\x08\x19\x83\x33\x96\xc7\xcd\x7c\x71\xb2\x62\x9d\xaf\x88\x67\xb3\x0c\x9f\x25\x1e\xbc\xfd\xa8\xd5\x73\x5c\x44\x9f\xc1\xa3\xef\x85\xac\xdb\xbe\x15\x7f\x5f\x97\x2a\xa1\xe7\xf1\x56\xf2\x4d\x12\x7d\xd6\x36\x6e\x13\x91\xc6\xd0\x44\xaa\x7d\x9f\x57\x2a\x16\xd1\xfd\x50\x9d\xe0\xc9\xd9\x2e\x44\x74\xcf\x7e\xb8\xfd\x70\x8e\xc9\x8d\x13\x3d\x93\x17\xbc\x48\x1e\xc4\x5d\x9e\x3a\x77\x00\x81\xb4\xf3\xd4\xee\x91\x2a\xfb\x7a\xc0\xf4\x65\xa9\xda\xad\xe2\x10\x26\xc7\xd8\x6c\x8f\x16\x65\x74\x2f\x8a\xe3\x9c\xcb\x58\x6d\xb0\x1b\xc7\xba\x5c\x2e\x93\x4f\xe3\x82\xe7\x1d\x99\x32\xd0\x8e\xf0\x2b\xea\xb9\x3e\xff\x59\xe1\x75\x5e\x54\x75\x1f\x21\xcc\x9b\xb2\xea\x57\x94\x5b\x8c\x4a\xe4\x1b\x01\x54\xa7\xac\x9a\x65\x06\x4a\xc1\xc8\x69\x48\xc6\xaa\x35\xc5\x4f\x28\x4a\xf5\xfe\x31\x50\xee\x3f\x06\xad\xf2\x2e\xec\xb0\x51\x3e\xc1\xe9\x86\xdf\xe3\xfd\x70\x95\x0b\xad\x47\x4c\x2b\x68\xf1\x4c\xda\x48\x04\x1b\x2d\x07\xb8\x17\x20\x4b\x4e\xb7\x2c\x52\x99\x83\xcc\x63\xbf\xd6\xea\x11\xec\xf4\x61\x9c\x30\xa4\xf0\x2e\x65\x91\xa4\x8c\x2f\x0b\x32\xe2\x43\x66\x08\x9b\x09\x4e\x8f\x67\x12\x5c\xb1\x11\x74\x1f\x20\x12\xce\xfd\xe2\x3a\xa1\xd9\x92\x47\x49\x9a\x14\xc4\x57\x07\x21\x66\xdc\xf4\xd7\x9c\x07\x66\x2c\x73\xbe\xe5\xa9\xbf\x58\xf1\xb4\xf4\xa1\xd1\x47\x5a\xec\xe0\x43\x4d\xf4\x1c\x0d\x04\x2f\xb7\xc1\x3d\x0a\x30\x09\x9d\x0f\xc8\x1d\x3f\x31\x95\x5f\xd4\x4e\xd1\x7f\x0a\xff\x5b\xb9\x87\xef\xd2\x0a\x0e\xb8\x90\x1f\x72\x38\x36\xaf\xdc\x2e\x7d\xba\xd7\x33\x92\xd8\xa2\x93\x2b\xaa\xb8\x0f\x3e\x76\xc7\x23\xf8\x4c\x3a\x2e\xfd\x63\x9b\xf4\xae\x59\xc3\x80\xd1\x6b\x57\x12\x3f\x93\x39\xa3\x8b\xd0\xbf\x4f\xf3\xad\x35\xfe\x4a\xa9\xf4\x50\x8b\x3c\x51\x72\x24\x4a\xce\x21\x0f\xf4\x21\xd7\x49\x5c\x00\xce\xb0\x35\x7d\xe7\x7c\xee\x8e\x21\xbf\x9a\x3d\x8e\xe0\x60\xd4\x04\x10\x64\xd0\x88\x1d\x38\x75\x9d\xb5\x80\x2e\x06\xe2\xed\xa1\x0c\x44\x6b\x59\xd5\xbe\xe9\x22\x08\xd8\x59\xb8\x6f\x23\xb0\x08\xd7\x5a\x38\xc8\x58\x87\x59\x9b\x6b\x55\x39\xc3\x5d\xc8\x36\xee\xc6\x31\xa8\xdb\x8e\xe7\x86\x4b\xb2\xfc\x91\x16\x3f\x93\x81\xc6\x8e\x8c\x78\x36\xa0\xc1\x8d\x5a\x9b\x3d\xaf\xb2\x0c\x0f\xb6\xe7\x1d\x92\x52\x62\xa7\xe4\x7c\x17\x26\x87\x04\x2c\x48\xa4\x36\x8b\x44\x5a\x4e\x0a\x32\x72\xc3\x55\x63\x62\x19\x7b\x9d\x43\xc2\x5e\x19\x30\x65\x50\x6d\xec\x9d\x9a\x13\x92\x1f\x87\x22\x6b\xdf\x75\x3c\xbc\xdf\x3d\x6f\xf6\x8b\x0e\x4f\x63\xbd\x07\xe6\x00\x49\x1f\xf9\x56\x43\x02\x75\x61\xa4\xe2\x12\x0d\xbb\xd5\xf6\x8f\x02\xf5\xc3\xb2\x41\xcf\x24\x8c\x10\xb2\x85\x59\x41\x6a\x24\x2b\x2c\xc0\xd4\xa6\x8a\xf7\x4c\x6f\xaf\x74\xfb\xe0\xfc\x3a\xbe\x9a\x7c\xa7\xaf\x06\x9d\xd0\xff\x3d\xdc\x33\x3b\x8c\xc0\x07\xda\xa2\x83\x63\x12\x35\x46\x82\x09\x41\xd8\x98\x73\x51\x8f\xd8\x86\x27\x92\xb6\x01\xa6\xe3\x8c\xc5\xa2\x5c\xad\x3a\x4d\xa4\xbf\x7d\x5f\x4b\x75\x9f\xfc\x8f\xb7\x85\xef\xe4\x2a\x7c\x0e\x6b\xf1\xd4\xd6\x84\xe6\x6b\x73\xef\xfb\x3c\x06\xe2\x5f\xd1\x1a\xdf\xea\x12\x6b\x2c\xa2\xe7\xb1\xc6\x4f\xfb\x58\xe3\x2d\xb6\x0b\x02\xfc\xe8\x3a\x6d\xf1\x37\xff\x30\xd3\x7f\x1e\x33\x7d\xaf\x45\x81\xa4\x3e\xf3\xa4\xaa\xa0\xef\x68\xe1\x13\x79\x2f\x1d\x15\x34\xb4\x0a\xb9\xe5\x8c\x74\x8f\x35\x5b\xf0\xe8\x05\x88\x30\xe1\x74\x3c\xdc\x1e\xb8\x07\xfc\x72\xa3\x36\x82\x41\x55\x1a\x13\x39\x31\x8a\x62\x1c\x01\x5a\xd5\x74\xd0\x23\x46\x08\x8f\x02\xc7\x29\x22\x57\x62\xaf\x54\xbf\x96\xe2\x91\x99\xd3\x6a\x14\xc2\xf7\x82\xe9\x81\x0c\x7f\x6f\x8c\x76\x58\xc1\xfa\x3b\xc2\x8e\x5c\xac\x78\x1e\x43\x84\x09\x6d\xc9\x94\x47\xf7\xe6\xdf\xd0\x3e\xaa\x91\x20\x86\x96\x2b\x00\x61\xaf\xbe\xb4\x44\x46\x48\x85\x68\x39\xdd\x5d\xfb\xf0\x73\xcd\x78\x94\x2b\x8d\x46\x23\x97\x18\x1b\xe2\xab\x41\x81\x7d\x48\xe2\x92\xa7\x58\x63\xa7\xa5\x7d\x28\x7c\xad\x0e\x38\x0a\x72\xd8\x35\xd1\x6c\x34\x1d\xc8\x50\x05\xc3\x38\x9e\xc9\x77\xce\x61\x72\xc2\xee\xb4\x20\x94\x99\xb6\x59\x00\x76\xb6\xf4\xc5\xd4\x87\x06\x26\xb0\x53\x87\xd8\x31\x00\x16\x64\x1d\x0c\x84\xee\x1e\x89\x3d\x74\xaa\x87\x4c\xca\x60\x5a\xe8\x69\x90\x48\xdf\x0f\x0b\xde\x13\x72\xc1\xe3\x6d\xc8\xc5\x98\x48\x06\x5e\x3a\xc6\xe3\x4d\x22\xcd\x26\xb0\xc9\x5a\xdd\x49\x63\xf3\x36\x20\xe4\x18\x72\x9a\xa5\x69\x4d\x08\x6a\x26\x85\x51\x2e\x79\x9e\xa4\x5b\xb8\x4f\x64\xb9\x38\x0a\xea\x09\xe6\x87\x22\x9e\x20\x03\x05\x91\xc8\x94\x5a\x2c\xcb\x14\x6f\x1d\x70\x2f\x77\x1d\x20\x89\x74\x37\x1d\x19\x85\xa3\xa0\x4c\x42\x41\xc5\x98\x9f\xf3\x39\xa2\x47\x1a\xde\xca\x61\x1e\x37\xcf\x15\x9a\x03\xc8\x7d\xad\x1e\x6d\xa8\xdb\x23\xf7\x58\xe6\xae\xd3\xf5\xd9\xbc\x2c\xbb\xf5\x50\x7b\x03\xb4\x72\x2a\x20\xfc\x73\xae\x35\x7a\x26\x62\x27\x9b\x12\x09\xdd\xa1\x14\xd7\xde\x72\x5d\x6a\x8c\x98\x33\x73\x09\xe7\x97\x35\x74\x54\x0d\xd7\xcc\xf5\x2e\xd1\x4a\xb2\x59\xf9\xe5\x97\x5f\x0b\xf6\x25\x84\x10\xd2\x7d\x04\xfd\x63\xc0\x16\x8a\xa5\x83\xc8\x76\x15\x08\xa4\x12\x6d\xcc\x08\x6b\x83\xa8\xda\x78\x7d\x00\x79\xf2\x68\xcd\x74\xb9\x40\x04\x23\x27\x17\x0b\x97\x8e\x75\xfc\x5c\x01\x18\x11\x4f\x76\xdb\xfa\xff\x47\x1c\x0a\x98\xf4\x65\x26\x33\x85\xc4\xf8\x00\xfd\x5c\x08\xb6\xe1\xf9\x3d\xe4\xf0\x45\xf3\x3c\x24\x02\x78\x9d\x88\x71\xd5\xbd\xf0\xa6\xd2\x1e\x72\xe8\x20\xe1\x35\xcb\x4b\x29\x6d\x52\x32\x66\x14\x53\x6f\xeb\x1f\xcd\xe4\xa2\x0c\xef\x9e\x15\x67\x81\x5f\x5a\xe0\x30\x00\x61\xab\x80\xa9\x84\x1a\xc5\xb5\x6f\xd7\x98\xf5\xf0\x1a\xcc\xe4\x33\xbb\x0d\xf6\x19\xfc\xae\x48\x07\xb3\xc6\xbc\x20\x5e\x01\xba\x1b\xe6\xcd\x86\xe9\xc0\x65\x0f\x4a\xce\x15\x24\xcf\x1e\xb1\x1f\x92\x07\x31\x62\x37\x19\xcf\xef\x47\xec\x1d\xba\xff\xfe\xa0\x16\x6d\x36\xbc\x06\xa1\xc4\xc1\x76\xbc\xa7\x99\xb1\x76\xd1\xbc\xb4\x6b\xff\x3f\x37\x88\x01\x58\x97\xef\xfb\xbf\x27\x22\xaf\x83\xeb\xe3\x7f\xba\x25\x62\x8f\x9b\xfa\x1f\xe0\xb5\xff\x91\xb7\xe2\xdd\x34\x1f\xff\x14\xfe\xd7\xca\x2f\xab\x71\x81\xee\x49\x52\xae\x15\x95\xf6\xdb\x0a\x6c\x4e\xe2\xfa\xa1\xdc\x8c\x6f\xee\xb7\x15\x28\x7c\x3c\x76\xa1\xed\x03\x40\xf7\xf4\xa9\x1d\xaf\xd3\x54\xe9\x32\xdf\xbd\xf9\xaf\xab\xad\xb6\xb5\xb7\x10\xbd\xc2\x62\xdb\x2c\x04\xb0\x16\xf4\x85\x9f\xe0\x6b\xf3\xbf\xaa\xc5\x1c\xb0\x56\x87\xed\xf0\xb6\xe2\x1c\x7d\xb4\x8a\x2a\x4d\xf5\x27\xe4\x4d\x26\x80\xef\xca\xab\xa2\xde\x21\x50\x5b\x61\xce\x34\x32\x93\x96\x71\x1f\x23\x66\xf3\x5c\x00\x35\x78\x2e\x20\xd1\x23\x23\x86\xc3\x74\x1b\x68\x44\xc1\xcd\xc7\x83\x62\xc2\x28\x37\x08\x56\xa5\xfb\xd6\x42\x08\xe9\x46\x7b\x88\x2a\x01\x34\xd8\xb5\xd1\x27\xb4\xdb\xa3\xb0\x89\x17\x3a\x92\xd2\x36\xbe\x0b\xee\x82\xa0\x72\xaf\x44\x11\x48\xf3\x9a\x6a\x51\xd9\x9a\x15\x0f\xd5\x6f\x0a\xf1\xdf\xea\x83\xae\x91\x73\x55\x0c\x28\xbd\x7c\x7a\xcf\x61\x2f\xbf\xe2\xc5\x1a\x2f\xb4\x1b\x55\x08\x94\x99\xc8\x12\x84\xeb\x05\xad\xce\x8b\x54\x2d\x20\xc3\x62\xb1\x83\x41\x32\xa2\xad\xdd\x6b\xe8\x9a\x13\xd6\x47\x32\x18\x69\x02\x91\xb6\xb9\xd0\x40\xb8\xd2\xf4\x52\xf5\xc5\x27\x0f\xbb\x74\x37\x9b\x6b\x84\xfe\xbb\xc6\x65\xbb\x99\x92\xc3\x6c\x6b\x00\xab\x9e\x3d\x21\x82\xa6\x91\xe0\x84\xa8\xaa\xc9\x0d\x8c\x6c\xb5\xb5\xfe\xda\x44\xfe\x33\x39\xc1\x27\xc1\x21\xc0\x7d\x8e\x2d\x87\x07\xa5\x9c\xcd\x6e\xff\x61\xf8\x2a\x9b\x84\x08\x44\xb2\x10\x8c\xbc\x2d\x13\x2e\x03\x23\x88\x6a\x94\x45\x92\x0b\x26\x01\x85\x30\x93\xba\x5c\x1c\x79\x62\x12\x73\x8b\x7b\x00\x32\x1d\x2d\x32\x0e\x57\x19\xe0\x2b\x3a\x6a\x39\x86\xd1\x32\xe9\x73\xe5\x58\xfa\x40\x9e\x92\xf0\x87\x58\x49\x8c\x8c\x77\x7d\x77\xe5\x98\xcb\x1a\xdc\xa2\x2d\x5c\x09\x0f\xbb\x5d\xf2\x02\xb2\x79\x41\x04\xe6\x35\xa2\x28\x7e\xed\x03\x3c\xf4\x86\xf6\x3d\xba\xc1\x9f\x36\x93\xff\x6a\xcf\x86\x6e\x50\xf1\x80\x95\x6e\x46\xc6\x1c\x51\x9d\x60\xe7\x4a\xdb\xec\x15\x32\x50\x02\xbb\x1b\xd5\x58\xf2\x6d\xa5\x72\x8b\x6b\x09\x53\xba\x28\x0a\x97\x85\xa7\x0f\x89\x0e\xc8\xde\xa1\xb6\x1b\x21\xd8\x49\x2e\x96\x27\x1f\x73\xb1\x9c\xdb\x99\x1e\x43\x87\xc6\xa6\x47\x4d\xca\xf7\x9e\x8b\x43\x67\x4a\xb6\x93\x1f\xee\xa1\x46\xad\x75\x09\xcb\x09\xfa\x94\x2c\x99\xcf\x6e\x6b\xfa\x03\x0c\x10\x22\xae\x73\xd1\x37\x5a\xf6\xd9\x8f\xb9\x2e\x24\x58\x0f\xa8\x55\x47\x12\xd4\xff\xf9\xc7\x5b\x65\xcc\xfa\x1c\x6f\xb7\x55\xc8\x8c\x15\xf6\x5c\xba\x03\xaf\x1b\x17\xfa\x79\xd1\xe9\x30\x81\x3a\xe3\x8f\x92\x78\x6c\x06\x99\x9e\xfa\x1d\x6b\x35\x00\x51\x70\xac\x35\x30\x70\x7e\x97\x49\x6b\xe9\x4b\x5c\x1e\xcd\x11\xf3\x37\x68\x9e\xa6\x61\x46\x0d\xef\x69\x9b\x49\x1f\x97\x6a\xb4\xd6\x34\xb5\x26\xbc\x8a\xbe\xe1\x12\x1e\xeb\x82\x17\x62\x64\x49\x57\x88\xae\x90\xfc\x61\x47\x0b\x0e\xa9\xad\x5d\x0e\xb5\x7d\xbb\xf9\xb9\x2e\x91\xbf\xb1\xb8\xe8\x3d\x9e\x67\xac\x76\x7e\x2f\x1a\x70\xe6\xbd\x6d\x6d\xf7\x74\x04\x94\x12\xb0\x99\xad\x94\x8d\x78\x9e\x5b\x94\x3f\xd5\xca\x2c\xdd\x79\x78\x2b\xe9\x68\xe7\x5a\x44\xf7\x99\x4a\xe4\x60\x59\x54\xa1\xb8\x80\xc5\x5e\x30\x5f\x9a\xbb\x1d\xf6\x3a\x1c\x2b\xfa\x24\x76\x44\x03\xbc\xc2\x42\x43\x3d\x19\x1b\x67\x2e\x53\x76\xf7\xb2\x7b\x6e\xfb\x85\xf0\x67\xc3\x0b\xd8\x62\x5b\xfc\x43\xb5\x53\x85\xb7\x18\x76\x2a\x4c\xa0\xbc\x11\xfd\xd5\x73\xb0\x39\xab\x50\x18\xb6\x0e\x29\x98\x20\xff\x61\x19\xfa\x87\x65\xe8\xbf\xb9\x65\xe8\x73\x9a\x85\x00\x1b\xf3\x92\x36\xa1\x1d\x0e\xf2\x03\xb6\xa3\xab\x75\x70\x8c\x63\xab\x76\x3c\x0a\x92\x7e\x07\x91\x8e\x4d\xa0\xbf\x25\xc2\x30\xe3\xb3\xe0\xd1\xbd\x90\x9d\x3e\x7a\x4b\x5f\xd4\x99\x7f\xf5\x79\x11\x2c\x6d\xec\x4b\xc1\xd7\xbb\xa1\x2c\x1e\xea\x44\xa4\xc1\x6d\x84\x20\x66\x9f\x80\xee\x69\x3a\x7e\x04\xa0\x31\x95\x3b\x62\x6b\x4d\x51\x78\xe8\x8c\x44\x9a\x24\x04\x4b\xd5\xa8\xa0\xfb\x62\xe2\x6c\xc5\xf3\x4c\xa9\xb4\x15\x1a\xf7\xac\x03\xd8\x08\x94\xe9\x3b\x78\x53\x54\x46\x75\x08\x18\xb3\xa3\xe8\x83\x2e\x7c\x88\x06\xc6\x63\x40\x26\x0e\x58\x4d\x71\x09\xb1\x94\x7e\x38\x82\xf4\x8a\xdc\x19\x5c\x08\x23\xb6\x10\x11\x87\xc4\xaf\x16\xbc\x17\x71\x17\x7d\x12\x92\x22\x35\xc2\x41\x74\xb3\x9e\x0e\xaf\x25\x94\x3b\x4f\xda\xd2\x6e\x0c\xdd\x5c\x35\x0d\xc1\x42\xcb\xb1\xe5\x16\x49\x62\x69\x17\xf7\x25\x34\xb6\x1c\xd3\x73\xc8\xbe\xd8\xef\x84\x6b\x95\x3b\x53\x2a\xe8\x14\xca\xe9\x2f\x48\x7f\x80\x70\x9c\x4d\x4f\xe4\xce\x4c\x4e\x5c\x9e\x5b\x8f\xfd\x72\xc8\x3d\x74\x97\x22\x66\xb1\x31\x35\xc8\xe5\xe8\x6f\x2e\x23\xa6\xcb\x68\x0d\x6c\x95\x55\x39\x15\xca\xad\xe6\x8e\x1d\xcd\xa4\xb9\x10\x81\xa9\x65\xc3\x21\x2e\xfe\xd1\x28\xab\x3a\xf9\x9b\x70\xf0\x2c\x22\xef\x0a\x11\x59\x78\x71\x52\xb2\x15\xbd\x66\x89\x43\x11\x60\xe1\x31\x25\x65\x16\xf3\x42\x8c\x67\x1e\x6d\x93\xa0\xa5\xd3\xa2\x3c\x48\x65\xd6\x61\xc7\x42\x1c\x63\x4d\xd2\xa6\xc9\x52\x44\xdb\xa8\x91\x85\x68\x37\x4d\xc4\x3f\xae\x6d\xbf\xad\x6b\x1b\xb2\xec\x62\xcc\xe0\x90\xa1\xa5\xa6\x5e\xfb\xcf\x0f\x1b\x5c\xc1\x82\x96\xe8\x01\xe3\xfc\x19\xaf\x9d\x2d\x3a\xf0\x30\x7d\xbe\xf7\x3d\x68\xf7\x71\xe6\x2f\xb6\xfe\xb0\x0e\x28\x10\x1a\x6a\x61\xe8\x5c\x2c\xc2\xa5\x63\x14\xda\xde\x6e\xfd\x6e\x96\x99\xdf\x14\x38\xa9\xcf\xc5\xd5\x68\xdc\x0e\xae\x74\x61\x35\x6d\x29\xf0\xbc\xdb\xa1\x71\x07\xac\xee\xbc\x78\xa5\xdd\xa8\x57\x25\xa0\xc5\xfe\x4f\xe4\xf6\xa0\x00\xcc\x6d\x26\xe6\x65\x9e\x1e\x04\x37\xbe\xbb\x3e\x3f\x76\xda\x06\x68\xce\x9d\x79\x8f\x8a\x5a\x6a\x68\x9b\x93\x58\xc4\x04\x07\x8d\x54\xca\x16\xe5\x72\x09\xf9\x4b\x08\x18\x6a\x85\x11\x64\xa6\x2f\x75\x61\xcf\x13\x64\x9a\xe1\xba\x98\x49\x25\x05\x9b\x7d\x71\x3c\xfb\xc2\x1c\x65\x39\x8f\x0a\x91\x23\xc9\x40\xca\x75\xc1\xb4\x58\x81\xaa\x45\x95\xde\x5d\x9f\x43\x54\x62\xb1\xc6\xe2\xdc\x95\x15\xe3\x3d\x91\xf3\x19\x72\xfd\x00\x41\xb5\x0c\x32\x6e\x41\xdb\x5f\x73\xcd\x12\x39\x93\x1f\x4d\x11\xc7\x2b\xa5\x56\xa9\x18\xdb\x09\x19\xbf\x23\xd3\xe3\xc7\x37\xd8\x02\xf8\x3c\x84\xf5\x9b\x03\x91\x4b\x25\x93\x88\xa7\x10\x90\x33\x93\xa0\x35\x8f\x4c\x67\xc0\x34\x3a\xfb\x62\x3c\xfb\x82\x81\xfb\xb4\x60\x3c\x8a\x44\x56\x88\x18\x53\x9b\x4e\x25\xcb\x00\xbf\x18\x89\x11\x2b\x04\xdf\x68\x4b\xe9\xcc\x32\x73\xc7\x84\xab\x21\x4b\x24\x21\x9d\x16\x89\xe4\xf9\x16\xc1\x4c\x98\xac\x9c\x82\x3f\xb6\x33\x29\x3e\x01\xfd\x67\x02\x0c\xa0\xa5\x76\xb4\x34\x94\x98\xc0\x74\x79\x22\xb7\x63\xf6\x03\x32\x34\x20\x05\xea\xdd\xf5\xb9\xa5\x37\xa2\x18\xd0\x99\xd4\xd1\x5a\x6c\x04\xfb\xb8\x2e\x8a\xec\xe3\x08\xff\xab\x3f\x82\xc7\x51\x2a\x86\x4f\x47\xcc\x4c\x91\x51\x54\x2d\x5e\x3e\xdd\x42\x0e\xd9\x32\xa3\x84\xf3\x33\x09\x5c\xec\x79\x88\xee\x35\xa3\x0d\x35\x06\x57\xf0\x0a\x2e\xdc\x48\x71\x48\xee\x78\x62\x06\xe7\x7f\xb1\xe9\xd2\x57\x69\x06\xd0\xe6\x16\x73\xad\x02\x85\x44\x43\xc8\xd6\xd8\x7c\x30\x91\xec\x87\xdb\xdb\x2b\xf6\xfd\xd9\xad\x55\x76\xee\xae\xcf\x71\x5d\x00\x9d\x0a\xe3\xec\xcf\xf5\x29\xbe\xdd\x66\xe2\x2f\x7f\xfe\xcb\x4c\x32\x9b\xa3\x5c\xda\x91\xc6\x1d\x3d\x42\x4a\x58\xc0\x3b\x81\x63\x16\xa8\x9c\xa1\x3e\x4c\xb9\x43\xcd\xcf\x51\x3b\x7f\x24\x6b\x01\x9c\x51\xa9\x52\xf7\x65\xe6\xcc\xdc\xa1\x1e\x66\x2a\xbc\xbb\x3e\x87\xd2\x81\x4e\xa9\x58\x43\xfe\x34\xe1\xac\x2f\x30\xf1\xdc\x36\xc6\xfc\xfb\x41\x25\x31\xe3\x72\x6b\xbe\xc5\xa2\x61\x59\xe6\x62\xa9\x72\x31\xb2\x6f\x9a\x02\x78\x91\x2c\x92\x34\x29\xb6\x20\xa5\x6c\x5e\xfb\xcc\x72\xe4\x9b\x02\xcc\x6d\x86\x00\xde\x66\x81\x61\x1a\xdb\xd7\x77\x3a\x44\x80\xc3\xa4\xb9\xdc\x88\x78\xd1\x31\xdf\x2e\x72\xc1\xef\xcd\xea\xa6\x12\xc6\x6f\x28\x67\xac\x38\xc1\x33\x66\x59\xca\x08\x97\x86\x69\x03\xad\x7e\xba\x39\xa5\x5b\xc6\x1f\x78\x82\x39\x65\xad\xbb\x7c\xb9\x4c\xa2\x84\xa7\x24\x39\x16\xe5\x12\xd2\xc6\x70\x4d\x29\x8b\x10\x7c\x68\x0a\x81\x5b\x86\x4d\xd8\x8f\x0b\x6a\x21\x56\x09\x02\x8e\x1f\x93\x62\x8d\x71\x05\x63\x9c\x67\x9e\x25\x7a\x1c\xa9\x0d\xec\xb7\x1b\x58\x4a\x9a\x2e\xbd\x80\x03\xaf\xad\x73\xf6\xda\x42\xed\x36\x59\xb1\xa5\xb5\xf7\x86\x6d\x92\xd5\xba\x80\x44\x2e\x50\x3b\x40\x22\x92\x4d\x96\xc2\xa5\x8f\x3c\x8c\x16\xef\xab\xc5\x86\xcb\x22\x89\xba\x7c\x4a\xad\x29\xc1\xfb\x61\x3c\x17\xdb\x62\xb7\x1d\xef\x03\xf1\xec\x73\xa4\xd0\x0f\x24\x32\xab\x0b\x64\x92\x81\x90\x5e\x26\x20\xf0\xaf\xa7\x9c\xdd\x77\x85\xfa\x38\x91\xdb\x8f\x9e\x84\x94\xcb\x20\xf7\xd5\x8e\xda\xed\xfe\xe7\xa9\xa2\x59\x63\x7c\x26\x01\xd5\x69\x04\x06\x25\xa3\xdd\x79\xc6\xb8\x23\xc5\xcc\xec\x95\x5d\x34\x69\xb2\x80\xba\x49\x56\x68\xa6\xcb\x0c\xe2\x09\x0a\xc5\x32\x1e\xdd\x1f\x97\xd2\xfc\xc7\x08\x43\xdc\xee\x3a\x24\x27\x9a\x49\xb5\x64\x65\x81\x1b\xc7\x2e\x61\x30\x8a\x04\xa6\x00\x7f\x41\xdb\x88\x62\xad\x62\x17\x17\x66\xca\x84\xf1\x33\x2d\x3a\x23\x7a\xe9\xb7\x27\xec\xca\x54\x68\x16\x31\xd5\xcd\x5d\xf7\x13\xc9\x4e\xff\xf5\x5f\xe1\x7d\x33\xb8\xef\x95\x62\x4b\xa5\xd8\xb7\x6c\x3c\x1e\xff\x3b\xfe\x66\x0a\xe5\x72\x4b\x7f\x71\xb9\x1d\x9b\xe2\xde\xe7\x6a\xf3\x7a\xa9\xd4\x1b\xfa\x1d\x92\x36\x9b\x7f\x24\x4b\xf6\xda\xbc\x74\x07\x55\xdd\xaa\xd7\xb3\xf2\xcb\x2f\xbf\xfa\xbd\x79\xf5\x0d\xfb\x4f\x7c\x27\x78\xfd\xef\x61\x53\xbf\xda\xd3\xd4\x3f\xf0\x07\xde\xa7\xad\xec\x5b\x38\x6b\x4c\x01\x3b\xdb\x98\xe8\xd7\xef\x95\x1a\xc3\xed\x3f\x6c\x1d\x16\x6b\xde\xc0\x56\x04\x6f\xfd\x7b\xd0\x6c\x66\xdb\xfd\xf5\x9e\x76\x23\xaa\xde\xb5\x1c\x8b\x7f\xaf\xd4\xeb\xf1\xd8\xc8\x2d\x1a\x57\x6c\xf5\xeb\x37\xd5\x81\x86\x0e\x34\xdb\x6f\x1e\x4f\xb1\xf9\xef\xce\x6e\x4e\xaf\xa7\x57\xb7\x97\xd7\x6f\x4e\x6c\x0f\xfc\x0c\x04\xdf\x33\x9b\x5a\xdb\x35\xfc\x7f\xef\x69\xf8\xf7\xca\xb6\x19\x1a\x7d\xf2\x2d\xc3\xd9\xcc\x16\xe3\xf7\x4a\xfd\xe7\x78\x3c\xfe\x3b\x3d\xe6\x72\x3b\x32\x07\x93\x79\x27\x43\x51\xfe\x81\xe7\x7a\xcd\x53\xd3\xa7\xa0\x0d\xae\x13\xad\x25\xda\xe2\x92\x65\xad\xb0\x3b\xb9\xf1\xc5\x41\x65\x30\xb1\xf0\xd6\x3f\x7f\xcb\x64\x92\xfa\xe9\x0b\xea\x80\x79\xba\x05\x6a\x89\xe8\xde\x6d\x17\x97\x23\x74\xb1\x65\x59\x7d\xe3\x62\xdc\xd9\xd6\x66\x28\x30\xe2\x7e\x26\x5f\xb5\x48\xf4\x63\xa3\xda\x8d\xe1\x81\x39\xa0\x5e\xd9\xec\xf1\xf6\x58\x70\x99\xb5\x70\x64\xc1\x11\x8d\xbb\x55\x52\x8c\x5a\x9b\x7e\xe8\x0e\xbc\x80\xac\x0a\xd4\xce\x57\xc7\xaf\x28\x50\xc8\x57\x51\x25\x92\x9f\x7d\xb1\x54\x6a\xbc\xe0\x39\xb4\xee\xd3\xf1\x76\xfc\xb7\xd9\x17\xd8\x1f\x54\x3e\x50\x31\x82\xc2\x67\x5f\xc0\x53\x58\x0e\x33\xf9\x87\x9b\xcb\x8b\x99\xfc\xf6\xdb\x6f\xbf\xc5\xd1\x32\x7f\xb7\xf8\x5e\xcc\x71\x05\xe2\x16\xf5\x94\x52\xdb\x94\x92\x62\x55\xa6\x3c\x9f\xc9\x76\x77\x4d\x2c\xbc\xd0\x1c\x79\xe7\x0d\xad\xb3\x91\xcd\x6e\x01\x49\xca\xac\x8c\x43\xdb\xe4\xc7\xff\xdf\x34\xf9\x23\xa9\x88\x4e\xc8\x87\x43\x30\xb6\x8b\xf9\xc4\x2e\x55\x33\xd8\x66\xfd\x7a\x3d\x6b\x99\xa4\x82\x36\xae\x5d\xdc\x57\x22\xd7\x4a\xfa\x35\x43\x17\x02\xe0\x36\x03\x07\x00\xfb\x96\xbd\xfd\xf7\xda\x53\x33\x0f\xf6\xe1\x57\x15\x49\xc0\x98\x2f\x6a\xf6\x05\xb4\x7a\xf6\xc5\x09\x9b\x7d\xd1\xb6\x6e\xaa\x0d\x1b\x63\x53\x66\x5f\x8c\x7c\x01\xd0\x8c\x0b\xbe\xc1\x42\xca\x2f\xbf\xfc\x3a\xc2\x26\x60\xe8\x5a\xf0\xa6\x69\x52\xf7\x8b\x41\x13\xa7\x35\xd7\x99\x1d\x08\x1b\x02\xf9\x28\xd2\xf4\xe8\x5e\xaa\x47\xcc\x33\x0e\x7e\x22\x8a\x52\x66\xb8\x3c\xaa\x93\x4b\xb9\xc9\x6a\x33\x6e\x83\x36\x5d\x35\x2e\xbd\x1d\x4c\xe8\x4c\x7e\x84\xa5\x63\x67\x94\xe8\x88\x80\x0e\xd4\xd5\x04\x97\x1a\x5a\x09\x36\xc6\x82\x16\xc2\x4c\x42\x31\x6e\xce\xd9\x6b\x00\x7e\x51\x57\x1a\x9a\xb5\xbd\x3c\xfd\xe5\xcf\x7f\x79\x73\x72\xc8\x3c\x55\x8b\xab\x4c\x15\xf4\x07\xcb\x78\x3b\xfe\xea\xed\x57\x7a\xf6\x05\x8d\x7a\xfb\x15\xfb\x3c\xd1\xc5\x4f\x35\x0d\xec\x09\xc9\xce\x8d\xe2\xf0\x52\xce\x0b\xdb\x54\x6c\x66\x5f\xa7\xc5\x75\xd5\xad\xa0\x96\xd6\xac\x03\x97\x33\x9b\x06\xde\xb4\x7b\x90\x7a\xe7\xc6\x0b\x2f\x5b\xec\x31\xe7\x59\x26\x72\x6b\x2b\x6f\xb8\x33\x20\xa7\x3a\xd4\x62\x45\x7f\x9b\x30\x33\xcb\xa6\x56\x34\xbc\x06\x43\x37\x6e\x9f\xb9\x8b\x32\x4d\x3b\x67\x6e\x7f\xb2\xe4\x8b\xbb\xf3\xf3\xf9\x4f\x93\xf3\xbb\x33\xdb\xfd\xd6\xe4\xc3\xc1\x6b\x9d\x63\xe2\x5a\x42\x63\x82\xb8\xaa\x02\xb0\x54\xe5\x46\xe4\x96\x29\xcc\xf7\x1a\x71\x24\x65\x9a\x56\xd3\x62\xcf\xe4\x47\x2a\x07\xc4\x40\x29\x13\xab\xa6\xec\x1c\xb8\x6a\xfd\xf0\xda\x47\x53\xf8\x47\xfc\xf6\x88\xf9\x4e\x9c\xb0\x0b\x57\x6b\xc7\xb8\x12\xe1\xc4\x01\xdb\x01\xe3\x6d\xbb\xb6\xc3\x73\x27\xfe\x7f\xda\xf6\xb8\x93\x90\xf4\xcb\x48\x5e\xcc\xd7\xff\x2c\xbb\x03\xc7\xee\x63\x15\x0a\xee\xcc\xa5\x31\x7a\x0d\xa1\xdc\x11\xa6\x6b\xd7\x05\x71\x16\xe3\x98\xcd\x24\x0a\x62\xd3\xa6\x42\x75\xb7\x89\x4d\xc9\x83\x94\x72\xb9\x2a\xf9\x4a\xe8\x11\xb3\x95\xcf\xa4\xbd\x9d\xda\xbb\x8e\x03\xe6\x00\x23\x6b\x6d\x09\xd5\x42\x80\x13\x39\x93\xd4\x27\x38\x61\xa9\x78\x0c\x47\xfd\xc3\x8d\xeb\x0e\xc5\x7d\x63\x41\x94\x71\x5e\xce\x24\x4e\x2e\xda\xc6\x2c\xd8\x10\xd4\x8e\xe6\xd9\xc4\x01\x1e\x8c\xf7\xba\x98\x15\x6a\x05\xb0\xc7\x99\x74\x2c\x58\x08\xce\xb0\xf7\x35\x9f\x1b\x14\x9b\xb4\x5f\x9e\xd8\xc9\xb0\x7b\x82\xda\xd6\xbe\xea\x0f\x3e\x03\xcc\x86\x9b\xb7\xde\xe5\x77\x2f\x5b\x2f\xc6\x7a\x02\x72\x78\x20\x38\xba\xa8\x11\x81\xfa\xac\xbd\x35\xb6\x5f\xf8\x4e\x67\xf4\xa8\x2a\x17\xe9\x80\x26\xe1\xfb\x3b\x1b\x85\x22\x79\x77\xa3\x7a\x58\xa4\xaf\x6b\x5b\xcb\x2c\xd3\x5d\xd5\x2e\x94\xea\x98\x97\x67\xc4\xec\x56\x1a\x45\x1f\xec\x1b\x8c\x32\x2a\x9e\xb2\x5e\x7a\xf0\x01\xd5\x87\xc8\x4a\x9f\x5d\x0d\x4a\x13\xfd\xa4\xe6\x78\xfd\xa9\x77\x8b\x9c\x86\x40\x87\xdd\x20\x09\x4b\xe7\x5c\x45\xc0\x76\x88\x49\x7b\x4d\xc1\xf0\x16\x91\xa0\x78\x31\x9b\x67\x04\x9b\xc8\xac\xff\x91\x5b\x44\x23\x3f\x73\x23\x68\x64\x54\xe6\xda\x88\x4b\x92\x77\x24\xb5\x55\xce\xf8\x4c\x5a\x36\x18\x2b\x8e\x27\xd6\x1e\x9c\xbb\x5f\x91\x63\x29\xc3\x94\x75\xe0\x14\x2a\xc0\x4a\x4e\xd2\x70\x26\x1f\x78\x9e\x70\x09\x98\xe6\x85\x86\x7c\xc3\x70\xa5\xdb\x32\x7a\xe0\x08\x38\x74\x68\x64\xde\x23\xf3\x6a\x6a\x40\xe5\x9c\xff\x27\xf3\xbf\xbf\xff\xd3\xff\x0d\x00\x00\xff\xff\x48\x2f\x2f\x28\xd9\xeb\x06\x00") func adminSwaggerJsonBytes() ([]byte, error) { return bindataRead( @@ -93,7 +93,7 @@ func adminSwaggerJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "admin.swagger.json", size: 436128, mode: os.FileMode(420), modTime: time.Unix(1562572800, 0)} + info := bindataFileInfo{name: "admin.swagger.json", size: 453593, mode: os.FileMode(420), modTime: time.Unix(1562572800, 0)} a := &asset{bytes: bytes, info: info} return a, nil } diff --git a/flyteidl/gen/pb-go/flyteidl/service/signal.pb.go b/flyteidl/gen/pb-go/flyteidl/service/signal.pb.go index 02d6a8c7be..3ad109ae7d 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/signal.pb.go +++ b/flyteidl/gen/pb-go/flyteidl/service/signal.pb.go @@ -29,27 +29,30 @@ const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package func init() { proto.RegisterFile("flyteidl/service/signal.proto", fileDescriptor_ca211d25a1023377) } var fileDescriptor_ca211d25a1023377 = []byte{ - // 317 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0xc1, 0x4a, 0xf4, 0x30, - 0x14, 0x85, 0xff, 0xf9, 0x05, 0xc1, 0x8a, 0xa8, 0x41, 0x5c, 0x54, 0x05, 0xa7, 0x2b, 0x11, 0x6c, - 0x50, 0x77, 0x82, 0x08, 0xba, 0x70, 0x23, 0x08, 0x76, 0x21, 0xb8, 0x19, 0x32, 0xed, 0x9d, 0x18, - 0x27, 0xcd, 0xad, 0x49, 0x66, 0x46, 0x91, 0xd9, 0xf8, 0x0a, 0xee, 0x7c, 0x1b, 0x9f, 0xc1, 0x57, - 0xf0, 0x41, 0xa4, 0x49, 0xa7, 0xe8, 0xd0, 0xba, 0x0b, 0xe7, 0x7c, 0x9c, 0xdc, 0x93, 0x9b, 0x60, - 0x67, 0x20, 0x9f, 0x2d, 0x88, 0x4c, 0x52, 0x03, 0x7a, 0x2c, 0x52, 0xa0, 0x46, 0x70, 0xc5, 0x64, - 0x5c, 0x68, 0xb4, 0x48, 0xd6, 0x66, 0x76, 0x5c, 0xd9, 0xe1, 0x36, 0x47, 0xe4, 0x12, 0x28, 0x2b, - 0x04, 0x65, 0x4a, 0xa1, 0x65, 0x56, 0xa0, 0x32, 0x9e, 0x0f, 0xb7, 0xea, 0x38, 0x96, 0xe5, 0x42, - 0xfd, 0x0a, 0x3b, 0x7a, 0x5f, 0x08, 0x56, 0x12, 0x27, 0x24, 0x3e, 0x8c, 0xdc, 0x06, 0xeb, 0x97, - 0x60, 0xaf, 0xf5, 0x85, 0x06, 0x66, 0xc1, 0x7b, 0x64, 0x2f, 0xae, 0x2f, 0x75, 0x21, 0xb1, 0xd7, - 0x7f, 0x80, 0x37, 0xf0, 0x38, 0x02, 0x63, 0xc3, 0xcd, 0x66, 0x32, 0xfa, 0x47, 0x3e, 0x3a, 0xc1, - 0xf2, 0x95, 0x30, 0xd6, 0x0b, 0x86, 0x74, 0x9b, 0xc9, 0x12, 0x99, 0x85, 0x85, 0xed, 0x48, 0x64, - 0x5e, 0x3f, 0xbf, 0xde, 0xfe, 0xe7, 0x64, 0xe8, 0x6a, 0x8f, 0x0f, 0xab, 0x5e, 0x86, 0xbe, 0x4c, - 0x50, 0x0f, 0x07, 0x12, 0x27, 0x3d, 0x78, 0x82, 0x74, 0x54, 0x3e, 0x45, 0x4f, 0x64, 0x65, 0xdf, - 0x07, 0x48, 0xed, 0xb4, 0xcd, 0xcf, 0x30, 0x67, 0x42, 0xb5, 0xda, 0x8a, 0xe5, 0x30, 0x25, 0x32, - 0x58, 0x4a, 0xa0, 0x6a, 0x40, 0x76, 0x9b, 0xa7, 0x4b, 0xa0, 0x9e, 0xbf, 0xfb, 0x07, 0x61, 0x0a, - 0x54, 0x06, 0xa2, 0xd0, 0xd5, 0xd8, 0x88, 0x56, 0xe7, 0x6a, 0x9c, 0x74, 0xf6, 0xcf, 0xcf, 0xee, - 0x4e, 0xb9, 0xb0, 0xf7, 0xa3, 0x7e, 0x9c, 0x62, 0x4e, 0x5d, 0x14, 0x6a, 0xee, 0x0f, 0xb4, 0xde, - 0x2a, 0x07, 0x45, 0x8b, 0xfe, 0x01, 0x47, 0x3a, 0xff, 0x6f, 0xfa, 0x8b, 0x6e, 0xc9, 0xc7, 0xdf, - 0x01, 0x00, 0x00, 0xff, 0xff, 0xa0, 0x03, 0x65, 0xd6, 0x52, 0x02, 0x00, 0x00, + // 356 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x92, 0x41, 0x4b, 0xeb, 0x40, + 0x14, 0x85, 0x5f, 0xca, 0xe3, 0xc1, 0x8b, 0x88, 0x3a, 0x0b, 0x17, 0x51, 0xc1, 0x66, 0xa5, 0x05, + 0x33, 0xa8, 0xbb, 0x82, 0x08, 0x2a, 0x08, 0x22, 0x08, 0x66, 0x21, 0x74, 0x53, 0xa6, 0xc9, 0xed, + 0x38, 0x36, 0x99, 0x1b, 0x33, 0xd3, 0x56, 0x91, 0x6e, 0x04, 0x57, 0x82, 0x1b, 0xb7, 0xfe, 0x2b, + 0x5d, 0xbb, 0xf2, 0x77, 0x88, 0x64, 0xd2, 0x06, 0xad, 0x89, 0x3b, 0x77, 0xe1, 0x9e, 0x2f, 0xe7, + 0xce, 0x39, 0x5c, 0x7b, 0xa5, 0x1b, 0x5d, 0x6b, 0x10, 0x61, 0x44, 0x15, 0xa4, 0x03, 0x11, 0x00, + 0x55, 0x82, 0x4b, 0x16, 0x79, 0x49, 0x8a, 0x1a, 0xc9, 0xfc, 0x44, 0xf6, 0xc6, 0xb2, 0xb3, 0xcc, + 0x11, 0x79, 0x04, 0x94, 0x25, 0x82, 0x32, 0x29, 0x51, 0x33, 0x2d, 0x50, 0xaa, 0x9c, 0x77, 0x96, + 0x0a, 0x3b, 0x16, 0xc6, 0x42, 0x7e, 0x31, 0xdb, 0x7a, 0xfd, 0x6b, 0xcf, 0xfa, 0x66, 0xe0, 0xe7, + 0x66, 0xe4, 0xcc, 0x5e, 0x38, 0x04, 0x7d, 0x92, 0xee, 0xa7, 0xc0, 0x34, 0xe4, 0x1a, 0x59, 0xf3, + 0x8a, 0xa5, 0xc6, 0xc4, 0xcb, 0xe7, 0x9f, 0xc0, 0x53, 0xb8, 0xec, 0x83, 0xd2, 0xce, 0x62, 0x39, + 0xe9, 0xfe, 0x21, 0x2f, 0x35, 0x7b, 0xe6, 0x58, 0x28, 0x9d, 0x0f, 0x14, 0xa9, 0x97, 0x93, 0x19, + 0x32, 0x31, 0x73, 0xaa, 0x11, 0xf7, 0xae, 0x76, 0xfb, 0xfc, 0xf6, 0x58, 0x7b, 0xb7, 0x48, 0xcf, + 0x04, 0x1f, 0x6c, 0x8e, 0x93, 0x29, 0x7a, 0x33, 0xc4, 0xb4, 0xd7, 0x8d, 0x70, 0xd8, 0x86, 0x2b, + 0x08, 0xfa, 0x59, 0x19, 0x6d, 0x11, 0x66, 0x89, 0x2f, 0x20, 0xd0, 0xa3, 0x2a, 0x3d, 0xc4, 0x98, + 0x09, 0x59, 0x29, 0x4b, 0x16, 0xc3, 0xa8, 0xf5, 0x60, 0x91, 0x7b, 0x6b, 0x7a, 0x21, 0xa6, 0xbc, + 0xea, 0x2f, 0x4c, 0xf9, 0xe8, 0x37, 0x1f, 0x44, 0x9e, 0x2c, 0xfb, 0xbf, 0x0f, 0xe3, 0x56, 0xc9, + 0x6a, 0x79, 0x63, 0x3e, 0x14, 0x9d, 0xd6, 0x7f, 0x20, 0x54, 0x82, 0x52, 0x81, 0x7b, 0x64, 0x9a, + 0x3d, 0x70, 0xe7, 0xa6, 0x72, 0x36, 0xad, 0x46, 0xcb, 0x73, 0xd7, 0x4b, 0xd3, 0x8b, 0xd0, 0xfb, + 0x96, 0xbb, 0x69, 0x35, 0xf6, 0x76, 0x5b, 0x3b, 0x5c, 0xe8, 0xf3, 0x7e, 0xc7, 0x0b, 0x30, 0xa6, + 0x66, 0x75, 0xc6, 0x9b, 0x0f, 0x5a, 0x5c, 0x26, 0x07, 0x49, 0x93, 0xce, 0x06, 0x47, 0x3a, 0x7d, + 0xfb, 0x9d, 0x7f, 0xe6, 0x50, 0xb7, 0x3f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x52, 0xf5, 0x8e, 0x13, + 0x16, 0x03, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/flyteidl/gen/pb-go/flyteidl/service/signal.pb.gw.go b/flyteidl/gen/pb-go/flyteidl/service/signal.pb.gw.go index 43397bb36e..e0ba6b6ef4 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/signal.pb.gw.go +++ b/flyteidl/gen/pb-go/flyteidl/service/signal.pb.gw.go @@ -89,6 +89,77 @@ func request_SignalService_ListSignals_0(ctx context.Context, marshaler runtime. } +var ( + filter_SignalService_ListSignals_1 = &utilities.DoubleArray{Encoding: map[string]int{"workflow_execution_id": 0, "org": 1, "project": 2, "domain": 3, "name": 4}, Base: []int{1, 1, 1, 2, 3, 4, 0, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 2, 3, 4, 5, 6}} +) + +func request_SignalService_ListSignals_1(ctx context.Context, marshaler runtime.Marshaler, client SignalServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.SignalListRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["workflow_execution_id.org"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "workflow_execution_id.org") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "workflow_execution_id.org", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "workflow_execution_id.org", err) + } + + val, ok = pathParams["workflow_execution_id.project"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "workflow_execution_id.project") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "workflow_execution_id.project", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "workflow_execution_id.project", err) + } + + val, ok = pathParams["workflow_execution_id.domain"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "workflow_execution_id.domain") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "workflow_execution_id.domain", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "workflow_execution_id.domain", err) + } + + val, ok = pathParams["workflow_execution_id.name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "workflow_execution_id.name") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "workflow_execution_id.name", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "workflow_execution_id.name", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_SignalService_ListSignals_1); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ListSignals(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + func request_SignalService_SetSignal_0(ctx context.Context, marshaler runtime.Marshaler, client SignalServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq admin.SignalSetRequest var metadata runtime.ServerMetadata @@ -106,6 +177,41 @@ func request_SignalService_SetSignal_0(ctx context.Context, marshaler runtime.Ma } +func request_SignalService_SetSignal_1(ctx context.Context, marshaler runtime.Marshaler, client SignalServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq admin.SignalSetRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id.execution_id.org"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id.execution_id.org") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "id.execution_id.org", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id.execution_id.org", err) + } + + msg, err := client.SetSignal(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + // RegisterSignalServiceHandlerFromEndpoint is same as RegisterSignalServiceHandler but // automatically dials to "endpoint" and closes the connection when "ctx" gets done. func RegisterSignalServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { @@ -164,6 +270,26 @@ func RegisterSignalServiceHandlerClient(ctx context.Context, mux *runtime.ServeM }) + mux.Handle("GET", pattern_SignalService_ListSignals_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_SignalService_ListSignals_1(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_SignalService_ListSignals_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("POST", pattern_SignalService_SetSignal_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -184,17 +310,45 @@ func RegisterSignalServiceHandlerClient(ctx context.Context, mux *runtime.ServeM }) + mux.Handle("POST", pattern_SignalService_SetSignal_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_SignalService_SetSignal_1(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_SignalService_SetSignal_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } var ( pattern_SignalService_ListSignals_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"api", "v1", "signals", "workflow_execution_id.project", "workflow_execution_id.domain", "workflow_execution_id.name"}, "")) + pattern_SignalService_ListSignals_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7}, []string{"api", "v1", "signals", "org", "workflow_execution_id.org", "workflow_execution_id.project", "workflow_execution_id.domain", "workflow_execution_id.name"}, "")) + pattern_SignalService_SetSignal_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"api", "v1", "signals"}, "")) + + pattern_SignalService_SetSignal_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"api", "v1", "signals", "org", "id.execution_id.org"}, "")) ) var ( forward_SignalService_ListSignals_0 = runtime.ForwardResponseMessage + forward_SignalService_ListSignals_1 = runtime.ForwardResponseMessage + forward_SignalService_SetSignal_0 = runtime.ForwardResponseMessage + + forward_SignalService_SetSignal_1 = runtime.ForwardResponseMessage ) diff --git a/flyteidl/gen/pb-go/flyteidl/service/signal.swagger.json b/flyteidl/gen/pb-go/flyteidl/service/signal.swagger.json index c5dafce8b2..39b3f3e777 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/signal.swagger.json +++ b/flyteidl/gen/pb-go/flyteidl/service/signal.swagger.json @@ -42,6 +42,128 @@ ] } }, + "/api/v1/signals/org/{id.execution_id.org}": { + "post": { + "summary": "Sets the value on a :ref:`ref_flyteidl.admin.Signal` definition", + "operationId": "SetSignal2", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminSignalSetResponse" + } + } + }, + "parameters": [ + { + "name": "id.execution_id.org", + "description": "Optional, org key applied to the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/adminSignalSetRequest" + } + } + ], + "tags": [ + "SignalService" + ] + } + }, + "/api/v1/signals/org/{workflow_execution_id.org}/{workflow_execution_id.project}/{workflow_execution_id.domain}/{workflow_execution_id.name}": { + "get": { + "summary": "Fetch a list of :ref:`ref_flyteidl.admin.Signal` definitions.", + "operationId": "ListSignals2", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/adminSignalList" + } + } + }, + "parameters": [ + { + "name": "workflow_execution_id.org", + "description": "Optional, org key applied to the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "workflow_execution_id.project", + "description": "Name of the project the resource belongs to.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "workflow_execution_id.domain", + "description": "Name of the domain the resource belongs to.\nA domain can be considered as a subset within a specific project.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "workflow_execution_id.name", + "description": "User or system provided value for the resource.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "limit", + "description": "Indicates the number of resources to be returned.\n+required.", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "token", + "description": "In the case of multiple pages of results, the, server-provided token can be used to fetch the next page\nin a query.\n+optional.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "filters", + "description": "Indicates a list of filters passed as string.\n+optional.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sort_by.key", + "description": "Indicates an attribute to sort the response values.\n+required.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sort_by.direction", + "description": "Indicates the direction to apply sort key for response values.\n+optional.\n\n - DESCENDING: By default, fields are sorted in descending order.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "DESCENDING", + "ASCENDING" + ], + "default": "DESCENDING" + } + ], + "tags": [ + "SignalService" + ] + } + }, "/api/v1/signals/{workflow_execution_id.project}/{workflow_execution_id.domain}/{workflow_execution_id.name}": { "get": { "summary": "Fetch a list of :ref:`ref_flyteidl.admin.Signal` definitions.", diff --git a/flyteidl/gen/pb-java/flyteidl/admin/MatchableResourceOuterClass.java b/flyteidl/gen/pb-java/flyteidl/admin/MatchableResourceOuterClass.java index c359966b35..18a56d8164 100644 --- a/flyteidl/gen/pb-java/flyteidl/admin/MatchableResourceOuterClass.java +++ b/flyteidl/gen/pb-java/flyteidl/admin/MatchableResourceOuterClass.java @@ -11854,6 +11854,24 @@ public interface ListMatchableAttributesRequestOrBuilder extends * .flyteidl.admin.MatchableResource resource_type = 1; */ flyteidl.admin.MatchableResourceOuterClass.MatchableResource getResourceType(); + + /** + *
+     * Optional, org filter applied to list project requests.
+     * 
+ * + * string org = 2; + */ + java.lang.String getOrg(); + /** + *
+     * Optional, org filter applied to list project requests.
+     * 
+ * + * string org = 2; + */ + com.google.protobuf.ByteString + getOrgBytes(); } /** *
@@ -11874,6 +11892,7 @@ private ListMatchableAttributesRequest(com.google.protobuf.GeneratedMessageV3.Bu
     }
     private ListMatchableAttributesRequest() {
       resourceType_ = 0;
+      org_ = "";
     }
 
     @java.lang.Override
@@ -11906,6 +11925,12 @@ private ListMatchableAttributesRequest(
               resourceType_ = rawValue;
               break;
             }
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              org_ = s;
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -11963,6 +11988,48 @@ public flyteidl.admin.MatchableResourceOuterClass.MatchableResource getResourceT
       return result == null ? flyteidl.admin.MatchableResourceOuterClass.MatchableResource.UNRECOGNIZED : result;
     }
 
+    public static final int ORG_FIELD_NUMBER = 2;
+    private volatile java.lang.Object org_;
+    /**
+     * 
+     * Optional, org filter applied to list project requests.
+     * 
+ * + * string org = 2; + */ + public java.lang.String getOrg() { + java.lang.Object ref = org_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + org_ = s; + return s; + } + } + /** + *
+     * Optional, org filter applied to list project requests.
+     * 
+ * + * string org = 2; + */ + public com.google.protobuf.ByteString + getOrgBytes() { + java.lang.Object ref = org_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + org_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -11980,6 +12047,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) if (resourceType_ != flyteidl.admin.MatchableResourceOuterClass.MatchableResource.TASK_RESOURCE.getNumber()) { output.writeEnum(1, resourceType_); } + if (!getOrgBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 2, org_); + } unknownFields.writeTo(output); } @@ -11993,6 +12063,9 @@ public int getSerializedSize() { size += com.google.protobuf.CodedOutputStream .computeEnumSize(1, resourceType_); } + if (!getOrgBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, org_); + } size += unknownFields.getSerializedSize(); memoizedSize = size; return size; @@ -12009,6 +12082,8 @@ public boolean equals(final java.lang.Object obj) { flyteidl.admin.MatchableResourceOuterClass.ListMatchableAttributesRequest other = (flyteidl.admin.MatchableResourceOuterClass.ListMatchableAttributesRequest) obj; if (resourceType_ != other.resourceType_) return false; + if (!getOrg() + .equals(other.getOrg())) return false; if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -12022,6 +12097,8 @@ public int hashCode() { hash = (19 * hash) + getDescriptor().hashCode(); hash = (37 * hash) + RESOURCE_TYPE_FIELD_NUMBER; hash = (53 * hash) + resourceType_; + hash = (37 * hash) + ORG_FIELD_NUMBER; + hash = (53 * hash) + getOrg().hashCode(); hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; @@ -12162,6 +12239,8 @@ public Builder clear() { super.clear(); resourceType_ = 0; + org_ = ""; + return this; } @@ -12189,6 +12268,7 @@ public flyteidl.admin.MatchableResourceOuterClass.ListMatchableAttributesRequest public flyteidl.admin.MatchableResourceOuterClass.ListMatchableAttributesRequest buildPartial() { flyteidl.admin.MatchableResourceOuterClass.ListMatchableAttributesRequest result = new flyteidl.admin.MatchableResourceOuterClass.ListMatchableAttributesRequest(this); result.resourceType_ = resourceType_; + result.org_ = org_; onBuilt(); return result; } @@ -12240,6 +12320,10 @@ public Builder mergeFrom(flyteidl.admin.MatchableResourceOuterClass.ListMatchabl if (other.resourceType_ != 0) { setResourceTypeValue(other.getResourceTypeValue()); } + if (!other.getOrg().isEmpty()) { + org_ = other.org_; + onChanged(); + } this.mergeUnknownFields(other.unknownFields); onChanged(); return this; @@ -12333,6 +12417,95 @@ public Builder clearResourceType() { onChanged(); return this; } + + private java.lang.Object org_ = ""; + /** + *
+       * Optional, org filter applied to list project requests.
+       * 
+ * + * string org = 2; + */ + public java.lang.String getOrg() { + java.lang.Object ref = org_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + org_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * Optional, org filter applied to list project requests.
+       * 
+ * + * string org = 2; + */ + public com.google.protobuf.ByteString + getOrgBytes() { + java.lang.Object ref = org_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + org_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * Optional, org filter applied to list project requests.
+       * 
+ * + * string org = 2; + */ + public Builder setOrg( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + org_ = value; + onChanged(); + return this; + } + /** + *
+       * Optional, org filter applied to list project requests.
+       * 
+ * + * string org = 2; + */ + public Builder clearOrg() { + + org_ = getDefaultInstance().getOrg(); + onChanged(); + return this; + } + /** + *
+       * Optional, org filter applied to list project requests.
+       * 
+ * + * string org = 2; + */ + public Builder setOrgBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + org_ = value; + onChanged(); + return this; + } @java.lang.Override public final Builder setUnknownFields( final com.google.protobuf.UnknownFieldSet unknownFields) { @@ -13304,19 +13477,20 @@ public flyteidl.admin.MatchableResourceOuterClass.ListMatchableAttributesRespons "ributes\030\001 \001(\0132\".flyteidl.admin.MatchingA" + "ttributes\022\016\n\006domain\030\002 \001(\t\022\017\n\007project\030\003 \001" + "(\t\022\020\n\010workflow\030\004 \001(\t\022\023\n\013launch_plan\030\005 \001(" + - "\t\022\013\n\003org\030\006 \001(\t\"Z\n\036ListMatchableAttribute" + + "\t\022\013\n\003org\030\006 \001(\t\"g\n\036ListMatchableAttribute" + "sRequest\0228\n\rresource_type\030\001 \001(\0162!.flytei" + - "dl.admin.MatchableResource\"k\n\037ListMatcha" + - "bleAttributesResponse\022H\n\016configurations\030" + - "\001 \003(\01320.flyteidl.admin.MatchableAttribut" + - "esConfiguration*\340\001\n\021MatchableResource\022\021\n" + - "\rTASK_RESOURCE\020\000\022\024\n\020CLUSTER_RESOURCE\020\001\022\023" + - "\n\017EXECUTION_QUEUE\020\002\022\033\n\027EXECUTION_CLUSTER" + - "_LABEL\020\003\022$\n QUALITY_OF_SERVICE_SPECIFICA" + - "TION\020\004\022\023\n\017PLUGIN_OVERRIDE\020\005\022\035\n\031WORKFLOW_" + - "EXECUTION_CONFIG\020\006\022\026\n\022CLUSTER_ASSIGNMENT" + - "\020\007B=Z;github.com/flyteorg/flyte/flyteidl" + - "/gen/pb-go/flyteidl/adminb\006proto3" + "dl.admin.MatchableResource\022\013\n\003org\030\002 \001(\t\"" + + "k\n\037ListMatchableAttributesResponse\022H\n\016co" + + "nfigurations\030\001 \003(\01320.flyteidl.admin.Matc" + + "hableAttributesConfiguration*\340\001\n\021Matchab" + + "leResource\022\021\n\rTASK_RESOURCE\020\000\022\024\n\020CLUSTER" + + "_RESOURCE\020\001\022\023\n\017EXECUTION_QUEUE\020\002\022\033\n\027EXEC" + + "UTION_CLUSTER_LABEL\020\003\022$\n QUALITY_OF_SERV" + + "ICE_SPECIFICATION\020\004\022\023\n\017PLUGIN_OVERRIDE\020\005" + + "\022\035\n\031WORKFLOW_EXECUTION_CONFIG\020\006\022\026\n\022CLUST" + + "ER_ASSIGNMENT\020\007B=Z;github.com/flyteorg/f" + + "lyte/flyteidl/gen/pb-go/flyteidl/adminb\006" + + "proto3" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { @@ -13406,7 +13580,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors( internal_static_flyteidl_admin_ListMatchableAttributesRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_flyteidl_admin_ListMatchableAttributesRequest_descriptor, - new java.lang.String[] { "ResourceType", }); + new java.lang.String[] { "ResourceType", "Org", }); internal_static_flyteidl_admin_ListMatchableAttributesResponse_descriptor = getDescriptor().getMessageTypes().get(11); internal_static_flyteidl_admin_ListMatchableAttributesResponse_fieldAccessorTable = new diff --git a/flyteidl/gen/pb-java/flyteidl/admin/ProjectOuterClass.java b/flyteidl/gen/pb-java/flyteidl/admin/ProjectOuterClass.java index ccae7fde2c..f00680e1b0 100644 --- a/flyteidl/gen/pb-java/flyteidl/admin/ProjectOuterClass.java +++ b/flyteidl/gen/pb-java/flyteidl/admin/ProjectOuterClass.java @@ -3789,6 +3789,24 @@ public interface ProjectListRequestOrBuilder extends * .flyteidl.admin.Sort sort_by = 4; */ flyteidl.admin.Common.SortOrBuilder getSortByOrBuilder(); + + /** + *
+     * Optional, org filter applied to list project requests.
+     * 
+ * + * string org = 5; + */ + java.lang.String getOrg(); + /** + *
+     * Optional, org filter applied to list project requests.
+     * 
+ * + * string org = 5; + */ + com.google.protobuf.ByteString + getOrgBytes(); } /** *
@@ -3810,6 +3828,7 @@ private ProjectListRequest(com.google.protobuf.GeneratedMessageV3.Builder bui
     private ProjectListRequest() {
       token_ = "";
       filters_ = "";
+      org_ = "";
     }
 
     @java.lang.Override
@@ -3866,6 +3885,12 @@ private ProjectListRequest(
 
               break;
             }
+            case 42: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              org_ = s;
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -4040,6 +4065,48 @@ public flyteidl.admin.Common.SortOrBuilder getSortByOrBuilder() {
       return getSortBy();
     }
 
+    public static final int ORG_FIELD_NUMBER = 5;
+    private volatile java.lang.Object org_;
+    /**
+     * 
+     * Optional, org filter applied to list project requests.
+     * 
+ * + * string org = 5; + */ + public java.lang.String getOrg() { + java.lang.Object ref = org_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + org_ = s; + return s; + } + } + /** + *
+     * Optional, org filter applied to list project requests.
+     * 
+ * + * string org = 5; + */ + public com.google.protobuf.ByteString + getOrgBytes() { + java.lang.Object ref = org_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + org_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -4066,6 +4133,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) if (sortBy_ != null) { output.writeMessage(4, getSortBy()); } + if (!getOrgBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 5, org_); + } unknownFields.writeTo(output); } @@ -4089,6 +4159,9 @@ public int getSerializedSize() { size += com.google.protobuf.CodedOutputStream .computeMessageSize(4, getSortBy()); } + if (!getOrgBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, org_); + } size += unknownFields.getSerializedSize(); memoizedSize = size; return size; @@ -4115,6 +4188,8 @@ public boolean equals(final java.lang.Object obj) { if (!getSortBy() .equals(other.getSortBy())) return false; } + if (!getOrg() + .equals(other.getOrg())) return false; if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -4136,6 +4211,8 @@ public int hashCode() { hash = (37 * hash) + SORT_BY_FIELD_NUMBER; hash = (53 * hash) + getSortBy().hashCode(); } + hash = (37 * hash) + ORG_FIELD_NUMBER; + hash = (53 * hash) + getOrg().hashCode(); hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; @@ -4286,6 +4363,8 @@ public Builder clear() { sortBy_ = null; sortByBuilder_ = null; } + org_ = ""; + return this; } @@ -4320,6 +4399,7 @@ public flyteidl.admin.ProjectOuterClass.ProjectListRequest buildPartial() { } else { result.sortBy_ = sortByBuilder_.build(); } + result.org_ = org_; onBuilt(); return result; } @@ -4382,6 +4462,10 @@ public Builder mergeFrom(flyteidl.admin.ProjectOuterClass.ProjectListRequest oth if (other.hasSortBy()) { mergeSortBy(other.getSortBy()); } + if (!other.getOrg().isEmpty()) { + org_ = other.org_; + onChanged(); + } this.mergeUnknownFields(other.unknownFields); onChanged(); return this; @@ -4811,6 +4895,95 @@ public flyteidl.admin.Common.SortOrBuilder getSortByOrBuilder() { } return sortByBuilder_; } + + private java.lang.Object org_ = ""; + /** + *
+       * Optional, org filter applied to list project requests.
+       * 
+ * + * string org = 5; + */ + public java.lang.String getOrg() { + java.lang.Object ref = org_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + org_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * Optional, org filter applied to list project requests.
+       * 
+ * + * string org = 5; + */ + public com.google.protobuf.ByteString + getOrgBytes() { + java.lang.Object ref = org_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + org_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * Optional, org filter applied to list project requests.
+       * 
+ * + * string org = 5; + */ + public Builder setOrg( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + org_ = value; + onChanged(); + return this; + } + /** + *
+       * Optional, org filter applied to list project requests.
+       * 
+ * + * string org = 5; + */ + public Builder clearOrg() { + + org_ = getDefaultInstance().getOrg(); + onChanged(); + return this; + } + /** + *
+       * Optional, org filter applied to list project requests.
+       * 
+ * + * string org = 5; + */ + public Builder setOrgBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + org_ = value; + onChanged(); + return this; + } @java.lang.Override public final Builder setUnknownFields( final com.google.protobuf.UnknownFieldSet unknownFields) { @@ -6433,14 +6606,15 @@ public flyteidl.admin.ProjectOuterClass.ProjectUpdateResponse getDefaultInstance "\014ProjectState\022\n\n\006ACTIVE\020\000\022\014\n\010ARCHIVED\020\001\022" + "\024\n\020SYSTEM_GENERATED\020\002\"D\n\010Projects\022)\n\010pro" + "jects\030\001 \003(\0132\027.flyteidl.admin.Project\022\r\n\005" + - "token\030\002 \001(\t\"j\n\022ProjectListRequest\022\r\n\005lim" + + "token\030\002 \001(\t\"w\n\022ProjectListRequest\022\r\n\005lim" + "it\030\001 \001(\r\022\r\n\005token\030\002 \001(\t\022\017\n\007filters\030\003 \001(\t" + - "\022%\n\007sort_by\030\004 \001(\0132\024.flyteidl.admin.Sort\"" + - "B\n\026ProjectRegisterRequest\022(\n\007project\030\001 \001" + - "(\0132\027.flyteidl.admin.Project\"\031\n\027ProjectRe" + - "gisterResponse\"\027\n\025ProjectUpdateResponseB" + - "=Z;github.com/flyteorg/flyte/flyteidl/ge" + - "n/pb-go/flyteidl/adminb\006proto3" + "\022%\n\007sort_by\030\004 \001(\0132\024.flyteidl.admin.Sort\022" + + "\013\n\003org\030\005 \001(\t\"B\n\026ProjectRegisterRequest\022(" + + "\n\007project\030\001 \001(\0132\027.flyteidl.admin.Project" + + "\"\031\n\027ProjectRegisterResponse\"\027\n\025ProjectUp" + + "dateResponseB=Z;github.com/flyteorg/flyt" + + "e/flyteidl/gen/pb-go/flyteidl/adminb\006pro" + + "to3" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { @@ -6478,7 +6652,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors( internal_static_flyteidl_admin_ProjectListRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_flyteidl_admin_ProjectListRequest_descriptor, - new java.lang.String[] { "Limit", "Token", "Filters", "SortBy", }); + new java.lang.String[] { "Limit", "Token", "Filters", "SortBy", "Org", }); internal_static_flyteidl_admin_ProjectRegisterRequest_descriptor = getDescriptor().getMessageTypes().get(4); internal_static_flyteidl_admin_ProjectRegisterRequest_fieldAccessorTable = new diff --git a/flyteidl/gen/pb-java/flyteidl/service/Admin.java b/flyteidl/gen/pb-java/flyteidl/service/Admin.java index 5da7b673b4..9de7851811 100644 --- a/flyteidl/gen/pb-java/flyteidl/service/Admin.java +++ b/flyteidl/gen/pb-java/flyteidl/service/Admin.java @@ -38,371 +38,387 @@ public static void registerAllExtensions( "admin/task_execution.proto\032\034flyteidl/adm" + "in/version.proto\032\033flyteidl/admin/common." + "proto\032\'flyteidl/admin/description_entity" + - ".proto2\265q\n\014AdminService\022m\n\nCreateTask\022!." + - "flyteidl.admin.TaskCreateRequest\032\".flyte" + - "idl.admin.TaskCreateResponse\"\030\202\323\344\223\002\022\"\r/a" + - "pi/v1/tasks:\001*\022\330\001\n\007GetTask\022 .flyteidl.ad" + - "min.ObjectGetRequest\032\024.flyteidl.admin.Ta" + - "sk\"\224\001\202\323\344\223\002\215\001\022=/api/v1/tasks/{id.project}" + - "/{id.domain}/{id.name}/{id.version}ZL\022J/" + - "api/v1/tasks/org/{id.org}/{id.project}/{" + - "id.domain}/{id.name}/{id.version}\022\305\001\n\013Li" + - "stTaskIds\0220.flyteidl.admin.NamedEntityId" + - "entifierListRequest\032).flyteidl.admin.Nam" + - "edEntityIdentifierList\"Y\202\323\344\223\002S\022#/api/v1/" + - "task_ids/{project}/{domain}Z,\022*/api/v1/t" + - "asks/org/{org}/{project}/{domain}\022\250\002\n\tLi" + - "stTasks\022#.flyteidl.admin.ResourceListReq" + - "uest\032\030.flyteidl.admin.TaskList\"\333\001\202\323\344\223\002\324\001" + - "\0220/api/v1/tasks/{id.project}/{id.domain}" + - "/{id.name}Z?\022=/api/v1/tasks/org/{id.org}" + - "/{id.project}/{id.domain}/{id.name}Z(\022&/" + - "api/v1/tasks/{id.project}/{id.domain}Z5\022" + - "3/api/v1/tasks/org/{id.org}/{id.project}" + - "/{id.domain}\022}\n\016CreateWorkflow\022%.flyteid" + - "l.admin.WorkflowCreateRequest\032&.flyteidl" + - ".admin.WorkflowCreateResponse\"\034\202\323\344\223\002\026\"\021/" + - "api/v1/workflows:\001*\022\350\001\n\013GetWorkflow\022 .fl" + - "yteidl.admin.ObjectGetRequest\032\030.flyteidl" + - ".admin.Workflow\"\234\001\202\323\344\223\002\225\001\022A/api/v1/workf" + - "lows/{id.project}/{id.domain}/{id.name}/" + - "{id.version}ZP\022N/api/v1/workflows/org/{i" + - "d.org}/{id.project}/{id.domain}/{id.name" + - "}/{id.version}\022\321\001\n\017ListWorkflowIds\0220.fly" + - "teidl.admin.NamedEntityIdentifierListReq" + - "uest\032).flyteidl.admin.NamedEntityIdentif" + - "ierList\"a\202\323\344\223\002[\022\'/api/v1/workflow_ids/{p" + - "roject}/{domain}Z0\022./api/v1/workflows/or" + - "g/{org}/{project}/{domain}\022\300\002\n\rListWorkf" + - "lows\022#.flyteidl.admin.ResourceListReques" + - "t\032\034.flyteidl.admin.WorkflowList\"\353\001\202\323\344\223\002\344" + - "\001\0224/api/v1/workflows/{id.project}/{id.do" + - "main}/{id.name}ZC\022A/api/v1/workflows/org" + - "/{id.org}/{id.project}/{id.domain}/{id.n" + - "ame}Z,\022*/api/v1/workflows/{id.project}/{" + - "id.domain}Z9\0227/api/v1/workflows/org/{id." + - "org}/{id.project}/{id.domain}\022\206\001\n\020Create" + - "LaunchPlan\022\'.flyteidl.admin.LaunchPlanCr" + - "eateRequest\032(.flyteidl.admin.LaunchPlanC" + - "reateResponse\"\037\202\323\344\223\002\031\"\024/api/v1/launch_pl" + - "ans:\001*\022\362\001\n\rGetLaunchPlan\022 .flyteidl.admi" + - "n.ObjectGetRequest\032\032.flyteidl.admin.Laun" + - "chPlan\"\242\001\202\323\344\223\002\233\001\022D/api/v1/launch_plans/{" + + ".proto2\227v\n\014AdminService\022\216\001\n\nCreateTask\022!" + + ".flyteidl.admin.TaskCreateRequest\032\".flyt" + + "eidl.admin.TaskCreateResponse\"9\202\323\344\223\0023\"\r/" + + "api/v1/tasks:\001*Z\037\"\032/api/v1/tasks/org/{id" + + ".org}:\001*\022\330\001\n\007GetTask\022 .flyteidl.admin.Ob" + + "jectGetRequest\032\024.flyteidl.admin.Task\"\224\001\202" + + "\323\344\223\002\215\001\022=/api/v1/tasks/{id.project}/{id.d" + + "omain}/{id.name}/{id.version}ZL\022J/api/v1" + + "/tasks/org/{id.org}/{id.project}/{id.dom" + + "ain}/{id.name}/{id.version}\022\305\001\n\013ListTask" + + "Ids\0220.flyteidl.admin.NamedEntityIdentifi" + + "erListRequest\032).flyteidl.admin.NamedEnti" + + "tyIdentifierList\"Y\202\323\344\223\002S\022#/api/v1/task_i" + + "ds/{project}/{domain}Z,\022*/api/v1/tasks/o" + + "rg/{org}/{project}/{domain}\022\250\002\n\tListTask" + + "s\022#.flyteidl.admin.ResourceListRequest\032\030" + + ".flyteidl.admin.TaskList\"\333\001\202\323\344\223\002\324\001\0220/api" + + "/v1/tasks/{id.project}/{id.domain}/{id.n" + + "ame}Z?\022=/api/v1/tasks/org/{id.org}/{id.p" + + "roject}/{id.domain}/{id.name}Z(\022&/api/v1" + + "/tasks/{id.project}/{id.domain}Z5\0223/api/" + + "v1/tasks/org/{id.org}/{id.project}/{id.d" + + "omain}\022\242\001\n\016CreateWorkflow\022%.flyteidl.adm" + + "in.WorkflowCreateRequest\032&.flyteidl.admi" + + "n.WorkflowCreateResponse\"A\202\323\344\223\002;\"\021/api/v" + + "1/workflows:\001*Z#\"\036/api/v1/workflows/org/" + + "{id.org}:\001*\022\350\001\n\013GetWorkflow\022 .flyteidl.a" + + "dmin.ObjectGetRequest\032\030.flyteidl.admin.W" + + "orkflow\"\234\001\202\323\344\223\002\225\001\022A/api/v1/workflows/{id" + + ".project}/{id.domain}/{id.name}/{id.vers" + + "ion}ZP\022N/api/v1/workflows/org/{id.org}/{" + "id.project}/{id.domain}/{id.name}/{id.ve" + - "rsion}ZS\022Q/api/v1/launch_plans/org/{id.o" + - "rg}/{id.project}/{id.domain}/{id.name}/{" + - "id.version}\022\363\001\n\023GetActiveLaunchPlan\022\'.fl" + - "yteidl.admin.ActiveLaunchPlanRequest\032\032.f" + - "lyteidl.admin.LaunchPlan\"\226\001\202\323\344\223\002\217\001\022>/api" + - "/v1/active_launch_plans/{id.project}/{id" + - ".domain}/{id.name}ZM\022K/api/v1/active_lau" + - "nch_plans/org/{id.org}/{id.project}/{id." + - "domain}/{id.name}\022\234\001\n\025ListActiveLaunchPl" + - "ans\022+.flyteidl.admin.ActiveLaunchPlanLis" + - "tRequest\032\036.flyteidl.admin.LaunchPlanList" + - "\"6\202\323\344\223\0020\022./api/v1/active_launch_plans/{p" + - "roject}/{domain}\022\334\001\n\021ListLaunchPlanIds\0220" + - ".flyteidl.admin.NamedEntityIdentifierLis" + - "tRequest\032).flyteidl.admin.NamedEntityIde" + - "ntifierList\"j\202\323\344\223\002d\022*/api/v1/launch_plan" + - "_ids/{project}/{domain}Z6\0224/api/v1/launc" + - "h_plan_ids/org/{org}/{project}/{domain}\022" + - "\320\002\n\017ListLaunchPlans\022#.flyteidl.admin.Res" + - "ourceListRequest\032\036.flyteidl.admin.Launch" + - "PlanList\"\367\001\202\323\344\223\002\360\001\0227/api/v1/launch_plans" + - "/{id.project}/{id.domain}/{id.name}ZF\022D/" + - "api/v1/launch_plans/org/{id.org}/{id.pro" + - "ject}/{id.domain}/{id.name}Z/\022-/api/v1/l" + - "aunch_plans/{id.project}/{id.domain}Z<\022:" + - "/api/v1/launch_plans/org/{id.org}/{id.pr" + - "oject}/{id.domain}\022\215\002\n\020UpdateLaunchPlan\022" + - "\'.flyteidl.admin.LaunchPlanUpdateRequest" + - "\032(.flyteidl.admin.LaunchPlanUpdateRespon" + - "se\"\245\001\202\323\344\223\002\236\001\032D/api/v1/launch_plans/{id.p" + - "roject}/{id.domain}/{id.name}/{id.versio" + - "n}:\001*ZS\032Q/api/v1/launch_plans/org/{id.or" + - "g}/{id.project}/{id.domain}/{id.name}/{i" + - "d.version}\022\201\001\n\017CreateExecution\022&.flyteid" + - "l.admin.ExecutionCreateRequest\032\'.flyteid" + - "l.admin.ExecutionCreateResponse\"\035\202\323\344\223\002\027\"" + - "\022/api/v1/executions:\001*\022\216\001\n\021RelaunchExecu" + - "tion\022(.flyteidl.admin.ExecutionRelaunchR" + - "equest\032\'.flyteidl.admin.ExecutionCreateR" + - "esponse\"&\202\323\344\223\002 \"\033/api/v1/executions/rela" + - "unch:\001*\022\213\001\n\020RecoverExecution\022\'.flyteidl." + - "admin.ExecutionRecoverRequest\032\'.flyteidl" + - ".admin.ExecutionCreateResponse\"%\202\323\344\223\002\037\"\032" + - "/api/v1/executions/recover:\001*\022\334\001\n\014GetExe" + - "cution\022+.flyteidl.admin.WorkflowExecutio" + - "nGetRequest\032\031.flyteidl.admin.Execution\"\203" + - "\001\202\323\344\223\002}\0225/api/v1/executions/{id.project}" + - "/{id.domain}/{id.name}ZD\022B/api/v1/execut" + - "ions/org/{id.org}/{id.project}/{id.domai" + - "n}/{id.name}\022\357\001\n\017UpdateExecution\022&.flyte" + - "idl.admin.ExecutionUpdateRequest\032\'.flyte" + - "idl.admin.ExecutionUpdateResponse\"\212\001\202\323\344\223" + - "\002\203\001\0325/api/v1/executions/{id.project}/{id" + - ".domain}/{id.name}:\001*ZG\032B/api/v1/executi" + - "ons/org/{id.org}/{id.project}/{id.domain" + - "}/{id.name}:\001*\022\206\002\n\020GetExecutionData\022/.fl" + - "yteidl.admin.WorkflowExecutionGetDataReq" + - "uest\0320.flyteidl.admin.WorkflowExecutionG" + - "etDataResponse\"\216\001\202\323\344\223\002\207\001\022:/api/v1/data/e" + - "xecutions/{id.project}/{id.domain}/{id.n" + - "ame}ZI\022G/api/v1/data/executions/org/{id." + - "org}/{id.project}/{id.domain}/{id.name}\022" + - "\305\001\n\016ListExecutions\022#.flyteidl.admin.Reso" + - "urceListRequest\032\035.flyteidl.admin.Executi" + - "onList\"o\202\323\344\223\002i\022+/api/v1/executions/{id.p" + - "roject}/{id.domain}Z:\0228/api/v1/execution" + - "s/org/{id.org}/{id.project}/{id.domain}\022" + - "\375\001\n\022TerminateExecution\022).flyteidl.admin." + - "ExecutionTerminateRequest\032*.flyteidl.adm" + - "in.ExecutionTerminateResponse\"\217\001\202\323\344\223\002\210\001*" + - "5/api/v1/executions/{id.project}/{id.dom" + - "ain}/{id.name}:\001*ZL*G/api/v1/data/execut" + - "ions/org/{id.org}/{id.project}/{id.domai" + - "n}/{id.name}:\001*\022\342\002\n\020GetNodeExecution\022\'.f" + - "lyteidl.admin.NodeExecutionGetRequest\032\035." + - "flyteidl.admin.NodeExecution\"\205\002\202\323\344\223\002\376\001\022n" + - "/api/v1/node_executions/{id.execution_id" + - ".project}/{id.execution_id.domain}/{id.e" + - "xecution_id.name}/{id.node_id}Z\213\001\022\210\001/api" + - "/v1/node_executions/org/{id.execution_id" + - ".org}/{id.execution_id.project}/{id.exec" + + "rsion}\022\321\001\n\017ListWorkflowIds\0220.flyteidl.ad" + + "min.NamedEntityIdentifierListRequest\032).f" + + "lyteidl.admin.NamedEntityIdentifierList\"" + + "a\202\323\344\223\002[\022\'/api/v1/workflow_ids/{project}/" + + "{domain}Z0\022./api/v1/workflows/org/{org}/" + + "{project}/{domain}\022\300\002\n\rListWorkflows\022#.f" + + "lyteidl.admin.ResourceListRequest\032\034.flyt" + + "eidl.admin.WorkflowList\"\353\001\202\323\344\223\002\344\001\0224/api/" + + "v1/workflows/{id.project}/{id.domain}/{i" + + "d.name}ZC\022A/api/v1/workflows/org/{id.org" + + "}/{id.project}/{id.domain}/{id.name}Z,\022*" + + "/api/v1/workflows/{id.project}/{id.domai" + + "n}Z9\0227/api/v1/workflows/org/{id.org}/{id" + + ".project}/{id.domain}\022\256\001\n\020CreateLaunchPl" + + "an\022\'.flyteidl.admin.LaunchPlanCreateRequ" + + "est\032(.flyteidl.admin.LaunchPlanCreateRes" + + "ponse\"G\202\323\344\223\002A\"\024/api/v1/launch_plans:\001*Z&" + + "\"!/api/v1/launch_plans/org/{id.org}:\001*\022\362" + + "\001\n\rGetLaunchPlan\022 .flyteidl.admin.Object" + + "GetRequest\032\032.flyteidl.admin.LaunchPlan\"\242" + + "\001\202\323\344\223\002\233\001\022D/api/v1/launch_plans/{id.proje" + + "ct}/{id.domain}/{id.name}/{id.version}ZS" + + "\022Q/api/v1/launch_plans/org/{id.org}/{id." + + "project}/{id.domain}/{id.name}/{id.versi" + + "on}\022\363\001\n\023GetActiveLaunchPlan\022\'.flyteidl.a" + + "dmin.ActiveLaunchPlanRequest\032\032.flyteidl." + + "admin.LaunchPlan\"\226\001\202\323\344\223\002\217\001\022>/api/v1/acti" + + "ve_launch_plans/{id.project}/{id.domain}" + + "/{id.name}ZM\022K/api/v1/active_launch_plan" + + "s/org/{id.org}/{id.project}/{id.domain}/" + + "{id.name}\022\330\001\n\025ListActiveLaunchPlans\022+.fl" + + "yteidl.admin.ActiveLaunchPlanListRequest" + + "\032\036.flyteidl.admin.LaunchPlanList\"r\202\323\344\223\002l" + + "\022./api/v1/active_launch_plans/{project}/" + + "{domain}Z:\0228/api/v1/active_launch_plans/" + + "org/{org}/{project}/{domain}\022\334\001\n\021ListLau" + + "nchPlanIds\0220.flyteidl.admin.NamedEntityI" + + "dentifierListRequest\032).flyteidl.admin.Na" + + "medEntityIdentifierList\"j\202\323\344\223\002d\022*/api/v1" + + "/launch_plan_ids/{project}/{domain}Z6\0224/" + + "api/v1/launch_plan_ids/org/{org}/{projec" + + "t}/{domain}\022\320\002\n\017ListLaunchPlans\022#.flytei" + + "dl.admin.ResourceListRequest\032\036.flyteidl." + + "admin.LaunchPlanList\"\367\001\202\323\344\223\002\360\001\0227/api/v1/" + + "launch_plans/{id.project}/{id.domain}/{i" + + "d.name}ZF\022D/api/v1/launch_plans/org/{id." + + "org}/{id.project}/{id.domain}/{id.name}Z" + + "/\022-/api/v1/launch_plans/{id.project}/{id" + + ".domain}Z<\022:/api/v1/launch_plans/org/{id" + + ".org}/{id.project}/{id.domain}\022\215\002\n\020Updat" + + "eLaunchPlan\022\'.flyteidl.admin.LaunchPlanU" + + "pdateRequest\032(.flyteidl.admin.LaunchPlan" + + "UpdateResponse\"\245\001\202\323\344\223\002\236\001\032D/api/v1/launch" + + "_plans/{id.project}/{id.domain}/{id.name" + + "}/{id.version}:\001*ZS\032Q/api/v1/launch_plan" + + "s/org/{id.org}/{id.project}/{id.domain}/" + + "{id.name}/{id.version}\022\244\001\n\017CreateExecuti" + + "on\022&.flyteidl.admin.ExecutionCreateReque" + + "st\032\'.flyteidl.admin.ExecutionCreateRespo" + + "nse\"@\202\323\344\223\002:\"\022/api/v1/executions:\001*Z!\032\034/a" + + "pi/v1/executions/org/{org}:\001*\022\275\001\n\021Relaun" + + "chExecution\022(.flyteidl.admin.ExecutionRe" + + "launchRequest\032\'.flyteidl.admin.Execution" + + "CreateResponse\"U\202\323\344\223\002O\"\033/api/v1/executio" + + "ns/relaunch:\001*Z-\"(/api/v1/executions/org" + + "/{id.org}/relaunch:\001*\022\271\001\n\020RecoverExecuti" + + "on\022\'.flyteidl.admin.ExecutionRecoverRequ" + + "est\032\'.flyteidl.admin.ExecutionCreateResp" + + "onse\"S\202\323\344\223\002M\"\032/api/v1/executions/recover" + + ":\001*Z,\"\'/api/v1/executions/org/{id.org}/r" + + "ecover:\001*\022\334\001\n\014GetExecution\022+.flyteidl.ad" + + "min.WorkflowExecutionGetRequest\032\031.flytei" + + "dl.admin.Execution\"\203\001\202\323\344\223\002}\0225/api/v1/exe" + + "cutions/{id.project}/{id.domain}/{id.nam" + + "e}ZD\022B/api/v1/executions/org/{id.org}/{i" + + "d.project}/{id.domain}/{id.name}\022\357\001\n\017Upd" + + "ateExecution\022&.flyteidl.admin.ExecutionU" + + "pdateRequest\032\'.flyteidl.admin.ExecutionU" + + "pdateResponse\"\212\001\202\323\344\223\002\203\001\0325/api/v1/executi" + + "ons/{id.project}/{id.domain}/{id.name}:\001" + + "*ZG\032B/api/v1/executions/org/{id.org}/{id" + + ".project}/{id.domain}/{id.name}:\001*\022\206\002\n\020G" + + "etExecutionData\022/.flyteidl.admin.Workflo" + + "wExecutionGetDataRequest\0320.flyteidl.admi" + + "n.WorkflowExecutionGetDataResponse\"\216\001\202\323\344" + + "\223\002\207\001\022:/api/v1/data/executions/{id.projec" + + "t}/{id.domain}/{id.name}ZI\022G/api/v1/data" + + "/executions/org/{id.org}/{id.project}/{i" + + "d.domain}/{id.name}\022\305\001\n\016ListExecutions\022#" + + ".flyteidl.admin.ResourceListRequest\032\035.fl" + + "yteidl.admin.ExecutionList\"o\202\323\344\223\002i\022+/api" + + "/v1/executions/{id.project}/{id.domain}Z" + + ":\0228/api/v1/executions/org/{id.org}/{id.p" + + "roject}/{id.domain}\022\370\001\n\022TerminateExecuti" + + "on\022).flyteidl.admin.ExecutionTerminateRe" + + "quest\032*.flyteidl.admin.ExecutionTerminat" + + "eResponse\"\212\001\202\323\344\223\002\203\001*5/api/v1/executions/" + + "{id.project}/{id.domain}/{id.name}:\001*ZG*" + + "B/api/v1/executions/org/{id.org}/{id.pro" + + "ject}/{id.domain}/{id.name}:\001*\022\342\002\n\020GetNo" + + "deExecution\022\'.flyteidl.admin.NodeExecuti" + + "onGetRequest\032\035.flyteidl.admin.NodeExecut" + + "ion\"\205\002\202\323\344\223\002\376\001\022n/api/v1/node_executions/{" + + "id.execution_id.project}/{id.execution_i" + + "d.domain}/{id.execution_id.name}/{id.nod" + + "e_id}Z\213\001\022\210\001/api/v1/node_executions/org/{" + + "id.execution_id.org}/{id.execution_id.pr" + + "oject}/{id.execution_id.domain}/{id.exec" + + "ution_id.name}/{id.node_id}\022\371\002\n\022ListNode" + + "Executions\022(.flyteidl.admin.NodeExecutio" + + "nListRequest\032!.flyteidl.admin.NodeExecut" + + "ionList\"\225\002\202\323\344\223\002\216\002\022s/api/v1/node_executio" + + "ns/{workflow_execution_id.project}/{work" + + "flow_execution_id.domain}/{workflow_exec" + + "ution_id.name}Z\226\001\022\223\001/api/v1/node_executi" + + "ons/org/{workflow_execution_id.org}/{wor" + + "kflow_execution_id.project}/{workflow_ex" + + "ecution_id.domain}/{workflow_execution_i" + + "d.name}\022\217\010\n\031ListNodeExecutionsForTask\022/." + + "flyteidl.admin.NodeExecutionForTaskListR" + + "equest\032!.flyteidl.admin.NodeExecutionLis" + + "t\"\235\007\202\323\344\223\002\226\007\022\251\003/api/v1/children/task_exec" + + "utions/{task_execution_id.node_execution" + + "_id.execution_id.project}/{task_executio" + + "n_id.node_execution_id.execution_id.doma" + + "in}/{task_execution_id.node_execution_id" + + ".execution_id.name}/{task_execution_id.n" + + "ode_execution_id.node_id}/{task_executio" + + "n_id.task_id.project}/{task_execution_id" + + ".task_id.domain}/{task_execution_id.task" + + "_id.name}/{task_execution_id.task_id.ver" + + "sion}/{task_execution_id.retry_attempt}Z" + + "\347\003\022\344\003/api/v1/children/task_executions/or" + + "g/{task_execution_id.node_execution_id.e" + + "xecution_id.org}/{task_execution_id.node" + + "_execution_id.execution_id.project}/{tas" + + "k_execution_id.node_execution_id.executi" + + "on_id.domain}/{task_execution_id.node_ex" + + "ecution_id.execution_id.name}/{task_exec" + + "ution_id.node_execution_id.node_id}/{tas" + + "k_execution_id.task_id.project}/{task_ex" + + "ecution_id.task_id.domain}/{task_executi" + + "on_id.task_id.name}/{task_execution_id.t" + + "ask_id.version}/{task_execution_id.retry" + + "_attempt}\022\203\003\n\024GetNodeExecutionData\022+.fly" + + "teidl.admin.NodeExecutionGetDataRequest\032" + + ",.flyteidl.admin.NodeExecutionGetDataRes" + + "ponse\"\217\002\202\323\344\223\002\210\002\022s/api/v1/data/node_execu" + + "tions/{id.execution_id.project}/{id.exec" + "ution_id.domain}/{id.execution_id.name}/" + - "{id.node_id}\022\371\002\n\022ListNodeExecutions\022(.fl" + - "yteidl.admin.NodeExecutionListRequest\032!." + - "flyteidl.admin.NodeExecutionList\"\225\002\202\323\344\223\002" + - "\216\002\022s/api/v1/node_executions/{workflow_ex" + - "ecution_id.project}/{workflow_execution_" + - "id.domain}/{workflow_execution_id.name}Z" + - "\226\001\022\223\001/api/v1/node_executions/org/{workfl" + - "ow_execution_id.org}/{workflow_execution" + - "_id.project}/{workflow_execution_id.doma" + - "in}/{workflow_execution_id.name}\022\217\010\n\031Lis" + - "tNodeExecutionsForTask\022/.flyteidl.admin." + - "NodeExecutionForTaskListRequest\032!.flytei" + - "dl.admin.NodeExecutionList\"\235\007\202\323\344\223\002\226\007\022\251\003/" + - "api/v1/children/task_executions/{task_ex" + - "ecution_id.node_execution_id.execution_i" + - "d.project}/{task_execution_id.node_execu" + - "tion_id.execution_id.domain}/{task_execu" + - "tion_id.node_execution_id.execution_id.n" + - "ame}/{task_execution_id.node_execution_i" + - "d.node_id}/{task_execution_id.task_id.pr" + - "oject}/{task_execution_id.task_id.domain" + - "}/{task_execution_id.task_id.name}/{task" + - "_execution_id.task_id.version}/{task_exe" + - "cution_id.retry_attempt}Z\347\003\022\344\003/api/v1/ch" + - "ildren/task_executions/org/{task_executi" + - "on_id.node_execution_id.execution_id.org" + - "}/{task_execution_id.node_execution_id.e" + - "xecution_id.project}/{task_execution_id." + - "node_execution_id.execution_id.domain}/{" + - "task_execution_id.node_execution_id.exec" + - "ution_id.name}/{task_execution_id.node_e" + - "xecution_id.node_id}/{task_execution_id." + - "task_id.project}/{task_execution_id.task" + - "_id.domain}/{task_execution_id.task_id.n" + - "ame}/{task_execution_id.task_id.version}" + - "/{task_execution_id.retry_attempt}\022\203\003\n\024G" + - "etNodeExecutionData\022+.flyteidl.admin.Nod" + - "eExecutionGetDataRequest\032,.flyteidl.admi" + - "n.NodeExecutionGetDataResponse\"\217\002\202\323\344\223\002\210\002" + - "\022s/api/v1/data/node_executions/{id.execu" + - "tion_id.project}/{id.execution_id.domain" + - "}/{id.execution_id.name}/{id.node_id}Z\220\001" + - "\022\215\001/api/v1/data/node_executions/org/{id." + - "execution_id.org}/{id.execution_id.proje" + - "ct}/{id.execution_id.domain}/{id.executi" + - "on_id.name}/{id.node_id}\022\177\n\017RegisterProj" + - "ect\022&.flyteidl.admin.ProjectRegisterRequ" + - "est\032\'.flyteidl.admin.ProjectRegisterResp" + - "onse\"\033\202\323\344\223\002\025\"\020/api/v1/projects:\001*\022\227\001\n\rUp" + - "dateProject\022\027.flyteidl.admin.Project\032%.f" + - "lyteidl.admin.ProjectUpdateResponse\"F\202\323\344" + - "\223\002@\032\025/api/v1/projects/{id}:\001*Z$\032\037/api/v1" + - "/projects/org/{org}/{id}:\001*\022f\n\014ListProje" + - "cts\022\".flyteidl.admin.ProjectListRequest\032" + - "\030.flyteidl.admin.Projects\"\030\202\323\344\223\002\022\022\020/api/" + - "v1/projects\022\231\001\n\023CreateWorkflowEvent\022-.fl" + - "yteidl.admin.WorkflowExecutionEventReque" + - "st\032..flyteidl.admin.WorkflowExecutionEve" + - "ntResponse\"#\202\323\344\223\002\035\"\030/api/v1/events/workf" + - "lows:\001*\022\211\001\n\017CreateNodeEvent\022).flyteidl.a" + - "dmin.NodeExecutionEventRequest\032*.flyteid" + - "l.admin.NodeExecutionEventResponse\"\037\202\323\344\223" + - "\002\031\"\024/api/v1/events/nodes:\001*\022\211\001\n\017CreateTa" + - "skEvent\022).flyteidl.admin.TaskExecutionEv" + - "entRequest\032*.flyteidl.admin.TaskExecutio" + - "nEventResponse\"\037\202\323\344\223\002\031\"\024/api/v1/events/t" + - "asks:\001*\022\313\005\n\020GetTaskExecution\022\'.flyteidl." + - "admin.TaskExecutionGetRequest\032\035.flyteidl" + - ".admin.TaskExecution\"\356\004\202\323\344\223\002\347\004\022\231\002/api/v1" + - "/task_executions/{id.node_execution_id.e" + - "xecution_id.project}/{id.node_execution_" + - "id.execution_id.domain}/{id.node_executi" + - "on_id.execution_id.name}/{id.node_execut" + - "ion_id.node_id}/{id.task_id.project}/{id" + - ".task_id.domain}/{id.task_id.name}/{id.t" + - "ask_id.version}/{id.retry_attempt}Z\310\002\022\305\002" + - "/api/v1/task_executions/org/{id.node_exe" + - "cution_id.execution_id.org}/{id.node_exe" + - "cution_id.execution_id.project}/{id.node" + - "_execution_id.execution_id.domain}/{id.n" + - "ode_execution_id.execution_id.name}/{id." + - "node_execution_id.node_id}/{id.task_id.p" + - "roject}/{id.task_id.domain}/{id.task_id." + - "name}/{id.task_id.version}/{id.retry_att" + - "empt}\022\361\003\n\022ListTaskExecutions\022(.flyteidl." + - "admin.TaskExecutionListRequest\032!.flyteid" + - "l.admin.TaskExecutionList\"\215\003\202\323\344\223\002\206\003\022\252\001/a" + - "pi/v1/task_executions/{node_execution_id" + - ".execution_id.project}/{node_execution_i" + - "d.execution_id.domain}/{node_execution_i" + - "d.execution_id.name}/{node_execution_id." + - "node_id}Z\326\001\022\323\001/api/v1/task_executions/or" + - "g/{node_execution_id.execution_id.org}/{" + + "{id.node_id}Z\220\001\022\215\001/api/v1/data/node_exec" + + "utions/org/{id.execution_id.org}/{id.exe" + + "cution_id.project}/{id.execution_id.doma" + + "in}/{id.execution_id.name}/{id.node_id}\022" + + "\250\001\n\017RegisterProject\022&.flyteidl.admin.Pro" + + "jectRegisterRequest\032\'.flyteidl.admin.Pro" + + "jectRegisterResponse\"D\202\323\344\223\002>\"\020/api/v1/pr" + + "ojects:\001*Z\'\"\"/api/v1/projects/org/{proje" + + "ct.org}:\001*\022\227\001\n\rUpdateProject\022\027.flyteidl." + + "admin.Project\032%.flyteidl.admin.ProjectUp" + + "dateResponse\"F\202\323\344\223\002@\032\025/api/v1/projects/{" + + "id}:\001*Z$\032\037/api/v1/projects/org/{org}/{id" + + "}:\001*\022\204\001\n\014ListProjects\022\".flyteidl.admin.P" + + "rojectListRequest\032\030.flyteidl.admin.Proje" + + "cts\"6\202\323\344\223\0020\022\020/api/v1/projectsZ\034\022\032/api/v1" + + "/projects/org/{org}\022\325\001\n\023CreateWorkflowEv" + + "ent\022-.flyteidl.admin.WorkflowExecutionEv" + + "entRequest\032..flyteidl.admin.WorkflowExec" + + "utionEventResponse\"_\202\323\344\223\002Y\"\030/api/v1/even" + + "ts/workflows:\001*Z:\"5/api/v1/events/org/{e" + + "vent.execution_id.org}/workflows:\001*\022\304\001\n\017" + + "CreateNodeEvent\022).flyteidl.admin.NodeExe" + + "cutionEventRequest\032*.flyteidl.admin.Node" + + "ExecutionEventResponse\"Z\202\323\344\223\002T\"\024/api/v1/" + + "events/nodes:\001*Z9\"4/api/v1/events/org/{e" + + "vent.id.execution_id.org}/nodes:\001*\022\332\001\n\017C" + + "reateTaskEvent\022).flyteidl.admin.TaskExec" + + "utionEventRequest\032*.flyteidl.admin.TaskE" + + "xecutionEventResponse\"p\202\323\344\223\002j\"\024/api/v1/e" + + "vents/tasks:\001*ZO\"J/api/v1/events/org/{ev" + + "ent.parent_node_execution_id.execution_i" + + "d.org}/tasks:\001*\022\313\005\n\020GetTaskExecution\022\'.f" + + "lyteidl.admin.TaskExecutionGetRequest\032\035." + + "flyteidl.admin.TaskExecution\"\356\004\202\323\344\223\002\347\004\022\231" + + "\002/api/v1/task_executions/{id.node_execut" + + "ion_id.execution_id.project}/{id.node_ex" + + "ecution_id.execution_id.domain}/{id.node" + + "_execution_id.execution_id.name}/{id.nod" + + "e_execution_id.node_id}/{id.task_id.proj" + + "ect}/{id.task_id.domain}/{id.task_id.nam" + + "e}/{id.task_id.version}/{id.retry_attemp" + + "t}Z\310\002\022\305\002/api/v1/task_executions/org/{id." + + "node_execution_id.execution_id.org}/{id." + "node_execution_id.execution_id.project}/" + - "{node_execution_id.execution_id.domain}/" + - "{node_execution_id.execution_id.name}/{n" + - "ode_execution_id.node_id}\022\354\005\n\024GetTaskExe" + - "cutionData\022+.flyteidl.admin.TaskExecutio" + - "nGetDataRequest\032,.flyteidl.admin.TaskExe" + - "cutionGetDataResponse\"\370\004\202\323\344\223\002\361\004\022\236\002/api/v" + - "1/data/task_executions/{id.node_executio" + - "n_id.execution_id.project}/{id.node_exec" + - "ution_id.execution_id.domain}/{id.node_e" + - "xecution_id.execution_id.name}/{id.node_" + - "execution_id.node_id}/{id.task_id.projec" + - "t}/{id.task_id.domain}/{id.task_id.name}" + - "/{id.task_id.version}/{id.retry_attempt}" + - "Z\315\002\022\312\002/api/v1/data/task_executions/org/{" + - "id.node_execution_id.execution_id.org}/{" + - "id.node_execution_id.execution_id.projec" + - "t}/{id.node_execution_id.execution_id.do" + - "main}/{id.node_execution_id.execution_id" + - ".name}/{id.node_execution_id.node_id}/{i" + - "d.task_id.project}/{id.task_id.domain}/{" + - "id.task_id.name}/{id.task_id.version}/{i" + - "d.retry_attempt}\022\313\002\n\035UpdateProjectDomain" + - "Attributes\0224.flyteidl.admin.ProjectDomai" + - "nAttributesUpdateRequest\0325.flyteidl.admi" + - "n.ProjectDomainAttributesUpdateResponse\"" + - "\274\001\202\323\344\223\002\265\001\032J/api/v1/project_domain_attrib" + - "utes/{attributes.project}/{attributes.do" + - "main}:\001*Zd\032_/api/v1/project_domain_attri" + - "butes/org/{attributes.org}/{attributes.p" + - "roject}/{attributes.domain}:\001*\022\203\002\n\032GetPr" + - "ojectDomainAttributes\0221.flyteidl.admin.P" + - "rojectDomainAttributesGetRequest\0322.flyte" + - "idl.admin.ProjectDomainAttributesGetResp" + - "onse\"~\202\323\344\223\002x\0224/api/v1/project_domain_att" + - "ributes/{project}/{domain}Z@\022>/api/v1/pr" + - "oject_domain_attributes/org/{org}/{proje" + - "ct}/{domain}\022\223\002\n\035DeleteProjectDomainAttr" + - "ibutes\0224.flyteidl.admin.ProjectDomainAtt" + - "ributesDeleteRequest\0325.flyteidl.admin.Pr" + - "ojectDomainAttributesDeleteResponse\"\204\001\202\323" + - "\344\223\002~*4/api/v1/project_domain_attributes/" + - "{project}/{domain}:\001*ZC*>/api/v1/project" + - "_domain_attributes/org/{org}/{project}/{" + - "domain}:\001*\022\212\002\n\027UpdateProjectAttributes\022." + - ".flyteidl.admin.ProjectAttributesUpdateR" + - "equest\032/.flyteidl.admin.ProjectAttribute" + - "sUpdateResponse\"\215\001\202\323\344\223\002\206\001\032//api/v1/proje" + - "ct_attributes/{attributes.project}:\001*ZP\032" + - "K/api/v1/project_domain_attributes/org/{" + - "attributes.org}/{attributes.project}:\001*\022" + - "\330\001\n\024GetProjectAttributes\022+.flyteidl.admi" + - "n.ProjectAttributesGetRequest\032,.flyteidl" + - ".admin.ProjectAttributesGetResponse\"e\202\323\344" + - "\223\002_\022$/api/v1/project_attributes/{project" + - "}Z7\0225/api/v1/project_domain_attributes/o" + - "rg/{org}/{project}\022\347\001\n\027DeleteProjectAttr" + + "{id.node_execution_id.execution_id.domai" + + "n}/{id.node_execution_id.execution_id.na" + + "me}/{id.node_execution_id.node_id}/{id.t" + + "ask_id.project}/{id.task_id.domain}/{id." + + "task_id.name}/{id.task_id.version}/{id.r" + + "etry_attempt}\022\361\003\n\022ListTaskExecutions\022(.f" + + "lyteidl.admin.TaskExecutionListRequest\032!" + + ".flyteidl.admin.TaskExecutionList\"\215\003\202\323\344\223" + + "\002\206\003\022\252\001/api/v1/task_executions/{node_exec" + + "ution_id.execution_id.project}/{node_exe" + + "cution_id.execution_id.domain}/{node_exe" + + "cution_id.execution_id.name}/{node_execu" + + "tion_id.node_id}Z\326\001\022\323\001/api/v1/task_execu" + + "tions/org/{node_execution_id.execution_i" + + "d.org}/{node_execution_id.execution_id.p" + + "roject}/{node_execution_id.execution_id." + + "domain}/{node_execution_id.execution_id." + + "name}/{node_execution_id.node_id}\022\354\005\n\024Ge" + + "tTaskExecutionData\022+.flyteidl.admin.Task" + + "ExecutionGetDataRequest\032,.flyteidl.admin" + + ".TaskExecutionGetDataResponse\"\370\004\202\323\344\223\002\361\004\022" + + "\236\002/api/v1/data/task_executions/{id.node_" + + "execution_id.execution_id.project}/{id.n" + + "ode_execution_id.execution_id.domain}/{i" + + "d.node_execution_id.execution_id.name}/{" + + "id.node_execution_id.node_id}/{id.task_i" + + "d.project}/{id.task_id.domain}/{id.task_" + + "id.name}/{id.task_id.version}/{id.retry_" + + "attempt}Z\315\002\022\312\002/api/v1/data/task_executio" + + "ns/org/{id.node_execution_id.execution_i" + + "d.org}/{id.node_execution_id.execution_i" + + "d.project}/{id.node_execution_id.executi" + + "on_id.domain}/{id.node_execution_id.exec" + + "ution_id.name}/{id.node_execution_id.nod" + + "e_id}/{id.task_id.project}/{id.task_id.d" + + "omain}/{id.task_id.name}/{id.task_id.ver" + + "sion}/{id.retry_attempt}\022\313\002\n\035UpdateProje" + + "ctDomainAttributes\0224.flyteidl.admin.Proj" + + "ectDomainAttributesUpdateRequest\0325.flyte" + + "idl.admin.ProjectDomainAttributesUpdateR" + + "esponse\"\274\001\202\323\344\223\002\265\001\032J/api/v1/project_domai" + + "n_attributes/{attributes.project}/{attri" + + "butes.domain}:\001*Zd\032_/api/v1/project_doma" + + "in_attributes/org/{attributes.org}/{attr" + + "ibutes.project}/{attributes.domain}:\001*\022\203" + + "\002\n\032GetProjectDomainAttributes\0221.flyteidl" + + ".admin.ProjectDomainAttributesGetRequest" + + "\0322.flyteidl.admin.ProjectDomainAttribute" + + "sGetResponse\"~\202\323\344\223\002x\0224/api/v1/project_do" + + "main_attributes/{project}/{domain}Z@\022>/a" + + "pi/v1/project_domain_attributes/org/{org" + + "}/{project}/{domain}\022\223\002\n\035DeleteProjectDo" + + "mainAttributes\0224.flyteidl.admin.ProjectD" + + "omainAttributesDeleteRequest\0325.flyteidl." + + "admin.ProjectDomainAttributesDeleteRespo" + + "nse\"\204\001\202\323\344\223\002~*4/api/v1/project_domain_att" + + "ributes/{project}/{domain}:\001*ZC*>/api/v1" + + "/project_domain_attributes/org/{org}/{pr" + + "oject}/{domain}:\001*\022\212\002\n\027UpdateProjectAttr" + "ibutes\022..flyteidl.admin.ProjectAttribute" + - "sDeleteRequest\032/.flyteidl.admin.ProjectA" + - "ttributesDeleteResponse\"k\202\323\344\223\002e*$/api/v1" + - "/project_attributes/{project}:\001*Z:*5/api" + - "/v1/project_domain_attributes/org/{org}/" + - "{project}:\001*\022\334\002\n\030UpdateWorkflowAttribute" + - "s\022/.flyteidl.admin.WorkflowAttributesUpd" + - "ateRequest\0320.flyteidl.admin.WorkflowAttr" + - "ibutesUpdateResponse\"\334\001\202\323\344\223\002\325\001\032Z/api/v1/" + - "workflow_attributes/{attributes.project}" + - "/{attributes.domain}/{attributes.workflo" + - "w}:\001*Zt\032o/api/v1/workflow_attributes/org" + - "/{attributes.org}/{attributes.project}/{" + - "attributes.domain}/{attributes.workflow}" + - ":\001*\022\200\002\n\025GetWorkflowAttributes\022,.flyteidl" + - ".admin.WorkflowAttributesGetRequest\032-.fl" + - "yteidl.admin.WorkflowAttributesGetRespon" + - "se\"\211\001\202\323\344\223\002\202\001\0229/api/v1/workflow_attribute" + - "s/{project}/{domain}/{workflow}ZE\022C/api/" + - "v1/workflow_attributes/org/{org}/{projec" + - "t}/{domain}/{workflow}\022\217\002\n\030DeleteWorkflo" + - "wAttributes\022/.flyteidl.admin.WorkflowAtt" + - "ributesDeleteRequest\0320.flyteidl.admin.Wo" + - "rkflowAttributesDeleteResponse\"\217\001\202\323\344\223\002\210\001" + - "*9/api/v1/workflow_attributes/{project}/" + - "{domain}/{workflow}:\001*ZH*C/api/v1/workfl" + - "ow_attributes/org/{org}/{project}/{domai" + - "n}/{workflow}:\001*\022\240\001\n\027ListMatchableAttrib" + - "utes\022..flyteidl.admin.ListMatchableAttri" + - "butesRequest\032/.flyteidl.admin.ListMatcha" + - "bleAttributesResponse\"$\202\323\344\223\002\036\022\034/api/v1/m" + - "atchable_attributes\022\350\001\n\021ListNamedEntitie" + - "s\022&.flyteidl.admin.NamedEntityListReques" + - "t\032\037.flyteidl.admin.NamedEntityList\"\211\001\202\323\344" + - "\223\002\202\001\0229/api/v1/named_entities/{resource_t" + - "ype}/{project}/{domain}ZE\022C/api/v1/named" + - "_entities/{resource_type}/org/{org}/{pro" + - "ject}/{domain}\022\203\002\n\016GetNamedEntity\022%.flyt" + - "eidl.admin.NamedEntityGetRequest\032\033.flyte" + - "idl.admin.NamedEntity\"\254\001\202\323\344\223\002\245\001\022I/api/v1" + - "/named_entities/{resource_type}/{id.proj" + - "ect}/{id.domain}/{id.name}ZX\022V/api/v1/na" + - "med_entities/{resource_type}/org/{id.org" + - "}/{id.project}/{id.domain}/{id.name}\022\235\002\n" + - "\021UpdateNamedEntity\022(.flyteidl.admin.Name" + - "dEntityUpdateRequest\032).flyteidl.admin.Na" + - "medEntityUpdateResponse\"\262\001\202\323\344\223\002\253\001\032I/api/" + - "v1/named_entities/{resource_type}/{id.pr" + - "oject}/{id.domain}/{id.name}:\001*Z[\032V/api/" + - "v1/named_entities/{resource_type}/org/{i" + - "d.org}/{id.project}/{id.domain}/{id.name" + - "}:\001*\022l\n\nGetVersion\022!.flyteidl.admin.GetV" + - "ersionRequest\032\".flyteidl.admin.GetVersio" + - "nResponse\"\027\202\323\344\223\002\021\022\017/api/v1/version\022\266\002\n\024G" + - "etDescriptionEntity\022 .flyteidl.admin.Obj" + - "ectGetRequest\032!.flyteidl.admin.Descripti" + - "onEntity\"\330\001\202\323\344\223\002\321\001\022_/api/v1/description_" + - "entities/{id.resource_type}/{id.project}" + - "/{id.domain}/{id.name}/{id.version}Zn\022l/" + - "api/v1/description_entities/org/{id.org}" + - "/{id.resource_type}/{id.project}/{id.dom" + - "ain}/{id.name}/{id.version}\022\310\003\n\027ListDesc" + - "riptionEntities\022,.flyteidl.admin.Descrip" + - "tionEntityListRequest\032%.flyteidl.admin.D" + - "escriptionEntityList\"\327\002\202\323\344\223\002\320\002\022O/api/v1/" + - "description_entities/{resource_type}/{id" + - ".project}/{id.domain}/{id.name}Z^\022\\/api/" + - "v1/description_entities/{resource_type}/" + - "org/{id.org}/{id.project}/{id.domain}/{i" + - "d.name}ZG\022E/api/v1/description_entities/" + - "{resource_type}/{id.project}/{id.domain}" + - "ZT\022R/api/v1/description_entities/{resour" + - "ce_type}/org/{id.org}/{id.project}/{id.d" + - "omain}\022\225\002\n\023GetExecutionMetrics\0222.flyteid" + - "l.admin.WorkflowExecutionGetMetricsReque" + - "st\0323.flyteidl.admin.WorkflowExecutionGet" + - "MetricsResponse\"\224\001\202\323\344\223\002\215\001\022=/api/v1/metri" + - "cs/executions/{id.project}/{id.domain}/{" + - "id.name}ZL\022J/api/v1/metrics/executions/o" + + "sUpdateRequest\032/.flyteidl.admin.ProjectA" + + "ttributesUpdateResponse\"\215\001\202\323\344\223\002\206\001\032//api/" + + "v1/project_attributes/{attributes.projec" + + "t}:\001*ZP\032K/api/v1/project_domain_attribut" + + "es/org/{attributes.org}/{attributes.proj" + + "ect}:\001*\022\330\001\n\024GetProjectAttributes\022+.flyte" + + "idl.admin.ProjectAttributesGetRequest\032,." + + "flyteidl.admin.ProjectAttributesGetRespo" + + "nse\"e\202\323\344\223\002_\022$/api/v1/project_attributes/" + + "{project}Z7\0225/api/v1/project_domain_attr" + + "ibutes/org/{org}/{project}\022\347\001\n\027DeletePro" + + "jectAttributes\022..flyteidl.admin.ProjectA" + + "ttributesDeleteRequest\032/.flyteidl.admin." + + "ProjectAttributesDeleteResponse\"k\202\323\344\223\002e*" + + "$/api/v1/project_attributes/{project}:\001*" + + "Z:*5/api/v1/project_domain_attributes/or" + + "g/{org}/{project}:\001*\022\334\002\n\030UpdateWorkflowA" + + "ttributes\022/.flyteidl.admin.WorkflowAttri" + + "butesUpdateRequest\0320.flyteidl.admin.Work" + + "flowAttributesUpdateResponse\"\334\001\202\323\344\223\002\325\001\032Z" + + "/api/v1/workflow_attributes/{attributes." + + "project}/{attributes.domain}/{attributes" + + ".workflow}:\001*Zt\032o/api/v1/workflow_attrib" + + "utes/org/{attributes.org}/{attributes.pr" + + "oject}/{attributes.domain}/{attributes.w" + + "orkflow}:\001*\022\200\002\n\025GetWorkflowAttributes\022,." + + "flyteidl.admin.WorkflowAttributesGetRequ" + + "est\032-.flyteidl.admin.WorkflowAttributesG" + + "etResponse\"\211\001\202\323\344\223\002\202\001\0229/api/v1/workflow_a" + + "ttributes/{project}/{domain}/{workflow}Z" + + "E\022C/api/v1/workflow_attributes/org/{org}" + + "/{project}/{domain}/{workflow}\022\217\002\n\030Delet" + + "eWorkflowAttributes\022/.flyteidl.admin.Wor" + + "kflowAttributesDeleteRequest\0320.flyteidl." + + "admin.WorkflowAttributesDeleteResponse\"\217" + + "\001\202\323\344\223\002\210\001*9/api/v1/workflow_attributes/{p" + + "roject}/{domain}/{workflow}:\001*ZH*C/api/v" + + "1/workflow_attributes/org/{org}/{project" + + "}/{domain}/{workflow}:\001*\022\312\001\n\027ListMatchab" + + "leAttributes\022..flyteidl.admin.ListMatcha" + + "bleAttributesRequest\032/.flyteidl.admin.Li" + + "stMatchableAttributesResponse\"N\202\323\344\223\002H\022\034/" + + "api/v1/matchable_attributesZ(\022&/api/v1/m" + + "atchable_attributes/org/{org}\022\350\001\n\021ListNa" + + "medEntities\022&.flyteidl.admin.NamedEntity" + + "ListRequest\032\037.flyteidl.admin.NamedEntity" + + "List\"\211\001\202\323\344\223\002\202\001\0229/api/v1/named_entities/{" + + "resource_type}/{project}/{domain}ZE\022C/ap" + + "i/v1/named_entities/{resource_type}/org/" + + "{org}/{project}/{domain}\022\203\002\n\016GetNamedEnt" + + "ity\022%.flyteidl.admin.NamedEntityGetReque" + + "st\032\033.flyteidl.admin.NamedEntity\"\254\001\202\323\344\223\002\245" + + "\001\022I/api/v1/named_entities/{resource_type" + + "}/{id.project}/{id.domain}/{id.name}ZX\022V" + + "/api/v1/named_entities/{resource_type}/o" + "rg/{id.org}/{id.project}/{id.domain}/{id" + - ".name}B?Z=github.com/flyteorg/flyte/flyt" + - "eidl/gen/pb-go/flyteidl/serviceb\006proto3" + ".name}\022\235\002\n\021UpdateNamedEntity\022(.flyteidl." + + "admin.NamedEntityUpdateRequest\032).flyteid" + + "l.admin.NamedEntityUpdateResponse\"\262\001\202\323\344\223" + + "\002\253\001\032I/api/v1/named_entities/{resource_ty" + + "pe}/{id.project}/{id.domain}/{id.name}:\001" + + "*Z[\032V/api/v1/named_entities/{resource_ty" + + "pe}/org/{id.org}/{id.project}/{id.domain" + + "}/{id.name}:\001*\022l\n\nGetVersion\022!.flyteidl." + + "admin.GetVersionRequest\032\".flyteidl.admin" + + ".GetVersionResponse\"\027\202\323\344\223\002\021\022\017/api/v1/ver" + + "sion\022\266\002\n\024GetDescriptionEntity\022 .flyteidl" + + ".admin.ObjectGetRequest\032!.flyteidl.admin" + + ".DescriptionEntity\"\330\001\202\323\344\223\002\321\001\022_/api/v1/de" + + "scription_entities/{id.resource_type}/{i" + + "d.project}/{id.domain}/{id.name}/{id.ver" + + "sion}Zn\022l/api/v1/description_entities/or" + + "g/{id.org}/{id.resource_type}/{id.projec" + + "t}/{id.domain}/{id.name}/{id.version}\022\310\003" + + "\n\027ListDescriptionEntities\022,.flyteidl.adm" + + "in.DescriptionEntityListRequest\032%.flytei" + + "dl.admin.DescriptionEntityList\"\327\002\202\323\344\223\002\320\002" + + "\022O/api/v1/description_entities/{resource" + + "_type}/{id.project}/{id.domain}/{id.name" + + "}Z^\022\\/api/v1/description_entities/{resou" + + "rce_type}/org/{id.org}/{id.project}/{id." + + "domain}/{id.name}ZG\022E/api/v1/description" + + "_entities/{resource_type}/{id.project}/{" + + "id.domain}ZT\022R/api/v1/description_entiti" + + "es/{resource_type}/org/{id.org}/{id.proj" + + "ect}/{id.domain}\022\225\002\n\023GetExecutionMetrics" + + "\0222.flyteidl.admin.WorkflowExecutionGetMe" + + "tricsRequest\0323.flyteidl.admin.WorkflowEx" + + "ecutionGetMetricsResponse\"\224\001\202\323\344\223\002\215\001\022=/ap" + + "i/v1/metrics/executions/{id.project}/{id" + + ".domain}/{id.name}ZL\022J/api/v1/metrics/ex" + + "ecutions/org/{id.org}/{id.project}/{id.d" + + "omain}/{id.name}B?Z=github.com/flyteorg/" + + "flyte/flyteidl/gen/pb-go/flyteidl/servic" + + "eb\006proto3" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { diff --git a/flyteidl/gen/pb-java/flyteidl/service/Signal.java b/flyteidl/gen/pb-java/flyteidl/service/Signal.java index bf83c2a8b0..46fcf38caa 100644 --- a/flyteidl/gen/pb-java/flyteidl/service/Signal.java +++ b/flyteidl/gen/pb-java/flyteidl/service/Signal.java @@ -25,19 +25,24 @@ public static void registerAllExtensions( java.lang.String[] descriptorData = { "\n\035flyteidl/service/signal.proto\022\020flyteid" + "l.service\032\034google/api/annotations.proto\032" + - "\033flyteidl/admin/signal.proto2\232\003\n\rSignalS" + + "\033flyteidl/admin/signal.proto2\336\004\n\rSignalS" + "ervice\022W\n\021GetOrCreateSignal\022(.flyteidl.a" + "dmin.SignalGetOrCreateRequest\032\026.flyteidl" + - ".admin.Signal\"\000\022\301\001\n\013ListSignals\022!.flytei" + + ".admin.Signal\"\000\022\324\002\n\013ListSignals\022!.flytei" + "dl.admin.SignalListRequest\032\032.flyteidl.ad" + - "min.SignalList\"s\202\323\344\223\002m\022k/api/v1/signals/" + - "{workflow_execution_id.project}/{workflo" + - "w_execution_id.domain}/{workflow_executi" + - "on_id.name}\022l\n\tSetSignal\022 .flyteidl.admi" + - "n.SignalSetRequest\032!.flyteidl.admin.Sign" + - "alSetResponse\"\032\202\323\344\223\002\024\"\017/api/v1/signals:\001" + - "*B?Z=github.com/flyteorg/flyte/flyteidl/" + - "gen/pb-go/flyteidl/serviceb\006proto3" + "min.SignalList\"\205\002\202\323\344\223\002\376\001\022k/api/v1/signal" + + "s/{workflow_execution_id.project}/{workf" + + "low_execution_id.domain}/{workflow_execu" + + "tion_id.name}Z\216\001\022\213\001/api/v1/signals/org/{" + + "workflow_execution_id.org}/{workflow_exe" + + "cution_id.project}/{workflow_execution_i" + + "d.domain}/{workflow_execution_id.name}\022\234" + + "\001\n\tSetSignal\022 .flyteidl.admin.SignalSetR" + + "equest\032!.flyteidl.admin.SignalSetRespons" + + "e\"J\202\323\344\223\002D\"\017/api/v1/signals:\001*Z.\")/api/v1" + + "/signals/org/{id.execution_id.org}:\001*B?Z" + + "=github.com/flyteorg/flyte/flyteidl/gen/" + + "pb-go/flyteidl/serviceb\006proto3" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { diff --git a/flyteidl/gen/pb-js/flyteidl.d.ts b/flyteidl/gen/pb-js/flyteidl.d.ts index c9e22a70ca..8d9f8ed346 100644 --- a/flyteidl/gen/pb-js/flyteidl.d.ts +++ b/flyteidl/gen/pb-js/flyteidl.d.ts @@ -15482,6 +15482,9 @@ export namespace flyteidl { /** ListMatchableAttributesRequest resourceType */ resourceType?: (flyteidl.admin.MatchableResource|null); + + /** ListMatchableAttributesRequest org */ + org?: (string|null); } /** Represents a ListMatchableAttributesRequest. */ @@ -15496,6 +15499,9 @@ export namespace flyteidl { /** ListMatchableAttributesRequest resourceType. */ public resourceType: flyteidl.admin.MatchableResource; + /** ListMatchableAttributesRequest org. */ + public org: string; + /** * Creates a new ListMatchableAttributesRequest instance using the specified properties. * @param [properties] Properties to set @@ -16731,6 +16737,9 @@ export namespace flyteidl { /** ProjectListRequest sortBy */ sortBy?: (flyteidl.admin.ISort|null); + + /** ProjectListRequest org */ + org?: (string|null); } /** Represents a ProjectListRequest. */ @@ -16754,6 +16763,9 @@ export namespace flyteidl { /** ProjectListRequest sortBy. */ public sortBy?: (flyteidl.admin.ISort|null); + /** ProjectListRequest org. */ + public org: string; + /** * Creates a new ProjectListRequest instance using the specified properties. * @param [properties] Properties to set diff --git a/flyteidl/gen/pb-js/flyteidl.js b/flyteidl/gen/pb-js/flyteidl.js index 971e6450a2..3de32e71c4 100644 --- a/flyteidl/gen/pb-js/flyteidl.js +++ b/flyteidl/gen/pb-js/flyteidl.js @@ -37423,6 +37423,7 @@ * @memberof flyteidl.admin * @interface IListMatchableAttributesRequest * @property {flyteidl.admin.MatchableResource|null} [resourceType] ListMatchableAttributesRequest resourceType + * @property {string|null} [org] ListMatchableAttributesRequest org */ /** @@ -37448,6 +37449,14 @@ */ ListMatchableAttributesRequest.prototype.resourceType = 0; + /** + * ListMatchableAttributesRequest org. + * @member {string} org + * @memberof flyteidl.admin.ListMatchableAttributesRequest + * @instance + */ + ListMatchableAttributesRequest.prototype.org = ""; + /** * Creates a new ListMatchableAttributesRequest instance using the specified properties. * @function create @@ -37474,6 +37483,8 @@ writer = $Writer.create(); if (message.resourceType != null && message.hasOwnProperty("resourceType")) writer.uint32(/* id 1, wireType 0 =*/8).int32(message.resourceType); + if (message.org != null && message.hasOwnProperty("org")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.org); return writer; }; @@ -37498,6 +37509,9 @@ case 1: message.resourceType = reader.int32(); break; + case 2: + message.org = reader.string(); + break; default: reader.skipType(tag & 7); break; @@ -37531,6 +37545,9 @@ case 7: break; } + if (message.org != null && message.hasOwnProperty("org")) + if (!$util.isString(message.org)) + return "org: string expected"; return null; }; @@ -40430,6 +40447,7 @@ * @property {string|null} [token] ProjectListRequest token * @property {string|null} [filters] ProjectListRequest filters * @property {flyteidl.admin.ISort|null} [sortBy] ProjectListRequest sortBy + * @property {string|null} [org] ProjectListRequest org */ /** @@ -40479,6 +40497,14 @@ */ ProjectListRequest.prototype.sortBy = null; + /** + * ProjectListRequest org. + * @member {string} org + * @memberof flyteidl.admin.ProjectListRequest + * @instance + */ + ProjectListRequest.prototype.org = ""; + /** * Creates a new ProjectListRequest instance using the specified properties. * @function create @@ -40511,6 +40537,8 @@ writer.uint32(/* id 3, wireType 2 =*/26).string(message.filters); if (message.sortBy != null && message.hasOwnProperty("sortBy")) $root.flyteidl.admin.Sort.encode(message.sortBy, writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim(); + if (message.org != null && message.hasOwnProperty("org")) + writer.uint32(/* id 5, wireType 2 =*/42).string(message.org); return writer; }; @@ -40544,6 +40572,9 @@ case 4: message.sortBy = $root.flyteidl.admin.Sort.decode(reader, reader.uint32()); break; + case 5: + message.org = reader.string(); + break; default: reader.skipType(tag & 7); break; @@ -40577,6 +40608,9 @@ if (error) return "sortBy." + error; } + if (message.org != null && message.hasOwnProperty("org")) + if (!$util.isString(message.org)) + return "org: string expected"; return null; }; diff --git a/flyteidl/gen/pb_python/flyteidl/admin/matchable_resource_pb2.py b/flyteidl/gen/pb_python/flyteidl/admin/matchable_resource_pb2.py index f95811b646..94748a4932 100644 --- a/flyteidl/gen/pb_python/flyteidl/admin/matchable_resource_pb2.py +++ b/flyteidl/gen/pb_python/flyteidl/admin/matchable_resource_pb2.py @@ -18,7 +18,7 @@ from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\'flyteidl/admin/matchable_resource.proto\x12\x0e\x66lyteidl.admin\x1a\x1b\x66lyteidl/admin/common.proto\x1a\'flyteidl/admin/cluster_assignment.proto\x1a\x1d\x66lyteidl/core/execution.proto\x1a\x1c\x66lyteidl/core/security.proto\x1a\x1egoogle/protobuf/wrappers.proto\"\x95\x01\n\x10TaskResourceSpec\x12\x10\n\x03\x63pu\x18\x01 \x01(\tR\x03\x63pu\x12\x10\n\x03gpu\x18\x02 \x01(\tR\x03gpu\x12\x16\n\x06memory\x18\x03 \x01(\tR\x06memory\x12\x18\n\x07storage\x18\x04 \x01(\tR\x07storage\x12+\n\x11\x65phemeral_storage\x18\x05 \x01(\tR\x10\x65phemeralStorage\"\x90\x01\n\x16TaskResourceAttributes\x12<\n\x08\x64\x65\x66\x61ults\x18\x01 \x01(\x0b\x32 .flyteidl.admin.TaskResourceSpecR\x08\x64\x65\x66\x61ults\x12\x38\n\x06limits\x18\x02 \x01(\x0b\x32 .flyteidl.admin.TaskResourceSpecR\x06limits\"\xb5\x01\n\x19\x43lusterResourceAttributes\x12Y\n\nattributes\x18\x01 \x03(\x0b\x32\x39.flyteidl.admin.ClusterResourceAttributes.AttributesEntryR\nattributes\x1a=\n\x0f\x41ttributesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\".\n\x18\x45xecutionQueueAttributes\x12\x12\n\x04tags\x18\x01 \x03(\tR\x04tags\"-\n\x15\x45xecutionClusterLabel\x12\x14\n\x05value\x18\x01 \x01(\tR\x05value\"\xec\x01\n\x0ePluginOverride\x12\x1b\n\ttask_type\x18\x01 \x01(\tR\x08taskType\x12\x1b\n\tplugin_id\x18\x02 \x03(\tR\x08pluginId\x12l\n\x17missing_plugin_behavior\x18\x04 \x01(\x0e\x32\x34.flyteidl.admin.PluginOverride.MissingPluginBehaviorR\x15missingPluginBehavior\"2\n\x15MissingPluginBehavior\x12\x08\n\x04\x46\x41IL\x10\x00\x12\x0f\n\x0bUSE_DEFAULT\x10\x01\"O\n\x0fPluginOverrides\x12<\n\toverrides\x18\x01 \x03(\x0b\x32\x1e.flyteidl.admin.PluginOverrideR\toverrides\"\xeb\x03\n\x17WorkflowExecutionConfig\x12\'\n\x0fmax_parallelism\x18\x01 \x01(\x05R\x0emaxParallelism\x12I\n\x10security_context\x18\x02 \x01(\x0b\x32\x1e.flyteidl.core.SecurityContextR\x0fsecurityContext\x12X\n\x16raw_output_data_config\x18\x03 \x01(\x0b\x32#.flyteidl.admin.RawOutputDataConfigR\x13rawOutputDataConfig\x12.\n\x06labels\x18\x04 \x01(\x0b\x32\x16.flyteidl.admin.LabelsR\x06labels\x12=\n\x0b\x61nnotations\x18\x05 \x01(\x0b\x32\x1b.flyteidl.admin.AnnotationsR\x0b\x61nnotations\x12@\n\rinterruptible\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\rinterruptible\x12\'\n\x0foverwrite_cache\x18\x07 \x01(\x08R\x0eoverwriteCache\x12(\n\x04\x65nvs\x18\x08 \x01(\x0b\x32\x14.flyteidl.admin.EnvsR\x04\x65nvs\"\x94\x06\n\x12MatchingAttributes\x12\x62\n\x18task_resource_attributes\x18\x01 \x01(\x0b\x32&.flyteidl.admin.TaskResourceAttributesH\x00R\x16taskResourceAttributes\x12k\n\x1b\x63luster_resource_attributes\x18\x02 \x01(\x0b\x32).flyteidl.admin.ClusterResourceAttributesH\x00R\x19\x63lusterResourceAttributes\x12h\n\x1a\x65xecution_queue_attributes\x18\x03 \x01(\x0b\x32(.flyteidl.admin.ExecutionQueueAttributesH\x00R\x18\x65xecutionQueueAttributes\x12_\n\x17\x65xecution_cluster_label\x18\x04 \x01(\x0b\x32%.flyteidl.admin.ExecutionClusterLabelH\x00R\x15\x65xecutionClusterLabel\x12O\n\x12quality_of_service\x18\x05 \x01(\x0b\x32\x1f.flyteidl.core.QualityOfServiceH\x00R\x10qualityOfService\x12L\n\x10plugin_overrides\x18\x06 \x01(\x0b\x32\x1f.flyteidl.admin.PluginOverridesH\x00R\x0fpluginOverrides\x12\x65\n\x19workflow_execution_config\x18\x07 \x01(\x0b\x32\'.flyteidl.admin.WorkflowExecutionConfigH\x00R\x17workflowExecutionConfig\x12R\n\x12\x63luster_assignment\x18\x08 \x01(\x0b\x32!.flyteidl.admin.ClusterAssignmentH\x00R\x11\x63lusterAssignmentB\x08\n\x06target\"\xe7\x01\n MatchableAttributesConfiguration\x12\x42\n\nattributes\x18\x01 \x01(\x0b\x32\".flyteidl.admin.MatchingAttributesR\nattributes\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12\x18\n\x07project\x18\x03 \x01(\tR\x07project\x12\x1a\n\x08workflow\x18\x04 \x01(\tR\x08workflow\x12\x1f\n\x0blaunch_plan\x18\x05 \x01(\tR\nlaunchPlan\x12\x10\n\x03org\x18\x06 \x01(\tR\x03org\"h\n\x1eListMatchableAttributesRequest\x12\x46\n\rresource_type\x18\x01 \x01(\x0e\x32!.flyteidl.admin.MatchableResourceR\x0cresourceType\"{\n\x1fListMatchableAttributesResponse\x12X\n\x0e\x63onfigurations\x18\x01 \x03(\x0b\x32\x30.flyteidl.admin.MatchableAttributesConfigurationR\x0e\x63onfigurations*\xe0\x01\n\x11MatchableResource\x12\x11\n\rTASK_RESOURCE\x10\x00\x12\x14\n\x10\x43LUSTER_RESOURCE\x10\x01\x12\x13\n\x0f\x45XECUTION_QUEUE\x10\x02\x12\x1b\n\x17\x45XECUTION_CLUSTER_LABEL\x10\x03\x12$\n QUALITY_OF_SERVICE_SPECIFICATION\x10\x04\x12\x13\n\x0fPLUGIN_OVERRIDE\x10\x05\x12\x1d\n\x19WORKFLOW_EXECUTION_CONFIG\x10\x06\x12\x16\n\x12\x43LUSTER_ASSIGNMENT\x10\x07\x42\xc2\x01\n\x12\x63om.flyteidl.adminB\x16MatchableResourceProtoP\x01Z;github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin\xa2\x02\x03\x46\x41X\xaa\x02\x0e\x46lyteidl.Admin\xca\x02\x0e\x46lyteidl\\Admin\xe2\x02\x1a\x46lyteidl\\Admin\\GPBMetadata\xea\x02\x0f\x46lyteidl::Adminb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\'flyteidl/admin/matchable_resource.proto\x12\x0e\x66lyteidl.admin\x1a\x1b\x66lyteidl/admin/common.proto\x1a\'flyteidl/admin/cluster_assignment.proto\x1a\x1d\x66lyteidl/core/execution.proto\x1a\x1c\x66lyteidl/core/security.proto\x1a\x1egoogle/protobuf/wrappers.proto\"\x95\x01\n\x10TaskResourceSpec\x12\x10\n\x03\x63pu\x18\x01 \x01(\tR\x03\x63pu\x12\x10\n\x03gpu\x18\x02 \x01(\tR\x03gpu\x12\x16\n\x06memory\x18\x03 \x01(\tR\x06memory\x12\x18\n\x07storage\x18\x04 \x01(\tR\x07storage\x12+\n\x11\x65phemeral_storage\x18\x05 \x01(\tR\x10\x65phemeralStorage\"\x90\x01\n\x16TaskResourceAttributes\x12<\n\x08\x64\x65\x66\x61ults\x18\x01 \x01(\x0b\x32 .flyteidl.admin.TaskResourceSpecR\x08\x64\x65\x66\x61ults\x12\x38\n\x06limits\x18\x02 \x01(\x0b\x32 .flyteidl.admin.TaskResourceSpecR\x06limits\"\xb5\x01\n\x19\x43lusterResourceAttributes\x12Y\n\nattributes\x18\x01 \x03(\x0b\x32\x39.flyteidl.admin.ClusterResourceAttributes.AttributesEntryR\nattributes\x1a=\n\x0f\x41ttributesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\".\n\x18\x45xecutionQueueAttributes\x12\x12\n\x04tags\x18\x01 \x03(\tR\x04tags\"-\n\x15\x45xecutionClusterLabel\x12\x14\n\x05value\x18\x01 \x01(\tR\x05value\"\xec\x01\n\x0ePluginOverride\x12\x1b\n\ttask_type\x18\x01 \x01(\tR\x08taskType\x12\x1b\n\tplugin_id\x18\x02 \x03(\tR\x08pluginId\x12l\n\x17missing_plugin_behavior\x18\x04 \x01(\x0e\x32\x34.flyteidl.admin.PluginOverride.MissingPluginBehaviorR\x15missingPluginBehavior\"2\n\x15MissingPluginBehavior\x12\x08\n\x04\x46\x41IL\x10\x00\x12\x0f\n\x0bUSE_DEFAULT\x10\x01\"O\n\x0fPluginOverrides\x12<\n\toverrides\x18\x01 \x03(\x0b\x32\x1e.flyteidl.admin.PluginOverrideR\toverrides\"\xeb\x03\n\x17WorkflowExecutionConfig\x12\'\n\x0fmax_parallelism\x18\x01 \x01(\x05R\x0emaxParallelism\x12I\n\x10security_context\x18\x02 \x01(\x0b\x32\x1e.flyteidl.core.SecurityContextR\x0fsecurityContext\x12X\n\x16raw_output_data_config\x18\x03 \x01(\x0b\x32#.flyteidl.admin.RawOutputDataConfigR\x13rawOutputDataConfig\x12.\n\x06labels\x18\x04 \x01(\x0b\x32\x16.flyteidl.admin.LabelsR\x06labels\x12=\n\x0b\x61nnotations\x18\x05 \x01(\x0b\x32\x1b.flyteidl.admin.AnnotationsR\x0b\x61nnotations\x12@\n\rinterruptible\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\rinterruptible\x12\'\n\x0foverwrite_cache\x18\x07 \x01(\x08R\x0eoverwriteCache\x12(\n\x04\x65nvs\x18\x08 \x01(\x0b\x32\x14.flyteidl.admin.EnvsR\x04\x65nvs\"\x94\x06\n\x12MatchingAttributes\x12\x62\n\x18task_resource_attributes\x18\x01 \x01(\x0b\x32&.flyteidl.admin.TaskResourceAttributesH\x00R\x16taskResourceAttributes\x12k\n\x1b\x63luster_resource_attributes\x18\x02 \x01(\x0b\x32).flyteidl.admin.ClusterResourceAttributesH\x00R\x19\x63lusterResourceAttributes\x12h\n\x1a\x65xecution_queue_attributes\x18\x03 \x01(\x0b\x32(.flyteidl.admin.ExecutionQueueAttributesH\x00R\x18\x65xecutionQueueAttributes\x12_\n\x17\x65xecution_cluster_label\x18\x04 \x01(\x0b\x32%.flyteidl.admin.ExecutionClusterLabelH\x00R\x15\x65xecutionClusterLabel\x12O\n\x12quality_of_service\x18\x05 \x01(\x0b\x32\x1f.flyteidl.core.QualityOfServiceH\x00R\x10qualityOfService\x12L\n\x10plugin_overrides\x18\x06 \x01(\x0b\x32\x1f.flyteidl.admin.PluginOverridesH\x00R\x0fpluginOverrides\x12\x65\n\x19workflow_execution_config\x18\x07 \x01(\x0b\x32\'.flyteidl.admin.WorkflowExecutionConfigH\x00R\x17workflowExecutionConfig\x12R\n\x12\x63luster_assignment\x18\x08 \x01(\x0b\x32!.flyteidl.admin.ClusterAssignmentH\x00R\x11\x63lusterAssignmentB\x08\n\x06target\"\xe7\x01\n MatchableAttributesConfiguration\x12\x42\n\nattributes\x18\x01 \x01(\x0b\x32\".flyteidl.admin.MatchingAttributesR\nattributes\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12\x18\n\x07project\x18\x03 \x01(\tR\x07project\x12\x1a\n\x08workflow\x18\x04 \x01(\tR\x08workflow\x12\x1f\n\x0blaunch_plan\x18\x05 \x01(\tR\nlaunchPlan\x12\x10\n\x03org\x18\x06 \x01(\tR\x03org\"z\n\x1eListMatchableAttributesRequest\x12\x46\n\rresource_type\x18\x01 \x01(\x0e\x32!.flyteidl.admin.MatchableResourceR\x0cresourceType\x12\x10\n\x03org\x18\x02 \x01(\tR\x03org\"{\n\x1fListMatchableAttributesResponse\x12X\n\x0e\x63onfigurations\x18\x01 \x03(\x0b\x32\x30.flyteidl.admin.MatchableAttributesConfigurationR\x0e\x63onfigurations*\xe0\x01\n\x11MatchableResource\x12\x11\n\rTASK_RESOURCE\x10\x00\x12\x14\n\x10\x43LUSTER_RESOURCE\x10\x01\x12\x13\n\x0f\x45XECUTION_QUEUE\x10\x02\x12\x1b\n\x17\x45XECUTION_CLUSTER_LABEL\x10\x03\x12$\n QUALITY_OF_SERVICE_SPECIFICATION\x10\x04\x12\x13\n\x0fPLUGIN_OVERRIDE\x10\x05\x12\x1d\n\x19WORKFLOW_EXECUTION_CONFIG\x10\x06\x12\x16\n\x12\x43LUSTER_ASSIGNMENT\x10\x07\x42\xc2\x01\n\x12\x63om.flyteidl.adminB\x16MatchableResourceProtoP\x01Z;github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin\xa2\x02\x03\x46\x41X\xaa\x02\x0e\x46lyteidl.Admin\xca\x02\x0e\x46lyteidl\\Admin\xe2\x02\x1a\x46lyteidl\\Admin\\GPBMetadata\xea\x02\x0f\x46lyteidl::Adminb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -29,8 +29,8 @@ DESCRIPTOR._serialized_options = b'\n\022com.flyteidl.adminB\026MatchableResourceProtoP\001Z;github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin\242\002\003FAX\252\002\016Flyteidl.Admin\312\002\016Flyteidl\\Admin\342\002\032Flyteidl\\Admin\\GPBMetadata\352\002\017Flyteidl::Admin' _CLUSTERRESOURCEATTRIBUTES_ATTRIBUTESENTRY._options = None _CLUSTERRESOURCEATTRIBUTES_ATTRIBUTESENTRY._serialized_options = b'8\001' - _globals['_MATCHABLERESOURCE']._serialized_start=2871 - _globals['_MATCHABLERESOURCE']._serialized_end=3095 + _globals['_MATCHABLERESOURCE']._serialized_start=2889 + _globals['_MATCHABLERESOURCE']._serialized_end=3113 _globals['_TASKRESOURCESPEC']._serialized_start=223 _globals['_TASKRESOURCESPEC']._serialized_end=372 _globals['_TASKRESOURCEATTRIBUTES']._serialized_start=375 @@ -56,7 +56,7 @@ _globals['_MATCHABLEATTRIBUTESCONFIGURATION']._serialized_start=2406 _globals['_MATCHABLEATTRIBUTESCONFIGURATION']._serialized_end=2637 _globals['_LISTMATCHABLEATTRIBUTESREQUEST']._serialized_start=2639 - _globals['_LISTMATCHABLEATTRIBUTESREQUEST']._serialized_end=2743 - _globals['_LISTMATCHABLEATTRIBUTESRESPONSE']._serialized_start=2745 - _globals['_LISTMATCHABLEATTRIBUTESRESPONSE']._serialized_end=2868 + _globals['_LISTMATCHABLEATTRIBUTESREQUEST']._serialized_end=2761 + _globals['_LISTMATCHABLEATTRIBUTESRESPONSE']._serialized_start=2763 + _globals['_LISTMATCHABLEATTRIBUTESRESPONSE']._serialized_end=2886 # @@protoc_insertion_point(module_scope) diff --git a/flyteidl/gen/pb_python/flyteidl/admin/matchable_resource_pb2.pyi b/flyteidl/gen/pb_python/flyteidl/admin/matchable_resource_pb2.pyi index f7707cf984..cc19f2d146 100644 --- a/flyteidl/gen/pb_python/flyteidl/admin/matchable_resource_pb2.pyi +++ b/flyteidl/gen/pb_python/flyteidl/admin/matchable_resource_pb2.pyi @@ -156,10 +156,12 @@ class MatchableAttributesConfiguration(_message.Message): def __init__(self, attributes: _Optional[_Union[MatchingAttributes, _Mapping]] = ..., domain: _Optional[str] = ..., project: _Optional[str] = ..., workflow: _Optional[str] = ..., launch_plan: _Optional[str] = ..., org: _Optional[str] = ...) -> None: ... class ListMatchableAttributesRequest(_message.Message): - __slots__ = ["resource_type"] + __slots__ = ["resource_type", "org"] RESOURCE_TYPE_FIELD_NUMBER: _ClassVar[int] + ORG_FIELD_NUMBER: _ClassVar[int] resource_type: MatchableResource - def __init__(self, resource_type: _Optional[_Union[MatchableResource, str]] = ...) -> None: ... + org: str + def __init__(self, resource_type: _Optional[_Union[MatchableResource, str]] = ..., org: _Optional[str] = ...) -> None: ... class ListMatchableAttributesResponse(_message.Message): __slots__ = ["configurations"] diff --git a/flyteidl/gen/pb_python/flyteidl/admin/project_pb2.py b/flyteidl/gen/pb_python/flyteidl/admin/project_pb2.py index ddebf730f2..d0b442e3a5 100644 --- a/flyteidl/gen/pb_python/flyteidl/admin/project_pb2.py +++ b/flyteidl/gen/pb_python/flyteidl/admin/project_pb2.py @@ -14,7 +14,7 @@ from flyteidl.admin import common_pb2 as flyteidl_dot_admin_dot_common__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1c\x66lyteidl/admin/project.proto\x12\x0e\x66lyteidl.admin\x1a\x1b\x66lyteidl/admin/common.proto\",\n\x06\x44omain\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\"\xbf\x02\n\x07Project\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12\x30\n\x07\x64omains\x18\x03 \x03(\x0b\x32\x16.flyteidl.admin.DomainR\x07\x64omains\x12 \n\x0b\x64\x65scription\x18\x04 \x01(\tR\x0b\x64\x65scription\x12.\n\x06labels\x18\x05 \x01(\x0b\x32\x16.flyteidl.admin.LabelsR\x06labels\x12:\n\x05state\x18\x06 \x01(\x0e\x32$.flyteidl.admin.Project.ProjectStateR\x05state\x12\x10\n\x03org\x18\x07 \x01(\tR\x03org\">\n\x0cProjectState\x12\n\n\x06\x41\x43TIVE\x10\x00\x12\x0c\n\x08\x41RCHIVED\x10\x01\x12\x14\n\x10SYSTEM_GENERATED\x10\x02\"U\n\x08Projects\x12\x33\n\x08projects\x18\x01 \x03(\x0b\x32\x17.flyteidl.admin.ProjectR\x08projects\x12\x14\n\x05token\x18\x02 \x01(\tR\x05token\"\x89\x01\n\x12ProjectListRequest\x12\x14\n\x05limit\x18\x01 \x01(\rR\x05limit\x12\x14\n\x05token\x18\x02 \x01(\tR\x05token\x12\x18\n\x07\x66ilters\x18\x03 \x01(\tR\x07\x66ilters\x12-\n\x07sort_by\x18\x04 \x01(\x0b\x32\x14.flyteidl.admin.SortR\x06sortBy\"K\n\x16ProjectRegisterRequest\x12\x31\n\x07project\x18\x01 \x01(\x0b\x32\x17.flyteidl.admin.ProjectR\x07project\"\x19\n\x17ProjectRegisterResponse\"\x17\n\x15ProjectUpdateResponseB\xb8\x01\n\x12\x63om.flyteidl.adminB\x0cProjectProtoP\x01Z;github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin\xa2\x02\x03\x46\x41X\xaa\x02\x0e\x46lyteidl.Admin\xca\x02\x0e\x46lyteidl\\Admin\xe2\x02\x1a\x46lyteidl\\Admin\\GPBMetadata\xea\x02\x0f\x46lyteidl::Adminb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1c\x66lyteidl/admin/project.proto\x12\x0e\x66lyteidl.admin\x1a\x1b\x66lyteidl/admin/common.proto\",\n\x06\x44omain\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\"\xbf\x02\n\x07Project\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12\x30\n\x07\x64omains\x18\x03 \x03(\x0b\x32\x16.flyteidl.admin.DomainR\x07\x64omains\x12 \n\x0b\x64\x65scription\x18\x04 \x01(\tR\x0b\x64\x65scription\x12.\n\x06labels\x18\x05 \x01(\x0b\x32\x16.flyteidl.admin.LabelsR\x06labels\x12:\n\x05state\x18\x06 \x01(\x0e\x32$.flyteidl.admin.Project.ProjectStateR\x05state\x12\x10\n\x03org\x18\x07 \x01(\tR\x03org\">\n\x0cProjectState\x12\n\n\x06\x41\x43TIVE\x10\x00\x12\x0c\n\x08\x41RCHIVED\x10\x01\x12\x14\n\x10SYSTEM_GENERATED\x10\x02\"U\n\x08Projects\x12\x33\n\x08projects\x18\x01 \x03(\x0b\x32\x17.flyteidl.admin.ProjectR\x08projects\x12\x14\n\x05token\x18\x02 \x01(\tR\x05token\"\x9b\x01\n\x12ProjectListRequest\x12\x14\n\x05limit\x18\x01 \x01(\rR\x05limit\x12\x14\n\x05token\x18\x02 \x01(\tR\x05token\x12\x18\n\x07\x66ilters\x18\x03 \x01(\tR\x07\x66ilters\x12-\n\x07sort_by\x18\x04 \x01(\x0b\x32\x14.flyteidl.admin.SortR\x06sortBy\x12\x10\n\x03org\x18\x05 \x01(\tR\x03org\"K\n\x16ProjectRegisterRequest\x12\x31\n\x07project\x18\x01 \x01(\x0b\x32\x17.flyteidl.admin.ProjectR\x07project\"\x19\n\x17ProjectRegisterResponse\"\x17\n\x15ProjectUpdateResponseB\xb8\x01\n\x12\x63om.flyteidl.adminB\x0cProjectProtoP\x01Z;github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/admin\xa2\x02\x03\x46\x41X\xaa\x02\x0e\x46lyteidl.Admin\xca\x02\x0e\x46lyteidl\\Admin\xe2\x02\x1a\x46lyteidl\\Admin\\GPBMetadata\xea\x02\x0f\x46lyteidl::Adminb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -32,11 +32,11 @@ _globals['_PROJECTS']._serialized_start=445 _globals['_PROJECTS']._serialized_end=530 _globals['_PROJECTLISTREQUEST']._serialized_start=533 - _globals['_PROJECTLISTREQUEST']._serialized_end=670 - _globals['_PROJECTREGISTERREQUEST']._serialized_start=672 - _globals['_PROJECTREGISTERREQUEST']._serialized_end=747 - _globals['_PROJECTREGISTERRESPONSE']._serialized_start=749 - _globals['_PROJECTREGISTERRESPONSE']._serialized_end=774 - _globals['_PROJECTUPDATERESPONSE']._serialized_start=776 - _globals['_PROJECTUPDATERESPONSE']._serialized_end=799 + _globals['_PROJECTLISTREQUEST']._serialized_end=688 + _globals['_PROJECTREGISTERREQUEST']._serialized_start=690 + _globals['_PROJECTREGISTERREQUEST']._serialized_end=765 + _globals['_PROJECTREGISTERRESPONSE']._serialized_start=767 + _globals['_PROJECTREGISTERRESPONSE']._serialized_end=792 + _globals['_PROJECTUPDATERESPONSE']._serialized_start=794 + _globals['_PROJECTUPDATERESPONSE']._serialized_end=817 # @@protoc_insertion_point(module_scope) diff --git a/flyteidl/gen/pb_python/flyteidl/admin/project_pb2.pyi b/flyteidl/gen/pb_python/flyteidl/admin/project_pb2.pyi index 5353d66e1b..1379fa3c0c 100644 --- a/flyteidl/gen/pb_python/flyteidl/admin/project_pb2.pyi +++ b/flyteidl/gen/pb_python/flyteidl/admin/project_pb2.pyi @@ -50,16 +50,18 @@ class Projects(_message.Message): def __init__(self, projects: _Optional[_Iterable[_Union[Project, _Mapping]]] = ..., token: _Optional[str] = ...) -> None: ... class ProjectListRequest(_message.Message): - __slots__ = ["limit", "token", "filters", "sort_by"] + __slots__ = ["limit", "token", "filters", "sort_by", "org"] LIMIT_FIELD_NUMBER: _ClassVar[int] TOKEN_FIELD_NUMBER: _ClassVar[int] FILTERS_FIELD_NUMBER: _ClassVar[int] SORT_BY_FIELD_NUMBER: _ClassVar[int] + ORG_FIELD_NUMBER: _ClassVar[int] limit: int token: str filters: str sort_by: _common_pb2.Sort - def __init__(self, limit: _Optional[int] = ..., token: _Optional[str] = ..., filters: _Optional[str] = ..., sort_by: _Optional[_Union[_common_pb2.Sort, _Mapping]] = ...) -> None: ... + org: str + def __init__(self, limit: _Optional[int] = ..., token: _Optional[str] = ..., filters: _Optional[str] = ..., sort_by: _Optional[_Union[_common_pb2.Sort, _Mapping]] = ..., org: _Optional[str] = ...) -> None: ... class ProjectRegisterRequest(_message.Message): __slots__ = ["project"] diff --git a/flyteidl/gen/pb_python/flyteidl/service/admin_pb2.py b/flyteidl/gen/pb_python/flyteidl/service/admin_pb2.py index 4ba67242fb..c7b34e85c6 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/admin_pb2.py +++ b/flyteidl/gen/pb_python/flyteidl/service/admin_pb2.py @@ -29,7 +29,7 @@ from flyteidl.admin import description_entity_pb2 as flyteidl_dot_admin_dot_description__entity__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1c\x66lyteidl/service/admin.proto\x12\x10\x66lyteidl.service\x1a\x1cgoogle/api/annotations.proto\x1a\x1c\x66lyteidl/admin/project.proto\x1a.flyteidl/admin/project_domain_attributes.proto\x1a\'flyteidl/admin/project_attributes.proto\x1a\x19\x66lyteidl/admin/task.proto\x1a\x1d\x66lyteidl/admin/workflow.proto\x1a(flyteidl/admin/workflow_attributes.proto\x1a flyteidl/admin/launch_plan.proto\x1a\x1a\x66lyteidl/admin/event.proto\x1a\x1e\x66lyteidl/admin/execution.proto\x1a\'flyteidl/admin/matchable_resource.proto\x1a#flyteidl/admin/node_execution.proto\x1a#flyteidl/admin/task_execution.proto\x1a\x1c\x66lyteidl/admin/version.proto\x1a\x1b\x66lyteidl/admin/common.proto\x1a\'flyteidl/admin/description_entity.proto2\xb5q\n\x0c\x41\x64minService\x12m\n\nCreateTask\x12!.flyteidl.admin.TaskCreateRequest\x1a\".flyteidl.admin.TaskCreateResponse\"\x18\x82\xd3\xe4\x93\x02\x12:\x01*\"\r/api/v1/tasks\x12\xd8\x01\n\x07GetTask\x12 .flyteidl.admin.ObjectGetRequest\x1a\x14.flyteidl.admin.Task\"\x94\x01\x82\xd3\xe4\x93\x02\x8d\x01ZL\x12J/api/v1/tasks/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version}\x12=/api/v1/tasks/{id.project}/{id.domain}/{id.name}/{id.version}\x12\xc5\x01\n\x0bListTaskIds\x12\x30.flyteidl.admin.NamedEntityIdentifierListRequest\x1a).flyteidl.admin.NamedEntityIdentifierList\"Y\x82\xd3\xe4\x93\x02SZ,\x12*/api/v1/tasks/org/{org}/{project}/{domain}\x12#/api/v1/task_ids/{project}/{domain}\x12\xa8\x02\n\tListTasks\x12#.flyteidl.admin.ResourceListRequest\x1a\x18.flyteidl.admin.TaskList\"\xdb\x01\x82\xd3\xe4\x93\x02\xd4\x01Z?\x12=/api/v1/tasks/org/{id.org}/{id.project}/{id.domain}/{id.name}Z(\x12&/api/v1/tasks/{id.project}/{id.domain}Z5\x12\x33/api/v1/tasks/org/{id.org}/{id.project}/{id.domain}\x12\x30/api/v1/tasks/{id.project}/{id.domain}/{id.name}\x12}\n\x0e\x43reateWorkflow\x12%.flyteidl.admin.WorkflowCreateRequest\x1a&.flyteidl.admin.WorkflowCreateResponse\"\x1c\x82\xd3\xe4\x93\x02\x16:\x01*\"\x11/api/v1/workflows\x12\xe8\x01\n\x0bGetWorkflow\x12 .flyteidl.admin.ObjectGetRequest\x1a\x18.flyteidl.admin.Workflow\"\x9c\x01\x82\xd3\xe4\x93\x02\x95\x01ZP\x12N/api/v1/workflows/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version}\x12\x41/api/v1/workflows/{id.project}/{id.domain}/{id.name}/{id.version}\x12\xd1\x01\n\x0fListWorkflowIds\x12\x30.flyteidl.admin.NamedEntityIdentifierListRequest\x1a).flyteidl.admin.NamedEntityIdentifierList\"a\x82\xd3\xe4\x93\x02[Z0\x12./api/v1/workflows/org/{org}/{project}/{domain}\x12\'/api/v1/workflow_ids/{project}/{domain}\x12\xc0\x02\n\rListWorkflows\x12#.flyteidl.admin.ResourceListRequest\x1a\x1c.flyteidl.admin.WorkflowList\"\xeb\x01\x82\xd3\xe4\x93\x02\xe4\x01ZC\x12\x41/api/v1/workflows/org/{id.org}/{id.project}/{id.domain}/{id.name}Z,\x12*/api/v1/workflows/{id.project}/{id.domain}Z9\x12\x37/api/v1/workflows/org/{id.org}/{id.project}/{id.domain}\x12\x34/api/v1/workflows/{id.project}/{id.domain}/{id.name}\x12\x86\x01\n\x10\x43reateLaunchPlan\x12\'.flyteidl.admin.LaunchPlanCreateRequest\x1a(.flyteidl.admin.LaunchPlanCreateResponse\"\x1f\x82\xd3\xe4\x93\x02\x19:\x01*\"\x14/api/v1/launch_plans\x12\xf2\x01\n\rGetLaunchPlan\x12 .flyteidl.admin.ObjectGetRequest\x1a\x1a.flyteidl.admin.LaunchPlan\"\xa2\x01\x82\xd3\xe4\x93\x02\x9b\x01ZS\x12Q/api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version}\x12\x44/api/v1/launch_plans/{id.project}/{id.domain}/{id.name}/{id.version}\x12\xf3\x01\n\x13GetActiveLaunchPlan\x12\'.flyteidl.admin.ActiveLaunchPlanRequest\x1a\x1a.flyteidl.admin.LaunchPlan\"\x96\x01\x82\xd3\xe4\x93\x02\x8f\x01ZM\x12K/api/v1/active_launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name}\x12>/api/v1/active_launch_plans/{id.project}/{id.domain}/{id.name}\x12\x9c\x01\n\x15ListActiveLaunchPlans\x12+.flyteidl.admin.ActiveLaunchPlanListRequest\x1a\x1e.flyteidl.admin.LaunchPlanList\"6\x82\xd3\xe4\x93\x02\x30\x12./api/v1/active_launch_plans/{project}/{domain}\x12\xdc\x01\n\x11ListLaunchPlanIds\x12\x30.flyteidl.admin.NamedEntityIdentifierListRequest\x1a).flyteidl.admin.NamedEntityIdentifierList\"j\x82\xd3\xe4\x93\x02\x64Z6\x12\x34/api/v1/launch_plan_ids/org/{org}/{project}/{domain}\x12*/api/v1/launch_plan_ids/{project}/{domain}\x12\xd0\x02\n\x0fListLaunchPlans\x12#.flyteidl.admin.ResourceListRequest\x1a\x1e.flyteidl.admin.LaunchPlanList\"\xf7\x01\x82\xd3\xe4\x93\x02\xf0\x01ZF\x12\x44/api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name}Z/\x12-/api/v1/launch_plans/{id.project}/{id.domain}Z<\x12:/api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}\x12\x37/api/v1/launch_plans/{id.project}/{id.domain}/{id.name}\x12\x8d\x02\n\x10UpdateLaunchPlan\x12\'.flyteidl.admin.LaunchPlanUpdateRequest\x1a(.flyteidl.admin.LaunchPlanUpdateResponse\"\xa5\x01\x82\xd3\xe4\x93\x02\x9e\x01:\x01*ZS\x1aQ/api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version}\x1a\x44/api/v1/launch_plans/{id.project}/{id.domain}/{id.name}/{id.version}\x12\x81\x01\n\x0f\x43reateExecution\x12&.flyteidl.admin.ExecutionCreateRequest\x1a\'.flyteidl.admin.ExecutionCreateResponse\"\x1d\x82\xd3\xe4\x93\x02\x17:\x01*\"\x12/api/v1/executions\x12\x8e\x01\n\x11RelaunchExecution\x12(.flyteidl.admin.ExecutionRelaunchRequest\x1a\'.flyteidl.admin.ExecutionCreateResponse\"&\x82\xd3\xe4\x93\x02 :\x01*\"\x1b/api/v1/executions/relaunch\x12\x8b\x01\n\x10RecoverExecution\x12\'.flyteidl.admin.ExecutionRecoverRequest\x1a\'.flyteidl.admin.ExecutionCreateResponse\"%\x82\xd3\xe4\x93\x02\x1f:\x01*\"\x1a/api/v1/executions/recover\x12\xdc\x01\n\x0cGetExecution\x12+.flyteidl.admin.WorkflowExecutionGetRequest\x1a\x19.flyteidl.admin.Execution\"\x83\x01\x82\xd3\xe4\x93\x02}ZD\x12\x42/api/v1/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}\x12\x35/api/v1/executions/{id.project}/{id.domain}/{id.name}\x12\xef\x01\n\x0fUpdateExecution\x12&.flyteidl.admin.ExecutionUpdateRequest\x1a\'.flyteidl.admin.ExecutionUpdateResponse\"\x8a\x01\x82\xd3\xe4\x93\x02\x83\x01:\x01*ZG:\x01*\x1a\x42/api/v1/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}\x1a\x35/api/v1/executions/{id.project}/{id.domain}/{id.name}\x12\x86\x02\n\x10GetExecutionData\x12/.flyteidl.admin.WorkflowExecutionGetDataRequest\x1a\x30.flyteidl.admin.WorkflowExecutionGetDataResponse\"\x8e\x01\x82\xd3\xe4\x93\x02\x87\x01ZI\x12G/api/v1/data/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}\x12:/api/v1/data/executions/{id.project}/{id.domain}/{id.name}\x12\xc5\x01\n\x0eListExecutions\x12#.flyteidl.admin.ResourceListRequest\x1a\x1d.flyteidl.admin.ExecutionList\"o\x82\xd3\xe4\x93\x02iZ:\x12\x38/api/v1/executions/org/{id.org}/{id.project}/{id.domain}\x12+/api/v1/executions/{id.project}/{id.domain}\x12\xfd\x01\n\x12TerminateExecution\x12).flyteidl.admin.ExecutionTerminateRequest\x1a*.flyteidl.admin.ExecutionTerminateResponse\"\x8f\x01\x82\xd3\xe4\x93\x02\x88\x01:\x01*ZL:\x01**G/api/v1/data/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}*5/api/v1/executions/{id.project}/{id.domain}/{id.name}\x12\xe2\x02\n\x10GetNodeExecution\x12\'.flyteidl.admin.NodeExecutionGetRequest\x1a\x1d.flyteidl.admin.NodeExecution\"\x85\x02\x82\xd3\xe4\x93\x02\xfe\x01Z\x8b\x01\x12\x88\x01/api/v1/node_executions/org/{id.execution_id.org}/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}\x12n/api/v1/node_executions/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}\x12\xf9\x02\n\x12ListNodeExecutions\x12(.flyteidl.admin.NodeExecutionListRequest\x1a!.flyteidl.admin.NodeExecutionList\"\x95\x02\x82\xd3\xe4\x93\x02\x8e\x02Z\x96\x01\x12\x93\x01/api/v1/node_executions/org/{workflow_execution_id.org}/{workflow_execution_id.project}/{workflow_execution_id.domain}/{workflow_execution_id.name}\x12s/api/v1/node_executions/{workflow_execution_id.project}/{workflow_execution_id.domain}/{workflow_execution_id.name}\x12\x8f\x08\n\x19ListNodeExecutionsForTask\x12/.flyteidl.admin.NodeExecutionForTaskListRequest\x1a!.flyteidl.admin.NodeExecutionList\"\x9d\x07\x82\xd3\xe4\x93\x02\x96\x07Z\xe7\x03\x12\xe4\x03/api/v1/children/task_executions/org/{task_execution_id.node_execution_id.execution_id.org}/{task_execution_id.node_execution_id.execution_id.project}/{task_execution_id.node_execution_id.execution_id.domain}/{task_execution_id.node_execution_id.execution_id.name}/{task_execution_id.node_execution_id.node_id}/{task_execution_id.task_id.project}/{task_execution_id.task_id.domain}/{task_execution_id.task_id.name}/{task_execution_id.task_id.version}/{task_execution_id.retry_attempt}\x12\xa9\x03/api/v1/children/task_executions/{task_execution_id.node_execution_id.execution_id.project}/{task_execution_id.node_execution_id.execution_id.domain}/{task_execution_id.node_execution_id.execution_id.name}/{task_execution_id.node_execution_id.node_id}/{task_execution_id.task_id.project}/{task_execution_id.task_id.domain}/{task_execution_id.task_id.name}/{task_execution_id.task_id.version}/{task_execution_id.retry_attempt}\x12\x83\x03\n\x14GetNodeExecutionData\x12+.flyteidl.admin.NodeExecutionGetDataRequest\x1a,.flyteidl.admin.NodeExecutionGetDataResponse\"\x8f\x02\x82\xd3\xe4\x93\x02\x88\x02Z\x90\x01\x12\x8d\x01/api/v1/data/node_executions/org/{id.execution_id.org}/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}\x12s/api/v1/data/node_executions/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}\x12\x7f\n\x0fRegisterProject\x12&.flyteidl.admin.ProjectRegisterRequest\x1a\'.flyteidl.admin.ProjectRegisterResponse\"\x1b\x82\xd3\xe4\x93\x02\x15:\x01*\"\x10/api/v1/projects\x12\x97\x01\n\rUpdateProject\x12\x17.flyteidl.admin.Project\x1a%.flyteidl.admin.ProjectUpdateResponse\"F\x82\xd3\xe4\x93\x02@:\x01*Z$:\x01*\x1a\x1f/api/v1/projects/org/{org}/{id}\x1a\x15/api/v1/projects/{id}\x12\x66\n\x0cListProjects\x12\".flyteidl.admin.ProjectListRequest\x1a\x18.flyteidl.admin.Projects\"\x18\x82\xd3\xe4\x93\x02\x12\x12\x10/api/v1/projects\x12\x99\x01\n\x13\x43reateWorkflowEvent\x12-.flyteidl.admin.WorkflowExecutionEventRequest\x1a..flyteidl.admin.WorkflowExecutionEventResponse\"#\x82\xd3\xe4\x93\x02\x1d:\x01*\"\x18/api/v1/events/workflows\x12\x89\x01\n\x0f\x43reateNodeEvent\x12).flyteidl.admin.NodeExecutionEventRequest\x1a*.flyteidl.admin.NodeExecutionEventResponse\"\x1f\x82\xd3\xe4\x93\x02\x19:\x01*\"\x14/api/v1/events/nodes\x12\x89\x01\n\x0f\x43reateTaskEvent\x12).flyteidl.admin.TaskExecutionEventRequest\x1a*.flyteidl.admin.TaskExecutionEventResponse\"\x1f\x82\xd3\xe4\x93\x02\x19:\x01*\"\x14/api/v1/events/tasks\x12\xcb\x05\n\x10GetTaskExecution\x12\'.flyteidl.admin.TaskExecutionGetRequest\x1a\x1d.flyteidl.admin.TaskExecution\"\xee\x04\x82\xd3\xe4\x93\x02\xe7\x04Z\xc8\x02\x12\xc5\x02/api/v1/task_executions/org/{id.node_execution_id.execution_id.org}/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}\x12\x99\x02/api/v1/task_executions/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}\x12\xf1\x03\n\x12ListTaskExecutions\x12(.flyteidl.admin.TaskExecutionListRequest\x1a!.flyteidl.admin.TaskExecutionList\"\x8d\x03\x82\xd3\xe4\x93\x02\x86\x03Z\xd6\x01\x12\xd3\x01/api/v1/task_executions/org/{node_execution_id.execution_id.org}/{node_execution_id.execution_id.project}/{node_execution_id.execution_id.domain}/{node_execution_id.execution_id.name}/{node_execution_id.node_id}\x12\xaa\x01/api/v1/task_executions/{node_execution_id.execution_id.project}/{node_execution_id.execution_id.domain}/{node_execution_id.execution_id.name}/{node_execution_id.node_id}\x12\xec\x05\n\x14GetTaskExecutionData\x12+.flyteidl.admin.TaskExecutionGetDataRequest\x1a,.flyteidl.admin.TaskExecutionGetDataResponse\"\xf8\x04\x82\xd3\xe4\x93\x02\xf1\x04Z\xcd\x02\x12\xca\x02/api/v1/data/task_executions/org/{id.node_execution_id.execution_id.org}/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}\x12\x9e\x02/api/v1/data/task_executions/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}\x12\xcb\x02\n\x1dUpdateProjectDomainAttributes\x12\x34.flyteidl.admin.ProjectDomainAttributesUpdateRequest\x1a\x35.flyteidl.admin.ProjectDomainAttributesUpdateResponse\"\xbc\x01\x82\xd3\xe4\x93\x02\xb5\x01:\x01*Zd:\x01*\x1a_/api/v1/project_domain_attributes/org/{attributes.org}/{attributes.project}/{attributes.domain}\x1aJ/api/v1/project_domain_attributes/{attributes.project}/{attributes.domain}\x12\x83\x02\n\x1aGetProjectDomainAttributes\x12\x31.flyteidl.admin.ProjectDomainAttributesGetRequest\x1a\x32.flyteidl.admin.ProjectDomainAttributesGetResponse\"~\x82\xd3\xe4\x93\x02xZ@\x12>/api/v1/project_domain_attributes/org/{org}/{project}/{domain}\x12\x34/api/v1/project_domain_attributes/{project}/{domain}\x12\x93\x02\n\x1d\x44\x65leteProjectDomainAttributes\x12\x34.flyteidl.admin.ProjectDomainAttributesDeleteRequest\x1a\x35.flyteidl.admin.ProjectDomainAttributesDeleteResponse\"\x84\x01\x82\xd3\xe4\x93\x02~:\x01*ZC:\x01**>/api/v1/project_domain_attributes/org/{org}/{project}/{domain}*4/api/v1/project_domain_attributes/{project}/{domain}\x12\x8a\x02\n\x17UpdateProjectAttributes\x12..flyteidl.admin.ProjectAttributesUpdateRequest\x1a/.flyteidl.admin.ProjectAttributesUpdateResponse\"\x8d\x01\x82\xd3\xe4\x93\x02\x86\x01:\x01*ZP:\x01*\x1aK/api/v1/project_domain_attributes/org/{attributes.org}/{attributes.project}\x1a//api/v1/project_attributes/{attributes.project}\x12\xd8\x01\n\x14GetProjectAttributes\x12+.flyteidl.admin.ProjectAttributesGetRequest\x1a,.flyteidl.admin.ProjectAttributesGetResponse\"e\x82\xd3\xe4\x93\x02_Z7\x12\x35/api/v1/project_domain_attributes/org/{org}/{project}\x12$/api/v1/project_attributes/{project}\x12\xe7\x01\n\x17\x44\x65leteProjectAttributes\x12..flyteidl.admin.ProjectAttributesDeleteRequest\x1a/.flyteidl.admin.ProjectAttributesDeleteResponse\"k\x82\xd3\xe4\x93\x02\x65:\x01*Z::\x01**5/api/v1/project_domain_attributes/org/{org}/{project}*$/api/v1/project_attributes/{project}\x12\xdc\x02\n\x18UpdateWorkflowAttributes\x12/.flyteidl.admin.WorkflowAttributesUpdateRequest\x1a\x30.flyteidl.admin.WorkflowAttributesUpdateResponse\"\xdc\x01\x82\xd3\xe4\x93\x02\xd5\x01:\x01*Zt:\x01*\x1ao/api/v1/workflow_attributes/org/{attributes.org}/{attributes.project}/{attributes.domain}/{attributes.workflow}\x1aZ/api/v1/workflow_attributes/{attributes.project}/{attributes.domain}/{attributes.workflow}\x12\x80\x02\n\x15GetWorkflowAttributes\x12,.flyteidl.admin.WorkflowAttributesGetRequest\x1a-.flyteidl.admin.WorkflowAttributesGetResponse\"\x89\x01\x82\xd3\xe4\x93\x02\x82\x01ZE\x12\x43/api/v1/workflow_attributes/org/{org}/{project}/{domain}/{workflow}\x12\x39/api/v1/workflow_attributes/{project}/{domain}/{workflow}\x12\x8f\x02\n\x18\x44\x65leteWorkflowAttributes\x12/.flyteidl.admin.WorkflowAttributesDeleteRequest\x1a\x30.flyteidl.admin.WorkflowAttributesDeleteResponse\"\x8f\x01\x82\xd3\xe4\x93\x02\x88\x01:\x01*ZH:\x01**C/api/v1/workflow_attributes/org/{org}/{project}/{domain}/{workflow}*9/api/v1/workflow_attributes/{project}/{domain}/{workflow}\x12\xa0\x01\n\x17ListMatchableAttributes\x12..flyteidl.admin.ListMatchableAttributesRequest\x1a/.flyteidl.admin.ListMatchableAttributesResponse\"$\x82\xd3\xe4\x93\x02\x1e\x12\x1c/api/v1/matchable_attributes\x12\xe8\x01\n\x11ListNamedEntities\x12&.flyteidl.admin.NamedEntityListRequest\x1a\x1f.flyteidl.admin.NamedEntityList\"\x89\x01\x82\xd3\xe4\x93\x02\x82\x01ZE\x12\x43/api/v1/named_entities/{resource_type}/org/{org}/{project}/{domain}\x12\x39/api/v1/named_entities/{resource_type}/{project}/{domain}\x12\x83\x02\n\x0eGetNamedEntity\x12%.flyteidl.admin.NamedEntityGetRequest\x1a\x1b.flyteidl.admin.NamedEntity\"\xac\x01\x82\xd3\xe4\x93\x02\xa5\x01ZX\x12V/api/v1/named_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain}/{id.name}\x12I/api/v1/named_entities/{resource_type}/{id.project}/{id.domain}/{id.name}\x12\x9d\x02\n\x11UpdateNamedEntity\x12(.flyteidl.admin.NamedEntityUpdateRequest\x1a).flyteidl.admin.NamedEntityUpdateResponse\"\xb2\x01\x82\xd3\xe4\x93\x02\xab\x01:\x01*Z[:\x01*\x1aV/api/v1/named_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain}/{id.name}\x1aI/api/v1/named_entities/{resource_type}/{id.project}/{id.domain}/{id.name}\x12l\n\nGetVersion\x12!.flyteidl.admin.GetVersionRequest\x1a\".flyteidl.admin.GetVersionResponse\"\x17\x82\xd3\xe4\x93\x02\x11\x12\x0f/api/v1/version\x12\xb6\x02\n\x14GetDescriptionEntity\x12 .flyteidl.admin.ObjectGetRequest\x1a!.flyteidl.admin.DescriptionEntity\"\xd8\x01\x82\xd3\xe4\x93\x02\xd1\x01Zn\x12l/api/v1/description_entities/org/{id.org}/{id.resource_type}/{id.project}/{id.domain}/{id.name}/{id.version}\x12_/api/v1/description_entities/{id.resource_type}/{id.project}/{id.domain}/{id.name}/{id.version}\x12\xc8\x03\n\x17ListDescriptionEntities\x12,.flyteidl.admin.DescriptionEntityListRequest\x1a%.flyteidl.admin.DescriptionEntityList\"\xd7\x02\x82\xd3\xe4\x93\x02\xd0\x02Z^\x12\\/api/v1/description_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain}/{id.name}ZG\x12\x45/api/v1/description_entities/{resource_type}/{id.project}/{id.domain}ZT\x12R/api/v1/description_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain}\x12O/api/v1/description_entities/{resource_type}/{id.project}/{id.domain}/{id.name}\x12\x95\x02\n\x13GetExecutionMetrics\x12\x32.flyteidl.admin.WorkflowExecutionGetMetricsRequest\x1a\x33.flyteidl.admin.WorkflowExecutionGetMetricsResponse\"\x94\x01\x82\xd3\xe4\x93\x02\x8d\x01ZL\x12J/api/v1/metrics/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}\x12=/api/v1/metrics/executions/{id.project}/{id.domain}/{id.name}B\xc2\x01\n\x14\x63om.flyteidl.serviceB\nAdminProtoP\x01Z=github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/service\xa2\x02\x03\x46SX\xaa\x02\x10\x46lyteidl.Service\xca\x02\x10\x46lyteidl\\Service\xe2\x02\x1c\x46lyteidl\\Service\\GPBMetadata\xea\x02\x11\x46lyteidl::Serviceb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1c\x66lyteidl/service/admin.proto\x12\x10\x66lyteidl.service\x1a\x1cgoogle/api/annotations.proto\x1a\x1c\x66lyteidl/admin/project.proto\x1a.flyteidl/admin/project_domain_attributes.proto\x1a\'flyteidl/admin/project_attributes.proto\x1a\x19\x66lyteidl/admin/task.proto\x1a\x1d\x66lyteidl/admin/workflow.proto\x1a(flyteidl/admin/workflow_attributes.proto\x1a flyteidl/admin/launch_plan.proto\x1a\x1a\x66lyteidl/admin/event.proto\x1a\x1e\x66lyteidl/admin/execution.proto\x1a\'flyteidl/admin/matchable_resource.proto\x1a#flyteidl/admin/node_execution.proto\x1a#flyteidl/admin/task_execution.proto\x1a\x1c\x66lyteidl/admin/version.proto\x1a\x1b\x66lyteidl/admin/common.proto\x1a\'flyteidl/admin/description_entity.proto2\x97v\n\x0c\x41\x64minService\x12\x8e\x01\n\nCreateTask\x12!.flyteidl.admin.TaskCreateRequest\x1a\".flyteidl.admin.TaskCreateResponse\"9\x82\xd3\xe4\x93\x02\x33:\x01*Z\x1f:\x01*\"\x1a/api/v1/tasks/org/{id.org}\"\r/api/v1/tasks\x12\xd8\x01\n\x07GetTask\x12 .flyteidl.admin.ObjectGetRequest\x1a\x14.flyteidl.admin.Task\"\x94\x01\x82\xd3\xe4\x93\x02\x8d\x01ZL\x12J/api/v1/tasks/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version}\x12=/api/v1/tasks/{id.project}/{id.domain}/{id.name}/{id.version}\x12\xc5\x01\n\x0bListTaskIds\x12\x30.flyteidl.admin.NamedEntityIdentifierListRequest\x1a).flyteidl.admin.NamedEntityIdentifierList\"Y\x82\xd3\xe4\x93\x02SZ,\x12*/api/v1/tasks/org/{org}/{project}/{domain}\x12#/api/v1/task_ids/{project}/{domain}\x12\xa8\x02\n\tListTasks\x12#.flyteidl.admin.ResourceListRequest\x1a\x18.flyteidl.admin.TaskList\"\xdb\x01\x82\xd3\xe4\x93\x02\xd4\x01Z?\x12=/api/v1/tasks/org/{id.org}/{id.project}/{id.domain}/{id.name}Z(\x12&/api/v1/tasks/{id.project}/{id.domain}Z5\x12\x33/api/v1/tasks/org/{id.org}/{id.project}/{id.domain}\x12\x30/api/v1/tasks/{id.project}/{id.domain}/{id.name}\x12\xa2\x01\n\x0e\x43reateWorkflow\x12%.flyteidl.admin.WorkflowCreateRequest\x1a&.flyteidl.admin.WorkflowCreateResponse\"A\x82\xd3\xe4\x93\x02;:\x01*Z#:\x01*\"\x1e/api/v1/workflows/org/{id.org}\"\x11/api/v1/workflows\x12\xe8\x01\n\x0bGetWorkflow\x12 .flyteidl.admin.ObjectGetRequest\x1a\x18.flyteidl.admin.Workflow\"\x9c\x01\x82\xd3\xe4\x93\x02\x95\x01ZP\x12N/api/v1/workflows/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version}\x12\x41/api/v1/workflows/{id.project}/{id.domain}/{id.name}/{id.version}\x12\xd1\x01\n\x0fListWorkflowIds\x12\x30.flyteidl.admin.NamedEntityIdentifierListRequest\x1a).flyteidl.admin.NamedEntityIdentifierList\"a\x82\xd3\xe4\x93\x02[Z0\x12./api/v1/workflows/org/{org}/{project}/{domain}\x12\'/api/v1/workflow_ids/{project}/{domain}\x12\xc0\x02\n\rListWorkflows\x12#.flyteidl.admin.ResourceListRequest\x1a\x1c.flyteidl.admin.WorkflowList\"\xeb\x01\x82\xd3\xe4\x93\x02\xe4\x01ZC\x12\x41/api/v1/workflows/org/{id.org}/{id.project}/{id.domain}/{id.name}Z,\x12*/api/v1/workflows/{id.project}/{id.domain}Z9\x12\x37/api/v1/workflows/org/{id.org}/{id.project}/{id.domain}\x12\x34/api/v1/workflows/{id.project}/{id.domain}/{id.name}\x12\xae\x01\n\x10\x43reateLaunchPlan\x12\'.flyteidl.admin.LaunchPlanCreateRequest\x1a(.flyteidl.admin.LaunchPlanCreateResponse\"G\x82\xd3\xe4\x93\x02\x41:\x01*Z&:\x01*\"!/api/v1/launch_plans/org/{id.org}\"\x14/api/v1/launch_plans\x12\xf2\x01\n\rGetLaunchPlan\x12 .flyteidl.admin.ObjectGetRequest\x1a\x1a.flyteidl.admin.LaunchPlan\"\xa2\x01\x82\xd3\xe4\x93\x02\x9b\x01ZS\x12Q/api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version}\x12\x44/api/v1/launch_plans/{id.project}/{id.domain}/{id.name}/{id.version}\x12\xf3\x01\n\x13GetActiveLaunchPlan\x12\'.flyteidl.admin.ActiveLaunchPlanRequest\x1a\x1a.flyteidl.admin.LaunchPlan\"\x96\x01\x82\xd3\xe4\x93\x02\x8f\x01ZM\x12K/api/v1/active_launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name}\x12>/api/v1/active_launch_plans/{id.project}/{id.domain}/{id.name}\x12\xd8\x01\n\x15ListActiveLaunchPlans\x12+.flyteidl.admin.ActiveLaunchPlanListRequest\x1a\x1e.flyteidl.admin.LaunchPlanList\"r\x82\xd3\xe4\x93\x02lZ:\x12\x38/api/v1/active_launch_plans/org/{org}/{project}/{domain}\x12./api/v1/active_launch_plans/{project}/{domain}\x12\xdc\x01\n\x11ListLaunchPlanIds\x12\x30.flyteidl.admin.NamedEntityIdentifierListRequest\x1a).flyteidl.admin.NamedEntityIdentifierList\"j\x82\xd3\xe4\x93\x02\x64Z6\x12\x34/api/v1/launch_plan_ids/org/{org}/{project}/{domain}\x12*/api/v1/launch_plan_ids/{project}/{domain}\x12\xd0\x02\n\x0fListLaunchPlans\x12#.flyteidl.admin.ResourceListRequest\x1a\x1e.flyteidl.admin.LaunchPlanList\"\xf7\x01\x82\xd3\xe4\x93\x02\xf0\x01ZF\x12\x44/api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name}Z/\x12-/api/v1/launch_plans/{id.project}/{id.domain}Z<\x12:/api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}\x12\x37/api/v1/launch_plans/{id.project}/{id.domain}/{id.name}\x12\x8d\x02\n\x10UpdateLaunchPlan\x12\'.flyteidl.admin.LaunchPlanUpdateRequest\x1a(.flyteidl.admin.LaunchPlanUpdateResponse\"\xa5\x01\x82\xd3\xe4\x93\x02\x9e\x01:\x01*ZS\x1aQ/api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version}\x1a\x44/api/v1/launch_plans/{id.project}/{id.domain}/{id.name}/{id.version}\x12\xa4\x01\n\x0f\x43reateExecution\x12&.flyteidl.admin.ExecutionCreateRequest\x1a\'.flyteidl.admin.ExecutionCreateResponse\"@\x82\xd3\xe4\x93\x02::\x01*Z!:\x01*\x1a\x1c/api/v1/executions/org/{org}\"\x12/api/v1/executions\x12\xbd\x01\n\x11RelaunchExecution\x12(.flyteidl.admin.ExecutionRelaunchRequest\x1a\'.flyteidl.admin.ExecutionCreateResponse\"U\x82\xd3\xe4\x93\x02O:\x01*Z-:\x01*\"(/api/v1/executions/org/{id.org}/relaunch\"\x1b/api/v1/executions/relaunch\x12\xb9\x01\n\x10RecoverExecution\x12\'.flyteidl.admin.ExecutionRecoverRequest\x1a\'.flyteidl.admin.ExecutionCreateResponse\"S\x82\xd3\xe4\x93\x02M:\x01*Z,:\x01*\"\'/api/v1/executions/org/{id.org}/recover\"\x1a/api/v1/executions/recover\x12\xdc\x01\n\x0cGetExecution\x12+.flyteidl.admin.WorkflowExecutionGetRequest\x1a\x19.flyteidl.admin.Execution\"\x83\x01\x82\xd3\xe4\x93\x02}ZD\x12\x42/api/v1/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}\x12\x35/api/v1/executions/{id.project}/{id.domain}/{id.name}\x12\xef\x01\n\x0fUpdateExecution\x12&.flyteidl.admin.ExecutionUpdateRequest\x1a\'.flyteidl.admin.ExecutionUpdateResponse\"\x8a\x01\x82\xd3\xe4\x93\x02\x83\x01:\x01*ZG:\x01*\x1a\x42/api/v1/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}\x1a\x35/api/v1/executions/{id.project}/{id.domain}/{id.name}\x12\x86\x02\n\x10GetExecutionData\x12/.flyteidl.admin.WorkflowExecutionGetDataRequest\x1a\x30.flyteidl.admin.WorkflowExecutionGetDataResponse\"\x8e\x01\x82\xd3\xe4\x93\x02\x87\x01ZI\x12G/api/v1/data/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}\x12:/api/v1/data/executions/{id.project}/{id.domain}/{id.name}\x12\xc5\x01\n\x0eListExecutions\x12#.flyteidl.admin.ResourceListRequest\x1a\x1d.flyteidl.admin.ExecutionList\"o\x82\xd3\xe4\x93\x02iZ:\x12\x38/api/v1/executions/org/{id.org}/{id.project}/{id.domain}\x12+/api/v1/executions/{id.project}/{id.domain}\x12\xf8\x01\n\x12TerminateExecution\x12).flyteidl.admin.ExecutionTerminateRequest\x1a*.flyteidl.admin.ExecutionTerminateResponse\"\x8a\x01\x82\xd3\xe4\x93\x02\x83\x01:\x01*ZG:\x01**B/api/v1/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}*5/api/v1/executions/{id.project}/{id.domain}/{id.name}\x12\xe2\x02\n\x10GetNodeExecution\x12\'.flyteidl.admin.NodeExecutionGetRequest\x1a\x1d.flyteidl.admin.NodeExecution\"\x85\x02\x82\xd3\xe4\x93\x02\xfe\x01Z\x8b\x01\x12\x88\x01/api/v1/node_executions/org/{id.execution_id.org}/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}\x12n/api/v1/node_executions/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}\x12\xf9\x02\n\x12ListNodeExecutions\x12(.flyteidl.admin.NodeExecutionListRequest\x1a!.flyteidl.admin.NodeExecutionList\"\x95\x02\x82\xd3\xe4\x93\x02\x8e\x02Z\x96\x01\x12\x93\x01/api/v1/node_executions/org/{workflow_execution_id.org}/{workflow_execution_id.project}/{workflow_execution_id.domain}/{workflow_execution_id.name}\x12s/api/v1/node_executions/{workflow_execution_id.project}/{workflow_execution_id.domain}/{workflow_execution_id.name}\x12\x8f\x08\n\x19ListNodeExecutionsForTask\x12/.flyteidl.admin.NodeExecutionForTaskListRequest\x1a!.flyteidl.admin.NodeExecutionList\"\x9d\x07\x82\xd3\xe4\x93\x02\x96\x07Z\xe7\x03\x12\xe4\x03/api/v1/children/task_executions/org/{task_execution_id.node_execution_id.execution_id.org}/{task_execution_id.node_execution_id.execution_id.project}/{task_execution_id.node_execution_id.execution_id.domain}/{task_execution_id.node_execution_id.execution_id.name}/{task_execution_id.node_execution_id.node_id}/{task_execution_id.task_id.project}/{task_execution_id.task_id.domain}/{task_execution_id.task_id.name}/{task_execution_id.task_id.version}/{task_execution_id.retry_attempt}\x12\xa9\x03/api/v1/children/task_executions/{task_execution_id.node_execution_id.execution_id.project}/{task_execution_id.node_execution_id.execution_id.domain}/{task_execution_id.node_execution_id.execution_id.name}/{task_execution_id.node_execution_id.node_id}/{task_execution_id.task_id.project}/{task_execution_id.task_id.domain}/{task_execution_id.task_id.name}/{task_execution_id.task_id.version}/{task_execution_id.retry_attempt}\x12\x83\x03\n\x14GetNodeExecutionData\x12+.flyteidl.admin.NodeExecutionGetDataRequest\x1a,.flyteidl.admin.NodeExecutionGetDataResponse\"\x8f\x02\x82\xd3\xe4\x93\x02\x88\x02Z\x90\x01\x12\x8d\x01/api/v1/data/node_executions/org/{id.execution_id.org}/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}\x12s/api/v1/data/node_executions/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}\x12\xa8\x01\n\x0fRegisterProject\x12&.flyteidl.admin.ProjectRegisterRequest\x1a\'.flyteidl.admin.ProjectRegisterResponse\"D\x82\xd3\xe4\x93\x02>:\x01*Z\':\x01*\"\"/api/v1/projects/org/{project.org}\"\x10/api/v1/projects\x12\x97\x01\n\rUpdateProject\x12\x17.flyteidl.admin.Project\x1a%.flyteidl.admin.ProjectUpdateResponse\"F\x82\xd3\xe4\x93\x02@:\x01*Z$:\x01*\x1a\x1f/api/v1/projects/org/{org}/{id}\x1a\x15/api/v1/projects/{id}\x12\x84\x01\n\x0cListProjects\x12\".flyteidl.admin.ProjectListRequest\x1a\x18.flyteidl.admin.Projects\"6\x82\xd3\xe4\x93\x02\x30Z\x1c\x12\x1a/api/v1/projects/org/{org}\x12\x10/api/v1/projects\x12\xd5\x01\n\x13\x43reateWorkflowEvent\x12-.flyteidl.admin.WorkflowExecutionEventRequest\x1a..flyteidl.admin.WorkflowExecutionEventResponse\"_\x82\xd3\xe4\x93\x02Y:\x01*Z::\x01*\"5/api/v1/events/org/{event.execution_id.org}/workflows\"\x18/api/v1/events/workflows\x12\xc4\x01\n\x0f\x43reateNodeEvent\x12).flyteidl.admin.NodeExecutionEventRequest\x1a*.flyteidl.admin.NodeExecutionEventResponse\"Z\x82\xd3\xe4\x93\x02T:\x01*Z9:\x01*\"4/api/v1/events/org/{event.id.execution_id.org}/nodes\"\x14/api/v1/events/nodes\x12\xda\x01\n\x0f\x43reateTaskEvent\x12).flyteidl.admin.TaskExecutionEventRequest\x1a*.flyteidl.admin.TaskExecutionEventResponse\"p\x82\xd3\xe4\x93\x02j:\x01*ZO:\x01*\"J/api/v1/events/org/{event.parent_node_execution_id.execution_id.org}/tasks\"\x14/api/v1/events/tasks\x12\xcb\x05\n\x10GetTaskExecution\x12\'.flyteidl.admin.TaskExecutionGetRequest\x1a\x1d.flyteidl.admin.TaskExecution\"\xee\x04\x82\xd3\xe4\x93\x02\xe7\x04Z\xc8\x02\x12\xc5\x02/api/v1/task_executions/org/{id.node_execution_id.execution_id.org}/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}\x12\x99\x02/api/v1/task_executions/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}\x12\xf1\x03\n\x12ListTaskExecutions\x12(.flyteidl.admin.TaskExecutionListRequest\x1a!.flyteidl.admin.TaskExecutionList\"\x8d\x03\x82\xd3\xe4\x93\x02\x86\x03Z\xd6\x01\x12\xd3\x01/api/v1/task_executions/org/{node_execution_id.execution_id.org}/{node_execution_id.execution_id.project}/{node_execution_id.execution_id.domain}/{node_execution_id.execution_id.name}/{node_execution_id.node_id}\x12\xaa\x01/api/v1/task_executions/{node_execution_id.execution_id.project}/{node_execution_id.execution_id.domain}/{node_execution_id.execution_id.name}/{node_execution_id.node_id}\x12\xec\x05\n\x14GetTaskExecutionData\x12+.flyteidl.admin.TaskExecutionGetDataRequest\x1a,.flyteidl.admin.TaskExecutionGetDataResponse\"\xf8\x04\x82\xd3\xe4\x93\x02\xf1\x04Z\xcd\x02\x12\xca\x02/api/v1/data/task_executions/org/{id.node_execution_id.execution_id.org}/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}\x12\x9e\x02/api/v1/data/task_executions/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}\x12\xcb\x02\n\x1dUpdateProjectDomainAttributes\x12\x34.flyteidl.admin.ProjectDomainAttributesUpdateRequest\x1a\x35.flyteidl.admin.ProjectDomainAttributesUpdateResponse\"\xbc\x01\x82\xd3\xe4\x93\x02\xb5\x01:\x01*Zd:\x01*\x1a_/api/v1/project_domain_attributes/org/{attributes.org}/{attributes.project}/{attributes.domain}\x1aJ/api/v1/project_domain_attributes/{attributes.project}/{attributes.domain}\x12\x83\x02\n\x1aGetProjectDomainAttributes\x12\x31.flyteidl.admin.ProjectDomainAttributesGetRequest\x1a\x32.flyteidl.admin.ProjectDomainAttributesGetResponse\"~\x82\xd3\xe4\x93\x02xZ@\x12>/api/v1/project_domain_attributes/org/{org}/{project}/{domain}\x12\x34/api/v1/project_domain_attributes/{project}/{domain}\x12\x93\x02\n\x1d\x44\x65leteProjectDomainAttributes\x12\x34.flyteidl.admin.ProjectDomainAttributesDeleteRequest\x1a\x35.flyteidl.admin.ProjectDomainAttributesDeleteResponse\"\x84\x01\x82\xd3\xe4\x93\x02~:\x01*ZC:\x01**>/api/v1/project_domain_attributes/org/{org}/{project}/{domain}*4/api/v1/project_domain_attributes/{project}/{domain}\x12\x8a\x02\n\x17UpdateProjectAttributes\x12..flyteidl.admin.ProjectAttributesUpdateRequest\x1a/.flyteidl.admin.ProjectAttributesUpdateResponse\"\x8d\x01\x82\xd3\xe4\x93\x02\x86\x01:\x01*ZP:\x01*\x1aK/api/v1/project_domain_attributes/org/{attributes.org}/{attributes.project}\x1a//api/v1/project_attributes/{attributes.project}\x12\xd8\x01\n\x14GetProjectAttributes\x12+.flyteidl.admin.ProjectAttributesGetRequest\x1a,.flyteidl.admin.ProjectAttributesGetResponse\"e\x82\xd3\xe4\x93\x02_Z7\x12\x35/api/v1/project_domain_attributes/org/{org}/{project}\x12$/api/v1/project_attributes/{project}\x12\xe7\x01\n\x17\x44\x65leteProjectAttributes\x12..flyteidl.admin.ProjectAttributesDeleteRequest\x1a/.flyteidl.admin.ProjectAttributesDeleteResponse\"k\x82\xd3\xe4\x93\x02\x65:\x01*Z::\x01**5/api/v1/project_domain_attributes/org/{org}/{project}*$/api/v1/project_attributes/{project}\x12\xdc\x02\n\x18UpdateWorkflowAttributes\x12/.flyteidl.admin.WorkflowAttributesUpdateRequest\x1a\x30.flyteidl.admin.WorkflowAttributesUpdateResponse\"\xdc\x01\x82\xd3\xe4\x93\x02\xd5\x01:\x01*Zt:\x01*\x1ao/api/v1/workflow_attributes/org/{attributes.org}/{attributes.project}/{attributes.domain}/{attributes.workflow}\x1aZ/api/v1/workflow_attributes/{attributes.project}/{attributes.domain}/{attributes.workflow}\x12\x80\x02\n\x15GetWorkflowAttributes\x12,.flyteidl.admin.WorkflowAttributesGetRequest\x1a-.flyteidl.admin.WorkflowAttributesGetResponse\"\x89\x01\x82\xd3\xe4\x93\x02\x82\x01ZE\x12\x43/api/v1/workflow_attributes/org/{org}/{project}/{domain}/{workflow}\x12\x39/api/v1/workflow_attributes/{project}/{domain}/{workflow}\x12\x8f\x02\n\x18\x44\x65leteWorkflowAttributes\x12/.flyteidl.admin.WorkflowAttributesDeleteRequest\x1a\x30.flyteidl.admin.WorkflowAttributesDeleteResponse\"\x8f\x01\x82\xd3\xe4\x93\x02\x88\x01:\x01*ZH:\x01**C/api/v1/workflow_attributes/org/{org}/{project}/{domain}/{workflow}*9/api/v1/workflow_attributes/{project}/{domain}/{workflow}\x12\xca\x01\n\x17ListMatchableAttributes\x12..flyteidl.admin.ListMatchableAttributesRequest\x1a/.flyteidl.admin.ListMatchableAttributesResponse\"N\x82\xd3\xe4\x93\x02HZ(\x12&/api/v1/matchable_attributes/org/{org}\x12\x1c/api/v1/matchable_attributes\x12\xe8\x01\n\x11ListNamedEntities\x12&.flyteidl.admin.NamedEntityListRequest\x1a\x1f.flyteidl.admin.NamedEntityList\"\x89\x01\x82\xd3\xe4\x93\x02\x82\x01ZE\x12\x43/api/v1/named_entities/{resource_type}/org/{org}/{project}/{domain}\x12\x39/api/v1/named_entities/{resource_type}/{project}/{domain}\x12\x83\x02\n\x0eGetNamedEntity\x12%.flyteidl.admin.NamedEntityGetRequest\x1a\x1b.flyteidl.admin.NamedEntity\"\xac\x01\x82\xd3\xe4\x93\x02\xa5\x01ZX\x12V/api/v1/named_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain}/{id.name}\x12I/api/v1/named_entities/{resource_type}/{id.project}/{id.domain}/{id.name}\x12\x9d\x02\n\x11UpdateNamedEntity\x12(.flyteidl.admin.NamedEntityUpdateRequest\x1a).flyteidl.admin.NamedEntityUpdateResponse\"\xb2\x01\x82\xd3\xe4\x93\x02\xab\x01:\x01*Z[:\x01*\x1aV/api/v1/named_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain}/{id.name}\x1aI/api/v1/named_entities/{resource_type}/{id.project}/{id.domain}/{id.name}\x12l\n\nGetVersion\x12!.flyteidl.admin.GetVersionRequest\x1a\".flyteidl.admin.GetVersionResponse\"\x17\x82\xd3\xe4\x93\x02\x11\x12\x0f/api/v1/version\x12\xb6\x02\n\x14GetDescriptionEntity\x12 .flyteidl.admin.ObjectGetRequest\x1a!.flyteidl.admin.DescriptionEntity\"\xd8\x01\x82\xd3\xe4\x93\x02\xd1\x01Zn\x12l/api/v1/description_entities/org/{id.org}/{id.resource_type}/{id.project}/{id.domain}/{id.name}/{id.version}\x12_/api/v1/description_entities/{id.resource_type}/{id.project}/{id.domain}/{id.name}/{id.version}\x12\xc8\x03\n\x17ListDescriptionEntities\x12,.flyteidl.admin.DescriptionEntityListRequest\x1a%.flyteidl.admin.DescriptionEntityList\"\xd7\x02\x82\xd3\xe4\x93\x02\xd0\x02Z^\x12\\/api/v1/description_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain}/{id.name}ZG\x12\x45/api/v1/description_entities/{resource_type}/{id.project}/{id.domain}ZT\x12R/api/v1/description_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain}\x12O/api/v1/description_entities/{resource_type}/{id.project}/{id.domain}/{id.name}\x12\x95\x02\n\x13GetExecutionMetrics\x12\x32.flyteidl.admin.WorkflowExecutionGetMetricsRequest\x1a\x33.flyteidl.admin.WorkflowExecutionGetMetricsResponse\"\x94\x01\x82\xd3\xe4\x93\x02\x8d\x01ZL\x12J/api/v1/metrics/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}\x12=/api/v1/metrics/executions/{id.project}/{id.domain}/{id.name}B\xc2\x01\n\x14\x63om.flyteidl.serviceB\nAdminProtoP\x01Z=github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/service\xa2\x02\x03\x46SX\xaa\x02\x10\x46lyteidl.Service\xca\x02\x10\x46lyteidl\\Service\xe2\x02\x1c\x46lyteidl\\Service\\GPBMetadata\xea\x02\x11\x46lyteidl::Serviceb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -39,7 +39,7 @@ DESCRIPTOR._options = None DESCRIPTOR._serialized_options = b'\n\024com.flyteidl.serviceB\nAdminProtoP\001Z=github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/service\242\002\003FSX\252\002\020Flyteidl.Service\312\002\020Flyteidl\\Service\342\002\034Flyteidl\\Service\\GPBMetadata\352\002\021Flyteidl::Service' _ADMINSERVICE.methods_by_name['CreateTask']._options = None - _ADMINSERVICE.methods_by_name['CreateTask']._serialized_options = b'\202\323\344\223\002\022:\001*\"\r/api/v1/tasks' + _ADMINSERVICE.methods_by_name['CreateTask']._serialized_options = b'\202\323\344\223\0023:\001*Z\037:\001*\"\032/api/v1/tasks/org/{id.org}\"\r/api/v1/tasks' _ADMINSERVICE.methods_by_name['GetTask']._options = None _ADMINSERVICE.methods_by_name['GetTask']._serialized_options = b'\202\323\344\223\002\215\001ZL\022J/api/v1/tasks/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version}\022=/api/v1/tasks/{id.project}/{id.domain}/{id.name}/{id.version}' _ADMINSERVICE.methods_by_name['ListTaskIds']._options = None @@ -47,7 +47,7 @@ _ADMINSERVICE.methods_by_name['ListTasks']._options = None _ADMINSERVICE.methods_by_name['ListTasks']._serialized_options = b'\202\323\344\223\002\324\001Z?\022=/api/v1/tasks/org/{id.org}/{id.project}/{id.domain}/{id.name}Z(\022&/api/v1/tasks/{id.project}/{id.domain}Z5\0223/api/v1/tasks/org/{id.org}/{id.project}/{id.domain}\0220/api/v1/tasks/{id.project}/{id.domain}/{id.name}' _ADMINSERVICE.methods_by_name['CreateWorkflow']._options = None - _ADMINSERVICE.methods_by_name['CreateWorkflow']._serialized_options = b'\202\323\344\223\002\026:\001*\"\021/api/v1/workflows' + _ADMINSERVICE.methods_by_name['CreateWorkflow']._serialized_options = b'\202\323\344\223\002;:\001*Z#:\001*\"\036/api/v1/workflows/org/{id.org}\"\021/api/v1/workflows' _ADMINSERVICE.methods_by_name['GetWorkflow']._options = None _ADMINSERVICE.methods_by_name['GetWorkflow']._serialized_options = b'\202\323\344\223\002\225\001ZP\022N/api/v1/workflows/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version}\022A/api/v1/workflows/{id.project}/{id.domain}/{id.name}/{id.version}' _ADMINSERVICE.methods_by_name['ListWorkflowIds']._options = None @@ -55,13 +55,13 @@ _ADMINSERVICE.methods_by_name['ListWorkflows']._options = None _ADMINSERVICE.methods_by_name['ListWorkflows']._serialized_options = b'\202\323\344\223\002\344\001ZC\022A/api/v1/workflows/org/{id.org}/{id.project}/{id.domain}/{id.name}Z,\022*/api/v1/workflows/{id.project}/{id.domain}Z9\0227/api/v1/workflows/org/{id.org}/{id.project}/{id.domain}\0224/api/v1/workflows/{id.project}/{id.domain}/{id.name}' _ADMINSERVICE.methods_by_name['CreateLaunchPlan']._options = None - _ADMINSERVICE.methods_by_name['CreateLaunchPlan']._serialized_options = b'\202\323\344\223\002\031:\001*\"\024/api/v1/launch_plans' + _ADMINSERVICE.methods_by_name['CreateLaunchPlan']._serialized_options = b'\202\323\344\223\002A:\001*Z&:\001*\"!/api/v1/launch_plans/org/{id.org}\"\024/api/v1/launch_plans' _ADMINSERVICE.methods_by_name['GetLaunchPlan']._options = None _ADMINSERVICE.methods_by_name['GetLaunchPlan']._serialized_options = b'\202\323\344\223\002\233\001ZS\022Q/api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version}\022D/api/v1/launch_plans/{id.project}/{id.domain}/{id.name}/{id.version}' _ADMINSERVICE.methods_by_name['GetActiveLaunchPlan']._options = None _ADMINSERVICE.methods_by_name['GetActiveLaunchPlan']._serialized_options = b'\202\323\344\223\002\217\001ZM\022K/api/v1/active_launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name}\022>/api/v1/active_launch_plans/{id.project}/{id.domain}/{id.name}' _ADMINSERVICE.methods_by_name['ListActiveLaunchPlans']._options = None - _ADMINSERVICE.methods_by_name['ListActiveLaunchPlans']._serialized_options = b'\202\323\344\223\0020\022./api/v1/active_launch_plans/{project}/{domain}' + _ADMINSERVICE.methods_by_name['ListActiveLaunchPlans']._serialized_options = b'\202\323\344\223\002lZ:\0228/api/v1/active_launch_plans/org/{org}/{project}/{domain}\022./api/v1/active_launch_plans/{project}/{domain}' _ADMINSERVICE.methods_by_name['ListLaunchPlanIds']._options = None _ADMINSERVICE.methods_by_name['ListLaunchPlanIds']._serialized_options = b'\202\323\344\223\002dZ6\0224/api/v1/launch_plan_ids/org/{org}/{project}/{domain}\022*/api/v1/launch_plan_ids/{project}/{domain}' _ADMINSERVICE.methods_by_name['ListLaunchPlans']._options = None @@ -69,11 +69,11 @@ _ADMINSERVICE.methods_by_name['UpdateLaunchPlan']._options = None _ADMINSERVICE.methods_by_name['UpdateLaunchPlan']._serialized_options = b'\202\323\344\223\002\236\001:\001*ZS\032Q/api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version}\032D/api/v1/launch_plans/{id.project}/{id.domain}/{id.name}/{id.version}' _ADMINSERVICE.methods_by_name['CreateExecution']._options = None - _ADMINSERVICE.methods_by_name['CreateExecution']._serialized_options = b'\202\323\344\223\002\027:\001*\"\022/api/v1/executions' + _ADMINSERVICE.methods_by_name['CreateExecution']._serialized_options = b'\202\323\344\223\002::\001*Z!:\001*\032\034/api/v1/executions/org/{org}\"\022/api/v1/executions' _ADMINSERVICE.methods_by_name['RelaunchExecution']._options = None - _ADMINSERVICE.methods_by_name['RelaunchExecution']._serialized_options = b'\202\323\344\223\002 :\001*\"\033/api/v1/executions/relaunch' + _ADMINSERVICE.methods_by_name['RelaunchExecution']._serialized_options = b'\202\323\344\223\002O:\001*Z-:\001*\"(/api/v1/executions/org/{id.org}/relaunch\"\033/api/v1/executions/relaunch' _ADMINSERVICE.methods_by_name['RecoverExecution']._options = None - _ADMINSERVICE.methods_by_name['RecoverExecution']._serialized_options = b'\202\323\344\223\002\037:\001*\"\032/api/v1/executions/recover' + _ADMINSERVICE.methods_by_name['RecoverExecution']._serialized_options = b'\202\323\344\223\002M:\001*Z,:\001*\"\'/api/v1/executions/org/{id.org}/recover\"\032/api/v1/executions/recover' _ADMINSERVICE.methods_by_name['GetExecution']._options = None _ADMINSERVICE.methods_by_name['GetExecution']._serialized_options = b'\202\323\344\223\002}ZD\022B/api/v1/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}\0225/api/v1/executions/{id.project}/{id.domain}/{id.name}' _ADMINSERVICE.methods_by_name['UpdateExecution']._options = None @@ -83,7 +83,7 @@ _ADMINSERVICE.methods_by_name['ListExecutions']._options = None _ADMINSERVICE.methods_by_name['ListExecutions']._serialized_options = b'\202\323\344\223\002iZ:\0228/api/v1/executions/org/{id.org}/{id.project}/{id.domain}\022+/api/v1/executions/{id.project}/{id.domain}' _ADMINSERVICE.methods_by_name['TerminateExecution']._options = None - _ADMINSERVICE.methods_by_name['TerminateExecution']._serialized_options = b'\202\323\344\223\002\210\001:\001*ZL:\001**G/api/v1/data/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}*5/api/v1/executions/{id.project}/{id.domain}/{id.name}' + _ADMINSERVICE.methods_by_name['TerminateExecution']._serialized_options = b'\202\323\344\223\002\203\001:\001*ZG:\001**B/api/v1/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}*5/api/v1/executions/{id.project}/{id.domain}/{id.name}' _ADMINSERVICE.methods_by_name['GetNodeExecution']._options = None _ADMINSERVICE.methods_by_name['GetNodeExecution']._serialized_options = b'\202\323\344\223\002\376\001Z\213\001\022\210\001/api/v1/node_executions/org/{id.execution_id.org}/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}\022n/api/v1/node_executions/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}' _ADMINSERVICE.methods_by_name['ListNodeExecutions']._options = None @@ -93,17 +93,17 @@ _ADMINSERVICE.methods_by_name['GetNodeExecutionData']._options = None _ADMINSERVICE.methods_by_name['GetNodeExecutionData']._serialized_options = b'\202\323\344\223\002\210\002Z\220\001\022\215\001/api/v1/data/node_executions/org/{id.execution_id.org}/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}\022s/api/v1/data/node_executions/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}' _ADMINSERVICE.methods_by_name['RegisterProject']._options = None - _ADMINSERVICE.methods_by_name['RegisterProject']._serialized_options = b'\202\323\344\223\002\025:\001*\"\020/api/v1/projects' + _ADMINSERVICE.methods_by_name['RegisterProject']._serialized_options = b'\202\323\344\223\002>:\001*Z\':\001*\"\"/api/v1/projects/org/{project.org}\"\020/api/v1/projects' _ADMINSERVICE.methods_by_name['UpdateProject']._options = None _ADMINSERVICE.methods_by_name['UpdateProject']._serialized_options = b'\202\323\344\223\002@:\001*Z$:\001*\032\037/api/v1/projects/org/{org}/{id}\032\025/api/v1/projects/{id}' _ADMINSERVICE.methods_by_name['ListProjects']._options = None - _ADMINSERVICE.methods_by_name['ListProjects']._serialized_options = b'\202\323\344\223\002\022\022\020/api/v1/projects' + _ADMINSERVICE.methods_by_name['ListProjects']._serialized_options = b'\202\323\344\223\0020Z\034\022\032/api/v1/projects/org/{org}\022\020/api/v1/projects' _ADMINSERVICE.methods_by_name['CreateWorkflowEvent']._options = None - _ADMINSERVICE.methods_by_name['CreateWorkflowEvent']._serialized_options = b'\202\323\344\223\002\035:\001*\"\030/api/v1/events/workflows' + _ADMINSERVICE.methods_by_name['CreateWorkflowEvent']._serialized_options = b'\202\323\344\223\002Y:\001*Z::\001*\"5/api/v1/events/org/{event.execution_id.org}/workflows\"\030/api/v1/events/workflows' _ADMINSERVICE.methods_by_name['CreateNodeEvent']._options = None - _ADMINSERVICE.methods_by_name['CreateNodeEvent']._serialized_options = b'\202\323\344\223\002\031:\001*\"\024/api/v1/events/nodes' + _ADMINSERVICE.methods_by_name['CreateNodeEvent']._serialized_options = b'\202\323\344\223\002T:\001*Z9:\001*\"4/api/v1/events/org/{event.id.execution_id.org}/nodes\"\024/api/v1/events/nodes' _ADMINSERVICE.methods_by_name['CreateTaskEvent']._options = None - _ADMINSERVICE.methods_by_name['CreateTaskEvent']._serialized_options = b'\202\323\344\223\002\031:\001*\"\024/api/v1/events/tasks' + _ADMINSERVICE.methods_by_name['CreateTaskEvent']._serialized_options = b'\202\323\344\223\002j:\001*ZO:\001*\"J/api/v1/events/org/{event.parent_node_execution_id.execution_id.org}/tasks\"\024/api/v1/events/tasks' _ADMINSERVICE.methods_by_name['GetTaskExecution']._options = None _ADMINSERVICE.methods_by_name['GetTaskExecution']._serialized_options = b'\202\323\344\223\002\347\004Z\310\002\022\305\002/api/v1/task_executions/org/{id.node_execution_id.execution_id.org}/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}\022\231\002/api/v1/task_executions/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}' _ADMINSERVICE.methods_by_name['ListTaskExecutions']._options = None @@ -129,7 +129,7 @@ _ADMINSERVICE.methods_by_name['DeleteWorkflowAttributes']._options = None _ADMINSERVICE.methods_by_name['DeleteWorkflowAttributes']._serialized_options = b'\202\323\344\223\002\210\001:\001*ZH:\001**C/api/v1/workflow_attributes/org/{org}/{project}/{domain}/{workflow}*9/api/v1/workflow_attributes/{project}/{domain}/{workflow}' _ADMINSERVICE.methods_by_name['ListMatchableAttributes']._options = None - _ADMINSERVICE.methods_by_name['ListMatchableAttributes']._serialized_options = b'\202\323\344\223\002\036\022\034/api/v1/matchable_attributes' + _ADMINSERVICE.methods_by_name['ListMatchableAttributes']._serialized_options = b'\202\323\344\223\002HZ(\022&/api/v1/matchable_attributes/org/{org}\022\034/api/v1/matchable_attributes' _ADMINSERVICE.methods_by_name['ListNamedEntities']._options = None _ADMINSERVICE.methods_by_name['ListNamedEntities']._serialized_options = b'\202\323\344\223\002\202\001ZE\022C/api/v1/named_entities/{resource_type}/org/{org}/{project}/{domain}\0229/api/v1/named_entities/{resource_type}/{project}/{domain}' _ADMINSERVICE.methods_by_name['GetNamedEntity']._options = None @@ -145,5 +145,5 @@ _ADMINSERVICE.methods_by_name['GetExecutionMetrics']._options = None _ADMINSERVICE.methods_by_name['GetExecutionMetrics']._serialized_options = b'\202\323\344\223\002\215\001ZL\022J/api/v1/metrics/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}\022=/api/v1/metrics/executions/{id.project}/{id.domain}/{id.name}' _globals['_ADMINSERVICE']._serialized_start=609 - _globals['_ADMINSERVICE']._serialized_end=15126 + _globals['_ADMINSERVICE']._serialized_end=15736 # @@protoc_insertion_point(module_scope) diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/README.md b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/README.md index 8b5357a947..6490f1b9a8 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/README.md +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/README.md @@ -71,12 +71,19 @@ All URIs are relative to *http://localhost* Class | Method | HTTP request | Description ------------ | ------------- | ------------- | ------------- *AdminServiceApi* | [**create_execution**](docs/AdminServiceApi.md#create_execution) | **POST** /api/v1/executions | Triggers the creation of a :ref:`ref_flyteidl.admin.Execution` +*AdminServiceApi* | [**create_execution2**](docs/AdminServiceApi.md#create_execution2) | **PUT** /api/v1/executions/org/{org} | Triggers the creation of a :ref:`ref_flyteidl.admin.Execution` *AdminServiceApi* | [**create_launch_plan**](docs/AdminServiceApi.md#create_launch_plan) | **POST** /api/v1/launch_plans | Create and upload a :ref:`ref_flyteidl.admin.LaunchPlan` definition +*AdminServiceApi* | [**create_launch_plan2**](docs/AdminServiceApi.md#create_launch_plan2) | **POST** /api/v1/launch_plans/org/{id.org} | Create and upload a :ref:`ref_flyteidl.admin.LaunchPlan` definition *AdminServiceApi* | [**create_node_event**](docs/AdminServiceApi.md#create_node_event) | **POST** /api/v1/events/nodes | Indicates a :ref:`ref_flyteidl.event.NodeExecutionEvent` has occurred. +*AdminServiceApi* | [**create_node_event2**](docs/AdminServiceApi.md#create_node_event2) | **POST** /api/v1/events/org/{event.id.execution_id.org}/nodes | Indicates a :ref:`ref_flyteidl.event.NodeExecutionEvent` has occurred. *AdminServiceApi* | [**create_task**](docs/AdminServiceApi.md#create_task) | **POST** /api/v1/tasks | Create and upload a :ref:`ref_flyteidl.admin.Task` definition +*AdminServiceApi* | [**create_task2**](docs/AdminServiceApi.md#create_task2) | **POST** /api/v1/tasks/org/{id.org} | Create and upload a :ref:`ref_flyteidl.admin.Task` definition *AdminServiceApi* | [**create_task_event**](docs/AdminServiceApi.md#create_task_event) | **POST** /api/v1/events/tasks | Indicates a :ref:`ref_flyteidl.event.TaskExecutionEvent` has occurred. +*AdminServiceApi* | [**create_task_event2**](docs/AdminServiceApi.md#create_task_event2) | **POST** /api/v1/events/org/{event.parent_node_execution_id.execution_id.org}/tasks | Indicates a :ref:`ref_flyteidl.event.TaskExecutionEvent` has occurred. *AdminServiceApi* | [**create_workflow**](docs/AdminServiceApi.md#create_workflow) | **POST** /api/v1/workflows | Create and upload a :ref:`ref_flyteidl.admin.Workflow` definition +*AdminServiceApi* | [**create_workflow2**](docs/AdminServiceApi.md#create_workflow2) | **POST** /api/v1/workflows/org/{id.org} | Create and upload a :ref:`ref_flyteidl.admin.Workflow` definition *AdminServiceApi* | [**create_workflow_event**](docs/AdminServiceApi.md#create_workflow_event) | **POST** /api/v1/events/workflows | Indicates a :ref:`ref_flyteidl.event.WorkflowExecutionEvent` has occurred. +*AdminServiceApi* | [**create_workflow_event2**](docs/AdminServiceApi.md#create_workflow_event2) | **POST** /api/v1/events/org/{event.execution_id.org}/workflows | Indicates a :ref:`ref_flyteidl.event.WorkflowExecutionEvent` has occurred. *AdminServiceApi* | [**delete_project_attributes**](docs/AdminServiceApi.md#delete_project_attributes) | **DELETE** /api/v1/project_attributes/{project} | Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. *AdminServiceApi* | [**delete_project_attributes2**](docs/AdminServiceApi.md#delete_project_attributes2) | **DELETE** /api/v1/project_domain_attributes/org/{org}/{project} | Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. *AdminServiceApi* | [**delete_project_domain_attributes**](docs/AdminServiceApi.md#delete_project_domain_attributes) | **DELETE** /api/v1/project_domain_attributes/{project}/{domain} | Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. @@ -117,6 +124,7 @@ Class | Method | HTTP request | Description *AdminServiceApi* | [**get_workflow_attributes**](docs/AdminServiceApi.md#get_workflow_attributes) | **GET** /api/v1/workflow_attributes/{project}/{domain}/{workflow} | Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. *AdminServiceApi* | [**get_workflow_attributes2**](docs/AdminServiceApi.md#get_workflow_attributes2) | **GET** /api/v1/workflow_attributes/org/{org}/{project}/{domain}/{workflow} | Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. *AdminServiceApi* | [**list_active_launch_plans**](docs/AdminServiceApi.md#list_active_launch_plans) | **GET** /api/v1/active_launch_plans/{project}/{domain} | List active versions of :ref:`ref_flyteidl.admin.LaunchPlan`. +*AdminServiceApi* | [**list_active_launch_plans2**](docs/AdminServiceApi.md#list_active_launch_plans2) | **GET** /api/v1/active_launch_plans/org/{org}/{project}/{domain} | List active versions of :ref:`ref_flyteidl.admin.LaunchPlan`. *AdminServiceApi* | [**list_description_entities**](docs/AdminServiceApi.md#list_description_entities) | **GET** /api/v1/description_entities/{resource_type}/{id.project}/{id.domain}/{id.name} | Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. *AdminServiceApi* | [**list_description_entities2**](docs/AdminServiceApi.md#list_description_entities2) | **GET** /api/v1/description_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain}/{id.name} | Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. *AdminServiceApi* | [**list_description_entities3**](docs/AdminServiceApi.md#list_description_entities3) | **GET** /api/v1/description_entities/{resource_type}/{id.project}/{id.domain} | Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. @@ -130,6 +138,7 @@ Class | Method | HTTP request | Description *AdminServiceApi* | [**list_launch_plans3**](docs/AdminServiceApi.md#list_launch_plans3) | **GET** /api/v1/launch_plans/{id.project}/{id.domain} | Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. *AdminServiceApi* | [**list_launch_plans4**](docs/AdminServiceApi.md#list_launch_plans4) | **GET** /api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain} | Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. *AdminServiceApi* | [**list_matchable_attributes**](docs/AdminServiceApi.md#list_matchable_attributes) | **GET** /api/v1/matchable_attributes | Lists custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a specific resource type. +*AdminServiceApi* | [**list_matchable_attributes2**](docs/AdminServiceApi.md#list_matchable_attributes2) | **GET** /api/v1/matchable_attributes/org/{org} | Lists custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a specific resource type. *AdminServiceApi* | [**list_named_entities**](docs/AdminServiceApi.md#list_named_entities) | **GET** /api/v1/named_entities/{resource_type}/{project}/{domain} | Returns a list of :ref:`ref_flyteidl.admin.NamedEntity` objects. *AdminServiceApi* | [**list_named_entities2**](docs/AdminServiceApi.md#list_named_entities2) | **GET** /api/v1/named_entities/{resource_type}/org/{org}/{project}/{domain} | Returns a list of :ref:`ref_flyteidl.admin.NamedEntity` objects. *AdminServiceApi* | [**list_node_executions**](docs/AdminServiceApi.md#list_node_executions) | **GET** /api/v1/node_executions/{workflow_execution_id.project}/{workflow_execution_id.domain}/{workflow_execution_id.name} | Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution`. @@ -137,6 +146,7 @@ Class | Method | HTTP request | Description *AdminServiceApi* | [**list_node_executions_for_task**](docs/AdminServiceApi.md#list_node_executions_for_task) | **GET** /api/v1/children/task_executions/{task_execution_id.node_execution_id.execution_id.project}/{task_execution_id.node_execution_id.execution_id.domain}/{task_execution_id.node_execution_id.execution_id.name}/{task_execution_id.node_execution_id.node_id}/{task_execution_id.task_id.project}/{task_execution_id.task_id.domain}/{task_execution_id.task_id.name}/{task_execution_id.task_id.version}/{task_execution_id.retry_attempt} | Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution` launched by the reference :ref:`ref_flyteidl.admin.TaskExecution`. *AdminServiceApi* | [**list_node_executions_for_task2**](docs/AdminServiceApi.md#list_node_executions_for_task2) | **GET** /api/v1/children/task_executions/org/{task_execution_id.node_execution_id.execution_id.org}/{task_execution_id.node_execution_id.execution_id.project}/{task_execution_id.node_execution_id.execution_id.domain}/{task_execution_id.node_execution_id.execution_id.name}/{task_execution_id.node_execution_id.node_id}/{task_execution_id.task_id.project}/{task_execution_id.task_id.domain}/{task_execution_id.task_id.name}/{task_execution_id.task_id.version}/{task_execution_id.retry_attempt} | Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution` launched by the reference :ref:`ref_flyteidl.admin.TaskExecution`. *AdminServiceApi* | [**list_projects**](docs/AdminServiceApi.md#list_projects) | **GET** /api/v1/projects | Fetches a list of :ref:`ref_flyteidl.admin.Project` +*AdminServiceApi* | [**list_projects2**](docs/AdminServiceApi.md#list_projects2) | **GET** /api/v1/projects/org/{org} | Fetches a list of :ref:`ref_flyteidl.admin.Project` *AdminServiceApi* | [**list_task_executions**](docs/AdminServiceApi.md#list_task_executions) | **GET** /api/v1/task_executions/{node_execution_id.execution_id.project}/{node_execution_id.execution_id.domain}/{node_execution_id.execution_id.name}/{node_execution_id.node_id} | Fetches a list of :ref:`ref_flyteidl.admin.TaskExecution`. *AdminServiceApi* | [**list_task_executions2**](docs/AdminServiceApi.md#list_task_executions2) | **GET** /api/v1/task_executions/org/{node_execution_id.execution_id.org}/{node_execution_id.execution_id.project}/{node_execution_id.execution_id.domain}/{node_execution_id.execution_id.name}/{node_execution_id.node_id} | Fetches a list of :ref:`ref_flyteidl.admin.TaskExecution`. *AdminServiceApi* | [**list_task_ids**](docs/AdminServiceApi.md#list_task_ids) | **GET** /api/v1/task_ids/{project}/{domain} | Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of task objects. @@ -152,10 +162,13 @@ Class | Method | HTTP request | Description *AdminServiceApi* | [**list_workflows3**](docs/AdminServiceApi.md#list_workflows3) | **GET** /api/v1/workflows/{id.project}/{id.domain} | Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. *AdminServiceApi* | [**list_workflows4**](docs/AdminServiceApi.md#list_workflows4) | **GET** /api/v1/workflows/org/{id.org}/{id.project}/{id.domain} | Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. *AdminServiceApi* | [**recover_execution**](docs/AdminServiceApi.md#recover_execution) | **POST** /api/v1/executions/recover | Recreates a previously-run workflow execution that will only start executing from the last known failure point. In Recover mode, users cannot change any input parameters or update the version of the execution. This is extremely useful to recover from system errors and byzantine faults like - Loss of K8s cluster, bugs in platform or instability, machine failures, downstream system failures (downstream services), or simply to recover executions that failed because of retry exhaustion and should complete if tried again. See :ref:`ref_flyteidl.admin.ExecutionRecoverRequest` for more details. +*AdminServiceApi* | [**recover_execution2**](docs/AdminServiceApi.md#recover_execution2) | **POST** /api/v1/executions/org/{id.org}/recover | Recreates a previously-run workflow execution that will only start executing from the last known failure point. In Recover mode, users cannot change any input parameters or update the version of the execution. This is extremely useful to recover from system errors and byzantine faults like - Loss of K8s cluster, bugs in platform or instability, machine failures, downstream system failures (downstream services), or simply to recover executions that failed because of retry exhaustion and should complete if tried again. See :ref:`ref_flyteidl.admin.ExecutionRecoverRequest` for more details. *AdminServiceApi* | [**register_project**](docs/AdminServiceApi.md#register_project) | **POST** /api/v1/projects | Registers a :ref:`ref_flyteidl.admin.Project` with the Flyte deployment. +*AdminServiceApi* | [**register_project2**](docs/AdminServiceApi.md#register_project2) | **POST** /api/v1/projects/org/{project.org} | Registers a :ref:`ref_flyteidl.admin.Project` with the Flyte deployment. *AdminServiceApi* | [**relaunch_execution**](docs/AdminServiceApi.md#relaunch_execution) | **POST** /api/v1/executions/relaunch | Triggers the creation of an identical :ref:`ref_flyteidl.admin.Execution` +*AdminServiceApi* | [**relaunch_execution2**](docs/AdminServiceApi.md#relaunch_execution2) | **POST** /api/v1/executions/org/{id.org}/relaunch | Triggers the creation of an identical :ref:`ref_flyteidl.admin.Execution` *AdminServiceApi* | [**terminate_execution**](docs/AdminServiceApi.md#terminate_execution) | **DELETE** /api/v1/executions/{id.project}/{id.domain}/{id.name} | Terminates an in-progress :ref:`ref_flyteidl.admin.Execution`. -*AdminServiceApi* | [**terminate_execution2**](docs/AdminServiceApi.md#terminate_execution2) | **DELETE** /api/v1/data/executions/org/{id.org}/{id.project}/{id.domain}/{id.name} | Terminates an in-progress :ref:`ref_flyteidl.admin.Execution`. +*AdminServiceApi* | [**terminate_execution2**](docs/AdminServiceApi.md#terminate_execution2) | **DELETE** /api/v1/executions/org/{id.org}/{id.project}/{id.domain}/{id.name} | Terminates an in-progress :ref:`ref_flyteidl.admin.Execution`. *AdminServiceApi* | [**update_execution**](docs/AdminServiceApi.md#update_execution) | **PUT** /api/v1/executions/{id.project}/{id.domain}/{id.name} | Update execution belonging to project domain :ref:`ref_flyteidl.admin.Execution`. *AdminServiceApi* | [**update_execution2**](docs/AdminServiceApi.md#update_execution2) | **PUT** /api/v1/executions/org/{id.org}/{id.project}/{id.domain}/{id.name} | Update execution belonging to project domain :ref:`ref_flyteidl.admin.Execution`. *AdminServiceApi* | [**update_launch_plan**](docs/AdminServiceApi.md#update_launch_plan) | **PUT** /api/v1/launch_plans/{id.project}/{id.domain}/{id.name}/{id.version} | Updates the status of a registered :ref:`ref_flyteidl.admin.LaunchPlan`. diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/api/admin_service_api.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/api/admin_service_api.py index 1e91c85c21..ee0e11ddb3 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/api/admin_service_api.py +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/api/admin_service_api.py @@ -130,43 +130,45 @@ def create_execution_with_http_info(self, body, **kwargs): # noqa: E501 _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def create_launch_plan(self, body, **kwargs): # noqa: E501 - """Create and upload a :ref:`ref_flyteidl.admin.LaunchPlan` definition # noqa: E501 + def create_execution2(self, org, body, **kwargs): # noqa: E501 + """Triggers the creation of a :ref:`ref_flyteidl.admin.Execution` # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.create_launch_plan(body, async_req=True) + >>> thread = api.create_execution2(org, body, async_req=True) >>> result = thread.get() :param async_req bool - :param AdminLaunchPlanCreateRequest body: (required) - :return: AdminLaunchPlanCreateResponse + :param str org: Optional, org key applied to the resource. (required) + :param AdminExecutionCreateRequest body: (required) + :return: AdminExecutionCreateResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.create_launch_plan_with_http_info(body, **kwargs) # noqa: E501 + return self.create_execution2_with_http_info(org, body, **kwargs) # noqa: E501 else: - (data) = self.create_launch_plan_with_http_info(body, **kwargs) # noqa: E501 + (data) = self.create_execution2_with_http_info(org, body, **kwargs) # noqa: E501 return data - def create_launch_plan_with_http_info(self, body, **kwargs): # noqa: E501 - """Create and upload a :ref:`ref_flyteidl.admin.LaunchPlan` definition # noqa: E501 + def create_execution2_with_http_info(self, org, body, **kwargs): # noqa: E501 + """Triggers the creation of a :ref:`ref_flyteidl.admin.Execution` # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.create_launch_plan_with_http_info(body, async_req=True) + >>> thread = api.create_execution2_with_http_info(org, body, async_req=True) >>> result = thread.get() :param async_req bool - :param AdminLaunchPlanCreateRequest body: (required) - :return: AdminLaunchPlanCreateResponse + :param str org: Optional, org key applied to the resource. (required) + :param AdminExecutionCreateRequest body: (required) + :return: AdminExecutionCreateResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['body'] # noqa: E501 + all_params = ['org', 'body'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -177,18 +179,24 @@ def create_launch_plan_with_http_info(self, body, **kwargs): # noqa: E501 if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method create_launch_plan" % key + " to method create_execution2" % key ) params[key] = val del params['kwargs'] + # verify the required parameter 'org' is set + if ('org' not in params or + params['org'] is None): + raise ValueError("Missing the required parameter `org` when calling `create_execution2`") # noqa: E501 # verify the required parameter 'body' is set if ('body' not in params or params['body'] is None): - raise ValueError("Missing the required parameter `body` when calling `create_launch_plan`") # noqa: E501 + raise ValueError("Missing the required parameter `body` when calling `create_execution2`") # noqa: E501 collection_formats = {} path_params = {} + if 'org' in params: + path_params['org'] = params['org'] # noqa: E501 query_params = [] @@ -212,14 +220,14 @@ def create_launch_plan_with_http_info(self, body, **kwargs): # noqa: E501 auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/launch_plans', 'POST', + '/api/v1/executions/org/{org}', 'PUT', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminLaunchPlanCreateResponse', # noqa: E501 + response_type='AdminExecutionCreateResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -227,38 +235,38 @@ def create_launch_plan_with_http_info(self, body, **kwargs): # noqa: E501 _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def create_node_event(self, body, **kwargs): # noqa: E501 - """Indicates a :ref:`ref_flyteidl.event.NodeExecutionEvent` has occurred. # noqa: E501 + def create_launch_plan(self, body, **kwargs): # noqa: E501 + """Create and upload a :ref:`ref_flyteidl.admin.LaunchPlan` definition # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.create_node_event(body, async_req=True) + >>> thread = api.create_launch_plan(body, async_req=True) >>> result = thread.get() :param async_req bool - :param AdminNodeExecutionEventRequest body: (required) - :return: AdminNodeExecutionEventResponse + :param AdminLaunchPlanCreateRequest body: (required) + :return: AdminLaunchPlanCreateResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.create_node_event_with_http_info(body, **kwargs) # noqa: E501 + return self.create_launch_plan_with_http_info(body, **kwargs) # noqa: E501 else: - (data) = self.create_node_event_with_http_info(body, **kwargs) # noqa: E501 + (data) = self.create_launch_plan_with_http_info(body, **kwargs) # noqa: E501 return data - def create_node_event_with_http_info(self, body, **kwargs): # noqa: E501 - """Indicates a :ref:`ref_flyteidl.event.NodeExecutionEvent` has occurred. # noqa: E501 + def create_launch_plan_with_http_info(self, body, **kwargs): # noqa: E501 + """Create and upload a :ref:`ref_flyteidl.admin.LaunchPlan` definition # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.create_node_event_with_http_info(body, async_req=True) + >>> thread = api.create_launch_plan_with_http_info(body, async_req=True) >>> result = thread.get() :param async_req bool - :param AdminNodeExecutionEventRequest body: (required) - :return: AdminNodeExecutionEventResponse + :param AdminLaunchPlanCreateRequest body: (required) + :return: AdminLaunchPlanCreateResponse If the method is called asynchronously, returns the request thread. """ @@ -274,14 +282,14 @@ def create_node_event_with_http_info(self, body, **kwargs): # noqa: E501 if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method create_node_event" % key + " to method create_launch_plan" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'body' is set if ('body' not in params or params['body'] is None): - raise ValueError("Missing the required parameter `body` when calling `create_node_event`") # noqa: E501 + raise ValueError("Missing the required parameter `body` when calling `create_launch_plan`") # noqa: E501 collection_formats = {} @@ -309,14 +317,14 @@ def create_node_event_with_http_info(self, body, **kwargs): # noqa: E501 auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/events/nodes', 'POST', + '/api/v1/launch_plans', 'POST', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminNodeExecutionEventResponse', # noqa: E501 + response_type='AdminLaunchPlanCreateResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -324,43 +332,45 @@ def create_node_event_with_http_info(self, body, **kwargs): # noqa: E501 _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def create_task(self, body, **kwargs): # noqa: E501 - """Create and upload a :ref:`ref_flyteidl.admin.Task` definition # noqa: E501 + def create_launch_plan2(self, id_org, body, **kwargs): # noqa: E501 + """Create and upload a :ref:`ref_flyteidl.admin.LaunchPlan` definition # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.create_task(body, async_req=True) + >>> thread = api.create_launch_plan2(id_org, body, async_req=True) >>> result = thread.get() :param async_req bool - :param FlyteidladminTaskCreateRequest body: (required) - :return: FlyteidladminTaskCreateResponse + :param str id_org: Optional, org key applied to the resource. (required) + :param AdminLaunchPlanCreateRequest body: (required) + :return: AdminLaunchPlanCreateResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.create_task_with_http_info(body, **kwargs) # noqa: E501 + return self.create_launch_plan2_with_http_info(id_org, body, **kwargs) # noqa: E501 else: - (data) = self.create_task_with_http_info(body, **kwargs) # noqa: E501 + (data) = self.create_launch_plan2_with_http_info(id_org, body, **kwargs) # noqa: E501 return data - def create_task_with_http_info(self, body, **kwargs): # noqa: E501 - """Create and upload a :ref:`ref_flyteidl.admin.Task` definition # noqa: E501 + def create_launch_plan2_with_http_info(self, id_org, body, **kwargs): # noqa: E501 + """Create and upload a :ref:`ref_flyteidl.admin.LaunchPlan` definition # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.create_task_with_http_info(body, async_req=True) + >>> thread = api.create_launch_plan2_with_http_info(id_org, body, async_req=True) >>> result = thread.get() :param async_req bool - :param FlyteidladminTaskCreateRequest body: (required) - :return: FlyteidladminTaskCreateResponse + :param str id_org: Optional, org key applied to the resource. (required) + :param AdminLaunchPlanCreateRequest body: (required) + :return: AdminLaunchPlanCreateResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['body'] # noqa: E501 + all_params = ['id_org', 'body'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -371,18 +381,24 @@ def create_task_with_http_info(self, body, **kwargs): # noqa: E501 if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method create_task" % key + " to method create_launch_plan2" % key ) params[key] = val del params['kwargs'] + # verify the required parameter 'id_org' is set + if ('id_org' not in params or + params['id_org'] is None): + raise ValueError("Missing the required parameter `id_org` when calling `create_launch_plan2`") # noqa: E501 # verify the required parameter 'body' is set if ('body' not in params or params['body'] is None): - raise ValueError("Missing the required parameter `body` when calling `create_task`") # noqa: E501 + raise ValueError("Missing the required parameter `body` when calling `create_launch_plan2`") # noqa: E501 collection_formats = {} path_params = {} + if 'id_org' in params: + path_params['id.org'] = params['id_org'] # noqa: E501 query_params = [] @@ -406,14 +422,14 @@ def create_task_with_http_info(self, body, **kwargs): # noqa: E501 auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/tasks', 'POST', + '/api/v1/launch_plans/org/{id.org}', 'POST', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='FlyteidladminTaskCreateResponse', # noqa: E501 + response_type='AdminLaunchPlanCreateResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -421,38 +437,38 @@ def create_task_with_http_info(self, body, **kwargs): # noqa: E501 _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def create_task_event(self, body, **kwargs): # noqa: E501 - """Indicates a :ref:`ref_flyteidl.event.TaskExecutionEvent` has occurred. # noqa: E501 + def create_node_event(self, body, **kwargs): # noqa: E501 + """Indicates a :ref:`ref_flyteidl.event.NodeExecutionEvent` has occurred. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.create_task_event(body, async_req=True) + >>> thread = api.create_node_event(body, async_req=True) >>> result = thread.get() :param async_req bool - :param AdminTaskExecutionEventRequest body: (required) - :return: AdminTaskExecutionEventResponse + :param AdminNodeExecutionEventRequest body: (required) + :return: AdminNodeExecutionEventResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.create_task_event_with_http_info(body, **kwargs) # noqa: E501 + return self.create_node_event_with_http_info(body, **kwargs) # noqa: E501 else: - (data) = self.create_task_event_with_http_info(body, **kwargs) # noqa: E501 + (data) = self.create_node_event_with_http_info(body, **kwargs) # noqa: E501 return data - def create_task_event_with_http_info(self, body, **kwargs): # noqa: E501 - """Indicates a :ref:`ref_flyteidl.event.TaskExecutionEvent` has occurred. # noqa: E501 + def create_node_event_with_http_info(self, body, **kwargs): # noqa: E501 + """Indicates a :ref:`ref_flyteidl.event.NodeExecutionEvent` has occurred. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.create_task_event_with_http_info(body, async_req=True) + >>> thread = api.create_node_event_with_http_info(body, async_req=True) >>> result = thread.get() :param async_req bool - :param AdminTaskExecutionEventRequest body: (required) - :return: AdminTaskExecutionEventResponse + :param AdminNodeExecutionEventRequest body: (required) + :return: AdminNodeExecutionEventResponse If the method is called asynchronously, returns the request thread. """ @@ -468,14 +484,14 @@ def create_task_event_with_http_info(self, body, **kwargs): # noqa: E501 if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method create_task_event" % key + " to method create_node_event" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'body' is set if ('body' not in params or params['body'] is None): - raise ValueError("Missing the required parameter `body` when calling `create_task_event`") # noqa: E501 + raise ValueError("Missing the required parameter `body` when calling `create_node_event`") # noqa: E501 collection_formats = {} @@ -503,14 +519,14 @@ def create_task_event_with_http_info(self, body, **kwargs): # noqa: E501 auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/events/tasks', 'POST', + '/api/v1/events/nodes', 'POST', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminTaskExecutionEventResponse', # noqa: E501 + response_type='AdminNodeExecutionEventResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -518,43 +534,45 @@ def create_task_event_with_http_info(self, body, **kwargs): # noqa: E501 _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def create_workflow(self, body, **kwargs): # noqa: E501 - """Create and upload a :ref:`ref_flyteidl.admin.Workflow` definition # noqa: E501 + def create_node_event2(self, event_id_execution_id_org, body, **kwargs): # noqa: E501 + """Indicates a :ref:`ref_flyteidl.event.NodeExecutionEvent` has occurred. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.create_workflow(body, async_req=True) + >>> thread = api.create_node_event2(event_id_execution_id_org, body, async_req=True) >>> result = thread.get() :param async_req bool - :param AdminWorkflowCreateRequest body: (required) - :return: AdminWorkflowCreateResponse + :param str event_id_execution_id_org: Optional, org key applied to the resource. (required) + :param AdminNodeExecutionEventRequest body: (required) + :return: AdminNodeExecutionEventResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.create_workflow_with_http_info(body, **kwargs) # noqa: E501 + return self.create_node_event2_with_http_info(event_id_execution_id_org, body, **kwargs) # noqa: E501 else: - (data) = self.create_workflow_with_http_info(body, **kwargs) # noqa: E501 + (data) = self.create_node_event2_with_http_info(event_id_execution_id_org, body, **kwargs) # noqa: E501 return data - def create_workflow_with_http_info(self, body, **kwargs): # noqa: E501 - """Create and upload a :ref:`ref_flyteidl.admin.Workflow` definition # noqa: E501 + def create_node_event2_with_http_info(self, event_id_execution_id_org, body, **kwargs): # noqa: E501 + """Indicates a :ref:`ref_flyteidl.event.NodeExecutionEvent` has occurred. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.create_workflow_with_http_info(body, async_req=True) + >>> thread = api.create_node_event2_with_http_info(event_id_execution_id_org, body, async_req=True) >>> result = thread.get() :param async_req bool - :param AdminWorkflowCreateRequest body: (required) - :return: AdminWorkflowCreateResponse + :param str event_id_execution_id_org: Optional, org key applied to the resource. (required) + :param AdminNodeExecutionEventRequest body: (required) + :return: AdminNodeExecutionEventResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['body'] # noqa: E501 + all_params = ['event_id_execution_id_org', 'body'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -565,18 +583,24 @@ def create_workflow_with_http_info(self, body, **kwargs): # noqa: E501 if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method create_workflow" % key + " to method create_node_event2" % key ) params[key] = val del params['kwargs'] + # verify the required parameter 'event_id_execution_id_org' is set + if ('event_id_execution_id_org' not in params or + params['event_id_execution_id_org'] is None): + raise ValueError("Missing the required parameter `event_id_execution_id_org` when calling `create_node_event2`") # noqa: E501 # verify the required parameter 'body' is set if ('body' not in params or params['body'] is None): - raise ValueError("Missing the required parameter `body` when calling `create_workflow`") # noqa: E501 + raise ValueError("Missing the required parameter `body` when calling `create_node_event2`") # noqa: E501 collection_formats = {} path_params = {} + if 'event_id_execution_id_org' in params: + path_params['event.id.execution_id.org'] = params['event_id_execution_id_org'] # noqa: E501 query_params = [] @@ -600,14 +624,14 @@ def create_workflow_with_http_info(self, body, **kwargs): # noqa: E501 auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/workflows', 'POST', + '/api/v1/events/org/{event.id.execution_id.org}/nodes', 'POST', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminWorkflowCreateResponse', # noqa: E501 + response_type='AdminNodeExecutionEventResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -615,38 +639,38 @@ def create_workflow_with_http_info(self, body, **kwargs): # noqa: E501 _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def create_workflow_event(self, body, **kwargs): # noqa: E501 - """Indicates a :ref:`ref_flyteidl.event.WorkflowExecutionEvent` has occurred. # noqa: E501 + def create_task(self, body, **kwargs): # noqa: E501 + """Create and upload a :ref:`ref_flyteidl.admin.Task` definition # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.create_workflow_event(body, async_req=True) + >>> thread = api.create_task(body, async_req=True) >>> result = thread.get() :param async_req bool - :param AdminWorkflowExecutionEventRequest body: (required) - :return: AdminWorkflowExecutionEventResponse + :param FlyteidladminTaskCreateRequest body: (required) + :return: FlyteidladminTaskCreateResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.create_workflow_event_with_http_info(body, **kwargs) # noqa: E501 + return self.create_task_with_http_info(body, **kwargs) # noqa: E501 else: - (data) = self.create_workflow_event_with_http_info(body, **kwargs) # noqa: E501 + (data) = self.create_task_with_http_info(body, **kwargs) # noqa: E501 return data - def create_workflow_event_with_http_info(self, body, **kwargs): # noqa: E501 - """Indicates a :ref:`ref_flyteidl.event.WorkflowExecutionEvent` has occurred. # noqa: E501 + def create_task_with_http_info(self, body, **kwargs): # noqa: E501 + """Create and upload a :ref:`ref_flyteidl.admin.Task` definition # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.create_workflow_event_with_http_info(body, async_req=True) + >>> thread = api.create_task_with_http_info(body, async_req=True) >>> result = thread.get() :param async_req bool - :param AdminWorkflowExecutionEventRequest body: (required) - :return: AdminWorkflowExecutionEventResponse + :param FlyteidladminTaskCreateRequest body: (required) + :return: FlyteidladminTaskCreateResponse If the method is called asynchronously, returns the request thread. """ @@ -662,14 +686,14 @@ def create_workflow_event_with_http_info(self, body, **kwargs): # noqa: E501 if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method create_workflow_event" % key + " to method create_task" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'body' is set if ('body' not in params or params['body'] is None): - raise ValueError("Missing the required parameter `body` when calling `create_workflow_event`") # noqa: E501 + raise ValueError("Missing the required parameter `body` when calling `create_task`") # noqa: E501 collection_formats = {} @@ -697,14 +721,14 @@ def create_workflow_event_with_http_info(self, body, **kwargs): # noqa: E501 auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/events/workflows', 'POST', + '/api/v1/tasks', 'POST', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminWorkflowExecutionEventResponse', # noqa: E501 + response_type='FlyteidladminTaskCreateResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -712,45 +736,45 @@ def create_workflow_event_with_http_info(self, body, **kwargs): # noqa: E501 _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def delete_project_attributes(self, project, body, **kwargs): # noqa: E501 - """Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 + def create_task2(self, id_org, body, **kwargs): # noqa: E501 + """Create and upload a :ref:`ref_flyteidl.admin.Task` definition # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.delete_project_attributes(project, body, async_req=True) + >>> thread = api.create_task2(id_org, body, async_req=True) >>> result = thread.get() :param async_req bool - :param str project: Unique project id which this set of attributes references. +required (required) - :param AdminProjectAttributesDeleteRequest body: (required) - :return: AdminProjectAttributesDeleteResponse + :param str id_org: Optional, org key applied to the resource. (required) + :param FlyteidladminTaskCreateRequest body: (required) + :return: FlyteidladminTaskCreateResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.delete_project_attributes_with_http_info(project, body, **kwargs) # noqa: E501 + return self.create_task2_with_http_info(id_org, body, **kwargs) # noqa: E501 else: - (data) = self.delete_project_attributes_with_http_info(project, body, **kwargs) # noqa: E501 + (data) = self.create_task2_with_http_info(id_org, body, **kwargs) # noqa: E501 return data - def delete_project_attributes_with_http_info(self, project, body, **kwargs): # noqa: E501 - """Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 + def create_task2_with_http_info(self, id_org, body, **kwargs): # noqa: E501 + """Create and upload a :ref:`ref_flyteidl.admin.Task` definition # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.delete_project_attributes_with_http_info(project, body, async_req=True) + >>> thread = api.create_task2_with_http_info(id_org, body, async_req=True) >>> result = thread.get() :param async_req bool - :param str project: Unique project id which this set of attributes references. +required (required) - :param AdminProjectAttributesDeleteRequest body: (required) - :return: AdminProjectAttributesDeleteResponse + :param str id_org: Optional, org key applied to the resource. (required) + :param FlyteidladminTaskCreateRequest body: (required) + :return: FlyteidladminTaskCreateResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['project', 'body'] # noqa: E501 + all_params = ['id_org', 'body'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -761,24 +785,24 @@ def delete_project_attributes_with_http_info(self, project, body, **kwargs): # if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method delete_project_attributes" % key + " to method create_task2" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'project' is set - if ('project' not in params or - params['project'] is None): - raise ValueError("Missing the required parameter `project` when calling `delete_project_attributes`") # noqa: E501 + # verify the required parameter 'id_org' is set + if ('id_org' not in params or + params['id_org'] is None): + raise ValueError("Missing the required parameter `id_org` when calling `create_task2`") # noqa: E501 # verify the required parameter 'body' is set if ('body' not in params or params['body'] is None): - raise ValueError("Missing the required parameter `body` when calling `delete_project_attributes`") # noqa: E501 + raise ValueError("Missing the required parameter `body` when calling `create_task2`") # noqa: E501 collection_formats = {} path_params = {} - if 'project' in params: - path_params['project'] = params['project'] # noqa: E501 + if 'id_org' in params: + path_params['id.org'] = params['id_org'] # noqa: E501 query_params = [] @@ -802,14 +826,14 @@ def delete_project_attributes_with_http_info(self, project, body, **kwargs): # auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/project_attributes/{project}', 'DELETE', + '/api/v1/tasks/org/{id.org}', 'POST', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminProjectAttributesDeleteResponse', # noqa: E501 + response_type='FlyteidladminTaskCreateResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -817,47 +841,43 @@ def delete_project_attributes_with_http_info(self, project, body, **kwargs): # _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def delete_project_attributes2(self, org, project, body, **kwargs): # noqa: E501 - """Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 + def create_task_event(self, body, **kwargs): # noqa: E501 + """Indicates a :ref:`ref_flyteidl.event.TaskExecutionEvent` has occurred. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.delete_project_attributes2(org, project, body, async_req=True) + >>> thread = api.create_task_event(body, async_req=True) >>> result = thread.get() :param async_req bool - :param str org: Optional, org key applied to the project. (required) - :param str project: Unique project id which this set of attributes references. +required (required) - :param AdminProjectAttributesDeleteRequest body: (required) - :return: AdminProjectAttributesDeleteResponse + :param AdminTaskExecutionEventRequest body: (required) + :return: AdminTaskExecutionEventResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.delete_project_attributes2_with_http_info(org, project, body, **kwargs) # noqa: E501 + return self.create_task_event_with_http_info(body, **kwargs) # noqa: E501 else: - (data) = self.delete_project_attributes2_with_http_info(org, project, body, **kwargs) # noqa: E501 + (data) = self.create_task_event_with_http_info(body, **kwargs) # noqa: E501 return data - def delete_project_attributes2_with_http_info(self, org, project, body, **kwargs): # noqa: E501 - """Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 + def create_task_event_with_http_info(self, body, **kwargs): # noqa: E501 + """Indicates a :ref:`ref_flyteidl.event.TaskExecutionEvent` has occurred. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.delete_project_attributes2_with_http_info(org, project, body, async_req=True) + >>> thread = api.create_task_event_with_http_info(body, async_req=True) >>> result = thread.get() :param async_req bool - :param str org: Optional, org key applied to the project. (required) - :param str project: Unique project id which this set of attributes references. +required (required) - :param AdminProjectAttributesDeleteRequest body: (required) - :return: AdminProjectAttributesDeleteResponse + :param AdminTaskExecutionEventRequest body: (required) + :return: AdminTaskExecutionEventResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['org', 'project', 'body'] # noqa: E501 + all_params = ['body'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -868,30 +888,18 @@ def delete_project_attributes2_with_http_info(self, org, project, body, **kwargs if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method delete_project_attributes2" % key + " to method create_task_event" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'org' is set - if ('org' not in params or - params['org'] is None): - raise ValueError("Missing the required parameter `org` when calling `delete_project_attributes2`") # noqa: E501 - # verify the required parameter 'project' is set - if ('project' not in params or - params['project'] is None): - raise ValueError("Missing the required parameter `project` when calling `delete_project_attributes2`") # noqa: E501 # verify the required parameter 'body' is set if ('body' not in params or params['body'] is None): - raise ValueError("Missing the required parameter `body` when calling `delete_project_attributes2`") # noqa: E501 + raise ValueError("Missing the required parameter `body` when calling `create_task_event`") # noqa: E501 collection_formats = {} path_params = {} - if 'org' in params: - path_params['org'] = params['org'] # noqa: E501 - if 'project' in params: - path_params['project'] = params['project'] # noqa: E501 query_params = [] @@ -915,14 +923,14 @@ def delete_project_attributes2_with_http_info(self, org, project, body, **kwargs auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/project_domain_attributes/org/{org}/{project}', 'DELETE', + '/api/v1/events/tasks', 'POST', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminProjectAttributesDeleteResponse', # noqa: E501 + response_type='AdminTaskExecutionEventResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -930,47 +938,45 @@ def delete_project_attributes2_with_http_info(self, org, project, body, **kwargs _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def delete_project_domain_attributes(self, project, domain, body, **kwargs): # noqa: E501 - """Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 + def create_task_event2(self, event_parent_node_execution_id_execution_id_org, body, **kwargs): # noqa: E501 + """Indicates a :ref:`ref_flyteidl.event.TaskExecutionEvent` has occurred. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.delete_project_domain_attributes(project, domain, body, async_req=True) + >>> thread = api.create_task_event2(event_parent_node_execution_id_execution_id_org, body, async_req=True) >>> result = thread.get() :param async_req bool - :param str project: Unique project id which this set of attributes references. +required (required) - :param str domain: Unique domain id which this set of attributes references. +required (required) - :param AdminProjectDomainAttributesDeleteRequest body: (required) - :return: AdminProjectDomainAttributesDeleteResponse + :param str event_parent_node_execution_id_execution_id_org: Optional, org key applied to the resource. (required) + :param AdminTaskExecutionEventRequest body: (required) + :return: AdminTaskExecutionEventResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.delete_project_domain_attributes_with_http_info(project, domain, body, **kwargs) # noqa: E501 + return self.create_task_event2_with_http_info(event_parent_node_execution_id_execution_id_org, body, **kwargs) # noqa: E501 else: - (data) = self.delete_project_domain_attributes_with_http_info(project, domain, body, **kwargs) # noqa: E501 + (data) = self.create_task_event2_with_http_info(event_parent_node_execution_id_execution_id_org, body, **kwargs) # noqa: E501 return data - def delete_project_domain_attributes_with_http_info(self, project, domain, body, **kwargs): # noqa: E501 - """Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 + def create_task_event2_with_http_info(self, event_parent_node_execution_id_execution_id_org, body, **kwargs): # noqa: E501 + """Indicates a :ref:`ref_flyteidl.event.TaskExecutionEvent` has occurred. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.delete_project_domain_attributes_with_http_info(project, domain, body, async_req=True) + >>> thread = api.create_task_event2_with_http_info(event_parent_node_execution_id_execution_id_org, body, async_req=True) >>> result = thread.get() :param async_req bool - :param str project: Unique project id which this set of attributes references. +required (required) - :param str domain: Unique domain id which this set of attributes references. +required (required) - :param AdminProjectDomainAttributesDeleteRequest body: (required) - :return: AdminProjectDomainAttributesDeleteResponse + :param str event_parent_node_execution_id_execution_id_org: Optional, org key applied to the resource. (required) + :param AdminTaskExecutionEventRequest body: (required) + :return: AdminTaskExecutionEventResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['project', 'domain', 'body'] # noqa: E501 + all_params = ['event_parent_node_execution_id_execution_id_org', 'body'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -981,30 +987,24 @@ def delete_project_domain_attributes_with_http_info(self, project, domain, body, if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method delete_project_domain_attributes" % key + " to method create_task_event2" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'project' is set - if ('project' not in params or - params['project'] is None): - raise ValueError("Missing the required parameter `project` when calling `delete_project_domain_attributes`") # noqa: E501 - # verify the required parameter 'domain' is set - if ('domain' not in params or - params['domain'] is None): - raise ValueError("Missing the required parameter `domain` when calling `delete_project_domain_attributes`") # noqa: E501 + # verify the required parameter 'event_parent_node_execution_id_execution_id_org' is set + if ('event_parent_node_execution_id_execution_id_org' not in params or + params['event_parent_node_execution_id_execution_id_org'] is None): + raise ValueError("Missing the required parameter `event_parent_node_execution_id_execution_id_org` when calling `create_task_event2`") # noqa: E501 # verify the required parameter 'body' is set if ('body' not in params or params['body'] is None): - raise ValueError("Missing the required parameter `body` when calling `delete_project_domain_attributes`") # noqa: E501 + raise ValueError("Missing the required parameter `body` when calling `create_task_event2`") # noqa: E501 collection_formats = {} path_params = {} - if 'project' in params: - path_params['project'] = params['project'] # noqa: E501 - if 'domain' in params: - path_params['domain'] = params['domain'] # noqa: E501 + if 'event_parent_node_execution_id_execution_id_org' in params: + path_params['event.parent_node_execution_id.execution_id.org'] = params['event_parent_node_execution_id_execution_id_org'] # noqa: E501 query_params = [] @@ -1028,14 +1028,14 @@ def delete_project_domain_attributes_with_http_info(self, project, domain, body, auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/project_domain_attributes/{project}/{domain}', 'DELETE', + '/api/v1/events/org/{event.parent_node_execution_id.execution_id.org}/tasks', 'POST', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminProjectDomainAttributesDeleteResponse', # noqa: E501 + response_type='AdminTaskExecutionEventResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -1043,49 +1043,43 @@ def delete_project_domain_attributes_with_http_info(self, project, domain, body, _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def delete_project_domain_attributes2(self, org, project, domain, body, **kwargs): # noqa: E501 - """Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 + def create_workflow(self, body, **kwargs): # noqa: E501 + """Create and upload a :ref:`ref_flyteidl.admin.Workflow` definition # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.delete_project_domain_attributes2(org, project, domain, body, async_req=True) + >>> thread = api.create_workflow(body, async_req=True) >>> result = thread.get() :param async_req bool - :param str org: Optional, org key applied to the attributes. (required) - :param str project: Unique project id which this set of attributes references. +required (required) - :param str domain: Unique domain id which this set of attributes references. +required (required) - :param AdminProjectDomainAttributesDeleteRequest body: (required) - :return: AdminProjectDomainAttributesDeleteResponse + :param AdminWorkflowCreateRequest body: (required) + :return: AdminWorkflowCreateResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.delete_project_domain_attributes2_with_http_info(org, project, domain, body, **kwargs) # noqa: E501 + return self.create_workflow_with_http_info(body, **kwargs) # noqa: E501 else: - (data) = self.delete_project_domain_attributes2_with_http_info(org, project, domain, body, **kwargs) # noqa: E501 + (data) = self.create_workflow_with_http_info(body, **kwargs) # noqa: E501 return data - def delete_project_domain_attributes2_with_http_info(self, org, project, domain, body, **kwargs): # noqa: E501 - """Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 + def create_workflow_with_http_info(self, body, **kwargs): # noqa: E501 + """Create and upload a :ref:`ref_flyteidl.admin.Workflow` definition # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.delete_project_domain_attributes2_with_http_info(org, project, domain, body, async_req=True) + >>> thread = api.create_workflow_with_http_info(body, async_req=True) >>> result = thread.get() :param async_req bool - :param str org: Optional, org key applied to the attributes. (required) - :param str project: Unique project id which this set of attributes references. +required (required) - :param str domain: Unique domain id which this set of attributes references. +required (required) - :param AdminProjectDomainAttributesDeleteRequest body: (required) - :return: AdminProjectDomainAttributesDeleteResponse + :param AdminWorkflowCreateRequest body: (required) + :return: AdminWorkflowCreateResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['org', 'project', 'domain', 'body'] # noqa: E501 + all_params = ['body'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -1096,36 +1090,18 @@ def delete_project_domain_attributes2_with_http_info(self, org, project, domain, if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method delete_project_domain_attributes2" % key + " to method create_workflow" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'org' is set - if ('org' not in params or - params['org'] is None): - raise ValueError("Missing the required parameter `org` when calling `delete_project_domain_attributes2`") # noqa: E501 - # verify the required parameter 'project' is set - if ('project' not in params or - params['project'] is None): - raise ValueError("Missing the required parameter `project` when calling `delete_project_domain_attributes2`") # noqa: E501 - # verify the required parameter 'domain' is set - if ('domain' not in params or - params['domain'] is None): - raise ValueError("Missing the required parameter `domain` when calling `delete_project_domain_attributes2`") # noqa: E501 # verify the required parameter 'body' is set if ('body' not in params or params['body'] is None): - raise ValueError("Missing the required parameter `body` when calling `delete_project_domain_attributes2`") # noqa: E501 + raise ValueError("Missing the required parameter `body` when calling `create_workflow`") # noqa: E501 collection_formats = {} path_params = {} - if 'org' in params: - path_params['org'] = params['org'] # noqa: E501 - if 'project' in params: - path_params['project'] = params['project'] # noqa: E501 - if 'domain' in params: - path_params['domain'] = params['domain'] # noqa: E501 query_params = [] @@ -1149,14 +1125,14 @@ def delete_project_domain_attributes2_with_http_info(self, org, project, domain, auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/project_domain_attributes/org/{org}/{project}/{domain}', 'DELETE', + '/api/v1/workflows', 'POST', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminProjectDomainAttributesDeleteResponse', # noqa: E501 + response_type='AdminWorkflowCreateResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -1164,49 +1140,45 @@ def delete_project_domain_attributes2_with_http_info(self, org, project, domain, _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def delete_workflow_attributes(self, project, domain, workflow, body, **kwargs): # noqa: E501 - """Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. # noqa: E501 + def create_workflow2(self, id_org, body, **kwargs): # noqa: E501 + """Create and upload a :ref:`ref_flyteidl.admin.Workflow` definition # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.delete_workflow_attributes(project, domain, workflow, body, async_req=True) + >>> thread = api.create_workflow2(id_org, body, async_req=True) >>> result = thread.get() :param async_req bool - :param str project: Unique project id which this set of attributes references. +required (required) - :param str domain: Unique domain id which this set of attributes references. +required (required) - :param str workflow: Workflow name which this set of attributes references. +required (required) - :param AdminWorkflowAttributesDeleteRequest body: (required) - :return: AdminWorkflowAttributesDeleteResponse + :param str id_org: Optional, org key applied to the resource. (required) + :param AdminWorkflowCreateRequest body: (required) + :return: AdminWorkflowCreateResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.delete_workflow_attributes_with_http_info(project, domain, workflow, body, **kwargs) # noqa: E501 + return self.create_workflow2_with_http_info(id_org, body, **kwargs) # noqa: E501 else: - (data) = self.delete_workflow_attributes_with_http_info(project, domain, workflow, body, **kwargs) # noqa: E501 + (data) = self.create_workflow2_with_http_info(id_org, body, **kwargs) # noqa: E501 return data - def delete_workflow_attributes_with_http_info(self, project, domain, workflow, body, **kwargs): # noqa: E501 - """Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. # noqa: E501 + def create_workflow2_with_http_info(self, id_org, body, **kwargs): # noqa: E501 + """Create and upload a :ref:`ref_flyteidl.admin.Workflow` definition # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.delete_workflow_attributes_with_http_info(project, domain, workflow, body, async_req=True) + >>> thread = api.create_workflow2_with_http_info(id_org, body, async_req=True) >>> result = thread.get() :param async_req bool - :param str project: Unique project id which this set of attributes references. +required (required) - :param str domain: Unique domain id which this set of attributes references. +required (required) - :param str workflow: Workflow name which this set of attributes references. +required (required) - :param AdminWorkflowAttributesDeleteRequest body: (required) - :return: AdminWorkflowAttributesDeleteResponse + :param str id_org: Optional, org key applied to the resource. (required) + :param AdminWorkflowCreateRequest body: (required) + :return: AdminWorkflowCreateResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['project', 'domain', 'workflow', 'body'] # noqa: E501 + all_params = ['id_org', 'body'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -1217,36 +1189,24 @@ def delete_workflow_attributes_with_http_info(self, project, domain, workflow, b if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method delete_workflow_attributes" % key + " to method create_workflow2" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'project' is set - if ('project' not in params or - params['project'] is None): - raise ValueError("Missing the required parameter `project` when calling `delete_workflow_attributes`") # noqa: E501 - # verify the required parameter 'domain' is set - if ('domain' not in params or - params['domain'] is None): - raise ValueError("Missing the required parameter `domain` when calling `delete_workflow_attributes`") # noqa: E501 - # verify the required parameter 'workflow' is set - if ('workflow' not in params or - params['workflow'] is None): - raise ValueError("Missing the required parameter `workflow` when calling `delete_workflow_attributes`") # noqa: E501 + # verify the required parameter 'id_org' is set + if ('id_org' not in params or + params['id_org'] is None): + raise ValueError("Missing the required parameter `id_org` when calling `create_workflow2`") # noqa: E501 # verify the required parameter 'body' is set if ('body' not in params or params['body'] is None): - raise ValueError("Missing the required parameter `body` when calling `delete_workflow_attributes`") # noqa: E501 + raise ValueError("Missing the required parameter `body` when calling `create_workflow2`") # noqa: E501 collection_formats = {} path_params = {} - if 'project' in params: - path_params['project'] = params['project'] # noqa: E501 - if 'domain' in params: - path_params['domain'] = params['domain'] # noqa: E501 - if 'workflow' in params: - path_params['workflow'] = params['workflow'] # noqa: E501 + if 'id_org' in params: + path_params['id.org'] = params['id_org'] # noqa: E501 query_params = [] @@ -1270,14 +1230,14 @@ def delete_workflow_attributes_with_http_info(self, project, domain, workflow, b auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/workflow_attributes/{project}/{domain}/{workflow}', 'DELETE', + '/api/v1/workflows/org/{id.org}', 'POST', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminWorkflowAttributesDeleteResponse', # noqa: E501 + response_type='AdminWorkflowCreateResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -1285,51 +1245,43 @@ def delete_workflow_attributes_with_http_info(self, project, domain, workflow, b _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def delete_workflow_attributes2(self, org, project, domain, workflow, body, **kwargs): # noqa: E501 - """Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. # noqa: E501 + def create_workflow_event(self, body, **kwargs): # noqa: E501 + """Indicates a :ref:`ref_flyteidl.event.WorkflowExecutionEvent` has occurred. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.delete_workflow_attributes2(org, project, domain, workflow, body, async_req=True) + >>> thread = api.create_workflow_event(body, async_req=True) >>> result = thread.get() :param async_req bool - :param str org: Optional, org key applied to the attributes. (required) - :param str project: Unique project id which this set of attributes references. +required (required) - :param str domain: Unique domain id which this set of attributes references. +required (required) - :param str workflow: Workflow name which this set of attributes references. +required (required) - :param AdminWorkflowAttributesDeleteRequest body: (required) - :return: AdminWorkflowAttributesDeleteResponse + :param AdminWorkflowExecutionEventRequest body: (required) + :return: AdminWorkflowExecutionEventResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.delete_workflow_attributes2_with_http_info(org, project, domain, workflow, body, **kwargs) # noqa: E501 + return self.create_workflow_event_with_http_info(body, **kwargs) # noqa: E501 else: - (data) = self.delete_workflow_attributes2_with_http_info(org, project, domain, workflow, body, **kwargs) # noqa: E501 + (data) = self.create_workflow_event_with_http_info(body, **kwargs) # noqa: E501 return data - def delete_workflow_attributes2_with_http_info(self, org, project, domain, workflow, body, **kwargs): # noqa: E501 - """Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. # noqa: E501 + def create_workflow_event_with_http_info(self, body, **kwargs): # noqa: E501 + """Indicates a :ref:`ref_flyteidl.event.WorkflowExecutionEvent` has occurred. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.delete_workflow_attributes2_with_http_info(org, project, domain, workflow, body, async_req=True) + >>> thread = api.create_workflow_event_with_http_info(body, async_req=True) >>> result = thread.get() :param async_req bool - :param str org: Optional, org key applied to the attributes. (required) - :param str project: Unique project id which this set of attributes references. +required (required) - :param str domain: Unique domain id which this set of attributes references. +required (required) - :param str workflow: Workflow name which this set of attributes references. +required (required) - :param AdminWorkflowAttributesDeleteRequest body: (required) - :return: AdminWorkflowAttributesDeleteResponse + :param AdminWorkflowExecutionEventRequest body: (required) + :return: AdminWorkflowExecutionEventResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['org', 'project', 'domain', 'workflow', 'body'] # noqa: E501 + all_params = ['body'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -1340,42 +1292,18 @@ def delete_workflow_attributes2_with_http_info(self, org, project, domain, workf if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method delete_workflow_attributes2" % key + " to method create_workflow_event" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'org' is set - if ('org' not in params or - params['org'] is None): - raise ValueError("Missing the required parameter `org` when calling `delete_workflow_attributes2`") # noqa: E501 - # verify the required parameter 'project' is set - if ('project' not in params or - params['project'] is None): - raise ValueError("Missing the required parameter `project` when calling `delete_workflow_attributes2`") # noqa: E501 - # verify the required parameter 'domain' is set - if ('domain' not in params or - params['domain'] is None): - raise ValueError("Missing the required parameter `domain` when calling `delete_workflow_attributes2`") # noqa: E501 - # verify the required parameter 'workflow' is set - if ('workflow' not in params or - params['workflow'] is None): - raise ValueError("Missing the required parameter `workflow` when calling `delete_workflow_attributes2`") # noqa: E501 # verify the required parameter 'body' is set if ('body' not in params or params['body'] is None): - raise ValueError("Missing the required parameter `body` when calling `delete_workflow_attributes2`") # noqa: E501 + raise ValueError("Missing the required parameter `body` when calling `create_workflow_event`") # noqa: E501 collection_formats = {} path_params = {} - if 'org' in params: - path_params['org'] = params['org'] # noqa: E501 - if 'project' in params: - path_params['project'] = params['project'] # noqa: E501 - if 'domain' in params: - path_params['domain'] = params['domain'] # noqa: E501 - if 'workflow' in params: - path_params['workflow'] = params['workflow'] # noqa: E501 query_params = [] @@ -1399,14 +1327,14 @@ def delete_workflow_attributes2_with_http_info(self, org, project, domain, workf auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/workflow_attributes/org/{org}/{project}/{domain}/{workflow}', 'DELETE', + '/api/v1/events/workflows', 'POST', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminWorkflowAttributesDeleteResponse', # noqa: E501 + response_type='AdminWorkflowExecutionEventResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -1414,49 +1342,45 @@ def delete_workflow_attributes2_with_http_info(self, org, project, domain, workf _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_active_launch_plan(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Fetch the active version of a :ref:`ref_flyteidl.admin.LaunchPlan`. # noqa: E501 + def create_workflow_event2(self, event_execution_id_org, body, **kwargs): # noqa: E501 + """Indicates a :ref:`ref_flyteidl.event.WorkflowExecutionEvent` has occurred. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_active_launch_plan(id_project, id_domain, id_name, async_req=True) + >>> thread = api.create_workflow_event2(event_execution_id_org, body, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) - :param str id_org: Optional, org key applied to the resource. - :return: AdminLaunchPlan + :param str event_execution_id_org: Optional, org key applied to the resource. (required) + :param AdminWorkflowExecutionEventRequest body: (required) + :return: AdminWorkflowExecutionEventResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_active_launch_plan_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 + return self.create_workflow_event2_with_http_info(event_execution_id_org, body, **kwargs) # noqa: E501 else: - (data) = self.get_active_launch_plan_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 + (data) = self.create_workflow_event2_with_http_info(event_execution_id_org, body, **kwargs) # noqa: E501 return data - def get_active_launch_plan_with_http_info(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Fetch the active version of a :ref:`ref_flyteidl.admin.LaunchPlan`. # noqa: E501 + def create_workflow_event2_with_http_info(self, event_execution_id_org, body, **kwargs): # noqa: E501 + """Indicates a :ref:`ref_flyteidl.event.WorkflowExecutionEvent` has occurred. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_active_launch_plan_with_http_info(id_project, id_domain, id_name, async_req=True) + >>> thread = api.create_workflow_event2_with_http_info(event_execution_id_org, body, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) - :param str id_org: Optional, org key applied to the resource. - :return: AdminLaunchPlan + :param str event_execution_id_org: Optional, org key applied to the resource. (required) + :param AdminWorkflowExecutionEventRequest body: (required) + :return: AdminWorkflowExecutionEventResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['id_project', 'id_domain', 'id_name', 'id_org'] # noqa: E501 + all_params = ['event_execution_id_org', 'body'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -1467,36 +1391,26 @@ def get_active_launch_plan_with_http_info(self, id_project, id_domain, id_name, if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_active_launch_plan" % key + " to method create_workflow_event2" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'id_project' is set - if ('id_project' not in params or - params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `get_active_launch_plan`") # noqa: E501 - # verify the required parameter 'id_domain' is set - if ('id_domain' not in params or - params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `get_active_launch_plan`") # noqa: E501 - # verify the required parameter 'id_name' is set - if ('id_name' not in params or - params['id_name'] is None): - raise ValueError("Missing the required parameter `id_name` when calling `get_active_launch_plan`") # noqa: E501 + # verify the required parameter 'event_execution_id_org' is set + if ('event_execution_id_org' not in params or + params['event_execution_id_org'] is None): + raise ValueError("Missing the required parameter `event_execution_id_org` when calling `create_workflow_event2`") # noqa: E501 + # verify the required parameter 'body' is set + if ('body' not in params or + params['body'] is None): + raise ValueError("Missing the required parameter `body` when calling `create_workflow_event2`") # noqa: E501 collection_formats = {} path_params = {} - if 'id_project' in params: - path_params['id.project'] = params['id_project'] # noqa: E501 - if 'id_domain' in params: - path_params['id.domain'] = params['id_domain'] # noqa: E501 - if 'id_name' in params: - path_params['id.name'] = params['id_name'] # noqa: E501 + if 'event_execution_id_org' in params: + path_params['event.execution_id.org'] = params['event_execution_id_org'] # noqa: E501 query_params = [] - if 'id_org' in params: - query_params.append(('id.org', params['id_org'])) # noqa: E501 header_params = {} @@ -1504,6 +1418,8 @@ def get_active_launch_plan_with_http_info(self, id_project, id_domain, id_name, local_var_files = {} body_params = None + if 'body' in params: + body_params = params['body'] # HTTP header `Accept` header_params['Accept'] = self.api_client.select_header_accept( ['application/json']) # noqa: E501 @@ -1516,14 +1432,14 @@ def get_active_launch_plan_with_http_info(self, id_project, id_domain, id_name, auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/active_launch_plans/{id.project}/{id.domain}/{id.name}', 'GET', + '/api/v1/events/org/{event.execution_id.org}/workflows', 'POST', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminLaunchPlan', # noqa: E501 + response_type='AdminWorkflowExecutionEventResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -1531,49 +1447,45 @@ def get_active_launch_plan_with_http_info(self, id_project, id_domain, id_name, _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_active_launch_plan2(self, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Fetch the active version of a :ref:`ref_flyteidl.admin.LaunchPlan`. # noqa: E501 + def delete_project_attributes(self, project, body, **kwargs): # noqa: E501 + """Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_active_launch_plan2(id_org, id_project, id_domain, id_name, async_req=True) + >>> thread = api.delete_project_attributes(project, body, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_org: Optional, org key applied to the resource. (required) - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) - :return: AdminLaunchPlan + :param str project: Unique project id which this set of attributes references. +required (required) + :param AdminProjectAttributesDeleteRequest body: (required) + :return: AdminProjectAttributesDeleteResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_active_launch_plan2_with_http_info(id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 + return self.delete_project_attributes_with_http_info(project, body, **kwargs) # noqa: E501 else: - (data) = self.get_active_launch_plan2_with_http_info(id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 + (data) = self.delete_project_attributes_with_http_info(project, body, **kwargs) # noqa: E501 return data - def get_active_launch_plan2_with_http_info(self, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Fetch the active version of a :ref:`ref_flyteidl.admin.LaunchPlan`. # noqa: E501 + def delete_project_attributes_with_http_info(self, project, body, **kwargs): # noqa: E501 + """Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_active_launch_plan2_with_http_info(id_org, id_project, id_domain, id_name, async_req=True) + >>> thread = api.delete_project_attributes_with_http_info(project, body, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_org: Optional, org key applied to the resource. (required) - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) - :return: AdminLaunchPlan + :param str project: Unique project id which this set of attributes references. +required (required) + :param AdminProjectAttributesDeleteRequest body: (required) + :return: AdminProjectAttributesDeleteResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['id_org', 'id_project', 'id_domain', 'id_name'] # noqa: E501 + all_params = ['project', 'body'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -1584,38 +1496,24 @@ def get_active_launch_plan2_with_http_info(self, id_org, id_project, id_domain, if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_active_launch_plan2" % key + " to method delete_project_attributes" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'id_org' is set - if ('id_org' not in params or - params['id_org'] is None): - raise ValueError("Missing the required parameter `id_org` when calling `get_active_launch_plan2`") # noqa: E501 - # verify the required parameter 'id_project' is set - if ('id_project' not in params or - params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `get_active_launch_plan2`") # noqa: E501 - # verify the required parameter 'id_domain' is set - if ('id_domain' not in params or - params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `get_active_launch_plan2`") # noqa: E501 - # verify the required parameter 'id_name' is set - if ('id_name' not in params or - params['id_name'] is None): - raise ValueError("Missing the required parameter `id_name` when calling `get_active_launch_plan2`") # noqa: E501 + # verify the required parameter 'project' is set + if ('project' not in params or + params['project'] is None): + raise ValueError("Missing the required parameter `project` when calling `delete_project_attributes`") # noqa: E501 + # verify the required parameter 'body' is set + if ('body' not in params or + params['body'] is None): + raise ValueError("Missing the required parameter `body` when calling `delete_project_attributes`") # noqa: E501 collection_formats = {} path_params = {} - if 'id_org' in params: - path_params['id.org'] = params['id_org'] # noqa: E501 - if 'id_project' in params: - path_params['id.project'] = params['id_project'] # noqa: E501 - if 'id_domain' in params: - path_params['id.domain'] = params['id_domain'] # noqa: E501 - if 'id_name' in params: - path_params['id.name'] = params['id_name'] # noqa: E501 + if 'project' in params: + path_params['project'] = params['project'] # noqa: E501 query_params = [] @@ -1625,6 +1523,8 @@ def get_active_launch_plan2_with_http_info(self, id_org, id_project, id_domain, local_var_files = {} body_params = None + if 'body' in params: + body_params = params['body'] # HTTP header `Accept` header_params['Accept'] = self.api_client.select_header_accept( ['application/json']) # noqa: E501 @@ -1637,14 +1537,14 @@ def get_active_launch_plan2_with_http_info(self, id_org, id_project, id_domain, auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/active_launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name}', 'GET', + '/api/v1/project_attributes/{project}', 'DELETE', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminLaunchPlan', # noqa: E501 + response_type='AdminProjectAttributesDeleteResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -1652,53 +1552,47 @@ def get_active_launch_plan2_with_http_info(self, id_org, id_project, id_domain, _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_description_entity(self, id_resource_type, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 - """Fetch a :ref:`ref_flyteidl.admin.DescriptionEntity` object. # noqa: E501 + def delete_project_attributes2(self, org, project, body, **kwargs): # noqa: E501 + """Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_description_entity(id_resource_type, id_project, id_domain, id_name, id_version, async_req=True) + >>> thread = api.delete_project_attributes2(org, project, body, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. (required) - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. (required) - :param str id_version: Specific version of the resource. (required) - :param str id_org: Optional, org key applied to the resource. - :return: AdminDescriptionEntity + :param str org: Optional, org key applied to the project. (required) + :param str project: Unique project id which this set of attributes references. +required (required) + :param AdminProjectAttributesDeleteRequest body: (required) + :return: AdminProjectAttributesDeleteResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_description_entity_with_http_info(id_resource_type, id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 + return self.delete_project_attributes2_with_http_info(org, project, body, **kwargs) # noqa: E501 else: - (data) = self.get_description_entity_with_http_info(id_resource_type, id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 + (data) = self.delete_project_attributes2_with_http_info(org, project, body, **kwargs) # noqa: E501 return data - def get_description_entity_with_http_info(self, id_resource_type, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 - """Fetch a :ref:`ref_flyteidl.admin.DescriptionEntity` object. # noqa: E501 + def delete_project_attributes2_with_http_info(self, org, project, body, **kwargs): # noqa: E501 + """Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_description_entity_with_http_info(id_resource_type, id_project, id_domain, id_name, id_version, async_req=True) + >>> thread = api.delete_project_attributes2_with_http_info(org, project, body, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. (required) - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. (required) - :param str id_version: Specific version of the resource. (required) - :param str id_org: Optional, org key applied to the resource. - :return: AdminDescriptionEntity + :param str org: Optional, org key applied to the project. (required) + :param str project: Unique project id which this set of attributes references. +required (required) + :param AdminProjectAttributesDeleteRequest body: (required) + :return: AdminProjectAttributesDeleteResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['id_resource_type', 'id_project', 'id_domain', 'id_name', 'id_version', 'id_org'] # noqa: E501 + all_params = ['org', 'project', 'body'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -1709,48 +1603,32 @@ def get_description_entity_with_http_info(self, id_resource_type, id_project, id if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_description_entity" % key + " to method delete_project_attributes2" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'id_resource_type' is set - if ('id_resource_type' not in params or - params['id_resource_type'] is None): - raise ValueError("Missing the required parameter `id_resource_type` when calling `get_description_entity`") # noqa: E501 - # verify the required parameter 'id_project' is set - if ('id_project' not in params or - params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `get_description_entity`") # noqa: E501 - # verify the required parameter 'id_domain' is set - if ('id_domain' not in params or - params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `get_description_entity`") # noqa: E501 - # verify the required parameter 'id_name' is set - if ('id_name' not in params or - params['id_name'] is None): - raise ValueError("Missing the required parameter `id_name` when calling `get_description_entity`") # noqa: E501 - # verify the required parameter 'id_version' is set - if ('id_version' not in params or - params['id_version'] is None): - raise ValueError("Missing the required parameter `id_version` when calling `get_description_entity`") # noqa: E501 + # verify the required parameter 'org' is set + if ('org' not in params or + params['org'] is None): + raise ValueError("Missing the required parameter `org` when calling `delete_project_attributes2`") # noqa: E501 + # verify the required parameter 'project' is set + if ('project' not in params or + params['project'] is None): + raise ValueError("Missing the required parameter `project` when calling `delete_project_attributes2`") # noqa: E501 + # verify the required parameter 'body' is set + if ('body' not in params or + params['body'] is None): + raise ValueError("Missing the required parameter `body` when calling `delete_project_attributes2`") # noqa: E501 collection_formats = {} path_params = {} - if 'id_resource_type' in params: - path_params['id.resource_type'] = params['id_resource_type'] # noqa: E501 - if 'id_project' in params: - path_params['id.project'] = params['id_project'] # noqa: E501 - if 'id_domain' in params: - path_params['id.domain'] = params['id_domain'] # noqa: E501 - if 'id_name' in params: - path_params['id.name'] = params['id_name'] # noqa: E501 - if 'id_version' in params: - path_params['id.version'] = params['id_version'] # noqa: E501 + if 'org' in params: + path_params['org'] = params['org'] # noqa: E501 + if 'project' in params: + path_params['project'] = params['project'] # noqa: E501 query_params = [] - if 'id_org' in params: - query_params.append(('id.org', params['id_org'])) # noqa: E501 header_params = {} @@ -1758,6 +1636,8 @@ def get_description_entity_with_http_info(self, id_resource_type, id_project, id local_var_files = {} body_params = None + if 'body' in params: + body_params = params['body'] # HTTP header `Accept` header_params['Accept'] = self.api_client.select_header_accept( ['application/json']) # noqa: E501 @@ -1770,14 +1650,14 @@ def get_description_entity_with_http_info(self, id_resource_type, id_project, id auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/description_entities/{id.resource_type}/{id.project}/{id.domain}/{id.name}/{id.version}', 'GET', + '/api/v1/project_domain_attributes/org/{org}/{project}', 'DELETE', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminDescriptionEntity', # noqa: E501 + response_type='AdminProjectAttributesDeleteResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -1785,53 +1665,47 @@ def get_description_entity_with_http_info(self, id_resource_type, id_project, id _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_description_entity2(self, id_org, id_resource_type, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 - """Fetch a :ref:`ref_flyteidl.admin.DescriptionEntity` object. # noqa: E501 + def delete_project_domain_attributes(self, project, domain, body, **kwargs): # noqa: E501 + """Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_description_entity2(id_org, id_resource_type, id_project, id_domain, id_name, id_version, async_req=True) + >>> thread = api.delete_project_domain_attributes(project, domain, body, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_org: Optional, org key applied to the resource. (required) - :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. (required) - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. (required) - :param str id_version: Specific version of the resource. (required) - :return: AdminDescriptionEntity + :param str project: Unique project id which this set of attributes references. +required (required) + :param str domain: Unique domain id which this set of attributes references. +required (required) + :param AdminProjectDomainAttributesDeleteRequest body: (required) + :return: AdminProjectDomainAttributesDeleteResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_description_entity2_with_http_info(id_org, id_resource_type, id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 + return self.delete_project_domain_attributes_with_http_info(project, domain, body, **kwargs) # noqa: E501 else: - (data) = self.get_description_entity2_with_http_info(id_org, id_resource_type, id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 + (data) = self.delete_project_domain_attributes_with_http_info(project, domain, body, **kwargs) # noqa: E501 return data - def get_description_entity2_with_http_info(self, id_org, id_resource_type, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 - """Fetch a :ref:`ref_flyteidl.admin.DescriptionEntity` object. # noqa: E501 + def delete_project_domain_attributes_with_http_info(self, project, domain, body, **kwargs): # noqa: E501 + """Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_description_entity2_with_http_info(id_org, id_resource_type, id_project, id_domain, id_name, id_version, async_req=True) + >>> thread = api.delete_project_domain_attributes_with_http_info(project, domain, body, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_org: Optional, org key applied to the resource. (required) - :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. (required) - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. (required) - :param str id_version: Specific version of the resource. (required) - :return: AdminDescriptionEntity + :param str project: Unique project id which this set of attributes references. +required (required) + :param str domain: Unique domain id which this set of attributes references. +required (required) + :param AdminProjectDomainAttributesDeleteRequest body: (required) + :return: AdminProjectDomainAttributesDeleteResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['id_org', 'id_resource_type', 'id_project', 'id_domain', 'id_name', 'id_version'] # noqa: E501 + all_params = ['project', 'domain', 'body'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -1842,50 +1716,30 @@ def get_description_entity2_with_http_info(self, id_org, id_resource_type, id_pr if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_description_entity2" % key + " to method delete_project_domain_attributes" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'id_org' is set - if ('id_org' not in params or - params['id_org'] is None): - raise ValueError("Missing the required parameter `id_org` when calling `get_description_entity2`") # noqa: E501 - # verify the required parameter 'id_resource_type' is set - if ('id_resource_type' not in params or - params['id_resource_type'] is None): - raise ValueError("Missing the required parameter `id_resource_type` when calling `get_description_entity2`") # noqa: E501 - # verify the required parameter 'id_project' is set - if ('id_project' not in params or - params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `get_description_entity2`") # noqa: E501 - # verify the required parameter 'id_domain' is set - if ('id_domain' not in params or - params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `get_description_entity2`") # noqa: E501 - # verify the required parameter 'id_name' is set - if ('id_name' not in params or - params['id_name'] is None): - raise ValueError("Missing the required parameter `id_name` when calling `get_description_entity2`") # noqa: E501 - # verify the required parameter 'id_version' is set - if ('id_version' not in params or - params['id_version'] is None): - raise ValueError("Missing the required parameter `id_version` when calling `get_description_entity2`") # noqa: E501 + # verify the required parameter 'project' is set + if ('project' not in params or + params['project'] is None): + raise ValueError("Missing the required parameter `project` when calling `delete_project_domain_attributes`") # noqa: E501 + # verify the required parameter 'domain' is set + if ('domain' not in params or + params['domain'] is None): + raise ValueError("Missing the required parameter `domain` when calling `delete_project_domain_attributes`") # noqa: E501 + # verify the required parameter 'body' is set + if ('body' not in params or + params['body'] is None): + raise ValueError("Missing the required parameter `body` when calling `delete_project_domain_attributes`") # noqa: E501 collection_formats = {} path_params = {} - if 'id_org' in params: - path_params['id.org'] = params['id_org'] # noqa: E501 - if 'id_resource_type' in params: - path_params['id.resource_type'] = params['id_resource_type'] # noqa: E501 - if 'id_project' in params: - path_params['id.project'] = params['id_project'] # noqa: E501 - if 'id_domain' in params: - path_params['id.domain'] = params['id_domain'] # noqa: E501 - if 'id_name' in params: - path_params['id.name'] = params['id_name'] # noqa: E501 - if 'id_version' in params: - path_params['id.version'] = params['id_version'] # noqa: E501 + if 'project' in params: + path_params['project'] = params['project'] # noqa: E501 + if 'domain' in params: + path_params['domain'] = params['domain'] # noqa: E501 query_params = [] @@ -1895,6 +1749,8 @@ def get_description_entity2_with_http_info(self, id_org, id_resource_type, id_pr local_var_files = {} body_params = None + if 'body' in params: + body_params = params['body'] # HTTP header `Accept` header_params['Accept'] = self.api_client.select_header_accept( ['application/json']) # noqa: E501 @@ -1907,14 +1763,14 @@ def get_description_entity2_with_http_info(self, id_org, id_resource_type, id_pr auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/description_entities/org/{id.org}/{id.resource_type}/{id.project}/{id.domain}/{id.name}/{id.version}', 'GET', + '/api/v1/project_domain_attributes/{project}/{domain}', 'DELETE', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminDescriptionEntity', # noqa: E501 + response_type='AdminProjectDomainAttributesDeleteResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -1922,49 +1778,49 @@ def get_description_entity2_with_http_info(self, id_org, id_resource_type, id_pr _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_execution(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Fetches a :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 + def delete_project_domain_attributes2(self, org, project, domain, body, **kwargs): # noqa: E501 + """Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_execution(id_project, id_domain, id_name, async_req=True) + >>> thread = api.delete_project_domain_attributes2(org, project, domain, body, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User or system provided value for the resource. (required) - :param str id_org: Optional, org key applied to the resource. - :return: AdminExecution + :param str org: Optional, org key applied to the attributes. (required) + :param str project: Unique project id which this set of attributes references. +required (required) + :param str domain: Unique domain id which this set of attributes references. +required (required) + :param AdminProjectDomainAttributesDeleteRequest body: (required) + :return: AdminProjectDomainAttributesDeleteResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_execution_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 + return self.delete_project_domain_attributes2_with_http_info(org, project, domain, body, **kwargs) # noqa: E501 else: - (data) = self.get_execution_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 + (data) = self.delete_project_domain_attributes2_with_http_info(org, project, domain, body, **kwargs) # noqa: E501 return data - def get_execution_with_http_info(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Fetches a :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 + def delete_project_domain_attributes2_with_http_info(self, org, project, domain, body, **kwargs): # noqa: E501 + """Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_execution_with_http_info(id_project, id_domain, id_name, async_req=True) + >>> thread = api.delete_project_domain_attributes2_with_http_info(org, project, domain, body, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User or system provided value for the resource. (required) - :param str id_org: Optional, org key applied to the resource. - :return: AdminExecution + :param str org: Optional, org key applied to the attributes. (required) + :param str project: Unique project id which this set of attributes references. +required (required) + :param str domain: Unique domain id which this set of attributes references. +required (required) + :param AdminProjectDomainAttributesDeleteRequest body: (required) + :return: AdminProjectDomainAttributesDeleteResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['id_project', 'id_domain', 'id_name', 'id_org'] # noqa: E501 + all_params = ['org', 'project', 'domain', 'body'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -1975,36 +1831,38 @@ def get_execution_with_http_info(self, id_project, id_domain, id_name, **kwargs) if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_execution" % key + " to method delete_project_domain_attributes2" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'id_project' is set - if ('id_project' not in params or - params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `get_execution`") # noqa: E501 - # verify the required parameter 'id_domain' is set - if ('id_domain' not in params or - params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `get_execution`") # noqa: E501 - # verify the required parameter 'id_name' is set - if ('id_name' not in params or - params['id_name'] is None): - raise ValueError("Missing the required parameter `id_name` when calling `get_execution`") # noqa: E501 + # verify the required parameter 'org' is set + if ('org' not in params or + params['org'] is None): + raise ValueError("Missing the required parameter `org` when calling `delete_project_domain_attributes2`") # noqa: E501 + # verify the required parameter 'project' is set + if ('project' not in params or + params['project'] is None): + raise ValueError("Missing the required parameter `project` when calling `delete_project_domain_attributes2`") # noqa: E501 + # verify the required parameter 'domain' is set + if ('domain' not in params or + params['domain'] is None): + raise ValueError("Missing the required parameter `domain` when calling `delete_project_domain_attributes2`") # noqa: E501 + # verify the required parameter 'body' is set + if ('body' not in params or + params['body'] is None): + raise ValueError("Missing the required parameter `body` when calling `delete_project_domain_attributes2`") # noqa: E501 collection_formats = {} path_params = {} - if 'id_project' in params: - path_params['id.project'] = params['id_project'] # noqa: E501 - if 'id_domain' in params: - path_params['id.domain'] = params['id_domain'] # noqa: E501 - if 'id_name' in params: - path_params['id.name'] = params['id_name'] # noqa: E501 + if 'org' in params: + path_params['org'] = params['org'] # noqa: E501 + if 'project' in params: + path_params['project'] = params['project'] # noqa: E501 + if 'domain' in params: + path_params['domain'] = params['domain'] # noqa: E501 query_params = [] - if 'id_org' in params: - query_params.append(('id.org', params['id_org'])) # noqa: E501 header_params = {} @@ -2012,6 +1870,8 @@ def get_execution_with_http_info(self, id_project, id_domain, id_name, **kwargs) local_var_files = {} body_params = None + if 'body' in params: + body_params = params['body'] # HTTP header `Accept` header_params['Accept'] = self.api_client.select_header_accept( ['application/json']) # noqa: E501 @@ -2024,14 +1884,14 @@ def get_execution_with_http_info(self, id_project, id_domain, id_name, **kwargs) auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/executions/{id.project}/{id.domain}/{id.name}', 'GET', + '/api/v1/project_domain_attributes/org/{org}/{project}/{domain}', 'DELETE', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminExecution', # noqa: E501 + response_type='AdminProjectDomainAttributesDeleteResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -2039,49 +1899,49 @@ def get_execution_with_http_info(self, id_project, id_domain, id_name, **kwargs) _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_execution2(self, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Fetches a :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 + def delete_workflow_attributes(self, project, domain, workflow, body, **kwargs): # noqa: E501 + """Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_execution2(id_org, id_project, id_domain, id_name, async_req=True) + >>> thread = api.delete_workflow_attributes(project, domain, workflow, body, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_org: Optional, org key applied to the resource. (required) - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User or system provided value for the resource. (required) - :return: AdminExecution + :param str project: Unique project id which this set of attributes references. +required (required) + :param str domain: Unique domain id which this set of attributes references. +required (required) + :param str workflow: Workflow name which this set of attributes references. +required (required) + :param AdminWorkflowAttributesDeleteRequest body: (required) + :return: AdminWorkflowAttributesDeleteResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_execution2_with_http_info(id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 + return self.delete_workflow_attributes_with_http_info(project, domain, workflow, body, **kwargs) # noqa: E501 else: - (data) = self.get_execution2_with_http_info(id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 + (data) = self.delete_workflow_attributes_with_http_info(project, domain, workflow, body, **kwargs) # noqa: E501 return data - def get_execution2_with_http_info(self, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Fetches a :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 + def delete_workflow_attributes_with_http_info(self, project, domain, workflow, body, **kwargs): # noqa: E501 + """Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_execution2_with_http_info(id_org, id_project, id_domain, id_name, async_req=True) + >>> thread = api.delete_workflow_attributes_with_http_info(project, domain, workflow, body, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_org: Optional, org key applied to the resource. (required) - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User or system provided value for the resource. (required) - :return: AdminExecution + :param str project: Unique project id which this set of attributes references. +required (required) + :param str domain: Unique domain id which this set of attributes references. +required (required) + :param str workflow: Workflow name which this set of attributes references. +required (required) + :param AdminWorkflowAttributesDeleteRequest body: (required) + :return: AdminWorkflowAttributesDeleteResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['id_org', 'id_project', 'id_domain', 'id_name'] # noqa: E501 + all_params = ['project', 'domain', 'workflow', 'body'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -2092,38 +1952,36 @@ def get_execution2_with_http_info(self, id_org, id_project, id_domain, id_name, if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_execution2" % key + " to method delete_workflow_attributes" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'id_org' is set - if ('id_org' not in params or - params['id_org'] is None): - raise ValueError("Missing the required parameter `id_org` when calling `get_execution2`") # noqa: E501 - # verify the required parameter 'id_project' is set - if ('id_project' not in params or - params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `get_execution2`") # noqa: E501 - # verify the required parameter 'id_domain' is set - if ('id_domain' not in params or - params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `get_execution2`") # noqa: E501 - # verify the required parameter 'id_name' is set - if ('id_name' not in params or - params['id_name'] is None): - raise ValueError("Missing the required parameter `id_name` when calling `get_execution2`") # noqa: E501 + # verify the required parameter 'project' is set + if ('project' not in params or + params['project'] is None): + raise ValueError("Missing the required parameter `project` when calling `delete_workflow_attributes`") # noqa: E501 + # verify the required parameter 'domain' is set + if ('domain' not in params or + params['domain'] is None): + raise ValueError("Missing the required parameter `domain` when calling `delete_workflow_attributes`") # noqa: E501 + # verify the required parameter 'workflow' is set + if ('workflow' not in params or + params['workflow'] is None): + raise ValueError("Missing the required parameter `workflow` when calling `delete_workflow_attributes`") # noqa: E501 + # verify the required parameter 'body' is set + if ('body' not in params or + params['body'] is None): + raise ValueError("Missing the required parameter `body` when calling `delete_workflow_attributes`") # noqa: E501 collection_formats = {} path_params = {} - if 'id_org' in params: - path_params['id.org'] = params['id_org'] # noqa: E501 - if 'id_project' in params: - path_params['id.project'] = params['id_project'] # noqa: E501 - if 'id_domain' in params: - path_params['id.domain'] = params['id_domain'] # noqa: E501 - if 'id_name' in params: - path_params['id.name'] = params['id_name'] # noqa: E501 + if 'project' in params: + path_params['project'] = params['project'] # noqa: E501 + if 'domain' in params: + path_params['domain'] = params['domain'] # noqa: E501 + if 'workflow' in params: + path_params['workflow'] = params['workflow'] # noqa: E501 query_params = [] @@ -2133,6 +1991,8 @@ def get_execution2_with_http_info(self, id_org, id_project, id_domain, id_name, local_var_files = {} body_params = None + if 'body' in params: + body_params = params['body'] # HTTP header `Accept` header_params['Accept'] = self.api_client.select_header_accept( ['application/json']) # noqa: E501 @@ -2145,14 +2005,14 @@ def get_execution2_with_http_info(self, id_org, id_project, id_domain, id_name, auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}', 'GET', + '/api/v1/workflow_attributes/{project}/{domain}/{workflow}', 'DELETE', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminExecution', # noqa: E501 + response_type='AdminWorkflowAttributesDeleteResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -2160,49 +2020,51 @@ def get_execution2_with_http_info(self, id_org, id_project, id_domain, id_name, _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_execution_data(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Fetches input and output data for a :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 + def delete_workflow_attributes2(self, org, project, domain, workflow, body, **kwargs): # noqa: E501 + """Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_execution_data(id_project, id_domain, id_name, async_req=True) + >>> thread = api.delete_workflow_attributes2(org, project, domain, workflow, body, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User or system provided value for the resource. (required) - :param str id_org: Optional, org key applied to the resource. - :return: AdminWorkflowExecutionGetDataResponse + :param str org: Optional, org key applied to the attributes. (required) + :param str project: Unique project id which this set of attributes references. +required (required) + :param str domain: Unique domain id which this set of attributes references. +required (required) + :param str workflow: Workflow name which this set of attributes references. +required (required) + :param AdminWorkflowAttributesDeleteRequest body: (required) + :return: AdminWorkflowAttributesDeleteResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_execution_data_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 + return self.delete_workflow_attributes2_with_http_info(org, project, domain, workflow, body, **kwargs) # noqa: E501 else: - (data) = self.get_execution_data_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 + (data) = self.delete_workflow_attributes2_with_http_info(org, project, domain, workflow, body, **kwargs) # noqa: E501 return data - def get_execution_data_with_http_info(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Fetches input and output data for a :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 + def delete_workflow_attributes2_with_http_info(self, org, project, domain, workflow, body, **kwargs): # noqa: E501 + """Deletes custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_execution_data_with_http_info(id_project, id_domain, id_name, async_req=True) + >>> thread = api.delete_workflow_attributes2_with_http_info(org, project, domain, workflow, body, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User or system provided value for the resource. (required) - :param str id_org: Optional, org key applied to the resource. - :return: AdminWorkflowExecutionGetDataResponse + :param str org: Optional, org key applied to the attributes. (required) + :param str project: Unique project id which this set of attributes references. +required (required) + :param str domain: Unique domain id which this set of attributes references. +required (required) + :param str workflow: Workflow name which this set of attributes references. +required (required) + :param AdminWorkflowAttributesDeleteRequest body: (required) + :return: AdminWorkflowAttributesDeleteResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['id_project', 'id_domain', 'id_name', 'id_org'] # noqa: E501 + all_params = ['org', 'project', 'domain', 'workflow', 'body'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -2213,36 +2075,44 @@ def get_execution_data_with_http_info(self, id_project, id_domain, id_name, **kw if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_execution_data" % key + " to method delete_workflow_attributes2" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'id_project' is set - if ('id_project' not in params or - params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `get_execution_data`") # noqa: E501 - # verify the required parameter 'id_domain' is set - if ('id_domain' not in params or - params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `get_execution_data`") # noqa: E501 - # verify the required parameter 'id_name' is set - if ('id_name' not in params or - params['id_name'] is None): - raise ValueError("Missing the required parameter `id_name` when calling `get_execution_data`") # noqa: E501 + # verify the required parameter 'org' is set + if ('org' not in params or + params['org'] is None): + raise ValueError("Missing the required parameter `org` when calling `delete_workflow_attributes2`") # noqa: E501 + # verify the required parameter 'project' is set + if ('project' not in params or + params['project'] is None): + raise ValueError("Missing the required parameter `project` when calling `delete_workflow_attributes2`") # noqa: E501 + # verify the required parameter 'domain' is set + if ('domain' not in params or + params['domain'] is None): + raise ValueError("Missing the required parameter `domain` when calling `delete_workflow_attributes2`") # noqa: E501 + # verify the required parameter 'workflow' is set + if ('workflow' not in params or + params['workflow'] is None): + raise ValueError("Missing the required parameter `workflow` when calling `delete_workflow_attributes2`") # noqa: E501 + # verify the required parameter 'body' is set + if ('body' not in params or + params['body'] is None): + raise ValueError("Missing the required parameter `body` when calling `delete_workflow_attributes2`") # noqa: E501 collection_formats = {} path_params = {} - if 'id_project' in params: - path_params['id.project'] = params['id_project'] # noqa: E501 - if 'id_domain' in params: - path_params['id.domain'] = params['id_domain'] # noqa: E501 - if 'id_name' in params: - path_params['id.name'] = params['id_name'] # noqa: E501 + if 'org' in params: + path_params['org'] = params['org'] # noqa: E501 + if 'project' in params: + path_params['project'] = params['project'] # noqa: E501 + if 'domain' in params: + path_params['domain'] = params['domain'] # noqa: E501 + if 'workflow' in params: + path_params['workflow'] = params['workflow'] # noqa: E501 query_params = [] - if 'id_org' in params: - query_params.append(('id.org', params['id_org'])) # noqa: E501 header_params = {} @@ -2250,6 +2120,8 @@ def get_execution_data_with_http_info(self, id_project, id_domain, id_name, **kw local_var_files = {} body_params = None + if 'body' in params: + body_params = params['body'] # HTTP header `Accept` header_params['Accept'] = self.api_client.select_header_accept( ['application/json']) # noqa: E501 @@ -2262,14 +2134,14 @@ def get_execution_data_with_http_info(self, id_project, id_domain, id_name, **kw auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/data/executions/{id.project}/{id.domain}/{id.name}', 'GET', + '/api/v1/workflow_attributes/org/{org}/{project}/{domain}/{workflow}', 'DELETE', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminWorkflowExecutionGetDataResponse', # noqa: E501 + response_type='AdminWorkflowAttributesDeleteResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -2277,49 +2149,49 @@ def get_execution_data_with_http_info(self, id_project, id_domain, id_name, **kw _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_execution_data2(self, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Fetches input and output data for a :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 + def get_active_launch_plan(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetch the active version of a :ref:`ref_flyteidl.admin.LaunchPlan`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_execution_data2(id_org, id_project, id_domain, id_name, async_req=True) + >>> thread = api.get_active_launch_plan(id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_org: Optional, org key applied to the resource. (required) :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User or system provided value for the resource. (required) - :return: AdminWorkflowExecutionGetDataResponse + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) + :param str id_org: Optional, org key applied to the resource. + :return: AdminLaunchPlan If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_execution_data2_with_http_info(id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 + return self.get_active_launch_plan_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 else: - (data) = self.get_execution_data2_with_http_info(id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 + (data) = self.get_active_launch_plan_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 return data - def get_execution_data2_with_http_info(self, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Fetches input and output data for a :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 + def get_active_launch_plan_with_http_info(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetch the active version of a :ref:`ref_flyteidl.admin.LaunchPlan`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_execution_data2_with_http_info(id_org, id_project, id_domain, id_name, async_req=True) + >>> thread = api.get_active_launch_plan_with_http_info(id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_org: Optional, org key applied to the resource. (required) :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User or system provided value for the resource. (required) - :return: AdminWorkflowExecutionGetDataResponse + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) + :param str id_org: Optional, org key applied to the resource. + :return: AdminLaunchPlan If the method is called asynchronously, returns the request thread. """ - all_params = ['id_org', 'id_project', 'id_domain', 'id_name'] # noqa: E501 + all_params = ['id_project', 'id_domain', 'id_name', 'id_org'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -2330,32 +2202,26 @@ def get_execution_data2_with_http_info(self, id_org, id_project, id_domain, id_n if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_execution_data2" % key + " to method get_active_launch_plan" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'id_org' is set - if ('id_org' not in params or - params['id_org'] is None): - raise ValueError("Missing the required parameter `id_org` when calling `get_execution_data2`") # noqa: E501 # verify the required parameter 'id_project' is set if ('id_project' not in params or params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `get_execution_data2`") # noqa: E501 + raise ValueError("Missing the required parameter `id_project` when calling `get_active_launch_plan`") # noqa: E501 # verify the required parameter 'id_domain' is set if ('id_domain' not in params or params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `get_execution_data2`") # noqa: E501 + raise ValueError("Missing the required parameter `id_domain` when calling `get_active_launch_plan`") # noqa: E501 # verify the required parameter 'id_name' is set if ('id_name' not in params or params['id_name'] is None): - raise ValueError("Missing the required parameter `id_name` when calling `get_execution_data2`") # noqa: E501 + raise ValueError("Missing the required parameter `id_name` when calling `get_active_launch_plan`") # noqa: E501 collection_formats = {} path_params = {} - if 'id_org' in params: - path_params['id.org'] = params['id_org'] # noqa: E501 if 'id_project' in params: path_params['id.project'] = params['id_project'] # noqa: E501 if 'id_domain' in params: @@ -2364,6 +2230,8 @@ def get_execution_data2_with_http_info(self, id_org, id_project, id_domain, id_n path_params['id.name'] = params['id_name'] # noqa: E501 query_params = [] + if 'id_org' in params: + query_params.append(('id.org', params['id_org'])) # noqa: E501 header_params = {} @@ -2383,14 +2251,14 @@ def get_execution_data2_with_http_info(self, id_org, id_project, id_domain, id_n auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/data/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}', 'GET', + '/api/v1/active_launch_plans/{id.project}/{id.domain}/{id.name}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminWorkflowExecutionGetDataResponse', # noqa: E501 + response_type='AdminLaunchPlan', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -2398,51 +2266,49 @@ def get_execution_data2_with_http_info(self, id_org, id_project, id_domain, id_n _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_execution_metrics(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Fetches runtime metrics for a :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 + def get_active_launch_plan2(self, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetch the active version of a :ref:`ref_flyteidl.admin.LaunchPlan`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_execution_metrics(id_project, id_domain, id_name, async_req=True) + >>> thread = api.get_active_launch_plan2(id_org, id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool + :param str id_org: Optional, org key applied to the resource. (required) :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User or system provided value for the resource. (required) - :param str id_org: Optional, org key applied to the resource. - :param int depth: depth defines the number of Flyte entity levels to traverse when breaking down execution details. - :return: AdminWorkflowExecutionGetMetricsResponse + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) + :return: AdminLaunchPlan If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_execution_metrics_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 + return self.get_active_launch_plan2_with_http_info(id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 else: - (data) = self.get_execution_metrics_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 + (data) = self.get_active_launch_plan2_with_http_info(id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 return data - def get_execution_metrics_with_http_info(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Fetches runtime metrics for a :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 + def get_active_launch_plan2_with_http_info(self, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetch the active version of a :ref:`ref_flyteidl.admin.LaunchPlan`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_execution_metrics_with_http_info(id_project, id_domain, id_name, async_req=True) + >>> thread = api.get_active_launch_plan2_with_http_info(id_org, id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool + :param str id_org: Optional, org key applied to the resource. (required) :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User or system provided value for the resource. (required) - :param str id_org: Optional, org key applied to the resource. - :param int depth: depth defines the number of Flyte entity levels to traverse when breaking down execution details. - :return: AdminWorkflowExecutionGetMetricsResponse + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) + :return: AdminLaunchPlan If the method is called asynchronously, returns the request thread. """ - all_params = ['id_project', 'id_domain', 'id_name', 'id_org', 'depth'] # noqa: E501 + all_params = ['id_org', 'id_project', 'id_domain', 'id_name'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -2453,26 +2319,32 @@ def get_execution_metrics_with_http_info(self, id_project, id_domain, id_name, * if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_execution_metrics" % key + " to method get_active_launch_plan2" % key ) params[key] = val del params['kwargs'] + # verify the required parameter 'id_org' is set + if ('id_org' not in params or + params['id_org'] is None): + raise ValueError("Missing the required parameter `id_org` when calling `get_active_launch_plan2`") # noqa: E501 # verify the required parameter 'id_project' is set if ('id_project' not in params or params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `get_execution_metrics`") # noqa: E501 + raise ValueError("Missing the required parameter `id_project` when calling `get_active_launch_plan2`") # noqa: E501 # verify the required parameter 'id_domain' is set if ('id_domain' not in params or params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `get_execution_metrics`") # noqa: E501 + raise ValueError("Missing the required parameter `id_domain` when calling `get_active_launch_plan2`") # noqa: E501 # verify the required parameter 'id_name' is set if ('id_name' not in params or params['id_name'] is None): - raise ValueError("Missing the required parameter `id_name` when calling `get_execution_metrics`") # noqa: E501 + raise ValueError("Missing the required parameter `id_name` when calling `get_active_launch_plan2`") # noqa: E501 collection_formats = {} path_params = {} + if 'id_org' in params: + path_params['id.org'] = params['id_org'] # noqa: E501 if 'id_project' in params: path_params['id.project'] = params['id_project'] # noqa: E501 if 'id_domain' in params: @@ -2481,10 +2353,6 @@ def get_execution_metrics_with_http_info(self, id_project, id_domain, id_name, * path_params['id.name'] = params['id_name'] # noqa: E501 query_params = [] - if 'id_org' in params: - query_params.append(('id.org', params['id_org'])) # noqa: E501 - if 'depth' in params: - query_params.append(('depth', params['depth'])) # noqa: E501 header_params = {} @@ -2504,14 +2372,14 @@ def get_execution_metrics_with_http_info(self, id_project, id_domain, id_name, * auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/metrics/executions/{id.project}/{id.domain}/{id.name}', 'GET', + '/api/v1/active_launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminWorkflowExecutionGetMetricsResponse', # noqa: E501 + response_type='AdminLaunchPlan', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -2519,51 +2387,53 @@ def get_execution_metrics_with_http_info(self, id_project, id_domain, id_name, * _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_execution_metrics2(self, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Fetches runtime metrics for a :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 + def get_description_entity(self, id_resource_type, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 + """Fetch a :ref:`ref_flyteidl.admin.DescriptionEntity` object. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_execution_metrics2(id_org, id_project, id_domain, id_name, async_req=True) + >>> thread = api.get_description_entity(id_resource_type, id_project, id_domain, id_name, id_version, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_org: Optional, org key applied to the resource. (required) + :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. (required) :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User or system provided value for the resource. (required) - :param int depth: depth defines the number of Flyte entity levels to traverse when breaking down execution details. - :return: AdminWorkflowExecutionGetMetricsResponse + :param str id_name: User provided value for the resource. (required) + :param str id_version: Specific version of the resource. (required) + :param str id_org: Optional, org key applied to the resource. + :return: AdminDescriptionEntity If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_execution_metrics2_with_http_info(id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 + return self.get_description_entity_with_http_info(id_resource_type, id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 else: - (data) = self.get_execution_metrics2_with_http_info(id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 + (data) = self.get_description_entity_with_http_info(id_resource_type, id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 return data - def get_execution_metrics2_with_http_info(self, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Fetches runtime metrics for a :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 + def get_description_entity_with_http_info(self, id_resource_type, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 + """Fetch a :ref:`ref_flyteidl.admin.DescriptionEntity` object. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_execution_metrics2_with_http_info(id_org, id_project, id_domain, id_name, async_req=True) + >>> thread = api.get_description_entity_with_http_info(id_resource_type, id_project, id_domain, id_name, id_version, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_org: Optional, org key applied to the resource. (required) + :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. (required) :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User or system provided value for the resource. (required) - :param int depth: depth defines the number of Flyte entity levels to traverse when breaking down execution details. - :return: AdminWorkflowExecutionGetMetricsResponse + :param str id_name: User provided value for the resource. (required) + :param str id_version: Specific version of the resource. (required) + :param str id_org: Optional, org key applied to the resource. + :return: AdminDescriptionEntity If the method is called asynchronously, returns the request thread. """ - all_params = ['id_org', 'id_project', 'id_domain', 'id_name', 'depth'] # noqa: E501 + all_params = ['id_resource_type', 'id_project', 'id_domain', 'id_name', 'id_version', 'id_org'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -2574,42 +2444,48 @@ def get_execution_metrics2_with_http_info(self, id_org, id_project, id_domain, i if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_execution_metrics2" % key + " to method get_description_entity" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'id_org' is set - if ('id_org' not in params or - params['id_org'] is None): - raise ValueError("Missing the required parameter `id_org` when calling `get_execution_metrics2`") # noqa: E501 + # verify the required parameter 'id_resource_type' is set + if ('id_resource_type' not in params or + params['id_resource_type'] is None): + raise ValueError("Missing the required parameter `id_resource_type` when calling `get_description_entity`") # noqa: E501 # verify the required parameter 'id_project' is set if ('id_project' not in params or params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `get_execution_metrics2`") # noqa: E501 + raise ValueError("Missing the required parameter `id_project` when calling `get_description_entity`") # noqa: E501 # verify the required parameter 'id_domain' is set if ('id_domain' not in params or params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `get_execution_metrics2`") # noqa: E501 + raise ValueError("Missing the required parameter `id_domain` when calling `get_description_entity`") # noqa: E501 # verify the required parameter 'id_name' is set if ('id_name' not in params or params['id_name'] is None): - raise ValueError("Missing the required parameter `id_name` when calling `get_execution_metrics2`") # noqa: E501 + raise ValueError("Missing the required parameter `id_name` when calling `get_description_entity`") # noqa: E501 + # verify the required parameter 'id_version' is set + if ('id_version' not in params or + params['id_version'] is None): + raise ValueError("Missing the required parameter `id_version` when calling `get_description_entity`") # noqa: E501 collection_formats = {} path_params = {} - if 'id_org' in params: - path_params['id.org'] = params['id_org'] # noqa: E501 + if 'id_resource_type' in params: + path_params['id.resource_type'] = params['id_resource_type'] # noqa: E501 if 'id_project' in params: path_params['id.project'] = params['id_project'] # noqa: E501 if 'id_domain' in params: path_params['id.domain'] = params['id_domain'] # noqa: E501 if 'id_name' in params: path_params['id.name'] = params['id_name'] # noqa: E501 + if 'id_version' in params: + path_params['id.version'] = params['id_version'] # noqa: E501 query_params = [] - if 'depth' in params: - query_params.append(('depth', params['depth'])) # noqa: E501 + if 'id_org' in params: + query_params.append(('id.org', params['id_org'])) # noqa: E501 header_params = {} @@ -2629,14 +2505,14 @@ def get_execution_metrics2_with_http_info(self, id_org, id_project, id_domain, i auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/metrics/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}', 'GET', + '/api/v1/description_entities/{id.resource_type}/{id.project}/{id.domain}/{id.name}/{id.version}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminWorkflowExecutionGetMetricsResponse', # noqa: E501 + response_type='AdminDescriptionEntity', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -2644,53 +2520,53 @@ def get_execution_metrics2_with_http_info(self, id_org, id_project, id_domain, i _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_launch_plan(self, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 - """Fetch a :ref:`ref_flyteidl.admin.LaunchPlan` definition. # noqa: E501 + def get_description_entity2(self, id_org, id_resource_type, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 + """Fetch a :ref:`ref_flyteidl.admin.DescriptionEntity` object. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_launch_plan(id_project, id_domain, id_name, id_version, async_req=True) + >>> thread = api.get_description_entity2(id_org, id_resource_type, id_project, id_domain, id_name, id_version, async_req=True) >>> result = thread.get() :param async_req bool + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. (required) :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) :param str id_name: User provided value for the resource. (required) :param str id_version: Specific version of the resource. (required) - :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects - :param str id_org: Optional, org key applied to the resource. - :return: AdminLaunchPlan + :return: AdminDescriptionEntity If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_launch_plan_with_http_info(id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 + return self.get_description_entity2_with_http_info(id_org, id_resource_type, id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 else: - (data) = self.get_launch_plan_with_http_info(id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 + (data) = self.get_description_entity2_with_http_info(id_org, id_resource_type, id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 return data - def get_launch_plan_with_http_info(self, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 - """Fetch a :ref:`ref_flyteidl.admin.LaunchPlan` definition. # noqa: E501 + def get_description_entity2_with_http_info(self, id_org, id_resource_type, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 + """Fetch a :ref:`ref_flyteidl.admin.DescriptionEntity` object. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_launch_plan_with_http_info(id_project, id_domain, id_name, id_version, async_req=True) + >>> thread = api.get_description_entity2_with_http_info(id_org, id_resource_type, id_project, id_domain, id_name, id_version, async_req=True) >>> result = thread.get() :param async_req bool + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. (required) :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) :param str id_name: User provided value for the resource. (required) :param str id_version: Specific version of the resource. (required) - :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects - :param str id_org: Optional, org key applied to the resource. - :return: AdminLaunchPlan + :return: AdminDescriptionEntity If the method is called asynchronously, returns the request thread. """ - all_params = ['id_project', 'id_domain', 'id_name', 'id_version', 'id_resource_type', 'id_org'] # noqa: E501 + all_params = ['id_org', 'id_resource_type', 'id_project', 'id_domain', 'id_name', 'id_version'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -2701,30 +2577,42 @@ def get_launch_plan_with_http_info(self, id_project, id_domain, id_name, id_vers if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_launch_plan" % key + " to method get_description_entity2" % key ) params[key] = val del params['kwargs'] + # verify the required parameter 'id_org' is set + if ('id_org' not in params or + params['id_org'] is None): + raise ValueError("Missing the required parameter `id_org` when calling `get_description_entity2`") # noqa: E501 + # verify the required parameter 'id_resource_type' is set + if ('id_resource_type' not in params or + params['id_resource_type'] is None): + raise ValueError("Missing the required parameter `id_resource_type` when calling `get_description_entity2`") # noqa: E501 # verify the required parameter 'id_project' is set if ('id_project' not in params or params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `get_launch_plan`") # noqa: E501 + raise ValueError("Missing the required parameter `id_project` when calling `get_description_entity2`") # noqa: E501 # verify the required parameter 'id_domain' is set if ('id_domain' not in params or params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `get_launch_plan`") # noqa: E501 + raise ValueError("Missing the required parameter `id_domain` when calling `get_description_entity2`") # noqa: E501 # verify the required parameter 'id_name' is set if ('id_name' not in params or params['id_name'] is None): - raise ValueError("Missing the required parameter `id_name` when calling `get_launch_plan`") # noqa: E501 + raise ValueError("Missing the required parameter `id_name` when calling `get_description_entity2`") # noqa: E501 # verify the required parameter 'id_version' is set if ('id_version' not in params or params['id_version'] is None): - raise ValueError("Missing the required parameter `id_version` when calling `get_launch_plan`") # noqa: E501 + raise ValueError("Missing the required parameter `id_version` when calling `get_description_entity2`") # noqa: E501 collection_formats = {} path_params = {} + if 'id_org' in params: + path_params['id.org'] = params['id_org'] # noqa: E501 + if 'id_resource_type' in params: + path_params['id.resource_type'] = params['id_resource_type'] # noqa: E501 if 'id_project' in params: path_params['id.project'] = params['id_project'] # noqa: E501 if 'id_domain' in params: @@ -2735,10 +2623,6 @@ def get_launch_plan_with_http_info(self, id_project, id_domain, id_name, id_vers path_params['id.version'] = params['id_version'] # noqa: E501 query_params = [] - if 'id_resource_type' in params: - query_params.append(('id.resource_type', params['id_resource_type'])) # noqa: E501 - if 'id_org' in params: - query_params.append(('id.org', params['id_org'])) # noqa: E501 header_params = {} @@ -2758,14 +2642,14 @@ def get_launch_plan_with_http_info(self, id_project, id_domain, id_name, id_vers auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/launch_plans/{id.project}/{id.domain}/{id.name}/{id.version}', 'GET', + '/api/v1/description_entities/org/{id.org}/{id.resource_type}/{id.project}/{id.domain}/{id.name}/{id.version}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminLaunchPlan', # noqa: E501 + response_type='AdminDescriptionEntity', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -2773,53 +2657,49 @@ def get_launch_plan_with_http_info(self, id_project, id_domain, id_name, id_vers _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_launch_plan2(self, id_org, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 - """Fetch a :ref:`ref_flyteidl.admin.LaunchPlan` definition. # noqa: E501 + def get_execution(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetches a :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_launch_plan2(id_org, id_project, id_domain, id_name, id_version, async_req=True) + >>> thread = api.get_execution(id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_org: Optional, org key applied to the resource. (required) :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. (required) - :param str id_version: Specific version of the resource. (required) - :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects - :return: AdminLaunchPlan + :param str id_name: User or system provided value for the resource. (required) + :param str id_org: Optional, org key applied to the resource. + :return: AdminExecution If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_launch_plan2_with_http_info(id_org, id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 + return self.get_execution_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 else: - (data) = self.get_launch_plan2_with_http_info(id_org, id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 + (data) = self.get_execution_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 return data - def get_launch_plan2_with_http_info(self, id_org, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 - """Fetch a :ref:`ref_flyteidl.admin.LaunchPlan` definition. # noqa: E501 + def get_execution_with_http_info(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetches a :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_launch_plan2_with_http_info(id_org, id_project, id_domain, id_name, id_version, async_req=True) + >>> thread = api.get_execution_with_http_info(id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_org: Optional, org key applied to the resource. (required) :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. (required) - :param str id_version: Specific version of the resource. (required) - :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects - :return: AdminLaunchPlan + :param str id_name: User or system provided value for the resource. (required) + :param str id_org: Optional, org key applied to the resource. + :return: AdminExecution If the method is called asynchronously, returns the request thread. """ - all_params = ['id_org', 'id_project', 'id_domain', 'id_name', 'id_version', 'id_resource_type'] # noqa: E501 + all_params = ['id_project', 'id_domain', 'id_name', 'id_org'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -2830,48 +2710,36 @@ def get_launch_plan2_with_http_info(self, id_org, id_project, id_domain, id_name if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_launch_plan2" % key + " to method get_execution" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'id_org' is set - if ('id_org' not in params or - params['id_org'] is None): - raise ValueError("Missing the required parameter `id_org` when calling `get_launch_plan2`") # noqa: E501 # verify the required parameter 'id_project' is set if ('id_project' not in params or params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `get_launch_plan2`") # noqa: E501 + raise ValueError("Missing the required parameter `id_project` when calling `get_execution`") # noqa: E501 # verify the required parameter 'id_domain' is set if ('id_domain' not in params or params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `get_launch_plan2`") # noqa: E501 + raise ValueError("Missing the required parameter `id_domain` when calling `get_execution`") # noqa: E501 # verify the required parameter 'id_name' is set if ('id_name' not in params or params['id_name'] is None): - raise ValueError("Missing the required parameter `id_name` when calling `get_launch_plan2`") # noqa: E501 - # verify the required parameter 'id_version' is set - if ('id_version' not in params or - params['id_version'] is None): - raise ValueError("Missing the required parameter `id_version` when calling `get_launch_plan2`") # noqa: E501 + raise ValueError("Missing the required parameter `id_name` when calling `get_execution`") # noqa: E501 collection_formats = {} path_params = {} - if 'id_org' in params: - path_params['id.org'] = params['id_org'] # noqa: E501 if 'id_project' in params: path_params['id.project'] = params['id_project'] # noqa: E501 if 'id_domain' in params: path_params['id.domain'] = params['id_domain'] # noqa: E501 if 'id_name' in params: path_params['id.name'] = params['id_name'] # noqa: E501 - if 'id_version' in params: - path_params['id.version'] = params['id_version'] # noqa: E501 query_params = [] - if 'id_resource_type' in params: - query_params.append(('id.resource_type', params['id_resource_type'])) # noqa: E501 + if 'id_org' in params: + query_params.append(('id.org', params['id_org'])) # noqa: E501 header_params = {} @@ -2891,14 +2759,14 @@ def get_launch_plan2_with_http_info(self, id_org, id_project, id_domain, id_name auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version}', 'GET', + '/api/v1/executions/{id.project}/{id.domain}/{id.name}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminLaunchPlan', # noqa: E501 + response_type='AdminExecution', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -2906,51 +2774,49 @@ def get_launch_plan2_with_http_info(self, id_org, id_project, id_domain, id_name _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_named_entity(self, resource_type, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Returns a :ref:`ref_flyteidl.admin.NamedEntity` object. # noqa: E501 + def get_execution2(self, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetches a :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_named_entity(resource_type, id_project, id_domain, id_name, async_req=True) + >>> thread = api.get_execution2(id_org, id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str resource_type: Resource type of the metadata to get. One of Task, Workflow or LaunchPlan. +required (required) + :param str id_org: Optional, org key applied to the resource. (required) :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) - :param str id_org: Optional, org key applied to the resource. - :return: AdminNamedEntity + :param str id_name: User or system provided value for the resource. (required) + :return: AdminExecution If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_named_entity_with_http_info(resource_type, id_project, id_domain, id_name, **kwargs) # noqa: E501 + return self.get_execution2_with_http_info(id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 else: - (data) = self.get_named_entity_with_http_info(resource_type, id_project, id_domain, id_name, **kwargs) # noqa: E501 + (data) = self.get_execution2_with_http_info(id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 return data - def get_named_entity_with_http_info(self, resource_type, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Returns a :ref:`ref_flyteidl.admin.NamedEntity` object. # noqa: E501 + def get_execution2_with_http_info(self, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetches a :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_named_entity_with_http_info(resource_type, id_project, id_domain, id_name, async_req=True) + >>> thread = api.get_execution2_with_http_info(id_org, id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str resource_type: Resource type of the metadata to get. One of Task, Workflow or LaunchPlan. +required (required) + :param str id_org: Optional, org key applied to the resource. (required) :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) - :param str id_org: Optional, org key applied to the resource. - :return: AdminNamedEntity + :param str id_name: User or system provided value for the resource. (required) + :return: AdminExecution If the method is called asynchronously, returns the request thread. """ - all_params = ['resource_type', 'id_project', 'id_domain', 'id_name', 'id_org'] # noqa: E501 + all_params = ['id_org', 'id_project', 'id_domain', 'id_name'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -2961,32 +2827,32 @@ def get_named_entity_with_http_info(self, resource_type, id_project, id_domain, if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_named_entity" % key + " to method get_execution2" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'resource_type' is set - if ('resource_type' not in params or - params['resource_type'] is None): - raise ValueError("Missing the required parameter `resource_type` when calling `get_named_entity`") # noqa: E501 + # verify the required parameter 'id_org' is set + if ('id_org' not in params or + params['id_org'] is None): + raise ValueError("Missing the required parameter `id_org` when calling `get_execution2`") # noqa: E501 # verify the required parameter 'id_project' is set if ('id_project' not in params or params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `get_named_entity`") # noqa: E501 + raise ValueError("Missing the required parameter `id_project` when calling `get_execution2`") # noqa: E501 # verify the required parameter 'id_domain' is set if ('id_domain' not in params or params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `get_named_entity`") # noqa: E501 + raise ValueError("Missing the required parameter `id_domain` when calling `get_execution2`") # noqa: E501 # verify the required parameter 'id_name' is set if ('id_name' not in params or params['id_name'] is None): - raise ValueError("Missing the required parameter `id_name` when calling `get_named_entity`") # noqa: E501 + raise ValueError("Missing the required parameter `id_name` when calling `get_execution2`") # noqa: E501 collection_formats = {} path_params = {} - if 'resource_type' in params: - path_params['resource_type'] = params['resource_type'] # noqa: E501 + if 'id_org' in params: + path_params['id.org'] = params['id_org'] # noqa: E501 if 'id_project' in params: path_params['id.project'] = params['id_project'] # noqa: E501 if 'id_domain' in params: @@ -2995,8 +2861,6 @@ def get_named_entity_with_http_info(self, resource_type, id_project, id_domain, path_params['id.name'] = params['id_name'] # noqa: E501 query_params = [] - if 'id_org' in params: - query_params.append(('id.org', params['id_org'])) # noqa: E501 header_params = {} @@ -3016,14 +2880,14 @@ def get_named_entity_with_http_info(self, resource_type, id_project, id_domain, auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/named_entities/{resource_type}/{id.project}/{id.domain}/{id.name}', 'GET', + '/api/v1/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminNamedEntity', # noqa: E501 + response_type='AdminExecution', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -3031,51 +2895,49 @@ def get_named_entity_with_http_info(self, resource_type, id_project, id_domain, _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_named_entity2(self, resource_type, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Returns a :ref:`ref_flyteidl.admin.NamedEntity` object. # noqa: E501 + def get_execution_data(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetches input and output data for a :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_named_entity2(resource_type, id_org, id_project, id_domain, id_name, async_req=True) + >>> thread = api.get_execution_data(id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str resource_type: Resource type of the metadata to get. One of Task, Workflow or LaunchPlan. +required (required) - :param str id_org: Optional, org key applied to the resource. (required) :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) - :return: AdminNamedEntity + :param str id_name: User or system provided value for the resource. (required) + :param str id_org: Optional, org key applied to the resource. + :return: AdminWorkflowExecutionGetDataResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_named_entity2_with_http_info(resource_type, id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 + return self.get_execution_data_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 else: - (data) = self.get_named_entity2_with_http_info(resource_type, id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 + (data) = self.get_execution_data_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 return data - def get_named_entity2_with_http_info(self, resource_type, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Returns a :ref:`ref_flyteidl.admin.NamedEntity` object. # noqa: E501 + def get_execution_data_with_http_info(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetches input and output data for a :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_named_entity2_with_http_info(resource_type, id_org, id_project, id_domain, id_name, async_req=True) + >>> thread = api.get_execution_data_with_http_info(id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str resource_type: Resource type of the metadata to get. One of Task, Workflow or LaunchPlan. +required (required) - :param str id_org: Optional, org key applied to the resource. (required) :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) - :return: AdminNamedEntity + :param str id_name: User or system provided value for the resource. (required) + :param str id_org: Optional, org key applied to the resource. + :return: AdminWorkflowExecutionGetDataResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['resource_type', 'id_org', 'id_project', 'id_domain', 'id_name'] # noqa: E501 + all_params = ['id_project', 'id_domain', 'id_name', 'id_org'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -3086,38 +2948,26 @@ def get_named_entity2_with_http_info(self, resource_type, id_org, id_project, id if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_named_entity2" % key + " to method get_execution_data" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'resource_type' is set - if ('resource_type' not in params or - params['resource_type'] is None): - raise ValueError("Missing the required parameter `resource_type` when calling `get_named_entity2`") # noqa: E501 - # verify the required parameter 'id_org' is set - if ('id_org' not in params or - params['id_org'] is None): - raise ValueError("Missing the required parameter `id_org` when calling `get_named_entity2`") # noqa: E501 # verify the required parameter 'id_project' is set if ('id_project' not in params or params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `get_named_entity2`") # noqa: E501 + raise ValueError("Missing the required parameter `id_project` when calling `get_execution_data`") # noqa: E501 # verify the required parameter 'id_domain' is set if ('id_domain' not in params or params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `get_named_entity2`") # noqa: E501 + raise ValueError("Missing the required parameter `id_domain` when calling `get_execution_data`") # noqa: E501 # verify the required parameter 'id_name' is set if ('id_name' not in params or params['id_name'] is None): - raise ValueError("Missing the required parameter `id_name` when calling `get_named_entity2`") # noqa: E501 + raise ValueError("Missing the required parameter `id_name` when calling `get_execution_data`") # noqa: E501 collection_formats = {} path_params = {} - if 'resource_type' in params: - path_params['resource_type'] = params['resource_type'] # noqa: E501 - if 'id_org' in params: - path_params['id.org'] = params['id_org'] # noqa: E501 if 'id_project' in params: path_params['id.project'] = params['id_project'] # noqa: E501 if 'id_domain' in params: @@ -3126,6 +2976,8 @@ def get_named_entity2_with_http_info(self, resource_type, id_org, id_project, id path_params['id.name'] = params['id_name'] # noqa: E501 query_params = [] + if 'id_org' in params: + query_params.append(('id.org', params['id_org'])) # noqa: E501 header_params = {} @@ -3145,14 +2997,14 @@ def get_named_entity2_with_http_info(self, resource_type, id_org, id_project, id auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/named_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain}/{id.name}', 'GET', + '/api/v1/data/executions/{id.project}/{id.domain}/{id.name}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminNamedEntity', # noqa: E501 + response_type='AdminWorkflowExecutionGetDataResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -3160,51 +3012,49 @@ def get_named_entity2_with_http_info(self, resource_type, id_org, id_project, id _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_node_execution(self, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs): # noqa: E501 - """Fetches a :ref:`ref_flyteidl.admin.NodeExecution`. # noqa: E501 + def get_execution_data2(self, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetches input and output data for a :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_node_execution(id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, async_req=True) + >>> thread = api.get_execution_data2(id_org, id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_execution_id_project: Name of the project the resource belongs to. (required) - :param str id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_execution_id_name: User or system provided value for the resource. (required) - :param str id_node_id: (required) - :param str id_execution_id_org: Optional, org key applied to the resource. - :return: FlyteidladminNodeExecution + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User or system provided value for the resource. (required) + :return: AdminWorkflowExecutionGetDataResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_node_execution_with_http_info(id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs) # noqa: E501 + return self.get_execution_data2_with_http_info(id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 else: - (data) = self.get_node_execution_with_http_info(id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs) # noqa: E501 + (data) = self.get_execution_data2_with_http_info(id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 return data - def get_node_execution_with_http_info(self, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs): # noqa: E501 - """Fetches a :ref:`ref_flyteidl.admin.NodeExecution`. # noqa: E501 + def get_execution_data2_with_http_info(self, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetches input and output data for a :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_node_execution_with_http_info(id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, async_req=True) + >>> thread = api.get_execution_data2_with_http_info(id_org, id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_execution_id_project: Name of the project the resource belongs to. (required) - :param str id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_execution_id_name: User or system provided value for the resource. (required) - :param str id_node_id: (required) - :param str id_execution_id_org: Optional, org key applied to the resource. - :return: FlyteidladminNodeExecution + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User or system provided value for the resource. (required) + :return: AdminWorkflowExecutionGetDataResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['id_execution_id_project', 'id_execution_id_domain', 'id_execution_id_name', 'id_node_id', 'id_execution_id_org'] # noqa: E501 + all_params = ['id_org', 'id_project', 'id_domain', 'id_name'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -3215,42 +3065,40 @@ def get_node_execution_with_http_info(self, id_execution_id_project, id_executio if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_node_execution" % key + " to method get_execution_data2" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'id_execution_id_project' is set - if ('id_execution_id_project' not in params or - params['id_execution_id_project'] is None): - raise ValueError("Missing the required parameter `id_execution_id_project` when calling `get_node_execution`") # noqa: E501 - # verify the required parameter 'id_execution_id_domain' is set - if ('id_execution_id_domain' not in params or - params['id_execution_id_domain'] is None): - raise ValueError("Missing the required parameter `id_execution_id_domain` when calling `get_node_execution`") # noqa: E501 - # verify the required parameter 'id_execution_id_name' is set - if ('id_execution_id_name' not in params or - params['id_execution_id_name'] is None): - raise ValueError("Missing the required parameter `id_execution_id_name` when calling `get_node_execution`") # noqa: E501 - # verify the required parameter 'id_node_id' is set - if ('id_node_id' not in params or - params['id_node_id'] is None): - raise ValueError("Missing the required parameter `id_node_id` when calling `get_node_execution`") # noqa: E501 + # verify the required parameter 'id_org' is set + if ('id_org' not in params or + params['id_org'] is None): + raise ValueError("Missing the required parameter `id_org` when calling `get_execution_data2`") # noqa: E501 + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `get_execution_data2`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `get_execution_data2`") # noqa: E501 + # verify the required parameter 'id_name' is set + if ('id_name' not in params or + params['id_name'] is None): + raise ValueError("Missing the required parameter `id_name` when calling `get_execution_data2`") # noqa: E501 collection_formats = {} path_params = {} - if 'id_execution_id_project' in params: - path_params['id.execution_id.project'] = params['id_execution_id_project'] # noqa: E501 - if 'id_execution_id_domain' in params: - path_params['id.execution_id.domain'] = params['id_execution_id_domain'] # noqa: E501 - if 'id_execution_id_name' in params: - path_params['id.execution_id.name'] = params['id_execution_id_name'] # noqa: E501 - if 'id_node_id' in params: - path_params['id.node_id'] = params['id_node_id'] # noqa: E501 + if 'id_org' in params: + path_params['id.org'] = params['id_org'] # noqa: E501 + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 + if 'id_name' in params: + path_params['id.name'] = params['id_name'] # noqa: E501 query_params = [] - if 'id_execution_id_org' in params: - query_params.append(('id.execution_id.org', params['id_execution_id_org'])) # noqa: E501 header_params = {} @@ -3270,14 +3118,14 @@ def get_node_execution_with_http_info(self, id_execution_id_project, id_executio auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/node_executions/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}', 'GET', + '/api/v1/data/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='FlyteidladminNodeExecution', # noqa: E501 + response_type='AdminWorkflowExecutionGetDataResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -3285,51 +3133,51 @@ def get_node_execution_with_http_info(self, id_execution_id_project, id_executio _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_node_execution2(self, id_execution_id_org, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs): # noqa: E501 - """Fetches a :ref:`ref_flyteidl.admin.NodeExecution`. # noqa: E501 + def get_execution_metrics(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetches runtime metrics for a :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_node_execution2(id_execution_id_org, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, async_req=True) + >>> thread = api.get_execution_metrics(id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_execution_id_org: Optional, org key applied to the resource. (required) - :param str id_execution_id_project: Name of the project the resource belongs to. (required) - :param str id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_execution_id_name: User or system provided value for the resource. (required) - :param str id_node_id: (required) - :return: FlyteidladminNodeExecution + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User or system provided value for the resource. (required) + :param str id_org: Optional, org key applied to the resource. + :param int depth: depth defines the number of Flyte entity levels to traverse when breaking down execution details. + :return: AdminWorkflowExecutionGetMetricsResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_node_execution2_with_http_info(id_execution_id_org, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs) # noqa: E501 + return self.get_execution_metrics_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 else: - (data) = self.get_node_execution2_with_http_info(id_execution_id_org, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs) # noqa: E501 + (data) = self.get_execution_metrics_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 return data - def get_node_execution2_with_http_info(self, id_execution_id_org, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs): # noqa: E501 - """Fetches a :ref:`ref_flyteidl.admin.NodeExecution`. # noqa: E501 + def get_execution_metrics_with_http_info(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetches runtime metrics for a :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_node_execution2_with_http_info(id_execution_id_org, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, async_req=True) + >>> thread = api.get_execution_metrics_with_http_info(id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_execution_id_org: Optional, org key applied to the resource. (required) - :param str id_execution_id_project: Name of the project the resource belongs to. (required) - :param str id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_execution_id_name: User or system provided value for the resource. (required) - :param str id_node_id: (required) - :return: FlyteidladminNodeExecution + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User or system provided value for the resource. (required) + :param str id_org: Optional, org key applied to the resource. + :param int depth: depth defines the number of Flyte entity levels to traverse when breaking down execution details. + :return: AdminWorkflowExecutionGetMetricsResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['id_execution_id_org', 'id_execution_id_project', 'id_execution_id_domain', 'id_execution_id_name', 'id_node_id'] # noqa: E501 + all_params = ['id_project', 'id_domain', 'id_name', 'id_org', 'depth'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -3340,46 +3188,38 @@ def get_node_execution2_with_http_info(self, id_execution_id_org, id_execution_i if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_node_execution2" % key + " to method get_execution_metrics" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'id_execution_id_org' is set - if ('id_execution_id_org' not in params or - params['id_execution_id_org'] is None): - raise ValueError("Missing the required parameter `id_execution_id_org` when calling `get_node_execution2`") # noqa: E501 - # verify the required parameter 'id_execution_id_project' is set - if ('id_execution_id_project' not in params or - params['id_execution_id_project'] is None): - raise ValueError("Missing the required parameter `id_execution_id_project` when calling `get_node_execution2`") # noqa: E501 - # verify the required parameter 'id_execution_id_domain' is set - if ('id_execution_id_domain' not in params or - params['id_execution_id_domain'] is None): - raise ValueError("Missing the required parameter `id_execution_id_domain` when calling `get_node_execution2`") # noqa: E501 - # verify the required parameter 'id_execution_id_name' is set - if ('id_execution_id_name' not in params or - params['id_execution_id_name'] is None): - raise ValueError("Missing the required parameter `id_execution_id_name` when calling `get_node_execution2`") # noqa: E501 - # verify the required parameter 'id_node_id' is set - if ('id_node_id' not in params or - params['id_node_id'] is None): - raise ValueError("Missing the required parameter `id_node_id` when calling `get_node_execution2`") # noqa: E501 + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `get_execution_metrics`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `get_execution_metrics`") # noqa: E501 + # verify the required parameter 'id_name' is set + if ('id_name' not in params or + params['id_name'] is None): + raise ValueError("Missing the required parameter `id_name` when calling `get_execution_metrics`") # noqa: E501 collection_formats = {} path_params = {} - if 'id_execution_id_org' in params: - path_params['id.execution_id.org'] = params['id_execution_id_org'] # noqa: E501 - if 'id_execution_id_project' in params: - path_params['id.execution_id.project'] = params['id_execution_id_project'] # noqa: E501 - if 'id_execution_id_domain' in params: - path_params['id.execution_id.domain'] = params['id_execution_id_domain'] # noqa: E501 - if 'id_execution_id_name' in params: - path_params['id.execution_id.name'] = params['id_execution_id_name'] # noqa: E501 - if 'id_node_id' in params: - path_params['id.node_id'] = params['id_node_id'] # noqa: E501 + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 + if 'id_name' in params: + path_params['id.name'] = params['id_name'] # noqa: E501 query_params = [] + if 'id_org' in params: + query_params.append(('id.org', params['id_org'])) # noqa: E501 + if 'depth' in params: + query_params.append(('depth', params['depth'])) # noqa: E501 header_params = {} @@ -3399,14 +3239,14 @@ def get_node_execution2_with_http_info(self, id_execution_id_org, id_execution_i auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/node_executions/org/{id.execution_id.org}/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}', 'GET', + '/api/v1/metrics/executions/{id.project}/{id.domain}/{id.name}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='FlyteidladminNodeExecution', # noqa: E501 + response_type='AdminWorkflowExecutionGetMetricsResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -3414,51 +3254,51 @@ def get_node_execution2_with_http_info(self, id_execution_id_org, id_execution_i _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_node_execution_data(self, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs): # noqa: E501 - """Fetches input and output data for a :ref:`ref_flyteidl.admin.NodeExecution`. # noqa: E501 + def get_execution_metrics2(self, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetches runtime metrics for a :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_node_execution_data(id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, async_req=True) + >>> thread = api.get_execution_metrics2(id_org, id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_execution_id_project: Name of the project the resource belongs to. (required) - :param str id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_execution_id_name: User or system provided value for the resource. (required) - :param str id_node_id: (required) - :param str id_execution_id_org: Optional, org key applied to the resource. - :return: AdminNodeExecutionGetDataResponse + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User or system provided value for the resource. (required) + :param int depth: depth defines the number of Flyte entity levels to traverse when breaking down execution details. + :return: AdminWorkflowExecutionGetMetricsResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_node_execution_data_with_http_info(id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs) # noqa: E501 + return self.get_execution_metrics2_with_http_info(id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 else: - (data) = self.get_node_execution_data_with_http_info(id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs) # noqa: E501 + (data) = self.get_execution_metrics2_with_http_info(id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 return data - def get_node_execution_data_with_http_info(self, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs): # noqa: E501 - """Fetches input and output data for a :ref:`ref_flyteidl.admin.NodeExecution`. # noqa: E501 + def get_execution_metrics2_with_http_info(self, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetches runtime metrics for a :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_node_execution_data_with_http_info(id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, async_req=True) + >>> thread = api.get_execution_metrics2_with_http_info(id_org, id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_execution_id_project: Name of the project the resource belongs to. (required) - :param str id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_execution_id_name: User or system provided value for the resource. (required) - :param str id_node_id: (required) - :param str id_execution_id_org: Optional, org key applied to the resource. - :return: AdminNodeExecutionGetDataResponse + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User or system provided value for the resource. (required) + :param int depth: depth defines the number of Flyte entity levels to traverse when breaking down execution details. + :return: AdminWorkflowExecutionGetMetricsResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['id_execution_id_project', 'id_execution_id_domain', 'id_execution_id_name', 'id_node_id', 'id_execution_id_org'] # noqa: E501 + all_params = ['id_org', 'id_project', 'id_domain', 'id_name', 'depth'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -3469,42 +3309,42 @@ def get_node_execution_data_with_http_info(self, id_execution_id_project, id_exe if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_node_execution_data" % key + " to method get_execution_metrics2" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'id_execution_id_project' is set - if ('id_execution_id_project' not in params or - params['id_execution_id_project'] is None): - raise ValueError("Missing the required parameter `id_execution_id_project` when calling `get_node_execution_data`") # noqa: E501 - # verify the required parameter 'id_execution_id_domain' is set - if ('id_execution_id_domain' not in params or - params['id_execution_id_domain'] is None): - raise ValueError("Missing the required parameter `id_execution_id_domain` when calling `get_node_execution_data`") # noqa: E501 - # verify the required parameter 'id_execution_id_name' is set - if ('id_execution_id_name' not in params or - params['id_execution_id_name'] is None): - raise ValueError("Missing the required parameter `id_execution_id_name` when calling `get_node_execution_data`") # noqa: E501 - # verify the required parameter 'id_node_id' is set - if ('id_node_id' not in params or - params['id_node_id'] is None): - raise ValueError("Missing the required parameter `id_node_id` when calling `get_node_execution_data`") # noqa: E501 + # verify the required parameter 'id_org' is set + if ('id_org' not in params or + params['id_org'] is None): + raise ValueError("Missing the required parameter `id_org` when calling `get_execution_metrics2`") # noqa: E501 + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `get_execution_metrics2`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `get_execution_metrics2`") # noqa: E501 + # verify the required parameter 'id_name' is set + if ('id_name' not in params or + params['id_name'] is None): + raise ValueError("Missing the required parameter `id_name` when calling `get_execution_metrics2`") # noqa: E501 collection_formats = {} path_params = {} - if 'id_execution_id_project' in params: - path_params['id.execution_id.project'] = params['id_execution_id_project'] # noqa: E501 - if 'id_execution_id_domain' in params: - path_params['id.execution_id.domain'] = params['id_execution_id_domain'] # noqa: E501 - if 'id_execution_id_name' in params: - path_params['id.execution_id.name'] = params['id_execution_id_name'] # noqa: E501 - if 'id_node_id' in params: - path_params['id.node_id'] = params['id_node_id'] # noqa: E501 + if 'id_org' in params: + path_params['id.org'] = params['id_org'] # noqa: E501 + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 + if 'id_name' in params: + path_params['id.name'] = params['id_name'] # noqa: E501 query_params = [] - if 'id_execution_id_org' in params: - query_params.append(('id.execution_id.org', params['id_execution_id_org'])) # noqa: E501 + if 'depth' in params: + query_params.append(('depth', params['depth'])) # noqa: E501 header_params = {} @@ -3524,14 +3364,14 @@ def get_node_execution_data_with_http_info(self, id_execution_id_project, id_exe auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/data/node_executions/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}', 'GET', + '/api/v1/metrics/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminNodeExecutionGetDataResponse', # noqa: E501 + response_type='AdminWorkflowExecutionGetMetricsResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -3539,51 +3379,53 @@ def get_node_execution_data_with_http_info(self, id_execution_id_project, id_exe _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_node_execution_data2(self, id_execution_id_org, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs): # noqa: E501 - """Fetches input and output data for a :ref:`ref_flyteidl.admin.NodeExecution`. # noqa: E501 + def get_launch_plan(self, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 + """Fetch a :ref:`ref_flyteidl.admin.LaunchPlan` definition. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_node_execution_data2(id_execution_id_org, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, async_req=True) + >>> thread = api.get_launch_plan(id_project, id_domain, id_name, id_version, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_execution_id_org: Optional, org key applied to the resource. (required) - :param str id_execution_id_project: Name of the project the resource belongs to. (required) - :param str id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_execution_id_name: User or system provided value for the resource. (required) - :param str id_node_id: (required) - :return: AdminNodeExecutionGetDataResponse + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. (required) + :param str id_version: Specific version of the resource. (required) + :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :param str id_org: Optional, org key applied to the resource. + :return: AdminLaunchPlan If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_node_execution_data2_with_http_info(id_execution_id_org, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs) # noqa: E501 + return self.get_launch_plan_with_http_info(id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 else: - (data) = self.get_node_execution_data2_with_http_info(id_execution_id_org, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs) # noqa: E501 + (data) = self.get_launch_plan_with_http_info(id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 return data - def get_node_execution_data2_with_http_info(self, id_execution_id_org, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs): # noqa: E501 - """Fetches input and output data for a :ref:`ref_flyteidl.admin.NodeExecution`. # noqa: E501 + def get_launch_plan_with_http_info(self, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 + """Fetch a :ref:`ref_flyteidl.admin.LaunchPlan` definition. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_node_execution_data2_with_http_info(id_execution_id_org, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, async_req=True) + >>> thread = api.get_launch_plan_with_http_info(id_project, id_domain, id_name, id_version, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_execution_id_org: Optional, org key applied to the resource. (required) - :param str id_execution_id_project: Name of the project the resource belongs to. (required) - :param str id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_execution_id_name: User or system provided value for the resource. (required) - :param str id_node_id: (required) - :return: AdminNodeExecutionGetDataResponse + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. (required) + :param str id_version: Specific version of the resource. (required) + :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :param str id_org: Optional, org key applied to the resource. + :return: AdminLaunchPlan If the method is called asynchronously, returns the request thread. """ - all_params = ['id_execution_id_org', 'id_execution_id_project', 'id_execution_id_domain', 'id_execution_id_name', 'id_node_id'] # noqa: E501 + all_params = ['id_project', 'id_domain', 'id_name', 'id_version', 'id_resource_type', 'id_org'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -3594,46 +3436,44 @@ def get_node_execution_data2_with_http_info(self, id_execution_id_org, id_execut if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_node_execution_data2" % key + " to method get_launch_plan" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'id_execution_id_org' is set - if ('id_execution_id_org' not in params or - params['id_execution_id_org'] is None): - raise ValueError("Missing the required parameter `id_execution_id_org` when calling `get_node_execution_data2`") # noqa: E501 - # verify the required parameter 'id_execution_id_project' is set - if ('id_execution_id_project' not in params or - params['id_execution_id_project'] is None): - raise ValueError("Missing the required parameter `id_execution_id_project` when calling `get_node_execution_data2`") # noqa: E501 - # verify the required parameter 'id_execution_id_domain' is set - if ('id_execution_id_domain' not in params or - params['id_execution_id_domain'] is None): - raise ValueError("Missing the required parameter `id_execution_id_domain` when calling `get_node_execution_data2`") # noqa: E501 - # verify the required parameter 'id_execution_id_name' is set - if ('id_execution_id_name' not in params or - params['id_execution_id_name'] is None): - raise ValueError("Missing the required parameter `id_execution_id_name` when calling `get_node_execution_data2`") # noqa: E501 - # verify the required parameter 'id_node_id' is set - if ('id_node_id' not in params or - params['id_node_id'] is None): - raise ValueError("Missing the required parameter `id_node_id` when calling `get_node_execution_data2`") # noqa: E501 + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `get_launch_plan`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `get_launch_plan`") # noqa: E501 + # verify the required parameter 'id_name' is set + if ('id_name' not in params or + params['id_name'] is None): + raise ValueError("Missing the required parameter `id_name` when calling `get_launch_plan`") # noqa: E501 + # verify the required parameter 'id_version' is set + if ('id_version' not in params or + params['id_version'] is None): + raise ValueError("Missing the required parameter `id_version` when calling `get_launch_plan`") # noqa: E501 collection_formats = {} path_params = {} - if 'id_execution_id_org' in params: - path_params['id.execution_id.org'] = params['id_execution_id_org'] # noqa: E501 - if 'id_execution_id_project' in params: - path_params['id.execution_id.project'] = params['id_execution_id_project'] # noqa: E501 - if 'id_execution_id_domain' in params: - path_params['id.execution_id.domain'] = params['id_execution_id_domain'] # noqa: E501 - if 'id_execution_id_name' in params: - path_params['id.execution_id.name'] = params['id_execution_id_name'] # noqa: E501 - if 'id_node_id' in params: - path_params['id.node_id'] = params['id_node_id'] # noqa: E501 + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 + if 'id_name' in params: + path_params['id.name'] = params['id_name'] # noqa: E501 + if 'id_version' in params: + path_params['id.version'] = params['id_version'] # noqa: E501 query_params = [] + if 'id_resource_type' in params: + query_params.append(('id.resource_type', params['id_resource_type'])) # noqa: E501 + if 'id_org' in params: + query_params.append(('id.org', params['id_org'])) # noqa: E501 header_params = {} @@ -3653,14 +3493,14 @@ def get_node_execution_data2_with_http_info(self, id_execution_id_org, id_execut auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/data/node_executions/org/{id.execution_id.org}/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}', 'GET', + '/api/v1/launch_plans/{id.project}/{id.domain}/{id.name}/{id.version}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminNodeExecutionGetDataResponse', # noqa: E501 + response_type='AdminLaunchPlan', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -3668,47 +3508,53 @@ def get_node_execution_data2_with_http_info(self, id_execution_id_org, id_execut _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_project_attributes(self, project, **kwargs): # noqa: E501 - """Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 + def get_launch_plan2(self, id_org, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 + """Fetch a :ref:`ref_flyteidl.admin.LaunchPlan` definition. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_project_attributes(project, async_req=True) + >>> thread = api.get_launch_plan2(id_org, id_project, id_domain, id_name, id_version, async_req=True) >>> result = thread.get() :param async_req bool - :param str project: Unique project id which this set of attributes references. +required (required) - :param str resource_type: Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. - :param str org: Optional, org key applied to the project. - :return: AdminProjectAttributesGetResponse + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. (required) + :param str id_version: Specific version of the resource. (required) + :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :return: AdminLaunchPlan If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_project_attributes_with_http_info(project, **kwargs) # noqa: E501 + return self.get_launch_plan2_with_http_info(id_org, id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 else: - (data) = self.get_project_attributes_with_http_info(project, **kwargs) # noqa: E501 + (data) = self.get_launch_plan2_with_http_info(id_org, id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 return data - def get_project_attributes_with_http_info(self, project, **kwargs): # noqa: E501 - """Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 + def get_launch_plan2_with_http_info(self, id_org, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 + """Fetch a :ref:`ref_flyteidl.admin.LaunchPlan` definition. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_project_attributes_with_http_info(project, async_req=True) + >>> thread = api.get_launch_plan2_with_http_info(id_org, id_project, id_domain, id_name, id_version, async_req=True) >>> result = thread.get() :param async_req bool - :param str project: Unique project id which this set of attributes references. +required (required) - :param str resource_type: Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. - :param str org: Optional, org key applied to the project. - :return: AdminProjectAttributesGetResponse + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. (required) + :param str id_version: Specific version of the resource. (required) + :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :return: AdminLaunchPlan If the method is called asynchronously, returns the request thread. """ - all_params = ['project', 'resource_type', 'org'] # noqa: E501 + all_params = ['id_org', 'id_project', 'id_domain', 'id_name', 'id_version', 'id_resource_type'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -3719,26 +3565,48 @@ def get_project_attributes_with_http_info(self, project, **kwargs): # noqa: E50 if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_project_attributes" % key + " to method get_launch_plan2" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'project' is set - if ('project' not in params or - params['project'] is None): - raise ValueError("Missing the required parameter `project` when calling `get_project_attributes`") # noqa: E501 + # verify the required parameter 'id_org' is set + if ('id_org' not in params or + params['id_org'] is None): + raise ValueError("Missing the required parameter `id_org` when calling `get_launch_plan2`") # noqa: E501 + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `get_launch_plan2`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `get_launch_plan2`") # noqa: E501 + # verify the required parameter 'id_name' is set + if ('id_name' not in params or + params['id_name'] is None): + raise ValueError("Missing the required parameter `id_name` when calling `get_launch_plan2`") # noqa: E501 + # verify the required parameter 'id_version' is set + if ('id_version' not in params or + params['id_version'] is None): + raise ValueError("Missing the required parameter `id_version` when calling `get_launch_plan2`") # noqa: E501 collection_formats = {} path_params = {} - if 'project' in params: - path_params['project'] = params['project'] # noqa: E501 + if 'id_org' in params: + path_params['id.org'] = params['id_org'] # noqa: E501 + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 + if 'id_name' in params: + path_params['id.name'] = params['id_name'] # noqa: E501 + if 'id_version' in params: + path_params['id.version'] = params['id_version'] # noqa: E501 query_params = [] - if 'resource_type' in params: - query_params.append(('resource_type', params['resource_type'])) # noqa: E501 - if 'org' in params: - query_params.append(('org', params['org'])) # noqa: E501 + if 'id_resource_type' in params: + query_params.append(('id.resource_type', params['id_resource_type'])) # noqa: E501 header_params = {} @@ -3758,14 +3626,14 @@ def get_project_attributes_with_http_info(self, project, **kwargs): # noqa: E50 auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/project_attributes/{project}', 'GET', + '/api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminProjectAttributesGetResponse', # noqa: E501 + response_type='AdminLaunchPlan', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -3773,47 +3641,51 @@ def get_project_attributes_with_http_info(self, project, **kwargs): # noqa: E50 _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_project_attributes2(self, org, project, **kwargs): # noqa: E501 - """Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 + def get_named_entity(self, resource_type, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Returns a :ref:`ref_flyteidl.admin.NamedEntity` object. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_project_attributes2(org, project, async_req=True) + >>> thread = api.get_named_entity(resource_type, id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str org: Optional, org key applied to the project. (required) - :param str project: Unique project id which this set of attributes references. +required (required) - :param str resource_type: Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. - :return: AdminProjectAttributesGetResponse + :param str resource_type: Resource type of the metadata to get. One of Task, Workflow or LaunchPlan. +required (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) + :param str id_org: Optional, org key applied to the resource. + :return: AdminNamedEntity If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_project_attributes2_with_http_info(org, project, **kwargs) # noqa: E501 + return self.get_named_entity_with_http_info(resource_type, id_project, id_domain, id_name, **kwargs) # noqa: E501 else: - (data) = self.get_project_attributes2_with_http_info(org, project, **kwargs) # noqa: E501 + (data) = self.get_named_entity_with_http_info(resource_type, id_project, id_domain, id_name, **kwargs) # noqa: E501 return data - def get_project_attributes2_with_http_info(self, org, project, **kwargs): # noqa: E501 - """Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 + def get_named_entity_with_http_info(self, resource_type, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Returns a :ref:`ref_flyteidl.admin.NamedEntity` object. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_project_attributes2_with_http_info(org, project, async_req=True) + >>> thread = api.get_named_entity_with_http_info(resource_type, id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str org: Optional, org key applied to the project. (required) - :param str project: Unique project id which this set of attributes references. +required (required) - :param str resource_type: Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. - :return: AdminProjectAttributesGetResponse + :param str resource_type: Resource type of the metadata to get. One of Task, Workflow or LaunchPlan. +required (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) + :param str id_org: Optional, org key applied to the resource. + :return: AdminNamedEntity If the method is called asynchronously, returns the request thread. """ - all_params = ['org', 'project', 'resource_type'] # noqa: E501 + all_params = ['resource_type', 'id_project', 'id_domain', 'id_name', 'id_org'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -3824,30 +3696,42 @@ def get_project_attributes2_with_http_info(self, org, project, **kwargs): # noq if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_project_attributes2" % key + " to method get_named_entity" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'org' is set - if ('org' not in params or - params['org'] is None): - raise ValueError("Missing the required parameter `org` when calling `get_project_attributes2`") # noqa: E501 - # verify the required parameter 'project' is set - if ('project' not in params or - params['project'] is None): - raise ValueError("Missing the required parameter `project` when calling `get_project_attributes2`") # noqa: E501 - - collection_formats = {} - - path_params = {} - if 'org' in params: - path_params['org'] = params['org'] # noqa: E501 - if 'project' in params: - path_params['project'] = params['project'] # noqa: E501 + # verify the required parameter 'resource_type' is set + if ('resource_type' not in params or + params['resource_type'] is None): + raise ValueError("Missing the required parameter `resource_type` when calling `get_named_entity`") # noqa: E501 + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `get_named_entity`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `get_named_entity`") # noqa: E501 + # verify the required parameter 'id_name' is set + if ('id_name' not in params or + params['id_name'] is None): + raise ValueError("Missing the required parameter `id_name` when calling `get_named_entity`") # noqa: E501 - query_params = [] + collection_formats = {} + + path_params = {} if 'resource_type' in params: - query_params.append(('resource_type', params['resource_type'])) # noqa: E501 + path_params['resource_type'] = params['resource_type'] # noqa: E501 + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 + if 'id_name' in params: + path_params['id.name'] = params['id_name'] # noqa: E501 + + query_params = [] + if 'id_org' in params: + query_params.append(('id.org', params['id_org'])) # noqa: E501 header_params = {} @@ -3867,14 +3751,14 @@ def get_project_attributes2_with_http_info(self, org, project, **kwargs): # noq auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/project_domain_attributes/org/{org}/{project}', 'GET', + '/api/v1/named_entities/{resource_type}/{id.project}/{id.domain}/{id.name}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminProjectAttributesGetResponse', # noqa: E501 + response_type='AdminNamedEntity', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -3882,49 +3766,51 @@ def get_project_attributes2_with_http_info(self, org, project, **kwargs): # noq _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_project_domain_attributes(self, project, domain, **kwargs): # noqa: E501 - """Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 + def get_named_entity2(self, resource_type, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Returns a :ref:`ref_flyteidl.admin.NamedEntity` object. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_project_domain_attributes(project, domain, async_req=True) + >>> thread = api.get_named_entity2(resource_type, id_org, id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str project: Unique project id which this set of attributes references. +required (required) - :param str domain: Unique domain id which this set of attributes references. +required (required) - :param str resource_type: Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. - :param str org: Optional, org key applied to the attributes. - :return: AdminProjectDomainAttributesGetResponse + :param str resource_type: Resource type of the metadata to get. One of Task, Workflow or LaunchPlan. +required (required) + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) + :return: AdminNamedEntity If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_project_domain_attributes_with_http_info(project, domain, **kwargs) # noqa: E501 + return self.get_named_entity2_with_http_info(resource_type, id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 else: - (data) = self.get_project_domain_attributes_with_http_info(project, domain, **kwargs) # noqa: E501 + (data) = self.get_named_entity2_with_http_info(resource_type, id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 return data - def get_project_domain_attributes_with_http_info(self, project, domain, **kwargs): # noqa: E501 - """Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 + def get_named_entity2_with_http_info(self, resource_type, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Returns a :ref:`ref_flyteidl.admin.NamedEntity` object. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_project_domain_attributes_with_http_info(project, domain, async_req=True) + >>> thread = api.get_named_entity2_with_http_info(resource_type, id_org, id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str project: Unique project id which this set of attributes references. +required (required) - :param str domain: Unique domain id which this set of attributes references. +required (required) - :param str resource_type: Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. - :param str org: Optional, org key applied to the attributes. - :return: AdminProjectDomainAttributesGetResponse + :param str resource_type: Resource type of the metadata to get. One of Task, Workflow or LaunchPlan. +required (required) + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) + :return: AdminNamedEntity If the method is called asynchronously, returns the request thread. """ - all_params = ['project', 'domain', 'resource_type', 'org'] # noqa: E501 + all_params = ['resource_type', 'id_org', 'id_project', 'id_domain', 'id_name'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -3935,32 +3821,46 @@ def get_project_domain_attributes_with_http_info(self, project, domain, **kwargs if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_project_domain_attributes" % key + " to method get_named_entity2" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'project' is set - if ('project' not in params or - params['project'] is None): - raise ValueError("Missing the required parameter `project` when calling `get_project_domain_attributes`") # noqa: E501 - # verify the required parameter 'domain' is set - if ('domain' not in params or - params['domain'] is None): - raise ValueError("Missing the required parameter `domain` when calling `get_project_domain_attributes`") # noqa: E501 + # verify the required parameter 'resource_type' is set + if ('resource_type' not in params or + params['resource_type'] is None): + raise ValueError("Missing the required parameter `resource_type` when calling `get_named_entity2`") # noqa: E501 + # verify the required parameter 'id_org' is set + if ('id_org' not in params or + params['id_org'] is None): + raise ValueError("Missing the required parameter `id_org` when calling `get_named_entity2`") # noqa: E501 + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `get_named_entity2`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `get_named_entity2`") # noqa: E501 + # verify the required parameter 'id_name' is set + if ('id_name' not in params or + params['id_name'] is None): + raise ValueError("Missing the required parameter `id_name` when calling `get_named_entity2`") # noqa: E501 collection_formats = {} path_params = {} - if 'project' in params: - path_params['project'] = params['project'] # noqa: E501 - if 'domain' in params: - path_params['domain'] = params['domain'] # noqa: E501 + if 'resource_type' in params: + path_params['resource_type'] = params['resource_type'] # noqa: E501 + if 'id_org' in params: + path_params['id.org'] = params['id_org'] # noqa: E501 + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 + if 'id_name' in params: + path_params['id.name'] = params['id_name'] # noqa: E501 query_params = [] - if 'resource_type' in params: - query_params.append(('resource_type', params['resource_type'])) # noqa: E501 - if 'org' in params: - query_params.append(('org', params['org'])) # noqa: E501 header_params = {} @@ -3980,14 +3880,14 @@ def get_project_domain_attributes_with_http_info(self, project, domain, **kwargs auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/project_domain_attributes/{project}/{domain}', 'GET', + '/api/v1/named_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain}/{id.name}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminProjectDomainAttributesGetResponse', # noqa: E501 + response_type='AdminNamedEntity', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -3995,49 +3895,51 @@ def get_project_domain_attributes_with_http_info(self, project, domain, **kwargs _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_project_domain_attributes2(self, org, project, domain, **kwargs): # noqa: E501 - """Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 + def get_node_execution(self, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs): # noqa: E501 + """Fetches a :ref:`ref_flyteidl.admin.NodeExecution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_project_domain_attributes2(org, project, domain, async_req=True) + >>> thread = api.get_node_execution(id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, async_req=True) >>> result = thread.get() :param async_req bool - :param str org: Optional, org key applied to the attributes. (required) - :param str project: Unique project id which this set of attributes references. +required (required) - :param str domain: Unique domain id which this set of attributes references. +required (required) - :param str resource_type: Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. - :return: AdminProjectDomainAttributesGetResponse + :param str id_execution_id_project: Name of the project the resource belongs to. (required) + :param str id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_execution_id_name: User or system provided value for the resource. (required) + :param str id_node_id: (required) + :param str id_execution_id_org: Optional, org key applied to the resource. + :return: FlyteidladminNodeExecution If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_project_domain_attributes2_with_http_info(org, project, domain, **kwargs) # noqa: E501 + return self.get_node_execution_with_http_info(id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs) # noqa: E501 else: - (data) = self.get_project_domain_attributes2_with_http_info(org, project, domain, **kwargs) # noqa: E501 + (data) = self.get_node_execution_with_http_info(id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs) # noqa: E501 return data - def get_project_domain_attributes2_with_http_info(self, org, project, domain, **kwargs): # noqa: E501 - """Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 + def get_node_execution_with_http_info(self, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs): # noqa: E501 + """Fetches a :ref:`ref_flyteidl.admin.NodeExecution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_project_domain_attributes2_with_http_info(org, project, domain, async_req=True) + >>> thread = api.get_node_execution_with_http_info(id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, async_req=True) >>> result = thread.get() :param async_req bool - :param str org: Optional, org key applied to the attributes. (required) - :param str project: Unique project id which this set of attributes references. +required (required) - :param str domain: Unique domain id which this set of attributes references. +required (required) - :param str resource_type: Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. - :return: AdminProjectDomainAttributesGetResponse + :param str id_execution_id_project: Name of the project the resource belongs to. (required) + :param str id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_execution_id_name: User or system provided value for the resource. (required) + :param str id_node_id: (required) + :param str id_execution_id_org: Optional, org key applied to the resource. + :return: FlyteidladminNodeExecution If the method is called asynchronously, returns the request thread. """ - all_params = ['org', 'project', 'domain', 'resource_type'] # noqa: E501 + all_params = ['id_execution_id_project', 'id_execution_id_domain', 'id_execution_id_name', 'id_node_id', 'id_execution_id_org'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -4048,36 +3950,42 @@ def get_project_domain_attributes2_with_http_info(self, org, project, domain, ** if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_project_domain_attributes2" % key + " to method get_node_execution" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'org' is set - if ('org' not in params or - params['org'] is None): - raise ValueError("Missing the required parameter `org` when calling `get_project_domain_attributes2`") # noqa: E501 - # verify the required parameter 'project' is set - if ('project' not in params or - params['project'] is None): - raise ValueError("Missing the required parameter `project` when calling `get_project_domain_attributes2`") # noqa: E501 - # verify the required parameter 'domain' is set - if ('domain' not in params or - params['domain'] is None): - raise ValueError("Missing the required parameter `domain` when calling `get_project_domain_attributes2`") # noqa: E501 + # verify the required parameter 'id_execution_id_project' is set + if ('id_execution_id_project' not in params or + params['id_execution_id_project'] is None): + raise ValueError("Missing the required parameter `id_execution_id_project` when calling `get_node_execution`") # noqa: E501 + # verify the required parameter 'id_execution_id_domain' is set + if ('id_execution_id_domain' not in params or + params['id_execution_id_domain'] is None): + raise ValueError("Missing the required parameter `id_execution_id_domain` when calling `get_node_execution`") # noqa: E501 + # verify the required parameter 'id_execution_id_name' is set + if ('id_execution_id_name' not in params or + params['id_execution_id_name'] is None): + raise ValueError("Missing the required parameter `id_execution_id_name` when calling `get_node_execution`") # noqa: E501 + # verify the required parameter 'id_node_id' is set + if ('id_node_id' not in params or + params['id_node_id'] is None): + raise ValueError("Missing the required parameter `id_node_id` when calling `get_node_execution`") # noqa: E501 collection_formats = {} path_params = {} - if 'org' in params: - path_params['org'] = params['org'] # noqa: E501 - if 'project' in params: - path_params['project'] = params['project'] # noqa: E501 - if 'domain' in params: - path_params['domain'] = params['domain'] # noqa: E501 + if 'id_execution_id_project' in params: + path_params['id.execution_id.project'] = params['id_execution_id_project'] # noqa: E501 + if 'id_execution_id_domain' in params: + path_params['id.execution_id.domain'] = params['id_execution_id_domain'] # noqa: E501 + if 'id_execution_id_name' in params: + path_params['id.execution_id.name'] = params['id_execution_id_name'] # noqa: E501 + if 'id_node_id' in params: + path_params['id.node_id'] = params['id_node_id'] # noqa: E501 query_params = [] - if 'resource_type' in params: - query_params.append(('resource_type', params['resource_type'])) # noqa: E501 + if 'id_execution_id_org' in params: + query_params.append(('id.execution_id.org', params['id_execution_id_org'])) # noqa: E501 header_params = {} @@ -4097,14 +4005,14 @@ def get_project_domain_attributes2_with_http_info(self, org, project, domain, ** auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/project_domain_attributes/org/{org}/{project}/{domain}', 'GET', + '/api/v1/node_executions/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminProjectDomainAttributesGetResponse', # noqa: E501 + response_type='FlyteidladminNodeExecution', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -4112,53 +4020,51 @@ def get_project_domain_attributes2_with_http_info(self, org, project, domain, ** _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_task(self, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 - """Fetch a :ref:`ref_flyteidl.admin.Task` definition. # noqa: E501 + def get_node_execution2(self, id_execution_id_org, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs): # noqa: E501 + """Fetches a :ref:`ref_flyteidl.admin.NodeExecution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_task(id_project, id_domain, id_name, id_version, async_req=True) + >>> thread = api.get_node_execution2(id_execution_id_org, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. (required) - :param str id_version: Specific version of the resource. (required) - :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects - :param str id_org: Optional, org key applied to the resource. - :return: AdminTask + :param str id_execution_id_org: Optional, org key applied to the resource. (required) + :param str id_execution_id_project: Name of the project the resource belongs to. (required) + :param str id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_execution_id_name: User or system provided value for the resource. (required) + :param str id_node_id: (required) + :return: FlyteidladminNodeExecution If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_task_with_http_info(id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 + return self.get_node_execution2_with_http_info(id_execution_id_org, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs) # noqa: E501 else: - (data) = self.get_task_with_http_info(id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 + (data) = self.get_node_execution2_with_http_info(id_execution_id_org, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs) # noqa: E501 return data - def get_task_with_http_info(self, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 - """Fetch a :ref:`ref_flyteidl.admin.Task` definition. # noqa: E501 + def get_node_execution2_with_http_info(self, id_execution_id_org, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs): # noqa: E501 + """Fetches a :ref:`ref_flyteidl.admin.NodeExecution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_task_with_http_info(id_project, id_domain, id_name, id_version, async_req=True) + >>> thread = api.get_node_execution2_with_http_info(id_execution_id_org, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. (required) - :param str id_version: Specific version of the resource. (required) - :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects - :param str id_org: Optional, org key applied to the resource. - :return: AdminTask + :param str id_execution_id_org: Optional, org key applied to the resource. (required) + :param str id_execution_id_project: Name of the project the resource belongs to. (required) + :param str id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_execution_id_name: User or system provided value for the resource. (required) + :param str id_node_id: (required) + :return: FlyteidladminNodeExecution If the method is called asynchronously, returns the request thread. """ - all_params = ['id_project', 'id_domain', 'id_name', 'id_version', 'id_resource_type', 'id_org'] # noqa: E501 + all_params = ['id_execution_id_org', 'id_execution_id_project', 'id_execution_id_domain', 'id_execution_id_name', 'id_node_id'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -4169,44 +4075,46 @@ def get_task_with_http_info(self, id_project, id_domain, id_name, id_version, ** if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_task" % key + " to method get_node_execution2" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'id_project' is set - if ('id_project' not in params or - params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `get_task`") # noqa: E501 - # verify the required parameter 'id_domain' is set - if ('id_domain' not in params or - params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `get_task`") # noqa: E501 - # verify the required parameter 'id_name' is set - if ('id_name' not in params or - params['id_name'] is None): - raise ValueError("Missing the required parameter `id_name` when calling `get_task`") # noqa: E501 - # verify the required parameter 'id_version' is set - if ('id_version' not in params or - params['id_version'] is None): - raise ValueError("Missing the required parameter `id_version` when calling `get_task`") # noqa: E501 + # verify the required parameter 'id_execution_id_org' is set + if ('id_execution_id_org' not in params or + params['id_execution_id_org'] is None): + raise ValueError("Missing the required parameter `id_execution_id_org` when calling `get_node_execution2`") # noqa: E501 + # verify the required parameter 'id_execution_id_project' is set + if ('id_execution_id_project' not in params or + params['id_execution_id_project'] is None): + raise ValueError("Missing the required parameter `id_execution_id_project` when calling `get_node_execution2`") # noqa: E501 + # verify the required parameter 'id_execution_id_domain' is set + if ('id_execution_id_domain' not in params or + params['id_execution_id_domain'] is None): + raise ValueError("Missing the required parameter `id_execution_id_domain` when calling `get_node_execution2`") # noqa: E501 + # verify the required parameter 'id_execution_id_name' is set + if ('id_execution_id_name' not in params or + params['id_execution_id_name'] is None): + raise ValueError("Missing the required parameter `id_execution_id_name` when calling `get_node_execution2`") # noqa: E501 + # verify the required parameter 'id_node_id' is set + if ('id_node_id' not in params or + params['id_node_id'] is None): + raise ValueError("Missing the required parameter `id_node_id` when calling `get_node_execution2`") # noqa: E501 collection_formats = {} path_params = {} - if 'id_project' in params: - path_params['id.project'] = params['id_project'] # noqa: E501 - if 'id_domain' in params: - path_params['id.domain'] = params['id_domain'] # noqa: E501 - if 'id_name' in params: - path_params['id.name'] = params['id_name'] # noqa: E501 - if 'id_version' in params: - path_params['id.version'] = params['id_version'] # noqa: E501 + if 'id_execution_id_org' in params: + path_params['id.execution_id.org'] = params['id_execution_id_org'] # noqa: E501 + if 'id_execution_id_project' in params: + path_params['id.execution_id.project'] = params['id_execution_id_project'] # noqa: E501 + if 'id_execution_id_domain' in params: + path_params['id.execution_id.domain'] = params['id_execution_id_domain'] # noqa: E501 + if 'id_execution_id_name' in params: + path_params['id.execution_id.name'] = params['id_execution_id_name'] # noqa: E501 + if 'id_node_id' in params: + path_params['id.node_id'] = params['id_node_id'] # noqa: E501 query_params = [] - if 'id_resource_type' in params: - query_params.append(('id.resource_type', params['id_resource_type'])) # noqa: E501 - if 'id_org' in params: - query_params.append(('id.org', params['id_org'])) # noqa: E501 header_params = {} @@ -4226,14 +4134,14 @@ def get_task_with_http_info(self, id_project, id_domain, id_name, id_version, ** auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/tasks/{id.project}/{id.domain}/{id.name}/{id.version}', 'GET', + '/api/v1/node_executions/org/{id.execution_id.org}/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminTask', # noqa: E501 + response_type='FlyteidladminNodeExecution', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -4241,53 +4149,51 @@ def get_task_with_http_info(self, id_project, id_domain, id_name, id_version, ** _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_task2(self, id_org, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 - """Fetch a :ref:`ref_flyteidl.admin.Task` definition. # noqa: E501 + def get_node_execution_data(self, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs): # noqa: E501 + """Fetches input and output data for a :ref:`ref_flyteidl.admin.NodeExecution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_task2(id_org, id_project, id_domain, id_name, id_version, async_req=True) + >>> thread = api.get_node_execution_data(id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_org: Optional, org key applied to the resource. (required) - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. (required) - :param str id_version: Specific version of the resource. (required) - :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects - :return: AdminTask + :param str id_execution_id_project: Name of the project the resource belongs to. (required) + :param str id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_execution_id_name: User or system provided value for the resource. (required) + :param str id_node_id: (required) + :param str id_execution_id_org: Optional, org key applied to the resource. + :return: AdminNodeExecutionGetDataResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_task2_with_http_info(id_org, id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 + return self.get_node_execution_data_with_http_info(id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs) # noqa: E501 else: - (data) = self.get_task2_with_http_info(id_org, id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 + (data) = self.get_node_execution_data_with_http_info(id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs) # noqa: E501 return data - def get_task2_with_http_info(self, id_org, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 - """Fetch a :ref:`ref_flyteidl.admin.Task` definition. # noqa: E501 + def get_node_execution_data_with_http_info(self, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs): # noqa: E501 + """Fetches input and output data for a :ref:`ref_flyteidl.admin.NodeExecution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_task2_with_http_info(id_org, id_project, id_domain, id_name, id_version, async_req=True) + >>> thread = api.get_node_execution_data_with_http_info(id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_org: Optional, org key applied to the resource. (required) - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. (required) - :param str id_version: Specific version of the resource. (required) - :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects - :return: AdminTask + :param str id_execution_id_project: Name of the project the resource belongs to. (required) + :param str id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_execution_id_name: User or system provided value for the resource. (required) + :param str id_node_id: (required) + :param str id_execution_id_org: Optional, org key applied to the resource. + :return: AdminNodeExecutionGetDataResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['id_org', 'id_project', 'id_domain', 'id_name', 'id_version', 'id_resource_type'] # noqa: E501 + all_params = ['id_execution_id_project', 'id_execution_id_domain', 'id_execution_id_name', 'id_node_id', 'id_execution_id_org'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -4298,48 +4204,42 @@ def get_task2_with_http_info(self, id_org, id_project, id_domain, id_name, id_ve if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_task2" % key + " to method get_node_execution_data" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'id_org' is set - if ('id_org' not in params or - params['id_org'] is None): - raise ValueError("Missing the required parameter `id_org` when calling `get_task2`") # noqa: E501 - # verify the required parameter 'id_project' is set - if ('id_project' not in params or - params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `get_task2`") # noqa: E501 - # verify the required parameter 'id_domain' is set - if ('id_domain' not in params or - params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `get_task2`") # noqa: E501 - # verify the required parameter 'id_name' is set - if ('id_name' not in params or - params['id_name'] is None): - raise ValueError("Missing the required parameter `id_name` when calling `get_task2`") # noqa: E501 - # verify the required parameter 'id_version' is set - if ('id_version' not in params or - params['id_version'] is None): - raise ValueError("Missing the required parameter `id_version` when calling `get_task2`") # noqa: E501 + # verify the required parameter 'id_execution_id_project' is set + if ('id_execution_id_project' not in params or + params['id_execution_id_project'] is None): + raise ValueError("Missing the required parameter `id_execution_id_project` when calling `get_node_execution_data`") # noqa: E501 + # verify the required parameter 'id_execution_id_domain' is set + if ('id_execution_id_domain' not in params or + params['id_execution_id_domain'] is None): + raise ValueError("Missing the required parameter `id_execution_id_domain` when calling `get_node_execution_data`") # noqa: E501 + # verify the required parameter 'id_execution_id_name' is set + if ('id_execution_id_name' not in params or + params['id_execution_id_name'] is None): + raise ValueError("Missing the required parameter `id_execution_id_name` when calling `get_node_execution_data`") # noqa: E501 + # verify the required parameter 'id_node_id' is set + if ('id_node_id' not in params or + params['id_node_id'] is None): + raise ValueError("Missing the required parameter `id_node_id` when calling `get_node_execution_data`") # noqa: E501 collection_formats = {} path_params = {} - if 'id_org' in params: - path_params['id.org'] = params['id_org'] # noqa: E501 - if 'id_project' in params: - path_params['id.project'] = params['id_project'] # noqa: E501 - if 'id_domain' in params: - path_params['id.domain'] = params['id_domain'] # noqa: E501 - if 'id_name' in params: - path_params['id.name'] = params['id_name'] # noqa: E501 - if 'id_version' in params: - path_params['id.version'] = params['id_version'] # noqa: E501 + if 'id_execution_id_project' in params: + path_params['id.execution_id.project'] = params['id_execution_id_project'] # noqa: E501 + if 'id_execution_id_domain' in params: + path_params['id.execution_id.domain'] = params['id_execution_id_domain'] # noqa: E501 + if 'id_execution_id_name' in params: + path_params['id.execution_id.name'] = params['id_execution_id_name'] # noqa: E501 + if 'id_node_id' in params: + path_params['id.node_id'] = params['id_node_id'] # noqa: E501 query_params = [] - if 'id_resource_type' in params: - query_params.append(('id.resource_type', params['id_resource_type'])) # noqa: E501 + if 'id_execution_id_org' in params: + query_params.append(('id.execution_id.org', params['id_execution_id_org'])) # noqa: E501 header_params = {} @@ -4359,14 +4259,14 @@ def get_task2_with_http_info(self, id_org, id_project, id_domain, id_name, id_ve auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/tasks/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version}', 'GET', + '/api/v1/data/node_executions/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminTask', # noqa: E501 + response_type='AdminNodeExecutionGetDataResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -4374,65 +4274,51 @@ def get_task2_with_http_info(self, id_org, id_project, id_domain, id_name, id_ve _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_task_execution(self, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs): # noqa: E501 - """Fetches a :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 + def get_node_execution_data2(self, id_execution_id_org, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs): # noqa: E501 + """Fetches input and output data for a :ref:`ref_flyteidl.admin.NodeExecution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_task_execution(id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, async_req=True) + >>> thread = api.get_node_execution_data2(id_execution_id_org, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) - :param str id_node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_node_execution_id_execution_id_name: User or system provided value for the resource. (required) - :param str id_node_execution_id_node_id: (required) - :param str id_task_id_project: Name of the project the resource belongs to. (required) - :param str id_task_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_task_id_name: User provided value for the resource. (required) - :param str id_task_id_version: Specific version of the resource. (required) - :param int id_retry_attempt: (required) - :param str id_task_id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects - :param str id_task_id_org: Optional, org key applied to the resource. - :param str id_node_execution_id_execution_id_org: Optional, org key applied to the resource. - :return: FlyteidladminTaskExecution + :param str id_execution_id_org: Optional, org key applied to the resource. (required) + :param str id_execution_id_project: Name of the project the resource belongs to. (required) + :param str id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_execution_id_name: User or system provided value for the resource. (required) + :param str id_node_id: (required) + :return: AdminNodeExecutionGetDataResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_task_execution_with_http_info(id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs) # noqa: E501 + return self.get_node_execution_data2_with_http_info(id_execution_id_org, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs) # noqa: E501 else: - (data) = self.get_task_execution_with_http_info(id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs) # noqa: E501 + (data) = self.get_node_execution_data2_with_http_info(id_execution_id_org, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs) # noqa: E501 return data - def get_task_execution_with_http_info(self, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs): # noqa: E501 - """Fetches a :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 + def get_node_execution_data2_with_http_info(self, id_execution_id_org, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, **kwargs): # noqa: E501 + """Fetches input and output data for a :ref:`ref_flyteidl.admin.NodeExecution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_task_execution_with_http_info(id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, async_req=True) + >>> thread = api.get_node_execution_data2_with_http_info(id_execution_id_org, id_execution_id_project, id_execution_id_domain, id_execution_id_name, id_node_id, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) - :param str id_node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_node_execution_id_execution_id_name: User or system provided value for the resource. (required) - :param str id_node_execution_id_node_id: (required) - :param str id_task_id_project: Name of the project the resource belongs to. (required) - :param str id_task_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_task_id_name: User provided value for the resource. (required) - :param str id_task_id_version: Specific version of the resource. (required) - :param int id_retry_attempt: (required) - :param str id_task_id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects - :param str id_task_id_org: Optional, org key applied to the resource. - :param str id_node_execution_id_execution_id_org: Optional, org key applied to the resource. - :return: FlyteidladminTaskExecution + :param str id_execution_id_org: Optional, org key applied to the resource. (required) + :param str id_execution_id_project: Name of the project the resource belongs to. (required) + :param str id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_execution_id_name: User or system provided value for the resource. (required) + :param str id_node_id: (required) + :return: AdminNodeExecutionGetDataResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['id_node_execution_id_execution_id_project', 'id_node_execution_id_execution_id_domain', 'id_node_execution_id_execution_id_name', 'id_node_execution_id_node_id', 'id_task_id_project', 'id_task_id_domain', 'id_task_id_name', 'id_task_id_version', 'id_retry_attempt', 'id_task_id_resource_type', 'id_task_id_org', 'id_node_execution_id_execution_id_org'] # noqa: E501 + all_params = ['id_execution_id_org', 'id_execution_id_project', 'id_execution_id_domain', 'id_execution_id_name', 'id_node_id'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -4443,76 +4329,1803 @@ def get_task_execution_with_http_info(self, id_node_execution_id_execution_id_pr if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_task_execution" % key + " to method get_node_execution_data2" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'id_node_execution_id_execution_id_project' is set - if ('id_node_execution_id_execution_id_project' not in params or - params['id_node_execution_id_execution_id_project'] is None): - raise ValueError("Missing the required parameter `id_node_execution_id_execution_id_project` when calling `get_task_execution`") # noqa: E501 - # verify the required parameter 'id_node_execution_id_execution_id_domain' is set - if ('id_node_execution_id_execution_id_domain' not in params or - params['id_node_execution_id_execution_id_domain'] is None): - raise ValueError("Missing the required parameter `id_node_execution_id_execution_id_domain` when calling `get_task_execution`") # noqa: E501 - # verify the required parameter 'id_node_execution_id_execution_id_name' is set - if ('id_node_execution_id_execution_id_name' not in params or - params['id_node_execution_id_execution_id_name'] is None): - raise ValueError("Missing the required parameter `id_node_execution_id_execution_id_name` when calling `get_task_execution`") # noqa: E501 - # verify the required parameter 'id_node_execution_id_node_id' is set - if ('id_node_execution_id_node_id' not in params or + # verify the required parameter 'id_execution_id_org' is set + if ('id_execution_id_org' not in params or + params['id_execution_id_org'] is None): + raise ValueError("Missing the required parameter `id_execution_id_org` when calling `get_node_execution_data2`") # noqa: E501 + # verify the required parameter 'id_execution_id_project' is set + if ('id_execution_id_project' not in params or + params['id_execution_id_project'] is None): + raise ValueError("Missing the required parameter `id_execution_id_project` when calling `get_node_execution_data2`") # noqa: E501 + # verify the required parameter 'id_execution_id_domain' is set + if ('id_execution_id_domain' not in params or + params['id_execution_id_domain'] is None): + raise ValueError("Missing the required parameter `id_execution_id_domain` when calling `get_node_execution_data2`") # noqa: E501 + # verify the required parameter 'id_execution_id_name' is set + if ('id_execution_id_name' not in params or + params['id_execution_id_name'] is None): + raise ValueError("Missing the required parameter `id_execution_id_name` when calling `get_node_execution_data2`") # noqa: E501 + # verify the required parameter 'id_node_id' is set + if ('id_node_id' not in params or + params['id_node_id'] is None): + raise ValueError("Missing the required parameter `id_node_id` when calling `get_node_execution_data2`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'id_execution_id_org' in params: + path_params['id.execution_id.org'] = params['id_execution_id_org'] # noqa: E501 + if 'id_execution_id_project' in params: + path_params['id.execution_id.project'] = params['id_execution_id_project'] # noqa: E501 + if 'id_execution_id_domain' in params: + path_params['id.execution_id.domain'] = params['id_execution_id_domain'] # noqa: E501 + if 'id_execution_id_name' in params: + path_params['id.execution_id.name'] = params['id_execution_id_name'] # noqa: E501 + if 'id_node_id' in params: + path_params['id.node_id'] = params['id_node_id'] # noqa: E501 + + query_params = [] + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/data/node_executions/org/{id.execution_id.org}/{id.execution_id.project}/{id.execution_id.domain}/{id.execution_id.name}/{id.node_id}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminNodeExecutionGetDataResponse', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_project_attributes(self, project, **kwargs): # noqa: E501 + """Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_project_attributes(project, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str project: Unique project id which this set of attributes references. +required (required) + :param str resource_type: Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. + :param str org: Optional, org key applied to the project. + :return: AdminProjectAttributesGetResponse + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.get_project_attributes_with_http_info(project, **kwargs) # noqa: E501 + else: + (data) = self.get_project_attributes_with_http_info(project, **kwargs) # noqa: E501 + return data + + def get_project_attributes_with_http_info(self, project, **kwargs): # noqa: E501 + """Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_project_attributes_with_http_info(project, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str project: Unique project id which this set of attributes references. +required (required) + :param str resource_type: Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. + :param str org: Optional, org key applied to the project. + :return: AdminProjectAttributesGetResponse + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['project', 'resource_type', 'org'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_project_attributes" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'project' is set + if ('project' not in params or + params['project'] is None): + raise ValueError("Missing the required parameter `project` when calling `get_project_attributes`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'project' in params: + path_params['project'] = params['project'] # noqa: E501 + + query_params = [] + if 'resource_type' in params: + query_params.append(('resource_type', params['resource_type'])) # noqa: E501 + if 'org' in params: + query_params.append(('org', params['org'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/project_attributes/{project}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminProjectAttributesGetResponse', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_project_attributes2(self, org, project, **kwargs): # noqa: E501 + """Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_project_attributes2(org, project, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str org: Optional, org key applied to the project. (required) + :param str project: Unique project id which this set of attributes references. +required (required) + :param str resource_type: Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. + :return: AdminProjectAttributesGetResponse + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.get_project_attributes2_with_http_info(org, project, **kwargs) # noqa: E501 + else: + (data) = self.get_project_attributes2_with_http_info(org, project, **kwargs) # noqa: E501 + return data + + def get_project_attributes2_with_http_info(self, org, project, **kwargs): # noqa: E501 + """Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_project_attributes2_with_http_info(org, project, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str org: Optional, org key applied to the project. (required) + :param str project: Unique project id which this set of attributes references. +required (required) + :param str resource_type: Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. + :return: AdminProjectAttributesGetResponse + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['org', 'project', 'resource_type'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_project_attributes2" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'org' is set + if ('org' not in params or + params['org'] is None): + raise ValueError("Missing the required parameter `org` when calling `get_project_attributes2`") # noqa: E501 + # verify the required parameter 'project' is set + if ('project' not in params or + params['project'] is None): + raise ValueError("Missing the required parameter `project` when calling `get_project_attributes2`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'org' in params: + path_params['org'] = params['org'] # noqa: E501 + if 'project' in params: + path_params['project'] = params['project'] # noqa: E501 + + query_params = [] + if 'resource_type' in params: + query_params.append(('resource_type', params['resource_type'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/project_domain_attributes/org/{org}/{project}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminProjectAttributesGetResponse', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_project_domain_attributes(self, project, domain, **kwargs): # noqa: E501 + """Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_project_domain_attributes(project, domain, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str project: Unique project id which this set of attributes references. +required (required) + :param str domain: Unique domain id which this set of attributes references. +required (required) + :param str resource_type: Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. + :param str org: Optional, org key applied to the attributes. + :return: AdminProjectDomainAttributesGetResponse + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.get_project_domain_attributes_with_http_info(project, domain, **kwargs) # noqa: E501 + else: + (data) = self.get_project_domain_attributes_with_http_info(project, domain, **kwargs) # noqa: E501 + return data + + def get_project_domain_attributes_with_http_info(self, project, domain, **kwargs): # noqa: E501 + """Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_project_domain_attributes_with_http_info(project, domain, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str project: Unique project id which this set of attributes references. +required (required) + :param str domain: Unique domain id which this set of attributes references. +required (required) + :param str resource_type: Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. + :param str org: Optional, org key applied to the attributes. + :return: AdminProjectDomainAttributesGetResponse + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['project', 'domain', 'resource_type', 'org'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_project_domain_attributes" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'project' is set + if ('project' not in params or + params['project'] is None): + raise ValueError("Missing the required parameter `project` when calling `get_project_domain_attributes`") # noqa: E501 + # verify the required parameter 'domain' is set + if ('domain' not in params or + params['domain'] is None): + raise ValueError("Missing the required parameter `domain` when calling `get_project_domain_attributes`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'project' in params: + path_params['project'] = params['project'] # noqa: E501 + if 'domain' in params: + path_params['domain'] = params['domain'] # noqa: E501 + + query_params = [] + if 'resource_type' in params: + query_params.append(('resource_type', params['resource_type'])) # noqa: E501 + if 'org' in params: + query_params.append(('org', params['org'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/project_domain_attributes/{project}/{domain}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminProjectDomainAttributesGetResponse', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_project_domain_attributes2(self, org, project, domain, **kwargs): # noqa: E501 + """Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_project_domain_attributes2(org, project, domain, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str org: Optional, org key applied to the attributes. (required) + :param str project: Unique project id which this set of attributes references. +required (required) + :param str domain: Unique domain id which this set of attributes references. +required (required) + :param str resource_type: Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. + :return: AdminProjectDomainAttributesGetResponse + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.get_project_domain_attributes2_with_http_info(org, project, domain, **kwargs) # noqa: E501 + else: + (data) = self.get_project_domain_attributes2_with_http_info(org, project, domain, **kwargs) # noqa: E501 + return data + + def get_project_domain_attributes2_with_http_info(self, org, project, domain, **kwargs): # noqa: E501 + """Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project and domain. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_project_domain_attributes2_with_http_info(org, project, domain, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str org: Optional, org key applied to the attributes. (required) + :param str project: Unique project id which this set of attributes references. +required (required) + :param str domain: Unique domain id which this set of attributes references. +required (required) + :param str resource_type: Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. + :return: AdminProjectDomainAttributesGetResponse + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['org', 'project', 'domain', 'resource_type'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_project_domain_attributes2" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'org' is set + if ('org' not in params or + params['org'] is None): + raise ValueError("Missing the required parameter `org` when calling `get_project_domain_attributes2`") # noqa: E501 + # verify the required parameter 'project' is set + if ('project' not in params or + params['project'] is None): + raise ValueError("Missing the required parameter `project` when calling `get_project_domain_attributes2`") # noqa: E501 + # verify the required parameter 'domain' is set + if ('domain' not in params or + params['domain'] is None): + raise ValueError("Missing the required parameter `domain` when calling `get_project_domain_attributes2`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'org' in params: + path_params['org'] = params['org'] # noqa: E501 + if 'project' in params: + path_params['project'] = params['project'] # noqa: E501 + if 'domain' in params: + path_params['domain'] = params['domain'] # noqa: E501 + + query_params = [] + if 'resource_type' in params: + query_params.append(('resource_type', params['resource_type'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/project_domain_attributes/org/{org}/{project}/{domain}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminProjectDomainAttributesGetResponse', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_task(self, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 + """Fetch a :ref:`ref_flyteidl.admin.Task` definition. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_task(id_project, id_domain, id_name, id_version, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. (required) + :param str id_version: Specific version of the resource. (required) + :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :param str id_org: Optional, org key applied to the resource. + :return: AdminTask + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.get_task_with_http_info(id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 + else: + (data) = self.get_task_with_http_info(id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 + return data + + def get_task_with_http_info(self, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 + """Fetch a :ref:`ref_flyteidl.admin.Task` definition. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_task_with_http_info(id_project, id_domain, id_name, id_version, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. (required) + :param str id_version: Specific version of the resource. (required) + :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :param str id_org: Optional, org key applied to the resource. + :return: AdminTask + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['id_project', 'id_domain', 'id_name', 'id_version', 'id_resource_type', 'id_org'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_task" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `get_task`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `get_task`") # noqa: E501 + # verify the required parameter 'id_name' is set + if ('id_name' not in params or + params['id_name'] is None): + raise ValueError("Missing the required parameter `id_name` when calling `get_task`") # noqa: E501 + # verify the required parameter 'id_version' is set + if ('id_version' not in params or + params['id_version'] is None): + raise ValueError("Missing the required parameter `id_version` when calling `get_task`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 + if 'id_name' in params: + path_params['id.name'] = params['id_name'] # noqa: E501 + if 'id_version' in params: + path_params['id.version'] = params['id_version'] # noqa: E501 + + query_params = [] + if 'id_resource_type' in params: + query_params.append(('id.resource_type', params['id_resource_type'])) # noqa: E501 + if 'id_org' in params: + query_params.append(('id.org', params['id_org'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/tasks/{id.project}/{id.domain}/{id.name}/{id.version}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminTask', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_task2(self, id_org, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 + """Fetch a :ref:`ref_flyteidl.admin.Task` definition. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_task2(id_org, id_project, id_domain, id_name, id_version, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. (required) + :param str id_version: Specific version of the resource. (required) + :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :return: AdminTask + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.get_task2_with_http_info(id_org, id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 + else: + (data) = self.get_task2_with_http_info(id_org, id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 + return data + + def get_task2_with_http_info(self, id_org, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 + """Fetch a :ref:`ref_flyteidl.admin.Task` definition. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_task2_with_http_info(id_org, id_project, id_domain, id_name, id_version, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. (required) + :param str id_version: Specific version of the resource. (required) + :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :return: AdminTask + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['id_org', 'id_project', 'id_domain', 'id_name', 'id_version', 'id_resource_type'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_task2" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'id_org' is set + if ('id_org' not in params or + params['id_org'] is None): + raise ValueError("Missing the required parameter `id_org` when calling `get_task2`") # noqa: E501 + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `get_task2`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `get_task2`") # noqa: E501 + # verify the required parameter 'id_name' is set + if ('id_name' not in params or + params['id_name'] is None): + raise ValueError("Missing the required parameter `id_name` when calling `get_task2`") # noqa: E501 + # verify the required parameter 'id_version' is set + if ('id_version' not in params or + params['id_version'] is None): + raise ValueError("Missing the required parameter `id_version` when calling `get_task2`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'id_org' in params: + path_params['id.org'] = params['id_org'] # noqa: E501 + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 + if 'id_name' in params: + path_params['id.name'] = params['id_name'] # noqa: E501 + if 'id_version' in params: + path_params['id.version'] = params['id_version'] # noqa: E501 + + query_params = [] + if 'id_resource_type' in params: + query_params.append(('id.resource_type', params['id_resource_type'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/tasks/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminTask', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_task_execution(self, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs): # noqa: E501 + """Fetches a :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_task_execution(id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) + :param str id_node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_node_execution_id_execution_id_name: User or system provided value for the resource. (required) + :param str id_node_execution_id_node_id: (required) + :param str id_task_id_project: Name of the project the resource belongs to. (required) + :param str id_task_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_task_id_name: User provided value for the resource. (required) + :param str id_task_id_version: Specific version of the resource. (required) + :param int id_retry_attempt: (required) + :param str id_task_id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :param str id_task_id_org: Optional, org key applied to the resource. + :param str id_node_execution_id_execution_id_org: Optional, org key applied to the resource. + :return: FlyteidladminTaskExecution + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.get_task_execution_with_http_info(id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs) # noqa: E501 + else: + (data) = self.get_task_execution_with_http_info(id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs) # noqa: E501 + return data + + def get_task_execution_with_http_info(self, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs): # noqa: E501 + """Fetches a :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_task_execution_with_http_info(id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) + :param str id_node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_node_execution_id_execution_id_name: User or system provided value for the resource. (required) + :param str id_node_execution_id_node_id: (required) + :param str id_task_id_project: Name of the project the resource belongs to. (required) + :param str id_task_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_task_id_name: User provided value for the resource. (required) + :param str id_task_id_version: Specific version of the resource. (required) + :param int id_retry_attempt: (required) + :param str id_task_id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :param str id_task_id_org: Optional, org key applied to the resource. + :param str id_node_execution_id_execution_id_org: Optional, org key applied to the resource. + :return: FlyteidladminTaskExecution + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['id_node_execution_id_execution_id_project', 'id_node_execution_id_execution_id_domain', 'id_node_execution_id_execution_id_name', 'id_node_execution_id_node_id', 'id_task_id_project', 'id_task_id_domain', 'id_task_id_name', 'id_task_id_version', 'id_retry_attempt', 'id_task_id_resource_type', 'id_task_id_org', 'id_node_execution_id_execution_id_org'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_task_execution" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'id_node_execution_id_execution_id_project' is set + if ('id_node_execution_id_execution_id_project' not in params or + params['id_node_execution_id_execution_id_project'] is None): + raise ValueError("Missing the required parameter `id_node_execution_id_execution_id_project` when calling `get_task_execution`") # noqa: E501 + # verify the required parameter 'id_node_execution_id_execution_id_domain' is set + if ('id_node_execution_id_execution_id_domain' not in params or + params['id_node_execution_id_execution_id_domain'] is None): + raise ValueError("Missing the required parameter `id_node_execution_id_execution_id_domain` when calling `get_task_execution`") # noqa: E501 + # verify the required parameter 'id_node_execution_id_execution_id_name' is set + if ('id_node_execution_id_execution_id_name' not in params or + params['id_node_execution_id_execution_id_name'] is None): + raise ValueError("Missing the required parameter `id_node_execution_id_execution_id_name` when calling `get_task_execution`") # noqa: E501 + # verify the required parameter 'id_node_execution_id_node_id' is set + if ('id_node_execution_id_node_id' not in params or + params['id_node_execution_id_node_id'] is None): + raise ValueError("Missing the required parameter `id_node_execution_id_node_id` when calling `get_task_execution`") # noqa: E501 + # verify the required parameter 'id_task_id_project' is set + if ('id_task_id_project' not in params or + params['id_task_id_project'] is None): + raise ValueError("Missing the required parameter `id_task_id_project` when calling `get_task_execution`") # noqa: E501 + # verify the required parameter 'id_task_id_domain' is set + if ('id_task_id_domain' not in params or + params['id_task_id_domain'] is None): + raise ValueError("Missing the required parameter `id_task_id_domain` when calling `get_task_execution`") # noqa: E501 + # verify the required parameter 'id_task_id_name' is set + if ('id_task_id_name' not in params or + params['id_task_id_name'] is None): + raise ValueError("Missing the required parameter `id_task_id_name` when calling `get_task_execution`") # noqa: E501 + # verify the required parameter 'id_task_id_version' is set + if ('id_task_id_version' not in params or + params['id_task_id_version'] is None): + raise ValueError("Missing the required parameter `id_task_id_version` when calling `get_task_execution`") # noqa: E501 + # verify the required parameter 'id_retry_attempt' is set + if ('id_retry_attempt' not in params or + params['id_retry_attempt'] is None): + raise ValueError("Missing the required parameter `id_retry_attempt` when calling `get_task_execution`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'id_node_execution_id_execution_id_project' in params: + path_params['id.node_execution_id.execution_id.project'] = params['id_node_execution_id_execution_id_project'] # noqa: E501 + if 'id_node_execution_id_execution_id_domain' in params: + path_params['id.node_execution_id.execution_id.domain'] = params['id_node_execution_id_execution_id_domain'] # noqa: E501 + if 'id_node_execution_id_execution_id_name' in params: + path_params['id.node_execution_id.execution_id.name'] = params['id_node_execution_id_execution_id_name'] # noqa: E501 + if 'id_node_execution_id_node_id' in params: + path_params['id.node_execution_id.node_id'] = params['id_node_execution_id_node_id'] # noqa: E501 + if 'id_task_id_project' in params: + path_params['id.task_id.project'] = params['id_task_id_project'] # noqa: E501 + if 'id_task_id_domain' in params: + path_params['id.task_id.domain'] = params['id_task_id_domain'] # noqa: E501 + if 'id_task_id_name' in params: + path_params['id.task_id.name'] = params['id_task_id_name'] # noqa: E501 + if 'id_task_id_version' in params: + path_params['id.task_id.version'] = params['id_task_id_version'] # noqa: E501 + if 'id_retry_attempt' in params: + path_params['id.retry_attempt'] = params['id_retry_attempt'] # noqa: E501 + + query_params = [] + if 'id_task_id_resource_type' in params: + query_params.append(('id.task_id.resource_type', params['id_task_id_resource_type'])) # noqa: E501 + if 'id_task_id_org' in params: + query_params.append(('id.task_id.org', params['id_task_id_org'])) # noqa: E501 + if 'id_node_execution_id_execution_id_org' in params: + query_params.append(('id.node_execution_id.execution_id.org', params['id_node_execution_id_execution_id_org'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/task_executions/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='FlyteidladminTaskExecution', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_task_execution2(self, id_node_execution_id_execution_id_org, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs): # noqa: E501 + """Fetches a :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_task_execution2(id_node_execution_id_execution_id_org, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_node_execution_id_execution_id_org: Optional, org key applied to the resource. (required) + :param str id_node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) + :param str id_node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_node_execution_id_execution_id_name: User or system provided value for the resource. (required) + :param str id_node_execution_id_node_id: (required) + :param str id_task_id_project: Name of the project the resource belongs to. (required) + :param str id_task_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_task_id_name: User provided value for the resource. (required) + :param str id_task_id_version: Specific version of the resource. (required) + :param int id_retry_attempt: (required) + :param str id_task_id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :param str id_task_id_org: Optional, org key applied to the resource. + :return: FlyteidladminTaskExecution + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.get_task_execution2_with_http_info(id_node_execution_id_execution_id_org, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs) # noqa: E501 + else: + (data) = self.get_task_execution2_with_http_info(id_node_execution_id_execution_id_org, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs) # noqa: E501 + return data + + def get_task_execution2_with_http_info(self, id_node_execution_id_execution_id_org, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs): # noqa: E501 + """Fetches a :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_task_execution2_with_http_info(id_node_execution_id_execution_id_org, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_node_execution_id_execution_id_org: Optional, org key applied to the resource. (required) + :param str id_node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) + :param str id_node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_node_execution_id_execution_id_name: User or system provided value for the resource. (required) + :param str id_node_execution_id_node_id: (required) + :param str id_task_id_project: Name of the project the resource belongs to. (required) + :param str id_task_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_task_id_name: User provided value for the resource. (required) + :param str id_task_id_version: Specific version of the resource. (required) + :param int id_retry_attempt: (required) + :param str id_task_id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :param str id_task_id_org: Optional, org key applied to the resource. + :return: FlyteidladminTaskExecution + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['id_node_execution_id_execution_id_org', 'id_node_execution_id_execution_id_project', 'id_node_execution_id_execution_id_domain', 'id_node_execution_id_execution_id_name', 'id_node_execution_id_node_id', 'id_task_id_project', 'id_task_id_domain', 'id_task_id_name', 'id_task_id_version', 'id_retry_attempt', 'id_task_id_resource_type', 'id_task_id_org'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_task_execution2" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'id_node_execution_id_execution_id_org' is set + if ('id_node_execution_id_execution_id_org' not in params or + params['id_node_execution_id_execution_id_org'] is None): + raise ValueError("Missing the required parameter `id_node_execution_id_execution_id_org` when calling `get_task_execution2`") # noqa: E501 + # verify the required parameter 'id_node_execution_id_execution_id_project' is set + if ('id_node_execution_id_execution_id_project' not in params or + params['id_node_execution_id_execution_id_project'] is None): + raise ValueError("Missing the required parameter `id_node_execution_id_execution_id_project` when calling `get_task_execution2`") # noqa: E501 + # verify the required parameter 'id_node_execution_id_execution_id_domain' is set + if ('id_node_execution_id_execution_id_domain' not in params or + params['id_node_execution_id_execution_id_domain'] is None): + raise ValueError("Missing the required parameter `id_node_execution_id_execution_id_domain` when calling `get_task_execution2`") # noqa: E501 + # verify the required parameter 'id_node_execution_id_execution_id_name' is set + if ('id_node_execution_id_execution_id_name' not in params or + params['id_node_execution_id_execution_id_name'] is None): + raise ValueError("Missing the required parameter `id_node_execution_id_execution_id_name` when calling `get_task_execution2`") # noqa: E501 + # verify the required parameter 'id_node_execution_id_node_id' is set + if ('id_node_execution_id_node_id' not in params or + params['id_node_execution_id_node_id'] is None): + raise ValueError("Missing the required parameter `id_node_execution_id_node_id` when calling `get_task_execution2`") # noqa: E501 + # verify the required parameter 'id_task_id_project' is set + if ('id_task_id_project' not in params or + params['id_task_id_project'] is None): + raise ValueError("Missing the required parameter `id_task_id_project` when calling `get_task_execution2`") # noqa: E501 + # verify the required parameter 'id_task_id_domain' is set + if ('id_task_id_domain' not in params or + params['id_task_id_domain'] is None): + raise ValueError("Missing the required parameter `id_task_id_domain` when calling `get_task_execution2`") # noqa: E501 + # verify the required parameter 'id_task_id_name' is set + if ('id_task_id_name' not in params or + params['id_task_id_name'] is None): + raise ValueError("Missing the required parameter `id_task_id_name` when calling `get_task_execution2`") # noqa: E501 + # verify the required parameter 'id_task_id_version' is set + if ('id_task_id_version' not in params or + params['id_task_id_version'] is None): + raise ValueError("Missing the required parameter `id_task_id_version` when calling `get_task_execution2`") # noqa: E501 + # verify the required parameter 'id_retry_attempt' is set + if ('id_retry_attempt' not in params or + params['id_retry_attempt'] is None): + raise ValueError("Missing the required parameter `id_retry_attempt` when calling `get_task_execution2`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'id_node_execution_id_execution_id_org' in params: + path_params['id.node_execution_id.execution_id.org'] = params['id_node_execution_id_execution_id_org'] # noqa: E501 + if 'id_node_execution_id_execution_id_project' in params: + path_params['id.node_execution_id.execution_id.project'] = params['id_node_execution_id_execution_id_project'] # noqa: E501 + if 'id_node_execution_id_execution_id_domain' in params: + path_params['id.node_execution_id.execution_id.domain'] = params['id_node_execution_id_execution_id_domain'] # noqa: E501 + if 'id_node_execution_id_execution_id_name' in params: + path_params['id.node_execution_id.execution_id.name'] = params['id_node_execution_id_execution_id_name'] # noqa: E501 + if 'id_node_execution_id_node_id' in params: + path_params['id.node_execution_id.node_id'] = params['id_node_execution_id_node_id'] # noqa: E501 + if 'id_task_id_project' in params: + path_params['id.task_id.project'] = params['id_task_id_project'] # noqa: E501 + if 'id_task_id_domain' in params: + path_params['id.task_id.domain'] = params['id_task_id_domain'] # noqa: E501 + if 'id_task_id_name' in params: + path_params['id.task_id.name'] = params['id_task_id_name'] # noqa: E501 + if 'id_task_id_version' in params: + path_params['id.task_id.version'] = params['id_task_id_version'] # noqa: E501 + if 'id_retry_attempt' in params: + path_params['id.retry_attempt'] = params['id_retry_attempt'] # noqa: E501 + + query_params = [] + if 'id_task_id_resource_type' in params: + query_params.append(('id.task_id.resource_type', params['id_task_id_resource_type'])) # noqa: E501 + if 'id_task_id_org' in params: + query_params.append(('id.task_id.org', params['id_task_id_org'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/task_executions/org/{id.node_execution_id.execution_id.org}/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='FlyteidladminTaskExecution', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_task_execution_data(self, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs): # noqa: E501 + """Fetches input and output data for a :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_task_execution_data(id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) + :param str id_node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_node_execution_id_execution_id_name: User or system provided value for the resource. (required) + :param str id_node_execution_id_node_id: (required) + :param str id_task_id_project: Name of the project the resource belongs to. (required) + :param str id_task_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_task_id_name: User provided value for the resource. (required) + :param str id_task_id_version: Specific version of the resource. (required) + :param int id_retry_attempt: (required) + :param str id_task_id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :param str id_task_id_org: Optional, org key applied to the resource. + :param str id_node_execution_id_execution_id_org: Optional, org key applied to the resource. + :return: AdminTaskExecutionGetDataResponse + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.get_task_execution_data_with_http_info(id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs) # noqa: E501 + else: + (data) = self.get_task_execution_data_with_http_info(id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs) # noqa: E501 + return data + + def get_task_execution_data_with_http_info(self, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs): # noqa: E501 + """Fetches input and output data for a :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_task_execution_data_with_http_info(id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) + :param str id_node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_node_execution_id_execution_id_name: User or system provided value for the resource. (required) + :param str id_node_execution_id_node_id: (required) + :param str id_task_id_project: Name of the project the resource belongs to. (required) + :param str id_task_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_task_id_name: User provided value for the resource. (required) + :param str id_task_id_version: Specific version of the resource. (required) + :param int id_retry_attempt: (required) + :param str id_task_id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :param str id_task_id_org: Optional, org key applied to the resource. + :param str id_node_execution_id_execution_id_org: Optional, org key applied to the resource. + :return: AdminTaskExecutionGetDataResponse + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['id_node_execution_id_execution_id_project', 'id_node_execution_id_execution_id_domain', 'id_node_execution_id_execution_id_name', 'id_node_execution_id_node_id', 'id_task_id_project', 'id_task_id_domain', 'id_task_id_name', 'id_task_id_version', 'id_retry_attempt', 'id_task_id_resource_type', 'id_task_id_org', 'id_node_execution_id_execution_id_org'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_task_execution_data" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'id_node_execution_id_execution_id_project' is set + if ('id_node_execution_id_execution_id_project' not in params or + params['id_node_execution_id_execution_id_project'] is None): + raise ValueError("Missing the required parameter `id_node_execution_id_execution_id_project` when calling `get_task_execution_data`") # noqa: E501 + # verify the required parameter 'id_node_execution_id_execution_id_domain' is set + if ('id_node_execution_id_execution_id_domain' not in params or + params['id_node_execution_id_execution_id_domain'] is None): + raise ValueError("Missing the required parameter `id_node_execution_id_execution_id_domain` when calling `get_task_execution_data`") # noqa: E501 + # verify the required parameter 'id_node_execution_id_execution_id_name' is set + if ('id_node_execution_id_execution_id_name' not in params or + params['id_node_execution_id_execution_id_name'] is None): + raise ValueError("Missing the required parameter `id_node_execution_id_execution_id_name` when calling `get_task_execution_data`") # noqa: E501 + # verify the required parameter 'id_node_execution_id_node_id' is set + if ('id_node_execution_id_node_id' not in params or + params['id_node_execution_id_node_id'] is None): + raise ValueError("Missing the required parameter `id_node_execution_id_node_id` when calling `get_task_execution_data`") # noqa: E501 + # verify the required parameter 'id_task_id_project' is set + if ('id_task_id_project' not in params or + params['id_task_id_project'] is None): + raise ValueError("Missing the required parameter `id_task_id_project` when calling `get_task_execution_data`") # noqa: E501 + # verify the required parameter 'id_task_id_domain' is set + if ('id_task_id_domain' not in params or + params['id_task_id_domain'] is None): + raise ValueError("Missing the required parameter `id_task_id_domain` when calling `get_task_execution_data`") # noqa: E501 + # verify the required parameter 'id_task_id_name' is set + if ('id_task_id_name' not in params or + params['id_task_id_name'] is None): + raise ValueError("Missing the required parameter `id_task_id_name` when calling `get_task_execution_data`") # noqa: E501 + # verify the required parameter 'id_task_id_version' is set + if ('id_task_id_version' not in params or + params['id_task_id_version'] is None): + raise ValueError("Missing the required parameter `id_task_id_version` when calling `get_task_execution_data`") # noqa: E501 + # verify the required parameter 'id_retry_attempt' is set + if ('id_retry_attempt' not in params or + params['id_retry_attempt'] is None): + raise ValueError("Missing the required parameter `id_retry_attempt` when calling `get_task_execution_data`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'id_node_execution_id_execution_id_project' in params: + path_params['id.node_execution_id.execution_id.project'] = params['id_node_execution_id_execution_id_project'] # noqa: E501 + if 'id_node_execution_id_execution_id_domain' in params: + path_params['id.node_execution_id.execution_id.domain'] = params['id_node_execution_id_execution_id_domain'] # noqa: E501 + if 'id_node_execution_id_execution_id_name' in params: + path_params['id.node_execution_id.execution_id.name'] = params['id_node_execution_id_execution_id_name'] # noqa: E501 + if 'id_node_execution_id_node_id' in params: + path_params['id.node_execution_id.node_id'] = params['id_node_execution_id_node_id'] # noqa: E501 + if 'id_task_id_project' in params: + path_params['id.task_id.project'] = params['id_task_id_project'] # noqa: E501 + if 'id_task_id_domain' in params: + path_params['id.task_id.domain'] = params['id_task_id_domain'] # noqa: E501 + if 'id_task_id_name' in params: + path_params['id.task_id.name'] = params['id_task_id_name'] # noqa: E501 + if 'id_task_id_version' in params: + path_params['id.task_id.version'] = params['id_task_id_version'] # noqa: E501 + if 'id_retry_attempt' in params: + path_params['id.retry_attempt'] = params['id_retry_attempt'] # noqa: E501 + + query_params = [] + if 'id_task_id_resource_type' in params: + query_params.append(('id.task_id.resource_type', params['id_task_id_resource_type'])) # noqa: E501 + if 'id_task_id_org' in params: + query_params.append(('id.task_id.org', params['id_task_id_org'])) # noqa: E501 + if 'id_node_execution_id_execution_id_org' in params: + query_params.append(('id.node_execution_id.execution_id.org', params['id_node_execution_id_execution_id_org'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/data/task_executions/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminTaskExecutionGetDataResponse', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_task_execution_data2(self, id_node_execution_id_execution_id_org, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs): # noqa: E501 + """Fetches input and output data for a :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_task_execution_data2(id_node_execution_id_execution_id_org, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_node_execution_id_execution_id_org: Optional, org key applied to the resource. (required) + :param str id_node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) + :param str id_node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_node_execution_id_execution_id_name: User or system provided value for the resource. (required) + :param str id_node_execution_id_node_id: (required) + :param str id_task_id_project: Name of the project the resource belongs to. (required) + :param str id_task_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_task_id_name: User provided value for the resource. (required) + :param str id_task_id_version: Specific version of the resource. (required) + :param int id_retry_attempt: (required) + :param str id_task_id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :param str id_task_id_org: Optional, org key applied to the resource. + :return: AdminTaskExecutionGetDataResponse + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.get_task_execution_data2_with_http_info(id_node_execution_id_execution_id_org, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs) # noqa: E501 + else: + (data) = self.get_task_execution_data2_with_http_info(id_node_execution_id_execution_id_org, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs) # noqa: E501 + return data + + def get_task_execution_data2_with_http_info(self, id_node_execution_id_execution_id_org, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs): # noqa: E501 + """Fetches input and output data for a :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_task_execution_data2_with_http_info(id_node_execution_id_execution_id_org, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_node_execution_id_execution_id_org: Optional, org key applied to the resource. (required) + :param str id_node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) + :param str id_node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_node_execution_id_execution_id_name: User or system provided value for the resource. (required) + :param str id_node_execution_id_node_id: (required) + :param str id_task_id_project: Name of the project the resource belongs to. (required) + :param str id_task_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_task_id_name: User provided value for the resource. (required) + :param str id_task_id_version: Specific version of the resource. (required) + :param int id_retry_attempt: (required) + :param str id_task_id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :param str id_task_id_org: Optional, org key applied to the resource. + :return: AdminTaskExecutionGetDataResponse + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['id_node_execution_id_execution_id_org', 'id_node_execution_id_execution_id_project', 'id_node_execution_id_execution_id_domain', 'id_node_execution_id_execution_id_name', 'id_node_execution_id_node_id', 'id_task_id_project', 'id_task_id_domain', 'id_task_id_name', 'id_task_id_version', 'id_retry_attempt', 'id_task_id_resource_type', 'id_task_id_org'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_task_execution_data2" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'id_node_execution_id_execution_id_org' is set + if ('id_node_execution_id_execution_id_org' not in params or + params['id_node_execution_id_execution_id_org'] is None): + raise ValueError("Missing the required parameter `id_node_execution_id_execution_id_org` when calling `get_task_execution_data2`") # noqa: E501 + # verify the required parameter 'id_node_execution_id_execution_id_project' is set + if ('id_node_execution_id_execution_id_project' not in params or + params['id_node_execution_id_execution_id_project'] is None): + raise ValueError("Missing the required parameter `id_node_execution_id_execution_id_project` when calling `get_task_execution_data2`") # noqa: E501 + # verify the required parameter 'id_node_execution_id_execution_id_domain' is set + if ('id_node_execution_id_execution_id_domain' not in params or + params['id_node_execution_id_execution_id_domain'] is None): + raise ValueError("Missing the required parameter `id_node_execution_id_execution_id_domain` when calling `get_task_execution_data2`") # noqa: E501 + # verify the required parameter 'id_node_execution_id_execution_id_name' is set + if ('id_node_execution_id_execution_id_name' not in params or + params['id_node_execution_id_execution_id_name'] is None): + raise ValueError("Missing the required parameter `id_node_execution_id_execution_id_name` when calling `get_task_execution_data2`") # noqa: E501 + # verify the required parameter 'id_node_execution_id_node_id' is set + if ('id_node_execution_id_node_id' not in params or params['id_node_execution_id_node_id'] is None): - raise ValueError("Missing the required parameter `id_node_execution_id_node_id` when calling `get_task_execution`") # noqa: E501 + raise ValueError("Missing the required parameter `id_node_execution_id_node_id` when calling `get_task_execution_data2`") # noqa: E501 # verify the required parameter 'id_task_id_project' is set if ('id_task_id_project' not in params or params['id_task_id_project'] is None): - raise ValueError("Missing the required parameter `id_task_id_project` when calling `get_task_execution`") # noqa: E501 + raise ValueError("Missing the required parameter `id_task_id_project` when calling `get_task_execution_data2`") # noqa: E501 # verify the required parameter 'id_task_id_domain' is set if ('id_task_id_domain' not in params or params['id_task_id_domain'] is None): - raise ValueError("Missing the required parameter `id_task_id_domain` when calling `get_task_execution`") # noqa: E501 + raise ValueError("Missing the required parameter `id_task_id_domain` when calling `get_task_execution_data2`") # noqa: E501 # verify the required parameter 'id_task_id_name' is set if ('id_task_id_name' not in params or params['id_task_id_name'] is None): - raise ValueError("Missing the required parameter `id_task_id_name` when calling `get_task_execution`") # noqa: E501 + raise ValueError("Missing the required parameter `id_task_id_name` when calling `get_task_execution_data2`") # noqa: E501 # verify the required parameter 'id_task_id_version' is set if ('id_task_id_version' not in params or params['id_task_id_version'] is None): - raise ValueError("Missing the required parameter `id_task_id_version` when calling `get_task_execution`") # noqa: E501 + raise ValueError("Missing the required parameter `id_task_id_version` when calling `get_task_execution_data2`") # noqa: E501 # verify the required parameter 'id_retry_attempt' is set if ('id_retry_attempt' not in params or params['id_retry_attempt'] is None): - raise ValueError("Missing the required parameter `id_retry_attempt` when calling `get_task_execution`") # noqa: E501 + raise ValueError("Missing the required parameter `id_retry_attempt` when calling `get_task_execution_data2`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'id_node_execution_id_execution_id_org' in params: + path_params['id.node_execution_id.execution_id.org'] = params['id_node_execution_id_execution_id_org'] # noqa: E501 + if 'id_node_execution_id_execution_id_project' in params: + path_params['id.node_execution_id.execution_id.project'] = params['id_node_execution_id_execution_id_project'] # noqa: E501 + if 'id_node_execution_id_execution_id_domain' in params: + path_params['id.node_execution_id.execution_id.domain'] = params['id_node_execution_id_execution_id_domain'] # noqa: E501 + if 'id_node_execution_id_execution_id_name' in params: + path_params['id.node_execution_id.execution_id.name'] = params['id_node_execution_id_execution_id_name'] # noqa: E501 + if 'id_node_execution_id_node_id' in params: + path_params['id.node_execution_id.node_id'] = params['id_node_execution_id_node_id'] # noqa: E501 + if 'id_task_id_project' in params: + path_params['id.task_id.project'] = params['id_task_id_project'] # noqa: E501 + if 'id_task_id_domain' in params: + path_params['id.task_id.domain'] = params['id_task_id_domain'] # noqa: E501 + if 'id_task_id_name' in params: + path_params['id.task_id.name'] = params['id_task_id_name'] # noqa: E501 + if 'id_task_id_version' in params: + path_params['id.task_id.version'] = params['id_task_id_version'] # noqa: E501 + if 'id_retry_attempt' in params: + path_params['id.retry_attempt'] = params['id_retry_attempt'] # noqa: E501 + + query_params = [] + if 'id_task_id_resource_type' in params: + query_params.append(('id.task_id.resource_type', params['id_task_id_resource_type'])) # noqa: E501 + if 'id_task_id_org' in params: + query_params.append(('id.task_id.org', params['id_task_id_org'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/data/task_executions/org/{id.node_execution_id.execution_id.org}/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminTaskExecutionGetDataResponse', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_version(self, **kwargs): # noqa: E501 + """get_version # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_version(async_req=True) + >>> result = thread.get() + + :param async_req bool + :return: AdminGetVersionResponse + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.get_version_with_http_info(**kwargs) # noqa: E501 + else: + (data) = self.get_version_with_http_info(**kwargs) # noqa: E501 + return data + + def get_version_with_http_info(self, **kwargs): # noqa: E501 + """get_version # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_version_with_http_info(async_req=True) + >>> result = thread.get() + + :param async_req bool + :return: AdminGetVersionResponse + If the method is called asynchronously, + returns the request thread. + """ + + all_params = [] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_version" % key + ) + params[key] = val + del params['kwargs'] + + collection_formats = {} + + path_params = {} + + query_params = [] + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/version', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminGetVersionResponse', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_workflow(self, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 + """Fetch a :ref:`ref_flyteidl.admin.Workflow` definition. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_workflow(id_project, id_domain, id_name, id_version, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. (required) + :param str id_version: Specific version of the resource. (required) + :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :param str id_org: Optional, org key applied to the resource. + :return: AdminWorkflow + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.get_workflow_with_http_info(id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 + else: + (data) = self.get_workflow_with_http_info(id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 + return data + + def get_workflow_with_http_info(self, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 + """Fetch a :ref:`ref_flyteidl.admin.Workflow` definition. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_workflow_with_http_info(id_project, id_domain, id_name, id_version, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. (required) + :param str id_version: Specific version of the resource. (required) + :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :param str id_org: Optional, org key applied to the resource. + :return: AdminWorkflow + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['id_project', 'id_domain', 'id_name', 'id_version', 'id_resource_type', 'id_org'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_workflow" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `get_workflow`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `get_workflow`") # noqa: E501 + # verify the required parameter 'id_name' is set + if ('id_name' not in params or + params['id_name'] is None): + raise ValueError("Missing the required parameter `id_name` when calling `get_workflow`") # noqa: E501 + # verify the required parameter 'id_version' is set + if ('id_version' not in params or + params['id_version'] is None): + raise ValueError("Missing the required parameter `id_version` when calling `get_workflow`") # noqa: E501 collection_formats = {} path_params = {} - if 'id_node_execution_id_execution_id_project' in params: - path_params['id.node_execution_id.execution_id.project'] = params['id_node_execution_id_execution_id_project'] # noqa: E501 - if 'id_node_execution_id_execution_id_domain' in params: - path_params['id.node_execution_id.execution_id.domain'] = params['id_node_execution_id_execution_id_domain'] # noqa: E501 - if 'id_node_execution_id_execution_id_name' in params: - path_params['id.node_execution_id.execution_id.name'] = params['id_node_execution_id_execution_id_name'] # noqa: E501 - if 'id_node_execution_id_node_id' in params: - path_params['id.node_execution_id.node_id'] = params['id_node_execution_id_node_id'] # noqa: E501 - if 'id_task_id_project' in params: - path_params['id.task_id.project'] = params['id_task_id_project'] # noqa: E501 - if 'id_task_id_domain' in params: - path_params['id.task_id.domain'] = params['id_task_id_domain'] # noqa: E501 - if 'id_task_id_name' in params: - path_params['id.task_id.name'] = params['id_task_id_name'] # noqa: E501 - if 'id_task_id_version' in params: - path_params['id.task_id.version'] = params['id_task_id_version'] # noqa: E501 - if 'id_retry_attempt' in params: - path_params['id.retry_attempt'] = params['id_retry_attempt'] # noqa: E501 + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 + if 'id_name' in params: + path_params['id.name'] = params['id_name'] # noqa: E501 + if 'id_version' in params: + path_params['id.version'] = params['id_version'] # noqa: E501 + + query_params = [] + if 'id_resource_type' in params: + query_params.append(('id.resource_type', params['id_resource_type'])) # noqa: E501 + if 'id_org' in params: + query_params.append(('id.org', params['id_org'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/v1/workflows/{id.project}/{id.domain}/{id.name}/{id.version}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='AdminWorkflow', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def get_workflow2(self, id_org, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 + """Fetch a :ref:`ref_flyteidl.admin.Workflow` definition. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_workflow2(id_org, id_project, id_domain, id_name, id_version, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. (required) + :param str id_version: Specific version of the resource. (required) + :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :return: AdminWorkflow + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.get_workflow2_with_http_info(id_org, id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 + else: + (data) = self.get_workflow2_with_http_info(id_org, id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 + return data + + def get_workflow2_with_http_info(self, id_org, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 + """Fetch a :ref:`ref_flyteidl.admin.Workflow` definition. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_workflow2_with_http_info(id_org, id_project, id_domain, id_name, id_version, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. (required) + :param str id_version: Specific version of the resource. (required) + :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :return: AdminWorkflow + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['id_org', 'id_project', 'id_domain', 'id_name', 'id_version', 'id_resource_type'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_workflow2" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'id_org' is set + if ('id_org' not in params or + params['id_org'] is None): + raise ValueError("Missing the required parameter `id_org` when calling `get_workflow2`") # noqa: E501 + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `get_workflow2`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `get_workflow2`") # noqa: E501 + # verify the required parameter 'id_name' is set + if ('id_name' not in params or + params['id_name'] is None): + raise ValueError("Missing the required parameter `id_name` when calling `get_workflow2`") # noqa: E501 + # verify the required parameter 'id_version' is set + if ('id_version' not in params or + params['id_version'] is None): + raise ValueError("Missing the required parameter `id_version` when calling `get_workflow2`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'id_org' in params: + path_params['id.org'] = params['id_org'] # noqa: E501 + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 + if 'id_name' in params: + path_params['id.name'] = params['id_name'] # noqa: E501 + if 'id_version' in params: + path_params['id.version'] = params['id_version'] # noqa: E501 query_params = [] - if 'id_task_id_resource_type' in params: - query_params.append(('id.task_id.resource_type', params['id_task_id_resource_type'])) # noqa: E501 - if 'id_task_id_org' in params: - query_params.append(('id.task_id.org', params['id_task_id_org'])) # noqa: E501 - if 'id_node_execution_id_execution_id_org' in params: - query_params.append(('id.node_execution_id.execution_id.org', params['id_node_execution_id_execution_id_org'])) # noqa: E501 + if 'id_resource_type' in params: + query_params.append(('id.resource_type', params['id_resource_type'])) # noqa: E501 header_params = {} @@ -4532,14 +6145,14 @@ def get_task_execution_with_http_info(self, id_node_execution_id_execution_id_pr auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/task_executions/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}', 'GET', + '/api/v1/workflows/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='FlyteidladminTaskExecution', # noqa: E501 + response_type='AdminWorkflow', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -4547,65 +6160,51 @@ def get_task_execution_with_http_info(self, id_node_execution_id_execution_id_pr _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_task_execution2(self, id_node_execution_id_execution_id_org, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs): # noqa: E501 - """Fetches a :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 + def get_workflow_attributes(self, project, domain, workflow, **kwargs): # noqa: E501 + """Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_task_execution2(id_node_execution_id_execution_id_org, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, async_req=True) + >>> thread = api.get_workflow_attributes(project, domain, workflow, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_node_execution_id_execution_id_org: Optional, org key applied to the resource. (required) - :param str id_node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) - :param str id_node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_node_execution_id_execution_id_name: User or system provided value for the resource. (required) - :param str id_node_execution_id_node_id: (required) - :param str id_task_id_project: Name of the project the resource belongs to. (required) - :param str id_task_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_task_id_name: User provided value for the resource. (required) - :param str id_task_id_version: Specific version of the resource. (required) - :param int id_retry_attempt: (required) - :param str id_task_id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects - :param str id_task_id_org: Optional, org key applied to the resource. - :return: FlyteidladminTaskExecution + :param str project: Unique project id which this set of attributes references. +required (required) + :param str domain: Unique domain id which this set of attributes references. +required (required) + :param str workflow: Workflow name which this set of attributes references. +required (required) + :param str resource_type: Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. + :param str org: Optional, org key applied to the attributes. + :return: AdminWorkflowAttributesGetResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_task_execution2_with_http_info(id_node_execution_id_execution_id_org, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs) # noqa: E501 + return self.get_workflow_attributes_with_http_info(project, domain, workflow, **kwargs) # noqa: E501 else: - (data) = self.get_task_execution2_with_http_info(id_node_execution_id_execution_id_org, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs) # noqa: E501 + (data) = self.get_workflow_attributes_with_http_info(project, domain, workflow, **kwargs) # noqa: E501 return data - def get_task_execution2_with_http_info(self, id_node_execution_id_execution_id_org, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs): # noqa: E501 - """Fetches a :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 + def get_workflow_attributes_with_http_info(self, project, domain, workflow, **kwargs): # noqa: E501 + """Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_task_execution2_with_http_info(id_node_execution_id_execution_id_org, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, async_req=True) + >>> thread = api.get_workflow_attributes_with_http_info(project, domain, workflow, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_node_execution_id_execution_id_org: Optional, org key applied to the resource. (required) - :param str id_node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) - :param str id_node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_node_execution_id_execution_id_name: User or system provided value for the resource. (required) - :param str id_node_execution_id_node_id: (required) - :param str id_task_id_project: Name of the project the resource belongs to. (required) - :param str id_task_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_task_id_name: User provided value for the resource. (required) - :param str id_task_id_version: Specific version of the resource. (required) - :param int id_retry_attempt: (required) - :param str id_task_id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects - :param str id_task_id_org: Optional, org key applied to the resource. - :return: FlyteidladminTaskExecution + :param str project: Unique project id which this set of attributes references. +required (required) + :param str domain: Unique domain id which this set of attributes references. +required (required) + :param str workflow: Workflow name which this set of attributes references. +required (required) + :param str resource_type: Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. + :param str org: Optional, org key applied to the attributes. + :return: AdminWorkflowAttributesGetResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['id_node_execution_id_execution_id_org', 'id_node_execution_id_execution_id_project', 'id_node_execution_id_execution_id_domain', 'id_node_execution_id_execution_id_name', 'id_node_execution_id_node_id', 'id_task_id_project', 'id_task_id_domain', 'id_task_id_name', 'id_task_id_version', 'id_retry_attempt', 'id_task_id_resource_type', 'id_task_id_org'] # noqa: E501 + all_params = ['project', 'domain', 'workflow', 'resource_type', 'org'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -4616,80 +6215,38 @@ def get_task_execution2_with_http_info(self, id_node_execution_id_execution_id_o if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_task_execution2" % key + " to method get_workflow_attributes" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'id_node_execution_id_execution_id_org' is set - if ('id_node_execution_id_execution_id_org' not in params or - params['id_node_execution_id_execution_id_org'] is None): - raise ValueError("Missing the required parameter `id_node_execution_id_execution_id_org` when calling `get_task_execution2`") # noqa: E501 - # verify the required parameter 'id_node_execution_id_execution_id_project' is set - if ('id_node_execution_id_execution_id_project' not in params or - params['id_node_execution_id_execution_id_project'] is None): - raise ValueError("Missing the required parameter `id_node_execution_id_execution_id_project` when calling `get_task_execution2`") # noqa: E501 - # verify the required parameter 'id_node_execution_id_execution_id_domain' is set - if ('id_node_execution_id_execution_id_domain' not in params or - params['id_node_execution_id_execution_id_domain'] is None): - raise ValueError("Missing the required parameter `id_node_execution_id_execution_id_domain` when calling `get_task_execution2`") # noqa: E501 - # verify the required parameter 'id_node_execution_id_execution_id_name' is set - if ('id_node_execution_id_execution_id_name' not in params or - params['id_node_execution_id_execution_id_name'] is None): - raise ValueError("Missing the required parameter `id_node_execution_id_execution_id_name` when calling `get_task_execution2`") # noqa: E501 - # verify the required parameter 'id_node_execution_id_node_id' is set - if ('id_node_execution_id_node_id' not in params or - params['id_node_execution_id_node_id'] is None): - raise ValueError("Missing the required parameter `id_node_execution_id_node_id` when calling `get_task_execution2`") # noqa: E501 - # verify the required parameter 'id_task_id_project' is set - if ('id_task_id_project' not in params or - params['id_task_id_project'] is None): - raise ValueError("Missing the required parameter `id_task_id_project` when calling `get_task_execution2`") # noqa: E501 - # verify the required parameter 'id_task_id_domain' is set - if ('id_task_id_domain' not in params or - params['id_task_id_domain'] is None): - raise ValueError("Missing the required parameter `id_task_id_domain` when calling `get_task_execution2`") # noqa: E501 - # verify the required parameter 'id_task_id_name' is set - if ('id_task_id_name' not in params or - params['id_task_id_name'] is None): - raise ValueError("Missing the required parameter `id_task_id_name` when calling `get_task_execution2`") # noqa: E501 - # verify the required parameter 'id_task_id_version' is set - if ('id_task_id_version' not in params or - params['id_task_id_version'] is None): - raise ValueError("Missing the required parameter `id_task_id_version` when calling `get_task_execution2`") # noqa: E501 - # verify the required parameter 'id_retry_attempt' is set - if ('id_retry_attempt' not in params or - params['id_retry_attempt'] is None): - raise ValueError("Missing the required parameter `id_retry_attempt` when calling `get_task_execution2`") # noqa: E501 + # verify the required parameter 'project' is set + if ('project' not in params or + params['project'] is None): + raise ValueError("Missing the required parameter `project` when calling `get_workflow_attributes`") # noqa: E501 + # verify the required parameter 'domain' is set + if ('domain' not in params or + params['domain'] is None): + raise ValueError("Missing the required parameter `domain` when calling `get_workflow_attributes`") # noqa: E501 + # verify the required parameter 'workflow' is set + if ('workflow' not in params or + params['workflow'] is None): + raise ValueError("Missing the required parameter `workflow` when calling `get_workflow_attributes`") # noqa: E501 collection_formats = {} path_params = {} - if 'id_node_execution_id_execution_id_org' in params: - path_params['id.node_execution_id.execution_id.org'] = params['id_node_execution_id_execution_id_org'] # noqa: E501 - if 'id_node_execution_id_execution_id_project' in params: - path_params['id.node_execution_id.execution_id.project'] = params['id_node_execution_id_execution_id_project'] # noqa: E501 - if 'id_node_execution_id_execution_id_domain' in params: - path_params['id.node_execution_id.execution_id.domain'] = params['id_node_execution_id_execution_id_domain'] # noqa: E501 - if 'id_node_execution_id_execution_id_name' in params: - path_params['id.node_execution_id.execution_id.name'] = params['id_node_execution_id_execution_id_name'] # noqa: E501 - if 'id_node_execution_id_node_id' in params: - path_params['id.node_execution_id.node_id'] = params['id_node_execution_id_node_id'] # noqa: E501 - if 'id_task_id_project' in params: - path_params['id.task_id.project'] = params['id_task_id_project'] # noqa: E501 - if 'id_task_id_domain' in params: - path_params['id.task_id.domain'] = params['id_task_id_domain'] # noqa: E501 - if 'id_task_id_name' in params: - path_params['id.task_id.name'] = params['id_task_id_name'] # noqa: E501 - if 'id_task_id_version' in params: - path_params['id.task_id.version'] = params['id_task_id_version'] # noqa: E501 - if 'id_retry_attempt' in params: - path_params['id.retry_attempt'] = params['id_retry_attempt'] # noqa: E501 + if 'project' in params: + path_params['project'] = params['project'] # noqa: E501 + if 'domain' in params: + path_params['domain'] = params['domain'] # noqa: E501 + if 'workflow' in params: + path_params['workflow'] = params['workflow'] # noqa: E501 query_params = [] - if 'id_task_id_resource_type' in params: - query_params.append(('id.task_id.resource_type', params['id_task_id_resource_type'])) # noqa: E501 - if 'id_task_id_org' in params: - query_params.append(('id.task_id.org', params['id_task_id_org'])) # noqa: E501 + if 'resource_type' in params: + query_params.append(('resource_type', params['resource_type'])) # noqa: E501 + if 'org' in params: + query_params.append(('org', params['org'])) # noqa: E501 header_params = {} @@ -4709,14 +6266,14 @@ def get_task_execution2_with_http_info(self, id_node_execution_id_execution_id_o auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/task_executions/org/{id.node_execution_id.execution_id.org}/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}', 'GET', + '/api/v1/workflow_attributes/{project}/{domain}/{workflow}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='FlyteidladminTaskExecution', # noqa: E501 + response_type='AdminWorkflowAttributesGetResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -4724,65 +6281,51 @@ def get_task_execution2_with_http_info(self, id_node_execution_id_execution_id_o _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_task_execution_data(self, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs): # noqa: E501 - """Fetches input and output data for a :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 + def get_workflow_attributes2(self, org, project, domain, workflow, **kwargs): # noqa: E501 + """Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_task_execution_data(id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, async_req=True) + >>> thread = api.get_workflow_attributes2(org, project, domain, workflow, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) - :param str id_node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_node_execution_id_execution_id_name: User or system provided value for the resource. (required) - :param str id_node_execution_id_node_id: (required) - :param str id_task_id_project: Name of the project the resource belongs to. (required) - :param str id_task_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_task_id_name: User provided value for the resource. (required) - :param str id_task_id_version: Specific version of the resource. (required) - :param int id_retry_attempt: (required) - :param str id_task_id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects - :param str id_task_id_org: Optional, org key applied to the resource. - :param str id_node_execution_id_execution_id_org: Optional, org key applied to the resource. - :return: AdminTaskExecutionGetDataResponse + :param str org: Optional, org key applied to the attributes. (required) + :param str project: Unique project id which this set of attributes references. +required (required) + :param str domain: Unique domain id which this set of attributes references. +required (required) + :param str workflow: Workflow name which this set of attributes references. +required (required) + :param str resource_type: Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. + :return: AdminWorkflowAttributesGetResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_task_execution_data_with_http_info(id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs) # noqa: E501 + return self.get_workflow_attributes2_with_http_info(org, project, domain, workflow, **kwargs) # noqa: E501 else: - (data) = self.get_task_execution_data_with_http_info(id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs) # noqa: E501 + (data) = self.get_workflow_attributes2_with_http_info(org, project, domain, workflow, **kwargs) # noqa: E501 return data - def get_task_execution_data_with_http_info(self, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs): # noqa: E501 - """Fetches input and output data for a :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 + def get_workflow_attributes2_with_http_info(self, org, project, domain, workflow, **kwargs): # noqa: E501 + """Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_task_execution_data_with_http_info(id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, async_req=True) + >>> thread = api.get_workflow_attributes2_with_http_info(org, project, domain, workflow, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) - :param str id_node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_node_execution_id_execution_id_name: User or system provided value for the resource. (required) - :param str id_node_execution_id_node_id: (required) - :param str id_task_id_project: Name of the project the resource belongs to. (required) - :param str id_task_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_task_id_name: User provided value for the resource. (required) - :param str id_task_id_version: Specific version of the resource. (required) - :param int id_retry_attempt: (required) - :param str id_task_id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects - :param str id_task_id_org: Optional, org key applied to the resource. - :param str id_node_execution_id_execution_id_org: Optional, org key applied to the resource. - :return: AdminTaskExecutionGetDataResponse + :param str org: Optional, org key applied to the attributes. (required) + :param str project: Unique project id which this set of attributes references. +required (required) + :param str domain: Unique domain id which this set of attributes references. +required (required) + :param str workflow: Workflow name which this set of attributes references. +required (required) + :param str resource_type: Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. + :return: AdminWorkflowAttributesGetResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['id_node_execution_id_execution_id_project', 'id_node_execution_id_execution_id_domain', 'id_node_execution_id_execution_id_name', 'id_node_execution_id_node_id', 'id_task_id_project', 'id_task_id_domain', 'id_task_id_name', 'id_task_id_version', 'id_retry_attempt', 'id_task_id_resource_type', 'id_task_id_org', 'id_node_execution_id_execution_id_org'] # noqa: E501 + all_params = ['org', 'project', 'domain', 'workflow', 'resource_type'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -4793,76 +6336,42 @@ def get_task_execution_data_with_http_info(self, id_node_execution_id_execution_ if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_task_execution_data" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'id_node_execution_id_execution_id_project' is set - if ('id_node_execution_id_execution_id_project' not in params or - params['id_node_execution_id_execution_id_project'] is None): - raise ValueError("Missing the required parameter `id_node_execution_id_execution_id_project` when calling `get_task_execution_data`") # noqa: E501 - # verify the required parameter 'id_node_execution_id_execution_id_domain' is set - if ('id_node_execution_id_execution_id_domain' not in params or - params['id_node_execution_id_execution_id_domain'] is None): - raise ValueError("Missing the required parameter `id_node_execution_id_execution_id_domain` when calling `get_task_execution_data`") # noqa: E501 - # verify the required parameter 'id_node_execution_id_execution_id_name' is set - if ('id_node_execution_id_execution_id_name' not in params or - params['id_node_execution_id_execution_id_name'] is None): - raise ValueError("Missing the required parameter `id_node_execution_id_execution_id_name` when calling `get_task_execution_data`") # noqa: E501 - # verify the required parameter 'id_node_execution_id_node_id' is set - if ('id_node_execution_id_node_id' not in params or - params['id_node_execution_id_node_id'] is None): - raise ValueError("Missing the required parameter `id_node_execution_id_node_id` when calling `get_task_execution_data`") # noqa: E501 - # verify the required parameter 'id_task_id_project' is set - if ('id_task_id_project' not in params or - params['id_task_id_project'] is None): - raise ValueError("Missing the required parameter `id_task_id_project` when calling `get_task_execution_data`") # noqa: E501 - # verify the required parameter 'id_task_id_domain' is set - if ('id_task_id_domain' not in params or - params['id_task_id_domain'] is None): - raise ValueError("Missing the required parameter `id_task_id_domain` when calling `get_task_execution_data`") # noqa: E501 - # verify the required parameter 'id_task_id_name' is set - if ('id_task_id_name' not in params or - params['id_task_id_name'] is None): - raise ValueError("Missing the required parameter `id_task_id_name` when calling `get_task_execution_data`") # noqa: E501 - # verify the required parameter 'id_task_id_version' is set - if ('id_task_id_version' not in params or - params['id_task_id_version'] is None): - raise ValueError("Missing the required parameter `id_task_id_version` when calling `get_task_execution_data`") # noqa: E501 - # verify the required parameter 'id_retry_attempt' is set - if ('id_retry_attempt' not in params or - params['id_retry_attempt'] is None): - raise ValueError("Missing the required parameter `id_retry_attempt` when calling `get_task_execution_data`") # noqa: E501 + " to method get_workflow_attributes2" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'org' is set + if ('org' not in params or + params['org'] is None): + raise ValueError("Missing the required parameter `org` when calling `get_workflow_attributes2`") # noqa: E501 + # verify the required parameter 'project' is set + if ('project' not in params or + params['project'] is None): + raise ValueError("Missing the required parameter `project` when calling `get_workflow_attributes2`") # noqa: E501 + # verify the required parameter 'domain' is set + if ('domain' not in params or + params['domain'] is None): + raise ValueError("Missing the required parameter `domain` when calling `get_workflow_attributes2`") # noqa: E501 + # verify the required parameter 'workflow' is set + if ('workflow' not in params or + params['workflow'] is None): + raise ValueError("Missing the required parameter `workflow` when calling `get_workflow_attributes2`") # noqa: E501 collection_formats = {} path_params = {} - if 'id_node_execution_id_execution_id_project' in params: - path_params['id.node_execution_id.execution_id.project'] = params['id_node_execution_id_execution_id_project'] # noqa: E501 - if 'id_node_execution_id_execution_id_domain' in params: - path_params['id.node_execution_id.execution_id.domain'] = params['id_node_execution_id_execution_id_domain'] # noqa: E501 - if 'id_node_execution_id_execution_id_name' in params: - path_params['id.node_execution_id.execution_id.name'] = params['id_node_execution_id_execution_id_name'] # noqa: E501 - if 'id_node_execution_id_node_id' in params: - path_params['id.node_execution_id.node_id'] = params['id_node_execution_id_node_id'] # noqa: E501 - if 'id_task_id_project' in params: - path_params['id.task_id.project'] = params['id_task_id_project'] # noqa: E501 - if 'id_task_id_domain' in params: - path_params['id.task_id.domain'] = params['id_task_id_domain'] # noqa: E501 - if 'id_task_id_name' in params: - path_params['id.task_id.name'] = params['id_task_id_name'] # noqa: E501 - if 'id_task_id_version' in params: - path_params['id.task_id.version'] = params['id_task_id_version'] # noqa: E501 - if 'id_retry_attempt' in params: - path_params['id.retry_attempt'] = params['id_retry_attempt'] # noqa: E501 + if 'org' in params: + path_params['org'] = params['org'] # noqa: E501 + if 'project' in params: + path_params['project'] = params['project'] # noqa: E501 + if 'domain' in params: + path_params['domain'] = params['domain'] # noqa: E501 + if 'workflow' in params: + path_params['workflow'] = params['workflow'] # noqa: E501 query_params = [] - if 'id_task_id_resource_type' in params: - query_params.append(('id.task_id.resource_type', params['id_task_id_resource_type'])) # noqa: E501 - if 'id_task_id_org' in params: - query_params.append(('id.task_id.org', params['id_task_id_org'])) # noqa: E501 - if 'id_node_execution_id_execution_id_org' in params: - query_params.append(('id.node_execution_id.execution_id.org', params['id_node_execution_id_execution_id_org'])) # noqa: E501 + if 'resource_type' in params: + query_params.append(('resource_type', params['resource_type'])) # noqa: E501 header_params = {} @@ -4882,14 +6391,14 @@ def get_task_execution_data_with_http_info(self, id_node_execution_id_execution_ auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/data/task_executions/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}', 'GET', + '/api/v1/workflow_attributes/org/{org}/{project}/{domain}/{workflow}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminTaskExecutionGetDataResponse', # noqa: E501 + response_type='AdminWorkflowAttributesGetResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -4897,65 +6406,55 @@ def get_task_execution_data_with_http_info(self, id_node_execution_id_execution_ _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_task_execution_data2(self, id_node_execution_id_execution_id_org, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs): # noqa: E501 - """Fetches input and output data for a :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 + def list_active_launch_plans(self, project, domain, **kwargs): # noqa: E501 + """List active versions of :ref:`ref_flyteidl.admin.LaunchPlan`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_task_execution_data2(id_node_execution_id_execution_id_org, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, async_req=True) + >>> thread = api.list_active_launch_plans(project, domain, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_node_execution_id_execution_id_org: Optional, org key applied to the resource. (required) - :param str id_node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) - :param str id_node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_node_execution_id_execution_id_name: User or system provided value for the resource. (required) - :param str id_node_execution_id_node_id: (required) - :param str id_task_id_project: Name of the project the resource belongs to. (required) - :param str id_task_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_task_id_name: User provided value for the resource. (required) - :param str id_task_id_version: Specific version of the resource. (required) - :param int id_retry_attempt: (required) - :param str id_task_id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects - :param str id_task_id_org: Optional, org key applied to the resource. - :return: AdminTaskExecutionGetDataResponse + :param str project: Name of the project that contains the identifiers. +required. (required) + :param str domain: Name of the domain the identifiers belongs to within the project. +required. (required) + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :param str org: Optional, org key applied to the resource. + :return: AdminLaunchPlanList If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_task_execution_data2_with_http_info(id_node_execution_id_execution_id_org, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs) # noqa: E501 + return self.list_active_launch_plans_with_http_info(project, domain, **kwargs) # noqa: E501 else: - (data) = self.get_task_execution_data2_with_http_info(id_node_execution_id_execution_id_org, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs) # noqa: E501 + (data) = self.list_active_launch_plans_with_http_info(project, domain, **kwargs) # noqa: E501 return data - def get_task_execution_data2_with_http_info(self, id_node_execution_id_execution_id_org, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, **kwargs): # noqa: E501 - """Fetches input and output data for a :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 + def list_active_launch_plans_with_http_info(self, project, domain, **kwargs): # noqa: E501 + """List active versions of :ref:`ref_flyteidl.admin.LaunchPlan`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_task_execution_data2_with_http_info(id_node_execution_id_execution_id_org, id_node_execution_id_execution_id_project, id_node_execution_id_execution_id_domain, id_node_execution_id_execution_id_name, id_node_execution_id_node_id, id_task_id_project, id_task_id_domain, id_task_id_name, id_task_id_version, id_retry_attempt, async_req=True) + >>> thread = api.list_active_launch_plans_with_http_info(project, domain, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_node_execution_id_execution_id_org: Optional, org key applied to the resource. (required) - :param str id_node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) - :param str id_node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_node_execution_id_execution_id_name: User or system provided value for the resource. (required) - :param str id_node_execution_id_node_id: (required) - :param str id_task_id_project: Name of the project the resource belongs to. (required) - :param str id_task_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_task_id_name: User provided value for the resource. (required) - :param str id_task_id_version: Specific version of the resource. (required) - :param int id_retry_attempt: (required) - :param str id_task_id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects - :param str id_task_id_org: Optional, org key applied to the resource. - :return: AdminTaskExecutionGetDataResponse + :param str project: Name of the project that contains the identifiers. +required. (required) + :param str domain: Name of the domain the identifiers belongs to within the project. +required. (required) + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :param str org: Optional, org key applied to the resource. + :return: AdminLaunchPlanList If the method is called asynchronously, returns the request thread. """ - all_params = ['id_node_execution_id_execution_id_org', 'id_node_execution_id_execution_id_project', 'id_node_execution_id_execution_id_domain', 'id_node_execution_id_execution_id_name', 'id_node_execution_id_node_id', 'id_task_id_project', 'id_task_id_domain', 'id_task_id_name', 'id_task_id_version', 'id_retry_attempt', 'id_task_id_resource_type', 'id_task_id_org'] # noqa: E501 + all_params = ['project', 'domain', 'limit', 'token', 'sort_by_key', 'sort_by_direction', 'org'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -4966,80 +6465,38 @@ def get_task_execution_data2_with_http_info(self, id_node_execution_id_execution if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_task_execution_data2" % key + " to method list_active_launch_plans" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'id_node_execution_id_execution_id_org' is set - if ('id_node_execution_id_execution_id_org' not in params or - params['id_node_execution_id_execution_id_org'] is None): - raise ValueError("Missing the required parameter `id_node_execution_id_execution_id_org` when calling `get_task_execution_data2`") # noqa: E501 - # verify the required parameter 'id_node_execution_id_execution_id_project' is set - if ('id_node_execution_id_execution_id_project' not in params or - params['id_node_execution_id_execution_id_project'] is None): - raise ValueError("Missing the required parameter `id_node_execution_id_execution_id_project` when calling `get_task_execution_data2`") # noqa: E501 - # verify the required parameter 'id_node_execution_id_execution_id_domain' is set - if ('id_node_execution_id_execution_id_domain' not in params or - params['id_node_execution_id_execution_id_domain'] is None): - raise ValueError("Missing the required parameter `id_node_execution_id_execution_id_domain` when calling `get_task_execution_data2`") # noqa: E501 - # verify the required parameter 'id_node_execution_id_execution_id_name' is set - if ('id_node_execution_id_execution_id_name' not in params or - params['id_node_execution_id_execution_id_name'] is None): - raise ValueError("Missing the required parameter `id_node_execution_id_execution_id_name` when calling `get_task_execution_data2`") # noqa: E501 - # verify the required parameter 'id_node_execution_id_node_id' is set - if ('id_node_execution_id_node_id' not in params or - params['id_node_execution_id_node_id'] is None): - raise ValueError("Missing the required parameter `id_node_execution_id_node_id` when calling `get_task_execution_data2`") # noqa: E501 - # verify the required parameter 'id_task_id_project' is set - if ('id_task_id_project' not in params or - params['id_task_id_project'] is None): - raise ValueError("Missing the required parameter `id_task_id_project` when calling `get_task_execution_data2`") # noqa: E501 - # verify the required parameter 'id_task_id_domain' is set - if ('id_task_id_domain' not in params or - params['id_task_id_domain'] is None): - raise ValueError("Missing the required parameter `id_task_id_domain` when calling `get_task_execution_data2`") # noqa: E501 - # verify the required parameter 'id_task_id_name' is set - if ('id_task_id_name' not in params or - params['id_task_id_name'] is None): - raise ValueError("Missing the required parameter `id_task_id_name` when calling `get_task_execution_data2`") # noqa: E501 - # verify the required parameter 'id_task_id_version' is set - if ('id_task_id_version' not in params or - params['id_task_id_version'] is None): - raise ValueError("Missing the required parameter `id_task_id_version` when calling `get_task_execution_data2`") # noqa: E501 - # verify the required parameter 'id_retry_attempt' is set - if ('id_retry_attempt' not in params or - params['id_retry_attempt'] is None): - raise ValueError("Missing the required parameter `id_retry_attempt` when calling `get_task_execution_data2`") # noqa: E501 + # verify the required parameter 'project' is set + if ('project' not in params or + params['project'] is None): + raise ValueError("Missing the required parameter `project` when calling `list_active_launch_plans`") # noqa: E501 + # verify the required parameter 'domain' is set + if ('domain' not in params or + params['domain'] is None): + raise ValueError("Missing the required parameter `domain` when calling `list_active_launch_plans`") # noqa: E501 collection_formats = {} path_params = {} - if 'id_node_execution_id_execution_id_org' in params: - path_params['id.node_execution_id.execution_id.org'] = params['id_node_execution_id_execution_id_org'] # noqa: E501 - if 'id_node_execution_id_execution_id_project' in params: - path_params['id.node_execution_id.execution_id.project'] = params['id_node_execution_id_execution_id_project'] # noqa: E501 - if 'id_node_execution_id_execution_id_domain' in params: - path_params['id.node_execution_id.execution_id.domain'] = params['id_node_execution_id_execution_id_domain'] # noqa: E501 - if 'id_node_execution_id_execution_id_name' in params: - path_params['id.node_execution_id.execution_id.name'] = params['id_node_execution_id_execution_id_name'] # noqa: E501 - if 'id_node_execution_id_node_id' in params: - path_params['id.node_execution_id.node_id'] = params['id_node_execution_id_node_id'] # noqa: E501 - if 'id_task_id_project' in params: - path_params['id.task_id.project'] = params['id_task_id_project'] # noqa: E501 - if 'id_task_id_domain' in params: - path_params['id.task_id.domain'] = params['id_task_id_domain'] # noqa: E501 - if 'id_task_id_name' in params: - path_params['id.task_id.name'] = params['id_task_id_name'] # noqa: E501 - if 'id_task_id_version' in params: - path_params['id.task_id.version'] = params['id_task_id_version'] # noqa: E501 - if 'id_retry_attempt' in params: - path_params['id.retry_attempt'] = params['id_retry_attempt'] # noqa: E501 + if 'project' in params: + path_params['project'] = params['project'] # noqa: E501 + if 'domain' in params: + path_params['domain'] = params['domain'] # noqa: E501 query_params = [] - if 'id_task_id_resource_type' in params: - query_params.append(('id.task_id.resource_type', params['id_task_id_resource_type'])) # noqa: E501 - if 'id_task_id_org' in params: - query_params.append(('id.task_id.org', params['id_task_id_org'])) # noqa: E501 + if 'limit' in params: + query_params.append(('limit', params['limit'])) # noqa: E501 + if 'token' in params: + query_params.append(('token', params['token'])) # noqa: E501 + if 'sort_by_key' in params: + query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 + if 'sort_by_direction' in params: + query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 + if 'org' in params: + query_params.append(('org', params['org'])) # noqa: E501 header_params = {} @@ -5059,14 +6516,14 @@ def get_task_execution_data2_with_http_info(self, id_node_execution_id_execution auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/data/task_executions/org/{id.node_execution_id.execution_id.org}/{id.node_execution_id.execution_id.project}/{id.node_execution_id.execution_id.domain}/{id.node_execution_id.execution_id.name}/{id.node_execution_id.node_id}/{id.task_id.project}/{id.task_id.domain}/{id.task_id.name}/{id.task_id.version}/{id.retry_attempt}', 'GET', + '/api/v1/active_launch_plans/{project}/{domain}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminTaskExecutionGetDataResponse', # noqa: E501 + response_type='AdminLaunchPlanList', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -5074,41 +6531,55 @@ def get_task_execution_data2_with_http_info(self, id_node_execution_id_execution _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_version(self, **kwargs): # noqa: E501 - """get_version # noqa: E501 + def list_active_launch_plans2(self, org, project, domain, **kwargs): # noqa: E501 + """List active versions of :ref:`ref_flyteidl.admin.LaunchPlan`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_version(async_req=True) + >>> thread = api.list_active_launch_plans2(org, project, domain, async_req=True) >>> result = thread.get() :param async_req bool - :return: AdminGetVersionResponse + :param str org: Optional, org key applied to the resource. (required) + :param str project: Name of the project that contains the identifiers. +required. (required) + :param str domain: Name of the domain the identifiers belongs to within the project. +required. (required) + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :return: AdminLaunchPlanList If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_version_with_http_info(**kwargs) # noqa: E501 + return self.list_active_launch_plans2_with_http_info(org, project, domain, **kwargs) # noqa: E501 else: - (data) = self.get_version_with_http_info(**kwargs) # noqa: E501 + (data) = self.list_active_launch_plans2_with_http_info(org, project, domain, **kwargs) # noqa: E501 return data - def get_version_with_http_info(self, **kwargs): # noqa: E501 - """get_version # noqa: E501 + def list_active_launch_plans2_with_http_info(self, org, project, domain, **kwargs): # noqa: E501 + """List active versions of :ref:`ref_flyteidl.admin.LaunchPlan`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_version_with_http_info(async_req=True) + >>> thread = api.list_active_launch_plans2_with_http_info(org, project, domain, async_req=True) >>> result = thread.get() :param async_req bool - :return: AdminGetVersionResponse + :param str org: Optional, org key applied to the resource. (required) + :param str project: Name of the project that contains the identifiers. +required. (required) + :param str domain: Name of the domain the identifiers belongs to within the project. +required. (required) + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :return: AdminLaunchPlanList If the method is called asynchronously, returns the request thread. """ - all_params = [] # noqa: E501 + all_params = ['org', 'project', 'domain', 'limit', 'token', 'sort_by_key', 'sort_by_direction'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -5119,16 +6590,42 @@ def get_version_with_http_info(self, **kwargs): # noqa: E501 if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_version" % key + " to method list_active_launch_plans2" % key ) params[key] = val del params['kwargs'] + # verify the required parameter 'org' is set + if ('org' not in params or + params['org'] is None): + raise ValueError("Missing the required parameter `org` when calling `list_active_launch_plans2`") # noqa: E501 + # verify the required parameter 'project' is set + if ('project' not in params or + params['project'] is None): + raise ValueError("Missing the required parameter `project` when calling `list_active_launch_plans2`") # noqa: E501 + # verify the required parameter 'domain' is set + if ('domain' not in params or + params['domain'] is None): + raise ValueError("Missing the required parameter `domain` when calling `list_active_launch_plans2`") # noqa: E501 collection_formats = {} path_params = {} + if 'org' in params: + path_params['org'] = params['org'] # noqa: E501 + if 'project' in params: + path_params['project'] = params['project'] # noqa: E501 + if 'domain' in params: + path_params['domain'] = params['domain'] # noqa: E501 query_params = [] + if 'limit' in params: + query_params.append(('limit', params['limit'])) # noqa: E501 + if 'token' in params: + query_params.append(('token', params['token'])) # noqa: E501 + if 'sort_by_key' in params: + query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 + if 'sort_by_direction' in params: + query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 header_params = {} @@ -5148,14 +6645,14 @@ def get_version_with_http_info(self, **kwargs): # noqa: E501 auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/version', 'GET', + '/api/v1/active_launch_plans/org/{org}/{project}/{domain}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminGetVersionResponse', # noqa: E501 + response_type='AdminLaunchPlanList', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -5163,53 +6660,61 @@ def get_version_with_http_info(self, **kwargs): # noqa: E501 _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_workflow(self, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 - """Fetch a :ref:`ref_flyteidl.admin.Workflow` definition. # noqa: E501 + def list_description_entities(self, resource_type, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_workflow(id_project, id_domain, id_name, id_version, async_req=True) + >>> thread = api.list_description_entities(resource_type, id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool + :param str resource_type: Identifies the specific type of resource that this identifier corresponds to. (required) :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. (required) - :param str id_version: Specific version of the resource. (required) - :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) :param str id_org: Optional, org key applied to the resource. - :return: AdminWorkflow + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :return: AdminDescriptionEntityList If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_workflow_with_http_info(id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 + return self.list_description_entities_with_http_info(resource_type, id_project, id_domain, id_name, **kwargs) # noqa: E501 else: - (data) = self.get_workflow_with_http_info(id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 + (data) = self.list_description_entities_with_http_info(resource_type, id_project, id_domain, id_name, **kwargs) # noqa: E501 return data - def get_workflow_with_http_info(self, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 - """Fetch a :ref:`ref_flyteidl.admin.Workflow` definition. # noqa: E501 + def list_description_entities_with_http_info(self, resource_type, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_workflow_with_http_info(id_project, id_domain, id_name, id_version, async_req=True) + >>> thread = api.list_description_entities_with_http_info(resource_type, id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool + :param str resource_type: Identifies the specific type of resource that this identifier corresponds to. (required) :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. (required) - :param str id_version: Specific version of the resource. (required) - :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) :param str id_org: Optional, org key applied to the resource. - :return: AdminWorkflow + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :return: AdminDescriptionEntityList If the method is called asynchronously, returns the request thread. """ - all_params = ['id_project', 'id_domain', 'id_name', 'id_version', 'id_resource_type', 'id_org'] # noqa: E501 + all_params = ['resource_type', 'id_project', 'id_domain', 'id_name', 'id_org', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -5220,44 +6725,52 @@ def get_workflow_with_http_info(self, id_project, id_domain, id_name, id_version if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_workflow" % key + " to method list_description_entities" % key ) params[key] = val del params['kwargs'] + # verify the required parameter 'resource_type' is set + if ('resource_type' not in params or + params['resource_type'] is None): + raise ValueError("Missing the required parameter `resource_type` when calling `list_description_entities`") # noqa: E501 # verify the required parameter 'id_project' is set if ('id_project' not in params or params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `get_workflow`") # noqa: E501 + raise ValueError("Missing the required parameter `id_project` when calling `list_description_entities`") # noqa: E501 # verify the required parameter 'id_domain' is set if ('id_domain' not in params or params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `get_workflow`") # noqa: E501 + raise ValueError("Missing the required parameter `id_domain` when calling `list_description_entities`") # noqa: E501 # verify the required parameter 'id_name' is set if ('id_name' not in params or params['id_name'] is None): - raise ValueError("Missing the required parameter `id_name` when calling `get_workflow`") # noqa: E501 - # verify the required parameter 'id_version' is set - if ('id_version' not in params or - params['id_version'] is None): - raise ValueError("Missing the required parameter `id_version` when calling `get_workflow`") # noqa: E501 + raise ValueError("Missing the required parameter `id_name` when calling `list_description_entities`") # noqa: E501 collection_formats = {} path_params = {} + if 'resource_type' in params: + path_params['resource_type'] = params['resource_type'] # noqa: E501 if 'id_project' in params: path_params['id.project'] = params['id_project'] # noqa: E501 if 'id_domain' in params: path_params['id.domain'] = params['id_domain'] # noqa: E501 if 'id_name' in params: path_params['id.name'] = params['id_name'] # noqa: E501 - if 'id_version' in params: - path_params['id.version'] = params['id_version'] # noqa: E501 query_params = [] - if 'id_resource_type' in params: - query_params.append(('id.resource_type', params['id_resource_type'])) # noqa: E501 if 'id_org' in params: query_params.append(('id.org', params['id_org'])) # noqa: E501 + if 'limit' in params: + query_params.append(('limit', params['limit'])) # noqa: E501 + if 'token' in params: + query_params.append(('token', params['token'])) # noqa: E501 + if 'filters' in params: + query_params.append(('filters', params['filters'])) # noqa: E501 + if 'sort_by_key' in params: + query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 + if 'sort_by_direction' in params: + query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 header_params = {} @@ -5277,14 +6790,14 @@ def get_workflow_with_http_info(self, id_project, id_domain, id_name, id_version auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/workflows/{id.project}/{id.domain}/{id.name}/{id.version}', 'GET', + '/api/v1/description_entities/{resource_type}/{id.project}/{id.domain}/{id.name}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminWorkflow', # noqa: E501 + response_type='AdminDescriptionEntityList', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -5292,53 +6805,61 @@ def get_workflow_with_http_info(self, id_project, id_domain, id_name, id_version _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_workflow2(self, id_org, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 - """Fetch a :ref:`ref_flyteidl.admin.Workflow` definition. # noqa: E501 + def list_description_entities2(self, resource_type, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_workflow2(id_org, id_project, id_domain, id_name, id_version, async_req=True) + >>> thread = api.list_description_entities2(resource_type, id_org, id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool + :param str resource_type: Identifies the specific type of resource that this identifier corresponds to. (required) :param str id_org: Optional, org key applied to the resource. (required) :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. (required) - :param str id_version: Specific version of the resource. (required) - :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects - :return: AdminWorkflow + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :return: AdminDescriptionEntityList If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_workflow2_with_http_info(id_org, id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 + return self.list_description_entities2_with_http_info(resource_type, id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 else: - (data) = self.get_workflow2_with_http_info(id_org, id_project, id_domain, id_name, id_version, **kwargs) # noqa: E501 + (data) = self.list_description_entities2_with_http_info(resource_type, id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 return data - def get_workflow2_with_http_info(self, id_org, id_project, id_domain, id_name, id_version, **kwargs): # noqa: E501 - """Fetch a :ref:`ref_flyteidl.admin.Workflow` definition. # noqa: E501 + def list_description_entities2_with_http_info(self, resource_type, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_workflow2_with_http_info(id_org, id_project, id_domain, id_name, id_version, async_req=True) + >>> thread = api.list_description_entities2_with_http_info(resource_type, id_org, id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool + :param str resource_type: Identifies the specific type of resource that this identifier corresponds to. (required) :param str id_org: Optional, org key applied to the resource. (required) :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. (required) - :param str id_version: Specific version of the resource. (required) - :param str id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects - :return: AdminWorkflow + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :return: AdminDescriptionEntityList If the method is called asynchronously, returns the request thread. """ - all_params = ['id_org', 'id_project', 'id_domain', 'id_name', 'id_version', 'id_resource_type'] # noqa: E501 + all_params = ['resource_type', 'id_org', 'id_project', 'id_domain', 'id_name', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -5349,34 +6870,36 @@ def get_workflow2_with_http_info(self, id_org, id_project, id_domain, id_name, i if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_workflow2" % key + " to method list_description_entities2" % key ) params[key] = val del params['kwargs'] + # verify the required parameter 'resource_type' is set + if ('resource_type' not in params or + params['resource_type'] is None): + raise ValueError("Missing the required parameter `resource_type` when calling `list_description_entities2`") # noqa: E501 # verify the required parameter 'id_org' is set if ('id_org' not in params or params['id_org'] is None): - raise ValueError("Missing the required parameter `id_org` when calling `get_workflow2`") # noqa: E501 + raise ValueError("Missing the required parameter `id_org` when calling `list_description_entities2`") # noqa: E501 # verify the required parameter 'id_project' is set if ('id_project' not in params or params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `get_workflow2`") # noqa: E501 + raise ValueError("Missing the required parameter `id_project` when calling `list_description_entities2`") # noqa: E501 # verify the required parameter 'id_domain' is set if ('id_domain' not in params or params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `get_workflow2`") # noqa: E501 + raise ValueError("Missing the required parameter `id_domain` when calling `list_description_entities2`") # noqa: E501 # verify the required parameter 'id_name' is set if ('id_name' not in params or params['id_name'] is None): - raise ValueError("Missing the required parameter `id_name` when calling `get_workflow2`") # noqa: E501 - # verify the required parameter 'id_version' is set - if ('id_version' not in params or - params['id_version'] is None): - raise ValueError("Missing the required parameter `id_version` when calling `get_workflow2`") # noqa: E501 + raise ValueError("Missing the required parameter `id_name` when calling `list_description_entities2`") # noqa: E501 collection_formats = {} path_params = {} + if 'resource_type' in params: + path_params['resource_type'] = params['resource_type'] # noqa: E501 if 'id_org' in params: path_params['id.org'] = params['id_org'] # noqa: E501 if 'id_project' in params: @@ -5385,12 +6908,18 @@ def get_workflow2_with_http_info(self, id_org, id_project, id_domain, id_name, i path_params['id.domain'] = params['id_domain'] # noqa: E501 if 'id_name' in params: path_params['id.name'] = params['id_name'] # noqa: E501 - if 'id_version' in params: - path_params['id.version'] = params['id_version'] # noqa: E501 query_params = [] - if 'id_resource_type' in params: - query_params.append(('id.resource_type', params['id_resource_type'])) # noqa: E501 + if 'limit' in params: + query_params.append(('limit', params['limit'])) # noqa: E501 + if 'token' in params: + query_params.append(('token', params['token'])) # noqa: E501 + if 'filters' in params: + query_params.append(('filters', params['filters'])) # noqa: E501 + if 'sort_by_key' in params: + query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 + if 'sort_by_direction' in params: + query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 header_params = {} @@ -5410,14 +6939,14 @@ def get_workflow2_with_http_info(self, id_org, id_project, id_domain, id_name, i auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/workflows/org/{id.org}/{id.project}/{id.domain}/{id.name}/{id.version}', 'GET', + '/api/v1/description_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain}/{id.name}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminWorkflow', # noqa: E501 + response_type='AdminDescriptionEntityList', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -5425,51 +6954,61 @@ def get_workflow2_with_http_info(self, id_org, id_project, id_domain, id_name, i _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_workflow_attributes(self, project, domain, workflow, **kwargs): # noqa: E501 - """Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. # noqa: E501 + def list_description_entities3(self, resource_type, id_project, id_domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_workflow_attributes(project, domain, workflow, async_req=True) + >>> thread = api.list_description_entities3(resource_type, id_project, id_domain, async_req=True) >>> result = thread.get() :param async_req bool - :param str project: Unique project id which this set of attributes references. +required (required) - :param str domain: Unique domain id which this set of attributes references. +required (required) - :param str workflow: Workflow name which this set of attributes references. +required (required) - :param str resource_type: Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. - :param str org: Optional, org key applied to the attributes. - :return: AdminWorkflowAttributesGetResponse + :param str resource_type: Identifies the specific type of resource that this identifier corresponds to. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. + :param str id_org: Optional, org key applied to the resource. + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :return: AdminDescriptionEntityList If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_workflow_attributes_with_http_info(project, domain, workflow, **kwargs) # noqa: E501 + return self.list_description_entities3_with_http_info(resource_type, id_project, id_domain, **kwargs) # noqa: E501 else: - (data) = self.get_workflow_attributes_with_http_info(project, domain, workflow, **kwargs) # noqa: E501 + (data) = self.list_description_entities3_with_http_info(resource_type, id_project, id_domain, **kwargs) # noqa: E501 return data - def get_workflow_attributes_with_http_info(self, project, domain, workflow, **kwargs): # noqa: E501 - """Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. # noqa: E501 + def list_description_entities3_with_http_info(self, resource_type, id_project, id_domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_workflow_attributes_with_http_info(project, domain, workflow, async_req=True) + >>> thread = api.list_description_entities3_with_http_info(resource_type, id_project, id_domain, async_req=True) >>> result = thread.get() :param async_req bool - :param str project: Unique project id which this set of attributes references. +required (required) - :param str domain: Unique domain id which this set of attributes references. +required (required) - :param str workflow: Workflow name which this set of attributes references. +required (required) - :param str resource_type: Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. - :param str org: Optional, org key applied to the attributes. - :return: AdminWorkflowAttributesGetResponse + :param str resource_type: Identifies the specific type of resource that this identifier corresponds to. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. + :param str id_org: Optional, org key applied to the resource. + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :return: AdminDescriptionEntityList If the method is called asynchronously, returns the request thread. """ - all_params = ['project', 'domain', 'workflow', 'resource_type', 'org'] # noqa: E501 + all_params = ['resource_type', 'id_project', 'id_domain', 'id_name', 'id_org', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -5480,38 +7019,48 @@ def get_workflow_attributes_with_http_info(self, project, domain, workflow, **kw if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_workflow_attributes" % key + " to method list_description_entities3" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'project' is set - if ('project' not in params or - params['project'] is None): - raise ValueError("Missing the required parameter `project` when calling `get_workflow_attributes`") # noqa: E501 - # verify the required parameter 'domain' is set - if ('domain' not in params or - params['domain'] is None): - raise ValueError("Missing the required parameter `domain` when calling `get_workflow_attributes`") # noqa: E501 - # verify the required parameter 'workflow' is set - if ('workflow' not in params or - params['workflow'] is None): - raise ValueError("Missing the required parameter `workflow` when calling `get_workflow_attributes`") # noqa: E501 - - collection_formats = {} - - path_params = {} - if 'project' in params: - path_params['project'] = params['project'] # noqa: E501 - if 'domain' in params: - path_params['domain'] = params['domain'] # noqa: E501 - if 'workflow' in params: - path_params['workflow'] = params['workflow'] # noqa: E501 + # verify the required parameter 'resource_type' is set + if ('resource_type' not in params or + params['resource_type'] is None): + raise ValueError("Missing the required parameter `resource_type` when calling `list_description_entities3`") # noqa: E501 + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `list_description_entities3`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `list_description_entities3`") # noqa: E501 - query_params = [] + collection_formats = {} + + path_params = {} if 'resource_type' in params: - query_params.append(('resource_type', params['resource_type'])) # noqa: E501 - if 'org' in params: - query_params.append(('org', params['org'])) # noqa: E501 + path_params['resource_type'] = params['resource_type'] # noqa: E501 + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 + + query_params = [] + if 'id_name' in params: + query_params.append(('id.name', params['id_name'])) # noqa: E501 + if 'id_org' in params: + query_params.append(('id.org', params['id_org'])) # noqa: E501 + if 'limit' in params: + query_params.append(('limit', params['limit'])) # noqa: E501 + if 'token' in params: + query_params.append(('token', params['token'])) # noqa: E501 + if 'filters' in params: + query_params.append(('filters', params['filters'])) # noqa: E501 + if 'sort_by_key' in params: + query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 + if 'sort_by_direction' in params: + query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 header_params = {} @@ -5531,14 +7080,14 @@ def get_workflow_attributes_with_http_info(self, project, domain, workflow, **kw auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/workflow_attributes/{project}/{domain}/{workflow}', 'GET', + '/api/v1/description_entities/{resource_type}/{id.project}/{id.domain}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminWorkflowAttributesGetResponse', # noqa: E501 + response_type='AdminDescriptionEntityList', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -5546,51 +7095,61 @@ def get_workflow_attributes_with_http_info(self, project, domain, workflow, **kw _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_workflow_attributes2(self, org, project, domain, workflow, **kwargs): # noqa: E501 - """Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. # noqa: E501 + def list_description_entities4(self, resource_type, id_org, id_project, id_domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_workflow_attributes2(org, project, domain, workflow, async_req=True) + >>> thread = api.list_description_entities4(resource_type, id_org, id_project, id_domain, async_req=True) >>> result = thread.get() :param async_req bool - :param str org: Optional, org key applied to the attributes. (required) - :param str project: Unique project id which this set of attributes references. +required (required) - :param str domain: Unique domain id which this set of attributes references. +required (required) - :param str workflow: Workflow name which this set of attributes references. +required (required) - :param str resource_type: Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. - :return: AdminWorkflowAttributesGetResponse + :param str resource_type: Identifies the specific type of resource that this identifier corresponds to. (required) + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :return: AdminDescriptionEntityList If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_workflow_attributes2_with_http_info(org, project, domain, workflow, **kwargs) # noqa: E501 + return self.list_description_entities4_with_http_info(resource_type, id_org, id_project, id_domain, **kwargs) # noqa: E501 else: - (data) = self.get_workflow_attributes2_with_http_info(org, project, domain, workflow, **kwargs) # noqa: E501 + (data) = self.list_description_entities4_with_http_info(resource_type, id_org, id_project, id_domain, **kwargs) # noqa: E501 return data - def get_workflow_attributes2_with_http_info(self, org, project, domain, workflow, **kwargs): # noqa: E501 - """Fetches custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a project, domain and workflow. # noqa: E501 + def list_description_entities4_with_http_info(self, resource_type, id_org, id_project, id_domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_workflow_attributes2_with_http_info(org, project, domain, workflow, async_req=True) + >>> thread = api.list_description_entities4_with_http_info(resource_type, id_org, id_project, id_domain, async_req=True) >>> result = thread.get() :param async_req bool - :param str org: Optional, org key applied to the attributes. (required) - :param str project: Unique project id which this set of attributes references. +required (required) - :param str domain: Unique domain id which this set of attributes references. +required (required) - :param str workflow: Workflow name which this set of attributes references. +required (required) - :param str resource_type: Which type of matchable attributes to return. +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. - :return: AdminWorkflowAttributesGetResponse + :param str resource_type: Identifies the specific type of resource that this identifier corresponds to. (required) + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :return: AdminDescriptionEntityList If the method is called asynchronously, returns the request thread. """ - all_params = ['org', 'project', 'domain', 'workflow', 'resource_type'] # noqa: E501 + all_params = ['resource_type', 'id_org', 'id_project', 'id_domain', 'id_name', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -5601,42 +7160,52 @@ def get_workflow_attributes2_with_http_info(self, org, project, domain, workflow if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_workflow_attributes2" % key + " to method list_description_entities4" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'org' is set - if ('org' not in params or - params['org'] is None): - raise ValueError("Missing the required parameter `org` when calling `get_workflow_attributes2`") # noqa: E501 - # verify the required parameter 'project' is set - if ('project' not in params or - params['project'] is None): - raise ValueError("Missing the required parameter `project` when calling `get_workflow_attributes2`") # noqa: E501 - # verify the required parameter 'domain' is set - if ('domain' not in params or - params['domain'] is None): - raise ValueError("Missing the required parameter `domain` when calling `get_workflow_attributes2`") # noqa: E501 - # verify the required parameter 'workflow' is set - if ('workflow' not in params or - params['workflow'] is None): - raise ValueError("Missing the required parameter `workflow` when calling `get_workflow_attributes2`") # noqa: E501 + # verify the required parameter 'resource_type' is set + if ('resource_type' not in params or + params['resource_type'] is None): + raise ValueError("Missing the required parameter `resource_type` when calling `list_description_entities4`") # noqa: E501 + # verify the required parameter 'id_org' is set + if ('id_org' not in params or + params['id_org'] is None): + raise ValueError("Missing the required parameter `id_org` when calling `list_description_entities4`") # noqa: E501 + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `list_description_entities4`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `list_description_entities4`") # noqa: E501 collection_formats = {} path_params = {} - if 'org' in params: - path_params['org'] = params['org'] # noqa: E501 - if 'project' in params: - path_params['project'] = params['project'] # noqa: E501 - if 'domain' in params: - path_params['domain'] = params['domain'] # noqa: E501 - if 'workflow' in params: - path_params['workflow'] = params['workflow'] # noqa: E501 + if 'resource_type' in params: + path_params['resource_type'] = params['resource_type'] # noqa: E501 + if 'id_org' in params: + path_params['id.org'] = params['id_org'] # noqa: E501 + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 query_params = [] - if 'resource_type' in params: - query_params.append(('resource_type', params['resource_type'])) # noqa: E501 + if 'id_name' in params: + query_params.append(('id.name', params['id_name'])) # noqa: E501 + if 'limit' in params: + query_params.append(('limit', params['limit'])) # noqa: E501 + if 'token' in params: + query_params.append(('token', params['token'])) # noqa: E501 + if 'filters' in params: + query_params.append(('filters', params['filters'])) # noqa: E501 + if 'sort_by_key' in params: + query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 + if 'sort_by_direction' in params: + query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 header_params = {} @@ -5656,14 +7225,14 @@ def get_workflow_attributes2_with_http_info(self, org, project, domain, workflow auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/workflow_attributes/org/{org}/{project}/{domain}/{workflow}', 'GET', + '/api/v1/description_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminWorkflowAttributesGetResponse', # noqa: E501 + response_type='AdminDescriptionEntityList', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -5671,55 +7240,59 @@ def get_workflow_attributes2_with_http_info(self, org, project, domain, workflow _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_active_launch_plans(self, project, domain, **kwargs): # noqa: E501 - """List active versions of :ref:`ref_flyteidl.admin.LaunchPlan`. # noqa: E501 + def list_executions(self, id_project, id_domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_active_launch_plans(project, domain, async_req=True) + >>> thread = api.list_executions(id_project, id_domain, async_req=True) >>> result = thread.get() :param async_req bool - :param str project: Name of the project that contains the identifiers. +required. (required) - :param str domain: Name of the domain the identifiers belongs to within the project. +required. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. + :param str id_org: Optional, org key applied to the resource. :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :param str org: Optional, org key applied to the resource. - :return: AdminLaunchPlanList + :return: AdminExecutionList If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_active_launch_plans_with_http_info(project, domain, **kwargs) # noqa: E501 + return self.list_executions_with_http_info(id_project, id_domain, **kwargs) # noqa: E501 else: - (data) = self.list_active_launch_plans_with_http_info(project, domain, **kwargs) # noqa: E501 + (data) = self.list_executions_with_http_info(id_project, id_domain, **kwargs) # noqa: E501 return data - def list_active_launch_plans_with_http_info(self, project, domain, **kwargs): # noqa: E501 - """List active versions of :ref:`ref_flyteidl.admin.LaunchPlan`. # noqa: E501 + def list_executions_with_http_info(self, id_project, id_domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_active_launch_plans_with_http_info(project, domain, async_req=True) + >>> thread = api.list_executions_with_http_info(id_project, id_domain, async_req=True) >>> result = thread.get() :param async_req bool - :param str project: Name of the project that contains the identifiers. +required. (required) - :param str domain: Name of the domain the identifiers belongs to within the project. +required. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. + :param str id_org: Optional, org key applied to the resource. :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :param str org: Optional, org key applied to the resource. - :return: AdminLaunchPlanList + :return: AdminExecutionList If the method is called asynchronously, returns the request thread. """ - all_params = ['project', 'domain', 'limit', 'token', 'sort_by_key', 'sort_by_direction', 'org'] # noqa: E501 + all_params = ['id_project', 'id_domain', 'id_name', 'id_org', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -5730,38 +7303,42 @@ def list_active_launch_plans_with_http_info(self, project, domain, **kwargs): # if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_active_launch_plans" % key + " to method list_executions" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'project' is set - if ('project' not in params or - params['project'] is None): - raise ValueError("Missing the required parameter `project` when calling `list_active_launch_plans`") # noqa: E501 - # verify the required parameter 'domain' is set - if ('domain' not in params or - params['domain'] is None): - raise ValueError("Missing the required parameter `domain` when calling `list_active_launch_plans`") # noqa: E501 + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `list_executions`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `list_executions`") # noqa: E501 collection_formats = {} path_params = {} - if 'project' in params: - path_params['project'] = params['project'] # noqa: E501 - if 'domain' in params: - path_params['domain'] = params['domain'] # noqa: E501 + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 query_params = [] + if 'id_name' in params: + query_params.append(('id.name', params['id_name'])) # noqa: E501 + if 'id_org' in params: + query_params.append(('id.org', params['id_org'])) # noqa: E501 if 'limit' in params: query_params.append(('limit', params['limit'])) # noqa: E501 if 'token' in params: query_params.append(('token', params['token'])) # noqa: E501 + if 'filters' in params: + query_params.append(('filters', params['filters'])) # noqa: E501 if 'sort_by_key' in params: query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 if 'sort_by_direction' in params: query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 - if 'org' in params: - query_params.append(('org', params['org'])) # noqa: E501 header_params = {} @@ -5781,14 +7358,14 @@ def list_active_launch_plans_with_http_info(self, project, domain, **kwargs): # auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/active_launch_plans/{project}/{domain}', 'GET', + '/api/v1/executions/{id.project}/{id.domain}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminLaunchPlanList', # noqa: E501 + response_type='AdminExecutionList', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -5796,61 +7373,59 @@ def list_active_launch_plans_with_http_info(self, project, domain, **kwargs): # _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_description_entities(self, resource_type, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. # noqa: E501 + def list_executions2(self, id_org, id_project, id_domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_description_entities(resource_type, id_project, id_domain, id_name, async_req=True) + >>> thread = api.list_executions2(id_org, id_project, id_domain, async_req=True) >>> result = thread.get() :param async_req bool - :param str resource_type: Identifies the specific type of resource that this identifier corresponds to. (required) + :param str id_org: Optional, org key applied to the resource. (required) :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) - :param str id_org: Optional, org key applied to the resource. + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminDescriptionEntityList + :return: AdminExecutionList If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_description_entities_with_http_info(resource_type, id_project, id_domain, id_name, **kwargs) # noqa: E501 + return self.list_executions2_with_http_info(id_org, id_project, id_domain, **kwargs) # noqa: E501 else: - (data) = self.list_description_entities_with_http_info(resource_type, id_project, id_domain, id_name, **kwargs) # noqa: E501 + (data) = self.list_executions2_with_http_info(id_org, id_project, id_domain, **kwargs) # noqa: E501 return data - def list_description_entities_with_http_info(self, resource_type, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. # noqa: E501 + def list_executions2_with_http_info(self, id_org, id_project, id_domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_description_entities_with_http_info(resource_type, id_project, id_domain, id_name, async_req=True) + >>> thread = api.list_executions2_with_http_info(id_org, id_project, id_domain, async_req=True) >>> result = thread.get() :param async_req bool - :param str resource_type: Identifies the specific type of resource that this identifier corresponds to. (required) + :param str id_org: Optional, org key applied to the resource. (required) :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) - :param str id_org: Optional, org key applied to the resource. + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminDescriptionEntityList + :return: AdminExecutionList If the method is called asynchronously, returns the request thread. """ - all_params = ['resource_type', 'id_project', 'id_domain', 'id_name', 'id_org', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 + all_params = ['id_org', 'id_project', 'id_domain', 'id_name', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -5861,42 +7436,36 @@ def list_description_entities_with_http_info(self, resource_type, id_project, id if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_description_entities" % key + " to method list_executions2" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'resource_type' is set - if ('resource_type' not in params or - params['resource_type'] is None): - raise ValueError("Missing the required parameter `resource_type` when calling `list_description_entities`") # noqa: E501 + # verify the required parameter 'id_org' is set + if ('id_org' not in params or + params['id_org'] is None): + raise ValueError("Missing the required parameter `id_org` when calling `list_executions2`") # noqa: E501 # verify the required parameter 'id_project' is set if ('id_project' not in params or params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `list_description_entities`") # noqa: E501 + raise ValueError("Missing the required parameter `id_project` when calling `list_executions2`") # noqa: E501 # verify the required parameter 'id_domain' is set if ('id_domain' not in params or params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `list_description_entities`") # noqa: E501 - # verify the required parameter 'id_name' is set - if ('id_name' not in params or - params['id_name'] is None): - raise ValueError("Missing the required parameter `id_name` when calling `list_description_entities`") # noqa: E501 + raise ValueError("Missing the required parameter `id_domain` when calling `list_executions2`") # noqa: E501 collection_formats = {} path_params = {} - if 'resource_type' in params: - path_params['resource_type'] = params['resource_type'] # noqa: E501 + if 'id_org' in params: + path_params['id.org'] = params['id_org'] # noqa: E501 if 'id_project' in params: path_params['id.project'] = params['id_project'] # noqa: E501 if 'id_domain' in params: path_params['id.domain'] = params['id_domain'] # noqa: E501 - if 'id_name' in params: - path_params['id.name'] = params['id_name'] # noqa: E501 query_params = [] - if 'id_org' in params: - query_params.append(('id.org', params['id_org'])) # noqa: E501 + if 'id_name' in params: + query_params.append(('id.name', params['id_name'])) # noqa: E501 if 'limit' in params: query_params.append(('limit', params['limit'])) # noqa: E501 if 'token' in params: @@ -5926,14 +7495,14 @@ def list_description_entities_with_http_info(self, resource_type, id_project, id auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/description_entities/{resource_type}/{id.project}/{id.domain}/{id.name}', 'GET', + '/api/v1/executions/org/{id.org}/{id.project}/{id.domain}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminDescriptionEntityList', # noqa: E501 + response_type='AdminExecutionList', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -5941,61 +7510,57 @@ def list_description_entities_with_http_info(self, resource_type, id_project, id _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_description_entities2(self, resource_type, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. # noqa: E501 + def list_launch_plan_ids(self, project, domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of launch plan objects. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_description_entities2(resource_type, id_org, id_project, id_domain, id_name, async_req=True) + >>> thread = api.list_launch_plan_ids(project, domain, async_req=True) >>> result = thread.get() :param async_req bool - :param str resource_type: Identifies the specific type of resource that this identifier corresponds to. (required) - :param str id_org: Optional, org key applied to the resource. (required) - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) + :param str project: Name of the project that contains the identifiers. +required (required) + :param str domain: Name of the domain the identifiers belongs to within the project. +required (required) :param int limit: Indicates the number of resources to be returned. +required. :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. - :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminDescriptionEntityList + :param str filters: Indicates a list of filters passed as string. +optional. + :param str org: Optional, org key applied to the resource. + :return: AdminNamedEntityIdentifierList If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_description_entities2_with_http_info(resource_type, id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 + return self.list_launch_plan_ids_with_http_info(project, domain, **kwargs) # noqa: E501 else: - (data) = self.list_description_entities2_with_http_info(resource_type, id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 + (data) = self.list_launch_plan_ids_with_http_info(project, domain, **kwargs) # noqa: E501 return data - def list_description_entities2_with_http_info(self, resource_type, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. # noqa: E501 + def list_launch_plan_ids_with_http_info(self, project, domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of launch plan objects. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_description_entities2_with_http_info(resource_type, id_org, id_project, id_domain, id_name, async_req=True) + >>> thread = api.list_launch_plan_ids_with_http_info(project, domain, async_req=True) >>> result = thread.get() :param async_req bool - :param str resource_type: Identifies the specific type of resource that this identifier corresponds to. (required) - :param str id_org: Optional, org key applied to the resource. (required) - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) + :param str project: Name of the project that contains the identifiers. +required (required) + :param str domain: Name of the domain the identifiers belongs to within the project. +required (required) :param int limit: Indicates the number of resources to be returned. +required. :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. - :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminDescriptionEntityList + :param str filters: Indicates a list of filters passed as string. +optional. + :param str org: Optional, org key applied to the resource. + :return: AdminNamedEntityIdentifierList If the method is called asynchronously, returns the request thread. """ - all_params = ['resource_type', 'id_org', 'id_project', 'id_domain', 'id_name', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 + all_params = ['project', 'domain', 'limit', 'token', 'sort_by_key', 'sort_by_direction', 'filters', 'org'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -6006,56 +7571,40 @@ def list_description_entities2_with_http_info(self, resource_type, id_org, id_pr if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_description_entities2" % key + " to method list_launch_plan_ids" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'resource_type' is set - if ('resource_type' not in params or - params['resource_type'] is None): - raise ValueError("Missing the required parameter `resource_type` when calling `list_description_entities2`") # noqa: E501 - # verify the required parameter 'id_org' is set - if ('id_org' not in params or - params['id_org'] is None): - raise ValueError("Missing the required parameter `id_org` when calling `list_description_entities2`") # noqa: E501 - # verify the required parameter 'id_project' is set - if ('id_project' not in params or - params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `list_description_entities2`") # noqa: E501 - # verify the required parameter 'id_domain' is set - if ('id_domain' not in params or - params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `list_description_entities2`") # noqa: E501 - # verify the required parameter 'id_name' is set - if ('id_name' not in params or - params['id_name'] is None): - raise ValueError("Missing the required parameter `id_name` when calling `list_description_entities2`") # noqa: E501 + # verify the required parameter 'project' is set + if ('project' not in params or + params['project'] is None): + raise ValueError("Missing the required parameter `project` when calling `list_launch_plan_ids`") # noqa: E501 + # verify the required parameter 'domain' is set + if ('domain' not in params or + params['domain'] is None): + raise ValueError("Missing the required parameter `domain` when calling `list_launch_plan_ids`") # noqa: E501 collection_formats = {} path_params = {} - if 'resource_type' in params: - path_params['resource_type'] = params['resource_type'] # noqa: E501 - if 'id_org' in params: - path_params['id.org'] = params['id_org'] # noqa: E501 - if 'id_project' in params: - path_params['id.project'] = params['id_project'] # noqa: E501 - if 'id_domain' in params: - path_params['id.domain'] = params['id_domain'] # noqa: E501 - if 'id_name' in params: - path_params['id.name'] = params['id_name'] # noqa: E501 + if 'project' in params: + path_params['project'] = params['project'] # noqa: E501 + if 'domain' in params: + path_params['domain'] = params['domain'] # noqa: E501 query_params = [] if 'limit' in params: query_params.append(('limit', params['limit'])) # noqa: E501 if 'token' in params: query_params.append(('token', params['token'])) # noqa: E501 - if 'filters' in params: - query_params.append(('filters', params['filters'])) # noqa: E501 if 'sort_by_key' in params: query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 if 'sort_by_direction' in params: query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 + if 'filters' in params: + query_params.append(('filters', params['filters'])) # noqa: E501 + if 'org' in params: + query_params.append(('org', params['org'])) # noqa: E501 header_params = {} @@ -6075,14 +7624,14 @@ def list_description_entities2_with_http_info(self, resource_type, id_org, id_pr auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/description_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain}/{id.name}', 'GET', + '/api/v1/launch_plan_ids/{project}/{domain}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminDescriptionEntityList', # noqa: E501 + response_type='AdminNamedEntityIdentifierList', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -6090,61 +7639,57 @@ def list_description_entities2_with_http_info(self, resource_type, id_org, id_pr _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_description_entities3(self, resource_type, id_project, id_domain, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. # noqa: E501 + def list_launch_plan_ids2(self, org, project, domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of launch plan objects. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_description_entities3(resource_type, id_project, id_domain, async_req=True) + >>> thread = api.list_launch_plan_ids2(org, project, domain, async_req=True) >>> result = thread.get() :param async_req bool - :param str resource_type: Identifies the specific type of resource that this identifier corresponds to. (required) - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. - :param str id_org: Optional, org key applied to the resource. + :param str org: Optional, org key applied to the resource. (required) + :param str project: Name of the project that contains the identifiers. +required (required) + :param str domain: Name of the domain the identifiers belongs to within the project. +required (required) :param int limit: Indicates the number of resources to be returned. +required. :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. - :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminDescriptionEntityList + :param str filters: Indicates a list of filters passed as string. +optional. + :return: AdminNamedEntityIdentifierList If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_description_entities3_with_http_info(resource_type, id_project, id_domain, **kwargs) # noqa: E501 + return self.list_launch_plan_ids2_with_http_info(org, project, domain, **kwargs) # noqa: E501 else: - (data) = self.list_description_entities3_with_http_info(resource_type, id_project, id_domain, **kwargs) # noqa: E501 + (data) = self.list_launch_plan_ids2_with_http_info(org, project, domain, **kwargs) # noqa: E501 return data - def list_description_entities3_with_http_info(self, resource_type, id_project, id_domain, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. # noqa: E501 + def list_launch_plan_ids2_with_http_info(self, org, project, domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of launch plan objects. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_description_entities3_with_http_info(resource_type, id_project, id_domain, async_req=True) + >>> thread = api.list_launch_plan_ids2_with_http_info(org, project, domain, async_req=True) >>> result = thread.get() :param async_req bool - :param str resource_type: Identifies the specific type of resource that this identifier corresponds to. (required) - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. - :param str id_org: Optional, org key applied to the resource. + :param str org: Optional, org key applied to the resource. (required) + :param str project: Name of the project that contains the identifiers. +required (required) + :param str domain: Name of the domain the identifiers belongs to within the project. +required (required) :param int limit: Indicates the number of resources to be returned. +required. :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. - :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminDescriptionEntityList + :param str filters: Indicates a list of filters passed as string. +optional. + :return: AdminNamedEntityIdentifierList If the method is called asynchronously, returns the request thread. """ - all_params = ['resource_type', 'id_project', 'id_domain', 'id_name', 'id_org', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 + all_params = ['org', 'project', 'domain', 'limit', 'token', 'sort_by_key', 'sort_by_direction', 'filters'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -6155,48 +7700,44 @@ def list_description_entities3_with_http_info(self, resource_type, id_project, i if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_description_entities3" % key + " to method list_launch_plan_ids2" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'resource_type' is set - if ('resource_type' not in params or - params['resource_type'] is None): - raise ValueError("Missing the required parameter `resource_type` when calling `list_description_entities3`") # noqa: E501 - # verify the required parameter 'id_project' is set - if ('id_project' not in params or - params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `list_description_entities3`") # noqa: E501 - # verify the required parameter 'id_domain' is set - if ('id_domain' not in params or - params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `list_description_entities3`") # noqa: E501 + # verify the required parameter 'org' is set + if ('org' not in params or + params['org'] is None): + raise ValueError("Missing the required parameter `org` when calling `list_launch_plan_ids2`") # noqa: E501 + # verify the required parameter 'project' is set + if ('project' not in params or + params['project'] is None): + raise ValueError("Missing the required parameter `project` when calling `list_launch_plan_ids2`") # noqa: E501 + # verify the required parameter 'domain' is set + if ('domain' not in params or + params['domain'] is None): + raise ValueError("Missing the required parameter `domain` when calling `list_launch_plan_ids2`") # noqa: E501 collection_formats = {} path_params = {} - if 'resource_type' in params: - path_params['resource_type'] = params['resource_type'] # noqa: E501 - if 'id_project' in params: - path_params['id.project'] = params['id_project'] # noqa: E501 - if 'id_domain' in params: - path_params['id.domain'] = params['id_domain'] # noqa: E501 + if 'org' in params: + path_params['org'] = params['org'] # noqa: E501 + if 'project' in params: + path_params['project'] = params['project'] # noqa: E501 + if 'domain' in params: + path_params['domain'] = params['domain'] # noqa: E501 query_params = [] - if 'id_name' in params: - query_params.append(('id.name', params['id_name'])) # noqa: E501 - if 'id_org' in params: - query_params.append(('id.org', params['id_org'])) # noqa: E501 if 'limit' in params: query_params.append(('limit', params['limit'])) # noqa: E501 if 'token' in params: query_params.append(('token', params['token'])) # noqa: E501 - if 'filters' in params: - query_params.append(('filters', params['filters'])) # noqa: E501 if 'sort_by_key' in params: query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 if 'sort_by_direction' in params: query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 + if 'filters' in params: + query_params.append(('filters', params['filters'])) # noqa: E501 header_params = {} @@ -6216,14 +7757,14 @@ def list_description_entities3_with_http_info(self, resource_type, id_project, i auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/description_entities/{resource_type}/{id.project}/{id.domain}', 'GET', + '/api/v1/launch_plan_ids/org/{org}/{project}/{domain}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminDescriptionEntityList', # noqa: E501 + response_type='AdminNamedEntityIdentifierList', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -6231,61 +7772,59 @@ def list_description_entities3_with_http_info(self, resource_type, id_project, i _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_description_entities4(self, resource_type, id_org, id_project, id_domain, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. # noqa: E501 + def list_launch_plans(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_description_entities4(resource_type, id_org, id_project, id_domain, async_req=True) + >>> thread = api.list_launch_plans(id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str resource_type: Identifies the specific type of resource that this identifier corresponds to. (required) - :param str id_org: Optional, org key applied to the resource. (required) :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) + :param str id_org: Optional, org key applied to the resource. :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminDescriptionEntityList + :return: AdminLaunchPlanList If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_description_entities4_with_http_info(resource_type, id_org, id_project, id_domain, **kwargs) # noqa: E501 + return self.list_launch_plans_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 else: - (data) = self.list_description_entities4_with_http_info(resource_type, id_org, id_project, id_domain, **kwargs) # noqa: E501 + (data) = self.list_launch_plans_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 return data - def list_description_entities4_with_http_info(self, resource_type, id_org, id_project, id_domain, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.DescriptionEntity` definitions. # noqa: E501 + def list_launch_plans_with_http_info(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_description_entities4_with_http_info(resource_type, id_org, id_project, id_domain, async_req=True) + >>> thread = api.list_launch_plans_with_http_info(id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str resource_type: Identifies the specific type of resource that this identifier corresponds to. (required) - :param str id_org: Optional, org key applied to the resource. (required) :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) + :param str id_org: Optional, org key applied to the resource. :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminDescriptionEntityList + :return: AdminLaunchPlanList If the method is called asynchronously, returns the request thread. """ - all_params = ['resource_type', 'id_org', 'id_project', 'id_domain', 'id_name', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 + all_params = ['id_project', 'id_domain', 'id_name', 'id_org', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -6296,42 +7835,36 @@ def list_description_entities4_with_http_info(self, resource_type, id_org, id_pr if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_description_entities4" % key + " to method list_launch_plans" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'resource_type' is set - if ('resource_type' not in params or - params['resource_type'] is None): - raise ValueError("Missing the required parameter `resource_type` when calling `list_description_entities4`") # noqa: E501 - # verify the required parameter 'id_org' is set - if ('id_org' not in params or - params['id_org'] is None): - raise ValueError("Missing the required parameter `id_org` when calling `list_description_entities4`") # noqa: E501 # verify the required parameter 'id_project' is set if ('id_project' not in params or params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `list_description_entities4`") # noqa: E501 + raise ValueError("Missing the required parameter `id_project` when calling `list_launch_plans`") # noqa: E501 # verify the required parameter 'id_domain' is set if ('id_domain' not in params or params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `list_description_entities4`") # noqa: E501 + raise ValueError("Missing the required parameter `id_domain` when calling `list_launch_plans`") # noqa: E501 + # verify the required parameter 'id_name' is set + if ('id_name' not in params or + params['id_name'] is None): + raise ValueError("Missing the required parameter `id_name` when calling `list_launch_plans`") # noqa: E501 collection_formats = {} path_params = {} - if 'resource_type' in params: - path_params['resource_type'] = params['resource_type'] # noqa: E501 - if 'id_org' in params: - path_params['id.org'] = params['id_org'] # noqa: E501 if 'id_project' in params: path_params['id.project'] = params['id_project'] # noqa: E501 if 'id_domain' in params: path_params['id.domain'] = params['id_domain'] # noqa: E501 + if 'id_name' in params: + path_params['id.name'] = params['id_name'] # noqa: E501 query_params = [] - if 'id_name' in params: - query_params.append(('id.name', params['id_name'])) # noqa: E501 + if 'id_org' in params: + query_params.append(('id.org', params['id_org'])) # noqa: E501 if 'limit' in params: query_params.append(('limit', params['limit'])) # noqa: E501 if 'token' in params: @@ -6361,14 +7894,14 @@ def list_description_entities4_with_http_info(self, resource_type, id_org, id_pr auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/description_entities/{resource_type}/org/{id.org}/{id.project}/{id.domain}', 'GET', + '/api/v1/launch_plans/{id.project}/{id.domain}/{id.name}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminDescriptionEntityList', # noqa: E501 + response_type='AdminLaunchPlanList', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -6376,59 +7909,59 @@ def list_description_entities4_with_http_info(self, resource_type, id_org, id_pr _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_executions(self, id_project, id_domain, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 + def list_launch_plans2(self, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_executions(id_project, id_domain, async_req=True) + >>> thread = api.list_launch_plans2(id_org, id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool + :param str id_org: Optional, org key applied to the resource. (required) :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. - :param str id_org: Optional, org key applied to the resource. + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) :param int limit: Indicates the number of resources to be returned. +required. :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminExecutionList + :return: AdminLaunchPlanList If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_executions_with_http_info(id_project, id_domain, **kwargs) # noqa: E501 + return self.list_launch_plans2_with_http_info(id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 else: - (data) = self.list_executions_with_http_info(id_project, id_domain, **kwargs) # noqa: E501 + (data) = self.list_launch_plans2_with_http_info(id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 return data - def list_executions_with_http_info(self, id_project, id_domain, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 + def list_launch_plans2_with_http_info(self, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_executions_with_http_info(id_project, id_domain, async_req=True) + >>> thread = api.list_launch_plans2_with_http_info(id_org, id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool + :param str id_org: Optional, org key applied to the resource. (required) :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. - :param str id_org: Optional, org key applied to the resource. + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) :param int limit: Indicates the number of resources to be returned. +required. :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminExecutionList + :return: AdminLaunchPlanList If the method is called asynchronously, returns the request thread. """ - all_params = ['id_project', 'id_domain', 'id_name', 'id_org', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 + all_params = ['id_org', 'id_project', 'id_domain', 'id_name', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -6439,32 +7972,40 @@ def list_executions_with_http_info(self, id_project, id_domain, **kwargs): # no if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_executions" % key + " to method list_launch_plans2" % key ) params[key] = val del params['kwargs'] + # verify the required parameter 'id_org' is set + if ('id_org' not in params or + params['id_org'] is None): + raise ValueError("Missing the required parameter `id_org` when calling `list_launch_plans2`") # noqa: E501 # verify the required parameter 'id_project' is set if ('id_project' not in params or params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `list_executions`") # noqa: E501 + raise ValueError("Missing the required parameter `id_project` when calling `list_launch_plans2`") # noqa: E501 # verify the required parameter 'id_domain' is set if ('id_domain' not in params or params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `list_executions`") # noqa: E501 + raise ValueError("Missing the required parameter `id_domain` when calling `list_launch_plans2`") # noqa: E501 + # verify the required parameter 'id_name' is set + if ('id_name' not in params or + params['id_name'] is None): + raise ValueError("Missing the required parameter `id_name` when calling `list_launch_plans2`") # noqa: E501 collection_formats = {} path_params = {} + if 'id_org' in params: + path_params['id.org'] = params['id_org'] # noqa: E501 if 'id_project' in params: path_params['id.project'] = params['id_project'] # noqa: E501 if 'id_domain' in params: path_params['id.domain'] = params['id_domain'] # noqa: E501 + if 'id_name' in params: + path_params['id.name'] = params['id_name'] # noqa: E501 query_params = [] - if 'id_name' in params: - query_params.append(('id.name', params['id_name'])) # noqa: E501 - if 'id_org' in params: - query_params.append(('id.org', params['id_org'])) # noqa: E501 if 'limit' in params: query_params.append(('limit', params['limit'])) # noqa: E501 if 'token' in params: @@ -6494,14 +8035,14 @@ def list_executions_with_http_info(self, id_project, id_domain, **kwargs): # no auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/executions/{id.project}/{id.domain}', 'GET', + '/api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminExecutionList', # noqa: E501 + response_type='AdminLaunchPlanList', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -6509,59 +8050,59 @@ def list_executions_with_http_info(self, id_project, id_domain, **kwargs): # no _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_executions2(self, id_org, id_project, id_domain, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 + def list_launch_plans3(self, id_project, id_domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_executions2(id_org, id_project, id_domain, async_req=True) + >>> thread = api.list_launch_plans3(id_project, id_domain, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_org: Optional, org key applied to the resource. (required) :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. + :param str id_org: Optional, org key applied to the resource. :param int limit: Indicates the number of resources to be returned. +required. :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminExecutionList + :return: AdminLaunchPlanList If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_executions2_with_http_info(id_org, id_project, id_domain, **kwargs) # noqa: E501 + return self.list_launch_plans3_with_http_info(id_project, id_domain, **kwargs) # noqa: E501 else: - (data) = self.list_executions2_with_http_info(id_org, id_project, id_domain, **kwargs) # noqa: E501 + (data) = self.list_launch_plans3_with_http_info(id_project, id_domain, **kwargs) # noqa: E501 return data - def list_executions2_with_http_info(self, id_org, id_project, id_domain, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.Execution`. # noqa: E501 + def list_launch_plans3_with_http_info(self, id_project, id_domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_executions2_with_http_info(id_org, id_project, id_domain, async_req=True) + >>> thread = api.list_launch_plans3_with_http_info(id_project, id_domain, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_org: Optional, org key applied to the resource. (required) :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. + :param str id_org: Optional, org key applied to the resource. :param int limit: Indicates the number of resources to be returned. +required. :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminExecutionList + :return: AdminLaunchPlanList If the method is called asynchronously, returns the request thread. """ - all_params = ['id_org', 'id_project', 'id_domain', 'id_name', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 + all_params = ['id_project', 'id_domain', 'id_name', 'id_org', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -6572,28 +8113,22 @@ def list_executions2_with_http_info(self, id_org, id_project, id_domain, **kwarg if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_executions2" % key + " to method list_launch_plans3" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'id_org' is set - if ('id_org' not in params or - params['id_org'] is None): - raise ValueError("Missing the required parameter `id_org` when calling `list_executions2`") # noqa: E501 # verify the required parameter 'id_project' is set if ('id_project' not in params or params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `list_executions2`") # noqa: E501 + raise ValueError("Missing the required parameter `id_project` when calling `list_launch_plans3`") # noqa: E501 # verify the required parameter 'id_domain' is set if ('id_domain' not in params or params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `list_executions2`") # noqa: E501 + raise ValueError("Missing the required parameter `id_domain` when calling `list_launch_plans3`") # noqa: E501 collection_formats = {} path_params = {} - if 'id_org' in params: - path_params['id.org'] = params['id_org'] # noqa: E501 if 'id_project' in params: path_params['id.project'] = params['id_project'] # noqa: E501 if 'id_domain' in params: @@ -6602,6 +8137,8 @@ def list_executions2_with_http_info(self, id_org, id_project, id_domain, **kwarg query_params = [] if 'id_name' in params: query_params.append(('id.name', params['id_name'])) # noqa: E501 + if 'id_org' in params: + query_params.append(('id.org', params['id_org'])) # noqa: E501 if 'limit' in params: query_params.append(('limit', params['limit'])) # noqa: E501 if 'token' in params: @@ -6631,14 +8168,14 @@ def list_executions2_with_http_info(self, id_org, id_project, id_domain, **kwarg auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/executions/org/{id.org}/{id.project}/{id.domain}', 'GET', + '/api/v1/launch_plans/{id.project}/{id.domain}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminExecutionList', # noqa: E501 + response_type='AdminLaunchPlanList', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -6646,57 +8183,59 @@ def list_executions2_with_http_info(self, id_org, id_project, id_domain, **kwarg _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_launch_plan_ids(self, project, domain, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of launch plan objects. # noqa: E501 + def list_launch_plans4(self, id_org, id_project, id_domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_launch_plan_ids(project, domain, async_req=True) + >>> thread = api.list_launch_plans4(id_org, id_project, id_domain, async_req=True) >>> result = thread.get() :param async_req bool - :param str project: Name of the project that contains the identifiers. +required (required) - :param str domain: Name of the domain the identifiers belongs to within the project. +required (required) + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :param str filters: Indicates a list of filters passed as string. +optional. - :param str org: Optional, org key applied to the resource. - :return: AdminNamedEntityIdentifierList + :return: AdminLaunchPlanList If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_launch_plan_ids_with_http_info(project, domain, **kwargs) # noqa: E501 + return self.list_launch_plans4_with_http_info(id_org, id_project, id_domain, **kwargs) # noqa: E501 else: - (data) = self.list_launch_plan_ids_with_http_info(project, domain, **kwargs) # noqa: E501 + (data) = self.list_launch_plans4_with_http_info(id_org, id_project, id_domain, **kwargs) # noqa: E501 return data - def list_launch_plan_ids_with_http_info(self, project, domain, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of launch plan objects. # noqa: E501 + def list_launch_plans4_with_http_info(self, id_org, id_project, id_domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_launch_plan_ids_with_http_info(project, domain, async_req=True) + >>> thread = api.list_launch_plans4_with_http_info(id_org, id_project, id_domain, async_req=True) >>> result = thread.get() :param async_req bool - :param str project: Name of the project that contains the identifiers. +required (required) - :param str domain: Name of the domain the identifiers belongs to within the project. +required (required) + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :param str filters: Indicates a list of filters passed as string. +optional. - :param str org: Optional, org key applied to the resource. - :return: AdminNamedEntityIdentifierList + :return: AdminLaunchPlanList If the method is called asynchronously, returns the request thread. """ - all_params = ['project', 'domain', 'limit', 'token', 'sort_by_key', 'sort_by_direction', 'filters', 'org'] # noqa: E501 + all_params = ['id_org', 'id_project', 'id_domain', 'id_name', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -6707,40 +8246,46 @@ def list_launch_plan_ids_with_http_info(self, project, domain, **kwargs): # noq if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_launch_plan_ids" % key + " to method list_launch_plans4" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'project' is set - if ('project' not in params or - params['project'] is None): - raise ValueError("Missing the required parameter `project` when calling `list_launch_plan_ids`") # noqa: E501 - # verify the required parameter 'domain' is set - if ('domain' not in params or - params['domain'] is None): - raise ValueError("Missing the required parameter `domain` when calling `list_launch_plan_ids`") # noqa: E501 + # verify the required parameter 'id_org' is set + if ('id_org' not in params or + params['id_org'] is None): + raise ValueError("Missing the required parameter `id_org` when calling `list_launch_plans4`") # noqa: E501 + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `list_launch_plans4`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `list_launch_plans4`") # noqa: E501 collection_formats = {} path_params = {} - if 'project' in params: - path_params['project'] = params['project'] # noqa: E501 - if 'domain' in params: - path_params['domain'] = params['domain'] # noqa: E501 + if 'id_org' in params: + path_params['id.org'] = params['id_org'] # noqa: E501 + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 query_params = [] + if 'id_name' in params: + query_params.append(('id.name', params['id_name'])) # noqa: E501 if 'limit' in params: query_params.append(('limit', params['limit'])) # noqa: E501 if 'token' in params: query_params.append(('token', params['token'])) # noqa: E501 + if 'filters' in params: + query_params.append(('filters', params['filters'])) # noqa: E501 if 'sort_by_key' in params: query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 if 'sort_by_direction' in params: query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 - if 'filters' in params: - query_params.append(('filters', params['filters'])) # noqa: E501 - if 'org' in params: - query_params.append(('org', params['org'])) # noqa: E501 header_params = {} @@ -6760,14 +8305,14 @@ def list_launch_plan_ids_with_http_info(self, project, domain, **kwargs): # noq auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/launch_plan_ids/{project}/{domain}', 'GET', + '/api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminNamedEntityIdentifierList', # noqa: E501 + response_type='AdminLaunchPlanList', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -6775,57 +8320,45 @@ def list_launch_plan_ids_with_http_info(self, project, domain, **kwargs): # noq _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_launch_plan_ids2(self, org, project, domain, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of launch plan objects. # noqa: E501 + def list_matchable_attributes(self, **kwargs): # noqa: E501 + """Lists custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a specific resource type. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_launch_plan_ids2(org, project, domain, async_req=True) + >>> thread = api.list_matchable_attributes(async_req=True) >>> result = thread.get() :param async_req bool - :param str org: Optional, org key applied to the resource. (required) - :param str project: Name of the project that contains the identifiers. +required (required) - :param str domain: Name of the domain the identifiers belongs to within the project. +required (required) - :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. - :param str sort_by_key: Indicates an attribute to sort the response values. +required. - :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :param str filters: Indicates a list of filters passed as string. +optional. - :return: AdminNamedEntityIdentifierList + :param str resource_type: +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. + :param str org: Optional, org filter applied to list project requests. + :return: AdminListMatchableAttributesResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_launch_plan_ids2_with_http_info(org, project, domain, **kwargs) # noqa: E501 + return self.list_matchable_attributes_with_http_info(**kwargs) # noqa: E501 else: - (data) = self.list_launch_plan_ids2_with_http_info(org, project, domain, **kwargs) # noqa: E501 + (data) = self.list_matchable_attributes_with_http_info(**kwargs) # noqa: E501 return data - def list_launch_plan_ids2_with_http_info(self, org, project, domain, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of launch plan objects. # noqa: E501 + def list_matchable_attributes_with_http_info(self, **kwargs): # noqa: E501 + """Lists custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a specific resource type. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_launch_plan_ids2_with_http_info(org, project, domain, async_req=True) + >>> thread = api.list_matchable_attributes_with_http_info(async_req=True) >>> result = thread.get() :param async_req bool - :param str org: Optional, org key applied to the resource. (required) - :param str project: Name of the project that contains the identifiers. +required (required) - :param str domain: Name of the domain the identifiers belongs to within the project. +required (required) - :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. - :param str sort_by_key: Indicates an attribute to sort the response values. +required. - :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :param str filters: Indicates a list of filters passed as string. +optional. - :return: AdminNamedEntityIdentifierList + :param str resource_type: +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. + :param str org: Optional, org filter applied to list project requests. + :return: AdminListMatchableAttributesResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['org', 'project', 'domain', 'limit', 'token', 'sort_by_key', 'sort_by_direction', 'filters'] # noqa: E501 + all_params = ['resource_type', 'org'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -6836,44 +8369,20 @@ def list_launch_plan_ids2_with_http_info(self, org, project, domain, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_launch_plan_ids2" % key + " to method list_matchable_attributes" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'org' is set - if ('org' not in params or - params['org'] is None): - raise ValueError("Missing the required parameter `org` when calling `list_launch_plan_ids2`") # noqa: E501 - # verify the required parameter 'project' is set - if ('project' not in params or - params['project'] is None): - raise ValueError("Missing the required parameter `project` when calling `list_launch_plan_ids2`") # noqa: E501 - # verify the required parameter 'domain' is set - if ('domain' not in params or - params['domain'] is None): - raise ValueError("Missing the required parameter `domain` when calling `list_launch_plan_ids2`") # noqa: E501 collection_formats = {} path_params = {} - if 'org' in params: - path_params['org'] = params['org'] # noqa: E501 - if 'project' in params: - path_params['project'] = params['project'] # noqa: E501 - if 'domain' in params: - path_params['domain'] = params['domain'] # noqa: E501 query_params = [] - if 'limit' in params: - query_params.append(('limit', params['limit'])) # noqa: E501 - if 'token' in params: - query_params.append(('token', params['token'])) # noqa: E501 - if 'sort_by_key' in params: - query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 - if 'sort_by_direction' in params: - query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 - if 'filters' in params: - query_params.append(('filters', params['filters'])) # noqa: E501 + if 'resource_type' in params: + query_params.append(('resource_type', params['resource_type'])) # noqa: E501 + if 'org' in params: + query_params.append(('org', params['org'])) # noqa: E501 header_params = {} @@ -6893,14 +8402,14 @@ def list_launch_plan_ids2_with_http_info(self, org, project, domain, **kwargs): auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/launch_plan_ids/org/{org}/{project}/{domain}', 'GET', + '/api/v1/matchable_attributes', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminNamedEntityIdentifierList', # noqa: E501 + response_type='AdminListMatchableAttributesResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -6908,59 +8417,45 @@ def list_launch_plan_ids2_with_http_info(self, org, project, domain, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_launch_plans(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. # noqa: E501 + def list_matchable_attributes2(self, org, **kwargs): # noqa: E501 + """Lists custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a specific resource type. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_launch_plans(id_project, id_domain, id_name, async_req=True) + >>> thread = api.list_matchable_attributes2(org, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) - :param str id_org: Optional, org key applied to the resource. - :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. - :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. - :param str sort_by_key: Indicates an attribute to sort the response values. +required. - :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminLaunchPlanList + :param str org: Optional, org filter applied to list project requests. (required) + :param str resource_type: +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. + :return: AdminListMatchableAttributesResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_launch_plans_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 + return self.list_matchable_attributes2_with_http_info(org, **kwargs) # noqa: E501 else: - (data) = self.list_launch_plans_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 + (data) = self.list_matchable_attributes2_with_http_info(org, **kwargs) # noqa: E501 return data - def list_launch_plans_with_http_info(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. # noqa: E501 + def list_matchable_attributes2_with_http_info(self, org, **kwargs): # noqa: E501 + """Lists custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a specific resource type. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_launch_plans_with_http_info(id_project, id_domain, id_name, async_req=True) + >>> thread = api.list_matchable_attributes2_with_http_info(org, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) - :param str id_org: Optional, org key applied to the resource. - :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. - :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. - :param str sort_by_key: Indicates an attribute to sort the response values. +required. - :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminLaunchPlanList + :param str org: Optional, org filter applied to list project requests. (required) + :param str resource_type: +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. + :return: AdminListMatchableAttributesResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['id_project', 'id_domain', 'id_name', 'id_org', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 + all_params = ['org', 'resource_type'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -6971,46 +8466,24 @@ def list_launch_plans_with_http_info(self, id_project, id_domain, id_name, **kwa if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_launch_plans" % key + " to method list_matchable_attributes2" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'id_project' is set - if ('id_project' not in params or - params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `list_launch_plans`") # noqa: E501 - # verify the required parameter 'id_domain' is set - if ('id_domain' not in params or - params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `list_launch_plans`") # noqa: E501 - # verify the required parameter 'id_name' is set - if ('id_name' not in params or - params['id_name'] is None): - raise ValueError("Missing the required parameter `id_name` when calling `list_launch_plans`") # noqa: E501 + # verify the required parameter 'org' is set + if ('org' not in params or + params['org'] is None): + raise ValueError("Missing the required parameter `org` when calling `list_matchable_attributes2`") # noqa: E501 collection_formats = {} path_params = {} - if 'id_project' in params: - path_params['id.project'] = params['id_project'] # noqa: E501 - if 'id_domain' in params: - path_params['id.domain'] = params['id_domain'] # noqa: E501 - if 'id_name' in params: - path_params['id.name'] = params['id_name'] # noqa: E501 + if 'org' in params: + path_params['org'] = params['org'] # noqa: E501 query_params = [] - if 'id_org' in params: - query_params.append(('id.org', params['id_org'])) # noqa: E501 - if 'limit' in params: - query_params.append(('limit', params['limit'])) # noqa: E501 - if 'token' in params: - query_params.append(('token', params['token'])) # noqa: E501 - if 'filters' in params: - query_params.append(('filters', params['filters'])) # noqa: E501 - if 'sort_by_key' in params: - query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 - if 'sort_by_direction' in params: - query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 + if 'resource_type' in params: + query_params.append(('resource_type', params['resource_type'])) # noqa: E501 header_params = {} @@ -7030,14 +8503,14 @@ def list_launch_plans_with_http_info(self, id_project, id_domain, id_name, **kwa auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/launch_plans/{id.project}/{id.domain}/{id.name}', 'GET', + '/api/v1/matchable_attributes/org/{org}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminLaunchPlanList', # noqa: E501 + response_type='AdminListMatchableAttributesResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -7045,59 +8518,59 @@ def list_launch_plans_with_http_info(self, id_project, id_domain, id_name, **kwa _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_launch_plans2(self, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. # noqa: E501 + def list_named_entities(self, resource_type, project, domain, **kwargs): # noqa: E501 + """Returns a list of :ref:`ref_flyteidl.admin.NamedEntity` objects. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_launch_plans2(id_org, id_project, id_domain, id_name, async_req=True) + >>> thread = api.list_named_entities(resource_type, project, domain, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_org: Optional, org key applied to the resource. (required) - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) - :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. - :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str resource_type: Resource type of the metadata to query. One of Task, Workflow or LaunchPlan. +required (required) + :param str project: Name of the project that contains the identifiers. +required (required) + :param str domain: Name of the domain the identifiers belongs to within the project. (required) + :param int limit: Indicates the number of resources to be returned. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminLaunchPlanList + :param str filters: Indicates a list of filters passed as string. +optional. + :param str org: Optional, org key applied to the resource. + :return: AdminNamedEntityList If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_launch_plans2_with_http_info(id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 + return self.list_named_entities_with_http_info(resource_type, project, domain, **kwargs) # noqa: E501 else: - (data) = self.list_launch_plans2_with_http_info(id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 + (data) = self.list_named_entities_with_http_info(resource_type, project, domain, **kwargs) # noqa: E501 return data - def list_launch_plans2_with_http_info(self, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. # noqa: E501 + def list_named_entities_with_http_info(self, resource_type, project, domain, **kwargs): # noqa: E501 + """Returns a list of :ref:`ref_flyteidl.admin.NamedEntity` objects. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_launch_plans2_with_http_info(id_org, id_project, id_domain, id_name, async_req=True) + >>> thread = api.list_named_entities_with_http_info(resource_type, project, domain, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_org: Optional, org key applied to the resource. (required) - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) - :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. - :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str resource_type: Resource type of the metadata to query. One of Task, Workflow or LaunchPlan. +required (required) + :param str project: Name of the project that contains the identifiers. +required (required) + :param str domain: Name of the domain the identifiers belongs to within the project. (required) + :param int limit: Indicates the number of resources to be returned. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminLaunchPlanList + :param str filters: Indicates a list of filters passed as string. +optional. + :param str org: Optional, org key applied to the resource. + :return: AdminNamedEntityList If the method is called asynchronously, returns the request thread. """ - all_params = ['id_org', 'id_project', 'id_domain', 'id_name', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 + all_params = ['resource_type', 'project', 'domain', 'limit', 'token', 'sort_by_key', 'sort_by_direction', 'filters', 'org'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -7108,50 +8581,46 @@ def list_launch_plans2_with_http_info(self, id_org, id_project, id_domain, id_na if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_launch_plans2" % key + " to method list_named_entities" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'id_org' is set - if ('id_org' not in params or - params['id_org'] is None): - raise ValueError("Missing the required parameter `id_org` when calling `list_launch_plans2`") # noqa: E501 - # verify the required parameter 'id_project' is set - if ('id_project' not in params or - params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `list_launch_plans2`") # noqa: E501 - # verify the required parameter 'id_domain' is set - if ('id_domain' not in params or - params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `list_launch_plans2`") # noqa: E501 - # verify the required parameter 'id_name' is set - if ('id_name' not in params or - params['id_name'] is None): - raise ValueError("Missing the required parameter `id_name` when calling `list_launch_plans2`") # noqa: E501 + # verify the required parameter 'resource_type' is set + if ('resource_type' not in params or + params['resource_type'] is None): + raise ValueError("Missing the required parameter `resource_type` when calling `list_named_entities`") # noqa: E501 + # verify the required parameter 'project' is set + if ('project' not in params or + params['project'] is None): + raise ValueError("Missing the required parameter `project` when calling `list_named_entities`") # noqa: E501 + # verify the required parameter 'domain' is set + if ('domain' not in params or + params['domain'] is None): + raise ValueError("Missing the required parameter `domain` when calling `list_named_entities`") # noqa: E501 collection_formats = {} path_params = {} - if 'id_org' in params: - path_params['id.org'] = params['id_org'] # noqa: E501 - if 'id_project' in params: - path_params['id.project'] = params['id_project'] # noqa: E501 - if 'id_domain' in params: - path_params['id.domain'] = params['id_domain'] # noqa: E501 - if 'id_name' in params: - path_params['id.name'] = params['id_name'] # noqa: E501 + if 'resource_type' in params: + path_params['resource_type'] = params['resource_type'] # noqa: E501 + if 'project' in params: + path_params['project'] = params['project'] # noqa: E501 + if 'domain' in params: + path_params['domain'] = params['domain'] # noqa: E501 query_params = [] if 'limit' in params: query_params.append(('limit', params['limit'])) # noqa: E501 if 'token' in params: query_params.append(('token', params['token'])) # noqa: E501 - if 'filters' in params: - query_params.append(('filters', params['filters'])) # noqa: E501 if 'sort_by_key' in params: query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 if 'sort_by_direction' in params: query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 + if 'filters' in params: + query_params.append(('filters', params['filters'])) # noqa: E501 + if 'org' in params: + query_params.append(('org', params['org'])) # noqa: E501 header_params = {} @@ -7171,14 +8640,14 @@ def list_launch_plans2_with_http_info(self, id_org, id_project, id_domain, id_na auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}/{id.name}', 'GET', + '/api/v1/named_entities/{resource_type}/{project}/{domain}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminLaunchPlanList', # noqa: E501 + response_type='AdminNamedEntityList', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -7186,59 +8655,59 @@ def list_launch_plans2_with_http_info(self, id_org, id_project, id_domain, id_na _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_launch_plans3(self, id_project, id_domain, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. # noqa: E501 + def list_named_entities2(self, resource_type, org, project, domain, **kwargs): # noqa: E501 + """Returns a list of :ref:`ref_flyteidl.admin.NamedEntity` objects. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_launch_plans3(id_project, id_domain, async_req=True) + >>> thread = api.list_named_entities2(resource_type, org, project, domain, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. - :param str id_org: Optional, org key applied to the resource. - :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. - :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str resource_type: Resource type of the metadata to query. One of Task, Workflow or LaunchPlan. +required (required) + :param str org: Optional, org key applied to the resource. (required) + :param str project: Name of the project that contains the identifiers. +required (required) + :param str domain: Name of the domain the identifiers belongs to within the project. (required) + :param int limit: Indicates the number of resources to be returned. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminLaunchPlanList + :param str filters: Indicates a list of filters passed as string. +optional. + :return: AdminNamedEntityList If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_launch_plans3_with_http_info(id_project, id_domain, **kwargs) # noqa: E501 + return self.list_named_entities2_with_http_info(resource_type, org, project, domain, **kwargs) # noqa: E501 else: - (data) = self.list_launch_plans3_with_http_info(id_project, id_domain, **kwargs) # noqa: E501 + (data) = self.list_named_entities2_with_http_info(resource_type, org, project, domain, **kwargs) # noqa: E501 return data - def list_launch_plans3_with_http_info(self, id_project, id_domain, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. # noqa: E501 + def list_named_entities2_with_http_info(self, resource_type, org, project, domain, **kwargs): # noqa: E501 + """Returns a list of :ref:`ref_flyteidl.admin.NamedEntity` objects. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_launch_plans3_with_http_info(id_project, id_domain, async_req=True) + >>> thread = api.list_named_entities2_with_http_info(resource_type, org, project, domain, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. - :param str id_org: Optional, org key applied to the resource. - :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. - :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str resource_type: Resource type of the metadata to query. One of Task, Workflow or LaunchPlan. +required (required) + :param str org: Optional, org key applied to the resource. (required) + :param str project: Name of the project that contains the identifiers. +required (required) + :param str domain: Name of the domain the identifiers belongs to within the project. (required) + :param int limit: Indicates the number of resources to be returned. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminLaunchPlanList + :param str filters: Indicates a list of filters passed as string. +optional. + :return: AdminNamedEntityList If the method is called asynchronously, returns the request thread. """ - all_params = ['id_project', 'id_domain', 'id_name', 'id_org', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 + all_params = ['resource_type', 'org', 'project', 'domain', 'limit', 'token', 'sort_by_key', 'sort_by_direction', 'filters'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -7249,42 +8718,50 @@ def list_launch_plans3_with_http_info(self, id_project, id_domain, **kwargs): # if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_launch_plans3" % key + " to method list_named_entities2" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'id_project' is set - if ('id_project' not in params or - params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `list_launch_plans3`") # noqa: E501 - # verify the required parameter 'id_domain' is set - if ('id_domain' not in params or - params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `list_launch_plans3`") # noqa: E501 + # verify the required parameter 'resource_type' is set + if ('resource_type' not in params or + params['resource_type'] is None): + raise ValueError("Missing the required parameter `resource_type` when calling `list_named_entities2`") # noqa: E501 + # verify the required parameter 'org' is set + if ('org' not in params or + params['org'] is None): + raise ValueError("Missing the required parameter `org` when calling `list_named_entities2`") # noqa: E501 + # verify the required parameter 'project' is set + if ('project' not in params or + params['project'] is None): + raise ValueError("Missing the required parameter `project` when calling `list_named_entities2`") # noqa: E501 + # verify the required parameter 'domain' is set + if ('domain' not in params or + params['domain'] is None): + raise ValueError("Missing the required parameter `domain` when calling `list_named_entities2`") # noqa: E501 collection_formats = {} path_params = {} - if 'id_project' in params: - path_params['id.project'] = params['id_project'] # noqa: E501 - if 'id_domain' in params: - path_params['id.domain'] = params['id_domain'] # noqa: E501 + if 'resource_type' in params: + path_params['resource_type'] = params['resource_type'] # noqa: E501 + if 'org' in params: + path_params['org'] = params['org'] # noqa: E501 + if 'project' in params: + path_params['project'] = params['project'] # noqa: E501 + if 'domain' in params: + path_params['domain'] = params['domain'] # noqa: E501 query_params = [] - if 'id_name' in params: - query_params.append(('id.name', params['id_name'])) # noqa: E501 - if 'id_org' in params: - query_params.append(('id.org', params['id_org'])) # noqa: E501 if 'limit' in params: query_params.append(('limit', params['limit'])) # noqa: E501 if 'token' in params: query_params.append(('token', params['token'])) # noqa: E501 - if 'filters' in params: - query_params.append(('filters', params['filters'])) # noqa: E501 if 'sort_by_key' in params: query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 if 'sort_by_direction' in params: query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 + if 'filters' in params: + query_params.append(('filters', params['filters'])) # noqa: E501 header_params = {} @@ -7304,14 +8781,14 @@ def list_launch_plans3_with_http_info(self, id_project, id_domain, **kwargs): # auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/launch_plans/{id.project}/{id.domain}', 'GET', + '/api/v1/named_entities/{resource_type}/org/{org}/{project}/{domain}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminLaunchPlanList', # noqa: E501 + response_type='AdminNamedEntityList', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -7319,59 +8796,61 @@ def list_launch_plans3_with_http_info(self, id_project, id_domain, **kwargs): # _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_launch_plans4(self, id_org, id_project, id_domain, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. # noqa: E501 + def list_node_executions(self, workflow_execution_id_project, workflow_execution_id_domain, workflow_execution_id_name, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_launch_plans4(id_org, id_project, id_domain, async_req=True) + >>> thread = api.list_node_executions(workflow_execution_id_project, workflow_execution_id_domain, workflow_execution_id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_org: Optional, org key applied to the resource. (required) - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. + :param str workflow_execution_id_project: Name of the project the resource belongs to. (required) + :param str workflow_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str workflow_execution_id_name: User or system provided value for the resource. (required) + :param str workflow_execution_id_org: Optional, org key applied to the resource. :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + :param str token: :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminLaunchPlanList + :param str unique_parent_id: Unique identifier of the parent node in the execution +optional. + :return: AdminNodeExecutionList If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_launch_plans4_with_http_info(id_org, id_project, id_domain, **kwargs) # noqa: E501 + return self.list_node_executions_with_http_info(workflow_execution_id_project, workflow_execution_id_domain, workflow_execution_id_name, **kwargs) # noqa: E501 else: - (data) = self.list_launch_plans4_with_http_info(id_org, id_project, id_domain, **kwargs) # noqa: E501 + (data) = self.list_node_executions_with_http_info(workflow_execution_id_project, workflow_execution_id_domain, workflow_execution_id_name, **kwargs) # noqa: E501 return data - def list_launch_plans4_with_http_info(self, id_org, id_project, id_domain, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.LaunchPlan` definitions. # noqa: E501 + def list_node_executions_with_http_info(self, workflow_execution_id_project, workflow_execution_id_domain, workflow_execution_id_name, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_launch_plans4_with_http_info(id_org, id_project, id_domain, async_req=True) + >>> thread = api.list_node_executions_with_http_info(workflow_execution_id_project, workflow_execution_id_domain, workflow_execution_id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_org: Optional, org key applied to the resource. (required) - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. + :param str workflow_execution_id_project: Name of the project the resource belongs to. (required) + :param str workflow_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str workflow_execution_id_name: User or system provided value for the resource. (required) + :param str workflow_execution_id_org: Optional, org key applied to the resource. :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + :param str token: :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminLaunchPlanList + :param str unique_parent_id: Unique identifier of the parent node in the execution +optional. + :return: AdminNodeExecutionList If the method is called asynchronously, returns the request thread. """ - all_params = ['id_org', 'id_project', 'id_domain', 'id_name', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 + all_params = ['workflow_execution_id_project', 'workflow_execution_id_domain', 'workflow_execution_id_name', 'workflow_execution_id_org', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction', 'unique_parent_id'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -7382,36 +8861,36 @@ def list_launch_plans4_with_http_info(self, id_org, id_project, id_domain, **kwa if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_launch_plans4" % key + " to method list_node_executions" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'id_org' is set - if ('id_org' not in params or - params['id_org'] is None): - raise ValueError("Missing the required parameter `id_org` when calling `list_launch_plans4`") # noqa: E501 - # verify the required parameter 'id_project' is set - if ('id_project' not in params or - params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `list_launch_plans4`") # noqa: E501 - # verify the required parameter 'id_domain' is set - if ('id_domain' not in params or - params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `list_launch_plans4`") # noqa: E501 + # verify the required parameter 'workflow_execution_id_project' is set + if ('workflow_execution_id_project' not in params or + params['workflow_execution_id_project'] is None): + raise ValueError("Missing the required parameter `workflow_execution_id_project` when calling `list_node_executions`") # noqa: E501 + # verify the required parameter 'workflow_execution_id_domain' is set + if ('workflow_execution_id_domain' not in params or + params['workflow_execution_id_domain'] is None): + raise ValueError("Missing the required parameter `workflow_execution_id_domain` when calling `list_node_executions`") # noqa: E501 + # verify the required parameter 'workflow_execution_id_name' is set + if ('workflow_execution_id_name' not in params or + params['workflow_execution_id_name'] is None): + raise ValueError("Missing the required parameter `workflow_execution_id_name` when calling `list_node_executions`") # noqa: E501 collection_formats = {} path_params = {} - if 'id_org' in params: - path_params['id.org'] = params['id_org'] # noqa: E501 - if 'id_project' in params: - path_params['id.project'] = params['id_project'] # noqa: E501 - if 'id_domain' in params: - path_params['id.domain'] = params['id_domain'] # noqa: E501 + if 'workflow_execution_id_project' in params: + path_params['workflow_execution_id.project'] = params['workflow_execution_id_project'] # noqa: E501 + if 'workflow_execution_id_domain' in params: + path_params['workflow_execution_id.domain'] = params['workflow_execution_id_domain'] # noqa: E501 + if 'workflow_execution_id_name' in params: + path_params['workflow_execution_id.name'] = params['workflow_execution_id_name'] # noqa: E501 query_params = [] - if 'id_name' in params: - query_params.append(('id.name', params['id_name'])) # noqa: E501 + if 'workflow_execution_id_org' in params: + query_params.append(('workflow_execution_id.org', params['workflow_execution_id_org'])) # noqa: E501 if 'limit' in params: query_params.append(('limit', params['limit'])) # noqa: E501 if 'token' in params: @@ -7422,6 +8901,8 @@ def list_launch_plans4_with_http_info(self, id_org, id_project, id_domain, **kwa query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 if 'sort_by_direction' in params: query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 + if 'unique_parent_id' in params: + query_params.append(('unique_parent_id', params['unique_parent_id'])) # noqa: E501 header_params = {} @@ -7441,14 +8922,14 @@ def list_launch_plans4_with_http_info(self, id_org, id_project, id_domain, **kwa auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/launch_plans/org/{id.org}/{id.project}/{id.domain}', 'GET', + '/api/v1/node_executions/{workflow_execution_id.project}/{workflow_execution_id.domain}/{workflow_execution_id.name}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminLaunchPlanList', # noqa: E501 + response_type='AdminNodeExecutionList', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -7456,43 +8937,61 @@ def list_launch_plans4_with_http_info(self, id_org, id_project, id_domain, **kwa _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_matchable_attributes(self, **kwargs): # noqa: E501 - """Lists custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a specific resource type. # noqa: E501 + def list_node_executions2(self, workflow_execution_id_org, workflow_execution_id_project, workflow_execution_id_domain, workflow_execution_id_name, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_matchable_attributes(async_req=True) + >>> thread = api.list_node_executions2(workflow_execution_id_org, workflow_execution_id_project, workflow_execution_id_domain, workflow_execution_id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str resource_type: +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. - :return: AdminListMatchableAttributesResponse + :param str workflow_execution_id_org: Optional, org key applied to the resource. (required) + :param str workflow_execution_id_project: Name of the project the resource belongs to. (required) + :param str workflow_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str workflow_execution_id_name: User or system provided value for the resource. (required) + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :param str unique_parent_id: Unique identifier of the parent node in the execution +optional. + :return: AdminNodeExecutionList If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_matchable_attributes_with_http_info(**kwargs) # noqa: E501 + return self.list_node_executions2_with_http_info(workflow_execution_id_org, workflow_execution_id_project, workflow_execution_id_domain, workflow_execution_id_name, **kwargs) # noqa: E501 else: - (data) = self.list_matchable_attributes_with_http_info(**kwargs) # noqa: E501 + (data) = self.list_node_executions2_with_http_info(workflow_execution_id_org, workflow_execution_id_project, workflow_execution_id_domain, workflow_execution_id_name, **kwargs) # noqa: E501 return data - def list_matchable_attributes_with_http_info(self, **kwargs): # noqa: E501 - """Lists custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a specific resource type. # noqa: E501 + def list_node_executions2_with_http_info(self, workflow_execution_id_org, workflow_execution_id_project, workflow_execution_id_domain, workflow_execution_id_name, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_matchable_attributes_with_http_info(async_req=True) + >>> thread = api.list_node_executions2_with_http_info(workflow_execution_id_org, workflow_execution_id_project, workflow_execution_id_domain, workflow_execution_id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str resource_type: +required. - TASK_RESOURCE: Applies to customizable task resource requests and limits. - CLUSTER_RESOURCE: Applies to configuring templated kubernetes cluster resources. - EXECUTION_QUEUE: Configures task and dynamic task execution queue assignment. - EXECUTION_CLUSTER_LABEL: Configures the K8s cluster label to be used for execution to be run - QUALITY_OF_SERVICE_SPECIFICATION: Configures default quality of service when undefined in an execution spec. - PLUGIN_OVERRIDE: Selects configurable plugin implementation behavior for a given task type. - WORKFLOW_EXECUTION_CONFIG: Adds defaults for customizable workflow-execution specifications and overrides. - CLUSTER_ASSIGNMENT: Controls how to select an available cluster on which this execution should run. - :return: AdminListMatchableAttributesResponse + :param str workflow_execution_id_org: Optional, org key applied to the resource. (required) + :param str workflow_execution_id_project: Name of the project the resource belongs to. (required) + :param str workflow_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str workflow_execution_id_name: User or system provided value for the resource. (required) + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str sort_by_key: Indicates an attribute to sort the response values. +required. + :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. + :param str unique_parent_id: Unique identifier of the parent node in the execution +optional. + :return: AdminNodeExecutionList If the method is called asynchronously, returns the request thread. """ - all_params = ['resource_type'] # noqa: E501 + all_params = ['workflow_execution_id_org', 'workflow_execution_id_project', 'workflow_execution_id_domain', 'workflow_execution_id_name', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction', 'unique_parent_id'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -7503,18 +9002,52 @@ def list_matchable_attributes_with_http_info(self, **kwargs): # noqa: E501 if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_matchable_attributes" % key + " to method list_node_executions2" % key ) params[key] = val del params['kwargs'] + # verify the required parameter 'workflow_execution_id_org' is set + if ('workflow_execution_id_org' not in params or + params['workflow_execution_id_org'] is None): + raise ValueError("Missing the required parameter `workflow_execution_id_org` when calling `list_node_executions2`") # noqa: E501 + # verify the required parameter 'workflow_execution_id_project' is set + if ('workflow_execution_id_project' not in params or + params['workflow_execution_id_project'] is None): + raise ValueError("Missing the required parameter `workflow_execution_id_project` when calling `list_node_executions2`") # noqa: E501 + # verify the required parameter 'workflow_execution_id_domain' is set + if ('workflow_execution_id_domain' not in params or + params['workflow_execution_id_domain'] is None): + raise ValueError("Missing the required parameter `workflow_execution_id_domain` when calling `list_node_executions2`") # noqa: E501 + # verify the required parameter 'workflow_execution_id_name' is set + if ('workflow_execution_id_name' not in params or + params['workflow_execution_id_name'] is None): + raise ValueError("Missing the required parameter `workflow_execution_id_name` when calling `list_node_executions2`") # noqa: E501 collection_formats = {} path_params = {} + if 'workflow_execution_id_org' in params: + path_params['workflow_execution_id.org'] = params['workflow_execution_id_org'] # noqa: E501 + if 'workflow_execution_id_project' in params: + path_params['workflow_execution_id.project'] = params['workflow_execution_id_project'] # noqa: E501 + if 'workflow_execution_id_domain' in params: + path_params['workflow_execution_id.domain'] = params['workflow_execution_id_domain'] # noqa: E501 + if 'workflow_execution_id_name' in params: + path_params['workflow_execution_id.name'] = params['workflow_execution_id_name'] # noqa: E501 query_params = [] - if 'resource_type' in params: - query_params.append(('resource_type', params['resource_type'])) # noqa: E501 + if 'limit' in params: + query_params.append(('limit', params['limit'])) # noqa: E501 + if 'token' in params: + query_params.append(('token', params['token'])) # noqa: E501 + if 'filters' in params: + query_params.append(('filters', params['filters'])) # noqa: E501 + if 'sort_by_key' in params: + query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 + if 'sort_by_direction' in params: + query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 + if 'unique_parent_id' in params: + query_params.append(('unique_parent_id', params['unique_parent_id'])) # noqa: E501 header_params = {} @@ -7534,14 +9067,14 @@ def list_matchable_attributes_with_http_info(self, **kwargs): # noqa: E501 auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/matchable_attributes', 'GET', + '/api/v1/node_executions/org/{workflow_execution_id.org}/{workflow_execution_id.project}/{workflow_execution_id.domain}/{workflow_execution_id.name}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminListMatchableAttributesResponse', # noqa: E501 + response_type='AdminNodeExecutionList', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -7549,59 +9082,75 @@ def list_matchable_attributes_with_http_info(self, **kwargs): # noqa: E501 _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_named_entities(self, resource_type, project, domain, **kwargs): # noqa: E501 - """Returns a list of :ref:`ref_flyteidl.admin.NamedEntity` objects. # noqa: E501 + def list_node_executions_for_task(self, task_execution_id_node_execution_id_execution_id_project, task_execution_id_node_execution_id_execution_id_domain, task_execution_id_node_execution_id_execution_id_name, task_execution_id_node_execution_id_node_id, task_execution_id_task_id_project, task_execution_id_task_id_domain, task_execution_id_task_id_name, task_execution_id_task_id_version, task_execution_id_retry_attempt, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution` launched by the reference :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_named_entities(resource_type, project, domain, async_req=True) + >>> thread = api.list_node_executions_for_task(task_execution_id_node_execution_id_execution_id_project, task_execution_id_node_execution_id_execution_id_domain, task_execution_id_node_execution_id_execution_id_name, task_execution_id_node_execution_id_node_id, task_execution_id_task_id_project, task_execution_id_task_id_domain, task_execution_id_task_id_name, task_execution_id_task_id_version, task_execution_id_retry_attempt, async_req=True) >>> result = thread.get() :param async_req bool - :param str resource_type: Resource type of the metadata to query. One of Task, Workflow or LaunchPlan. +required (required) - :param str project: Name of the project that contains the identifiers. +required (required) - :param str domain: Name of the domain the identifiers belongs to within the project. (required) - :param int limit: Indicates the number of resources to be returned. - :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str task_execution_id_node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) + :param str task_execution_id_node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str task_execution_id_node_execution_id_execution_id_name: User or system provided value for the resource. (required) + :param str task_execution_id_node_execution_id_node_id: (required) + :param str task_execution_id_task_id_project: Name of the project the resource belongs to. (required) + :param str task_execution_id_task_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str task_execution_id_task_id_name: User provided value for the resource. (required) + :param str task_execution_id_task_id_version: Specific version of the resource. (required) + :param int task_execution_id_retry_attempt: (required) + :param str task_execution_id_task_id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :param str task_execution_id_task_id_org: Optional, org key applied to the resource. + :param str task_execution_id_node_execution_id_execution_id_org: Optional, org key applied to the resource. + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, the, server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :param str filters: Indicates a list of filters passed as string. +optional. - :param str org: Optional, org key applied to the resource. - :return: AdminNamedEntityList + :return: AdminNodeExecutionList If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_named_entities_with_http_info(resource_type, project, domain, **kwargs) # noqa: E501 + return self.list_node_executions_for_task_with_http_info(task_execution_id_node_execution_id_execution_id_project, task_execution_id_node_execution_id_execution_id_domain, task_execution_id_node_execution_id_execution_id_name, task_execution_id_node_execution_id_node_id, task_execution_id_task_id_project, task_execution_id_task_id_domain, task_execution_id_task_id_name, task_execution_id_task_id_version, task_execution_id_retry_attempt, **kwargs) # noqa: E501 else: - (data) = self.list_named_entities_with_http_info(resource_type, project, domain, **kwargs) # noqa: E501 + (data) = self.list_node_executions_for_task_with_http_info(task_execution_id_node_execution_id_execution_id_project, task_execution_id_node_execution_id_execution_id_domain, task_execution_id_node_execution_id_execution_id_name, task_execution_id_node_execution_id_node_id, task_execution_id_task_id_project, task_execution_id_task_id_domain, task_execution_id_task_id_name, task_execution_id_task_id_version, task_execution_id_retry_attempt, **kwargs) # noqa: E501 return data - def list_named_entities_with_http_info(self, resource_type, project, domain, **kwargs): # noqa: E501 - """Returns a list of :ref:`ref_flyteidl.admin.NamedEntity` objects. # noqa: E501 + def list_node_executions_for_task_with_http_info(self, task_execution_id_node_execution_id_execution_id_project, task_execution_id_node_execution_id_execution_id_domain, task_execution_id_node_execution_id_execution_id_name, task_execution_id_node_execution_id_node_id, task_execution_id_task_id_project, task_execution_id_task_id_domain, task_execution_id_task_id_name, task_execution_id_task_id_version, task_execution_id_retry_attempt, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution` launched by the reference :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_named_entities_with_http_info(resource_type, project, domain, async_req=True) + >>> thread = api.list_node_executions_for_task_with_http_info(task_execution_id_node_execution_id_execution_id_project, task_execution_id_node_execution_id_execution_id_domain, task_execution_id_node_execution_id_execution_id_name, task_execution_id_node_execution_id_node_id, task_execution_id_task_id_project, task_execution_id_task_id_domain, task_execution_id_task_id_name, task_execution_id_task_id_version, task_execution_id_retry_attempt, async_req=True) >>> result = thread.get() :param async_req bool - :param str resource_type: Resource type of the metadata to query. One of Task, Workflow or LaunchPlan. +required (required) - :param str project: Name of the project that contains the identifiers. +required (required) - :param str domain: Name of the domain the identifiers belongs to within the project. (required) - :param int limit: Indicates the number of resources to be returned. - :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str task_execution_id_node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) + :param str task_execution_id_node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str task_execution_id_node_execution_id_execution_id_name: User or system provided value for the resource. (required) + :param str task_execution_id_node_execution_id_node_id: (required) + :param str task_execution_id_task_id_project: Name of the project the resource belongs to. (required) + :param str task_execution_id_task_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str task_execution_id_task_id_name: User provided value for the resource. (required) + :param str task_execution_id_task_id_version: Specific version of the resource. (required) + :param int task_execution_id_retry_attempt: (required) + :param str task_execution_id_task_id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :param str task_execution_id_task_id_org: Optional, org key applied to the resource. + :param str task_execution_id_node_execution_id_execution_id_org: Optional, org key applied to the resource. + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, the, server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :param str filters: Indicates a list of filters passed as string. +optional. - :param str org: Optional, org key applied to the resource. - :return: AdminNamedEntityList + :return: AdminNodeExecutionList If the method is called asynchronously, returns the request thread. """ - all_params = ['resource_type', 'project', 'domain', 'limit', 'token', 'sort_by_key', 'sort_by_direction', 'filters', 'org'] # noqa: E501 + all_params = ['task_execution_id_node_execution_id_execution_id_project', 'task_execution_id_node_execution_id_execution_id_domain', 'task_execution_id_node_execution_id_execution_id_name', 'task_execution_id_node_execution_id_node_id', 'task_execution_id_task_id_project', 'task_execution_id_task_id_domain', 'task_execution_id_task_id_name', 'task_execution_id_task_id_version', 'task_execution_id_retry_attempt', 'task_execution_id_task_id_resource_type', 'task_execution_id_task_id_org', 'task_execution_id_node_execution_id_execution_id_org', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -7612,46 +9161,86 @@ def list_named_entities_with_http_info(self, resource_type, project, domain, **k if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_named_entities" % key + " to method list_node_executions_for_task" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'resource_type' is set - if ('resource_type' not in params or - params['resource_type'] is None): - raise ValueError("Missing the required parameter `resource_type` when calling `list_named_entities`") # noqa: E501 - # verify the required parameter 'project' is set - if ('project' not in params or - params['project'] is None): - raise ValueError("Missing the required parameter `project` when calling `list_named_entities`") # noqa: E501 - # verify the required parameter 'domain' is set - if ('domain' not in params or - params['domain'] is None): - raise ValueError("Missing the required parameter `domain` when calling `list_named_entities`") # noqa: E501 + # verify the required parameter 'task_execution_id_node_execution_id_execution_id_project' is set + if ('task_execution_id_node_execution_id_execution_id_project' not in params or + params['task_execution_id_node_execution_id_execution_id_project'] is None): + raise ValueError("Missing the required parameter `task_execution_id_node_execution_id_execution_id_project` when calling `list_node_executions_for_task`") # noqa: E501 + # verify the required parameter 'task_execution_id_node_execution_id_execution_id_domain' is set + if ('task_execution_id_node_execution_id_execution_id_domain' not in params or + params['task_execution_id_node_execution_id_execution_id_domain'] is None): + raise ValueError("Missing the required parameter `task_execution_id_node_execution_id_execution_id_domain` when calling `list_node_executions_for_task`") # noqa: E501 + # verify the required parameter 'task_execution_id_node_execution_id_execution_id_name' is set + if ('task_execution_id_node_execution_id_execution_id_name' not in params or + params['task_execution_id_node_execution_id_execution_id_name'] is None): + raise ValueError("Missing the required parameter `task_execution_id_node_execution_id_execution_id_name` when calling `list_node_executions_for_task`") # noqa: E501 + # verify the required parameter 'task_execution_id_node_execution_id_node_id' is set + if ('task_execution_id_node_execution_id_node_id' not in params or + params['task_execution_id_node_execution_id_node_id'] is None): + raise ValueError("Missing the required parameter `task_execution_id_node_execution_id_node_id` when calling `list_node_executions_for_task`") # noqa: E501 + # verify the required parameter 'task_execution_id_task_id_project' is set + if ('task_execution_id_task_id_project' not in params or + params['task_execution_id_task_id_project'] is None): + raise ValueError("Missing the required parameter `task_execution_id_task_id_project` when calling `list_node_executions_for_task`") # noqa: E501 + # verify the required parameter 'task_execution_id_task_id_domain' is set + if ('task_execution_id_task_id_domain' not in params or + params['task_execution_id_task_id_domain'] is None): + raise ValueError("Missing the required parameter `task_execution_id_task_id_domain` when calling `list_node_executions_for_task`") # noqa: E501 + # verify the required parameter 'task_execution_id_task_id_name' is set + if ('task_execution_id_task_id_name' not in params or + params['task_execution_id_task_id_name'] is None): + raise ValueError("Missing the required parameter `task_execution_id_task_id_name` when calling `list_node_executions_for_task`") # noqa: E501 + # verify the required parameter 'task_execution_id_task_id_version' is set + if ('task_execution_id_task_id_version' not in params or + params['task_execution_id_task_id_version'] is None): + raise ValueError("Missing the required parameter `task_execution_id_task_id_version` when calling `list_node_executions_for_task`") # noqa: E501 + # verify the required parameter 'task_execution_id_retry_attempt' is set + if ('task_execution_id_retry_attempt' not in params or + params['task_execution_id_retry_attempt'] is None): + raise ValueError("Missing the required parameter `task_execution_id_retry_attempt` when calling `list_node_executions_for_task`") # noqa: E501 collection_formats = {} path_params = {} - if 'resource_type' in params: - path_params['resource_type'] = params['resource_type'] # noqa: E501 - if 'project' in params: - path_params['project'] = params['project'] # noqa: E501 - if 'domain' in params: - path_params['domain'] = params['domain'] # noqa: E501 + if 'task_execution_id_node_execution_id_execution_id_project' in params: + path_params['task_execution_id.node_execution_id.execution_id.project'] = params['task_execution_id_node_execution_id_execution_id_project'] # noqa: E501 + if 'task_execution_id_node_execution_id_execution_id_domain' in params: + path_params['task_execution_id.node_execution_id.execution_id.domain'] = params['task_execution_id_node_execution_id_execution_id_domain'] # noqa: E501 + if 'task_execution_id_node_execution_id_execution_id_name' in params: + path_params['task_execution_id.node_execution_id.execution_id.name'] = params['task_execution_id_node_execution_id_execution_id_name'] # noqa: E501 + if 'task_execution_id_node_execution_id_node_id' in params: + path_params['task_execution_id.node_execution_id.node_id'] = params['task_execution_id_node_execution_id_node_id'] # noqa: E501 + if 'task_execution_id_task_id_project' in params: + path_params['task_execution_id.task_id.project'] = params['task_execution_id_task_id_project'] # noqa: E501 + if 'task_execution_id_task_id_domain' in params: + path_params['task_execution_id.task_id.domain'] = params['task_execution_id_task_id_domain'] # noqa: E501 + if 'task_execution_id_task_id_name' in params: + path_params['task_execution_id.task_id.name'] = params['task_execution_id_task_id_name'] # noqa: E501 + if 'task_execution_id_task_id_version' in params: + path_params['task_execution_id.task_id.version'] = params['task_execution_id_task_id_version'] # noqa: E501 + if 'task_execution_id_retry_attempt' in params: + path_params['task_execution_id.retry_attempt'] = params['task_execution_id_retry_attempt'] # noqa: E501 query_params = [] + if 'task_execution_id_task_id_resource_type' in params: + query_params.append(('task_execution_id.task_id.resource_type', params['task_execution_id_task_id_resource_type'])) # noqa: E501 + if 'task_execution_id_task_id_org' in params: + query_params.append(('task_execution_id.task_id.org', params['task_execution_id_task_id_org'])) # noqa: E501 + if 'task_execution_id_node_execution_id_execution_id_org' in params: + query_params.append(('task_execution_id.node_execution_id.execution_id.org', params['task_execution_id_node_execution_id_execution_id_org'])) # noqa: E501 if 'limit' in params: query_params.append(('limit', params['limit'])) # noqa: E501 if 'token' in params: query_params.append(('token', params['token'])) # noqa: E501 + if 'filters' in params: + query_params.append(('filters', params['filters'])) # noqa: E501 if 'sort_by_key' in params: query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 if 'sort_by_direction' in params: query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 - if 'filters' in params: - query_params.append(('filters', params['filters'])) # noqa: E501 - if 'org' in params: - query_params.append(('org', params['org'])) # noqa: E501 header_params = {} @@ -7671,14 +9260,14 @@ def list_named_entities_with_http_info(self, resource_type, project, domain, **k auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/named_entities/{resource_type}/{project}/{domain}', 'GET', + '/api/v1/children/task_executions/{task_execution_id.node_execution_id.execution_id.project}/{task_execution_id.node_execution_id.execution_id.domain}/{task_execution_id.node_execution_id.execution_id.name}/{task_execution_id.node_execution_id.node_id}/{task_execution_id.task_id.project}/{task_execution_id.task_id.domain}/{task_execution_id.task_id.name}/{task_execution_id.task_id.version}/{task_execution_id.retry_attempt}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminNamedEntityList', # noqa: E501 + response_type='AdminNodeExecutionList', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -7686,59 +9275,75 @@ def list_named_entities_with_http_info(self, resource_type, project, domain, **k _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_named_entities2(self, resource_type, org, project, domain, **kwargs): # noqa: E501 - """Returns a list of :ref:`ref_flyteidl.admin.NamedEntity` objects. # noqa: E501 + def list_node_executions_for_task2(self, task_execution_id_node_execution_id_execution_id_org, task_execution_id_node_execution_id_execution_id_project, task_execution_id_node_execution_id_execution_id_domain, task_execution_id_node_execution_id_execution_id_name, task_execution_id_node_execution_id_node_id, task_execution_id_task_id_project, task_execution_id_task_id_domain, task_execution_id_task_id_name, task_execution_id_task_id_version, task_execution_id_retry_attempt, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution` launched by the reference :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_named_entities2(resource_type, org, project, domain, async_req=True) + >>> thread = api.list_node_executions_for_task2(task_execution_id_node_execution_id_execution_id_org, task_execution_id_node_execution_id_execution_id_project, task_execution_id_node_execution_id_execution_id_domain, task_execution_id_node_execution_id_execution_id_name, task_execution_id_node_execution_id_node_id, task_execution_id_task_id_project, task_execution_id_task_id_domain, task_execution_id_task_id_name, task_execution_id_task_id_version, task_execution_id_retry_attempt, async_req=True) >>> result = thread.get() :param async_req bool - :param str resource_type: Resource type of the metadata to query. One of Task, Workflow or LaunchPlan. +required (required) - :param str org: Optional, org key applied to the resource. (required) - :param str project: Name of the project that contains the identifiers. +required (required) - :param str domain: Name of the domain the identifiers belongs to within the project. (required) - :param int limit: Indicates the number of resources to be returned. - :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str task_execution_id_node_execution_id_execution_id_org: Optional, org key applied to the resource. (required) + :param str task_execution_id_node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) + :param str task_execution_id_node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str task_execution_id_node_execution_id_execution_id_name: User or system provided value for the resource. (required) + :param str task_execution_id_node_execution_id_node_id: (required) + :param str task_execution_id_task_id_project: Name of the project the resource belongs to. (required) + :param str task_execution_id_task_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str task_execution_id_task_id_name: User provided value for the resource. (required) + :param str task_execution_id_task_id_version: Specific version of the resource. (required) + :param int task_execution_id_retry_attempt: (required) + :param str task_execution_id_task_id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :param str task_execution_id_task_id_org: Optional, org key applied to the resource. + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, the, server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :param str filters: Indicates a list of filters passed as string. +optional. - :return: AdminNamedEntityList + :return: AdminNodeExecutionList If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_named_entities2_with_http_info(resource_type, org, project, domain, **kwargs) # noqa: E501 + return self.list_node_executions_for_task2_with_http_info(task_execution_id_node_execution_id_execution_id_org, task_execution_id_node_execution_id_execution_id_project, task_execution_id_node_execution_id_execution_id_domain, task_execution_id_node_execution_id_execution_id_name, task_execution_id_node_execution_id_node_id, task_execution_id_task_id_project, task_execution_id_task_id_domain, task_execution_id_task_id_name, task_execution_id_task_id_version, task_execution_id_retry_attempt, **kwargs) # noqa: E501 else: - (data) = self.list_named_entities2_with_http_info(resource_type, org, project, domain, **kwargs) # noqa: E501 + (data) = self.list_node_executions_for_task2_with_http_info(task_execution_id_node_execution_id_execution_id_org, task_execution_id_node_execution_id_execution_id_project, task_execution_id_node_execution_id_execution_id_domain, task_execution_id_node_execution_id_execution_id_name, task_execution_id_node_execution_id_node_id, task_execution_id_task_id_project, task_execution_id_task_id_domain, task_execution_id_task_id_name, task_execution_id_task_id_version, task_execution_id_retry_attempt, **kwargs) # noqa: E501 return data - def list_named_entities2_with_http_info(self, resource_type, org, project, domain, **kwargs): # noqa: E501 - """Returns a list of :ref:`ref_flyteidl.admin.NamedEntity` objects. # noqa: E501 + def list_node_executions_for_task2_with_http_info(self, task_execution_id_node_execution_id_execution_id_org, task_execution_id_node_execution_id_execution_id_project, task_execution_id_node_execution_id_execution_id_domain, task_execution_id_node_execution_id_execution_id_name, task_execution_id_node_execution_id_node_id, task_execution_id_task_id_project, task_execution_id_task_id_domain, task_execution_id_task_id_name, task_execution_id_task_id_version, task_execution_id_retry_attempt, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution` launched by the reference :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_named_entities2_with_http_info(resource_type, org, project, domain, async_req=True) + >>> thread = api.list_node_executions_for_task2_with_http_info(task_execution_id_node_execution_id_execution_id_org, task_execution_id_node_execution_id_execution_id_project, task_execution_id_node_execution_id_execution_id_domain, task_execution_id_node_execution_id_execution_id_name, task_execution_id_node_execution_id_node_id, task_execution_id_task_id_project, task_execution_id_task_id_domain, task_execution_id_task_id_name, task_execution_id_task_id_version, task_execution_id_retry_attempt, async_req=True) >>> result = thread.get() :param async_req bool - :param str resource_type: Resource type of the metadata to query. One of Task, Workflow or LaunchPlan. +required (required) - :param str org: Optional, org key applied to the resource. (required) - :param str project: Name of the project that contains the identifiers. +required (required) - :param str domain: Name of the domain the identifiers belongs to within the project. (required) - :param int limit: Indicates the number of resources to be returned. - :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str task_execution_id_node_execution_id_execution_id_org: Optional, org key applied to the resource. (required) + :param str task_execution_id_node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) + :param str task_execution_id_node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str task_execution_id_node_execution_id_execution_id_name: User or system provided value for the resource. (required) + :param str task_execution_id_node_execution_id_node_id: (required) + :param str task_execution_id_task_id_project: Name of the project the resource belongs to. (required) + :param str task_execution_id_task_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str task_execution_id_task_id_name: User provided value for the resource. (required) + :param str task_execution_id_task_id_version: Specific version of the resource. (required) + :param int task_execution_id_retry_attempt: (required) + :param str task_execution_id_task_id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects + :param str task_execution_id_task_id_org: Optional, org key applied to the resource. + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, the, server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :param str filters: Indicates a list of filters passed as string. +optional. - :return: AdminNamedEntityList + :return: AdminNodeExecutionList If the method is called asynchronously, returns the request thread. """ - all_params = ['resource_type', 'org', 'project', 'domain', 'limit', 'token', 'sort_by_key', 'sort_by_direction', 'filters'] # noqa: E501 + all_params = ['task_execution_id_node_execution_id_execution_id_org', 'task_execution_id_node_execution_id_execution_id_project', 'task_execution_id_node_execution_id_execution_id_domain', 'task_execution_id_node_execution_id_execution_id_name', 'task_execution_id_node_execution_id_node_id', 'task_execution_id_task_id_project', 'task_execution_id_task_id_domain', 'task_execution_id_task_id_name', 'task_execution_id_task_id_version', 'task_execution_id_retry_attempt', 'task_execution_id_task_id_resource_type', 'task_execution_id_task_id_org', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -7749,50 +9354,90 @@ def list_named_entities2_with_http_info(self, resource_type, org, project, domai if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_named_entities2" % key + " to method list_node_executions_for_task2" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'resource_type' is set - if ('resource_type' not in params or - params['resource_type'] is None): - raise ValueError("Missing the required parameter `resource_type` when calling `list_named_entities2`") # noqa: E501 - # verify the required parameter 'org' is set - if ('org' not in params or - params['org'] is None): - raise ValueError("Missing the required parameter `org` when calling `list_named_entities2`") # noqa: E501 - # verify the required parameter 'project' is set - if ('project' not in params or - params['project'] is None): - raise ValueError("Missing the required parameter `project` when calling `list_named_entities2`") # noqa: E501 - # verify the required parameter 'domain' is set - if ('domain' not in params or - params['domain'] is None): - raise ValueError("Missing the required parameter `domain` when calling `list_named_entities2`") # noqa: E501 + # verify the required parameter 'task_execution_id_node_execution_id_execution_id_org' is set + if ('task_execution_id_node_execution_id_execution_id_org' not in params or + params['task_execution_id_node_execution_id_execution_id_org'] is None): + raise ValueError("Missing the required parameter `task_execution_id_node_execution_id_execution_id_org` when calling `list_node_executions_for_task2`") # noqa: E501 + # verify the required parameter 'task_execution_id_node_execution_id_execution_id_project' is set + if ('task_execution_id_node_execution_id_execution_id_project' not in params or + params['task_execution_id_node_execution_id_execution_id_project'] is None): + raise ValueError("Missing the required parameter `task_execution_id_node_execution_id_execution_id_project` when calling `list_node_executions_for_task2`") # noqa: E501 + # verify the required parameter 'task_execution_id_node_execution_id_execution_id_domain' is set + if ('task_execution_id_node_execution_id_execution_id_domain' not in params or + params['task_execution_id_node_execution_id_execution_id_domain'] is None): + raise ValueError("Missing the required parameter `task_execution_id_node_execution_id_execution_id_domain` when calling `list_node_executions_for_task2`") # noqa: E501 + # verify the required parameter 'task_execution_id_node_execution_id_execution_id_name' is set + if ('task_execution_id_node_execution_id_execution_id_name' not in params or + params['task_execution_id_node_execution_id_execution_id_name'] is None): + raise ValueError("Missing the required parameter `task_execution_id_node_execution_id_execution_id_name` when calling `list_node_executions_for_task2`") # noqa: E501 + # verify the required parameter 'task_execution_id_node_execution_id_node_id' is set + if ('task_execution_id_node_execution_id_node_id' not in params or + params['task_execution_id_node_execution_id_node_id'] is None): + raise ValueError("Missing the required parameter `task_execution_id_node_execution_id_node_id` when calling `list_node_executions_for_task2`") # noqa: E501 + # verify the required parameter 'task_execution_id_task_id_project' is set + if ('task_execution_id_task_id_project' not in params or + params['task_execution_id_task_id_project'] is None): + raise ValueError("Missing the required parameter `task_execution_id_task_id_project` when calling `list_node_executions_for_task2`") # noqa: E501 + # verify the required parameter 'task_execution_id_task_id_domain' is set + if ('task_execution_id_task_id_domain' not in params or + params['task_execution_id_task_id_domain'] is None): + raise ValueError("Missing the required parameter `task_execution_id_task_id_domain` when calling `list_node_executions_for_task2`") # noqa: E501 + # verify the required parameter 'task_execution_id_task_id_name' is set + if ('task_execution_id_task_id_name' not in params or + params['task_execution_id_task_id_name'] is None): + raise ValueError("Missing the required parameter `task_execution_id_task_id_name` when calling `list_node_executions_for_task2`") # noqa: E501 + # verify the required parameter 'task_execution_id_task_id_version' is set + if ('task_execution_id_task_id_version' not in params or + params['task_execution_id_task_id_version'] is None): + raise ValueError("Missing the required parameter `task_execution_id_task_id_version` when calling `list_node_executions_for_task2`") # noqa: E501 + # verify the required parameter 'task_execution_id_retry_attempt' is set + if ('task_execution_id_retry_attempt' not in params or + params['task_execution_id_retry_attempt'] is None): + raise ValueError("Missing the required parameter `task_execution_id_retry_attempt` when calling `list_node_executions_for_task2`") # noqa: E501 collection_formats = {} path_params = {} - if 'resource_type' in params: - path_params['resource_type'] = params['resource_type'] # noqa: E501 - if 'org' in params: - path_params['org'] = params['org'] # noqa: E501 - if 'project' in params: - path_params['project'] = params['project'] # noqa: E501 - if 'domain' in params: - path_params['domain'] = params['domain'] # noqa: E501 + if 'task_execution_id_node_execution_id_execution_id_org' in params: + path_params['task_execution_id.node_execution_id.execution_id.org'] = params['task_execution_id_node_execution_id_execution_id_org'] # noqa: E501 + if 'task_execution_id_node_execution_id_execution_id_project' in params: + path_params['task_execution_id.node_execution_id.execution_id.project'] = params['task_execution_id_node_execution_id_execution_id_project'] # noqa: E501 + if 'task_execution_id_node_execution_id_execution_id_domain' in params: + path_params['task_execution_id.node_execution_id.execution_id.domain'] = params['task_execution_id_node_execution_id_execution_id_domain'] # noqa: E501 + if 'task_execution_id_node_execution_id_execution_id_name' in params: + path_params['task_execution_id.node_execution_id.execution_id.name'] = params['task_execution_id_node_execution_id_execution_id_name'] # noqa: E501 + if 'task_execution_id_node_execution_id_node_id' in params: + path_params['task_execution_id.node_execution_id.node_id'] = params['task_execution_id_node_execution_id_node_id'] # noqa: E501 + if 'task_execution_id_task_id_project' in params: + path_params['task_execution_id.task_id.project'] = params['task_execution_id_task_id_project'] # noqa: E501 + if 'task_execution_id_task_id_domain' in params: + path_params['task_execution_id.task_id.domain'] = params['task_execution_id_task_id_domain'] # noqa: E501 + if 'task_execution_id_task_id_name' in params: + path_params['task_execution_id.task_id.name'] = params['task_execution_id_task_id_name'] # noqa: E501 + if 'task_execution_id_task_id_version' in params: + path_params['task_execution_id.task_id.version'] = params['task_execution_id_task_id_version'] # noqa: E501 + if 'task_execution_id_retry_attempt' in params: + path_params['task_execution_id.retry_attempt'] = params['task_execution_id_retry_attempt'] # noqa: E501 query_params = [] + if 'task_execution_id_task_id_resource_type' in params: + query_params.append(('task_execution_id.task_id.resource_type', params['task_execution_id_task_id_resource_type'])) # noqa: E501 + if 'task_execution_id_task_id_org' in params: + query_params.append(('task_execution_id.task_id.org', params['task_execution_id_task_id_org'])) # noqa: E501 if 'limit' in params: query_params.append(('limit', params['limit'])) # noqa: E501 if 'token' in params: query_params.append(('token', params['token'])) # noqa: E501 + if 'filters' in params: + query_params.append(('filters', params['filters'])) # noqa: E501 if 'sort_by_key' in params: query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 if 'sort_by_direction' in params: query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 - if 'filters' in params: - query_params.append(('filters', params['filters'])) # noqa: E501 header_params = {} @@ -7812,14 +9457,14 @@ def list_named_entities2_with_http_info(self, resource_type, org, project, domai auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/named_entities/{resource_type}/org/{org}/{project}/{domain}', 'GET', + '/api/v1/children/task_executions/org/{task_execution_id.node_execution_id.execution_id.org}/{task_execution_id.node_execution_id.execution_id.project}/{task_execution_id.node_execution_id.execution_id.domain}/{task_execution_id.node_execution_id.execution_id.name}/{task_execution_id.node_execution_id.node_id}/{task_execution_id.task_id.project}/{task_execution_id.task_id.domain}/{task_execution_id.task_id.name}/{task_execution_id.task_id.version}/{task_execution_id.retry_attempt}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminNamedEntityList', # noqa: E501 + response_type='AdminNodeExecutionList', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -7827,61 +9472,53 @@ def list_named_entities2_with_http_info(self, resource_type, org, project, domai _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_node_executions(self, workflow_execution_id_project, workflow_execution_id_domain, workflow_execution_id_name, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution`. # noqa: E501 + def list_projects(self, **kwargs): # noqa: E501 + """Fetches a list of :ref:`ref_flyteidl.admin.Project` # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_node_executions(workflow_execution_id_project, workflow_execution_id_domain, workflow_execution_id_name, async_req=True) + >>> thread = api.list_projects(async_req=True) >>> result = thread.get() :param async_req bool - :param str workflow_execution_id_project: Name of the project the resource belongs to. (required) - :param str workflow_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str workflow_execution_id_name: User or system provided value for the resource. (required) - :param str workflow_execution_id_org: Optional, org key applied to the resource. - :param int limit: Indicates the number of resources to be returned. +required. - :param str token: + :param int limit: Indicates the number of projects to be returned. +required. + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :param str unique_parent_id: Unique identifier of the parent node in the execution +optional. - :return: AdminNodeExecutionList + :param str org: Optional, org filter applied to list project requests. + :return: AdminProjects If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_node_executions_with_http_info(workflow_execution_id_project, workflow_execution_id_domain, workflow_execution_id_name, **kwargs) # noqa: E501 + return self.list_projects_with_http_info(**kwargs) # noqa: E501 else: - (data) = self.list_node_executions_with_http_info(workflow_execution_id_project, workflow_execution_id_domain, workflow_execution_id_name, **kwargs) # noqa: E501 + (data) = self.list_projects_with_http_info(**kwargs) # noqa: E501 return data - def list_node_executions_with_http_info(self, workflow_execution_id_project, workflow_execution_id_domain, workflow_execution_id_name, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution`. # noqa: E501 + def list_projects_with_http_info(self, **kwargs): # noqa: E501 + """Fetches a list of :ref:`ref_flyteidl.admin.Project` # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_node_executions_with_http_info(workflow_execution_id_project, workflow_execution_id_domain, workflow_execution_id_name, async_req=True) + >>> thread = api.list_projects_with_http_info(async_req=True) >>> result = thread.get() :param async_req bool - :param str workflow_execution_id_project: Name of the project the resource belongs to. (required) - :param str workflow_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str workflow_execution_id_name: User or system provided value for the resource. (required) - :param str workflow_execution_id_org: Optional, org key applied to the resource. - :param int limit: Indicates the number of resources to be returned. +required. - :param str token: + :param int limit: Indicates the number of projects to be returned. +required. + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :param str unique_parent_id: Unique identifier of the parent node in the execution +optional. - :return: AdminNodeExecutionList + :param str org: Optional, org filter applied to list project requests. + :return: AdminProjects If the method is called asynchronously, returns the request thread. """ - all_params = ['workflow_execution_id_project', 'workflow_execution_id_domain', 'workflow_execution_id_name', 'workflow_execution_id_org', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction', 'unique_parent_id'] # noqa: E501 + all_params = ['limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction', 'org'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -7892,36 +9529,16 @@ def list_node_executions_with_http_info(self, workflow_execution_id_project, wor if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_node_executions" % key + " to method list_projects" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'workflow_execution_id_project' is set - if ('workflow_execution_id_project' not in params or - params['workflow_execution_id_project'] is None): - raise ValueError("Missing the required parameter `workflow_execution_id_project` when calling `list_node_executions`") # noqa: E501 - # verify the required parameter 'workflow_execution_id_domain' is set - if ('workflow_execution_id_domain' not in params or - params['workflow_execution_id_domain'] is None): - raise ValueError("Missing the required parameter `workflow_execution_id_domain` when calling `list_node_executions`") # noqa: E501 - # verify the required parameter 'workflow_execution_id_name' is set - if ('workflow_execution_id_name' not in params or - params['workflow_execution_id_name'] is None): - raise ValueError("Missing the required parameter `workflow_execution_id_name` when calling `list_node_executions`") # noqa: E501 collection_formats = {} path_params = {} - if 'workflow_execution_id_project' in params: - path_params['workflow_execution_id.project'] = params['workflow_execution_id_project'] # noqa: E501 - if 'workflow_execution_id_domain' in params: - path_params['workflow_execution_id.domain'] = params['workflow_execution_id_domain'] # noqa: E501 - if 'workflow_execution_id_name' in params: - path_params['workflow_execution_id.name'] = params['workflow_execution_id_name'] # noqa: E501 query_params = [] - if 'workflow_execution_id_org' in params: - query_params.append(('workflow_execution_id.org', params['workflow_execution_id_org'])) # noqa: E501 if 'limit' in params: query_params.append(('limit', params['limit'])) # noqa: E501 if 'token' in params: @@ -7932,8 +9549,8 @@ def list_node_executions_with_http_info(self, workflow_execution_id_project, wor query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 if 'sort_by_direction' in params: query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 - if 'unique_parent_id' in params: - query_params.append(('unique_parent_id', params['unique_parent_id'])) # noqa: E501 + if 'org' in params: + query_params.append(('org', params['org'])) # noqa: E501 header_params = {} @@ -7953,14 +9570,14 @@ def list_node_executions_with_http_info(self, workflow_execution_id_project, wor auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/node_executions/{workflow_execution_id.project}/{workflow_execution_id.domain}/{workflow_execution_id.name}', 'GET', + '/api/v1/projects', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminNodeExecutionList', # noqa: E501 + response_type='AdminProjects', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -7968,61 +9585,53 @@ def list_node_executions_with_http_info(self, workflow_execution_id_project, wor _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_node_executions2(self, workflow_execution_id_org, workflow_execution_id_project, workflow_execution_id_domain, workflow_execution_id_name, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution`. # noqa: E501 + def list_projects2(self, org, **kwargs): # noqa: E501 + """Fetches a list of :ref:`ref_flyteidl.admin.Project` # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_node_executions2(workflow_execution_id_org, workflow_execution_id_project, workflow_execution_id_domain, workflow_execution_id_name, async_req=True) + >>> thread = api.list_projects2(org, async_req=True) >>> result = thread.get() :param async_req bool - :param str workflow_execution_id_org: Optional, org key applied to the resource. (required) - :param str workflow_execution_id_project: Name of the project the resource belongs to. (required) - :param str workflow_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str workflow_execution_id_name: User or system provided value for the resource. (required) - :param int limit: Indicates the number of resources to be returned. +required. - :param str token: + :param str org: Optional, org filter applied to list project requests. (required) + :param int limit: Indicates the number of projects to be returned. +required. + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :param str unique_parent_id: Unique identifier of the parent node in the execution +optional. - :return: AdminNodeExecutionList + :return: AdminProjects If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_node_executions2_with_http_info(workflow_execution_id_org, workflow_execution_id_project, workflow_execution_id_domain, workflow_execution_id_name, **kwargs) # noqa: E501 + return self.list_projects2_with_http_info(org, **kwargs) # noqa: E501 else: - (data) = self.list_node_executions2_with_http_info(workflow_execution_id_org, workflow_execution_id_project, workflow_execution_id_domain, workflow_execution_id_name, **kwargs) # noqa: E501 + (data) = self.list_projects2_with_http_info(org, **kwargs) # noqa: E501 return data - def list_node_executions2_with_http_info(self, workflow_execution_id_org, workflow_execution_id_project, workflow_execution_id_domain, workflow_execution_id_name, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution`. # noqa: E501 + def list_projects2_with_http_info(self, org, **kwargs): # noqa: E501 + """Fetches a list of :ref:`ref_flyteidl.admin.Project` # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_node_executions2_with_http_info(workflow_execution_id_org, workflow_execution_id_project, workflow_execution_id_domain, workflow_execution_id_name, async_req=True) + >>> thread = api.list_projects2_with_http_info(org, async_req=True) >>> result = thread.get() :param async_req bool - :param str workflow_execution_id_org: Optional, org key applied to the resource. (required) - :param str workflow_execution_id_project: Name of the project the resource belongs to. (required) - :param str workflow_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str workflow_execution_id_name: User or system provided value for the resource. (required) - :param int limit: Indicates the number of resources to be returned. +required. - :param str token: + :param str org: Optional, org filter applied to list project requests. (required) + :param int limit: Indicates the number of projects to be returned. +required. + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :param str unique_parent_id: Unique identifier of the parent node in the execution +optional. - :return: AdminNodeExecutionList + :return: AdminProjects If the method is called asynchronously, returns the request thread. """ - all_params = ['workflow_execution_id_org', 'workflow_execution_id_project', 'workflow_execution_id_domain', 'workflow_execution_id_name', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction', 'unique_parent_id'] # noqa: E501 + all_params = ['org', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -8033,38 +9642,20 @@ def list_node_executions2_with_http_info(self, workflow_execution_id_org, workfl if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_node_executions2" % key + " to method list_projects2" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'workflow_execution_id_org' is set - if ('workflow_execution_id_org' not in params or - params['workflow_execution_id_org'] is None): - raise ValueError("Missing the required parameter `workflow_execution_id_org` when calling `list_node_executions2`") # noqa: E501 - # verify the required parameter 'workflow_execution_id_project' is set - if ('workflow_execution_id_project' not in params or - params['workflow_execution_id_project'] is None): - raise ValueError("Missing the required parameter `workflow_execution_id_project` when calling `list_node_executions2`") # noqa: E501 - # verify the required parameter 'workflow_execution_id_domain' is set - if ('workflow_execution_id_domain' not in params or - params['workflow_execution_id_domain'] is None): - raise ValueError("Missing the required parameter `workflow_execution_id_domain` when calling `list_node_executions2`") # noqa: E501 - # verify the required parameter 'workflow_execution_id_name' is set - if ('workflow_execution_id_name' not in params or - params['workflow_execution_id_name'] is None): - raise ValueError("Missing the required parameter `workflow_execution_id_name` when calling `list_node_executions2`") # noqa: E501 + # verify the required parameter 'org' is set + if ('org' not in params or + params['org'] is None): + raise ValueError("Missing the required parameter `org` when calling `list_projects2`") # noqa: E501 collection_formats = {} path_params = {} - if 'workflow_execution_id_org' in params: - path_params['workflow_execution_id.org'] = params['workflow_execution_id_org'] # noqa: E501 - if 'workflow_execution_id_project' in params: - path_params['workflow_execution_id.project'] = params['workflow_execution_id_project'] # noqa: E501 - if 'workflow_execution_id_domain' in params: - path_params['workflow_execution_id.domain'] = params['workflow_execution_id_domain'] # noqa: E501 - if 'workflow_execution_id_name' in params: - path_params['workflow_execution_id.name'] = params['workflow_execution_id_name'] # noqa: E501 + if 'org' in params: + path_params['org'] = params['org'] # noqa: E501 query_params = [] if 'limit' in params: @@ -8077,8 +9668,6 @@ def list_node_executions2_with_http_info(self, workflow_execution_id_org, workfl query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 if 'sort_by_direction' in params: query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 - if 'unique_parent_id' in params: - query_params.append(('unique_parent_id', params['unique_parent_id'])) # noqa: E501 header_params = {} @@ -8098,14 +9687,14 @@ def list_node_executions2_with_http_info(self, workflow_execution_id_org, workfl auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/node_executions/org/{workflow_execution_id.org}/{workflow_execution_id.project}/{workflow_execution_id.domain}/{workflow_execution_id.name}', 'GET', + '/api/v1/projects/org/{org}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminNodeExecutionList', # noqa: E501 + response_type='AdminProjects', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -8113,75 +9702,61 @@ def list_node_executions2_with_http_info(self, workflow_execution_id_org, workfl _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_node_executions_for_task(self, task_execution_id_node_execution_id_execution_id_project, task_execution_id_node_execution_id_execution_id_domain, task_execution_id_node_execution_id_execution_id_name, task_execution_id_node_execution_id_node_id, task_execution_id_task_id_project, task_execution_id_task_id_domain, task_execution_id_task_id_name, task_execution_id_task_id_version, task_execution_id_retry_attempt, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution` launched by the reference :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 + def list_task_executions(self, node_execution_id_execution_id_project, node_execution_id_execution_id_domain, node_execution_id_execution_id_name, node_execution_id_node_id, **kwargs): # noqa: E501 + """Fetches a list of :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_node_executions_for_task(task_execution_id_node_execution_id_execution_id_project, task_execution_id_node_execution_id_execution_id_domain, task_execution_id_node_execution_id_execution_id_name, task_execution_id_node_execution_id_node_id, task_execution_id_task_id_project, task_execution_id_task_id_domain, task_execution_id_task_id_name, task_execution_id_task_id_version, task_execution_id_retry_attempt, async_req=True) + >>> thread = api.list_task_executions(node_execution_id_execution_id_project, node_execution_id_execution_id_domain, node_execution_id_execution_id_name, node_execution_id_node_id, async_req=True) >>> result = thread.get() :param async_req bool - :param str task_execution_id_node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) - :param str task_execution_id_node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str task_execution_id_node_execution_id_execution_id_name: User or system provided value for the resource. (required) - :param str task_execution_id_node_execution_id_node_id: (required) - :param str task_execution_id_task_id_project: Name of the project the resource belongs to. (required) - :param str task_execution_id_task_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str task_execution_id_task_id_name: User provided value for the resource. (required) - :param str task_execution_id_task_id_version: Specific version of the resource. (required) - :param int task_execution_id_retry_attempt: (required) - :param str task_execution_id_task_id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects - :param str task_execution_id_task_id_org: Optional, org key applied to the resource. - :param str task_execution_id_node_execution_id_execution_id_org: Optional, org key applied to the resource. + :param str node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) + :param str node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str node_execution_id_execution_id_name: User or system provided value for the resource. (required) + :param str node_execution_id_node_id: (required) + :param str node_execution_id_execution_id_org: Optional, org key applied to the resource. :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, the, server-provided token can be used to fetch the next page in a query. +optional. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminNodeExecutionList + :return: AdminTaskExecutionList If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_node_executions_for_task_with_http_info(task_execution_id_node_execution_id_execution_id_project, task_execution_id_node_execution_id_execution_id_domain, task_execution_id_node_execution_id_execution_id_name, task_execution_id_node_execution_id_node_id, task_execution_id_task_id_project, task_execution_id_task_id_domain, task_execution_id_task_id_name, task_execution_id_task_id_version, task_execution_id_retry_attempt, **kwargs) # noqa: E501 + return self.list_task_executions_with_http_info(node_execution_id_execution_id_project, node_execution_id_execution_id_domain, node_execution_id_execution_id_name, node_execution_id_node_id, **kwargs) # noqa: E501 else: - (data) = self.list_node_executions_for_task_with_http_info(task_execution_id_node_execution_id_execution_id_project, task_execution_id_node_execution_id_execution_id_domain, task_execution_id_node_execution_id_execution_id_name, task_execution_id_node_execution_id_node_id, task_execution_id_task_id_project, task_execution_id_task_id_domain, task_execution_id_task_id_name, task_execution_id_task_id_version, task_execution_id_retry_attempt, **kwargs) # noqa: E501 + (data) = self.list_task_executions_with_http_info(node_execution_id_execution_id_project, node_execution_id_execution_id_domain, node_execution_id_execution_id_name, node_execution_id_node_id, **kwargs) # noqa: E501 return data - def list_node_executions_for_task_with_http_info(self, task_execution_id_node_execution_id_execution_id_project, task_execution_id_node_execution_id_execution_id_domain, task_execution_id_node_execution_id_execution_id_name, task_execution_id_node_execution_id_node_id, task_execution_id_task_id_project, task_execution_id_task_id_domain, task_execution_id_task_id_name, task_execution_id_task_id_version, task_execution_id_retry_attempt, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution` launched by the reference :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 + def list_task_executions_with_http_info(self, node_execution_id_execution_id_project, node_execution_id_execution_id_domain, node_execution_id_execution_id_name, node_execution_id_node_id, **kwargs): # noqa: E501 + """Fetches a list of :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_node_executions_for_task_with_http_info(task_execution_id_node_execution_id_execution_id_project, task_execution_id_node_execution_id_execution_id_domain, task_execution_id_node_execution_id_execution_id_name, task_execution_id_node_execution_id_node_id, task_execution_id_task_id_project, task_execution_id_task_id_domain, task_execution_id_task_id_name, task_execution_id_task_id_version, task_execution_id_retry_attempt, async_req=True) + >>> thread = api.list_task_executions_with_http_info(node_execution_id_execution_id_project, node_execution_id_execution_id_domain, node_execution_id_execution_id_name, node_execution_id_node_id, async_req=True) >>> result = thread.get() :param async_req bool - :param str task_execution_id_node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) - :param str task_execution_id_node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str task_execution_id_node_execution_id_execution_id_name: User or system provided value for the resource. (required) - :param str task_execution_id_node_execution_id_node_id: (required) - :param str task_execution_id_task_id_project: Name of the project the resource belongs to. (required) - :param str task_execution_id_task_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str task_execution_id_task_id_name: User provided value for the resource. (required) - :param str task_execution_id_task_id_version: Specific version of the resource. (required) - :param int task_execution_id_retry_attempt: (required) - :param str task_execution_id_task_id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects - :param str task_execution_id_task_id_org: Optional, org key applied to the resource. - :param str task_execution_id_node_execution_id_execution_id_org: Optional, org key applied to the resource. + :param str node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) + :param str node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str node_execution_id_execution_id_name: User or system provided value for the resource. (required) + :param str node_execution_id_node_id: (required) + :param str node_execution_id_execution_id_org: Optional, org key applied to the resource. :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, the, server-provided token can be used to fetch the next page in a query. +optional. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminNodeExecutionList + :return: AdminTaskExecutionList If the method is called asynchronously, returns the request thread. """ - all_params = ['task_execution_id_node_execution_id_execution_id_project', 'task_execution_id_node_execution_id_execution_id_domain', 'task_execution_id_node_execution_id_execution_id_name', 'task_execution_id_node_execution_id_node_id', 'task_execution_id_task_id_project', 'task_execution_id_task_id_domain', 'task_execution_id_task_id_name', 'task_execution_id_task_id_version', 'task_execution_id_retry_attempt', 'task_execution_id_task_id_resource_type', 'task_execution_id_task_id_org', 'task_execution_id_node_execution_id_execution_id_org', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 + all_params = ['node_execution_id_execution_id_project', 'node_execution_id_execution_id_domain', 'node_execution_id_execution_id_name', 'node_execution_id_node_id', 'node_execution_id_execution_id_org', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -8192,76 +9767,42 @@ def list_node_executions_for_task_with_http_info(self, task_execution_id_node_ex if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_node_executions_for_task" % key + " to method list_task_executions" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'task_execution_id_node_execution_id_execution_id_project' is set - if ('task_execution_id_node_execution_id_execution_id_project' not in params or - params['task_execution_id_node_execution_id_execution_id_project'] is None): - raise ValueError("Missing the required parameter `task_execution_id_node_execution_id_execution_id_project` when calling `list_node_executions_for_task`") # noqa: E501 - # verify the required parameter 'task_execution_id_node_execution_id_execution_id_domain' is set - if ('task_execution_id_node_execution_id_execution_id_domain' not in params or - params['task_execution_id_node_execution_id_execution_id_domain'] is None): - raise ValueError("Missing the required parameter `task_execution_id_node_execution_id_execution_id_domain` when calling `list_node_executions_for_task`") # noqa: E501 - # verify the required parameter 'task_execution_id_node_execution_id_execution_id_name' is set - if ('task_execution_id_node_execution_id_execution_id_name' not in params or - params['task_execution_id_node_execution_id_execution_id_name'] is None): - raise ValueError("Missing the required parameter `task_execution_id_node_execution_id_execution_id_name` when calling `list_node_executions_for_task`") # noqa: E501 - # verify the required parameter 'task_execution_id_node_execution_id_node_id' is set - if ('task_execution_id_node_execution_id_node_id' not in params or - params['task_execution_id_node_execution_id_node_id'] is None): - raise ValueError("Missing the required parameter `task_execution_id_node_execution_id_node_id` when calling `list_node_executions_for_task`") # noqa: E501 - # verify the required parameter 'task_execution_id_task_id_project' is set - if ('task_execution_id_task_id_project' not in params or - params['task_execution_id_task_id_project'] is None): - raise ValueError("Missing the required parameter `task_execution_id_task_id_project` when calling `list_node_executions_for_task`") # noqa: E501 - # verify the required parameter 'task_execution_id_task_id_domain' is set - if ('task_execution_id_task_id_domain' not in params or - params['task_execution_id_task_id_domain'] is None): - raise ValueError("Missing the required parameter `task_execution_id_task_id_domain` when calling `list_node_executions_for_task`") # noqa: E501 - # verify the required parameter 'task_execution_id_task_id_name' is set - if ('task_execution_id_task_id_name' not in params or - params['task_execution_id_task_id_name'] is None): - raise ValueError("Missing the required parameter `task_execution_id_task_id_name` when calling `list_node_executions_for_task`") # noqa: E501 - # verify the required parameter 'task_execution_id_task_id_version' is set - if ('task_execution_id_task_id_version' not in params or - params['task_execution_id_task_id_version'] is None): - raise ValueError("Missing the required parameter `task_execution_id_task_id_version` when calling `list_node_executions_for_task`") # noqa: E501 - # verify the required parameter 'task_execution_id_retry_attempt' is set - if ('task_execution_id_retry_attempt' not in params or - params['task_execution_id_retry_attempt'] is None): - raise ValueError("Missing the required parameter `task_execution_id_retry_attempt` when calling `list_node_executions_for_task`") # noqa: E501 + # verify the required parameter 'node_execution_id_execution_id_project' is set + if ('node_execution_id_execution_id_project' not in params or + params['node_execution_id_execution_id_project'] is None): + raise ValueError("Missing the required parameter `node_execution_id_execution_id_project` when calling `list_task_executions`") # noqa: E501 + # verify the required parameter 'node_execution_id_execution_id_domain' is set + if ('node_execution_id_execution_id_domain' not in params or + params['node_execution_id_execution_id_domain'] is None): + raise ValueError("Missing the required parameter `node_execution_id_execution_id_domain` when calling `list_task_executions`") # noqa: E501 + # verify the required parameter 'node_execution_id_execution_id_name' is set + if ('node_execution_id_execution_id_name' not in params or + params['node_execution_id_execution_id_name'] is None): + raise ValueError("Missing the required parameter `node_execution_id_execution_id_name` when calling `list_task_executions`") # noqa: E501 + # verify the required parameter 'node_execution_id_node_id' is set + if ('node_execution_id_node_id' not in params or + params['node_execution_id_node_id'] is None): + raise ValueError("Missing the required parameter `node_execution_id_node_id` when calling `list_task_executions`") # noqa: E501 collection_formats = {} path_params = {} - if 'task_execution_id_node_execution_id_execution_id_project' in params: - path_params['task_execution_id.node_execution_id.execution_id.project'] = params['task_execution_id_node_execution_id_execution_id_project'] # noqa: E501 - if 'task_execution_id_node_execution_id_execution_id_domain' in params: - path_params['task_execution_id.node_execution_id.execution_id.domain'] = params['task_execution_id_node_execution_id_execution_id_domain'] # noqa: E501 - if 'task_execution_id_node_execution_id_execution_id_name' in params: - path_params['task_execution_id.node_execution_id.execution_id.name'] = params['task_execution_id_node_execution_id_execution_id_name'] # noqa: E501 - if 'task_execution_id_node_execution_id_node_id' in params: - path_params['task_execution_id.node_execution_id.node_id'] = params['task_execution_id_node_execution_id_node_id'] # noqa: E501 - if 'task_execution_id_task_id_project' in params: - path_params['task_execution_id.task_id.project'] = params['task_execution_id_task_id_project'] # noqa: E501 - if 'task_execution_id_task_id_domain' in params: - path_params['task_execution_id.task_id.domain'] = params['task_execution_id_task_id_domain'] # noqa: E501 - if 'task_execution_id_task_id_name' in params: - path_params['task_execution_id.task_id.name'] = params['task_execution_id_task_id_name'] # noqa: E501 - if 'task_execution_id_task_id_version' in params: - path_params['task_execution_id.task_id.version'] = params['task_execution_id_task_id_version'] # noqa: E501 - if 'task_execution_id_retry_attempt' in params: - path_params['task_execution_id.retry_attempt'] = params['task_execution_id_retry_attempt'] # noqa: E501 + if 'node_execution_id_execution_id_project' in params: + path_params['node_execution_id.execution_id.project'] = params['node_execution_id_execution_id_project'] # noqa: E501 + if 'node_execution_id_execution_id_domain' in params: + path_params['node_execution_id.execution_id.domain'] = params['node_execution_id_execution_id_domain'] # noqa: E501 + if 'node_execution_id_execution_id_name' in params: + path_params['node_execution_id.execution_id.name'] = params['node_execution_id_execution_id_name'] # noqa: E501 + if 'node_execution_id_node_id' in params: + path_params['node_execution_id.node_id'] = params['node_execution_id_node_id'] # noqa: E501 query_params = [] - if 'task_execution_id_task_id_resource_type' in params: - query_params.append(('task_execution_id.task_id.resource_type', params['task_execution_id_task_id_resource_type'])) # noqa: E501 - if 'task_execution_id_task_id_org' in params: - query_params.append(('task_execution_id.task_id.org', params['task_execution_id_task_id_org'])) # noqa: E501 - if 'task_execution_id_node_execution_id_execution_id_org' in params: - query_params.append(('task_execution_id.node_execution_id.execution_id.org', params['task_execution_id_node_execution_id_execution_id_org'])) # noqa: E501 + if 'node_execution_id_execution_id_org' in params: + query_params.append(('node_execution_id.execution_id.org', params['node_execution_id_execution_id_org'])) # noqa: E501 if 'limit' in params: query_params.append(('limit', params['limit'])) # noqa: E501 if 'token' in params: @@ -8291,14 +9832,14 @@ def list_node_executions_for_task_with_http_info(self, task_execution_id_node_ex auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/children/task_executions/{task_execution_id.node_execution_id.execution_id.project}/{task_execution_id.node_execution_id.execution_id.domain}/{task_execution_id.node_execution_id.execution_id.name}/{task_execution_id.node_execution_id.node_id}/{task_execution_id.task_id.project}/{task_execution_id.task_id.domain}/{task_execution_id.task_id.name}/{task_execution_id.task_id.version}/{task_execution_id.retry_attempt}', 'GET', + '/api/v1/task_executions/{node_execution_id.execution_id.project}/{node_execution_id.execution_id.domain}/{node_execution_id.execution_id.name}/{node_execution_id.node_id}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminNodeExecutionList', # noqa: E501 + response_type='AdminTaskExecutionList', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -8306,75 +9847,61 @@ def list_node_executions_for_task_with_http_info(self, task_execution_id_node_ex _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_node_executions_for_task2(self, task_execution_id_node_execution_id_execution_id_org, task_execution_id_node_execution_id_execution_id_project, task_execution_id_node_execution_id_execution_id_domain, task_execution_id_node_execution_id_execution_id_name, task_execution_id_node_execution_id_node_id, task_execution_id_task_id_project, task_execution_id_task_id_domain, task_execution_id_task_id_name, task_execution_id_task_id_version, task_execution_id_retry_attempt, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution` launched by the reference :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 + def list_task_executions2(self, node_execution_id_execution_id_org, node_execution_id_execution_id_project, node_execution_id_execution_id_domain, node_execution_id_execution_id_name, node_execution_id_node_id, **kwargs): # noqa: E501 + """Fetches a list of :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_node_executions_for_task2(task_execution_id_node_execution_id_execution_id_org, task_execution_id_node_execution_id_execution_id_project, task_execution_id_node_execution_id_execution_id_domain, task_execution_id_node_execution_id_execution_id_name, task_execution_id_node_execution_id_node_id, task_execution_id_task_id_project, task_execution_id_task_id_domain, task_execution_id_task_id_name, task_execution_id_task_id_version, task_execution_id_retry_attempt, async_req=True) + >>> thread = api.list_task_executions2(node_execution_id_execution_id_org, node_execution_id_execution_id_project, node_execution_id_execution_id_domain, node_execution_id_execution_id_name, node_execution_id_node_id, async_req=True) >>> result = thread.get() :param async_req bool - :param str task_execution_id_node_execution_id_execution_id_org: Optional, org key applied to the resource. (required) - :param str task_execution_id_node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) - :param str task_execution_id_node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str task_execution_id_node_execution_id_execution_id_name: User or system provided value for the resource. (required) - :param str task_execution_id_node_execution_id_node_id: (required) - :param str task_execution_id_task_id_project: Name of the project the resource belongs to. (required) - :param str task_execution_id_task_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str task_execution_id_task_id_name: User provided value for the resource. (required) - :param str task_execution_id_task_id_version: Specific version of the resource. (required) - :param int task_execution_id_retry_attempt: (required) - :param str task_execution_id_task_id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects - :param str task_execution_id_task_id_org: Optional, org key applied to the resource. + :param str node_execution_id_execution_id_org: Optional, org key applied to the resource. (required) + :param str node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) + :param str node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str node_execution_id_execution_id_name: User or system provided value for the resource. (required) + :param str node_execution_id_node_id: (required) :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, the, server-provided token can be used to fetch the next page in a query. +optional. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminNodeExecutionList + :return: AdminTaskExecutionList If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_node_executions_for_task2_with_http_info(task_execution_id_node_execution_id_execution_id_org, task_execution_id_node_execution_id_execution_id_project, task_execution_id_node_execution_id_execution_id_domain, task_execution_id_node_execution_id_execution_id_name, task_execution_id_node_execution_id_node_id, task_execution_id_task_id_project, task_execution_id_task_id_domain, task_execution_id_task_id_name, task_execution_id_task_id_version, task_execution_id_retry_attempt, **kwargs) # noqa: E501 + return self.list_task_executions2_with_http_info(node_execution_id_execution_id_org, node_execution_id_execution_id_project, node_execution_id_execution_id_domain, node_execution_id_execution_id_name, node_execution_id_node_id, **kwargs) # noqa: E501 else: - (data) = self.list_node_executions_for_task2_with_http_info(task_execution_id_node_execution_id_execution_id_org, task_execution_id_node_execution_id_execution_id_project, task_execution_id_node_execution_id_execution_id_domain, task_execution_id_node_execution_id_execution_id_name, task_execution_id_node_execution_id_node_id, task_execution_id_task_id_project, task_execution_id_task_id_domain, task_execution_id_task_id_name, task_execution_id_task_id_version, task_execution_id_retry_attempt, **kwargs) # noqa: E501 + (data) = self.list_task_executions2_with_http_info(node_execution_id_execution_id_org, node_execution_id_execution_id_project, node_execution_id_execution_id_domain, node_execution_id_execution_id_name, node_execution_id_node_id, **kwargs) # noqa: E501 return data - def list_node_executions_for_task2_with_http_info(self, task_execution_id_node_execution_id_execution_id_org, task_execution_id_node_execution_id_execution_id_project, task_execution_id_node_execution_id_execution_id_domain, task_execution_id_node_execution_id_execution_id_name, task_execution_id_node_execution_id_node_id, task_execution_id_task_id_project, task_execution_id_task_id_domain, task_execution_id_task_id_name, task_execution_id_task_id_version, task_execution_id_retry_attempt, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.NodeExecution` launched by the reference :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 + def list_task_executions2_with_http_info(self, node_execution_id_execution_id_org, node_execution_id_execution_id_project, node_execution_id_execution_id_domain, node_execution_id_execution_id_name, node_execution_id_node_id, **kwargs): # noqa: E501 + """Fetches a list of :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_node_executions_for_task2_with_http_info(task_execution_id_node_execution_id_execution_id_org, task_execution_id_node_execution_id_execution_id_project, task_execution_id_node_execution_id_execution_id_domain, task_execution_id_node_execution_id_execution_id_name, task_execution_id_node_execution_id_node_id, task_execution_id_task_id_project, task_execution_id_task_id_domain, task_execution_id_task_id_name, task_execution_id_task_id_version, task_execution_id_retry_attempt, async_req=True) + >>> thread = api.list_task_executions2_with_http_info(node_execution_id_execution_id_org, node_execution_id_execution_id_project, node_execution_id_execution_id_domain, node_execution_id_execution_id_name, node_execution_id_node_id, async_req=True) >>> result = thread.get() :param async_req bool - :param str task_execution_id_node_execution_id_execution_id_org: Optional, org key applied to the resource. (required) - :param str task_execution_id_node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) - :param str task_execution_id_node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str task_execution_id_node_execution_id_execution_id_name: User or system provided value for the resource. (required) - :param str task_execution_id_node_execution_id_node_id: (required) - :param str task_execution_id_task_id_project: Name of the project the resource belongs to. (required) - :param str task_execution_id_task_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str task_execution_id_task_id_name: User provided value for the resource. (required) - :param str task_execution_id_task_id_version: Specific version of the resource. (required) - :param int task_execution_id_retry_attempt: (required) - :param str task_execution_id_task_id_resource_type: Identifies the specific type of resource that this identifier corresponds to. - DATASET: A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects - :param str task_execution_id_task_id_org: Optional, org key applied to the resource. + :param str node_execution_id_execution_id_org: Optional, org key applied to the resource. (required) + :param str node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) + :param str node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str node_execution_id_execution_id_name: User or system provided value for the resource. (required) + :param str node_execution_id_node_id: (required) :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, the, server-provided token can be used to fetch the next page in a query. +optional. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminNodeExecutionList + :return: AdminTaskExecutionList If the method is called asynchronously, returns the request thread. """ - all_params = ['task_execution_id_node_execution_id_execution_id_org', 'task_execution_id_node_execution_id_execution_id_project', 'task_execution_id_node_execution_id_execution_id_domain', 'task_execution_id_node_execution_id_execution_id_name', 'task_execution_id_node_execution_id_node_id', 'task_execution_id_task_id_project', 'task_execution_id_task_id_domain', 'task_execution_id_task_id_name', 'task_execution_id_task_id_version', 'task_execution_id_retry_attempt', 'task_execution_id_task_id_resource_type', 'task_execution_id_task_id_org', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 + all_params = ['node_execution_id_execution_id_org', 'node_execution_id_execution_id_project', 'node_execution_id_execution_id_domain', 'node_execution_id_execution_id_name', 'node_execution_id_node_id', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -8385,80 +9912,46 @@ def list_node_executions_for_task2_with_http_info(self, task_execution_id_node_e if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_node_executions_for_task2" % key + " to method list_task_executions2" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'task_execution_id_node_execution_id_execution_id_org' is set - if ('task_execution_id_node_execution_id_execution_id_org' not in params or - params['task_execution_id_node_execution_id_execution_id_org'] is None): - raise ValueError("Missing the required parameter `task_execution_id_node_execution_id_execution_id_org` when calling `list_node_executions_for_task2`") # noqa: E501 - # verify the required parameter 'task_execution_id_node_execution_id_execution_id_project' is set - if ('task_execution_id_node_execution_id_execution_id_project' not in params or - params['task_execution_id_node_execution_id_execution_id_project'] is None): - raise ValueError("Missing the required parameter `task_execution_id_node_execution_id_execution_id_project` when calling `list_node_executions_for_task2`") # noqa: E501 - # verify the required parameter 'task_execution_id_node_execution_id_execution_id_domain' is set - if ('task_execution_id_node_execution_id_execution_id_domain' not in params or - params['task_execution_id_node_execution_id_execution_id_domain'] is None): - raise ValueError("Missing the required parameter `task_execution_id_node_execution_id_execution_id_domain` when calling `list_node_executions_for_task2`") # noqa: E501 - # verify the required parameter 'task_execution_id_node_execution_id_execution_id_name' is set - if ('task_execution_id_node_execution_id_execution_id_name' not in params or - params['task_execution_id_node_execution_id_execution_id_name'] is None): - raise ValueError("Missing the required parameter `task_execution_id_node_execution_id_execution_id_name` when calling `list_node_executions_for_task2`") # noqa: E501 - # verify the required parameter 'task_execution_id_node_execution_id_node_id' is set - if ('task_execution_id_node_execution_id_node_id' not in params or - params['task_execution_id_node_execution_id_node_id'] is None): - raise ValueError("Missing the required parameter `task_execution_id_node_execution_id_node_id` when calling `list_node_executions_for_task2`") # noqa: E501 - # verify the required parameter 'task_execution_id_task_id_project' is set - if ('task_execution_id_task_id_project' not in params or - params['task_execution_id_task_id_project'] is None): - raise ValueError("Missing the required parameter `task_execution_id_task_id_project` when calling `list_node_executions_for_task2`") # noqa: E501 - # verify the required parameter 'task_execution_id_task_id_domain' is set - if ('task_execution_id_task_id_domain' not in params or - params['task_execution_id_task_id_domain'] is None): - raise ValueError("Missing the required parameter `task_execution_id_task_id_domain` when calling `list_node_executions_for_task2`") # noqa: E501 - # verify the required parameter 'task_execution_id_task_id_name' is set - if ('task_execution_id_task_id_name' not in params or - params['task_execution_id_task_id_name'] is None): - raise ValueError("Missing the required parameter `task_execution_id_task_id_name` when calling `list_node_executions_for_task2`") # noqa: E501 - # verify the required parameter 'task_execution_id_task_id_version' is set - if ('task_execution_id_task_id_version' not in params or - params['task_execution_id_task_id_version'] is None): - raise ValueError("Missing the required parameter `task_execution_id_task_id_version` when calling `list_node_executions_for_task2`") # noqa: E501 - # verify the required parameter 'task_execution_id_retry_attempt' is set - if ('task_execution_id_retry_attempt' not in params or - params['task_execution_id_retry_attempt'] is None): - raise ValueError("Missing the required parameter `task_execution_id_retry_attempt` when calling `list_node_executions_for_task2`") # noqa: E501 + # verify the required parameter 'node_execution_id_execution_id_org' is set + if ('node_execution_id_execution_id_org' not in params or + params['node_execution_id_execution_id_org'] is None): + raise ValueError("Missing the required parameter `node_execution_id_execution_id_org` when calling `list_task_executions2`") # noqa: E501 + # verify the required parameter 'node_execution_id_execution_id_project' is set + if ('node_execution_id_execution_id_project' not in params or + params['node_execution_id_execution_id_project'] is None): + raise ValueError("Missing the required parameter `node_execution_id_execution_id_project` when calling `list_task_executions2`") # noqa: E501 + # verify the required parameter 'node_execution_id_execution_id_domain' is set + if ('node_execution_id_execution_id_domain' not in params or + params['node_execution_id_execution_id_domain'] is None): + raise ValueError("Missing the required parameter `node_execution_id_execution_id_domain` when calling `list_task_executions2`") # noqa: E501 + # verify the required parameter 'node_execution_id_execution_id_name' is set + if ('node_execution_id_execution_id_name' not in params or + params['node_execution_id_execution_id_name'] is None): + raise ValueError("Missing the required parameter `node_execution_id_execution_id_name` when calling `list_task_executions2`") # noqa: E501 + # verify the required parameter 'node_execution_id_node_id' is set + if ('node_execution_id_node_id' not in params or + params['node_execution_id_node_id'] is None): + raise ValueError("Missing the required parameter `node_execution_id_node_id` when calling `list_task_executions2`") # noqa: E501 collection_formats = {} path_params = {} - if 'task_execution_id_node_execution_id_execution_id_org' in params: - path_params['task_execution_id.node_execution_id.execution_id.org'] = params['task_execution_id_node_execution_id_execution_id_org'] # noqa: E501 - if 'task_execution_id_node_execution_id_execution_id_project' in params: - path_params['task_execution_id.node_execution_id.execution_id.project'] = params['task_execution_id_node_execution_id_execution_id_project'] # noqa: E501 - if 'task_execution_id_node_execution_id_execution_id_domain' in params: - path_params['task_execution_id.node_execution_id.execution_id.domain'] = params['task_execution_id_node_execution_id_execution_id_domain'] # noqa: E501 - if 'task_execution_id_node_execution_id_execution_id_name' in params: - path_params['task_execution_id.node_execution_id.execution_id.name'] = params['task_execution_id_node_execution_id_execution_id_name'] # noqa: E501 - if 'task_execution_id_node_execution_id_node_id' in params: - path_params['task_execution_id.node_execution_id.node_id'] = params['task_execution_id_node_execution_id_node_id'] # noqa: E501 - if 'task_execution_id_task_id_project' in params: - path_params['task_execution_id.task_id.project'] = params['task_execution_id_task_id_project'] # noqa: E501 - if 'task_execution_id_task_id_domain' in params: - path_params['task_execution_id.task_id.domain'] = params['task_execution_id_task_id_domain'] # noqa: E501 - if 'task_execution_id_task_id_name' in params: - path_params['task_execution_id.task_id.name'] = params['task_execution_id_task_id_name'] # noqa: E501 - if 'task_execution_id_task_id_version' in params: - path_params['task_execution_id.task_id.version'] = params['task_execution_id_task_id_version'] # noqa: E501 - if 'task_execution_id_retry_attempt' in params: - path_params['task_execution_id.retry_attempt'] = params['task_execution_id_retry_attempt'] # noqa: E501 + if 'node_execution_id_execution_id_org' in params: + path_params['node_execution_id.execution_id.org'] = params['node_execution_id_execution_id_org'] # noqa: E501 + if 'node_execution_id_execution_id_project' in params: + path_params['node_execution_id.execution_id.project'] = params['node_execution_id_execution_id_project'] # noqa: E501 + if 'node_execution_id_execution_id_domain' in params: + path_params['node_execution_id.execution_id.domain'] = params['node_execution_id_execution_id_domain'] # noqa: E501 + if 'node_execution_id_execution_id_name' in params: + path_params['node_execution_id.execution_id.name'] = params['node_execution_id_execution_id_name'] # noqa: E501 + if 'node_execution_id_node_id' in params: + path_params['node_execution_id.node_id'] = params['node_execution_id_node_id'] # noqa: E501 query_params = [] - if 'task_execution_id_task_id_resource_type' in params: - query_params.append(('task_execution_id.task_id.resource_type', params['task_execution_id_task_id_resource_type'])) # noqa: E501 - if 'task_execution_id_task_id_org' in params: - query_params.append(('task_execution_id.task_id.org', params['task_execution_id_task_id_org'])) # noqa: E501 if 'limit' in params: query_params.append(('limit', params['limit'])) # noqa: E501 if 'token' in params: @@ -8488,14 +9981,14 @@ def list_node_executions_for_task2_with_http_info(self, task_execution_id_node_e auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/children/task_executions/org/{task_execution_id.node_execution_id.execution_id.org}/{task_execution_id.node_execution_id.execution_id.project}/{task_execution_id.node_execution_id.execution_id.domain}/{task_execution_id.node_execution_id.execution_id.name}/{task_execution_id.node_execution_id.node_id}/{task_execution_id.task_id.project}/{task_execution_id.task_id.domain}/{task_execution_id.task_id.name}/{task_execution_id.task_id.version}/{task_execution_id.retry_attempt}', 'GET', + '/api/v1/task_executions/org/{node_execution_id.execution_id.org}/{node_execution_id.execution_id.project}/{node_execution_id.execution_id.domain}/{node_execution_id.execution_id.name}/{node_execution_id.node_id}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminNodeExecutionList', # noqa: E501 + response_type='AdminTaskExecutionList', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -8503,51 +9996,57 @@ def list_node_executions_for_task2_with_http_info(self, task_execution_id_node_e _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_projects(self, **kwargs): # noqa: E501 - """Fetches a list of :ref:`ref_flyteidl.admin.Project` # noqa: E501 + def list_task_ids(self, project, domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of task objects. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_projects(async_req=True) + >>> thread = api.list_task_ids(project, domain, async_req=True) >>> result = thread.get() :param async_req bool - :param int limit: Indicates the number of projects to be returned. +required. - :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. - :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str project: Name of the project that contains the identifiers. +required (required) + :param str domain: Name of the domain the identifiers belongs to within the project. +required (required) + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminProjects + :param str filters: Indicates a list of filters passed as string. +optional. + :param str org: Optional, org key applied to the resource. + :return: AdminNamedEntityIdentifierList If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_projects_with_http_info(**kwargs) # noqa: E501 + return self.list_task_ids_with_http_info(project, domain, **kwargs) # noqa: E501 else: - (data) = self.list_projects_with_http_info(**kwargs) # noqa: E501 + (data) = self.list_task_ids_with_http_info(project, domain, **kwargs) # noqa: E501 return data - def list_projects_with_http_info(self, **kwargs): # noqa: E501 - """Fetches a list of :ref:`ref_flyteidl.admin.Project` # noqa: E501 + def list_task_ids_with_http_info(self, project, domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of task objects. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_projects_with_http_info(async_req=True) + >>> thread = api.list_task_ids_with_http_info(project, domain, async_req=True) >>> result = thread.get() :param async_req bool - :param int limit: Indicates the number of projects to be returned. +required. - :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. - :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str project: Name of the project that contains the identifiers. +required (required) + :param str domain: Name of the domain the identifiers belongs to within the project. +required (required) + :param int limit: Indicates the number of resources to be returned. +required. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminProjects + :param str filters: Indicates a list of filters passed as string. +optional. + :param str org: Optional, org key applied to the resource. + :return: AdminNamedEntityIdentifierList If the method is called asynchronously, returns the request thread. """ - all_params = ['limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 + all_params = ['project', 'domain', 'limit', 'token', 'sort_by_key', 'sort_by_direction', 'filters', 'org'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -8558,26 +10057,40 @@ def list_projects_with_http_info(self, **kwargs): # noqa: E501 if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_projects" % key + " to method list_task_ids" % key ) params[key] = val del params['kwargs'] + # verify the required parameter 'project' is set + if ('project' not in params or + params['project'] is None): + raise ValueError("Missing the required parameter `project` when calling `list_task_ids`") # noqa: E501 + # verify the required parameter 'domain' is set + if ('domain' not in params or + params['domain'] is None): + raise ValueError("Missing the required parameter `domain` when calling `list_task_ids`") # noqa: E501 collection_formats = {} path_params = {} + if 'project' in params: + path_params['project'] = params['project'] # noqa: E501 + if 'domain' in params: + path_params['domain'] = params['domain'] # noqa: E501 query_params = [] if 'limit' in params: query_params.append(('limit', params['limit'])) # noqa: E501 if 'token' in params: query_params.append(('token', params['token'])) # noqa: E501 - if 'filters' in params: - query_params.append(('filters', params['filters'])) # noqa: E501 if 'sort_by_key' in params: query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 if 'sort_by_direction' in params: query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 + if 'filters' in params: + query_params.append(('filters', params['filters'])) # noqa: E501 + if 'org' in params: + query_params.append(('org', params['org'])) # noqa: E501 header_params = {} @@ -8597,14 +10110,14 @@ def list_projects_with_http_info(self, **kwargs): # noqa: E501 auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/projects', 'GET', + '/api/v1/task_ids/{project}/{domain}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminProjects', # noqa: E501 + response_type='AdminNamedEntityIdentifierList', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -8612,61 +10125,57 @@ def list_projects_with_http_info(self, **kwargs): # noqa: E501 _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_task_executions(self, node_execution_id_execution_id_project, node_execution_id_execution_id_domain, node_execution_id_execution_id_name, node_execution_id_node_id, **kwargs): # noqa: E501 - """Fetches a list of :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 + def list_task_ids2(self, org, project, domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of task objects. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_task_executions(node_execution_id_execution_id_project, node_execution_id_execution_id_domain, node_execution_id_execution_id_name, node_execution_id_node_id, async_req=True) + >>> thread = api.list_task_ids2(org, project, domain, async_req=True) >>> result = thread.get() :param async_req bool - :param str node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) - :param str node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str node_execution_id_execution_id_name: User or system provided value for the resource. (required) - :param str node_execution_id_node_id: (required) - :param str node_execution_id_execution_id_org: Optional, org key applied to the resource. + :param str org: Optional, org key applied to the resource. (required) + :param str project: Name of the project that contains the identifiers. +required (required) + :param str domain: Name of the domain the identifiers belongs to within the project. +required (required) :param int limit: Indicates the number of resources to be returned. +required. :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. - :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminTaskExecutionList + :param str filters: Indicates a list of filters passed as string. +optional. + :return: AdminNamedEntityIdentifierList If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_task_executions_with_http_info(node_execution_id_execution_id_project, node_execution_id_execution_id_domain, node_execution_id_execution_id_name, node_execution_id_node_id, **kwargs) # noqa: E501 + return self.list_task_ids2_with_http_info(org, project, domain, **kwargs) # noqa: E501 else: - (data) = self.list_task_executions_with_http_info(node_execution_id_execution_id_project, node_execution_id_execution_id_domain, node_execution_id_execution_id_name, node_execution_id_node_id, **kwargs) # noqa: E501 + (data) = self.list_task_ids2_with_http_info(org, project, domain, **kwargs) # noqa: E501 return data - def list_task_executions_with_http_info(self, node_execution_id_execution_id_project, node_execution_id_execution_id_domain, node_execution_id_execution_id_name, node_execution_id_node_id, **kwargs): # noqa: E501 - """Fetches a list of :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 + def list_task_ids2_with_http_info(self, org, project, domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of task objects. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_task_executions_with_http_info(node_execution_id_execution_id_project, node_execution_id_execution_id_domain, node_execution_id_execution_id_name, node_execution_id_node_id, async_req=True) + >>> thread = api.list_task_ids2_with_http_info(org, project, domain, async_req=True) >>> result = thread.get() :param async_req bool - :param str node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) - :param str node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str node_execution_id_execution_id_name: User or system provided value for the resource. (required) - :param str node_execution_id_node_id: (required) - :param str node_execution_id_execution_id_org: Optional, org key applied to the resource. + :param str org: Optional, org key applied to the resource. (required) + :param str project: Name of the project that contains the identifiers. +required (required) + :param str domain: Name of the domain the identifiers belongs to within the project. +required (required) :param int limit: Indicates the number of resources to be returned. +required. :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. - :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminTaskExecutionList + :param str filters: Indicates a list of filters passed as string. +optional. + :return: AdminNamedEntityIdentifierList If the method is called asynchronously, returns the request thread. """ - all_params = ['node_execution_id_execution_id_project', 'node_execution_id_execution_id_domain', 'node_execution_id_execution_id_name', 'node_execution_id_node_id', 'node_execution_id_execution_id_org', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 + all_params = ['org', 'project', 'domain', 'limit', 'token', 'sort_by_key', 'sort_by_direction', 'filters'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -8677,52 +10186,44 @@ def list_task_executions_with_http_info(self, node_execution_id_execution_id_pro if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_task_executions" % key + " to method list_task_ids2" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'node_execution_id_execution_id_project' is set - if ('node_execution_id_execution_id_project' not in params or - params['node_execution_id_execution_id_project'] is None): - raise ValueError("Missing the required parameter `node_execution_id_execution_id_project` when calling `list_task_executions`") # noqa: E501 - # verify the required parameter 'node_execution_id_execution_id_domain' is set - if ('node_execution_id_execution_id_domain' not in params or - params['node_execution_id_execution_id_domain'] is None): - raise ValueError("Missing the required parameter `node_execution_id_execution_id_domain` when calling `list_task_executions`") # noqa: E501 - # verify the required parameter 'node_execution_id_execution_id_name' is set - if ('node_execution_id_execution_id_name' not in params or - params['node_execution_id_execution_id_name'] is None): - raise ValueError("Missing the required parameter `node_execution_id_execution_id_name` when calling `list_task_executions`") # noqa: E501 - # verify the required parameter 'node_execution_id_node_id' is set - if ('node_execution_id_node_id' not in params or - params['node_execution_id_node_id'] is None): - raise ValueError("Missing the required parameter `node_execution_id_node_id` when calling `list_task_executions`") # noqa: E501 + # verify the required parameter 'org' is set + if ('org' not in params or + params['org'] is None): + raise ValueError("Missing the required parameter `org` when calling `list_task_ids2`") # noqa: E501 + # verify the required parameter 'project' is set + if ('project' not in params or + params['project'] is None): + raise ValueError("Missing the required parameter `project` when calling `list_task_ids2`") # noqa: E501 + # verify the required parameter 'domain' is set + if ('domain' not in params or + params['domain'] is None): + raise ValueError("Missing the required parameter `domain` when calling `list_task_ids2`") # noqa: E501 collection_formats = {} path_params = {} - if 'node_execution_id_execution_id_project' in params: - path_params['node_execution_id.execution_id.project'] = params['node_execution_id_execution_id_project'] # noqa: E501 - if 'node_execution_id_execution_id_domain' in params: - path_params['node_execution_id.execution_id.domain'] = params['node_execution_id_execution_id_domain'] # noqa: E501 - if 'node_execution_id_execution_id_name' in params: - path_params['node_execution_id.execution_id.name'] = params['node_execution_id_execution_id_name'] # noqa: E501 - if 'node_execution_id_node_id' in params: - path_params['node_execution_id.node_id'] = params['node_execution_id_node_id'] # noqa: E501 + if 'org' in params: + path_params['org'] = params['org'] # noqa: E501 + if 'project' in params: + path_params['project'] = params['project'] # noqa: E501 + if 'domain' in params: + path_params['domain'] = params['domain'] # noqa: E501 query_params = [] - if 'node_execution_id_execution_id_org' in params: - query_params.append(('node_execution_id.execution_id.org', params['node_execution_id_execution_id_org'])) # noqa: E501 if 'limit' in params: query_params.append(('limit', params['limit'])) # noqa: E501 if 'token' in params: query_params.append(('token', params['token'])) # noqa: E501 - if 'filters' in params: - query_params.append(('filters', params['filters'])) # noqa: E501 if 'sort_by_key' in params: query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 if 'sort_by_direction' in params: query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 + if 'filters' in params: + query_params.append(('filters', params['filters'])) # noqa: E501 header_params = {} @@ -8742,14 +10243,14 @@ def list_task_executions_with_http_info(self, node_execution_id_execution_id_pro auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/task_executions/{node_execution_id.execution_id.project}/{node_execution_id.execution_id.domain}/{node_execution_id.execution_id.name}/{node_execution_id.node_id}', 'GET', + '/api/v1/tasks/org/{org}/{project}/{domain}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminTaskExecutionList', # noqa: E501 + response_type='AdminNamedEntityIdentifierList', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -8757,61 +10258,59 @@ def list_task_executions_with_http_info(self, node_execution_id_execution_id_pro _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_task_executions2(self, node_execution_id_execution_id_org, node_execution_id_execution_id_project, node_execution_id_execution_id_domain, node_execution_id_execution_id_name, node_execution_id_node_id, **kwargs): # noqa: E501 - """Fetches a list of :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 + def list_tasks(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_task_executions2(node_execution_id_execution_id_org, node_execution_id_execution_id_project, node_execution_id_execution_id_domain, node_execution_id_execution_id_name, node_execution_id_node_id, async_req=True) + >>> thread = api.list_tasks(id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str node_execution_id_execution_id_org: Optional, org key applied to the resource. (required) - :param str node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) - :param str node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str node_execution_id_execution_id_name: User or system provided value for the resource. (required) - :param str node_execution_id_node_id: (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) + :param str id_org: Optional, org key applied to the resource. :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminTaskExecutionList + :return: AdminTaskList If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_task_executions2_with_http_info(node_execution_id_execution_id_org, node_execution_id_execution_id_project, node_execution_id_execution_id_domain, node_execution_id_execution_id_name, node_execution_id_node_id, **kwargs) # noqa: E501 + return self.list_tasks_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 else: - (data) = self.list_task_executions2_with_http_info(node_execution_id_execution_id_org, node_execution_id_execution_id_project, node_execution_id_execution_id_domain, node_execution_id_execution_id_name, node_execution_id_node_id, **kwargs) # noqa: E501 + (data) = self.list_tasks_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 return data - def list_task_executions2_with_http_info(self, node_execution_id_execution_id_org, node_execution_id_execution_id_project, node_execution_id_execution_id_domain, node_execution_id_execution_id_name, node_execution_id_node_id, **kwargs): # noqa: E501 - """Fetches a list of :ref:`ref_flyteidl.admin.TaskExecution`. # noqa: E501 + def list_tasks_with_http_info(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_task_executions2_with_http_info(node_execution_id_execution_id_org, node_execution_id_execution_id_project, node_execution_id_execution_id_domain, node_execution_id_execution_id_name, node_execution_id_node_id, async_req=True) + >>> thread = api.list_tasks_with_http_info(id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str node_execution_id_execution_id_org: Optional, org key applied to the resource. (required) - :param str node_execution_id_execution_id_project: Name of the project the resource belongs to. (required) - :param str node_execution_id_execution_id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str node_execution_id_execution_id_name: User or system provided value for the resource. (required) - :param str node_execution_id_node_id: (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) + :param str id_org: Optional, org key applied to the resource. :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminTaskExecutionList + :return: AdminTaskList If the method is called asynchronously, returns the request thread. """ - all_params = ['node_execution_id_execution_id_org', 'node_execution_id_execution_id_project', 'node_execution_id_execution_id_domain', 'node_execution_id_execution_id_name', 'node_execution_id_node_id', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 + all_params = ['id_project', 'id_domain', 'id_name', 'id_org', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -8822,46 +10321,36 @@ def list_task_executions2_with_http_info(self, node_execution_id_execution_id_or if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_task_executions2" % key + " to method list_tasks" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'node_execution_id_execution_id_org' is set - if ('node_execution_id_execution_id_org' not in params or - params['node_execution_id_execution_id_org'] is None): - raise ValueError("Missing the required parameter `node_execution_id_execution_id_org` when calling `list_task_executions2`") # noqa: E501 - # verify the required parameter 'node_execution_id_execution_id_project' is set - if ('node_execution_id_execution_id_project' not in params or - params['node_execution_id_execution_id_project'] is None): - raise ValueError("Missing the required parameter `node_execution_id_execution_id_project` when calling `list_task_executions2`") # noqa: E501 - # verify the required parameter 'node_execution_id_execution_id_domain' is set - if ('node_execution_id_execution_id_domain' not in params or - params['node_execution_id_execution_id_domain'] is None): - raise ValueError("Missing the required parameter `node_execution_id_execution_id_domain` when calling `list_task_executions2`") # noqa: E501 - # verify the required parameter 'node_execution_id_execution_id_name' is set - if ('node_execution_id_execution_id_name' not in params or - params['node_execution_id_execution_id_name'] is None): - raise ValueError("Missing the required parameter `node_execution_id_execution_id_name` when calling `list_task_executions2`") # noqa: E501 - # verify the required parameter 'node_execution_id_node_id' is set - if ('node_execution_id_node_id' not in params or - params['node_execution_id_node_id'] is None): - raise ValueError("Missing the required parameter `node_execution_id_node_id` when calling `list_task_executions2`") # noqa: E501 + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `list_tasks`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `list_tasks`") # noqa: E501 + # verify the required parameter 'id_name' is set + if ('id_name' not in params or + params['id_name'] is None): + raise ValueError("Missing the required parameter `id_name` when calling `list_tasks`") # noqa: E501 collection_formats = {} path_params = {} - if 'node_execution_id_execution_id_org' in params: - path_params['node_execution_id.execution_id.org'] = params['node_execution_id_execution_id_org'] # noqa: E501 - if 'node_execution_id_execution_id_project' in params: - path_params['node_execution_id.execution_id.project'] = params['node_execution_id_execution_id_project'] # noqa: E501 - if 'node_execution_id_execution_id_domain' in params: - path_params['node_execution_id.execution_id.domain'] = params['node_execution_id_execution_id_domain'] # noqa: E501 - if 'node_execution_id_execution_id_name' in params: - path_params['node_execution_id.execution_id.name'] = params['node_execution_id_execution_id_name'] # noqa: E501 - if 'node_execution_id_node_id' in params: - path_params['node_execution_id.node_id'] = params['node_execution_id_node_id'] # noqa: E501 + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 + if 'id_name' in params: + path_params['id.name'] = params['id_name'] # noqa: E501 query_params = [] + if 'id_org' in params: + query_params.append(('id.org', params['id_org'])) # noqa: E501 if 'limit' in params: query_params.append(('limit', params['limit'])) # noqa: E501 if 'token' in params: @@ -8891,14 +10380,14 @@ def list_task_executions2_with_http_info(self, node_execution_id_execution_id_or auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/task_executions/org/{node_execution_id.execution_id.org}/{node_execution_id.execution_id.project}/{node_execution_id.execution_id.domain}/{node_execution_id.execution_id.name}/{node_execution_id.node_id}', 'GET', + '/api/v1/tasks/{id.project}/{id.domain}/{id.name}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminTaskExecutionList', # noqa: E501 + response_type='AdminTaskList', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -8906,57 +10395,59 @@ def list_task_executions2_with_http_info(self, node_execution_id_execution_id_or _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_task_ids(self, project, domain, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of task objects. # noqa: E501 + def list_tasks2(self, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_task_ids(project, domain, async_req=True) + >>> thread = api.list_tasks2(id_org, id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str project: Name of the project that contains the identifiers. +required (required) - :param str domain: Name of the domain the identifiers belongs to within the project. +required (required) + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :param str filters: Indicates a list of filters passed as string. +optional. - :param str org: Optional, org key applied to the resource. - :return: AdminNamedEntityIdentifierList + :return: AdminTaskList If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_task_ids_with_http_info(project, domain, **kwargs) # noqa: E501 + return self.list_tasks2_with_http_info(id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 else: - (data) = self.list_task_ids_with_http_info(project, domain, **kwargs) # noqa: E501 + (data) = self.list_tasks2_with_http_info(id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 return data - def list_task_ids_with_http_info(self, project, domain, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of task objects. # noqa: E501 + def list_tasks2_with_http_info(self, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_task_ids_with_http_info(project, domain, async_req=True) + >>> thread = api.list_tasks2_with_http_info(id_org, id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str project: Name of the project that contains the identifiers. +required (required) - :param str domain: Name of the domain the identifiers belongs to within the project. +required (required) + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :param str filters: Indicates a list of filters passed as string. +optional. - :param str org: Optional, org key applied to the resource. - :return: AdminNamedEntityIdentifierList + :return: AdminTaskList If the method is called asynchronously, returns the request thread. """ - all_params = ['project', 'domain', 'limit', 'token', 'sort_by_key', 'sort_by_direction', 'filters', 'org'] # noqa: E501 + all_params = ['id_org', 'id_project', 'id_domain', 'id_name', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -8967,40 +10458,50 @@ def list_task_ids_with_http_info(self, project, domain, **kwargs): # noqa: E501 if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_task_ids" % key + " to method list_tasks2" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'project' is set - if ('project' not in params or - params['project'] is None): - raise ValueError("Missing the required parameter `project` when calling `list_task_ids`") # noqa: E501 - # verify the required parameter 'domain' is set - if ('domain' not in params or - params['domain'] is None): - raise ValueError("Missing the required parameter `domain` when calling `list_task_ids`") # noqa: E501 + # verify the required parameter 'id_org' is set + if ('id_org' not in params or + params['id_org'] is None): + raise ValueError("Missing the required parameter `id_org` when calling `list_tasks2`") # noqa: E501 + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `list_tasks2`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `list_tasks2`") # noqa: E501 + # verify the required parameter 'id_name' is set + if ('id_name' not in params or + params['id_name'] is None): + raise ValueError("Missing the required parameter `id_name` when calling `list_tasks2`") # noqa: E501 collection_formats = {} path_params = {} - if 'project' in params: - path_params['project'] = params['project'] # noqa: E501 - if 'domain' in params: - path_params['domain'] = params['domain'] # noqa: E501 + if 'id_org' in params: + path_params['id.org'] = params['id_org'] # noqa: E501 + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 + if 'id_name' in params: + path_params['id.name'] = params['id_name'] # noqa: E501 query_params = [] if 'limit' in params: query_params.append(('limit', params['limit'])) # noqa: E501 if 'token' in params: query_params.append(('token', params['token'])) # noqa: E501 + if 'filters' in params: + query_params.append(('filters', params['filters'])) # noqa: E501 if 'sort_by_key' in params: query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 if 'sort_by_direction' in params: query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 - if 'filters' in params: - query_params.append(('filters', params['filters'])) # noqa: E501 - if 'org' in params: - query_params.append(('org', params['org'])) # noqa: E501 header_params = {} @@ -9020,14 +10521,14 @@ def list_task_ids_with_http_info(self, project, domain, **kwargs): # noqa: E501 auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/task_ids/{project}/{domain}', 'GET', + '/api/v1/tasks/org/{id.org}/{id.project}/{id.domain}/{id.name}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminNamedEntityIdentifierList', # noqa: E501 + response_type='AdminTaskList', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -9035,57 +10536,59 @@ def list_task_ids_with_http_info(self, project, domain, **kwargs): # noqa: E501 _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_task_ids2(self, org, project, domain, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of task objects. # noqa: E501 + def list_tasks3(self, id_project, id_domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_task_ids2(org, project, domain, async_req=True) + >>> thread = api.list_tasks3(id_project, id_domain, async_req=True) >>> result = thread.get() :param async_req bool - :param str org: Optional, org key applied to the resource. (required) - :param str project: Name of the project that contains the identifiers. +required (required) - :param str domain: Name of the domain the identifiers belongs to within the project. +required (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. + :param str id_org: Optional, org key applied to the resource. :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :param str filters: Indicates a list of filters passed as string. +optional. - :return: AdminNamedEntityIdentifierList + :return: AdminTaskList If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_task_ids2_with_http_info(org, project, domain, **kwargs) # noqa: E501 + return self.list_tasks3_with_http_info(id_project, id_domain, **kwargs) # noqa: E501 else: - (data) = self.list_task_ids2_with_http_info(org, project, domain, **kwargs) # noqa: E501 + (data) = self.list_tasks3_with_http_info(id_project, id_domain, **kwargs) # noqa: E501 return data - def list_task_ids2_with_http_info(self, org, project, domain, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of task objects. # noqa: E501 + def list_tasks3_with_http_info(self, id_project, id_domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_task_ids2_with_http_info(org, project, domain, async_req=True) + >>> thread = api.list_tasks3_with_http_info(id_project, id_domain, async_req=True) >>> result = thread.get() :param async_req bool - :param str org: Optional, org key applied to the resource. (required) - :param str project: Name of the project that contains the identifiers. +required (required) - :param str domain: Name of the domain the identifiers belongs to within the project. +required (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. + :param str id_org: Optional, org key applied to the resource. :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :param str filters: Indicates a list of filters passed as string. +optional. - :return: AdminNamedEntityIdentifierList + :return: AdminTaskList If the method is called asynchronously, returns the request thread. """ - all_params = ['org', 'project', 'domain', 'limit', 'token', 'sort_by_key', 'sort_by_direction', 'filters'] # noqa: E501 + all_params = ['id_project', 'id_domain', 'id_name', 'id_org', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -9096,44 +10599,42 @@ def list_task_ids2_with_http_info(self, org, project, domain, **kwargs): # noqa if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_task_ids2" % key + " to method list_tasks3" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'org' is set - if ('org' not in params or - params['org'] is None): - raise ValueError("Missing the required parameter `org` when calling `list_task_ids2`") # noqa: E501 - # verify the required parameter 'project' is set - if ('project' not in params or - params['project'] is None): - raise ValueError("Missing the required parameter `project` when calling `list_task_ids2`") # noqa: E501 - # verify the required parameter 'domain' is set - if ('domain' not in params or - params['domain'] is None): - raise ValueError("Missing the required parameter `domain` when calling `list_task_ids2`") # noqa: E501 + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `list_tasks3`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `list_tasks3`") # noqa: E501 collection_formats = {} path_params = {} - if 'org' in params: - path_params['org'] = params['org'] # noqa: E501 - if 'project' in params: - path_params['project'] = params['project'] # noqa: E501 - if 'domain' in params: - path_params['domain'] = params['domain'] # noqa: E501 + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 query_params = [] + if 'id_name' in params: + query_params.append(('id.name', params['id_name'])) # noqa: E501 + if 'id_org' in params: + query_params.append(('id.org', params['id_org'])) # noqa: E501 if 'limit' in params: query_params.append(('limit', params['limit'])) # noqa: E501 if 'token' in params: query_params.append(('token', params['token'])) # noqa: E501 + if 'filters' in params: + query_params.append(('filters', params['filters'])) # noqa: E501 if 'sort_by_key' in params: query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 if 'sort_by_direction' in params: query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 - if 'filters' in params: - query_params.append(('filters', params['filters'])) # noqa: E501 header_params = {} @@ -9153,14 +10654,14 @@ def list_task_ids2_with_http_info(self, org, project, domain, **kwargs): # noqa auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/tasks/org/{org}/{project}/{domain}', 'GET', + '/api/v1/tasks/{id.project}/{id.domain}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminNamedEntityIdentifierList', # noqa: E501 + response_type='AdminTaskList', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -9168,19 +10669,19 @@ def list_task_ids2_with_http_info(self, org, project, domain, **kwargs): # noqa _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_tasks(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 + def list_tasks4(self, id_org, id_project, id_domain, **kwargs): # noqa: E501 """Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_tasks(id_project, id_domain, id_name, async_req=True) + >>> thread = api.list_tasks4(id_org, id_project, id_domain, async_req=True) >>> result = thread.get() :param async_req bool + :param str id_org: Optional, org key applied to the resource. (required) :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) - :param str id_org: Optional, org key applied to the resource. + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. :param int limit: Indicates the number of resources to be returned. +required. :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. @@ -9192,24 +10693,24 @@ def list_tasks(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_tasks_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 + return self.list_tasks4_with_http_info(id_org, id_project, id_domain, **kwargs) # noqa: E501 else: - (data) = self.list_tasks_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 + (data) = self.list_tasks4_with_http_info(id_org, id_project, id_domain, **kwargs) # noqa: E501 return data - def list_tasks_with_http_info(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 + def list_tasks4_with_http_info(self, id_org, id_project, id_domain, **kwargs): # noqa: E501 """Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_tasks_with_http_info(id_project, id_domain, id_name, async_req=True) + >>> thread = api.list_tasks4_with_http_info(id_org, id_project, id_domain, async_req=True) >>> result = thread.get() :param async_req bool + :param str id_org: Optional, org key applied to the resource. (required) :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) - :param str id_org: Optional, org key applied to the resource. + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. :param int limit: Indicates the number of resources to be returned. +required. :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. @@ -9220,7 +10721,7 @@ def list_tasks_with_http_info(self, id_project, id_domain, id_name, **kwargs): returns the request thread. """ - all_params = ['id_project', 'id_domain', 'id_name', 'id_org', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 + all_params = ['id_org', 'id_project', 'id_domain', 'id_name', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -9231,36 +10732,36 @@ def list_tasks_with_http_info(self, id_project, id_domain, id_name, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_tasks" % key + " to method list_tasks4" % key ) params[key] = val del params['kwargs'] + # verify the required parameter 'id_org' is set + if ('id_org' not in params or + params['id_org'] is None): + raise ValueError("Missing the required parameter `id_org` when calling `list_tasks4`") # noqa: E501 # verify the required parameter 'id_project' is set if ('id_project' not in params or params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `list_tasks`") # noqa: E501 + raise ValueError("Missing the required parameter `id_project` when calling `list_tasks4`") # noqa: E501 # verify the required parameter 'id_domain' is set if ('id_domain' not in params or params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `list_tasks`") # noqa: E501 - # verify the required parameter 'id_name' is set - if ('id_name' not in params or - params['id_name'] is None): - raise ValueError("Missing the required parameter `id_name` when calling `list_tasks`") # noqa: E501 + raise ValueError("Missing the required parameter `id_domain` when calling `list_tasks4`") # noqa: E501 collection_formats = {} path_params = {} + if 'id_org' in params: + path_params['id.org'] = params['id_org'] # noqa: E501 if 'id_project' in params: path_params['id.project'] = params['id_project'] # noqa: E501 if 'id_domain' in params: path_params['id.domain'] = params['id_domain'] # noqa: E501 - if 'id_name' in params: - path_params['id.name'] = params['id_name'] # noqa: E501 query_params = [] - if 'id_org' in params: - query_params.append(('id.org', params['id_org'])) # noqa: E501 + if 'id_name' in params: + query_params.append(('id.name', params['id_name'])) # noqa: E501 if 'limit' in params: query_params.append(('limit', params['limit'])) # noqa: E501 if 'token' in params: @@ -9290,7 +10791,7 @@ def list_tasks_with_http_info(self, id_project, id_domain, id_name, **kwargs): auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/tasks/{id.project}/{id.domain}/{id.name}', 'GET', + '/api/v1/tasks/org/{id.org}/{id.project}/{id.domain}', 'GET', path_params, query_params, header_params, @@ -9305,59 +10806,57 @@ def list_tasks_with_http_info(self, id_project, id_domain, id_name, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_tasks2(self, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions. # noqa: E501 + def list_workflow_ids(self, project, domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of workflow objects. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_tasks2(id_org, id_project, id_domain, id_name, async_req=True) + >>> thread = api.list_workflow_ids(project, domain, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_org: Optional, org key applied to the resource. (required) - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) + :param str project: Name of the project that contains the identifiers. +required (required) + :param str domain: Name of the domain the identifiers belongs to within the project. +required (required) :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. - :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminTaskList + :param str filters: Indicates a list of filters passed as string. +optional. + :param str org: Optional, org key applied to the resource. + :return: AdminNamedEntityIdentifierList If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_tasks2_with_http_info(id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 + return self.list_workflow_ids_with_http_info(project, domain, **kwargs) # noqa: E501 else: - (data) = self.list_tasks2_with_http_info(id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 + (data) = self.list_workflow_ids_with_http_info(project, domain, **kwargs) # noqa: E501 return data - def list_tasks2_with_http_info(self, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions. # noqa: E501 - + def list_workflow_ids_with_http_info(self, project, domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of workflow objects. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_tasks2_with_http_info(id_org, id_project, id_domain, id_name, async_req=True) + >>> thread = api.list_workflow_ids_with_http_info(project, domain, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_org: Optional, org key applied to the resource. (required) - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) + :param str project: Name of the project that contains the identifiers. +required (required) + :param str domain: Name of the domain the identifiers belongs to within the project. +required (required) :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. - :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminTaskList + :param str filters: Indicates a list of filters passed as string. +optional. + :param str org: Optional, org key applied to the resource. + :return: AdminNamedEntityIdentifierList If the method is called asynchronously, returns the request thread. """ - all_params = ['id_org', 'id_project', 'id_domain', 'id_name', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 + all_params = ['project', 'domain', 'limit', 'token', 'sort_by_key', 'sort_by_direction', 'filters', 'org'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -9368,50 +10867,40 @@ def list_tasks2_with_http_info(self, id_org, id_project, id_domain, id_name, **k if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_tasks2" % key + " to method list_workflow_ids" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'id_org' is set - if ('id_org' not in params or - params['id_org'] is None): - raise ValueError("Missing the required parameter `id_org` when calling `list_tasks2`") # noqa: E501 - # verify the required parameter 'id_project' is set - if ('id_project' not in params or - params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `list_tasks2`") # noqa: E501 - # verify the required parameter 'id_domain' is set - if ('id_domain' not in params or - params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `list_tasks2`") # noqa: E501 - # verify the required parameter 'id_name' is set - if ('id_name' not in params or - params['id_name'] is None): - raise ValueError("Missing the required parameter `id_name` when calling `list_tasks2`") # noqa: E501 + # verify the required parameter 'project' is set + if ('project' not in params or + params['project'] is None): + raise ValueError("Missing the required parameter `project` when calling `list_workflow_ids`") # noqa: E501 + # verify the required parameter 'domain' is set + if ('domain' not in params or + params['domain'] is None): + raise ValueError("Missing the required parameter `domain` when calling `list_workflow_ids`") # noqa: E501 collection_formats = {} path_params = {} - if 'id_org' in params: - path_params['id.org'] = params['id_org'] # noqa: E501 - if 'id_project' in params: - path_params['id.project'] = params['id_project'] # noqa: E501 - if 'id_domain' in params: - path_params['id.domain'] = params['id_domain'] # noqa: E501 - if 'id_name' in params: - path_params['id.name'] = params['id_name'] # noqa: E501 + if 'project' in params: + path_params['project'] = params['project'] # noqa: E501 + if 'domain' in params: + path_params['domain'] = params['domain'] # noqa: E501 query_params = [] if 'limit' in params: query_params.append(('limit', params['limit'])) # noqa: E501 if 'token' in params: query_params.append(('token', params['token'])) # noqa: E501 - if 'filters' in params: - query_params.append(('filters', params['filters'])) # noqa: E501 if 'sort_by_key' in params: query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 if 'sort_by_direction' in params: query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 + if 'filters' in params: + query_params.append(('filters', params['filters'])) # noqa: E501 + if 'org' in params: + query_params.append(('org', params['org'])) # noqa: E501 header_params = {} @@ -9431,14 +10920,14 @@ def list_tasks2_with_http_info(self, id_org, id_project, id_domain, id_name, **k auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/tasks/org/{id.org}/{id.project}/{id.domain}/{id.name}', 'GET', + '/api/v1/workflow_ids/{project}/{domain}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminTaskList', # noqa: E501 + response_type='AdminNamedEntityIdentifierList', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -9446,59 +10935,57 @@ def list_tasks2_with_http_info(self, id_org, id_project, id_domain, id_name, **k _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_tasks3(self, id_project, id_domain, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions. # noqa: E501 + def list_workflow_ids2(self, org, project, domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of workflow objects. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_tasks3(id_project, id_domain, async_req=True) + >>> thread = api.list_workflow_ids2(org, project, domain, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. - :param str id_org: Optional, org key applied to the resource. + :param str org: Optional, org key applied to the resource. (required) + :param str project: Name of the project that contains the identifiers. +required (required) + :param str domain: Name of the domain the identifiers belongs to within the project. +required (required) :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. - :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminTaskList + :param str filters: Indicates a list of filters passed as string. +optional. + :return: AdminNamedEntityIdentifierList If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_tasks3_with_http_info(id_project, id_domain, **kwargs) # noqa: E501 + return self.list_workflow_ids2_with_http_info(org, project, domain, **kwargs) # noqa: E501 else: - (data) = self.list_tasks3_with_http_info(id_project, id_domain, **kwargs) # noqa: E501 + (data) = self.list_workflow_ids2_with_http_info(org, project, domain, **kwargs) # noqa: E501 return data - def list_tasks3_with_http_info(self, id_project, id_domain, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions. # noqa: E501 + def list_workflow_ids2_with_http_info(self, org, project, domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of workflow objects. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_tasks3_with_http_info(id_project, id_domain, async_req=True) + >>> thread = api.list_workflow_ids2_with_http_info(org, project, domain, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. - :param str id_org: Optional, org key applied to the resource. + :param str org: Optional, org key applied to the resource. (required) + :param str project: Name of the project that contains the identifiers. +required (required) + :param str domain: Name of the domain the identifiers belongs to within the project. +required (required) :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. - :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. + :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminTaskList + :param str filters: Indicates a list of filters passed as string. +optional. + :return: AdminNamedEntityIdentifierList If the method is called asynchronously, returns the request thread. """ - all_params = ['id_project', 'id_domain', 'id_name', 'id_org', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 + all_params = ['org', 'project', 'domain', 'limit', 'token', 'sort_by_key', 'sort_by_direction', 'filters'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -9509,42 +10996,44 @@ def list_tasks3_with_http_info(self, id_project, id_domain, **kwargs): # noqa: if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_tasks3" % key + " to method list_workflow_ids2" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'id_project' is set - if ('id_project' not in params or - params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `list_tasks3`") # noqa: E501 - # verify the required parameter 'id_domain' is set - if ('id_domain' not in params or - params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `list_tasks3`") # noqa: E501 + # verify the required parameter 'org' is set + if ('org' not in params or + params['org'] is None): + raise ValueError("Missing the required parameter `org` when calling `list_workflow_ids2`") # noqa: E501 + # verify the required parameter 'project' is set + if ('project' not in params or + params['project'] is None): + raise ValueError("Missing the required parameter `project` when calling `list_workflow_ids2`") # noqa: E501 + # verify the required parameter 'domain' is set + if ('domain' not in params or + params['domain'] is None): + raise ValueError("Missing the required parameter `domain` when calling `list_workflow_ids2`") # noqa: E501 collection_formats = {} path_params = {} - if 'id_project' in params: - path_params['id.project'] = params['id_project'] # noqa: E501 - if 'id_domain' in params: - path_params['id.domain'] = params['id_domain'] # noqa: E501 + if 'org' in params: + path_params['org'] = params['org'] # noqa: E501 + if 'project' in params: + path_params['project'] = params['project'] # noqa: E501 + if 'domain' in params: + path_params['domain'] = params['domain'] # noqa: E501 query_params = [] - if 'id_name' in params: - query_params.append(('id.name', params['id_name'])) # noqa: E501 - if 'id_org' in params: - query_params.append(('id.org', params['id_org'])) # noqa: E501 if 'limit' in params: query_params.append(('limit', params['limit'])) # noqa: E501 if 'token' in params: query_params.append(('token', params['token'])) # noqa: E501 - if 'filters' in params: - query_params.append(('filters', params['filters'])) # noqa: E501 if 'sort_by_key' in params: query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 if 'sort_by_direction' in params: query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 + if 'filters' in params: + query_params.append(('filters', params['filters'])) # noqa: E501 header_params = {} @@ -9564,14 +11053,14 @@ def list_tasks3_with_http_info(self, id_project, id_domain, **kwargs): # noqa: auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/tasks/{id.project}/{id.domain}', 'GET', + '/api/v1/workflows/org/{org}/{project}/{domain}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminTaskList', # noqa: E501 + response_type='AdminNamedEntityIdentifierList', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -9579,59 +11068,59 @@ def list_tasks3_with_http_info(self, id_project, id_domain, **kwargs): # noqa: _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_tasks4(self, id_org, id_project, id_domain, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions. # noqa: E501 + def list_workflows(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_tasks4(id_org, id_project, id_domain, async_req=True) + >>> thread = api.list_workflows(id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_org: Optional, org key applied to the resource. (required) :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) + :param str id_org: Optional, org key applied to the resource. :param int limit: Indicates the number of resources to be returned. +required. :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminTaskList + :return: AdminWorkflowList If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_tasks4_with_http_info(id_org, id_project, id_domain, **kwargs) # noqa: E501 + return self.list_workflows_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 else: - (data) = self.list_tasks4_with_http_info(id_org, id_project, id_domain, **kwargs) # noqa: E501 + (data) = self.list_workflows_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 return data - def list_tasks4_with_http_info(self, id_org, id_project, id_domain, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.Task` definitions. # noqa: E501 + def list_workflows_with_http_info(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_tasks4_with_http_info(id_org, id_project, id_domain, async_req=True) + >>> thread = api.list_workflows_with_http_info(id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_org: Optional, org key applied to the resource. (required) :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) + :param str id_org: Optional, org key applied to the resource. :param int limit: Indicates the number of resources to be returned. +required. :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminTaskList + :return: AdminWorkflowList If the method is called asynchronously, returns the request thread. """ - all_params = ['id_org', 'id_project', 'id_domain', 'id_name', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 + all_params = ['id_project', 'id_domain', 'id_name', 'id_org', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -9642,36 +11131,36 @@ def list_tasks4_with_http_info(self, id_org, id_project, id_domain, **kwargs): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_tasks4" % key + " to method list_workflows" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'id_org' is set - if ('id_org' not in params or - params['id_org'] is None): - raise ValueError("Missing the required parameter `id_org` when calling `list_tasks4`") # noqa: E501 # verify the required parameter 'id_project' is set if ('id_project' not in params or params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `list_tasks4`") # noqa: E501 + raise ValueError("Missing the required parameter `id_project` when calling `list_workflows`") # noqa: E501 # verify the required parameter 'id_domain' is set if ('id_domain' not in params or params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `list_tasks4`") # noqa: E501 + raise ValueError("Missing the required parameter `id_domain` when calling `list_workflows`") # noqa: E501 + # verify the required parameter 'id_name' is set + if ('id_name' not in params or + params['id_name'] is None): + raise ValueError("Missing the required parameter `id_name` when calling `list_workflows`") # noqa: E501 collection_formats = {} path_params = {} - if 'id_org' in params: - path_params['id.org'] = params['id_org'] # noqa: E501 if 'id_project' in params: path_params['id.project'] = params['id_project'] # noqa: E501 if 'id_domain' in params: path_params['id.domain'] = params['id_domain'] # noqa: E501 + if 'id_name' in params: + path_params['id.name'] = params['id_name'] # noqa: E501 query_params = [] - if 'id_name' in params: - query_params.append(('id.name', params['id_name'])) # noqa: E501 + if 'id_org' in params: + query_params.append(('id.org', params['id_org'])) # noqa: E501 if 'limit' in params: query_params.append(('limit', params['limit'])) # noqa: E501 if 'token' in params: @@ -9701,14 +11190,14 @@ def list_tasks4_with_http_info(self, id_org, id_project, id_domain, **kwargs): auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/tasks/org/{id.org}/{id.project}/{id.domain}', 'GET', + '/api/v1/workflows/{id.project}/{id.domain}/{id.name}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminTaskList', # noqa: E501 + response_type='AdminWorkflowList', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -9716,57 +11205,59 @@ def list_tasks4_with_http_info(self, id_org, id_project, id_domain, **kwargs): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_workflow_ids(self, project, domain, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of workflow objects. # noqa: E501 + def list_workflows2(self, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_workflow_ids(project, domain, async_req=True) + >>> thread = api.list_workflows2(id_org, id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str project: Name of the project that contains the identifiers. +required (required) - :param str domain: Name of the domain the identifiers belongs to within the project. +required (required) + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :param str filters: Indicates a list of filters passed as string. +optional. - :param str org: Optional, org key applied to the resource. - :return: AdminNamedEntityIdentifierList + :return: AdminWorkflowList If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_workflow_ids_with_http_info(project, domain, **kwargs) # noqa: E501 + return self.list_workflows2_with_http_info(id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 else: - (data) = self.list_workflow_ids_with_http_info(project, domain, **kwargs) # noqa: E501 + (data) = self.list_workflows2_with_http_info(id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 return data - def list_workflow_ids_with_http_info(self, project, domain, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of workflow objects. # noqa: E501 + def list_workflows2_with_http_info(self, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_workflow_ids_with_http_info(project, domain, async_req=True) + >>> thread = api.list_workflows2_with_http_info(id_org, id_project, id_domain, id_name, async_req=True) >>> result = thread.get() :param async_req bool - :param str project: Name of the project that contains the identifiers. +required (required) - :param str domain: Name of the domain the identifiers belongs to within the project. +required (required) + :param str id_org: Optional, org key applied to the resource. (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :param str filters: Indicates a list of filters passed as string. +optional. - :param str org: Optional, org key applied to the resource. - :return: AdminNamedEntityIdentifierList + :return: AdminWorkflowList If the method is called asynchronously, returns the request thread. """ - all_params = ['project', 'domain', 'limit', 'token', 'sort_by_key', 'sort_by_direction', 'filters', 'org'] # noqa: E501 + all_params = ['id_org', 'id_project', 'id_domain', 'id_name', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -9777,40 +11268,50 @@ def list_workflow_ids_with_http_info(self, project, domain, **kwargs): # noqa: if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_workflow_ids" % key + " to method list_workflows2" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'project' is set - if ('project' not in params or - params['project'] is None): - raise ValueError("Missing the required parameter `project` when calling `list_workflow_ids`") # noqa: E501 - # verify the required parameter 'domain' is set - if ('domain' not in params or - params['domain'] is None): - raise ValueError("Missing the required parameter `domain` when calling `list_workflow_ids`") # noqa: E501 + # verify the required parameter 'id_org' is set + if ('id_org' not in params or + params['id_org'] is None): + raise ValueError("Missing the required parameter `id_org` when calling `list_workflows2`") # noqa: E501 + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `list_workflows2`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `list_workflows2`") # noqa: E501 + # verify the required parameter 'id_name' is set + if ('id_name' not in params or + params['id_name'] is None): + raise ValueError("Missing the required parameter `id_name` when calling `list_workflows2`") # noqa: E501 collection_formats = {} path_params = {} - if 'project' in params: - path_params['project'] = params['project'] # noqa: E501 - if 'domain' in params: - path_params['domain'] = params['domain'] # noqa: E501 + if 'id_org' in params: + path_params['id.org'] = params['id_org'] # noqa: E501 + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 + if 'id_name' in params: + path_params['id.name'] = params['id_name'] # noqa: E501 query_params = [] if 'limit' in params: query_params.append(('limit', params['limit'])) # noqa: E501 if 'token' in params: query_params.append(('token', params['token'])) # noqa: E501 + if 'filters' in params: + query_params.append(('filters', params['filters'])) # noqa: E501 if 'sort_by_key' in params: query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 if 'sort_by_direction' in params: query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 - if 'filters' in params: - query_params.append(('filters', params['filters'])) # noqa: E501 - if 'org' in params: - query_params.append(('org', params['org'])) # noqa: E501 header_params = {} @@ -9830,14 +11331,14 @@ def list_workflow_ids_with_http_info(self, project, domain, **kwargs): # noqa: auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/workflow_ids/{project}/{domain}', 'GET', + '/api/v1/workflows/org/{id.org}/{id.project}/{id.domain}/{id.name}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminNamedEntityIdentifierList', # noqa: E501 + response_type='AdminWorkflowList', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -9845,57 +11346,59 @@ def list_workflow_ids_with_http_info(self, project, domain, **kwargs): # noqa: _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_workflow_ids2(self, org, project, domain, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of workflow objects. # noqa: E501 + def list_workflows3(self, id_project, id_domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_workflow_ids2(org, project, domain, async_req=True) + >>> thread = api.list_workflows3(id_project, id_domain, async_req=True) >>> result = thread.get() :param async_req bool - :param str org: Optional, org key applied to the resource. (required) - :param str project: Name of the project that contains the identifiers. +required (required) - :param str domain: Name of the domain the identifiers belongs to within the project. +required (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. + :param str id_org: Optional, org key applied to the resource. :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :param str filters: Indicates a list of filters passed as string. +optional. - :return: AdminNamedEntityIdentifierList + :return: AdminWorkflowList If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_workflow_ids2_with_http_info(org, project, domain, **kwargs) # noqa: E501 + return self.list_workflows3_with_http_info(id_project, id_domain, **kwargs) # noqa: E501 else: - (data) = self.list_workflow_ids2_with_http_info(org, project, domain, **kwargs) # noqa: E501 + (data) = self.list_workflows3_with_http_info(id_project, id_domain, **kwargs) # noqa: E501 return data - def list_workflow_ids2_with_http_info(self, org, project, domain, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.NamedEntityIdentifier` of workflow objects. # noqa: E501 + def list_workflows3_with_http_info(self, id_project, id_domain, **kwargs): # noqa: E501 + """Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_workflow_ids2_with_http_info(org, project, domain, async_req=True) + >>> thread = api.list_workflows3_with_http_info(id_project, id_domain, async_req=True) >>> result = thread.get() :param async_req bool - :param str org: Optional, org key applied to the resource. (required) - :param str project: Name of the project that contains the identifiers. +required (required) - :param str domain: Name of the domain the identifiers belongs to within the project. +required (required) + :param str id_project: Name of the project the resource belongs to. (required) + :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. + :param str id_org: Optional, org key applied to the resource. :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional. + :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. + :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. :param str sort_by_key: Indicates an attribute to sort the response values. +required. :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :param str filters: Indicates a list of filters passed as string. +optional. - :return: AdminNamedEntityIdentifierList + :return: AdminWorkflowList If the method is called asynchronously, returns the request thread. """ - all_params = ['org', 'project', 'domain', 'limit', 'token', 'sort_by_key', 'sort_by_direction', 'filters'] # noqa: E501 + all_params = ['id_project', 'id_domain', 'id_name', 'id_org', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -9906,44 +11409,42 @@ def list_workflow_ids2_with_http_info(self, org, project, domain, **kwargs): # if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_workflow_ids2" % key + " to method list_workflows3" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'org' is set - if ('org' not in params or - params['org'] is None): - raise ValueError("Missing the required parameter `org` when calling `list_workflow_ids2`") # noqa: E501 - # verify the required parameter 'project' is set - if ('project' not in params or - params['project'] is None): - raise ValueError("Missing the required parameter `project` when calling `list_workflow_ids2`") # noqa: E501 - # verify the required parameter 'domain' is set - if ('domain' not in params or - params['domain'] is None): - raise ValueError("Missing the required parameter `domain` when calling `list_workflow_ids2`") # noqa: E501 + # verify the required parameter 'id_project' is set + if ('id_project' not in params or + params['id_project'] is None): + raise ValueError("Missing the required parameter `id_project` when calling `list_workflows3`") # noqa: E501 + # verify the required parameter 'id_domain' is set + if ('id_domain' not in params or + params['id_domain'] is None): + raise ValueError("Missing the required parameter `id_domain` when calling `list_workflows3`") # noqa: E501 collection_formats = {} path_params = {} - if 'org' in params: - path_params['org'] = params['org'] # noqa: E501 - if 'project' in params: - path_params['project'] = params['project'] # noqa: E501 - if 'domain' in params: - path_params['domain'] = params['domain'] # noqa: E501 + if 'id_project' in params: + path_params['id.project'] = params['id_project'] # noqa: E501 + if 'id_domain' in params: + path_params['id.domain'] = params['id_domain'] # noqa: E501 query_params = [] + if 'id_name' in params: + query_params.append(('id.name', params['id_name'])) # noqa: E501 + if 'id_org' in params: + query_params.append(('id.org', params['id_org'])) # noqa: E501 if 'limit' in params: query_params.append(('limit', params['limit'])) # noqa: E501 if 'token' in params: query_params.append(('token', params['token'])) # noqa: E501 + if 'filters' in params: + query_params.append(('filters', params['filters'])) # noqa: E501 if 'sort_by_key' in params: query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 if 'sort_by_direction' in params: query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 - if 'filters' in params: - query_params.append(('filters', params['filters'])) # noqa: E501 header_params = {} @@ -9963,14 +11464,14 @@ def list_workflow_ids2_with_http_info(self, org, project, domain, **kwargs): # auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/workflows/org/{org}/{project}/{domain}', 'GET', + '/api/v1/workflows/{id.project}/{id.domain}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminNamedEntityIdentifierList', # noqa: E501 + response_type='AdminWorkflowList', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -9978,19 +11479,19 @@ def list_workflow_ids2_with_http_info(self, org, project, domain, **kwargs): # _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_workflows(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 + def list_workflows4(self, id_org, id_project, id_domain, **kwargs): # noqa: E501 """Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_workflows(id_project, id_domain, id_name, async_req=True) + >>> thread = api.list_workflows4(id_org, id_project, id_domain, async_req=True) >>> result = thread.get() :param async_req bool + :param str id_org: Optional, org key applied to the resource. (required) :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) - :param str id_org: Optional, org key applied to the resource. + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. :param int limit: Indicates the number of resources to be returned. +required. :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. @@ -10002,24 +11503,24 @@ def list_workflows(self, id_project, id_domain, id_name, **kwargs): # noqa: E50 """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_workflows_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 + return self.list_workflows4_with_http_info(id_org, id_project, id_domain, **kwargs) # noqa: E501 else: - (data) = self.list_workflows_with_http_info(id_project, id_domain, id_name, **kwargs) # noqa: E501 + (data) = self.list_workflows4_with_http_info(id_org, id_project, id_domain, **kwargs) # noqa: E501 return data - def list_workflows_with_http_info(self, id_project, id_domain, id_name, **kwargs): # noqa: E501 + def list_workflows4_with_http_info(self, id_org, id_project, id_domain, **kwargs): # noqa: E501 """Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_workflows_with_http_info(id_project, id_domain, id_name, async_req=True) + >>> thread = api.list_workflows4_with_http_info(id_org, id_project, id_domain, async_req=True) >>> result = thread.get() :param async_req bool + :param str id_org: Optional, org key applied to the resource. (required) :param str id_project: Name of the project the resource belongs to. (required) :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) - :param str id_org: Optional, org key applied to the resource. + :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. :param int limit: Indicates the number of resources to be returned. +required. :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. @@ -10030,7 +11531,7 @@ def list_workflows_with_http_info(self, id_project, id_domain, id_name, **kwargs returns the request thread. """ - all_params = ['id_project', 'id_domain', 'id_name', 'id_org', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 + all_params = ['id_org', 'id_project', 'id_domain', 'id_name', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -10041,36 +11542,36 @@ def list_workflows_with_http_info(self, id_project, id_domain, id_name, **kwargs if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_workflows" % key + " to method list_workflows4" % key ) params[key] = val del params['kwargs'] + # verify the required parameter 'id_org' is set + if ('id_org' not in params or + params['id_org'] is None): + raise ValueError("Missing the required parameter `id_org` when calling `list_workflows4`") # noqa: E501 # verify the required parameter 'id_project' is set if ('id_project' not in params or params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `list_workflows`") # noqa: E501 + raise ValueError("Missing the required parameter `id_project` when calling `list_workflows4`") # noqa: E501 # verify the required parameter 'id_domain' is set if ('id_domain' not in params or params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `list_workflows`") # noqa: E501 - # verify the required parameter 'id_name' is set - if ('id_name' not in params or - params['id_name'] is None): - raise ValueError("Missing the required parameter `id_name` when calling `list_workflows`") # noqa: E501 + raise ValueError("Missing the required parameter `id_domain` when calling `list_workflows4`") # noqa: E501 collection_formats = {} path_params = {} + if 'id_org' in params: + path_params['id.org'] = params['id_org'] # noqa: E501 if 'id_project' in params: path_params['id.project'] = params['id_project'] # noqa: E501 if 'id_domain' in params: path_params['id.domain'] = params['id_domain'] # noqa: E501 - if 'id_name' in params: - path_params['id.name'] = params['id_name'] # noqa: E501 query_params = [] - if 'id_org' in params: - query_params.append(('id.org', params['id_org'])) # noqa: E501 + if 'id_name' in params: + query_params.append(('id.name', params['id_name'])) # noqa: E501 if 'limit' in params: query_params.append(('limit', params['limit'])) # noqa: E501 if 'token' in params: @@ -10100,7 +11601,7 @@ def list_workflows_with_http_info(self, id_project, id_domain, id_name, **kwargs auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/workflows/{id.project}/{id.domain}/{id.name}', 'GET', + '/api/v1/workflows/org/{id.org}/{id.project}/{id.domain}', 'GET', path_params, query_params, header_params, @@ -10115,59 +11616,43 @@ def list_workflows_with_http_info(self, id_project, id_domain, id_name, **kwargs _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_workflows2(self, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. # noqa: E501 + def recover_execution(self, body, **kwargs): # noqa: E501 + """Recreates a previously-run workflow execution that will only start executing from the last known failure point. In Recover mode, users cannot change any input parameters or update the version of the execution. This is extremely useful to recover from system errors and byzantine faults like - Loss of K8s cluster, bugs in platform or instability, machine failures, downstream system failures (downstream services), or simply to recover executions that failed because of retry exhaustion and should complete if tried again. See :ref:`ref_flyteidl.admin.ExecutionRecoverRequest` for more details. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_workflows2(id_org, id_project, id_domain, id_name, async_req=True) + >>> thread = api.recover_execution(body, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_org: Optional, org key applied to the resource. (required) - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) - :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. - :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. - :param str sort_by_key: Indicates an attribute to sort the response values. +required. - :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminWorkflowList + :param AdminExecutionRecoverRequest body: (required) + :return: AdminExecutionCreateResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_workflows2_with_http_info(id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 + return self.recover_execution_with_http_info(body, **kwargs) # noqa: E501 else: - (data) = self.list_workflows2_with_http_info(id_org, id_project, id_domain, id_name, **kwargs) # noqa: E501 + (data) = self.recover_execution_with_http_info(body, **kwargs) # noqa: E501 return data - def list_workflows2_with_http_info(self, id_org, id_project, id_domain, id_name, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. # noqa: E501 + def recover_execution_with_http_info(self, body, **kwargs): # noqa: E501 + """Recreates a previously-run workflow execution that will only start executing from the last known failure point. In Recover mode, users cannot change any input parameters or update the version of the execution. This is extremely useful to recover from system errors and byzantine faults like - Loss of K8s cluster, bugs in platform or instability, machine failures, downstream system failures (downstream services), or simply to recover executions that failed because of retry exhaustion and should complete if tried again. See :ref:`ref_flyteidl.admin.ExecutionRecoverRequest` for more details. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_workflows2_with_http_info(id_org, id_project, id_domain, id_name, async_req=True) + >>> thread = api.recover_execution_with_http_info(body, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_org: Optional, org key applied to the resource. (required) - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans' (required) - :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. - :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. - :param str sort_by_key: Indicates an attribute to sort the response values. +required. - :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminWorkflowList + :param AdminExecutionRecoverRequest body: (required) + :return: AdminExecutionCreateResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['id_org', 'id_project', 'id_domain', 'id_name', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 + all_params = ['body'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -10178,50 +11663,20 @@ def list_workflows2_with_http_info(self, id_org, id_project, id_domain, id_name, if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_workflows2" % key + " to method recover_execution" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'id_org' is set - if ('id_org' not in params or - params['id_org'] is None): - raise ValueError("Missing the required parameter `id_org` when calling `list_workflows2`") # noqa: E501 - # verify the required parameter 'id_project' is set - if ('id_project' not in params or - params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `list_workflows2`") # noqa: E501 - # verify the required parameter 'id_domain' is set - if ('id_domain' not in params or - params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `list_workflows2`") # noqa: E501 - # verify the required parameter 'id_name' is set - if ('id_name' not in params or - params['id_name'] is None): - raise ValueError("Missing the required parameter `id_name` when calling `list_workflows2`") # noqa: E501 - - collection_formats = {} - - path_params = {} - if 'id_org' in params: - path_params['id.org'] = params['id_org'] # noqa: E501 - if 'id_project' in params: - path_params['id.project'] = params['id_project'] # noqa: E501 - if 'id_domain' in params: - path_params['id.domain'] = params['id_domain'] # noqa: E501 - if 'id_name' in params: - path_params['id.name'] = params['id_name'] # noqa: E501 + # verify the required parameter 'body' is set + if ('body' not in params or + params['body'] is None): + raise ValueError("Missing the required parameter `body` when calling `recover_execution`") # noqa: E501 + + collection_formats = {} + + path_params = {} query_params = [] - if 'limit' in params: - query_params.append(('limit', params['limit'])) # noqa: E501 - if 'token' in params: - query_params.append(('token', params['token'])) # noqa: E501 - if 'filters' in params: - query_params.append(('filters', params['filters'])) # noqa: E501 - if 'sort_by_key' in params: - query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 - if 'sort_by_direction' in params: - query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 header_params = {} @@ -10229,6 +11684,8 @@ def list_workflows2_with_http_info(self, id_org, id_project, id_domain, id_name, local_var_files = {} body_params = None + if 'body' in params: + body_params = params['body'] # HTTP header `Accept` header_params['Accept'] = self.api_client.select_header_accept( ['application/json']) # noqa: E501 @@ -10241,14 +11698,14 @@ def list_workflows2_with_http_info(self, id_org, id_project, id_domain, id_name, auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/workflows/org/{id.org}/{id.project}/{id.domain}/{id.name}', 'GET', + '/api/v1/executions/recover', 'POST', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminWorkflowList', # noqa: E501 + response_type='AdminExecutionCreateResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -10256,59 +11713,45 @@ def list_workflows2_with_http_info(self, id_org, id_project, id_domain, id_name, _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_workflows3(self, id_project, id_domain, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. # noqa: E501 + def recover_execution2(self, id_org, body, **kwargs): # noqa: E501 + """Recreates a previously-run workflow execution that will only start executing from the last known failure point. In Recover mode, users cannot change any input parameters or update the version of the execution. This is extremely useful to recover from system errors and byzantine faults like - Loss of K8s cluster, bugs in platform or instability, machine failures, downstream system failures (downstream services), or simply to recover executions that failed because of retry exhaustion and should complete if tried again. See :ref:`ref_flyteidl.admin.ExecutionRecoverRequest` for more details. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_workflows3(id_project, id_domain, async_req=True) + >>> thread = api.recover_execution2(id_org, body, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. - :param str id_org: Optional, org key applied to the resource. - :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. - :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. - :param str sort_by_key: Indicates an attribute to sort the response values. +required. - :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminWorkflowList + :param str id_org: Optional, org key applied to the resource. (required) + :param AdminExecutionRecoverRequest body: (required) + :return: AdminExecutionCreateResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_workflows3_with_http_info(id_project, id_domain, **kwargs) # noqa: E501 + return self.recover_execution2_with_http_info(id_org, body, **kwargs) # noqa: E501 else: - (data) = self.list_workflows3_with_http_info(id_project, id_domain, **kwargs) # noqa: E501 + (data) = self.recover_execution2_with_http_info(id_org, body, **kwargs) # noqa: E501 return data - def list_workflows3_with_http_info(self, id_project, id_domain, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. # noqa: E501 + def recover_execution2_with_http_info(self, id_org, body, **kwargs): # noqa: E501 + """Recreates a previously-run workflow execution that will only start executing from the last known failure point. In Recover mode, users cannot change any input parameters or update the version of the execution. This is extremely useful to recover from system errors and byzantine faults like - Loss of K8s cluster, bugs in platform or instability, machine failures, downstream system failures (downstream services), or simply to recover executions that failed because of retry exhaustion and should complete if tried again. See :ref:`ref_flyteidl.admin.ExecutionRecoverRequest` for more details. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_workflows3_with_http_info(id_project, id_domain, async_req=True) + >>> thread = api.recover_execution2_with_http_info(id_org, body, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. - :param str id_org: Optional, org key applied to the resource. - :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. - :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. - :param str sort_by_key: Indicates an attribute to sort the response values. +required. - :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminWorkflowList + :param str id_org: Optional, org key applied to the resource. (required) + :param AdminExecutionRecoverRequest body: (required) + :return: AdminExecutionCreateResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['id_project', 'id_domain', 'id_name', 'id_org', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 + all_params = ['id_org', 'body'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -10319,42 +11762,26 @@ def list_workflows3_with_http_info(self, id_project, id_domain, **kwargs): # no if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_workflows3" % key + " to method recover_execution2" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'id_project' is set - if ('id_project' not in params or - params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `list_workflows3`") # noqa: E501 - # verify the required parameter 'id_domain' is set - if ('id_domain' not in params or - params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `list_workflows3`") # noqa: E501 + # verify the required parameter 'id_org' is set + if ('id_org' not in params or + params['id_org'] is None): + raise ValueError("Missing the required parameter `id_org` when calling `recover_execution2`") # noqa: E501 + # verify the required parameter 'body' is set + if ('body' not in params or + params['body'] is None): + raise ValueError("Missing the required parameter `body` when calling `recover_execution2`") # noqa: E501 collection_formats = {} path_params = {} - if 'id_project' in params: - path_params['id.project'] = params['id_project'] # noqa: E501 - if 'id_domain' in params: - path_params['id.domain'] = params['id_domain'] # noqa: E501 + if 'id_org' in params: + path_params['id.org'] = params['id_org'] # noqa: E501 query_params = [] - if 'id_name' in params: - query_params.append(('id.name', params['id_name'])) # noqa: E501 - if 'id_org' in params: - query_params.append(('id.org', params['id_org'])) # noqa: E501 - if 'limit' in params: - query_params.append(('limit', params['limit'])) # noqa: E501 - if 'token' in params: - query_params.append(('token', params['token'])) # noqa: E501 - if 'filters' in params: - query_params.append(('filters', params['filters'])) # noqa: E501 - if 'sort_by_key' in params: - query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 - if 'sort_by_direction' in params: - query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 header_params = {} @@ -10362,6 +11789,8 @@ def list_workflows3_with_http_info(self, id_project, id_domain, **kwargs): # no local_var_files = {} body_params = None + if 'body' in params: + body_params = params['body'] # HTTP header `Accept` header_params['Accept'] = self.api_client.select_header_accept( ['application/json']) # noqa: E501 @@ -10374,14 +11803,14 @@ def list_workflows3_with_http_info(self, id_project, id_domain, **kwargs): # no auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/workflows/{id.project}/{id.domain}', 'GET', + '/api/v1/executions/org/{id.org}/recover', 'POST', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminWorkflowList', # noqa: E501 + response_type='AdminExecutionCreateResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -10389,59 +11818,43 @@ def list_workflows3_with_http_info(self, id_project, id_domain, **kwargs): # no _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def list_workflows4(self, id_org, id_project, id_domain, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. # noqa: E501 + def register_project(self, body, **kwargs): # noqa: E501 + """Registers a :ref:`ref_flyteidl.admin.Project` with the Flyte deployment. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_workflows4(id_org, id_project, id_domain, async_req=True) + >>> thread = api.register_project(body, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_org: Optional, org key applied to the resource. (required) - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. - :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. - :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. - :param str sort_by_key: Indicates an attribute to sort the response values. +required. - :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminWorkflowList + :param AdminProjectRegisterRequest body: (required) + :return: AdminProjectRegisterResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.list_workflows4_with_http_info(id_org, id_project, id_domain, **kwargs) # noqa: E501 + return self.register_project_with_http_info(body, **kwargs) # noqa: E501 else: - (data) = self.list_workflows4_with_http_info(id_org, id_project, id_domain, **kwargs) # noqa: E501 + (data) = self.register_project_with_http_info(body, **kwargs) # noqa: E501 return data - def list_workflows4_with_http_info(self, id_org, id_project, id_domain, **kwargs): # noqa: E501 - """Fetch a list of :ref:`ref_flyteidl.admin.Workflow` definitions. # noqa: E501 + def register_project_with_http_info(self, body, **kwargs): # noqa: E501 + """Registers a :ref:`ref_flyteidl.admin.Project` with the Flyte deployment. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_workflows4_with_http_info(id_org, id_project, id_domain, async_req=True) + >>> thread = api.register_project_with_http_info(body, async_req=True) >>> result = thread.get() :param async_req bool - :param str id_org: Optional, org key applied to the resource. (required) - :param str id_project: Name of the project the resource belongs to. (required) - :param str id_domain: Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project. (required) - :param str id_name: User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'. - :param int limit: Indicates the number of resources to be returned. +required. - :param str token: In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional. - :param str filters: Indicates a list of filters passed as string. More info on constructing filters : +optional. - :param str sort_by_key: Indicates an attribute to sort the response values. +required. - :param str sort_by_direction: Indicates the direction to apply sort key for response values. +optional. - DESCENDING: By default, fields are sorted in descending order. - :return: AdminWorkflowList + :param AdminProjectRegisterRequest body: (required) + :return: AdminProjectRegisterResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['id_org', 'id_project', 'id_domain', 'id_name', 'limit', 'token', 'filters', 'sort_by_key', 'sort_by_direction'] # noqa: E501 + all_params = ['body'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -10452,46 +11865,20 @@ def list_workflows4_with_http_info(self, id_org, id_project, id_domain, **kwargs if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method list_workflows4" % key + " to method register_project" % key ) params[key] = val del params['kwargs'] - # verify the required parameter 'id_org' is set - if ('id_org' not in params or - params['id_org'] is None): - raise ValueError("Missing the required parameter `id_org` when calling `list_workflows4`") # noqa: E501 - # verify the required parameter 'id_project' is set - if ('id_project' not in params or - params['id_project'] is None): - raise ValueError("Missing the required parameter `id_project` when calling `list_workflows4`") # noqa: E501 - # verify the required parameter 'id_domain' is set - if ('id_domain' not in params or - params['id_domain'] is None): - raise ValueError("Missing the required parameter `id_domain` when calling `list_workflows4`") # noqa: E501 + # verify the required parameter 'body' is set + if ('body' not in params or + params['body'] is None): + raise ValueError("Missing the required parameter `body` when calling `register_project`") # noqa: E501 collection_formats = {} path_params = {} - if 'id_org' in params: - path_params['id.org'] = params['id_org'] # noqa: E501 - if 'id_project' in params: - path_params['id.project'] = params['id_project'] # noqa: E501 - if 'id_domain' in params: - path_params['id.domain'] = params['id_domain'] # noqa: E501 query_params = [] - if 'id_name' in params: - query_params.append(('id.name', params['id_name'])) # noqa: E501 - if 'limit' in params: - query_params.append(('limit', params['limit'])) # noqa: E501 - if 'token' in params: - query_params.append(('token', params['token'])) # noqa: E501 - if 'filters' in params: - query_params.append(('filters', params['filters'])) # noqa: E501 - if 'sort_by_key' in params: - query_params.append(('sort_by.key', params['sort_by_key'])) # noqa: E501 - if 'sort_by_direction' in params: - query_params.append(('sort_by.direction', params['sort_by_direction'])) # noqa: E501 header_params = {} @@ -10499,6 +11886,8 @@ def list_workflows4_with_http_info(self, id_org, id_project, id_domain, **kwargs local_var_files = {} body_params = None + if 'body' in params: + body_params = params['body'] # HTTP header `Accept` header_params['Accept'] = self.api_client.select_header_accept( ['application/json']) # noqa: E501 @@ -10511,14 +11900,14 @@ def list_workflows4_with_http_info(self, id_org, id_project, id_domain, **kwargs auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/workflows/org/{id.org}/{id.project}/{id.domain}', 'GET', + '/api/v1/projects', 'POST', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminWorkflowList', # noqa: E501 + response_type='AdminProjectRegisterResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -10526,43 +11915,45 @@ def list_workflows4_with_http_info(self, id_org, id_project, id_domain, **kwargs _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def recover_execution(self, body, **kwargs): # noqa: E501 - """Recreates a previously-run workflow execution that will only start executing from the last known failure point. In Recover mode, users cannot change any input parameters or update the version of the execution. This is extremely useful to recover from system errors and byzantine faults like - Loss of K8s cluster, bugs in platform or instability, machine failures, downstream system failures (downstream services), or simply to recover executions that failed because of retry exhaustion and should complete if tried again. See :ref:`ref_flyteidl.admin.ExecutionRecoverRequest` for more details. # noqa: E501 + def register_project2(self, project_org, body, **kwargs): # noqa: E501 + """Registers a :ref:`ref_flyteidl.admin.Project` with the Flyte deployment. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.recover_execution(body, async_req=True) + >>> thread = api.register_project2(project_org, body, async_req=True) >>> result = thread.get() :param async_req bool - :param AdminExecutionRecoverRequest body: (required) - :return: AdminExecutionCreateResponse + :param str project_org: Optional, org key applied to the resource. (required) + :param AdminProjectRegisterRequest body: (required) + :return: AdminProjectRegisterResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.recover_execution_with_http_info(body, **kwargs) # noqa: E501 + return self.register_project2_with_http_info(project_org, body, **kwargs) # noqa: E501 else: - (data) = self.recover_execution_with_http_info(body, **kwargs) # noqa: E501 + (data) = self.register_project2_with_http_info(project_org, body, **kwargs) # noqa: E501 return data - def recover_execution_with_http_info(self, body, **kwargs): # noqa: E501 - """Recreates a previously-run workflow execution that will only start executing from the last known failure point. In Recover mode, users cannot change any input parameters or update the version of the execution. This is extremely useful to recover from system errors and byzantine faults like - Loss of K8s cluster, bugs in platform or instability, machine failures, downstream system failures (downstream services), or simply to recover executions that failed because of retry exhaustion and should complete if tried again. See :ref:`ref_flyteidl.admin.ExecutionRecoverRequest` for more details. # noqa: E501 + def register_project2_with_http_info(self, project_org, body, **kwargs): # noqa: E501 + """Registers a :ref:`ref_flyteidl.admin.Project` with the Flyte deployment. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.recover_execution_with_http_info(body, async_req=True) + >>> thread = api.register_project2_with_http_info(project_org, body, async_req=True) >>> result = thread.get() :param async_req bool - :param AdminExecutionRecoverRequest body: (required) - :return: AdminExecutionCreateResponse + :param str project_org: Optional, org key applied to the resource. (required) + :param AdminProjectRegisterRequest body: (required) + :return: AdminProjectRegisterResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['body'] # noqa: E501 + all_params = ['project_org', 'body'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -10573,18 +11964,24 @@ def recover_execution_with_http_info(self, body, **kwargs): # noqa: E501 if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method recover_execution" % key + " to method register_project2" % key ) params[key] = val del params['kwargs'] + # verify the required parameter 'project_org' is set + if ('project_org' not in params or + params['project_org'] is None): + raise ValueError("Missing the required parameter `project_org` when calling `register_project2`") # noqa: E501 # verify the required parameter 'body' is set if ('body' not in params or params['body'] is None): - raise ValueError("Missing the required parameter `body` when calling `recover_execution`") # noqa: E501 + raise ValueError("Missing the required parameter `body` when calling `register_project2`") # noqa: E501 collection_formats = {} path_params = {} + if 'project_org' in params: + path_params['project.org'] = params['project_org'] # noqa: E501 query_params = [] @@ -10608,14 +12005,14 @@ def recover_execution_with_http_info(self, body, **kwargs): # noqa: E501 auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/executions/recover', 'POST', + '/api/v1/projects/org/{project.org}', 'POST', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminExecutionCreateResponse', # noqa: E501 + response_type='AdminProjectRegisterResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -10623,38 +12020,38 @@ def recover_execution_with_http_info(self, body, **kwargs): # noqa: E501 _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def register_project(self, body, **kwargs): # noqa: E501 - """Registers a :ref:`ref_flyteidl.admin.Project` with the Flyte deployment. # noqa: E501 + def relaunch_execution(self, body, **kwargs): # noqa: E501 + """Triggers the creation of an identical :ref:`ref_flyteidl.admin.Execution` # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.register_project(body, async_req=True) + >>> thread = api.relaunch_execution(body, async_req=True) >>> result = thread.get() :param async_req bool - :param AdminProjectRegisterRequest body: (required) - :return: AdminProjectRegisterResponse + :param AdminExecutionRelaunchRequest body: (required) + :return: AdminExecutionCreateResponse If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.register_project_with_http_info(body, **kwargs) # noqa: E501 + return self.relaunch_execution_with_http_info(body, **kwargs) # noqa: E501 else: - (data) = self.register_project_with_http_info(body, **kwargs) # noqa: E501 + (data) = self.relaunch_execution_with_http_info(body, **kwargs) # noqa: E501 return data - def register_project_with_http_info(self, body, **kwargs): # noqa: E501 - """Registers a :ref:`ref_flyteidl.admin.Project` with the Flyte deployment. # noqa: E501 + def relaunch_execution_with_http_info(self, body, **kwargs): # noqa: E501 + """Triggers the creation of an identical :ref:`ref_flyteidl.admin.Execution` # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.register_project_with_http_info(body, async_req=True) + >>> thread = api.relaunch_execution_with_http_info(body, async_req=True) >>> result = thread.get() :param async_req bool - :param AdminProjectRegisterRequest body: (required) - :return: AdminProjectRegisterResponse + :param AdminExecutionRelaunchRequest body: (required) + :return: AdminExecutionCreateResponse If the method is called asynchronously, returns the request thread. """ @@ -10670,14 +12067,14 @@ def register_project_with_http_info(self, body, **kwargs): # noqa: E501 if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method register_project" % key + " to method relaunch_execution" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'body' is set if ('body' not in params or params['body'] is None): - raise ValueError("Missing the required parameter `body` when calling `register_project`") # noqa: E501 + raise ValueError("Missing the required parameter `body` when calling `relaunch_execution`") # noqa: E501 collection_formats = {} @@ -10705,14 +12102,14 @@ def register_project_with_http_info(self, body, **kwargs): # noqa: E501 auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/projects', 'POST', + '/api/v1/executions/relaunch', 'POST', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='AdminProjectRegisterResponse', # noqa: E501 + response_type='AdminExecutionCreateResponse', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -10720,15 +12117,16 @@ def register_project_with_http_info(self, body, **kwargs): # noqa: E501 _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def relaunch_execution(self, body, **kwargs): # noqa: E501 + def relaunch_execution2(self, id_org, body, **kwargs): # noqa: E501 """Triggers the creation of an identical :ref:`ref_flyteidl.admin.Execution` # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.relaunch_execution(body, async_req=True) + >>> thread = api.relaunch_execution2(id_org, body, async_req=True) >>> result = thread.get() :param async_req bool + :param str id_org: Optional, org key applied to the resource. (required) :param AdminExecutionRelaunchRequest body: (required) :return: AdminExecutionCreateResponse If the method is called asynchronously, @@ -10736,27 +12134,28 @@ def relaunch_execution(self, body, **kwargs): # noqa: E501 """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.relaunch_execution_with_http_info(body, **kwargs) # noqa: E501 + return self.relaunch_execution2_with_http_info(id_org, body, **kwargs) # noqa: E501 else: - (data) = self.relaunch_execution_with_http_info(body, **kwargs) # noqa: E501 + (data) = self.relaunch_execution2_with_http_info(id_org, body, **kwargs) # noqa: E501 return data - def relaunch_execution_with_http_info(self, body, **kwargs): # noqa: E501 + def relaunch_execution2_with_http_info(self, id_org, body, **kwargs): # noqa: E501 """Triggers the creation of an identical :ref:`ref_flyteidl.admin.Execution` # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.relaunch_execution_with_http_info(body, async_req=True) + >>> thread = api.relaunch_execution2_with_http_info(id_org, body, async_req=True) >>> result = thread.get() :param async_req bool + :param str id_org: Optional, org key applied to the resource. (required) :param AdminExecutionRelaunchRequest body: (required) :return: AdminExecutionCreateResponse If the method is called asynchronously, returns the request thread. """ - all_params = ['body'] # noqa: E501 + all_params = ['id_org', 'body'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -10767,18 +12166,24 @@ def relaunch_execution_with_http_info(self, body, **kwargs): # noqa: E501 if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method relaunch_execution" % key + " to method relaunch_execution2" % key ) params[key] = val del params['kwargs'] + # verify the required parameter 'id_org' is set + if ('id_org' not in params or + params['id_org'] is None): + raise ValueError("Missing the required parameter `id_org` when calling `relaunch_execution2`") # noqa: E501 # verify the required parameter 'body' is set if ('body' not in params or params['body'] is None): - raise ValueError("Missing the required parameter `body` when calling `relaunch_execution`") # noqa: E501 + raise ValueError("Missing the required parameter `body` when calling `relaunch_execution2`") # noqa: E501 collection_formats = {} path_params = {} + if 'id_org' in params: + path_params['id.org'] = params['id_org'] # noqa: E501 query_params = [] @@ -10802,7 +12207,7 @@ def relaunch_execution_with_http_info(self, body, **kwargs): # noqa: E501 auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/executions/relaunch', 'POST', + '/api/v1/executions/org/{id.org}/relaunch', 'POST', path_params, query_params, header_params, @@ -11052,7 +12457,7 @@ def terminate_execution2_with_http_info(self, id_org, id_project, id_domain, id_ auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/v1/data/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}', 'DELETE', + '/api/v1/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}', 'DELETE', path_params, query_params, header_params, diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/test/test_admin_service_api.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/test/test_admin_service_api.py index 21e5e86a25..573c16b8d3 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/test/test_admin_service_api.py +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/test/test_admin_service_api.py @@ -36,6 +36,13 @@ def test_create_execution(self): """ pass + def test_create_execution2(self): + """Test case for create_execution2 + + Triggers the creation of a :ref:`ref_flyteidl.admin.Execution` # noqa: E501 + """ + pass + def test_create_launch_plan(self): """Test case for create_launch_plan @@ -43,6 +50,13 @@ def test_create_launch_plan(self): """ pass + def test_create_launch_plan2(self): + """Test case for create_launch_plan2 + + Create and upload a :ref:`ref_flyteidl.admin.LaunchPlan` definition # noqa: E501 + """ + pass + def test_create_node_event(self): """Test case for create_node_event @@ -50,6 +64,13 @@ def test_create_node_event(self): """ pass + def test_create_node_event2(self): + """Test case for create_node_event2 + + Indicates a :ref:`ref_flyteidl.event.NodeExecutionEvent` has occurred. # noqa: E501 + """ + pass + def test_create_task(self): """Test case for create_task @@ -57,6 +78,13 @@ def test_create_task(self): """ pass + def test_create_task2(self): + """Test case for create_task2 + + Create and upload a :ref:`ref_flyteidl.admin.Task` definition # noqa: E501 + """ + pass + def test_create_task_event(self): """Test case for create_task_event @@ -64,6 +92,13 @@ def test_create_task_event(self): """ pass + def test_create_task_event2(self): + """Test case for create_task_event2 + + Indicates a :ref:`ref_flyteidl.event.TaskExecutionEvent` has occurred. # noqa: E501 + """ + pass + def test_create_workflow(self): """Test case for create_workflow @@ -71,6 +106,13 @@ def test_create_workflow(self): """ pass + def test_create_workflow2(self): + """Test case for create_workflow2 + + Create and upload a :ref:`ref_flyteidl.admin.Workflow` definition # noqa: E501 + """ + pass + def test_create_workflow_event(self): """Test case for create_workflow_event @@ -78,6 +120,13 @@ def test_create_workflow_event(self): """ pass + def test_create_workflow_event2(self): + """Test case for create_workflow_event2 + + Indicates a :ref:`ref_flyteidl.event.WorkflowExecutionEvent` has occurred. # noqa: E501 + """ + pass + def test_delete_project_attributes(self): """Test case for delete_project_attributes @@ -357,6 +406,13 @@ def test_list_active_launch_plans(self): """ pass + def test_list_active_launch_plans2(self): + """Test case for list_active_launch_plans2 + + List active versions of :ref:`ref_flyteidl.admin.LaunchPlan`. # noqa: E501 + """ + pass + def test_list_description_entities(self): """Test case for list_description_entities @@ -448,6 +504,13 @@ def test_list_matchable_attributes(self): """ pass + def test_list_matchable_attributes2(self): + """Test case for list_matchable_attributes2 + + Lists custom :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for a specific resource type. # noqa: E501 + """ + pass + def test_list_named_entities(self): """Test case for list_named_entities @@ -497,6 +560,13 @@ def test_list_projects(self): """ pass + def test_list_projects2(self): + """Test case for list_projects2 + + Fetches a list of :ref:`ref_flyteidl.admin.Project` # noqa: E501 + """ + pass + def test_list_task_executions(self): """Test case for list_task_executions @@ -602,6 +672,13 @@ def test_recover_execution(self): """ pass + def test_recover_execution2(self): + """Test case for recover_execution2 + + Recreates a previously-run workflow execution that will only start executing from the last known failure point. In Recover mode, users cannot change any input parameters or update the version of the execution. This is extremely useful to recover from system errors and byzantine faults like - Loss of K8s cluster, bugs in platform or instability, machine failures, downstream system failures (downstream services), or simply to recover executions that failed because of retry exhaustion and should complete if tried again. See :ref:`ref_flyteidl.admin.ExecutionRecoverRequest` for more details. # noqa: E501 + """ + pass + def test_register_project(self): """Test case for register_project @@ -609,6 +686,13 @@ def test_register_project(self): """ pass + def test_register_project2(self): + """Test case for register_project2 + + Registers a :ref:`ref_flyteidl.admin.Project` with the Flyte deployment. # noqa: E501 + """ + pass + def test_relaunch_execution(self): """Test case for relaunch_execution @@ -616,6 +700,13 @@ def test_relaunch_execution(self): """ pass + def test_relaunch_execution2(self): + """Test case for relaunch_execution2 + + Triggers the creation of an identical :ref:`ref_flyteidl.admin.Execution` # noqa: E501 + """ + pass + def test_terminate_execution(self): """Test case for terminate_execution diff --git a/flyteidl/gen/pb_python/flyteidl/service/signal_pb2.py b/flyteidl/gen/pb_python/flyteidl/service/signal_pb2.py index 20e9fe2071..de5abc2b16 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/signal_pb2.py +++ b/flyteidl/gen/pb_python/flyteidl/service/signal_pb2.py @@ -15,7 +15,7 @@ from flyteidl.admin import signal_pb2 as flyteidl_dot_admin_dot_signal__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1d\x66lyteidl/service/signal.proto\x12\x10\x66lyteidl.service\x1a\x1cgoogle/api/annotations.proto\x1a\x1b\x66lyteidl/admin/signal.proto2\x9a\x03\n\rSignalService\x12W\n\x11GetOrCreateSignal\x12(.flyteidl.admin.SignalGetOrCreateRequest\x1a\x16.flyteidl.admin.Signal\"\x00\x12\xc1\x01\n\x0bListSignals\x12!.flyteidl.admin.SignalListRequest\x1a\x1a.flyteidl.admin.SignalList\"s\x82\xd3\xe4\x93\x02m\x12k/api/v1/signals/{workflow_execution_id.project}/{workflow_execution_id.domain}/{workflow_execution_id.name}\x12l\n\tSetSignal\x12 .flyteidl.admin.SignalSetRequest\x1a!.flyteidl.admin.SignalSetResponse\"\x1a\x82\xd3\xe4\x93\x02\x14:\x01*\"\x0f/api/v1/signalsB\xc3\x01\n\x14\x63om.flyteidl.serviceB\x0bSignalProtoP\x01Z=github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/service\xa2\x02\x03\x46SX\xaa\x02\x10\x46lyteidl.Service\xca\x02\x10\x46lyteidl\\Service\xe2\x02\x1c\x46lyteidl\\Service\\GPBMetadata\xea\x02\x11\x46lyteidl::Serviceb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1d\x66lyteidl/service/signal.proto\x12\x10\x66lyteidl.service\x1a\x1cgoogle/api/annotations.proto\x1a\x1b\x66lyteidl/admin/signal.proto2\xde\x04\n\rSignalService\x12W\n\x11GetOrCreateSignal\x12(.flyteidl.admin.SignalGetOrCreateRequest\x1a\x16.flyteidl.admin.Signal\"\x00\x12\xd4\x02\n\x0bListSignals\x12!.flyteidl.admin.SignalListRequest\x1a\x1a.flyteidl.admin.SignalList\"\x85\x02\x82\xd3\xe4\x93\x02\xfe\x01Z\x8e\x01\x12\x8b\x01/api/v1/signals/org/{workflow_execution_id.org}/{workflow_execution_id.project}/{workflow_execution_id.domain}/{workflow_execution_id.name}\x12k/api/v1/signals/{workflow_execution_id.project}/{workflow_execution_id.domain}/{workflow_execution_id.name}\x12\x9c\x01\n\tSetSignal\x12 .flyteidl.admin.SignalSetRequest\x1a!.flyteidl.admin.SignalSetResponse\"J\x82\xd3\xe4\x93\x02\x44:\x01*Z.:\x01*\")/api/v1/signals/org/{id.execution_id.org}\"\x0f/api/v1/signalsB\xc3\x01\n\x14\x63om.flyteidl.serviceB\x0bSignalProtoP\x01Z=github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/service\xa2\x02\x03\x46SX\xaa\x02\x10\x46lyteidl.Service\xca\x02\x10\x46lyteidl\\Service\xe2\x02\x1c\x46lyteidl\\Service\\GPBMetadata\xea\x02\x11\x46lyteidl::Serviceb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -25,9 +25,9 @@ DESCRIPTOR._options = None DESCRIPTOR._serialized_options = b'\n\024com.flyteidl.serviceB\013SignalProtoP\001Z=github.com/flyteorg/flyte/flyteidl/gen/pb-go/flyteidl/service\242\002\003FSX\252\002\020Flyteidl.Service\312\002\020Flyteidl\\Service\342\002\034Flyteidl\\Service\\GPBMetadata\352\002\021Flyteidl::Service' _SIGNALSERVICE.methods_by_name['ListSignals']._options = None - _SIGNALSERVICE.methods_by_name['ListSignals']._serialized_options = b'\202\323\344\223\002m\022k/api/v1/signals/{workflow_execution_id.project}/{workflow_execution_id.domain}/{workflow_execution_id.name}' + _SIGNALSERVICE.methods_by_name['ListSignals']._serialized_options = b'\202\323\344\223\002\376\001Z\216\001\022\213\001/api/v1/signals/org/{workflow_execution_id.org}/{workflow_execution_id.project}/{workflow_execution_id.domain}/{workflow_execution_id.name}\022k/api/v1/signals/{workflow_execution_id.project}/{workflow_execution_id.domain}/{workflow_execution_id.name}' _SIGNALSERVICE.methods_by_name['SetSignal']._options = None - _SIGNALSERVICE.methods_by_name['SetSignal']._serialized_options = b'\202\323\344\223\002\024:\001*\"\017/api/v1/signals' + _SIGNALSERVICE.methods_by_name['SetSignal']._serialized_options = b'\202\323\344\223\002D:\001*Z.:\001*\")/api/v1/signals/org/{id.execution_id.org}\"\017/api/v1/signals' _globals['_SIGNALSERVICE']._serialized_start=111 - _globals['_SIGNALSERVICE']._serialized_end=521 + _globals['_SIGNALSERVICE']._serialized_end=717 # @@protoc_insertion_point(module_scope) diff --git a/flyteidl/gen/pb_rust/flyteidl.admin.rs b/flyteidl/gen/pb_rust/flyteidl.admin.rs index dddc3ae467..87932411a0 100644 --- a/flyteidl/gen/pb_rust/flyteidl.admin.rs +++ b/flyteidl/gen/pb_rust/flyteidl.admin.rs @@ -1945,6 +1945,9 @@ pub struct ListMatchableAttributesRequest { /// +required #[prost(enumeration="MatchableResource", tag="1")] pub resource_type: i32, + /// Optional, org filter applied to list project requests. + #[prost(string, tag="2")] + pub org: ::prost::alloc::string::String, } /// Response for a request for all matching resource attributes for a resource type. /// See :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` for more details @@ -2404,6 +2407,9 @@ pub struct ProjectListRequest { /// +optional #[prost(message, optional, tag="4")] pub sort_by: ::core::option::Option, + /// Optional, org filter applied to list project requests. + #[prost(string, tag="5")] + pub org: ::prost::alloc::string::String, } /// Adds a new user-project within the Flyte deployment. /// See :ref:`ref_flyteidl.admin.Project` for more details diff --git a/flyteidl/protos/flyteidl/admin/matchable_resource.proto b/flyteidl/protos/flyteidl/admin/matchable_resource.proto index 692215b59d..cca6dbcc41 100644 --- a/flyteidl/protos/flyteidl/admin/matchable_resource.proto +++ b/flyteidl/protos/flyteidl/admin/matchable_resource.proto @@ -178,6 +178,9 @@ message MatchableAttributesConfiguration { message ListMatchableAttributesRequest { // +required MatchableResource resource_type = 1; + + // Optional, org filter applied to list project requests. + string org = 2; } // Response for a request for all matching resource attributes for a resource type. diff --git a/flyteidl/protos/flyteidl/admin/project.proto b/flyteidl/protos/flyteidl/admin/project.proto index 907b7d2cae..7a1e57b764 100644 --- a/flyteidl/protos/flyteidl/admin/project.proto +++ b/flyteidl/protos/flyteidl/admin/project.proto @@ -80,6 +80,9 @@ message ProjectListRequest { // Sort ordering. // +optional Sort sort_by = 4; + + // Optional, org filter applied to list project requests. + string org = 5; } // Adds a new user-project within the Flyte deployment. diff --git a/flyteidl/protos/flyteidl/service/admin.proto b/flyteidl/protos/flyteidl/service/admin.proto index d0f5391d25..f03f2a1e4e 100644 --- a/flyteidl/protos/flyteidl/service/admin.proto +++ b/flyteidl/protos/flyteidl/service/admin.proto @@ -29,6 +29,10 @@ service AdminService { option (google.api.http) = { post: "/api/v1/tasks" body: "*" + additional_bindings { + post: "/api/v1/tasks/org/{id.org}" + body: "*" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Create and register a task definition." @@ -97,6 +101,10 @@ service AdminService { option (google.api.http) = { post: "/api/v1/workflows" body: "*" + additional_bindings { + post: "/api/v1/workflows/org/{id.org}" + body: "*" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Create and register a workflow definition." @@ -165,6 +173,10 @@ service AdminService { option (google.api.http) = { post: "/api/v1/launch_plans" body: "*" + additional_bindings { + post: "/api/v1/launch_plans/org/{id.org}" + body: "*" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Create and register a launch plan definition." @@ -213,6 +225,9 @@ service AdminService { rpc ListActiveLaunchPlans (flyteidl.admin.ActiveLaunchPlanListRequest) returns (flyteidl.admin.LaunchPlanList) { option (google.api.http) = { get: "/api/v1/active_launch_plans/{project}/{domain}" + additional_bindings { + get: "/api/v1/active_launch_plans/org/{org}/{project}/{domain}" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Fetch the active launch plan versions specified by input request filters." @@ -275,6 +290,10 @@ service AdminService { option (google.api.http) = { post: "/api/v1/executions" body: "*" + additional_bindings { + put: "/api/v1/executions/org/{org}" + body: "*" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Create a workflow execution." @@ -286,6 +305,10 @@ service AdminService { option (google.api.http) = { post: "/api/v1/executions/relaunch" body: "*" + additional_bindings { + post: "/api/v1/executions/org/{id.org}/relaunch" + body: "*" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Relaunch a workflow execution." @@ -301,6 +324,10 @@ service AdminService { option (google.api.http) = { post: "/api/v1/executions/recover" body: "*" + additional_bindings { + post: "/api/v1/executions/org/{id.org}/recover" + body: "*" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Recreates a previously-run workflow execution that will only start executing from the last known failure point. " @@ -371,7 +398,7 @@ service AdminService { delete: "/api/v1/executions/{id.project}/{id.domain}/{id.name}" body: "*" additional_bindings { - delete: "/api/v1/data/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}" + delete: "/api/v1/executions/org/{id.org}/{id.project}/{id.domain}/{id.name}" body: "*" } }; @@ -437,6 +464,10 @@ service AdminService { option (google.api.http) = { post: "/api/v1/projects" body: "*" + additional_bindings { + post: "/api/v1/projects/org/{project.org}" + body: "*" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Register a project." @@ -464,6 +495,9 @@ service AdminService { rpc ListProjects (flyteidl.admin.ProjectListRequest) returns (flyteidl.admin.Projects) { option (google.api.http) = { get: "/api/v1/projects" + additional_bindings { + get: "/api/v1/projects/org/{org}" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Fetch registered projects." @@ -475,6 +509,10 @@ service AdminService { option (google.api.http) = { post: "/api/v1/events/workflows" body: "*" + additional_bindings { + post: "/api/v1/events/org/{event.execution_id.org}/workflows" + body: "*" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Create a workflow execution event recording a phase transition." @@ -486,6 +524,10 @@ service AdminService { option (google.api.http) = { post: "/api/v1/events/nodes" body: "*" + additional_bindings { + post: "/api/v1/events/org/{event.id.execution_id.org}/nodes" + body: "*" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Create a node execution event recording a phase transition." @@ -497,6 +539,10 @@ service AdminService { option (google.api.http) = { post: "/api/v1/events/tasks" body: "*" + additional_bindings { + post: "/api/v1/events/org/{event.parent_node_execution_id.execution_id.org}/tasks" + body: "*" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Create a task execution event recording a phase transition." @@ -675,6 +721,9 @@ service AdminService { rpc ListMatchableAttributes (flyteidl.admin.ListMatchableAttributesRequest) returns (flyteidl.admin.ListMatchableAttributesResponse) { option (google.api.http) = { get: "/api/v1/matchable_attributes" + additional_bindings { + get: "/api/v1/matchable_attributes/org/{org}" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Retrieve a list of MatchableAttributesConfiguration objects." diff --git a/flyteidl/protos/flyteidl/service/signal.proto b/flyteidl/protos/flyteidl/service/signal.proto index 91030d226c..07389774d0 100644 --- a/flyteidl/protos/flyteidl/service/signal.proto +++ b/flyteidl/protos/flyteidl/service/signal.proto @@ -24,6 +24,9 @@ service SignalService { rpc ListSignals (flyteidl.admin.SignalListRequest) returns (flyteidl.admin.SignalList) { option (google.api.http) = { get: "/api/v1/signals/{workflow_execution_id.project}/{workflow_execution_id.domain}/{workflow_execution_id.name}" + additional_bindings: { + get: "/api/v1/signals/org/{workflow_execution_id.org}/{workflow_execution_id.project}/{workflow_execution_id.domain}/{workflow_execution_id.name}" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Fetch existing signal definitions matching the input signal id filters." @@ -35,6 +38,10 @@ service SignalService { option (google.api.http) = { post: "/api/v1/signals" body: "*" + additional_bindings: { + post: "/api/v1/signals/org/{id.execution_id.org}" + body: "*" + } }; // option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { // description: "Set a signal value." From a62743db5334a8d8565fb854405a5964bf1387aa Mon Sep 17 00:00:00 2001 From: Niels Bantilan Date: Fri, 19 Jan 2024 16:29:48 -0500 Subject: [PATCH 19/30] update conda lock file (#4749) Signed-off-by: Niels Bantilan --- monodocs-environment.lock.yaml | 2961 ++++++++++++++++++-------------- monodocs-environment.yaml | 3 +- 2 files changed, 1634 insertions(+), 1330 deletions(-) diff --git a/monodocs-environment.lock.yaml b/monodocs-environment.lock.yaml index 4efaa5fe6c..d0b4d14608 100644 --- a/monodocs-environment.lock.yaml +++ b/monodocs-environment.lock.yaml @@ -49,27 +49,27 @@ package: category: main optional: false - name: absl-py - version: 2.0.0 + version: 2.1.0 manager: conda platform: linux-64 dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/absl-py-2.0.0-pyhd8ed1ab_0.conda + python: '>=3.7' + url: https://conda.anaconda.org/conda-forge/noarch/absl-py-2.1.0-pyhd8ed1ab_0.conda hash: - md5: 2361c56617987bb6623dcbf8bab5cdc4 - sha256: 99e2a54d079d91909d6d12d2336d792fd2ab666620d2ac761cd09d0e552dd44d + md5: 035d1d58677c13ec93122d9eb6b8803b + sha256: 6c84575fe0c3a860c7b6a52cb36dc548c838503c8da0f950a63a64c29b443937 category: main optional: false - name: absl-py - version: 2.0.0 + version: 2.1.0 manager: conda platform: osx-arm64 dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/absl-py-2.0.0-pyhd8ed1ab_0.conda + python: '>=3.7' + url: https://conda.anaconda.org/conda-forge/noarch/absl-py-2.1.0-pyhd8ed1ab_0.conda hash: - md5: 2361c56617987bb6623dcbf8bab5cdc4 - sha256: 99e2a54d079d91909d6d12d2336d792fd2ab666620d2ac761cd09d0e552dd44d + md5: 035d1d58677c13ec93122d9eb6b8803b + sha256: 6c84575fe0c3a860c7b6a52cb36dc548c838503c8da0f950a63a64c29b443937 category: main optional: false - name: adal @@ -141,23 +141,23 @@ package: category: main optional: false - name: aiobotocore - version: 2.8.0 + version: 2.9.1 manager: conda platform: linux-64 dependencies: aiohttp: '>=3.7.4.post0,<4.0.0' aioitertools: '>=0.5.1,<1.0.0' - botocore: '>=1.32.4,<1.33.2' + botocore: '>=1.33.2,<1.33.14' python: '>=3.8' wrapt: '>=1.10.10,<2.0.0' - url: https://conda.anaconda.org/conda-forge/noarch/aiobotocore-2.8.0-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/aiobotocore-2.9.1-pyhd8ed1ab_0.conda hash: - md5: 877b0ea381ffddb7f98768b6851a2bba - sha256: a8ddcb54ba540f61f6a68b84db7c6e0a324c0dbe0ea95882ddc3f25253824977 + md5: f48c1808e5d5386427cb47cd6e59de42 + sha256: 21e75838ac262c6443dab996cf299034c9736fa7ac912f9324683771988d8a37 category: main optional: false - name: aiobotocore - version: 2.8.0 + version: 2.9.1 manager: conda platform: osx-arm64 dependencies: @@ -165,11 +165,11 @@ package: wrapt: '>=1.10.10,<2.0.0' aioitertools: '>=0.5.1,<1.0.0' aiohttp: '>=3.7.4.post0,<4.0.0' - botocore: '>=1.32.4,<1.33.2' - url: https://conda.anaconda.org/conda-forge/noarch/aiobotocore-2.8.0-pyhd8ed1ab_0.conda + botocore: '>=1.33.2,<1.33.14' + url: https://conda.anaconda.org/conda-forge/noarch/aiobotocore-2.9.1-pyhd8ed1ab_0.conda hash: - md5: 877b0ea381ffddb7f98768b6851a2bba - sha256: a8ddcb54ba540f61f6a68b84db7c6e0a324c0dbe0ea95882ddc3f25253824977 + md5: f48c1808e5d5386427cb47cd6e59de42 + sha256: 21e75838ac262c6443dab996cf299034c9736fa7ac912f9324683771988d8a37 category: main optional: false - name: aiohttp @@ -264,61 +264,61 @@ package: category: main optional: false - name: alabaster - version: 0.7.13 + version: 0.7.16 manager: conda platform: linux-64 dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/alabaster-0.7.13-pyhd8ed1ab_0.conda + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/alabaster-0.7.16-pyhd8ed1ab_0.conda hash: - md5: 06006184e203b61d3525f90de394471e - sha256: b2d160a050996950434c6e87a174fc01c4a937cbeffbdd20d1b46126b4478a95 + md5: def531a3ac77b7fb8c21d17bb5d0badb + sha256: fd39ad2fabec1569bbb0dfdae34ab6ce7de6ec09dcec8638f83dad0373594069 category: main optional: false - name: alabaster - version: 0.7.13 + version: 0.7.16 manager: conda platform: osx-arm64 dependencies: - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/alabaster-0.7.13-pyhd8ed1ab_0.conda + python: '>=3.9' + url: https://conda.anaconda.org/conda-forge/noarch/alabaster-0.7.16-pyhd8ed1ab_0.conda hash: - md5: 06006184e203b61d3525f90de394471e - sha256: b2d160a050996950434c6e87a174fc01c4a937cbeffbdd20d1b46126b4478a95 + md5: def531a3ac77b7fb8c21d17bb5d0badb + sha256: fd39ad2fabec1569bbb0dfdae34ab6ce7de6ec09dcec8638f83dad0373594069 category: main optional: false - name: alembic - version: 1.13.0 + version: 1.13.1 manager: conda platform: linux-64 dependencies: importlib-metadata: '' importlib_resources: '' mako: '' - python: '>=3.7' + python: '>=3.8' sqlalchemy: '>=1.3.0' typing-extensions: '>=4' - url: https://conda.anaconda.org/conda-forge/noarch/alembic-1.13.0-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/alembic-1.13.1-pyhd8ed1ab_1.conda hash: - md5: 7f0372c1cfa41891787ddf267334c0c7 - sha256: d6dd010632bc5272fe7e51646651c5fb9ae9b7663113b94aa585d6bcb43834b0 + md5: 7b7b0062b0de9f3f71502d31215fcbbb + sha256: e4bc9aa5a6e866461274826bb750407a407fed9207a5adb70bf727f6addd7fe6 category: main optional: false - name: alembic - version: 1.13.0 + version: 1.13.1 manager: conda platform: osx-arm64 dependencies: importlib-metadata: '' importlib_resources: '' mako: '' - python: '>=3.7' + python: '>=3.8' sqlalchemy: '>=1.3.0' typing-extensions: '>=4' - url: https://conda.anaconda.org/conda-forge/noarch/alembic-1.13.0-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/alembic-1.13.1-pyhd8ed1ab_1.conda hash: - md5: 7f0372c1cfa41891787ddf267334c0c7 - sha256: d6dd010632bc5272fe7e51646651c5fb9ae9b7663113b94aa585d6bcb43834b0 + md5: 7b7b0062b0de9f3f71502d31215fcbbb + sha256: e4bc9aa5a6e866461274826bb750407a407fed9207a5adb70bf727f6addd7fe6 category: main optional: false - name: altair @@ -384,7 +384,7 @@ package: category: main optional: false - name: anyio - version: 4.1.0 + version: 4.2.0 manager: conda platform: linux-64 dependencies: @@ -392,25 +392,27 @@ package: idna: '>=2.8' python: '>=3.8' sniffio: '>=1.1' - url: https://conda.anaconda.org/conda-forge/noarch/anyio-4.1.0-pyhd8ed1ab_0.conda + typing_extensions: '>=4.1' + url: https://conda.anaconda.org/conda-forge/noarch/anyio-4.2.0-pyhd8ed1ab_0.conda hash: - md5: 76a3b574717769c4c937c2afa2f1069f - sha256: d9d64b29d8a4f58a8d5f9cb0af80b70fd4e038a6e328b039899f7cd93863a82e + md5: 81ce9f3d9697b534d95118bb86c8a07e + sha256: 68458e31bdf3334f0e85f08767718ca9bc35bc2a79a6c503942ac99da98e510a category: main optional: false - name: anyio - version: 4.1.0 + version: 4.2.0 manager: conda platform: osx-arm64 dependencies: python: '>=3.8' sniffio: '>=1.1' + typing_extensions: '>=4.1' idna: '>=2.8' exceptiongroup: '>=1.0.2' - url: https://conda.anaconda.org/conda-forge/noarch/anyio-4.1.0-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/anyio-4.2.0-pyhd8ed1ab_0.conda hash: - md5: 76a3b574717769c4c937c2afa2f1069f - sha256: d9d64b29d8a4f58a8d5f9cb0af80b70fd4e038a6e328b039899f7cd93863a82e + md5: 81ce9f3d9697b534d95118bb86c8a07e + sha256: 68458e31bdf3334f0e85f08767718ca9bc35bc2a79a6c503942ac99da98e510a category: main optional: false - name: aplus @@ -718,110 +720,109 @@ package: category: main optional: false - name: attrs - version: 23.1.0 + version: 23.2.0 manager: conda platform: linux-64 dependencies: python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/attrs-23.1.0-pyh71513ae_1.conda + url: https://conda.anaconda.org/conda-forge/noarch/attrs-23.2.0-pyh71513ae_0.conda hash: - md5: 3edfead7cedd1ab4400a6c588f3e75f8 - sha256: 063639cd568f5c7a557b0fb1cc27f098598c0d8ff869088bfeb82934674f8821 + md5: 5e4c0743c70186509d1412e03c2d8dfa + sha256: 77c7d03bdb243a048fff398cedc74327b7dc79169ebe3b4c8448b0331ea55fea category: main optional: false - name: attrs - version: 23.1.0 + version: 23.2.0 manager: conda platform: osx-arm64 dependencies: python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/attrs-23.1.0-pyh71513ae_1.conda + url: https://conda.anaconda.org/conda-forge/noarch/attrs-23.2.0-pyh71513ae_0.conda hash: - md5: 3edfead7cedd1ab4400a6c588f3e75f8 - sha256: 063639cd568f5c7a557b0fb1cc27f098598c0d8ff869088bfeb82934674f8821 + md5: 5e4c0743c70186509d1412e03c2d8dfa + sha256: 77c7d03bdb243a048fff398cedc74327b7dc79169ebe3b4c8448b0331ea55fea category: main optional: false - name: aws-c-auth - version: 0.7.3 + version: 0.7.11 manager: conda platform: linux-64 dependencies: - aws-c-cal: '>=0.6.1,<0.6.2.0a0' - aws-c-common: '>=0.9.0,<0.9.1.0a0' - aws-c-http: '>=0.7.11,<0.7.12.0a0' - aws-c-io: '>=0.13.32,<0.13.33.0a0' - aws-c-sdkutils: '>=0.1.12,<0.1.13.0a0' + aws-c-cal: '>=0.6.9,<0.6.10.0a0' + aws-c-common: '>=0.9.12,<0.9.13.0a0' + aws-c-http: '>=0.8.0,<0.8.1.0a0' + aws-c-io: '>=0.14.0,<0.14.1.0a0' + aws-c-sdkutils: '>=0.1.13,<0.1.14.0a0' libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.7.3-h28f7589_1.conda + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.7.11-h0b4cabd_1.conda hash: - md5: 97503d3e565004697f1651753aa95b9e - sha256: d811d310ea601fc37f8a843e8aa7992c3286702d163472bd80bd81c7cb301f7b + md5: e9a6562446d81183d1483bb23bfc478c + sha256: ef98131dbff55f482b0af10d17aa6c478e59987661cf3c22dddb30a441986aa5 category: main optional: false - name: aws-c-auth - version: 0.7.3 + version: 0.7.11 manager: conda platform: osx-arm64 dependencies: - aws-c-cal: '>=0.6.1,<0.6.2.0a0' - aws-c-common: '>=0.9.0,<0.9.1.0a0' - aws-c-http: '>=0.7.11,<0.7.12.0a0' - aws-c-io: '>=0.13.32,<0.13.33.0a0' - aws-c-sdkutils: '>=0.1.12,<0.1.13.0a0' - url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.7.3-h109ad1a_1.conda + aws-c-cal: '>=0.6.9,<0.6.10.0a0' + aws-c-common: '>=0.9.12,<0.9.13.0a0' + aws-c-http: '>=0.8.0,<0.8.1.0a0' + aws-c-io: '>=0.14.0,<0.14.1.0a0' + aws-c-sdkutils: '>=0.1.13,<0.1.14.0a0' + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.7.11-ha4ce7b8_1.conda hash: - md5: 55852033dc22d5a2c00d58583447d051 - sha256: 547c24057cb8459186aa09cbc97c58eeca7c9e44d227a01457a2261e1954a36a + md5: ed467f71fac4eca9454ca1ff99be7f84 + sha256: 4b4318d4ad5cb9d3f3e141e43528e3c7f161e8f167195ff2627e6ec778bd890f category: main optional: false - name: aws-c-cal - version: 0.6.1 + version: 0.6.9 manager: conda platform: linux-64 dependencies: - aws-c-common: '>=0.9.0,<0.9.1.0a0' + aws-c-common: '>=0.9.12,<0.9.13.0a0' libgcc-ng: '>=12' - openssl: '>=3.1.2,<4.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.6.1-hc309b26_1.conda + openssl: '>=3.2.0,<4.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.6.9-h14ec70c_3.conda hash: - md5: cc09293a2c2b7fd77aff284f370c12c0 - sha256: e5de0a103e6eb6597c012d67daa5d8ccb65e25e1fe22ef5cb758835276be90b9 + md5: 7da4b84275e63f56d158d6250727a70f + sha256: d4f593f586378d7544900847b16d922a10c4d92aec7add6e3cb5dbe69965ab2f category: main optional: false - name: aws-c-cal - version: 0.6.1 + version: 0.6.9 manager: conda platform: osx-arm64 dependencies: - aws-c-common: '>=0.9.0,<0.9.1.0a0' - openssl: '>=3.1.2,<4.0a0' - url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-cal-0.6.1-hb406d48_1.conda + aws-c-common: '>=0.9.12,<0.9.13.0a0' + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-cal-0.6.9-h4fd42c2_3.conda hash: - md5: 2461f9de775b064f549d8e1c2e74c682 - sha256: 066a1933fe8c0c8c0e8a7dc11bada019813b1c09ab290cbaf904bddcd11e036d + md5: c06a837ae2f0c217141c32cb408c8b92 + sha256: dde08312c4db4e2e646e37bf5e3dc96affa0dfa87a3044821f545635cad2b440 category: main optional: false - name: aws-c-common - version: 0.9.0 + version: 0.9.12 manager: conda platform: linux-64 dependencies: libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.9.0-hd590300_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.9.12-hd590300_0.conda hash: - md5: 71b89db63b5b504e7afc8ad901172e1e - sha256: d70c478150d2551bf7b200bfa3d7cb8a016471819a58bb7fe18a4e526dae3567 + md5: 7dbb94ffb9df66406f3101625807cac1 + sha256: 22e7c9438f2fe3c46a1747efcaae4ab3a078714ff8992a6ec3c213f50b9d6704 category: main optional: false - name: aws-c-common - version: 0.9.0 + version: 0.9.12 manager: conda platform: osx-arm64 dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-common-0.9.0-hb547adb_0.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-common-0.9.12-h93a5062_0.conda hash: - md5: 7d7f91d3daa8d7bbf1da8c97038e336f - sha256: ec15d841f362e6a4468e06117d985f7f6007568ba832416ff146d239b2f7f0c0 + md5: afe8c81d8e34a96a124640788296b02e + sha256: 75d963943aefae31ab1a02956a5ee41c0fa347da9550bd1ce57b5cbbea7ea7e6 category: main optional: false - name: aws-c-compression @@ -829,12 +830,12 @@ package: manager: conda platform: linux-64 dependencies: - aws-c-common: '>=0.9.0,<0.9.1.0a0' + aws-c-common: '>=0.9.12,<0.9.13.0a0' libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.2.17-h4d4d85c_2.conda + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.2.17-h572eabf_8.conda hash: - md5: 9ca99452635fe03eb5fa937f5ae604b0 - sha256: 8ff6538db97a861be404f11dbc01abe7d4bc9978df3e573af1d08e2590eb500e + md5: cc6630010cb1211cc15fb348f7c7eb70 + sha256: 0627434bcee61f94cf35d7719a395d4b7c9967f20bb877f1bd05868013a8a93c category: main optional: false - name: aws-c-compression @@ -842,191 +843,191 @@ package: manager: conda platform: osx-arm64 dependencies: - aws-c-common: '>=0.9.0,<0.9.1.0a0' - url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-compression-0.2.17-he70778a_2.conda + aws-c-common: '>=0.9.12,<0.9.13.0a0' + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-compression-0.2.17-h4fd42c2_8.conda hash: - md5: d7a30e85a98d14dcd2d0ca8ae8ca4372 - sha256: 0e5a93b88d77405af89586f4b776f68a3cfd1c9ed44da57ac2a6b042dc96a26c + md5: c9b738b496c34db0d27b42491eb16c23 + sha256: 0500a040f6d2838af312c26fbea6ed2a9cac54d8a74347a9c1964af8f57ff033 category: main optional: false - name: aws-c-event-stream - version: 0.3.1 + version: 0.4.1 manager: conda platform: linux-64 dependencies: - aws-c-common: '>=0.9.0,<0.9.1.0a0' - aws-c-io: '>=0.13.32,<0.13.33.0a0' + aws-c-common: '>=0.9.12,<0.9.13.0a0' + aws-c-io: '>=0.14.0,<0.14.1.0a0' aws-checksums: '>=0.1.17,<0.1.18.0a0' libgcc-ng: '>=12' libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.3.1-h2e3709c_4.conda + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.4.1-h97bb272_2.conda hash: - md5: 2cf21b1cbc1c096a28ffa2892257a2c1 - sha256: e733a19296044d23f785f4c1c18f82efce1b032e0913af93e70dcce10de6f688 + md5: 5a16088be732d54b50c134203f712d24 + sha256: a7cb50ccb2779d2934cae3a4fcc3d032a4525b63a464d6bd23957650381d633e category: main optional: false - name: aws-c-event-stream - version: 0.3.1 + version: 0.4.1 manager: conda platform: osx-arm64 dependencies: - aws-c-common: '>=0.9.0,<0.9.1.0a0' - aws-c-io: '>=0.13.32,<0.13.33.0a0' + aws-c-common: '>=0.9.12,<0.9.13.0a0' + aws-c-io: '>=0.14.0,<0.14.1.0a0' aws-checksums: '>=0.1.17,<0.1.18.0a0' - libcxx: '>=15.0.7' - url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-event-stream-0.3.1-hcf14f3f_4.conda + libcxx: '>=15' + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-event-stream-0.4.1-he66824e_2.conda hash: - md5: e8196ecb071eb3c07067008403182323 - sha256: eb127382b09a721a916ebf54c7aef8acbeefd00d5e2b14c45ec69f847bb50bf1 + md5: 64e84b88c3e9ff59fbd63816877a23d5 + sha256: 7ba075401a7963fd50d9f364053806c4a86e4f51cd8d2f063be875a78306e689 category: main optional: false - name: aws-c-http - version: 0.7.11 + version: 0.8.0 manager: conda platform: linux-64 dependencies: - aws-c-cal: '>=0.6.1,<0.6.2.0a0' - aws-c-common: '>=0.9.0,<0.9.1.0a0' + aws-c-cal: '>=0.6.9,<0.6.10.0a0' + aws-c-common: '>=0.9.12,<0.9.13.0a0' aws-c-compression: '>=0.2.17,<0.2.18.0a0' - aws-c-io: '>=0.13.32,<0.13.33.0a0' + aws-c-io: '>=0.14.0,<0.14.1.0a0' libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.7.11-h00aa349_4.conda + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.8.0-h9129f04_2.conda hash: - md5: cb932dff7328ff620ce8059c9968b095 - sha256: a4a90f366fe9235be7700306efef999d2d95ebc53e3701efb899ff59eadae6cd + md5: ec632590307b47ac47d22ebcf91f4043 + sha256: 5929ac8e3118146f9d23a5fdff54e2025501ee20a2cd9d8dd2b0115a60442dce category: main optional: false - name: aws-c-http - version: 0.7.11 + version: 0.8.0 manager: conda platform: osx-arm64 dependencies: - aws-c-cal: '>=0.6.1,<0.6.2.0a0' - aws-c-common: '>=0.9.0,<0.9.1.0a0' + aws-c-cal: '>=0.6.9,<0.6.10.0a0' + aws-c-common: '>=0.9.12,<0.9.13.0a0' aws-c-compression: '>=0.2.17,<0.2.18.0a0' - aws-c-io: '>=0.13.32,<0.13.33.0a0' - url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-http-0.7.11-hcbec455_4.conda + aws-c-io: '>=0.14.0,<0.14.1.0a0' + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-http-0.8.0-hd3d28cd_2.conda hash: - md5: 13a5f11f32954de3c6ee5680700ce421 - sha256: de3b7d7729acbe9883ce8b4ab28130042b9c2e39616b616ee57555522afed65d + md5: bf12b06426420df2055eaa104889bc07 + sha256: 8e80c37e5f2cc84f92634c9c60a4eaa062c2b57dcc1001c5faf711b77318abb8 category: main optional: false - name: aws-c-io - version: 0.13.32 + version: 0.14.0 manager: conda platform: linux-64 dependencies: - aws-c-cal: '>=0.6.1,<0.6.2.0a0' - aws-c-common: '>=0.9.0,<0.9.1.0a0' + aws-c-cal: '>=0.6.9,<0.6.10.0a0' + aws-c-common: '>=0.9.12,<0.9.13.0a0' libgcc-ng: '>=12' - s2n: '>=1.3.49,<1.3.50.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.13.32-he9a53bd_1.conda + s2n: '>=1.4.1,<1.4.2.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.14.0-hf8f278a_1.conda hash: - md5: 8a24e5820f4a0ffd2ed9c4722cd5d7ca - sha256: 14911a1d4b66b5b031129d173fd34cedf852e3698eddd1972cf57974ce280f49 + md5: 30ebacf5b5fd61294851301887dc7518 + sha256: dd52e17a5be987b384c62574d90ddafbba68fa65b1f1344236b90c50ffed304d category: main optional: false - name: aws-c-io - version: 0.13.32 + version: 0.14.0 manager: conda platform: osx-arm64 dependencies: - aws-c-cal: '>=0.6.1,<0.6.2.0a0' - aws-c-common: '>=0.9.0,<0.9.1.0a0' - url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-io-0.13.32-he8ad1d2_1.conda + aws-c-cal: '>=0.6.9,<0.6.10.0a0' + aws-c-common: '>=0.9.12,<0.9.13.0a0' + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-io-0.14.0-h8daa835_1.conda hash: - md5: f7b3961185b3476c4c5a2a5cd9ab0523 - sha256: 621cc2c5d73e245c002a7c6ede7b7f74dfdcaf7dc52f3284f339b2c09df41acf + md5: c15089f0a5df47a3278232235a6c2d3a + sha256: 026567637cd89f840fdb70550aa2fe5d325ca3cf52b8d66b48e588d3f0cfc2ea category: main optional: false - name: aws-c-mqtt - version: 0.9.3 + version: 0.10.1 manager: conda platform: linux-64 dependencies: - aws-c-common: '>=0.9.0,<0.9.1.0a0' - aws-c-http: '>=0.7.11,<0.7.12.0a0' - aws-c-io: '>=0.13.32,<0.13.33.0a0' + aws-c-common: '>=0.9.12,<0.9.13.0a0' + aws-c-http: '>=0.8.0,<0.8.1.0a0' + aws-c-io: '>=0.14.0,<0.14.1.0a0' libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.9.3-hb447be9_1.conda + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.10.1-h2b97f5f_0.conda hash: - md5: c520669eb0be9269a5f0d8ef62531882 - sha256: e804a788e6147f4466bd2a24b7d9c327bffbe98bfb7420ddeae47dae41b140d6 + md5: 4cba7afc0f74a7cce3159c0bceb607c3 + sha256: 8edcb09a2d93c24320f517f837a0e46e98749b72dc7c9d55ce1fa0c4fa5db116 category: main optional: false - name: aws-c-mqtt - version: 0.9.3 + version: 0.10.1 manager: conda platform: osx-arm64 dependencies: - aws-c-common: '>=0.9.0,<0.9.1.0a0' - aws-c-http: '>=0.7.11,<0.7.12.0a0' - aws-c-io: '>=0.13.32,<0.13.33.0a0' - url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-mqtt-0.9.3-hf45dd20_1.conda + aws-c-common: '>=0.9.12,<0.9.13.0a0' + aws-c-http: '>=0.8.0,<0.8.1.0a0' + aws-c-io: '>=0.14.0,<0.14.1.0a0' + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-mqtt-0.10.1-h59ff425_0.conda hash: - md5: 2602feff0c3c7904cc9f743d5c5bdb74 - sha256: 1b0e3ac3b683f00f37e6caac12f3a3e257ded1c5f8e3f7cd59bdfb7068a5abee + md5: aef14e17e37ef7ff95c1deb57cee8a23 + sha256: 2e88ba1370be78b0532870bd1a5cffbc464e31b5d64f5763d2517b5c53753af4 category: main optional: false - name: aws-c-s3 - version: 0.3.14 + version: 0.4.9 manager: conda platform: linux-64 dependencies: - aws-c-auth: '>=0.7.3,<0.7.4.0a0' - aws-c-cal: '>=0.6.1,<0.6.2.0a0' - aws-c-common: '>=0.9.0,<0.9.1.0a0' - aws-c-http: '>=0.7.11,<0.7.12.0a0' - aws-c-io: '>=0.13.32,<0.13.33.0a0' + aws-c-auth: '>=0.7.11,<0.7.12.0a0' + aws-c-cal: '>=0.6.9,<0.6.10.0a0' + aws-c-common: '>=0.9.12,<0.9.13.0a0' + aws-c-http: '>=0.8.0,<0.8.1.0a0' + aws-c-io: '>=0.14.0,<0.14.1.0a0' aws-checksums: '>=0.1.17,<0.1.18.0a0' libgcc-ng: '>=12' - openssl: '>=3.1.2,<4.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.3.14-hf3aad02_1.conda + openssl: '>=3.2.0,<4.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.4.9-hca09fc5_0.conda hash: - md5: a968ffa7e9fe0c257628033d393e512f - sha256: f986c222f1f22e9e8d4869846a975595f1d0043794b41a5cf30ac53b0e4f4852 + md5: 44f261ca46a671789f59dc305d51afeb + sha256: b10ad88a1b1f7bf8bb999e06b4bb92e87fa9ede81a10492a373d354f4276a77b category: main optional: false - name: aws-c-s3 - version: 0.3.14 + version: 0.4.9 manager: conda platform: osx-arm64 dependencies: - aws-c-auth: '>=0.7.3,<0.7.4.0a0' - aws-c-cal: '>=0.6.1,<0.6.2.0a0' - aws-c-common: '>=0.9.0,<0.9.1.0a0' - aws-c-http: '>=0.7.11,<0.7.12.0a0' - aws-c-io: '>=0.13.32,<0.13.33.0a0' + aws-c-auth: '>=0.7.11,<0.7.12.0a0' + aws-c-cal: '>=0.6.9,<0.6.10.0a0' + aws-c-common: '>=0.9.12,<0.9.13.0a0' + aws-c-http: '>=0.8.0,<0.8.1.0a0' + aws-c-io: '>=0.14.0,<0.14.1.0a0' aws-checksums: '>=0.1.17,<0.1.18.0a0' - url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-s3-0.3.14-hf0e1321_1.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-s3-0.4.9-h7f99a2c_0.conda hash: - md5: 01eb867a0851892b41cb57a7ecaeee8b - sha256: 02b7cd21bf1db9284d5e26cf9fb5a7f8a3e0a856ada807eb51d60e1d66cd8e78 + md5: 912d57a741e590a1f568345088409393 + sha256: 9ce65a457cc2a02e12badb0110615bbb8498c6a33c8b96d98bec9f9aea520172 category: main optional: false - name: aws-c-sdkutils - version: 0.1.12 + version: 0.1.13 manager: conda platform: linux-64 dependencies: - aws-c-common: '>=0.9.0,<0.9.1.0a0' + aws-c-common: '>=0.9.12,<0.9.13.0a0' libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.1.12-h4d4d85c_1.conda + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.1.13-h572eabf_1.conda hash: - md5: eba092fc6de212a01de0065f38fe8bbb - sha256: eb092d65be4e42301a0babcfccd44dbd086eadd6b84f7929c7e07c7449748280 + md5: 7c56e8a2c4e8729443217e62e0bf65ba + sha256: eb54d7573f9bbd1d01458203dd83e9c0c94c73be91af9142dd78e1a928be5b7e category: main optional: false - name: aws-c-sdkutils - version: 0.1.12 + version: 0.1.13 manager: conda platform: osx-arm64 dependencies: - aws-c-common: '>=0.9.0,<0.9.1.0a0' - url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.1.12-he70778a_1.conda + aws-c-common: '>=0.9.12,<0.9.13.0a0' + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.1.13-h4fd42c2_1.conda hash: - md5: a90a6413bbf361584033773c19cecb65 - sha256: 60bf0d3e7bd7bb368bbbc03f917b2a97198642ce8ed491f80c5cacbb6498c566 + md5: d45de4f4fd881f65d794f86a4471e370 + sha256: da5567016574499b732dbf276c0840751dafe7efbd61159917ea527c079a8c01 category: main optional: false - name: aws-checksums @@ -1034,12 +1035,12 @@ package: manager: conda platform: linux-64 dependencies: - aws-c-common: '>=0.9.0,<0.9.1.0a0' + aws-c-common: '>=0.9.12,<0.9.13.0a0' libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.1.17-h4d4d85c_1.conda + url: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.1.17-h572eabf_7.conda hash: - md5: 30f9df85ce23cd14faa9a4dfa50cca2b - sha256: df2356cf1cac39d9b872026275527718dac1d39f6e88fa5b0b56d06f6b90eb98 + md5: f7323eedc2685a24661cd6b57d7ed321 + sha256: c29ca126f9dd520cc749e8cb99b07168badb333b4b1b95577bb1788c432fe2d0 category: main optional: false - name: aws-checksums @@ -1047,121 +1048,152 @@ package: manager: conda platform: osx-arm64 dependencies: - aws-c-common: '>=0.9.0,<0.9.1.0a0' - url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-checksums-0.1.17-he70778a_1.conda + aws-c-common: '>=0.9.12,<0.9.13.0a0' + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-checksums-0.1.17-h4fd42c2_7.conda hash: - md5: 5892420ce138d63e1f6e08c9915f0308 - sha256: 52606dcecd60ccc587d3c8f100cc30b7a8101f655e8d9b26a90dac9996030f52 + md5: 22e536282755e9e87ff48c652c9eec7b + sha256: 92a00157c3e3f387d0ba171bcbb6516893ea16fc34c34f535dd74ae38fb3db8e category: main optional: false - name: aws-crt-cpp - version: 0.21.0 + version: 0.26.0 manager: conda platform: linux-64 dependencies: - aws-c-auth: '>=0.7.3,<0.7.4.0a0' - aws-c-cal: '>=0.6.1,<0.6.2.0a0' - aws-c-common: '>=0.9.0,<0.9.1.0a0' - aws-c-event-stream: '>=0.3.1,<0.3.2.0a0' - aws-c-http: '>=0.7.11,<0.7.12.0a0' - aws-c-io: '>=0.13.32,<0.13.33.0a0' - aws-c-mqtt: '>=0.9.3,<0.9.4.0a0' - aws-c-s3: '>=0.3.14,<0.3.15.0a0' - aws-c-sdkutils: '>=0.1.12,<0.1.13.0a0' + aws-c-auth: '>=0.7.11,<0.7.12.0a0' + aws-c-cal: '>=0.6.9,<0.6.10.0a0' + aws-c-common: '>=0.9.12,<0.9.13.0a0' + aws-c-event-stream: '>=0.4.1,<0.4.2.0a0' + aws-c-http: '>=0.8.0,<0.8.1.0a0' + aws-c-io: '>=0.14.0,<0.14.1.0a0' + aws-c-mqtt: '>=0.10.1,<0.10.2.0a0' + aws-c-s3: '>=0.4.9,<0.4.10.0a0' + aws-c-sdkutils: '>=0.1.13,<0.1.14.0a0' libgcc-ng: '>=12' libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.21.0-hb942446_5.conda + url: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.26.0-h04327c0_8.conda hash: - md5: 07d92ed5403ad7b5c66ffd7d5b8f7e57 - sha256: 7456d3f9c3069be9c1faf82cd37885c270d0ee945bb5adb4cc3223c9439ccc7e + md5: 8d2aeb8c24b47ad3ff87166957b216fd + sha256: 4bdef70ff6362d8a3350b4c4181d078e7b1f654a249d63294e9ab1c5a9ca72c7 category: main optional: false - name: aws-crt-cpp - version: 0.21.0 + version: 0.26.0 manager: conda platform: osx-arm64 dependencies: - aws-c-auth: '>=0.7.3,<0.7.4.0a0' - aws-c-cal: '>=0.6.1,<0.6.2.0a0' - aws-c-common: '>=0.9.0,<0.9.1.0a0' - aws-c-event-stream: '>=0.3.1,<0.3.2.0a0' - aws-c-http: '>=0.7.11,<0.7.12.0a0' - aws-c-io: '>=0.13.32,<0.13.33.0a0' - aws-c-mqtt: '>=0.9.3,<0.9.4.0a0' - aws-c-s3: '>=0.3.14,<0.3.15.0a0' - aws-c-sdkutils: '>=0.1.12,<0.1.13.0a0' - libcxx: '>=15.0.7' - url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.21.0-hda227cd_5.conda + aws-c-auth: '>=0.7.11,<0.7.12.0a0' + aws-c-cal: '>=0.6.9,<0.6.10.0a0' + aws-c-common: '>=0.9.12,<0.9.13.0a0' + aws-c-event-stream: '>=0.4.1,<0.4.2.0a0' + aws-c-http: '>=0.8.0,<0.8.1.0a0' + aws-c-io: '>=0.14.0,<0.14.1.0a0' + aws-c-mqtt: '>=0.10.1,<0.10.2.0a0' + aws-c-s3: '>=0.4.9,<0.4.10.0a0' + aws-c-sdkutils: '>=0.1.13,<0.1.14.0a0' + libcxx: '>=15' + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.26.0-hfff802b_8.conda hash: - md5: dd47301eea0a420faa1546f5c5d708ff - sha256: 861bb8ca04a5cad23dfd444967e29735b2430350c7789dc5e869a4e71dac82ae + md5: 9f4ebd51ab78bed865f2cea217cc2800 + sha256: a88854f232025c297d3161a43795909d8a00a936cb782780fa2e3fc83ea6d489 category: main optional: false - name: aws-sdk-cpp - version: 1.10.57 + version: 1.11.210 manager: conda platform: linux-64 dependencies: - aws-c-common: '>=0.9.0,<0.9.1.0a0' - aws-c-event-stream: '>=0.3.1,<0.3.2.0a0' - aws-crt-cpp: '>=0.21.0,<0.21.1.0a0' - libcurl: '>=8.2.1,<9.0a0' + aws-c-common: '>=0.9.12,<0.9.13.0a0' + aws-c-event-stream: '>=0.4.1,<0.4.2.0a0' + aws-checksums: '>=0.1.17,<0.1.18.0a0' + aws-crt-cpp: '>=0.26.0,<0.26.1.0a0' + libcurl: '>=8.5.0,<9.0a0' libgcc-ng: '>=12' libstdcxx-ng: '>=12' libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.1.2,<4.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.10.57-h85b1a90_19.conda + openssl: '>=3.2.0,<4.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.210-hba3e011_10.conda hash: - md5: 0605d3d60857fc07bd6a11e878fe0f08 - sha256: 2f44eaea9d88203f400229c3247575dd8ea7c20907cc6ea2e2d859f43c395141 + md5: a4f975a959587b0e75df8e0f9f2d4347 + sha256: 97b50927c4312ad80f3729669fa8b55195c066710e0af73c818c244df01b7604 category: main optional: false - name: aws-sdk-cpp - version: 1.10.57 + version: 1.11.210 manager: conda platform: osx-arm64 dependencies: - aws-c-common: '>=0.9.0,<0.9.1.0a0' - aws-c-event-stream: '>=0.3.1,<0.3.2.0a0' - aws-crt-cpp: '>=0.21.0,<0.21.1.0a0' - libcurl: '>=8.2.1,<9.0a0' - libcxx: '>=15.0.7' + aws-c-common: '>=0.9.12,<0.9.13.0a0' + aws-c-event-stream: '>=0.4.1,<0.4.2.0a0' + aws-checksums: '>=0.1.17,<0.1.18.0a0' + aws-crt-cpp: '>=0.26.0,<0.26.1.0a0' + libcurl: '>=8.5.0,<9.0a0' + libcxx: '>=15' libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.1.2,<4.0a0' - url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.10.57-h1190f42_19.conda + openssl: '>=3.2.0,<4.0a0' + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.11.210-he93ac2d_10.conda hash: - md5: bd16f7f2a92c33d1767592c45588dbc7 - sha256: b176a2cf86d8c6891f5d234b2be4503492b37554241bad183b4524988c2e82e9 + md5: 7b36897c51a1a12db6b3a79a3c6e0a80 + sha256: 861ef77ea13a8ca24f115bf7aea446b38ad491977188350cb74df1423a8b7841 category: main optional: false - name: azure-core - version: 1.29.5 + version: 1.29.7 manager: conda platform: linux-64 dependencies: - python: '>=3.6' - requests: '>=2.18.4' + python: '>=3.7' + requests: '>=2.21.0' six: '>=1.11.0' - typing-extensions: '>=4.0.1' - url: https://conda.anaconda.org/conda-forge/noarch/azure-core-1.29.5-pyhd8ed1ab_0.conda + typing-extensions: '>=4.6.0' + url: https://conda.anaconda.org/conda-forge/noarch/azure-core-1.29.7-pyhd8ed1ab_0.conda hash: - md5: 6e97f7d5387626f896515442002ac920 - sha256: 3f3ec0617e825bcabb70722ace9153dfdc02895aebb2179fc20b82eb30f79ec8 + md5: 64d436079b1422e0483b0fbb326622a2 + sha256: 9a9ea330870d2655348fcb8c87a5fa421f3b6c3e347653131d7104f04daad5b8 category: main optional: false - name: azure-core - version: 1.29.5 + version: 1.29.7 manager: conda platform: osx-arm64 dependencies: - python: '>=3.6' - requests: '>=2.18.4' + python: '>=3.7' six: '>=1.11.0' - typing-extensions: '>=4.0.1' - url: https://conda.anaconda.org/conda-forge/noarch/azure-core-1.29.5-pyhd8ed1ab_0.conda + requests: '>=2.21.0' + typing-extensions: '>=4.6.0' + url: https://conda.anaconda.org/conda-forge/noarch/azure-core-1.29.7-pyhd8ed1ab_0.conda + hash: + md5: 64d436079b1422e0483b0fbb326622a2 + sha256: 9a9ea330870d2655348fcb8c87a5fa421f3b6c3e347653131d7104f04daad5b8 + category: main + optional: false +- name: azure-core-cpp + version: 1.10.3 + manager: conda + platform: linux-64 + dependencies: + libcurl: '>=8.3.0,<9.0a0' + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + openssl: '>=3.1.3,<4.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.10.3-h91d86a7_0.conda hash: - md5: 6e97f7d5387626f896515442002ac920 - sha256: 3f3ec0617e825bcabb70722ace9153dfdc02895aebb2179fc20b82eb30f79ec8 + md5: db7a05c674efad9c19f8a2ff76e4976c + sha256: e2965b736f80cc66f4a90314592569dd7d87039e791b0e6b88870d32ab3e2901 + category: main + optional: false +- name: azure-core-cpp + version: 1.11.0 + manager: conda + platform: osx-arm64 + dependencies: + libcurl: '>=8.5.0,<9.0a0' + libcxx: '>=15' + openssl: '>=3.2.0,<4.0a0' + url: https://conda.anaconda.org/conda-forge/osx-arm64/azure-core-cpp-1.11.0-he231e37_0.conda + hash: + md5: 331d81c4fe103355442a51b1e381a45b + sha256: e016272a05b81da26eb633643c1c9601528771820ebe132eac20029239461168 category: main optional: false - name: azure-datalake-store @@ -1258,6 +1290,68 @@ package: sha256: 385c2a82fd5183d2cc791747f63d81e8bda11e068ee0e29e945fe7cdfe20a817 category: main optional: false +- name: azure-storage-blobs-cpp + version: 12.10.0 + manager: conda + platform: linux-64 + dependencies: + azure-core-cpp: '>=1.10.3,<2.0a0' + azure-storage-common-cpp: '>=12.5.0,<13.0a0' + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + url: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-blobs-cpp-12.10.0-h00ab1b0_0.conda + hash: + md5: 64eec459779f01803594f5272cdde23c + sha256: ea323e7028590b1877af92b76bc3cda52db5a1d90b8321ec91b9db0689f07fb3 + category: main + optional: false +- name: azure-storage-blobs-cpp + version: 12.10.0 + manager: conda + platform: osx-arm64 + dependencies: + __osx: '>=10.9' + azure-core-cpp: '>=1.10.3,<2.0a0' + azure-storage-common-cpp: '>=12.5.0,<13.0a0' + libcxx: '>=16.0.6' + url: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-blobs-cpp-12.10.0-h6aa02a4_0.conda + hash: + md5: a2ae520245fd026fcbfac906c5350834 + sha256: a85bb29ab61207489f91e239b687bb97a2bf22a09c9b0e2cf32dd003f9a4c366 + category: main + optional: false +- name: azure-storage-common-cpp + version: 12.5.0 + manager: conda + platform: linux-64 + dependencies: + azure-core-cpp: '>=1.10.3,<2.0a0' + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + libxml2: '>=2.12.1,<3.0.0a0' + openssl: '>=3.2.0,<4.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-common-cpp-12.5.0-hb858b4b_2.conda + hash: + md5: 19f23b45d1925a9a8f701a3f6f9cce4f + sha256: 68e177ae983d63323b9bd1c1528776bb0e03d5d5aef0addba97aed4537e649a6 + category: main + optional: false +- name: azure-storage-common-cpp + version: 12.5.0 + manager: conda + platform: osx-arm64 + dependencies: + __osx: '>=10.9' + azure-core-cpp: '>=1.10.3,<2.0a0' + libcxx: '>=16.0.6' + libxml2: '>=2.12.1,<3.0.0a0' + openssl: '>=3.2.0,<4.0a0' + url: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-common-cpp-12.5.0-h607ffeb_2.conda + hash: + md5: 457b5b7cfda7d6bec46e95cbe6554bc5 + sha256: 1c020b792916289eec5b203e6cb301e80d434dc74de3ad9269ffa5b3fb9fa8c3 + category: main + optional: false - name: babel version: 2.14.0 manager: conda @@ -1314,29 +1408,29 @@ package: category: main optional: false - name: beautifulsoup4 - version: 4.12.2 + version: 4.12.3 manager: conda platform: linux-64 dependencies: python: '>=3.6' soupsieve: '>=1.2' - url: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.2-pyha770c72_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_0.conda hash: - md5: a362ff7d976217f8fa78c0f1c4f59717 - sha256: 52d3e6bcd442537e22699cd227d8fdcfd54b708eeb8ee5b4c671a6a9b9cd74da + md5: 332493000404d8411859539a5a630865 + sha256: 7b05b2d0669029326c623b9df7a29fa49d1982a9e7e31b2fea34b4c9a4a72317 category: main optional: false - name: beautifulsoup4 - version: 4.12.2 + version: 4.12.3 manager: conda platform: osx-arm64 dependencies: python: '>=3.6' soupsieve: '>=1.2' - url: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.2-pyha770c72_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_0.conda hash: - md5: a362ff7d976217f8fa78c0f1c4f59717 - sha256: 52d3e6bcd442537e22699cd227d8fdcfd54b708eeb8ee5b4c671a6a9b9cd74da + md5: 332493000404d8411859539a5a630865 + sha256: 7b05b2d0669029326c623b9df7a29fa49d1982a9e7e31b2fea34b4c9a4a72317 category: main optional: false - name: binaryornot @@ -1366,7 +1460,7 @@ package: category: main optional: false - name: black - version: 23.11.0 + version: 23.12.1 manager: conda platform: linux-64 dependencies: @@ -1379,14 +1473,14 @@ package: python_abi: 3.9.* tomli: '>=1.1.0' typing_extensions: '>=4.0.1' - url: https://conda.anaconda.org/conda-forge/linux-64/black-23.11.0-py39hf3d152e_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/black-23.12.1-py39hf3d152e_0.conda hash: - md5: 6b828d6f788dcbad32d4e2b8f89cb47c - sha256: 825751ba565514bb9c729e690f08119f3831f5cd0678afcace5c3a2a9d3a6a8c + md5: 849aa17d61fb4c71b77297d4a6d117f7 + sha256: 80de71a38893c9f47fb7fb93fdd429298a1cab9017b9fb4bc4b909c4fa9ebb03 category: main optional: false - name: black - version: 23.11.0 + version: 23.12.1 manager: conda platform: osx-arm64 dependencies: @@ -1399,10 +1493,10 @@ package: python_abi: 3.9.* tomli: '>=1.1.0' typing_extensions: '>=4.0.1' - url: https://conda.anaconda.org/conda-forge/osx-arm64/black-23.11.0-py39h2804cbe_0.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/black-23.12.1-py39h2804cbe_0.conda hash: - md5: 94746897e02fb5be3aafc99ae9862c56 - sha256: 62603be057db836bdee1b39ffc27a7c0be6b97dee5801b88d72cee00b55443d9 + md5: bb96f4fe6f8e9049370e0932f26604e1 + sha256: cfb861ec4aec0f5f99f62f8d04584239d79e085aa007a70f3201025008c79a3a category: main optional: false - name: blake3 @@ -1524,7 +1618,7 @@ package: category: main optional: false - name: bokeh - version: 3.3.2 + version: 3.3.3 manager: conda platform: linux-64 dependencies: @@ -1538,10 +1632,10 @@ package: pyyaml: '>=3.10' tornado: '>=5.1' xyzservices: '>=2021.09.1' - url: https://conda.anaconda.org/conda-forge/noarch/bokeh-3.3.2-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/bokeh-3.3.3-pyhd8ed1ab_0.conda hash: - md5: c02a7e79365121bd3bcc25f1b65f48a9 - sha256: 71c36a77422e58d66d1e1c126b09481ad05f7e80b1a86860496de566ed990e0e + md5: e6b7ca7e29811c2f72f93e8188171caa + sha256: 68a7e59b98235cef7fecced56a76056e54392d6961129c2b3b135fc5ec92a6c3 category: main optional: false - name: bokeh @@ -1564,7 +1658,7 @@ package: category: main optional: false - name: botocore - version: 1.33.1 + version: 1.33.13 manager: conda platform: linux-64 dependencies: @@ -1572,14 +1666,14 @@ package: python: '>=3.7' python-dateutil: '>=2.1,<3.0.0' urllib3: '>=1.25.4,<1.27' - url: https://conda.anaconda.org/conda-forge/noarch/botocore-1.33.1-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/botocore-1.33.13-pyhd8ed1ab_0.conda hash: - md5: b40066840291a0406bffe70e0334de62 - sha256: c9d214ae266f03797b3c06129b1a173593fc573affc09cfd02bba3bdd36c4827 + md5: d2566fd9134b6f8b8e69a07e9a1fa17e + sha256: 498d08274880ef279e9a6dd68f66b384d71321d92301fa60330712f9edceab0c category: main optional: false - name: botocore - version: 1.33.1 + version: 1.33.13 manager: conda platform: osx-arm64 dependencies: @@ -1587,10 +1681,10 @@ package: python-dateutil: '>=2.1,<3.0.0' jmespath: '>=0.7.1,<2.0.0' urllib3: '>=1.25.4,<1.27' - url: https://conda.anaconda.org/conda-forge/noarch/botocore-1.33.1-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/botocore-1.33.13-pyhd8ed1ab_0.conda hash: - md5: b40066840291a0406bffe70e0334de62 - sha256: c9d214ae266f03797b3c06129b1a173593fc573affc09cfd02bba3bdd36c4827 + md5: d2566fd9134b6f8b8e69a07e9a1fa17e + sha256: 498d08274880ef279e9a6dd68f66b384d71321d92301fa60330712f9edceab0c category: main optional: false - name: branca @@ -1620,63 +1714,63 @@ package: category: main optional: false - name: brotli - version: 1.0.9 + version: 1.1.0 manager: conda platform: linux-64 dependencies: - brotli-bin: 1.0.9 - libbrotlidec: 1.0.9 - libbrotlienc: 1.0.9 + brotli-bin: 1.1.0 + libbrotlidec: 1.1.0 + libbrotlienc: 1.1.0 libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.0.9-h166bdaf_9.conda + url: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.1.0-hd590300_1.conda hash: - md5: 4601544b4982ba1861fa9b9c607b2c06 - sha256: 2357d205931912def55df0dc53573361156b27856f9bf359d464da162812ec1f + md5: f27a24d46e3ea7b70a1f98e50c62508f + sha256: f2d918d351edd06c55a6c2d84b488fe392f85ea018ff227daac07db22b408f6b category: main optional: false - name: brotli - version: 1.0.9 + version: 1.1.0 manager: conda platform: osx-arm64 dependencies: - brotli-bin: 1.0.9 - libbrotlidec: 1.0.9 - libbrotlienc: 1.0.9 - url: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-1.0.9-h1a8c8d9_9.conda + brotli-bin: 1.1.0 + libbrotlidec: 1.1.0 + libbrotlienc: 1.1.0 + url: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-1.1.0-hb547adb_1.conda hash: - md5: 856692dff5e450c269465e3256e1277b - sha256: 92c3062dd7e593a502c2f8d12e9ccca7ae1ef0363eb0b12faa47e1bb4fae42c7 + md5: a33aa58d448cbc054f887e39dd1dfaea + sha256: 62d1587deab752fcee07adc371eb20fcadc09f72c0c85399c22b637ca858020f category: main optional: false - name: brotli-bin - version: 1.0.9 + version: 1.1.0 manager: conda platform: linux-64 dependencies: - libbrotlidec: 1.0.9 - libbrotlienc: 1.0.9 + libbrotlidec: 1.1.0 + libbrotlienc: 1.1.0 libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.0.9-h166bdaf_9.conda + url: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.1.0-hd590300_1.conda hash: - md5: d47dee1856d9cb955b8076eeff304a5b - sha256: 1c128f136a59ee2fa47d7fbd9b6fc8afa8460d340e4ae0e6f5419ebbd7539a10 + md5: 39f910d205726805a958da408ca194ba + sha256: a641abfbaec54f454c8434061fffa7fdaa9c695e8a5a400ed96b4f07c0c00677 category: main optional: false - name: brotli-bin - version: 1.0.9 + version: 1.1.0 manager: conda platform: osx-arm64 dependencies: - libbrotlidec: 1.0.9 - libbrotlienc: 1.0.9 - url: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-bin-1.0.9-h1a8c8d9_9.conda + libbrotlidec: 1.1.0 + libbrotlienc: 1.1.0 + url: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-bin-1.1.0-hb547adb_1.conda hash: - md5: 19ad562adca69541e67613022b41df5b - sha256: 4731892fb855f5993129515c5b63b36d049cc64e70611c6afa8f64aae5f51323 + md5: 990d04f8c017b1b77103f9a7730a5f12 + sha256: 8fbfc2834606292016f2faffac67deea4c5cdbc21a61169f0b355e1600105a24 category: main optional: false - name: brotli-python - version: 1.0.9 + version: 1.1.0 manager: conda platform: linux-64 dependencies: @@ -1684,24 +1778,24 @@ package: libstdcxx-ng: '>=12' python: '>=3.9,<3.10.0a0' python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.0.9-py39h5a03fae_9.conda + url: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py39h3d6467e_1.conda hash: - md5: d1601752c6f47af7bedf838be3d8ca6b - sha256: 18f296067e5f3f9fd9ea55ec89a0d91149455a5e5d1ddd26c53fb7fb2806dab0 + md5: c48418c8b35f1d59ae9ae1174812b40a + sha256: e22afb19527a93da24c1108c3e91532811f9c3df64a9473989faf332c98af082 category: main optional: false - name: brotli-python - version: 1.0.9 + version: 1.1.0 manager: conda platform: osx-arm64 dependencies: - libcxx: '>=14.0.6' + libcxx: '>=15.0.7' python: '>=3.9,<3.10.0a0' python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.0.9-py39h23fbdae_9.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.1.0-py39hb198ff7_1.conda hash: - md5: ef4c58e8f1811e0730accf3f425e2e5f - sha256: 217f4ef7481ee63935768668496426d16773b3933492c026ad2922a950a81c41 + md5: ddf01dd9a743bd3ec9cf829d18bb8002 + sha256: 014639c1f57be1dadf7b5c17e53df562e7e6bab71d3435fdd5bd56213dece9df category: main optional: false - name: bzip2 @@ -1728,26 +1822,26 @@ package: category: main optional: false - name: c-ares - version: 1.23.0 + version: 1.25.0 manager: conda platform: linux-64 dependencies: libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.23.0-hd590300_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.25.0-hd590300_0.conda hash: - md5: d459949bc10f64dee1595c176c2e6291 - sha256: 6b0eee827bade11c2964a05867499a50ad2a9d1b14dfe18fb867a3bc9357f56f + md5: 89e40af02dd3a0846c0c1131c5126706 + sha256: c4bbdafd6791583e3c77e8ed0e1df9e0021d542249c3543de3d72788f5c8a0c4 category: main optional: false - name: c-ares - version: 1.23.0 + version: 1.25.0 manager: conda platform: osx-arm64 dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.23.0-h93a5062_0.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.25.0-h93a5062_0.conda hash: - md5: b187f2b99e52905042d661f824666964 - sha256: de5385280dcad805428068adb1f4a7eb1e6ec8987e2f25c4ff5766e3fec3b4a2 + md5: 0a40466cb14b485738f1910340775f71 + sha256: 2a3df1920cfc493592c311db87138442475849ff11a14eb1dbf12caa80d8077b category: main optional: false - name: ca-certificates @@ -2207,29 +2301,29 @@ package: category: main optional: false - name: comm - version: 0.1.4 + version: 0.2.1 manager: conda platform: linux-64 dependencies: python: '>=3.6' traitlets: '>=5.3' - url: https://conda.anaconda.org/conda-forge/noarch/comm-0.1.4-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.1-pyhd8ed1ab_0.conda hash: - md5: c8eaca39e2b6abae1fc96acc929ae939 - sha256: 11057745946a95ee7cc4c98900a60c7362266a4cb28bc97d96cd88e3056eb701 + md5: f4385072f4909bc974f6675a36e76796 + sha256: bd90a200e6f7092a89f02c4800729a4a6d2b2de49d70a9706aeb083a635308c1 category: main optional: false - name: comm - version: 0.1.4 + version: 0.2.1 manager: conda platform: osx-arm64 dependencies: python: '>=3.6' traitlets: '>=5.3' - url: https://conda.anaconda.org/conda-forge/noarch/comm-0.1.4-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.1-pyhd8ed1ab_0.conda hash: - md5: c8eaca39e2b6abae1fc96acc929ae939 - sha256: 11057745946a95ee7cc4c98900a60c7362266a4cb28bc97d96cd88e3056eb701 + md5: f4385072f4909bc974f6675a36e76796 + sha256: bd90a200e6f7092a89f02c4800729a4a6d2b2de49d70a9706aeb083a635308c1 category: main optional: false - name: commonmark @@ -2467,14 +2561,14 @@ package: category: main optional: false - name: dask - version: 2023.12.0 + version: 2024.1.0 manager: conda platform: linux-64 dependencies: bokeh: '>=2.4.2,!=3.0.*' cytoolz: '>=0.11.0' - dask-core: '>=2023.12.0,<2023.12.1.0a0' - distributed: '>=2023.12.0,<2023.12.1.0a0' + dask-core: '>=2024.1.0,<2024.1.1.0a0' + distributed: '>=2024.1.0,<2024.1.1.0a0' jinja2: '>=2.10.3' lz4: '>=4.3.2' numpy: '>=1.21' @@ -2482,10 +2576,10 @@ package: pyarrow: '>=7.0' pyarrow-hotfix: '' python: '>=3.9' - url: https://conda.anaconda.org/conda-forge/noarch/dask-2023.12.0-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/dask-2024.1.0-pyhd8ed1ab_0.conda hash: - md5: 5cfc00e93b71fba459bede86419d0f01 - sha256: c9725f37d8b05b2b1407ff00b17c9bcee39ed5a33f33f34d771e5bbf4762e737 + md5: 972955a551de85754e66bb61bd628232 + sha256: b6f6cfbd68026633b3b65ce817ac7f92f1defc2fa6aed9d4a2d70f2224d06d0a category: main optional: false - name: dask @@ -2509,7 +2603,7 @@ package: category: main optional: false - name: dask-core - version: 2023.12.0 + version: 2024.1.0 manager: conda platform: linux-64 dependencies: @@ -2522,10 +2616,10 @@ package: python: '>=3.9' pyyaml: '>=5.3.1' toolz: '>=0.10.0' - url: https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.12.0-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/dask-core-2024.1.0-pyhd8ed1ab_0.conda hash: - md5: 95eae0785aed72998493140dc0115382 - sha256: e366163aa7325d14ca38ca72ca4672eeb4b7a7453573c47cfa90d0db60136b48 + md5: cab4cec272dc1e30086f7d32faa4f130 + sha256: a5d2dd0ed941e2c0067b3b6c4d594838f70c59ed4450e7344049bde9a3c2b654 category: main optional: false - name: dask-core @@ -2620,14 +2714,14 @@ package: category: main optional: false - name: datasets - version: 2.15.0 + version: 2.16.1 manager: conda platform: linux-64 dependencies: aiohttp: '' dill: '>=0.3.0,<0.3.8' fsspec: '>=2023.1.0,<=2023.10.0' - huggingface_hub: '>=0.18.0' + huggingface_hub: '>=0.19.4' importlib-metadata: '' multiprocess: '' numpy: '>=1.17' @@ -2640,14 +2734,14 @@ package: pyyaml: '>=5.1' requests: '>=2.19.0' tqdm: '>=4.62.1' - url: https://conda.anaconda.org/conda-forge/noarch/datasets-2.15.0-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/datasets-2.16.1-pyhd8ed1ab_0.conda hash: - md5: 12c03aa3ead93ebb57139efad4729a10 - sha256: 3a29aec8a57f756df148c337f83df5cd53e2df822bd4f1265ad0fd502fdf59d4 + md5: 99516e8430074c50911e058326eaa450 + sha256: ce835aeba2a2e987d6c5da996cf60d5d82a583ea903c410640382b45a00bbe43 category: main optional: false - name: datasets - version: 2.15.0 + version: 2.16.1 manager: conda platform: osx-arm64 dependencies: @@ -2660,17 +2754,17 @@ package: pyarrow-hotfix: '' pyyaml: '>=5.1' numpy: '>=1.17' - requests: '>=2.19.0' pyarrow: '>=8.0.0' + requests: '>=2.19.0' python: '>=3.8.0' tqdm: '>=4.62.1' dill: '>=0.3.0,<0.3.8' fsspec: '>=2023.1.0,<=2023.10.0' - huggingface_hub: '>=0.18.0' - url: https://conda.anaconda.org/conda-forge/noarch/datasets-2.15.0-pyhd8ed1ab_0.conda + huggingface_hub: '>=0.19.4' + url: https://conda.anaconda.org/conda-forge/noarch/datasets-2.16.1-pyhd8ed1ab_0.conda hash: - md5: 12c03aa3ead93ebb57139efad4729a10 - sha256: 3a29aec8a57f756df148c337f83df5cd53e2df822bd4f1265ad0fd502fdf59d4 + md5: 99516e8430074c50911e058326eaa450 + sha256: ce835aeba2a2e987d6c5da996cf60d5d82a583ea903c410640382b45a00bbe43 category: main optional: false - name: db-dtypes @@ -2869,14 +2963,14 @@ package: category: main optional: false - name: distributed - version: 2023.12.0 + version: 2024.1.0 manager: conda platform: linux-64 dependencies: click: '>=8.0' cloudpickle: '>=1.5.0' cytoolz: '>=0.10.1' - dask-core: '>=2023.12.0,<2023.12.1.0a0' + dask-core: '>=2024.1.0,<2024.1.1.0a0' jinja2: '>=2.10.3' locket: '>=1.0.0' msgpack-python: '>=1.0.0' @@ -2890,10 +2984,10 @@ package: tornado: '>=6.0.4' urllib3: '>=1.24.3' zict: '>=3.0.0' - url: https://conda.anaconda.org/conda-forge/noarch/distributed-2023.12.0-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/distributed-2024.1.0-pyhd8ed1ab_0.conda hash: - md5: 22d620e1079e99c34578cb0c615d2789 - sha256: 7f16084ca5cbc66c4673d1eb032bd49f03a96a846656a18d38fd70fa8f2f16cc + md5: 6c7822204c9e438b2f298e82127f05ec + sha256: 3a376ff500035e602c8fcfb1624aee75ccf12ec89409e620576d97194ff87590 category: main optional: false - name: distributed @@ -3040,10 +3134,10 @@ package: platform: linux-64 dependencies: python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.0-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.0-pyhd8ed1ab_2.conda hash: - md5: f6c211fee3c98229652b60a9a42ef363 - sha256: cf83dcaf9006015c8ccab3fc6770f478464a66a8769e1763ca5d7dff09d11d08 + md5: 8d652ea2ee8eaee02ed8dc820bc794aa + sha256: a6ae416383bda0e3ed14eaa187c653e22bec94ff2aa3b56970cdf0032761e80d category: main optional: false - name: exceptiongroup @@ -3052,10 +3146,10 @@ package: platform: osx-arm64 dependencies: python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.0-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.0-pyhd8ed1ab_2.conda hash: - md5: f6c211fee3c98229652b60a9a42ef363 - sha256: cf83dcaf9006015c8ccab3fc6770f478464a66a8769e1763ca5d7dff09d11d08 + md5: 8d652ea2ee8eaee02ed8dc820bc794aa + sha256: a6ae416383bda0e3ed14eaa187c653e22bec94ff2aa3b56970cdf0032761e80d category: main optional: false - name: executing @@ -3108,7 +3202,7 @@ package: category: main optional: false - name: fastavro - version: 1.9.1 + version: 1.9.3 manager: conda platform: linux-64 dependencies: @@ -3116,24 +3210,24 @@ package: python: '>=3.9,<3.10.0a0' python_abi: 3.9.* pytz: '' - url: https://conda.anaconda.org/conda-forge/linux-64/fastavro-1.9.1-py39hd1e30aa_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/fastavro-1.9.3-py39hd1e30aa_0.conda hash: - md5: 6222cc87faa7fe48c2cf35920dd7ff28 - sha256: d8ce574d2ba15706a44966e0e5aafdcf25bdaace3f89435590f0b6ee1efe1a91 + md5: c3ace3a23beb653d3d3575fef56bf009 + sha256: 0c133b55206a64f6ea89105d7d946554ad27f967f7ad3f967d74f732a0c5793f category: main optional: false - name: fastavro - version: 1.9.1 + version: 1.9.3 manager: conda platform: osx-arm64 dependencies: python: '>=3.9,<3.10.0a0' python_abi: 3.9.* pytz: '' - url: https://conda.anaconda.org/conda-forge/osx-arm64/fastavro-1.9.1-py39h17cfd9d_0.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/fastavro-1.9.3-py39h17cfd9d_0.conda hash: - md5: a435b41193850bbc3e8e49943b9140e8 - sha256: 1b4944683f3e2dd349c1620406eb1086342efc838d923161ea58a601694ce227 + md5: 8579c8c7faf69742670ace1605dd8d27 + sha256: a6c73461740cbfcdb62b7cdeb740e2821cb515132e5fda0a8054ffba325099ec category: main optional: false - name: filelock @@ -3172,7 +3266,7 @@ package: gdal: '' importlib-metadata: '' libgcc-ng: '>=12' - libgdal: '>=3.8.0,<3.9.0a0' + libgdal: '>=3.8.2,<3.9.0a0' libstdcxx-ng: '>=12' numpy: '>=1.22.4,<2.0a0' python: '>=3.9,<3.10.0a0' @@ -3180,10 +3274,10 @@ package: setuptools: '' shapely: '' six: '' - url: https://conda.anaconda.org/conda-forge/linux-64/fiona-1.9.5-py39hcfcd403_2.conda + url: https://conda.anaconda.org/conda-forge/linux-64/fiona-1.9.5-py39hcfcd403_3.conda hash: - md5: 6837bf6513255f203669a84a6431ec81 - sha256: 35c1c09a8523c62e084e57fff942a8ca3a9e273aced70b6b1f51250695d0a317 + md5: 4cbedb0d1f0add97a71a9482c15a8122 + sha256: fa3e5ff7c316a94bc8b3f6ebf61c28421a0c339a4318af1b754bfe5b05144508 category: main optional: false - name: fiona @@ -3191,25 +3285,24 @@ package: manager: conda platform: osx-arm64 dependencies: - __osx: '>=10.9' attrs: '>=19.2.0' click: '>=8.0,<9.dev0' click-plugins: '>=1.0' cligj: '>=0.5' gdal: '' importlib-metadata: '' - libcxx: '>=16.0.6' - libgdal: '>=3.8.0,<3.9.0a0' + libcxx: '>=15' + libgdal: '>=3.8.2,<3.9.0a0' numpy: '>=1.22.4,<2.0a0' python: '>=3.9,<3.10.0a0' python_abi: 3.9.* setuptools: '' shapely: '' six: '' - url: https://conda.anaconda.org/conda-forge/osx-arm64/fiona-1.9.5-py39hd992b33_2.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/fiona-1.9.5-py39h97e6c39_3.conda hash: - md5: 691646699137f0496358cdebfdb8baab - sha256: bc6c7a7bebda8fb5b0a6abf08b8d8914c8c85392f346e329e144ce30708ef205 + md5: aa93d96a2e30536aa523a3fbd2c0225f + sha256: 7e9223d6d2bfb98e94e3415ad9f7a77a7d187e416a3158f354a5f77c0cf24833 category: main optional: false - name: flask @@ -3363,8 +3456,8 @@ package: joblib: '' rich: '' gcsfs: '' - grpcio: '' jsonpickle: '' + grpcio: '' adlfs: '' rich-click: '' grpcio-status: '' @@ -3608,7 +3701,7 @@ package: category: main optional: false - name: fonttools - version: 4.46.0 + version: 4.47.2 manager: conda platform: linux-64 dependencies: @@ -3618,14 +3711,14 @@ package: python: '>=3.9,<3.10.0a0' python_abi: 3.9.* unicodedata2: '>=14.0.0' - url: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.46.0-py39hd1e30aa_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.47.2-py39hd1e30aa_0.conda hash: - md5: 9b58e5973dd3d786253f4ca9534b1aba - sha256: e0d0b4039efce99870b8bd07a5a1bb7700b75a570ab19a38862336218ba66b94 + md5: 4e2b802b69be81944fdcd71018b74226 + sha256: f0834381dcabbaa5df8124bee63c6e26c642000a6f3fe80f521b3c95b1342f27 category: main optional: false - name: fonttools - version: 4.46.0 + version: 4.47.2 manager: conda platform: osx-arm64 dependencies: @@ -3634,10 +3727,10 @@ package: python: '>=3.9,<3.10.0a0' python_abi: 3.9.* unicodedata2: '>=14.0.0' - url: https://conda.anaconda.org/conda-forge/osx-arm64/fonttools-4.46.0-py39h17cfd9d_0.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/fonttools-4.47.2-py39h17cfd9d_0.conda hash: - md5: 92cd73c1c1b85f06797dfde1d79a937b - sha256: 1e16d1a54a16af7ddd5a16f7988bf2d371fb3fd78bd95ab7937eff68e1907d74 + md5: cb2b258b7d021ac1e9692e16909a435f + sha256: 3ad5d03952cb87c70d008ac5e4ee15aecd3f66a8fda906a346419ff275826bb9 category: main optional: false - name: fqdn @@ -3746,30 +3839,30 @@ package: category: main optional: false - name: frozendict - version: 2.3.10 + version: 2.4.0 manager: conda platform: linux-64 dependencies: libgcc-ng: '>=12' python: '>=3.9,<3.10.0a0' python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/linux-64/frozendict-2.3.10-py39hd1e30aa_3.conda + url: https://conda.anaconda.org/conda-forge/linux-64/frozendict-2.4.0-py39hd1e30aa_0.conda hash: - md5: 252562a446a331682c5101ee16fd8988 - sha256: 05b9f884d59b0978ef426c3a5e8791b28478e394be3ad52ac25bbfe0474ac6db + md5: 52bd06467f60645e2cf293bd00f957cd + sha256: 40e9730732769b8ef0797f025f108d998d8d2d4edb0c709da9e6dd65475064a6 category: main optional: false - name: frozendict - version: 2.3.10 + version: 2.4.0 manager: conda platform: osx-arm64 dependencies: python: '>=3.9,<3.10.0a0' python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/osx-arm64/frozendict-2.3.10-py39h17cfd9d_3.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/frozendict-2.4.0-py39h17cfd9d_0.conda hash: - md5: 6d5a1b15362833f5b308f56916d517ba - sha256: 1022b48e9380276276efcf8718669e29c96ec0f291df5af01fe7954a6ed82673 + md5: 30e673c8dfce564d6c2222ed0395ef8b + sha256: dc3079fb53f566c74661a03950d631950784fa18321c0efeb04037aeeb63ba15 category: main optional: false - name: frozenlist @@ -3851,8 +3944,8 @@ package: sphinx-inline-tabs: '' sphinx-basic-ng: '' python: '>=3.6' - sphinx: '>=4' pygments: '>=2.7' + sphinx: '>=4' url: https://conda.anaconda.org/conda-forge/noarch/furo-2023.5.20-pyhd8ed1ab_0.conda hash: md5: 786e474a83de249aecf767102d7fd87d @@ -3946,43 +4039,42 @@ package: category: main optional: false - name: gdal - version: 3.8.1 + version: 3.8.3 manager: conda platform: linux-64 dependencies: hdf5: '>=1.14.3,<1.14.4.0a0' libgcc-ng: '>=12' - libgdal: 3.8.1 + libgdal: 3.8.3 libstdcxx-ng: '>=12' - libxml2: '>=2.12.2,<2.13.0a0' + libxml2: '>=2.12.3,<3.0.0a0' numpy: '>=1.22.4,<2.0a0' openssl: '>=3.2.0,<4.0a0' python: '>=3.9,<3.10.0a0' python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/linux-64/gdal-3.8.1-py39h14df8fe_4.conda + url: https://conda.anaconda.org/conda-forge/linux-64/gdal-3.8.3-py39h14df8fe_0.conda hash: - md5: 9c0731012ed411761cc4ecede9c4d10f - sha256: e8307f25b414df4c6e2de46b2ed8b72fed934e953c219b8b7aa115f103d3a5d9 + md5: 9f556acdeaf436764dfc23a43de35864 + sha256: 449306555264d3bdfd3af16f3ad48541da5755ddeb1b9694b476830f05ca20aa category: main optional: false - name: gdal - version: 3.8.1 + version: 3.8.3 manager: conda platform: osx-arm64 dependencies: - __osx: '>=10.9' hdf5: '>=1.14.3,<1.14.4.0a0' - libcxx: '>=16.0.6' - libgdal: 3.8.1 - libxml2: '>=2.12.2,<2.13.0a0' + libcxx: '>=15' + libgdal: 3.8.3 + libxml2: '>=2.12.3,<3.0.0a0' numpy: '>=1.22.4,<2.0a0' openssl: '>=3.2.0,<4.0a0' python: '>=3.9,<3.10.0a0' python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/osx-arm64/gdal-3.8.1-py39h6f219a9_4.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/gdal-3.8.3-py39h46f8cc7_0.conda hash: - md5: 0f6dee62709305d9bd210136c4e0a99c - sha256: 140796728cee854e5b95f56a96c05e5c9c92b31d1abd5939ac05fd5ec17a54b9 + md5: 3b0371ffadf43f722814a003a6530b6d + sha256: 948a26e95fec4eb6f4e473c1c38ea8ea77b0a5b2c25faabfe095d9973088abcb category: main optional: false - name: gdk-pixbuf @@ -4019,22 +4111,22 @@ package: category: main optional: false - name: geopandas - version: 0.14.1 + version: 0.14.2 manager: conda platform: linux-64 dependencies: fiona: '>=1.8.21' folium: '' - geopandas-base: 0.14.1 + geopandas-base: 0.14.2 mapclassify: '>=2.4.0' matplotlib-base: '' python: '>=3.9' rtree: '' xyzservices: '' - url: https://conda.anaconda.org/conda-forge/noarch/geopandas-0.14.1-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/geopandas-0.14.2-pyhd8ed1ab_0.conda hash: - md5: 6ce5f89fb1e2aa7e04d12c0008b3a745 - sha256: f3563ad6f1a55587c097337ece863e583c796c9a9df3ecb396bbfeec4ec309fb + md5: 4f873f6e48ae63d573c3e4937185027e + sha256: 5d0e42a7dbc4bec7fa716c55d5ece0f9a90fccc905bae7d619f46a83aa7efccc category: main optional: false - name: geopandas @@ -4057,7 +4149,7 @@ package: category: main optional: false - name: geopandas-base - version: 0.14.1 + version: 0.14.2 manager: conda platform: linux-64 dependencies: @@ -4066,10 +4158,10 @@ package: pyproj: '>=3.3.0' python: '>=3.9' shapely: '>=1.8.0' - url: https://conda.anaconda.org/conda-forge/noarch/geopandas-base-0.14.1-pyha770c72_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/geopandas-base-0.14.2-pyha770c72_0.conda hash: - md5: d65c6f458bfdaa181f388d91e858ea67 - sha256: c813004bb84e50de19f599b188719e40106c858c7da22e504b29ce66e5043361 + md5: e825cfead1f4223911d9538f6c575c90 + sha256: d896b02d8107a3c61cacd8e2a56a11b931710aba59cf3baa748837ef48404252 category: main optional: false - name: geopandas-base @@ -4249,31 +4341,31 @@ package: category: main optional: false - name: gitpython - version: 3.1.40 + version: 3.1.41 manager: conda platform: linux-64 dependencies: gitdb: '>=4.0.1,<5' python: '>=3.7' typing_extensions: '>=3.7.4.3' - url: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.40-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.41-pyhd8ed1ab_0.conda hash: - md5: 6bf74c3b7c13079a91d4bd3da51cefcf - sha256: 6b85809ffbfe5c1887b674bf0492cc4dd1ac8a25f4d9fa20ef404be92186259b + md5: 84874a90c312088f7b5e63402fc44a58 + sha256: cf3c45156feec1fe8adfd3552ed70f4218e9771643cca8dd2673bca9dea04c9c category: main optional: false - name: gitpython - version: 3.1.40 + version: 3.1.41 manager: conda platform: osx-arm64 dependencies: python: '>=3.7' typing_extensions: '>=3.7.4.3' gitdb: '>=4.0.1,<5' - url: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.40-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.41-pyhd8ed1ab_0.conda hash: - md5: 6bf74c3b7c13079a91d4bd3da51cefcf - sha256: 6b85809ffbfe5c1887b674bf0492cc4dd1ac8a25f4d9fa20ef404be92186259b + md5: 84874a90c312088f7b5e63402fc44a58 + sha256: cf3c45156feec1fe8adfd3552ed70f4218e9771643cca8dd2673bca9dea04c9c category: main optional: false - name: glog @@ -4423,7 +4515,7 @@ package: category: main optional: false - name: google-auth - version: 2.25.2 + version: 2.26.2 manager: conda platform: linux-64 dependencies: @@ -4436,14 +4528,14 @@ package: pyu2f: '>=0.1.5' requests: '>=2.20.0,<3.0.0' rsa: '>=3.1.4,<5' - url: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.25.2-pyhca7485f_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.26.2-pyhca7485f_0.conda hash: - md5: ef008fe13beb99a47cbe5a7a68a1f0ea - sha256: 928960978bfdb77a912db60659ec30ec7e04d1ec12ba12f38ac61134158320d0 + md5: 64a730f6101826d9d5c6e91f5e87f379 + sha256: ea337fd708b140c551bca4342c2fad0cf542f2862ecf38e77bc4a9237dd3c394 category: main optional: false - name: google-auth - version: 2.25.2 + version: 2.26.2 manager: conda platform: osx-arm64 dependencies: @@ -4456,14 +4548,14 @@ package: cachetools: '>=2.0.0,<6.0' aiohttp: '>=3.6.2,<4.0.0' cryptography: '>=38.0.3' - url: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.25.2-pyhca7485f_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.26.2-pyhca7485f_0.conda hash: - md5: ef008fe13beb99a47cbe5a7a68a1f0ea - sha256: 928960978bfdb77a912db60659ec30ec7e04d1ec12ba12f38ac61134158320d0 + md5: 64a730f6101826d9d5c6e91f5e87f379 + sha256: ea337fd708b140c551bca4342c2fad0cf542f2862ecf38e77bc4a9237dd3c394 category: main optional: false - name: google-auth-oauthlib - version: 1.0.0 + version: 1.2.0 manager: conda platform: linux-64 dependencies: @@ -4471,14 +4563,14 @@ package: google-auth: '>=2.15.0' python: '>=3.6' requests-oauthlib: '>=0.7.0' - url: https://conda.anaconda.org/conda-forge/noarch/google-auth-oauthlib-1.0.0-pyhd8ed1ab_1.conda + url: https://conda.anaconda.org/conda-forge/noarch/google-auth-oauthlib-1.2.0-pyhd8ed1ab_0.conda hash: - md5: 569e62e95b01b53e4ec7d9abe83b7385 - sha256: f89613643658a51a1ac0fb7c7950526fadc2a6ce1ae13755d786e14cfce1633c + md5: 2057f12885a73b4d621c075423cec969 + sha256: 39d031780d9ac2da430ead078a40ff67db3ad57e24ab1e3c68b4e0f2b48a2311 category: main optional: false - name: google-auth-oauthlib - version: 1.0.0 + version: 1.2.0 manager: conda platform: osx-arm64 dependencies: @@ -4486,20 +4578,20 @@ package: requests-oauthlib: '>=0.7.0' click: '>=6.0.0' google-auth: '>=2.15.0' - url: https://conda.anaconda.org/conda-forge/noarch/google-auth-oauthlib-1.0.0-pyhd8ed1ab_1.conda + url: https://conda.anaconda.org/conda-forge/noarch/google-auth-oauthlib-1.2.0-pyhd8ed1ab_0.conda hash: - md5: 569e62e95b01b53e4ec7d9abe83b7385 - sha256: f89613643658a51a1ac0fb7c7950526fadc2a6ce1ae13755d786e14cfce1633c + md5: 2057f12885a73b4d621c075423cec969 + sha256: 39d031780d9ac2da430ead078a40ff67db3ad57e24ab1e3c68b4e0f2b48a2311 category: main optional: false - name: google-cloud-bigquery - version: 3.14.1 + version: 3.16.0 manager: conda platform: linux-64 dependencies: db-dtypes: '>=0.3.0,<2.0.0dev' geopandas: '>=0.9.0,<1.0dev' - google-cloud-bigquery-core: 3.14.1 + google-cloud-bigquery-core: 3.16.0 google-cloud-bigquery-storage: '>=2.6.0,<3.0.0dev' grpcio: '>=1.49.1,<2.0dev' ipykernel: '>=6.0.0' @@ -4512,14 +4604,14 @@ package: python: '>=3.8' shapely: '>=1.8.4,<3.0.0dev' tqdm: '>=4.7.4,<=5.0.0dev' - url: https://conda.anaconda.org/conda-forge/noarch/google-cloud-bigquery-3.14.1-pyhd8ed1ab_1.conda + url: https://conda.anaconda.org/conda-forge/noarch/google-cloud-bigquery-3.16.0-pyhd8ed1ab_0.conda hash: - md5: c6754ea972dfcf518b5abb4f8aefc8b9 - sha256: 63947e69bacff4029cd7c2d5e2c5c2c0e03f3c1bb0ccf2fa658d111a78317eb9 + md5: 615a7e8d130b31901c26483865aa7280 + sha256: a958f3944e06c55d5ddeaabfc8aa300c9dc6af21a5d4ba2a79702a1ed06b7bd9 category: main optional: false - name: google-cloud-bigquery - version: 3.14.1 + version: 3.16.0 manager: conda platform: osx-arm64 dependencies: @@ -4537,15 +4629,15 @@ package: ipython: '>=7.23.1,!=8.1.0' google-cloud-bigquery-storage: '>=2.6.0,<3.0.0dev' shapely: '>=1.8.4,<3.0.0dev' - google-cloud-bigquery-core: 3.14.1 - url: https://conda.anaconda.org/conda-forge/noarch/google-cloud-bigquery-3.14.1-pyhd8ed1ab_1.conda + google-cloud-bigquery-core: 3.16.0 + url: https://conda.anaconda.org/conda-forge/noarch/google-cloud-bigquery-3.16.0-pyhd8ed1ab_0.conda hash: - md5: c6754ea972dfcf518b5abb4f8aefc8b9 - sha256: 63947e69bacff4029cd7c2d5e2c5c2c0e03f3c1bb0ccf2fa658d111a78317eb9 + md5: 615a7e8d130b31901c26483865aa7280 + sha256: a958f3944e06c55d5ddeaabfc8aa300c9dc6af21a5d4ba2a79702a1ed06b7bd9 category: main optional: false - name: google-cloud-bigquery-core - version: 3.14.1 + version: 3.16.0 manager: conda platform: linux-64 dependencies: @@ -4556,14 +4648,14 @@ package: python: '>=3.8' python-dateutil: '>=2.7.2,<3.0dev' requests: '>=2.21.0,<3.0.0dev' - url: https://conda.anaconda.org/conda-forge/noarch/google-cloud-bigquery-core-3.14.1-pyhd8ed1ab_1.conda + url: https://conda.anaconda.org/conda-forge/noarch/google-cloud-bigquery-core-3.16.0-pyhd8ed1ab_0.conda hash: - md5: 12104b8db939e54acdfbcb9092e58ba7 - sha256: 3704662aac3005f4c7c92e8415c0927fdf69da355ab0bbe24640e55e3b413368 + md5: 3022f10d34999c3a0b03ce8da812e750 + sha256: 8b941269eaf2caf0b1f04312be2b36b48dc2250bf718b40f83bf933463a8677d category: main optional: false - name: google-cloud-bigquery-core - version: 3.14.1 + version: 3.16.0 manager: conda platform: osx-arm64 dependencies: @@ -4574,30 +4666,30 @@ package: requests: '>=2.21.0,<3.0.0dev' packaging: '>=20.0.0' google-cloud-core: '>=1.6.0,<3.0.0dev' - url: https://conda.anaconda.org/conda-forge/noarch/google-cloud-bigquery-core-3.14.1-pyhd8ed1ab_1.conda + url: https://conda.anaconda.org/conda-forge/noarch/google-cloud-bigquery-core-3.16.0-pyhd8ed1ab_0.conda hash: - md5: 12104b8db939e54acdfbcb9092e58ba7 - sha256: 3704662aac3005f4c7c92e8415c0927fdf69da355ab0bbe24640e55e3b413368 + md5: 3022f10d34999c3a0b03ce8da812e750 + sha256: 8b941269eaf2caf0b1f04312be2b36b48dc2250bf718b40f83bf933463a8677d category: main optional: false - name: google-cloud-bigquery-storage - version: 2.22.0 + version: 2.24.0 manager: conda platform: linux-64 dependencies: fastavro: '>=0.21.2' - google-cloud-bigquery-storage-core: 2.22.0.* + google-cloud-bigquery-storage-core: 2.24.0.* pandas: '>=0.21.1' pyarrow: '>=0.15.0' python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/google-cloud-bigquery-storage-2.22.0-pyh1a96a4e_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/google-cloud-bigquery-storage-2.24.0-pyhca7485f_0.conda hash: - md5: 14a5213a076993679239aa0f07334ecd - sha256: b8777b626962e1912f8592e093d318699f7e42752ef90e85f68bc2fab01f7c2c + md5: 86a0630f1f8b18915d909503f17ca1e0 + sha256: 63935dd8bdc4da2d8164ada820492b7ec9beba3197b5cb9ab34495d8fd56b0cd category: main optional: false - name: google-cloud-bigquery-storage - version: 2.22.0 + version: 2.24.0 manager: conda platform: osx-arm64 dependencies: @@ -4605,15 +4697,15 @@ package: pyarrow: '>=0.15.0' fastavro: '>=0.21.2' pandas: '>=0.21.1' - google-cloud-bigquery-storage-core: 2.22.0.* - url: https://conda.anaconda.org/conda-forge/noarch/google-cloud-bigquery-storage-2.22.0-pyh1a96a4e_0.conda + google-cloud-bigquery-storage-core: 2.24.0.* + url: https://conda.anaconda.org/conda-forge/noarch/google-cloud-bigquery-storage-2.24.0-pyhca7485f_0.conda hash: - md5: 14a5213a076993679239aa0f07334ecd - sha256: b8777b626962e1912f8592e093d318699f7e42752ef90e85f68bc2fab01f7c2c + md5: 86a0630f1f8b18915d909503f17ca1e0 + sha256: 63935dd8bdc4da2d8164ada820492b7ec9beba3197b5cb9ab34495d8fd56b0cd category: main optional: false - name: google-cloud-bigquery-storage-core - version: 2.22.0 + version: 2.24.0 manager: conda platform: linux-64 dependencies: @@ -4621,14 +4713,14 @@ package: proto-plus: '>=1.22.0,<2.0.0dev' protobuf: '>=3.19.5,<5.0.0dev,!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5' python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/google-cloud-bigquery-storage-core-2.22.0-pyh1a96a4e_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/google-cloud-bigquery-storage-core-2.24.0-pyhca7485f_0.conda hash: - md5: 0869ea717d694cac0fbcd494a6f987c9 - sha256: 8af06f60b2c47cf882755a295d1a8168be978d712abba491d003bbf1a20ca62f + md5: 1d1a6f7938f1a29044e676d112c0b424 + sha256: 60994f98e7386bd5836dd04b74112d30286df2bb15e8edf2f2d460dd37821860 category: main optional: false - name: google-cloud-bigquery-storage-core - version: 2.22.0 + version: 2.24.0 manager: conda platform: osx-arm64 dependencies: @@ -4636,10 +4728,10 @@ package: proto-plus: '>=1.22.0,<2.0.0dev' protobuf: '>=3.19.5,<5.0.0dev,!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5' google-api-core-grpc: '>=1.34.0,<3.0.0dev,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*' - url: https://conda.anaconda.org/conda-forge/noarch/google-cloud-bigquery-storage-core-2.22.0-pyh1a96a4e_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/google-cloud-bigquery-storage-core-2.24.0-pyhca7485f_0.conda hash: - md5: 0869ea717d694cac0fbcd494a6f987c9 - sha256: 8af06f60b2c47cf882755a295d1a8168be978d712abba491d003bbf1a20ca62f + md5: 1d1a6f7938f1a29044e676d112c0b424 + sha256: 60994f98e7386bd5836dd04b74112d30286df2bb15e8edf2f2d460dd37821860 category: main optional: false - name: google-cloud-core @@ -4895,7 +4987,7 @@ package: category: main optional: false - name: great-expectations - version: 0.18.5 + version: 0.18.8 manager: conda platform: linux-64 dependencies: @@ -4928,14 +5020,14 @@ package: typing-extensions: '>=3.10.0.0' tzlocal: '>=1.2' urllib3: '>=1.26' - url: https://conda.anaconda.org/conda-forge/noarch/great-expectations-0.18.5-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/great-expectations-0.18.8-pyhd8ed1ab_0.conda hash: - md5: 68b93891d7772b9fb2d33a9d48729a9c - sha256: 963fd0986b1de12c6605d1e6b55bc7085e77f09f14eecf60e99b94a5c3d542e7 + md5: aec88c7640df4638b89356cc72732d67 + sha256: 85f91a1d5ed6e80653a7f9d3564a4fdb5d67e1947e51479006ebd674c4bbb669 category: main optional: false - name: great-expectations - version: 0.18.5 + version: 0.18.8 manager: conda platform: osx-arm64 dependencies: @@ -4953,9 +5045,9 @@ package: scipy: '>=1.6.0' jsonpatch: '>=1.22' mistune: '>=0.8.4' + typing-extensions: '>=3.10.0.0' pytz: '>=2021.3' nbformat: '>=5.0' - typing-extensions: '>=3.10.0.0' ruamel.yaml: '>=0.16,<0.17.18' ipython: '>=7.16.3' cryptography: '>=3.2' @@ -4968,14 +5060,14 @@ package: altair: '>=4.2.1,<5.0.0' click: '>=7.1.2,!=8.1.4' pydantic: '>=1.9.2' - url: https://conda.anaconda.org/conda-forge/noarch/great-expectations-0.18.5-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/great-expectations-0.18.8-pyhd8ed1ab_0.conda hash: - md5: 68b93891d7772b9fb2d33a9d48729a9c - sha256: 963fd0986b1de12c6605d1e6b55bc7085e77f09f14eecf60e99b94a5c3d542e7 + md5: aec88c7640df4638b89356cc72732d67 + sha256: 85f91a1d5ed6e80653a7f9d3564a4fdb5d67e1947e51479006ebd674c4bbb669 category: main optional: false - name: greenlet - version: 3.0.2 + version: 3.0.3 manager: conda platform: linux-64 dependencies: @@ -4983,86 +5075,88 @@ package: libstdcxx-ng: '>=12' python: '>=3.9,<3.10.0a0' python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/linux-64/greenlet-3.0.2-py39h3d6467e_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/greenlet-3.0.3-py39h3d6467e_0.conda hash: - md5: b133b87a6f73b630be104d02776de451 - sha256: aafa5376e3bb65843f6e6cb65c86cb767b8ca9a3ee61e8647036e49a88ca7cc0 + md5: a240d46f8f326c4af01de1a1d8e615d0 + sha256: 3cc114aaf9051dc40dc63be9969284a6691fdbf9d55668a7e245de9bc3bbcf38 category: main optional: false - name: greenlet - version: 3.0.2 + version: 3.0.3 manager: conda platform: osx-arm64 dependencies: - __osx: '>=10.9' - libcxx: '>=16.0.6' + libcxx: '>=15' python: '>=3.9,<3.10.0a0' python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/osx-arm64/greenlet-3.0.2-py39h4ce5507_0.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/greenlet-3.0.3-py39hf3050f2_0.conda hash: - md5: 3f5b15ff81e34875d886eecddd19229e - sha256: 6a5c58a657f4892c481710dc1153e7fbab93be42c2a4141b9b41be074c9c1bf3 + md5: 92b3b5c1ca71c384789a1bc55cbd3d7e + sha256: 38f34512f3d48e9f24bb0a597e2ce8898e9fd9f2540a1412095d0fdc68e229be category: main optional: false - name: grpcio - version: 1.54.3 + version: 1.59.3 manager: conda platform: linux-64 dependencies: libgcc-ng: '>=12' - libgrpc: 1.54.3 + libgrpc: 1.59.3 libstdcxx-ng: '>=12' + libzlib: '>=1.2.13,<1.3.0a0' python: '>=3.9,<3.10.0a0' python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/linux-64/grpcio-1.54.3-py39h227be39_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/grpcio-1.59.3-py39h174d805_0.conda hash: - md5: 88730642f4e64eab737907f903d9b253 - sha256: fd1efc4fe365f429d43ee679dc7d28b7c2b5ad829a63289fccfe0c7c05e660ab + md5: 936452359388a43140bec999adbba8e3 + sha256: 7136df5e62c5af83981e29733f95fe88140d9f02def426db5302f01777f43b24 category: main optional: false - name: grpcio - version: 1.54.3 + version: 1.59.3 manager: conda platform: osx-arm64 dependencies: - libcxx: '>=15.0.7' - libgrpc: 1.54.3 + __osx: '>=10.9' + libcxx: '>=16.0.6' + libgrpc: 1.59.3 + libzlib: '>=1.2.13,<1.3.0a0' python: '>=3.9,<3.10.0a0' python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/osx-arm64/grpcio-1.54.3-py39hb198ff7_0.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/grpcio-1.59.3-py39h52f163a_0.conda hash: - md5: 076cb3ed6721ebab7f73670d7671f15b - sha256: 8aabc2d3baf71cde6543169ef5aa206da3120858ad5aaa1c98bb0689010bdbcb + md5: 65c1499ad010b38f0acab66e753f43b8 + sha256: 9939546b8eaf9a5666b31f872e6d70950139b108a557f3a1a3f14f0548af1fb3 category: main optional: false - name: grpcio-status - version: 1.54.2 + version: 1.59.3 manager: conda platform: linux-64 dependencies: googleapis-common-protos: '>=1.5.5' - grpcio: '>=1.54.2' + grpcio: '>=1.59.3' protobuf: '>=4.21.6' - python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/grpcio-status-1.54.2-pyhd8ed1ab_0.conda + python: '>=3.7' + url: https://conda.anaconda.org/conda-forge/noarch/grpcio-status-1.59.3-pyhd8ed1ab_0.conda hash: - md5: c7e845594733f1cb1f0f6d60a71d0dae - sha256: 8420c3da19de43e75383f3c0c93d3f556dc9b26a4bbe08f7fc557ec3c93782d4 + md5: 667999da148378ada5b9f13e7f3850c3 + sha256: 45c00a3feaf80f29cbc4b2f6a7ef73b08ce4e4a847b32a82eed443c7dd95d0c9 category: main optional: false - name: grpcio-status - version: 1.54.2 + version: 1.59.3 manager: conda platform: osx-arm64 dependencies: - python: '>=3.6' + python: '>=3.7' googleapis-common-protos: '>=1.5.5' protobuf: '>=4.21.6' - grpcio: '>=1.54.2' - url: https://conda.anaconda.org/conda-forge/noarch/grpcio-status-1.54.2-pyhd8ed1ab_0.conda + grpcio: '>=1.59.3' + url: https://conda.anaconda.org/conda-forge/noarch/grpcio-status-1.59.3-pyhd8ed1ab_0.conda hash: - md5: c7e845594733f1cb1f0f6d60a71d0dae - sha256: 8420c3da19de43e75383f3c0c93d3f556dc9b26a4bbe08f7fc557ec3c93782d4 + md5: 667999da148378ada5b9f13e7f3850c3 + sha256: 45c00a3feaf80f29cbc4b2f6a7ef73b08ce4e4a847b32a82eed443c7dd95d0c9 category: main optional: false - name: gtk2 @@ -5294,7 +5388,7 @@ package: category: main optional: false - name: huggingface_hub - version: 0.19.4 + version: 0.20.2 manager: conda platform: linux-64 dependencies: @@ -5306,14 +5400,14 @@ package: requests: '' tqdm: '>=4.42.1' typing-extensions: '>=3.7.4.3' - url: https://conda.anaconda.org/conda-forge/noarch/huggingface_hub-0.19.4-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/huggingface_hub-0.20.2-pyhd8ed1ab_0.conda hash: - md5: 89932559fd83abbc8f081f688a2e764f - sha256: 411e21dd3d54738f16208ec408b7cd88785dc7007ab4fe8db1aaf9f342fab279 + md5: 3f4e4c828523dcac4829d7362b60ef8f + sha256: 3d036f2cf10e8bea177514b667a21912774d339aa8403b85c6883b61ca041e09 category: main optional: false - name: huggingface_hub - version: 0.19.4 + version: 0.20.2 manager: conda platform: osx-arm64 dependencies: @@ -5323,12 +5417,12 @@ package: pyyaml: '>=5.1' packaging: '>=20.9' typing-extensions: '>=3.7.4.3' - tqdm: '>=4.42.1' fsspec: '>=2023.5.0' - url: https://conda.anaconda.org/conda-forge/noarch/huggingface_hub-0.19.4-pyhd8ed1ab_0.conda + tqdm: '>=4.42.1' + url: https://conda.anaconda.org/conda-forge/noarch/huggingface_hub-0.20.2-pyhd8ed1ab_0.conda hash: - md5: 89932559fd83abbc8f081f688a2e764f - sha256: 411e21dd3d54738f16208ec408b7cd88785dc7007ab4fe8db1aaf9f342fab279 + md5: 3f4e4c828523dcac4829d7362b60ef8f + sha256: 3d036f2cf10e8bea177514b667a21912774d339aa8403b85c6883b61ca041e09 category: main optional: false - name: icu @@ -5532,7 +5626,7 @@ package: category: main optional: false - name: ipykernel - version: 6.26.0 + version: 6.29.0 manager: conda platform: linux-64 dependencies: @@ -5547,17 +5641,17 @@ package: packaging: '' psutil: '' python: '>=3.8' - pyzmq: '>=20' + pyzmq: '>=24' tornado: '>=6.1' traitlets: '>=5.4.0' - url: https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.26.0-pyhf8b6a83_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.29.0-pyhd33586a_0.conda hash: - md5: 2307f71f5f0896d4b91b93e6b468abff - sha256: 9e647454f7572101657a07820ebed294df9a6a527b041cd5e4dd98b8aa3db625 + md5: 10915bfa94b94f4ad0f347efd124a339 + sha256: fa82aa089d474d11e63deb4b433acb9618294fe6b3b08123d7a269f72c0cc8ca category: main optional: false - name: ipykernel - version: 6.26.0 + version: 6.29.0 manager: conda platform: osx-arm64 dependencies: @@ -5569,17 +5663,17 @@ package: python: '>=3.8' tornado: '>=6.1' jupyter_client: '>=6.1.12' + jupyter_core: '>=4.12,!=5.0.*' ipython: '>=7.23.1' matplotlib-inline: '>=0.1' - jupyter_core: '>=4.12,!=5.0.*' debugpy: '>=1.6.5' comm: '>=0.1.1' - pyzmq: '>=20' traitlets: '>=5.4.0' - url: https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.26.0-pyh3cd1d5f_0.conda + pyzmq: '>=24' + url: https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.29.0-pyh3cd1d5f_0.conda hash: - md5: 3c6e2148d30e6a762d8327a433ebfb5a - sha256: be9927d47fe23cc4d2a09d252e37e1e56ffb137767d2c0577ed882ead16f75fa + md5: 17b1e24f82177f01ac7c6c518288612c + sha256: 6df088b8d356281347a71388315c7bbf49f0a5a10e6b16000553a43d74f5222d category: main optional: false - name: ipython @@ -5805,29 +5899,29 @@ package: category: main optional: false - name: jinja2 - version: 3.1.2 + version: 3.1.3 manager: conda platform: linux-64 dependencies: markupsafe: '>=2.0' python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2 + url: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.3-pyhd8ed1ab_0.conda hash: - md5: c8490ed5c70966d232fdd389d0dbed37 - sha256: b045faba7130ab263db6a8fdc96b1a3de5fcf85c4a607c5f11a49e76851500b5 + md5: e7d8df6509ba635247ff9aea31134262 + sha256: fd517b7dd3a61eca34f8a6f9f92f306397149cae1204fce72ac3d227107dafdc category: main optional: false - name: jinja2 - version: 3.1.2 + version: 3.1.3 manager: conda platform: osx-arm64 dependencies: python: '>=3.7' markupsafe: '>=2.0' - url: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2 + url: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.3-pyhd8ed1ab_0.conda hash: - md5: c8490ed5c70966d232fdd389d0dbed37 - sha256: b045faba7130ab263db6a8fdc96b1a3de5fcf85c4a607c5f11a49e76851500b5 + md5: e7d8df6509ba635247ff9aea31134262 + sha256: fd517b7dd3a61eca34f8a6f9f92f306397149cae1204fce72ac3d227107dafdc category: main optional: false - name: jmespath @@ -6006,7 +6100,7 @@ package: category: main optional: false - name: jsonschema - version: 4.20.0 + version: 4.21.0 manager: conda platform: linux-64 dependencies: @@ -6017,14 +6111,14 @@ package: python: '>=3.8' referencing: '>=0.28.4' rpds-py: '>=0.7.1' - url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.20.0-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.21.0-pyhd8ed1ab_0.conda hash: - md5: 1116d79def5268414fb0917520b2bbf1 - sha256: 77aae609097d06deedb8ef8407a44b23d5fef95962ba6fe1c959ac7bd6195296 + md5: 63dd555524e29934d1d3c9f7001ec4bd + sha256: 3562f0b6abaab7547ac3d86c5cd3eec30f0dc7072e136556ec168c8652911af7 category: main optional: false - name: jsonschema - version: 4.20.0 + version: 4.21.0 manager: conda platform: osx-arm64 dependencies: @@ -6035,42 +6129,42 @@ package: jsonschema-specifications: '>=2023.03.6' referencing: '>=0.28.4' rpds-py: '>=0.7.1' - url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.20.0-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.21.0-pyhd8ed1ab_0.conda hash: - md5: 1116d79def5268414fb0917520b2bbf1 - sha256: 77aae609097d06deedb8ef8407a44b23d5fef95962ba6fe1c959ac7bd6195296 + md5: 63dd555524e29934d1d3c9f7001ec4bd + sha256: 3562f0b6abaab7547ac3d86c5cd3eec30f0dc7072e136556ec168c8652911af7 category: main optional: false - name: jsonschema-specifications - version: 2023.11.2 + version: 2023.12.1 manager: conda platform: linux-64 dependencies: importlib_resources: '>=1.4.0' python: '>=3.8' referencing: '>=0.31.0' - url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.11.2-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.12.1-pyhd8ed1ab_0.conda hash: - md5: 73884ca36d6d96cbce498cde99fab40f - sha256: e26115d02dc208a05b557c8dd670923270803b9b3b8af4e22b93d659d1ec77ec + md5: a0e4efb5f35786a05af4809a2fb1f855 + sha256: a9630556ddc3121c0be32f4cbf792dd9102bd380d5cd81d57759d172cf0c2da2 category: main optional: false - name: jsonschema-specifications - version: 2023.11.2 + version: 2023.12.1 manager: conda platform: osx-arm64 dependencies: python: '>=3.8' importlib_resources: '>=1.4.0' referencing: '>=0.31.0' - url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.11.2-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.12.1-pyhd8ed1ab_0.conda hash: - md5: 73884ca36d6d96cbce498cde99fab40f - sha256: e26115d02dc208a05b557c8dd670923270803b9b3b8af4e22b93d659d1ec77ec + md5: a0e4efb5f35786a05af4809a2fb1f855 + sha256: a9630556ddc3121c0be32f4cbf792dd9102bd380d5cd81d57759d172cf0c2da2 category: main optional: false - name: jsonschema-with-format-nongpl - version: 4.20.0 + version: 4.21.0 manager: conda platform: linux-64 dependencies: @@ -6078,20 +6172,20 @@ package: idna: '' isoduration: '' jsonpointer: '>1.13' - jsonschema: '>=4.20.0,<4.20.1.0a0' + jsonschema: '>=4.21.0,<4.21.1.0a0' python: '' rfc3339-validator: '' rfc3986-validator: '>0.1.0' uri-template: '' webcolors: '>=1.11' - url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.20.0-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.21.0-pyhd8ed1ab_0.conda hash: - md5: a168c5f84010711f6d4ae650bc22b480 - sha256: 03558b25daa57137fdf98e92731ba50ff5506f265294ac2eef5ec465c76ecf57 + md5: 790538f1e539e9d44584cf49422053ca + sha256: 657a5597ff1060ca74ea5431d6f9743792fa62d59c4541ac83ebf105b80e1011 category: main optional: false - name: jsonschema-with-format-nongpl - version: 4.20.0 + version: 4.21.0 manager: conda platform: osx-arm64 dependencies: @@ -6104,11 +6198,11 @@ package: jsonpointer: '>1.13' webcolors: '>=1.11' rfc3986-validator: '>0.1.0' - jsonschema: '>=4.20.0,<4.20.1.0a0' - url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.20.0-pyhd8ed1ab_0.conda + jsonschema: '>=4.21.0,<4.21.1.0a0' + url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.21.0-pyhd8ed1ab_0.conda hash: - md5: a168c5f84010711f6d4ae650bc22b480 - sha256: 03558b25daa57137fdf98e92731ba50ff5506f265294ac2eef5ec465c76ecf57 + md5: 790538f1e539e9d44584cf49422053ca + sha256: 657a5597ff1060ca74ea5431d6f9743792fa62d59c4541ac83ebf105b80e1011 category: main optional: false - name: jupyter @@ -6176,8 +6270,8 @@ package: click: '' importlib-metadata: '' tabulate: '' - nbformat: '' attrs: '' + nbformat: '' python: '>=3.8' sqlalchemy: '>=1.3.12,<3' nbclient: '>=0.2,<0.8' @@ -6188,31 +6282,31 @@ package: category: main optional: false - name: jupyter-lsp - version: 2.2.1 + version: 2.2.2 manager: conda platform: linux-64 dependencies: importlib-metadata: '>=4.8.3' jupyter_server: '>=1.1.2' python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.2.1-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.2.2-pyhd8ed1ab_0.conda hash: - md5: d1a5efc65bfabc3bfebf4d3a204da897 - sha256: 0f995f60609fb50db74bed3637165ad202cf091ec0804519c11b6cffce901e88 + md5: ed56b103cac2db68f22909e9f5cca6b6 + sha256: d8ab253be3df67be1b31fe040a8386e071ff065ef4442b94a722a45fa3562fbe category: main optional: false - name: jupyter-lsp - version: 2.2.1 + version: 2.2.2 manager: conda platform: osx-arm64 dependencies: python: '>=3.8' importlib-metadata: '>=4.8.3' jupyter_server: '>=1.1.2' - url: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.2.1-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.2.2-pyhd8ed1ab_0.conda hash: - md5: d1a5efc65bfabc3bfebf4d3a204da897 - sha256: 0f995f60609fb50db74bed3637165ad202cf091ec0804519c11b6cffce901e88 + md5: ed56b103cac2db68f22909e9f5cca6b6 + sha256: d8ab253be3df67be1b31fe040a8386e071ff065ef4442b94a722a45fa3562fbe category: main optional: false - name: jupyter_client @@ -6292,7 +6386,7 @@ package: category: main optional: false - name: jupyter_core - version: 5.5.0 + version: 5.7.1 manager: conda platform: linux-64 dependencies: @@ -6300,14 +6394,14 @@ package: python: '>=3.9,<3.10.0a0' python_abi: 3.9.* traitlets: '>=5.3' - url: https://conda.anaconda.org/conda-forge/linux-64/jupyter_core-5.5.0-py39hf3d152e_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/jupyter_core-5.7.1-py39hf3d152e_0.conda hash: - md5: 87274099cd45c591edd6ed59bcc96095 - sha256: 23e7d01036b8c25bb054b28e4ee299a2cac7ae62af672bdda5f814c7b6ff470d + md5: 0195c150e0768bc4caccdff46a12075c + sha256: 7527ebd9196d4d22c428854e065dc336a8d184bbd1f7264fa1139af493d3f7d6 category: main optional: false - name: jupyter_core - version: 5.5.0 + version: 5.7.1 manager: conda platform: osx-arm64 dependencies: @@ -6315,10 +6409,10 @@ package: python: '>=3.9,<3.10.0a0' python_abi: 3.9.* traitlets: '>=5.3' - url: https://conda.anaconda.org/conda-forge/osx-arm64/jupyter_core-5.5.0-py39h2804cbe_0.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/jupyter_core-5.7.1-py39h2804cbe_0.conda hash: - md5: 42a8bd9a68a56049e0e4b29209c48c6d - sha256: 71c4ff910e60afa6a336e7d3b6d9332e615411e1810197d9076629314c208999 + md5: 7a804a3d9c0a04e3b0e0ce1a9f3fdc03 + sha256: e4cb996a1878b0cace1a8e4d05543099fe0a9c691c3932662c04709a4197ce95 category: main optional: false - name: jupyter_events @@ -6360,7 +6454,7 @@ package: category: main optional: false - name: jupyter_server - version: 2.12.1 + version: 2.12.5 manager: conda platform: linux-64 dependencies: @@ -6383,14 +6477,14 @@ package: tornado: '>=6.2.0' traitlets: '>=5.6.0' websocket-client: '' - url: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.12.1-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.12.5-pyhd8ed1ab_0.conda hash: - md5: e9781be1e6c93b5df2c180a9f9242420 - sha256: c4aabe2041afb8fde1f049549c2e292265612d07dd4d1156f3e183ba6a6f007b + md5: 755177a956fa6dd90d5cfcbbb5084de2 + sha256: 43dcd238c656c7ecf3228be8735def530cad5181f990c042ba202b9e383d2b1f category: main optional: false - name: jupyter_server - version: 2.12.1 + version: 2.12.5 manager: conda platform: osx-arm64 dependencies: @@ -6404,49 +6498,49 @@ package: python: '>=3.8' terminado: '>=0.8.3' jupyter_core: '>=4.12,!=5.0.*' - nbconvert-core: '>=6.4.4' tornado: '>=6.2.0' + nbconvert-core: '>=6.4.4' + pyzmq: '>=24' jupyter_client: '>=7.4.4' nbformat: '>=5.3.0' - pyzmq: '>=24' traitlets: '>=5.6.0' anyio: '>=3.1.0' send2trash: '>=1.8.2' jupyter_events: '>=0.9.0' - url: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.12.1-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.12.5-pyhd8ed1ab_0.conda hash: - md5: e9781be1e6c93b5df2c180a9f9242420 - sha256: c4aabe2041afb8fde1f049549c2e292265612d07dd4d1156f3e183ba6a6f007b + md5: 755177a956fa6dd90d5cfcbbb5084de2 + sha256: 43dcd238c656c7ecf3228be8735def530cad5181f990c042ba202b9e383d2b1f category: main optional: false - name: jupyter_server_terminals - version: 0.5.0 + version: 0.5.1 manager: conda platform: linux-64 dependencies: python: '>=3.8' terminado: '>=0.8.3' - url: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.0-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.1-pyhd8ed1ab_0.conda hash: - md5: 37a8b4098d428ecd40e58f8ec8a8e77d - sha256: b2c769977c258e5a81d541fd526d01083fc6b8c8dfdd4822795a898626bc81e6 + md5: 919e6d570f8b3839f3a1ed99b25088af + sha256: 488676cc34049a8a80002d323c4d83c03e6188a8f31ebfb02d43e20d183b3662 category: main optional: false - name: jupyter_server_terminals - version: 0.5.0 + version: 0.5.1 manager: conda platform: osx-arm64 dependencies: python: '>=3.8' terminado: '>=0.8.3' - url: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.0-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.1-pyhd8ed1ab_0.conda hash: - md5: 37a8b4098d428ecd40e58f8ec8a8e77d - sha256: b2c769977c258e5a81d541fd526d01083fc6b8c8dfdd4822795a898626bc81e6 + md5: 919e6d570f8b3839f3a1ed99b25088af + sha256: 488676cc34049a8a80002d323c4d83c03e6188a8f31ebfb02d43e20d183b3662 category: main optional: false - name: jupyterlab - version: 4.0.9 + version: 4.0.10 manager: conda platform: linux-64 dependencies: @@ -6465,14 +6559,14 @@ package: tomli: '' tornado: '>=6.2.0' traitlets: '' - url: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.0.9-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.0.10-pyhd8ed1ab_0.conda hash: - md5: 7da6e874b0904e411ec2fd8e6082841e - sha256: 1c55e63e4b84810796c8827370ebd597ad3f45bcd0c1fa9975a363bc6a895f23 + md5: a2a505f332f32914004f9b058fd9d0c2 + sha256: 056abf47ec7c6bfb32f5e01eedca32ac881d85cc6e648c0b86dce65f64ceb06c category: main optional: false - name: jupyterlab - version: 4.0.9 + version: 4.0.10 manager: conda platform: osx-arm64 dependencies: @@ -6491,10 +6585,10 @@ package: async-lru: '>=1.0.0' jupyterlab_server: '>=2.19.0,<3' notebook-shim: '>=0.2' - url: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.0.9-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.0.10-pyhd8ed1ab_0.conda hash: - md5: 7da6e874b0904e411ec2fd8e6082841e - sha256: 1c55e63e4b84810796c8827370ebd597ad3f45bcd0c1fa9975a363bc6a895f23 + md5: a2a505f332f32914004f9b058fd9d0c2 + sha256: 056abf47ec7c6bfb32f5e01eedca32ac881d85cc6e648c0b86dce65f64ceb06c category: main optional: false - name: jupyterlab_pygments @@ -6588,7 +6682,7 @@ package: category: main optional: false - name: jupytext - version: 1.16.0 + version: 1.16.1 manager: conda platform: linux-64 dependencies: @@ -6599,14 +6693,14 @@ package: python: '>=3.8' pyyaml: '' toml: '' - url: https://conda.anaconda.org/conda-forge/noarch/jupytext-1.16.0-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/jupytext-1.16.1-pyhd8ed1ab_0.conda hash: - md5: 562071ea5a2172022aadf6c3ddbf22eb - sha256: 9050a4c3ef58c61e0f6f8fff270b8c20617a35a4d14f651cc76af52665563a4a + md5: 14a45070afec994235a23ae09b098cce + sha256: 450d03ec711a5cbd643f99f4fb2f08aa167db7a0cb54dcbb53700c81b290c316 category: main optional: false - name: jupytext - version: 1.16.0 + version: 1.16.1 manager: conda platform: osx-arm64 dependencies: @@ -6617,61 +6711,61 @@ package: mdit-py-plugins: '' python: '>=3.8' markdown-it-py: '>=1.0' - url: https://conda.anaconda.org/conda-forge/noarch/jupytext-1.16.0-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/jupytext-1.16.1-pyhd8ed1ab_0.conda hash: - md5: 562071ea5a2172022aadf6c3ddbf22eb - sha256: 9050a4c3ef58c61e0f6f8fff270b8c20617a35a4d14f651cc76af52665563a4a + md5: 14a45070afec994235a23ae09b098cce + sha256: 450d03ec711a5cbd643f99f4fb2f08aa167db7a0cb54dcbb53700c81b290c316 category: main optional: false - name: kealib - version: 1.5.2 + version: 1.5.3 manager: conda platform: linux-64 dependencies: - hdf5: '>=1.14.2,<1.14.4.0a0' + hdf5: '>=1.14.3,<1.14.4.0a0' libgcc-ng: '>=12' libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/kealib-1.5.2-hcd42e92_1.conda + url: https://conda.anaconda.org/conda-forge/linux-64/kealib-1.5.3-h2f55d51_0.conda hash: - md5: b04c039f0bd511533a0d8bc8a7b6835e - sha256: 1278aaba7bfd9a143a58a2d5e13296702b6bd77f7b43f6ecace555a55579bdad + md5: f7e7077802927590efc8bf7328208f12 + sha256: ee0934ff426d3cab015055808bed33eb9d20f635ec14bc421c596f4b70927102 category: main optional: false - name: kealib - version: 1.5.2 + version: 1.5.3 manager: conda platform: osx-arm64 dependencies: - hdf5: '>=1.14.2,<1.14.4.0a0' - libcxx: '>=15.0.7' - url: https://conda.anaconda.org/conda-forge/osx-arm64/kealib-1.5.2-h47b5e36_1.conda + hdf5: '>=1.14.3,<1.14.4.0a0' + libcxx: '>=15' + url: https://conda.anaconda.org/conda-forge/osx-arm64/kealib-1.5.3-h210d843_0.conda hash: - md5: 88abe34211296bbc0ba1871fd2b13962 - sha256: 93e9b03cd9035766c43e5f7f851fc07a4f68b79fd48c1306280f17093a8ae746 + md5: 0153b4907333b9005f48d19584e4153e + sha256: f9bae19e49eda17d32b1ca6cabe501e09b00ba10f6d061fc8a14086a8455710e category: main optional: false - name: keras - version: 2.14.0 + version: 2.15.0 manager: conda platform: linux-64 dependencies: python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/keras-2.14.0-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/keras-2.15.0-pyhd8ed1ab_0.conda hash: - md5: 1f549fcd82b651b879789fd922e32e1f - sha256: 1e45448fd8da68a5cc27e6a8f01e0bddbefbe3e33cb638fd3a65149b64c69393 + md5: 91e789823c9a5577a0a6979d7e594159 + sha256: 7a1144e42f7815a216c46038e3c71b004feb3082fb4e9b9cf9abc5da725d8448 category: main optional: false - name: keras - version: 2.14.0 + version: 2.15.0 manager: conda platform: osx-arm64 dependencies: python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/keras-2.14.0-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/keras-2.15.0-pyhd8ed1ab_0.conda hash: - md5: 1f549fcd82b651b879789fd922e32e1f - sha256: 1e45448fd8da68a5cc27e6a8f01e0bddbefbe3e33cb638fd3a65149b64c69393 + md5: 91e789823c9a5577a0a6979d7e594159 + sha256: 7a1144e42f7815a216c46038e3c71b004feb3082fb4e9b9cf9abc5da725d8448 category: main optional: false - name: keyring @@ -6943,28 +7037,28 @@ package: category: main optional: false - name: libabseil - version: '20230125.3' + version: '20230802.1' manager: conda platform: linux-64 dependencies: libgcc-ng: '>=12' libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20230125.3-cxx17_h59595ed_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20230802.1-cxx17_h59595ed_0.conda hash: - md5: d1db1b8be7c3a8983dcbbbfe4f0765de - sha256: 3c6fab31ed4dc8428605588454596b307b1bd59d33b0c7073c407ab51408b011 + md5: 2785ddf4cb0e7e743477991d64353947 + sha256: 8729021a93e67bb93b4e73ef0a132499db516accfea11561b667635bcd0507e7 category: main optional: false - name: libabseil - version: '20230125.3' + version: '20230802.1' manager: conda platform: osx-arm64 dependencies: libcxx: '>=15.0.7' - url: https://conda.anaconda.org/conda-forge/osx-arm64/libabseil-20230125.3-cxx17_h13dd4ca_0.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/libabseil-20230802.1-cxx17_h13dd4ca_0.conda hash: - md5: e9edfc273c30153b3427332e90110422 - sha256: dacf281442b411eb4a4dece69618c247dbaacaa71669ca6631fc924be86ceab8 + md5: fb6dfadc1898666616dfda242d8aea10 + sha256: 459a58f36607246b4483d7a370c2d9a03e7f824e79da2c6e3e9d62abf80393e7 category: main optional: false - name: libaec @@ -6999,7 +7093,7 @@ package: dependencies: bzip2: '>=1.0.8,<2.0a0' libgcc-ng: '>=12' - libxml2: '>=2.12.2,<2.13.0a0' + libxml2: '>=2.12.2,<3.0.0a0' libzlib: '>=1.2.13,<1.3.0a0' lz4-c: '>=1.9.3,<1.10.0a0' lzo: '>=2.10,<3.0a0' @@ -7019,7 +7113,7 @@ package: dependencies: bzip2: '>=1.0.8,<2.0a0' libiconv: '>=1.17,<2.0a0' - libxml2: '>=2.12.2,<2.13.0a0' + libxml2: '>=2.12.2,<3.0.0a0' libzlib: '>=1.2.13,<1.3.0a0' lz4-c: '>=1.9.3,<1.10.0a0' lzo: '>=2.10,<3.0a0' @@ -7033,67 +7127,69 @@ package: category: main optional: false - name: libarrow - version: 12.0.1 + version: 13.0.0 manager: conda platform: linux-64 dependencies: - aws-crt-cpp: '>=0.21.0,<0.21.1.0a0' - aws-sdk-cpp: '>=1.10.57,<1.10.58.0a0' + aws-crt-cpp: '>=0.26.0,<0.26.1.0a0' + aws-sdk-cpp: '>=1.11.210,<1.11.211.0a0' bzip2: '>=1.0.8,<2.0a0' glog: '>=0.6.0,<0.7.0a0' - libabseil: '>=20230125.3,<20230126.0a0' - libbrotlidec: '>=1.0.9,<1.1.0a0' - libbrotlienc: '>=1.0.9,<1.1.0a0' + libabseil: '>=20230802.1,<20230803.0a0' + libbrotlidec: '>=1.1.0,<1.2.0a0' + libbrotlienc: '>=1.1.0,<1.2.0a0' libgcc-ng: '>=12' libgoogle-cloud: '>=2.12.0,<2.13.0a0' - libgrpc: '>=1.54.3,<1.55.0a0' - libprotobuf: '>=3.21.12,<3.22.0a0' + libgrpc: '>=1.59.3,<1.60.0a0' + libprotobuf: '>=4.24.4,<4.24.5.0a0' + libre2-11: '>=2023.6.2,<2024.0a0' libstdcxx-ng: '>=12' - libthrift: '>=0.18.1,<0.18.2.0a0' + libthrift: '>=0.19.0,<0.19.1.0a0' libutf8proc: '>=2.8.0,<3.0a0' libzlib: '>=1.2.13,<1.3.0a0' lz4-c: '>=1.9.3,<1.10.0a0' - openssl: '>=3.1.2,<4.0a0' - orc: '>=1.9.0,<1.9.1.0a0' - re2: '>=2023.3.2,<2023.3.3.0a0' + openssl: '>=3.2.0,<4.0a0' + orc: '>=1.9.2,<1.9.3.0a0' + re2: '' snappy: '>=1.1.10,<2.0a0' - ucx: '>=1.14.0,<1.15.0a0' - zstd: '>=1.5.2,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libarrow-12.0.1-hb87d912_8_cpu.conda + ucx: '>=1.15.0,<1.16.0a0' + zstd: '>=1.5.5,<1.6.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/libarrow-13.0.0-h75ae66a_23_cpu.conda hash: - md5: 3f3b11398fe79b578e3c44dd00a44e4a - sha256: 046cc9a10999c58d351e3778ba7de5f694f90f46384726f26e6ab0e2826ccff7 + md5: a474ac3e22c8f4c7540533e11e3ea820 + sha256: cd40afed871226bdfb5bc87f92899269006d02373f8b853efc2c4d2bde96c371 category: main optional: false - name: libarrow - version: 12.0.1 + version: 13.0.0 manager: conda platform: osx-arm64 dependencies: - aws-crt-cpp: '>=0.21.0,<0.21.1.0a0' - aws-sdk-cpp: '>=1.10.57,<1.10.58.0a0' + aws-crt-cpp: '>=0.26.0,<0.26.1.0a0' + aws-sdk-cpp: '>=1.11.210,<1.11.211.0a0' bzip2: '>=1.0.8,<2.0a0' glog: '>=0.6.0,<0.7.0a0' - libabseil: '>=20230125.3,<20230126.0a0' - libbrotlidec: '>=1.0.9,<1.1.0a0' - libbrotlienc: '>=1.0.9,<1.1.0a0' - libcxx: '>=15.0.7' + libabseil: '>=20230802.1,<20230803.0a0' + libbrotlidec: '>=1.1.0,<1.2.0a0' + libbrotlienc: '>=1.1.0,<1.2.0a0' + libcxx: '>=14' libgoogle-cloud: '>=2.12.0,<2.13.0a0' - libgrpc: '>=1.54.3,<1.55.0a0' - libprotobuf: '>=3.21.12,<3.22.0a0' - libthrift: '>=0.18.1,<0.18.2.0a0' + libgrpc: '>=1.59.3,<1.60.0a0' + libprotobuf: '>=4.24.4,<4.24.5.0a0' + libre2-11: '>=2023.6.2,<2024.0a0' + libthrift: '>=0.19.0,<0.19.1.0a0' libutf8proc: '>=2.8.0,<3.0a0' libzlib: '>=1.2.13,<1.3.0a0' lz4-c: '>=1.9.3,<1.10.0a0' - openssl: '>=3.1.2,<4.0a0' - orc: '>=1.9.0,<1.9.1.0a0' - re2: '>=2023.3.2,<2023.3.3.0a0' + openssl: '>=3.2.0,<4.0a0' + orc: '>=1.9.2,<1.9.3.0a0' + re2: '' snappy: '>=1.1.10,<2.0a0' - zstd: '>=1.5.2,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-12.0.1-h0b136c2_8_cpu.conda + zstd: '>=1.5.5,<1.6.0a0' + url: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-13.0.0-h7c288cf_23_cpu.conda hash: - md5: bfd29a8b76d92468d98d473f4d587796 - sha256: 7852b48ec223c71371f4dac033e5823c64c80bf887a432cdddfafe9a6c91dfce + md5: 9fed5c58b68f1cd832dca7b5fcd1be2a + sha256: 30846fd0da328e5f2027feb3eebcc89b2b75ff7f506ab6f52a423d237a2faa6f category: main optional: false - name: libblas @@ -7121,98 +7217,98 @@ package: category: main optional: false - name: libboost-headers - version: 1.83.0 + version: 1.84.0 manager: conda platform: linux-64 dependencies: {} - url: https://conda.anaconda.org/conda-forge/linux-64/libboost-headers-1.83.0-ha770c72_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/libboost-headers-1.84.0-ha770c72_0.conda hash: - md5: 1fc57b3ba24d18cc75f431d7feb2c785 - sha256: aaa194e8b7ba401e6507a2f6dc0714d2f8f5a9951f8be18b96c250b0a1175982 + md5: 9c595e87653a36aa4d8c71b4e2f7e586 + sha256: f6a6eb40a33b32eaab5d9ab36567b126f54c0b2112fe53131cf7b55afff2d0d9 category: main optional: false - name: libboost-headers - version: 1.83.0 + version: 1.84.0 manager: conda platform: osx-arm64 dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-arm64/libboost-headers-1.83.0-hce30654_0.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/libboost-headers-1.84.0-hce30654_0.conda hash: - md5: ff53ab92ecb249691bb72d0561ff13ed - sha256: e02286d2a73f70f0fd71e1db41d0feac2276dbc9a5479d7f0e8074f4b459faac + md5: 284cebe4165a186462c4471c11f5ee96 + sha256: ca1bcaac05608ed420650c1cb329bbab7bb0a059dce7f7803a592fcc414d4604 category: main optional: false - name: libbrotlicommon - version: 1.0.9 + version: 1.1.0 manager: conda platform: linux-64 dependencies: libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.0.9-h166bdaf_9.conda + url: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hd590300_1.conda hash: - md5: 61641e239f96eae2b8492dc7e755828c - sha256: fc57c0876695c5b4ab7173438580c1d7eaa7dccaf14cb6467ca9e0e97abe0cf0 + md5: aec6c91c7371c26392a06708a73c70e5 + sha256: 40f29d1fab92c847b083739af86ad2f36d8154008cf99b64194e4705a1725d78 category: main optional: false - name: libbrotlicommon - version: 1.0.9 + version: 1.1.0 manager: conda platform: osx-arm64 dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.0.9-h1a8c8d9_9.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.1.0-hb547adb_1.conda hash: - md5: 82354022c67480c61419b6e47377af89 - sha256: 53f4a6cc4f5795adf33fda00b86a0e91513c534ae44859754e9c07954d3a7148 + md5: cd68f024df0304be41d29a9088162b02 + sha256: 556f0fddf4bd4d35febab404d98cb6862ce3b7ca843e393da0451bfc4654cf07 category: main optional: false - name: libbrotlidec - version: 1.0.9 + version: 1.1.0 manager: conda platform: linux-64 dependencies: - libbrotlicommon: 1.0.9 + libbrotlicommon: 1.1.0 libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.0.9-h166bdaf_9.conda + url: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hd590300_1.conda hash: - md5: 081aa22f4581c08e4372b0b6c2f8478e - sha256: 564f301430c3c61bc5e149e74157ec181ed2a758befc89f7c38466d515a0f614 + md5: f07002e225d7a60a694d42a7bf5ff53f + sha256: 86fc861246fbe5ad85c1b6b3882aaffc89590a48b42d794d3d5c8e6d99e5f926 category: main optional: false - name: libbrotlidec - version: 1.0.9 + version: 1.1.0 manager: conda platform: osx-arm64 dependencies: - libbrotlicommon: 1.0.9 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.0.9-h1a8c8d9_9.conda + libbrotlicommon: 1.1.0 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.1.0-hb547adb_1.conda hash: - md5: af03c66e8cb688221bdc9e2b0faaa2bf - sha256: 2de613dcccbbe40f90a256784ab23f7292aaa0985642ca35496cb9c177d8220b + md5: ee1a519335cc10d0ec7e097602058c0a + sha256: c1c85937828ad3bc434ac60b7bcbde376f4d2ea4ee42d15d369bf2a591775b4a category: main optional: false - name: libbrotlienc - version: 1.0.9 + version: 1.1.0 manager: conda platform: linux-64 dependencies: - libbrotlicommon: 1.0.9 + libbrotlicommon: 1.1.0 libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.0.9-h166bdaf_9.conda + url: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hd590300_1.conda hash: - md5: 1f0a03af852a9659ed2bf08f2f1704fd - sha256: d27bc2562ea3f3b2bfd777f074f1cac6bfa4a737233dad288cd87c4634a9bb3a + md5: 5fc11c6020d421960607d821310fcd4d + sha256: f751b8b1c4754a2a8dfdc3b4040fa7818f35bbf6b10e905a47d3a194b746b071 category: main optional: false - name: libbrotlienc - version: 1.0.9 + version: 1.1.0 manager: conda platform: osx-arm64 dependencies: - libbrotlicommon: 1.0.9 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.0.9-h1a8c8d9_9.conda + libbrotlicommon: 1.1.0 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.1.0-hb547adb_1.conda hash: - md5: 8231f81e72b1113eb2ed8d2586c82691 - sha256: 37e766c0b87d06637bdfc68e072c227ce2dac82b81d26b5f9ac57fb948e2e2b7 + md5: d7e077f326a98b2cc60087eaff7c730b + sha256: 690dfc98e891ee1871c54166d30f6e22edfc2d7d6b29e7988dde5f1ce271c81a category: main optional: false - name: libcblas @@ -7516,7 +7612,7 @@ package: category: main optional: false - name: libgdal - version: 3.8.1 + version: 3.8.3 manager: conda platform: linux-64 dependencies: @@ -7530,7 +7626,7 @@ package: hdf4: '>=4.2.15,<4.2.16.0a0' hdf5: '>=1.14.3,<1.14.4.0a0' json-c: '>=0.17,<0.18.0a0' - kealib: '>=1.5.2,<1.6.0a0' + kealib: '>=1.5.3,<1.6.0a0' lerc: '>=4.0.0,<5.0a0' libaec: '>=1.1.2,<2.0a0' libarchive: '>=3.7.2,<3.8.0a0' @@ -7550,7 +7646,7 @@ package: libtiff: '>=4.6.0,<4.7.0a0' libuuid: '>=2.38.1,<3.0a0' libwebp-base: '>=1.3.2,<2.0a0' - libxml2: '>=2.12.2,<2.13.0a0' + libxml2: '>=2.12.3,<3.0.0a0' libzlib: '>=1.2.13,<1.3.0a0' lz4-c: '>=1.9.3,<1.10.0a0' openjpeg: '>=2.5.0,<3.0a0' @@ -7559,22 +7655,21 @@ package: poppler: '>=23.12.0,<23.13.0a0' postgresql: '' proj: '>=9.3.1,<9.3.2.0a0' - tiledb: '>=2.18.2,<2.19.0a0' - xerces-c: '>=3.2.4,<3.3.0a0' + tiledb: '>=2.19.0,<2.20.0a0' + xerces-c: '>=3.2.5,<3.3.0a0' xz: '>=5.2.6,<6.0a0' zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libgdal-3.8.1-hed8bd54_4.conda + url: https://conda.anaconda.org/conda-forge/linux-64/libgdal-3.8.3-hcd1fc54_0.conda hash: - md5: 32e453fb234a3534069396da161b145b - sha256: 8461bd176f6b526d856c28ad42c0899683211104c0609bbba5b897466597a34c + md5: ef5ae0528509a7987cf29e8827f46938 + sha256: 70b40ec4c171010895920000bf877b7454474df0d7473117277b22a0727b7aa4 category: main optional: false - name: libgdal - version: 3.8.1 + version: 3.8.3 manager: conda platform: osx-arm64 dependencies: - __osx: '>=10.9' blosc: '>=1.21.5,<2.0a0' cfitsio: '>=4.3.1,<4.3.2.0a0' freexl: '>=2.0.0,<3.0a0' @@ -7584,12 +7679,12 @@ package: hdf4: '>=4.2.15,<4.2.16.0a0' hdf5: '>=1.14.3,<1.14.4.0a0' json-c: '>=0.17,<0.18.0a0' - kealib: '>=1.5.2,<1.6.0a0' + kealib: '>=1.5.3,<1.6.0a0' lerc: '>=4.0.0,<5.0a0' libaec: '>=1.1.2,<2.0a0' libarchive: '>=3.7.2,<3.8.0a0' libcurl: '>=8.5.0,<9.0a0' - libcxx: '>=16.0.6' + libcxx: '>=15' libdeflate: '>=1.19,<1.20.0a0' libexpat: '>=2.5.0,<3.0a0' libiconv: '>=1.17,<2.0a0' @@ -7602,7 +7697,7 @@ package: libsqlite: '>=3.44.2,<4.0a0' libtiff: '>=4.6.0,<4.7.0a0' libwebp-base: '>=1.3.2,<2.0a0' - libxml2: '>=2.12.2,<2.13.0a0' + libxml2: '>=2.12.3,<3.0.0a0' libzlib: '>=1.2.13,<1.3.0a0' lz4-c: '>=1.9.3,<1.10.0a0' openjpeg: '>=2.5.0,<3.0a0' @@ -7611,14 +7706,14 @@ package: poppler: '>=23.12.0,<23.13.0a0' postgresql: '' proj: '>=9.3.1,<9.3.2.0a0' - tiledb: '>=2.18.2,<2.19.0a0' - xerces-c: '>=3.2.4,<3.3.0a0' + tiledb: '>=2.19.0,<2.20.0a0' + xerces-c: '>=3.2.5,<3.3.0a0' xz: '>=5.2.6,<6.0a0' zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-3.8.1-h8e72e65_4.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-3.8.3-h7e86f1f_0.conda hash: - md5: 241eb423b481554904b3d78648443cf8 - sha256: c0515ef678b73f7332ad6aa4857aef35e2290194ea8bb4badbf40b0a4e784af7 + md5: dd42aa63e28b0e8c5d4af6d7995ab151 + sha256: fa94cfe093975c61b426c5d9bcde7e0d52d9623cd515a21bc14b941f024eec31 category: main optional: false - name: libgfortran @@ -7710,18 +7805,18 @@ package: manager: conda platform: linux-64 dependencies: - libabseil: '>=20230125.3,<20230126.0a0' + libabseil: '>=20230802.1,<20230803.0a0' libcrc32c: '>=1.1.2,<1.2.0a0' - libcurl: '>=8.1.2,<9.0a0' + libcurl: '>=8.4.0,<9.0a0' libgcc-ng: '>=12' - libgrpc: '>=1.54.2,<1.55.0a0' - libprotobuf: '>=3.21.12,<3.22.0a0' + libgrpc: '>=1.59.2,<1.60.0a0' + libprotobuf: '>=4.24.4,<4.24.5.0a0' libstdcxx-ng: '>=12' - openssl: '>=3.1.1,<4.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.12.0-hac9eb74_1.conda + openssl: '>=3.1.4,<4.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.12.0-h5206363_4.conda hash: - md5: 0dee716254497604762957076ac76540 - sha256: d133fdd36924ac5068ebfec493ec6a888aeb328060b4bc1c1928340047ebce26 + md5: b5eb63d2683102be45d17c55021282f6 + sha256: 82a7d211d0df165b073f9e8ba6d789c4b1c7c4882d546ca12d40f201fc3496fc category: main optional: false - name: libgoogle-cloud @@ -7729,56 +7824,72 @@ package: manager: conda platform: osx-arm64 dependencies: - libabseil: '>=20230125.3,<20230126.0a0' + __osx: '>=10.9' + libabseil: '>=20230802.1,<20230803.0a0' libcrc32c: '>=1.1.2,<1.2.0a0' - libcurl: '>=8.1.2,<9.0a0' - libcxx: '>=15.0.7' - libgrpc: '>=1.54.2,<1.55.0a0' - libprotobuf: '>=3.21.12,<3.22.0a0' - openssl: '>=3.1.1,<4.0a0' - url: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-2.12.0-he22f4c0_1.conda + libcurl: '>=8.4.0,<9.0a0' + libcxx: '>=16.0.6' + libgrpc: '>=1.59.2,<1.60.0a0' + libprotobuf: '>=4.24.4,<4.24.5.0a0' + openssl: '>=3.1.4,<4.0a0' + url: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-2.12.0-hfb399a7_4.conda hash: - md5: 0f0853e2cdd835d56c6e2d3e78e08692 - sha256: bbf6428fdc0428ba01f88b9ef3af75bab31e17eae113bc235615e70151940a40 + md5: d62901188ab756c841cbb9a80c6c3f3c + sha256: 22122939a462f64a82ca2f305c43e5e5cf5a55f1ae12979c2445f9dc196b7047 category: main optional: false - name: libgrpc - version: 1.54.3 + version: 1.59.3 manager: conda platform: linux-64 dependencies: - c-ares: '>=1.19.1,<2.0a0' - libabseil: '>=20230125.3,<20230126.0a0' + c-ares: '>=1.21.0,<2.0a0' + libabseil: '>=20230802.1,<20230803.0a0' libgcc-ng: '>=12' - libprotobuf: '>=3.21.12,<3.22.0a0' + libprotobuf: '>=4.24.4,<4.24.5.0a0' + libre2-11: '>=2023.6.2,<2024.0a0' libstdcxx-ng: '>=12' libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.1.1,<4.0a0' - re2: '>=2023.3.2,<2023.3.3.0a0' - zlib: '' - url: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.54.3-hb20ce57_0.conda + openssl: '>=3.1.4,<4.0a0' + re2: '' + url: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.59.3-hd6c4280_0.conda hash: - md5: 7af7c59ab24db007dfd82e0a3a343f66 - sha256: f5fea0c2eececb010529ac5863fbede05a2413ea8dc1a1c419db861f68ed66d7 + md5: 896c137eaf0c22f2fef58332eb4a4b83 + sha256: 3f95a2792e565b628cb284de92017a37a1cddc4a3f83453b8f75d9adc9f8cfdd category: main optional: false - name: libgrpc - version: 1.54.3 + version: 1.59.3 manager: conda platform: osx-arm64 dependencies: - c-ares: '>=1.19.1,<2.0a0' - libabseil: '>=20230125.3,<20230126.0a0' - libcxx: '>=15.0.7' - libprotobuf: '>=3.21.12,<3.22.0a0' + __osx: '>=10.9' + c-ares: '>=1.21.0,<2.0a0' + libabseil: '>=20230802.1,<20230803.0a0' + libcxx: '>=16.0.6' + libprotobuf: '>=4.24.4,<4.24.5.0a0' + libre2-11: '>=2023.6.2,<2024.0a0' libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.1.1,<4.0a0' - re2: '>=2023.3.2,<2023.3.3.0a0' - zlib: '' - url: https://conda.anaconda.org/conda-forge/osx-arm64/libgrpc-1.54.3-h0a338ca_0.conda + openssl: '>=3.1.4,<4.0a0' + re2: '' + url: https://conda.anaconda.org/conda-forge/osx-arm64/libgrpc-1.59.3-hbcf6334_0.conda hash: - md5: 181d9f230758e567c2a5c947ecc5c813 - sha256: 8340196ab92b0e4ca136d0ab9278e96caf8594c5065ef33dc9f5c3a4e659521d + md5: e9c7cbc84af929dd47501629a5e19713 + sha256: 54cacd1fc7503d48c135301a775568f15089b537b3c56804767c627a89a20c30 + category: main + optional: false +- name: libhwloc + version: 2.9.3 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + libxml2: '>=2.11.5,<3.0.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.9.3-default_h554bfaf_1009.conda + hash: + md5: f36ddc11ca46958197a45effdd286e45 + sha256: 6950fee24766d03406e0f6f965262a5d98829c71eed8d1004f313892423b559b category: main optional: false - name: libiconv @@ -7787,10 +7898,10 @@ package: platform: linux-64 dependencies: libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_1.conda + url: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda hash: - md5: 4b06b43d0eca61db2899e4d7a289c302 - sha256: a9364735ef2542558ed59aa5f404707dab674df465cbdf312edeaf5e827b55ed + md5: d66573916ffcf376178462f1b61c941e + sha256: 8ac2f6a9f186e76539439e50505d98581472fedb347a20e7d1f36429849f05c9 category: main optional: false - name: libiconv @@ -7798,10 +7909,10 @@ package: manager: conda platform: osx-arm64 dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.17-h0d3ecfb_1.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.17-h0d3ecfb_2.conda hash: - md5: df3fbfc1fddc8fa40122206a4e47ea4e - sha256: d407ebd1e72ebb20716ea325cdebdd018bdc3c3d3424e67825db3eaa8809164e + md5: 69bda57310071cf6d2b86caf11573d2d + sha256: bc7de5097b97bcafcf7deaaed505f7ce02f648aac8eccc0d5a47cc599a1d0304 category: main optional: false - name: libjpeg-turbo @@ -7897,7 +8008,7 @@ package: libcurl: '>=8.5.0,<9.0a0' libgcc-ng: '>=12' libstdcxx-ng: '>=12' - libxml2: '>=2.12.2,<2.13.0a0' + libxml2: '>=2.12.2,<3.0.0a0' libzip: '>=1.10.1,<2.0a0' libzlib: '>=1.2.13,<1.3.0a0' openssl: '>=3.2.0,<4.0a0' @@ -7922,7 +8033,7 @@ package: libaec: '>=1.1.2,<2.0a0' libcurl: '>=8.5.0,<9.0a0' libcxx: '>=16.0.6' - libxml2: '>=2.12.2,<2.13.0a0' + libxml2: '>=2.12.2,<3.0.0a0' libzip: '>=1.10.1,<2.0a0' libzlib: '>=1.2.13,<1.3.0a0' openssl: '>=3.2.0,<4.0a0' @@ -7968,6 +8079,18 @@ package: sha256: fc97aaaf0c6d0f508be313d86c2705b490998d382560df24be918b8e977802cd category: main optional: false +- name: libnl + version: 3.9.0 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + url: https://conda.anaconda.org/conda-forge/linux-64/libnl-3.9.0-hd590300_0.conda + hash: + md5: d27c451db4f1d3c983c78167d2fdabc2 + sha256: aae03117811e704c3f3666e8374dd2e632f1d78bef0c27330e7298b24004819e + category: main + optional: false - name: libnsl version: 2.0.1 manager: conda @@ -8068,35 +8191,66 @@ package: openssl: '>=3.2.0,<4.0a0' url: https://conda.anaconda.org/conda-forge/osx-arm64/libpq-16.1-h0f8b458_7.conda hash: - md5: c94283997b390fc897936edf2c1f0d55 - sha256: 2e71c5efc57ec7da59efcb747b615ccde1f70d12eb25128720817a3f3482d622 + md5: c94283997b390fc897936edf2c1f0d55 + sha256: 2e71c5efc57ec7da59efcb747b615ccde1f70d12eb25128720817a3f3482d622 + category: main + optional: false +- name: libprotobuf + version: 4.24.4 + manager: conda + platform: linux-64 + dependencies: + libabseil: '>=20230802.1,<20230803.0a0' + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + libzlib: '>=1.2.13,<1.3.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-4.24.4-hf27288f_0.conda + hash: + md5: 1a0287ab734591ad63603734f923016b + sha256: 3e0f6454190abb27edd2aeb724688ee440de133edb02cbb17d5609ba36aa8be0 + category: main + optional: false +- name: libprotobuf + version: 4.24.4 + manager: conda + platform: osx-arm64 + dependencies: + __osx: '>=10.9' + libabseil: '>=20230802.1,<20230803.0a0' + libcxx: '>=16.0.6' + libzlib: '>=1.2.13,<1.3.0a0' + url: https://conda.anaconda.org/conda-forge/osx-arm64/libprotobuf-4.24.4-hc9861d8_0.conda + hash: + md5: ac5438d981e105e053b341eb30c44273 + sha256: 2e81e023f463ef239e2fb7f56a4e8eed61a1d8e9ca3f2f07bec1668cc369b2ce category: main optional: false -- name: libprotobuf - version: 3.21.12 +- name: libre2-11 + version: 2023.06.02 manager: conda platform: linux-64 dependencies: + libabseil: '>=20230802.1,<20230803.0a0' libgcc-ng: '>=12' libstdcxx-ng: '>=12' - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-3.21.12-hfc55251_2.conda + url: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2023.06.02-h7a70373_0.conda hash: - md5: e3a7d4ba09b8dc939b98fef55f539220 - sha256: 2df8888c51c23dedc831ba4378bad259e95c3a20a6408f54926a6a6f629f6153 + md5: c0e7eacd9694db3ef5ef2979a7deea70 + sha256: 22b0b2169c80b65665ba0d6418bd5d3d4c7d89915ee0f9613403efe871c27db8 category: main optional: false -- name: libprotobuf - version: 3.21.12 +- name: libre2-11 + version: 2023.06.02 manager: conda platform: osx-arm64 dependencies: - libcxx: '>=15.0.7' - libzlib: '>=1.2.13,<1.3.0a0' - url: https://conda.anaconda.org/conda-forge/osx-arm64/libprotobuf-3.21.12-ha614eb4_2.conda + __osx: '>=10.9' + libabseil: '>=20230802.1,<20230803.0a0' + libcxx: '>=16.0.6' + url: https://conda.anaconda.org/conda-forge/osx-arm64/libre2-11-2023.06.02-h1753957_0.conda hash: - md5: 440548f3f8e573a427553ee877c5f6c3 - sha256: 3910b38529c44119a293fccc93021cab6fe73ebbdaa8194dcf43a711a433bc55 + md5: 3b8652db4bf4e27fa1446526f7a78498 + sha256: 8bafee8f8ef27f4cb0afffe5404dd1abfc5fd6eac1ee9b4847a756d440bd7aa7 category: main optional: false - name: librsvg @@ -8109,7 +8263,7 @@ package: gettext: '>=0.21.1,<1.0a0' libgcc-ng: '>=12' libglib: '>=2.78.1,<3.0a0' - libxml2: '>=2.12.1,<2.13.0a0' + libxml2: '>=2.12.1,<3.0.0a0' pango: '>=1.50.14,<2.0a0' url: https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.56.3-he3f83f7_1.conda hash: @@ -8126,7 +8280,7 @@ package: gdk-pixbuf: '>=2.42.10,<3.0a0' gettext: '>=0.21.1,<1.0a0' libglib: '>=2.78.1,<3.0a0' - libxml2: '>=2.12.1,<2.13.0a0' + libxml2: '>=2.12.1,<3.0.0a0' pango: '>=1.50.14,<2.0a0' url: https://conda.anaconda.org/conda-forge/osx-arm64/librsvg-2.56.3-h55a2576_1.conda hash: @@ -8221,7 +8375,7 @@ package: librttopo: '>=1.1.0,<1.2.0a0' libsqlite: '>=3.44.2,<4.0a0' libstdcxx-ng: '>=12' - libxml2: '>=2.12.2,<2.13.0a0' + libxml2: '>=2.12.2,<3.0.0a0' libzlib: '>=1.2.13,<1.3.0a0' proj: '>=9.3.1,<9.3.2.0a0' sqlite: '' @@ -8244,7 +8398,7 @@ package: libiconv: '>=1.17,<2.0a0' librttopo: '>=1.1.0,<1.2.0a0' libsqlite: '>=3.44.2,<4.0a0' - libxml2: '>=2.12.2,<2.13.0a0' + libxml2: '>=2.12.2,<3.0.0a0' libzlib: '>=1.2.13,<1.3.0a0' proj: '>=9.3.1,<9.3.2.0a0' sqlite: '' @@ -8319,7 +8473,7 @@ package: category: main optional: false - name: libthrift - version: 0.18.1 + version: 0.19.0 manager: conda platform: linux-64 dependencies: @@ -8327,26 +8481,26 @@ package: libgcc-ng: '>=12' libstdcxx-ng: '>=12' libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.1.1,<4.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.18.1-h8fd135c_2.conda + openssl: '>=3.1.3,<4.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.19.0-hb90f79a_1.conda hash: - md5: bbf65f7688512872f063810623b755dc - sha256: 06cd0ccd95d19389d0b0146402ac5536e4bb0abd08a88650f95dd18debd62677 + md5: 8cdb7d41faa0260875ba92414c487e2d + sha256: 719add2cf20d144ef9962c57cd0f77178259bdb3aae1cded2e2b2b7c646092f5 category: main optional: false - name: libthrift - version: 0.18.1 + version: 0.19.0 manager: conda platform: osx-arm64 dependencies: libcxx: '>=15.0.7' libevent: '>=2.1.12,<2.1.13.0a0' libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.1.1,<4.0a0' - url: https://conda.anaconda.org/conda-forge/osx-arm64/libthrift-0.18.1-ha061701_2.conda + openssl: '>=3.1.3,<4.0a0' + url: https://conda.anaconda.org/conda-forge/osx-arm64/libthrift-0.19.0-h026a170_1.conda hash: - md5: c1a4bb91d705cc903de58a95aa35ab5b - sha256: 4b3cbe168c7fb070a79960fd20bdc60b309d79805619ed93cdf93f71bdc88bf6 + md5: 4b8b21eb00d9019e9fa351141da2a6ac + sha256: b2c1b30d36f0412c0c0313db76a0236d736f3a9b887b8ed16182f531e4b7cb80 category: main optional: false - name: libtiff @@ -8388,6 +8542,47 @@ package: sha256: b18ef36eb90f190db22c56ae5a080bccc16669c8f5b795a6211d7b0c00c18ff7 category: main optional: false +- name: libtorch + version: 2.1.0 + manager: conda + platform: linux-64 + dependencies: + __glibc: '>=2.17,<3.0.a0' + _openmp_mutex: '>=4.5' + libcblas: '>=3.9.0,<4.0a0' + libgcc-ng: '>=12' + libprotobuf: '>=4.24.4,<4.24.5.0a0' + libstdcxx-ng: '>=12' + libuv: '>=1.46.0,<2.0a0' + mkl: '>=2023.2.0,<2024.0a0' + sleef: '>=3.5.1,<4.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/libtorch-2.1.0-cpu_mkl_hadc400e_102.conda + hash: + md5: bfb8dc68afc5fff1d3123851b9514a30 + sha256: 1121cc2ba89fea59b5619a59baf81c328bc29e5ba42edb53895c590c6eca00be + category: main + optional: false +- name: libtorch + version: 2.1.0 + manager: conda + platform: osx-arm64 + dependencies: + libcblas: '>=3.9.0,<4.0a0' + libcxx: '>=14' + liblapack: '>=3.9.0,<4.0a0' + libprotobuf: '>=4.24.4,<4.24.5.0a0' + libuv: '>=1.46.0,<2.0a0' + llvm-openmp: '>=16.0.6' + numpy: '>=1.22.4,<2.0a0' + python: '>=3.9,<3.10.0a0' + python_abi: 3.9.* + sleef: '>=3.5.1,<4.0a0' + url: https://conda.anaconda.org/conda-forge/osx-arm64/libtorch-2.1.0-cpu_generic_hd9c544a_2.conda + hash: + md5: c7a4103694d0b4c2005339c6c56970cc + sha256: 091c22fbbcb178a7e8e84cd3597bca98224398d2e5f24a6ca0cdf38f8f544aac + category: main + optional: false - name: libutf8proc version: 2.8.0 manager: conda @@ -8531,8 +8726,20 @@ package: sha256: 6eaa87760ff3e91bb5524189700139db46f8946ff6331f4e571e4a9356edbb0d category: main optional: false +- name: libxcrypt + version: 4.4.36 + manager: conda + platform: linux-64 + dependencies: + libgcc-ng: '>=12' + url: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + hash: + md5: 5aa797f8787fe7a17d1b0821485b5adc + sha256: 6ae68e0b86423ef188196fff6207ed0c8195dd84273cb5623b85aa08033a410c + category: main + optional: false - name: libxml2 - version: 2.12.3 + version: 2.12.4 manager: conda platform: linux-64 dependencies: @@ -8541,14 +8748,14 @@ package: libiconv: '>=1.17,<2.0a0' libzlib: '>=1.2.13,<1.3.0a0' xz: '>=5.2.6,<6.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.12.3-h232c23b_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.12.4-h232c23b_1.conda hash: - md5: bc6ac4c0cea148d924f621985bc3892b - sha256: 31dd757689a1a28e42021208b6c740e84bcfdfee213a39c9bcc0dfbc33acf7a5 + md5: 53e951fab78d7e3bab40745f7b3d1620 + sha256: f6828b44da29bbfbf367ddbc72902e84ea5f5de933be494d6aac4a35826afed0 category: main optional: false - name: libxml2 - version: 2.12.3 + version: 2.12.4 manager: conda platform: osx-arm64 dependencies: @@ -8556,10 +8763,10 @@ package: libiconv: '>=1.17,<2.0a0' libzlib: '>=1.2.13,<1.3.0a0' xz: '>=5.2.6,<6.0a0' - url: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.12.3-h0d0cfa8_0.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.12.4-h0d0cfa8_1.conda hash: - md5: 84e330ed40b5bf8e95a65529ccb94a14 - sha256: c23c34af9037abc6749d59271fbdbb584f0cdcd87e17c2f011f099e63e0d7a7d + md5: 2ce68362b6ba7e78a066abce22811df7 + sha256: 70863a5554cbdd573cf852571a6ef015e5376f8969068725523a01dff7ff4de3 category: main optional: false - name: libzip @@ -8663,7 +8870,7 @@ package: category: main optional: false - name: lz4 - version: 4.3.2 + version: 4.3.3 manager: conda platform: linux-64 dependencies: @@ -8671,24 +8878,24 @@ package: lz4-c: '>=1.9.3,<1.10.0a0' python: '>=3.9,<3.10.0a0' python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/linux-64/lz4-4.3.2-py39h79d96da_1.conda + url: https://conda.anaconda.org/conda-forge/linux-64/lz4-4.3.3-py39h79d96da_0.conda hash: - md5: 098feecfa5d91726caf654b67c9e7190 - sha256: e99b7cab72a80429d6231149c18266a2b27318aa838aa1b29c0944dbe5efc69c + md5: 5605c39626be9ccfd3e5ad557d909450 + sha256: 85b0f58f4ab75bbfbf16036487f66aac0d577f2894b52ee2e86a82c0d04e8131 category: main optional: false - name: lz4 - version: 4.3.2 + version: 4.3.3 manager: conda platform: osx-arm64 dependencies: lz4-c: '>=1.9.3,<1.10.0a0' python: '>=3.9,<3.10.0a0' python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-4.3.2-py39h0d94542_1.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-4.3.3-py39hf99b9d6_0.conda hash: - md5: 53809d9356529ecf1d2ccfde9dbf1c64 - sha256: aa0c9d0b4fee03e0e05a2e3767c30ff3fdb7716e80a3eb22d29a778bec7e3134 + md5: 2d222ce85e5756600f76046e8d2ec3ef + sha256: b326eb7233dda33b191952cbfd30b3eef0eb499c049c0cb320cabe21eaf203e8 category: main optional: false - name: lz4-c @@ -8826,29 +9033,29 @@ package: category: main optional: false - name: markdown - version: 3.5.1 + version: 3.5.2 manager: conda platform: linux-64 dependencies: importlib-metadata: '>=4.4' python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/markdown-3.5.1-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/markdown-3.5.2-pyhd8ed1ab_0.conda hash: - md5: 323495027ffa625701129acebf861412 - sha256: 35e8990504cf8dc7e2bb63efd855fb0a0d5c0d77bf79403235e757c24a83ec1d + md5: db7b48fa4eeb0c21b2f3f5b1f7d9ebcf + sha256: fbc70dc01b361fe46e7b4e102e725f99ba60bf9903c2fa86b53ad6b70ded677a category: main optional: false - name: markdown - version: 3.5.1 + version: 3.5.2 manager: conda platform: osx-arm64 dependencies: python: '>=3.6' importlib-metadata: '>=4.4' - url: https://conda.anaconda.org/conda-forge/noarch/markdown-3.5.1-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/markdown-3.5.2-pyhd8ed1ab_0.conda hash: - md5: 323495027ffa625701129acebf861412 - sha256: 35e8990504cf8dc7e2bb63efd855fb0a0d5c0d77bf79403235e757c24a83ec1d + md5: db7b48fa4eeb0c21b2f3f5b1f7d9ebcf + sha256: fbc70dc01b361fe46e7b4e102e725f99ba60bf9903c2fa86b53ad6b70ded677a category: main optional: false - name: markdown-it-py @@ -8907,29 +9114,29 @@ package: category: main optional: false - name: marshmallow - version: 3.20.1 + version: 3.20.2 manager: conda platform: linux-64 dependencies: packaging: '>=17.0' python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/marshmallow-3.20.1-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/marshmallow-3.20.2-pyhd8ed1ab_0.conda hash: - md5: 0a33d141ff5f5dfbf9306f8408e9b520 - sha256: ff761f3a2dc70b8451e482b38222da195143d75c83f7607b72eddda57b5eec12 + md5: 1c5717a601c50f58452839773f3a1485 + sha256: 9f9eb62e87eae91de3763d519475cc883ebe2fdc3e429283cd2abf8cba6120d0 category: main optional: false - name: marshmallow - version: 3.20.1 + version: 3.20.2 manager: conda platform: osx-arm64 dependencies: python: '>=3.7' packaging: '>=17.0' - url: https://conda.anaconda.org/conda-forge/noarch/marshmallow-3.20.1-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/marshmallow-3.20.2-pyhd8ed1ab_0.conda hash: - md5: 0a33d141ff5f5dfbf9306f8408e9b520 - sha256: ff761f3a2dc70b8451e482b38222da195143d75c83f7607b72eddda57b5eec12 + md5: 1c5717a601c50f58452839773f3a1485 + sha256: 9f9eb62e87eae91de3763d519475cc883ebe2fdc3e429283cd2abf8cba6120d0 category: main optional: false - name: marshmallow-enum @@ -9118,31 +9325,31 @@ package: category: main optional: false - name: mdurl - version: 0.1.0 + version: 0.1.2 manager: conda platform: linux-64 dependencies: python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.0-pyhd8ed1ab_0.tar.bz2 + url: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda hash: - md5: f8dab71fdc13b1bf29a01248b156d268 - sha256: c678b9194e025b1fb665bec30ee20aab93399203583875b1dcc0a3b52a8f5523 + md5: 776a8dd9e824f77abac30e6ef43a8f7a + sha256: 64073dfb6bb429d52fff30891877b48c7ec0f89625b1bf844905b66a81cce6e1 category: main optional: false - name: mdurl - version: 0.1.0 + version: 0.1.2 manager: conda platform: osx-arm64 dependencies: python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.0-pyhd8ed1ab_0.tar.bz2 + url: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda hash: - md5: f8dab71fdc13b1bf29a01248b156d268 - sha256: c678b9194e025b1fb665bec30ee20aab93399203583875b1dcc0a3b52a8f5523 + md5: 776a8dd9e824f77abac30e6ef43a8f7a + sha256: 64073dfb6bb429d52fff30891877b48c7ec0f89625b1bf844905b66a81cce6e1 category: main optional: false - name: minizip - version: 4.0.3 + version: 4.0.4 manager: conda platform: linux-64 dependencies: @@ -9151,32 +9358,31 @@ package: libiconv: '>=1.17,<2.0a0' libstdcxx-ng: '>=12' libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.1.4,<4.0a0' + openssl: '>=3.2.0,<4.0a0' xz: '>=5.2.6,<6.0a0' zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/minizip-4.0.3-h0ab5242_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/minizip-4.0.4-h0ab5242_0.conda hash: - md5: 3f9b5f4400be3cee11b426a8cd653b7c - sha256: cf33c24fa8375d17fad4e1da631b4c2e8ed9a109480fa45c82fbfa2a7c5bdd41 + md5: 813bc75d9c33ddd9c9d5b8d9c560e152 + sha256: e25d24c4841aa85ed2153f826ae58e56ae4d12704fd9e52005a3d7edfeb3b95a category: main optional: false - name: minizip - version: 4.0.3 + version: 4.0.4 manager: conda platform: osx-arm64 dependencies: - __osx: '>=10.9' bzip2: '>=1.0.8,<2.0a0' - libcxx: '>=16.0.6' + libcxx: '>=15' libiconv: '>=1.17,<2.0a0' libzlib: '>=1.2.13,<1.3.0a0' - openssl: '>=3.1.4,<4.0a0' + openssl: '>=3.2.0,<4.0a0' xz: '>=5.2.6,<6.0a0' zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/osx-arm64/minizip-4.0.3-hd5cad61_0.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/minizip-4.0.4-hc35e051_0.conda hash: - md5: 8f1bf9ea12bca129b7a3d49eec9efd76 - sha256: 9db88831aa3485d98cad155d989d4de45edfec13e6cbe81b0093ba7e6ba8817d + md5: 293ad87f065d0e1dc011ccafeb1bb0be + sha256: 0fbf65095148cfe9dab8b32b533b3d2752a66bbf459816345773ed73844a448b category: main optional: false - name: mistune @@ -9204,17 +9410,17 @@ package: category: main optional: false - name: mkl - version: 2022.2.1 + version: 2023.2.0 manager: conda platform: linux-64 dependencies: _openmp_mutex: '>=4.5' - llvm-openmp: '>=15.0.6' + llvm-openmp: '>=17.0.3' tbb: 2021.* - url: https://conda.anaconda.org/conda-forge/linux-64/mkl-2022.2.1-h84fe81f_16997.conda + url: https://conda.anaconda.org/conda-forge/linux-64/mkl-2023.2.0-h84fe81f_50496.conda hash: - md5: a7ce56d5757f5b57e7daabe703ade5bb - sha256: 5322750d5e96ff5d96b1457db5fb6b10300f2bc4030545e940e17b57c4e96d00 + md5: 81d4a1a57d618adf0152db973d93b2ad + sha256: 046073737bf73153b0c39e343b197cdf0b7867d336962369407465a17ea5979a category: main optional: false - name: ml_dtypes @@ -9394,27 +9600,27 @@ package: category: main optional: false - name: more-itertools - version: 10.1.0 + version: 10.2.0 manager: conda platform: linux-64 dependencies: python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.1.0-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.2.0-pyhd8ed1ab_0.conda hash: - md5: 8549fafed0351bbfaa1ddaa15fdf9b4e - sha256: 07ce65497dec537e490992758934ddbc4fb5ed9285b41387a7cca966f1a98a0f + md5: d5c98e9706fdc5328d49a9bf2ce5fb42 + sha256: 9e49e9484ff279453f0b55323a3f0c7cb97440c74f69eecda1f4ad29fae5cd3c category: main optional: false - name: more-itertools - version: 10.1.0 + version: 10.2.0 manager: conda platform: osx-arm64 dependencies: python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.1.0-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.2.0-pyhd8ed1ab_0.conda hash: - md5: 8549fafed0351bbfaa1ddaa15fdf9b4e - sha256: 07ce65497dec537e490992758934ddbc4fb5ed9285b41387a7cca966f1a98a0f + md5: d5c98e9706fdc5328d49a9bf2ce5fb42 + sha256: 9e49e9484ff279453f0b55323a3f0c7cb97440c74f69eecda1f4ad29fae5cd3c category: main optional: false - name: mpc @@ -9824,35 +10030,35 @@ package: category: main optional: false - name: nbconvert - version: 7.12.0 + version: 7.14.2 manager: conda platform: linux-64 dependencies: - nbconvert-core: 7.12.0 - nbconvert-pandoc: 7.12.0 + nbconvert-core: 7.14.2 + nbconvert-pandoc: 7.14.2 python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.12.0-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.14.2-pyhd8ed1ab_0.conda hash: - md5: 364e28ab12477494e72839aaa588073d - sha256: 0137330ab16bddf1fcaf60c0501c6145705b775fd547823708ed84364c934b76 + md5: 0ac429dbe14800f8cb97b892b107bc85 + sha256: 3fd752441d18a2f7fe19a327a767bbfa71092e66bef6eac0bf74de42166bc19e category: main optional: false - name: nbconvert - version: 7.12.0 + version: 7.14.2 manager: conda platform: osx-arm64 dependencies: python: '>=3.8' - nbconvert-core: 7.12.0 - nbconvert-pandoc: 7.12.0 - url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.12.0-pyhd8ed1ab_0.conda + nbconvert-core: 7.14.2 + nbconvert-pandoc: 7.14.2 + url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.14.2-pyhd8ed1ab_0.conda hash: - md5: 364e28ab12477494e72839aaa588073d - sha256: 0137330ab16bddf1fcaf60c0501c6145705b775fd547823708ed84364c934b76 + md5: 0ac429dbe14800f8cb97b892b107bc85 + sha256: 3fd752441d18a2f7fe19a327a767bbfa71092e66bef6eac0bf74de42166bc19e category: main optional: false - name: nbconvert-core - version: 7.12.0 + version: 7.14.2 manager: conda platform: linux-64 dependencies: @@ -9873,14 +10079,14 @@ package: python: '>=3.8' tinycss2: '' traitlets: '>=5.0' - url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.12.0-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.14.2-pyhd8ed1ab_0.conda hash: - md5: 4d67c68fd0d130091ada039bc2d81b33 - sha256: 04c3ac88701d98d58139569e4899c3254bf99908179a898cc3dcadd8c0ef44b4 + md5: 631800aa8cc7ccf61e70087355d95827 + sha256: ba3e9a42ea03411d77ac28f14ce9bc6f70710ce1a8f4a970322b2daa91e47ce5 category: main optional: false - name: nbconvert-core - version: 7.12.0 + version: 7.14.2 manager: conda platform: osx-arm64 dependencies: @@ -9901,38 +10107,38 @@ package: pygments: '>=2.4.1' nbclient: '>=0.5.0' mistune: '>=2.0.3,<4' - url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.12.0-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.14.2-pyhd8ed1ab_0.conda hash: - md5: 4d67c68fd0d130091ada039bc2d81b33 - sha256: 04c3ac88701d98d58139569e4899c3254bf99908179a898cc3dcadd8c0ef44b4 + md5: 631800aa8cc7ccf61e70087355d95827 + sha256: ba3e9a42ea03411d77ac28f14ce9bc6f70710ce1a8f4a970322b2daa91e47ce5 category: main optional: false - name: nbconvert-pandoc - version: 7.12.0 + version: 7.14.2 manager: conda platform: linux-64 dependencies: - nbconvert-core: 7.12.0 + nbconvert-core: 7.14.2 pandoc: '' python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.12.0-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.14.2-pyhd8ed1ab_0.conda hash: - md5: 460d7cac50322a39b61a833885a6a8d5 - sha256: ebf25caef387ec79f8d8f6771240d451ffaebcc2cdd127c0b152c6697d661d10 + md5: 27bb156a0e59f9c3b656e3e289475fbd + sha256: f6e7154d9bd74a9c174996b450943571842ffba61d7b2ccead9015a32a795dff category: main optional: false - name: nbconvert-pandoc - version: 7.12.0 + version: 7.14.2 manager: conda platform: osx-arm64 dependencies: pandoc: '' python: '>=3.8' - nbconvert-core: 7.12.0 - url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.12.0-pyhd8ed1ab_0.conda + nbconvert-core: 7.14.2 + url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.14.2-pyhd8ed1ab_0.conda hash: - md5: 460d7cac50322a39b61a833885a6a8d5 - sha256: ebf25caef387ec79f8d8f6771240d451ffaebcc2cdd127c0b152c6697d661d10 + md5: 27bb156a0e59f9c3b656e3e289475fbd + sha256: f6e7154d9bd74a9c174996b450943571842ffba61d7b2ccead9015a32a795dff category: main optional: false - name: nbformat @@ -9992,27 +10198,27 @@ package: category: main optional: false - name: nest-asyncio - version: 1.5.8 + version: 1.5.9 manager: conda platform: linux-64 dependencies: python: '>=3.5' - url: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.5.8-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.5.9-pyhd8ed1ab_0.conda hash: - md5: a4f0e4519bc50eee4f53f689be9607f7 - sha256: d7b795b4e754136841c6da3f9fa1a0f7ec37bc7167e7dd68c5b45e657133e008 + md5: 6c59cb840d511a1a997998d55e68516c + sha256: 4f28afd67be5cabcc584fe51ce2dbefe15d6886c7a6bb862aae2e1f3d9239e5f category: main optional: false - name: nest-asyncio - version: 1.5.8 + version: 1.5.9 manager: conda platform: osx-arm64 dependencies: python: '>=3.5' - url: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.5.8-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.5.9-pyhd8ed1ab_0.conda hash: - md5: a4f0e4519bc50eee4f53f689be9607f7 - sha256: d7b795b4e754136841c6da3f9fa1a0f7ec37bc7167e7dd68c5b45e657133e008 + md5: 6c59cb840d511a1a997998d55e68516c + sha256: 4f28afd67be5cabcc584fe51ce2dbefe15d6886c7a6bb862aae2e1f3d9239e5f category: main optional: false - name: networkx @@ -10259,40 +10465,41 @@ package: category: main optional: false - name: onnx - version: 1.14.0 + version: 1.15.0 manager: conda platform: linux-64 dependencies: libgcc-ng: '>=12' - libprotobuf: '>=3.21.12,<3.22.0a0' + libprotobuf: '>=4.24.4,<4.24.5.0a0' libstdcxx-ng: '>=12' - numpy: '>=1.21.6,<2.0a0' + numpy: '>=1.22.4,<2.0a0' protobuf: '' python: '>=3.9,<3.10.0a0' python_abi: 3.9.* typing-extensions: '>=3.6.2.1' - url: https://conda.anaconda.org/conda-forge/linux-64/onnx-1.14.0-py39h5cf8293_1.conda + url: https://conda.anaconda.org/conda-forge/linux-64/onnx-1.15.0-py39h868dac8_0.conda hash: - md5: f328acd6bba2c62d2751ba1821c7fa6a - sha256: a8da023239f0028f486ea5b3bbd0e96bda75ddedd56a650af3ec105a2b163209 + md5: b7daae3b7f6ac91b5d5a9c046b7adbdf + sha256: 83370d694316b40036270969cf8c3cd3bd3340ddcdc72a79cc4208f43a402536 category: main optional: false - name: onnx - version: 1.14.0 + version: 1.15.0 manager: conda platform: osx-arm64 dependencies: - libcxx: '>=15.0.7' - libprotobuf: '>=3.21.12,<3.22.0a0' - numpy: '>=1.21.6,<2.0a0' + __osx: '>=10.9' + libcxx: '>=16.0.6' + libprotobuf: '>=4.24.4,<4.24.5.0a0' + numpy: '>=1.22.4,<2.0a0' protobuf: '' python: '>=3.9,<3.10.0a0' python_abi: 3.9.* typing-extensions: '>=3.6.2.1' - url: https://conda.anaconda.org/conda-forge/osx-arm64/onnx-1.14.0-py39h09fa150_1.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/onnx-1.15.0-py39h0aa7e6e_0.conda hash: - md5: 7408be0d67077506377d7f98fe12c211 - sha256: 5dba0d4bc4cb7cc9ab2969112c95ed85641550d7f1c5687864249f77b9b37c85 + md5: 2d86c4daacb5e33742f2b4bcaaccdb8d + sha256: fcfcdd5d11a5b39a9225b569befd354b1e76bbbc6d6c754206cd52738f5b0d7f category: main optional: false - name: onnxconverter-common @@ -10410,38 +10617,39 @@ package: category: main optional: false - name: orc - version: 1.9.0 + version: 1.9.2 manager: conda platform: linux-64 dependencies: libgcc-ng: '>=12' - libprotobuf: '>=3.21.12,<3.22.0a0' + libprotobuf: '>=4.24.4,<4.24.5.0a0' libstdcxx-ng: '>=12' libzlib: '>=1.2.13,<1.3.0a0' lz4-c: '>=1.9.3,<1.10.0a0' snappy: '>=1.1.10,<2.0a0' - zstd: '>=1.5.2,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/orc-1.9.0-h2f23424_1.conda + zstd: '>=1.5.5,<1.6.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/orc-1.9.2-h4b38347_0.conda hash: - md5: 9571eb3eb0f7fe8b59956a7786babbcd - sha256: 0948e8ce1b13f9e351df91996141fea60a0ace4d347667ed3dc59315427e0b8c + md5: 6e6f990b097d3e237e18a8e321d08484 + sha256: a06dd76bc0f2f99f5db5e348298c906007c3aa9e31b963f71d16e63f770b900b category: main optional: false - name: orc - version: 1.9.0 + version: 1.9.2 manager: conda platform: osx-arm64 dependencies: - libcxx: '>=15.0.7' - libprotobuf: '>=3.21.12,<3.22.0a0' + __osx: '>=10.9' + libcxx: '>=16.0.6' + libprotobuf: '>=4.24.4,<4.24.5.0a0' libzlib: '>=1.2.13,<1.3.0a0' lz4-c: '>=1.9.3,<1.10.0a0' snappy: '>=1.1.10,<2.0a0' - zstd: '>=1.5.2,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/osx-arm64/orc-1.9.0-ha98e9e8_1.conda + zstd: '>=1.5.5,<1.6.0a0' + url: https://conda.anaconda.org/conda-forge/osx-arm64/orc-1.9.2-h7c018df_0.conda hash: - md5: 951e399cfb5abae00231ad5e4f50e933 - sha256: 908d626a5d13d79ffb056841e1dde0823caac043a2c1d9d3ca7d3f7e6de7a68c + md5: 1ef4159e9686d95ce8ea9f1d4d999f29 + sha256: b1ad0f09dc69a8956079371d9853534f991f8311352e4e21503e6e5d20e4017b category: main optional: false - name: overrides @@ -10728,7 +10936,7 @@ package: category: main optional: false - name: paramiko - version: 3.3.1 + version: 3.4.0 manager: conda platform: linux-64 dependencies: @@ -10736,14 +10944,14 @@ package: cryptography: '>=3.3' pynacl: '>=1.5' python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/paramiko-3.3.1-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/paramiko-3.4.0-pyhd8ed1ab_0.conda hash: - md5: 8d4563992b27cdb8e673d1ca16962c9d - sha256: 9139c13cb7ea5729af862db5fb0523daa5900b9b4fa36637cd7f9c01be665f80 + md5: a5e792523b028b06d7ce6e65a6cd4a33 + sha256: 2e66359261954a79b66858c30e69ea6dd4380bf8bd733940527386b25e31dd13 category: main optional: false - name: paramiko - version: 3.3.1 + version: 3.4.0 manager: conda platform: osx-arm64 dependencies: @@ -10751,10 +10959,10 @@ package: cryptography: '>=3.3' bcrypt: '>=3.2' pynacl: '>=1.5' - url: https://conda.anaconda.org/conda-forge/noarch/paramiko-3.3.1-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/paramiko-3.4.0-pyhd8ed1ab_0.conda hash: - md5: 8d4563992b27cdb8e673d1ca16962c9d - sha256: 9139c13cb7ea5729af862db5fb0523daa5900b9b4fa36637cd7f9c01be665f80 + md5: a5e792523b028b06d7ce6e65a6cd4a33 + sha256: 2e66359261954a79b66858c30e69ea6dd4380bf8bd733940527386b25e31dd13 category: main optional: false - name: parso @@ -10936,12 +11144,12 @@ package: category: main optional: false - name: pillow - version: 10.1.0 + version: 10.2.0 manager: conda platform: linux-64 dependencies: freetype: '>=2.12.1,<3.0a0' - lcms2: '>=2.15,<3.0a0' + lcms2: '>=2.16,<3.0a0' libgcc-ng: '>=12' libjpeg-turbo: '>=3.0.0,<4.0a0' libtiff: '>=4.6.0,<4.7.0a0' @@ -10952,19 +11160,19 @@ package: python: '>=3.9,<3.10.0a0' python_abi: 3.9.* tk: '>=8.6.13,<8.7.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/pillow-10.1.0-py39had0adad_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/pillow-10.2.0-py39had0adad_0.conda hash: - md5: eeaa413fddccecb2ab7f747bdb55b07f - sha256: b474fbd1cb38a6c29372248809bbf339a2d2eff72c11601f05b19a3188dd372e + md5: 2972754dc054bb079d1d121918b5126f + sha256: 6936d54f9830ac66bee7b26187eb2297d80febe110e978cd9ae6a54e62ec6aaf category: main optional: false - name: pillow - version: 10.1.0 + version: 10.2.0 manager: conda platform: osx-arm64 dependencies: freetype: '>=2.12.1,<3.0a0' - lcms2: '>=2.15,<3.0a0' + lcms2: '>=2.16,<3.0a0' libjpeg-turbo: '>=3.0.0,<4.0a0' libtiff: '>=4.6.0,<4.7.0a0' libwebp-base: '>=1.3.2,<2.0a0' @@ -10974,63 +11182,63 @@ package: python: '>=3.9,<3.10.0a0' python_abi: 3.9.* tk: '>=8.6.13,<8.7.0a0' - url: https://conda.anaconda.org/conda-forge/osx-arm64/pillow-10.1.0-py39h755f0b7_0.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/pillow-10.2.0-py39h755f0b7_0.conda hash: - md5: aa7743f5af2e30366316554982dd2e3f - sha256: 706b71b8b4eed61593ee6adaf7e52a7ae690895cd138d8b73e1f0e5ba1707bd7 + md5: 9309cdb83d6c1617a58e57b61c556105 + sha256: 0e91b5467c3994760832fca4a45ed084853061b5c42a8015da4e19fed7e5b7aa category: main optional: false - name: pip - version: 23.3.1 + version: 23.3.2 manager: conda platform: linux-64 dependencies: python: '>=3.7' setuptools: '' wheel: '' - url: https://conda.anaconda.org/conda-forge/noarch/pip-23.3.1-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/pip-23.3.2-pyhd8ed1ab_0.conda hash: - md5: 2400c0b86889f43aa52067161e1fb108 - sha256: 435829a03e1c6009f013f29bb83de8b876c388820bf8cf69a7baeec25f6a3563 + md5: 8591c748f98dcc02253003533bc2e4b1 + sha256: 29096d1d53c61aeef518729add2f405df86b3629d1d738a35b15095e6a02eeed category: main optional: false - name: pip - version: 23.3.1 + version: 23.3.2 manager: conda platform: osx-arm64 dependencies: setuptools: '' wheel: '' python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/pip-23.3.1-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/pip-23.3.2-pyhd8ed1ab_0.conda hash: - md5: 2400c0b86889f43aa52067161e1fb108 - sha256: 435829a03e1c6009f013f29bb83de8b876c388820bf8cf69a7baeec25f6a3563 + md5: 8591c748f98dcc02253003533bc2e4b1 + sha256: 29096d1d53c61aeef518729add2f405df86b3629d1d738a35b15095e6a02eeed category: main optional: false - name: pixman - version: 0.42.2 + version: 0.43.0 manager: conda platform: linux-64 dependencies: libgcc-ng: '>=12' libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.42.2-h59595ed_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.43.0-h59595ed_0.conda hash: - md5: 700edd63ccd5fc66b70b1c028cea9a68 - sha256: ae917851474eb3b08812b02c9e945d040808523ec53f828aa74a90b0cdf15f57 + md5: 6b4b43013628634b6cfdee6b74fd696b + sha256: 07a5ffcd34e241f900433af4c6d4904518aab76add4e1e40a2c4bad93ae43f2b category: main optional: false - name: pixman - version: 0.42.2 + version: 0.43.0 manager: conda platform: osx-arm64 dependencies: - libcxx: '>=15.0.7' - url: https://conda.anaconda.org/conda-forge/osx-arm64/pixman-0.42.2-h13dd4ca_0.conda + libcxx: '>=15' + url: https://conda.anaconda.org/conda-forge/osx-arm64/pixman-0.43.0-hebf3989_0.conda hash: - md5: f96347021db6f33ccabe314ddeab62d4 - sha256: 90e60dc5604e356d47ef97b23b13759ef3d8b70fa2c637f4809d29851435d7d7 + md5: 6becbd8db3b0aa168259018c3806b814 + sha256: 4587c34eb9ada1ba82c3e9f8ffe7354dff6c385f0e8c94fe1bbc775f4ddba5c9 category: main optional: false - name: pkgutil-resolve-name @@ -11112,7 +11320,7 @@ package: category: main optional: false - name: polars - version: 0.19.19 + version: 0.20.5 manager: conda platform: linux-64 dependencies: @@ -11121,14 +11329,14 @@ package: python: '>=3.9,<3.10.0a0' python_abi: 3.9.* typing_extensions: '>=4.0.0' - url: https://conda.anaconda.org/conda-forge/linux-64/polars-0.19.19-py39h90d8ae4_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/polars-0.20.5-py39h927a070_0.conda hash: - md5: 9cefe0d7ce9208c3afbbac29951aff59 - sha256: 862ab4acd653e75da36a371c5c50fdb295b28b07d496b54b3d0f908858639968 + md5: 739c3045e502a5d8f4a2e9aba4756cde + sha256: 566669f4c2c5dd3af41ae5fb6d6ca1647cdf9b4facc2e4e606ec04aaa171a20e category: main optional: false - name: polars - version: 0.19.19 + version: 0.20.5 manager: conda platform: osx-arm64 dependencies: @@ -11136,10 +11344,10 @@ package: python: '>=3.9,<3.10.0a0' python_abi: 3.9.* typing_extensions: '>=4.0.0' - url: https://conda.anaconda.org/conda-forge/osx-arm64/polars-0.19.19-py39hf9b72a1_0.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/polars-0.20.5-py39he979254_0.conda hash: - md5: 64dc65feee192e9e9e9312ed63ba0460 - sha256: 5978bd41bda03050fe9578e3950afd746cf6473d6efc31d50892b76d1dd7b919 + md5: 54bc76cb1099824a7fbbbd5e1d5b4f34 + sha256: 05548cf53731537d518ab748fb2fc35670a6191ca3b626d1b023c2a6094a4a8f category: main optional: false - name: poppler @@ -11257,7 +11465,7 @@ package: krb5: '>=1.21.2,<1.22.0a0' libgcc-ng: '>=12' libpq: '16.1' - libxml2: '>=2.12.2,<2.13.0a0' + libxml2: '>=2.12.2,<3.0.0a0' libzlib: '>=1.2.13,<1.3.0a0' openssl: '>=3.2.0,<4.0a0' readline: '>=8.2,<9.0a0' @@ -11276,16 +11484,16 @@ package: dependencies: krb5: '>=1.21.2,<1.22.0a0' libpq: '16.1' - libxml2: '>=2.12.2,<2.13.0a0' + libxml2: '>=2.11.6,<3.0.0a0' libzlib: '>=1.2.13,<1.3.0a0' openssl: '>=3.2.0,<4.0a0' readline: '>=8.2,<9.0a0' tzcode: '' tzdata: '' - url: https://conda.anaconda.org/conda-forge/osx-arm64/postgresql-16.1-h1d0603d_7.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/postgresql-16.1-hc6ab77f_7.conda hash: - md5: 69c2cda2fa0234a7c1f823f696f8180d - sha256: 1b527b6d23626837879e9fd832f225d27366188d05880f598ea17f7495f21994 + md5: bba5c8dd372e5e2cf81bf71e6104fa7b + sha256: 5830151c5b72e95ecbff45b36a88405875514ea27cfce1b5381e98d6cee9974a category: main optional: false - name: pre-commit @@ -11323,29 +11531,29 @@ package: category: main optional: false - name: progressbar2 - version: 4.2.0 + version: 4.3.2 manager: conda platform: linux-64 dependencies: - python: '>=3.7' - python-utils: '>=3.0.0' - url: https://conda.anaconda.org/conda-forge/noarch/progressbar2-4.2.0-pyhd8ed1ab_0.tar.bz2 + python: '>=3.8' + python-utils: '>=3.8.1' + url: https://conda.anaconda.org/conda-forge/noarch/progressbar2-4.3.2-pyhd8ed1ab_0.conda hash: - md5: d883564cf1e9ba190f6b285036c5f949 - sha256: c7a0307fbe83694f84c4024b176aaa484be9277ba5fde82e24a02bc72f24a53f + md5: d55cd7adfc98beaef0c717c61fa3d294 + sha256: 349bfed6f822309cf10f1a42f637b9c417759a87a1d282b7f36a49c4394a3393 category: main optional: false - name: progressbar2 - version: 4.2.0 + version: 4.3.2 manager: conda platform: osx-arm64 dependencies: - python: '>=3.7' - python-utils: '>=3.0.0' - url: https://conda.anaconda.org/conda-forge/noarch/progressbar2-4.2.0-pyhd8ed1ab_0.tar.bz2 + python: '>=3.8' + python-utils: '>=3.8.1' + url: https://conda.anaconda.org/conda-forge/noarch/progressbar2-4.3.2-pyhd8ed1ab_0.conda hash: - md5: d883564cf1e9ba190f6b285036c5f949 - sha256: c7a0307fbe83694f84c4024b176aaa484be9277ba5fde82e24a02bc72f24a53f + md5: d55cd7adfc98beaef0c717c61fa3d294 + sha256: 349bfed6f822309cf10f1a42f637b9c417759a87a1d282b7f36a49c4394a3393 category: main optional: false - name: proj @@ -11511,36 +11719,39 @@ package: category: main optional: false - name: protobuf - version: 4.21.12 + version: 4.24.4 manager: conda platform: linux-64 dependencies: + libabseil: '>=20230802.1,<20230803.0a0' libgcc-ng: '>=12' - libprotobuf: '>=3.21.12,<3.22.0a0' + libprotobuf: '>=4.24.4,<4.24.5.0a0' libstdcxx-ng: '>=12' python: '>=3.9,<3.10.0a0' python_abi: 3.9.* setuptools: '' - url: https://conda.anaconda.org/conda-forge/linux-64/protobuf-4.21.12-py39h227be39_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/protobuf-4.24.4-py39h60f6b12_0.conda hash: - md5: 984b4ee0c3241d7ce715f8a731421073 - sha256: 22c02a0ae705170d169642056ce2cdf17a9c64b394dc24ed5133e9761bd4486f + md5: c25d58de8c0408f157ce2937bf6d2043 + sha256: 191a019f70fa8819842a93e6e1d4a371c3e3926740a47c51a6b840d95a61f601 category: main optional: false - name: protobuf - version: 4.21.12 + version: 4.24.4 manager: conda platform: osx-arm64 dependencies: - libcxx: '>=14.0.6' - libprotobuf: '>=3.21.12,<3.22.0a0' + __osx: '>=10.9' + libabseil: '>=20230802.1,<20230803.0a0' + libcxx: '>=16.0.6' + libprotobuf: '>=4.24.4,<4.24.5.0a0' python: '>=3.9,<3.10.0a0' python_abi: 3.9.* setuptools: '' - url: https://conda.anaconda.org/conda-forge/osx-arm64/protobuf-4.21.12-py39h23fbdae_0.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/protobuf-4.24.4-py39h6b23cf8_0.conda hash: - md5: 0b221c03b2823acffb6365b8cc31e887 - sha256: 54929bb589a9273e62eeefc1d2940716d1c3465b375222cd00e4b510d2844a3b + md5: 4a8be10067b23676d37dc60dceb2864a + sha256: f39a877accd33d477a973e211c105d81e5bc5ce0087f87b3fe0940c9d79eb78f category: main optional: false - name: protoc-gen-swagger @@ -11570,30 +11781,30 @@ package: category: main optional: false - name: psutil - version: 5.9.5 + version: 5.9.7 manager: conda platform: linux-64 dependencies: libgcc-ng: '>=12' python: '>=3.9,<3.10.0a0' python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.5-py39hd1e30aa_1.conda + url: https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.7-py39hd1e30aa_0.conda hash: - md5: c2e412b0f11e5983bcfc35d9beb91ecb - sha256: 02df40691ebe8632ad18ca641c70b74302b538922ccc86c3afee5de83f4298f0 + md5: 34d2731732bc7de6269657d5d9fd6e79 + sha256: 1f5e5d4ce98df5dbfc8478a3339e3848891fed2f26405676ee39010777245894 category: main optional: false - name: psutil - version: 5.9.5 + version: 5.9.7 manager: conda platform: osx-arm64 dependencies: python: '>=3.9,<3.10.0a0' python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-5.9.5-py39h0f82c59_1.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-5.9.7-py39h17cfd9d_0.conda hash: - md5: 1eb70daf1eb8478c5ccccf680a2dc025 - sha256: de53e5cd7ab4e14a957fcba7fa467beca916e4461f621f32a77dce331b95237c + md5: d3a5f34ecbce3ec8d4ba09f638416d32 + sha256: 0f83365c68837be6f5b861ced13ecef64245f2977d7c7059d149576242832236 category: main optional: false - name: psycopg2 @@ -11772,36 +11983,36 @@ package: category: main optional: false - name: pyarrow - version: 12.0.1 + version: 13.0.0 manager: conda platform: linux-64 dependencies: - libarrow: 12.0.1 + libarrow: 13.0.0 libgcc-ng: '>=12' libstdcxx-ng: '>=12' - numpy: '>=1.21.6,<2.0a0' + numpy: '>=1.22.4,<2.0a0' python: '>=3.9,<3.10.0a0' python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-12.0.1-py39hfbd5978_8_cpu.conda + url: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-13.0.0-py39h6925388_23_cpu.conda hash: - md5: fd98f7cc88572cff805a9576c8448c65 - sha256: 36036e1b71b85b218b542f996ddf8b25e8d4dd0411855c9bfad21f79d7dfac36 + md5: fc0f30899de0ebba12091adbee386f94 + sha256: 0b723965361c9b2ecd31369a314aa9667e2482ce8f0912a6dd87fa70f7d2126a category: main optional: false - name: pyarrow - version: 12.0.1 + version: 13.0.0 manager: conda platform: osx-arm64 dependencies: - libarrow: 12.0.1 - libcxx: '>=15.0.7' - numpy: '>=1.21.6,<2.0a0' + libarrow: 13.0.0 + libcxx: '>=14' + numpy: '>=1.22.4,<2.0a0' python: '>=3.9,<3.10.0a0' python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-12.0.1-py39hf40061a_8_cpu.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-13.0.0-py39hb25a2a0_23_cpu.conda hash: - md5: 63896ce85b0d0afd38363fdb00e10d9f - sha256: d469979b28263e75fb7c64fdee8878ab02dff0d246004573e11b9bdb301856a4 + md5: 652a9fa809d6944921ca49c6ff1472a1 + sha256: acb21e3792c47c7b57dece0da175a2083f00186a86e9f1414b17969b4d896f8c category: main optional: false - name: pyarrow-hotfix @@ -12192,20 +12403,21 @@ package: ld_impl_linux-64: '>=2.36.1' libffi: '>=3.4,<4.0a0' libgcc-ng: '>=12' - libnsl: '>=2.0.0,<2.1.0a0' - libsqlite: '>=3.43.0,<4.0a0' + libnsl: '>=2.0.1,<2.1.0a0' + libsqlite: '>=3.44.2,<4.0a0' libuuid: '>=2.38.1,<3.0a0' + libxcrypt: '>=4.4.36' libzlib: '>=1.2.13,<1.3.0a0' ncurses: '>=6.4,<7.0a0' - openssl: '>=3.1.2,<4.0a0' + openssl: '>=3.2.0,<4.0a0' readline: '>=8.2,<9.0a0' - tk: '>=8.6.12,<8.7.0a0' + tk: '>=8.6.13,<8.7.0a0' tzdata: '' xz: '>=5.2.6,<6.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/python-3.9.18-h0755675_0_cpython.conda + url: https://conda.anaconda.org/conda-forge/linux-64/python-3.9.18-h0755675_1_cpython.conda hash: - md5: 3ede353bc605068d9677e700b1847382 - sha256: 18db2220328abee8eb19f51c8df88bcfdf3a557b8181e7f5bda291deb067e40f + md5: 255a7002aeec7a067ff19b545aca6328 + sha256: c0e800d255a771926007043d2859cbbbdb1387477ec813f085640c8887b391a2 category: main optional: false - name: python @@ -12215,18 +12427,18 @@ package: dependencies: bzip2: '>=1.0.8,<2.0a0' libffi: '>=3.4,<4.0a0' - libsqlite: '>=3.43.0,<4.0a0' + libsqlite: '>=3.44.2,<4.0a0' libzlib: '>=1.2.13,<1.3.0a0' ncurses: '>=6.4,<7.0a0' - openssl: '>=3.1.2,<4.0a0' + openssl: '>=3.2.0,<4.0a0' readline: '>=8.2,<9.0a0' - tk: '>=8.6.12,<8.7.0a0' + tk: '>=8.6.13,<8.7.0a0' tzdata: '' xz: '>=5.2.6,<6.0a0' - url: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.9.18-hfa1ae8a_0_cpython.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.9.18-hd7ebdb9_1_cpython.conda hash: - md5: 7672472bbab6419a1211403e7c041116 - sha256: d6a4c49354b73248741b8b8cbfb0516ef6ceb3d6b3a4d110946195c7df228672 + md5: c48f67fd7147f37c941037de0a328560 + sha256: 7336d2cfefff2466f1f60144f10f5bf98f9d176a8c72ca85336baa5dc32299ef category: main optional: false - name: python-dateutil @@ -12256,27 +12468,27 @@ package: category: main optional: false - name: python-fastjsonschema - version: 2.19.0 + version: 2.19.1 manager: conda platform: linux-64 dependencies: python: '>=3.3' - url: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.19.0-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.19.1-pyhd8ed1ab_0.conda hash: - md5: e4dbdb3585c0266b4710467fe7b75cf4 - sha256: fdfe3f387c5ebde803605e1e90871c424519d2bfe2eb3bf9caad1c5a07f4c462 + md5: 4d3ceee3af4b0f9a1f48f57176bf8625 + sha256: 38b2db169d65cc5595e3ce63294c4fdb6a242ecf71f70b3ad8cad3bd4230d82f category: main optional: false - name: python-fastjsonschema - version: 2.19.0 + version: 2.19.1 manager: conda platform: osx-arm64 dependencies: python: '>=3.3' - url: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.19.0-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.19.1-pyhd8ed1ab_0.conda hash: - md5: e4dbdb3585c0266b4710467fe7b75cf4 - sha256: fdfe3f387c5ebde803605e1e90871c424519d2bfe2eb3bf9caad1c5a07f4c462 + md5: 4d3ceee3af4b0f9a1f48f57176bf8625 + sha256: 38b2db169d65cc5595e3ce63294c4fdb6a242ecf71f70b3ad8cad3bd4230d82f category: main optional: false - name: python-flatbuffers @@ -12328,7 +12540,7 @@ package: category: main optional: false - name: python-kubernetes - version: 28.1.0 + version: 29.0.0 manager: conda platform: linux-64 dependencies: @@ -12343,14 +12555,14 @@ package: six: '>=1.9.0' urllib3: '>=1.24.2,<2.0' websocket-client: '>=0.32.0,!=0.40.0,!=0.41.*,!=0.42.*' - url: https://conda.anaconda.org/conda-forge/noarch/python-kubernetes-28.1.0-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/python-kubernetes-29.0.0-pyhd8ed1ab_0.conda hash: - md5: 19e0767d01e052487650c0341c186219 - sha256: 559098188048ea52739815b2311b06bf381bf4c7a7924baaf2e99de0c01b2113 + md5: a94f4c6a1cff1e9837a8b62ae35c673f + sha256: 30e268b5e3299ae77f5bc34a2e290e47d5663f72be2ae3451ae7c24936670a74 category: main optional: false - name: python-kubernetes - version: 28.1.0 + version: 29.0.0 manager: conda platform: osx-arm64 dependencies: @@ -12365,10 +12577,10 @@ package: websocket-client: '>=0.32.0,!=0.40.0,!=0.41.*,!=0.42.*' oauthlib: '>=3.2.2' urllib3: '>=1.24.2,<2.0' - url: https://conda.anaconda.org/conda-forge/noarch/python-kubernetes-28.1.0-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/python-kubernetes-29.0.0-pyhd8ed1ab_0.conda hash: - md5: 19e0767d01e052487650c0341c186219 - sha256: 559098188048ea52739815b2311b06bf381bf4c7a7924baaf2e99de0c01b2113 + md5: a94f4c6a1cff1e9837a8b62ae35c673f + sha256: 30e268b5e3299ae77f5bc34a2e290e47d5663f72be2ae3451ae7c24936670a74 category: main optional: false - name: python-slugify @@ -12499,58 +12711,62 @@ package: category: main optional: false - name: pytorch - version: 2.0.0 + version: 2.1.0 manager: conda platform: linux-64 dependencies: __glibc: '>=2.17,<3.0.a0' _openmp_mutex: '>=4.5' filelock: '' + fsspec: '' jinja2: '' libcblas: '>=3.9.0,<4.0a0' libgcc-ng: '>=12' - libprotobuf: '>=3.21.12,<3.22.0a0' + libprotobuf: '>=4.24.4,<4.24.5.0a0' libstdcxx-ng: '>=12' - libuv: '>=1.44.2,<2.0a0' - mkl: '>=2022.2.1,<2023.0a0' + libtorch: 2.1.0.* + libuv: '>=1.46.0,<2.0a0' + mkl: '>=2023.2.0,<2024.0a0' networkx: '' - numpy: '>=1.21.6,<2.0a0' + numpy: '>=1.22.4,<2.0a0' python: '>=3.9,<3.10.0a0' python_abi: 3.9.* sleef: '>=3.5.1,<4.0a0' sympy: '' typing_extensions: '' - url: https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.0.0-cpu_mkl_py39h9f63279_101.conda + url: https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.1.0-cpu_mkl_py39h9c325db_102.conda hash: - md5: 75e2cdb9b19d38367cad1c14b66fc3f5 - sha256: b775669b515de43cf2de62fd3ab35a1a4e77f34cef932debcb8a3769718b8229 + md5: d2c82847c1510b059a2dbf99661bedf4 + sha256: 87bbe2b919af09acf697b53749aeda1e004c4bb58224508ce0b3c1f8e1cf2c26 category: main optional: false - name: pytorch - version: 2.0.0 + version: 2.1.0 manager: conda platform: osx-arm64 dependencies: filelock: '' + fsspec: '' jinja2: '' libcblas: '>=3.9.0,<4.0a0' - libcxx: '>=15.0.7' + libcxx: '>=14' liblapack: '>=3.9.0,<4.0a0' - libprotobuf: '>=3.21.12,<3.22.0a0' - libuv: '>=1.44.2,<2.0a0' - llvm-openmp: '>=15.0.7' + libprotobuf: '>=4.24.4,<4.24.5.0a0' + libtorch: 2.1.0.* + libuv: '>=1.46.0,<2.0a0' + llvm-openmp: '>=16.0.6' networkx: '' nomkl: '' - numpy: '>=1.21.6,<2.0a0' + numpy: '>=1.22.4,<2.0a0' python: '>=3.9,<3.10.0a0' python_abi: 3.9.* sleef: '>=3.5.1,<4.0a0' sympy: '' typing_extensions: '' - url: https://conda.anaconda.org/conda-forge/osx-arm64/pytorch-2.0.0-cpu_generic_py39hb35d202_1.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/pytorch-2.1.0-cpu_generic_py39h2c040b9_2.conda hash: - md5: 03e438278d6510f7b56d89a39d20f0ff - sha256: 6305cf96428d35275b7ea20cd8f9e9ece4b2f4f4d029e244cfd1b8a837d8f661 + md5: d7341f6a60401e53af264d0b9b835c88 + sha256: 2acf7b4577cd169dde3eccc2a696ce0dcee893837baaae68e0bef3efd8e4cf32 category: main optional: false - name: pytz @@ -12785,42 +13001,42 @@ package: category: main optional: false - name: rdma-core - version: '28.9' + version: '49.0' manager: conda platform: linux-64 dependencies: __glibc: '>=2.17,<3.0.a0' libgcc-ng: '>=12' + libnl: '>=3.9.0,<4.0a0' libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/rdma-core-28.9-h59595ed_1.conda + url: https://conda.anaconda.org/conda-forge/linux-64/rdma-core-49.0-hd3aeb46_2.conda hash: - md5: aeffb7c06b5f65e55e6c637408dc4100 - sha256: 832f9393ab3144ce6468c6f150db9d398fad4451e96a8879afb3059f0c9902f6 + md5: 855579013120ad3078e7d5dcadb643e1 + sha256: 3f541042f7b51484a996eab53493b9242969bc406614eba76ceecfa4f4a0822a category: main optional: false - name: re2 - version: 2023.03.02 + version: 2023.06.02 manager: conda platform: linux-64 dependencies: - libgcc-ng: '>=12' - libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/re2-2023.03.02-h8c504da_0.conda + libre2-11: 2023.06.02 + url: https://conda.anaconda.org/conda-forge/linux-64/re2-2023.06.02-h2873b5e_0.conda hash: - md5: 206f8fa808748f6e90599c3368a1114e - sha256: 1727f893a352ca735fb96b09f9edf6fe18c409d65550fd37e8a192919e8c827b + md5: bb2d5e593ef13fe4aff0bc9440f945ae + sha256: 3e0bfb04b6d43312d711c5b49dbc3c7660b2e6e681ed504b1b322794462a1bcd category: main optional: false - name: re2 - version: 2023.03.02 + version: 2023.06.02 manager: conda platform: osx-arm64 dependencies: - libcxx: '>=14.0.6' - url: https://conda.anaconda.org/conda-forge/osx-arm64/re2-2023.03.02-hc5e2d97_0.conda + libre2-11: 2023.06.02 + url: https://conda.anaconda.org/conda-forge/osx-arm64/re2-2023.06.02-h6135d0a_0.conda hash: - md5: 7a851c0ab05247e3246eca2c3b243b9a - sha256: 39bc32dcef3b699e6f748cc51d5e6b05ab788334d5787c64f069f0122e74c0c5 + md5: 8f23674174b155300696a2be8b5c1407 + sha256: 963847258a82d9647311c5eb8829a49ac2161df12a304d5d6e61f788f0563442 category: main optional: false - name: readline @@ -12879,31 +13095,31 @@ package: category: main optional: false - name: referencing - version: 0.32.0 + version: 0.32.1 manager: conda platform: linux-64 dependencies: attrs: '>=22.2.0' python: '>=3.8' rpds-py: '>=0.7.0' - url: https://conda.anaconda.org/conda-forge/noarch/referencing-0.32.0-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/referencing-0.32.1-pyhd8ed1ab_0.conda hash: - md5: a7b5a535cd614e384594530aee7e6061 - sha256: dfd40282910a45e58882ed94b502b2a09f475efb04eaaa3bd8b3b5a9b21a19c3 + md5: 753a592b4e99d7d2cde6a8fd0797f414 + sha256: 658beff40c6355af0eeec624bbe4e892b4c68c0af2d8ff4c06677e6547140506 category: main optional: false - name: referencing - version: 0.32.0 + version: 0.32.1 manager: conda platform: osx-arm64 dependencies: python: '>=3.8' attrs: '>=22.2.0' rpds-py: '>=0.7.0' - url: https://conda.anaconda.org/conda-forge/noarch/referencing-0.32.0-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/referencing-0.32.1-pyhd8ed1ab_0.conda hash: - md5: a7b5a535cd614e384594530aee7e6061 - sha256: dfd40282910a45e58882ed94b502b2a09f475efb04eaaa3bd8b3b5a9b21a19c3 + md5: 753a592b4e99d7d2cde6a8fd0797f414 + sha256: 658beff40c6355af0eeec624bbe4e892b4c68c0af2d8ff4c06677e6547140506 category: main optional: false - name: requests @@ -13075,58 +13291,58 @@ package: category: main optional: false - name: rich-click - version: 1.7.2 + version: 1.7.3 manager: conda platform: linux-64 dependencies: click: '>=7,<9' python: '>=3.7' rich: '>=10' - url: https://conda.anaconda.org/conda-forge/noarch/rich-click-1.7.2-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/rich-click-1.7.3-pyhd8ed1ab_0.conda hash: - md5: fe1eae76a71246959cefd09b5b00869b - sha256: 4bfddbc5716a09bfea1c3345b1eed0ddb36d0e55f357afb60ca3e73c9231cc68 + md5: dc858795a3dcc70135ae2c61b75a251a + sha256: d6265dbdbc2c1bda6dc96af0edc482a75e03e9f531cd8f6ff77619becdf02378 category: main optional: false - name: rich-click - version: 1.7.2 + version: 1.7.3 manager: conda platform: osx-arm64 dependencies: python: '>=3.7' click: '>=7,<9' rich: '>=10' - url: https://conda.anaconda.org/conda-forge/noarch/rich-click-1.7.2-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/rich-click-1.7.3-pyhd8ed1ab_0.conda hash: - md5: fe1eae76a71246959cefd09b5b00869b - sha256: 4bfddbc5716a09bfea1c3345b1eed0ddb36d0e55f357afb60ca3e73c9231cc68 + md5: dc858795a3dcc70135ae2c61b75a251a + sha256: d6265dbdbc2c1bda6dc96af0edc482a75e03e9f531cd8f6ff77619becdf02378 category: main optional: false - name: rpds-py - version: 0.13.2 + version: 0.17.1 manager: conda platform: linux-64 dependencies: libgcc-ng: '>=12' python: '>=3.9,<3.10.0a0' python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.13.2-py39h9fdd4d6_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.17.1-py39h9fdd4d6_0.conda hash: - md5: 75f11bc5ee4f3cf1d12bc17066b6a367 - sha256: f7e4dc74a7c8928edd8bf63316f09443943faf723487310c0f4ab76a5c62a5e6 + md5: 601e09c9de429baaabce5f1283c51fdf + sha256: 0ec45efa1c5599a9779ac34cf5bcb7602a2294f79b8959a7b15b92b4275979ee category: main optional: false - name: rpds-py - version: 0.13.2 + version: 0.17.1 manager: conda platform: osx-arm64 dependencies: python: '>=3.9,<3.10.0a0' python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/osx-arm64/rpds-py-0.13.2-py39h8fec3ad_0.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/rpds-py-0.17.1-py39h8fec3ad_0.conda hash: - md5: b728c70cc4b7e617535a3e92769608a9 - sha256: fdfada05bed7be977e070ce0e4b4f1d478b5c4c71ee04508529cd34a8cc072dd + md5: 07873cbc88530a1210d61027ec3d4801 + sha256: 3ed6823681d74b465804d7db3aae81630a4db3c919297c6634aac2939eaf9d6d category: main optional: false - name: rsa @@ -13242,16 +13458,16 @@ package: category: main optional: false - name: s2n - version: 1.3.49 + version: 1.4.1 manager: conda platform: linux-64 dependencies: libgcc-ng: '>=12' - openssl: '>=3.1.2,<4.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.3.49-h06160fa_0.conda + openssl: '>=3.2.0,<4.0a0' + url: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.4.1-h06160fa_0.conda hash: - md5: 1d78349eb26366ecc034a4afe70a8534 - sha256: 7ef7af04a626003737ad311fe45165addcb53928117f1a892b78114f74be724c + md5: 54ae57d17d038b6a7aa7fdb55350d338 + sha256: 6f21a270e5fcf824d71b637ea26e389e469b3dc44a7e51062c27556c6e771b37 category: main optional: false - name: s3fs @@ -13285,12 +13501,12 @@ package: category: main optional: false - name: scikit-learn - version: 1.3.2 + version: 1.4.0 manager: conda platform: linux-64 dependencies: _openmp_mutex: '>=4.5' - joblib: '>=1.1.1' + joblib: '>=1.2.0' libgcc-ng: '>=12' libstdcxx-ng: '>=12' numpy: '>=1.22.4,<2.0a0' @@ -13298,30 +13514,29 @@ package: python_abi: 3.9.* scipy: '' threadpoolctl: '>=2.0.0' - url: https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.3.2-py39ha22ef79_2.conda + url: https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.4.0-py39ha22ef79_0.conda hash: - md5: bdd0cdcd58ced4168aeef7046663f2f6 - sha256: 32e66143b566e558f414e461f99011e8ccddbfc87c4bb3de77f86450f807f54c + md5: cb8da9a55b56e7fda3553c919f89431b + sha256: 29080f3b936839256acbd3a686e912f2d00e97c84e79357e26ad7a7cfb67a4e9 category: main optional: false - name: scikit-learn - version: 1.3.2 + version: 1.4.0 manager: conda platform: osx-arm64 dependencies: - __osx: '>=10.9' - joblib: '>=1.1.1' - libcxx: '>=16.0.6' + joblib: '>=1.2.0' + libcxx: '>=15' llvm-openmp: '>=17.0.6' numpy: '>=1.22.4,<2.0a0' python: '>=3.9,<3.10.0a0' python_abi: 3.9.* scipy: '' threadpoolctl: '>=2.0.0' - url: https://conda.anaconda.org/conda-forge/osx-arm64/scikit-learn-1.3.2-py39h172c841_2.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/scikit-learn-1.4.0-py39h6dd658b_0.conda hash: - md5: 3f6ead0da40ab93f9d20b624bc3b1c87 - sha256: 4b81346f420e09990dd799acf89376a27d383927663c2dab968c59aa9a6f4212 + md5: 177d0e427f7fe3e8fd0d8aa5c9a32de4 + sha256: 0b18ab4449e9bb1b18c84becdf6dbb4982fedd502e683dfe49299fde2c20e701 category: main optional: false - name: scipy @@ -13410,15 +13625,15 @@ package: category: main optional: false - name: setuptools - version: 68.2.2 + version: 69.0.3 manager: conda platform: linux-64 dependencies: python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/setuptools-68.2.2-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/setuptools-69.0.3-pyhd8ed1ab_0.conda hash: - md5: fc2166155db840c634a1291a5c35a709 - sha256: 851901b1f8f2049edb36a675f0c3f9a98e1495ef4eb214761b048c6f696a06f7 + md5: 40695fdfd15a92121ed2922900d0308b + sha256: 0fe2a0473ad03dac6c7f5c42ef36a8e90673c88a0350dfefdea4b08d43803db2 category: main optional: false - name: setuptools @@ -13804,9 +14019,9 @@ package: sphinxcontrib-qthelp: '' imagesize: '' python: '>=3.6' + importlib-metadata: '>=4.4' pygments: '>=2.0' alabaster: '>=0.7,<0.8' - importlib-metadata: '>=4.4' requests: '>=2.5.0' jinja2: '>=2.3' snowballstemmer: '>=1.1' @@ -14386,7 +14601,7 @@ package: category: main optional: false - name: sqlalchemy - version: 2.0.23 + version: 2.0.25 manager: conda platform: linux-64 dependencies: @@ -14394,26 +14609,26 @@ package: libgcc-ng: '>=12' python: '>=3.9,<3.10.0a0' python_abi: 3.9.* - typing-extensions: '>=4.2.0' - url: https://conda.anaconda.org/conda-forge/linux-64/sqlalchemy-2.0.23-py39hd1e30aa_0.conda + typing-extensions: '>=4.6.0' + url: https://conda.anaconda.org/conda-forge/linux-64/sqlalchemy-2.0.25-py39hd1e30aa_0.conda hash: - md5: ad585ef3085a52e4890fe7ea1d2a0606 - sha256: 45ce1f68861b61e21638624f99017c16c53b3abab60691d9c48bf8586681c4e2 + md5: 36930c67bcfd8c1f1cf6cb5b9622e0fe + sha256: c4be30fbf84bc00f1d3f19eb03a2a105fa05183095d0f48fbc8a808e525c65b8 category: main optional: false - name: sqlalchemy - version: 2.0.23 + version: 2.0.25 manager: conda platform: osx-arm64 dependencies: greenlet: '!=0.4.17' python: '>=3.9,<3.10.0a0' python_abi: 3.9.* - typing-extensions: '>=4.2.0' - url: https://conda.anaconda.org/conda-forge/osx-arm64/sqlalchemy-2.0.23-py39h17cfd9d_0.conda + typing-extensions: '>=4.6.0' + url: https://conda.anaconda.org/conda-forge/osx-arm64/sqlalchemy-2.0.25-py39h17cfd9d_0.conda hash: - md5: 8facab2c48a6eebe53d4664e86461e1b - sha256: a020f91d478a9b71080c7d31c9759d43418cf04d438d6b8ed9ef0d7351a1179a + md5: a11c96827d0355cca921e77ad1973348 + sha256: 8c9f02958249dbe89433b93a921ec121821c970f1a53b63982d2c6359696d7e0 category: main optional: false - name: sqlite @@ -14604,16 +14819,17 @@ package: category: main optional: false - name: tbb - version: 2021.7.0 + version: 2021.11.0 manager: conda platform: linux-64 dependencies: libgcc-ng: '>=12' + libhwloc: '>=2.9.3,<2.9.4.0a0' libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.7.0-h924138e_0.tar.bz2 + url: https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.11.0-h00ab1b0_0.conda hash: - md5: 819421f81b127a5547bf96ad57eccdd9 - sha256: 452a6def24912d2a118d863095c3f9cb05fe5c997357431a0ca4452eb7f65f08 + md5: fde515afbbe6e36eb4564965c20b1058 + sha256: 05f2282cb204eeb62dbc698e14475f0bbb7f1eb07081d7f5da37d61ad3c4acb3 category: main optional: false - name: tblib @@ -14665,13 +14881,13 @@ package: category: main optional: false - name: tensorboard - version: 2.14.1 + version: 2.15.1 manager: conda platform: linux-64 dependencies: absl-py: '>=0.4' google-auth: '>=1.6.3,<3' - google-auth-oauthlib: '>=0.5,<1.1' + google-auth-oauthlib: '>=0.5,<2' grpcio: '>=1.48.2' markdown: '>=2.6.8' numpy: '>=1.12.0' @@ -14682,14 +14898,14 @@ package: six: '>=1.9' tensorboard-data-server: '>=0.7.0,<0.8.0' werkzeug: '>=1.0.1' - url: https://conda.anaconda.org/conda-forge/noarch/tensorboard-2.14.1-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/tensorboard-2.15.1-pyhd8ed1ab_0.conda hash: - md5: fd77b4ee10b417788c0026de58568d01 - sha256: 19d91a20089855c613f3cf73bd72facab9f666539971bb69280c075c97c6491a + md5: 0bba0cc8e5247bca0411ee63e9b0bb2f + sha256: 652c97025f21fdb6473ccaa5b2c53ca8ae816d550a596a4544566cfcf5273591 category: main optional: false - name: tensorboard - version: 2.14.1 + version: 2.15.1 manager: conda platform: osx-arm64 dependencies: @@ -14705,11 +14921,11 @@ package: grpcio: '>=1.48.2' protobuf: '>=3.19.6' tensorboard-data-server: '>=0.7.0,<0.8.0' - google-auth-oauthlib: '>=0.5,<1.1' - url: https://conda.anaconda.org/conda-forge/noarch/tensorboard-2.14.1-pyhd8ed1ab_0.conda + google-auth-oauthlib: '>=0.5,<2' + url: https://conda.anaconda.org/conda-forge/noarch/tensorboard-2.15.1-pyhd8ed1ab_0.conda hash: - md5: fd77b4ee10b417788c0026de58568d01 - sha256: 19d91a20089855c613f3cf73bd72facab9f666539971bb69280c075c97c6491a + md5: 0bba0cc8e5247bca0411ee63e9b0bb2f + sha256: 652c97025f21fdb6473ccaa5b2c53ca8ae816d550a596a4544566cfcf5273591 category: main optional: false - name: tensorboard-data-server @@ -14742,37 +14958,37 @@ package: category: main optional: false - name: tensorflow - version: 2.14.0 + version: 2.15.0 manager: conda platform: linux-64 dependencies: python: '>=3.9,<3.10.0a0' python_abi: 3.9.* - tensorflow-base: 2.14.0 - tensorflow-estimator: 2.14.0 - url: https://conda.anaconda.org/conda-forge/linux-64/tensorflow-2.14.0-cpu_py39h4655687_0.conda + tensorflow-base: 2.15.0 + tensorflow-estimator: 2.15.0 + url: https://conda.anaconda.org/conda-forge/linux-64/tensorflow-2.15.0-cpu_py39h433cda9_1.conda hash: - md5: 2b69c2c80e61a9bfe86a9e9b78ff4ba7 - sha256: 140178c0a7ad4323a3a03a8fbc5f3228dd8d45d6c21661a30a385356f852d0b3 + md5: 38968dee79b3677fdc693a562c66495b + sha256: 4373911c6cde755f5a518770cf70d083927cd440fca14359ff731cc0c6eb226a category: main optional: false - name: tensorflow - version: 2.14.0 + version: 2.15.0 manager: conda platform: osx-arm64 dependencies: python: '>=3.9,<3.10.0a0' python_abi: 3.9.* - tensorflow-base: 2.14.0 - tensorflow-estimator: 2.14.0 - url: https://conda.anaconda.org/conda-forge/osx-arm64/tensorflow-2.14.0-cpu_py39h2839aeb_0.conda + tensorflow-base: 2.15.0 + tensorflow-estimator: 2.15.0 + url: https://conda.anaconda.org/conda-forge/osx-arm64/tensorflow-2.15.0-cpu_py39h89c7d27_1.conda hash: - md5: b493f70acef9bd0b5883a3cdc3a308f6 - sha256: 2fb43d6c4f168ff4e51b3b5258db49b3c47c4da8984e398e317a137975f77ae2 + md5: bfefaaa2093af733d1fa8dc22f27c26e + sha256: 81f3e4cbea6eeead17a756f0cca55aafb817baec817caca1f8d5c15f74a5b5be category: main optional: false - name: tensorflow-base - version: 2.14.0 + version: 2.15.0 manager: conda platform: linux-64 dependencies: @@ -14782,23 +14998,23 @@ package: gast: '>=0.2.1,!=0.5.0,!=0.5.1,!=0.5.2' giflib: '>=5.2.1,<5.3.0a0' google-pasta: '>=0.1.1' - grpcio: 1.54.* + grpcio: 1.59.* h5py: '>=2.9.0' icu: '>=73.2,<74.0a0' - keras: '>=2.14,<2.15' - libabseil: '>=20230125.3,<20230126.0a0' - libcurl: '>=8.4.0,<9.0a0' + keras: '>=2.15,<2.16' + libabseil: '>=20230802.1,<20230803.0a0' + libcurl: '>=8.5.0,<9.0a0' libgcc-ng: '>=12' - libgrpc: '>=1.54.3,<1.55.0a0' + libgrpc: '>=1.59.3,<1.60.0a0' libjpeg-turbo: '>=3.0.0,<4.0a0' libpng: '>=1.6.39,<1.7.0a0' - libprotobuf: '>=3.21.12,<3.22.0a0' - libsqlite: '>=3.44.0,<4.0a0' + libprotobuf: '>=4.24.4,<4.24.5.0a0' + libsqlite: '>=3.44.2,<4.0a0' libstdcxx-ng: '>=12' libzlib: '>=1.2.13,<1.3.0a0' ml_dtypes: 0.2.0.* numpy: '>=1.22.4,<2.0a0' - openssl: '>=3.1.4,<4.0a0' + openssl: '>=3.2.0,<4.0a0' opt_einsum: '>=2.3.2' packaging: '' protobuf: '>=3.20.3,<5,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5' @@ -14807,18 +15023,18 @@ package: python_abi: 3.9.* six: '>=1.12' snappy: '>=1.1.10,<2.0a0' - tensorboard: '>=2.14,<2.15' + tensorboard: '>=2.15,<2.16' termcolor: '>=1.1.0' typing_extensions: '>=3.6.6' wrapt: '>=1.11.0,<1.15' - url: https://conda.anaconda.org/conda-forge/linux-64/tensorflow-base-2.14.0-cpu_py39h65ed569_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/tensorflow-base-2.15.0-cpu_py39he1df281_1.conda hash: - md5: da26d8c9430738ef95213bf143467748 - sha256: a13ee6d37ea23cc2c31b8bbec609d9384280fd1545eda02f5dfb46ce69a3d6f0 + md5: 4232ae33223a83cf9a67751c93f3600d + sha256: 225295a7e957e1871ba550aef8ff09ff56c38b34ef2aa68197c1eeaa099fe8c1 category: main optional: false - name: tensorflow-base - version: 2.14.0 + version: 2.15.0 manager: conda platform: osx-arm64 dependencies: @@ -14828,22 +15044,22 @@ package: gast: '>=0.2.1,!=0.5.0,!=0.5.1,!=0.5.2' giflib: '>=5.2.1,<5.3.0a0' google-pasta: '>=0.1.1' - grpcio: 1.54.* + grpcio: 1.59.* h5py: '>=2.9.0' icu: '>=73.2,<74.0a0' - keras: '>=2.14,<2.15' - libabseil: '>=20230125.3,<20230126.0a0' - libcurl: '>=8.4.0,<9.0a0' - libcxx: '>=16.0.6' - libgrpc: '>=1.54.3,<1.55.0a0' + keras: '>=2.15,<2.16' + libabseil: '>=20230802.1,<20230803.0a0' + libcurl: '>=8.5.0,<9.0a0' + libcxx: '>=15' + libgrpc: '>=1.59.3,<1.60.0a0' libjpeg-turbo: '>=3.0.0,<4.0a0' libpng: '>=1.6.39,<1.7.0a0' - libprotobuf: '>=3.21.12,<3.22.0a0' - libsqlite: '>=3.44.0,<4.0a0' + libprotobuf: '>=4.24.4,<4.24.5.0a0' + libsqlite: '>=3.44.2,<4.0a0' libzlib: '>=1.2.13,<1.3.0a0' ml_dtypes: 0.2.0.* numpy: '>=1.22.4,<2.0a0' - openssl: '>=3.1.4,<4.0a0' + openssl: '>=3.2.0,<4.0a0' opt_einsum: '>=2.3.2' packaging: '' protobuf: '>=3.20.3,<5,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5' @@ -14852,71 +15068,71 @@ package: python_abi: 3.9.* six: '>=1.12' snappy: '>=1.1.10,<2.0a0' - tensorboard: '>=2.14,<2.15' + tensorboard: '>=2.15,<2.16' termcolor: '>=1.1.0' typing_extensions: '>=3.6.6' wrapt: '>=1.11.0,<1.15' - url: https://conda.anaconda.org/conda-forge/osx-arm64/tensorflow-base-2.14.0-cpu_py39ha6a491e_0.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/tensorflow-base-2.15.0-cpu_py39ha39414a_1.conda hash: - md5: 8400feabaf44f32247a9bc82b659afb7 - sha256: e2cefe1d85c5b9e10b35515adfd408df5585f64920dc84aa9bf62fba4c1cb4d9 + md5: d43097583588f87202f400e7cd26f2b8 + sha256: 220204350f31420504f9b7b7c532fff84fdc14dbc3f2202ee83baa89a4bd40f3 category: main optional: false - name: tensorflow-estimator - version: 2.14.0 + version: 2.15.0 manager: conda platform: linux-64 dependencies: libgcc-ng: '>=12' libstdcxx-ng: '>=12' - openssl: '>=3.1.4,<4.0a0' + openssl: '>=3.2.0,<4.0a0' python: '>=3.9,<3.10.0a0' python_abi: 3.9.* - tensorflow-base: 2.14.0 - url: https://conda.anaconda.org/conda-forge/linux-64/tensorflow-estimator-2.14.0-cpu_py39hd56b5fd_0.conda + tensorflow-base: 2.15.0 + url: https://conda.anaconda.org/conda-forge/linux-64/tensorflow-estimator-2.15.0-cpu_py39hd56b5fd_1.conda hash: - md5: 01e077379807b9b0d703c68cd0b38c50 - sha256: 24593e6b59600e1a0c9340eeaa406d9b77ee04d7c9d349aef1020f625f872f09 + md5: 6da35921a24a8acde27b34936839c2ba + sha256: f02e785bcc451fbdc6267cba106ddb5dbc3ec4dd4281abd82702bab9fc355e34 category: main optional: false - name: tensorflow-estimator - version: 2.14.0 + version: 2.15.0 manager: conda platform: osx-arm64 dependencies: - libcxx: '>=16.0.6' - openssl: '>=3.1.4,<4.0a0' + libcxx: '>=15' + openssl: '>=3.2.0,<4.0a0' python: '>=3.9,<3.10.0a0' python_abi: 3.9.* - tensorflow-base: 2.14.0 - url: https://conda.anaconda.org/conda-forge/osx-arm64/tensorflow-estimator-2.14.0-cpu_py39ha1daed2_0.conda + tensorflow-base: 2.15.0 + url: https://conda.anaconda.org/conda-forge/osx-arm64/tensorflow-estimator-2.15.0-cpu_py39ha1daed2_1.conda hash: - md5: 080a34a0c9508f7b877e4e4bed648f7f - sha256: a370bf33e2309f0e98b298ed6a8bd90f8cf2b7662fe85c03822dbef627f18618 + md5: 9fc315e012c9c336239e115e66e9a300 + sha256: 8c0da8e1398bb85023865085e1bdc8f3293e82a0bb75525136b2a3e357f1d1af category: main optional: false - name: termcolor - version: 2.3.0 + version: 2.4.0 manager: conda platform: linux-64 dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/termcolor-2.3.0-pyhd8ed1ab_0.conda + python: '>=3.8' + url: https://conda.anaconda.org/conda-forge/noarch/termcolor-2.4.0-pyhd8ed1ab_0.conda hash: - md5: 440d508f025b1692168caaf436504af3 - sha256: db8c38777093d87fc05dc3f57d26c171c4e4896f17a013c6f839050c989a759e + md5: a5033708ad9283907c3b1bc1f90d0d0d + sha256: 59588d41f2c02d599fd6528583013d85bd47d17b1acec11edbb29deadd81fbca category: main optional: false - name: termcolor - version: 2.3.0 + version: 2.4.0 manager: conda platform: osx-arm64 dependencies: - python: '>=3.7' - url: https://conda.anaconda.org/conda-forge/noarch/termcolor-2.3.0-pyhd8ed1ab_0.conda + python: '>=3.8' + url: https://conda.anaconda.org/conda-forge/noarch/termcolor-2.4.0-pyhd8ed1ab_0.conda hash: - md5: 440d508f025b1692168caaf436504af3 - sha256: db8c38777093d87fc05dc3f57d26c171c4e4896f17a013c6f839050c989a759e + md5: a5033708ad9283907c3b1bc1f90d0d0d + sha256: 59588d41f2c02d599fd6528583013d85bd47d17b1acec11edbb29deadd81fbca category: main optional: false - name: terminado @@ -14998,7 +15214,7 @@ package: category: main optional: false - name: tf2onnx - version: 1.15.1 + version: 1.16.1 manager: conda platform: linux-64 dependencies: @@ -15009,14 +15225,14 @@ package: requests: '' six: '' tensorflow: '>=2.6' - url: https://conda.anaconda.org/conda-forge/noarch/tf2onnx-1.15.1-pyhd8ed1ab_1.conda + url: https://conda.anaconda.org/conda-forge/noarch/tf2onnx-1.16.1-pyhd8ed1ab_0.conda hash: - md5: 41a891ad34703e0ebc2d36098b8bbe56 - sha256: 403f37c0c4881d11fbb63573c542105d9d1165294f35b1491143085c76aa5160 + md5: 3882e49e3d01c69231a7e48d09ca0ec6 + sha256: 17b0ed248ed0a5ac822ed6a4fa55b122c7c4ab01e069d4dacec5606f6d655233 category: main optional: false - name: tf2onnx - version: 1.15.1 + version: 1.16.1 manager: conda platform: osx-arm64 dependencies: @@ -15027,10 +15243,10 @@ package: tensorflow: '>=2.6' python-flatbuffers: '>=1.12' onnx: '>=1.4.1' - url: https://conda.anaconda.org/conda-forge/noarch/tf2onnx-1.15.1-pyhd8ed1ab_1.conda + url: https://conda.anaconda.org/conda-forge/noarch/tf2onnx-1.16.1-pyhd8ed1ab_0.conda hash: - md5: 41a891ad34703e0ebc2d36098b8bbe56 - sha256: 403f37c0c4881d11fbb63573c542105d9d1165294f35b1491143085c76aa5160 + md5: 3882e49e3d01c69231a7e48d09ca0ec6 + sha256: 17b0ed248ed0a5ac822ed6a4fa55b122c7c4ab01e069d4dacec5606f6d655233 category: main optional: false - name: threadpoolctl @@ -15058,41 +15274,52 @@ package: category: main optional: false - name: tiledb - version: 2.18.2 + version: 2.19.0 manager: conda platform: linux-64 dependencies: + azure-core-cpp: '>=1.10.3,<2.0a0' + azure-storage-blobs-cpp: '>=12.10.0,<13.0a0' + azure-storage-common-cpp: '>=12.5.0,<13.0a0' bzip2: '>=1.0.8,<2.0a0' + libabseil: '>=20230802.1,<20230803.0a0' + libcurl: '>=8.5.0,<9.0a0' libgcc-ng: '>=12' + libgoogle-cloud: '>=2.12.0,<2.13.0a0' libstdcxx-ng: '>=12' - libxml2: '>=2.12.1,<2.13.0a0' + libxml2: '>=2.12.3,<3.0.0a0' libzlib: '>=1.2.13,<1.3.0a0' lz4-c: '>=1.9.3,<1.10.0a0' openssl: '>=3.2.0,<4.0a0' zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/tiledb-2.18.2-h99f50a1_1.conda + url: https://conda.anaconda.org/conda-forge/linux-64/tiledb-2.19.0-hc1131af_0.conda hash: - md5: 68c1b90224a38f6a8926140340c28bb3 - sha256: 59b8ffdff6ed696cd1a7cc84f3fe0bc43f540ae45032b654fc3c7edd6bce2ddf + md5: 51f6de9ca86bdeeb92e89e4abccd03e8 + sha256: b2896839b41289205562b211a6e45ebdbb97018e076c1ae4faecbfcc421810d0 category: main optional: false - name: tiledb - version: 2.18.2 + version: 2.19.0 manager: conda platform: osx-arm64 dependencies: - __osx: '>=10.9' + azure-core-cpp: '>=1.10.3,<2.0a0' + azure-storage-blobs-cpp: '>=12.10.0,<13.0a0' + azure-storage-common-cpp: '>=12.5.0,<13.0a0' bzip2: '>=1.0.8,<2.0a0' - libcxx: '>=16.0.6' - libxml2: '>=2.12.1,<2.13.0a0' + libabseil: '>=20230802.1,<20230803.0a0' + libcurl: '>=8.5.0,<9.0a0' + libcxx: '>=15' + libgoogle-cloud: '>=2.12.0,<2.13.0a0' + libxml2: '>=2.12.3,<3.0.0a0' libzlib: '>=1.2.13,<1.3.0a0' lz4-c: '>=1.9.3,<1.10.0a0' openssl: '>=3.2.0,<4.0a0' zstd: '>=1.5.5,<1.6.0a0' - url: https://conda.anaconda.org/conda-forge/osx-arm64/tiledb-2.18.2-hcd9d348_1.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/tiledb-2.19.0-h567544c_0.conda hash: - md5: 5acc6437b79888d44e51f9d5b5dcc22a - sha256: 5d6b8c514f4a116d76b33b48e4cc09568711ef03753158e4a7ec1bbb8c8e255c + md5: 60e4d67eedc2f19bfbdf964187f52d15 + sha256: beeeefd593a5f0fa70b25d7d9563dd54c3840e85f6c5d982e2066f7904077191 category: main optional: false - name: tinycss2 @@ -15296,27 +15523,27 @@ package: category: main optional: false - name: traitlets - version: 5.14.0 + version: 5.14.1 manager: conda platform: linux-64 dependencies: python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.0-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.1-pyhd8ed1ab_0.conda hash: - md5: 886f4a84ddb49b943b1697ac314e85b3 - sha256: c32412029033264140926be474d327d7fd57c0d11db9b1745396b3d4db78a799 + md5: 1c6acfdc7ecbfe09954c4216da99c146 + sha256: fa78d68f74ec8aae5c93f135140bfdbbf0ab60a79c6062b55d73c316068545ec category: main optional: false - name: traitlets - version: 5.14.0 + version: 5.14.1 manager: conda platform: osx-arm64 dependencies: python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.0-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.1-pyhd8ed1ab_0.conda hash: - md5: 886f4a84ddb49b943b1697ac314e85b3 - sha256: c32412029033264140926be474d327d7fd57c0d11db9b1745396b3d4db78a799 + md5: 1c6acfdc7ecbfe09954c4216da99c146 + sha256: fa78d68f74ec8aae5c93f135140bfdbbf0ab60a79c6062b55d73c316068545ec category: main optional: false - name: typeguard @@ -15348,27 +15575,27 @@ package: category: main optional: false - name: types-python-dateutil - version: 2.8.19.14 + version: 2.8.19.20240106 manager: conda platform: linux-64 dependencies: python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/types-python-dateutil-2.8.19.14-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/types-python-dateutil-2.8.19.20240106-pyhd8ed1ab_0.conda hash: - md5: 4df15c51a543e806d439490b862be1c6 - sha256: 7b0129c72d371fa7a06ed5dd1d701844c20d03bb4641a38a88a982b347d087e2 + md5: c9096a546660b9079dce531c0039e074 + sha256: 09ef8cc587bdea80a83b6f820dbae24daadcf82be088fb0a9f6495781653e300 category: main optional: false - name: types-python-dateutil - version: 2.8.19.14 + version: 2.8.19.20240106 manager: conda platform: osx-arm64 dependencies: python: '>=3.6' - url: https://conda.anaconda.org/conda-forge/noarch/types-python-dateutil-2.8.19.14-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/types-python-dateutil-2.8.19.20240106-pyhd8ed1ab_0.conda hash: - md5: 4df15c51a543e806d439490b862be1c6 - sha256: 7b0129c72d371fa7a06ed5dd1d701844c20d03bb4641a38a88a982b347d087e2 + md5: c9096a546660b9079dce531c0039e074 + sha256: 09ef8cc587bdea80a83b6f820dbae24daadcf82be088fb0a9f6495781653e300 category: main optional: false - name: typing-extensions @@ -15472,49 +15699,49 @@ package: category: main optional: false - name: tzcode - version: 2023c + version: 2023d manager: conda platform: linux-64 dependencies: __glibc: '>=2.17,<3.0.a0' libgcc-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/tzcode-2023c-h0b41bf4_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/tzcode-2023d-h3f72095_0.conda hash: - md5: 0c0533894f21c3d35697cb8378d390e2 - sha256: 62b0d3eee4260d310f578015305834b8a588377f796e5e290ec267da8a51a027 + md5: 1c63518899838477ebd497e3e3327f81 + sha256: 0eab7ec2f4c983efb365bacc2e7bd6620f516a50d2e9b183ba1c9c243601cce3 category: main optional: false - name: tzcode - version: 2023c + version: 2023d manager: conda platform: osx-arm64 dependencies: {} - url: https://conda.anaconda.org/conda-forge/osx-arm64/tzcode-2023c-h1a8c8d9_0.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/tzcode-2023d-h93a5062_0.conda hash: - md5: 96779d3be996d78411b083f99a51199c - sha256: 0a60ff53272547a0f80862f0a1969a5d1cec16bd2e9098ed5b07d317682a4361 + md5: 8f6c1eef62c660bfb43897fe14b2ca95 + sha256: a4bed39a41b26d5f8134fd0cb0df15bc0b9e645e3ee6f88ee81c8d24651eb8cd category: main optional: false - name: tzdata - version: 2023c + version: 2023d manager: conda platform: linux-64 dependencies: {} - url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2023d-h0c530f3_0.conda hash: - md5: 939e3e74d8be4dac89ce83b20de2492a - sha256: 0449138224adfa125b220154408419ec37c06b0b49f63c5954724325903ecf55 + md5: 8dee24b8be2d9ff81e7bd4d7d97ff1b0 + sha256: 04f2ab3e36f2015841551415bf16bf62933bd94b7085d4be5493b388e95a9c3d category: main optional: false - name: tzdata - version: 2023c + version: 2023d manager: conda platform: osx-arm64 dependencies: {} - url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2023d-h0c530f3_0.conda hash: - md5: 939e3e74d8be4dac89ce83b20de2492a - sha256: 0449138224adfa125b220154408419ec37c06b0b49f63c5954724325903ecf55 + md5: 8dee24b8be2d9ff81e7bd4d7d97ff1b0 + sha256: 04f2ab3e36f2015841551415bf16bf62933bd94b7085d4be5493b388e95a9c3d category: main optional: false - name: tzlocal @@ -15544,18 +15771,18 @@ package: category: main optional: false - name: ucx - version: 1.14.1 + version: 1.15.0 manager: conda platform: linux-64 dependencies: libgcc-ng: '>=12' libnuma: '>=2.0.16,<3.0a0' libstdcxx-ng: '>=12' - rdma-core: '>=28.9,<29.0a0' - url: https://conda.anaconda.org/conda-forge/linux-64/ucx-1.14.1-h64cca9d_5.conda + rdma-core: '>=49' + url: https://conda.anaconda.org/conda-forge/linux-64/ucx-1.15.0-h75e419f_2.conda hash: - md5: 39aa3b356d10d7e5add0c540945a0944 - sha256: a62f3fb56849dc37270f9078e1c8ba32328bc3ba4d32cf1f7dace48b431d5abe + md5: 5798de4587dc70fa6db81663e79f176a + sha256: 81fdea1a5ee5075bf4cbdc665b08d0e2ee9d3476f9d16acc58e2bbd913e9197b category: main optional: false - name: ukkonen @@ -15617,27 +15844,27 @@ package: category: main optional: false - name: unidecode - version: 1.3.7 + version: 1.3.8 manager: conda platform: linux-64 dependencies: python: '>=3.5' - url: https://conda.anaconda.org/conda-forge/noarch/unidecode-1.3.7-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/unidecode-1.3.8-pyhd8ed1ab_0.conda hash: - md5: 06532129755273a6d5a0e0cd179330a5 - sha256: 6f6012c9103324680b8cfa666dd42b9de1da942520b3dc223fda3a43021d6189 + md5: 913724e0dfe2708b7b7d4e35b8cc2e0f + sha256: 3f29636a555736983ac2bdeb6e41a5cd85b572fa4f6cc2270d6c6543d8eb8c0b category: main optional: false - name: unidecode - version: 1.3.7 + version: 1.3.8 manager: conda platform: osx-arm64 dependencies: python: '>=3.5' - url: https://conda.anaconda.org/conda-forge/noarch/unidecode-1.3.7-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/unidecode-1.3.8-pyhd8ed1ab_0.conda hash: - md5: 06532129755273a6d5a0e0cd179330a5 - sha256: 6f6012c9103324680b8cfa666dd42b9de1da942520b3dc223fda3a43021d6189 + md5: 913724e0dfe2708b7b7d4e35b8cc2e0f + sha256: 3f29636a555736983ac2bdeb6e41a5cd85b572fa4f6cc2270d6c6543d8eb8c0b category: main optional: false - name: uri-template @@ -15815,27 +16042,27 @@ package: category: main optional: false - name: wcwidth - version: 0.2.12 + version: 0.2.13 manager: conda platform: linux-64 dependencies: python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.12-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_0.conda hash: - md5: bf4a1d1a97ca27b0b65bacd9e238b484 - sha256: ca757d0fc2dbd422af9d3238a8b4b630a6e11df3707a447bd89540656770d1d7 + md5: 68f0738df502a14213624b288c60c9ad + sha256: b6cd2fee7e728e620ec736d8dfee29c6c9e2adbd4e695a31f1d8f834a83e57e3 category: main optional: false - name: wcwidth - version: 0.2.12 + version: 0.2.13 manager: conda platform: osx-arm64 dependencies: python: '>=3.8' - url: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.12-pyhd8ed1ab_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_0.conda hash: - md5: bf4a1d1a97ca27b0b65bacd9e238b484 - sha256: ca757d0fc2dbd422af9d3238a8b4b630a6e11df3707a447bd89540656770d1d7 + md5: 68f0738df502a14213624b288c60c9ad + sha256: b6cd2fee7e728e620ec736d8dfee29c6c9e2adbd4e695a31f1d8f834a83e57e3 category: main optional: false - name: webcolors @@ -16012,33 +16239,33 @@ package: category: main optional: false - name: xerces-c - version: 3.2.4 + version: 3.2.5 manager: conda platform: linux-64 dependencies: icu: '>=73.2,<74.0a0' - libcurl: '>=8.2.1,<9.0a0' + libcurl: '>=8.5.0,<9.0a0' libgcc-ng: '>=12' - libnsl: '>=2.0.0,<2.1.0a0' + libnsl: '>=2.0.1,<2.1.0a0' libstdcxx-ng: '>=12' - url: https://conda.anaconda.org/conda-forge/linux-64/xerces-c-3.2.4-hac6953d_3.conda + url: https://conda.anaconda.org/conda-forge/linux-64/xerces-c-3.2.5-hac6953d_0.conda hash: - md5: 297e6a75dc1b6a440cd341a85eab8a00 - sha256: faf1c8f0e625466efec442e987737057ca304f1fcf79055da4d9e93e49f14ffa + md5: 63b80ca78d29380fe69e69412dcbe4ac + sha256: 75d06ca406f03f653d7a3183f2a1ccfdb3a3c6c830493933ec4c3c98e06a32bb category: main optional: false - name: xerces-c - version: 3.2.4 + version: 3.2.5 manager: conda platform: osx-arm64 dependencies: icu: '>=73.2,<74.0a0' - libcurl: '>=8.2.1,<9.0a0' - libcxx: '>=15.0.7' - url: https://conda.anaconda.org/conda-forge/osx-arm64/xerces-c-3.2.4-hd886eac_3.conda + libcurl: '>=8.5.0,<9.0a0' + libcxx: '>=15' + url: https://conda.anaconda.org/conda-forge/osx-arm64/xerces-c-3.2.5-hf393695_0.conda hash: - md5: 916e77cb0be0040410881fba8e28b5bb - sha256: 5ecc3322ddcad0a002a44bd4dddfe898b9e02951c629f6962c23b3bcf6014c9f + md5: 5e4741a1e687aee5fc9c409a0476bef2 + sha256: 8ad901a5fe535ebd16b469cf8e46cf174f7e6e4d9b432cc8cc02666a87e7e2ee category: main optional: false - name: xorg-kbproto @@ -16299,7 +16526,7 @@ package: category: main optional: false - name: yarl - version: 1.9.3 + version: 1.9.4 manager: conda platform: linux-64 dependencies: @@ -16308,14 +16535,14 @@ package: multidict: '>=4.0' python: '>=3.9,<3.10.0a0' python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/linux-64/yarl-1.9.3-py39hd1e30aa_0.conda + url: https://conda.anaconda.org/conda-forge/linux-64/yarl-1.9.4-py39hd1e30aa_0.conda hash: - md5: c8654dea9ff4b633fbdfddff7e321bb9 - sha256: 871782b22363b3fb449e2a29a3620045a1c40643e3726767f5b9cd4455ec36c7 + md5: 7288bccf99dd979dfcf80bb372c3de3f + sha256: a0370c724d347103ae1a7c8a49166cc69359d80055c11bc5d7222d259efd8f12 category: main optional: false - name: yarl - version: 1.9.3 + version: 1.9.4 manager: conda platform: osx-arm64 dependencies: @@ -16323,10 +16550,10 @@ package: multidict: '>=4.0' python: '>=3.9,<3.10.0a0' python_abi: 3.9.* - url: https://conda.anaconda.org/conda-forge/osx-arm64/yarl-1.9.3-py39h17cfd9d_0.conda + url: https://conda.anaconda.org/conda-forge/osx-arm64/yarl-1.9.4-py39h17cfd9d_0.conda hash: - md5: b882e8dbbb5792b54bc8d9a44d742047 - sha256: 761a23146d980333d8ec0676ca9044f5f104804fc2ea753a0ba4ab1d3b6cda37 + md5: 28614a7a52d6907a1e79ef6706e07400 + sha256: be088ed67246f51deb9a025617408bc8c80845d861f5695d9633aaca3b9fc555 category: main optional: false - name: zeromq @@ -16688,6 +16915,54 @@ package: sha256: fb1ab7b0548fe44b3d538041f0a374505b7f990d448a935ea36649c5ccab5acf category: main optional: false +- name: grpcio + version: 1.43.0 + manager: pip + platform: linux-64 + dependencies: + six: '>=1.5.2' + url: https://files.pythonhosted.org/packages/81/e7/72ce7de706f5969359ff5a8ff27521f1d0fa63dbe08ac8546674ace0709d/grpcio-1.43.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + hash: + sha256: 594aaa0469f4fca7773e80d8c27bf1298e7bbce5f6da0f084b07489a708f16ab + category: main + optional: false +- name: grpcio + version: 1.43.0 + manager: pip + platform: osx-arm64 + dependencies: + six: '>=1.5.2' + url: https://files.pythonhosted.org/packages/c6/6b/5f7cd38ff3ac80f47cbe56618fe45502f90b41a56f5d9e248ee574e14687/grpcio-1.43.0.tar.gz + hash: + sha256: 735d9a437c262ab039d02defddcb9f8f545d7009ae61c0114e19dda3843febe5 + category: main + optional: false +- name: grpcio-status + version: 1.43.0 + manager: pip + platform: linux-64 + dependencies: + protobuf: '>=3.6.0' + grpcio: '>=1.43.0' + googleapis-common-protos: '>=1.5.5' + url: https://files.pythonhosted.org/packages/a3/6b/4d49846da5b5a496658fde7c1315c2ed48b3d98f7460122a19f94af39248/grpcio_status-1.43.0-py3-none-any.whl + hash: + sha256: 9036b24f5769adafdc3e91d9434c20e9ede0b30f50cc6bff105c0f414bb9e0e0 + category: main + optional: false +- name: grpcio-status + version: 1.43.0 + manager: pip + platform: osx-arm64 + dependencies: + protobuf: '>=3.6.0' + grpcio: '>=1.43.0' + googleapis-common-protos: '>=1.5.5' + url: https://files.pythonhosted.org/packages/a3/6b/4d49846da5b5a496658fde7c1315c2ed48b3d98f7460122a19f94af39248/grpcio_status-1.43.0-py3-none-any.whl + hash: + sha256: 9036b24f5769adafdc3e91d9434c20e9ede0b30f50cc6bff105c0f414bb9e0e0 + category: main + optional: false - name: htmlmin version: 0.1.12 manager: pip @@ -16778,6 +17053,21 @@ package: sha256: bf14aa0eb22b58c231243dccf7e7f42f7beec48970f2549b3a6acc737d1a4ba4 category: main optional: false +- name: modin + version: 0.22.3 + manager: pip + platform: osx-arm64 + dependencies: + pandas: 1.5.3 + packaging: '*' + numpy: '>=1.18.5' + fsspec: '*' + psutil: '*' + url: https://files.pythonhosted.org/packages/79/68/e560890fe0b8b89eb55e30bf7c11c4f43d1975da578e516a0996a7fce562/modin-0.22.3-py3-none-any.whl + hash: + sha256: e438ead6eb8dc536dbf8c74365e007d88d6187196f2d0756b77d6551bf35a686 + category: main + optional: false - name: numba version: 0.58.1 manager: pip @@ -16802,6 +17092,19 @@ package: sha256: 9e9356e943617f5e35a74bf56ff6e7cc83e6b1865d5e13cee535d79bf2cae954 category: main optional: false +- name: pandas + version: 1.5.3 + manager: pip + platform: osx-arm64 + dependencies: + python-dateutil: '>=2.8.1' + pytz: '>=2020.1' + numpy: '>=1.20.3' + url: https://files.pythonhosted.org/packages/a7/2b/c71df8794e8e75ba1ec9da1c1a2efc946590aa79a05148a4138405ef5f72/pandas-1.5.3-cp39-cp39-macosx_11_0_arm64.whl + hash: + sha256: a50d9a4336a9621cab7b8eb3fb11adb82de58f9b91d84c2cd526576b881a0c5a + category: main + optional: false - name: patsy version: 0.5.4 manager: pip diff --git a/monodocs-environment.yaml b/monodocs-environment.yaml index 6a707295ea..140552aa2d 100644 --- a/monodocs-environment.yaml +++ b/monodocs-environment.yaml @@ -6,7 +6,7 @@ dependencies: - pip - codespell - furo - - flytekit + - flytekit>=1.10.2 - gitpython - ipython!=8.7.0 - graphviz @@ -67,6 +67,7 @@ dependencies: - flytekitplugins-kfpytorch - flytekitplugins-sqlalchemy - dolt_integrations + - modin - google-cloud - ydata_profiling - whylogs==1.3.3 # whylogs From 6f5c47154549dd9f697f4a44547eda5197d40a52 Mon Sep 17 00:00:00 2001 From: Andrew Dye Date: Fri, 19 Jan 2024 18:50:50 -0800 Subject: [PATCH 20/30] Use logger with formatter (#4747) --- flyteadmin/dataproxy/service.go | 4 ++-- flyteadmin/scheduler/executor/executor_impl.go | 6 +++--- flyteadmin/tests/bootstrap.go | 4 ++-- flyteadmin/tests/execution_test.go | 2 +- flytecopilot/cmd/root.go | 2 +- flyteidl/clients/go/admin/pkce/auth_flow_orchestrator.go | 2 +- flyteplugins/go/tasks/pluginmachinery/ioutils/paths.go | 2 +- flyteplugins/go/tasks/plugins/array/awsbatch/jobs_store.go | 2 +- flyteplugins/go/tasks/plugins/array/awsbatch/monitor.go | 2 +- flyteplugins/go/tasks/plugins/webapi/athena/plugin.go | 2 +- flyteplugins/go/tasks/plugins/webapi/bigquery/plugin.go | 2 +- flyteplugins/go/tasks/plugins/webapi/databricks/plugin.go | 2 +- flyteplugins/go/tasks/plugins/webapi/snowflake/plugin.go | 2 +- flytepropeller/cmd/kubectl-flyte/cmd/root.go | 2 +- flytepropeller/pkg/controller/nodes/executor.go | 2 +- .../pkg/controller/nodes/subworkflow/launchplan/admin.go | 2 +- flytepropeller/pkg/controller/nodes/task/backoff/handler.go | 2 +- flytestdlib/random/weighted_random_list.go | 2 +- flytestdlib/storage/protobuf_store.go | 2 +- 19 files changed, 23 insertions(+), 23 deletions(-) diff --git a/flyteadmin/dataproxy/service.go b/flyteadmin/dataproxy/service.go index 07c8ae1196..3d657c6958 100644 --- a/flyteadmin/dataproxy/service.go +++ b/flyteadmin/dataproxy/service.go @@ -81,10 +81,10 @@ func (s Service) CreateUploadLocation(ctx context.Context, req *service.CreateUp base32Digest := base32.StdEncoding.EncodeToString(req.ContentMd5) base64Digest := base64.StdEncoding.EncodeToString(req.ContentMd5) if hexDigest != metadata.Etag() && base32Digest != metadata.Etag() && base64Digest != metadata.Etag() { - logger.Debug(ctx, "File already exists at location [%v] but hashes do not match", knownLocation) + logger.Debugf(ctx, "File already exists at location [%v] but hashes do not match", knownLocation) return nil, errors.NewFlyteAdminErrorf(codes.AlreadyExists, "file already exists at location [%v], specify a matching hash if you wish to rewrite", knownLocation) } - logger.Debug(ctx, "File already exists at location [%v] but allowing rewrite", knownLocation) + logger.Debugf(ctx, "File already exists at location [%v] but allowing rewrite", knownLocation) } } diff --git a/flyteadmin/scheduler/executor/executor_impl.go b/flyteadmin/scheduler/executor/executor_impl.go index de711ff85e..30ab7f0677 100644 --- a/flyteadmin/scheduler/executor/executor_impl.go +++ b/flyteadmin/scheduler/executor/executor_impl.go @@ -62,7 +62,7 @@ func (w *executor) Execute(ctx context.Context, scheduledTime time.Time, s model }, scheduledTime) if err != nil { - logger.Error(ctx, "failed to generate execution identifier for schedule %+v due to %v", s, err) + logger.Errorf(ctx, "failed to generate execution identifier for schedule %+v due to %v", s, err) return err } @@ -107,7 +107,7 @@ func (w *executor) Execute(ctx context.Context, scheduledTime time.Time, s model return false } w.metrics.FailedExecutionCounter.Inc() - logger.Error(ctx, "failed to create execution create request %+v due to %v", executionRequest, err) + logger.Errorf(ctx, "failed to create execution create request %+v due to %v", executionRequest, err) // TODO: Handle the case when admin launch plan state is archived but the schedule is active. // After this bug is fixed in admin https://github.com/flyteorg/flyte/issues/1354 return true @@ -118,7 +118,7 @@ func (w *executor) Execute(ctx context.Context, scheduledTime time.Time, s model }, ) if err != nil && status.Code(err) != codes.AlreadyExists { - logger.Error(ctx, "failed to create execution create request %+v due to %v after all retries", executionRequest, err) + logger.Errorf(ctx, "failed to create execution create request %+v due to %v after all retries", executionRequest, err) return err } w.metrics.SuccessfulExecutionCounter.Inc() diff --git a/flyteadmin/tests/bootstrap.go b/flyteadmin/tests/bootstrap.go index 0bf1714f27..9fd3b27026 100644 --- a/flyteadmin/tests/bootstrap.go +++ b/flyteadmin/tests/bootstrap.go @@ -76,7 +76,7 @@ func truncateAllTablesForTestingOnly() { ctx := context.Background() db, err := repositories.GetDB(ctx, getDbConfig(), getLoggerConfig()) if err != nil { - logger.Fatal(ctx, "Failed to open DB connection due to %v", err) + logger.Fatalf(ctx, "Failed to open DB connection due to %v", err) } sqlDB, err := db.DB() if err != nil { @@ -110,7 +110,7 @@ func populateWorkflowExecutionForTestingOnly(project, domain, name string) { db, err := repositories.GetDB(context.Background(), getDbConfig(), getLoggerConfig()) ctx := context.Background() if err != nil { - logger.Fatal(ctx, "Failed to open DB connection due to %v", err) + logger.Fatalf(ctx, "Failed to open DB connection due to %v", err) } sqlDB, err := db.DB() if err != nil { diff --git a/flyteadmin/tests/execution_test.go b/flyteadmin/tests/execution_test.go index 2f97cfcd05..d0d373a1d5 100644 --- a/flyteadmin/tests/execution_test.go +++ b/flyteadmin/tests/execution_test.go @@ -160,7 +160,7 @@ func populateWorkflowExecutionsForTestingOnly() { db, err := repositories.GetDB(context.Background(), getDbConfig(), getLoggerConfig()) ctx := context.Background() if err != nil { - logger.Fatal(ctx, "Failed to open DB connection due to %v", err) + logger.Fatalf(ctx, "Failed to open DB connection due to %v", err) } sqlDB, err := db.DB() if err != nil { diff --git a/flytecopilot/cmd/root.go b/flytecopilot/cmd/root.go index 3e81f3655b..dd7683ef49 100644 --- a/flytecopilot/cmd/root.go +++ b/flytecopilot/cmd/root.go @@ -184,7 +184,7 @@ func init() { pflag.CommandLine.AddGoFlagSet(flag.CommandLine) err := flag.CommandLine.Parse([]string{}) if err != nil { - logger.Error(context.TODO(), "Error in initializing: %v", err) + logger.Errorf(context.TODO(), "Error in initializing: %v", err) os.Exit(-1) } labeled.SetMetricKeys(contextutils.ProjectKey, contextutils.DomainKey, contextutils.WorkflowIDKey, contextutils.TaskIDKey) diff --git a/flyteidl/clients/go/admin/pkce/auth_flow_orchestrator.go b/flyteidl/clients/go/admin/pkce/auth_flow_orchestrator.go index 5d194851f2..f79217443c 100644 --- a/flyteidl/clients/go/admin/pkce/auth_flow_orchestrator.go +++ b/flyteidl/clients/go/admin/pkce/auth_flow_orchestrator.go @@ -77,7 +77,7 @@ func (f TokenOrchestrator) FetchTokenFromAuthFlow(ctx context.Context) (*oauth2. go func() { if err = server.ListenAndServe(); err != nil && err != http.ErrServerClosed { - logger.Fatal(ctx, "Couldn't start the callback http server on host %v due to %v", redirectURL.Host, + logger.Fatalf(ctx, "Couldn't start the callback http server on host %v due to %v", redirectURL.Host, err) } }() diff --git a/flyteplugins/go/tasks/pluginmachinery/ioutils/paths.go b/flyteplugins/go/tasks/pluginmachinery/ioutils/paths.go index 28bacceaed..e499535e70 100644 --- a/flyteplugins/go/tasks/pluginmachinery/ioutils/paths.go +++ b/flyteplugins/go/tasks/pluginmachinery/ioutils/paths.go @@ -43,7 +43,7 @@ func ConstructCheckpointPath(store storage.ReferenceConstructor, rawOutputPrefix func constructPath(store storage.ReferenceConstructor, base storage.DataReference, suffix string) storage.DataReference { res, err := store.ConstructReference(context.Background(), base, suffix) if err != nil { - logger.Error(context.Background(), "Failed to construct path. Base[%v] Error: %v", base, err) + logger.Errorf(context.Background(), "Failed to construct path. Base[%v] Error: %v", base, err) } return res diff --git a/flyteplugins/go/tasks/plugins/array/awsbatch/jobs_store.go b/flyteplugins/go/tasks/plugins/array/awsbatch/jobs_store.go index cd3bca93c4..16d44b490e 100644 --- a/flyteplugins/go/tasks/plugins/array/awsbatch/jobs_store.go +++ b/flyteplugins/go/tasks/plugins/array/awsbatch/jobs_store.go @@ -272,7 +272,7 @@ func syncBatches(_ context.Context, client Client, handler EventHandler, batchCh for _, jobDetail := range response { job, found := jobIDsMap[*jobDetail.JobId] if !found { - logger.Warn(ctx, "Received an update for unrequested job id [%v]", jobDetail.JobId) + logger.Warnf(ctx, "Received an update for unrequested job id [%v]", jobDetail.JobId) continue } diff --git a/flyteplugins/go/tasks/plugins/array/awsbatch/monitor.go b/flyteplugins/go/tasks/plugins/array/awsbatch/monitor.go index 666b1e741a..62bc5103dc 100644 --- a/flyteplugins/go/tasks/plugins/array/awsbatch/monitor.go +++ b/flyteplugins/go/tasks/plugins/array/awsbatch/monitor.go @@ -49,7 +49,7 @@ func CheckSubTasksState(ctx context.Context, tCtx core.TaskExecutionContext, job // If job isn't currently being monitored (recovering from a restart?), add it to the sync-cache and return if job == nil { - logger.Info(ctx, "Job not found in cache, adding it. [%v]", jobName) + logger.Infof(ctx, "Job not found in cache, adding it. [%v]", jobName) _, err = jobStore.GetOrCreate(jobName, &Job{ ID: *currentState.ExternalJobID, diff --git a/flyteplugins/go/tasks/plugins/webapi/athena/plugin.go b/flyteplugins/go/tasks/plugins/webapi/athena/plugin.go index 826a12e45f..b485589736 100644 --- a/flyteplugins/go/tasks/plugins/webapi/athena/plugin.go +++ b/flyteplugins/go/tasks/plugins/webapi/athena/plugin.go @@ -128,7 +128,7 @@ func (p Plugin) Delete(ctx context.Context, tCtx webapi.DeleteContext) error { return err } - logger.Info(ctx, "Deleted query execution [%v]", resp) + logger.Infof(ctx, "Deleted query execution [%v]", resp) return nil } diff --git a/flyteplugins/go/tasks/plugins/webapi/bigquery/plugin.go b/flyteplugins/go/tasks/plugins/webapi/bigquery/plugin.go index f08d1d15ea..6661550530 100644 --- a/flyteplugins/go/tasks/plugins/webapi/bigquery/plugin.go +++ b/flyteplugins/go/tasks/plugins/webapi/bigquery/plugin.go @@ -256,7 +256,7 @@ func (p Plugin) Delete(ctx context.Context, taskCtx webapi.DeleteContext) error return err } - logger.Info(ctx, "Cancelled job [%s]", formatJobReference(resourceMeta.JobReference)) + logger.Infof(ctx, "Cancelled job [%s]", formatJobReference(resourceMeta.JobReference)) return nil } diff --git a/flyteplugins/go/tasks/plugins/webapi/databricks/plugin.go b/flyteplugins/go/tasks/plugins/webapi/databricks/plugin.go index 3bd03135dc..3e9b37ea93 100644 --- a/flyteplugins/go/tasks/plugins/webapi/databricks/plugin.go +++ b/flyteplugins/go/tasks/plugins/webapi/databricks/plugin.go @@ -203,7 +203,7 @@ func (p Plugin) Delete(ctx context.Context, taskCtx webapi.DeleteContext) error return err } defer resp.Body.Close() - logger.Info(ctx, "Deleted query execution [%v]", resp) + logger.Infof(ctx, "Deleted query execution [%v]", resp) return nil } diff --git a/flyteplugins/go/tasks/plugins/webapi/snowflake/plugin.go b/flyteplugins/go/tasks/plugins/webapi/snowflake/plugin.go index 33334b4003..02bf947fd4 100644 --- a/flyteplugins/go/tasks/plugins/webapi/snowflake/plugin.go +++ b/flyteplugins/go/tasks/plugins/webapi/snowflake/plugin.go @@ -179,7 +179,7 @@ func (p Plugin) Delete(ctx context.Context, taskCtx webapi.DeleteContext) error return err } defer resp.Body.Close() - logger.Info(ctx, "Deleted query execution [%v]", resp) + logger.Infof(ctx, "Deleted query execution [%v]", resp) return nil } diff --git a/flytepropeller/cmd/kubectl-flyte/cmd/root.go b/flytepropeller/cmd/kubectl-flyte/cmd/root.go index 4bfabe47b5..f6e2d92110 100644 --- a/flytepropeller/cmd/kubectl-flyte/cmd/root.go +++ b/flytepropeller/cmd/kubectl-flyte/cmd/root.go @@ -24,7 +24,7 @@ func init() { pflag.CommandLine.AddGoFlagSet(flag.CommandLine) err := flag.CommandLine.Parse([]string{}) if err != nil { - logger.Error(context.TODO(), "Error in initializing: %v", err) + logger.Errorf(context.TODO(), "Error in initializing: %v", err) os.Exit(-1) } } diff --git a/flytepropeller/pkg/controller/nodes/executor.go b/flytepropeller/pkg/controller/nodes/executor.go index 6ddde14c71..0c98aeeb5f 100644 --- a/flytepropeller/pkg/controller/nodes/executor.go +++ b/flytepropeller/pkg/controller/nodes/executor.go @@ -583,7 +583,7 @@ func (c *nodeExecutor) attemptRecovery(ctx context.Context, nCtx interfaces.Node state.PreviousNodeExecutionCheckpointURI = storage.DataReference(metadata.TaskNodeMetadata.CheckpointUri) err = nCtx.NodeStateWriter().PutTaskNodeState(state) if err != nil { - logger.Warn(ctx, "failed to save recovered checkpoint uri for [%+v]: [%+v]", + logger.Warnf(ctx, "failed to save recovered checkpoint uri for [%+v]: [%+v]", nCtx.NodeExecutionMetadata().GetNodeExecutionID(), err) } } diff --git a/flytepropeller/pkg/controller/nodes/subworkflow/launchplan/admin.go b/flytepropeller/pkg/controller/nodes/subworkflow/launchplan/admin.go index 336f095e90..29de745acf 100644 --- a/flytepropeller/pkg/controller/nodes/subworkflow/launchplan/admin.go +++ b/flytepropeller/pkg/controller/nodes/subworkflow/launchplan/admin.go @@ -148,7 +148,7 @@ func (a *adminLaunchPlanExecutor) Launch(ctx context.Context, launchCtx LaunchCo _, err = a.cache.GetOrCreate(executionID.String(), executionCacheItem{WorkflowExecutionIdentifier: *executionID}) if err != nil { - logger.Info(ctx, "Failed to add ExecID [%v] to auto refresh cache", executionID) + logger.Infof(ctx, "Failed to add ExecID [%v] to auto refresh cache", executionID) } return nil diff --git a/flytepropeller/pkg/controller/nodes/task/backoff/handler.go b/flytepropeller/pkg/controller/nodes/task/backoff/handler.go index 757c2420f8..fc890c7a09 100644 --- a/flytepropeller/pkg/controller/nodes/task/backoff/handler.go +++ b/flytepropeller/pkg/controller/nodes/task/backoff/handler.go @@ -49,7 +49,7 @@ func (b *SimpleBackOffBlocker) reset() { } func (b *SimpleBackOffBlocker) backOff(ctx context.Context) time.Duration { - logger.Debug(ctx, "BackOff params [BackOffBaseSecond: %v] [BackOffExponent: %v] [MaxBackOffDuration: %v]", + logger.Debugf(ctx, "BackOff params [BackOffBaseSecond: %v] [BackOffExponent: %v] [MaxBackOffDuration: %v]", b.BackOffBaseSecond, b.BackOffExponent, b.MaxBackOffDuration) backOffDuration := time.Duration(time.Second.Nanoseconds() * int64(math.Pow(float64(b.BackOffBaseSecond), diff --git a/flytestdlib/random/weighted_random_list.go b/flytestdlib/random/weighted_random_list.go index 7a0d44bbaa..d9e23943a4 100644 --- a/flytestdlib/random/weighted_random_list.go +++ b/flytestdlib/random/weighted_random_list.go @@ -84,7 +84,7 @@ func NewWeightedRandom(ctx context.Context, entries []Entry) (WeightedRandomList currentTotal += 1.0 / float32(numberOfEntries) } else if e.Weight == 0 { // Entries which have zero weight are ignored - logger.Debug(ctx, "ignoring entry due to empty weight %v", e) + logger.Debugf(ctx, "ignoring entry due to empty weight %v", e) continue } diff --git a/flytestdlib/storage/protobuf_store.go b/flytestdlib/storage/protobuf_store.go index 0fb5bdc5c2..cf5a0c790c 100644 --- a/flytestdlib/storage/protobuf_store.go +++ b/flytestdlib/storage/protobuf_store.go @@ -46,7 +46,7 @@ func (s DefaultProtobufStore) ReadProtobuf(ctx context.Context, reference DataRe defer func() { err = rc.Close() if err != nil { - logger.Warn(ctx, "Failed to close reference [%v]. Error: %v", reference, err) + logger.Warnf(ctx, "Failed to close reference [%v]. Error: %v", reference, err) } }() From be03528f238df5cadd64a96365866847434c7106 Mon Sep 17 00:00:00 2001 From: Kevin Su Date: Sat, 20 Jan 2024 22:19:55 -0800 Subject: [PATCH 21/30] Remove pull_request_template (#4753) Signed-off-by: Kevin Su --- datacatalog/pull_request_template.md | 35 ------------------------- flyteadmin/pull_request_template.md | 35 ------------------------- flytecopilot/pull_request_template.md | 35 ------------------------- flyteidl/pull_request_template.md | 35 ------------------------- flyteplugins/pull_request_template.md | 35 ------------------------- flytepropeller/pull_request_template.md | 35 ------------------------- flytestdlib/pull_request_template.md | 35 ------------------------- 7 files changed, 245 deletions(-) delete mode 100644 datacatalog/pull_request_template.md delete mode 100644 flyteadmin/pull_request_template.md delete mode 100644 flytecopilot/pull_request_template.md delete mode 100644 flyteidl/pull_request_template.md delete mode 100644 flyteplugins/pull_request_template.md delete mode 100644 flytepropeller/pull_request_template.md delete mode 100644 flytestdlib/pull_request_template.md diff --git a/datacatalog/pull_request_template.md b/datacatalog/pull_request_template.md deleted file mode 100644 index 9cdab99b46..0000000000 --- a/datacatalog/pull_request_template.md +++ /dev/null @@ -1,35 +0,0 @@ -## _Read then delete this section_ - -_- Make sure to use a concise title for the pull-request._ - -_- Use #patch, #minor or #major in the pull-request title to bump the corresponding version. Otherwise, the patch version -will be bumped. [More details](https://github.com/marketplace/actions/github-tag-bump)_ - -# TL;DR -_Please replace this text with a description of what this PR accomplishes._ - -## Type - - [ ] Bug Fix - - [ ] Feature - - [ ] Plugin - -## Are all requirements met? - - - [ ] Code completed - - [ ] Smoke tested - - [ ] Unit tests added - - [ ] Code documentation added - - [ ] Any pending items have an associated Issue - -## Complete description - _How did you fix the bug, make the feature etc. Link to any design docs etc_ - -## Tracking Issue -_Remove the '*fixes*' keyword if there will be multiple PRs to fix the linked issue_ - -fixes https://github.com/flyteorg/flyte/issues/ - -## Follow-up issue -_NA_ -OR -_https://github.com/flyteorg/flyte/issues/_ diff --git a/flyteadmin/pull_request_template.md b/flyteadmin/pull_request_template.md deleted file mode 100644 index 9cdab99b46..0000000000 --- a/flyteadmin/pull_request_template.md +++ /dev/null @@ -1,35 +0,0 @@ -## _Read then delete this section_ - -_- Make sure to use a concise title for the pull-request._ - -_- Use #patch, #minor or #major in the pull-request title to bump the corresponding version. Otherwise, the patch version -will be bumped. [More details](https://github.com/marketplace/actions/github-tag-bump)_ - -# TL;DR -_Please replace this text with a description of what this PR accomplishes._ - -## Type - - [ ] Bug Fix - - [ ] Feature - - [ ] Plugin - -## Are all requirements met? - - - [ ] Code completed - - [ ] Smoke tested - - [ ] Unit tests added - - [ ] Code documentation added - - [ ] Any pending items have an associated Issue - -## Complete description - _How did you fix the bug, make the feature etc. Link to any design docs etc_ - -## Tracking Issue -_Remove the '*fixes*' keyword if there will be multiple PRs to fix the linked issue_ - -fixes https://github.com/flyteorg/flyte/issues/ - -## Follow-up issue -_NA_ -OR -_https://github.com/flyteorg/flyte/issues/_ diff --git a/flytecopilot/pull_request_template.md b/flytecopilot/pull_request_template.md deleted file mode 100644 index 9cdab99b46..0000000000 --- a/flytecopilot/pull_request_template.md +++ /dev/null @@ -1,35 +0,0 @@ -## _Read then delete this section_ - -_- Make sure to use a concise title for the pull-request._ - -_- Use #patch, #minor or #major in the pull-request title to bump the corresponding version. Otherwise, the patch version -will be bumped. [More details](https://github.com/marketplace/actions/github-tag-bump)_ - -# TL;DR -_Please replace this text with a description of what this PR accomplishes._ - -## Type - - [ ] Bug Fix - - [ ] Feature - - [ ] Plugin - -## Are all requirements met? - - - [ ] Code completed - - [ ] Smoke tested - - [ ] Unit tests added - - [ ] Code documentation added - - [ ] Any pending items have an associated Issue - -## Complete description - _How did you fix the bug, make the feature etc. Link to any design docs etc_ - -## Tracking Issue -_Remove the '*fixes*' keyword if there will be multiple PRs to fix the linked issue_ - -fixes https://github.com/flyteorg/flyte/issues/ - -## Follow-up issue -_NA_ -OR -_https://github.com/flyteorg/flyte/issues/_ diff --git a/flyteidl/pull_request_template.md b/flyteidl/pull_request_template.md deleted file mode 100644 index 9cdab99b46..0000000000 --- a/flyteidl/pull_request_template.md +++ /dev/null @@ -1,35 +0,0 @@ -## _Read then delete this section_ - -_- Make sure to use a concise title for the pull-request._ - -_- Use #patch, #minor or #major in the pull-request title to bump the corresponding version. Otherwise, the patch version -will be bumped. [More details](https://github.com/marketplace/actions/github-tag-bump)_ - -# TL;DR -_Please replace this text with a description of what this PR accomplishes._ - -## Type - - [ ] Bug Fix - - [ ] Feature - - [ ] Plugin - -## Are all requirements met? - - - [ ] Code completed - - [ ] Smoke tested - - [ ] Unit tests added - - [ ] Code documentation added - - [ ] Any pending items have an associated Issue - -## Complete description - _How did you fix the bug, make the feature etc. Link to any design docs etc_ - -## Tracking Issue -_Remove the '*fixes*' keyword if there will be multiple PRs to fix the linked issue_ - -fixes https://github.com/flyteorg/flyte/issues/ - -## Follow-up issue -_NA_ -OR -_https://github.com/flyteorg/flyte/issues/_ diff --git a/flyteplugins/pull_request_template.md b/flyteplugins/pull_request_template.md deleted file mode 100644 index 9cdab99b46..0000000000 --- a/flyteplugins/pull_request_template.md +++ /dev/null @@ -1,35 +0,0 @@ -## _Read then delete this section_ - -_- Make sure to use a concise title for the pull-request._ - -_- Use #patch, #minor or #major in the pull-request title to bump the corresponding version. Otherwise, the patch version -will be bumped. [More details](https://github.com/marketplace/actions/github-tag-bump)_ - -# TL;DR -_Please replace this text with a description of what this PR accomplishes._ - -## Type - - [ ] Bug Fix - - [ ] Feature - - [ ] Plugin - -## Are all requirements met? - - - [ ] Code completed - - [ ] Smoke tested - - [ ] Unit tests added - - [ ] Code documentation added - - [ ] Any pending items have an associated Issue - -## Complete description - _How did you fix the bug, make the feature etc. Link to any design docs etc_ - -## Tracking Issue -_Remove the '*fixes*' keyword if there will be multiple PRs to fix the linked issue_ - -fixes https://github.com/flyteorg/flyte/issues/ - -## Follow-up issue -_NA_ -OR -_https://github.com/flyteorg/flyte/issues/_ diff --git a/flytepropeller/pull_request_template.md b/flytepropeller/pull_request_template.md deleted file mode 100644 index 9cdab99b46..0000000000 --- a/flytepropeller/pull_request_template.md +++ /dev/null @@ -1,35 +0,0 @@ -## _Read then delete this section_ - -_- Make sure to use a concise title for the pull-request._ - -_- Use #patch, #minor or #major in the pull-request title to bump the corresponding version. Otherwise, the patch version -will be bumped. [More details](https://github.com/marketplace/actions/github-tag-bump)_ - -# TL;DR -_Please replace this text with a description of what this PR accomplishes._ - -## Type - - [ ] Bug Fix - - [ ] Feature - - [ ] Plugin - -## Are all requirements met? - - - [ ] Code completed - - [ ] Smoke tested - - [ ] Unit tests added - - [ ] Code documentation added - - [ ] Any pending items have an associated Issue - -## Complete description - _How did you fix the bug, make the feature etc. Link to any design docs etc_ - -## Tracking Issue -_Remove the '*fixes*' keyword if there will be multiple PRs to fix the linked issue_ - -fixes https://github.com/flyteorg/flyte/issues/ - -## Follow-up issue -_NA_ -OR -_https://github.com/flyteorg/flyte/issues/_ diff --git a/flytestdlib/pull_request_template.md b/flytestdlib/pull_request_template.md deleted file mode 100644 index 9cdab99b46..0000000000 --- a/flytestdlib/pull_request_template.md +++ /dev/null @@ -1,35 +0,0 @@ -## _Read then delete this section_ - -_- Make sure to use a concise title for the pull-request._ - -_- Use #patch, #minor or #major in the pull-request title to bump the corresponding version. Otherwise, the patch version -will be bumped. [More details](https://github.com/marketplace/actions/github-tag-bump)_ - -# TL;DR -_Please replace this text with a description of what this PR accomplishes._ - -## Type - - [ ] Bug Fix - - [ ] Feature - - [ ] Plugin - -## Are all requirements met? - - - [ ] Code completed - - [ ] Smoke tested - - [ ] Unit tests added - - [ ] Code documentation added - - [ ] Any pending items have an associated Issue - -## Complete description - _How did you fix the bug, make the feature etc. Link to any design docs etc_ - -## Tracking Issue -_Remove the '*fixes*' keyword if there will be multiple PRs to fix the linked issue_ - -fixes https://github.com/flyteorg/flyte/issues/ - -## Follow-up issue -_NA_ -OR -_https://github.com/flyteorg/flyte/issues/_ From 5300e1bd596ba808f1f879fbd8569d4f0dd212fe Mon Sep 17 00:00:00 2001 From: Nikki Everett Date: Sun, 21 Jan 2024 01:07:16 -0600 Subject: [PATCH 22/30] reapply databricks agent docs changes from #4008 (#4751) Signed-off-by: nikki everett --- docs/deployment/agents/bigquery.rst | 2 + docs/deployment/agents/databricks.rst | 294 +++++++++++++++++++ docs/deployment/agents/index.md | 3 + docs/deployment/agents/mmcloud.rst | 8 +- docs/deployment/plugins/webapi/snowflake.rst | 4 +- 5 files changed, 307 insertions(+), 4 deletions(-) create mode 100644 docs/deployment/agents/databricks.rst diff --git a/docs/deployment/agents/bigquery.rst b/docs/deployment/agents/bigquery.rst index ac6ec896bb..9835c3d47a 100644 --- a/docs/deployment/agents/bigquery.rst +++ b/docs/deployment/agents/bigquery.rst @@ -102,3 +102,5 @@ Upgrade the Flyte Helm release Replace ```` with the name of your release (e.g., ``flyte``) and ```` with the name of your namespace (e.g., ``flyte``). + +For BigQuery plugin on the Flyte cluster, please refer to `BigQuery Plugin Example `_ diff --git a/docs/deployment/agents/databricks.rst b/docs/deployment/agents/databricks.rst new file mode 100644 index 0000000000..00a5e97a47 --- /dev/null +++ b/docs/deployment/agents/databricks.rst @@ -0,0 +1,294 @@ +.. _deployment-agent-setup-databricks: + +Databricks Agent +================= + +This guide provides an overview of how to set up Databricks agent in your Flyte deployment. + +Spin up a cluster +----------------- + +.. tabs:: + + .. group-tab:: Flyte binary + + You can spin up a demo cluster using the following command: + + .. code-block:: bash + + flytectl demo start + + Or install Flyte using the :ref:`flyte-binary helm chart `. + + .. group-tab:: Flyte core + + If you've installed Flyte using the + `flyte-core helm chart `__, please ensure: + + * You have the correct kubeconfig and have selected the correct Kubernetes context. + * You have configured the correct flytectl settings in ``~/.flyte/config.yaml``. + +.. note:: + + Add the Flyte chart repo to Helm if you're installing via the Helm charts. + + .. code-block:: bash + + helm repo add flyteorg https://flyteorg.github.io/flyte + +Databricks workspace +-------------------- + +To set up your Databricks account, follow these steps: + +1. Create a `Databricks account `__. + +.. image:: https://raw.githubusercontent.com/flyteorg/static-resources/main/flyte/deployment/plugins/databricks/databricks_workspace.png + :alt: A screenshot of Databricks workspace creation. + +2. Ensure that you have a Databricks workspace up and running. + +.. image:: https://raw.githubusercontent.com/flyteorg/static-resources/main/flyte/deployment/plugins/databricks/open_workspace.png + :alt: A screenshot of Databricks workspace. + +3. Generate a `personal access token + `__ to be used in the Flyte configuration. + You can find the personal access token in the user settings within the workspace. ``User settings`` -> ``Developer`` -> ``Access tokens`` + +.. image:: https://raw.githubusercontent.com/flyteorg/static-resources/main/flyte/deployment/plugins/databricks/databricks_access_token.png + :alt: A screenshot of access token. + +4. Enable custom containers on your Databricks cluster before you trigger the workflow. + +.. code-block:: bash + + curl -X PATCH -n -H "Authorization: Bearer " \ + https:///api/2.0/workspace-conf \ + -d '{"enableDcs": "true"}' + +For more detail, check `custom containers `__. + +5. Create an `instance profile +`__ +for the Spark cluster. This profile enables the Spark job to access your data in the S3 bucket. + +Create an instance profile using the AWS console (For AWS Users) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +1. In the AWS console, go to the IAM service. +2. Click the Roles tab in the sidebar. +3. Click Create role. + + a. Under Trusted entity type, select AWS service. + b. Under Use case, select **EC2**. + c. Click Next. + d. At the bottom of the page, click Next. + e. In the Role name field, type a role name. + f. Click Create role. + +4. In the role list, click the **AmazonS3FullAccess** role. +5. Click Create role button. + +In the role summary, copy the Role ARN. + +.. image:: https://raw.githubusercontent.com/flyteorg/static-resources/main/flyte/deployment/plugins/databricks/s3_arn.png + :alt: A screenshot of s3 arn. + +Locate the IAM role that created the Databricks deployment +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +If you don’t know which IAM role created the Databricks deployment, do the following: + +1. As an account admin, log in to the account console. +2. Go to ``Workspaces`` and click your workspace name. +3. In the Credentials box, note the role name at the end of the Role ARN + +For example, in the Role ARN ``arn:aws:iam::123456789123:role/finance-prod``, the role name is finance-prod + +Edit the IAM role that created the Databricks deployment +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +1. In the AWS console, go to the IAM service. +2. Click the Roles tab in the sidebar. +3. Click the role that created the Databricks deployment. +4. On the Permissions tab, click the policy. +5. Click Edit Policy. +6. Append the following block to the end of the Statement array. Ensure that you don’t overwrite any of the existing policy. Replace with the role you created in Configure S3 access with instance profiles. + +.. code-block:: bash + + { + "Effect": "Allow", + "Action": "iam:PassRole", + "Resource": "arn:aws:iam:::role/" + } + +Specify agent configuration +---------------------------- + +.. tabs:: + + .. group-tab:: Flyte binary + + .. tabs:: + + .. group-tab:: Demo cluster + + Enable the Databricks agent on the demo cluster by updating the ConfigMap: + + .. code-block:: bash + + kubectl edit configmap flyte-sandbox-config -n flyte + + .. code-block:: yaml + :emphasize-lines: 7,12,16 + + tasks: + task-plugins: + default-for-task-types: + container: container + container_array: k8s-array + sidecar: sidecar + spark: agent-service + enabled-plugins: + - container + - sidecar + - k8s-array + - agent-service + plugins: + agent-service: + supportedTaskTypes: + - spark + + .. group-tab:: Helm chart + + Edit the relevant YAML file to specify the plugin. + + .. code-block:: yaml + :emphasize-lines: 7,11,15 + + tasks: + task-plugins: + enabled-plugins: + - container + - sidecar + - k8s-array + - agent-service + default-for-task-types: + - container: container + - container_array: k8s-array + - spark: agent-service + plugins: + agent-service: + supportedTaskTypes: + - spark + + .. group-tab:: Flyte core + + Create a file named ``values-override.yaml`` and add the following config to it: + + .. code-block:: yaml + :emphasize-lines: 9,14-17 + + enabled_plugins: + tasks: + task-plugins: + enabled-plugins: + - container + - sidecar + - k8s-array + - agent-service + default-for-task-types: + container: container + sidecar: sidecar + container_array: k8s-array + spark: agent-service + plugins: + agent-service: + supportedTaskTypes: + - spark + +Add the Databricks access token +------------------------------- + +You have to set the Databricks token to the Flyte configuration. + +1. Install flyteagent pod using helm + +.. code-block:: + + helm repo add flyteorg https://flyteorg.github.io/flyte + helm install flyteagent flyteorg/flyteagent --namespace flyte + +2. Get the base64 value of your Databricks token. + +.. code-block:: + + echo -n "" | base64 + +3. Edit the flyteagent secret + + .. code-block:: bash + + kubectl edit secret flyteagent -n flyte + + .. code-block:: yaml + :emphasize-lines: 3 + + apiVersion: v1 + data: + flyte_databricks_access_token: + kind: Secret + metadata: + annotations: + meta.helm.sh/release-name: flyteagent + meta.helm.sh/release-namespace: flyte + creationTimestamp: "2023-10-04T04:09:03Z" + labels: + app.kubernetes.io/managed-by: Helm + name: flyteagent + namespace: flyte + resourceVersion: "753" + uid: 5ac1e1b6-2a4c-4e26-9001-d4ba72c39e54 + type: Opaque + + +Upgrade the deployment +---------------------- + +.. tabs:: + + .. group-tab:: Flyte binary + + .. tabs:: + + .. group-tab:: Demo cluster + + .. code-block:: + + kubectl rollout restart deployment flyte-sandbox -n flyte + + .. group-tab:: Helm chart + + .. code-block:: + + helm upgrade flyteorg/flyte-binary -n --values + + Replace ```` with the name of your release (e.g., ``flyte-backend``), + ```` with the name of your namespace (e.g., ``flyte``), + and ```` with the name of your YAML file. + + .. group-tab:: Flyte core + + .. code-block:: + + helm upgrade flyte/flyte-core -n --values values-override.yaml + + Replace ```` with the name of your release (e.g., ``flyte``) + and ```` with the name of your namespace (e.g., ``flyte``). + +Wait for the upgrade to complete. You can check the status of the deployment pods by running the following command: + +.. code-block:: + + kubectl get pods -n flyte + +For databricks plugin on the Flyte cluster, please refer to `Databricks Plugin Example `_ diff --git a/docs/deployment/agents/index.md b/docs/deployment/agents/index.md index 10a80236b9..2f2b7cb2d8 100644 --- a/docs/deployment/agents/index.md +++ b/docs/deployment/agents/index.md @@ -16,6 +16,8 @@ Discover the process of setting up Agents for Flyte. - Guide to setting up the MMCloud agent. * - {ref}`Sensor Agent ` - Guide to setting up the Sensor agent. +* - {ref} `Databricks Agent ` + - Guide to setting up the Databricks agent. ``` ```{toctree} @@ -25,5 +27,6 @@ Discover the process of setting up Agents for Flyte. bigquery mmcloud +databricks sensor ``` diff --git a/docs/deployment/agents/mmcloud.rst b/docs/deployment/agents/mmcloud.rst index 1e36ff7cfc..69b30f4309 100644 --- a/docs/deployment/agents/mmcloud.rst +++ b/docs/deployment/agents/mmcloud.rst @@ -57,15 +57,15 @@ Enable the MMCloud agent by adding the following config to the relevant YAML fil .. code-block:: yaml tasks: - task-agents: - enabled-agents: + task-plugins: + enabled-plugins: - agent-service default-for-task-types: - mmcloud_task: agent-service .. code-block:: yaml - agents: + plugins: agent-service: agents: mmcloud-agent: @@ -117,3 +117,5 @@ Wait for the upgrade to complete. You can check the status of the deployment pod .. code-block:: kubectl get pods -n flyte + + For MMCloud plugin on the Flyte cluster, please refer to `Memory Machine Cloud Plugin Example `_ diff --git a/docs/deployment/plugins/webapi/snowflake.rst b/docs/deployment/plugins/webapi/snowflake.rst index a4ac2d35cf..80ef2305d0 100644 --- a/docs/deployment/plugins/webapi/snowflake.rst +++ b/docs/deployment/plugins/webapi/snowflake.rst @@ -239,4 +239,6 @@ Wait for the upgrade to complete. You can check the status of the deployment pod .. code-block:: - kubectl get pods -n flyte \ No newline at end of file + kubectl get pods -n flyte + + For Snowflake plugin on the Flyte cluster, please refer to `Snowflake Plugin Example `_ From 41d61732ef0315af75fd129184eb7c73406d57f3 Mon Sep 17 00:00:00 2001 From: Eduardo Apolinario <653394+eapolinario@users.noreply.github.com> Date: Mon, 22 Jan 2024 17:13:42 -0800 Subject: [PATCH 23/30] Fix test get logs template uri test (#4760) * Fix common_operator_test by forcing UTC Signed-off-by: Eduardo Apolinario * Lint Signed-off-by: Eduardo Apolinario --------- Signed-off-by: Eduardo Apolinario Co-authored-by: Eduardo Apolinario --- flyteplugins/go/tasks/pluginmachinery/k8s/client.go | 2 +- .../k8s/kfoperators/common/common_operator_test.go | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/flyteplugins/go/tasks/pluginmachinery/k8s/client.go b/flyteplugins/go/tasks/pluginmachinery/k8s/client.go index f14ae2c8a0..0ab46081e9 100644 --- a/flyteplugins/go/tasks/pluginmachinery/k8s/client.go +++ b/flyteplugins/go/tasks/pluginmachinery/k8s/client.go @@ -69,7 +69,7 @@ func NewKubeClient(config *rest.Config, options Options) (core.KubeClient, error if options.ClientOptions == nil { options.ClientOptions = &client.Options{ HTTPClient: httpClient, - Mapper: mapper, + Mapper: mapper, } } diff --git a/flyteplugins/go/tasks/plugins/k8s/kfoperators/common/common_operator_test.go b/flyteplugins/go/tasks/plugins/k8s/kfoperators/common/common_operator_test.go index 1c33594997..bf7d537416 100644 --- a/flyteplugins/go/tasks/plugins/k8s/kfoperators/common/common_operator_test.go +++ b/flyteplugins/go/tasks/plugins/k8s/kfoperators/common/common_operator_test.go @@ -2,6 +2,7 @@ package common import ( "fmt" + "os" "testing" "time" @@ -18,6 +19,13 @@ import ( "github.com/flyteorg/flyte/flyteplugins/go/tasks/pluginmachinery/core/mocks" ) +func TestMain(m *testing.M) { + // All tests should run assuming UTC timezone. + time.Local = time.UTC + code := m.Run() + os.Exit(code) +} + func TestExtractCurrentCondition(t *testing.T) { jobCreated := commonOp.JobCondition{ Type: commonOp.JobCreated, From ca7325147745273e4157e3595ac0e5b764aa9d74 Mon Sep 17 00:00:00 2001 From: Nikki Everett Date: Mon, 22 Jan 2024 19:47:00 -0600 Subject: [PATCH 24/30] Small formatting fixes for Databrick agents docs (#4758) * fix link to databricks agent setup doc Signed-off-by: nikki everett * fix formatting Signed-off-by: nikki everett --------- Signed-off-by: nikki everett --- docs/deployment/agents/index.md | 2 +- docs/deployment/agents/mmcloud.rst | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/deployment/agents/index.md b/docs/deployment/agents/index.md index 2f2b7cb2d8..e27644570a 100644 --- a/docs/deployment/agents/index.md +++ b/docs/deployment/agents/index.md @@ -16,7 +16,7 @@ Discover the process of setting up Agents for Flyte. - Guide to setting up the MMCloud agent. * - {ref}`Sensor Agent ` - Guide to setting up the Sensor agent. -* - {ref} `Databricks Agent ` +* - {ref}`Databricks Agent ` - Guide to setting up the Databricks agent. ``` diff --git a/docs/deployment/agents/mmcloud.rst b/docs/deployment/agents/mmcloud.rst index 69b30f4309..217beab8ed 100644 --- a/docs/deployment/agents/mmcloud.rst +++ b/docs/deployment/agents/mmcloud.rst @@ -118,4 +118,4 @@ Wait for the upgrade to complete. You can check the status of the deployment pod kubectl get pods -n flyte - For MMCloud plugin on the Flyte cluster, please refer to `Memory Machine Cloud Plugin Example `_ +For MMCloud plugin on the Flyte cluster, please refer to `Memory Machine Cloud Plugin Example `_ From c1447528e44be9295a6e90ed83db4653b8e1cdce Mon Sep 17 00:00:00 2001 From: Kevin Su Date: Mon, 22 Jan 2024 20:43:01 -0800 Subject: [PATCH 25/30] Remove flytearchives (#4761) Signed-off-by: Kevin Su --- flytearchives/LICENSE | 202 ------------------------------- flytearchives/README.md | 2 - flytearchives/datacatalog.tar.gz | Bin 8584705 -> 0 bytes 3 files changed, 204 deletions(-) delete mode 100644 flytearchives/LICENSE delete mode 100644 flytearchives/README.md delete mode 100644 flytearchives/datacatalog.tar.gz diff --git a/flytearchives/LICENSE b/flytearchives/LICENSE deleted file mode 100644 index bed437514f..0000000000 --- a/flytearchives/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2019 Lyft, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/flytearchives/README.md b/flytearchives/README.md deleted file mode 100644 index 9c80ac52f3..0000000000 --- a/flytearchives/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# datacatalog -Service that catalogs data to allow for data discovery, lineage and tagging diff --git a/flytearchives/datacatalog.tar.gz b/flytearchives/datacatalog.tar.gz deleted file mode 100644 index 1cc1e56b46e3a43a05ac32411bce37adb4aa8117..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8584705 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
T}oUBK7AKQqlYm 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�oMXln~7rQR!vhQU93tbjc+v6_H9j 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

-uGPB1`!lIU1pUS$*ms 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�BzqQa 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 z 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 z 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⋙)v?9>r5Y6Zai6 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�GFF#P*^2y29DsAn@{^g-ME!t$%=!HIn? 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

qknPl3@!fBLC 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

FeqBzf3gWNj!yMnOQyus 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∈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�^Igce+^*-`!+4m2f6*%4Rq9 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

-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 z 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≀R$V+jYP8^{bZIzlp9pCRnHN= zTT&{5NayWi7>no)W?M@k<2u?R7kHGTMENpb z*~HKbeBNnnwJs|=@|Aj`_13?b0&hC}IRl?DWK3G*9F#Hq{D{jL6GMhwzoM6gR>5!x zZXyzTMh&Yqu%V1QGkEi!#qH4Uyn?s|n^o)lNhkJ-&7ZS+;b4nY6!e|X z5Qi3t*9HxCV515gk&B7O%xnBB-Nojql{v&K^lSLSy5aa-iQf4Nu!|jm8(~t#YxC!L z*g(E6>`SBtuOreGA>lW)3=$?5auV^T`*XU(Z(wS;C0>Y!pxy1wfT^X4ztSw6T84Oq zUJf|j>MON+6HHi7GG)cQ{TJVp&M! zQKAM_3m~vJYFh*rs}=B^5a94X`*9g~zG4rAL}#cJlv-}EjBL39iKw^cR!r+J*(-mq zgFdGVw*IPvhkYmf2%}hlDIUdYybYjpm;zNXjvdZp`#0n|Q1-z zOq5MbzJk8pLreC=*>hucG>3`i7QEo3nEV)7h{Fs z8`fujS1!@|O)Xm?{U8p?DDmQtk}xwyVXa~e@s$Aa1v;gmS5cNCNr4nuO=0M*vPhEM zF#sb?_>7SzkPO@k82r;B>4P3%1qA7a&l(d&j9I-rS;#pk?!-59oXElU3 z6h-qoIqkdHg4%bvC4u(Utk>RbGSM%46oqypE8ITYq%>0=ZC(!!6jqL*Q8nv=-(nt{^Q8H69$El;k-d}wFXf?LJSHo(%;8Z{JJHWZ zGQIdWS=rObLdCiarXtf97#>1e_}vrC9oP}1Ge%bH;a3<9`;S;=rn>aV9Z>;tKm5cZpo{_w9s(9xB^HgZMu!t4X@UN^xm_R(Uc5z$|ic} z9ZVr_CCW~^{f=r~R$qbujmN*m;Zc6{FrV*ZqUU!29>BF-boOyo=fsTECBU@`*q#3s5 zLn($i<|0zS)jRzcH0`Xa;!$)JkJ9y>U`X;N%MRY8GL1J|P3O&)GuTK~cpzbS;QLHO z@3r9PH2#_L&l&vl5fo8Z-WZjG_C6BrH94UuOr35Lg}+Q%6+I9DX^6zZ{6`@Z*;*b;VN@m_l*}?w_#`k!i(+wlngX_3ydvV-@(zpYx2C%dmF3t_e4FYoG{nnh|F z2hRzZ%@IObdWcPHB_y40v_J9NUv=H193jdtMA;pUVQpk=yiZoPho^ogjvQ|6$B!Js z-+!AZKlPTx`L$O;kW(FCgTNaTyN%Gyz|2PUWIAbaV57KYvGukI^p5x}mtS7Lolx+}o)*CR_O|kfM z9-7N@A4Ws&!!#S+CRaxjs)LDhY0tW{iCo&>=yCDo@y^83NHSq_V+2|DW7e zBaGvg8|Mq=(}4Nn+yS2J#j~2{ET(&>p44Scc9sm{f37gS8a-&}e2@pvO29J_xiA&n zzJ(*HDnpBlbRTh~APyS{+4!$iC|=1|FSy2|mR@5c%1)2+v#k6rUpYXp{9H#DEiB@)G z60P?;4U438=kde0EaUL42iz9nWlG+`Y!;PG(7&aOSE^=Z2=>1!E=SXppZOoD4f&bn zSRVzMNbagU=dH5Q$C7&tnsu@4ljyERc=}ktD6Mc1M@UIt9LaUA<78II#Nw@0va=ZZ z91n9xA?F|teFqD6Y%S<*2G->uW=sF(Q`m-hbA4AEeYSdm`kZ_rAOc@T2eriz4}fQJvGjRrB6(NFi-I) zJh=7pb4bC70~|yhlSUuFw+8UH3VAjY<7=(+%@42T0dh`qhsH0F);+{Y&I_gzBe{QA zPU;|^`VT&daQv<0_*7nu-nrg}#kQFkw>zF@xkXxl7kG0PINBSg^{i&~mM|F7A zGFznMhm394OWX`BWFn+M{J@u=)IqG#gNz@_Yu4*B@uUt8NxvyxrH8i*A4^P*Xx1*7 z&q(yur&sCzoYfT=|Lcfpu8IRP@!B@xi{-&rLhs3?yAIO{eNlW?W~ZRF;WnQ< zK3q~I(Fcmf$zzo%6EbKzeqJt_PaZvK(e=z1>luHwX+1rPS8)c@x<`gHeD3sh6-FIV zuOaGmTjU(^1>pAsfnO}xNfxhb8sqh^SDEJV#Qm%E@D}{T=Bu6o`*iG644dO;qwgAz z%cXgU%Pby)n-6njxa9un6&#^^x%rl5MriLxswA3r|7k$zx#op@T*O$k+*zDw?|Lia z?=t)~ToW{k2}CXiOL&k_q%r0>3yIeIgHF#%>v}RQr*L-t&)7y9g7eLsEj1EPrfKeT z%Q{w8MmgQ|;fs?}v`qcG!x#N()JOa=UcVY;xFT7In-DxzK{lLEu90fNWCP zWfXyM^r*by%xH%q5dKvHaKtC870jZ9@GqJuURfRLfEhw_J!O=$AYXMbiB`ybe60iy z0gIWtBckHQgE>F%ilHKH4sSq^l^sO09`9E!(cOOs_dKxQcQv?b=mQ?;SI)y!YPmCu zt}5*Kv<0WFp%LJ!Y z#c|pwOz9~jn)U6zXk?Yp`|d?+Booc6T66=2?8&r5WslqR>=nQZI`2S4U7HN_J)q;^rF>;;Dd(rv;KxLbH%l#wakW8+Rh0sasJvHJL+~P&j>hK`Z35g*gjM z{v0smj|1yVmh=4j#XP@$G0(4Gkz$rVvN|+PMq_XUq`?s`b|8UN38f)bv`DUnnY0F`>P~+>0NCULH#Zh zBIxViuY#<;#U`UCaVDS1cjtn~M$`^b;laqf@$>S9d1U7lj_&}Tgb4{eJ{!TTT9?;E$YMZc>(PrH6627g_G z`aO&5_e`$eGr4|uw`;^->1<+!vN|FY`g@u*{uqa>jB{q?+1K8amRB|2d86iT$lkwv;N|YQS@8)$FiI~@Cz>u z#9U*eyv~isV#;p%Iok`fp{y+w3;@p|@vMjr_B$`a}A>m4UIak^e z|GbiacJR+3{yCj1^?H+1PnajH1i0UeCjmsW`uiZiLk7pxF{q?PERwsMcin@koK1s{ z;O`tX$1Ax*@k^J*(z;7TWs^yf2kFw=KM>?p!=+J(OCu4) zs*lU6_lh{zUM`>xa0SoNx+2>r(ZBnXjCaL^Siesg`|=vGFSilU1MD2Bw}D9 z2}N9-EfSLId2DR2h>Zp5h7aR|W6RO?ThSWVZ%VgTm=;BbP-OB?Iw|DerD$JNaQmW+ z+ZScrzNo_by$pV2Fh=zGnC!rID(Z+VbdQyTbaSaWXeOF2yP--mTCf*LA?h{aUL2xL z25|@`b$ou%6*)pI@`NmC_M};l_Q6^{D0}#1H6;fbTqDoP; zKdKYjAI;s7WE4Dbi69Dhle9x#HXHIHmBuYv6_94_k}KY8WS1n>efK8^@?TQjcmEZ` ze>KMi{{_(g*vji8LcBf#{$(mAwUPbd5cWs9jFnYr=ojRxX>j15616d;b}hvh>at^O ze-dN+FUD+Z?SgWN7VnBNLW20G$rm7x5m+`IxT}%f@05Ye(e5umyFdRSu={1DeZ)!+ zWn!9ReYDyjHz4J!Hbw)PCUYsvl2AT$;PZzfOpgkdnA@Y4*|4RDx{TKZTetQqm*|TP zVt##%dmc6Go4v{-p3{>!UZ3;(4MZjNkJee&R#Dv91VLijJm zf|%o)X_);NaXw(3&=U=#VtVliG>ndz{1?e&3^`2C=_bRd07?QqkTYxJc9DZ;<%CSI zwwg5LUehx*`9g&zSoP-1(_*x06J}-On~pT=?dK^*XoC(Ij`mQDxv5#NtR3434v!LYS7bH8m>U@+67Q=p^LZ@I+P)8N{GhOmIk<&(Ff&<7eS(u*pMJ)c&QWpcealgn!Q9pCS0wHGpw9BOwlx z;^`GdA=r@`K4_4a2L~}(JB{#UKfM9&&%Y1fUd+!UN=&b2L|+BF0ls~*#w@@{cD+4d zPl+nks&USVq%t(iPAVH_b*y1ZEPM!lXkBa_Xo+5##rUbVR@Zf%?g?y*p&>Nux);Lx zTo2=`5W7brqkrPR5`GZ;%74sK+TK+c{-elZf(*62qCW*pWDflN>)Sz%_rJ;)WgFol zXlNoD$!m*pv20?csOa_Bc>govKWec*{v{e_Y0yU@dwXenSa+lgzYF)qzpT`uvVEMh zOxZ|yLQ4S59h_98hj^-(Rv_6c*NOZ<;y=z76bdhscsylZ<4mU1i zMRXZB|L)Dt|Itri{((@bT}+dy+KCZk{;p6UBz|?4D-=m_g{tzL51VKyJxWV~I(r~y zN3!RDGzn~vT_b!;Z@LW@_;kNS3$&ioZIQI03m18NO(ich<(3ciq9E<>+7=aKyh1G6 zS%~wuy2e=4Bh>S*t_Sn%U2k@RjplIG5oL$#utz!QQ8s#%FCc9c0lN0n~jB^q?wtez`k*tn$lJFJB8l8W0|Fu`^{a5Cw8j)kd`wMb6P(=1M z>yhloB-eh%AXiPm{ze5DY&RtZnaqNiv(4`NxjkFL7I|w`9(E@2M#UHm%!A}`hmCP~ z%hQAsIj7XQO4oThaH;6>q|`!TKPJxaZk3}-KeM)&#qs3Hg!*;7b2;L_0-e(X9RGVc z{@K5#;^BJEpG<{)oaY=OadQoVZ^gpvStd}}KgM;_)(Gz4W9WJzv{zube033P!g&f5Yv77-vwMZyadU^SN7!f^^0! z$8=Ju`_46dXt;o=*i{#~H+p#yU#aM4l%m%|={nEQ<;a?|a}^a$(DRI&7+oq|4g!fnesb~d4e0IS^M7jm?SIvWo0Mkr#$$s zjzzS}?GAs=*t>WewDyq>=pSEFjcNKGC?0CB(pKF7rsPyR4EzS#=lW zSJwHuY{)=@{y|$TMf$ozMC<(zZLzctzs{*|ct-jFlCuBv0@k9c29Oe2br%-}^DFC0 zuY?-(x5UdJVYU-aKO16y$%%J9*PGsSqg+BQ$$&a>mp;f98sw@QE|tmk2QO;&bS7-cIp=Duf|bnICp#Sh0LjS(@CiH(Y0MYLj z=x1Y3ZVydlBJQZ34+z|kJvt4`-{|oBqKL1FLHtTdn=k zf410qlWU&X9k)S(k&%Ii=?6(g2vm}V7P2QJnq<#2r8VnO8)im%~p~IS}8e0wWhJ;15y}#<#yrljuM1 z#p1&n(POXOXrqdjm&w|oiq;~J z0!<)gQQ9B^iZkObZetij1Hw27U`W7$01k_MMsdHHW=4=vLJ;bC-E(eLS9iJtC^|F0 z=j$J_>8^Y0u4jFpb9h#m-JI6d^3;_%C=BOX4CeFL5B`w+MNJohUuxGnDt?K{qq*S8 zTWmMm*UGBIMZe)$Mw5((^IiKq9aA)*w*BX zw0oyNA~{o$Z;zL@opt6 zAz){>iY=U5DX_bhtT?7Aoq%At@U_DQZe}`;in0sKuUB_1Fag%ibQ`Tcsv8|P?BYFD1`MoLTWj?-12G z(^W3e$Mf)R=Nk|L@TjrYPsYy`==2TiG;eD0SavUa!HI*olumeuhuHA`4v7nNGJ(u*F&U07WUq{5AzSp{ zx9ASF?q^M#_1A&xf<6s%Vr{e@+elfR=Sre>`SRFo!O#TtE6SY$bnQ19bfVX~NF!>o z1=AUL&smDaclBI#taV@%$9^H0qy4c*U^MI}1A%aA{CW+M7~Uoe4@NtH@DF(>PdB0) zJ4?icZ*uyvT6gtJ>Tu0{>ae@|^kBF5Q~L~SvTH+*!aB?9sv!be9SuV%<}F8$(}AA^tn<2U|`#z#+eR3Pzu1MTzm+&)~(?ZcSv zeM|zp0jVbfGbb3NGgFDl1n6dsOFl&FzQv61H}MRj0N!xR1vYQ$?}me)-!0n%ge&St zL{QWNDWvQOYto4*GtEsN2sY`$o2=zctnk=*Kmfra^*d0T(P`*vlSZ}H^qHs8ce)ju zn;Qh4;|77X9NkBBm@?m2YuD3d998f^@;c2_dQY`({vL@MD7Js(zw!e5JSFYz1*?Qj zS8?1jF>uS4zRd_(Et*p64O6O*_V}lM(37Lt|BrHTF7EGhe1BK-{ar1DCQvieIXy#Y z6#QU4zW|5$1>iot{EkHeeQ}~b)g3NJt{zF8uSXJ>=*wN+JU;tkz=LX~5hz(65{O#K z4=x|2Dmij7n)b0(%>jd}ab2Ig7{Fl0v5UBCMbV@fwm)lee{Mnl%ptx%^?ZNojZ|7Z zl`DFp%*p=|KUg68XWP=s=Q;*69TOAe^MENp6wZ*s5QVwCbQ@Y1c+n#CH7FhokROby zK0pIc{EM+A9>I~uZg{eB!xwRLB)hR2hZ#3^EWfeex5FDdgkADmj7x5AwJ_MK7q;T{ z7kN|T@z6MfC@^civI(JslED4kIW98V50Qqn3qJL)D~n7q;=09G&uhU5UJU)m&4~Zy zk5=(VYk7wSMD6uf|7V0vrCd09&Mcfvd;hFPYcD&8iEh!2*de8?Fet~Hs&MFKMto*o zzUx^;6V~IAJrwk+bZpQm!K*=^3fQj<`8b2e-*Ndkfy>7UCfP8vtZH6&uv6*a8lG4; zd0+C8z^(WRaRs0gAs=QvZj-o8&h6bwB)JOe*6kn0>WB}BEZ9_AHjr|~AM z>5eoTQlwr>t(!0nW$L$Gia;bO(K9yT`8%^3{g%i1QJ{eOQ+N>=WuA>Fv+PW)YX`>1 zgAI##nz1<0f9I7Ll~>bX&z}>5kRQNb-3Z6Y(=NjKRIR^Dc}mzE8tXUtV(kKh2$+7wL>wBEp9g^m>H*MY2kO1LN@_D@RgW`$POt=HVheblf}p;>h0{k~ zAB&NyGR@P4sMfwWmkUHbgZX*->IRFoCgC`8@ZLx}QO3nJ58ShM{a2Zxb<(;%>ogqwA;gl6&}QqL)8Pyt9emnZ+-ci(?&;uVgS)i{$y} zoW20>d$AeP#bsm?>Jo~-N*666T3Il*Hcg?V7CzBr?wao7%0%wSNp)6N-vK%r(b`uO4xi&q&a=_ z^?O>_3%Kml<)|+E1VYvQ|JwLxF%O0zzjvDfGynpe&5pm z=o%>&_sc^49<+0;?3YI5diwV5VH&(%Xjg}X^CEtbmHG}z8D;~(=^06`rtie!wY{eK zwQX~&ac!;i`XBt7X(uDzBc5#t@)I112U=cf3kioc;7B|&Z#_QsIDe|dka@6(BWl(@ zeCW5fA`@BG_ZzR$Z+bl=YpZsa$N82Z~kRPq(`oMb9IY~z!U68bHm^-`pFUV~d zEUKA}TcjKKOHiOMSfqs~H}hR^{9gaV{tJ)as|ktU%L&TwctsMp{2tHccdVmei0g$3 zoJY-0g7HX71`LN?mNaC)rlf|qIm!h(u&18XFh?gZo_$XB0BRO{f+kvZhh z?|PsUj+%JbaTDK)3=0E#y3`OmlMGPU4#c$SJ#94g6ftZ}2ccJ)1>xFe(4Z(uyA1t; z>np0Y&rxJ#kiWTG50tjUg2`g|GXVbju6u-FG9D#1X3Z*LQ|}1DvWQ={H{){gD840t ze291Mt^Y;3<*gcuM4Wo)S4BMz8y})Xc2Y1*$;%4gp3Y z*q~eplQ!-wXD3i!B@*XNy&?(o6ZX?Z2_hHRgM|YM;*C7UazO(7jABSZQox19MX(i} z_#NYyCGmPwIvl@9(A!fdevzbiLKD98YfxXCz@DU~cvBbM%nOo03i6yZNzt=15JKeE zfxbj7Nka{8=f9ylqCY~rvHs;#bjC@4NTv@-#l&7ip>V(oumb3xbBxbjCd8s}2g#<@ z6=?tCIl)}zi+Ju2Oa&mRI%acG2%rG!67cVH`M;BRpru|JnjOTV1HXR5Wd zX^sFD1ozPO%K)xsls%I`fgh7%E`NsZgurc(GFKO`iE6$31GH%ZfIv#o&6!Z3Ublhl zF;zY5Y~uw9Y~EDqMlfeevdf00#fW^6(r^7(@+aGoL$s}o`4+gH_2Ls6;G<7~m9(+p z&^b*rGIFcwc5vjIChS%OH{+v5{?)eHUKFggY5;p;{L1e6?-~ZzTmw_gmKNlvYLM-Hf8spy_d9Xx!0xr|mhjSW!9dySPh%z3`ovie&*u(#+-=^}rPrHE!`%*LoA%JP z-@yI_ZXilmqTD9QMeNwvDqdIW^)Vu~*u7n81X+*&o1N`u_?5Z{{V+$laW z7a(|(u<|7?cO#Kc!2Ue;!-W{MUFA$A8nx$wR3fOlme$bwG`Bx+{U!(GgF42->V4Tc-k|+!;@l$q7E~ zKwvdDxu!#682Y+ri}sgb{ggA;YzZy4+zTfyFVjEKcH!tYgrj% zH;9fNI7w9Ny6r0jy7V>_S5SDj{{6rTftK91PV=TN=*#x6gK^wsTfh!ke(~RQ`7yt_ zidl*`byQ!z<9vv6PFkQd3JUlQ)6dsHvn{$_G2c$qVw>(I@}{=qZL!_8&4ZIeSiS*U_bDADsUsfe9`p76`gQu#)d;Sbd z(8FylUS1^7Lg%_*jJ|C1rWW*JL+i@sOpN+**$zU=_654>p(*gbRcyTcCr>OAf-Ji? z^(N?{9UgBvD=u(3)^*Evl+gPExSY64S4hePfD30T6XS^5>)PF$V4^s{)V)Jj3-9#> zt)?n{Qw;E+okXtB^QCM1SueGEqUgtYC8R|@PH5=6k1*;Zmd)V~Ew#76RNr{mZ5|`;Lhp?A24!!vhVRU?a-x zI7S5Tl8g#V)^}1=fsVWx!;(-QA0FpTeb9ktoDn?*z2^bD{t5ESP`{=J4(UX4hK0z5 zcB0e{Md)5=lP0Sm(Fkf z8&4O&nGZ4J%-a;*L6nhMM76Gdd`>WYP?;OHhaN|6uvwsO@H0_H=J-fiow#Tg@MlgR zAA2~2J|6ki7E^8wh`X`&-7E_<;}%eI&cyKRl70=FXdeTv5>{@JiB~8?7sLhn>(>W{ zoJ0Mgr5EqVFXHqzbQb%9D`Z@qiYKadvb;o~?+%11yNB z*C8~_?oCzT=_`4eAS}bkBfa7SSLxTafL4C3t64nm>qYhj_^A#*`HogrRb*|r`K+e- z=ylIWIOY*<6z6EFb<@A_{^ihb)ODKaQAx?LL6RtCOq?VWyCi4Dc~cMf<`LLQlALA> zbR_Z)Iu1u?qtm|Ts$CYx4-8#YB`$gyX$+4#(W?Tw6=HK^Bsi)J!+`>^i!qYx2upPb z>s=>30!_LBMTIIuRLJbjEw^m~RyyNLq=Fa;t`kySY;enIC^pF1y2K#%=2xSAyMUGM z`^vBR=&?UUSUrQ!mP?K}`r39guVu#}uHmW1C{|L4-*yu3v3N$Q;uxih)8n_V!x#;{ zHV?bucM$no?I2Ouqu%ZD+kAA;cE1+bB&iQM5+Ig)7sPVEA8H@E(*pLPeD;o9_KsXM zLmN2)AQT;8aydYK`XCoDB#zde--J|b?bQ|2%u+cuHwR72GsMJZKLmg?$_LM zy@WPCoq)OJ0#3kwdzHRRy8=#n!)BYQ6R3Qvy_yr$nwxVl@l4U1KK^##=#1ZFMyC*ieDjx)5xeI6%XxQgmcDB++;SN1!i!&@lql=7;k{pGf6}77|JFpy`2ALae$n-FJM2n!s$#v#bULy$nc z+moUn0_yy83;W+Nhi`of3`~WAEeZGU%x_j-kBt%Vmt|jwW!r+ac7m1kbb=#+1Ctwp zBE{8Uf$A}FVDvgE$<>m)N0JX@%7@H{{GyU#4cp?s$fQ`E%{M?SyNMGlUxPzCfBu{7 z$mbKhUI|!lOP&kP-}tbv(Cw(W<8kul^Ba|Y{&sUq?DIiB5!3lTFa7=L<4?GV@xS)& zr5^vRNM{oxq~Uz}qn=O6QP9GXOuB?e@|{f=dn9{@9?3!a8uT--!6n+il#AHEhK>Jy z=P&Id#-Dh}$3HqUe|Rtqmk|l7fjA5|A#$Ucc|`JA&)5*fXI;XFjJ)MBAmNL`<>xT| z5^_KO7>aI2UgL4(u!9VjB){CK6d8O1p+RG^!Y+xKDP1U*Yo-4puw02c$I|nMiDiTJ z{kbLL{)~+zpZ7bTeBO!6=TARTq3KCCBgyFW(E1SZVrjGY&nDhuguOqFzIa_y3mA1BwlG>FEBFXzD`LHB^P2ZfVnN;LFA0700lv&UP??j$JLp~on z5wE&1`t(cbhkO3?^XP{UpXYp)2hW$wk;V4n)(bmQc|JO)Hsnyf`Du%X>YwXcI#i?d zLlw+FkMoV*f3)TMU-7?2-zw@t=GXg^7UwtR?f*vl z_Q3;T^ljqD(dgUrf4l_rjd+jQhy26+s8xDVVkB9Wd!6g=}1)T-y4@e)Z5>V zS8#l7RLkxNJ5k1lT6RC#pj&pII$mMgR=W8ALN=8icr(Pkf2Y2Ic^5|iMn$%NWTU~O ztjd!BM=#B^zHnv0KAVHb z5dA4oL+H=*AGJt-K70Ltj=pXRnP2tc7Uvi9zc;^7QRdS_EzAF}{WtQD_K$|~j~>xx zLGNAri|~)(TY-O!*lOkYfBd}m{kvcN3HE(So$5G_;H!UNe2kCd|H?W3kNuyI zSS^7h0V1|O1@o!g~bz+DQ}ZxO<&~CCAonTZU-gAyFF_gJ-nx-bAmjy%X8=D zq5b&!=irHv^b<2gJ7507pX|Rb{=M86+?Wk&gZAc~2oYMCfC`JKs^ngv3|#iRa>Z zyj?$!{k7)x(fCPzANh@b}^{>xFo{i}L zDfaP)BiX)8^P9)#mlZ1T_PY>)x5rSkz)Rn(ize=V`*aj>_ikO>jU?;-Z{lZKKm9+3 zpSc+PN#g4Nf5e~kU-kbL{K;=u{%_+?UVG|)6Mu4I#s6pVCtX+kocI%Q@s?)t2XbO{ zrj0mH%)F6{9KfOX=s^b7(rq4r9ywj9!E*|P-p+O8*TlvNHLf@d`xC?dv|@i^*&i$W z)0+KhBM|4w;@gP)ElK>?EgvF@yGZq!!S3FNi1%EZS)GZvXSjU3K;->F=Dx8F&(nVY z2ERt+LqtB|qdhkIquGC!M`4II(<0#f?`;(x{~;+PNm8;BG86Yo&Rz5GBuZAiq@>y1 zYWwcQxl>%2&{O-ZaAxmA!_}T`i1U!A4{S5f z!c#}z=1A-;p5c$@+ewk+;YnmiMgoS&kBO7yG4bA1`#*<5pq89rhuG#oTMThdT<3>6 z&2kfu87B#nl9iMx@6Sx!>6Q;=Ce}m5U*ch~zg3Is|3SZKVGdh?B(?%qR^tjh@qLRc zP-NjNFxg_PKvD}UfcXcSt-@>XMO=lX$g9xy*iasjW7iiTp#m2GXAjdNaU8-G4+qOx zCocRG!~=oZRZ83~CDys+ljPLLr25=osrPPT`Iazp@iCG2N^(8T?(%1z^wE-$M9Pj7 z-AR<;@mSJ7BLQEfwvUsXb%moPXKnFdNgkd+603>4lbkwCs!tCly=x^)6_NLbp2*}X zB7Z{U-B18G__Yzgw7HT^W+z*if=a(8$+dJX{J#o+Ujx5?OUL4uRN?;~0{^b3b1MBB zy`?hblG0&MgjlqTe~2oBZEM;6dEVdgey>LQW{%Ned{VqhAl}olMZ=X2zr5tXg;f*(1=ze^>H66MG;R zr{pN8iETH==OgO4SmHc5vk&7zgs9d({F&Xm6GT2h|9z4*8XJqr;pA;Z-cu9XU#M~Q zXLPuWxbP6q^O<-K&vFer!im+yd%Bglc%2{!%^TW$L@kVEL%jx*)v4BN z;N5%a9C-1}Sf1byU))Kkadl$tJF)hi*ozMo4tLA-B(aInUa9w1BA<{Ft9|UPv-&h| z(F*v-Ng|&P+5k4T5(I&^)ydZhtbe-Bui+0T;94JNgL-9MG^X>=(kL4@_FUBZOtVIW z`e%sRq5Sey0zw^jxEyg;@oZW4%~wHvm%SAlo}_bw<_YwXyd7pw%|8^s7Fc^}@6T&3 z-5*=gM1Fs)MZa1k5OqW>an^dQ%7|Fm*6el!o|!Mun$sb-t7Nh1cI~{|bUS?Pn~ki= zlcz&2)Ni_&F4U^K&wHUhd@Rbo^f>-6nkzus-!SmBB*j z#55F_BDmz({&0`?^LvcE3$JU&Tlzhwr{2=<@QrU7clfinqTS)OT)AHhtZeCgKHbcI zgASiCwVm<0t_ucDFM8;qqRaK0$$j{$wc|IX0=?n;3UGHPU}{xJ*QBP7ySGpvat&J) zLN9BqflQ!nO|6-lrnv2JT;#T4T}N7D*ODk}e0}JByfpM{Rm=R}4fLz54%q+jmGcF9 z?ROyr>fizsfl9oqMfTs8wg2+pA=GMv-9)V#vd>Gc`YevJIyXkv-!7Q{uV?)K*ah?d z^+En0_@(*(dd~j?KMVgCqVxaPLizt|2LE3h9^GVK?|cgp{wX zGx&dh#{cgL<^SGG&;JL+M6Dm;JsmrDvQOzG?({abExN|Y@}rLbfyf8AE=;_i#S+U$ z#9RGCU>Z@aUoD?6(CQN*cWmZ7(;a(%G~N-c4M9|EC2R2nZxN3z-bysxswYERunjyX z$yF^9cDaG4&=~66DK3N(gRk;rqxZs`d4^*}*?4$u-FTXr*S9!Gok7tN%XKl;3Of^E|&-4d`z?M}7|LU(z#u z$&)U(5%u=Vy{VI+ZCfJ8ULLp%`v+IPhuyhh7EBcDtS%fx5>Mbv6HgJfSR?W&uA7qH zH863v>Ekygk!I_CfwXUczNMXZQ zK~iYQM%Ym_lDH)%B1uI4(@I>tJO{FL~7WUfQ!mT%J$7`4{7U?s~Vn%H63U18S-lhQLPWZ zZ7kCEFJX}^P!Y*AK(<1Xb8F!cTmeb0aVIvqs~ZQqdml$)eU(_3A-8X3lI!>$FWAnu zo>S?mFM_#&twpz&{F=m*0%fYh?R;-B5odvs1V{Ip=IZ%}-AYHd;ek_5CNdtRG$){`%Jz<p7*(^z6T>`k3> za42SUvIQ<9@(v$e^Q>QMCZpyl^97pzj}ZQQa+Znz4jmpMqpH>ctcCcG5dM4P)h7Pi zY4~}i+N?QI2>+?*Ir4FRMn{)F40*#u@p($Pqpy1eI_T4IimxXj^fjmWI<$f{= zi-!?;7fGzZ1^}kxa)U*joN>&)2v~? zGYHw4-|1f_|IQ#}U;Qo`A$zkV${C$`HoE*iJp%oL%SAHZDiA!dTNN1Dt8pM70}_0NjZ+0G{L5HQ^m|%Q6a60RIxqe975%dGJN{*lK<6C!5%l}3mkjbW=*WMFeouJ`>G!)I z{bKaH{RPwS_g^#?sQX73OuwIa{^z3KPp$H6G;6g^su!;^==UJw%NeT-`rT)BH2Qt4 z@aLi5naO7QeWjUxZ|WLGziSVg==YiR6&gJtwM4&D3V#v$y|>pqfl5bPpx@sR6aBvW zvuN}?|H@|cJNB<8`kk=sBI)<7Gk!MujqCSR%l@lAj6BPBpv~;O-lL3&73*XY8%B7! zVnMGe6KJbXkd|JKv~*+tJc;qp1n{%@^3-%n&mQ+R~S@e z+PVvYL?m%$(#qlO;& zuu_xMA+ZYkrA6bo+j+e3c1f-#i6`9b-LM$$-Y4M5brW}H$er5}`H;lggH<|*c(>>B z)8bhU#7~l|Y2uTdA|if!xj`!JPa5*?a)VT!Ssv|}RZoj@%+{U_#YfGW80y~wq6nII zJSylNvI@=SYIY@{>97n@NX(AG`jOnlXJ_rjg3s6(vtc2%{0Nc-@N~Vhw>qGsQDIcEvG&eWGy6$KH81P2H7Iqs z_MzJ}U((a<^BL8u1GvXv3uA8a0Pm+u(_7m)qvu zhTpv1^j`J?JwrJkuB2B@G1dRW`E^bray`2~J6B^4@#lE6)nT(Nk2K5PO#gW%be3$O zK6<2HH@IO*k+A6{Nb1NKHkCUhqjZeNQDV&J_GgUwEURafWJHYKnww6sRZVP?P~%Fn z2yW*IapCo?p@M*$QIeA+aW_(ulWy;6i@5llRS@#htE+5z!{pdFNy&(3uij`XcfvYM zJ`%9!rB_$8r`jhFZCj@NnIxm1LUJAv)ir`33>7!D&++-(YGDj9jDNRD9=_lD?IeKOdRWz@Lr7C~afxxbZNmVZl$ z2QuZqxf6G~tD6RA_Wm33p0kKc+?u8}#9Co()AVr-3a%|5(U+@XM0q|sC~Qpng6g9P zfBWxZ+1pRR+xHu9-w$tJJTo?IY11TSOiE^1)jUxjLh_M@&mc*AMvhyZ5js2xMKwOg zbQohDeR_Aa5lW7%jG9;*8=j2~Z@11$zm*bqXUee}Y!5Gn3v7`M^9BXjCHwfP;@37>IHb6<0&qq4vCj0pkDhr9K#%N)3dOIv zy<6iXc~_?VslFaYWoKD(ItJ`-4E${+a0z55Q+Ome8!+h7=wQ5DID}acU{DwCGMG!l&KC9Wd<<*?_mGGgG0T?n8lvp_;*0X zluy&e4~EH(lo9HHM8;K+ADx&vP}0*u=)?VL1siSy#4qov)HsG$AC3NSD2s5b*;YZ4 zkHG1uqc1K;HW7K2!E(}=*8e5Wwy-Nn9bqxmFL`3eSxw87KW+H>4EMCK)AT~Qaj?eA z{^0kI8Q)|5OWAZvr@n#FGT+W{W@ItB4u?RqH9zuuP77fy1l4TwMUuq+B*%6N@%W8ElO(vgcE5t z`=>;i&4lyEM?VlA8!?G#Su?C${)*@2fvpcO_Xu=nEnE?6(2|l{6Wgv|jjJ6K3)?ZV zuw5(mCpI<&gMu**5yyVzl<4~L#0!XDYmP6e9cmWX+Z*^2_KA{Lb$rS1JI)hmx7$PT zC6C>EG5C@T+S-2Xc+cK>sKf&KTf{jZ6%|NVc`{^wrm{r^|CdH*{Y z``-cf|7BzUMYjL9h3^04i`{=TS4Om7anlvARWA3`5jk@?BF9IM^l1jkaXGSxRtwM^ zA8}R}WuSe^xwG&AZk8HlBl38=H+9;(2zSBSC}IFV(IxYn8K_k2n2PxVz45Pj21PuB z-OWDH6NB)`VGBCN8;x-0-xCc#dM=9nror-K?Bl}Y9)V8Wem?s+sflejB-B1$qZ-<5 zkL}HXedn`}-`tXY96?aojMxmVlEH9 zL!&gPtWA%h%9_hjOhL><7T(XowrJjxPY1da)w*-3M=#+hIdW)^Z9%|9jt-b0#Cf3b z7Irri4-omFA!RoCm^?B|6nD!5>_Nnn!Mk^t8pas!0-f1zDm9qx^aat*%z#Nz&dias z=fB?7ur?tv3|6`TOem&?96&me&OH20al8L{J|FQKvfiA6U$^V#a zvR_Zx70rIVR%m9wcKJ>A>-^alX}>O>@H5-5<(P>0ULV`c1hm0<97!&*;~nfn8hi)~ z1ZJ0WX$;UA%_1&LWIgV1LCH#?#^oTI=itX^+pX-VTM> zQrN9b;QC>cxNsjM2+l@v$$J(ATBS+y4tHX`ySj0()O!ahtD9$qcK{l5@#7XjNEbJB zcIH)YwTT;c5_uQd`zh-- z^9AM+)w=5S`2sE6fu!4xqMN_Sm;p_rQN;}>Hr%?QYw=i32sJ2=LtN1 z^my@u;Kh{WnoNDkYBG%_b9+x)iWdcL6aCqas{j^O-j&EB?L;0K=S^Mu4#$EHgK}W= zZ1j!d;Nj)4X08p;q`4e3cY=O7m(ipXlDv;TGnXq2)UN-2n!XRepU(5qIdlEmCe$;U z==8bK=$B`F6#6yj>;=TvyaVTZdnr5LCG32cF#hM`{I5Km|M9Y)!V<>+{v6K#%1u^C zaA4HLwi_SD{}u=N-=8D+Gq96r{O@#2{BK`m|FEPGI{|amshLp0+i=C+wisF7@-4an zh5g8coDhesJ|ynY(Bsp=oiWxDbZ6`{+!_10f5jp$PC&yDntVFx^@j`CpkNruRe`Q~ z>D61=@13t9T9qV!jPd=FvsP4>p#7$EhEG!OiIJS2%p3vNGtVVwJBI1e0yE0EDf44m zv$;}})QK@XR@Z}$Z=8@z+>mY94iy)Zj`=dXohJ)tN%CQEko?t?3&L{Nt($ zjgGl#N6W?UXvNql2^7X_=fQVeZn+fv-CruuH>)GXAFaIJ#MtF+HJXv2hm=)`Wo2AH zOdv`};(f$sDRPPaD?lDB?@E->c1cNx`fQRsj1$hWf8>O7oK85G&y1iHq)wSH(70-3 z5y{9RZhdKWkVW+DZB`1-BPWa+6Xj_5qY4R^0-rSNc5@b4HmEp&Aju_mZ|d;3xa1QT zun~C&eWOrc2A)ec;!Mg$N1jQ<`hVi$2k?9pu=A16&PP7ctFFr~M)6I=9jU$bngt%L zf4L#tQC*^&-D+anO@$&Ux{o$Aknqz|!%2I~26WO!3M4Fv?5Y(Pz6NYFqPtdHybvVX zt+Cu~s}P%89bn`2L7_r>e+1zK^<33Ds?@`Jq_6r>yU7iK1MzDDqFwHAHMSLz_xos% zdAQQKJi!JO=41=#-Cn?{T8_u?4RfcRu@vxOkJ$oImUN*Cy%7LS)I2 zLiT>HYY|iCqqz1_Wu;yXp8X&n<`FbZ#(lBC%fRTshpRCkCamj(d`9$sV z$73r5+}9m0N3M+@oP52Y@wiGPbvbnD@(PXKpNOOmNq@MyQa7@>y3$2!q5kY8(qBe5 zJu1)-wzQzXJbbN*%)RhlH2sC1tPIy*7QJTDU)D~$Nd09)=6@7Fd4BugtREH$blGMk z!!{(tFaBdi3--aO*IlH2@Ez&rw-1h*>k;Vde~M%uyzi&j2TzT-)b_z)4J%CcL7QP8 zWS?llGTlBn@64kDJ$-G6eei)1X8WMozICzkef%7cKv}UI@33D0xxsBlZUk?eP5v4g1LK2X&qB_ydN0WCqsITu5{p_KT8M?~B>|sYV)*jXyM1p1mRo>t+Kv?bH&_P(-ase`W zv}xw~0FE^YAQW|=DST^a3f~6pFUb}`V3#>BL+)&tUrHo4AU1^Ls=$?b>DAk8dBfzM z*AT7BEuY}{0m)e}s*j=lrDui@Aw{QV5)gm$T=FExFi2cRRO^YEh|zGr9yBCD=xvUX z!>qt1ZkS{?zT{`r#I_SMK==SC#$2TIQes`E{DC|1G(s^xKod+3z;H61)rCVOxh}E^ zCK$de$-8*?ZYd&h%7fv%FW(PWi4Au`zJ9-a_Zx_ap~jbU?l@QuroAbZ?=@Qsq_CFhLf4O2x1pCXMv*rtQ_1nmTZblZ=%VV;?JS$#={bf(uCAYu) zKl#IuKh{l0`J>^baQWkuZ@xhHy%pkGZ#&*3NUZD`CV#x|)8&sfq0RP>Gc}vs^S@pG zIQDe7{L${7sPczziXndtz0Z(8nx^QauwaTIe_VT?E`J=EVv;|0Pl-khKTQ2k%O7K= zc?9~_ix(n)kmmA7=V^xg@!J>w^YTa8L%RHN$|Ffc*|L5*V{vR@5pmDDv z3ra#3^w1o$|EJBx_h#d)Ko=C@$@7 z5rkn%Y^!v!HuJu!Om#x6+uNuWjgu4sjCjtSqBoEAq;?)NVu!2V#?Bi109SI9>Ztdo z+F@oLM(l{KXJ0mWG>!3ON&b3haut0Mrn;x$9!=9SorlGR?V-DSf5>zmoj-Gg+CGM; z?pPmj?hzM$1%&pnxbSb76IxPoZJF}>?o)?w(A!3;u{|W`XQCH;QfkjJqvVG^vavt* zQL5u3Z|b6DaGXcUu^$C4cgszZ{59=8o{_VIZh2S3;d7csRO`b_<_mQAOCbv@Z8k0J z<()znR<)+G7IC31x|>`4-xcN-`u)*MCe=&wr*zZZY#fJZ@d9x)*rJ?%I!%I#@vA;l1rUyh>ua&;`oFVAuLWi^*yR&)8Kg3B*!!{rxD zG-h2s)g#bs&&g0E_xlH9iL{R*H~~8mw<4|mqYKXr6jzdGdu<)=cKVsA4_bT4&xr( z7a17T@GCuQpdNka^GWJGv6AzXnM~5`F~vaD6s!hRO|${(5pAY{vP+T{akMAJg&0)x zf9}MSZuvVyYW&XaJ=02D{5uHA*#&!X{RnkHPqvi#>>%AB$y33bwcuVR?|n)Sud397 zF@2L9X_CSoz){F^G2t4My@so?*FaUH{dDMLyvqfKkQiKNWiAtXAqExONotNoa(*N} z(e<3BN%Db)&1ZQWjU*qY6YetLJK{K9KpU!mxtBKGrHgV&cNyM`FYnTy>~WVN%GKW$ zjr6QcicEU)d<|>PoL7IUK>Bka2Ix;cr$4ov{?u~1b0}B@OOIhaOjPTd+&KbW`IMdn zxoqFOD-A7+JHe8VG%R8N+=0CI*j$>C=NhZo8Hc3ghL;cL}J-xUb zsJrYyNborFhbGtg0v&;zI=`J?1*OE?TD9AGT2#*of-p?IMC|qKA^HP$l=mBp;c_Q9>(6@|qTq<7JnA z^n4Ae=deDq8DVk%jm;4jCx3{Ve??qeW(lvq8L{MYMEwD)Xfplt?~e-fp*6T@X(oIH ztX%<7Q^huh8j(vgey8Ir?#0}~%5a;GH+Ut$9^55fCD0zr@#-Z(Z4VG`A++R*@}W%s z)+O5k03VQ8Hys(HOCgFIyGyPL^a_sCt!7wwQKoDx1)W2jwU18YI#2tpM6RW;ju8Y7 z1C5cC;b59d$aL<9tA591qTtjbP@(UUXc}z`mMe`8oVG)Xc%q$$?^4D)I7iK>qu5!t7 zCsD0KC+PCm8ehkoW&cM$*J!}LxC z60bcF1RLZV8J%T z2M#V0=!uo6CS8GQ(!9AX#V>BRUL-!LQ^L=WPkMX2N1$yVkAzQh{}g=E_`a7KpVWJf zIezg91E0h`(ej6MeA34U9u?@_mJoc>&OR3tzi84Q?QJete_SMZQ%@`yY7u-z{dGp9 zX4!~*j>rcM+ZE6!`60(~Hml?GH-N&MCIs#z@)i`mjBa)Pl1<9(S}xG3KQR6trhY2? zaitQPgZrsKw;`6G>2L+yG5CxrqCnZJ1kw;_1uUL@gXU*0wm47BPlC=$1THj|b2+mH zB~gJW9sZQgI9r!@(lac{TA;7E_@Gq~ME~vmh*ra1P#%0-ORh`a$M1hxomjTqDhO$d zG;vW8`%pgDag&dzE=NJ~5g(nipbAnlrx*#Gb4b~d;?}H-KmspQXZb5{r3PQiwVd0a}pRy^U26cv5$W z?-u>pj+W&qvP;@oNob=QORf$t9M(*$NZo@MgrD`nu69t>GSQmPTt>qpWk9<|}O)Rx~i! z;+dm@Ab3-Ypiz4wLotSiKG5!6_L(ZIX_s@FmdD3W#IjpL-&ChFc7;$nwk-uM$d|#)QnT5$5;QJbix0S%YElhIiR#`bLIdYZ!Po zIKQ!C**F;A7T(8Xn>RIkp2;d%k^w378?+zHL!-}6HjOMJx8djyY*k1w7M z;~N*U(Q)3?#z&31czM2t*MET7+vyc-V9!Dybq-!ynz3dHNTb*y-W&yZ54EJr_lwYA`Oja zpbPey=_joHmuFb}g5tc=rs+kum^!G34q6)>FnzFL19ngg``d%He;M10WgiHF5L{x2 zFTKaS%2OL=!=p2bl1z(Q;7xsTuD&$+4dbEz+4)$XBh9Zh424EBLx$#qp*=WP9~z@S z4LxyaplK~g^J~6_w$RiQa>$;8rb$LqM&cVjZGxtd+iDnlX+8S_G(|+WS7LMTdxAv} zgrcFi{%4-9(7dT%%wc_X48CI_dnnM^_(FY`eL?>@*pI|T@2))CaWheV&wgb3-NZRi zROn{9{iO=7mdIH)Z|b5sJkULxsZRDl2hifO9R$`#e@jCzHe`$=2sNsq022Bgk!zv+ zX6U!{0T&2f^s^yR5@L3tw5fcYzQp0+DXdij*VtMVatePH zW!BwVl5kA+A$Obe+lLH1$qttzO)oJ;(6S>zyo8f+&NMo8W|f96F({(B!{tcA$032@ zBuCPwSau5m&z&-jJ-1`{+WMQ?zR(Ube!H7-8U`R(JP@HB?ulDb~6OzyU=dpi84CD=tc>4 zgZU9dyGju}L$Rw&q;G>lJ4+(U=oIt(2APH>hW15F^K(Ib;Ea&I(ugve7z6wEp zdL3VOT<$UrE-|FXse;FiJu*p>wh!%YDt0$3th?5x?mj9AnQMVD*BQVcHW!3UHlHY? z3(V`k`N3dUPlR-}2>=S7A=uk^Hje3`os|$}S*daA<-K&esk4mG&OnUSr#h2$);pxL zr_t!R%xCHk&cCV4ZypZm5{$8);n<~zb-DZDkS@`7vFthX5O+Ngy1#2e`>cRIhhd-h zu|8*q_K6C?vI=vb#lb%5h|vD3%>7LT`)+7|s8}qkGWXZl)ZdxuA^p{x`-_eN-cN6q~WWBolA+8_RJ*->+UOHBPuG(GO!M4>x=MI_eUAai&3 zEnpAenSSA=&@>Zk|RsgG-Sc|p@}ldf-E?}f-D&RuXLz7xS1Or)VYp0q7K{uUl`l-LK@#5 zWvL^D3)*SiyBE(kBZ2)w_%B)fmn3d3Uh2r(|E{O; z6}T#Di^1P1|NS`s-OhiH z7w33W?=qgwg08c8*N@}F%IE@le6BLuBafd-l+h(bS%;SM;sS4KH=}Jnw9V&j$LKFw zhLXZMbaZS$)&BEodaDu`Ux_}x9!4{i2G*f{aRaKaZ%*TC?<&@5pc_#);EiOBf&Lxo zr?*GWzYYzC8&HRR$Y{S>Z@)UU{Tib^a{6^>c-(;2g&U0aYxVYPL)%X@+9PLQhx*F~ zG%Xx^NN>MUZ@)3LeGj8OGQV|4u{~NA-Za|R>g{X8=AW#$r`R47d2c{N*h5D9Lwfr| zVe`lK$eiU>*vT^Bz{)xd_S}F*r+A|;_KH9kqHZ{D^hL+&R{Bk~iV z>$fKhc7Tq5S@K1OXUExF@V{+7bD{pXmwuZ6ZTVo2K>t~EA^x|a5%5oggZQVSi}t_$ z{XG7+cX&`PX(1@LKo82z=RvtQn;d5A@4&d+4n^qgCC$BM1suzQ-m*@TybJZO+tFi& zX>QCOvs|42slv7(ySN-B;58e5hskS}PuF;YUbB2Xc{p1OWsDv3T2y20fgGqkpl7&^ zy~9XuaknS50zr)#8xqhC$v}yh?#Bf#N$l9!mQz>_bIoxvDK_e;!e493isIU zFC0wdk4fVG@Yvupt!BlEyX2mBa3@D}*Bz#H$=qFc81i@Y^XpihYWl}yBU8nF`uFtd zWW$p;vR^ctQs)lQ>bGA&e!NLx{v&iJNSL@Hi6~>^laC~8VDCDu?c?75LOW5$#1Umy z9Gn3(4ApA~!0ELs=uip=KRnRBIrw2#R1=UXzJgd=h_67$N$JMDQ23$jAly0|K=~DS z+-4Mj>$Sb4O!GWQlnyr}WLWV0rFKimuoMks%Sd?CK_ih*(kWlQt>yU^Re9`0NgbMy zVIj)EVF?+QKwE^ZD03YI$dr7V9hWc|eNcWlA};pE3WDgj69scJm#?g60);wO%kvR$ zQ!8=tT}-~w>Vn0tEJ}NuSck>19YHIH>W`o_8H5#>l={Wn8lO^OUzpO&zWS8%L8^&9B_o6XLRe&%=wHa@kzU$3LR^w< zfloukB~J?Qsb8^+t#5j1V{%bSv6J7NTZ$4{^)#j=xt&)!->)PWC< z+9))<5+excpGYrl>|bQ(zs+aAJr)DsrWbW03$_yM^}y(jLc@$0K7_KDg5Aw!O~&Id zcNULJFKu)|L*QKMz(=z-3Jodv^U$Iz$%3sYst(+qwGsS}4Lx{Uv1}yphplLL9QgSt z_JGiE1}9F6x{w81DgJhfz4SASAmsVdOB>xVf8Ouy?1eil=J}5h%T5BmXKMjb2M!v^ z=5I00f4sQldwg=Nxa0}^G!iC}76W~*Wqr=Xag6cwf(Oe$QCYCH92ckyTOib^To`<( z$JPa}E(O`Ytgfg#_r=!``6KiWDw7-u4IM3lpxeRC=OVqdF&mby0^jvp_O36u|2Dm} zaU9G)0mu3*Tbdn$dH&Fo5ihmt_Q7@sMh`edP>+F$1U0gf5C{hb3Qug^7k}+ zPo%x!OlL36zMctHjQtG1UgsewAGYS?xM5jSl>BSr;`taq5gvoX>-ULE6JrDcYDD=y zY$XWZrZ(v66|WM!O|6Otm+kXh&FEa&y|76+@kF)uAHGpYu1hwjO~oH(H~YccWcAGT zHnsMov!2U(qB6O)%X}fvN7r}|RniktCC8jA1tQy$j}W!Pb07KzBJW79GQY$6SeN+% z{S9x`o7Yy~8Eo}Hq*gGp3U~O(@_gQ=%ZlfCn`}k564iP$>$e`yxBo?9l#ZBQg%Sx2dhTXc>HH=b7nkYVWxVbJ{AUY%6?pjk`i4 zY6s5%kHDj!TmZ@W?1h!W=BxO5O3=>}J=QMtIGL6php5(R?g+b1IZ1*aaZo zCavgZm)Nny=1mnRqe6rLmq1%Kqa*YINArS}#Xm6Vom=$0U&Rv3$Bg#_{%B{>O++R( zNlvqSQ@7m1tqn=gU7n8)azv_snLS^i3ufT@cE_zwGA`=$!oX<@aV9*SN6!N6A6_Uw%YwtEK$jx5l)P{|K09 z6jckLh~5-ITyzTJ7>wd=5(k)#Ohz^9mHWeLVnS-r+zTs=>5Y)>RD$r6R^sAG5W8OI zg4mPLVwgrL%(ReFnC~VTYbD-~Sjn{Jr7$PyXh{x~Ty&Ekil}E9!g3BkjRUiS)4qnN z)=5b?{Ueu8Kn_V16 zIL%InQC<%43)dLn%L<1P{~G*qjq&B)YYaVZu_KxuCu!>=-=Y1H@!?EAqNpG30*UX~ zYOWvoxPGK(5qpluPXKhhAbDRPmS|gj#JOL5{CzeX{{VYh>ACos4WRka`%2JIn!}3& z=z#<&M76$p69f{VeQGM=?ejUF3?d1FIc?Ku_f$Q7A!79DYcF7nEIo{%sW2Eu@WD-U zI3!`~`=%HIZ|c^&jZy_!M7D7RhvdkjhdHnyCs07&DmF$v3B!9xauvPx1ykSxA!>)m z#|L8qCKzwb;%_AQ#;o8QbIoterT6P^G%$ZIvEvp_r#jrhv6m%e2VT_9A$i=a?x`4e zT!Q|iv_MUrk)(n8Cgu=a!@x9(vCeLA~XobzaZmZ zj~}93m>BKS;g`F#9T@zg0B(BJo>a^to94)}I>J{|Nln zh2Y0mBmcS?^QTbGzm9VLb(GuR8xgUM)$$Olg)nYR8&nA{P|O_kEO(nOG2iLQ{uwcKxV@pNZI%EY&8fc(|kUxuQn$JDfn@a^V`Xi;|8MQNRp4x z#<5j8(2QVL#m0jKW6wVe_v|JEudj36b?!)lf9{jo11$Jv}GKhgXSZ zTP%pmPSR1?B!x4}7^#2%h}= zNuhZ19JE^COhRYypu;=^9RJrs7^*yM{3iq*US2{Ue5O)kr@&{N0(1xH=zSj5d7F~$ zxIx@$c;=x%;|lJL0Zz2S@aU{HhY~2y!Y(grgStdJ(T;u?vEvXM`@9xE z#|1hQ)p{aj3B;AMXQ`{MLemX0N0F;jG@^nW)cnib@Goia?taZjdvrI|zI(hIq&*^X z6K&N!nh1H>cTp~?FMAo@)xB? z@P9di{;vrU^A|nWf=2fKdGZ&niJZU4rPy>`gr_fp(w(Zc<{G1Zc8>|B`q`MjND0>W zG{)6TOX2oSP*ys|v{ZkhmALpT3r~)aF4kdM0E}WQA!_Gjy%a?-ij51B@z)q@R&+ON zX5g1A5An;D1XIZaVhZ)MFXGWHM=-M07Cxn!J5V8!TP=~48q9`S_1S^ z#i)PqiIg;p$TR$l9Sp00d>SV6b??y03?!W2C}p*f$F z_jJtMIX>dmV#I~xEr>u*iNWNAX}V6D?MNWkgFtow&QbM0?jUOWex&+zjGi=T*RR-R z*hRNxqo+MCEUx<9;fyKSh}mZ5oc}TqCi-9I<34yzXq>gp_^I|Khue4 z`rAqEo%|Xmb7cIlQ&j%ENW`@il-)mM71mq(yy#$HH$B~PgRF|U_Fxi|m+ zsQVkZsH*&N9KSO#iVEE!vB` z?JI|wd(U~F_c`bN{BX+;?yq#ZzxwNKrU6Ucg!WfDJce4}uDs<(_gA`Up#Dm~3hS?A z)p?rMUMVh%Zw>ZVg04!B5=qXJP@$K55y6IIr*R&%r_$Ildi9s$n}gL~di7ND1Y<)& zS}KK&r)R7DzUu8>-=G^_9%Xw*ZISZ z*1isZY@mLHYkV7dMk&?6x)jB=8Hm9suyR6>V-&;crFW9sS+=wD%CPA zUNt>jAEa5jlTAT2N>H|_x)6}=)gVsmz?Ul9{r|V*yshqYoL>CMHvLO6Rye76z#opLH>mPkt+gJUg#e=RNTW|hJ^<&S! z(8b~V9Rt;mMNQEoZi!I;>O<)d`9=D<;bw1Vcy-de1 z!#5!fw`>fekZL!3v*Bi!X*at_yV+L<2{60d>*Mvy-8G%sEY`BpBDBt*ohrM9L6WWC z@obfBbQjguggOM`r()x}A2JFdD> zv&ya3%h;7kOi2L)9Z^&BrV+$UYqDES@Lx0hH;R*p(ozi(1Sh4G0}lCpF{M@XpPlL$ z_dXc>X(eq?*mFeNzTz7sdB2#lkErb$1^vzo@~P-P8@2GlEWXt)CjcRRjuO%hIw2+C z9*6=WN zLi{}b(Njt#hvOa8@(@QY53d~P&p-Ov_8;gUz3Suty?=CXoQuPk+avi$(|(G7bkV>o|h zBZ@*=kf!S`ND0F4jMcL=-kcU}L0T}lW^~N{#8-4i?nD~2ufGis*vTF>Sb{A{Vc*01 zlBQ@~2mB*wH`0ryQHE8-x{*fcMaR04;zx(|*^91sBf7grgfyaiBP(2fqfrn>6T+iv zt(G5h1J~#M@A$#?uPxL*TtN0ekL-UQ4e1G*esjU<2{r%(A3Rp%$%{d98@44ugz5P) zArYn^mwU3T_)nL@&nM57aLoD(snsClPD{j#>Cf-8pOL0r-u&KE-1Z52d}Dxw&2d+^tw!Xev84rK?7tVkAkeA884zRQVk$fM zD&}x|e%NAGzEz2lD+)HF5iltKQc`6h?bREQr6l2Jb%cdnM5aD2@{ZHG68o#CH{e_c~u$>E!B4C$m( zb+SMHCDi^v{#Ekf|DJ#GLtPx6pAm_FmHZU`Re#{;=3mL*8Tl8l^DpuV-hLz|Y0Mj#ykAo;+m${&iD7{OivaoqwI2{QqzK%VeSa>yF8T=3jfvKY)Kd zA05KKzPoN<{sM1Z~gJ)HoU zdJ}+OzHTG{eBFqem_bm1`}g;;w%k6h5x~DFf^QNj4-Vn$=#JOq3e%Yh%`zg&#bKun z_F@QM2ft{9ps*==#GD9(z*3Vt!V*FZSkdT6OL%2pA4|AN?IV9^;XR?Tr@()$@Lxg; z8d}3;S-$RInh!r;P8k+6=qMKJb(%w=Y1C#FKfjUE1sWV$L-@pb`)X;2oqkz%nNUBcqWJEqb@mqHKS3HMWm{;_|l zGc?cP>!5yJX3g*)lpTMzt&jaW+N0OkXpIn`$O5!!kfK~J6gp*>u)r?cg(4@>%w2Xl zS15xPSLLvCnzJZL6BJXapr|1z&4*ue(Jf5`?>UhHN; zaglE(d2)p^Iaf$0-;|SYrXa=gAS61yc>BoBDt_`6gH10S4Fn4Wc7ed246sii zu%`m-lklOvy$}SrfwwXE3|$g z^db|L2f^8&13kcwN^+|t2PF9u%0X-gc;ygeEJ{LQHXm=3lw6@Kn~%RvV&!wmXBuA# zt%kCqnePF3n3S@M8SKxZ)1M%}3OyE;Nt0Rj^&~+`@spi{0!`K?aJ3J@}1=RTssg@p= z>r&=WVmXH*nj{Zx@Br^S$ouz#d2~NYX{DwjNtv&Tr~f7T&rNlV>vWL6+~>~cSLT|@ z@YHoQ-6O@(OdD#~WTRUgw)gmoIKbY+-Qwv_M87)KF|JEgW^_|u`Ilyno6gruam-_G zXVr(;07GGbdNT~r6*52<6&4;hht6ITe0c=C{CoQHe?wmWFP(jAgxOaH2Z)0Kcsjtz zkO5B8**i_4vwMRt$HUA2pt;W9qSJ?IoIty%%=nhh{*;O1Zs6;4<7hWNd9|>b<2X@C z;E;0jNbn#@tf;dH0SynDL{FmVDFZ%u6H+V_>J<+E;YuR$X!UGoTiqFzml^8WZU7&7 zu8=9pXC%)$I4zQAJ#4zReOhI+2Th_}6oZsWBJzI`jg%=@xihYX!7k^mcA=1uABvPo zS0QDgmHb`C#}DDH%=;UEqt)BF5em*)R@W&UlDlb1vdjLmS#xC3#q$OX9x7ZviS4(p##RBYcb#<+61dT`$Sg>hrhWZT$|7eYjG^ZlPF`k5#nFFO7!^G zD}w$TL(1Rre*8BxhV<{hNg6U>P*5fd3evTshBGDLuNi$sSX@v+&~XzAo3RJhi8DpsFsmuGiRtvm|`=%CpF#!c}H>5h`c1docyT#nH zZCZgD&2uB^W!h+w_AK6N;^V19EsM8iS;-$h_D2%=qb;Q88KwV{l5n0xyNXh74jr~6 zt+0?{x%qU7)@keIiG+U9*~sJ1Mevf9(;Qj)a`aV_+<~nS_^mlaSZ(^g9A(dGuBF4L zO2D=BobD(~o*2~Rz(M9&4bd?n<#veVmZSS+)|@KQ6ydKX=;d}G`LnREay$1$ahyZ; ziz&yUD=Tv+eJ8rlMDZ)KqBsr|T`OO|T6hn*z=LLFJ5h3#76DD9!5ei5MxH7GzsY?Q z=y4?ird#uu8B zHFH3{WwVN(Sl3^C;eY%;F22wZ-*LOSpZJbST|;XQNj+PqwZ}Yp|05j!_Z8vYx7O*E zJ!xH`jG0d}8v;$r!rRkmHtoD#O}Mf)DiA6D^sn>|Tss&PTClh>#vt~-exz25i7Jjk zp7UA$*r_FuYM7el3tScMz}5so<984qF1mfm;LvWM#t>Sf^-56kc^0Owe!UumDNApeyp!smi0~_x2(_*KSj=G8$F+kY5vw`c0M<-^QmRG`Pez# z8ZN)mgJ;?I?-CAA93L*fZZ#fH7C%_jTYg>rZ(V-v6e7kCZtX{Y-7-M_*8iD}F_5{; zUKcSK$x6#wK={pmrx$nJvqhz$flxVsCDuZ%Gn(H6W^F3*1ttX(+$;^>P`PL=t^Ys+ z_=*5A4Z*}VupMftgyj&kH(Vs-`M4+_lH^9hddir-SwthUj44Xqh$7kaZ$d?~LcHde z5vm|=Wid-$NtqQb*;=S`B2%JwN8^8AmuP`XIlqKZpJ?q}R>}h!w)PUySpFIW{&0~4 zf53kM`?C+E-)0v1lQ>hEWQC4w$TP=Ec(aX2zJ(Gk!Jx^r48S>Gmq3in8^54oRL`;S zDc0jui=lcB8l)yzSqzoH;>8ioEwVK)l90R`rTAIuQ4>mOL;f>U(YWJORrn>}Lhd6O zMvfgqSsWp48z^bp98?!lj?}97vm-kDY{3^Esnud}-qXIv<|8_%tUuDn9d>&0;_ZFh z;%ShuMeVQiseibL@W?{KBMXB`d*mb=uPaOb`(>a6;>#D03%#+>4|64RIfVsZT&+8= z@{nRV`jsxTUo$S~yvhr?w|1fdL`ar6&R6^`ve$~<*b1;_Hbe)VRpEZBt7zRBYKMob zX_@^M6&YVnq8zP&d8{=5MUL*VDqtQfFTNO4{1&hZYvd^pL7;nQk*5EBtV=&}pY%m- z_iyXVKih8uM@d;PlaM>%h3ONgi2l{ z{~^?J1mwR`#pZMgP>nJ@{}sbVK>q8c!ALtYKSVZ$rN9#SrZq)J5m7n{MEWQY>7$rP zuhRV2uvYU8LI39aW@F$dr2Uo)1$r`UP7G3ZFuJ_-NMHTo$|3Fzs{gOR4?`+8B{ci- zf$Yt!U<=Joq%wTqx?n3|mlm$6hf^w)=HStYzFWpZS~TN;odz6|XB<^NzETF{P*Z`! zb5jfJMOem^rdm=P<{ zX1xu_5M9c^0g4M*M8iL)+$N|0(9*TK{{Kag&(YA*+pH* zd4$75LgBkG2;YJ?|5xyhdddi2tPUUfgx8$W;0xUS2#1|Y2z-k^)!}>ZjsF#V&%E3Z z{{DMfgKs8*uW4lnd>v4$w_981OKwC z2zemGg_amD0%62z>Lq`)A7b){r;yWXM0YbeykQ>EgfJq~fn@nnLR5;_iRxOU-#rTk4J4 zQS;LE{Z3ooZU0Z#x8hyn`uK?J>yFpfmv&;4ietmqcX4oiMX&z2^$m``{>Ic#%jY%U z>GVIJ(EsXC`u|ao{%`yd^tBARzfL9aB_p_#48BqtZd~Pa-QWL;Xj&2fGI=aBuc3f=$1!To>b zhr`FOc(zykSjhc*LXU5+^0^++8yFN>k*6#Xw%E?cPnHzBkd)2Gr;`t<^n>NE@2-Z( z*S@bH%kjLWyMn{7eX~i$a-}gC4FBnnzPNAyrX7@Qc2IKuC-fz_zJAHe@{~0O@{$md zysYCj^0M#iO)7rXZ6q&{KXy=Gp7n44kLc$h*LU|D1G9%I=V|NvF0e_(|EvgKU&n{~ z`cgOiNc#DM<&T#(gz7&*7&gBA!}Xv48Gm}P-H2doL42%BV`R8!8AkBwg$_Weo9i<P_dTkzNa z75y*0>`4QBm+J6c3iSUgo&M(%`oA=k{=Xlj|LcDY{U7xHdtzisNHBy8OAsz>LrUCB zk5c)CDliw(l41#vj-^=Euv46fcYjIte@W>6?+@<(`X9dk|10{JcglD@&yP(1hU)b1 z3qt=M=|%tc1?k_5KlXn94Ep8U>(?0c%h9@i*>Pi-e)-kV5dHFEvaD0(A^PReeL?+l z?h8Lzzx-L&x3a*vz6%tVwaxUD3y80G36kAo7jhuVJ=gBZ74jg; zJ)h+#?4_)*0J(P-He#twKaS5or>*REwz49+vIp79pnuZ5LF9)Ohw^8S)i$#9X5hu1 zTgW|&LAIIJ(oEzjOG38ANu}2qHbg#-JTsE;fx9=U z0W-}9elqHc39>dp{3Glnq zwph?%<@F~t4Y?0_7AGNFSyJg;$WsRRUz{3YC6=(2Bx);3M4nkm_>13$t|VDoNiy=xNX5H; z+s{f`{}i&4$%CNZ1JWP1x{Ewz3FP+2(^Wuz(&XO`K>z+UF#Y){=XZO4|L6Ca{Qlv4 z=IMUVucXWqwo>DBEDa85X7O1*7N4cXWwo(TbIwHmtz`KITWA7-yaPIQOY&-FT5gc! zgQENqlJ|@9KOsfyTU@m0GfivKDk$e9Bl)1Z4?2E>^?H&SDGODoIM54t#f)zHnV9zI6%8FPhn#BXY)Wg8UBpS_dB9 z^QNlDLux%?6iZ2S35WlE?oD-@iPc_0h(*GuokE^+AzhTu1TK|43xpg|eOHn@=`(U8 zl6xe1uOzoQHzjG=*aRi?tMp*X z_d41Q-Lr$@-m?;LPan-eax3z8C6cEI3Tj3mxgGh>T5E1G(Vt>!W}0hmiDKhEsEi_kR$m1r>4hdXQ4V68wh4=uK+MW8{v z+zwXQN)qz4F=)P_!yi!NeKU}=bzkA_$^LnXzT+iO+HGfzl$D0ac5 zS9OHI2zj?CH;D3~FjzFe*Tda#*mm+OKRBnVWaCpMIbSG)T3zIBY+x@9X0JCe#6w(1 zQShPEh!3T;&|9P**A1_YU&=Hs%ZlFLv7*$>OVhj`@bIm0<_wlX2sVGCsOs~aTG z{3IkdZiCcQ`3RiDy#(3n2Q$4n?>aWzZpp4=4EPrhgnCW@x?#@v}5PY#yOP zJ6K5DN=hkhjjrglQ-K@FMo{+V*OrFo-nvO8>pR1!zSfzG4goL_a==2~$!wXGr})Zw z@Z;Du>$6PA7Pn%3mZ|gx2$SiS7CQ_T~QgIjTBbIV|B#L-;%abvB(-!xv*1oSb;O_5zEab=Z#aRgaxh)xh-; zL6qc&75kv$B|(Evh9tQn;oV*MC)BgL}LSHj^7Prca}TD0w@Wp#s_9IPL{ zpRf4iP{NP)^VM^Q8nfMLLmpB7KuS4`Y;A~_+8pvHVoHbT@1E)y*F8gtzJ#Egz$n@p zUDpw0%I!Gj?OFpkT3;8|-Y4`lEFe2vF63wnlx%1DihmBFX?LkG?n&1IxUwCR+=XBL zhjD0zls>0e$4H7cRp1x;Jo;}7guD=BlS6dAWc##qIArN`ehx*VT7n%|s6^>MBF}W~&ofi$ zr5cNnJUbX6q=^UbKp&DNk}XhtWttDkCndQP-vwFTAR%ZH+ZIZf!mb68CFR4o9YTk8 zgiIjmx9U>|ku*=!!zzCaV1WqZ*MTBe@%d;P=%1-)PJ|s-NnXInq$syZDW4+Shoant z_}OP!!n-u?Q-^$5H0@{g5e~V2PY5a%=bGUNcj4^qlshCFkPzvd(SpR4>`Y07^{)=Y zt+v!z%9zVU+rRkg{ZSkzr3Cbx5RFp>km;mo>*6b3CJ(U8C5P=GVJD*J_9P_l(F)Ou z^7lyI>yVFl)qSk@=SnI(Ypj9s7}gm(UqGU%0|Xh#Gv4>-EK~6Q$Ni1`S!FY6!S3u> z9cA{%-xIpbSDs~(W*MQ)(4jn!FhPnCsy%hS1}(x^AyZcW!F@Jq>Cm?_$@v+LmY*fS zEsa6)0o49!U>N*+7MZ@&b2t=B>-G{Fh)erhPCoIb8mx^f33*UaVyQWpnJe0MJLHcf ze)b`lG&u?qH;zK`;Cgm@Dq-6@5o0>o zNYM+8B$gm`@w0G47d%UlIRcQ$@QByWqbTfPtU)6{kUwHO#8+C`IE4ha32FOi^(Sq9 zFU4xEkO|0)qsSb~@XJtY>5Wg8NB;0z8b0y2-%>uYmeRDh-~h;b5I?(B7aeQ|UB4ix zJILziPu@yVNB$;|ZP9yp<*}txbOmf-I5MDz(A0;t2OYMLTnj>0sJEwL+t+!ZTaB>i zD>$u-8hHqRI?+IWa6jZnPXn_ZD84Q@0P8RH%%F#n+mZYo9`RbOiieQ@m|i1FMVBPE z;#05Is*;Qej(`0c`FI3I2mcHF-Gx`dBL{&$!i()lKJ4`3?eP6kT=FXU^3Yq*A?_vk z!%zQsnm$4QSotc;Fg=9*ul5zLTwT*gF2$oKBjtzkE5?|@{Tsa#03}Vkx1HvzwrL&@ zUF)NIAPxD~AJx0qvB-NR)}~o2j@6ey_T=1e=>4wI^-WtVoJpxwk5#uFbX~%lB}hUJ z-oT=zUQ49;uZw#I%ztI|i}KCol>zi+gP_anU+{gwUWOl40Y@;aC z)NC&XCGsE>B{qcdz9WqHVaEG>4BJ~7w%b_Mgl4#}0Xw<)2U$^-{>Lf@8tjk{gRUjY zK1n_!%KIhxD~Ih6Uu`y1F}c7YzwbzCb)@We$RCQQ57Wxgt+SO0R%C19EB1jvF^?S1 zN?)Lc3w$tsc$ zWU24d%r>gGWfFGk8Ncu;Ao_oJiV*z^O`4Ze&J}V9pqatmB;^LiimUJ3q%!@4@P%Ev zL9S|_YYd`#Wc}U3^y(Y`#^y0-Y)T&6a(c<+QP` zp<{i!nv9jGkM-s1EK?vBDH$KH&NAUNI?`}5(&xwNNE7Kug-<@kM*2DjMyi65_WVm5 z=@D%t7a8fx=V2t@<4ZXF3>)d!Y@`RZkzSx9-3KF8>LcB=nyqinYFOVhbSxJcYc?Az ziH;SQrLFHaI@T31R=PgcWg1kM5U6efPrp|F5mzj)Rh{0>x&6~u(18o1tMaUoBp?B`oY-bv!uF>;K zciDwhtp-C_eP;#Y0H7E{BJ1A5`VLdVQXWz{5h}O&17;*2L`uGpiYx23tD1s>l-O#$ zE{(0VxCqG&$bZC4?c4t1xhx{4o0Wq@FVCp_8ecHnS(4lFP3sBqX_w>% z-1MSe8hP;&EehkozUpu4@lCz!UrIubLqR6OhWtm(l5O{r>9dsRYKM{;E!i52Z}U2A z&BfVL=>CY~x&YQsfIhMwPP~qMR*N#YIrIyln||zhk*vax3(5AI*PAdG7#bH zOz6W+8D9C-PMbESBHJgTd=T-{C&>13@zS(?fheRlAluSp9`1Q~0_u@qFDRYv!_^Ig3Uu>%OZv%H4QGDS5}~&0N-V z(ZaUC$YtGg7Dc%mla!Lbz*qkWM5Xx}(|mLtjs5xue0u)Odg{XTG5^3;<{#L~`dt=j zw4{tsj!F))s;Fp96RVh8$6bcFr6Z8LES2LQZHl6DW3!1lEIoOt$b-_6+y?pW4O--4 z+L!elp0IN}i0ky}X_?3~2O-al9DIxZT-P`C9F7iot~d#K9!^A6r})Y>ut77Bq-2?p zXHKT%nUUkL`Acrn^NtIVV#)qn2?tKcCOrDnH-jU|GjiM+*M3MCz)&Pl%k&0@A?4vr zd@H#BA-SCl0L25z43azzA^*{6B)dk$AZ5}BcShF%^7arUPZ<#y0e1P*_yTx+S~Bv? zNkyI+>G=1q?{Ya#U@Hz~1Jq=>Q1Nw^y+mZ-n8`T$4XRB4_Y zt@?~0V>j5J?wRvBuBK8@f{L?C$RY9@dDiJgwr0NiWiyjusZf{FfRq`rWSY~5XtKGV zX6q{n@gR7cI8O8|P8K~SsSeK#>4*riZMc1y)_dF3=9DXiM}r!dpRc%HpTpDt9I^2d z!-?p5I8*c#BZp^N4$RSv@7L#0V$G}pRx4le5p$qs(vETkc>E<>)SwfUr4cLCqt#b_ z`N-$B{4OE{%bJaoH51P?X+pHTT0n3ys96r%?xkaIWj*Ud<}i$JTCe4=YyH^MTD*Af zB93#i`WH@lo$vz3aWyN2^&H1#*6a}e3SVy#USitR2Bu|gX37)Q*0ejQbu8E1t4!^c zbA_T{IUBoB#@E}0BECLfDCX-V!Nu2=3#EL$OIQfm|B_aO&cm+$@|`|v=*UTuhz3`+ z&ox%kTCeMtAbRHTE3rTS%=o|SYE_*2Y^{oa{jA1M7=Kx$=g&pTlqUM^aZ232r}dq@ zOuwyR`fUwEJl%kmumJ?~bO*N39k9!lYztPhEuhvTJ6})tz-gDQ@W%`Ej~ug|uUid+ z*lTj4(XLDo#3ZeKwuYDu8e;5xU9M1?UAeDxXxhH)w0(hei8hp@aur`M2@Bz@UqQ4~ zTRUGdhI~kAM{+B>L(;hRSxUl1T9^c@|FqAQiMcCt)i-qB?(j%WWfMwEuH^j##q?zU73iZ|3bExJA>Ot2;XqDD-&YB10#@9 zmYB8=+n%ab`FeW7`FeW7`8s;U`8s;U`FeK5^@6GNh?-$uplwd+Eq_y5wF2y#UGB)X>d(1e|?=u#y1LyZ3fbRzfG7k?zj;x{Wb| zY01DzlJN-e^Mi>P3ZUc*NR;0d<&S9XeWJ}elybo&$q%QB{?DRk%lYGDW-8_5Id{gN zVYH#M<=pXH;5;NBkmP;%Fd0z(PEu|%Nw)p`V`-|YcHY*bs&=`}>BZeo*Q$8o)7qtR z5+TefOTzh?HRVD=W{pc2<+RIo;R2$~CXz)Z;g?3Xj`wb$ITGad^g2`-r2egJ1D7$8lNd34$wLR2v+& zwxtI}`9x=?s;b^)XG=>T0vm(q|1=tEj?D5zUogufT@Ztm2USr%iB5lv{5?~V`wJ6N zrd*Zgqh+Zi`D2)Wq+V->NK-SA)`GQU0x)M$&X0+i0kBU6*oTO6bWFg4?|#AvIFj4& z@h59lGWsF>1$?6Y@1N`~-(zQSFM+=EyNHca>G_C_U?0vG%INu663>jqlsBa93-G!f z)!T^NjaJEXLyY7Z0cBcfi@cmv$&;6iJZ0&kQVb{H0TwL=#w2F0%R!1|@?XeV=pYK1 z^`K_Ig1ejg&+xlD`*G?W*18Kq2kJ~_Ol%b8!?b^=Ctt{OD0iDAxgeG7+HBcAk{pkb z?u?J#0~$G7jvW~o2Kal1pqXeU?fhe@K)6)+RAZc0`i*dvV9JdLc20`((A@QpwgO zF)9W@3=4!jq&Cb}qGKFNrpeg<{4vNTm3^I8(SMPA2!FO}K(&_2Cv*Qepl-W%!2OdC zHug(jU*>w*2MHp8zn$b)l#`$RUqmBM0$F!zjHJY-B3t*uxyb)zH1fm_MV|bjWF@IF z2+AW)YGr3XHkB}%9!cJdZ+eU{n$wbOPmghDoKK!`ddV{h>46v|e}Z!!s|`_q&k#gy ze}a`!JA^ks(XW*z?ScNRG$YkM`lfoG7n1Sm z3FMhv;j(lq|CI5#({*npWP@Vk)yMlq!Ef&G4+Yi;C~#^_eRz!|#1ft!=agN-d5}{L z7lE+r7``rFh$W1Ccw;a7iNR__M$06lO{!YEkXSmJj1ZkJ31dom0+5+}J(^$b z517+hP!bDXFk70G+F z$J|Fv$kZB$g37|w2TtReSvyt9qx(8F0}J&zTGp@5GD$27o3~n?U7ZCr%c%}p7NePm z?L_ci3o40?JzTW`zOSodrXyF0-!W!~}+T@x`86wJFoW zId^3ap^9HKmF?SThl6~fz|O}{)+@?xOQOzJ++c$GE$%Z(eDxnp)YOm(8+4rMz6a?- zr&&bVFQxc^B#6p`Cgko(S`-UIze7d~WYRX@isiMZOCa~JK$2VFCok^a`zEW*xte(y zCB0v*R-ZC+T2u6hiINhXMvh&MWZP9DP;--FnftU}I&Cu<3ZMi_5*dTV@hj1nXbv%a z`BSvYI|NA762WJblt+IxbNlQyr!@s3O^9id03iO*9>}^L2UA*_9oo!;mt{`PM2f zFwvVWeknH|b~(c z*&19>ur?K%fr3D{AHTWEfTH9ukPXmEruM)vNp7NFIo)Muj<2LaVSD(BPv9g$w*z;N zN#th(Q_#@nmz3BMk}~S^R|wi#UDrUCI73^rB=1M^34Hk~gTR`n1CkoVon&f4w(pAX zBX1}1^_gaT+f*%(iD={~r5)LJBVO9gqH+(Ql*6p6H671%7}?rfqgkg=Q10G*f~vVh z1QL>v=>($8*dWQY|E&>r@LI3#+4=zi7XSpa3#kX-D!3~p!PJokWBq7b|I56BVk)CV|jbesw#4y ziCy$7_?{B?>xOO#@xtvk_KWks1?2%3R@bWDfkh?!+TFD(l^5&th2ca}i{4&KHVnB*8@{D^?( zMvbuz{cF{rHq`0G9R-8i(yMy<(XVPF^pA#=5xY>B=EL>TTU7i;9>)#lR^(DQQ?jl! zK*fT>$|!fn+uMm$GLlkYc?5YPm5;w6CXg)2`OG+p6iai_JQR5RK z;jJUAfpqxwZ~k2$*PrjLV1;VcWPM3weZQ!Y1c9t?JXznb7zvkzRKCtGjIZ>$(m-V+ z3eK-YTTAiP$mTEpHA?XtJzmYobiA(~!}x|uLPuNic6TqI@lS$}K;*1yS$HJ{kbp}7 zyo&&Mdl-Ozq(r9~G>u-E=Ykt_WYu zp!7F>jjypE|8Fi}s>{U+*Tdw^x; z7MZA{r;NG1lQg$C?Ox*E0l!fBlCR1$6MD4+2Iu(79uxg@K8OcizVc<}?jW;Ow(wQ7 zlLZBaucyH9brcG|ox zRp71kM{@7-2rFQTQb#sCM0$idgxCke!cuwdX zp;*~zE%>h)^!v>W-Zv<`TNu2x4Bk2h?^Xt{kHNc{ITn{OujW?f)dVkR-D>EUNbTq8 zs{v%!Oyn8mt;#ZyRVMLP%gQQhc}OO-FNx5;Uy$Vrg!YXmwC`6`l%kZM9hK!f3&79W zYtP}?;Ck&sl3}sEUiXX|Vt~Z_6Cja1t6@qBTBKU(p@5n%cD^1$y6W^Pib$DxNE2aa997?v}6h8^ERf&z}A zpop)_6&A4lFP-|6H;v+m?OG7iKW5uRWts`O&sZM0PJ~D}i=>RbYEh;so39t5oOauK zn5y((HeWX{Dk>}ez0!X=JoBPr9G(SH*0hdJa{Fo|;ZlO~WCO}m4Jc0yLwRx-%71ws z{l1x@yp^K-J%;jsGL-KLiP8=RWj7mK`ve_r>;{4pw@wl+W%0%7E5VH9y0K6EuVx_T z3Q2@10Xow<`r3w{xQl9|WDD@h;vQAa=If{Ad!2S0rNyPk^syrYm&MoRMwx4J1tE*C z&yR`*HcGb~K#n-0w{Z|sb>8iR6Twouew2N;P7>mrHc2>-f2uc|9E^Qf63#<5^64+V z-~ZwAg-iGqHE4Rug=B}4r4r>{`3vhcv*Ic^!*$WuQu>{>?99Z{D5N&Qk0Z1nvzDDH zEB%Eew}>ex9CEWRWSkI{Nj6b#ambAhxj8V&p=6yy^6@~PB=3P%Hjn^dYvL=O;#kX} zCWDJ~ToW?&II21p7Hjm)o_+yeHA_|1zziaQkqy>+zSI1@rbk{BZ6_8M+WERM*Jmy3 zo>+RZq}*wC*bXfe3H`m^Oulq2NA9MmKpRq<0=sEG>9+7#K}kM@H$Fro&F4J~{}Q3- z&_hgaPm;goP^BD7w(!ao!zc9_0)`FB#4S%D|Sb{_0eRcbW}YG#0=>xdv~Yc82Hov#x#{Cq#L^iqdX zV0PG!F1%(sUpLQcCSUTEMB5PEzNkQ>sQLnLgQ?DsXO=-5+nkOgMc!NTFGTe z$Rki70>umhg+!om5GZC5C~_daF^*j5Lwx1qArXv0|7<&74L{iq@fBcHp!w^`$l#6H zjg;6+n6)cb0Hv_WE?6fzz4)1ndNm#=`e0Q{c`Wr9+u9cn4UA`2L87fv3k$W2X-XR_ z40zr`r~`smEUZ0>GR#zFxZX@DW{`1wRZ6vdz)cYgsk zz0tgT>~Na1=7rW?LncZ}rU}W%Me<|y$zil8NwTP*FCgUaFtkfY?z5Wdza8~huVqdtcbC~%n5XbJXQoai$50r-dmqY%sI|d9m{iT86laxCw5TA00 zuNWCa4@@3Xc7W<^@LvVvgIBp|d@wmxi6)vfnZz`qWEOBtzQ@f|Xu$DW6Ad^{4DCJf z^rB##F?j?h7SQ9!nZeP!CW@YaWTu7&a;qFwEv0wR8gt4LHF()~z-4C5a`W(;EvE z#zQX`q$*<9Q0k&fMYcx1ib&v@m8$D9>Y{P?nE8sQhOo*_l5%Gh>ljC)kOPpr0x5TS zH1UXV5G_CPBww8~ggWx8rwpMQU>TwY%X}ddDKzVxRxzf!D9xLqCD$mCqf5i*J-$gr zO5B%aC0wv#g4QD*T8!n>Vr2-s>7!GI7YFO?Fx6ML3#X!#-NqCmIMmCi!#E8J>~Z)R zFO1`2Q^puu&?y$ro>koTq3{L;=N;-D>A}aA{-f89bwV7Tk{1P0vJ5|m`HHa?#%PCG zf+GzEAxf9ZJVznRNF)*tgJRM+?1|wPc-Y8>!g{_emlOl_t6m30yTq*2<`buB%E2f({?nb_@ zJgFyZnL5#B5#@ISzeKin*CmqjkXf>wU2;CZ;zIV&I5RvHCCcyGHCP62Rm*2#*(SAMn+U!TL~eZ8osUQCC{Wy2g~!yKV5u3Mj4#erj71Lhqw zyAF+u|G#n_B+n@4?Sna%+N5Kr-cF8ZQ=MXzkPnK`WBG_@n|7)#WOOZ52HWEPQ;FQnsxcB)n+ z614*2@5T_dVk}WBF45y)lWBN^CtpbKY|`s^80teb^j#l>|xS1Io!L(n$622$Wcj;KIo(k|E(bnP`fvQ?uLnI~36u1~L+?b|@C-j2_ z!q2aWkAhn)49QydeW~ke@1hGF%3bF=Ys}2P;4l54^B;O3UgWU|{>q5-)yxvBy@n-< zsxQr#){?d_ts^jkP*xupC$K{)FiG;4oh7U|1jGOrIpohBDLWlXxu8mNxsWQlRWtt> zHHJ01MuC`-=Bu#_mqEBd=NeA0*~(nxayg+G^JoZE9xMH@AIS~u_;pw|g~X)ius*q4 z^va`9I<$yvahV3MRz5@W%%kFaGLczRH8|1(5I>w5ge()%lP=4y+{aga7h<1rt0o#B zA-cbh;;X(Qx~8p@_LSx?OqvqYyN&}gU|N0Pg>YEzQ@3EpDbq@pU{(m5LB z3|?I{0fWsj=zD;_5lg|C}1iRf2Z%g#+K{iJg~ z)Q-^lX8YeUv6~;d?Y@3~MM|+rvNa%HIsj2(`=!1fl+Q?VCw4o5fRGD*=J&b@=hffW zst(%`UisrWRfYQgHvhs~2(+mHX_Ba9nnjy`;kDU(-GWrJmwd}t+RufUil9Ibfi%+D zZNcdGnnlRz#gp|vaO&@Wpg{uU%gi5Wljv+Q2GLOaP=%>?{D5636nDMLv65;zO?KfT z&biAjj0P@9yKIyT>1dZ-K&+kEA5AnqHXSK0VKj}DRa~^$1|pxJK{^a&LP|*w^q223 z@zqZNqqYlUiJB;oZ@Z&toDeVVCNGXfw&OG&DhV)q9KU!!)r*tp&+e`$It)ZY?S_}B ze>4NH6z{>c@rNFMIac>n2O{OK^HJRE~h{oUIHhcW<&WFo)) z8GtY$ch@+6oiB3j06MWZ!c<}76KS^+IHr&3uP_tuhNG#Bnh3K&rGRlIHzOq@|Dkjf z@=Q9-*Ecet?&9mBt;l^wEO8(u?xRo0@3H3iaaX+j?b0DBygj_x5s~hhIn_`YYMd;Rc^jyYwGX_-2+{ifFNKLa=w!{JMXrP~2}VvmqeeIzU5H!Q_EI*alWawbU7m zA7r(hVz$LlLf1+q19DZ7tk2nov-)wQU3(?&q$wugc4cO>c!hl^pG;TG9k+N zXL#P?YqnmX1fCtZ|HoM5{@P0Bk0JBN;LF&>h(Ye1R(42kv1x}S!uj|sJs*Z1U`}ZL zrL~`O(uP_{iQC9R)!~rR-ilj^u#8VWuw6wNt21G;IZVZO9e7(6Q<->wxhq2F$U3BJqMqz7D`&er1e4%9y)^k(t( zH^)#QOD;xA+*ANDcDd6Q&#y9)Lzr+mnULaViYdJRBx~^?(Mp0j5YxG5yO|ZIRxG2I z(fEG+%v<#Sv{HrlZ0A~T`+Etjwisjrl57AeZL{H!OxgSOK z&fk{kCZx0CBY^)X9sg6R82&HbM)2>tUMnza<|`_qU@QKJ4O>yb3=aqJ@LKAFD`1&K zxk7rthCE}7r^9+nrfch^iODbmyo`_6^?K6_m6j@3frG?HwpAkAsz*0@MQwkNfG41t zuii@?I_+Ps7tMUt{i>=uvzDKE zJ-XBy3@D(WN^;m2NU?|q)^OWtO4Em!-@>SPyqBeH+l6$ZZ3fB>hZ4EFk``qnTl1pH zNEsD#V2yqb`8qRlpBYke5mH9ocjL7tzCLv`v=VnY!c>GV%B~dvEfjET!T~3+o>cw!h>} zY^{yFzpllGz127LDC{q6=^lFbdp_5<6gCm$3-?(QzXH6K>7uFhac#>Dznd2>qI>%w zP5%wsL%qhD`)thH?1Fzs?sh7xf94tiiC8Ca&RtrlIjd2sI_ND&_}0atx15g6>_+W) z;q5Hfiu`f!?L?z%!Q=AaU%2ad_3gFlHnKH%{_VQKsh#M5?CF!Y8=iKOr_GSx_RQ@O z=)+4_M#$gq?wdaRpDCPw0cqeb<(wH;T8b~FSz5P&Sl5h}`}dqxDU9CEi6)M7R{2UZ zh>G#Y%TQ4;p=kEQI-2jCxuRKJ87KrB!235k>*71E;D4CMSSO; zi0^ETVwS-5x7MmO_hrs)MBQiz=DrY+Paj48ucFa?XGf!yF6E)SGHa$>g_IkitZ$X? zk-c=BAcxj+UjBKj#-zi8-uI_6o*f?aeqGN%{j>QMmR|cy2G3Bq1g4?oWZ8zD~#(Qlej9b{$vBZx3B1W$!`!E0zOGR&iku z;o-N2^1oatb!uGq0i$s+3OBkgHEaw*3GQgO%rHw~f? zlYg!V%0C@FgNTngMddp~4MBpxVH*B;yrxGrG(YF-eTbBu5#cJiettzVOaK$rgBV_C53+aJNaC=n9Ir}v9 z*j*KRHp2+&trL3_)GQ)7gZ^+=#N1aRQAvvBGS@0D3yAghF&0g{div$H?0i3SLIr?h zjcS+MmlURJyl>c&o+g41W64nPV ztz}E{NJ0@64v75scgp39Xr($&u7IfgmqF#f3{C!{fp;(hl@E?@?DZy-|CaYB|B(Us z>OYy7{3laK@wG373JX+F_??Lf3N=PSfeL}wm^2}!s$o0wN1l~%4%EdM>Rh7(ObhVKt0*@sV(#aH=C zpG8~${tEpc)jQ;Nbowi#L=Q*pXOR2Mh>{19GV1E=Q0b7Rm+i6(=@Dg_bfX+olcy!C zv9$SXv#A`Dhn3<`IfjnAZ3Nk#*JnXwBffVw{QK58kUu(R1;rKo=q!VrvwRknTx_$c zMDhnIIbh*(s; z70zD^U-6QOMtWtE-6+sv;S05*y=AOuZzD@qC=iv$-|QiR>0Yt@s3^A)aYr22j+9Zp zFVjt;sT~TFqm(WvfhC?k2qD1!FNQf~m+%{>-f^xO3LoIV-?^Q|gYoYSL#Aew0r0sk zG^KjMm+5eD{m0GWy-(6yN+SEd_=Fqy z%Xao%I@*;P6GIEiS!1A}+$J|IC`YSW#suP!yo(0UG@)7*+ygmUeK$Pve(-ZIm|4Q< zMc~NUeCE4a)}~OAgd9d?dhpKQ{zGfaFif+26-{H7FWmG;<1r3h%r=4#{Mk&X6z;{( zNVV!)@KwA-zG~YxjDWLqX01v;y){#>i7@*zttLX1b|%BB_IPGkk!MZ}Uw?BFvNe|^ z@b$4bIBo4A))8DdGib>)^q)M<_1S;YsRa%wnuagvc*F z5>_Acdx!RW+)K;~RY0CCM2btW8Xla+26AfcB+0?rnm~}@$lp#h+=NFaluSX2RB7ew zX+eLdExt67d~-fuZwhZJNH@Xw&9(&1|1x)mE@d1auSprf{N!-^)0{jqeMurxVk?j$ z#yD*kg_@oK%po&03{(Es*2{kDbe~BoDFOR%=>a zO57uVSxW`GP;l@Gu~wx-^bewjGcVpQXh@6ioBv;73YTAX4(dLW#8>Pi`m>UGBr8;M zh58tbzaG_u*Zov@{qWCgIZaTt^K}l?cp6c^Cg?XNa(?SU&q> zua}sv^&K9EYSnFoiQ%VEt%{#O8hT@p?q~Jlxxdu#8_|9pem*tV(M3p!JMtemI$7lC zg!_u-O{XWculEy?68BtHI+2%6?jyZkAJ1M7d%x1>x`wX{Q`Y_y#c_+Kkkgfll(=6% z%}!TzsP{~<{Bxmpe1rZGFJ3&oR;868PTUy50W;;X;-OP~k!Anj`Rkt?b|{uc9UhULh3p z^g+Vo`FBof{iS+hc=udjei>J!UTfm(CS8yCcYML~8N<7O15Sof)p=7*lE+e(H`T<~ z#impJww13KZeoR^x*$K{gfYi@kElea;?j$#7dg)<=L>UcBq2Yurd;?fVbOO&16<0) zY3(6N$mFedp@5Iq>JI@K2`1F@_4&f(e4Qjr;OokTiNK_TjudhllUWlI4?(4SXBjBA z$^E|<{>mU`$xhoBd>+Zi@%`DgD#rF&6-?m}Utp(oK*-H z@g?`;>Pt|!2|Xl9oLiRfG*k$jiKik}S_dli(G2a&!LbLk+{ckCS3xqZO?6o#k_GI=4He1452EFhEL zPbPmrqOF)D+ET(wQ;g>ciP?Po6hZRLqajLgDvRi;be9V`oNLyyav_^5olaZZ$hm@5 ze+25%S;-2{Co4!GD;PyqZ~<9CB3VI_78j@mFz|JDVL_#juUrOk#`W`r`H;U{Sw#O{ zAQU>YtG?l@-r+bdTUj8OviSOcqUBxSBd^XL&T*pcJ-&LCnRrG&m z7X9a@I>vns)%7}uHW+2JBJzjU+(6sHx7feBuTmFMdUwb7X9B({r~ay?eS4mXa6&~ zz!DQ?fkdN#1ROL`&;+sU0)Y)~@GMRsV5|{QQRy~XYGbm2paBEB3z>Hq-6~dEsIPsc zmR3d7kRV{)BnTm(CP9&lR=iYaSzo!R5U%t4oaa0 zk%oRDslyj7w($k(_(9<$Nge*kVjJ(0KgwwjrS{>t0Fyti#b;Q6|8ooI-_jx*KS`)d z9aep6X!%V0gpHI0NK_n=>GGa+3Eras5SCl;Px`I#hx4k>4lV0b;6IZmJhL^N z8oa=VVRpLXTO(0H&_xq!rFHl8ao=~6Ag<(8b5pT!cf_DR?cIW0Vf`hXx zPpI#mFVy`yE?=noT|6bu?7Zr;ah{o=e;F@Jbk@uf=l)D2lGKs6jI#0J-jX_U!YFDD z7l|eA#iuCm{~n@Z!+ZZ@EbmfNR|xe~wY@)1sGAXgypi_|Cf<(w1n<|(l;)S%kk{C^ zfb4&zl!~5pfR6u=+u!ba+--05Jcd4!3Y&>usEc=!m8y^5x2^iyl#iHV`EPxapE1gUZl}`CW{hZt53e>9GxqPAS@q|2~ zzUX$&Z7&i_Dy+f~&S|R>=T`Ir-gpQ(y0?3~Q!KIbKhuWwIEbw?TKx9W3eTqj5&6)4Ss~=tja(1O4lL^z(Z9)7|u^SIlp|00U@jfIpaj zUJidg2*0rWLi!PvQQ9NpHt3Q%vgHOFA6j-+*NGl<%3n$9@Qsh#cxqayiLk39mgEcd z3n{sOMUTaArzRku@RYn{#^M4oX?0GuHn}xd6@x*(|C3rt)XL{kAHoia+Kd3%6w9HcA z|2Ji?WY>ug>5nTKg&~};-7`j#8}sBdAPlahyg!1guu$F~Aq?RhzT=)toVGdQ2rB); z@%cGl61^$JK`6G7^8b8x7Ke|TZ{zdi@1azicu(`5frzgt__m$X0iSmS6*>Ty%}RR> zp2+^GtR=Uy{o7+_+yGm+!_Ib=0Px6~N#wQ& zUZ6I047I=3_TQj~9?(tuYu*E$;!}`@C?|-}zgO3F^lPmz2EW#WZI8tIwKk1@mfL)N z7r)khw?zB3v{C&x=;1)O`E|eOoPP{+XYbz(Uo>NC8Zq!}fo+K5`3P84j? zZU4@b$($9`c4TmyEPghT`HTS+Fr9&OdQW8t%a+0H3N2*2!_^Mfwj~H7!yjuK6JqnYp$6;b(WcvduYhj%@b7!r|5v)nFDx!3>gaLA zepK+y=8a}tbcX;{<~^bmS|!Co;!6Q9KAqT)RrM}k6uOf)T;r_ZJ8|a3at`n&_i68Y z80ia%GK461Sh4qXo3QLkY)z9+>}^Ee1MFen>luW#Ky6xTE?a|*?nXKeBC!;)442$M zKYx$NJ& z1nGO1yh~z;wXUJNZdGRu=OlZR=X#03XA~h~?on;=cs3>Qc`zU>i7r7>W{DXRdg&32+SqPmav7$+qHk(Kp!Ks$#tYy;`b4m%$DTh;;7t4xml7w(>+IjgE|?OFZ`+8svV;?SPhltO4EBj~)4#9G zvcwiX_lD5AZBd7b`K#+X^EsbN+l)bMR@$CXX)d; z!Mzr~9;*Ksd?Msuf3;5c9^t!;6i&=(XZq7nA{Uog!m<%O<(M5(R)fpFLlUO#hz4M8bg6?z75LjdS4fQ1 zP@L$)q-~qT$XsZZ>@C8Q{ZP(Bs8A{f`51bR!ROO6D=7}Eq)yc#%()iI<{DjDM_hW) zbz(1jSwn%EV0XzoNY+uJloq=KF8k543Zgf-vW~j!J6wXa!zCY;vi6XMa|{k@kezbp zWrS5O1+}o7^s96bwbJIzUE?--Ye9TI zoRXgtWcxdA1f8mfwQMbBJ<}D(Y)N($hKCVl@VG&cHZgus9!jVd^nKv^Xg)9=#l zkrayro7f;cL2pBrrBRU8D9Np63+%>Q)zp4OP8FprKp3$=BU`F@jMQ#y@1l7)#SF;5 zsJIeeN=0R9F;OZlM6R4ol*&SqbuN4rok*#q+%mgBP39zdT5*Azz!j(tUXpK_4Vb+h zY#%8H6%vIonfV8*U(*RM@lm@cs}Vq>_cMP{BjHccS?cc*@44Q>vSXkoNDQUShP{AV ziM*5U>6qiX?h95V!8AkL&*_+qjlF;znCvixcykB-if+Uu7?Yl23kyI-7M8x@TDJX; z=>A0h9l{gua$tQs`{;Sq9U}$*TW}~+{&od5F%wr_k;j98@%&aY(vu27^z962n?GNt z`+}Zd&@C$^%H$HF+*3-Fl;2#D$3uUU#5=E`(gW1W@THpaIm!!=(dq8fo6cg%%_H-Ro>Le)PP1I`^)b#gxYk*lWsY+6QNJyu&Xe%9LW{ zzSe-Y+4#WRvJ7IM;#jyZS|c#)-rnsUeL%yD0Uzmk6CbIT^*=p`__2EtKXxx-NN7|} z8a0bAi>*As06fbfI%Y5m{|F2F#{ymez?u3F2)<`gEjki4Abi8XTO}siW7_=*tn?i| zQdeM~eQZRjMlezd{tn-hS47W>cL#{~^d-WRFW?OSYRqsutJCIKU%z(%YBtT9PT6sA zzjP`w(k5l+@dS&W1#9BCY}R3$DA6;liJUTT3ZK2^X*+?^fqRMFY%tb_wAANz0Qw__v9sI&xW#ihT8I1Bnbd0 zP;*q4#CWanb6uzO&p`SQWAqo1{=<>}S0nv1k^b2@Xa*jNy-43or2j#Vc<`!V`|1LyS~blaN)RU2^Re^;3T3xY6)luhHi*X$%yD^_w&$y{{r=AY<+8?eranpU0)?# zU!`#*3?tPvS|jD=MPeb#D@Yr29fNZwf;I8R>lmDKAyEn)RKA|#AHReeRyoH*Pl6hE zDnU>u@<#soUGXfGJlieL67R2(#5sCbTLb|y_`N7Fu>IrB9B}o7Kbw;{*H92 zUgre0r(R&a9}1acz*uMUHm6ts1)fvs`7b&T9HzwD#uk=HN^vOzA7$&3!kMNux@OsE6&w+v8k>;6OB*P%#^o#6G3^~i20A}G5>LWv=^^Ol*&RIQHmWz zA=E6;UTk7F*-CKnA!rKmJ{s`>7*Yey?oI#d3vPh-`+^%F7``gv1~|QEospD|!=MMu z7xXxZGO2_pWu=mmxC(|yT;4Zw5U(Nfcaq$oZQNtJ0J@A4j)OBfn8-6rytxaD@dQpO z1^HPT&{hp*-IwA1zkZi)G>e}_Iod$npI%6mM~Wede>eKizW9dSt3lI#r&fR!TnYB~ zgk>7*c}J}u8?nDn1nGSupCDNXw0sU)%+C^M6Z>wDmC|&^wHu-bgbGp;&`uxGbz>so z>*=y;5PPwb<#&D?nTPfseA&>2+lVsVMwA5(qC7&N#LRz!ou(T zpD={;1uIfa@*a-bbM5}ak&PkBoeoNDNx6?m>Tk|P{NFC`SzcJidM36?@@Lv_cCn-L zCpNy@AFLQ?j`>8?3qnt@`oj+xOO{}>@$;}`;i2=e+>4AQ9p_=m63UXPL~dpM zf3AtJrS|Z*(QBSwC@J?@!o7&z=#oE{?4K{ZUQ)6oWr0PqpAx)vC`r>eN&X^V{q@^< z)n_iB-=44jIwQYkP8t{9UgJXqG6XQI-+~BbwXFA|P`@0Z$*?QDvKm$DCg?QXEVpT! zkvE?^53X8gJT>EmMBe6-kI|a~#o*$t8yQ4Vt0bRf`pLk-Abz#ogPGg^lEL8bGW&OJ z#?RjvY})ZP9Vn57AzbLOQy0V^c9{KHYFK|32in&*w6B@zx*E+sW(B+D<=D4ni#U^K zt@vj_6APbsH)~?CT)c;8rq^tQON9;&C|gR2nmD1goYU@fGgMxV74{_UD(AF(_p5r& z4zj&b*L59|R&$OMWea>KKPSkJ3Lud392Zi6mRp$WE!T?AD z4R-pktdYc9B)M7Z`;D&C3-lI*AvLsl98%fBhBPz{wA3hj9>n?7ps~3T*@cp-KzYDX zp!~+>@}5Z$mcM2It`ga>O`WXq^=#IYQr^PM6`a^)q73f)zYd^I5n;eS~MgBlZ(zNpxy-u<&rACYD}Z4)+rMgVr>QVXX^w^hx=B zc(^7N+%!Z|82}%f{d8M_a;Kw!$`)m=SXf|xr!0ja@>l2&Nb3%y{d(MswMd8~NNeDK zc@387Bz{@@2xp8T$%iF*o0c={4P8=i#u*{V9HseMq&49gjgKI0*^$B_>5+VwF1G`( zCqmR@mn6^HX_4ePJFSvBXs0*#Od(vrlAO9ToJ!=AlKiPl-bMAY0hiKq^)=o7$-W() zWV54SW%x??&t-34n3yNGhXu$vezJw*IM#eoxwAO5@GQIez}utDv=ODuLA9A`L!0rQ zGvOuPBPv4e4&fNS#GYYMjmwQbJ8I(NLLEm`j0?7pH)>vp(a{Csr(fy1K^&O8#8?-h zXNnCDfUT1lK+WnH`#98ah7Q4awm{y=7A1#>e2U21Sy{Jlhv0h^yWd7}sKLMzL-Z#^ zU2b5^+M`<%(VsJopXDv+%Bf|bukva{NcJI|awpe=yp!_FJ@uS+!?;&PgY!Gd4tzR_u~nLccwy>sr!ftjw_SQj8zAX=5&>G-%UqV1LrC zxirSka6_v+xk|jkQR5K@IcuEaV7F72#4Dq)`JX--ZH5T-&^e__yh5m>j|g>6aj=vA z^~wkm9{8tDcbq@}`n&*1^o7=@T^ICkAU;m#{_hb;Iyx?Z<2l$lGJWMP`wqeTJ;!l* zLfxQ#E_;jM{TKUfbpJ^;qm!b)*&=v1aU3_PW>9}->MD}xfB{x<9Cxca$VHUV`z6J> z-y$i}ek)PO?|0c-%I8f}2hEtOi2J81bN5@ODpmWfl00|6MUt!bTfMo>x1!7x_lGT# z{JCc7w?U77K}-3Fsj_pwWvVRgw@y*V@Au}eV9!jENAC|OYM1qkZago^ty+F6)Z!uk z)2sJJ_809s{QoNa`@qx-Hu8s%5oHC3rXH@n7_2JF0}hsdf7iJmfsgbfcCGx{NkZMA zBubssNkUz6f7?FnJ#SJ0Y-dojV2T=w!ONz7EA}O<)t&;3)wMg=;R;#2YG<$Qmy3lYP z)EZ9It`X>*rDlsH7d2bGxi1=@j&7zLvR%7ch~4lYk@soS`-7%Rf1KR^f}5%}{_lmh zlAYfly?HTgnaGT_hT+1fm>$82mg)E%Tsv}t$rLs7R+llo!1-5pw9Ka(E6=+_ehpQO$a zpJ&SXlgxi|5d9~6(SNcxO4&8-cA^v(=N!m6PSo80y4lHx(^%4mB)5R!@*R=SN%U^_ zFuQIxy_A_c<*+e-rhjQ%l&+p9)LCna#9OoxiR|WJZ<}r<%H>3P#6oYzWh~3zDV9q1 zps-|D0>`n&?hyKIj}HCrC*F?usw<#9-Yt36rz-^?DXb?`(<97zB3 zE-2vy-{V+jUrAL4W{2(5#=Wx+@e2$R6qXRBxRfX<+8GB=>}mVXICxKQ&}za%sWoqT z2mCdx`Mm}XRO6?d9ljk5AG0#D%GIcW0**pni8r@yGV=SK5RzR`s--2fkZc2D`OcwR zK<`S$L-jDGs}{%&AJ#Ya`|ha`XG4rm9GD3@;!J$6>t zCD~=6wyT0%yLjtC*1~=k;v`Zn?si zudjsLF;z}&4qprQ$w!8jsr3U&z8~(7OjX5nIm5A_LFiyQNJCe zA0GxQO5yR#`VRO;fBZ)1d*Jvq|3pwVm%@LE%O+A)^E)D+1Tc&Dv=@K*HYj)Od`z(r zb@b&15I0dCwMt47v7acgxAyG<; zi9#Gisk9mOtNtCr(lyD9eb=I>ht{-p0_D%@lOE5c>XQ`}1GVV~be;8zD-s=s)Cx`H zIj;I-WrYC9Z`z1|>3WFL1**^80d3&FbUpki^eWPX1I&SkZW0fj5N?;aieA-^^7eV{gb9P# z7Lg4ud&{C>;5;m~5c|>c!9v~WBz4i-j%xk#`JZ~XWjJa^Cx!P&a+^C4ehHnA-}TuL zJ9l|GHYO>Ae%7T#DJCZWQ9{eLz%1J3``N0i(QyDie9lNm*t*zK+ zY+l;FaZVmW=#Zc1v9M#q_I@uQ+aC{S(}&ka&CN`JFi&MI2JV@=%cU%E6exMN0%bZO zUOi6m|Jm@hL(>aN4GSObvhktyy#*zUtC*6Mxz3ukFZV{X3j2H5L$L9wLAl7R(B_B! zKlFChZhpa_4_|SwITB0b9HQ%bcm|R8x&xt);WA+@lC_7sd8;uis`3zfo1o68#HL*K z_;z<7^q?O5Nc0vI0_iWOgQ|)5k9G2tx(3C<$>91pO5{^uW3Moy6SK{JHA*c`dyykf z@Q;B%O)VtGWvu+Nm>@lgd_-ISQS4Oc-$SFIEmEOXQdlpNTYIrh4KV)@9;O>4&zK@hJ1tY?Sv##$)a0Gs+-13jZm=`7 z_MEP}=sohj)(}Uv;`c* zvtHG;xa`e{M(N+ND3#8WE)SA;a}I?1f_9txXWK-cC^tQ4gM043;Wyk{d8cs!Y4y|C zbq5DdO&(C7x_C)Vy+XoMT43KPJTZueSR`_UGSxzq36e6|3Oneh;zQnAkk#tao6T(6 zW*6V#lHZlG+6wGpVcG5UL48L-)+a9eyDmX`w?O`+AnOZP!|90yL&FmPsbt^oDUCQ= zp`)hJGRD~46?jC0L_Q7qeSMi+G_s^L6cTH(PYp4qOqp&kYJbd|{W6~2MOK%ZoJ3R? zPwejtOBlG!R7*kDheTO4Tgp02^zB4mG@B@k3eDdNiL$8J{H-{AiSeESc^^`TDD$i= zK5cI(yOm_Mfi}V-b6IdyikjM+*jqh==!#nn_G=Ajt5P=TW*UyXGqmlr z&hmc~=skT(yDI^^w}!Mp0yDL164)c4X@V%A);QIJ)Z92$67HP`SW%F>6ba2u6zEfwL9J7jqE?H`-r`Bf*%3~a+4{yAd5^rby zI?&hBankFNW$1`8^O#$EV0qBDPL%h)noAdLPLh*z&IOJ zAWtdr=H6%r6U-&gEDiT@sgIUwPeC36Rnl1+!%EO^LIch*|M*JSY!=qg@C9_(Y09h? z%QR(9i*=fk+`O<3Op|9F%9tk4Ih1*;I{pw*A5Zt@*4ZH2dzvgAN)Nq$ zR@b$PbG3SCExoGLTX{qEH1I{dPoLIxt)1VXYXv+4yGHuQ8h@e8x{hc4Nw4N9r!t|d zEokd{ZAglv82u9sg1Y6TapSdw)}PdY$zR|%(EC-pi{GHTAWaval!MweIO0Z>2}WE0 z3?q3D^-LqlktsjKR-hC*3Y20{euO7j0tf5wJ4-S(p%o~I4DWrU$M2CpJ;G_XPBQEw zpDA{-F|eayRD!*~(VU`;QxdX>ALrPBG&-kCybzR$Y zrdAIfhkItZc{npM_;3V`LL27xvKC@dR}9BRW%^?Gd^%9{H54Cv4SkqjZ{V8_dsWwt z58E8khn49TqT~=|ft4B!#l+qyEZM|G3y>9NXCtOe?5=8#ZZMbCLewd`ne~8_&T1igi=jv;l345-+Gbw)d<*s$Z1r4%rdGCv$<2}| zHVMuCK?mRcje4z~6V&FOt2N9be!pQBoj7)Z`koVUUFy5k#QQ=Exqvo~ysDG!4$E*L zaLSAQ|G*L1Le!K=Yd3I2PPs1Z;JvxxO`u{BIq|BngAey5YVH+b2k#DO<4)F6?JhO6 zkkby|!p0iF#(KD51&($6Z!p%|hv-;)M;l|+A9C>FWTNJ-JLKTCqa83(i?)!{{(4Ky ztZo}*%<5$}k{?ET!W?O#F_MRl^fxwA^_m6T=0V_f(!QU8Fnc*W!qZrFrkeKb(Rxm( zA3X(nxD$1}Ow{oUBsKBvHJdnz-%hthO&q&s0Y~JM+Kjtj)rI;Z@oKkhW#!ZA6rNSu zcux+hddZus-)Kyy?me8&EAKgYEuBs0=+_H5ZP#SBuynSt#4QGicE1P8|lWRN4d=pGGZ^A&WN3zvm;z+5PQ@|Z*ow^ zSmP0glZMX{BsJw<+-9yoN$ulOs`^+!O=u%(qSoh8PJ7|GSD|Kocug#|vx)cQgH`|V z=Kg+^ljj03p=s~pgeJf1;I+RWuhpaa0qoyXtA~C#)58gY`U`t(|B3>|ol)Tbvf@Sp zJtq7?Pk*7F)29EKVHC5j7TU00uNo(D{vJGu;q{U_S4=Okj}R*wU9uIl(z?*ZjqVOW$Ge8F;)MEb273FS&xhVVkEm(CSQ?Aop4A1t{pM&S_I*6Q zEj%Iyvfb$a8;jfi5`SLY_HRzqB5wQtP^tD~aoYhrFucaVYj+2?q&dv*U$w{#+ z-lW;$VmQ13IDB)@!^Zda?P5BL>%#-{Yk()b#6>6==YZ0n&^6^?- z%QI${0W(_;Gh5o7{F1t#u!HgsF%dPZXv&!F&R$aea<}c zVw-W~{~VdZt1yMX_Z)x3Hw*sPF;SDK+{qusEhayYsvq8Rdu?s-}ED z@M$ho%W+(uH`p1?)Pyp9i;Kp0YZjLMjX|0wOo@dwrSH%8wO5Rbf;A=Hj-m5QyI`3D zjHyJ_l!1SEh9i6%%qM)kI{@&deU0heKJaNSoZbbtbpG$&fF1{o-ko4dAN{TtVM>pD zSF3B`?`jdI^uF(E^?-KQxpfB5t$)u@s9!|cVhga{c-s&zb)BQ(-E;n;nDhA%U(t1|F|>xh~X&Sw4cjyLe0WOo4C_9f&5!-<{S&Cw^^0qw41 z1|Lm7R;z2v&l-Hh{2y%ozcsjNj($<|FN&GJgU!E!o{1}Ps#g*;C|K7WH}nYWI+eamHeV(Tf%R9s2Jd_6!ubov z`zOV`|N6-LFQ+p0xt?KZ-#t>RYZh|??!blK|0DFHM>^?$r%lE^vGYIC|GHVfCuaS# zg?g*od+M=@#7(R-VIxvwEKzS72TU-!m*e=hxQYQpx#`fy4xT8v;g21BPJ1AnkaIjo zms>Hs*_lB&ZPj6V|DTHCkHx^Nm1cj4qR#j?#7gY9S}O)%v(Q;$w)XU2*6BXVqrvb% z2285Vv@pv-nPef#6sxvgU8i@~`%bHGiPkZ~O6UFgT`c~OL8bW&%iSOJ5TaO#TqI@) zR)kePY#(F(bD_y`^!(F}`CklXEBaqNZ2pL# zlx)slyKjdfPUqvK9k9DHoCdGSe^EPY%xoNNtigZR5XC~|WYL(Mg=!DIh+Pt`!hZ*& znj1dZfozlsFWLkzs=W~Zck})+G4H>s^ZSXnO0;s=D-_>7Aokt=gm-WJiR-JA#6-7U z5_@6h6Tais6F<}XoH6gu?tXoqr0Oa$krP&!daF5+t79i}e)(ER-%sfKiK(BhLj9~5 zG!lSvqH~aXSuw z|4}MtR}7?sCD_+>B1{B8kPL(zhxYV~x_&Wrz(wM06H>b5KZTUW;>-Epn?&2S)gapEpyRRL7HpSK z8d~0wh?d9b_f;4C?HKxfjNDw>9r239QlQ-G2<3=DIabVj{<>1_ayO&gMS^jsn_%2O z4tQIe{+&ss7n_hu0m%QPyj99*lxCcSWOfp|moMXEV+P7vvJmH=llO0K+j zEJm)p37q`KuJhJc%@Gf>S~ zuz6lq9K#8|j;OG%FHTa1N%9=A(AY;P{w<`}{S2tFE^-QWbH&@8LVcC^OG@lwOj8># z64@hKobq9(e9k5BcgZ{D-A?&4t>_U}HdxIu?1&{CU`J3R%TcpM^m7b5VkxGM82MTO zoK`jF>6Hjp_92~BsR;*ZGvOc|bfz}S6Jse)jHf)2OL<}fou)%#Fk7)b^|dia*PSPw zSgUL}PbP6_CZ4mk<~e%|&l%(wKYZc-asQ|Cb>Q7G@>M!w9)iCFFIv8Oxz6#G82J#u zbb?}5|LzZZrs0G$jR|K%zW~ZX*8&H1+fyK#VZ6W9qrKcK4tL!m=3jcdYx(#sxSm2c z+PC)_r}~%O*oU3G3b3M=xM+_8!1^fJlpCzZg3{^PzBJ(W@0fQz1GrE;V!BZ06w`>k zrR*MJZzwAwSq(&PF?&HY5dLWRS_avv6q(;{D7zZI_+IoE+W_&enaI1NFfsamS*vS( z=s&(MYITMm{4I(U8(ZpRW2w2Y)Na>T@ffVlkYB&i%FweE$n+JC%#Ecn;Q_!n0L z|Fe8br7}Gy7`6~Si2n7Ch55w(UHQY3nsC=tMQXH6RT3H{dvkeFzEGFI5&O~diISS^ znyM7FSf(n;Et0*pJOi2v3q!bkTZ88f;n^q^+^G3zLwuEkwYpIsey|oG`Uw1KFOiSB z1KPNQwYoMh9P3@oLw<4xF3!KWr%U}yjC}hvh8izKsNoI}`*(tu)yE9FOHvZ{ONzAL zA}K{Ip&&q)e=kuJTtrE3B#NieA}O;Ptwi>iX$PYly}4^H#fpIB{ozDy`vJO8snH_I zMU7T(?$S%Kf-0dgY$5Uq?dp$f^)860IiDJ2(XRfqR@d%3)Kz3^FK_B9E;~>KLgMw; zjqA(FaiN3@_J6;4{(L|5qxqBV&+ab$xw_R)3GC1FUG@jAuZAxYBqiYrqEuZ0S;20i z3_kv&@e8L^j9@`hosz8FJADf5zv5#wYt?uh?sKIaSN{tk} z*)wAAk0AzCF74)i??$r%{oP^e?}C*R`Xx~P-Ab=NdJlsAoq?}6wWq#cBLh1wR)6oR zHJSd$!ifLT${FvqGVKm0kZpoOTZw&l`87h_peu>Jt$ct`m)zGZ2sB}JiQJ}LcK{g; z<>$ZywYv7puW;Ul-T5DdrH}CE)$giId}PW$6L^lhm>J{!uv_r*5Rs`%xRKb~1g{3j z7O6QksaHlXuTAhaaUAEYN$87iO^=w(&hPW*m#+(mI@%>EgN{kcoMRSAnS0DC$#bZD zox9)a%_aSiDF;FQ>3*#S(iz|tv&3v--&a0DlBHu*+8(2$9`oj=8qXvg3nyyzd!jQg zfYAH2#(gFa*Y7hA_shm#+qAz#e*A;+g*HvuSF3B=zU+qI`)%mL@9qH9mzp~#_$v$> zer|OCtixUOb81i*QiFO%jU*OPgZg%AQ2!FpZ6ruS2S6L6u~;!G>5`ZU0b|4;R}!1j zCIX_u2&$`JYdQe7JH-rUOXlta=~5-8H++`b@Og5dmOguAkC+Nz=jtpmU9%n9q!T4& zLE1!~C}|JT|Lo14l=5FF$xD6;T|0R4=_n~hiy`!)7MjqI&8`tO~uj~3=f zzEOKI&9p*qbZ@7{N>ycsg(xZOQ|Uqm|0Q)IA0YPT^8QM)w{s8AH6PXX(7#Vf3BdDd zi`nxH^ZE+)36rAxf8w)U?Gv**7d7G2S;MoSq@-P$I+2%@!9wap-eqrmd=634UVtz~ z%9@WIyp+{S>VU6;Ce9^Q2gQ$t?$3Meu z9>T(?Z|{7AwT#X=?%E#IbzRqrj=rTcb6TcnUfxI4#MzAjP8)dH8#?-y(&is<@I+3l zJmBEHx&2bi{Hr?-VE)zA0}fuxYOB>F^>O}o;fV|$fFq!mNnkin-fdPU91!6h+z$PS za;JsTtc2~M2kH(d5V=(=`ul(2A2EPGq)z@3VF*{?Zx{T~UeoZE6q>%0Vxpu~?FTkl z2>(GJ=;rb{L>=uQ>Y!uZ+~i~`2UAg2Bp*XjakC|SDNz%LGz6gML!p-DdlgZ+RRVaA z*+%`Dy+wF31Xxy`oGwc~sMXy8PeOq*!y?J8l6*iryy`VQp!Hc_tA`TsIMV&s*#2k4 z!~Ue*vL9eYlwW6ufo_?%HJ zrKa6?;wdfcu)5d{NK_m(Xa6wx41Iy(MKPBRPZ0*u|`hY_b_yD7yQjU zgNk$z#YpW3Unv`$`GU7Q#YzLct{M;4kDeyxz&oLPpPKf{adXb^-ui;YzKC93D_{_(P``$ada>)356Zi>f8c;ldTUMe zwR@6$2RyxUcH|rgXCth)#1>X)E=*0F+sb-FS87Q=tka3yKt+|4$e+s4Gi@?u-vDFZ zl~CIG6IZNV(wpPV35}x@okXyf1Se*&gE_a>_l>zd{JlB1Niet0)4GW6lK*)5;x5D` zkWxy|-%57=K4Rxj!}E6#&!164*MTl)h{beuHT!q4mQ-Xr1N||Wyw!kcRMWKg>Y#?r zUqs)eTxKM)3)WjKlpL+-3~t7wW23Zc#iMhvj^BffS{f9NM?^6z0UzrW>RTmc@O#Ph zJ{|sc@L`l2tLlBfjA3FGgto`mte~mU_>FPL+o2I7DFfP`TP8Vxw_@-Nw z)D`CI;7xLSUc;eOKu0afliMSgyz*icJ5@+6$_|hmiRRC>|~JhAbp%atl#i7QqS; z$KvqyO7c?k9dvl}rZ0@X>1VK;z6fs&RyTvUhH+vTc%Zh}r|SXju7rQ;u{^Qd;0Zfi z)48sMr@4P7u#&Bup!U#|H*}%i=;pctZc3r97OqNq`ut3E_}E>EC3upF!x``{vqsdx557rn?UeifSw-dV=0oeE zm1!!2tf0+ni`PaA3c8_IqEw0LAuS4Wn%N&=zB~No07`_FScmQh+&_Dh;J<-mXVW{Kx{UBm`AVwSd{5_7mmYKKt}ssB zpo<8tXuoo?dz4V3O{tMYiOSjnDr=`AxP*x?#zM&$*}bS(^4A>4$xS&sa#VeFSX)id zFAfEY7pHj9LW_HFEl!bQ#ob+l7I!O92vV%LQ!F@bX^VRyxVr|3+`Qj+?;rPhPWEgz z$;s}VnMr2$H#0Y?>7Cc-ie7dk-xWNbNH=De?WZ2BDA$aS}}arGtMd7Ij3^0b`Kv9~mlepgTO5wz{1t?Lm9tvCVGxoRImaOGz?s zFdk>=m3w3+ht`D&8BH0}(<8lqAsr;v=G0Dj;fsTgUrtv#fx%aSZAz-1KpyiD{Tm)k zvlAX8fu`@mTY`0m-@;O$xQ{s%;|~XUjaDBN=c13F7dbN+?qgVh;E*A5ez~4`Dp7n8&mrT1#SxcU2ZW@vtY zT78h!%F02Vcthq=dbm1>jTuMFTuvD+ZrsYY; z_Kk;Ze4#FaN^W@X(!Ht|XPx-Dv3#}FhjJWsQCw@A0UGFA!Bo!Y^_c~Cwm&}i>LXZ6 zqz&V{G0u?3u1FUzr051>aTDQz`c>FMG>*eNxBlyErzOEd-Kr*OfV?WIYrA{bqi-kq z#~IA{{C!vC_)-}pTOEQuWvH_AbWLo;2NI7}jYIurw^-4ZfV3 z{x{MOFCR9wlNk+J0Wg|}P4S(${R~D_GC4#4t+;*3%jnA>`>IJ44)WdC$myL|l6*5e zpBfJF8V;!&4nxdliMuMdyDEvy$lLeY929(srQkgl27vc?j%Ao|bJa@r=aP43hTa8J`c`cyUbdgxe})5glzhBulp(V%qs6JOdSYz7tg*# zMBaWiIM={E39C}A9(%J|!ItEU5Gmfis!n~j*Nu6J<65Mcy{(c^J>M1V|E}G zBlyQ1Vt;*LIvwi4KIfyTX5wj&F`{w+TvNoh?=`P=aYogj8&t-V?MK*br$vE5G}Fgq zx@gc1YGg;+vtF^swRhV+%fEL)cSDEI=FCjJf-yXnobycw4JTG;o97WzTsP^9lVD+0+BHnhij_RfnwOq|(lLO5)!rroy_+M>@F;{v)=U<+p#cBfVQ=KOP2h61qk^F4F!IgY&U z-5vGLFCS!P$n=Ffv2c)eD0j3g)-igLGORloK?oyS6&OP+KtYGp4{$)6t^WeyYDkA z(_bvpazWjhS3>CHVlG6Qr#?%nw|Pt16YH;}g6MMmue4r2Wcf)9`%zOG5hIF#Ziz>E zi5Ks!2&U;0LRT1=?s8*Ua3~eiaE(dJd-- z%Eg+R?!S?LT?}#`*G7_V1N;$}<&WfRKK%&AqMj5E5qL0HE9181{2!dH2qAl+f&pb= zaonNdrPSQIhJA_lM?4`?k8%_UjLj}nNiP#0CW!@^!NUB;fNpl3bGXnuT6NZ*+HYyR zKt{C&k@C2#0arMrQREVp1l(`wgZ?0(OG2fsC4-90)CkX80y!4jhkovHeJg6Mp6G|0N1GDjTpzv z_4fE#1P@X7ZwO&h1imP41_3%-dHRpo!}Wg;7c&#Actx?4<>q7=+rtV8ADo5)oNJvA z5pGsRzZk=#y?32h&V|)d<7=kGJ{455{_2`axt#0z1hre=($`;L_)7*eHHLYd*>x3{ zjs>$d<b!X#Q+n_6ngr!6F8f;@yu9^bubk^G;m$UI^F7%liA_(@5Q}y#`b03scPu zHt<=K|Rt0?<*yo zJzU4U?NI?I0TV1*Pr1>fp$rauWA?oEBBsA1krhebS+>SfP11y={w>j;Se6!rOWW%j z*6+4o^Bq*UOmt1@OI6thqK;lcu{w+`jMShpRkf?D;mDtANnwhSE7Q&J(7g+z8Y^Gwv%kVK1X<(&?Anhrg8OA)5-@ET$KRG*w|2OD@toNWikN#>FBjwYed^ClFGpt+K>(ObbJlvpm-ow&nf)H(th8@jLw3 zKB2s(Mu=OFVZKNMG*2Zp9c>Dv{`z4EF2O7U0NuXGsU3M25CIJ^F#d-qX)0q5eWq)6 zNYa|#{JFT|Fn~@g{(Q5~s-5ofvHRw}YFPYV3!7Hij<&J zN+CuQcYC7Ip#~2fB{!%IyC?OdjjGhu|55|^$%^q+tr@aO@Q`(iD{*ktIerB)11C4d z{tCYE{i8#DD;DQen4Z+GdF8XhYN9(-86El%al}3Sz#Fng95j^p$^isN4SMa`prDkt zsyH7vSkIB%l%a~$7`LTaQVFupHuII6QnHG|?lgY!PNS=R1UP#KdC%=I#~=6V$9$oqVofd*_BW@hhYHj-X4JcTXPA)HmH7PZRLg6I zk`LB`^1|xN8z>rp_ITU{idA{R>Pt64jaTbuqZ}Ry_jni17jHg&8(7_@&>wnn0*t^F#S*o$9gS+bNRUoXSP;0sNVj8ulSoelB8B>0n+~0q9{Y&{h20UoOTVJLt!!>k$tPjbzFgdY>xjD>p;9bAyN0vBJI@vQ9rl} z-|ywyKWa`vTu{=I)prLoFBKdOkY*D%lY$$wP<#F(P<=J9gZ3xHJwK8g6}7O%O!()e z+?N3&$CyJq;06|w4rL02>=vOdhs#SMo?QdsG4!>n4dgB)FNz@6ZR+dsr3IP?$^W95 z;ho7k2*5O*Q=6ClVzK^jJjW{Sq;#x$v6{wh?J(I&@Tihh#L=?!jD%wBkifZeVuz zeM`#o2fmL+NL^STH6pTZ&!52N$ipOKFcM%6m^|X=K77h!SXsrCvDg-81vGavVPNz?>4*w#d^g~Wkq?8E$!lyhn|LQ$ z>8bb1WS@BIs8>7Qz-neg-t?!5Diid)_1{dnF7ApvR~?EXiWs`zUIspMap2O}S{4ZQgc(r;r30bbSP=mVaL zHT}RC!!6R_muXY_KfpX09*6hsnmsg|ZqN&3N=b&a=2^4kBCUa?8cdriESoCc;P{{` zUSHMc|0Jq7r*EI4qL68q=9a`oC1q7!tXiy?Rd16u6-Jy0$DPd9%yD%wSH3LIoG84h z`r~5P5mcY8GwjvjBvQFn@wT-YAWRl^TI^E&(+9BMJRpu2)0l0_oF8-MCwy$9@DtK@ z*w%0?F2^a6gRWPr`aAdcJI=tuNmtePj<2lhBPh~Cb0>O-44UaK+gwLyuZW6s-2y)l zc6q4w<(RhD-wSvvY5XbJO=nj5nG>~hl(f^r@_i=5j8aC#>&Gt@vN*gB^D&HQ)xY@C z%QwA*Re72(3}$g$Ul+64@5A#QB!HFwC?BOK&DdLO_yPcZxqCXN4@M=@J#y?7H{5H1 z&)+}ZzqEG|k5WNWOFlxjr;+Gs2rsEehQJ%~FUO=(E3JoSk{6D7pGQet%9EHEw!^b8 zNH^dAQqfai*z$*Ac5d7KOEvP8T-fxl8$XR`uS*%};XulfS zIc1%7Jg3fGs@84h_{ZWLTC&~{Xb-IglAR4^y`j^Vf2P;@IZY4E{#qA*z?d7nfdDi2 zA3rhMlS-!ve2IIpKMnfB`eHxh({&fcen#r`kAWcLhw3Ll(RnB`@AEydCg^oza(^yJ zG_$%)Oj0tj)u^}%D7|~K-+gQYh?za>PI_I7ng2v#b0+xXpF_s?NoF6PE?xq@TGnqg znC3JNI|`fo`CTXSs-K4Js8HrKHUwBs!c{82!_2L?r^kF{O2R^{&#Z^v*OX5ZB=LJM zh-Cjkyl_8HY!bLF1s)2bmF7+TVgz_YAhn=E73iv{Ct0SdS*F_eQVlMV*-fd|hpuKG z_jR3mS9rR==h|V)#;A#I$-pjbPuQ)^P{5fMkFmz7M1U=9yD>1;=9e~C7FJI0CS%Dr z`drvpD1L>JU^je(f@d0dVp!)|0EsqsDzT1TA*Rc}pq@O5v%djhPlw}`!KV^qT*i-5 z`VQnJe_(XJFf8rQS(+_gmyDz;hS7IcGZbl02>`<5UO4ly48}?@+9r;_Qfo}U`u*&7f;pN#^DDag@;VbQ%`a5_ z%0I!spEm^F+slOd8N5j0rbIa$mhmF)n)*3<~+8)LRnr;D0)nW;tGLGc{in zu3tlzWbPfEw63mYcwwPVE2HiCv-Qyge{L>({U50t3E2PVGr0Uiy1bWqCSc|jK);s! zfz=9+sv8}#@+19JvT+Wzt@fl}-@t&hAyyBRr8Anwe0nYJGN#=ku?a5dD@6h9=lP`Z z0oA5NkmEyUgDb!%;HK%GWrF;WEE*vSWPd%B$y8uVL}OOl9Scwr>)fKYzI3fDz0Jx++0^V{~8w2##T z6sk*Ac~gkko2uVnp=$d{XYakp-n%a0s*F)ZTj_|@@$Tn*k*RAusa>|$-v_ssIT;cu zZS(-=2jC9nDLuQ~&v!JPh=FQFeDOHFiWGIs*}+j;XXX0xl_cpaA~WygbT>din}_^V z%TP^$jbf3oj#UwAVlcAc+pR-FQp1bq{KHu$RQTrTeL2T|JlU1>r*2cn+dH= z#@xI7MGj;a*=QA6O&HkxGSeVu-=-CJ>$G126CC0U0>Yc*yFtyT|=t=mPTl&|fhJxnr#GY1PiY8kX7J)A(9dKmKB! zJC{jWXhmnpWlYe$lBbTbLGh{3nooW2C9-Mj%}jGh?&lg4oaXHnAA7Wz_Yqht=EMQo zfcSbe>OjZs@7K#7m5BMj_tij}KL3CYg8%?}(a!rNuKOjbB6bl}0wVe|8IzR9%n$Izhr$sV5x zch2MOzbQuy^K(8hlAfhNNO&TFCF>ma&mh`m*rdbc-Q17L05rN~9r*Rn>oKZvfXPBg zXw%d8+b%?7(OMm{^yMK3@9BI6AW5?F^w&^#Ro9dT{kZshl{7b_qhx;`LTC2fe11@h zQ)lM6OXFvfdFR+&ju6RDe}P?3;XEi9=9Qkm0XT=WdCjnY{lXw%&G3<}sA^UHid?xf zhh2N_C>xqS%un9)F4|@VRpQ9Qm zmRcT;u+h%mo(DQ};|8*$XkM`3HwF!&cVGAYc|Y7;HK>%%LhmZ^PZ*yfbQr(hX@3Ri znF=xh+k`6tGx=0wUpfJL?`P7E(!O#li_$ed%wp_Hade?-c`>BDXLGkTSN|Xf9)Lr! zbv^LWBK7#C*Qt%BL7Yyh>bTn3g;(4tz}}lLXzC@sh2K7!i|#)mkHX2A7+WO&U}XL| z11S7Hf$y5*khRrLzO#R)MP$l~ zaLW=G7(=68)bC>rhZ&1}mq_6F?&(z9S%9tUoY81p4IXlvV{;f$>GjON{7s<3Z}}Kd z>Yl_o)@oa^dHK1{*H5a4UU1u_MbBUAx|uL(zbl2Di|XGM=@`rQTS}Tq>x@h4q~vj9 zTdDsYNNfHPc;ZC&-wBH~e!t6Egt~JID5l=fCAHa0 z)93g#P9p539Qd{h?lEyJk)e-hni&l7iQV|KMC!AyjwSnas*c-e_vlQz^I3REyCObxi+zOKKuy|#nG9;35%o=G%rS@DZ&$+Z8#K%=Higos4Ac%B7 zSJ(5Tq{XDW9e6O(P109yd-3>e=VSWGOZk*Ycyg#o#iTDvHrv1GbbGcc!suSe*y+aQ zZu;Ea6s@zKwzD3qvmU3jo&vx>I7x7Mtq1G&d-`{mCkre`Mm)c^tALYh^hC|*cNPk+zCmsfj(;FY{!Dlv)5O0)G#h-1pt*XRwDgtmL>#3L z?%A3R2HYT^S7w`K8)_a0b;%;h#}KU zccSz-{U{tPHm&DVMs>&$`B-a&1ZW#Q^}vPK0(-BsGUBA>=Hx=S?c0lVY>5BOwj->T z^R?jSh5|^XcWKRBhW6=Pf+e3u==j}3wGHAvq%iHd7Pz+zJ2bR$^I{{8kzRJGp+X9ua{$! zu}NiexD+X5FK!KHYCq?SvRifU^anRs5C5LBP01m>OY~ObX-T>-yAPE17j`J~F0ilU zDq5#zE~&%$+8A~Be&DChuM@kYsZ*uXC(ezDhp@X3As`<5DFsnUw&ryIWvU_9&eNFkDdIKwp8djeB>|!K^G5Fb_Y)mwu3D*Q}9?DxR^XkLP z)rZ$1??P}u2W8r!_gxPo3dj{Em=DPfc!a~fO8cZksyX~+?e#Y}KB$XrCC^LaxzbVS z?>7e4%4=Vo2sp@uZI=ERZwbBU2_)l>^bY2=BAcY88=1e z(2$Ev$VD_{qa4B#6ZKN`q9?+L6M+YLBrbsf(!-HxkIV@1c(*RO!1Q3I|SgkmM2MvgWd^NBQt+Ik~ z7_q{f2Ot>Wg5kzWD6uPS1Tm%^5-5ATc$F5u&{!V$@fgAgqm1zgV^}!%GXpPL!PULs z>gYi7a6>LjuwEi^U<^ewm{1G^?SdT-DK?OV2a13ieTI#1PNE@0Jdx-yj2Q6q4d4LW z2USQXm>l8K4l&2=FsxOWrjoZ|j_93ZYqd;DD@begNZN z17GYTxqkz({{pc$ke|enFG3MKoCu|^aF2n<&Hu*&Bar{g0V>c6G%(tx2PTx!6P~v5 zXgaok48&Uie!NJ44^}b5{-6OcHwDqc`G-U?Lnn@LU|K}Tm$B!@iBK>O6#VJGcKdO6 z;IUqG)8X>AC$a%T8N-OP4H~)yJU>RVr83IHG@RqS-+;CMl{~V0ht>Z2maqghT=TosEN>r zW7i=EHumpv!GZs~#1}-Wh_>FDG}vJv-XbFuNS=yRp+-8#fd0GrdEQVIL~TeL2TBpc z`24~{Dsme&ebX^uR2mWs#d~?~pKe!^k2`4=&UMYeDyX}RI97RhlvYP^e4!PLMl2jB z8B8_q@#)eO;eJKTh?JHHACK-rTEPN5VF6aKptMZ{kPszn4$@=yNE-@Z3;^fq-XgkQoj3xL+ZYi&A|wy`)v zX`6dyI1>K`$uom<sp6Ac!#$uV59#K97KRD8em(hY=5wXCTxmi2iW3PVT z%PMH=C3-md5R!DGQ5mX+26ChU4X2e}IN<>WHvpKIlW4GemQcZg&R*Lq#yDWwP{6;W zo9Iix*d-wHl2INiA7SY+1R37+sJbx4!2y5)(9!$<$jX1K0B#GxRRrgPQN7er%qYwM zk>USOLQ!f(9F|XpQiuH5P;5M)sRwifu`x@6u#W&mUeKT+6`mC{vPU43_8xSHCW-MO zx)D!Q8~P;SLIdYYQ2YPB`h4f&{C@=bgue-hOn$nbYywJm0i{t31g{L=H^yzHUDPun z*X17W`F?oriM<<<{8SomdABxF_;?h1Q6O5<5z+mZZ4Wy!U$qqr*>PV-(0{YVstfLzs63&RU0 zKuM;gm@9=?SX#XGGzcy_>=iY?Wj?j_k7-2w>>mTo2LRW3%K;wWjI)>)c9b%h64(cK zpQ*Pl=y?38U96;_o6~{DZ-PIE1=U8JG~TBn6(z#CBWLPdVP=p0YD-ovuLijmY(Kmz zq4(x~{=n>J!1I?i2f7YgD(O4gyvE~AC%aNuQR8Sd*L@D1m>SR2I-Gn{v5(Uv14xpo zC%sV<*sFN$k1%+Ib$cLwzlB~q(~EJ))v4LPC|`N~qP!r)FnQ)zV)7wVl4e5|NWM$i_+KWUyDw+wgIIgmyB}#*PiK2TekzB?GKf*bo}; zV6CWOq>}mn3n{y z-XPD+;MYKruyROZiO0MGPFS2RYJuxB0eMd$DFimN2W$ukD zG;MadNGuh$ezcqvRF2f!@kzaT)m1NtoQCC>$<<2htv+GM$4M*&B#l;7Gu!7lkA3{f zT->f9%v-g_^u+t2+QLU^NcdVn-adVAeC)mk1_OuUdm>?()x~4$h3xTqs@Aq7#y3CU zj>;nsnKVKDH?fx8k(T(QlbuqA5p@fW&B5{5x|EDyfP7yFqXlf;EEWX_XE!9^_37hklf%;}ZT(sw*LhdiQS5`OVY=wgTQ}4G z_{0Krc>UY;z2z~_z4Qbsuei_TsC7z&Nev_0Ehy*PpPotMd8(@G_waJ@SkaI8rhmT! zM_TGh8RkK8?_M%PrgeC&{V&&);h}=yz@L>eS4pC;B}2l!ew7}FtA}6afVWLX$&-){Z*gZ>l<9%pZ#`r=tn5d;@{(!nkLwVjGuO7!R8F$g?T5UfqG z=?u#XxNVS`?E!`{egU&s1J^Zz8teXUf27Y=m?OP&XvQL+b5OSfm}$*HpNfZhAGdEs zw9Ue+A#GtBMX>aR{)lVci70OKB%X~>+j-)b8~@r=8K+=Atb3q@Yh0S34E9aHb$%-c z%m&UXQ5$!jK*CNrQGI?1Bz=o`Z=FKY@~@C-@-D<<3+z!p({60j7HSOM0uBT=evt%% z(ttK2P$SbZaC-G+N;4etlzxb1xPSfZiw_L6!6;Tha)|sP3TIqIa3IoTF76dKz&dqm zKkoeihV<7W>#j?Gn7>l;gGs_rok?puG)a&hG^DE zPV+u$#VKWYhx%f8SO69<8>5l0s`pXwCW|=$i3R_P(nKQbjM`E8&3lCqV+t?B&OsMb zAWj%6PlGS`9ZPDM68UIB_G&_T1*ckFLSf;#*i^Zb3ajpiw#MtGfvy>{nU(8rzHU2Z zpbl{Oi?`vFj+U{_BbPSQcGiEAA!OszWf|5fVgCKrNVk3g8~-#K`uVdxL9uV}T&<1! z0Ht>u*q;Yl#~#|CUvA0UE&D$mCW|Yk1U)QpV7b98Ef&LQ@&E}m^-JbV%=FsXMHg~C zf}QH3eAapG4XU>0if{bH`lO|1c+K%1migv$2=84eRmn>?dyEAE+?GFc_?QP(tZUFk z60q{vbXa+3xfYg6UNyDNa_v5oDhy-(N9@J@Ts=u7T+jk~YJ#1W%|PYi&CX@{dz}b8 ztDU!#w2XTx$Eo(p{#+jKM+#+Y4=DxDFAK#vY6lqWRJXMDliQzTiCXw)wC6d-_5usU zp5g_g94fOp+M#NR*) znn_a4_F4x0EVJ!_gbUWR&nO2!?1+sPINH3%Pj2VjaVgCK$M8(|%nf-(-;HH5rEtL` zD@IPvI^`C-X!D}TsHcaoXLlV*LD_!h=hQXF!Kldol4B2*W(`d8!#AFrbk0JWWm(ja z{daSp%dX$>`!k!*WBhp_?*5h~kMM6k3Gy$Zk{d0+*5e++wcDAKcSe#2l8=@Tcmug1 zZ?^`_^F^8oS6z11@Ao8?g$6~hBY2cgx_M@m=`U9|dJYE|Q#@zE*vHqzLFV_133gSJ z2cE>PQpxyP5xSDres`Epsecm?Xz$sA8(b|dp4Xoq^)t}w0B@UT_s<~N(<sll2TNGZiwZqQj^Ey7$`g3#9R;O4j1t_u>{_ih5j!0`BCcgWAM*B1^)Qp zymOwqtD?9(J$iLm#~BOV1msnJgTb^YO~J<{y4F!=Im2z*wQm!-uMLTRcFa2@&1*Ky z@O5c5KMMI~yHOYgP}9>BvMWA|lB^H!kg((YAwyO-y5O$AFrf zv9!*r4+wi^sLY!7OPRkXo9ttro_yUa`5?vinKebbxHY31v;OS)1UrS2x1J3KoIKyj zA`5uk`-fXoJvx&RRm(Y9^2SVE-ij}-n3oUz4mDA%4#`MfS&m|QL_C)dInulobk%BJ zk>Q*O2(<5TrfQjgXPRp~tE%3!F*rXbYv|)@kXH^vd;VtTD1ny6Lr=eyMzhtv?A3Gc zBFA!ypRB)ROqOd-6XjRrZxeJdp9$QUd`DlOh%;*565cfqyJmZ~j$M&3Ekn(QM{PRf zO^I(n@oTnhn-#p+v1f4TG5gbn+~?a(Ct6B#)PhV}y*Wk)m0+-`j-I9f&pQ`U%T%7i zfurxgI5%Du7zLHgDUVO#krOY1FM#)tX{9{p3EMwXlaK$P*8z#@kOe+<$ofz?#OfHh z{(Zr+xdGW?hiUdCee?Ay+}$spRh1tiSGhzr}7IXOdy5VCELc>-KRXSQBy& zt3i~PB3e;!n_NLS$H)zcWENPG`9rI5Y^RT(b*D;ztN7&RigI<6z)skc`pfIJmKIUT zKCZ8tpyw68;>jXp^406nFi!Kr{evoC@tPzJ%nfX3Kk_P_ z*1nzMvTewmd6$Pd0g5U8G|5*7gs?Qw(T*na{*wFra*mpc9F3~lhx1jSwM4xmCn*gO)1OgOdP_J7`^sI}u_Jq`?W&FyNI0Z^p=)$;gtCmPhi z_N6wo-E*(ubHr7-e$``=WsHCyR8=e&xld7xdE+UpHIQ=?eRS2GZT_|2rP9T0)=Zdh zp`IHC!&sZkYQnfzb-s?6%6j zdpwL6*E04tznrhj*i)P+@Rh=>orzO+4rM(yAthM%40{4F1BoU$m|^0zV6XTmt)0@N zO7saM)EfNbu9H6`{=ni+Q(TGHv~S{!uy@0*=u*(U|IEOv!vDkKuoG6;zJUrsX{vHi z5Bjawv1rRoGVW&g^83esAJu&J&Fqw0O&{owY#NP^4bSJy`}J#-jQ+lN5bBxd=zjiO zC}hRh>wRRyvF}F3Ug4M4L#q&KfLR=48>79^;R*zWRy4JkgRD3h-7*l)B0{|YIlBqF z>Vm)aiLxhisR0D9e^!g^>kMY#wl|C%;Wz%-0`p2oC+oUHRp-B3e5;XF84k|zlvBkFJ@eW_TFg?Fy($O^XV@BwiIBcMir-BQQPqTx%m*A_`^;ru z$8V?a6LHopRm?+@p_&Af(JeX##&#Hu@U;1U7cwItFSUnnky!l7QiHg&x_o$i|C`9Z zrgZSsNu_K$kn_oG$HP(t3=UV!?yPWOYeZK?as%HVBxp9QfcG)zMfeY;scu!c8Q-#NuZM1t=%#Xm$WYeAoGz@=@_l*hg0kr$U6|xaJ~}iF zt5d$zN`0yJht|{EUU9~Ns#B7(%c~4Tkae)Cl(4t zwxd&vGJ3XK4u?!Hz^`x8%Ow+XWhdo#gXktTvwYvl66BjGcD0_ug`R4QW-6wjtdbvD zooB+!)?En{^S$K$a@4wG+*4frGhHSn!wF?s-mYuGHe(rnBy4*Fw>;potb5a#x0Nfx+w)$Yme`zfdiBdJWqvlY<$C&bq-9FtI+p4xu$@L%dK{@hwz!Wz$? zB}A2ke*M$mt4zG7J`*;s_eHKMJ1fT@tB3ZXyKFSaBT{>uOU>9@r|(cm*F*f&@W`BF z#q72SC5yw;I@YeK&e|mxHLY_L=e+Y4XYW=U`omOM=G_b0fR>-4W7KcMKMD#aoY%^ItoUnqx=((a>wbHhcfR0fQnOgxQ>Wa>z+xO=bXu~` z*uMFfyHAAnNMAez=saNsKBE-8#5mf9*Fd z%j9s&%j99t=<)AUp^A<7pdYSHeY!a zqc_DCI>#bX@dvkx;&LxO2;;?W=N&#Ub2BJG3J;J6zO|^B4eRy_Am5|P#p{h&&Wu-f zPsi~GQX};2y35wLBwNsFL5YwL@D|&xS$!plD@m0;ZGu2WR`rDIX3mDlLce6qaiYF@ zDGy#B*t;!SwU5HD?;^V4sXLD9kD&ta(PGgG_}HyNVGiz6N+pYVN=2=Q^}XG+DI>a) zH=cn{C?y_ls%2XCwRU&n#)o4(J#sf`^R<~XDt@Y%GD!7{Ajom|`S0p7SMSAUU<)=t zF7LK~n=2JQx>)Na^8Wj7$eKh%IS75oXb8DU9ZK4D9a>bQ1b)Mq8+`|Fv4$|$=5K`S zeQ1J8g*Dclkc{IqJWLrj=7IoI?R|r&^zaVy!%h^VMs^>1`L+c#&1E%yooGJ~^)~=G zf0UN~o&j7>IC28b8oj`&>NoT)uRjU&6413l==qkXRF|K-a8k7~;9eHRvKgZb@=Ko4 z5J|8o=FFOwRtAZ!w;6CD?Yy`;PUZcY%+5yCnzA+YKA3u~L*rMQ5?j{E;JkmhD*4_a zND^KKjQaD1z)DM?O6Zxru<&u9dEEgL$NEO}h|kjD+rdP{bMnPKLv!C@LiAC8{|<1C zn4w{ZL)Bs|x!t(`WcrCyPs<2kPM4>SZ`G0`7oHmM@~W!1rj9x2!LohPQ(40dByxnJ7q9X;!j&k;2j9 zwwG}=WYhxURDt-&FV<@ZH#Kp~q^7()Yz}>$IkK*N^C|Ukpb9ke6G!XAaTQs`7eRjH zP;kFYF8X^(5fsswjt*u!4e<-?k#T%Hem}Z8?VDy6ZkF;3bt|f(Tc`8ogqI|o@BIeB zuLC0>AgeR9y7Mnq(3d=!-_I|}6u44u-r;`H^Zpp=YbBe@S0-}D`R#p$4qb@Q(vnRt z`;3zOWnjaIMmDoe>f$(MQhUa_lW+YdazEY@k$uUEOF51|e(XR=e4DGP8`U+f3Tz>y zrvVX)Rm=@wIGM@jj?La{mz?JvJn?_Jx6A~YFYJ65)u^l4zil17eBYK_t-l|j)tN9a zi1W~2{6OIMsanR0+~rOnZc#v7qiC|vd{)yVuQWlJe3euIQ*gLQ`O=P6K#imALm`�wRmA1C&n!o6+wsq3C9<&Nz!T)W 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

7w*j_lQyGlY>qp z(Z6RKVlvUVFONoyo^8fF_-VCeU3HISlN5#q0k%GVwgpbSM^3caRx|%HdTdxYIWXym zxsKYh4VD&T0C=uB|5y~7zFK5ap?@7X(FJ#Y60n#xE&!+!qz>GL9QS1#Ju7e-^DTD6 ztqt(tnFZe1Zod>6lLvMS7Hh2uuoc`e7N5H3Syzu zrF3o&IagPLWE>n_eWr$#Hd^LgKQ_{<+;fh5MbR!fsbo3~nKmf#;+Pl{Y4jiRx^p#BSrowerHK@`(elemm6TQy*H7%aXVpWx<@~bfrg99uuutm) zVDM2an0}JY>E-Xk7kItF*Es~eanLWVW&!gZ4Q43wFWw&)I);}J>1HQjyq@-;Dz$xE zh1p;pP{I!JK4bdJs@*c=btg>m_+BBbV>MUl58n!PzfVIixO59%bJ)*&j@#QH=q)IP z;$lZHb9auhIK4avg|j)wM<2yX60sbdbe?`>y|T%O17>Mw>2=HvU_|K`n4IH2W|5hN z@2-+QM~chI&i#pys|n8jiVRHYk>@9jJ-l~O{5M+uy=I5DYw+2igQMH!LQ?+An~#X9@TIoOH27<#Y9R%+`?vbcwG#6iA{Mii9)=M&Qh zdj1k}sVn{ar^Zcw8vVZ3&K3UC7Jyb-Sm&~AS9Y3s?CNQPNnNPCp1uDS#k-kL;kz@R zUt$U#X0AB`gmz%6r5zKyS6XhW8fW=s1zjBw?U``R&CH|685y`1gqpnNcc?tYbL^CI z%!k4Z(_zsXQHy3jC%~pc=^q+E7tax>1!D#n!6!}wP5)j`xP>j;ahdq~#qtsHzM)CH}pgdQQ&3TK~~$M5*l*|`iTcF>WNZ|eK$jIqs~mu zW{`0#6C3l7PV25ZRj~%kA>qpdr!z#!`tZ}AGn_53S2vjn@fh{@>(I22!*E199l{KC zgsWX4?mlBFcCox>8+kD49{PmJzToJYUaCjk@R9vpF#$0y$+P)bC)u}g!hM7ozXIE`OJf5Gs&Gge`mY^U9u zOB=*t;u3Q7Yzs3x>wI#vBeT;o|_C~jv8-eP0 zRT=1h%468!aY#`>pm5RNJO{0s>}U^qLRV_R#bLPKB16xa?P=@I=ovw3Jm?U`O}9dn zKbKidJ~)~sLV3{r@<-vt*d=12N9vDP<`;=j$U~ZSVs_D=j_(1w+PZv_)rvIb+ zpy^yl!t(ePKvXW(sQ`9AY5s7)1z7GqW3=T?IG8*NPXLF% zLenm_lAn~Mg@+$kOa_rUOErT>Jkg5iG6TQmgVvYINNO0O*+Lt7U9O-I2& z7WqANX;fv2Sfd$m>`a>D7XAJ@h`x4N}G|cx7A9j2=@N;(VzB( z3SjS>W6+a9D(h!j8*p^ff6Hf2U$xS$pG7c!-o3XFGF920s2~)c73mW8s>fPzfRiZJ zQ*3r{{0co@KCQEBOOY9lLpzs|@T6w1|f@t#7h> zoTjgAoZYb^6$eqOSDe5O4Bczk?t_r%j041OnE?O-^Wf{yKzcMKp_?3fcdM)}>?>Bz zg1y7s9EOw8mL{zLY8}|CA4L-ZY_oAEVDIKYY)W6Y#l|#LDu{pUs*phnD|1G-sa+b7;fMq zgY5s0pe@aZlzM*{_L2H&cjSOW=CeMc?Y23D?MYg%#}o$y#b~%UeVK0n8BC17g6BkR1!O{4&`F&KWm zR4?{0>i~XeDR%TMt|(XG;_aAO(V$)h-Nl_k=D%g|2O3*ORvC~D!5BW@sn6vlaFwKl zOkL1mS%4TLS*=(eTupWu)=htOxtG@V#j{;9$N_qVz%3S-Z{l}^U8L*gEHp>)i;VDWk891yFsFZ8y{|8bQ-s(ZN1OkFm`&#Gg+ z?iCs3v_OI*TaqY8$Iv2*pV1KsE{nz&2`bSoQL@`;aZpE=9*XBdJf*3`mTdMJN=C6z zNbvT8Wy*g9swAQh(yf!Gqds~7?ri`9K8TAnn#8jOL6Q57g znFrd};UMHEMdjd3>chw3r>|QRWm2nrPt-9FW_KA>?ZB4~KnszZ=BZaMTAOb1@yZ$M z@V*z(MS^_kF5feaIL|xc%@^&B8bDMTBvH4DP!Av%(NQhX=ad(-pfz?!t~VvTyxn{J`(~{*_hdSWP|GR46TC zBJCNg!yX4xYU4Y8d_we9>ZZHi)IywaXX6*it4*?Hct%~Z9aHfgIqowHrhPGnIJkJ& z)x4v!LdD-g`Z=VDNLqy@jB~G*a14$6mB%VIWB+$*S-5X8-(efNRIMZpx#NWAU8&q*#^mxCwZ`m`FSv8r_>>U1LpF93<{L_x- zc|~)y3H2{9=wG^>7^eZQ5foA;a>|LAH=8$+XFABgo3gvix>XXd_Bl(}e?j`It&?!? zpB2A*j?vxinQFfQWw&Ip4`PUQQnd1Y70xYcN>HAyypla=2jR3rbZ3i!1QCNEIsBvM z<&y9NKR=EjV(+Yv>{c_tD?WQDdtT#}bF`I8hF^w`r1!!&sHBC;>MYpVSD;Wp=Zbn) zTRj1PRI&%J|CWDh_PXU_*Y}<+l3L1SFt_dIp32R7gDT~lYE$@gHtn+iL^E!|6cwZ9 z!nnsG=FuuQC8~Y3JS+KL{CTztB8_!}_BZuxfodp)JE|gi5!+%{u?PO=xn{lz5J&6L zH@}61^66Hp!am3s*F(;4bt?xe1}8|}DQ7MctKZ;uPo(BI_3T|L=QLxR#eu(HDjdF? z0FwVIYbl;hI$>gVx-W5k6Fwt(^gn;j-~746sj2x{$9FBK zF$DEEOfy`ifR|?4KtJWRhU9b43)gq#KUvM|kp(eie+W-^@1DyW-t|ev#=kFiGA@9* z>KmM#$6=Tk%bEa7iAP@*N;I6h9&M*$NsQcKY2V-|<)YqCp-=3Owf2wlWBejxa*l6Y z_z`SV@V&6BnSPb;JGt*_uRk;z)p|5$>S>-|c!Ml^%b?15L6=}9{`*M^#ti=+8jxs1 z_*1l=^G)7RAa#hMp>O->(p+Ahfg&fqgFI-@o$P_|9ShlITybV-a^8BYr8$^$6f?MR z1%`NPtW@>a>8tY1+f(>*KybpswWqsJG<&8uxMhMK3P~^+bS1Qst(G1|#25w1X@6&* zbA!6QgY7c2{0@`}6KF&mynVdq$J*1NH>Tm{q0$q(^Lm=~&)+yR6|1}kY0%Hu9#`E< z*WY>LmK?kDCwkLEmMECv_rjU(1&8m?eq_4Y@3XEu1e+Mm-omigGw&x>iDEvr-REQo z1aCx{qn^{%ssV=_yk%Exc?l-hH|X|RwTgPuDvYU;=ivBSb)wAt&9%U0R-?+xd+S08 zaR`oM-X`MNZkZQHaS`cfsD42}=m%l$a=rTC7@{`Il zowH5675v8?{K-`<~7;>~q~-djYS;{p@imu~B6 z+s>wQYpzOrh2=lx<<%H3M0D#K-q_+lSexkkBdSX=5OQ3Ncd714rUFPGo{xHYr2^U+ z&)(haY3)7l^|S4v6!)YrCdKM}l}{DeK0!u&h3cYTJmL`x(@BOE$w$y=+@p_G9-fFx zv>AO+vnTerv)RV;s)jOI7LT{|y$Z0l!J_Y1d&hk8`*l#;A_L=yy(LH&2;{Ct(FIu7r=6gCKLyph}V%*SmWp zLGBa3Kb@kh+M_?wm<+T~S+Ky+D#kOz(|WhCm|h?{{k560ctbCbSU;NzH9JA$*(y{n z2DgfT^i?^b6O=hTop4Pnom6bl5}cqS((0I{EkBZxZdW&wPyeaXEI+%~n`F@->=K<# z&8^YkmUX!#vbY3JVE{JX%SA~Zs&cqphG?Y#fvLb^+f5Pm_TMg+!*B<2&3jSvCzGgy zH)R*Y;|+btGOm73y|3@N4$N6z#nKU$hTI(6|ceF)i2t2+dtqoUnegJ2LYf{@A3?vtk8R_31zO_HgGK%lYS+M};-h;h^tG}W-RfD7 zRWkiOr7K@{*gV`+RIFE;atuP5DD|o2*AR|NX*QKHSLA!*maH ziS>!Me7AHVznpaNCfdec3C~TDH|&rp9F|orwtkJH?k30>dXZRfVs~%-SmrXUkL(l( zOB_9jY)TTxT&jlu5|nz4i)XUpB>Nhc0P74$+&<*plCMCU@6H~Jt4NJ|&{w}niNeIQ z7k8mdo1~1a$4@c|-5WWb&uu3ZK5ULIUUn@?byp>P)J~~2v`ov`65eDplUj8uO+gm2 zB&LzY?^yL&NdGuDO7`WyGX^SWXaL&-uaK$%0<{lM$B- zF*j|V^sl|FWq17!+Yxl*vMLU00^1(gd|ult$&xxJTO(#4Ww<)_<6?eYENbjFvgz^l zb;0$ukqubZN=z#c!s0Ywm#omJzV$DM6332_xl1ge8Ss&sai0-k=@!zl6i;p@Rj(iV znA)yJ4=f;CUtSaO>b1Tel<&aG&QXfi5g-2RqgNOC{`=8xV;+0l^2(!zp-abl-o)cU z*__KebfEF;+?Ip5eoyecQf#)FbN|hNdELO7+-DQFUs@-{g8ENtmSP%g6mns+jz{ym`UBsFU$orJVQa*kfBVB3(r$*{TW=^|5 zBE(|SGK}l_bSO#l1LutOYrm@s>~w4lB}lD(u$UwOfjpvSuDLV{levoS&ia1g!6Y#gp91`BO&SsLyrdc1 zsgPW9kXL+PH+i<6Rkr`=&FyI0hTVW-Pvc>Yo3%JlUBBgUgnRcWT30>6Vlr7A^BFBM zpxs~PdM)wxb+|1nm-fU`&_^^xdCb7W5-j!OmEd1*l4BZ3n*aCC(Cm45c*w(&>32fw zN1^e^Gv1o0GqY0)S%wA;UpcsV`ueR+&&F(P2SG>zb>(SIhcSuwR+4yH9Z%~Eb__c& z2||m*{66YmKET{TJn>J5VHv=5(Aw_D9!7@dTkYOYy&*4~h-aaeH7)@D{|uBro{Fe8 zv*pY9NyPrJuin)U>1X7TY_;g#7=Y9r{j7J;nc{TJtP`deeqONqU4suU^e7lEWQ8-W zK0^H$3K1rW9i}6EUh#;fU3}D;{aX6S?x?CwI_t;Vl?jLBpFcH**N#&Yn#CYNO#jw_ zra0^(7N6;RwcyQ%gGYkKm-UPQis}DW3?}v8@?JCNnwr>kS@SA+3gOqgZpv|eD4z9c ztbxgEoNHeXDe?33fzv<%cMi!pv8=rp`i`D~cJeCM+Fyt~PowKC8v5|x?xjX0F{IGO zOUOqVM#l5wLKZq4Jv&r+MC5%3+kSD9N6E_4eftu_Xs2HWlggur;{EdV?}8@WKW>J# zxmGkL8tJggtcm26ugAQbPJ6n4%iZNQ{mNX0XkSb2rxE)LtBlU}#zZzD1C>~$84D`k z{J`Puc~bv^hWlH_i&;Br+Bv)#Yc#O;Auk%H-sti^F(yqzr1PW1Z=P~VdaHc8gZoj7 zg?o=qZVCm?N5MY7kb6Q1dkcJJy3ziYNNHlmnjBU+zU?-QLU1eL9uL1DK% z@f1(NLU8kOdWm8l4Za#NjgK~DBcZ3SyYv*w!!=C)a<*4*n8Y|W+7{EAsPt#Ov977D zjf>D&%@{k76d!)Gs^gQ}^kdR3bUm0dFzDRlq0VkJVzt864KV(f_4{R~*%8*-q^q5% zi#vrgmEVrPlP9Txv>+va zIOX#7$!D1L4#UOqHf>I!aavquUsU<_)ifn8u3z^Z7B4lK;DsS$Hv+A32g~@&0+iG` z`AU6~$jo&AQI z3h?eScJQ@#pArjxGmsY1*zF{#f<@oG7wvpJI?i6{c`$g*`S?b={MMPyu3U(I>^{wB zQ5+2`*(jO97nFD#M_`MPw6kt%-FfOj4@Xj zt&8Z;o@cwR7@A;l{zl=1w(>Ia->bB~E6e41K^_b~r`_!_y>Dp{Mz1*Sv>X>Dif=hL zuo2w$itZE}KTW>i(fl#KY|N9MmOKYPVNkJSJhwpU$L-gB>tt#kVlhZUqx;k;|Oy!@!Yc`y0O#l5DN_lwFtuDsj9Wd=t!tB!WMT$+|}p+WVKA@%-M4kfb7ipVQEP zCY?BypL!l{vYe^Gp*L~I>T$}_`^xRFnZIjJnZxzI5*2;Hx>KLo1KYS=6jC@L?37Qv zlo(^Y4oJRE9mC_s28h9)atOhwjh~F6@4oY|2Su(iXfIdsj;fB@BuG$LaRi1p-@d!k zRC_L_zQtSW#FyuIKvmWGQ!r71v-w9Hf7=?ya;@GvdCW}gU^D@gjE{Et$I{sL`}Zh8 z_#&qwQA*lk*X32iQ&SVsud^@Q+Oro5lI7q{mrVZ@y9*$PCYpp$%%*4j9fz1S{jTnw zt;SS8F5#YQmvqa!2%qhEx>FCIqnm9mlZ!E=L|5#W>!89I?w!Xy0B%)DOAk}?Un42_ zS@G?xkVpUJ*ZB5)%k;p)8V=FDwprOVsX_m}|9eP^7@sUbv%P+@W^~13JQ4Z}xB`f% z|EB8d>G5PAXNiR@1k%?FALvgRIGdyu!f5T!H+me} zJBqwDe)9&iQ*02~cN}Xi@|~2I5uhP!gES%(_!e@Q(p93AoOw>$knr^Y@R61YCHgB^|tM7-K zt2_QS9`^rn@f(8v)R1j!dbU&b6mVw%*H0xSO%2ss_1*g$Xw8=^z$Xk4K1yq9NeJA2 z=8?s9U&dNxV!`@-!6j>{x^=FHi9M^Gq4$TrDo$|RJiYC8v8TDW+_MFSnGaFaUkizi zhQ>RKycK(z@Ds%;AH#WWqK1Ba2K@3iYAnF5;9*KEnpIs3(@j?cu&aCdbnc2m_tTws z9&bwdgGM18S2M>heP~4&8?90X|GD$ds%X1^K90vH?y(kn+l6_7&y$Z^ zET@F+|Kke1@+bVq8#AG3_0|1B(M^ES7`X)`nmub)x(PwE3_Zv}38 z9;&nQ5{f$UUOF>@_9LNhs|wZC#oylL zf&nKrdP_F8_@BX&xBvtfD>#{-9eSw_$_sqFH1LLK2$Qna^14}V5rFBUn=h()=z^_? zww>d!_NdV8VLU#v#uD~4TdTJgzb65fizYRnMuUX5Fs}9AgC@)U7r%jK4ukl#b zDqd65*up7%urr&*{KkI$aSY}On|xe;(Uz7DV)nMbkeHBzQQv2c8#iB+T<(jbUow>B zJPw$Bm~s?wXwXys_rHM!*}Ee;grct!#$)e#l!hymI*PiS?$(`#E;H>(_Nfgn6o(v@ zYOAf1S}>n6g8!MMz)#bOwKU(r%ua8Yk$PA7#%X<4SSC3L99^@;+3QBZrt3x=&P3hd zW35dYki1a>DbHZ7U)1u4s8)+yml(H(x2osThj)k9r`m&2a&MP2wt0jK)+e>4=3m?x zHPd>*CzF>Z!EE`kFNUeeBpKS&7vymDquZUjdxrN1%vK_d$Pv=xt7%N}ZJHU))|KnO z8;3HpH_{~%7wytnM$W|8i`Tdw7CuYA)1ycb%8cQf!_a4nQ#tf}xMB@0aT6qSqj(#P zQQ8E{{;%m_R<=m6vGur(&9|p1!APSFkxLs$mu0VuQEf~+JJA1rE?2bC^V$awL!!yU zS)eRIRnr_apKaZy?c8;~NXO!?*o{^S>rn14(0I(K0Hfj(56vKpsDMj%4&Dc zRS*ZW?{J5!cQw@oVzmtC@prczRwVe&XS~gwwZ7>;VhBGw6Yc9d5bcp^PBT8#zSM$Y z=(iC+${8SyQ`1cj4nkxK$;h7ZxlIwUj&58bG{X)zS%)+-}fwbnx}J54(CGg zwFUXl-@Mc7@cSXDIhx-qq6@lsDbyA(cX@7AX(b2Q=1RP*HrG_nUgDtkfX_{+L8_rs zXOvM*EM}C|IJoC&>E9(lEsp+h`Ic9Yki%trbAFMxJI4Rj{(B+*`wvV<>+YW+(a+Zz zy-Fhi8J5R1xHctb30%3RH%8r0ixF}1VX{KZ%}MZX?gH7SpU7h>r0|g_AoOyyc)9k+ zzoTr^kXgZjj?Gt(}GbQcL{oF>)buGAdk zE1bu<^lv_vZL2mhi*tm}tQE1S0-$-mt+UrxpB=1<%c4h_Fn7+o32nw?hS*=}q{# z&$Z2d%_J|aa@5QNhpdG-7h_oEVVVXJmxk2gfFCWaIoy()6j;$wFaflf8a<&`h#Da# zr#;`5=__Xife{;Ofdp}5T@q|0h_|5ymiTTn(NfMB(#R}QouVEQUAQ{RW}Ty*!^det ziZ7ggp(INLijPFrq-M+%jZGM8bvDlF9uGvcFl8J|%eHgsu_Q+!=#B|LMW2jHI(&ssopJ@9gMX9ZnoIH@)Z@1-(u|7g0{&PujQ^D$C2Bg6ryx;Dw-ZoHbIl zhV}6V<8s$8@U60pXMfXYU-^ZGogVNGX`N43#gZ=qo@T6(_>2E!T8(t4t^`;5P1k~I zoGayN=;sf=Ag+Bky*ZkK4AJtk)1`Bru>QbKddL6Q`Cql~dGM1Lc^>YPnS)wtHPmp< z9V5Mf+rccoz#Hb=-J2}1>YnqeqEDN??X^*_(TNWf(lcmVb&LYZwQ0N$3#s6 z1M7@`U9@e4Y~Q_snWbYoplJwxnXwkiYvTSpwD=S|f2m8F)UTl=(ZnKFgnM_Immt;zA= z_LG07zmdsGl046w)h3Lw$rf0oGN_B6GRa9=V-?VT;n$(r#Vt#bRQ!daF6fQj-s`q= zbtSQP^nbkw@9dg>ikGGO)Y{kORI*-*atGbwxshSO8e0JvaQ>CZi8D%s8Uu|D<)`e6 zmJub_=D!UV5*}t6{P?dGU(6Gf?**rQF`LC+B}Oq?rqtpdCRdfKh)}OqLC5j#h91L* zLmCn5M+>xsgNn#*`8QJb_12pDICPnB7y9jM zK&`{4e~ZYyld@zXwg~{VM{tMuaR*^oaYbA)VhLK!cJqy z@WnDB)oWMQe)xT4j8wNNFQ3&~RC+ompMJdTkRM|332J8A~)TkWY1B+WloL>EdPznT)f0gf~< zldNt@Q5Gh0UQTL{`e#9(u6<>O`00Do%yI%!Sl##jTQYk{BUd9VA?90@4~G5TD^Md_ zs?I4@5#y_tozfG(w+$Ud2}_R~EjS;>-D!@=Mdz9w<_fvI`RVDM6RvfCS?BZTWs3xm z++F#X1#6V{PaTJ-d+rHec{?7 z^wGK$RM>H0>QO{k+8pfZTTo-`{Zl&&dxsWB|1>OG=hskrB;d^lGed3gUROB_tEZJp zAw#)w+VX!Ez21)hq=MbQ1phT?v4DM?$659#|6HxO6xv$6{oi)Ql1^TAcF}{OxRjTn z{T!Wwpqy`{evWT@%uVp8kc10j+OLtz#3lNN z5a8K$v(>jp+-C1Gz8lCpsdEtyHANY5-Axy2z^L6?dknhzN8lDlztu+x@4$7Rj?zTxhue z-H+_aEJMla%jdXufYd>8l#|6yAx&wDho;uXHxARF>F)ubXWPiAgRhbMGhZM{Nkc_R z_nKMm>HY>P(#~M+`<_0xsE0-dEeIYB{FtYil2Z4{^Qhqq%UEMDPMBT%qBCev{r-OtHrU0h-@0M(Yt*9 zen8OUhr6TH@Ap|nHt-=cxDsBAH|500N$48$ELTa<{0*t-3Js6`5fYN%C?OP!=d@i_ z^{vNmDlj|FXy&m_eqVnVH9lf(mf#w*l*I>-Wm)`J#?C)pKo_}4!Zcjg0JA_$zo=Q4Tzi#4 zGAl#E?*h<+vxe}`s$z~ioIm`IwVYkZ+R%P+2e!DM(VTZF`xn=V-1+ULoMXB3J4iWS zAR(nA5@uf{el{e=1_H@#rHD;xBoQKPQjN0du}SABkM0U8I~jtkS6~8MQ6@l@YqFB? zijHzL67;hW8Rb)p3uz3roinAx9Cx*8r6N{F6|o38+VBf*0VA$nP86{Sw<2cGQWUZI zporZlD`N9${=V2Ey0K7g%uKYgN3zKJ3#^Y##!vEP&JK_klu8KF?ap1GTkcA8DE+R* z{eIeY82Y^i`n{SH%pEzwa#4AjI5d#~c)rO;k5h#em~IXh)K#H)ED`%@yAWS~8T0^= znBcE!l?>UVkX7oOZGnvjA-+D%As(MV^1lwqki&%%!C3S}{%WS=F1p_!<>qji0=i8FJ0$F>5(7~ff(BJh? z1|zOpSSTqNJ+rJ4C`NeeuB#~SAYw;VEARsRClWY>tl#O#5ms}^8vo2}l@4LQA9rk9 ztSW@U{SurnaS8UDk$s+lvkx;OYm+WJiQdmN8Clx|4WKTkXc&e_@6NORop}57ciUb` z2RV?fHaimW^9&q6%xI1ODwD>q+$_hhbm@=FA7u!%&fxYi?YV2Wzuums0i0hNEjDEVv-4e=l&u&s5qURuVXWn z^K}P$z8>4pyJ1Kwqxzk%T>CzlT&tkNiB~w=jd6~ZB#B^iE;$dtswzd+`u2-M@tR6= zkX7|f?t=DGPF?PT4pL4nvhM0=v6f!^1eVcjO_JUEc)fRsl8p!%$ zGy(EIE;4229Va1?;NiVa$$zfS1t}J1?~q-72(v6&?f27`+)zf7Wk5H~JBDV^K(ptb zBe5A#@@+jV7LGthVsU9v9!z9WG?Qk=(s)_U6h(Y9Ju*Zp{?2*iOv8|%-<+WGv`7455*-4$We=aFsG2dhY!IZr3q5RHTi``=21lc`LLI0^!U`ir<06cX!`5_OhU+x{B;1Q#3k2l;3tESzp z9`OmDf!x8?PAuE(+WGQoko&poc7M9*^Jec)du93FpUxi?kF`2hE)y9NflKW)3s z|NZHKbIshJX5Q-e{`7KZ-}}=?rUl?1+}qs!DIa>h?@y0(lkZPAjxLZy!*>7or^Zl! z_owSk5lu>bk`Y8`x|WF0Nm?R8;eURuX}*?Bh+LBKK4(H6V~w|@X2dZXub3 zzPqp)uO;hnD}(i?fhP)-GtVTFZap2+tt;i_nKHGi6h?x+a?cz_EFV`u?*AyY48Cit zbv;ALdvfH5>S}h9`)byJ_-d+u)UdXr?MVA%o49;-hs%{$e|Q%zXxFzRMkrbkn>Rww zF!njdrA?>rJ2IPHaaGGOOPfBf3DL2(8nA)g|Lt>lJ)CE4k$Up%StZHX0&+o1-$b&P zQdpqYvi*|3GUV;4rCJws{74vhv^+D`4ETVgC$1__}%&TnSK zAHOLe_n*$++R1G2J$a^FRsQ;XRnGb~s-Km-_WVomeNe<{V48#6pS`;+gAs>3N5Lx| z`Rmuv{Pl0B^4Ax*^Ve^d^ViF*?2xA9ug`Voug_QIuV16eUtb{SukY3lDl!<6tT^~l z@!Z!1|Bt%24~wc=-^cfiGcX{yM+K#<#F`4r3_5iLUlI&;Q=8(LB}Y9)X^25Z3Q76K z+X%aH>sVHncJlP;962dPT58%0s3B-6S{X)l&`j5eCcdP+DEoJ<^{l=3+QWdO=UmtC z`u@WVGqd-4*1gwy*0a`n)_p6UfFRfxQ}4g_DSZF#K_tmz-#{ApiSY!)QKu_Z{dRoU z3LAd5sRfk#|50V#^>AnDSw~uU0~W@z_cHm zD>!8RS$)3YHjSrYxw;Qka=oq(wes0@n$}HBtw-!>#K$$=PkhP)$*sR0M~t|>S;c4W zPi2b79fk3Vcpa^Sk|nX)$2hmQ%R>H)!oY0PsoG*4bt2 zjO!Tvzh?~i9JU$p$(-gVK5_uL^}4adh)ch#_)KXiQ#{!L7@rF}pWC6~vwgUZkI8fu z`0RVqUwqCGX(DTHFzv11D>(Gkk19UjTeYo}<*FF#_yIaTQ?d;B%nLB$^T3mS;`0m` zu{e$YaT)Gd1rES2YgmX|2HY=CzYPm#5EWRO0 z!##~^MqX0X=Nn&qo-cNjAw}Vf2b*c6^|Fbf?$>gS^u=4cIsf--3Sh=@5N&vRor0aM zVA8eDQcU{pR2uU>+oWrq2_{C{Oj=IQATI~5P(}eH&BUDek(L7|gnANIf_qj2b%YrM zKpF^FH0riAs(H4Y(v*_b(iGyzV{|~fW&%`jY%*fXkJJC4_r7aQYh*$EeI2oJ%ThVQgFQ#5mOmc>-o*hDtj7Y z5mzw``&48dr5Ac{%HUh056{D<40|ofwXm6(*g;yZ{jWAxJJj;i*-N;sH_-7J|3-^I zbAvZ3ovqTl;f}{>5Ox_~K(yp+38W7$J6^%L(bfaL29<&sC&zU z{ji*bk9`H%`d~b<{2fmPhs<3VF1XYHP7UY`giVu4h)3!l%_$v*RGs}qznJUE} zWzwbiW7YRAHCSB*ie-!%KO7#cLF>nX{`JjSjQkxvQ%KpG(GvL0F$er6mi`8|RINYu zT*hq`Da^PSO(XkJTW64cVxv@wQk4+bJpbB6mt`mA-?k=Ct86-wJgrjXKdfqMV0QKH z4JQKudNdu58>{;l5Rgx@3DP8c(WvoLnf1}k$PX0k7Q61BGcDfza~@gB_TBR);tA>f zCW9oG5VvoBJS8&TMNX@c)6SpK)T59e1o`@#8eiZ9sTnnZI%Li#oo>Ce*b!yc<6+!C z)EGFPd7q-bm*Drf-AB{cSTaGfzVYuY4&C)E#KS3uco^S_xMi~*52u*5csSMU6%V&h z*5Y9(jKssZJT)GUH|z0mikZg4dY1rUqdv7j-cyT;ziLo!)~6Pg%+#WenOZceQ;QuJ36#H%04VXL==FVNif8Rb zg)+-{At_)GpQJlYVM#a+fkY0=0l_u(fK6~sJYW~3eQ57}W%LeJhY5QDxr3=qkgpHh z3h9|r9UA;C!2GH&n41}xTNr3lOxU8`EqfXtU)9a-K)p3EVlu0d9OXy0xxM@r-QmoTv2Q z#qv%|C&N#5N00^UTUF-Eu5U3ZaX@S%wFyPX1`0(=@0?(vNa@cz$q|sa_(;C^bygTw znh43&sr1mTs_1{{uNxSrd4D8iy+F@m^z-)eMb{AWK1)YJ9G4qLR(F8k2N&p(pkw?q zkUD?$VB?c!R_ZnC9ozY1I3hNXl-HjXSI9N%`u?Vhs8(n^xO4ieQ@iMoS@3fw_#^lp<*K(Sh zJ;nsO_u4nI)iGfyxAhjL`qO;hLuy9S4TSG_+vu0LbT?X=VNm-2GQ@|{|E6naacKW< z?~{Wpv4Z@di5=|9)P&tcA`rgdZ!|+;sv}K*}-WEs}M;qz>Qa#;YQt7UmsW)kX z{KaS{e=*WZ^B31ym<2}qTcIc~(!?*Ft{zL70z~Ds{}!|@-+14u+zdeu?|oketggqA zkWsKvr?VT+k9wAJsA4K?Zvqpd)%5#71;LzSFU6!@|FHBj-!n-J|hst%Q=hw|$il=hC^LI0L`c&tEFUDhnJAc&378FIEUk4^jKPT~9ngSEf?}$w16Pw(kRMRw2lxoJtoFtTUwN1U%<3ZX-Zc*|i z75z3aspwL_+#86B>24H!?*@gQFWr_T9TYUBNNKN7bZDSZ)Y?0zZ#r{+w?FSJp!}+L=IuVlNjz}BGp4VQqWyJ;s_Pz*v7?G8q3K}3O>2B2U z>;`R`Ru5ZRjli#24{W6{DG0Mrt^Y0RRKs>UM=>WR4iNb-t|s0y~l@T`iMl7EBesGFGiD= zt0oQiGO1{kZjzo(xXPGcCtGum$emf<*R=YwhEVIDDDCL<73J@a2Mu7oV^bdx*F67W z!S#?$bOj1=HM7%j6eGHVlVwX~x*LCzgqu#RP}OJ=O*Mjied(|aj%-hp_1S$8ZNKHu zgF|=p`#?ca{XS5zP4V5@l)~8b7_~{1!{Q&3Ep_;_L`c`rta`;-N^%8v)qz28`(uzB ztqlJ_L9d5{MbX__l+0K(nL!EvKNdC>HESGyCK$QV2x`u1zwimg*4V;3M=R*n=JL)0 zBk`PPWy@vx#W%zF`*+Cit)b&@B^`fN-D5SKw~2$GNNQOJu`u3d7(ICt7r`IFotY|^D22H1liRw(^n(iu~S@Y_t^$JOb zBx1`Ks_?8TcLABwpiPMo^Vb>YP^1Oo`BR9=$NcH=*XsN!qHFl*QmZy2^7>x3j+o|E zn+MKyQyW=yWUGxTU-j!!4eECndG^oQvs8VsM4(e8!AwgG`Sve%Xc=C7+*7|>%5A-! z&hfG}AHV%z9s`{XIV*kHT;t;rxVKY|!7%&fXK3!G%g)e3 zz15bm|8s-?n+p2x&D8%P>i^Wa1X-JR*5>}Tm@69f@i-i(Ixd@(;cn^&SsCJfl9h2X zs)$2nU+63A2SFQV)gJoitNy&-wLZ?=$GxNyN4g{^2Ad z=w6xoth(SsR1egFh)SR1peaeJA^{2AbsSroXtpKEBh5vlzQ2zoBqvE><|ZqO2>L)t zlK*0YI5Dn{UwWuRQAC|s$8(6P-m&nZCqm#{sk9G08q#gv?+?ei>A0T1UhF1M$ISxD_aqxW3z(ki> zQ1+^tB}K<JzMD{t&#SdwghtOk?scy@&h&)upWq@uTikH{cuFny|^L* zJ!nF9IIMR#ia1pI8JxBO29Osc$o2<16M!H0Ztb*^AV{+#1!-=tTN5m!!LiQVjMf$#MJm!b%gzB@f=0B%KonA4rn^5H9>8RCSCN2OR+R z=2waEX2`GvzBYMUZL<85CD~a!FXkaREI3)7U`dYqjxT%?-y^P#FMQC1eZp54MX4$2 z!p})nmqsTKI`yDDWOP%{WT`Etf%NZ_#HWiAIkb7mBFfj1gWwVPgaU9wkc1h9Y z8}+pWH+{aqlMiX;+pRPod>`68ejVxW@iaSu6e=f?^>s0>mS41&Nsz6ZdIP&E{s09F zB;nmmLQJ^2+G3kqooF-7C**3aYW{f(G!4$=BSoD3PH>I-ttrkVxb8XH6vw8Bvp*80 zkUBxxB^0$O3&yEv;BbIEzqnm|(MBuBCCefE@XS@7V1o7OukyVhr7hM zZL`*Up0yggqe!C>a-`A)=?i#Z#;qpVS-W6}x~wfqi)o-im&9pEpi&;ioNpS5!DBzu zQ%bfIZ1Bi!tX)#kHoGYOE=s?WaZ8kzlTJI9-}t00v2?m)e6s5{QC*aGo?kFml;@h@ z`M1uV!KhJ$kV(v5QR*P#5DjR`xOEEtv07P8lLEV4N>#7c2ntQ)H%@nq7wOVRlD>qN zP;D77q^U=e^q-gp&&y`Y=q^%jgR#X&a{G&}o3A|{XA)g^3^*Q#=X8qaXR?WM(Ui-N zjX8op85?ub14PCs-Ho=!Z&BcwZc#fC8iA#?rV)%3%P>Am6&k^AS61mU$o}qFI4L2} zMEDv5+toIrj`j;2tU#wiAQ2yFOu!l_U4bEL3OR7Jc5KWMoppbnLl_%#GTC{Aciu)* z#-B-+XIR9zL$fD|(sV+R@lvlWj;M+46{Vx1)QV~oaR<75!P6btYN^aaxNoOr1W_{i z0od-OR+L(}PC;k;UQ#s2PEJv&3dQprc}A6+k#xC7!}o_!M(XCaMD^&2Mt-U$x~NBt z)SS3xs&=Cvt&)2(2w%32>ODo*dz2p#`czDV$3}eIv!>)Y55M%6i;CiT5BGCryCAiw zmnTU-sAY)MDlu+5FF!@1;jntDPs|t3Gf^t|<|Jvq@MhA5Ho>_+cUF=-$t1+>oBgV88O!rui%)y%@eCI;w{HS z>Gw|VkW?~B`cA7HuGA?U^1FuACp%B_#s5d9`3p<}o^iA!6#(+O3pB2te1Tw<_gCcWeXsyaxZI4BpcGbfp~P1WK&|q$O0c zFJ6=q9YSKMh+XDHM=A3QEc0}8)C z5GXR~zYYD$IgQ^%wq~DL!fm}tJz~MqWvy@gr1L4U70|9%`#L4YekZs_9sZSs0Kfif z2m#n1CCOt=VqD|=eo4|-c;cMMZ=7egCFCon+#|_xzwxUobq)eT6p{ntv@LYupp3TP z3hHVI-}96|E-D6Y6ZMLi^G!G6W)hzy&oZeWk{OFA?Pl^@4)8K0{^r2pRKe{QX5vRY0x<}dioGpt(yY5v5Z6<=yt3Vqklu&Jn;HncNO!$u(|LMUc#U11eqlj?J zkHX;HLRI@{anQHP(r!EzBJ-XOxKP0t;y-5mr-!2J6j14axTAd0PP*5aC&DNoI#PtH zqn2b>SWE)HacYc>IF(;S$`@6YEY+YFzQR)+CHDcK8-z8XT6T&e$P=w3e_@=u15n0rUQAZ6j8BMa2( z+#Hhx?`+_UFW^pF{3(4vX|9LuZhHFg2|*5zd5xYvT+!v}!w-gcK7H8M15U-Ic^y4O z1;^pEV4hHPB40guI9iayg&tWXN8wN2=MI<7^*VQ$=tx7u4YwhwQW=8Uv~U2_erU0N z=rBX`7ll84!d!>VhXwxQ9_D`TPNxfR|GsmI+#4NTJ_EqNf$PlwU=&IBVr5V_pRuD} zL09fFC=0o$%fqRYagmA!B=WsSI)t5x4zjR6HfFyYO*su+XFTpYL)9Gv^j_XN1=feJ z!H;Y^sl9Cd#srx_Kq3HLgea?eeby>S7Z|buKXQc5e(PtB&@Ka*fZx-h1iuW7UmC_Q z&B%|08}FT=+CeSy6*)+5y|`o+hc4Uz9J9e780)NTO4am%q6|kEqx2(;Rzcd8?k49K zw}hxnv=TkAAB%ony9UP>#g%;VvJh2@)>+9HUlT%jWwrbwW##DC`I3z!_osj0=3DrZ zNesVxL0e1Coj33$H<|GJZ?meo+$n+_YW;L3N7uh2f>736it8vZa1+7aA=Cx{YiD4VLd_TV>4wqwRBg4NK0t$M@o>G65Oc$lJWk3 zIodHWcQUqra)xUEzk<8D`|m*LN%wd-7_0iO|GcPCB2d5)Z~480+XmT)Afn-Yf566(T92_B{dH)^i5(Aa;a4f$s$;+Y-r=QS0ob+}6R=(WYpQ_L?6) zF<5wVa{tM>lLR?5?Vq&vM{V8IeyB|+xP1^1xb+hA_)#o%yYHyGR&Nc#9geM$Ap&M?&n z{#o6)p>oWk+&n=J9n+Di_K!t@YUN#KVU)6vE#2#P`OhOWd6^3~G1p848KTU;&q}DD$R)e(TiIx( zZ6)39tF>ITa2&tMMCY$|(q`^%X4=e}7GnvdQqDB8BpG^t1bt>HR$7g-yxn}3w})PA zT*na)an{>Iyll}t1a=T>NSUErgcsiR&-ui=Wxo;czU7Z@!H9+~oR|Tod}ZmTbA(zr z?hJPD#5t{n`tIn@)OXVbV|~pDL@B=wt&2v=`t+sBo zl?VNkQ(kpF|BTPNhV1vzKIgza>VEgS$9muQsM+VEeLDX^&drDRRI9VBhl&~hh0zWD zWQacqKYU3Vi9bf6`|EP&3UcUIt(i>xF|LP>j1TXz*sOVv@?NASi(0*Eg0g(o1dosH zb;io{nX~zO;=i`FX#T6(d>Q{0tXr@aEGTaAvLHRnxBr^!RX)(=PXxO7FV1H|mrm3z zm~0bV=1+q;j{6cv+34DUk4RF6(V{#ije>E`=U(}pFImB{`0vU8{sb96mYtwa?gx`P zerz&6I0zESO`Pk=u1V;s52#Og*VIiHInEJ}fR==i&avhK(>dNcXY3rSd!0FzJ4cX1 z3oc}GfIrE;BMxnoIenC}(EIsw8v1vT0z$`K@P7VJclrGH81Zj={^1L}^E>F9_cl>T zc5t1>k4$#_xRy0YJ-}e-W3Pf`Cyskr_MlJ8(DXe%`sqV(k23Fj1b0z8GXFQ+h^)7u zowt+Y&DW~gQTQ?RJ*#vo5YDoZv`C$FR<^F*q~`n@O#bK_V@WJ$pIS=!8Mc)4ogBwi z$D2(?#Js1xvDKZYywj;p4B^j76N*mQ@!ZUY=VpY?dUSrfId?$18x061^GiXte&op{ zb4#00w8Kv6t$%iEhfwzKXTMf0g8$Mf$4)R>_f@&VZ=xJK!Rc<#T;;OsA1{pX=J%PZ zX0q{L+WC#yX0oQUSC9@$XVJ^!7A5mYMLu`CAKlU2Zg;G5IsM&LP``Lw zzgS#90&gm<-_t^oV$K;)+H{m4wV=Qt$p1eE{U{1@d1dPxO)|H20BzV&I{()$XxOnr z(T@1-ZhlixdR3JzU9wfj>otcjJJlRM?y}}?G-Z1?RZn+&1}J{4ubF)C56*LB@B;}G z-VT+0@Sij}h%m2ZizEq@|FUu`e%NULgCNA4&2SLXtusnLXCxqe7suAFsg4ZP66KqK zFuN-P!WlGI{K^RkKmVF6l7I1aTxSA8t&@@yYPi@4T#ZOv&nR@ZitV_#OgpY$1mPJL z32knLk7YE#_afIFzW-A3Eg>oB@}uUYxVqVY#`cUONDHzxhs6FmcOcq+E7@`~3Y`mJ1XcMt7~%F9CgNk_N*bdhGi_~{N4e!BNeUGdZL3+W1R zfvKw%;>C{6E5!9D%e&^M+uCO2r-S(=#0TNO{F(^`LYhmEP|!+ZgJ<>qk%CqnAS@WK zveDHb$wIu(yT5|>NrRyOBPu0`|p-rKaelE zi=AJ0EJ<%2z&krgr@QCmWXf2$r!N#ns!orz;Gzm>mhxXno>TzjO^)k#c@i+fL{<|4 z{B*5_c=lv}w}L|>mXs-;iU@`TgdF;nt%vgp3HQv81A%}ng2;+_Ub%zjXwkBFh5JcB zCPLXgq3o&usG$1Ha+%_Zj?mC?e%FT}F)dH$XRGSd35>4!*;K<~!u{oETi>5p_IwMm ztZj7#hi;Ztezw>8vrJ&ifdxgj?wCW+aigs_7~tV=H^Q?v%ujgk03%LZAV!Q@t??f& zE>k@A{urOppUjNZ`0I-1==l7j_f_E2JIr5vUg-z?hhW-|?^JNex>&_0w;#h_S4R0M zUntc153e`i^Kz6CA6H*L@d*VZzCKTkxc(iD|Ik&Yc$&ktp5|O`C;0rDtK(B(zY2U# z_wg5>S>eEc2&QfMdj*Gnds)Tjk#LSV&$k>1I%R8dE^R+^uQTA&akCMh%szhNb21G0 z5C0%WTzXsMKYY1N@zjN3e7-u?Hk>cH+icK(?6~f};lnil^UTqi0NI1QZ~s&5%l}mO z_S63eU}PW|>3+L{Lt7=>|HA;B%_b(Il&z2FfD4*5z<`nKCL>1Ud;5t|ZC`TR(sQKv zgR3eyHyVMqn=FX~W;D;LuZx zG=5P#n{TWUP+6X*__X&o;4}Im6S7_sZF&_VUj1ED{`Ed~NA0N`& z*FS=;X8aHFd;ISO<3E`8;~RMVFV@EYUYyF)zZ`g~W$T(}neji|fY06iy~h8Z{*M1( z#Mi&W`2U7B{ukl#KNRD0KK`+VI{)!A%=mA+n(;r_@9{qr#(ywv%jnb0GXYHN4W_;IS_Ox`Dp2vcCxo66qf?J;LAK7w(%a9Jz6N}5>tn>{fgpeR#d`w( z@d;wY&&xIb;{rVX_r&Ukzb~GLV7ZX=yn!6HZ$Crl??k}9rM1?taHh4HpBIm zX3C!o1HqI>vp97AS~#(Z?``CKq&$T63=d(W&O?Y)9zwO2p9Siik2-y3B}1QC$M6s~ zs`Q!Bz@UHXcp-2;;%WE03(J&rwFLkr6k&yFDD z^CeH+`Iv<~-#bM5d>^!2N&Fk&Z~O~31%gd(Y}3{SIQ|V{Me!(Gq-=eBCXIjXhCWag z>J|S6_#6KMk$tHL;@@Q?{#~H)>nHs6;QN~Y{Pp0>PW<{;7XMnWkYE2ag7|kCj(_JH z`SllT{MgL^O=1T1pCfn!Hh<~q75`eVj9)(sjQHHG#lQ14e*LrS2K=Dm(}TfB<=4Nm z_}6lU{QCQjLHz5+@$Woue*Fv#&T0VX))~709MH>v&vBbq{A;-~eti*)czdZ9|IXF; z^;e8s(4@DYqcc14>t9*?+v5uP^*=fa@$XU`|IYR1*H6>PZe?p=x{gnKhykC40bcR1 z`O5h9hkz0DmuT_tODey9OgBD!=~2J%L|8->jciFE#7u(^oL>%gp*&^?celRbKs43ZR>Q zZm0jRp#P`Q->s(qXVCxgJ*$fy6=uq>PZ|hUG-?;8@#~YKfM37Vtn=%yFzfvKWo9pa z{d}nCAHNoIs3H&e_48GY2YNOeFxL3HrE9w4*M|%J|U73@awa7r@PUV_q(_J{f?3T^Xvb9h*&=QDn9I4OxuPRzdjL}ke90*>x9xV&8$;8W}9_>{ZhIKlw#H!3jROU z46Ke5j;&DyIdtt;nWSf@(JdIFW#xjR&`|hI3H?nr{Y@UgT)ob%^XubcG>)_LWt~Cx ziH%YvN|i#~X~M6+m+lX-{Q8wm4Y)+`2HQcdwB_+a4xJ4E9;6h?oB(@ID!u8Eiz9V< zQ(INJO0nNX7d;xT=KuQO*Ec>H%34M#%_C?YVVV%PZ~kcQn5G<7ik&|hzFZ^s2=eti z7R}^HR#Gc!1wNmg4V`Yjv)JLb>a&CuRz_utdB54J^Od`;)E&~-)iA8xbAJ|x>UsfH zd75F0fbT@eo~-&5VY5}6B2-$vrU-Agk5s1!P#Bpa;PTWdLYY;cB5bzODMBbP?0@|W zOcC&aA6VB|W%NKg32?VEoeMv`NYY}S$dFjhly`Yx4UyE12; zFErD7=xAp2&=JgI-k0{!(M;<>b#LfvHc4l;t{R`kp^w0q!AZ$+Jgf6JaFho{{(>IOVO{{WPcj?_3@D61Jl(M(@B~j ziHpwtT$WwPba)M^mHGv_O1|!8L8`{iM82M@!fy05YN>%%yTTXFc@`b#e2b2)n|Z(5 zqT`%rp(ncOYblu+Tkjs1#i6~yfb(i^obk;Fk&s2ld9_8uxy<5)^J^D0oS{5|GcHoa z*=^BrUTvW`2elELYkmZr@ug_)bGZMv0?4sG`hPY?c#0XSfBh4pd8y3 z%GZ7gD8I53P=3P~%CU@Zh-dsk3iCdV@eQ$Rz(HRH@C|zsvp6&}2z*1f0pb+u8&VnH zkf!^F3~%3X*ZGlz|Biqht9yrd#yg}i-XTr(4)3)Pkf$94knyFc-?L?k$JGKLH*%d@ zaw*%A8!0(JquP>(QH<3uI$?ai1~494-Azl5VmwAP<0aym_bH6Wh@ze%n!d(@$9Vd_ zEDl+1(2`5NTXH=07y{!lQgn}z>g_RhpVL}$l!!p zC^sAcDDkBzJ+n;lH2eWjHv51w9z&U`(f+w$YsY1I8TI@L+G=xGZT0@G&{hk#tNgKV z`NB7q3B1ynU@Mz>pU(tdsWjk9qpukdczqV1#i2=7Us9jhH1Nt}0k>n&jG&mKKwzY%73H z*_rsOUhn_Uy`=a5%FD!G&CK>e3$tZlV*rg{0BxpI;uiYK0if62i~GMB04?(d)J6fd zGk`|ufJSxvx0G_n;92c!@RF&+-U`Mqnqh#CAiaXMrLs+!{kd6 zs)oALI>w#W>+ZDCyK%<+KGMX|@xMa%r<)mnTEqC$dexu4*9_zTJ^&M6iu$GF@xK|6 zjPTJq-5k@^BN!+*>rnQ-LxXbM7mSjbH!Wi0bvU_56e^_WrgH5xo;A<-vC z12|}#Ztu1kOWkKY<30u5eWrN3&qF7)wi&6r&nU)y#xm|xP~GPvrwE*3bpR*66z!Z| zrg%o40yu3x;H;o^U6473!&Zd8gCWY+Rmge_LRJ#rHhcz9FZTs?4Fh!@18*bq zzL|l#hC*CNU+V$t{=>64w7vtZs_+K7kphhvpqq7|TfBkJYtn$O(SfdGfNo@fZdQRl zagqSNb`JnuLly`)G-X9ZXXXbs z-9OkF{}9RehiKJ56rUhC-}epRj4ws!pD0s2nI{yDV3QB8Hp1*x<+ zY-8H8U2n?~-feju(%Lf8F>Yos=9so@SKD%A6T$dDy8&Z-DS9QXOz{LZ0mhL&8gi;O z0gI$=T$gqOOUaRSA8H5a; zd$KrG+_uJt#AF4H7dA8TLZu!r)Og1W$;UK!SLgxQY9;`yVB&>JHD0Ll5P0)<0lfH9 z^ry$m6i=C_v*zJsSLbsq)qB)46#qZ!8=5@p|A+d9U%l=&>Khg=`{aM2Z#dx4djIqd z<*@a-ILFN!6@{*!cc*VS>hFtv=^O5Je{!YzhEE?_V$?S*@_i4f8U4Gw9JijsdtSux z#nuaJSnZ7etn{Is@x#BL=g^s)|B1d~&!5)+@AVB2tSi5)dd7s(|Ht$V|505?^$myZ zUej6MuyDL~w0zF;%>PQ?a9GKIp>Oz}BUVw*Umfd5&R+?XA{^!<^i^5~+jY`nP;B3r z63q_;eM2#X>KoSg)PJCDbAi5Ls*P?&J!CWL8{YKSC!gd?1`-*-$0JsYd`Vve|HsV( zMhxLg6!L!Rf@f~Zog>KM)`l7C{Qg_sc`;DcCsgx{cMGz0(EFL38?9_wtEejixV3|6 z>b~0IL(INf#XrlLEx1`WlC1_Lpbv&?rZ|_7beM4Sw=>}UBk!E&v;2Q#&g9%^K)2igrE*+hlC&=N8ex9N3?~(ck_$>cpQvc)K*1wUh|9f4QAJkWSJkBL# ztvGz!PkQ}*mVamiE`LC`<%h84M|WNRuf1{kk8EEwnJ+m{n!-OY4!!Q_&WMu#Fh;EXzb=i~YS)Z#N@V5{K58#5{6(LI|8m1j4qel2;lXU- zL%S~g?>sL2&cp|%=Dr}v;X6nNh^Nor;uHV%mPpV;mf|N8MuGWJ=UFlSwA!Ox&P6neIX&5Db8m}m>GWfdkvqdKFc@#6XVlCz?_S+y`P+lE=i_`9xQX7~ zt=Hdo`2#Ti?Z0(f{|2`HU6;SwhRd(1t=z2ohlBZXpAi2rc{lB%2TZ=KXuozQhhFH` zh#9OAu6MdLVs4;jgmWetI>Z0=4K4hyJ`3-7Y9@zTk91e~@gJGOdv#s-V*$AEh*9;Q z5&v+cmhlfialQ&KxQ4XOk7gKnxK zsbKTofmE%u5U^DVOranYZ zoFfl9u6h3BjM{CM=nBS@e^u>v5}{vClEVrF{>wf|^4$f3{DPU^c!MB^zW?}4j&ShQ zLH>ICC9)#r^5>GgX>qqTN`>*Xw^KIWFTQ&P$Zn+}+=B_MP&1E=hst~hpD{s-8f5{$UIo#O+W!Fi`~&giigE>^6#!z{|I$B}bqVI1leI_w z;2&4)A4gz||Gc7{)mQ&7`ggQ%8~@m(J@EI>T~YsD`9`^dUVj7Zi~X&Q$G5Pd|I5{$~O;{?%q!Jl_KPzBN?;s*>tosk&G7bT_V% z?#8LXavi6~?}lBuUZnk!ow+?!(Oz_=L?q)G(dVju0$((YOn`}=%tS{DIcoTj9I`EW zT98O+TZ)w4lp$H$xx3Y}K> z1=;HUb%{~Y|HYi{l=M|=&OWZ2>^__>8 za$9ew8@Sopq%@#AQ=~d{i<@l0KK{{*92)+kVFUKD1wJ-lA6@)Bhn}DGzJi;4te|Wo zVAiRH2W~q zN9+^+dK?7%ejh~OiV{Ds!on@?kz5s2Cy!oV=6Xbww)lEwbdLA1J3)Y|1wDebdEG8H z$}(=NAdQ4&lZxJFAbkYHj+MzW^yq;pXNQ=DcZT)1f}5-4a{{fv(4ucd_Nqn$(!GJj zdVqk-PZ2bMN+uEZ2lJ)+t=MfHj_dQq=Z{l!Oa9a~L#TCWHvQ>jjKA+t!c}R=0_`e5 zW@II8i`9CoQ<~_0%UEMGF>1K>wyp|@#Sw<%6{ahVcB>FQ_$+21|HDdhFGXb4Ip9m5 zg%0e;uPKtJO?pXB(er@}a?eERqL_Gw*lY7%wEPh`T1+ z#mB)h+{x%tD=}sErhyqR9&b;Ajvt;SlvD9ly{!K(NLZF)8vvcsS0B@= zB*BAu?(d+7ZrrdVep|ixvp#vJ`S+C#Lwo!&Teu!228VUUa7S|~(&*^A=!A;Qe`WvC zYZX%pwhxYj6GkalpZ2S~UvNLS^d_>_aJd-V?F7ip^SRuFd^yG59bgsL8ig7;*x6J6 zr6HH-x+GInf5*F)e-PN4D8c&MS;0AYQgbRGy<<;ES&3Xm#`_W+85+xshmS<|d@AxU+;Ow0$axEj|(8H-(-45IHtwI{-9H|9_OejqEc-@ch zV&%&z#Sf3PX1rBDq~+xD?tnf;9(@p4VW|4t=PR$7mWnr9UVli?qr_o1;E8${_Q_O_ zqRCU{zW4@YGRNfV?`ozLt1Ua%hBYJOK8S&}|3Cb?OP|sT3(BuiMS=vaU28v66qGl9 zyK~@-{=9o;7whQcQ8dM6oHUK5Ud_Nh5#!_+i%WvgVOTt3^^x|*B@4;L>`A5wPo0jw zE3AmyvY!_pQ%wjMb4)g@Eoc>SG03Uo6N)-=4RzOnbNkw$g=mj93-F+!*+!f0xe%(h zuSLw$B!{Cl+CYAz|21#26=|&dGV{Fo?B{fQ?Zd?-HRDS?_TwCfP<3YcJ~N0%aK_tH zFfR*@uBSiOukFl3Ho9L{d?R%C#{8s359ANF$1jL(l0J2EarSvaKO1}oN%xgF9#HBn zUg(~)EPNuQ;sm(-Qs|ZFEP@Te{RnJ3H&WH=9X2gPGB@|0#us zB-$!>?D;eaZsnBU=;YqQcv4wf(5Bxzno|zsBnu!eS_Q^Qwb)G47OgM(bNcJcM%p>s zI;>{-n*mF|KDY@*OXl`XajMS^wM(65(!XDIh04u)=?(t~_iSa1IU!aDTnLU6;IE{;a##=hE>aLpwX zxb=R`jO$%D4Z4P5#b$#)ljIi|hN9^=D4JfnSdU()E4xx^+tSS*FU;usQ+yuq$%F|8 zA3z%Uf2e7(d=+&AA!F}6qOOpi|Bsu#var>^+abOSP*cDTOpZj5`+(L93pO7K@=eOi zHYNa|vQwjw>=@A8~9S8Og%V3!zHc=J=gOGojayUzmYQTvAgQ{do!Wt>tBOp*4%1 zp;N4(4n1WE0;vHfFEi|H8k2a0LPt0^oC-=`?$o`nr1>qMGVNmXNHp?ncwEL^w(r9I zT(}tC(*%L*7N>6|{aq^?u& zzjTuxtNyFf-dR1y)&WELxB?XAe#ONTLc)LgV5hN5O+gy$;7ZC|#0iZse-LM9>kYeM zUzi|~;A~BS{&x!*dXhc873+vcm~T9E$=5>jR2PcwNj*Os+21xR3U$>G%2Nc$y^0F6 zYcy`dThVgsjT$4=${A)NQza{*Qi_Wek>ROXTdcDn=xBzh*qILKGh&kgtN7=72`AJT zX@nJXUq*TM(3XVb_pLJ8To~<`j-<=KSB(=UtoNHIV(6O3ahPMcx#>!kn$)RWCQ8O~ z?vkf_^8f3=@8l!>20neor+43db?9@9AHY6{VSL$B@f(2uOMNa{?B|-xC?x`rMA($a zN zL~&^0t-DwH!@+sZUHmIZUm)(T-KQ4wX+u*C>l=1Xu<*lcY{8vb32iw2->4u(pM}n=_in}^7XwDm=0a<(GHNH#h>@%KS?!DP8>~1FX zBsff0kqB}AM;|^$wB;l`xGq7F-XuqS*ZjR&>}12jUnSQijVH- zH!}1KO|#sVa&0_CslmJ)9Dq}!UwuN&X_t(#8a;I0G+p_jrD0$@2`?Bp*n2_*thP7N zKOIEMYwri+FyZGMN`>1UeQrd@aGK+<>wZKu=Q`7W4`$ILKDSK422$$Gdj5~-K7hy? z2l`L;oOZDPhD=*O4o4zXg|3kNB(#tV98);hK+bk zC|p@Hevc4tYJQ2sOex8r4MF1t3S&}}Sqh!BaJP#;J62W74Vgm7HQ6vvIO_5zI``dQ ziY}*m$pbq{T16cEK?Tk}jxa3{hpHelhlb$&-yoj_&3Ah#-QTk&)8355Dt)d*7u(i; zL@hUIGs~He4cMFKaz7FsuKnU}0un1C15Oq)FgS6s1FzfAdM#4q4po?K7`qO4^gB`! z`TW-mISaoUIcpt`AiE0dn|De%#ydZAwMqLp(MGDq-X=%rl-JV=olO@n<~g*^BJDq| znZYqhvXDJ|{gq-Ug66{T&CO@dj zK=$d0eEQP>KTatXq1|(JDBAXZg?ps}F$?Q*eks;xD=56(o`zBAy_&0qT=%Z3Vz}euJ+pDvobm5o zQC1X?@aIR?cV8!`FWKJe-)PI#4RHGWnb%h8iX}-A0tek z*=Fw=p;0|%00I3(bfB)bgGpY%J-XfQdacroX#6;Ol+bFI$7TJ z9pE}9tA%(5pVK_ke@5GC7CZ5P7pv!>hEk3IDV9|67sCGAbkCiDaZ~8;GohDlz!(|R zSfOJU-k}uj<=235VVb6o3ap;OVi@SHSeE;obBl&=gNL^{iYG1Td*yr)K-)hQBW>-S zD_I&tb%U%nK)}x8tvRm!cMb8*u7cXjmq^x|X+6Si6=5aD`>!kGg~Cz+r{6GCrA_@` zF~Wxrh`{@{_13%xzh}TcQ$K|bst~Vkd9M8^6KDMV0S=2#fHNG`{(lNFUB9`H^|W^& zL%O9JrVW&0O$2iBr&#}LOwU}XB-B)zr8?R*zPWtdI3MQ492Wg0?$JGLF*M=liS z-i5P?aIaGG?^X7KB}8A;X9v>#Wc&$`nELdmER7VlQlfKMqNUzSsSFl4yBg<@K{qj!hUM|Hz54a(dJdXWU1Z0aqBv=*nfAIQg#U*DBgdGpfmqtJ7fudN5jQU{we;H> zzvCz9Eh8Dx$pXjfO^iBE_X(-6KFl}{MyF{iBLhhlDY{cX)RBYm`iv=4zTJcuLAhQl z_G{X2$d{1Q3}O5$9-xsqoIiZm@G~|3wvMcHJ*a}_Yn{{6rg{-|G7MA*`Hj^S8YU^H zb_3xnyfN3n-tM8u5s^+$QpP%GcR}ewF!6)mhYpW|=h|nAI}iKWa?-cx!a$33 zUbUpbDP0_jfSfn$YmdEKneOH2ua%4Q+MgJgnBoWJ+O#)jnDEcFNUa(Qn<=!SE8@&| z3)S+9L+%uedNSksi1J1u2!dc4v;~H_U*eu2Pv>;2YDPc8pYVRr5#fIx%8E1Zb-7(; z#3B@kIYr6m`)j#eFA{dk_;H;u#4(QEX-qd5fZg_uXr2H2{bGJL8uJUZ9+%vx+WjM# zf+zps;&wj(1p<}wY=W^8JavY}7YF%MQ-24VbrZZ%>ep|6kaX3r+i2wprqrI{4C_Dw zk&6 zzca(bNz6ChFspEM2+6+2G!&qK0U%C{(9>qw%zj-jgxMyi@mf2HkcumHC(Rg0T zK#LACTB}AUqKrn9l8gQJHD6uzLli$mFw#j+a(RV4urPZl*)3?{9vI2Z*=${3zr9dH z>4@4FNqPBsVRY()s;IEXRDnoK<_2=>lWsAd&fT!oht5p(PO)uARl?B@tF=mTS2+Ns z)jPT7`u`!r4Y#kqr)=?yF3>@aD3|EA7gpMZ%|loNM)ZwHP65K^N(it&Mq(u+D*2j1 zCE&%Oe``x2lu#|ICaVhy`L>q^M{zp6yy_@6{g#6+lYq7^;I)VClD5j(|TdopjimwL?G$+ek%K@vcwI*8bW&T zqE=GvFaeq0v44Ed~G# z3;l3z1oOUq{_TBxhhunwwC<7X*j3;J!twfq_*6XyF+5@wZXOVW5GeYczoKCU;Fp|I zM>bnq1t01q)kX)+K5<%>!U7Ui-9Q zzuz7c1+30i&xsiBu?h$LX-TvS0iU+wlln42QkF3#Fpxaoui%&idJuJx>{_~*k?i~ou0ld1qZv_cCI@Vd%o zjG8vg9z-M``woma!BTzeDc1MX!m|S(pOW8=1;NP1Q@}nbtOi8hia`B0*c;StvoC`E zo=EECE&*ZWD}C-uuP3_kJ0`Bb-9EeqVoUqKlg2^bTW|Z2|6lQaf-N!~2NBcZ1ovG$ z1GmxtL)r==g5VrzGXfzz(fRMEK!^Y*n3ZS8%`2$>7Gn9I9XH!-W&=ms@AnZULJA21 z_qU16iy)0TR4Y)s;S`YdMF<=@0K_iq!A}?sO63Mesw0V<0Z#gFhEmUfkSbUJ_F(r& z(D?SP2*L=&+608XFcO4I4v}a9A5WqpK;GjMW^hAvii3>KScP%_v@GZr1d(g^7Y4a9 z2tUuZ)Ht|m$DjEDX4hw;bTEJ$%cBaA?nM><-cwX}50jzefN$?^Scwp!ZvjB%+Ycwl z3&4|u6)s_7;va~&b44FT_KWG+T&-!@IZB-oBaayD@e+IJigW7EPA0Sud52`)Gl1n-%%o7i%l7-#Ac&?@CZTaAU zW}fh&U76lyS>hV7uAxfb2G3Cc;GeYzdA$mO*G)hG)cqi5L9ns`v5Fi!6kY@*ZYkW`wZ28dx8Gb6yH@GTs!}5*w4w~&LMlluq zl!)nDWoQq9-4Wr8`iRN}Hka{$to5$Wf)m%f{{ML_YkpY3HIW;+B1V=5*Y zJ-g-B>rF%PjmJ<4q<`Y|hMZnzc{&UB+kM(DYYk#7zoKD64zXS9yyqbUAZ7e719uMT zyJaQ(04EJ%){G6(haNf}<7mg`OK}Q76*Xj-ZckCFIG@Vvn)$bInSJhaoPX#?ILK)< zZ|W-_KUHFv95K7AV63g0#_TFgZrl8}eFN!@Cx74Eq zfaBOr6H;TrRYk7>qcV71Bq8@&H2&4f47m_wkHKWPRZqbv@WY*6coIkE27{& z+pnhiNtjRXlk;-MNc08kIacW*7OY*?Th*jvk68K#ZqCRFFd--!TPvuCgqEcs2P5Ma zF)X3rL2e$|4|yMGIrQ>P_?e(?$mtaL(dpb#_(IvM_(Mh`=FWEAT5w_x0n%bkU^BKpqbdEU_gOeA-0PhU3FH0;aRVgSHnGMj9C(rev z)SPp$(Q{{cn(}Q(y7FVGJk`|$$R5}5SC4zpShiqo)2ZxTi+nPqp{Y^~Hz65?xz%A4 z1c1W|I5((nAPsGJE>R!3&YZYeES@_=dx|sknk(M53uHY7-1Fm=R_Dv8(E8fumD-x6 z-Z*~8+~r#wrrmC~GfS;C_M$$!w!*{FVUu^UoP3*#v&+q4pr|XTuQvUTUO#o98jg`| zWgEd;A16Pe#g^id<1zkQ-g*2tf${vFU^`3D@6cosCi5@*+|?;Ag=CTo4x8pU#~rl~ zpz}0NdpwnUnxuGK|FIEE8`Xh!m_s|VzxKjYs)ZmEFCJCbIHb<_IiW<8Eg5#=6H*Tb z?pM1=6uXsaMJ%CK!h%UQQ6jN#v(!YG5A=rcLjUyP15RRz({k&Aoy_rOsR1?drQ<`wFF77xGMwgo<4GC(_CurfPf$Cg`UKo50GHkCz*HOPTIXBc|G8GEpP1fin8vOK-(vq*Sx+lLO%h3@&8lb_jEU) zc0^I9hr%GezikK7@;ZwZZ3keyed#*%IP5s&xJYfUg_L5##1B*6(cVV^X#4C%73EQ7 z^^H61SKGhF3%5UoNR@6e^X26kNiX=6%C z2nXtaA8Dy%{~t7mu{fZnA6o#inuUg{Z$hpN>tD911>7NTg{)lrM17QOy_D%bfPP@O z_Zc?AYc^cqu9+om z85XMF&8b2*vW4z9g<$kzx6=wD?SEEDgy{vUyW`cWL9O}MY~iGKky#*5%T9H^ZIcD| z$Lxzm&)V@3ho94Z%LKU|ipTZV{DNj%?QD5{37)UMum4c;L|$SQu?oe#hteSw_ABJu zl8x^?w(6g;d6qs^os`-v?nybQ)-y+yWS&X4sruOX(5K6MWwr}Jnvig?g)6KDe=p6)_V;aAj&bpq= z<#Rild_lqvjK%zzOSOoRfRq+@GAjDFt1!Uq$81IAv~WcyYPOr$ zrA^Lbe4>k_1KO*K>&8}p!FKZ_5FocBNXKvlY*z^SQ=4|ZA_+^Z0Q*n;*HG<2Dy%5$ zmDqkC4$LMgMnyD?T^UUL5==b$a#^BCE!@ANmtg&`6b;dET-vY?7rGb~UT`om)5@S?T9eD{ul zgFKN3`x??$oYPm3(0i+>uQ1~+dLZl}-K`<08n5OJ%Cd?etEVHw2c*C-tBJNl=`Rv| zUVbf{VL9xkC~QCqT&EQ5YdI&O%?vM0=QPT(h;*O^!yEB5%rYufnrJqfJ6yjTXQO_9 zpXeXu6RZo?u~!pQ%go1+XmxBWd72@$71T6ewhyf)w1CC}^5x#tL0O4kKYeAzSx{mv40l=WlPm!D`p3>X}nS;%wwa*1pasrbLr*7{~?_yKdSueZ*MNZ;#<7` zk4P3OvRAb*H%9ha;;8X-2#V;&zr1me>i`(`H*!(Xvnq}P-Vifh4aQQ&l&0}7losZL zW_(Jpn-muH5))#yeCQj8#A{RZ*@RUs>nPIm;WxLXUM5?@c2z=7O=E7x0KVx&cJL1- zlQ{D9Pl1LEZ@w?E`@eC>_zVq$hm(8t%9;Lve<3|apV#3Aabw_Y^^)KiQK0R9{EM_M zn}vF~=z(v^k%qHwPyMoiK`ZfIM=G7&gTU|N3)6i#WVEWZhOU*}qe|ewx{+KtpkG8} zLh=>9Cbx;83eT_bU*ztTcV-E*G}3A-oxJ6?)q}(=d)|khF7ky+zLMOJA@@{E86psx z3w2J^PY9fi4@jRrjTzd;ni~ccy9uBJCpoa)?`-iz#taG^gC$k4M_uy68_~9V+eFgb zGnqS;6Nz~EQ&S18xk!K2>Tn3XBCOiI>0r3@GWyh6W!om8J>sNxeYhh^0ZDCy_xyo0 z<`fc|+<;M{De^v0(qN_C!hA{!y2jCepsm3S)JpiyE!(a+cJ`9ljlBCsJ3r)pRWV6{ z^!WN?yo9sCpk|Zdw0U|Hm6VR46N7csYpl)W)b|O^EqSdV?GrB)<`g!(RJRKy!_bS^ z$5{9iKH+X*1ffxZTXe$8+l^0I_XoNk`CM|9B`mOQEe7yYHQV=GWQ$o8+gE43Y%@iW zC=?Hwa}NM$-cDD)YTzj>a{}ZVAvyP9e~7sdwTx`i8NmKN5ed6JEEBW06T>XWLni*+ zgYH5>c9B?0)61w6bD87K2lp1itFiq8sRpxU6FC6r)=OCSyPtP#*0*(LB8RlikFj;G zb6SE%t$Qs8p1I+@H)34f<@%HJ!I27R|ji#{5cxwhD@ z8JJNQrdLgXF4FnKVWnS^x_m(%-6Fz4!^wDu4YX8%0i@MB++h67T3H1XWOl?${^j9k z%gj(up>wCR;>`jlH~hoV(^Y~6B@0fwZd3{Zt@}jN`NyT77!0tGGkf^E#7&ML(4iT` z|23xEX#{k}6InOYRNJtpa$Dd@v;o~vO|XL4 zV{hfj?g#FIW(r>Vx>zA9a}^-wcDzJrH(3ktz!_HQ2qp-N0i@w@rhMXgYs2w{Y^7pq z--rYibiB~=8p+h>%X<_wgQgFmJ9+go23xCDfX3gnm9&5}kkKS6*Y#ppdF7itDIE5@;%AKTvTr;RT;L(MOJAEV%een2J1*mX8Fc9@T za%>#-byp#v;tp9~^<`n;*UZAsKlM`&cZr zLQU|izx>#MO765-$$s+yexL~&^aS&G>I3m|%UL}&7szWUp4`#`fhnk3z*L&wkVxjd za)p`8-Uq)Qud}P8)ib;Vu4a=zQ(ao~vJ4fbh_VM|w`VYPPL5A2W{q-Z85hoZjQLidK|Lum*NM^J{trfqz2L zH47|Y{MOw^!*!Tt!>XT}Teg|s zZL*?WSZ<1pbJubkkkvC%gDH$CZ8u!xa%X7+&H~V_jYXIo-?w3~i&^NaOP6*QLpcT=8N|6*#7J!mPT22-(;(?Zhq=-g=S@Rg4hMyT{BdE zW`mmOk_nzv(K!sWL9^oqRXVBFAM~paB4YI4NgKaYt%m%-G=&`6_-}6>^dh)YTs)9C zL%>pH^L4z-?wVt(B%O8LkV2Tby(YL`d{gAvX=$3<&j(p5ro|t9=79SWQg-=4Tkza% z1NDEuR=y(++)xw0FxzMT1!D|W93<+5Cn@Up6t2i^15&%TKG$hT5`XwIZ=NQb%kUTJ z^Iu{qyvQI-Id580wNl-Yu#_^?NSS@$Apxt$3mLPmE2~Vez|YUyc@&b^AVTH73!LKW z4&4>rp{{B^mqys%UP5$DD98J6aJfTGpAVO=lTo3Qf7#q zH@6NieK|VFX1A|=a#@EPc%&sA?{2~_`yxIATwttUXHmdkfsJ~Be2aRa8rBCDF>C<{ zjA5g)jBF`W>LDI5dm|##*G8pxUCtL+lFiHbo6`!}kVb3J6}maJK1ibx#^RNtgtonM z@!*t7%HOUQ?SRK8Llz`AQ!!40?2u8af&`P40}%mk@^~R1obBr}1ig-RGwyoz!J`t1 zz=$dWe^P2!QqqRusl3L{Ps{c(cYX}?YJ_;|GF)Nb(STR(Xd=>P(j>=M8gJwe1aN;I z^%2?}>_MEs&4`mh!<*lp9s$*cuAl+NY>3$nhydQC>|Jb0qX4>ab<&;|xyCS~@eiqc zW3I`dIT)*PNF29{+c=lyDF;&I*8h z(PVzm@taCq`TFnh}KJFxP`b`8*biF#zX0PRRPSnZtk1KwfV7HKq9b z^G|-eXNAt%6J{dUCbR|S)7(*XfgmN<;(@X0PUYm>Db(EK()h4`8bhbBZr3nB1*#Hk zIrLbE5yg5(n}n!fugQWJkU|++2HAqfzW0OOHb1kvo628%AbGfKbB$0dhotI zGp_+;FP%U2BATk&EOkwg9F5O#&Y9^%|9c>MoXxHXP_yrJmaKi*;wcM9&9(8jKGG|@ zatd&7OORO(;B!cc|)yrMIY1P-e zUk0V^`1G-gg;??12sy$M{f+}vtuES1{0d#EQi^n zs@UnVA5AEj^R-M{W_igCVad{psH-Lcd-K_KBsGaox_@NR6C9J(GE@!@dI+bGEL((l z;8og^Mx-veD+CG?zNE+bDqtF*_LRnCs}Gb5ZcO={ON<*3R1vYEy7#07J|24Mh&-kn zI(a=h_(d`0%8L974kX15c`TNE*q1A!Q2E#sl?RK~_v-w_c%Wmv&;Z|hOeUetkC~JtpF5YB0tSxv#Sgw?NGOK3>L+dbD4S0M$dur}RS455 zJL#@5Ke}Q*Z#Wg8wr_W1e%6_Fn@{^YJ5|W$!9P@Lg-DrC8BKI<$GeNd%9Vn*=Z8{j z&AP?8rD@;(h2u|j5XC;d9Vc((7XsRZoXPuX-Yrh5glEP0;d^R;dl>V-pQy=01aN7S_%{0WJt z2$96`*tgD)TP$uU@zm-**9~d=%h!V#YTHGzRBi`Fw;eQ7NWizN|Nlvwfe{+nuYSwcaJ!YTiad!I*fD84939r z*X+#1IPsS|xk!Sa26T}Os?B!I9Ah^5J>>dlcHMl_VNN`X31oBW^i&qMsC|BAh3WG@|!*Z_t)@>U{V1#W=4_JiL=l%+0KETKv(fE;OGns1eNa1W3uY!AF?^# zXG{i2x_J%;y8@6Yd!Tw<+}i`!$0GVRU+$N;eb4q^zp`Sf^Y3IwEZrB>Sw_N@+4$Qd zl200~|a%8SURG<-Tz9XE#W0u^VDgl}MpNV`i|30s3)t?ZKT%GzkbLa#3tA(`; z>|{MwSlbf_iv7xCa4{<708Nb61zulTn;A#<9Agq$?n1X+b{SshHW`O}0s*cfmV(pG*mEPSIKXWBwUoyh(;_duJ=} z^7P6e$D2@}PfLy`_DjJ=Gzq-!uo&SCgXK57FXG6&W&B@jmqjkkFgdl+3mFS*Y#v?kVw4Tiy80 z62Ao8X%}&Qdi8sgy8{^EA2Stc6u2I_$N9)XiY4Qzr#aq*&hT^;J2C$b@v#|fZvOUb zw_N=oBBIs0@I$CI7)Iq^-BwVtGtrr1E7GU?mZ`o*h72s}LEpZkAsJ7mj~OHL%>Q#C zXIh-%{ZVZao%ow~Hv_IL}fG6CnFej4~qw(iP#BufA#gE4qjazCU&Di#>Bzy*=SV%92!7CPMp&s@c0|U z-qr6X+da=12a%2uwjUKD162Nwj!*9rDjZ~YL+in>Ix**QZj{#@mZ@nK`$AqI1$jwy zj@vnao|cC)1y8Fdio`eDMf z<}q^`$yUb&zBl|LQ3&ROhLnm!brQ8f>fFu z;ChOJ%L${ah^jqd^o8nVr)90UeQa5%V^hmXcI?@jdqMD;)B}=f$Z74x(%Uul6)FDq z=<5Jbs!v{j6sABIjVw-KQ+HdoEGb^Tj*mXJDB^S_NBlRk$A+YZfkcfPA=|Rmww5>P zw{Ug*-0nnNy>u_Wu$lBw@6W`5mPCBIoixHZCEl$)+ZtYbzQSQD(p~V?@7a+Kl00;> zJ#&7R)3G8V8{Q9az{Y^IqrEWmiVh=%5k*#h1l4GDvJ!L}v&51}a%s(VAysq2j!ElL zZlA7e;jF!Na0o#lmZ4bWO{E^YW+6OT)1+SncWLKL1B(Mf6r($--nSP17?yFL9@QR} zm-vlvT6^lMElw<#6vP$hY>un~;jI4Xk;yICbU~UP#|4It#vFOiO8^lR{{!y%er)#M z(o8flS@v{D{j!2?j%GEDm`lBW_18cjJbx8Bm*Ro6$X@Lb4CDs|ChCIU{T6PU7)>C; zL4^Wv*cKGI2yZ5IKy2=mM>*6+Z272w0-)}BRH!ZG&%)?c9lB^C+T@+fPtvW}{6xdT zHlO>M|Ed9KIa2WUFTd!{mET+7+Cr7alZ6#Mn3zscbPR(-wqq8aekNtNt<5|>q!F*ggBMa=f4@FZ( z+g+>8!7{|o;{#mVy+IyT#B~aERA_l%C!XK)i3(nA=9j@ND*F?kN^SH1dpU2DL@x%4{zOu&@?2O zt}EZ3e?CNkrB=KmsUbHiGQe_p&QHIcf805W16gqff<7{Z;<=!%?ez=Lc9=Z-JR#I% zq{H9~kaz&Xt6TLOoP~z}ouo6&4D5KLU?!NxEEr|KUvLuv+s$lWzb1#Ia{YOukY$$& zS{XqlXu0-v9XS$-w-gdEccX++{NtQmCj)ZOF%4|{`Ddc+hEwFud|%D_Gu=q{Lm~R> zwRRloRhxvaTT@7U6FlaQsxn)nRTmBP1rg{4g<_tW;%F!n(Utq^mkQ&qh30ch;gv4f z!A6fGmprkEx7u%aSKC^UZe&uH{*QAvtb#d`u0zD^g&khJE`Z&RT>5p@z-fUcW+V!H`s&jL`*h_YOsAXY1Nb9ez_kzaEtp9Jb|z%d|MH)huB5a=-qiJ9MZn(Fg(HR zsqaEQZ|xZi{}>s0+t@J5(E~JD&Etjt${;}8A4DNcI1)WlzwNb)YciMO29paDdmQsb zM^E>Mqx%fCVcgh~^WU}nY+84c`!bh*AAxVuOmDPlMk}CSbo-3| zWi>6~2K3fw=-Pg~R$?33)wX1yr21DFq)0F#{3VC#%6GXn7vYZ+EmAR$4WrFikzqh43B$b$yI}p4NcsC}M(tR9Gd?RmCq6#O&@JCI-6AH93e%R|$IDO3zF$;`jK=;(j-z99bjRMsz>r|C{2)Kn#Tj$P z%CBFG30M2gh079@;3jx1$77z)KIasjQ6jazNS$pkXQZ(r9*%TsB}NOf^f^lUWr5wh zAh-y-Z4|hJ)K{h-sv}MOBB%R3aOFrrXvZtB5`EBlqLY$#14~E*wu^~B4TL|@yC^~T zB5hfNbwQP|DUZDy&K_{-5YF6hBsk(=&B$Bb1Kh1R2wleGRm(G&7=T&hM z-15tJk{f%Fhu;nGSrmXf_4qmNiJt<^0dSsKys?b(EgeQ4^od>Q;t@Fk=DZ|tj%+7c z8s8#KsGI~f0Gsiz8$l5wUZxYSlvP5t5ljK}GsYTe+p|siF!0om zIB_r)b~imB36pQ9-oFBc*-ScaRCOeE3l=0hM5A3f>4@WH5lTT12p1og)ht&C6>q_| zs(n5+ei5*_qW!GX4@kYQpOm?r92bo8PSg3XFdpx05&hVXQgv7G{J(pXIS~bZ;!3NY z^C3HqemS%$N_ZyJPuQce?P*PNkQx{X^L<`Cjec6^(2{y(TazlgAKCfC4!7 zNDcAfQ!q6;f(vl+9`tJYC;WGkl31n9s=C+ov`*kuT3ygNC%T+N!LVq*X95PWzCDvM zzAT-P*&`i-|jxzCDCUtS|x5og>@0KD=2 z=Mo&hVtBrD|A}i$p0vpsi)+i8w9y}ni})1o&9VOBk2BIjHc46H_zeH8|5I3sujbsN zk?+T^sfZfj>p>F$@8u)e*758Vk{YMQ^yz2Q9i@cY@iluiucZznAqv|ox%I(_ip zOGfWyT*b~U${Q=DFZw=ZarnF^ISzKd$*?J^<-v9(44|MV=tDM#Jtrh`Z7gg98L^j##LyWS%wEQj~?&#c%egP?>QW0uD~06Zil=4!*GcdpQt_E zN$NlbRk3doyNdAvzyEh2q6g2LGTroladpqpkwjg?=#vR2&cy7AZQIVowl&Gbwr$(C zGqG)(6WdPTexCPT_xtW$tN*O7>Q#N#seSg|zdAJfVFuWtb}@MK-{(*$-12h(4*2`N z8=&|XFsNCkq6lm)YIknEcF%!aJpax)R&;6#M5%tK$BSpzjGVo6you^!F{%I`B6ljjEZ;5n zlTuQAWO$bz=d;ICPh!&7ryv$Hm76mkOD9ZhXPiEG06P9LJzZUuKwG7m4_}W9;D&th z>76Vq8uAmqT-4utuKhlrE^TC&wO_h?tJPo3nu-@fa@Ms?U*?)6*`BMq7RQ5WOkdWc zJG&n;bpX%Ds@a(STkvbRy_etRr8;X`q3$j~VB*2`*>eYXVv0+MBZ>iVWs>Ip)A``i z^WTlj{v{1t()j%3-_(CJcKg3J7g#8^R|P2u9~eaRH+vcs2$&TJ7%yI}1bNSNn!Qzs z^*<5`Z0TivUBF5BmMhWU@jVVMNv3rVAJ@1J?`}ToR3nWbQ)D`I)2TB> zNlUSQ8IRU%1FqCxO;`4J z@A&&JOC2is?JmIGNG}9z$5tND4_Nzr%2`ha;9A4#_al>28saD2K&S>R`cT#RNpxT1 z2Qg9Ov!sH*ULylt`UV+~H5%y?brs1Do%V^J@XCqx5UKZJfWKNfDIAS@1bz|U`C7th z_uGhmHQ(F;x{LJqiBAsOklXmulyj(kuhTA0!=>dwsHf#dZe=LW8t zC%P=dMbGwKH_J;7GFs%JjI>=rMJMW}qiSWRmz-vH=MT-YhbRSK^D2+2z`YtU@EKVG z#wD&`w0CdHgmr-x8tcn*yDvI|<8-5hmc0gBCvOR&8+Qp<$j#fh5$iKi6-kKmn9E{L z&aG%7xO9wg>(bwxw>eWYTFzOk&)7a(6x-PErtBniaFl`LGfwAz5BM&RcrPBqY40rA zYOFrKqb0-FK+%M=dJOfs-iAOB7p3uIj#p5?5$B!D$XvEWW90EYpr(!gAZAr?b zO5l1&d%7m4r10_lNISMC}6 zn2gpaMUo*QXrDxB8KM_uM0k&hAsCcgShuVETo!#i))TrOS#mJ$hN;)LCGdx35zDj6 zGM;*Ktop03`^gR+yX&Ycep3PK3|R=C6%K#-OoX;*(ftq?{Um3)3)b!OUU+SY;RP)F z`*R{EtnTp=^uXvLMvPjLz*PAgmtTRug{xueefK1Nj3RfzQ5UY_8lg2<)k|29!NGS0 zebr(Ar@<%v*IHDH{>UfAqvBJbpE*lc_v?$L2}VQZ^?;uv4Y$M)-xT|TTl+~ z^>^HE_F)cm0pF>{4gupWhW@hgH*y}kkFQw%hm-z0sMuOF-QE}6wTMjWx6HhfeL}=F z74IE*Lj5+YEC0AA+D8-iD1ZJ8N#$Qz62L#UA%^@-L^Q4w3_Lef4TAL-i+>poL3$nM zX=6fw=IvUc&s@Op({-XA?6Xw)7RZPV%)JSG0gVRkSzofgH+d{QAd?%b)X{yLJ|dUc z21RlYj7wFtI`9qtO5;s=t>SZl^6fPn?Dhk#Gx+ino?OphYs%#7Bg!c}5Mit6Uziwp z>S7%)hlVe|FCSu&(QY8`?CgA@#+?rjKcdw?%|v1LJDZMEaq{an=#$I1Y;07pV||ElzByDLS$=uaTecnrDX-F zOoCO6Sx&$0!D%5AeXi9Po+p$&WwnR&p64ReoKUc6@ubbJ_o>Y0PvGg!=DQ+If-?3! zT~vXQuNR78ij4MR?^Exq5rJ9Q_p#=SC?ToOvjQ{@eL&8J4{hl$3bf4PwKo$`!T%=#Qr}E6hCAim+w>D zngdfW0+5h82K88F>K?NUD(WpUD0oJ7X?*@xANp?$jKClyd7=PN^3O8>xKE`zQ&pAF zMdFFiaWm$tNe_`EJD+MMc+gt!7w1l;C81Hpq$J`xthRPSLVd3HvD|X`mZ`C{=s!)~DP%e3<;*&bOO2_qm8uzJaqJ zu1CM9yB{V;9!N*r-w;2M&wLB7UgQht?Z)Aw_z-iTkF861a&2!-AMTN6XY3`1HAs!C zD!FW-&T=J}RY=cK6hyqQ>D5`Z1;54@ZO+QV4e} zU8VHYv>bs14c&eIGwMP7f62=|I38cOTS4bzk(sn5E@VAlx@!3SNr3M}vT3`bq`3jY z_FcpK(Ln>&3p%oMWgY}XH{FwpUO;ENAHF4F^7|4W3Sl$Ps`RHJ!`eSZulsS6r8}@S z1piWCG0sDn?~va5Py0}d{q30R0o$@59$d3Skbgu@RQ9ci$DZYVXBUCP93o{I$M7K8C~_;j&;BdGXtI{vA~?7u@bMg-~%gLpz4!7Mz^cq zuSUT8bXe%(Y_AE}=4fNKA=nUvdd+1lf%~Ms?0upYVVOM}kXHaFg&8Dak&z06vk2L$ zm-4x#jui>6^QlXug^<2-VNewRTHH{}iy4DsD2y*#OpFWU!UN2wcDGsK@jKyHj=YL& z_kiXMGE+dDgkFpF;s-zB_!Wey{PTt1y;SlHsEaX31B2kXbj5(wY$|JH_i?4Rs^cw# z-T-pC+`NgC+rNt&q4VeBO>vxy1+^KbF9>H{(G>XnUmJzq53Ne+Fm{}d8?OB z!bg~!@Usgleun3f0={nr-b5D$qz6V&0CQh)&DtMkjB}i>B`G_G-nC#}Uub}^*kdK+ z+fx`}uMb4beQ}{a^YliQr{=*jlBurgC=e?O36al#Mc#FMGLpa5#10f|46wMyxHc%d zzC-sSADQK{_bZM;i+-Yz0%~I7_|06lLhmO!)`z}ig%4lT@dO9AHEH#kYw49={0R<)By<>qeRy z%42>5C(lrOqNhy;J+nP)5Up>DFZrx*A~oc3X?lh^pLCl8<8w4MsNd!E(N??LmbPf# z_MR}1O@-e1w-_Ei_TkuiympocTBg3G|A9y!-{Qe8cNZ$Zkm(39d((ocN-eN|Kw})@ z#Y1I;MnXgiGWny8Omr)@xAKSIKhoCm(x7vmRmDdH{R{~BoaGl@$kjJ1f7=`D_7xPs zx4bO(Ndq$y^Vg{T>%urM@i)S!jY4|sNe^bQ0#tAxVf*Cz1@N2767pY-vbiK;&oyYa z(7DIJ+^-}S6Ns7=yYIo-3#`U^F5=G<=$XBdy1IwCS#!@XeL;YkoAwD8)7EMVjQ@I! z3XqS&X`eQmcg_GK9&joUkU0Bx^LiK}==J55ANpc#e(QN0h;m)4a)a|CTYhoh0GoT? zLXl&xUdsX*Q~T9gN^hjTQ!C->#RP0luX@KlF_ia-A97>zY2Wq*>w!A?ylbf#qJL{d|Ack-yYO*)Jup z^UYPi+`%^iKBVX*=*@2gC@oGa!GNj0j@)wUg2F4JdihJ+{SEsEAM%ITxqv+G*XYO2{J|@LH1gY+ zo_5R;kkI2=s-%2QoW<%?RK3eBVpt zJ$zA91$uSFW&lY*=K{*a9{ZwPUX(Hd8AR@ZI?i7lOe*`E&MBD8KzXGjU`y|7rTi@D zF!^Jk9wQJmt{7C0fqyN&u7hv5)Y)$wF>+zya{Jx{{AOeXp3!rE3pSBR)LSU0UKxq2%%lJfi?my=-}5Z)3^e_z4`PP4)kf_Lu(a z#_*{IvRb^HIQb5KaV;3X!)PqKvIl%NLaqros=SZDzL@O(YxI-9B*En;IEJ`!=Vu=M zdMz(~LWX5R4|1aijRG^0PjeIO+E#-_WdOww;o4UK#aV=S_{*hYmO0j~{Wi{yVJY=TE$&I9u9R<$LG9aBEAxh!C*`uhZ@huO`0l#W zKYD^b^bKVsPR>N4q?>fe@ zy=HAO&&d7LH*7ai79XE>L?p>Gw8_cpB-V~nR}#H$f5}iuXqWV{c76Yt>2jcG?)3%R z>nN7~5o4tQ><0zgXPH}8HIHjuzst#+`ykykd+O{8JX`yHVXh&=By7sYlS?p1IlaJ0 zDoP7P&P=U6WcU%Ehuw?SxB6Cfa#tUimCNWIhV{Qj4 z#oO|NjTNdys|DsFboJPgIRLUdQ_4H}f;K@N9P8~j3AV}f3|!lUe^bz+1$+a@0NJge z$uWIyYB)?{Emz@*=G*$o%+3VSKTVOhkb$7@=M`b^@Mz?b=d_j{(RK79wW!O7XKelL zMh)MSN>;ex$aR+?47Y+vI8Tf=VyyEt$h8?YJruCZC@rx!8#6W&Wv<3x(sJD%#qu;H z7z>S5kb>_ST%ou~*&WyzRP3e9b33-LnDEKpMTQqORlgR>8!OygB$9hH$$T&wtFtUN z`C8)Qr<<*lEyYn*J(VZ{^1cE}2kERfG>P$M7d~Oz>$!^iSaUBr+f)-<(Y*bEKl!Uf zD2Ed2x)DGnaz_`s=uPmNwtPs#TiT=3cTh^<#pe&^z<0WNePkibU;-g1H+wk4 zT1Cg=6l}KVQ?oOVRtLJ?PYsHMnP|pVvP}>(fzjRxDx3%RQF$O&QTnTRUwFk{;j>6> z90zdTa;*Shzzz7QsO0QRY=NStvX1D%SSw+{h~agJT?w&RX&C@RvUkt!&rjz#2@co^ z+Mq)SSeac!!OByj9)!cG-b6(&-b96-ySbo%wuB=N zVXY?*B{UUuxE1HN-&AG@AXO%W^D|KM^D{8=iPGhD zu_P?Y%tXO5H2<++g(BkVHyts~UmouyC7bwxrxm0c!V?P*G;s&rn@${Gd?7w~O18gjPWts^sS!j0;L2|tb= zKZtq{fHIkbcvE!6NwH`rOhB>i_J?M^+?;F%y!W*>-)@@2f)fjy)w*l(Q9LljvD?2W zmo#?>T4RUeA0x=nZmXb;L+?iEg`lP4v1W1Ls$_BC1=!K^7w;n+8fGcR!%gc2hTMxo z^t~G44gYO`{tv{Fm#0eh-f01!4kvOFs)2JL2LG!w!g#?G5?Y*kp3fg{DA?@*@8|WK z&rjzE+&@uiu~o|EIB{Kb1!`hNCjL&HbSvCxdc6`(*Rvy~Tysi($hn7w zA~+wr1+aeQ;}yyG1jj!~CpUvVwks%%D0`6j&ttHkaYxVN-HPgy#?6S%;>B*o4@map zK$S-XzBfjnAjZt&S!QfYA}`~0$d`R`=`G-WPui|i^dR{)hbO{dkoWlxX7NDD6BfTL zphf*Yi3RqXDyTfJmfDD_SA~&COs9%!e;7{))qEu=ecL)IV3)EuPEOZc5w2ex9YTVC zK~P8(Y09u@MLX~K2qrIGu1N&Cn4p36G7hhbprJ=;uE}!Uzpx2(0|*+>FYWeSqmBfg zzGa*!QrS3^U%a2V`ZbV2Cb2^vq9(&FrzrIm!d{dYvd(z-Hjm5Bd(y*`NGkZ~5 zLO#vlOA%T#{+q<7X0Z4Wc+Y|Gu(brn>Y?>!XjFcY`IT8U?+bGtO1@ca{40+T_>_fyd$PjwC=#SwefRsixpV|<4^X}p{N7)-$t_T7*LoD~Y( z>dGpP&C+9cZw>5ZvWt07Vha~;9+Uc`AQ|p2qhj2!Qd~mlQOr2u$Q zW*`w8s^k=UQ9W*veP6}n?E!TWoz{yO4Tg_l!Ov*bpL`COB4?jqKS7fTGOrS~@%uAv zo)x?yon5+KbLx6~0JUWvw>fy(XGMPMA7m&?u3{ZmWw_>;_CEzlzqu4EI>yW~C|BrO zj~ElSkOy+$dmCdYSD>Z;vRjTnn%H4ot`zNS)=;f%B{@_VCjCw<(1F)x%xQTBmwza8 z`r}o8F<}MHXe{ES$Z%SKOvGyJtULVi2XPAUX3T2ndn+R7D0J2?{x{V>20NKKYl5 zI{R;3F7`GWEcOaP8QfVq^jU9Mnq!U(?6{Fzu zEgxT^-64BEnJ-x(w~bNv@6$E5*{Z%5L)0{7{zXG{(w>5xuDYVQ==b^&_Jo-!1JOfn@x z5@gwhDo<}&C#iWX{Hbi3%(6SzVU(EYrm?tpVzP0=!%MKO~w z8h+q}OYA90f<}K@)Q%AgF;&30WhAn*$6CPI_mdf`I1q5Dl4u)Bem_*+V5Xm7n&8VT z4_hUqtZ*2tc53TO(?J_}%?8gfvHLEg9;1K_xMtLy=~>SgNp$qkmFrrM>`M+r+nX7& zyaA9_ZFde$W?ZHqWMRYW9u`!(bv6t&1-nctz5de<=G0HoY_B{2MJ>WR79%iRK}gr* z3YFDf7}MgCD$h^qIuN``=)m!@d6@T;;ZFnU`1otJ^XKg=9q5|<86jS9cm^Hv8iCJk zYY|PL{p6KrYm9Zh^h2mDRvNEL_}3B7*fkY>vSPfMwnW(*hcj>L71#uprvbMF*xZD-bQChMJn@+h7T*( zny`Q(SMxds^&th>&$DiP-?;VE3Ge!-^?q%O{!(zie_`Q@V)nJcox+~aCjGBU%U!%C zukv!!Mx9FcrF-MR7cfMtwM zwi%A#6vMRDlaT1scp_3vc1oBee7I_1p%z3A?N~rPTIQu_-@LB+27FqvHB)QfTHCce!`c>rgZlRq47+tyeWG{eN9%9yAy(HlD zDjwu}xL5ZG46EsxwRsgISMkyHUiu>@fX^W5fp;EyzC$kZkVc<`o*Y6e{wAYA^rtWw zd!q}b@xOd zKAe0^@27zEsmSR(=(l)NP8(spyFKC@3xi7C&2Z`)>1)l4^|fX!N>dbjaNgzs>Lx6T zhw+EE==s~FEsO~yBQHhhx?dS8@A~8Ox=IHyx{pT{&(*-JFeKNUwK z#BJ4j?(PC+6d$&JO3W31P4}gp-{m=3jmS9%4ia5B!;T~$caBmraI=LG4BCm=xOuOz z`#Gnc`E@cPqQx?>Fik`0Jw&o(qCM?4M)Q8h-iP|h8kE49|7(4z9_^TypSElE9VDFq zJVD$lMg)6cY8pCokww2KTr1|xSG{OAXTYN!&=~L!gFWz1l1`IL9?3|b|3?!hru6)p z!q$=7XP@Gx+oY8%4bCJxX|ii1?{6?5_brF!u9J!U^ms<_*Lb~1#PsPN4rZm2lgICXOEcGv(00O9)-8B+?7XUn;fd8 zXq@D;60v;+C0-ciZ*;{F-im)Pg{zGv!AT%PsD5zIbBWdQ5tG9D7ilg8BC8UcT2OtC zOp0#i*CFr0ug+4eRFzf>`s>qZOkjCIKHR78w<4GteoH&It7WoAj0IOfY-(Skc4Y7oW+c{X`qd;l1 z2eAtQG!N2$1d^j}v_)I}x^n#^l;6!^q&Nv-i-p6EHv)zd^?*+WQJ)mG50Xu(>d9jX zZE&I!?O7JFN(EDJKWy;hI6_b^tpw#FKAsAWoI0yas;`(exsRd8m}^8ECKVD)e~uA8 zZQ9@tsL67mj$M6WNwNboY2px$k;VG?&O-hiUkbHm{_xR3Ny$YaCOl1x6sr<|BCfgg z58L*h_pD*o^w@wpIn@8|p_xBBfxJ``xgpeKSXu+i=fw{bzOn=LV)Fs)wKe7#V2^O( z-}{HL*VhC)7DegKFzSdHX{Iv}(^3 z^edt3?k}18e&!WhmK9HQ^FD!Xv0mD9=DzUbqXgsUr#je6@u$!S zoXW?%aQL%3bC~PP1WjM!7+|DUdZ@Mt?<47p<6?ql*mn0`63B=Avi9}+ z!#aP^^TJhufq`BByH79;iqC|a(-v+VajDDJPrNJmW+Cxgnk!bPiP|!{pHeF2buw&b zc-T|jNULlexG(nqz^mR-^fc}5J1OYcF{(ATSK=Q5+N_gc|4=pK7}a;_a1MsLJ(bOM zhYp$u#2nDieH0`v^`wwLJC)VO%on&~v0Sb){)r3cZ1?_091i`DIP~WRi9>dj6-uWC zsZr~lQ48~p@#NnoU}hf0N4|nzPls!ZdPJv|ATtCxy_JSF=03b@ZH{>M0nI~1S`B^1 zH9v7f3~aEb){mDV;_gsrNGX^72~VaH)~=Aj9k_i0cf>R>IRo;J^S=MG8y@b5vme$I z?f#hWQbLWbw<$kSSW%u$Uj(60G+BK%kxV9H#pDfD{K!4+kkmqJX0ZCjp~cd0?QN`; z)*C)NEid|CczAU!A5`u~J=Lu2GM*OYoDsvXKcia~@+p%l{6&uV%29Q0$j67zPAAoC zIS<|fTMASDHQej@_GC^&{>UMOE3Q|D79%Z^X%IH#f?WQiqvAps`jZ~l7Pe-OCpNS^ ze^lEcIYuq73OShD^3Y=wkdbOaBk>%6d*ts=Iu)Y7qo43Ad)kF+4f#yG+LRh7`=si) z)V!a)_YVcP=vL--+T!-jOFW}lz(C*0SuMkJCjLZ#{*M@` z)GbUK8{`>*bEr>F@^9xOm<0eb&?iJ|u;V;i`9Jl8CVavbP^WwEV0wy-Jc;Sug zC11^P@v^t;W1`>Bw)*3eq9e`?ScsaZ$)rjtn*Ssh54aO>vV0<3s5z|&04%Fp+28IL zRU>;3c&A#$lwV`Fq0~w2Qt4Ukb5OJ1KO**U_pEZr;_n5+mpyhE3B1SI1bIizyO1mU z80-Ye3xi4p*O@?#=mPCEg*BN;zx{*OsZ_Qj)E5&|dfgq+xa9feh?FHt0GzF@FtFyj zZfgDhl(0Y5Md!*=fqY6MCLY;pWJq$~yG_b=WkTS(gU;Q&`kRlEg_G@-v>bk)9PLV} zB#7u3se$cF`H{FFEZg;?>TwDxnOygA+~??Zns)c4<^{Pl_`{ zBy719edCcl^d$@_>ZS<#X=qwb^C+I)ujb&q6Ox_@m#FFMk4wr}mcj_UL=m)k8#oQ$ zon#yOQ6zl`evyUOpO9O3idBYRCSL4uAehLl3@;Kr)7e0SpX-fw`?C3^L_}h$*@QF) zwq&C;d@PkrqA?n{+5A^}kIhAfU-@?{t$7jzgo)d3;rx(^;IWMMk@G0{@yu2UMAeZil+bFwJkjV?)nEv<@dh99Ye`yzSs{W^=YFhWC~H-VA+ zoQ9fSQxMl7g1(j=cfjRpS{iw*!hPQ_?sDxK^hc_=VLMTy9W|+ehc(sAZqYZl zEXcxJjiGM7mnouznns=G31r(^*R6LsrxwvXYN6cghk&t%JE^6rFeh=Vc~lqElRdQn%|)N+hP zfC9i_5ti3F8OMIi zsOB=?>?4xv-Q4yY%5nC6mvGOQl3ouBWj)6w9Y87C4Z0sAi%MA_DypXGS4&J-$PY?; zz&mAZy?V>7XqB>(GDP-KM=Vq4+j{2aNYp`+ZdZpzDq?luDvqzTi1vEc`hgS1dWUSE z5A&0uiI@+qr%rYl_ZrWnhvDaD?5GKLE7<3}A3X_Xh^qMetKGPTYG^@J+!qzt=e;{a zl`r-W{6*=9*n}&-80)%0v{K)1V-NwZ(m}dzHle-ZkvyJE7xyL}OvMb$;r^q~gal1~ z(N#QX&UIsbLgNa{&C&j!IB09jOo*MnsuBpvgVKv7fW>9>V zNtE`dtKB*`Bxz~rRh&i{1(q5skq*LA|Bq4}jDI2fk5c>&2>-v8qD7zk|0u=xA{5j@ zZUf?d&s6YQhBsjka48b{c{E}p7IIHEy2|=Yrl7XTK@7TQLN=_k|cgJ!N0IpyYcRDYE zR;KPa0LyK1-P7jJ0>}n23av7IYorJU#eHLnCOM*5rS0eH2t)DnCh$MBv2zgrp%Yk2 zFqc&we?Hq2s`t8{WrW0y6AO zcsFQ9H0^AYg}K~mv7jGX?uKU2K)M&Epuj&4HY;}@QN!7)Qc*Lth52F1Gv6c~ou|N~ z&9rfca_v8lU#B9dDqq8dfPWTi2dl50>CJE=wauIJLawA!nhoJLLs$DtcJVfcXIWlW z^qgbu83ReFv&^x9YI)%#6a5?qV7)CJ$I^4UK)`I0{$IYxF}>**RVF&r1(I{RuWM1w zUjv*```_gtdEnRdf!h(~Je>Vrd1-jga3bCW7FPcujE&e~xTO0;qbq`^NC-LBOLsYZ zZBoirrKkaQrJb9gj{g6Fj2lGvvG?UF_BH1Xfwq1buN5{bT*v~(UdB78MS=#(9jJKBH7)KA+LRX?6l zU1Q;{jA!~^#6gy^6(Ua)x2LDUu{(Z}L7Kibg`O7pnT6h;T3vW2x7`?yeau)=HN}s% zY%hPVl<0L4NkKo}V2g%(e8(?mp-Siqn@eMQBTCJ0380zoE3tDzyNG3Ps5#WAT?Ul{ zMJ)dPM>S6We^uj05*Yf2QE@Zp9=28WqiI<)xse?3M=|@06F!srq83yPUd1V48B>(b zQRCRCf$cNdc!R7HKEp>Zynw4>Xj=l(o^rE8nNrVB&mEQ~swM9b=Pv)$2O6g=g$elT zm;xCGJqDFp86OhY{IT`0isvYiER(*+%#umAG8wawy0Bh8OF^6J}d3vE-YNsBr zBB_(IY-&L<)BI*Ie^m~O z`kQ{CvyV|GwSTZf{AMZryzj<{UP_+@9d+{pqKkzVAErX=Bz&FjH2LczkpNalq2r(* zRtWX7(R^y5Ung_9u*30AS-Lo}TsJ-cKL`n1>&d+*gu@s1-^0==Mmm$1j}p7hBdzSk zE-m(lrE^+~?3Z@%l=$YBOWK%CnVfaFMeAQ=lP}_3e3J~h1 z9izk;D}9Lzk6&YNj$$~A(h`n@qcJqV48zWu?fjALjT*rR8A#s6?qAszNEh=mVYiaL zr4Hlzd=iIAI~<{mW4Q@h=E^b%KDb;^8W;Y>U{jX!l7inLuS3^TVc`sJD* zs6hK1qOc`Dyv6n+B+p=cs^l@w#DXkf`>Pxv7;_(LXqxu}DN|A#_Co6nUI=Jau)fRSeawG6*D{5S-Bsmbs4 z!P9|oqn+yg3gJGAw%zh0jCv=FX=XN~+Q0Q(x2M9HhVXJqUzB4TuH>1L6ggW>8ou92 zlaDkgwrJGaq7~lka8uYDP0n6eyNPqr!umKi=MES8a6e~O_XSy;u%9x<+>;YyT}iO5 zsjm{YR$fSaT!n1tw(U5Y$lCvm-b#SpUo{L3K7d5~ExuzUbSp%oUA2##zY`53LccU2 zdN5*Y6(PBuP>B?>Ga{Ho^vQaOe`sY>KgfVP!pKdoV%bMhY-h3(?;vp_>3>^K1_=aZ z2QcJA5%-+5ZyjVpsySy8Oc`3VkMaqV5zl{neON>D`=p5W5{=BvFCLh`{M6#5z|FOK^}nlAoq!t&%+VV?Z;W%N;VNmHfgV$aiz3^GOK7}7W#SP#J;tVVqFwd@xMt_ej| z=dlDkdrvW*Sn25%Rp&Xz+<$kbSwf3!9T)8gPISpp5U0}$>HQZrLQk#6P0>3%#+D`F zjtO~}88`*iVzg(VlR>o*Ie|ChK0lR4foKUE&Qq_-M?8*k$>vI@Vi6YsnSN7ym@cB# z!1p3|UkBs05ok~FlJcjC=Vj*_5tLE)Du;O*OKfNSXsm)an!lXAN2`-57U2TyeB=>w zk8w~RIHeI9nbTN*f7)lVcWDV|T#p10X6ejk^tbB`(c~?Il;;>!wPRNJU=x#lju+bT z7#o`K5%lSS(FwFSXpa_B_~Yy9Q)p1cVaDjAs4phaJZ+COP#v|tlL#1bcQ~kr`NO@P zs|U?6dA^n1{#}h9E}ZeJrxm8!-5qIb=KA~bMa~a75ye}Pdy;`c^bx9{4w zg!mA)G~2=69ZyE7ht&IDSJ5Ov*q!`*#wyFD&EmXqpvKabeJFCmo#|qWEhzW866|=J zpwx0H{Xje%x}eViDnKzS4<66$XgUIwJs)oDKl2;v!qg>PS;w65DNrnkAVXQpOc3rj z^8BxpzZ)4rgPwO0LlN_YRgqqyU~@8jn5(gIiG^tXYNbv>TOwK4m~rU6ROs`l{t5@$ zP7SJua{=$=Oq+9VHPgenL_GuZ?r;I_$zYJ8v4-lU?vDGh6Vi%8z3`rU8ja=aOO)W6 zsbniQb?_1Nq67+r0raNxEVJJvUWrE4cbDXJo$(jmM}>OHL-4A*db)ReNTamP{o&jF3{S_1$ya?qFR68=|x#XTB;Rl>QD(!JxebkLScZWro+StHZ zf!EojwYWz|P}7fc!)PKGi#|eLZ1Tn$r+HC?wM)yTjIs;GIEbpByF_2 zUawKr%#+pkSy3Emv^|1Nok<2kt@5Cz1a{lRIZze`1SHL`CM)-}s34l7siB0&L5}&X@K0gM%EGq=OdM}Gos5HD zBy*f?WJ1R%g?M&wEEbUzEGpkzVD%IcKTbRu0+j^)cR$(3SD?`~zGPCr31rUc`rCdK zn@<(AAAAeE5hwW7f7K?R_-)hP-*^IKB-OmAN0H=3UD^=W_Qpn$00V_$NsH`JFDh|N zNcNxbC|HP7>jlK#x$gM9JTe@dkym!VExjb`t; zJtS1dC<7=Ip0!aC8aINr*-&P5pnoR|z?EdG&&hl6`jTQb$+_T0o=txJj;BgoLB`>z z>hOgeKwrYCTcD1r+vR-P(Y0>n4O-TZRsMGE4Fx$|L(8l3RM6rk>8@L!?+TvPo;BG{ zNKQD-TAPYBg7Z=|5E)`ua4R31`0K2((@t{STkO{Q2o)KpEDv|Uu4I^B=YN6|y57Zj zrxe{+VaNf_Aji!(xv(S7KKRFvxC4})P0YTU3{?MFeEP!HJOPgfif`Af$-6{_7q<9& z!6Ha`l`B}nKKSX*3+zz4bPu;Q+#rLtN4 zy_q!; z7=^BZnF`O3RFx&ZZcF^za2frg9}@0e4+VE*?Z&k(_l;*$8_k*KG0OPIe6zPqA~ljD zI~C#|0Y1599o9Z|K$7dNgUqtKp4;>$e>*C)KT0Y^(u2fd)vYZ?WWj23P7#N{li|vK zYEVWhtU{O7~Z89U1AX}&0zwpxhwxAhs@rR`K= z(>zCTl?4+KwrG*Dn2SI>B;C1b1iT_X^HsVt9h_KRz^^rMavYz#W_W2$@44hN0)JTv zB7TSPX{|TH$#s0VNhGY0-ot@}<(JYF2UYLYkEyvM+ghPa4DVm*58c8E-6?Byzon|3 z*IzN2agSLZeYyIN9}x4o5bs_2@3LfxjWZ>O+2=G1Zp4t4fpLwZ^=-DqP#eYeF>X>$ zI*4d7tVfAr)-fd?{vMTR@yCTl1akQf3<;ik&(%lOSIM$nOAmjkSw10|(c;PG<^s_P zV(kUUnd4U}xIN;^@c`JS?8>JfUes?N=+urEU`{F1EP0I#8VL0$?y(rr^x3wxGTbZ~ zvgtV($uoj+#@HEY3pn1rTno84zxOyvJH4@g(Kh8H|Gmw9KJDw{I7ab>9$HoG1Mh`S zZEwLxdNe}7NAa_10M(KqrB(aM6@H|%hnuXET838(&XQ|Oe8@b;PZW?yWs1PSU?0UH ztlfjs7X$d$F38TEJZ$=8TlsO;1ZyPt>;AV3*b~LoWm_IX;hdnZF6TXEdX9efiu)O$ zflZ`uw?&ZEf%1}|)!?xJd4|Vk1`)<$rwsr3x@I*cYmeDzkShjalo0N*;Mn6BOu`H_ z3|?y7TrusqF|Fh}owNjVv93}zj%orm)VDwJ8C-#t2eQL$7*niZ$=lZPX`F*ga#j9sx z0sBC1bcT|E*)pKRTYSuGqLcXLd};o>m(_U$xkswbT|7q zYghFb>cHAtQ|>FchkW@XJ|;soMXwvP)Y7>#!rpE>3X`PC*zC(Iy7BDnnv7by^ltl@ zMcOaekGnxKG5>;5im>bJ(j-|=y&HSgt;d&Cj@htmqMMtq?{YVr1ce=f6eX9KIiJKK zEjx$jeH~tQmrj6$gYg_UIf7Y)3ZGxT7rIcaX4gI#3FGDx+a7ysSVp7FpjXcYQcWkw zaQuY{cL*VtmdiZX39LN&P)I%IWVqYlJMB7VktFq;4JpcYi*n5FziL^FXP99OdjD{{ z;AHoSo*WYhzPju-boqye2Jpb6sI-+cwmmAhCI7jTCQ3SDlUDQ_rCI;>PGTompRZ$} z;ExpgUltwgPFLDWL$*vAIe|M?&4_i16__gnff+-07Q_86N#Bbr1asXx|6VD*+*L@J zJcfZ7FXWK}m&9F{9rfp5i1xUZ^(Jd?pJ&B7s``!irSU7F$Q~2aZvQ-2Lw2%Y*?4XA z1}Yn3C}$N0q$FtA(0@md=Besf>WN*4sY=?EeZv(x;E5HX%e-c*E}l6l)>&FIYkpuU zhZ&rM7EE>k+(tPekPOV zY24*W$xpZ^dOpfUQl7=!yS$H^O4C)CqWe;g8ofq`ugD&Nl>6sO%*7u4@lOYWD@Hks zZ2XtxXx058x01J5Oh=pw)@bPBFC!-R>~r+q=l=WbxGKqR+9Kb5s_8Oyyl?7akxv)w zZ9S{6Ko%^}9xU9vY8O|)TN3vN_kS`-ho$ZrMnUF%gb5PBvrO|seYah|odZW_aixSh zb?TPyk3Y_I&JoIkX}h6DoQV^r4-^j!$*a0D_0mlDY}VRK6p?g8el3#sI&HZ^fd8ieL7ysf%9<90<{l+j7IPeXM$TKyIvIpyCb0HrH1I%6Uh) zCeZV({Z$V+NZSh(Qj8JBG$cb~ce&(nk4MpQ>_aFOt@xW!SnHwj-(P(;JI`#yWMcmx z0IEP$zfmu7u>5R4yT^lgoyU&+K6s~=Q7T*Cb5XAyd4M~YPzV1jY7}ETu`a9ig-dKD zYhL2pI=ZB4NPa#-uPx&I5frlS6;5}ZMZWC{B+r5P-4eaOlN1uXnaIl`4v9>lt*lna zt(pA{5o~iPh)3f=J7et$PtKTLn`w_t@Qrh1x}?)CsfozL?nn^RY5-69d5c9F6=6tf z6L-+)$ksRYT?k2K`u@|$vdHg(DZ0*EfT*l+lXUOG$eqW?+tn*nOCt2#pnLQ^R|K+z zbz5h(+w%Rvfe?&Cvh~b}@LtRJ;~^judBxailP1iAP7CWW=R7ID-lfkh1|QI(A#-=Zn6)YB;H= zrl}jP9GHE@JuzE172cqktpXur$KQ~lDjvZ2o)PT>8fx_&pF!jb7Wu~+i&1XlZ zIuelF4F-&p!&Ucg*7zCJbz!(4s4k7I+SL!Fi}8-j3e8IV_I&LwjWKkn-WLq5k5|G1 zh~0)$FWOdi$!LlGQWT4@*(iRB-Rwq~{u%P6KhPH(p1FMu@h8JeVU{&nY6*~fC91bJ zQ}I(h%&cv)dj?4_9E>nt)_ak{0)ObBZciBNIm90+Iz8_c3Q|rui zPg{mY^iPl262U+Hb1VMojeSi0(<$+rjlVOf zdgi|96ZUW?$_tlF*WVnc(SK*^t@~3y)uX&7uUx^CsxBx|op2NFW>X^gg6aByItIo+ zkI0ZiWXREFxO=TglzZqARFKTUCLr~wf7 zk|G0+4Qy(!|7#r=YA`F_y9It8_syqMV1CvK-c>x+z!06NGwsONfix_cO!M&+czLe9 zc0|0zlYZw^(!Fs=5b5%WwGxT7>d1`7HcQP(hJ{L zBHz8X zxrFig{PW~I34Jz+ z2aLy_3v@41e`DM|R&@^FJw{!K=s)Lqv;2_~PCd2{(!VT%cMWr+rqacuMm=vvvh|Pc zW^j1jQ*?huWS1kAr_xJ8a{7U{CUbDsWjdVLyI`Bb`0=ZYAUfluH?4dkv)vh5kLVaL zREmz9m(UGX-b`Z-Ie6mz<@%T(T^-<-(It}5NW?3&fGj=?NHT;kc6Gc#HcMmIIz# zjqPvKiRdI#%9EaxuPu?zWRcIjah(#dP^aDkx&v$e{ZA(_dLl#M3HSxOZf@bqFVv(H z`f{aBtDfIi!04Ieo^cZy9{!U&m9OafOrh&Mn1>&2 zL()9EC*Ab~^XKwG8z5=j-{c*j*WD%%C#flYV}Z zp(PzjOX_j=8(S8OWa|faOy%%(<4$j`l=OV*3VLcr#M2G8dlXOu0A1AJ(ti7bd z#p;u^U?*7od-1Bou-f3n^4Ue7(*+=GW zAI(QLLNUfir<=;(-zb00w|hi6Xm#tU6raNAORsBk?}DhfQN}WBA0kYHJ@Bfapk64Jjw`e1yUbDf%t) zr6=3Lkh;ZgFr?UHlf6E4Bam1|Adu6K$6C$z|IocaVjQKyP3XXeFa@3VFXqDa<4nhR zossOm3i*0IBS5lriJ&G+=lcW8SkJrd@YR7V(w4wN-6$l&7>FA9Cp(-GlC7`ZrXPb- zQ|TC_s$d17F+ilXNe~=1jDa7Iy@j@)CM`kzkoU~emC2UUfTV*FRgs8Yi}~2g=-JH? z;>Waqf8e9qA41v7V0q^8p_{`Re;HM}H?#A1JF`G<;=?V_B(Ok#m`t~O-GszhH1L;{tb-(*{y5H-MvK^vVa4Q~7U7qF0k=GLtsBn%J{*SFeRTJpD}+(vFX6$I@Ut_&PJ8zJDZ4sH`xdKY{g?9mp5=T_>`Yq<`NjRkPaZGvf_p z_P)siz&-c~YUJ3qc$6eCMWL3gmsGHyd6B&Y(hy1Z8&f7 zM5V&?s14k!w9LPsGoa=C8b?i+RAS$1DI=6{8k55o{#)i(LB`X##jL!!&yCjGEY`qhMojr!H1Yr^!ayB{_i z@4sBrX8mgV#fr<+uju-`GWz{ch}n1*q3o~3&`9Im_aJ$+f}|W9k{=@fLle=tqo}57 zDDr&6BYwXpy)e(H5dX1HXd~2u#tR&YLS! zi$F8{j~IOz8p+n&YZxc4nt?DcrbVDy?e4v!&AR)>FfpTC(B*J*b4Aqqxyz&H-?mM^ zZKM9BSV8~d+WoimuWJVC^{>JSzeE2zmiWJ=f0Z^>{I~S4n@sXAGijvy6*UO-gJweP zV%-FTkmr(T@}vjTL=_xEwthE2-*2ho)oW?v962JxL~}{IAn2Rv$Quq9iR2#F04Rkk z?ZE6?=p8}X`d3;I+!Fa5Nr&;t$LJX30AfvO0P;i{)6I3{xa1y5AsXqiEGImVK@o|L z9QACZCUZ;sLrvmMeqI z^ecBqxZ`;?xjuLk(N2nbAYac{Ezm8?Ep(9uyW`Zm%a!B<$!CcoC0l=}oWfDeeTLx@ zS*s%ZN7Xs={s}y;g#2^)~LUA63fXH=!>$FmVybDI)*{rz73N%$Y5{#4kjh5q!@ zD6&rE)UZ|(^BU1g2P<>^N1XgbYV>j4X$l)E% za)y85jzhj>^j+_P;A9Q`o<=Ek0ja!DFv^CcUF?3?KEdm^>5xXG5S}Ced%XH74NZ-; zQA`h3kxMlJP4KuZ0xsI*QQ0yCY42Q0rcDf9rLV0Sr7!>#n~Y>b~;W2H?*p zwP)HmuJlrU@%Dh=1(+B4_7jg!;oyGw8NvItMc);(Y{>VN9r?Ox_?P!lbYk~ty;!G5 zLVTwUeNqdA;?`s;*ZW5|aQNS~(P@SjP?Mrx$;~9>-pZ#51=6Ho? zkk@J}JCRnpZzHpfRtAvQq&^k$x`YowUi<0aiGhQFsBFFaHi~*peu__jT&@J(Z)Y6b zitIKHZYeGCFWi781 zUDqi=Tj;fA8i^8SnNr881ygigrcgPeSC&+h;W^$nTiWgt-pB1T&ekMk3z_@;NIFFh ziBnn02Z)XY{5z!ohsV(T#Z)~AI|XGwkECBjX+O@r_Z_m!dE;Y3{H>vEK+%y(3Uo=Q zT+(T5yP;X*2X>a770M(Fv#XF*D7SC zB=I32`cyuYyN7gt=kXyR`Xm+wht$Ya#wD!6kXN(5M7$22UQ#)^mT5_-q`+EA{A(di zhpEAN(hKipX!Oe%7Q3A+!Bkj+PFR|V{tZhrkN%w)>DSt!=&%eNoS-9l zPPFKVhIORRHcIjg{(&UO{md0;?x&qCY=GSIWjc!SQToEIf(a3{Z1prh&sAl!9_I7} z&u^Rw?_tx9QL06$2Bn>Px>u$zb|*PUtl1N*gWqRQtQLj0Yl2^@K%S?TQGI81juzP7 z#&k!O8hyn*WY{_)seP~`-M_0ku2aZ17Tv~>$FZM9TSgBKPR_hd+t-8PKH06fAPu9X}_WwpYV!Qq{mBUZuQRODbpxkU_%1yOS zxv2{&H~U&DH-ob@tmwIeQVVv`rXDl^e*Q>haHVCGal*P6zA) zV^=##H$OtN0O2~IiY*`81^LExvEg?Imotp1ny;^e2aD%RgkL!B%lu7^p9tcPuu z7CrpQaIJ?MLOpz3*TbiDJxof19$t0>{>20lK` zj7VzV*H~K3Kb6?bXL(HqCdiJI1(E{fI}?Pmm-WOlQZBu#pT~SwDkETN7UhqlK)3fM zAm6NbvT}fUA(UUTSMc-(xRlsS8EKpwQd*Ld>s8>efJ6r+>zC)bDpBWlwfwY6N0z50 zDG`0@62$%>eu>U)r~HFdtzxplF~aocbc2*&2C`j%?hktePdU(%erHAenULe_y2BJ7 zrn=}Jn(0~;i+oNSO~!=is%&+3@o`o5uzc4MKbnf}Qx#;Dxlnr|TVo$-!C4q%UWRlE z59kOifsYR?hWjD82A;sj&ilf70!OziiF4G+C|}KTcPnNo}z#PN%a03zzVF7Wv~KivAXLtDyN&LIDr>lIHM-P2WZ;6mVfZ# zb#uzxQ;^(qW*W<_0|a`OFqcCU<{q?9;5}_2+b=mr!GCsu<`nr$((mu1ny(}K5c72g)YDaDysn}YcXuCV zzTVy^l~=#V@iD}FRXVkbmsV*z|$E@T7S;_Umu4EaX0)%q*m0y$sF3-RFx;z)JaQ6d#j@^uZ$uic&pQCYLg0()(|wY|>F< z3j8*vz^59S*jA`aY@onbtAA4x9F-Aeg+|*&H&n(?GUR$t&zHrR&jsKt+3I_q;c;ky)yPD$(D6Wu!`@~k{1rU`uTi9zZw`s1VMDiMNRX{d_W8n4 zJn;MfHj}17^-nbyT?l)uW7-Fv8+C27jUesR)1w%VxF4m}%^pwm3ene5lzTYumt*&l z?=n@ceXGdVA-T_?JMuYEs==Qep!)5KwhSHk=Pm0Le22xrZyrIYTphXjWG0hK+7687 ze6=fW*X(;BsOGBq#(JL|+Y!lqF8*UOh;=&?>(#LJW6tBZ5C5HC2lyh(c@uu~{{ISB zSzl~yh2Q+O|9|++ueyAG^T{*+&+(f#Cs6xeDfkch&Hq6Q>ck3a!EfH{>PYrF6Z_$tJ*xfipKzJ4pW31| z!Q-1QpUb@R8W?-wVu2Z#`78A4=?evBT;><5Wiu}GiP7YcPGQf*3Sy;fyQY}Ke;#45 zQL2I_Hp-^P864j8(dysFW&Yd1HgTChf4N-dewEC8^M#65EtI5&RxOmcmTW+}{cm(k zl>LwGdn!M2?yZ-}k9_h2i2BOCOF4`xLM~8a7pRPXu(c5d%#WAPU#s9N&Nl&e&O?m2 zeBlTRwF9YYvh`dEb^N`3m!>lVQ90lHS)^kUl8*(h;9*uDAR;!H01!hM zPsdR1*RhhX)cw6t$53u`d8phxMuzg0>;PG<3&hmYjnJY3vzNtq(oZF8Y`9B8Y`A_M z8}3RS8}3Fu8*cyjQVsD2A6XNjyGcK2eC&ZZMNyDvrybID#?jf8r=ugE!bW<5qp+57 zQwx1L75R!%li#dTlk4!M4ho*17(e+{S!D;@oiyt4;BCp(47TFI`P#@8(cJAk$PKD@ zNk^HgEmG2}_-t==QEyQ*GMFqDvIM3Cdl>}eHMs#^NA!t~LSmE@X9|@om>Vi>_w0LJ z(if=agjJNpc$+BY#@jQOjEj#K<<9Y*^r=Z?6xxYWY<#c_lA1+nFK&OfLP643*>a|X z7t?Bm7e2bAD1mjNNmBG0>*3({IIuCa`RM{ zHISr{o0rh@tzLNcg;w~@C+YdkQ(N+z+jRWqc0Ip2r}CSRzEl8>Az$FNw;A}&ZISuS zPtmDy-i%E_{|x!ky$vZm^4U|~N^IRpnC3+0O{}*d2)g%?a7wD zW`yPxx+vQ>!6r(R94JeuEQrrsGR-j}+m|M)G`Zfh3m1se-fa0kUQDZ>T_A>tnKxZ1 z;6yTO_KMOTQ96Pxw*n+S&tk(Zh>Pn&#KkKZxAY_+@0{isA^K=_E{gxPj{;&{IVjkU z)GZy!N&?@dMttCE)=6TEf{$7OrJbw8OcKO8Hj9hp5^ zRKtt1_0Hx{$A3w7HYs_n(zaSxFb4ThH}8z?2;}8^0N+-WPKZ(?j-Rns!JD{dMF;Ly zL?&4a1S_mj;2bwn;QYCXu3z#3{vpYX0_S)LXKDyTu*x~F@7|~lM6`k9h|)`o z%1W*eoCfQ3Brm4z5?*M!peXtNz*2GwE1HQK8sGgCESH$;*=aij`T2{Aa<8vP14Im_ z!hU(mC4G+m;yR}w?*VtdOCAMu-VcZ@I=Qk@9T}kUuE#&$%xJt@8yJvVTMsU2`|#S> zj`IV#K;OM9AnGZ~zhV^S`qk}HYDDS0i|7YGWD^ahouViseU7?p@3%tPn;hkCcS$=% z3A?1vT%HSzp!|Z4p!`V}5jAc9>@f`Xk0Pq?I&Wyz5!}1&ttu9M)5z|%4f>k4>&mAC z+0d?|fh_pHL6i;zhBedpC9YbwTEUgeR;&Ev6(=hU{N&3|RscWwpWu7oCtpJUWci6F zD=vdy_{W_Um&q^O+&Vw`Myem|rS{1_rXSQX{h&?{O((5j=yEh!i0B74rXSdueh|;} zg9JVbKY1cMt!-+K3)9@}jLZaBwBvcoPhQOU$^E+vIV8t54}6aM(5mv24|%S<1wZ*I z##nv61wT21=(zFM0v)zx&rY$FpPb=6<{ViX;wRs#&p3PW(@o)oNOg2l?=w5X_0Nzm zefvH*!guU59O3$xTJV!wfuB6SB|rIUmi+{VK{4s4M0OT882I(sb~fajCe8DuMrV@G z2II2j;XLpFpAw~7U?DHHFpeGwd;9&OJUo`z7qbV$-d(F<%}x2OfWtcmlH+rDtcp3w zoNh&q98(7J24T@e3!}_okaN4UrR~`R>Rg`lF~YNHmIw^wWo$g@#1qrL6g)g5r>XhQ znk7_DN{Y|+O-r)5d{-xBm3>PNSnET3$pL%)=)Ea?^0DNz$x2`-sHhiscX#qdR&q5t zV86}x2m13NXjW145Q&Z{q7>pL-U!#(X7MQP^eh{a_PV6%UENjUHrre69!|{p zBv;yzxkY4iA5fny)wu>Vx@sDSW?x%}JdH7PMv1cPLWWR(kJPzczCW<+qN2e3If$g% zz_S;1C&Nxr`Yvn{G2K}I9mO{PpYJPFpyc+rg0jpU@#7)iYxYwO9{fFX?bP5C-(SwY z`qK8x*jEEPn+*6T|0RC*uBEN=vp?TI9Nq8e&lTqU>@|T1{OpN87nt+2&zNk&&;C@P z6@K<(pFU^C&;EGbCR2X)8v{}K**n!#{9nb-zWkIaKYQ6E#?OAtsz**(|6{@b5qB%DtM~8o;jz+QSlV49agZP8 zk$nH9HHz?IIT^TS!0HHVKjL@|Md`vncbajzo&9K*I#A|r; zDuArXU$S-9vp%k>moAL@<__BF^bJ@C2ubJhQXXQV|Ng2VMCO!(Wb0EWd@7Nq=s@bS z$oJ#1hJu9A)n|mRq!XM(LZ`jf8PB(nFrv@zR8=&eUpLcDl8%2&bo_;KivJ()9&LvI z-(Gn3U5fvI3Q+=p_QJC-Qvv|wbJ>xUgoM2SMj_NA3Bm1IGav@ieo|0M~w1p=cj^d==H5`qKN+x^_$C^M}|^4b*-b3EAi; zS2O!*C9|JYdQqaCmsJa877NGS#S3L$^13Tz(l#w8vVkrV(Scx3a&FCsaLf)xQ53ok zmUMhu(ayJ2*s2gb(Z7lxXKz6=auU4d413Fuhp^Z3=q@kkLWaPdNZzbw2;6N5uBr!R zD(00{3X*#s{jPxK6tbiNmUowgzrF;|-~W!_+e_cZX50X@0543No7AQ-i zX+H)>&*bmuY{>}$c&d8qN~*W6HZutI&yX+uo$X){{$snrAk@EPen6S&v-r@Kh=-P$ zN*l=3;Xet_uBQ5v?hJjNg6L`3U&k!%h@L!tY)@)*Qck@3~g+yHC|TXNKQBciSf2 z@1pL}=3w4eyc@2>EYk2}=eUe>GooJj^UifFqyFC)Rw>N?_SglbRh94M&5>2Ur=kLo zUAF$bc$KOCd|OpC{rT*sX!VM{cT60tI3CWtXQPyLv{{j~{&8L_cnPFPeT_^^d6fv5sHw zTufW|^@OrHdVV(KQ921rJH*f>Pf0NzwouI(_MiFee!I%A=ky~f7C=aBwV4k4Alx)> zm69clRwjwQ+pa$kA#%_@a>)h;k-J5Z`32ghPc3LS9Oe0by!>mXT)QnQ;BjdTGwvZis$#~?t$r~9e~Bi(xSBe!s3;d2%_RM z$C;qp_>iD66p1&jPFOs_!h}quse2(wFN8_DPmA_Pl5`M$qd2;xC;3Q{qT?GBJ-)rS zNsAiDBb%TE-Tk%w!r~RYzUxVkdwJHFBsAbKk{@kE(ouBo7!bf*yF=qSl4Ea0(m`hb zd_}Drdl>84&P+!hr*6753x?%!Qu7D4vpo1a5&j;p*+JAU%5)UgW;%*3?C4D_hUocURn2X{rz|kR|5B-e>xHuO zbR$U+yl=rorZyPOF9K`pDxTV3BGDP(8;WK#8YAC4JN@Qg^rA{UnJzR(OwM&AQC*&q zof3l$0NI2(@En2JMl>H{w}}pCZKeZRC_1YIb0Uc%DP%gFLRV+J5pY{YQ9qB1&%hAx z-&dd_ePlwSM(H7)O&4PGb#30HN7Qb0Ow~6vTMq5l8FoYT9|rG_YURDXE}E4$%FN0m z=R+MmAF8N*x0Rg_8`=4=k;Mq;y*C7aYG#C0?hl`% z@Qu`>WK>vq^H7Toy4N#^xS%60E2ggY;Po6#~v-vE_dM#c7|Zs!k9eIjLB4b zS=wMsUdgh;5sSMpEElquZKQkIRx@K#{|x!kCv66c>50t-W76ES>M)Tc^bjs(xCf;5nl%=nNjbxV%Eq;r|NH{v)Oh@jdr#I%vRy zycsm$;GGp3_Nx~E3gOzRvFGtfwt6NM0{-6o)2kE)qQ|r*Z*_1S<9~yRtV7UC3L)sV z0|Y&apLf`z!(C+;Vka&n7BYAw*IQ^#reEcA8btY=i2YF7B#pannXtGY&v7aj3r*~b z`}(QL9OYlS!1$NOBX7MsMP;(oA*6rI8TgJi0N)WiUur9qz+a&N%6z=`2eN(l@qoez za}#b!sQmskoR}Ztmjd~`^LWa?vTg=#asjXAV0jO?Z!;0;79vuYDEc zMh&d_t+sM@#HuGiB91*!p-_%{l^2vQw3xIy1}65|H_kC0&%7Go ztNMiQRKdW#f59YvtY%0++CKCQXa%x$^S^v5A+$c2+;goyn5?M;sV(XnX{f8^_OkJf zu!hfCY7RWz!I zRFx{ilU@u}v?Eot^W){!6*~NuSvHimhY}>UN4_h``rA=t#g%(n3c)ab0eB()&XyAw zPQ$-l3Ofy*^hzzbBj6e$Rp+b+$EbcOJ(B~pf9zX^vr*1<@yy|s8bcjkIW0j) zWb5HSn%r2o8H=Qic;Jo;O5~IE-PglU)|!jj{MkVDJHs3o9jP=v=)PTdt~EE2&hNy| zwS2#NvgPWAIW(CQX`-Ceh>M1=RqzXI=)Q9cQ(yF(&KpoLL+GgeAiOkn%Q0OlIwNn_ zYtf9n&Movj+WtnaE%DKI?uS+2@+bBba8>PKJa#dKc9un@v)Vbr29I`*u#^93`?fdg z+V|Z*E0jnP(i=~JHSMWs5g}bPLFTG%409Yezq!dAeSQ?F&>yCPRD4j;cKCTGhv)yb z75~SjHuyh!@uv7XDr5uTpC8ij&o{FK9RQeMJ|mS{8V_8xRne|osys_!soo`;q2^?E ztMwnBP(uyYwl#*)Erkp3+w`w0Qy|gOKK5W<-Ek4*3!9KihXGHsO^3VwJ!NykX!+onv?ZeS4 zHyMAY?osQ1z0<@>vb`UES{skE?_LQ%&Spi-e`y&%WZOa}DQz4*>JrEdA-lxM3N?gi zIlfBC_v5j{_3=Yf4K44L2oy4l+QNTR$#YTpZ~ojmzd)V|c7I7D?`{VK0ymX3T8es8 zP_gx+i6YvWD57t?Nya}Y;Iw~{DOH1HtMG9FPz#t~@Gl|VKEoi3Pzm;V>-v@h?pS^G9snz!#*T3Gvf8QYik zZrj_J{nGDhU%;Gy21(S(TvqSC8u@ybyq>~~K5OagDU5zb=*tCO;y8}Xbp!nj96)l9 zc(QLMy3+Q~9u@+q($UYn{t=n)zlc%|Tv$Gge`;EzGSH~6*Se&7#y|tfB}ESBy>gFs zAsm-6EOq>M5YQ|MPv(WA3AbAow$NH6^TMG-+TSMq>tvhyH{mtt-)mp{9sL{XS1|+) zGjvCb{(ZhNa{scte9@6)?BAwp&1Fk;g9!Z#d?=UG#eaXXOnVSm@r$B;d~C-U_iw*r)+M^?}=^as1+hd*DXqmLQ*VS$l8#&oCm{xN)~pQ)I} z$KG@lD=I%p{1p%)qqn-&(b$R1{+Cv;E9MM?+I!4BvW)YjuQ^F}o8D}@Lhq4(sp5ca z`5L}O(Vn${PgCOI@ajpS>-A7{=|`kSz_+lss0!1Wc)M80;iNBgu2gz)xjOg+!wsT$ zWewg`c7C+v$G7*SRcz&SV3t0L%!fM{P&SfdJ*ZEWRU?$$)q`>550;ak6&AnSf%*?i zn|ih1+Fw|FD2C%oo6Z;Ae2uUe^LqaLgVSm`!Mlv{SI%Ml@;`Q`7w9nMaByc4(}py@ zEXI@mP>^)#l`4jYu1oK;1zztCJu>_m4~OKqt3O@K;n5SzmB8Ze9Otv(frr4=8T+B; zeub;~JuXq~27P~1`HLHm*){p%+)TdgX!2G55Jf(v8_4(fg&^O8Pu6mH%j4xr;QMai zlf@mWfG7TG6ma%MGXd2;_5QOP?LSq%_1&V#cSSV$9;5QbQ2D;ty_Unhh7Z**wIe{qheb^P`oA@-ycNdXw?u2qB@K#rj z`$e!@@`Z)fIO_li`Pz{w1|bKV2wB?neek;L1@DVg!r%?82mjDDiiC%76bbuK32PRB zgs<*e%i+()mn#8lSK5P#RJhWO#vc4*bGUGRwtl?-veWsO$fWz!9!0u4qDl7*lw|Ek zrMpnSmcuDTy2*Ab-E;dvy1%!O?w6(r`J{LYExyiJ{EqL;idRC#Z+Z%f-&VJl!#f`}FFq_q zBHxeaAKRed!#7dvq{mb!kuu(so&!~Opm0HaFhxbEkj6O%A=x^NR4DDnP29t)pP^LX6UB5qYu9r4+_-Wja6=r&36xsNZDHIR2fZjsJ=026^Rquth9cQ2xjh`tG{`DC3h|5OAwjD;z!+o_nO65d@~Yr{iSf5jQ}v$?(e$6M zqv<~#sQ%-o`p?fFSxCSd1i0=kb! z5%2>_gZFq52snfYI47@M36$G7PS|3>^>wgf9$#%-F}M6;vQhd=o4T)m=zU@FG7IS9 zcW>V)c=xgMd!KrKkGF+n{Y9{M{6!d317~=Q-*|}s^Q%@4@%6Jo=$C8Oa=2!6ltVms zh1ntg$XBf#;@PzPdr0{cMn^ux(`oT_eq;F;zij0c|8W+Sf3|uphxyTMJjL;rgBujw zt-r|`zVyrRGrW$T;YmogE}TWr@H-whu3Yj8F8#ZDh9{|K_}|+_KEq+0y)OY&SkJ6Z z`CN#9vZP&<{X6ilsQY&kM(wh!=VsYzL`EJt7Cw!m@*qI2p_-7_yz8_ch zHp=(Z7e@K|v+K&%S%n@B-!$5|El$Dn{}z($O(1yKJWe?-Ebeb%`*%9Ncc0dOaT}R@ za%@OGpC;Y(cjj_9@RQbkP7YtyLcXKNO!|-AX52f&!{O&1GWH)J27b0OB;}ejHt5_xMF{OgN935(O= zh~HE4*-63cqr-8{8%+8~E&A#Fp*CUC-=53ittV9#^rtI~lV$x8!x4Y84p#f`PkLbe zkIgm84|z`IuZ22wFNg&qdOxQp)6R*LHU1;Ae^v8Q_OAg)qV8XXlzyqlldymN`2JcB zCypvt0>G!Z#e(P8z|OU7o$)mNHfW}QuIzH=XTdAe&YQ4K)sGT*o<>>pX75Tn^6< zs-5>vPh;m5HiYZ%j9@f>nuo*JK49!Q@(fS=YYY9|4~wj6<^$&#@QNH~TUnsf-|GZ# z2^Y555R$Fq*U#nfu^*^>2zPBE-@ebo^|xXqTkHSe;c(gi7&oe7d|-tpnW=MA1$5eV zytxHSB=vv&5Z>Vis>OKTNVSNKREwi4wZyv?REvLEv`GnjX&J-4 zZhm+ScSFEDzFuyUf1c?`lEyhwmxzwLoJ$rs(w$3+9Cw#A@c>5}ZQi z9whhNa;KJlCq6cv3+0HjJ1&_HJCd!*Q#~y7d&39x{v&${BB!%MWlULIpesWSjfJw# zZOo0{gUHpB$aMw2?J3q;)t}x&s9fOaDO46Yt_bu}qT&lwQ|EelcW|y(v->Ao+5MBP z?Ec9<9e#jNnbTRvzcjKt%lS+0t|O1pp!~-h2v-8c zw@gJj;MZM@Gl-ThCub?9{ZAB|rGyU_6)$Hwni7dC!X zLW}X6f_#1EOitl(>GdtfuWm9OzbQEXdfoU;A61>%{8%2x=0^#eA34a^XW4bV^XE^D$3ZHp|gZUI?-dC63klCL8j z8IR9v`(&XptoGm|?dgg$#19S%-k&;h96r#A4diodAd`@<&!-bpc>Kz>^n88cTRM)m zNpu{O;QkPOxL^naI=PIY1pL@b9itBCh3>{KOfu`j(Us7Jh2~xOqc_5EQv0p=^45P_ z5nvH~3!{4+s5;##**8{i&0xKXvKAarjIJHol8^m1NM@ z=eG$dJl@)ujqjIqe3KrhO)5I+xJ#y{1Fd@x8j6u|HE=_NP$UO_Z&l z{i#4>Vi0BPJvS%uF1g1(jeJ42wl8C&to3HboXZ;77rVAelKYI3Y#SUV$*2EfQa*`de<8^|b@TX8n+(EoXhrtjij? zZf%p~KBFXeg-deI!}Kdnl9X9(Uw<@Ow2iL6*Q{)~K8fKtyfL=L`a{UqXZg4k9?!Yb zxc&~0qa%g<)c>unKh*a1m(R|}FJq#P-xr;Yy@tYiZHon`Y=8;BPd1(KpDv7cJ~kI# z)+mZ?k>{=TAdk~r9=RdX0-RCU_HpdK{-O6lKR$Yz>Blw;$Kg-fUABJwa8q+M{g`@2 zE9it-KT@@SdDZ^4w6LF?#Qq&a?BDnn_EYf~I%}M`f4t6qazzXZ4ht@wCE}`m;HJ9($g=UjB8C{(z`Qfh4 zekZ}_C(3U+#%uYrYbgX-0?VI`XZf?_e^0TE6Ut^Wps_^imH+bPxg37@&?*M}qQ!a` zdy}s##HY*pY3xb9!g%BxV;6nHY$)x^1)Y%eRaSC+z^7)$(`%@nX5Kv%$<}9l1zZ*F znj`qkt~E-i_{q% z_oUxheJAA$M7CfDBp2Ioqqjm4D!VPQd*<0V;f3+MM)wFTc-49qygIIxhrUs^T1IF_ zp0CtDC+p0tE{Q|2ep)078(G-Cba=J+WCobrO8J+4`9hQC#HXOur_}9FKXNE$%>)36y}&f4|Za(SKi3 z9LEXXu@>;$cLAS$GL27{G$}%v&7$XgU!ejo0V$VXBjvIq?*Vt0_pFT9M;x6rmTbm-ihKoY9s;7{2klObzR4DWXc_vTqPpkZD zXyO&i4m~ zTx`SrA`8WzNJ7#yvf)poaHmMUKmS*XFCXK6Aip$iF7k<46yO*WFUCT}Depo{y4tAdg~mKZxFUP0ufwUQjd-rFEr6=a>}@ z$xxx9(`nInkfKM07Y$w*kJ7?u5p_cELLoNHVJsb`u zx2#3ONXW6QRd6Ss<~xi7e@+?iNni4wA=zOtT>p{AIj%;s_33Py0CoFqpms15n)RcJ_i(va(t&AQ9{THqazM7tKaHOdsD z^J{XH`_*dFZd~CTQi!0yqT=(6U9nlAwjj}Ol9lAM82^2%VYX$4%1(A*k!Cjo&jDCiBa=Y$?6rB?zB+Y%S)NU7M=`<@GJ(u zezlW+)s!i085OJMx4@H?9XKvOqh`BJ*fOeJenx2%S1pwFCxya?eH8Wv z{yrs?6*0=E@$g+uwJkr(TP>7*2Of*Z&Swc*j=T1Mo1ON>Gw%FMDbsNaIkq-3>_)PS z=VwZyBPl;q%5@CRmvSA0w8qKS`+RdbTw6you(ld9u$D5qre*Y9b|eT}iX68jD;ZnK zTY=LSrpr+Ld4{HrZ(j+RhCjtmfrI8aoB8Z^TaV`FxT>Dao;j|wXUO?7o?0|HRB_1z z#YMKh`P^K(KCY@;r6eE2xn~YR^2&IYywd&M@Z=gsk=DWG;qXT{)BKh3yzcUw@Kjg| zi@sX2%T#TSvR(F~yUf;?VVC(E@^F4!H7Jxt+On|en_J)E$I`-bk%z-GqLg*r=GG4) zQyisL~3|apC}gZ9>F0 z+#f`q=Gcs?SdQad!u`iw(kJ488kh7b*|=*Ohllk1ZK+I9;0kLIc-*9YE; zrE9r_$q77Y{C3Lp;8ld@13(qeko`Q(mS+ZnP25fNS*uVAAG}M4|J`g6yl=*GoanQ@ zMV=)fPjigBgXpuaBpF$SR*?`sRj>gq#Z}<2ozsZ6k$uQBPqXTyA25+ z9uT&i&5-sDIHPQ@`NondY!MxU@-u2`$W~Rqa7gBWT4hhocb0sAen#5qh21j-oOTHx zo+gLw_~iOPaSX>jeMRPgJxKWQtV(&6TpzeD2COT)I@-&iOdmtY9X4^zxnSnf6OxwP|CQ3Dd zzi^c8GEbD~B{cZG%X6N0XCT@7%RHSgCjUKZh2*J~itOSVl4>)ylDFRHb)p2FE*ZtD z?DT8q0dNn#HcBBbsg5c~tOQqDUADAc6z;DP)AkgJqK2!xndOq@I-IVW<1xU>x0_7w z;iVOd`fJAJ#QMj#nK7>}W2B1@*pc)=yeIwj4P=-FB+a%VMsw>A#;Jeeu0<7!P`Qj= zHtHU@8*U`iXMtq+K(`e#@PXHWc2IN_vY{=?grUXLz}*5)jeB|Wrm|hzj#TFOw9^Yd z3LLsX3n*p<+{y~@{YDEY)(Y4aDxkCBp$~pMU-t=5cSptV z{y8U_88P#>2>9KM-{JGf{0?NvRqJq~8Rh4arH;)ID&OXK7yjSus06qSq3nqmYF_}W z?OibxpsbE!nH7z9$zx(%X~$**{%{_Wt+$r|MW`r!g`_Vv5{JCRcqP%jIkETpE9o~WG~+* z_2?S0CO@f4aZh&1V>%cbG^s^Zc+QU`xQV(gDZC>PdX*UwQ2i#q%s3*&sQ6X`` zT#==?YC~n_*&6)wXL`>TX@B#XHHyd-R8=&xI`*l294`5`E5R4!O8aGYs_qhK=|a-P z-L#eX;AYxBXQ+LdC6RPwvq*1YnZ3fFe}Zu`R-hc?`ykocZXtC!`8AhO?q=2N#ctzJqF#~i5P7w+_9xIp8e(PcE{3mGb%gr7 zaw7P=pw2X;gU3NgwtAlq34j|m(Wavi9r_X`SWXCseF0R_HH4R!F`vScsqDZ2Je*@T z>@Bg)jZ-3h$!NedkwzP^%?&S^XI+!yG+vZMM*^VFkugfbYsJW!*rJd8z(;=IBR}ws zb0h`ci^lLk?B9)-RQvbC&Xhu%*}rwn{;lKbygkJX&jud0nBzQbG2ilZi}^QCx0vsE zy2T8#a-1Lbmv&Z)k?1`f%W-7w3uUWf>Hb5Or%*P7XqVaoVUt{~&_^pozCMqor|@`c z^C3mG=4#6vt5tn(qh8GJE22xSxXU@^XBj%sGNY=r;k*@1Q=t!aVHB{c@#;X=lPsKUQ^6yBYKWNUU| zNK0eu?`<0P!pyC{nx}NK$C<)a5;|IIsnX`7V-vg&$@j;q7o&fjK~CvrJgp7I0oYP4 zO=x6=iD`RXQj<%#zfnx9Ey{&pps13dGp!ued{6ba9Y|`#p1E}ORvYfV4BlF9owdoIPm>kn$>FV}u>G5iP80tfOc3*v~5 zM7{|eq>Cz1ory{MnV8DA{?MjAwCf)dL*d+4XyR8yqb9H5H;+Sf>#u3L=oTp$54>~; zK0pqPI#e=?jLO?!dExS3=}S{!oOYC_Y9PAm<4&QbDvWmVZy>$9LvnR; zeV`)`Gz|602ZCK_Z%B=Bu%9BMyi(7pA}ymgxO{zX(wCR`+aUu#R@qy$S61p?()UX0 zncveZ%=-czvyI9Hs*;aJg#%93F@;FBzC49?40(VDRD?RF5ITlAS-L3HNPLBDX&kR_ zEBoxrb&MC~Sc_j|5k!|f(?TTJ7s3}_0S9Yvq^P=hWovE`qk(~=z8=517KE_S@|c0B z7Rea>TZl5OHntNttTwX~&$-f03ybq(NuQh%2kgm~c55X2yOHM-FFczTtNO0*kz%hx z-UADJiSjTd(JPsrX&; zEDK6IH~U`oJOH1!6Uo++*`VX&hBdmjfFIAPZu${h(w(%VJI{$}hlNF@F{CA@#Q}%2 zrGu^kO|F`zq1o3${Fk=off#*j{LtlT=Vsq6s=Rx$^_N)%(6RTeF?8(G=whfHDyHob z7JXwOVw{2w-KBNtE-J!S3mqS_^<{hOGr*miQN=kqEN558rHUf=?N|R z1qS95ZD2mp=Evd;MNtBfyD8@=LA!3^la}mpPE#mKsM89 zeDf2UFXS|SJoJ4p{rC4yVs4ewH2-sw?%CkbZ%*jHzXHDBNB-Qc`ySdqQTxfpNvijy zZKf2BuMWLTb86Qay*WkWyEFbf_}P0ePHqi9Tl{-Ce)cQVqTy$M6#+l{n?FRv&%WW? zHRkx)U$%mu?Z4L)Kf70!9zVN`^Q0I3rS)Ka#(aqVjJe6fVRzT^Rv@+ilpYRZ-Pg$l z#Os}FMut(Uf^X9_Gkn9>YZSa_5m2r`h+VekPNjFURSN022SyMTEj@Qc zipD)mpV5+Q$oLpxy~8IxO^5xuejCWJ?^swu`J;qT z)DP+@{fJb*BUE3RgJbnhp&@MBxfvXeS-gtHH{5Y#Z-jTf2ZA%n4-v2D=hGll8Gk}J zWa=vdZ6K$Mypz{KJv`E#LZ(g>sP#>13fbr0140?!iQ{~;?4_5EPJ8unVeyNxI(*bi zyK?r85*FWWA%72jw;)0Ac7tZzUfKxvtIi1CnvS$&XrJ$18}fBCl<%WbyGMf#8B2ps zU0(+NjQ$K5BU9))pLG2Ec(ijk>-gbGmj92rw~wo;%Kpdq1+H8bJQtO`K9tzp3d<6D zP^g%|u=cG(-AaqnX{eNNdJq+gd_*r4r|YR(V+~VH!!%l`l}uAc=}h>Lf|emphS7ue zc<5T9l_IF;_u6}{bIv{&MC#M)_xk#WY%X`7v)*g3z4qE`?Y$PWD_@g1+iqA;N~jwD z@u*jc<{a=M)K6@EN`mz#8O!akX})!|m7nCV%`*jaRH)9Ek}dwsd)~&MYlhhQbI-C~@+TgMczGTt z;`m5|KU3mf)OnJ{#U~PF5&J9n^RFj+%by#8w1W?E(&nD=D$!Q-Gx&2!95JfSF2ihd z&b!aH_;cBFHvZf*(9WOpp6n%m-iJJl_W}|BIo;sT@P04qtu_4_f7;&JHCKA%;wW4G z!xMcS&WEJ(6MRv>B2J3s>R5v8$==>e&W3p zKGs|QG;xjRoK?(8>lpef(a!2)@aK(K2*y#mwai-(1x{P4F7*~h85gXUdP{|N$Y?9e z`1h&uI{z+J)_Y5$_?y0MnL)HARV#Sljw-ILnK2Gy(-Q^m;fg3U__vnvCpy6KTp2}3 zluiGujQ&mu+8)*pK|8tibI4k_u&9({VO_OU=ZkvlmOc^k zzqGgV4^JFZ1oH1O5b=j0ru;`U`RAd)jO*?h?;u6vsgjs; z&v-{5<9`0|1R8uDeXf^e+%w)0K7*ey(4p!jXvpZEjH`$hNK)RyD>zSws1eHv`tKHO4U;jGyFM>|1v-S zz^~*ResnxR#jEzo%1&*WQp1e=@=?(c;cCMZ(CrvV<|ng#N}EqPsL}im)4!Zqc33J4 z@jIHjR5ltfYnDBVWgd(}D}FJ8r=YV|b>4mk8>mjI?9nb-wo>Oo7jud(^QJ`^_a2vd zsnE_f+6sK1$zCJszqBaSgZQ~0IZE;Oz4$$Uls(NFd*+rhZyrog*mJS%-71BRVJiD7 zf0g296ETfX#7sUxDYW?n&4qSycqE2xQb1#TSXfH5kmE(&c(hTH+^jwxobOHJ9M)O~ z*!EW~QrQTk6*|sNqJa~Rg@dWSgDSI=XmGBF2M)gG(&w;>wvpOQ;A!Yj)#nB~0TaFDDUh5D6!$Mlf=e9^!4u2fmmFuMXb z(WlS_;lWgOR?OscFk$ekB&1zNy5B$l61umKQ^~sXyP-Qjq+NCj${&5?)Rgn>{~)S5 zcihh@A35k%qAk%^bieTr8vAc!KW-bNYY*t%(6ba}!{?&u^-`H}R;n2%QpjOUp69$( z4&!p#b3Fdb+d;$G@ErfHAt>zkN(Wrdy0DNRM+;sD$I+_LRZwjlVIYKP1K>M%<9BNC zJGE%`XFW#NU5{*LuX!gL#bbABS0;DM8@*0eHqi981;es~FO3(NZ0OyO!<{$&ad164RG?sUAY*H}Q2I0MTdgy-c=Gw_>mNBk=kw#p z-OoHDt->`tAerkhk~5_5T#!c<>nt`~x(-S1m~D`7c=P=$bn~e8hJ7)N9^TophsQ(f zsd{={aRK)pdn$E)MeWHhZ{J$xt&O%!p1Nqu%xM(bdyTdN-{(gJ@Mk^ufjNI_nnAS3 z{{kjYq0QuBPhxLsjlAZl7lhZLfVx3fYG%*F!~mG z250n|r-9MSx??mI80{CBn?qmXXPSfI+t;I8sl<3 za+z({ew5rXkMf!}v+e;<^*wOF_4L2h6hUs& zEV<2$l-r9-O#L=z8iSSx@yDPSLm&4j_OuA?Fe4_885H2 z5@i^?bXoa-IWM2+cQ@zd$|t+$C1+)ou*0ktM6p(A*9&4 ze)?_vtVP+Z6J)dAlFi0Q+5BoDmJZGbma^X3 z*263G)~W5fb&ouPrI{v6tGco@#bW8g)zdjkZ+@Z&mX-?ASs_SdrO>Vxq_Y&IvI2jG zKsqmcZwArc4*@qbZQQIx>8ui@v)Yo*nn>wRc$sJNva%~LJr*wytpr~73-!RuIzemJJ1qV+3vJC|@v;uJ zWUrPc{X11qpZvVa9F(5940T@91*;{X1>YGI!kM^_Zhrwc38aB z9LUShe&)Pfa2N2Bb=6XSTA{bT`!ldI)D0^O7%OixL)JzPjbO|+ZPIjDoI*V;PL0=t z8BqNgaJaHN4mS%5V6QOg+k`d|q_r6*{$Bj4fdVLNn1S~{9|JBI*tpz=^S@n~|HP75 zSER&#HP@W~&DQ+iE6o2kVg8e7VgCOF^Z!m@bTgm-huHjQe~1WD|8PdvL^{uW(Nh2x z;?oF0nKac`LqX?1Jm=js)qav|7rRTDZtaOZ}=vLIu2Ra8lsl!dVYw>=~Zx&p(ut1GhJ9%b}A2a=HK7#751yW z-I8u9`w0$6w_^T9bzWA#l&l*qz>n_!8A_WrI%_qPs5|d`kg)xAaD`5{X1az!l7K&s z4HBxj=+;a(F%EA!Z^@WRwArp|od%1%X;i(=VR2-=c@BuzpiQq|_y@R1r%d%`@@%M#)+%JJWbSNcVwI51?;(!5y%h89zj-_4+ov?J*}o|Z z67EN}j5QMOA2|mOcfj9`;~el?&s@o_kiBWzo5N1UnrvyU>`iO^q03AL=2scoYTJ5_pQB(Fd9 z(-U`GFFg`(s}FnS<#RKOOQ@RoL;)t!gW53EWrc0FQ`Py}^a7%tzi6c{$~I&gGaMCX z6bp`u3F&Zc$!!Exuvm0zU29c;Q@BN@5d1|+`?7Mmf32DzR=!ux6bA%D88Gq6dxz5F?sQhNnOVT5U`LK++ z?uRFeXHhlr?R$|UyB*z8(Q?@gqMg=bfC0lvtC9@)?kC@jrLq%Wv)W<)8h1 zI??_*zo(Z!I$L=8tK&}k@-zCdm)AGc)fPWM)x@%C({cUUC6#|dx_kMkGGq+v#FZ+a2|(UoZt1WtDm1vv=`^~^wPh~ven;z>ynd8AZhKy zvtyO!`mWJ6oo4)`tU)S|kLK6Y(fnry!n1_OlTP@Jc+zqIct;@P4F2K-IS86bR^q?+ zV?60A|9FS-xwduOYCY^Sel=2o8K-THi`{&Fyf^|@zaV&$x5TF zY}YpYp~l?Q_>_%4WslJ>#1`GazLC;MLIX#+{dRPSRQ{v`u72_h?SXkNQhZN{{iS#s zTQy3I+nX|;7KYbQ<*4?Tl{I>5164lI?yIfQsj`(SpYa>=#tAs*xQKZV6PMl!33Yfv3U-h z^h&+9GnYHh&mG^*eQ%z%xCXw^7r)SkU%&!E`U#b+%f_7tdxz;=FB#UgKv4Jf*$o%A z?Nik_FrJVut8g5CqLh#(tIl_(FXm=;4W2J|JHYI&#h98Ah5&D&bJWI1A+4t^|LM?f zsu$U-6?wWTk;|BlR9zZD)o6h#Gs%xpKi=?8s?OmtL9%WrTx>TppyqT-4WG47R(E#! z6J*C!GkGZ2$X4QZSV|*A)7utIroro7axj*r*U!0=+3<3(Uyd462l}smjt`PuZP*(l zJJ>$6;QHxARyLsh{};jMe5w)D-oIqEuGL?%T4$8y_Cy&YOcn^6A`r%Y&jt(ABn0e#x0d~q@e5zLTGzh05a`MK?Zz+9B20T)n192U{gUy^VboEij{eH= zD>b=AEusbiQCjfNzij;0rLNYswW(eAr&?BgS7*&DhaxsuvO3LM3!AIwWBBH(9`ke5 zVSbJ}A}(Xby7jubJT;;(rajVYGXU-n=|iOQ9em}dNpjHd$zhA@e~j^y0>fj3d!Ia| zLf-Xi+{T={`a-hdfSw?gU*!{l#9mB5PVf-LVc6+rlLMHIDwzG zZ!~Kl!cH7R4m@Xhlb=86JbaLC^-`VVWtFT;F=FT9>i*0?dxGCO$h%NaFu`vMRImQ= zwHjT!V3N%|;>D<@dh>XEL7P=xqleQhE@oBLzyUXASPfp&L(lQ$H9UtZ*d(nQjwU~U zlwL2D$FR|S`wQ3X6skJk+qo1H*BG9nJqbMkFsZpIu14p%39n{DePlx(A*6UAcUfr< z-ccij_e~!em%#KLQXtOJjel%H$ncMOPR>3o$7p)IBL1#APc%lL>E9C?RrVGdLRD&5 zFG{_(`#Q)UfBp>PEL*m>#JFXw)xuvB&YvNi^fU{RjySlKtUC{Vc!j1V6L9y$)i&*) z=W{RIC)Yhlv^O8L`QTcHcjJTGHF_q|e)#Dn9r8};8~GibMq@%P_#>>&3Z~x8!|Wql zp`cmfR2ZT5lX~6Q*lCY-GUe7%^lW!D*LO1np-r+qwLjDvQEKH-p5`M*^9+#I!JW1FL5f8TNL>UJb%c27rhwgyc-* z8i;w+5-a9WPpp_nGqjWW3A3|(5ba?7v^{&e9}XFBr25pkZi7KGa*|8s4yx>wl_tot zuR!*9IT$OmMITp{iBiI)zQEC#;&ZbWr(HK$mWxNp!P}DL;GG^Lzv3P#aEyO*?TEOE zWi3Tx*|2BI$|hN9$PZ~#Rm-pVHt{HW}pPhr)f0`+F^Xzr06Qw#v#5?W+}r zf4fd958xt{3`3Y+F9kqcHgfv|a|HR+5hRfDOdgZ$c*ZjBL`aAZpG{TgvY(bfe3)_U zrDlj(rBJw5ijt&nl!LN2&6mDYdi~0{AzvYIPCF62E+OO4QT+pYs$QLERwU_raq zgFllYvU!sy{Cl459rM0V;sK}kCzcW|c@M-|_d-fi4-d_1PyUV#^mbSlcybeEP7+n- zC2zShC8~RN8CppEGU?^v10=JM;&sSV*&enr}+UhBY$7N_WvACl8INNO!l0=QFJQs*EfXY@{=@{>Gz zw@>+*9{G%JIB|tMYPTmizXb>Z^J~ryH_&##B6uZJdSZZ>b^B=rw{yuM;);q$^9!dN*3^|GJ-m zveGUqJ2iUNYMp15`yxN2b$VCp{0t?tGVb^Cd-|;TyR&*!MqlZxdQe6Wn`Q>nKNX;V zj`V@c$EbhWQ2!YFC=a>|lQ1>~7gq5&jq*A_^~IQ->44xLbuj%uv8+KVo8o{tpj37V zCWcDGooEWCr^~qr`M%Z0-PC1iV zt-F{B@1F*_vC{BlCV#o=)8+IA>ESTHUom(aRc~ykcMX(-(|CP?ob>mkhd1*(9+T?Z z&4&jzo`6JOK{UKD2@Kz18}%s|?cv{1)p^SWLi(9i(=ed~7-sWF;zv_0u)!@W9R^uG<$d6% zkL?1=FzMYld}R5eAfp!{OL9*nQUWf1<%bu}kd*_ndXGaIN#yj_IXA&Fs5&1X!({0L zS^0t27V6~w<2#xCbB_Z~MFyvWLe6Buz!R$>G5oCpAz52uMve*hk(C2J<X*(Suti7seVRU+VE(e7n-WhHRsJREB0$qcdpbSV=V|Od%)Hh7c&xDYs`}Vsdd_0 ze_yF0p#s%&1*+}F$Z{&$ z56oCI9bQJgBUBV@r^tpOlgVX0-%aF)T6HEV`er#e-&>NC{;l-*tH*V{^+`4y`X*Uv z%uzn^DIdzpMkX!Xf=>TZQg1k+>pmulgPVE4Y%b4Gvym!oIm(wl<$v_Az9Yx*eqr$} zpE}t=(|69fohd8K9(v`uGl;BoGKk7=DO<1H5;JyQ>qMUS>buqqUDr>d3#h)qr+mWSTPG{qX!=e`Z9k#wIl=kwlbmv0 zDub2tOP{{k$G)=Hr|k3vbiF8+0n@{M>5=BtCIep{Rd06C^pECT%am}1nSE4s-aeYA zlBUW*s_fQk{%9cNM`Mb-ek{QCGA2x|6GSa*OH9gw{7|c(*Pl4lO8HOBMAmws6VGRB zQ{H_^*KU6IC7rT$ai4bW>1>H?mz8~ZKmBxO)-`Gu@z3koSCXNL{?*fQ9Zh25m<(G~ zWxh8JRYbOzW>?5wKQm!+HMJd<)g*=iw<}Oqg?%~5zAUX}-wsal=JNa~&$gc;|Hm|M zBdot)!~VVo*WYSff2##QW>-Ha7PUfur{U*h>o2j^-xI`Gf17c6bvf*}&kW0`4F@mR zOxMIrQ(y2l7ge1p$7T|$#((jsLf(lr>Zi24&5UVxSxeEd;BA?PvX+C(Iiaa_t*gxB zo=|vdn|Fp)K~PQXf5|E$6pL!>yOgZ^omd>uI23l_iPw0Lbt_dqgOWHwWX|HvHQgv(}{f zP(qF;=yGAY_F9~qb(lh!7b0vK*uni9&A9dz8a+}EhtHIQ_j)sZYO%xkkX!V!@}+S8 zZ?~lKTbQtond+sXkgVPnBd711a}i&RzA-WyI}e;SgJ{=GWed_>F}OLH>ZK^0WoT=7 z$d+u6gZ&r9{);BQ^iQNEQ@95El#bp`H*{Vhj|%4~JXv_)ShVzTDsTL8bpYkCcy^U_@xWYH;L!*97XY>Qt zQ}w1}(zXf8;N(_?XM*Qbbegw-&E=BT;uAJiDab@Il8WN;-~i)Xb_A15@F zHQShqdDmlF?fbM^{*`9dyl?0)&^B=X_NQN;-CRnQd%Y!8W&bI7 zCc!w@UEU&<9bs%QdkY6JFL;wXgxRz1plae1uVMDA%9Cc#8j#yHd)95ERvVS`Y^k%f zQDMk-RYC*%OO4D~S5P&vI%x(!9dl7+-mC+a5qYz+y?NTl--(aGQiTw&f#i=Ee=g&HF2o|iy~6Wu zV6_n}#v!BklPU5_^o|vvb;-USTyNXV8ZNGEDdBQ2-J0#?j`NABO(AXgA($~&vl(-N zX|%;Wy;6t#FyqBES?7<0la#qMusJUx6_)s!k$4L}>&+R83|-~Ww!GlfnhTj9$(FL;px>(Pk0(v!7?{!&)K(xXlHI-q34If z^5TxOsxDYwoJ-Zjv6C0V3mJ`Nq|6b>*nTa0u!q0h4ew@8Wv|ZkgeB1HAMIU2w5Cm# z)1VZTQ3aGr<`c(H)x?>n!^Fupo#)mBN@f%2)u*~7p5qzZPvZv=?a$>iiDFqsNHYER z>>ycpI?g0&&ZNr2uj!G!8Pg72!?2AMos@KIrU(6#NrX5o|K#QSUuMhy_n$8znzpff zq!D5U_FLxDr?Y@qe>2V^!*AMkKdjPQXXt`} zGx{F5C-Q8ymGW#<{|!$#iD!zA{`8uD((};T zy6?O4?{14ip+3fGQ75gBVFpdg8;WmYL;n+HLw`n3LvM`ygzxys|M=+=qWw^3jl4a7 zzj2oWS1pxmPab)?^ofrbk5D4E=a1cYhWSjC@Pj9mxi1?M*mSz*zDGJ zJ+acdVHnux?)pNdQM(`BRpjor!a^@TvwYrN$}4oI|MNrIlyDDvKR?v^Y;Wp^LV-|m z{_+boc>n%7CUHxyI<>@M{kX<&xx_7QSwceEy#KDy?X%RZ2AN`&Xq()D@)eC$;FGy! z%_OVuRi~D$)2Zql*uo`i-nTCktZQ_Je@ewoN!ilc%+&0PD?y%?60Glw z!#$n`T{KwYqQOEp8-*ZGuu8ON;WAipob|kLe-li|E;D1OdK1V@uq25F3zNAwZK^j# zn}m1D`khR7Me+#bK;&8Xj_4_^J&*tJ-sBIxG=`6V0UQ53HvV}`6L81-+GXA+*&J_@ z%6^U}aGzp#Gz=0oPPnjdh4=)W{NP=s9TSTuQFWFR&R-pwRjWQL9~9?gWoID z%I#atU0?mD-&a_)CA)vjLma*3sb%B@HWzFv?U-EDueBqJy=QvyMO2;T2(jn?j;hW{ z?9pqkGm5mplNp8h_$@L0lf%C+?U*5zzZC^(%`tui{RgxDGkfemr4%9>lZ)=)d%x`9 zG;ax8=jLZiYwz_gVB1;mLZ4FSQ}+0jLp~`>Hmy8jMOTVyqP?O z{1e;>(muJUPgZIB^y0Bpo$biy<8ua8ov)uZgIAb}%Rv_NTg061Eir>ehf}jk+h-I{ zV4aLEi?Pcdxw|fZIEj#Ov&zo|@(J!9cFx^)A79S>vg*9x#jy^bI=B&v@vF{Rrv=Hn z;b?IAO@r&4@4L7{jK@>e`Q!wZth-P+64bu`q+d68y+Z%nGb8%f{(}A%yb!>9w!wmT z{R%t02NS!6M^E`a^zoQP2Q$hJjC0W7CFKXkIl5wsu#=SeUaD>S3iJ{`o|c9syXSjp z>!Y1r^G{E9c6UFt1~tnIsDIvwLH+Y|jAatBFI1uGxrM2o3A|(h%23AO8APkR#y+i~ z_I_ ztr*-o4&&JRgtHz2pEo!eg~nA}dI7Po0HxP3uXx7-F+$3~r$)gfec zC9?WCgVldSRzH6-R%;(F11>+nxIBUT^^E$MyQC!*+&9_GdA-x*^)@)a%h-JzkK|r^ zEK6$0R^r@YA61>fj0grF{I>TD=262o?zG!vpL=kZna%2dfP#B_Gbp$`S#{oDWhuA< zsyZJiH*5Eb_nYrNIVINPtKjidgvUz}kB{p9@vc(>HT9=)vpOUDJFY(`erMC4@Mpu_ zsU3(meVxl=(7~yF%s*^nE8*kDhwK|0tuH@le)$#a%Xh}0E3}JhPX7EPs(EI|N$w{< z_}kP6So612)(04KWmgYpNn8*00oJvhq&~pL{wJ*u5L?!LeSn#5r>GB5_?^;SeSjlh zy%td)U{ZRo_vbHs%y&yS?N~yz>;AREUM8TcfApSDyZRGu>DfQ}z;zLOyHj~$9%)+* zo|ycQHqX04*LFYBDL7=bZ$DY3hgVq7A58=Mli2e;?D-zt+sWQEwm+>V++X9Nfz3&g zX!1kav!8Uq6J8ZT|IIY8-_4%yV$XM#b~=h~6Y(isWT+Ns{S@X{{) z>j~epD|^PbuI1GD&ZL3;DeU>l?D;%uLA4iF!Gn`&U~@_j8^GIIde{Jl!q30g_1~%uKQpqPMd$NbonZ!Mk+I@QjNo7xTGhTZbuaji$(&)=hqi`Q8HH z?EgLVYD> z9{ENcWQNfLXG`@Hlo*K-z>k~lkd+Obd+k*D$a25JGWg=LRmL(n<@hQ+)FV%aHlK>8 zZ=OQG_M{)?tv-eR`{>mAA+M|c>&M69Fw=od1rDac#C`j?iSflgm?PmKN*&X`BUb3C zO{s@L2j16NK;Xg+2ACo=Vf;s;CR~E=_ec5$r@}?8T)spm3!zrknOXlRUb|IgZ?d^W z{_oS*^pm=?w5NA>WkR_izvbQ6w~x7kZZnR*K-{EV`_oWH4Bg7w$)ut*H&#vp=meLn>ldqZq7j^iH38 z>oK3QhaPExqaT}Oj70bxP@wD}RXV7$g;y2hx5Fl}HHC-RUpH?Yg0&svWq)vO$@aR( zfPe1U<@!YF7JZr=y!fnk9S&c>k$dpJZj+X5a~L%`j1Y*j{jE%Xe?)7EdR2!@B4)Zo zb%KLuB!m7Nq$TA%cWpwpH;<0qX&wYtZ_r_*r0k+cK4yDHI%=c&21lbobjU{aXia(M zq!iQiozf!%ky;u_tv1%6bt_)6EHvtNmY63lc|GkhoZ4KfI@dq>fK^EQ@ig$V9Aeh4 zkus`~ZrB%dNOH^GyhBn#oQrjJx!^RTIw6{K!k1pZpuaD@UV8Yf6S^M0$2<|M%yLoX zAvbs1ly)Rb%d$LMvW7+lGHyB_6PGx`E~6&>tWOhTI?<)(`qDRtUk4zJR+f$Tq( z{pUKos;8srzMVZCO+W8gH}=8HQC@o4-&E{#jlrK`)AXE13}T z_GmtiZ%twCKL~dy*rMlCXFGi9KhC+uIHfIP-K`3lmnjV%FCenAo!?LSoayI_M9(mu z*n=GMrb6#wDlZ&z~#R6 zt?Y)Y(c?Vma=+q%R=;;LHNDSn#&_=pN4vn3WG}*9^4&v!wY1!%O(ScG8CAh_%wjQN zs4i}>`o;BvE+-X+{>_nnz_wR)+S4QXMTO6-+ugOM6I}llBW}OX?OzYrg*AC1|#8im90%Z(WIW@{O`;i9$DH(S4!UZhS8;HYo}Ow zQtYHVMkg-AdMh6Ou20Q;MbG|x$KM);PrQa>bXiekb55p(EiL!=LhwJ?+U)p9J{XH? zXA$Z;vbP&I^D6eJ+#cGCcI9X&Y^<3K%)Ts_{$1YTe8mW!Z|p@e4J7N=V=oNVDcCZq zOz~>ArCCBo3TpGcav?>r9)1&835E$BM6WD^gt2QCxOn4WP#0A!v*UWt!!N_bQTu5Y z`l;nWR3N(OhZpHP>EAO>h*5WTZ|%Glli%;V8m=$*uENq_E#`B*zAF-GPT3z>w>fSU zD_WFgSKt0w4yT>vkKkILoDyFScRDcKIurWwI8xLjKpt1=$%zZM!T_6Xzk_^$!2O7` zjzS=~ry%pVBvW8pBj_T^#DG$7U5Cj~a58N{W9pO=T=h@Fh=5e`|aOyu>3yflQQW)WQ#L0B!_Ra-is#>>OI`b)@1=X`+h^!Va>eyVEg4Y4izUjUCh^cBmGF_PW5x&WC&=zv^*dYM5y{(6l%s!KUU83{ zs#e%l9e|tK2c*HzSe>g7^_QiS+`lSj_f4yZI>x4J$G3*A?*T`bM;3obTnp^$OJ$h!DJ)5${yOJmc% ze!oWiwdbZTi2Ne*GKO5f7Hj z3xfzj>3e@?hV79FBKZR>A$|hS`KR!nwa9;#Ct(HE5|0$PYLWh~pTZT6FB~?V23t{!vR5wfF|i%;XFZIvpIbWu{3u!-wU^DACQ&stg;` z`th>q^XYAfJ-CPD0%g|r%#DCBF?`jepU)a-c`EX4ylU$UFdG>`KU?90ew!{LM4`mk zsbeo4Q*(!6Kx^m+W$)5h;y~ybKd|CN zoKLA+U+w+kf~pikj^dgI4`Kwa=18oww_USwN)xDo#w@f>0)Ip!qvo3KlBVb&aChRJ-yaSH^k0CtTo5jvM0lU*kFDRw6=_P-f~8$0A)f05(MMAUnk9 z+kr<(1T1%wAJeo6$%YZ>G(+;3JCFha3xpKbITFlJ*!D8 zPe6)0#6lU0P+0#%d%&+R;C2QqB{541N_q^88=zQSB~q1uIN&QSB6tnk5v;%#{Z!-_ zxQn3@3#inh_(aoI8{wS@Z-YL>C=MzI(7$?uH4|O+&~ZA~;3Tk`MqU2v7J-emqZR9F zf99%VGP>g!aoK%l1jwKQC}1O2N_^6_#n%HPW2hkm6=22g69Hm=h*bkXt!%OJdyoht zu$TuE0~h8X4vc&T&Sj5$+Hws1M~dpo(+OWW&6**CNzoPQod$nYg|giwdtpHDtcEZQ zlZ3ECqwkuAjVJ(iEyf=(7gh#IMeO12(5&vwOT0HguLAlZMx33D zI9Ca85cdKopO*gN!Ltw*yaA+07V~YHQ^8*Q1>Bc-9!LZW0sdZ<02r`g)Exp}oF&k9 zAG#thFJr)I(qeX06!r*O0%Rver|~g-A9j8z;^oW8Gb}N*L49}Ke44j@Q+F+@?79Y< zz`3r`vf%I2eI*}o>qg26+k@>j3)EA^o-vUJFVZ2o#*nHEgD&1r0s|}Z;lT>~i=BR(Q9IsS#;)1(B}K!r6PY)?yEe5VL1 zj;PWoWxWOF^T4Q7h;^9S9w9*_P-YY&(xY6tU{n_E0F?mfTrfD(Vo@gFL|@8dkJ4*K z?BVb1$GRdzTxDSMk><-C1D9XX0PUzvfOd2YM|+qESzCHV<1>D!aF)3P5O|*P02vWr zJ#;NZMl4EM*I_^}0OQmS=pG9eqAIrhRJ;){-mhGw+V*P01sah{)nzTN!Bks9g2nuK|kj<^yUlN8`KhLsbluu9P-KDN}PF5UxC-imer4Dx^s7K}o=HfTIkJD{Ah zmDns;#UPUEg)Z_qKjNmG~H7Kz4^&f1>h*836A%PpZu>niBV^71cNXIB(qE%Te z05TGoNm^`)s(9@USp4+n{XW}mwpDK`)&`1@ga-wOo(Yv0GqfqPf+o$ul9);4+xw+m znG__;us`ZcMJZ3+-o)6mMgQAt5i8XqH0`5X-FY64mf5%8$k72*K#DA}E~pAaBScVA z5MVIj_JLw241kO<@B)ii&MVR*I`F?fh~v~i1w5GYRTy6S;fI&#RZ&TRijydcim~Y6 zZ@jgDNN+>YsW)-Z8RmQdh)Qs&_lvV9$lu}aNe2CRNckV?;fGfzx`>bI^l_*fXIl#i z!#={hV9uFm{ZbNBg?6YK2wEWtzpOrwzbxrHeBimKwd8=(mm%oQ|1pmh-30X8_UDlA z#am{96(6C^{}=7JO$Ll7gWX}~DnkYyFo2(hT>~Y8kh%%S#@G{78xX6+;QpJDCRqD- z(vkB9W2LroSWXd|0XG!O|5UZ4z;5t3{y&LCb*(T8zod*9_Al;NZ$mc%l5`@{ z%SZe-C2hlmsIH}!ef@@6X6r~x-4PtAiX8Qk9dvE$)7~$n(E$7aICSi8P(xA~g^v^4 zN9=B;Zi``F;%VqE)1{}%thA3cEXBsDwBNGxZAU5T)X0x>zR!DIEfcXy0scf%qDR4Y zMXzd^6i$marUpl?AZjMkUJ9DvaGnaE5-NmRw7?n-Ol>(SZQ9ZrDERQll^NU}P?gF% zC*UHvF2J=wH5GRa9xopgksf~MD@^`5f<+zTf4ep_&NswIlAW)Jt_xBit%!8yA;zX* zKLMmWpA|N~7g4Ma37;du>UCz8D4-3APZL903m>w1>NbCV)8u{oLrvjJHj-h9WYQ9! zLbV|(#y&9OZvaD$nQjPe9s4DOwL9j*@oWQ#iiZO&0rL$?jM>}rEb1TjVZfS^t~D?- z91)8I@jIn@*fX1Y63)^fZD77VrixP?0b3mIuynKcGs3o#Z}@uU?C83+Mgy2xwYXo+ zHVYY&63L9~c0ko2G|I|?TGdM834)be2h zS8?3^23?ZQ)S1E({l zK=9Z6Bzoq;T5UuJo#IU^Y8W-?cxy%3#Z&fsPT%vZupGL1-w^0BsIJJJt# z!$;fi#}0Y&PAZfM`#4H2F!502GVId8)Xl>lmQ!gWM}ujg8TsMAt)y@)Iqp<-UyL7> zn*W(Ve&hhtjdtCQ7SP~O!9ul$jQ>%y9Z)F))}(JEj=VEzC4ILf*po%9{ILCk`$ueA zC4pQ(d05;7D=pr&1|Gyql`mLHAnG1>NnMFL6H%ge_|Oh7wNC1gOpa8A40oa!;T<{G z(541?N86K)sR5`7hlq?OW8j{KK9x+$k84T&4>eKGjHzOh(#rJKy7%9HvHpy75W6p2leng6qXBy}j#@EFSP0MYOnPB0Yy-7?0 z&Irlp#mx9v?=Pg<76};2ahNP_C4bo3jPYt_bQ0)(nDH=1m91?>&C@{DY`f0=6B42Q zMoUt&cX(YTF0^->Q z&Xw(vX#3abHXq%nR`4xn#7BOn>=8t98tA6_KLCbr5#B1AI;`J38l(C%9!4n#NXIl+ z_+{$?j8b(GbXlh6 z2_)k1B;6&xKTQg`o2zkJRE^UlgrTxpZG{Dw{XEeDK$!E7k znLkU%aSe_3YR^B#aPl02D(!HTx?f3uAROcj_RMmP|D^56p| zR8rL+!Wu|ui5=jpAH-H6OKX*TYx!JR zSj_nGLzi}Ek3&uhyoWV@hX}DODX<=Vyi)u~MM;7`5Iblrjr<>n#GHhV!dxg*1`foA znIs#L&N3w5I{e5j+O`*%vx;;?(ut~3FBwCNv=T=I)!C9i*2er##HBSq+HSmrn5AB9 zus)_mtt9H9w;ivMMtmHGu-pK(ywEtm>|xgzqHtQfT$#UF?3CmPOQV z{?%G0Mj^boHOiLa@cZS@c;Q3nB07w4Ff@=o`) z3z@zz523eDUUlc6g0^8!8~gI`$=d$fJ~RM}D9OV))eG2z3;%%;dOIb3Q{*O!YbUA5 z_MbO==OAKAF~Y58Xq>e)&XK>cr0QJsH`RV+9iRRr!b%Et43mLi*HO=Un8CYvK>Zr@ zAC)dHxbfcOpEJ0PIS;dbtxgCb$WU0UWgVkw2xZq0W(7@p8W8;v48=!AM=zVy(f9Hf zt*2NEJ<%4_PEt~;U+k+fvC5EI%-u3=(BySHT7T5p5vgnVN!^iuMyGODsY|h{jJG=V zEhQ*P&RaHwBJYwjrTHI<%wM&d(d1uD+oNtBD=rzl==ADV%-VZp?Z~B0zIK^2D3|4Y zwl3e{I;&rKVpdAo$z z-OSQC7Lq&&WY28=Rj2Nm@Y=9*o+;tgoPQ-KG7cf+r8!fo&&xKjIeb)1%T&(w3{IS3 z?{!!d)erBS^sB)Q<|UzhhI~|SsZFU}VxY2%5uu|fey?gI4Wh7EHTmG5jVQI2rDtkak~?1VW)Nh%Eq-sml`aPWCKc_sTE z>V-fg&TULY|C(l!+GpD=_LSHlw@~gZXG53BsUPY&zE+0%R4MLXfH$>{>385?M_Gx> zDxm$?wfxKC&rdgfZ}{ny(p zmZh$o#NwIRE@y?>B{jnFW1Q$dN`bp(IoTtn zw6!Yj;r@1yBsAfh>Vh8=_CZ>I9r+RBm^$xXGql;@38mIkNx)9a+q(b1xKXzHf=@Jx zcIbhh7Ai@~7uFFzx1z1kPH5aAlr#l=wwJWmJlSz&;q&EsBDX3R52!XzYzRu#D?5sA zV;nVFdAr5T;}^PI{7@sv&)1yk-{ZZ0cOZzD$6`zBFR_v%>^dJJ(0Je>J+cvsdIZbYZf*O_!M1L@0)a!&Q?@U#@^oHi2PL~MxSgbk;6y`{`O*VyB^?mxP>id3vhBRz@ zK?LcRIuYy2Y`Ot*cgttz*>rj>D$wJd|1g_o3BiLyYyQo8Q%iz*4G?mMCm9I|PQb3Y^K698{ z$NECD3c&cg|AO{gBFU^0(xs9=ybd2#6v~NYsX0+m5R&NyQMP$5>Joffj)we>_KjA~ z3a)S9Kc&*wiDrpt%f`UePn|j9BwQG%e)G|iLAj|P+tWgtnT)@O)Hh2l}xhLKYB(na7}drA9I$chwocgq8+{k1q-5{ zsansfex6kg%a{=t#m>Pj=SE_88s2K#yFbiJvo-T@&uY^Yxc)}B@Q?Ey)3E>b@TnJX z`5ecnKi%z>Z-Y;1%Rc!H?i0_QVh&U?Echp#zfktz&T>#iwfyKK!w)deQ4Ji_J1mGd zfq#xZH?!%{`McxWp>}23Z;9szC=~nJ5{gF2>gh^Bv(8VyJe~PNs>htWNbkpKiJIPp zgaBwzdJ4T&`x0jJL9>cyZ=T;(`@581czs;0$bM~U9SFZawD$7^@gB)q=4^|0^SGj) z8!H1uGdPQH5mrsf8#jsaj12_8x(x)cy}Q1e z8=}GZ<$AxF>K@mxoSMPYgyW`sHh@|4qGfoiho%%O-g;Y6eued*@pbMJljmam(srIK zE_ebQ52zAM7S>j3L*Ng!RJJ0x@|EHGWtNX}rn^yO^HuNJ!x|8l?S4a2D@fc_Vb||q z>a1j?^potXT_EN#oSz83s#_;%UHRZO6o! z@Wf1L{IROvUM*w^aXvIGik~prC0t%V@QZ9PlAob0Qu{*v=t$SR`iHy1Qz#l_Ser5tXXl|>twvrU|7UU*lCBykrbq8c*?QN_I4`3*)-uW?6gY7R|p{) zKkpWxMJRj7{fg6Eejtjo-g+E0RiPd{2nBs>M`?s}RI&Lb? z3dF)sosM_ft;p`;Z<~sL_6ZaPr8kDg(qBVjFl+HPjzuQ+roi4sg31*!J$&^jFIc8p2<#R?VVQ>+?`kZw|TM zieI3i=fu~rq)DZHjv>Elw&B<_!m-nAT_xOAI2MPmee&Kaw*5B>B~sH_dQ{ zly9GgbqSMQ7q{VN8~xz^Z4t%2Hc^!DPJ10lsa86_^o}QbeT(#OO8?F6d}HSC+%XlQ z&WAj-Y$4CQ_q@7klu}=wPn+1z@KqX>y3cB2tSP>AQUsf}YflDd*3$4w9%>2k~(~8(A#$qU5#fQ`B;L zI|gE;npTb`D#8h5;wHAZBpGt%4zfW!3wCRm4`CwuenE6wx5OPH-S2SXtH9 zouy>T^u{*N5O|FaS&e^VvLp@RY&EfR-en>VnxvQcU^Vl6fkSlDW5q|*|2n)nQ~I6U z)T;YFtru8~V0ze-GcslT7*P?T6guc3v#Q|8+w zUDclh+X@a*=}@Dn=X@cEf3Q32yw|k7#3FG#f}w|W-Gv?YoYfG?Cjsg<^yK)QYU&C5 zj7;_(McN?yRa868e~*zv0n?Waw^^c*x3X0*lOL?k$(kJ|Y5$|5cqeH$vN?H0$5+1JZ*x;#^lz%YrapX4Ua~rse#GY2Zp4lv z_8fisiI>y%2{y}nxh?n(!L}QHvy3h&lVOhZ8o6#}k01obZ&EtDA$lS+nBys%(koKC z{8M8BL)29Z;!6q1S;-y`zZ2}jo>Y??7W{-!wBjn@?ckGUe|}ls?`MU2fXcL*ddJ`I+O` z2+j9)_k+mzmzj_hQu{B;kh_qTzh+#Q{sS^4lnq9|w?6Gr-u=K;Em>N~S z!a%3sMjMXCWRKNmlac5OA5Bs7Ub_(8z3+S6{YF`ng59neSETOSQW;urstqVuHfe#o zid*_ZTK<}oTTO$RMddfGjqo4k8ZKG*lpntDpapr#5RHaiKA~G$b>4Y~QRs&W4byoPSIoK)u$t^q90dTaXz@`i|P!BJm%P zsVr!ncopR~T<$Ec+Gm#AJIjQE49;&opQ`T>I^SC^g+CK-5mdjNbM%qtXU~lBb27-I z{z+g>AVssoblkO93L3}P-K*zX2VOM?^|<&{xT!*ujQcqTEd@H7`hq??hWNLwHJX8~!>wwzFHmIVxz^!#FZ*-z@VBXOfaD)^x3~Dfm@US5f?ZC9PD!D@Z5+w()Md}dQ_Gz_A=4a< zu2Fi~- zRER7<9yZfL;x1ozTGErwFJ4T!`_4Dt-e(>RuI~r?nlP~DSzCIf=+Wa*zYlat&7qVOE@cgGz|7{ruy{&zB+C05 zFy`ZspwzdgD<@Fr(s>uGWbK{lNl?_5-Eib^=n?hk<}zM8iRX8HHAP(fy}6|Sw=b;} zHrDqayropzLQyrbrlu+A_vv;|vOj`r1nH-Zl&k!o$n6(MmzxRfX!JLlcbi8E ze;jG@UT*hSTs9^nd(z2S2?-aUyzGl?p0gN=)(Bdd6h&ISv`2rDya}knq`Htq{k|RO zqEOXNP^jrC8ZuMqK($#!4mtsh!N|IM;mCd_Q%8iMJ5FVdNclm^AL#Mf(oIksyWqJZ z=i%$sJxK)1KO=JK7_EO1_g1if?pHTEyDa1!A*(;KpaGp{W5=#hF)Kn^zF-PbpL!tXN@!55MYSHR7akDBq=QGwGWwDm2^K( zCG*Q^+!}wc)>6*b=0+v+$-fwbnqx%rzyc)cqb8f8Re!ROsWYl%S8zCi3kkqQ=-uRP z6yaNd#Upa|OrPXp>?7j9tSLx}DS8hy)3d|Kh^Z>Sk!Gqb^ra@&5MAXc&0R5=VJ?Ru zQxxXU#vJ4?^PO|JN%x}@TSm#O_&^$-57#l%8?1K0>G@93W)Q7J-**S4N1`X-_=?@1 z3Ekh4+DDkaa@7#Z18Bs<1(Kx5qL&?n&0zC}Z;VCR@naEon1#VGIj;)g*ADihE#wMB z(+%aRyf@M1KHl%upPvINm2Jh$D#y#?$WUaQgpG*y7h*DTG_toFaG+(fJnE>*nG`}l z)FR?6n01;vXldajl@{ZvVg86)E@QQ2FP_7T{45-IA3INtAF0vw9Av$GW|)RI^ZfD( zKAxF*v0naJr|&TR4M+Jy7TUy>?WTl%iu~e98EX(`!@?8g#1Q(HOuveH049xvT_4*O zr=Q^R99~~iyX5FKN5awc3RMgjQeh*v$T?VlXT8$vXO2X<&Fvfer?P+e$C;(>epNNVN(<=+>`oZkOo;_DY_n-wA} z1T6=;g$E^;=G01a|Dfto^jwclFD$otu6@wh9C6DDCCO`f$7#4?JDVP?-mh}neih|@ zHt##HtG2}v@V%$J{P=d}DR8?x8>-nk=KZJoRIje!Tb*DH&2NvvvClQV1Jm>-$ss{e z3Q0vA(-c{mWM|FXv_%#TBtVci9@WIc4;Hsf6>o#X8tvf59HdIxVh+47Nnb@=9H~on z!+la@0|!np@z(+gefkHb8XL@ODaZywt4xra3~J!q$jM$D@{9~jGgM&vS9w(hbLg^U z>#kyCfzHpaZ^jh7`&-#dY*Ph^*)PB%|JCLONY*^U2}J4~2U94O4}UkB|sIfhahq)XzZ&w#X8m1B|lR z^>G1e7^lq-XWoP%FMHmEH_6Ko7Ln~sT}lxOc%e-bf23X522*r=CB_fB-8hF#_z4R$=2?^7UUuCOcvmZw@>_GWm;;7b)R~sPb^YZeCx0{;cnE^hNfE zIRw6@#(<9^>Z3uHkscm@f>1z##{F3nSg&4x97wS0`x4C82l`v-r+egJQh7HJWDe#N=lA~2R>M9I_MroK-;Wj&- zT1H_xGl+#N!;*S3joM0~tG4`b6P~1xRE}`xpF4#|c*WVXDnpqTplZR*~M1R0dbiZtX*nmT%R~j#7lJr zmkh{w9>FC+(*`2jNImW}@rmkUXPj)}Sk;DUXgAED<68uebHA+i;#5viGlRaT?X=~7 z1c^XXZr`(PUwjYDu_r+F3p;|DlnGlXDk0%6g)>>P{i3L*Vxpuz!^l8y zvNS!*sk#3$CxogMlBe1ng`nf=`}_=!Ow{uxU2gPY-@X_IdnpYXyw(U(k^DC>QFw-D zq`2r365i4?KV?aMWwj50Np@s~tJ;$n5?<+9biXJBSe3V2T#~mt;Q>3o-F+z5%eZcy zO1t?BkGXpHmL^pQ*z@coHS|W8x+XVlUuZ-vm`Od3xe$e{d#wP`RADmEm$@?xP3EUn zC4ar}FkEw^G%bJ7buc*@FW;+wsva2QoF-T5y86NlGx2}^gS)&uI*bGVAR{=ucc;6Cc^X!tAw5_ zM^JlOF%Ty*tOOSqpzI+{b_z*%>j;D-Icpr*SR_1B&R)2{4{Xh_99+cXf?JcU$<6hF zT3xewJbXT&5SVCun2lA6a6`Fmg4bo~d6xo-{&H}a2UL*ItzrhVW9}PS_eA0lM!FwS zGG3yE8S9?iKCIuRDNLE+uufoa;9~T1FTSW`o^!l=Q}fP8as8v_{`7vBc8%`(jTxl+ z{i`9lmHHmD=4fXySzWT-6i6u6Jd>c=Bv6C+H&K`us+k+|^3qziLg^?}eK5gX`<+;5 z(cVA>HzlSwlWNvHc+g<+PP`1gzw+)=4d_ca~U z-W%QEVPLVcrp|;ik%2i5kzbe%aBZRt-L;DzmYD6nmo9Z_ z#uy1o)eCYDMulYP)4E=q#3r~)J%c3jD#(u*PF)zqUW-%C#Zj5qk>i90sl@)c*)vYR zj}Even)P}~G8MLhhw))&9FSES6TjVN5x2j&XWp)m&sDIQ4(`CZ!04!q#6I+O(0s$L z(`7H!BgU=MHBlSOz~-eRV!N0rz&S{qRRjg%ONz^6AQUah+)R?9fbx+Te3%&;@U`9| zK3~vZeYAm9nV!=o;o~I9!aRa>aQ!Q50DDjm3M?ePjxQs;YLfWoeLxX;tAYWsEo(Z_GF;1#h+2|LajcmQ!?}F!&WM z4jOG(woa(hf_YT$wI=8*;sO(00A5ralz-0>%-ye=Poeh(7Q1dBqZR#`X``W@)FM?7 z6c@0Cf2%L%ahjV})%f*7!+5>u{^@TP+$m?275C@Yr-Z26VC(KbdKq+?YyBufQs;kuW~d(xr_|@q^@2MP6nhjCC+slc z7rhyadbHDiL6L=Bz9>=zy*!^P>2iI}30~N5{156;{$?TTOnaQfB)O$hmtrcKZhUx- zE{^#aDPtmC;EOL@pL$*v0)cos|#CfH}=W(d20qyq4^;>f-iN{Ku$NX<# zx*v3DslC<}uEFrm>w?N&abablzt7)c|H{gElf%}=A$2&{^9@Y5;x*l(fSutl{85{j zkW(tKuK?Qv;?Sgh&>|@bdhg4qEJ1iXA(sR1IQbPep3e@tzuwl$pU$Dqdeg<)B*6(# zt9K;#GQ6W-q(J_G9IDJZZ`>!@n+ZhNeqp`fD+bEXOp=WJrFHncm&`@Q*#N6^qR4mQ zvMcCkvfTH1P%asmI~aZ^#4wu-*P|s+)jr+Je-wx&iYdDTMBdm_b$FT{Wq5MZ`r8?d zH~wyu<>8AZX=D>&@R~OBCSBYBQ$+%Qa#E@NR3BeT4h_wOVUR?8l{heXalYw#``yTz z@E>~6A$vCi?>04afw=H87Jp8xHJVQ1o?~B38-5_jmc8CK&}p5G(_V=d>*KWL@wBxt z@DOsoMV^DFQ>e^$qP&E?KL zZFZ^MXxrOP4K9gy%kpBWEQiLJ2p(n%89<{9?71S7 zVm%@^3=7y>I9C9@{Gc0e@%_;z^z%wy6VGzldH5r;)ux%Y7Tc%KFfm2zcayrbz1o{YH{aL5pCoddWEc{0tc zTvrl!7+rSeH7T=5d*clsIpg-agh3$>IszGw;ViAsi}DpJSNM;H4-1+kWAGKfq2ZOM zV?xutHx<|_Cfa&|3s7QvDzRb)XGaFVtFPn#vEinzdZ;VhS%u8%)36n6jTWBHg)TAjD>3lIb*DV1o8@(7KGEo8XdH!LbltZ ztaUo9wqsE@nNxpN9-s++aOoG*{oCmNIP;>3Bjw-7q!wdmmF$|CB`Xg4h>= zz$&q4^TkB$?W@rK^ODTrsKVi>f%~!+PsP4terHH9Msi(8G`rQTY zbILE9)mTb88sm>!zUmKlbw{m0w1K`tG%bYatW2kSm)-SVl+<4~K9>bX z!6`}*k}%^8Bl|0>d_!1)7kfLle@zIn2qd>%Tdal$u2J6-u2L)?L5<+mbJO2S+-v)( zx1m7vRZRu#K*CQee@PT`J$SNE3$_xSuT-I>iZlIURfOhza3Amq-Sv>X@k@&O`)sj{ z*K3j$|6aR43cCviW+;uMA{_OyQHLm|qQ*||qq275?zop$(`gzmUcfhX5oN7f25y?; zaR_nMr_-2~cs>R`&KD-8lB4eKjXzwas`BA0t9ctRzjep_b6UxW=?z*bqtabvw%>yg zRd4wYis|-=jOrwDo?X+3!oE7#9zD)JP2q1B4gI)K^&2-CFdfY7xF`=8zXLh!D)KMF z2*d3RMOxD1#A|0-)?Ciqn`DXSr$?De^r@8PFocc!`Ktq!D{xda7e^{6CU&1~V7!W$ z2V|GOa3f&2@nfMk<=1I(+duE3Sm$u(+%oexkv5l zo}->n{(_$8`X9NLji+Sbp)zAkyPQyjX>f~?%mNO#SD)nPdf7UZF33NkYlenV;Yq2t zSnBr?k8!`h!R%PX>L+f=zD9EO;!6+OKY3}3^os%BTpis+vk+?KY zAFYpE|EOAk9ZH)_n#sj7FK_$x?oFDzc<6%UZp?y05#YY_k&9%T*Z^Ez5qD%3PB#+M zT<3)aUR$o=VRlWIK9?`(^7osGUq!awOAFAAt0FlUk)fr|Q(1nJ$i|n6h{o8!Yd;qH zcOc*4yfED|BEYqz+x4+eep62r$0rX=d+UEsz6m?Oq}Q{NhWkcC$~Sj&@!>ByTquXd;BiFyH3Y{<{$m+xVtA} ze6Fr?%La$SK2v~<-~PGVU*W4VKSN74I8e;LUcM)aZ~K9lw2Ft)Q{-$^Ax4xsJM$=2 zFFRE}7@Yji*1ajAK;h+&^ojzKL?R28I09zoy4c^O;wgEnzu^)yiJU*Ckx`4HCQj(I zD0E(wyV+w|F=?cnGq!tpmNr;kRtgU>@-%$UP!~o}RSZznS$MiCZ%ohZ9haGj&V+bM zn}&bIj0F`*&R~CkS3gvVQ8TN+g{NCnqd+64xf&gZcIjpjTZsAO%vyXkfpiWzJBZcE zbx&|y&AQK$d?WZy_S7i4Nhv*rv^iR^?KD2AOOZ=le*srS;1i~rZ_Aozs~J;IlcFxN z)a6(ab58YTd<0q{_v*&)VK}BM`!V$IqlxyunWbr&^wi2X$ng2~Oi}XJ=(Ax_p2h4J z3*W!9c~$h!fKqac3v`m#8|xhJZ$H#se#U72ydu_n;9aHrV&A+!8oFuOw_C!qs!fG{ zbEi&yUM|m-=8%%HPSz*a3ON&B&>$3;y{J8$$EC@8&`vprRCv?8F78(iDc+~17t8Lw zaOvSEY3B6Ayu|t(^|Kx!q@FvH^hb@dhhw=&h8mp)uss!r{tfBuQyKF-M-rJwo%o1Z zsvm7lH@|YxdLg6E4hp4oDdHOAdCj$a+&wxVQ3L1fbP`*DvxP^Q>6=kxbR2zlx*>YqitfbC_8wNZ|hFyuf!_QCM%! z?1sp9ZD|{tf3BnV%`@w~#B~nP`0Jf>yrTFoHba@`PGqUD)K>gh2?Z-&5!CK1PDIm6 zy9P*O2@=8Yp6ruhMeM)#0U>>^Y%{V?uJ|h?K=rd)(lhSGnC(lK|P z!ZRH4RUVSWBvh94F9qTweTFgGfB2m>UHNKG!;x$ui;WQ7_NMwio8Avfv^Z!*^LV;v%@(|{3aDi3PC zOO1)-X^h+jqybKE%Xi?x_CpEvsv@i)^(s2#>7ig&DfN<3K_GU4sgK8Yw~JUQ@R$mF zY~HvaX{6w6Mlp6LqSNPKF+Nhbg=Naq?StFF&`M5_UcQqmY=u()LVtYGXBWzfLgjLG zf)(oO7#Z`8ar@z)9hEyh*LJ*lZc=Hbej$UtGhBA%+p!m~nP<;H+UAp?X)7Zu2`!`1 zCp(vklOMSipClL?18YRRC1DWPP?NP}CA8#pRbY4{7V?_ub!F{R1=b?}Xtk(P;mTi- z&n#!ba5AK0Fkw~0H;ZM8jqW>C<9SZCe_%!IOR^mNIyK=)+oCq-c^Kj){c%(2DedEj zb%39+nx!f_@7t33n+hXSe^yJsLTy~drrFh9B1xpb2IAd*;0XKHv^yYfEY+95loW(i zP`b6W+ZUSNB7yt=0JuO$za^}mm~ z2>p*r$a9g@=l8GjLHl}<>pMk-_z z_QX`k@b9hX(Z$|Ojj4-`vg>uRj@VmljjZLe==1sEcEkC+5Q#jEgR3TojT2$MOFDz)jtR zDJGJYR_nIsatiGr22HRR!UwlKw{jqv0%74!nI`yFg47VbAhk5Xe(VyUsZH0BY)0DkV0*m3~K-(>wZ z!}^^F#Tm-k`rXLZ??#qSdl%zoRVp`Qm0sb5qYDY%ieWbRbBfMvplU_*emeOrS*?oc zZ{kbWo0#!{uAi0dY1fU~;Jp?}BO32z_JapZvFryXjtjNYUl10@`$eeh*PqC#uEuC*f8)YJZEKlTVmO_y#GTe zHq_;je2&$pa_;5*0!F;hh5}s)JILb{Y8KSE?Zq7VCypg-VM#L!sa`7)5y;=- z6=|a=tQe7Rj=3=rRru@~cIiNY8X-8Try}OgYQt z-~X0dG_l5&6bCFoviy0-%i&{7Avl_do-3@rjNcdPF0n2ixmDJZA49HuM^!Mi5|B9M zG_1p(S&;wC8IfG)u}2@_D*qOp|Lk&=zd{;yHH#~=SioP|5;6(mB&(11uBk+lK$ zJgySiRCH_5RU*fEhmt2Yt-O${jEdrxF@u*esi03TSUb{?@8k46F23RblKSL*u9`ch z4FGcoe6Mg__$#8zr14~IkM1^KLAdTsMk(_D!~Wq}x~xO{$DUaBk4rnXe_Y(D{X>_3 zHovp{v&_AdY_lrRrV}2zUG=L}z8018e3sIKUJk00K3H6?x!Wl@Sf!b9YBe5dV!NXX zU;J*lOv^v93_hVx6wVATeXY20I^B2Ijx3;nhBBv;<>Vvk?t|~t4fyOOZ^@C_K;3*| zv6V0oUqiET)%5yUFpbc?ibhms#-C*yEtJ9))gP_;c${_1to-U5+GROBNAu}jXhq@!wwlbOIA6v$_ptN86z+k<1MGfkXzYb>zP|;r z3gU}KY?blT!?(&fk$hS+yi=pjXMATyok{09$PaaIjQa<*peSEDLbYFh$95^9WiW6F zzfb%URex_5q;Y1!S?j%(8dJon_CaKI2HDnT=kJaKUQRqH9>L{B<#IrP`g{5!56WeO zqa|~fnfdpI`kR==5EPo(_8d2#I9hDLaZ~Abo;A#1XJpflf0#nQ%@`J8c3=HBotu

??0UoHc-lrk4H9v^gLqmT!pdsd3BU$#W)}7XADzlg$*^t5}cHd=S6WuABp!I1r z=NI^qM{FT9Mg0Do1NLi>I6TS2e=3M~CRshwER)AqWfR1`f_R9@hx?XI5}dpFRsW)w zK#fA`ZjX3ENUiaRCz&cG45&fAwuB`Mv!y&M3Jf2W?fiDp43BS5tLJo!r~2%e>;YdP z-|klO()}yL!(cawldR-CubDuWw)rldsFN}{vdgN?@pZ>mSrCs3Vm-cN*j8D6{uF&) zMLtd(*69kqs7GfjI6G1rBb<|{2Ud7LK}Pe8i#J2pstwdjTdj+RoZ7sSK(<3+$n2xBQ>X{E`FG>yz&vJA=3 z$JLmvDahZl969PkyQxH|H*>Mht^Bx|sh`jH1^A|M!$>@Yuc4irVp8g?K&LWm%xS4~5)KMtqoM%o8&?wEd8AAm5>Fzrkx*U9E2xwR zqI(U_O{#cOk+7KPp~zpqe2&t?DOCNST$o6=*F|=6)k39{8`R|9g_JE9P*z;5k#ZyB z^)51mLE(5Lo=|I7i>xAAZj^1APEHp zWni{F2cMlp&B>pSD$q)ytKlN7wZLpU!cFkvHuho_dy%C?J1MEg6|f1btm)D*Z^>Y@ zW7g*!vLEtP!!w~m*vW*1Ql%Kr$4;<4)98hMgz6wn_2D}sZQ?AMXCUMLUX)D~_cB{Lz7# z0M^Is{~P=Jf=|wCfB*IFX#0Em@J{USl_xr|zpuKkL;HK}w%GRf1t-p9e^2Wb)BgT$ z_lW$xiqO*I_E@@2%GI&buj-Y?@s?<%aZ$`mSgPN8V(8}`sN|m}DTewxgw1k(5La$* zlh31T?=r_;NSc54*9mlesA2OrB9A-kcz=yWsq-F)L%!A(_tSYPU_G#@ zJ;41D_|GswUcHT&5xWb&cGY(wU-e(y1BTV#u4ee-jrb)G-9~z`qK~c@kl){LR=X0M zK)bT#>WHrFua4Q3+YMb|Z3xiD+{iW_iP=Ve5cfB#Nvs?l-gH z1mehGW{|NMDEeW%ItcE(S?NA!+6dbV;B}_`#;t}n4EbeY{rW57 z>3}3^Qn&apJ4{0V*cH@e6s##=0`2S43j!aG>(q)+kp|I zT>W88I$zQy#sV}$8~=)IV{Gg;zOWdnw6W)j-@S{F)Z?qcY{88%jv-=>R&Z+X9~n!L zHw}(JuKRaPhb&lhW;)W!H(uqc65oZ56X$FCqsS^pM~yB9T3qS zXYB5LYK}q7ccBeiWE+2e5VMUkLmN;)YWN*AvFa7tO+^9oUt>N2dO%iycq)7N$=Nt>KX7rJ z|AA`r|2DaR3$i$|Y1-q7T?;sR1F%PxZ$`(euTS-8{zDsIQD{P90~Fa8PvVKoK%k*9 zMZu_!htEcJJpA1G?#G_!G=At#aGr&V+_?4o?WDaw|EYYxd1T{;Px$P5>WO@GDh`5#C z@)V8#k0@8cwjh_|0%Er;v$_OoMPKO5hL+RuW_epbfp zXJzbuevN zxZh(fulzU&#xHn32zTc{K3^`YH{5EjW%8kzexN>mS_q}&w&&r;uRbHgr+K&Rl*z&t zz|)|}433!sq#e&ilI7XmB3Icj%KQ2ad56yX+So&1Yl@f3$*3kXd2Tof?&p22vv~g| zGrOO!$xOZry70r~oigM>tzSM6*eCyCJ#y}S$cj?;5>{GV z!(0;xzOQwVx2Mv#X`vG4osfrpX62GcoN4uCTsegqc;mu7>5e#zGy83&T4tvsm{%Qh z1asRv9s%I*$sq(f4}Fpb=<3aAttYg1Hcf+g{|9kwm_a-%=X`6SU+f{g^jBvfsYTt` z{QpCx?|^9`hl%6V86xyAtzZ7P&Swe8@kg9C9Z9~7wUgN$`dC}ImmrO`A@Qsr*5cRu zT)>=+uZlUK#&hSJlcAH&N2|fHX|?2Br?g_37HTpF%nkSQwf=+mf5fRfW&qnUO#{!! ztRDYVC<0kXqg0T%AEj0!fBo_z(k->sb55^e_bAPYy8@FzE+{f=I6^<{&VPc@5o+1d3nrUuj!xZ^AGj^S})Kw>7DIs9auCjNd2by z3Y1)0zdVW7dtm!2f$poEq#9Q;M^26;#Z@v{ag|IXAHwMf>W5Nsp8)wjMykUG`~{wj zNg%&gqMb7QBoTVT`?qmq-w#^BOF7NHHq(+3gvss=5An6mDoXXW&MrzIT;aX&B zH^HtdH=+c|I?v%N7A3n%Pm!@aNXBvsIZu+3k1pU}eg4*i#tW6w`#bWUVc z#1BqT2-q-@5%AxXfCGz?@`JwC+1@YU>mBfQQBAl%%rfW?@YK7U{9s$S=l>}Yvj}Ga zIvR*rv$k_0Mv(OWJ_<>(a7-cRZe4zY8A|-d4pXbyLL%^9L zt-I0`K}~szjMrW^A)bN z%#zk=-uWfPj%nU}>NetUT0TkZ_Xz0sqrD>feV=y?S2-d|?6~41(e$Cx+92XoP=-xAvug{hyTLfnlzv{YpjthEx zZ5Do2|9FlQq?u>4#jn_vxySdt#bY`dB;(>s1163WL}V4jJex1$u!kJp34)lE9}HiF z#M*4J887Cy%4GO_=`Wnlge5o|`BgjOIL;$B2&sFGAlU=H^oaX})cR~`&@d#;I7@o_ z(9GcYK<~bp{N9_S?%j~&>FROT@vG*>aa^{P*;Q~>^Q)jxc1|+#?LLjfoD}Aq;~CK4 zk$R{3GDdiqc#)G7z7t8sNw}!zRyjNaCPWaiAbyLhucN2vgRkXtP@jm+$?SNYny$^s zqCaBHNpKGtfY|79?&DW&H*uUNbzio>MVWd*Y{u6QgM2-IDh$w z?)}mdvwQPTp1*tQ*afi>&!WTc(|cP4l~0*sQn`D~_O-M=zoyadW<_>)#2q46d2wWO z`9WNHB36Tf*nnTO5m~cN5Rc%eZPa}OKT7|<8;_^|Z=m_fY+L1B7J3uki0`A%8}Ze) z7_q62aFkM?9}Km$U4Vb@n)Ak|d#}@7TirT7*0t5biz3}tSX?!$K2Df$k5}&Fuyv$* zqXQA^;i(bfrMA{j*!42I$D+46f9~ESmsatmFQ|4te^XKJ$_H)3zH6T4 zog_$>Cuikzf^)ZbT$H0Xc;kS7HhAMK$^mw(eVv#dkS^Dae@EsC3xCUB@0tvWo zQ{}38E&S&^-S?fwH^A-R`*=%iPg^ylm`>aFE{JINJ?CN$ z_onR%YP;b4<;%E8-|kS_?iDDomN~#&j{=LVNU|&;O*DS6S@m=@gw;SEs%9ka!>^Z6 zGx3$m(gIT9C3JNef5sLubv=n%$#=Y{I5Hbn@_&EZAxFmmO{L*d)JM9I`AGXeD55^n z%=uos?3FBYnnkYik_aE^r(!h>L;CWewiuWbOl+1EH^>9X*|2Om3j7TPZnh$49q*G^ zxIqf4K57O&9q1j80<+_-C~!+MVKPmO86={>LP(y4oTnEHL>5d#qIsAgnTKUdE~_tN zP9~K(kT`poHC#e#(AGl!tuBO%*M{zrFtmF zYQ97NQE|3?5EMe}b;$xw{2GY|#pC$uhl!YLWBG+1q`KIpH10;SJd&}H!uT#*?CTvp_-D!MyZlHpDsY2u2mL84_`@<@{}<4zZFeDU(p$sNAFzHGZ9THFDePi2LuFW}!WhA6r@a^G?IouPK z!(wsNhv~I*3X&$8K#&T!?df>1yG<^wD)Q3J9hiy8(-g>#Nwze-#v{8qP(<|P?p>($ z2p>KtQyq2)3gjdSq#;iLrFjCy>7GELOQ~2XH<8sX>PJ9Bo^|;cD1Xk(L4g^$L_o;| zWaX*Ct+s>|JMs$>60p|Bdb9DZI4XS_m zIwr!6M71s}L}uAczKq}v(NbIs4x6H?P^wKS&YJ>FL72JWJ}!ty4+3GX2V&Jek-sH8 z8!4ra(+u)lnkLS5p&mMLd!AqhiO$75y99d=P7B6{4L&e6!?JUd7c1tm_X=IHk#0(JE~0}&qB>6j&ro&?>VBx zaG`qgXBF;U3Kg@FbGXB;a4u6^7HB z{PHj8L|OL&E<8J*`46f2!4`Ih{9t2QI5ClsyJ~%!&iXXtdLWm`)A)fcRK6hNegRs) zmNX+-u52&lAR+Q4*U}XN4&mM$#xmUYbn2hqe;1M5i-yJ?(XURnM(K#cV;n7bqP#^8 zk5u#jA>9ItoSrwFI^nA6uPu=aTUk?*<MPu@VC1;3w^z;BlJ(}MY0uA9-m#?TtQlIAas&@1lo~Qd-p&tCD^{tGY z$S<|%JH}U#j@>86_OCv9UjJFXBF9E`p|=%XXu2+qA!r+fHSSkbAzDg46G?rZdvh+Z z#JB0p+EAd-io}IhU&do2*=k4(TakDGH=NxP;diRmH-8XGeICCK^qcz>{U(L!H{A+2 zJlqBPO$t=}RrQ;{kJN3!No`v+0gY%j&i#lN_M<=o;n2?JA`6~xjrM(|sxs9D_AjRD zjc!F!zub4*qx^DRP%jrM+D?Vqwg^cUajj0V(Xu4<`F4k{1)|dAC@M`JQ)%9MbtP44 za`dHp!R3Hw7(kE0Ho0TB-UUaZ*K$ke@!5{5J)eGhUi;4D;J;z85eW8l zCjUjq1;xW-$pr_`Xp2L$2BfH2e@{LHLCPr_`yD!5H}_LoWBoq1EHtmVGg&BAzlmUc zflkMFt#N$ot}~3!4dXl6xV6Y_&$3x44Ag^x@++}X&6MrXLW zu=)Ls>!7}Lk-fOIo-ciaR_cmSIUygGOsSVm;Wi#3FmTKzPDLsdpD8#D&^-&Hum2dXFC+VM2isCytJY zcJMLsT8+S3i~}BcD2o4Tq}IY4LhpB);2h{1icw#mYCk)ftBCh96zJnRI>ICbESb>Z zdPfV9AD;r!du{Yl6VZ5ELM6IsNTE|8=pv)il`E^;ED=-i#%P#=bU_I*Ql|h3plcP` zU4|*Zm&U^cfEq=6z)sr3f>=W%mYR`xFjf}04ryES`32FIjK8w|0_@NI<1Q$EKNg~laZ&a;#B+!j3C4nX!-*k3bkZK#Hd{PKsosL zRC$NS?(UmI4BgFewBVkkv%{6^2=Gsc+2f)ix*o4P5!vGyp)Vu8DT@*M62z5949B2> z6Zaev>!i6Wia?R)2$BsiuRxV|x342;TexefSBWFLwCTVJ$@bTx}~bO8RXuOg`KX`cu6U$(t3 z>pPpVwS}_HZ7l}2$-b5>_iQQP@ai$K^EK(3Sq#k-#cakn#9a;1L$u5K{Duc%e91C;Hw={gSA~=M&fas{N7(q*UAG^YgrB26w51!EvlMLW1z?j24E+jriWm^4Fi>{olq#kwWu-X=3?T{q^4I`fe>uq4ke0fF?Bwkbj~V?br1? zU*quHjqH9Qv?W2!PPSHw{+&=v2?Oyp4g+zji~ABKeX?&!`saLUSxgy$}L=oaA$f?sHK2EUsn6pm(y;(;q;=Ysr$} zE#UA=PH=Tf7p=7}vq=fMH9>B*G84y{Se~^Y`&5F(96wBrl z$63ke68M}%J_q4*O6YA1)W@~0pktvWswY3cSq?pCG0yKrS6|@#-VQAaw8b9(+M&$v z*?*DsZ{fILNyej=ktVKa6cYPLmXRi3#v50GJv6YBmGvC4%repx{u`1qiYy~d%5&T= zyhRRMwb$0NTBAFm!fD_G_}ecR4RrGr6Z&O|)tSDdS7eL3J^cGPA@fvqayIX72qN(q z5n_&IIhx3MO4d&{SwG|AA(29^K5s9W%UU6r9Djc0cEaWSN%4@^Ajpb*?NagxkOn>C zF^_m0mvLuQ{~A~6DZW&sEK%l5uZ&}oGL%_oi64}Lp46Nuu2E7LR2P*%aK;h5WJtM8 zRzjM({?^h8&kz)_me#ITKIbZ*)k4oS*k~;)61|qyvsN-NtYvkym20`Rta>*~O(Q~s zHBhZQjtreH4bGQw>`F3w4)Q8gg|?9;Mhj0Ty6DnF@R=^XT=<+4zJeZetdg{3>ECk& zhYzjaEGtc`R$nE@P~ahZE~PDgtP3OGK*liP{YA;h*KS&V36l3CaZxe~JeWk3IoQA7 z$7zv#5hrM%6b`Gv23Tfk<0CKUN&EQBX}Fx%|CT1!I>zZvJaMi1x3WlEVID`N>oRK{ z(`D8I`F{TnIl5=s27F{76CcjQ#ljaO$+EvY-F?&Fc#XrWo{KFw{4ZU%Kc)u28M}^4 zKkK~P2M3(L+a{&k{h-?gufN9Oeb06v?*z1hz95GfCTZ#^IYxihuodE=9tWlWW*!H{ zWS?;Ap4mV%*SPt_(d2Wo@;RUgSR2$5*3HZp2I^neQU9-Q^v?KmJdcWCHm3YSxp23= z7|(Ru4TQ}@!p|G_BkA&`&(7s& zc;FfQ=65npD)nMIQG5H(@^J-&?@pgkf+rBg4_W ziyh5Xx}&*HJDM9JkLHHIsYmlh?PxC79nHIRM{}KWG$#=%N|yMpa5R&j;)~Hvkhv!c%~Dd@&%`2evyQ|^b!0uJ`^?2@ByMJ;J<9%%fy7=5&mrPsm6BLn6$|kDoF| zq|~=~sn+Ni%S=5)UTUYe*Wf>XdUqcA%MW4`>l-~L82{*J=p|M2*aC(9zn}MkVeN(` zNb23D8AhwWmgOK>jN`$a#XO+2&_~Jg$meBTB_EZ~<>#81T@NtzPa117rdUOi>yXPbH6r}?UO-QpolP2RqF)s0FJ|eL z+ns;OEIy*8NHmV1Ib!f)D?atzmQH+Ms9_l|`mmF$5o%Ko{oYZ2#dkZp|IjjfQrWi% za#oQMxXVBg&MY}&Dw>~Jawg6@o+a!O>^9!!w&(GQZhI2>R7gIhP-TZKD^~NUI(`L9 zl{4M6S(o886K;)PTBhC_KeHDMin~7aFjfnTW z|9Bi>zeFOT_OT|uRN|<5`unL7Og;VYsSze$22XJkg#Zvz5PN)mY6PgKUz{3YQl8^o zUlH|G`I9?CRNCosN<#T|}EsM+#Y+%&iz!+*BvoE!8BI5V(|A6>y z%undHr{nkGg^Sq>5qSx_zPyI3bTgrc0IBl%sw$Ar^$8?nP(YU^-k8S{{DX2aSmc{$9X5CREP`{84nzwBvy^hy7>e=vSn*N|&yW=+a1C zmozuS2oFZdlCm|1pT*3Wy=hkLi|cQ0lcV!+y6tHm$z_7fdg|V0jKFzp*<=)$WEBDl zLFBAkOnnH2K(}nkTt)syEa<1V%Omw}MAGG_|C+-Q9Z77!gT4X*cf*BD9nJ61vPH&+ zTDHifQ?5=sHI;RW^kE+BlSkZ*s*jpIrYetf@8a<^v)@fp?^`^Qne^;mYvz)k;ip=l zThB%9pIH48#0EUBWs6Mf8@5Cr-MFSAT4sIXOsoqya{las^XGXpJ%8%h`BTNtpDH%j z&1|j})7vrKWdK^WTpYL@oNiM)TjNhe+6gqya@YI65n6bOQ3P2&ZKu127f`KSw%zp1DT3XG)zPz`EAb&yn8K25T6 z@Ga2Lw&oa&NV2^9XMn3rV|*s4=QEdnV2n7gf`w2ASwpA??`(T6UOaodjNka{4I_&# zP+4>iK0ahS^`KFxSnb&kS}tMkYjd}E{L6QT5ay290T;q-HmUv8S;zZ{{>H!mopn(f zQ6#Qq-jIqUJ)^Rd0jRw>_|6+NIJ%V9iaK3QvjbaRkj-6SwF;M_{zgnOPSs3-SpnPLD^8tZeum|1qhCVl|fbv%|G>&1!kzVL#>3&9e(sIRPk9KtIu^Yrhv!~ zRf1TLrye@LhSIR(yc$Z6voZ2#Zv_7L2*ke~W&E$1@jr#{wX#dN8Ks;rO2o-Tf0+%2y-9sl!`>n*3S3X++f)3bNd{NcB5*ZI2LGqNCc3tpNJkYx#n7o* z;Amj@0n;4K0xj)SiW$+*b;@V;l68$*`T}m6bJ9?tFdYSoUF4lz>=>zH*DZC-ipDV$ z4Yfd2tXK#n2!Tn~s5(dd6`aR+#_S!DxibCcX@cM#Bm{0r76LPqbn)#6d7s@x zB&mwt{j*A&yw)s76%q1BQCA^IvW)+n3huedZ2F48Q5SN6A5p771ZLZlvi()wf%ICC z%?j&{iC!DBXW{XVD%Nz{E#z(;%{@rMUAp84G*xwI=eAB@8cOBc`b!?Gh z{r>LV^?%&oudSu~JNx8v4qI1hORWx;T7$B`o7qKQE@U!ixHWEjAy@0R7eU)@d$C$q zOUYPOh$q)jCcyg}v}B1pRVxxyaXMA>H+LWo$p_HsZ&0;72Kj!rB2ycZ_dDuCyEyF@ zgKVv#Rx-$|*c}a$ZnDDJbyE`ie+pP~rzC}`D-fdIix5H}S?)NooXZd5%2k_beIsC( z56~he1^BAZ$ZYO|GXNrL7bhceX-dtww7A%`QJ9bZY2b#vNUnDC+iQ{Y_(R93(~)OR z9T>pbE~A$7k;{6noFvESosjR#lA!0=K0el+J)wv=f`{! z+qsWl^clgl06}8%@(V(96vZt36j~9?f=2+ zo>=RyqV7%;rQuabT4Jl|Vj>@X8NM!Lu6j(YHCNFnsA05J)LA5+&T>@YzMm3ue-pZl zJ{1UCVIHS0!Uw)b;&FW9=5m&?JWxa}sE4dby5SI#R@iD1;>br|#^qfgx==J9QtyBE zlBSO_QJRuhp{!tc2{g$_V75Icw2^FN9a|!Y!aCgn5%b_sW5pR)Q4Wuot6OnU5qC1_ z8H&)>!1Z~YerZp&sHa9yJ2lqnPK|Qisj*8rHTojS^2qPYRUte-h(|Ary_rES3F4*u z30JEZ#4mB${wgGT?8A6DWUcW&G_J z<8O+dmc(2R-~w_DTtJE+u)F)6^x~fAaV`@WUlCcx!K~7HzI2ue?69m7P5@pe^O9x) z8-)uza99nwK&g6TN^eS8Z4ms}m#wlYl(9lX^q=zT1Jb8oKZ@P9E0W3 zs+t#cg-`U~p+LsVJE%A3D?3K$3!ms;62$HeNZyNlZSwN*3N^^FOy|$Jm-kgzI4)c2 z-bgfO=@t{%hqIjx{OZRoZ@q=McU`6M$94$g%Gqg*N^eo43`N3==kX%cSP5%$x zd$Xk(X2E%6@pOS^l#nbLpKIj*nni3&eWaB#iFIn7a;2!&L-t~|SPU6Q_y*O7m0cq~a}f47`4<1u6=FCFv|=%ezw0`7 z>L^DQjw~62vm5nfKHo5rI!qAHl|7Z^s1L(*aPH+F`_DO94s9b+gsj?dwdrnD zkOXFm&35kLrQ*M2d19b&qEmIrOQG$(qVoX8cF}( zEQn1Z>seXGPv85Bj32-E6`5tySp5kR4(P|FpAh+~0WbbUl@|)&Bdg!^2@@WYSrizJ zBBC*zMRpgJ^W0?uVVP6yx%jh@CT9t+Pr%zdQP&%^!a&{Qj>Ek&0GX1b7iYHg++byU#+d8%o> z3E@56KAWdivXc7D`cFBh+AAbW+FOrsl~?NPRH^yjUfDq}%4(7LHAE;zShylZ0HY-` zit`W#-+=`rscnKmNiXadqHy9M8ab~(c z1!wi*A(Xw>C^eleX#YG8Z!(i}cAQx&ayT2xpXbz=leijpl8O8iNB)WDJkDl*)frko z?g&cV2PHxGF-?rBT?eR`l_ZlNl7HgJKk+gdpCX0OJ6h-0yl)+4otG_{6u7h5dQ;%C z=1G#dIg77w*|JKjyq5|A%gAza6kk57e1yr-LJr&?LI>#@Y&Cg%!ILU_7Prvz8L7qA z)~ey$d6OjbK!L_&I;$67Po$J$?ecLCBZ*`g{na;(7j0`vYLoRXzpV~Ws3 zske>th;MP+J~&F&u@gH_qa>|2CJ?5yR<#Sc2)m+Jc8)5_fwQQ6FPo-G@ykU+1n0g* zO9J)jQx&crX7BuJifnSA|tv3o+u)Go^&@l(nnYeOgh(y{DX zLHs&uT{Cf4|BR|ZaKBfz1oeT+T=doBGabj60{vUK==xK}ykz1BhN8a$+b`rGS;wx} z3Ruo;D%`Ty1MGF?vG3*+Z?L0Ux1C;mWI39Gxbm1RBfspOfc#ZOLzEj8{BZ`$58eNp zO}fy--)g{92#RVL!wdD#&LHu0hs8Hy`Vd|G>;?J|?KKdS#!u#Slv`KHi>YoU$#RcZ zc*cecGdp-|6IK~#N= ze|Mfgv!u979PiIE>B{vIv4Z)}@ulSKU%AuW&tKEG5gh^a5s+nsuaYvI7YjJr;xYpz#P z#g?cXpLFu62h`9s8sKoLKCxwsA+aT^{7W-`iBriZ<;0sxEv~=h=+bj&RezWK%aB1+ zno3DQ({to77m_F2AELq9vS+cCiicyvQN@J4|3-ZUOqPa|B$N9VO?<~I>UwXY- z-#Mi4b|lR(A!$;(qYA(0B+5Y#zU5&M_8g}&cg3mxt!F=fOGdu4ar~Nq>bw-Np+K$` zYD^{5rw#bxPhX=~c)2X=7PX{~wV}YwBzTdqB>dYx`c{!mD?X*=KBK?N6T9V$W6d>V zyTnE2dyDvmWO>EI2&?e!{p*3K@CHl7BDUg+BXkk+y9|p|vRt%T)RORO*;pPnG{aKS z)w;|aSL5npicUip+wM7FZD)4RaWI=Oe_wP~zlSe<1S;xx@n!^(H2qw_p_<==$k%4# zS3gXqYd`<4$1JAhS65r}MP#mVb%`j^qZI&prJ2%0u9#=cB7F8GF;-II`=8S@&yMH; z-|jN8lF+N(?bIq9|72&>`B7QxhV^amKL_&%QLmgPmR;mhqH>9|?L(C6!OB|#%j-(> z8!AkUCJn{?4}UnBt7#`pHs?1XKf{ljN-&x046}_%XGn!`J`UnW>f^?HK*#--$ z2S@10L??>Zc!qTY)y%qXFofFEuY<hL}vR zr$WOztPjes-VlR-6;b|0=6ARctKv!PDQN7v!f@MZyoBdX*@OaS#$jdI24%G56(a+i1iyS=vA{hSI1ucRe?J@O}3I8|s zd$(tww|?)SlhGPV@dsNvuHUQFw~MOZySs8;NA-IXhR3eoJE`?N^?M7SiH5a7)|A!hT9hhlld6FmE;5ZA!QI}DC@a=6ZZ!RRYq~DP*-e+H=MSk%j{h}J} zdUv9@s7uz6-7L}FL3H{%RQ-z$-PKew*~FpLgJ_rKp_6xiH=_}u(_vKI)(usk9fMN8 z{E*xHlkKsJeX&NT3RlRF(L|Q~IwJrUrk}9+eRe^l2IE3tutYZp#mbmdY29-%E-+pZ$xk$g$E` zqwF{qYjoVCvyLhLWQ6a`Fi~xp?Cbm>@1F>}?c$$T!`VZXt$@u_Dc^SZ^4`>D`z8O_ zf5@+QeUkcP{GgBCSx1-IFG#wf8>*JCK;m9heP#?wJ&;*Rc7(uh|3*mt675Po{K`1z zoNFIbULT%_s@pG7U*9j>^)*@b^xc->6^B=S-G3Z=x4NyDN8AVR?G^6&jx7A_)bF$J z+K1ygP6+gQ`>pFtyBZQWu9B>*_e}JfrvVE`wo!9Aj5-dA2mbV3I@F_>XbX2m(g43e zK)-`FY$=b--Ktc6<*?^dDly-&ZJx2(?8u`5u5wsZ`PWMyHDqGdiV3j$q2$Pvn=}cm zy*J_Ra(@s_Om!caSk$2Ne>va%oD;B}q-lC{WBhIVkRw zW#%%XiJ^ev8VV@a@#<8j=28YKxQ1n>QVA|BW(sPqeM>F%Ojx3ovY7Y(I@?`l?hG@4 zZNLBb_4+0Zcg{Wcxo3UO^SnPwedRU0l43g)d6m%CK8kGZSKYu{`$#)kO6`LQDj6ZH zvPkTkc=w?S#~fMkM~ZzH3zhiko^{arCgp+`$|J~>QQ1E-@A_OrQ!6_-Wt&vfG@3Uduh7^ z+k|~+fJcL^?&H%qJ9Of0GEx(M)&&Bdn^=km=UYhqK#X5Yx>rxP^k)({<4^BakL5?* zK{J``j#;_b1yLW(RMt&YkvdXLGwljG9YKv#`w4EG>5H&UjbGuw<`W)z!r zDCVGTc@}V?5c|J&+7xI}Ef92aS{&eUX(rp!daIU(@^=egs*+O9p6}$rO%`h_p~~~`9K8Nsjc^FpbIAI84_SXxUeHB`L24cY z-~?Hz(It2Akp5uglF11xVHV*QVnlMjC|x8~mV>lP_H!ovnL8k#A5WqQ&$AhuThi zMke!vCKa;0L`QI9sp6E27PU>uq89s=xgrpX3w@asO4kwV#muUSC(ww8*r*+fKoflZ z6Xg0#ay>q$*Dk%1DhYfg?DwR6%L}`(!wJY7PLVWg5AIKi%ju%%a*D!?S6-X=F?Knj zjLDN%u*)e>aydnb<#I%BDn{XQ!h9bRtsX-Tz>WF{dSJQ-uPJlXf&=7#W6i-S9P(2v zgpQcZ@)o-7pXOl0)h3HztmLC70t$PJYw;#m5 zCS1ejj?32+We8{>16&`O9B!}B1OuD_~*iOO#)5%A$}SrDLDCbAmTES zl)aKhET7rC%}La<=9o$4>tFn){tBFys<-`+(o8veIe)4{L6wMJZ~I(gfR1eK)KMOOEaPn@BIs;y}v2H zx1R@-6#UZ(TMs~;RSx}f zHBRCUX39epkI&sH*w=@Km{A&~vVZhasg3REI%2y0=vt>zc7D52ou4fQri7%<(Fca4 z#_5BQF6Ja8iy5YC&4eW1j%yR5+kK4XeM@_Y&ajl1Co>9c_V4Kn(Ky`(Oxl|+0k!kDe6W#6zKjd6nLB(U9A?|}1 zw9?qgh#oav$_5;Na`5CrG5+Lj6vNVji4SDW5lBGBXl9I@2Fu8>MWk&GLTz)VH(2zZ zU6hDg$j18b9foWieN-i6BWAWTWP^s%NC7B28rcV+oOde#WnvfA0F*ywRT+SC;(rdG zCT6^fmnuzJBz}Nj>Qy+2N*Ney-w!JPbiw}`tFh;=BN240{~})r%sQrA2{gbf0r2j- zb{upht#%6jo(?7q&VOg6|nzDHt$*Ub1Ql_d&E!TY}! zGR$H$YoA`%4ekbduEUcB_XEpoKgr>k?1$mN7!$D-h3W+oN2X!~9`lXu2t5BCdyAB@ z+;7hL@YrjRGS!*8q~ARoeSoGOPUBN>_?h6POPQ=e>?!2n*hdm26WO36@m=XVhK5>k zl&os-JGNq0D0_XI{wAhPzJ5u7!ntiXm4{dpd<&LmiIUCgI%=_ImnA&0_JgJbx zdqRA(?0R?w(f8q0reqRY-^2O0Wk}*ZO?=~QFZ|aEpH!yA7;qsVr{o1%1EZMDS-c;% z6_9**tHAQXe|*6)U!l(1?Gd;RTq5QUT4cF{2EKbs6bNJp`YpDnq;|ye+Pmu}Fh(Sy zZ{&Ue15Ra7i6dNsfy*^;U!&!kk$VNp-?068pC%FpW*-Ro7G@^9gDg;P zW1L+wN0qT8mu4VW#^o6*u_O-H6>vuKH{z7-q544h5Fy}!XeVn8qZxh!K8Dc@zhQnw zA7cIXPp9jTcQp3#)hI&|uhvof87Q`&CvDqL#!6-TS-BFnA2f`hhNF|lGL*O&l6;%& z=Op1_Zm2%OLXJB2U41_GLALlRoBL~P!=A*qcAja3I(S}59hUoE)SB;#C;f@1u^TW> z@9*-F^jFO2wTFevtp!$dtHcMj--gnNS>h3J0_9qrG{RTa(;u6qtYR()!~w*W!y1!yQEts>c@% z>_8k|cO1qS9X)36?($pZB);gvZDo8B@^nS8ysyWqg*d)Qmx4VNgS@f7s~*dFv0RK7 znhu$yVD>Os8APCYBEcIhTC6Vd6yKZWee18p&MmvBr9nFNsHLFWRYWcAi&u4Pg~seu zeovfYRvc2FVm{`oQeOHd%6ccQ4fo)%&_*AXEyAf%1>m#o@+^x*?@dtd?jBr0cXvy+rVCUN zT+)AX+%XTwuRP zrVo_KP&pi4o49Qr!poE$$&gFn6x!$mft*0M^np6yd(Sc=eV_}0qCU_QUmPzG^?~}d ztD!#7pqxPW^nu>qhU(SQxQzjQ18wzzLc}y&UOQpyJW(I$LScq8eW0)R2fC#X)DTzV z)&5jJCcCGo4^({U_a8)kphr)QubDnj!2Uq@^ns>sMOCYKaT^03>v=!*fvz=-V!(pp z^jgpd>i<<>4fKKLZJ8(O0|h*-q7PK^WuRO7K%G#DjpiCe{ihz1KG2kP6u=z4u7@Tm zcU}+5*v5b{ zPt{x>XeDoEvY%Ab2O2ltd9^>?8|b<|(4CE_+HBu#4A>g*@6rbvnTF%v5*_ISJ%cZJ zH&Im|=y&UJkUlTsMVZW(g(7awW0bzMB0XE z*WfkCL#J6@D{u=LFzdr~B5sp=Nh^xmXl|l?dVvAnuhPinf@v2qV*B0uC~eb48^wUa z!t`2@ws~ha_HVi^Zd3Lr61O>+Hct|_nciiCVEuvU2iXfT$wZjABgl+=ca11bVs3bb zduM-irLb>RA^AiWkunEHPfSRE0jPq9MKypQHdB1{3D;rd5K zAt>@C`%U*xH|6@ee~Uhl=JOr3s1I~_oQ*!vg4b$AAE?#GJ6zKT%Dt*(HMbodovtK_8j_H2B`qC>ViEdkv>pXy?H~B zK2YxZvFiFj1)nTrz*xsO8-Z>n>I2P;bxj|r$uH&3^?{BrrQ6eEOX2qP#*RQ6eW0(F zlI`hdOJ({%tK$AfeV{dKcHCEepxM`U5PhIQw|6+!2Z}qoqZajnLTXPRD0>CY|A<%D z2MPhJ@ddxdspu)v^p-pNKn)mMeV~F7wXF~IpsY$x^ntv3tHjwn zGs3Ap(Cn+_s`@~IPNjIl<@!J)ZS;Y{aAH>OMXga&!153Ktw8cXAmTh;+OBuywSfb% zn*}(($6{$9=XynhWzs;ek?I(EpOAsPXA%7D1sskbR_V(2g|JGn{ByWcYh0>S=h)2x z@Q+oI1p0J<{ozLI5XQQu+*SVLzegYF+T|U8nLg0$chK-~DyF9TKu_U<%rUC^K*-ag zst;5##3g;8A;0esz|!}e=mQn!?NI0geROGuqz@EV>g1a%^LDtd50ui|%w%_xt)zp7 zxS|jAX}Dv3pfhPZs@4ax-9L;uP4^Eq(FgiG)aGg47+ei~prst@Fc|2lPw zsy@)1r&RTUejManAE?foXqWP=C7uDz_bT=%yqjY;CngIizuBJXv{JI_YS0AYR zl&W_qS%&KA10~||FAeiIFp_o~aeLO*II7#~lGXOJ|N#}R1c4Wx* z-$*uyO}RbqDM^|E0h;g~0}8EOG;)8rqIzgFrAj);Nh6bjD3HlNoR$3yWV%5)#FSK$ zrAS3L=q#CDE|OyyfE_=jQ~?4SD7j8j@ZfapKSLT2Ig$oMflLG9tV{y}$d!W@F2jDG z92DQtO8s@vXf^{s)0-Lyeuma%96&_eVk38igd2WALf<4Qq4mUnl|{^C%E!Y!gH?q( zP*tHeR8`0rRIE$V5iy|#XnyRQd?M~q*bqX9+|SnQ8G?Z;FmUG(Hyu~2q#hO>>Kkx^ z#PofnDO&P;eoRRQa-~(k+;U6s9v3sq4FPXInZ#AeOHqO8uLdzHPHq>mw zxiBpg&Kb2{eN%^O{raZ9qHST|=V%$0f6F^5c-Kd0i)P@4YQ0Oe;I?VAVBm-9HF#wg zRHR$>!977Ra)35X>j#7qB7Xx&|8UY~f#nK}Truc6$th87XJ2PQm(A2upk@2-Cq13) zzscTC?EmZC?f;!{|L0-<_uC+-?-c0HUD6MF1s@5PViBPPCO=F+hav4Mk+dsOw+gnC z1W<2OnIQT9;9lzlBRkap*wRWf}WWju7vT20nPKJ~--!Jgqkr*sR(ATgr~-GTu~b?ES2BUfU$ z^FKrGpU;Q4y)l6A^n6K!aIPZY0vZo~VQHA5Kbw0=YvdpDGICY~i2I&}`|`7(MKK;9 zl3NRQn?eh6`>$f8V`tU1GQXVe%Ab)~+H@RB7899N+aFDAk{!M0;4!~|j`_6hjanB- zRex4VBmR2Xh@T}J@pI%O{&EhF_$XbqpRalcG;(EdoJlop7SQl{*<=B|Od`p;5bPLF zxc-G;tjXzMqz`pA7%dc+Ax3_KK0%=IWka#Vj~7{jprr^;{-tMz+*)$nP6TtfFYt*z zw+o%OLwiRM1b-x)N|Fn4#5e}ihp&xH@^yx>0e%fdl z25g#!g?>tHa;I037tLxU_RQ+BqR`K>jTxxp(};r*BJ_hqeqOW{`5C8=Fj>Nbj_MZb z<@!FXt-g<+Oy8%CT;Io=>ievG6DRs3k)oerB_w?xKgaq$$n5hE!M98rtiO3e)8Vj6LJ0>uU#7r zTiFz$wKcbvYTk!%F}2Al{*sVd;=H-cayd>}!W zqDLp}Iq@STvg%Y%IGn^-#KsOwF6n@@Ggw}`aWZc4XxCMimVr*5qDYg6CFFa0!L_Fa ziw06E`i_ek0x(RoSK6Vf6EPxB1KlrF%09=+E1hNcCH&YloYFB`lG`b8Ah%O$E4PFA zJ`>?UN^3waCQfd2K0vgQwxPEXP-uM^$>OeZ!qU*_0FUZ_;M?63c5_ zzG2e>Cw@d*AT8S6Mrh#jVY8d9Yt2}nK$3vxt?eY`9lOpc-h8c z1R>l!=Nl$GMbIU$LCx|MUWNn-kw#+#eN6@~hqT4@xC?ciYaNar|a<<_7|(j{$iCP1aPf#bIg6A*bp1ZAPy&Y%(ro%uTy3d&qY^W7wH=lg;n6v zm+0$w2P1u*X}1?K`|DACkL=2H8-1M|qOVhc^>wx=cObr7#!nE(ahCUOFg;T`wcxcy zFUo@9Qsoh4O`liM*I9*EXY17vI`Y4<=HTAF(G=XLw_*yGUu59>YLLK=fjbQMvSGU2 zb3FV)69rBDPvJpVh`>%Fjc!6f0y;L+eX>#9KjYX>kUgYK1`QaBC3(v5MB2`1o~#cs z@bMb@A=)t*xgTZm8K-r8BvC!WsZn7gFE(pQyf563$%??{M9abhnOfVG~E{J5&x1>o*&N?&*@w(;zw{ z+S8$9+uW<#aC4{b2JmUuNfJls$X;Y z8Fl@dCw_LSUt{j}@6xZia8p&k#`8=D)~^|vAkVDoJo{8+WIxRg&RGb@-f(y z3-LYW33BngdV<{2!8TwE_=r?EF z>pCo4AyGmP&Qe9_9cYBc^>MD#$27Xvf*dDLYZ%7Nde1LMtm`=}-$-j&$PoWifiC4i z0=#C?gCcPlIpk>35+&s5oCsntS-_e>n+0n=o;+`iTF8J&aT4SxOdkVQEBG4o%Mse> zMV4N}aSp!=^NCz31z8x2Kwm#9WwONg;C)u`lEf-`D6XtQ7`892WjrDP6c`9^P! zLhPn^13osCGBV-&k1=pw1}?_S6iV_kv&<+j(}40a4Sa$(xDjE;C4p7}J-3wGVM7l7 zX@?Doz_QWEuYe{FA|<@>3@4@dM~DMN?$Zju2bG5CD!Yrx0!AwCW78Ah-=DM}FWUcU z!-uFP{>`tQMgC1QTmH=}BL8NZD*s0M?&e=Q zN?-YK!h_UA26pb)~ zQhA>ccCzGBT@+W30^UbkEI1fix9{@vvF+I6%WUq?t=X?ATLncv!PU_Gary{^P{|L| zk7mfu1E&xK6k>Ew;ar67c{X7&^VQ>se}8%lLiemE{*6rH-+O)8{{_vd+mqUGKE|EcfGF^lETp8jJ>Vrw>wm=rbM>hxe>WbVz&vsP+Syb`q zRRCFDf6QG<&+$JU3G zx~TGVG#woAbB51Vp90?OT@^ovZ~IT-=j0w=WY5oeD}RxUpY!@ok)IQ9l6!gj4Y1+o zoE|`ThsJR#{G9e35kJSjW6k(E5pCS(=V1F)VEc82_Vb7KLsnza{#U?hAJ}e-8Dg^W z$Xbo*toiP-MNCOI6_xWmXOj+fg@aCI2Q=v1?VuQR$e(%b7k4Hw;0&KGZZ1np$26*x5lA>88&aLKyKN&Zc zK_haQJ_1}>x|itZq~z#QUeVBCcf#n=p%3b_=2>2FT^-L#doDJpi7q9PI-KMiuJtpO zZmw<8&S>{@n+5AytnykfzOS_1vamr-;(H{{q`Xm9zTX-+Q^^}0MM{f$ZnID_2=03F zShVZOhyU=}t-j>!3Dmv21#NnsA$}yqrl%|c7V8B!Jthm;_V_+$zqq8^9`d`qc5sl| znSl0}QuP{;>JNMs^ zT^ft17?V7(S0E3}^8zVyzZTcl$upWOv zi6R;u?;?t51upR;RAQrB%r*uLg9Xk*lqpOjYmDFKmm|pAd_)bw73Pe;RUGFkU#c#y zPZM09)v!K?ucs5fl(jAel2JMtug%!}b=`)))j!Tfqs+&Ut0k|aO8igQ zO5$^RT~8ORc`zA1;-dnZ7uR8HY&G=PyUXt;v zcK?`OQ-0OEQ!u~E{J;CpuWG+{0s{`rtqp#ac~VXIRbP#e@vEj@PFLqwt!n&_VQwJ@T*3St0uq7<3iQ^s>gQ8PWvU#=L0@&^Q(S+(9C3amOcK#W{&t( z)~+Zsyxm~Lud1A-$PI7ZS|vBUdFN;bJXN-_HuzQjU%Le3L( zubMGHgyFYv1ZUU$r|`mE#J_@tNMSIYQwMcYE;|&s^PD?#IIuSq}s>H&1&eBUzNS)zVoXh`(u8U<+MBe zDvu6`UsdUUKloLTjivmm%5UA_S4I187C@B03cu>NI{$b0Rqa>(b^NOAewcsvcuo0L z({MpwKc>pBI@8+`zv`KKF7d10-Mm8p$6j@n}=h5RrAPd@T<~J)CRxm@$@T;cxMeqLjqpJL>Nc`8G zkE-&kzPPqnjbHWX1J3zXee`ITGN*4m14c|y>``VnRoSD&wuxrI(vpqU<5zt)_&)Qi z;vTJfhf;bk^RMDp`Mm5Vzh>K&tti~0-#i9*ok(|^Uo|u>LjcDgag|>sJO3K{-{e=l z6Ila(RbF2iziMVt`oD-@Rq~O${Hndj|9XDa@52@Rs;3{SHot0iYmr|S)7ohq{LPBY zzl>kyGu++&e+l>hKCu5EOTVA|DnqmT$**cTtS0=b@ZR$nka;{^gzecgC+OXeHxU&2A;*SN+;jfKgyr0OgI{xzC!>>A{m+`Bf7rRijC7S>_3L{X0^r(LpI;T-)|OwDJ)&m(s#dN4<@~Cb+t{?g z&BOnT{Hoa2a(>m}VYSMynx4H;08_I!Qht@GnaHmi*$nfmhBOoTRctdEzp7U=clcG? zf6e^A%dd*K70s}GqxfTsnEeeXzp66JO@7tSEfxH#ksTHMDsRRSziROBSvBHUEx3cG z;G{d<|5AQcrPp7_uhKmA1CBg`0#&>Q&tatT^Q122O%1~&Gs&8y;5oemHB9`Is8M_CyhFWk zD0-+L4nq(1*EI?8*LjBq>Y9WEqWL>VJOO$8Y$5|D?@Jd@W}O%xQ!l^iXS$SKcs7eZ zn}~0T)cA4NiNyB_(~rhC3e(5nJCSfCbT|BdlbNL8bD<<+5uFfvkw~TxFA~UvqvdfN zQwWM_vf!TsOZ-qhaU$YRXA%ita8GsNPiI}v5^TQ>?NA(o@>~4v ze5mk0{%n3oAaSIIFpP#NX@&i$ann(D+?CUbbbql&{rPSC{mGv)RnNyqy23~K$gcnE zb}!Mxl}}>1CN3ed+ym~-jCjoQ7DLkfO)B8VX2@d1sz{nr%$J+@~9cAm|E*?(S$0X`Jr7-?g*m#yd2Ro6g zZHM^a1LIKJ*?cOI0m-|iW}{e0icz;@e&x|PkIvwV7G?;b1l$vlQ+=XFc1&x=QAf#j zl7h>FVbwa=Wj?_F__O(aNY(m;FpLLdLH?=cr{K$PbTM`t14=%_sW9?lb-N?lqz(zu z?T%?1k{TPDSkYIPd>V~WOk%~vIBjCZc-a2@(6JyNrf0$7MYJo6f%~{a!{R{36y))Z zZ)$s^k|uWRC*AHLq2f&IAYbN~etHu)D_}?(}zZ;ewX2YwpkoAVm7@JtpH-0F~Pu1f1_B*k9ytm`E0~=3Z zz?LxVjSE3OF60C$Kn}SEQ;&O}cvd7>#!F0o=*Tz%`G9`HW!1@Tig7Fa$U zLVj;FfdK=r*x4d<=ho7yQ1?>Gww_et{lx zSllGMjWv&hD_I)HxO*EKO2TxzztD5o$Ab>3Zy8|AE;4dIhH*E-xO>1bMUbCQ3c8dQ z*uSYuzJwb6_sCs#5Z|Bpo4QgPHfS_~!A>TUU(knonq(#o)3bS=-8v1UHZ+kTAwg*l}7HOkt+$~1h4|NSV5Qaq=wWK5ooycq^2C=3GPlt zw+l@y8x~hLG_h=ad}o%Qrhz7Ygypq^8p4_vgU!8(l`$|5);Q0zS%;E<(8RKd@xA3= zd4zmry6RV6bQ>=U-hoye1@ZJzT6n$aVSy!PugoizsDr-;Ho8#m;b>{fR0&qJ5( zyfG3zQTt?|naO@i78UiLf>Fx zRMq`Nyb{Hq2DiO}98B%5bl2EFlae+D$D}CIKF{MZDMAJdG0)LQSr?$KJ|2IDY1Q(F zipa=vfQ&z%d6MyGg{Q=OfEVPDp=SgfdV0gYO&iev>P=ukV2H9?<1glUHqh8LAe<7C zSTRhOa-t5y?DK+)g643z@eDXo(in{&d*L5EaOc^e&qXc%?yz`m(h={HheH$Zj*n|D zc5h2);@ye5l=gKPCh3SLb}f+VbxIwo@5l1mXJ8fIdmdMj_}pptkEE4N^=XiZ&xMES zl1CADS%k&H^20sh@bEaxYj1kdkpaAbiW}mI&*sHJAu`Xi8j4zyP{0e%<$#{>Qc`^OT=sFF%X6$>3zR*_NV zeMh4T(f4=*@9$^B8L=PEcnCVFThJC&N$C_bw*A?{CRNtaExe5~y56`Os{1C4>*S4` zgrd<(;5fPJDVr{K>wA?ZkKebfIg5ytZRE8w0=nKi3V6jzmk5Q}Lj(@8MiG*sF8#==SnH zJi3iG^4i8Lq|q&k<+TsaPGz!v?epIp*F-8l2Nz$tS1SJF_mst_%~CBs^Si1ZR2)2M z=3VelKcK<$$`6Xc6aSgIW5KfWOzMjbtH{I-STGBHSc?3I^h0>X80q5X;>F?8#U2%z z*i~ygE`x$o4u<46D;(snCA!A1^FaK%LyRMS-N1K=2lgX}9@wLS_8wS24=4P(>{2Da z4!L{6Sl)MxW&-Bd*^}lnW~!6s-Yl(xH0OPBks4`k<@qex_uy{n_b%1gEv*`dc1!gR zCoVi$gslfhxGy@)eSjmq{)QJ2j+Vau%K*o<^9r2?ct*fM+&=oi=22^au z{HR~GBuGp{s5nI$hM7Oh`_k36Ep;geF;(ZAP{JGfR3n|q+tQ<6kkg|QNWAcvPA<}; zKE@!M^p=Q8(P__C28`H{E?8G;=^>p0#Il5fSWxmiEBiT8Mvv-BBD53{TfFv>SrZtr z_c=A5080|#BV>v2ky0Z3XqpI5pKn1&_KcvhAOA4wA7E!G@QRFhpT zaC{v6E|`#>E?6@>v0sSZplwGNNkCI@iDOWSjXvGIl>raJ0*8B|EX&RHX_jSX{T`a6 z;KC8IdI96CsMl$0YU&EUjhI^$9M@O z8JVJg%Kb6=r_=+Vv!fg4{FKQ8E*Tly$6NMu8yV+^9xX>evoHj<;6=I!jk5G6Frd-!7eDe#6#S(P zCj9tQ!Vh}oOj2-{4kF!TRh%mlqg0@}dL{SMV()n0OXF$NvjRlE3v^J=$g?*`ImoG+^OXP<0kfS-eE!&gB=4-*wgAM}E9%LJAB zEFlfU;6?Re;(gTTH?-GWP7_m58u3|K8Zlrb&JV?L703c1=?ImsWp3j!+bD45|&e4On zv)PG=>l5>&EM*?g?KEY6++(u*{8VcuM*669LnB?wzN3Ko*jiS;5Sv+OzYx>jAq%m; zk&n{0eQokluADL}`6y|}vucBn(yO(Ld=&oK+br)>Atg9|bWsqh;G_7pNM*8{+O5~G z9m{f;kK!4-n91%Sd;E0uGPqJuSduBQyw;-;;-g&Xp~yWH&ZXMt9^Sb&nE_2dtrb2> z$Cmejk8=Cx%qp`Fr{!h-yZ9)%I?6{GQBQ@Bl9nQ#IeMYJ8GTwtSMaYJ8GFxUg6yTUcbu78ZMCe3H>p{5U1}(A5QrPagRI zS~={xf>#ciWDd+CON&7848Gu9a={*XxG=Bfw#)b=tK{4Ok3zh#kUi}|6${9Y))k-f zMtuT>lcY){5MxWMl9gaI<8CBjK`1dana29=jIkw?OewIhlQb|R2xo)4g8e1@P*j;` zY$~(A1*wdb0By6X;I+FxQDKr?%~z`j>V+Lgl-vCYiCq}@P?WwZb$HsRgK~5{g0CY6 zhz_=tq|IbHH=3Io`G;}_@(s_S&#C96t7u@@lv2f}&Z zw#ID&A1WnBmmDq#F1>lIuliG_03Q6wetrWV?YCdoMOUcg&l7$~sr&p8$_=3$k?Qb6 zqTT0*TpRM&@k3_ULEZP%B~uOgAy46g%%mV2e#pvuiyiPoDh_42!VeiTeun^-)^$Pw zDekG{hkP_x#t(^m-N`ps_EhjgdU@FJLx#%vA;XgwGucnbR+>T19zd+kr(bQy{E(Fz z+49~(NFutFujp166gG2C6B(c(tPMK+B}yX>-yX-t#Ta?d+b{Ay2T)hF8-950*KgQ% z&uIry_pA|(&i{lM3S^?>=Kfsm%B(3N+h}beU*CxSpSjx zs@xXrsc;;EYUDTQBgOLrEMs@wpPV1GA?F8eh#x;hjwqSxi{fitI5;53FZDh`2M1f~ z%wxcKUUJ#A!FzvydTP+s0itB*s~H05bp8%Pl#GIFW*k39C?zqrl#;evvD;$rBkmDO zIw=SxirU!`O4iE=C7CiR$sXCy1u{YjO=Qj_|7NKWO7@TmEQcg$6%aHn%~tP9{AH!h z#BBBTQnq@gEL(k#EL*)mo~{14$2<`@2hN$*--VGd+70|H8J~ot3&J*f4Dm@$sPRb< z6Peh?$YY*aU$nr&V-WqB(MUgglb;d1L{H%*trYN*UKC!^H~B=|V{&duw^uU+19#TI z70S3JCW{TZ29IcAE(83z`^q<&cT@$`Z^u4(ZC|In6mY_ittS=gm1FmmT$rk8o+3BR2W70CNUa@0d;@8BZ%j!R4Pl{ zjV;Heb3;*jV#P@l<(u5_#e9=h^yF2}H|c51H$nROaR0MVC+C~2vgMmZ$@nHQa=yuE z$~U`v$M&J{t;hE%lB?wx8M%f^z6p9+ zW-OwG_$F-;-=twN+?n%(HP}BJ9#o`Tc-IqNIu!9uju?XuO#8%o0R<7roN4ltJaWou zq=$i&Z&FJ78x`U$BNmhk@>0G@mh5lR0k@oQqIf#<1`IApI>f>y6{%S`cgaBbCI={# z!pP;JcZ*OQM&e`+H@7u%8_S19Bd$@>luI-pxN;7>uY&WGYnp_uw^bFD8CkjWr9$i%w7QV_t7=^F*G zc{<^k z7Q&m%-(Ff@ayrDhLxV+7`O2+mafJ!v^490g5N$z<80f-*U$Tks7UuFi`nlat}x*KpT?wixRjp-h%2-a6es z8iTItl3pk67q92niqUxqEbntW-0V|qB=J+>yiajBKiDf&=j{RK<^t(6Kl<5O=`(-& z8Cp8qdvaB9Tx{9Jbla-|WGciCvw@?hw zpME40lT|K(t%cHl1C4*^s=MU`6`pFPWdWtr2o74DkIhTDnGqI z_$s|XnvAc~sK|7m_$uAfYRXr6(M`U}9?VyXrF@kZS3l^cOId^Gyba3}N&MMKT?$qN ztq$zu`rV$@gq_67U?imjNe!UnIKau5qFEyNl^n-LMS&YbkLHF}_ zjsH@j!_(28cM};98>h|@kpWb^kC~hUR0h7F4p1548bD=I6OPG##15bml%Wn#u~hbS zBgcmDQ@RJB9Gk=MP=3nnSl9R|?|!JxPnrGC;HUilHsz-*zMN*mPdPhEjAZ*}s}p`o z)(5r1PchVY$WQq!T!o+V(ne?elvW?y4}Qwf@}BPJXO(q9ZHKcYG9YZK`}`D3Xodi` zrdPpF*<04rU4F`)Wr%aJzRNZSY>lZ6eo9JjXZ(~2F}24}Y1P{We#-4P|6+d1#x=Fg zPq}=%8ZB;NC)DDaFNNd(6j%5u+qO95r;MgGaG9U-A&=S>+i4pEhD@mie#+9A+Tf?K zG53j|^6~rsY<`Na(8PdA!lwJcPuW#qVt@`7T|ItE9Q^+Adz=0Oe#+*Un($M;&NnIe zDXmbQ?=wFIk6$(9r!+w|F9s9;+~g`h<@-GRm8Vs|;xa$w%q$5oVjivpj2z2LRRfG9 zuXDyvxp8Z;4gX}FTl|#lQk(DluB!n*rEI43c-w|4AMey*)yLbo)_s1;r4NyJ>+*+g z@l#s8_jmGB)*Ui2psZrkKbW6VanQtoVWf&R;iv38NJj=x7Zvxf;HO-OzCZkw$X{%_ z*eCDTDnF&q0nys4$~OJe`6=;}Yn`7`Vr$?*tL_UwrDePXI5`%f1e~1ip$a(3U+FqO zB|AjTZ(Lrc1za8LF1!B5FPl_r1(0~P#~_Ixe! zQzn9*Zt+t*;!q@G`kA>XK4Ii&xA`fcUo-=LJd^g<@Kg4UbIwnRF0oi7e#+f()#RtN zyVlb!e#+R>bK&0k`n0VKX#U!L;-`GyeF6h!mZ#MMKc)B8o;Bg8#CC4S1SEq@a~ zW$%yMUErt0=G>_!Kc#%O$WNK_>!yDaKjqgSd)5L!rNzm)3^+CNZ{w!~)x9tLl>G~3 zVH64w3A@xeh-BsEp04v#E)=6~G;YdP1}uBI=KPf3K3mLWKdDyjw|VE)zIdsp>--cw zu6BI%RtB7X>EF&znSLY<>0f6$;-?J57wpJX<)`#aGc(zP)cGl`meiP^vS$WPMC$tU zCP(}f{l%UVKZV^;tNfIp-7xIZGK9#u_SAfKK@wF5kH07gfb-$8wpR#*n)%=vF=Kst1Df7RcOOBkIA4;?5r;G^^Pn}2bHRGo=PyF}rQ;I7F z-NF2n<6|7~Q`l*V3^@4HCP(~~&(HUi^Ha`!;2J+=s$UiSlqdJmm2;PUaOFG@-AB$( zd1N11Is5LD@l(n^{2Tcxm3iCmD?jBzQ_4@-+13d^<Ls{?4|5VzhDKcylU zT`*+5DnG>#<%pkhAnAVaQyQM0=Q2NKYDZg!K$oOi<)^&$?Yt`aDRI#%{FF@#9P(32 zn*6=|l&`POc8Q$Co={FIEwe;q%i*H@_fE?-+y ze#)&cQ9=FJs`67t>~+LX+4q)9{FG*Gb_ifV?smr%l(%nfSMXC_ZzSWVbbrVRKV`(N z?XL4vrcPPRWOtISG|T6?!cU2v=_)^kJGQ;r{FKf=&UTHTVt(AVdp9~@cZr|UD*kWcrvw!BbdR4>I1(KkOxiz}0gtin^HZk! zWeDKsZg~@>8yUIalJRy#K;~fuHhQ^S_#(()F93_l2Kg z7$@haREE_OKV|THB0r_ydrsK}1u^%XpYr?HJ>BD{EE$0YkIvb1836j+SAI$d?tb!9 zDvtE50Y9blzPSuY?W@L5xwY&sSre#*Rpp4H{2?D|~BPni(n zl%JCMwv3-L@@*ME<(Ng}rzE}YbPNic{9op$ah6Wqz_4p#OA= z$WM7AS;Cc&?($REB@Xy0%RH;YPpO=w z%1>D^zFPd0j-&n){FDtE!cVD8lk-!)S$x0vDZjl^Eq)5hZ|J}#U2g+z=Lc=)M^eg- z`arn8oqZ3zE4af;7Ea{wB z?h)4l2Mu+8sI!LU8y;bKZM%sk#$+kcfxRC=3+A%Cb{PlfRg^B|%_bf4lT{}bww)Uz z<#mCN>t~%URLSRX`uwdDt9bsARX)FNp&7SN#XXGrK*9%jg3S-{f(HYE2fGfv*9+VD_y8LTidHuXSl7eUKR>TjzKPyvA zg;9M9nOkQ2%g)>~PYMp=&m26T#bi-=zO$dHJzuxk>d!awp561U{7mtDduO`-eBZoO zjpuXPJ}Q%)w~vu8Roy?vIOres15O0w1l*>5#FsVut{sb(ceF9%vTLm@FVWJxw47GchziUYGKgMtXcy=P>=# za2A}wkXauEBI&%t^iRXT&B#mEFT%cQqke{H60SbHB0<-rx5iqJ#^1~@|K;W8FUQYf z`9?cCj>EU}mfa4IA1*z{XXxcAY~0S;=`koOcY!LzYn^QgEP5}=9j~TkuGI5 ze&-$GS70p`GxB%-k{4^%fGM8P0G@jIl*8fE42M6x0Nd{XXb=-M$OLMT7vKe^yfFQA zWDS#zH6}o7P*=P1&Ds7=vQgeBF0;u-K~FaHuKkmVZAy$*5jVn8S_f%YaWBv?H`{i# zZ=_ngk}@w+6`2>PGWnJEl_A4Dn;(MT-CpV4vGr6fV6!l6I#dO~#aKsHRz1IuSB|f6 zxa*o&u8DizWJxUdh<^w^f2j!tGq(X-R^wo1G;Sh()~aS=Br`u6uix;XN@pGX8;BW_ zDU>W#n;&oC{NET@hbUNwD9I0q!?1O`BfL?p@h2J*Ydo9)d=hYg3LH@ximKc7WTQdx zkFmV(m#fF%J;N2$H5pwK4XsoZn{+6~a&UeH>R=;S-Z#R39KLuDy%=o>;eVQV>cLbr zK+e&Jz?n8FIA8~g{~$RZL#IiTEGqdR_P@`s*toQ4BI3~nY(;g6f0gC6;}@8iY;UrW zJNr4F!b8~neqQLq{C?i>-=yH9+hutrrBmS>*1@f30vmKBt}fc@Dj(<|;fbB4=aaKb zV1I~j0-FX(szb3nfh8?zn+($@fa&+}o`V#@4~3gMOf8Efky)|Za4aZmoAS+Ty}P6` z*?u-5py`oW@*;8Y=dahw6dx*EaKs?H7HqLzaL$i|^KTKJe^;VS^7Sk-|7Mc;H&Z^n z^2_Oo$1{XakW|?wE|g8G)az32;J^Yumh;iG{15>5m0m2LP|wJRG&b@P%~Ubs;E z$`g52ZyLDY0&>9K-!{Q*HTJ#09bwe%O@cfaCsGXD1D!3OplGW|DZb)>Zow(MB#0ji zC&_)N1?Y@LaC3!<;7Jr>P+nX|+8?9^z;AG8>N_t}pc%gs8;qWBXX0TaOL^)o{}c^{ z=xpm+S{$ zavO`a*S#v=ZyA2S&*S%-O5SfGdB6By?a2}o1D1Y?_y4jCbB5*T=)1D~TSahiDTRYe zDHuK-RwA0ohA(n2G&pF6pZjQ|@g#r>#lD$`>it>1w`VqN)_WVm3x8gY*B|7<5R#{j zFRY6%tPd~D#TU*Z7e)}r1isJML+~y1Uv~Z9heuUe+?}H28w6> zco7gGEdp%W31y(yJ2?I~#w0f$ubmYq0~1N9Sq+EEQ3@_hx(@INvOUxLMrV7bHTPWL zUluV=_;|YHh1mYy@lV@Uc%QUxj;O~5<-$2Zqiez_32(?+{?J;D-bU6ky@{&)<4QpP<`4R3DXmLYI7! zA(=?K7#ysgAO+Uq&?eZ9BGELy1ueeFU(tbNoW3h-CJ|6UccwjnCfJg0I20XuN_p)r zxZNJR&9?o%x##Wpdcktt%Hacv0PLYyCvEA!7Stxa9RfXy2~Tz9@2kG_-F-@`#UaD2nQ3Cc?T;~Y&z~OGq0D=q2GHsux+WfW9IUQv(xE`Rr^cVM z=HSyq&{LloqIhcZXSJvHHK;$e#o9`6q5lo79sbO+2dd=HG~90Qp^lvHgg-N~!U2CK zE#4u2=GrftRQWTyiYoXs5kpn^GiL_W&Y%gV^s{$f&vH6IqWwv4HtBj-_-_2+yFsrP z4Uo-Y`wBvbI4rMydn5+OGzaaMr3v8jO}y6hXOj+fJqUh#AyX*X>4;B>-#-iQ5d!ZK z0-OG5U2DXJtDvJxAw%{a=>6u0>HX+b)&>VJ8ueZA4`F)0>~=VQbL}S4v|4*tVstrikUf zHgdVNcZIM?hgjH;=0%`>^j3tTACW)v+UFmcz<`%`r3v}Wl=#V$(P{|wN1I~$;bK^| zV!*yhnSuo@@0%%DKfdR{|9MUI{2@e4G>*v+(|3neAS>%qns-tTS8v_H3ePkgVz`i| z?XgK^kH>{!NH*xX7|m*yC_Jl?EefxlK3O)aNx*C`W0s62go7~omo+TU-V4Y9^{tx( zFdmio@N?6Me|*pFE=CXHV)P)MLl5F&^pNq5xDVaq8@20*B8?9&!+fLJ&81jJbf5W$;O!4e_e<6n zko$V$RDLgEG6U)?Q}T__wUlpEN?eyw3fEV-l)qk=4syZ@4Z*>)oZ#%&w4P-{Cg)ef2&VCXnc>>6@+#aQWt+0d)83OlIXuY zp-VOsN81RvwSo_uTqh|w-~+V(cY%2HR0Eu@xfCHgDmrXsz+(@lV?LqPw*mGu0kT$g*}Op z*yrXNSM77l3so%uS8ZSWtqi!*jN0d0FM^L`^Kn!M z#b(9GP+5txpDi+MRuqZ$i6MbR3Ah7iSWOJ*y#r&jSOqpKkzlh@W!Nl>gw0w-v03yf z8>}G$4ZD!AD+U9et#z^47LcD4QE60a}D z?f-GH{lii%55V`!4fL9;OYy<)x6WI#_U}=h_P^TY_K&MJ2v_a=W3c@<72AJZ(TTL2 z9u2i;WbHp)(f+;b*|h)nU2Xq$ar@_R`+rPq|4m@~uM6$7?vJ@QMEi_Qk+pwKHSBY9 zmCNlP6XODK)%NLO`}Y>xzZQ?5XUX^(!t&Y&ggK&pW~V9aGpDZ7K5wjY(LT|*65CQy zCH{Pr+GnJ9x?qjaB7nrNGbljfml@qPNx_X*iRd*P(%0jEGYCN9)C`PXgP(&LuTu1y zH;E4OBOS913A0DPyNg~!`M=QqMhU+rrPbkcNeW@>z5+wo+LBYiJ;afiLz1QCC^j(d zjzHfpLb6#XlC6UW*(oj7$n*RtlHm(6J)5A*M*TU5qS;Qa$7r@h4=Gn9)kDe;Sta{9 z(?iM?N%T-s*it?4zZMU9+&TWf{9I=}`8|`K`*@%MEX#v1+E4>wl7e4cAu`&~tuUhv z-i0#SR(VK_woDHjMjQGLuZ>?gmjPWHV@4ZVE}3aGFHzi)5K)`!$@xjpnh%k>;x9Tv zwp~#m+Z1axb245Qnb+b5w{VZ$A(;omfMtJ>b1B((k!RRnBU@W>%f;VmbM1=fjcZ#{ zsX)yVbd9*=elH|Tu&_zMUrL;lxK(V9hLkhsMKc(X&Z#2k|RIp z=a*B2CPJwYgeF3%L~0~PTakw>xR^8)_&W|VE&wOypiNfCk@#SMB{7{5B+myO9_+x^ zJV36AB-f0_W}e=MAigNoQ)DPif6m^>s?qyF_a|=EJDoazr@(;KC zV;q%%dGmi*_=B^nMt-v1+e2C#`gus}L4VoLf%In%Uyr6D@^2eFl9_)nG2rnHYDiUB z5`wpSNNdAD4{>c6;$gEkykQa7hWKV^ZRqDAtquJ>q_tt72U#2b_@^MSytdtZyf%bi z1>bt53)UkjdVyeaY-}D0Z9YRhJ1L=ab z|6M`i4A_`|G&DaeIpvR_H^6tV&ua2ubH>R}4bQOr!$-VedoBfO=LNxp_5O#0$G69YzkgzY(6Vb48etCJ(!>J&&@og&+FQ$V*mK9$IxL*@}A0n(SRn=V)@k+*iJKEc+Q5zv?eA7Z0ND2!f8j9w-)IwLh=FWW}Eb%|*7vy#y-%8XtrGde>X@rUKe z=-&#pvH?2(?BR&RsTqQZJI}<$F~E17g18eDszTfe7&w^$#+EKp zIA3u};T%8T6$&TH|M(O0cNSL(;S3mDHH33}=PGGCKi{=Kzx`YIo0^%Fzqv9-g}-_E zdM6sSb|$E1{LPh}YQ*1MkDdF`SiImOiElYe;#lg43y6BwJT^>yIg&fKrIKIDKS54)Sl2N+3=d%lj70AHzuF z*GXN;8@`aM4*;o1Zu1C#DmpzJVu}*q}d-YQUq!l znX(d$WU*(2i;ikjP|F-rP#?jRQcy7!15jfm0BV^70O}%=kO?RN)nti(4G~aZLh=Dd zI20MVq59Dx0To>May#Xp9<_n@jfUMl3M2SVrAhqLvpC}Fq8k77sHYA86sYk}Ly(tC z#y{O7GDLU4yn2h`fu!1j;H&pirACOk#PGCu(=oECd=bR-m@{wKiqZl z7zXZDQ!%h7Zj~#q543zSQvkj%W(sH`b6TrNQY%;q6RDJu_X!!udlrcm>uO)I=JRmH zZWQB+z2{QJ<{L5v3z%)dHDjIDY>2F8V@b^nxE=;gjv?qsY+u;#Sp)9_D^;K6AMRZ- z7FFtHQmNIhRLaN|0V|s+fS*`bsx?wptvBqd1=|O#n!&be*WN((!t+BBuHHMYR_{ev zy}qmpkhbVimH6wCcdCrfC4AZ}_xZGRprM@F>hNhhyU(Y6V9)lyj8D5}0vcX_?^{zo z?Oy@M$YG zHhkI#<$T(Pt2idRy=)`;lD{i_+LP@FpY|nnKJ5aLPivjwoKK4#-)g&2FyI@Z#*Eoc zD{Y={X8URoX2Zs#*08RRDq;3<{MWbos1jxuKcGsOz4^Fv!fcZ;wBLPkd>jKFTdLUa z8lFVZIj4r!}m@HA^0 z>`*;h6*cxSV@r*V#MD@m1!U)LQgUNqH5Am?FnvD}84Hf$5iowV#AL-wP`qj}@}AyC zvr*sANSspxxrQF$nj)Qdn4S&QH3`wM!U43rCH@CPP?2ugEyQmvqRq&9i=?5-tp(nB zUgWnfdfq8J(W{lS{DMh$9q?Owy1{SlKHbg!c~pb?XS8W91N?tYyPy2liQVoezxA2; zn($kr$HVdIMw$x0^{Hq6GJfl|^V0Y=a^C&tw|+_atp}^%x2|x3-#UTvTZg#GZ-oo9 z+)JJV_=hwG%|Rn)m4RH(g4nOg0cHz(it9fL;<|TQwIQxI#>gP9X+NhqgSh_Ki$Yw% zs$MdLYlB`C;Y##rdpR46EMWG7P6i{B#X7sP%J}ankq`GB=DYe4KAbnQ=hl_H|ca0>0XAy+&I$F+mg^RB?BuvDg#9||1(_i~xuB(?uo}o(9 zQkRo}kfA8Z`EsDhbv-i+b6q1zcuoZ2y6Rdp2<`fvJ=!&b%pZvF`mvnv8fnXS^_THo zyUO{lZ7ARMOc*9i!Vka`vlV<-f5&`RZ%pO#QzOsG|HhhwwXIPGMcvj4@|^r4JHBfq zp~*#1zH6>SzUx}89p81H7WdQ~(V?{jwer5YCPA>&5W=W~O(s005c6Fb4VJ)3B=}Mq zXD`nx4!B+NEGr_+q*seyxt#ARe>y|bfhLHcT7qJgjfBk^ZfTvXX}-;<4~1u$dUm^l|VV z4S4H-fQWgXtvZ#|F>v1nT(Iu)z-YQsvdoP!nzx~P8M$rx4^RRj9axg}A7WwrZTcP1 zqRGF+w=kMJw|ls|#%K?glIR5#Zk7Y+RR4R_ z&u)Sn&*MZh97uq|kEqcc*$XyNjeeyjY{eSFT3tSY{_n(Db zU0=2ch7oF8XF)2x{KP8Zr8Y!ry76};RHo28OwL()+)3g^_Sb_Ke zEmJI0`Bj!yvu&A=LIh?0pZl7}G7P(bmDcC;`}A9vy)*Zmd+xdCp2zntB-2 zs;cyS`ZfiN>!p!A69`+jV$+3}yDOk^pKOSU{GML=@dZ(IzX$x%-Fa9Yn<$Y z=0y!f%!|Vqem2OU&d$!kMj?d}P7_$11q%qDhJk1Iw}rs7ZSP-9eQK2S-~Lrz;IqfD zKnhSlxYtt(^eBe!@Zg|i8R&=a(0NRr66eR&T>(C;!ucs{rvW~z1my8H0n~s%Lj$gb zCP3h|Dic8YBL^RCU?Yz$?Cjung3ELazraL|r1KXHvP7kehP3ZuB7ejXv^iL@B}jm- zLD*aiZ#~dV)+q9XkW0A zMYC^)s(Y6NFS~YdG9?7g0_W}sBg!d5#muQzMiW!^Fumv-h$(wS!j#<`!)=cVEpa(A zDg)`o@74t>n~7Hwi5(mHEuAqRKItq|^pkNcZ|yeD*((^F(N9qnHI6q1$M7~o6a??d z#L>L`OzTVVoGwi3&N@wxbpYq|_47OQH=t_u@CukdzYGd#r6H}o{B<<=OLX`N&tndL zmW7EtJvh1jGDkX z<5>RA3sLl*kz9MTy9Z22J|DyFXSl=eb~OqWyc<|g-ja(ATIF{bX7;qusSi|8;Nus4 zFwE=`!PrN-6BP;PdSi^)B4I-xKhzk^PioVi7z{&|E0p0 zeZE=4@nvJZv0tX3KxRAvZjp8pZ)$mi7E+7Qzl{o}#cNS3OtnEavlQ!>p@IKlx7z6L zlr6o+kb0Lby(So6u12%&fScO|_&mZuX&QG;k-I00-ACSKf)y9q?kQZ^*5Q20T zfs;MBM^F#S5Gh0)K?(~yypMBDlnEXmw%RP#nJ*~JH`d-y_scUz{EtTX6Cq%Z!C;QT z@QtXxC6%O2EI@g{HXxow?m&hgZ(z>tZVutX#_d6($(vgChXAL-q6czuc$OeZ*uu*_ zcId0#Z3{wpvt0}sL#O?p3U9V0!kaC&%7AvkOva9o;usi&I|5CHBag?~>3m~1S5$gs zc$&?@9cGHE1Hl1bbUZMI+wKTG%tr2+ljz8(G)H$VkEZjj282-&^>Ml=icw|1Mfdn7 zy2Y;}v#n;&8V7fj;r4o713M;+B)D{4JijUNSry6dm^!fxvSf7w()*IF8( zXA7l9sJ-lu+zsn*z1MwjPp>J|t^JUGHR$^{3w*)98moc-Xh$i8IjG1qwGY%pS91%j ztd#v7A71Ji<_#i*u?3w&pKS#V?&n&mP)pFCM`X8d%a1lVxHFMo(9dk3D2m%tbiR9$ zyQ`fywu~yO42L=_zib(dCIHy=`?vc`>qV-!+@A}c1;RXtxCUj<7jNFOV(B$;Q^XS_%Q0TPcy)^L9y1i`9(k1zNH2}+tjAP&l1ZE1DgvgDp6)`dT(k00MrA3wfx?RPe!zryDq^&Oj|AmMqhj)1NvhD{jvD`MF_*0rDrAO_|YL>`zuT+WV%*CjhVHlMf=?3c4FR|HcH4hj42M#p9ZxX`1Y?{aXZFjtmE zuA)?{Z8YD$nS62%x_+&q0W_Qej(2?xos!#O9>_t!-B>1LN4(dj^t!Brw?qg(Rn*$3 zUYB*)TpG~tll}UuPyD3}kiP~)1NbZRm6a1YyWil&-ei^p#|d?S}^oT2*wc%Q{oqvj`a_}@V=w#!QKdrLimLRyW}(< z3o2(1BKU^M zMuI}8y(=Mp;bb!kiG>jS!d6C%Ux+XZFTlwScxWBQEc`VP{r<2bjU5bo66Yz7hZ!xn zOg=NFewZtWwRIF>&FvfpfojGcSx*U%?p!6hx0@A#I_wQgc>QtcX$qQ%Aht?ShVQzT zC|iWQ+Z^K~#MV9N-468bR}ZhJ!2aE_N_5-J6!m1y)hB<7mGSrPlkvyC4^XnA9{fEr ztw&g2@yB){e71LPgYz16cs(T~?O28J$JRARk+aw)#NWH|)nrQ8evcMDg0J{{gi7a_ z2I21=L}+lI3{~LoJyN_%bbr)Ly|_1z@o{mVL{FR!pV;Q(L+ddLe%TVmm@QKcC@eS`xAn8J1_)JZPKCjl#sQZtZ%7_BA~L%NLT3lmp?A&zsISB zf2tRMT8;LRKlh?ZuxJvmeMR_FT?FJG;mbV}N~&}D(Ef&up>I1Rd^wc0JYZocuFg#j zMfh?s{Ch1;@Z}EUcsnV=A_Zyi-wno>8==IP+p6lpOz`Et9EI@Zf-t_^W=e^HrpA}c zwtC^qaRguPI)X2kPCD5u%UKbIz|+J!DthH{0xmb_b_6aLW{`7OWlXGP1QQE>jyK3T ztYH{&B?a(|bZ)g7l$}L!3tg#W!7_}9g+YTj^uS#xgAyXk1!H8nQ==qgIn>w}Mt@=R zRE#Xg7-VF*c!L+R9L6r|JZK>$9Qt&XNFGgc_@%l98M$g{Gt9o8SYZY$0p&V+0m>oy zKdwTRQ=Onr4EaQ|48k7tMwJ847tWtU3B}5>Fd^dM2D^2I}v3W|LTZX7UDHGSWw6xpoY1+7|(L-^8-@l(6U%ZNtHzsZaltqY8R!OkK!4 ztv~I9(SE?nU5lnY?ZA3U*!yuE_6}+7CUu8VEmB;Cs4<_Xv4r6A^p7dha*1CCQ*}sr zxmWOHuA zwj+UL=wb)U){^0xds-s>J=iSa$MC);L=eB_h(;d!|uoS z4u)?J+XkVK`jCAL-*x`SQz=+cbza!qtOiyuzEkV*O^2s7{n=znXnv;_bg-{@T4W3C zAKoB5t)LnR?G!jbfv1)K(JIj`UPO3W3Eqr^czpLDkm;iDjRc-Z!qE~Y_QLpJ1g;PD zl4^g5;k$NjkI}Ori(^cP#V={GxQWoSTDX!aVRf7q0-vwwS%k$iq8fyr^#Ou_%ju^; z&zkVzD$%{-LT&V{$9}Bsp#JH!I(}62ci?CB7~v~^R!2SjEDo*8kEfQX@v~NWHr0in zRYTRr&)QlCe%9c@_2XydLZKQmhvC~-$&Q_(fEv-I51n<>fTyT}t82w8e*R^XztCB| zmvU4=sDk`AwV%PA5=xuHI^uxPRB*p5AFrw;7XN&zb|vw-!0D85^%tvsL(aNe7dh+Z zTYW*!5)v`psrK^_%LvWpDf}Bf-xyDs!E2jx)l~Izxh(ZmKqZ7KCzY zI}k%h?N&fX#UePTKiecz!l`IvH%QfjvfXfEup-69Od%+zV+tsz*ziL4VHrB=eunR` zve$hSj9*UjdRg`dQz;>%?w8FStnPmeqyM#E_hq02tO1du!XHJ*QKt!V)HLWHE2A@c z1RnK!CvrVK*$G@v>A@0s)F}iW^=&77J^iW^0*`_P7h5R;9(4-q>lBt_t@B`NY=e=b zPSuGVbsa)?!u5MMBKW9jGJMpjI^d(SF?`f90w0xjp9`W#O@_HyV9xPs^r&Q)uzWVb zk9uU07JgJbQcKI?H)>TQ*20f^I?xM0>X;UORD`-na|J2V985}w2!7Nw37p+YYM-!U zli){{_k`wme}e|>h|_M35I#abXor7LsA{)qYEimG#*fNT;*u;nv8h&_sqbaJ(5t4v zk8;UiO{I|ttSKEQjvm9t0J)E=AXs?Q%};ydM+wJk&rCiZjzRpWYK z;M*Ty_^#)AK)fMfRP>^dfxE(&rGxmHVxA}*67wJ$l1+C~aSAk~`!zwDMuP2S8^gE1 z-N75d%wF4!K$>0wgda zQRfEWA3gjR;vaQG_(vC#8jF8~9`qJ|kT?EO$2#$kj&1S@|0sQ;4dR;Uc;}GzRUc>~$|{oZoKpAMNPQE^zHPRV8Vm9YvtOK3kQfg?6;!6HW{5 zC{S-6+$rI@>O62unbIYd5(Y-A?kJPp8h4Zl=N_VjncG)44D9HIP@lk#p79s#$VJeO z;;QoMy`k*?s@@w)8}IrX1%B<4Kpp&A3=B%}Q~n6^6F=qYZ7{0a`?`gcAgo;_Y9mdO zf?hi^g}L)CVeq55qLBY*1q3#lf`N@5j{&TJr76MS{_-Sp?2Q{FIrbos5wveB=x2fq zvf}~uJ$16yV3fac4eTovUIr$r33Ry|X*7akv{r##v{muBM1fY!)ieIMV+HF z%hJpUn#eN{rfVV`BjL|^xpLdg6x=p*fpwmPE5t^9I>rVFipeTW>j}fAcvbLh3^1&U zzw?X?FT{_onv*LMTMhp-KvFN#gXLFGk=k}b$_b7sIWhBb6ftt|Y=-5#OdiXzhs|U8 z)`w$whb20@E%=x*^vm90)tZgvjE6l}Ik+ko+#k;7i7fXu%a1Uyk-O-nFVu*l%Z+=F z2(v5lPz~MzVOoXWUKiX4^m5E@R{J2p{@#rC_hZPu*^l>k3Etl&SV#rs{%+sf&;7k& zE8O2P-4{}Vd5tV;B}mlvll^_z3m*x+cbDCoLhZI&Qz_h-b)JNal#UfbiZK2cs08S& z{ZcCg(qW%;f6l5%?N%oilAH9zI*hm0Exmk(LbBC{Lb|WpLMquM6yzc>q{AvOr0Y-T z)enZG<_%Fk%5P;bBqs9og45nONN+4adT-(Y1qM=t1ZX5+KqFYF8WLXWxtbA+Snk^x zZok4mdVuDm4G4&3(U<^=LWR8!?kpR+&%ym6K^*NvrM{g5D9YJ?Aia;7S`ouX8JVn# z1p{OF*5NU{!x$5}mtJ&I3E&tLSwt_|50Q>`TyUKGpQGr)u$Ugl#`4zY9&-#=6disd zyn^M84p&Upi8TA@-S$G5$~l_vU&!!tEW4T+z{iZCi*5po)n@c=BhZ+XI~*t~uA1S_ zMTZv(9Zms$e+RooW5gt!l4t{p;5fsb7EaGXrvn2Rl)!LP4w)H#$RUP*!m_J*0Qi_O zw98F6{$o7kX@TOCC&80XVN)8imvEM~+F(^H>zrbZb?1PMtWZnfPeYtyao%M}@F6d2&tho2Tl%!dEiajjyDH|MLb{Py&VRsS&z^1_72}L#xo!A(u6TR_%Y6~Uk1?>3rL!Mk35GduI(R;bVu93r!E*ap z?ugJcELUV9(j5$$5;q|}8%pG}0X>3sCc;wv>DEy!)^HF|5>Y*3m$6eXPc!gt?nrca zxjQjHj_t8HA<2cIl)8R>u%Cf-_C9>DpCLN@M0B|5{s2ZYE*jF>M~9cA@1nzh1NQfF z=#0G(Jhvr_=jgeC;Z4T#Ndz&8<$eW7KX)|K@yNqn)k=YYj8GdI{rOfzm zfx)@1Pp;_OThTL=Y~F2b39*s(LF^NjJI-?Fg^207qHyqHg@`eq`ga5}Gfe{DBiKlQ z1kW(Je+W*m;!Ru5B}o{NLQ6P3l6s{^NP<`M1t?wWa4l@4ls}d1)g_QY1WvI|BU>dp zywrUf-j2r_*vLKf(y9xhnCx;t4QvBZx+2T#djP%y9N{T3k;OFs%tcWg?QDM-Ml2qL z`tp>6`b@{CEf-G=as@(ZUL{G7vVXRG@of*r56r2F_dB4-Rhoh+W2( z1QltIn^j^WeaCVqy?3_**jbeh?jXzk0xTfDnJ9{5oz@ZvhqM~9VWz>s?PfW_!F>f0 zk(xt9Bn2MQ32n`+}DDLqu)N4VOPIP{0l;SqlPbJY>9`jJ@3Mjl&u4a@hk zjpcj&62s51M5QmJ3~4{Ik;lA{k*0wqPhm04BRGopV`QYmlpMx$36sC85G6k*hq5-q zD?BY2aTf~?*Gh~eST&W*Kr8Pc)QFb`)}qnpfVzP$x%itmM}-_ddLGCo=oWL5%;2Z8J^lN>uX za-Kzp7eeJ59bTU7!stn2Y9BUo@2ojMTa3wLJ-y`&-5+>t3L{D;Dh@wkJa;=-Y z4K@kw@T@ zX8f4v4}6l15;_<9q4C_kFCl)?vyaz{pLCVAcJ=n8-}1EalUBOxz)xEHYmzp8((j2H z_(_xM!%v#Lcd-_J(hoZ~Y2qif)W=V9ev)@t;U`sV<0l#K!}v*)1C{tmy*){n2tR4U z$9WCLPtvUq%)Y2wA6UMv{`$Z>nT%g8;Q40od~-tgSsy`&Iu~&gs)v zT~I%LJ(-MO!@%=H!1JNjVT2!+pa+LA89TysN|s+O&{;T_=k?F(txwi||8S>o@9)&; z_tT5bhT8SJ3#=)0cPg_SmhMLH1m~q`#?s7iNNZf7FFK-(3OAYwxcE1xD(3G)QOlY_uKgCTf`u<=8Mq=F|}0Iy-dBN(EExZhIiI>g@# z8u^P0VE$NUd0G#~+2O}x$lsre`x($Z0a_s8WiIzpih@jT1OE*A3wrbkN(?IzkW!lt^efG=rEuH+cVA%J+?yw zzUOwdM?BYZg+TvaSgELv-dLWbu8#K7gfUx`ns5=SA5M|*@B6fbS1=34zc*w2dou=G zE>UD(9hS1MkcCV>SISvgOD|->ty+RJ<-rBP0PogquBpj_Na%<0pTJ!q0RE{%r~SFm z4i@mAPD!J>etR(sf{0g=)O!OO#qg#-jwewtKF@vei4llMahF_JUz~B?NH1bqkiL%y z*sJ(MBOJC3N7wc-yy@NJNtCeBxe6S^&8p^5!b&U5N(eDxcS;Du#fD`JeWmR{1C@3) zDs13lgBi{=cWpm|rxU}^gE2~*u=`M+$nZlG*7h?9%fHGK>+XDr{QTteR+)Dbs|sOSLGZ^xc53u{@rD%#lK;BYW_V1c{Vg8ub)Af{3ZAt2h3~) zBN&f3WVcQuALe16b+5{T_jLwXV6lj9(}rsFWjy#Y0rAO{|9LJ#J_cW=;9sWWU(O@F zUod-K`QD2?(>mo!^^=G{dz)$V2L=`abME*)i4tNt$eeZO=1_vYrzUfT(3m+8hL8cw zxhc1w!P6Bnhqc;-(U2iS+vWB%!2G&{Fpnnn#B56Vy~ipsyj%!j4~Q8w47Qif~(__G}kFLTIHq(*S{R}QR>MaOFOLB?`A)< zEqOq(C;H&u=w_4nYhJFbYiQN=%Esx+_cbSsX1z5>+K#?GITNpvZag#T3sx>qe*iz3 zCOm!jIAW?WuBQ+dWf_0fs0SMmTVmLJ2h8($N9o#lJ?;wc96#d{J0nM#vMu|Q^-EVd zujmI}_dl;6uDwy6s{F$5Y}Qw@_GW{PUHEO3=i7+st49SnnjV z{Zzfj9BV&>w_CDe30`kN(Z{?z%@+%Ab-Chc;*0fin6>|wDc$_~6CD;LoQH6F@RpnF zX^`eT{u*WFPvuSN8+RQqyjXCZ?<<1%dboX;g&6ujULWC-XpU)Q7hvJY#bfZ+D*ksjKn6?~yOt#Q}ey4?+I3mW}Y@hq!f~ zO&j_BBK@MklecoDj=ve+5%U%f@3x;dkV@8Y>G#S{dB)hAMZ|SlMOrG( zqIc#~{Vp8#+H|PicMPTP9Dnt!zglB(T^ma_6YHJ2`bITS^Y16ej*`_+;kgS}J;Y-@ z*xFiPcN|?29F-ux;5liVlP0f)#Yq9>-%X*AJjxT*hb0wvX!UXf0$UcseHi2 zmgd2zsP$E+mq#(A4tx7SQUvEYs^irQ1r=qH1L}Ot$NPfGTM{ler#~kau35ceEcm`K z=5N!X@b3FUR8JiHq60(GQX09BBM@csidR(kb^eS=9hYwC_z)M(OApB(QauU045PPS zx52EAgs4Z=#g;Ejt~w<#wB5FkH8@qws-M-%RK{l6RsXEwF>%5&{rH};g*f{*Z6&Q` z;_v;uCYM#=6eP(4bZZhu2MKyZ1U<{sdi|+Kx7IhW>^vsCtl+jRzq50dW#_%X&fi)V ze+`e8J1<4N;XfFb!84Q5qqK-3qGlSpY+z1kM4sBVRC#XXH^*`F_dpM+OZF&B8Z~Aq zrvBWWE>(Vx_IrI}>5?Xag&L+vXyJP0qL_S zX1;vQ1v4}O=#^uS6%2n{Arty6$>jFcNojFn>F*B5+4_ce|seylhkNB=^LWhzHzN||kD&sQ`7GdL+TLwuud83rBTom;V= z{MyBiKRDe&oKNr&JkTvNz~GK;6;52iYTAgobGHJLaOq4jXM|r4*sr+gPE)K?xuBmm zN(ZY|%o@QW#8dw|j>D}%p0KJ$xFX*y2tW{wKsq>eooJ~1h(Gq?yjs!%6cJKi3e!cL zn}NE*KkQX#faa=Ti?>r0kD4@{!A&t{K!-4qy?xb)XpR-0GMePAF$0a0^cQ~!OV$Yx%^Mzt0C4LvPe;{k1(7#>B^Lm=;*<$5p9qj znI(H$@);D?o)JW+2X7X%r4cqkm1i@t$-?)U zCJ7yf6$cX@dBD=yBv1j&7{x#-@)a&Q%?kMef4eFik~ozHvA#%yW3P6^L)zW#^Kr<3 zanpluvR>+tDh?(kF=ig0$HLmkMp~?FghQ5!p(Gce0wzRkwvLA0LSr^ziS-MFid0|H z3>vau(LbOC8kee71&~xKfcSxKJHpcxS%E~2VvRlnM}&&s5+BikIuQ-}|0_dQyka7? zgjj+|ZF>ph(1bKJtl&fms4^abE}8_9W}H<3V)v(MrE+jF5z9! zI1q#%0@uzd1M>$kAemSJE5-ZBGLa&>pMyx)y_>lJ`<-3T8*DDnY%v0rs8j{SjV7R9 z!mc7Kuq|H_b!I)0`ExJ73G&Fx17(d;}R!<%f> z-jiYpz^y6|ID-Q2ME2wAK~h2p*{bkevV;7E$&ejno$O>m_KjF0+bu!``EU!=T6P=M zMRt&MGqPO1!hek<&2h*kVX_NuiTpPD(A{Hw2}t0KN41xO)F={u+6f3?8#(6Oni%#+&Q3V|1d z5HiHYF3M;6wII_`O2b!grk^AiZyPc;hyQJNYC_MdCnK1g@w!`d)sU4rnrN~AA0dwG zAL|}GWd!Lp#(Xrrlw(tvWY8)iu)|+@htj!ZS=Bv!4WJaVe;f&L^gt7%05`YFJBH6+ z?*~7GHC|cw9n9^0>OrHlIPR1_b-T>KS>Lc&%~F0Dvi@h@a)X9fJh6<1mxBzdFus?> z?4n260xGy>{_Vpx`oKF0J8Z=Jdb9sv{RiW)3F{=)oku)J6b}8${a2WVWdwNcXOX0l z7T5HE8oWRjsR%EZMN(i4(p><)uY`h)e1h2u1?O?MU>NLSC=p6Q7lFTQxRB{%5yI-kyYPG#I7XoA7l8;>L`$Vgf4 ztzB3BVM=Scy*ANDit$nv^^J?U5GjuEa=afXH_#V9(0&?B)KU-OeJ}peVDR7q8Z)Qb zGKZ2a0{5YB>f(}cXHO7+W6q`$5syx}DO?$;9>i8{`Efs4TW_K_GusO6E+UnvkIA6@YUD|bi8ljU>!D;NmAs40Y->nst`>3e3z7o@?-1r=ts?XX!qWTYk7XGoq4J9RU7otW z%^wj79}^~|^t&?GMR|H2`wI5wTE7X+=S|nJj$TylD-S*%TX>W7Aebi7MCSg#QO5e$ z^KREm))-$=Wvnn-Qg(d(XZj%k#YnsyqE>HQO-fFE(YzIQd~ZW$TIIhlDZs@l6BdeC z`M3f1OXU89qJVh)(nhCZ0oCggAS;>P*#A|`|Ijbl0crdBO#|F)+UdtR`Q&=Y!A?98MqY>p`t|hB zZc#mNrzNW$D`M7%fz`1GnN>ASr=>&;-1Jm1W#1-q`bVIgbmjW^g%GL{=Q6n_q*OXW zCI99>ZwJ=!_2l$p3Pk?8L9Qmb+>R1`wKmp_oUt&9y`7&zd`@ZOsJlzlHhRXB_(^yX zJ;d|JN;a+R>#?0~Ehg-dHN4{rY>yzqx&FMN?gJ^Ksh0lunK`{Fp0J6t!?Qq@5qx=YNQXmmA2eaC0z_W9Y1uG@3kJ|=gF z1HCv#!HT8Y#oY^pF7R4`$bdm6x3Qn?3gRj#aBN(`Gse>Z$0|bH8|t!$m_u86aQ)V9 zh=z^I$8tS*Q!BjPgs&4CnXzmy(tf7opX;xg{3h6JeQT)DitSG4W#{x)omck*^(8q% zrBW1kc(dM)*)4q4NyQ!D|AU*sNd8xeRc8C;U3LkEt6dys{u|iLN?`MpK4$WLyuem_A`cqD)}dw!N1VC6Hs#=yF2(~yASV4 zC7h0#B*ARIvTJV}@4D8lDA_DQ&t82Qftue~aRp2S&-7BP;o6@(=X& zBgWAP@GivV2iU6aCD$@0Z@T`E$9I{0`KNnRDu$;XsYvV|B9!uwU-q`v*{+%n^8iI^ zUs#;aeU4`62afk)abPnZffaoacU<$H_WGOF zLlOBm0FrFYAHebn0`-DaUbK4r3V>IiPezX0KcMj<9Xe)^xF?;Ov7^5Zn`bu#j&k0e zzwHQM{|6sCE|(X#v(b<+I&UalK!#u1G;AOK9sJc!kg6Q5zmZ=oxs&J_>L9ar$ZHf- z!Q%_M7>2Vx(=k<(y+?<&gm8jI&U@+RM&bAI>ko;Nej=54zx0r?=yko>V_9-I^HkLM zW)h2Qf*GS_zqh^IGK*@f<&X1EehJT4qp+`ScT{4L_fU7F-m{G0H{ae(WOiQ^{g@B5 zEm@#locAYS9ko@vAk7u%=P}^1T%3R$CiT^-p)N=C4F^`cA7av2@GjtEfPlW!5;`jmSk;l?M|WjR~R|Bm>JMei`D{G#20$(~MKVxf^i zVg=As&35$Utz{?l{4{t|m>75~ug+{5{HEYlA;Ma&6WKl?Zd}E*XU-(lNz{l{nqo}( z7@cMsjge%oK3jAb>#m>w#2@lk`xRf6d+uJleDnK z;|RP<3g0dt$Ia`P&7yaPcK)D1ZnK0MnB_PWN7ar-aD~wA7|B8mKpNP*`x+|g6E0D+ zrN2VK)Kg)D=(JT;{(P+vuZNngEjH3Fd*8n*>@lt=PVnT7N1=QC{W<6ikD$fRy{9dt z^uLIRXBn_)i9W34{mI*lRwSxEh#j9eu~mp1r=|#9Q+F)*9I*Jx6+!9D zMO`;z%+s{_wP=4fvRUKvn`72Y?C$ta!oLON;}I&Mc?AVFRI_t(Up~#pX&tDpYQVDh zu)yQAynn1CY-NX>ijf~qnY1!&yDuk+qs&)obapHJW9TR|Nn%k zMy(v2Sepcge5YGamrjOg#<~G)MQ_gg^5q%TPyBZmwcZ!y9CNN;>yOcafNI2e9@+lrv!4YS0@w` zeI)-2LnQesQm_n&fe!4{)z?^QF8-KM56g_fnNm!D_Aw}o5GK+UFgq^xbOcX+J6dSA z=pMRN?Oz)DLT&@4@)OaL16Lt`bV;NnY`aw^v~ysH;P~r#M`jV)>frF3gW=t$Qz-c8 z1#pMF)-x%iPD~%kJ*K}_z9!`K4YJl7Ou@bC--%{3X8FmG+LWm?tl~;BSA4ZFW&#jB zBxKlpAd%?g1Dbx$?r25NS7NKy5H1?W;9L=);5;4r@zrSk_m&)K3cu$G7&QwG)KZjEBAZ+khuhr8+|mV z@I>QZtxLj~D2XwcaB_SZR^5p9tK10+PBK0!r__!(J+QxJw|X9u0zX&jx(tZ`^uA96Y0q|t z{6xHDo(6olc+5{pfE2dl@qp>c^(Aa&K-pEd~@SUzBor z5luj&G_g}ZKn7-br8@QKtsyDGziM;4IJ<&UNszYJ=@ZCX%&%5^bl6h`_(+HUF6ZAp zY}uSB;-0@oXQ;$hhf*pkc{wc{+^#?tR@=c?E&bYM>H{zZ{6q#zQUNv7ZG}~Jhs!=6 z38KvBXK%4Ij9~AN-C|u|lihvu$qq_GC zPeD6|vze7J@LN+rupPZ|J|d-eFsQ6bxN*H-b*NwGE$3fL@aARR z6Ba}O{68J$aQ-(PJ`7*cF>y@@HVOqaS2tAqnZ)LDEQv3~>$%@6_wwMr9wDxt>}!Sa zBmLqloTf3|Y6(}gd#)XEMuHeaxyZ+WXc%p7^kTOiX2hJPG6B~ z{-^A5qdynI^?~@ZZw@K>q-X{5M?G9S&%fKhvtYR&mX2C?;(MkM#^b-4+|Ssukqj5W zGB(WEJc9(!N*h0lLrhQJuw%Jx$781(R8dMe{=TOwR#`OJ+$-A6x$Bct zqMeyITzP+tPUn+^!~@aftt3yMX>U4)0w_;nF?;K>dt}&lo8`bvx>qtVBU;tvOV{0rL;2 zi~ABYvyRJ=*h3gyVXNy^fnBKVXJ+w;S69;X?q+FTxT3CXfg7j4^Q}hnenp$d_Ot$I zlFvjpxlMvo9>71HameTM^Y>(4o2c3=)spq6LvJe`F^eQP-44IKo@__rPD2Re&WG7_ z@lN+yY?$z++2#PbGzN6gEr}k+(CO&T2o2ZWzPh4pSS%80y!pxUmPnI12ClKStEd4X zjfYqepm`7iJdAB<@>Y?3(wMmejFI{M{u`~zMU4|1xZ00ZF!8>()Rb&^IUH9Os!w&M z=bHo}w0g|!XFuIi^2a_kmGuNi?Y|**X>}Q!tnP1fKVRe<>bT59tVKg8cJw+^C0WX$ z73Q+TGDS^gITMCfJ4s< z1)=x1D`Bw18);FhVn2?wYUvwNKq}UjzgmN)*?em%b%#4Yrl|MmQ4rJj5Ngj2;F>Vf zCj)KZ-~;4VAt>tIsXS3X)k;ttI8`Jn~z?>1y)bFwo_P<_p#36s?dg90!-a zYqGmtuvxhLR`qv!QNW0MJ((Q7EF`?w=GOUkah0X))zI0!58YwcB7$6h)1p1PT&Zxc z+qKxt63ZW!FYfHL1Xr7}Jx}-zwM#lu5B>)Gn06vtIy_-vsQ58@QK&?R$Us$YDNbY% z)J7&un9VCTLW_ELTl?S*m9%Pb`OpWa1UvW$3LSRz%ohUf?m?i#8oDTUgS?u%fr@^F zH|UC9kx!%%Nq6yQqxw1psYl2+62yXxh=h7&|Af2H!cep(Egq6R1R6bsoB4&noz*dK z;XYQW{RZAX@*XJ7zO71KrDwkHziWB$rL$e7t;}<*?Qf<6#8SJ?ZqSzP2s%tZ<{V2T zT;m2>^5MG|HaJX$aKJ1~qu3HkznS4P_hL?EfQNaqi8{EzAbR&N)v;Pw1IN#d4K+=y zQMyqjj@gr|P7({Ztrf*K7pqxVkg+u0+dQ7cGozhJz?=~BP&XR{YwZ#uxNYE8x~(xC zmi#H~I%qGAKPZt8$(!!;nrsUDL8ulTRS|^m=ULRb5T;`;_$Azilv)kBK)&_`Znekn z2etg;AIB934-4>Id&}g~`S(cQ)w2R!VU>Y-5@>4gv^(;Czgi-b=$BhZ_+AuICF?*) z0@>-}MkcHG@Bx)F5nc7|)Z|SWO!E}Ey_vd&7MFtk9+$s4U--~$Y$Bv~n~kXWjiqg} z?Biu{h0utfx)#lbY3<`>N{{Tfb39|mA_ue#jX_Y;JYUpn&Z%Tgp?kMyV?Vfky`N#^ zqWNiZO$o`*Du=By|vty zbxnRP7faA_3rq&-csK|-{R*L#eZ=q@Syq=EPULaj?DjEmJRmn+Ij@7l$he;{C(V5X zEpi^-igTHRhn>J}Xw8AuqA3h2y7K^G7G4icc6~++D}@ll67{TLBd$ZVab(UjK09n1 zW2^m(fFfP)8{xA5)d6?XF<&#NqENlJf0%?3_0A6JLC@D|y9A`WGIA5AMB7`bMiB}> zY(bj-!EO(nxOr2vK(CQ z2-$`RdSS(1Yqej=8)t`iBkoyG`gBz)w;8Z8#bO+T18w4SZl&J?ul0L2btn1q+4HTH zeT6_in9oJA7@lczY|!gn`jOGR6jH`EZ@0St5+h}(Y2J=q892<`K5vWJUb8Yhwv2fy zrB2Q1RBFu~tMvV9!eo^EXp#1ShDfk+S z#+Ll&t+K#c0J8sXUI3EUme4DT2K~{1&aDL29B8Q?hEvz zM2XBe*JIi8RtONC*k$E%{Lx$wj9oZbN%rQ` z=UCfo0S&anCiEXKnr`fGA2GdX=;6a%idJAa-rlp4%a+CJ7$h;bc{Ndcp5g|yl9;jE zwL)%gMhpJ3;lB!BxlK+gXC8nwgpxoW3;Z*}c&Z)FhmPY(@>lT{g~bU}QU)zFOW!yj z%{aakh<`1@M7>Y9z<;&AT0a@NvP}|&?}l!3E;geXa&N%#xoG1{xH_WM=W?a|$POoZ zbRC8A$~|q7H^G<2ja96frwVWEa zalN>dPt{T|rn{~^HE6$7@^d7kM%(6d%10rb=#3KbU{K1hWYPGLIyZ0wBJ?OSJt;2H&Z=6+Ox>+^9C z-hBm|O-jK}_M-T{=`Jd)!$nQ`tQY*K8fpC&L$ilESDvR8Jo<0IJ`u69ZRvU$Ky0ax zK@dlnbemAp>46a=R*Ad-PGcTKID%8dF=Gmx8P1c}66Z3HPz{8&dv&W znA}C}gok%x!NcEq>b@V8-(VH3e0FvZvb7DTcn~n_yAi1qO@~s;j}z@A;4+JiQ)>sI zUL`$HQu)-0U=Dwo3F4uqE&BHp`luwNba%T^Li6K~ z&JEoBjw816sLI5y@kgf6@9pi?i-T+MlhLQH7XXh0)}reLbhCmp;}9-kGeU$7zg27d zt+Ibw*6nLp{5`@u`R7bg!UfgN+{Qea0UL69_EMa_&8m9;Q~W8l60b1ZSXzy$T@*U( z9EF7YKPvmK)ciXc;2-wHk@T`Nx`$y^d-$=h_CSF6Ui$H^{fDr;5i}A)jvGw#j83nA zPrV%uj80!KICZ?c-8OaL+V`1q7OCB6%(ws5N8+YJHVPCsEaJSq5jsE|io-gWx&BmRjv1byhk3U@V2Iu+#OP)DmN;NRvq_7+*{UA4f;KCo8>8E zN9BXZaCX15b8s9n6dzQ)`0Zi|8Z5py%2iy9O6IY}(S-ZZA=8gsH2#1i@mBH`?^n|t zN;}MWF6586+elr!%af5l*<)qaOD;`w9$c#rYF8-JD0J!4RmBWczsf<{pZ&PQxSGAR zfa_JETf}*!X_=MIFg{P5Fmj`j>Tr^oSX|A@r+2|mUHq(ELcA^$Q{K%tt5nREdr?q* z;8(n)tZYPwsO!d?Y@SrvafO+@hekZM`~o3KUGUFAQ8iQ5Siqc&Vz`wXO#0Xhwm!-z zT?ycNSUGR?>m31!TK#qGDbyE(Ki|P6AZ7&!dj$xVHYWF0Q}*lSRmUarHKp;qf75G{ z`H7quPzS!a8u%Mx%hGVvwoDjp5~-LEUazdWJJ*TQW~`_S`bBxo+ou$JTqA2&Yd$2%0yLjMJOya5`SNzb&1Lkl1} z=GIp8GkzPtD~r)>v^e(*{;;C|Ha28Ce2IIY^ZCQ%ZplA*z=%kMANVc-mhie&0C)B` z$ZiJ@GFt@>evv?ehtMVmz-0svL=KWbk|^MI8#Dsw-v-;6V?Y@dP2ZF+d=H?P&kjj( z%#}EP!xTLK7Yib@(Q6|5ulTpv{#&KW-&HIJ*0&Su8;JW~7BA`HA^x?+8cU@9ij>Rw z|H#M`=+ri1IJwR|JmEZ9r@D6FNDDX?zfQ{wUWJ7DZ21pN+fA6OL)-v;fYTm4AzAxMX?!6(2A zTuKa7OI`pcKi}C~0H+&0qkoOYTXqxYYGM|^{WX4(#P0+?CcNjCPrUdj0-wDI?jLer z;O~O|ZUH%W<6%UR6Its~l6pB9==LjH1pA1mx%-9xs~~citMe~`!LZsHNEk`gZInK@ zP5@tv4$dTgU$=?Z?=KhW(&heJZyDcA`>Ede>W zBMO@$IC`#jgpk|Nq>}I-EYkOokekK&_!_^9Bin2ctk55i=W)NdSP?krct;NRdu~0L zct|g3qQ5|CM%?&*ra*==FO!a^kMA2%p52bK6o}P|<7`*E#|WDGKSpAOQxW?_2ihr) zhQ{wx!=o()c{gt?Y;kU%H-;ZPYe=VkI_1f<{=UHv^*DBE+*_D2$ofy4rSglq8tx_V z@0p~y+1sH;IvfJq8tZzbRq8Fc5d|Ti=2F#Q0KuLF%Ky0SS`hQ_qm^1h1K0QF&mXM9 z_o;qu%|X|Kd`5+Of9^u6&aqVc^B4XS6@lwIxq`l=q4t;cq-GYTLnBokRY1g0 zw+k8Pwr}W4PXj)h@O~QX$v|Vz9b2Vb@JZ%MVoY6Nx85UjlYmzbF5s2Lo9|4PEzf_KAT4(GK5a8v z_TBz~dtl2xQ27l}5*EIjgDVsC1$A-dp-lWC`0pm4?I-`wg<~95&fH&E9^*~&r)dzl z0yrM7T^o0E;}1pf8O*mwV~#LB|D=%GNI>KA@uGmVTl_T{KE9!k3K#Jrj*V$fzb?% zs<^+#%o8j7{aGp52ze7zh%CIs!fvGKblQ#){3Yy*`DP1?uRG_dIbX*4+cEcVF4~o& zdMFWAzKVCuJC+euY?;}CC)Mlg-T~q{D58ze{>yKAT>pky-g6FBCj>v$VGE=iMZBd9 zpBCw74)YXT_OA!O6@n~G+?PeyMlc}o{Qo9B9|6%+IP7GNOd>AF>y`k%1MK=XLjR0H zmL%(O6b6*Y^7H_+#C8H8u0H%U$`gEliV)lWh3gpz^$O9Pd5Pp!e`HP;mp$s>zq{(j%!M^ zH>_(0kN=mc=sS1{zY298;1Rp5uT4F1dB|s$KpcmOxNl63tqK}+ZT)!(!V4<>!D0{H zgCUUC_Qu@`x8!*&w>I_@w7r93*99=O{cISv?W+uef5?uB7~=7T7~-;ig)PW@MEiNi zzXZ-sL4zQCpF}BOS#<^|Nf6;p*NJeOTEO1DlLU^!)u~Eka;DgJ_?OjU^?+tv9mS?O z8e9$nOk@@R5?cOcpQI6eZ&e?p$w`c;^&)qvrpd)rx1V_CcT7FZmwVS6#1~PH!87F+ zkDRXSiZEvY`4Tm8vj!1!d$`)ekWz@p0pP1uly6`GZ*h!kK7811Y){PM)L`1A)@pUk zdp#^8;+v#$X#EgcFu-vSkv11g!4PEpLjIoi8TFL`?IiP%mY9~&jL}Ui6L^HBc}=&u zuUyhS`P9R`ue)WeW?uBahw$7-QX@c4s-QDR`9yDH^g4$C_3I?Rw>LKP*tZ<+YFkeq zv1&YmCkVsoo%7QF`z5QH^DDL2jd+z4H#L5#T_VV}dn`vN3G2)G)yU%3j1IKf%KzTH z)0Z2x?=5f#khJGEFFzF9sBj3MfY>gAgtp>+_=jzq8ZjDOr+G#v@aZOxd>~^pzvb;Jb z%Ooqc>Ru>T{lkv*vl1J<&}YyXE7U>l?f-_OJdny-EN3E!S`!)1bz5InG9%<>-KA7L zd#AldjkOetW5LkRsiygP4TT6?ien~XVBqxVf{Vw$bn z3jYCpcT*%v>e$kgkIIN4fs3v5M8p0FI-Ex8OrKDyfLWU7Byndw3F(v9o2grL*FubO z-WN9tDtuM;B^})=;bAxutur1Uo=HHOWt!U3ZztCH5kspl=Hv3k5?CQW)U{`qHIB-v zZ(@ItE(aLviIPZhD~+h4#$U%K#u|NG5L3BT&@sww@c2I?&eGt^b;Z+LOL6aBRZ|`0 zNT}JHHwiljIbud9P9EaQwzv_PQL9DP;H>XCy#<<4WgJd_NZKIdVIQ^&Xax5v|7vhs z<3(IPe;6JFyf|zEnhNibCdna>5h-nz{|mc)f@9eq)#hikW9Lbk1cMU* z%rNz3w^I|fMLVy7Z}`YcfNzL0i-B*blpO3qrKhOQqMJ@GZ<0_benDDuz^9dX;hnG!w)oO+VtpE%FFBxI z82W5cip5dt%XIlLV&^x>asM0ejj&d4gnK+g>a4H30HtiBaPAtQ!n)noU+%hCSK{y*?j`zts-sIy97MlB&H$ zP6tP`t=fK4#q;z@7WeD*>lG16YTfYWC-!{|`c+|fo|urC^<1ehvTa`P)RHliWLh_O z?5FuZ+jTI@L`G2WH8${};jv_}-`_V$rGbA1nbtrQYoK@RY*@_lz3WF;*sQnLs&jt( z>8C1>O_d}JSJLPCMX=l6Pm}*Xpkg2_6+G+~UX#ii&`R^4BR=xDfB$9bxd9XhMO~%wO$MO)^6k|z?!lA43`V^k+XEF_ zm;XwZ{MZ}vCo&gL{zl&_t%{R6YXW_EN~)EBV?31sa}UbV0ju4{WqL{EB~_Cj*x^V2 zvR$Ro3olDXOV<9|AJ#u@py3_WA0O2-Nnj~9(#ND50^g|wN+~w?4CQ+0Xs(AdG$?P1w$! z)nDY2hGaZ&*{xylkkt&RE&2;djXVykLW0c+0lr^lPv$8a zHGbMlH$r~e*C)<49)oi>jR-A1XUXVzl27+<&;&nD@NCZrElCR3!N49%12x1fV0JVV zune05$`NOi-CvQiay3Z%Z6#up3<_QU`3or%G6VeD_5?!np(>CWn6Eg}1*_$8r%&nE zTbdIl`g`5I&y&CnH#v8+*S;4@Fd()T-9PARSe&5T)di^%WM zJ-aPiO@7>=8Gc!xeeA}aEPhW)DW$bPl)3qGaZ2yS?)}TOW8dVP##tM`#J;D1C_jw} z!e9M}mI}%U2z1E5`0V&?1UV*r9DjVD-^Cz4P{S!c^mGGn_S4ZV;>GIOY=V~VKGa;_ z#o(T4M!(8Wo=vA(=b+F+N|@08aH2)BzOuH<6E5+D?XadvVbgo5d=DjmJ~O#DAv4DX zss8m8Vgy1v3Ot!g1S^| zGV19jrid;g?D&z$_9|=P7pMh>tp-;*{wBoipSIZ)dW2GJU!UF6ty_WH8ywUqmaq}0 zm{1&30kRSuQTxM9GVJvtWtP$*RDo(raWvBH zmJ7vMgaox|hVk>x=T4VJGn491B3LO!PMxyJjD~d2^|waLT12Df_zft3Ddq?8#Xnw^ zq{oudCUEc4f)5=o6(teFrB|B7V)=jXtmsR)dtABfJ-RDE(-&>;#R`gnZU@RQw@QIS zxAOHzdNc2LuJDZd4n+M9{Yd(WvX?gMY#RKjKL2fbUJA_fJyb$i=WJtxJWIB^@q>ot zdB$XxxF7CWk~byj6*ax7ZwY$E$)-~$#j9z_62DustNR4DOZ#$sTXrV^OUA=8;4fHh z4vXJ>5C{*6X=?J%wS1Q@rj^&rK{s;d<8Q8}t48uk4f@&9xG~8Fp!a-e+oj9t>)zSF zPh1nXS1-O`9~gW7O#Y`lzIwo+x-fcftY9`mM3Cbh#^vsXnnwNv3jF=e^U{z~&U-K8 zZ?uSOJ6$T)pT--5*-~y2?E2%Sstfby!ff{7^VkPb`ra~{l3U^Yn|W{kyFICuHP&_Y zgW;aI$eEg%xk?hUF?YR#kzSU)+qLOw3@cntTD_90A=>(f0K#{3q?$alJdWi8Z*_xJMt&d?ZN zCEZaQ*iH}|N(P(#?$f!)%hq?Se=VdeeV_ONLw&PZDhplfx<<_2G*$y3xphwOuVmD|AZ+W)lzbD(&vVa)Pt8*hiel};H zeYF0bOa-^B`Z*)T*{xt*g4_jirN?rbJPfWNo z=R`%E&Cg5aD`GzS!r1B=i`47dS z@6=w*)zc!M*!mYBxHSNghv?f#Y>2`dR;TK4?`ZaS;@u}xR-^7(Q(f0d|7~JNsrDg| z-m`!YByox@Y>E37D%0Nol9(Lw1f^fq{+F2Z)fD$R+W7S7f&9c$q|aMN&BV{YO3sS4 zd-s0zpP3CG+YXEb-F9ZoT(hXds7zC8%T09jaqX4>MoZa4Pb}(^VUM3`vrXpQa^EpG zGqHMX^;og>oiUUgGW{5ZFZsqG^mK5Q;#7|Eoy__kJKAA7|M@f;>n z2Sd;w3L}X}8`Kq(sWV!2PDVmIrEy_`A&`d!N22D%O!4-28$Y*~{Ccs`|JfC-H2kdl zQ&_@s(G*om_>7zo$oWJC0(>yNb}uMWc$xX1WIvIKzIUcSGGOEIxlk@xQ7`W({l9N* z_FJ3{v@=`gLb>>-poaqMCHQnfAl>uH1|MbhBU(5meJ=Mg_5r)HAfX}?N)UL7;EJ5a z!Rld5#sEb2>b|Hn%OfJP-?i`@6F@bq6vbmqYh0+3>TNG!isUQFNJDF z{`dCD1|l?+r(pT7$|JHWMJ=y7|5dWg+E<02fBMX>s(XztL%p`!tc$;@gq5M_ z+vT2Q%ReA~qBq(JZG=7J9kW5IWc>E~5gc)*vL%!7kk)8cCEVsF`PlZ{lRVAoyMfnl zH2H9Ua3lj}LSqXwHBLRHU1L)!iI-o5c{;;Z`qylE8P%bRC-<_2@`*&%ygkxw8U064 zFgm~xeO{J*e3(*co5A>l-~LoD{G@&ZyR}>}|5U-i@O>rC`TZ`~F~pe@Wh7mCY9Szw zV_kBP_341be~zFyI`z5q{s1L_PGs+QleVd|mAQNp5p9VMljq|st(SP_;>L>IC@(Lc z2!jXbou`kf&)??5jyd8ChuQ{)_ypzqhJHJq-Gz=rj37yNd*6p1P(oiP~Xs(g#CVelR=E}{{VwPe7{dq3H_SzO)8EA0Y9$kg4B8#Rd{TJAq05UuFFXhicp(hZ_r=#NIU zk?%zyTJ|Fe5v}+{97KC~fkuLg;p1V@Kj=riXFf%{TNgBFETDBmg!(eTStiy~O{-Y@IY*A6+l92y< zXV?7+rk+iGxMA_>CyObbM$}2Ky;4xkSWt*pHroc5b9h0sD%XJ7Z^66FMh7~mHOQ=f zdG-SQR|qP|vsWU~lZvF3Y%Gt>=NPNMRfa^5HQW!$l@JqNhUc@_@{u&bf}~+cnr}t& z!+>^UH2F1qI)_^~5S&{`);-bca~yhy8TopJ&3K@f9PcR>y-LyTVG|O|El9p;m(S7s z4nxr7U12jm2tIQie-gl7AP0?4-qFPg2vV*+JvJ=WkpJPdG7+QfFYL4M}BbD4_6xmy^jCo^)0}z1@2~lJYYt^v*?D`xjrrFFo0lJk$3}B=x6O ziFsB*%1%X+%Z8L@B<5#^&&fCrC73hXGZZBHncvcD&jgnspoT!}{IVLrQhq8D_u(Io zA5;8I6@yi)Kaz4FqoOi2D%t3wB9doLDqisWF-5KTPGIbTz6u1!PA$SYpz!{$P1I&i zJ)1dJm#;F7D-QDhS9)-q%U7A1#4rC#501lqKCV@?)+1n3m2&N6_~>8g*I+l7R?~mW zDWBH*xsQ5KlYZ->QVzc{^koIfDRqw#>SOUa*1Sa!qaT@?dU8FMaDOCMTGVgweh4t| zGa!)5LaqaTrIF)`gLwF=xbxOE__>d03cER<%zG`&JLtzFGdLt#eU5A1qW1H_#+j)P zC(s@q8nJ@A%NrE+U*4Wbnr|VT?+bD=v`dTm*M+6V*%!UYb{)hUQ(sodK(u3l)#q6M zrncd#m<^L}FouW%?R2ehDJNJyN}?_?X?}pqUT1}KS`IVf<7w2vK^-2zL&!->?0lt# zc4z3zcn2Kh{aZ}*e3SX*YfT)7FW*T4+8BAh1D=V5b0gj9FE8rnduTx^hj$Hu^WD0L zo$t;!x;x*KWpU4UO9PzmnE3NVRpWg-k|3jIrAXn%pl(_V6z9= z>>hw0-umab(;gfe;6CcZJX8xxxghQs4D*gY<)!m}xu(1Q_AZNmymU9$y;*5IUNSEp za%s26izG&=s<#pX)=ay2?vMUD!e3ZbY2zyFIP2$Q3JSD%zXj$YNI7Xpnw0J$Iy!wW zY!M`9njoQccc7`_`XG|c=6fHa{UdP4rdkDUcUo8hi8Gb}Id=`wWb>Ejy~er3&4M(^ z>hjG`<9Po^fN}FPllYMwzx=NzjuTk%VnXl`Zrn~`UmJ;mPd*)aB(S`SWADmap zVb>tQz?=mP1JUcghwk&IlOxyAj9K7GbH?^F?Q;6 zjZ+8l={c0PAfPRRlw%3^aEYw~Yodc>^Rtzu#z`-Dj_sGluMUi&FO&5-YhtzwMdEAb zbV*;Xc*KZ+WLEr)o&1q&N93Ct@O%M!3F3A^+#Q2t;yzqgrfC;hf-2!X(HX<04gG~s za>D*XgxwPO+$iXrR><1F`0^mX)RN3`6QqG(3etsw^ngW>=352vYeAZkilj+4m(nZ{ zZaXNWeQd^eV>6WOf1E?%c=+Og)~X2kDs7y%2+8KzYpOZiYeOvr5WGtnX&RCy+mM)# ze2(85m>A>n5IMWjgU8HnP_|W(CrwDY-G-!jX^_9uhGg^F)-_yo?;%!)JkRbC#3DNq zh^!}wv+Yhn%C{mZ6^VPH(y{odTkLd;U%SL3NNf|tp9OIre%nCJeV)#tbc7Tz0)PZNd_PC@d^kP6~0 zp0F7UWI2K36;m{^M>emT{1Audu8W{E&m>biBd5$yeT`#7-imyVDfR4xZt;+n(m`;= ztOo6tZ1b_xDz_rvVnUEWzw|98BF^)K1zy@*tIJFhGcgum>l5_r8b$?ZtA>;x|DqG1 zpS-0U-eCm-wD}Q6fVS6lcO#Fp=z%g;qC~KJ@RpY-|BFBA))x%?k4$=pmGZwIRQ^|I z;D0qS{I5pif3r04zZ?ltjz`l%0>{0{NO}aiA5|jR+}~SjT*0${X4}U5_?K11!|HSF zf3-XL#$q^(IP~X%rG)cW^Mh?1J7eiqgro%?B%7yv5_`GGRk(b1Lqz?*@tS^l zI*yWH=$~{XDPjL4*Ye z&rHmpCOT?MMGn(or`gl|@MwYdXbF;28j}p|3P3+BLo)m+*el8Krm#C|0`jj+D%4AP zwC|9INeYmRc!r3pQ7x5NZs9b08j?^Z689->{wCgkl0{9W6NDhoq>)3XtdZ?hqB~di z76(zFsbU_I%>(az5Kf3DE8_pGs5Kn%HOgKTX!5RzSu`u#52$ec-^IQ&p5zulk z-@HYu&uy^JoCo&JtyKsvxJ-UX9vhPK(@>zjqK`^{!zqX`H1coXk5$d8RN_EVnXdmI zUVJ6L^dnHV1|C7ujYOmqqzP7m@?slOwjr@B69R~egJGT-0mf#uXDDMcTKp}%KMUS2 zqwLAMim;~Sg-^07SAc+dL~_WpJE4UKew4`IB4ZzbBOY8>Q>({4l_5E0?2|g18uwr+ zhcD;@Y-(5;V^g*lH6u|8Q0;z{YUkNY@STMeYz4X{4PWpqksqFqp6Bwv=$z@RIi(z4 z-y1kn`L~QSt$P9H5y-$o)I2}Upsb-LzHaoVDxEb5_A=-nGnDE^Z7_@C1x{ms%sBS78ZekitEl~IM{_KHJw*9yu?hHVknz_V#$Rg~@2q8k ze5;s!TsBwDDdO;g`Z`68@5^Wj_ocd$Ji&y-Lz-5UwToZzwdO(I{B<&|Y%8&5ThdMa zAd6p+a{F1xH6n!jW)6NJnTXT!H2ckPBk`_p>(uDd<6|?LSk$o|8;pN=?HzJ$_T<-V zLCOo4Mh7YX^R?(8;poEg3CCz>$JC^$W+=rBY;NeT(0inHy()3^)nvU20DK`GFkeW;l`qx%- zV*N`5`I;(A82#(0qQ%DrI`}}P*${&%JYO$5gvY0uwLk+P0U zg7}J19W#3ZQ7h4;MrleJlFf@BEG0x-xrhyh=k%sm0jP~0(GIKX{G zqqfa^2&sFUGj7t7(G(0VXZu5Be+5zddvOlz@3UQO94uR2W@QR}r+Zb50+L&uSyn!? zj1RougX4;;E0d>}^MS@5MDyx7Gsp*C=t0!+@TJIi+QJ8x_24+Pp=jpZ!tz-&W>S)! zW#t2p_TV_Erb^|*K>K6K8BO6URWkMGDRVh&eFFlrLu3fi!s3dNMGZQ(>S{;?6mC2k z;655mq43GX{*H=X87-kBP@x0t+8~2OKw;HvfWna@Y#jV}FA4=`aS-`V zo4oUo?{sp-Xz*85-qPxaqU!2I0?{-n*-BES^4lZp9q<%N3qUYkAyDl`=WSR?Sip zaQM_q3JNqmHW;3$x-s25yz0gb?B#8o_=wIo}0~IQ+N9TE*ws^k=fBQ7QrmQj#EY!2acOi-A{3MU+ zET$O`K_kbL&41s$l-oEm9*l=L6T>(@r83mN%8ZDv?|Ujv{j1BObE_vUVu7+Ao zNbouCewv(`4IHEIGaX&StdrA?LYAbBbF^|1hi^OQWd+Zgds?ALC!0rPR&%(so}jJ? zMjb-VywTt;szjovBs@|zaDcu3()@bTD;V-hPtrU^PbQN7+5}gidL5V+ zoM}GC3s12tTb3T~gXGHeAReAib2*&Ix4sd8;{U|hA3D&)`$vNP>XeyZKFGvzxa3_; z9Z+ZO4{_~cD;5?;iR*XBy10Jzj8YEwIRi-Aqll>my`PFw3;Ju~I@CA5o8p2q+Dh<| znF>d@juyG>bx4)j@q~UfJJPAHE?kIY^Rdh_4nI)`Q62plyZ3gZ?Nk284O_if{FF0l)Dl^i)lE=M=s^E*9~RRDhT4?DfFQ#mcz8l z;DP}C=c;3h&rt+(_F<4p3R}S`1n~=b)G;6E;Qb&XQyw`0IT;`j}&ql9r*5%}){!)1U&fdcThFjAY@%z2trm<{{Z*VIZ%J{ zc&$<#^mllN0{B(-6`@BY{D*A*_P!zx$s>Myu%5#=od0S}S{%-~CRXYAIVKs7>d!B8 zvGFm}sKK)YN!F_Q&K~9E#%LJ`o@oX8^WZUNzb1(7%^^sgyl{+`Kj#FUR`uzr*Nm@J z4GCj2TJYN58c72Ci5i$f^9vJ%so?1uu^YTHUj90ZFS)Kq;`kDAwfz9&YZ$nJ-_Dr~ zcIP)~WP$j;y_2!Qear-Xh?<=520L=TZbw%2|G;tH-^@`LtHl&=DxiJ&R#tFOHqRPe z%Hi*hQW;*%v*-Ieyc3Z$Ar(nERzae}xUyQj=8UFb_*?)k9)0vBMg5<@$$Kd?W=pyD zd=-I=E<*KDLeciIOOF|4JHWCwJDI8Z5J#Pl1&oG&z-V|9q0jvCSK%t<+AGzp{whOO zf6(x`*6{gV?em~hOf{)QG7#*Qk(sE``lGmsNg`CTQ2n$7ytE<#hy*L)yvVtjHV`Q; z+%uy+oRraClV`t6kgU0U|C{V&(N=oAt@v2QF@>S^G_ne?ZUO!6@FMMK`47DIyPU_j znY@F12hTWby!N}vHK(CCV1S;+fKJe{EY|zKi9$7?cpbV2c#0Lt=DF9D!YL4FZd$SQD@!1@H0aTc(idtR0QZEUF3`@R#=!)4K$!;f@Ad|5I~p#=x#QFTa888TnD z=z8-@IXv-Lt-%rJsbP*dwJ|i({D1oRc&fWWhrbh#D%WI3Rz*Zkar$+Mr!Sf3`=cQ7 z9GJ``o`a7^Xr~5=rwk8g<9mR%;*TGW9sdo(KHj{$l*5nH@vGGFmv%A!MiyOAqPb2B zRLSA}(YoY71t|Opp}`V6)atFZATV@Z-k^kz#*c$H_y-4@68Z;K-=D5It3E;1N637J zl84;2URQ&tL@6$Q_IRzLWv5H4S=dKPd9H3?99|x6U@Uq%+Q68TTd!6@$QQ(B{0-!P zs!8zY0^Y1YM|*=jmx<&N19}EHJQ$u;*9`xr22Z*zym$FA1-I=uMhn6oJ!>Blk*_cB zI)3)7@>`B3%8w^9kmNx~Dsu{w(}UznCknJL9xq7!kg^kr9^{fe3KBgYHQ3wtjRl#G z_#D>+sC?KHi5_RzjOR{hPy}&DY?gXD*$&hj6I=0|rBvEr&e8c!LCW!++rXaE0qvlZi4qA}ujL*^JXJT5plW@(2_EeBxCNwDF9%D0FsDdwuI}!#a<6qKZ zC611+;fEwk)jVep{;33I{~Op3n}K5(fY3~6{EELpEAaT^uW4If%%qP;%4Rmv!Xyd?|+ix zIBAlVd|V1s2zG)XKbF=qbzP!b(&P%AxP3aQl*4O&2IBVWU5vQBzQm|T81-w=-#W%? zp0_U7C(!72Pa1*{n@OokyD>w!dk*^4C1=M$m&Md)cq9k;enbTJP6B%;^A-q1U3MHO zWxk5B8BJp|THNAJ+z5P<5)$&bZ!3yHiR9STgrAO!-(B|yLlR0wQob$LGo{6cmo#@v zf0%zS;*KEb_Gd$~d0p`$4)1x|;N!FTd-@!$RdIZL^C!mm_~wz&{ZTq(+1cy5}lTC&mD|=wsLw9 zJoFba`le`$D1j!9IB8&0K;ivAvDoMxx`AY;Ni&cTE{q4fU<`|1&9oIitPdYAF-ELv z(ZcNy>vw<8ZKWK3`v*bsP#0L{B4VF)}kUmtOo8t0z>kQyGg zK15@IR;dxHYZqx0uQF1ctHeL%(Cx-MPF1cO?IqGsvN1yX*OLmoR>dNuJxm%T2dsui zM^*`nIP3?L=wT=G%L|h@4sV;$$c%!Nl(8^0{`tsQya*gPQXF{()V`gv`ym7U7YO~w zl>XnQ(*K3AIM6==_WQCEqX2&XQF8wG$DRA73d8x6xv#?X{5PxTzpz{Uo0@Hi{K(fe zm4&pdRtdS2-~+j4N~413%#6E`gY)!-?7X#0h(J5Fc3^6CYWt=||2k5RzGwUVYezkPy*Xbm9*p zWcM5z0)BA#{Ig=y0+Sy?V@{oge0@$2;BRGwo0Jf4QbI0vkWunlM!8jc2;Gy%!hi4- zxdGwxv-uAOxRjl4agXc7m#)pHZg%;;vARvIE~UjSeksskXTgrZ)>M;cAMXydEWXGs z5tR4-A*F?q#C=2mz!6B1`m!PZ z>7uUUpO!NN{3gZ-?nqPXSA4+-UP|KhR1$GD%k_DmiMZ_5?NyCx>Dld7P5Q@u`o}}+ zN8dU!lyh-8lFg^Sn89Uq(CViTF0RwVs<$uE2V4TrgZF!~mt}e^AuA8}Me+tSDHRMhCYj{G9B#p1b0HZMTbg+*kIUlv77uWw?B`ijr-tI`QK->F0bJe}Ks(U9N@FQnAw@hO|z{KiX z*9q%*0LkX-4eR(}VZ=HP>Fem!*712c6=%dHn33+va3A=E!`D+sbyK|g#U1oAYz9r3mjlcpi%*^x`002ZQraznLE zuq+t5OQ`>_Yq3X=CY89Q$!TtBx=qO1&--SxhEFJ48n_(dJ*As0Nb*`Ng1AR)6T~L$ zb8~8ZQ!sjdm-H|we+3y$;VY0l&xFJe$vGB_18;=_0Z1NiA|DF0Wr;@!eat$<%U?jT zT9?x$&C3*|oD!6^gZJ%a!hi?K1D$B|H_4JP#O9LnZAdl`C6f2(wY3WW!5)5XItsLJ z0NtG*yO$sURdiQ?a8H&Zy+~Evr39UVuB=YpH(61XVlmG?4$0;>GRX;?5yb5*KXHKp z9mQpxfPZ(ECB(nd(G3c}mW-v&4R%K;VWHMjHNpyi33OwJAnwPXW;S%yT*@=BtAv54 z;tHY$`g?tkF6eI*G1Z8yU(3az7f5G?_<~c45=4O}KJZbJ9;=0ZmBfQElo`qBp@S#cv6ryKw7JKT97szFx2oBqz#z;Nkx(k zR9kzBnnUb%L7Z*32nMiCv)crwuaK|P1ZHd}f20f4NSQ~&BGxg<1#-QASbR*ufem_A ze=t5rFi>X$t<+h}2FhaYMzZ-YZ90oNr?Pt%b9_#G7Q8HQPW8xCmO2wtaC>D))V=N4DbiO(%iI7JwfPBE;ryFz5i6E4pi6rDiQYAuCnFm-^RG422^~(_1d{^R#zr^O_XPUg&gCO=33(3 zM?rcH?x6GvEnu+bfbrIyjJ|N^*#)tPT)5c`C;|lvbZ%L$MNxrSCzIT$Yu8elxGbnG z?7z8A1l7@Q?K%bVMsJ-Ge?oi51K)p+MBH5gKjgIP_b0bENdzZeQ6>*nR*j)!j5DMQC&%hmdZ+m{3x6w&r2 zt2BUKTcQHAM#ToOTM46>q%6>U7syaimF_BLgEyKD1l4>d1t}j~MgHrS3l)%0+*#l9 zOWVOUPz(Q<)q%mAwt7ISq9`u;ya7mlJ{3}1rrB+7**?H6*V%1~qPXQz1Kjdk>G1KU z0dD!DOzn-St3dH&f7C)UCi~-Ea1FCRT73@J{h*Mz#N`9Xs9~!hevfC8ZK{R9<&>TS z8#(eonxZH^#}M@m{{S+1xE~Tv3gRy~{R#q`PeJb$z~?E_JT6;wr_bW|AJ=yUktF?ma;3l8L31bY^Ot_*j_+3_6N*LT4zJTS3GF$g8Fxo=0 zKfzvtM_)m2fK9JkDToJ%P`Kf$u7tv9U42xaKVrUga-ogCb!op8~M|y&#hU53zO%WWbu0_T|)g!>_o?L}bf+i%YVy_#WOr%*1iI z(hO^M^=~T%|DIHFqaa`Gn>mN*FGAKgeBcPVG4dqECARBf3|7Ik#Vuzmx%>yqVffG_ zMNzV=f7^7~_I?%j3-ZNPzZcW@-vfDej9V(TxTHI*2~4$ud~v^-b2zv7rJ(vYSOSP3 zZgGn{^oc@e6ouJWv#Wmtv+X27zPNQz5t*-ITo?9WLB9C)qKHY{VzXP^kxjHV?Yq$9 zXB0&RJUO9E=3H!LG;#;0pCF-)!MG>vx0ey_Sb0hTVOh=mC^NCBH*&{J%$^9SVxDtO zDTnb+h<(iEKUfX>9qaGl{r8$U&fmcY?qdE%I>>4^z;Zf(vh*%EJs-c6MpDlU zs_r7>t3+JIM6w5tt(ht`2>Be(%wUlsm7XwLn8fj-pWT?zJ`5~@`YzKfTvIi?f`{Y~B(YEUMvD?+_b z<*7c$FVo2~tw{VE)ybYFdkv?u(js{Jr40&_Hv#|#!Dn-Wq*oa+t}Zk-h2v^g+hvAy zYI~(Jh=J9FCYLVSxO6$hrOOO%`MFwl@6w^j5R=O05&pPUS8^^Xr6LDFB!N)Ye>(Wz z`!lJGfS8O)s4o4)>K9(D7t#M(1U*F`&^~IGR zbG7whw!TztedH6)`vdC}BnCB62@;Y}1nrb2rMjdX>P(WDGfBNz+KrPK#gZt+g8C92 zw3=uXWw?yi8(MxZqXbB;H}u9u4GP{?V59*EA*s?s?|yDg?A>=sNs$4^(d$y(LBJ0g zEyFWh)PCRLofdy>hwh198&B4DdBU|dJ|45SU~_js7T5_P!ftcYR2Qt?pQD)%{A3^- zNGi7qQcfz_#{pn3)j>dkY*=n@m-tsI@w(*oAn|UvkSgPu3?M+SW==EMU#~ZYt7MvV zCL-wM#=@4)`Y@H6;+<$E@;Nq4Q&YTDsAXN)px|ToCW2b|(m2#yUT$}qRBP@^yN7} zxEhJs$mjTes+xZSTbk#=<1PT3A;jO@OTkJvb~{4SJP(r1s{?D)HtA7&BM09I0*~9I zo;E=aBZT$yV%I)v7r%lU3vx=_l3-7BOL=x1$WJZ2?_WLjl)-Fi;Ib%-aWj!U_Tk%a zAjjRr`{yf)0#*RJ)A@+2xDtsu$mjTd3ft)vPq+_~=X-*9stpt-eC<7SIdq>B5R> zeZKEs1EIb#o1}tH&>iTgunFS#dVI%9Eend^ZKxUSB7&jWk!*hLLg+D1;}eQ#eFUp1 zvgegb=O{vki?o<3d7ukz{w6s`%Ijl8vU&K_IUEv?if#Dti?s^B)~eg2>7d2pz%nG? zX3_^&17F@}v0PuN^PsG@MFRwByi<@SW(rxG%a;X19*DncLxHA>;Yhk0V&l~#B}bRh z6iQ9j|8z@*scxwhq5|&J5|9lZheHe=nSzLwwjlC#nt1OK~ z)ku2O;+A~1AQ?-I@at)6_uWW2~If80Z68A;ZR6+a& z&ZndFnBsG6&1cD@YVwV*iTXD}oXL>&!X&5d=QSvy?<1tuqy$E>)%Jbe8LN@>)PeX$ zXroPRB@5UCB~?vd$fG3>Rvi5QtCLAp!GZuj2J(xxMJ8%~YdCxy@O271|IWwEm~ zx#c6-{P_l5xN}YKUbq{5cZ9_)MV0BW0PcLYOoOmSCMml@7uLQj=w4X+^sWetn=Yh% zKg=+RYIP$s>^@%?YnBvrFLuqjE6VDoid%um8K~i{0LkXr`V35dE$Ci)>Umd$_06hE zO+ep`GwIdYHa!;0wFG&(Ne~-UPa7fTVD*)A?Lb{x4Y$=L9%cUZR$d1FE=_bI>CsHL zbPIL49bp84`iWGp+cm1!?bY;BSl`Cy6FJ`K#Y*6KQ{@Zrzuf}DZRP+f4v zLA>!k1N>C~+vj=Rh@1aOZBY2NY(#Y})DgG$jH0+CA6UsGiITgg$*`e)rxXR>I)b_5 zHZ%X9`gaRXA3-IVPPHuK`Ncszbrr39bkLx?u{aE-~B|*Mi8H# zpD;dMTu7^ISK`0@q$o%pluTBb)e1Gmnm%vf3=!(`h);{5rq~YeTn_uPYX5-Q>$*R( zc4P>|Huy(vUHL~>YyQ!FhInf=4%?7Ny2>E1Zp*cghup~$EpN08e&*x49~Fh#r&=oR z*3-WI9NJEU8rd6a2h)_JNnC97fa(;I)$f<9B@)N88it0MwZh~DtRCewdl|DsLm5Q1 zhGBGp4K=jVP{Z(dR>{Mo)-Xg`VwJ&S(gZaOiDa@6$>vGP59$S=5x(e8G-{b=& z!I&kpjLiZHN=@Wo#Q@b!cxn0u+e!2u{x8O);dr!;AyV4O;_v)Fm?)^uL`xYWTFS6Q z_ij*hikg5`GtAfW_9AA9ia(gY`xV9bpg<#N^Vuu0o=_V#%Zma{-O7ZLLr__oTu2YO zkoiOgDxmqNN9$F?_B3kjPS=Yi>JftEX66ghGyy{r0U)5rq{> zG}DzC-&F-Zqa!p68W{|MTx`(#CRzkW*)ooYR!0PUtfW%6Jh~6-Js}>#+ecDkPAhw& z(U{&LuC%|){-)OAmG)ZpHzld%AdFC0sj7pYSxg~>jDS@Tw}Ahc3BzPRg4!28Yd0@1 zOrrdg%IpJ=Kp**klN%F+Ko8Y^=niyv&n1UUzHw)L>m3vtO~#VxGlWvFV%8C|3%6Wo zA_{UXvy8k8Z+$=a5kXuDvL%wuEw&;~5W|AFUl0{RJcv{8CMx1`x@{scF*T)=dEu)} z#x}`On~_#Bn_P!W{3kg&3K+U|SdLf+OS@%T?g(y-OB&{qCRkk3e5*?;PjyQo*^G3-%9mz@*t%+R6T@4@St^;vE#aAc=M7XQ#7@Ew_=L^H41qi0vOv4vYXNc;C0b zE3j9!s)AZw2vgDRt&v4gq{MtzouXw6h+B~ODQu0?O+cY%VWdq|vDUKt&9^?gfWrsx zVM*I2R;lK@39M3$dg%~kS!4Ry8op4?yC(m|-}6u($f`bq_wv+r$6Nq5pX2EXTJkns z07`>|h&1&Z{0eyoEJTOOUI(cP$Uya0LLHi+{@NyX)bCT+iLE&0c5310D5@-8wSdDz z@1dNIZpP|!41u|?NwgU?^#qA16+Q#CLFr*v#3qxXH+i@pe37bWFG2qR`fa*865dI^ z*zU~aIMttFjkiD9JbgG+Ah~>CJ%|6k{}lzv=G*93L&#UJkgwDLOZi@tPIgq9!wiO5 zdlt>s1So0Xeu8u93~prMf;7%5NPUnr-$Ks+@B^G6HVa}4%in*uR`GXK{Fw|#-%_8f zKEISh@@gQZ`2F{56+ag$RTKsJHoS`Jtsw^Nl; z#TBVPd8n=v-f|$D7XA1W^UpV@ExtE=8qyIo9CqH>$@OweQ_-xeaA*C@?^+xKlM`(5AWTe zs4H-ZZ7ylD)g@V6QY9e)=l}Eohu1gKQaXY5iX6T0VNM!ZFT5pXxu8dssz0k@1tp}} zN-N|W-CzM$rOhSfr@ADk)g>Vt%9@hK2d+z^{1Pg-)ZL=i4^jBQbmkpz;*9P9x^qE( zrItA;ZOrX*i25*IHglX?n&~9}+5tU3LQOr%#BPgAx<|c#gs;EMQPVtK*LilABoIw^ z0~ILVqXx?*)Vk`nxurYP+|oVig7gYKzBN?PVDYq_hEQ6MDPbrrk@T%(Qg}uzinL}@ z%z^y*7mg{Ry3>jhcRhl%jIQA+x`yXyRN*Vs610XU8*hk;;ax~HcsfH6k9p~s63RVI zWd*g?hlR4&kxwq*@P<31WQBD(e?(T;*ei;SuIWW(g+@(QxIage6)Z8b0{I3%(o2;U zwwA=@r42`xavLv#bI(wacm~(~^cK)>HFSn~hupyh9L9N30>i=VKeD4x&!`>k>q&P+ z=OR1$bGEjl{Foh)Z*W~tbw@|;kKIu)K9N34gK`0q&Hg%_>UU1)p6Y+=j4~)wsvpFs zljBe_gJJnTB%6l}(n+~Ap?gyPh%-JZeZo;;^G&QEv>E= zCD-Ogpzr0$QRq7~S(j@ea>kMzCDNYg5iQa>X2v3|z|tCB@Bq@^}-0+YZhEH}Qy& zb%2*|IH@Qu$?bGW6`4qyPdy6%j7VxyJqm+uNV?C4Wb^H*r5v8^OXN!;vsjy(x(|LiqbT?iv*r{SZidLK z(fvR(x^iSahig72%95W-^QX(`EdfO!(9ZjRhWT!!r6+Z1rEBrT`wl_1RK_e=<1*W_ z1svXZTNL`NAJaAZTx3L_Al}GD^FOXZZ_Y*e-xv*lQe*H3+%1oA8vmOfPghpUt5RJi zbm>t=iD%l!5B@v889#LAj|rkwY5eyWG`}~(2LUE^FEx{@bta%>q7}M!$>wUFRtb|+ z9!puueKZ{E-@iy@NnfQUsiIeL^^Ffb=)E4v=8B&mtXb=5cCnKv%8;z}f&TlST3 z)D|o558{qn2=c1D-(~&&U$~^C2upLUftS%%w8ef9M!}y}P)CG`+#J%Jq3sSB< z(6TXtD|j;pgE_Sz**vs%Lakk~1RpJM4uy+W8uprv9klJ7Fny=Cov>~TSC z3Kb}7mRy3uMNuxGARhBS-FbdO`?_esF35HE)-$U8cX1!E|GvxOn;ThtbE8SOw1S+^ z41McV)2dWvMN%b{{}GQO@g$zP+7J>8RdKdc6Q^24v&N(s%Uq>?mR7PMp#q|f>KDfs z^J-;=jFwQR1p=RzYvBP^h5%clyHGpdW`4=@7LF4x+boD%T$gpaHh11ET(AYn=MBzi z!sDxGOv?_ox=gZ)0&PXqU7E}H|5I@gFSr2edgS#k0_CTGZN0=~^hi##BRq*dcm;c~ zj6F!L$L4!33ve6zGhbDKG3@C%>)VRHbC4c(K+K#=Y;qBr3vEaU$TN=Plr>O8fe*aV zOE1$JB=mPMR1W@W+e?ZXY(?ruZQcYYyVU7d5M3 zU=j~rPZ0PLgP072lSXt=fd;7r@miIvg7`f1biGDZJrMs$zerQx!MDH{=GBir#NiW& z&e{sIc3wwjP0>oWik7eyN(|7yac}zOH;+C9@*C3I1^XPEx_S4LQ}FJ%5d>N^|LLDE z86~^fA69bsegqM0wY?ZiDZWk@>^Kz;?8HQmRgY9EOC_JF8eC>G7%ZXw#VHjg^i|eh zlYX134uY4_FKp^acpmveY|d!H@63Ny!OMm<8X7LECT13kmjI6=F}3l0*j{x{8lV@A z(mT|)sI-3{eK?Oj9EH~C)ur6V3*w=5a|(^-qiEe9N#`Qjaog?&&8(uLcdLrtD(2(H z`wT{8y-u?Tox$G+Ig48PTh-E&tr;B|E%@DeZ)))g86EiR_LtyK8Z4mo{oQ%qF};Fb zKE%iFV)hF43ev8P>B(Bx#*33V4nKUm+CZPyET0D@sy@|%HbolZLu;pY*!=`Pjvl3~ zO4Wdus2r58Y770Zh4}A&dT5lfKF}dGerZf+y@5RBSZHFwgjBp_1V#KbX0n1c$SFUr z^m8B4J|E_fl1e%J+>1b$o?iL@o%h*mv{FcErsz^g5I(fyM8uRfBuz;}(u8!($Di_< zzxrv-ZzP)qGUcUo$^$Yh19eHaQ{EXdWl}UssFk@+%=L5G>ntoij7*QGzO5))ZSDNf zf~0syIWvhKWir2f3X$=~4QW)2McXO~YC~Yt@`-edscd#S&g~W?O|~NGVannTWAk~D zkVvJFc<5;z_&KIh=%4fg+@FDg2PiEWmeCz7T*niDKR7(@q(k1-!T$+Y%HhV<0RHLA z8TemI?{3Pyzt%?-zp5l#x0xbK;nXl&s1xiX{TgZhS;x@0i^{u7ugH~27Bzq_>fs?z0eDbgdvxvzG}X3nr17Gg%%X4E1yC$<@Js zzvx{>V9_Rm1W&gLA`y^Ff2`BW01q4%RR*{?h^LN;E(DzQV;wC7>}RQ@&3NzJI@Ul& zogLqD(Yve#nX*M-kr}S6cK!)op_R+jSgv)9Jfo2Pc#K*U#8ca2DxBhWMl)iw`17r;Qb-&#|(S(dDT`v@Su?Bn!kWfO0CQtnERw!>X8nzs67rUaiFq zF-M?WO{kx;P=NH#Au5pKE{?8i6Msr_-G+8q>JY6gdKE)7RP zuJxYrw@ma*?xP4|-*a5+;bTf4P7sB2dIW=l?Ba#2Pv>5TWb>6UaGN0R#!GIfQv~_e zlqzT`&=`O%MaWwr53o=hS<`V_kCQ$fD(SJ#OS*XGkV3m1Ip7I(QW zYjMf0UqL?io$SFcotngP+mZ)x+j0k($d4rQqX!oZy5u{OU0LmO#|WT+%I4)<5eJb2 zU#R=PzD_~%9m)C%1=?)6*(L6TW#(*49?s=#%N=flpGoku2lEdISzq!?cAGfPE$(+; zwuh|IeZejQg3DU;^}TB1xCFxhZij6QAnF?U4+Q%-sP>i74g}HP!uzj;JJ=?OUtn{R z7GH3j4}7Jw5h%XC(C(?pwU1*Jb#Ko^Qnr(o%ndYEfE*%iDv*!$f|r zh#3;Xry_^c7b+eV#LYNRaW)GH23-;d3%~QMo?i!&Qp=HgMG*HPu?_mm9IaRA_kTS? zy;q$k2k)e#8g~g`boVK`uen@(Dzc`}hy z=7gTE;vuEo-^Ba(GPcAz$E%o?Mleg^1FM+C?9}_WPf8QA_V9s&GzE+dEB=1|PwKAn`$Y{n+w&WdT1G%8t4XO83|9g-ospZn1ON5!{*`39D{CYe8 zM6seMp}Ws03WS|N^veFY%kKsTU{XGbcl=yWM{Zijmd8mw?U0A|G zcf`;0r}oparg;5zo$NAt?F9mjI$cNuTA?>`rNBy+3Q#FgHa~0z6U+mDe~A_9mdzi2 zHjl$YGiw!}c{><9vKEd#4hK zo-{)%{B)mVy*;9tg$-V_(PkDuhw53K2+@=2bF6?z2hx_EqQ}WlzQ-Fv zV2?oXPy8l~pq9ra{3A?_r+P;LT6>DXE{#Aeod6ITlsH+DRw&mxjSwJ$UpwfjrE1mu z)2IbjB5#pPsaM_v$spu96BQrJFI{GetuLEPiwLPzPRLaj1$!Iw-4AiNuLkpX1F7S#O~6C6Ozq$`t@*umdoo{<&^E? z+3Vx2)Xn`5o8h>>{;nSSsZ>{{K_tK}NH(YZTBt<=R9{X3lZLkEu<3KsXaGQkO$Aaa z04Wu(guz;ouhQv+k$kvNThR@Mk=O=uoODH3*rKn;1Z|{zXK@h5y1_73_%eMg4;w3= zj`i=6`qA|zM+f~0zpanyAA0H5dbNLOXu+9o>bn%#gH(R|#sc!&Att|JCcj}OuUT0! z7ce^nj`RL<3&#bk97B~16X(4QiPxnn877}23s%`%5Y1L4!xXlPr;zM0D;Xx-`dz(3 z^q%*%%GawnLsD&^-Fsm!|G|VIW5u1>zOP3TMT_4M>Xm(bi_OjF?hm@f&Ea$0;%2BH z(?nw>HLOodY50$Z}_Iy+#YU;a|fC#&Z9MX z_h%>s=Own!>aB-B%piBDSlndqYXYh{iU_c31BMy{Ky=HwCsk{0=BrHQDi$Nz{L&FP zR{)AYb-$<{G$4(7p*!i3Y6wSLswSV$3QFdrs%4X?FB;w*@(rMj1PeKZq}5si7+C|q zmabE+jV{olpH7<~4|?I3LQcrqTXCUF8tRfQfFDQ0P)6sOpbI3dmF*nFOTXZxw33*wFg^^E*w z?ctXkF>@TctPNeZ$0hDSC-xIb99^&znOX&La~!Ayo4Z02_P^+_k!-&BJPlaG`qt8- zeDjjk_Q(G}0OS38AXak#lFcKJJpd&Bh8f^W_IL39OPJkP^b!#w$HH2#-UWpntR}re zx6;n^_ofOL6^Ur$iE^;&?^V~Qu8FMExSj&M1!Df9c211|xpstP^UI&j=AviCea``C zcnk2BWazIFXz`ASDvupGrg3JfT|}=9-wPC_;h{kn$R zn8!3eG7W1;dj@}du_fv4K<83+#gFC8d7!Api|Y&|1wer@PWlphBjo{5uY;rH-sUk$Y?Y^ zM)a3qW)7TXenX+X@h1*=Lph7@0i8vbcRw1m#DB~M7?2`Sf} z7TR?@PW{#!seJ1s@@*!OZ!;+og!++zCPG&|Kv%aAD*I5d%JJ>5L~6POiG#lRl}JrJ z2D1Ro5nukAVG5@p+0piEhAD`r66n%M94O>ZJ_XvnBl!=?hlnS92S>WZLx|t-b1&!d z?KXkW-4;aR{_tQV?gtquqa)mheeTF;4+`Qom+!zxm#=ehMFqd%VDIvW_zeep%{3!w z3|Zg5Q9!Af#<|J|jJ%1ve!j3`? zpSW1<0WX`wi;FmX@M86Fa_vssc^aVKcCe7iPhuaRqy1d1zhsUDR4WVqWpBMA<=S)c zHu}bWTj_b_yF_I5IbJ$fJ+RbpUzc17{UJB*tylCoOgJ{TG?jIuS4-Wq{hfL? z^!MXL^mmgcQ0k#3vbon6g&a=0kewHj&Bx~#arp2B2D)1&-EI?Gi-Y*|2{_2SFA7=3 z33B;A@23hP>eWBS+~hHxi0~A^gh2z!XQ;H>WA! z!=T83?0CC00RhkmcUw^rhey#U$cxv#QGdTR+NR=h94x)6a4wF zfF)ObPO+o_u;iV-(O9y(wO(rsfG;=>@67*yZdV{_lEszPy0{;b%)>q=Lf(ksycHX(H0Esh$AARLSEzW11DJ|9iyf4H}Z!()d7gwKp;5YDwEme1#X(!G4%1sTSZ-(*k? zeHsf(3ct^|1pT?Efsp-|xkVg)Y8ZtX?conFgZ{RM0BpxTrC5#N8dUU(z6L9IsbPpe z&=-2NQaB?@HgD+_O*UujVj`yj&`urDy^aUC56_FCnW`r(xi1gJn~(| z6eOD`Ci}UK$*c<_)1hVa+bMo-qdEH9;YqR2`Z|+&|6Nl1jt9 zDP+D`QNl4NcCI}g$>xjx?dLXHffoz*G#WE0p21&!^_CJbqiJBgbf@FsS&>h1 zE-F_eF(Hrui6>Fp*NBB+T(z%|L*g#nkU|rDRW;v+dslXy>=Dqc59Zqf@HI|D8OwT!i>$0#_*y?{`HoE50jU*O2>J$-)1ElJYQh8 zQ$Zf_#%G0`OWY#JDKCFk2>Be~W=f^tl|L)wLVZno{mJa=)9+7H4)B5R>FcvUE2QxM z9)gBuSlrU(F5hoXe#Ksn)Qw9eIxWBo12iy#U8Y>{S)o=HSqB9nv2somel<+# zPfMYpIe`X>ltKmy6$I*}xU}Of1s@Eb4Jc~&6mo)`^6Vafhzg3ZRggyn_7rmAUV=Pg zAv{xT60*LTJ4Fx$dx;>bRsmL5lAyP2zP7f6!&mjKQv|ut6lXe#yvoc6f;_@bq$F{t zw#dx~lLfJFI+AZnNAhD9pW|E;wcqp-#JqG%*y0x3@Tc4A6+yn$BxJSlPrUS-q6p&G zq3YjaqN4G*`dC5Z$mzuK6EB+L@(1W&*s*vpi;2ml;fEzi+>&uTJct^sH5v|geVZV0 zf`lwu{Fgh>#QUMWtmvhr(#gtFQlh!~_t~tR5$;bIXQ0V@K9ju3Oll#<0vZECX_onW zWj3exZN>Y3>Gs7Z=!;jaH@-;kH+{Kcc*2*%cjD_qih=?y6*IuT>=IjPMyFuUcZtdU zUGh!+>7m`Dj3#1^OPto<67Egq+pU@^0m!ox1}2b_$C-+QLRK^XMAI2^gsq`9Y7azX zD_jGMG@NkJtFb4X9)}aq^WDP5#;<|r&O_T&1={(*3f4jriWWlr5Qub{cz;ih^EXwD zX0-{k5t1f@)xM7*u1hj6c?MIF!rX&y|kQAhK4D>vi=4k%dN%^Cn_TQ~x{IQDhNAkN0`r&eX z;3-CiAfmsDd}%^b4a^W|@fIL)2VN!|Q*_JW6ru)|_#C(VKAK64`QZUbo{$eMRXz>k zshjH+B>tP0c|Q+{^O4UnSbex03fj;2;6HDnUK*)p2b*g+l(!7BT7_)6)mv+*GYeUf zqbI4X}!{=CXT~@9mX={wMzMuS)_5G-J4AHScr1W zqgeuS%HW@U%;71U=YISEhi@yXHJDK+{x+Hl{m=#)X+l3?p+#id+GN!mLJO@vYPN-cB-(0UBhqQz;@#m-`5lWfk{l^sr z=S5HY?J=L0p!Anr4{*5rewx3V&9bH*CX)se%v#^1&nghf1O($rsZ20d^VQB#d|dWA zv&tW`iMFFIbv{B;xd#Ol-d_S0IH1^y8+?;an@(R_ct1)a|HyVC={X9>Wl(fOX)O+h zMkVP7o~#}C;3O@-^uTM1roUx^xd6YGs;NTi2|Z~zAtbh9|91v>Ata|1|D+$%{W~Av za85BC(wL9gA!VORd`ORc)ZHPC{#8-%JJFN=>8O54M_L}>@Fz3jke1%e4(a2Qi6=Eh zOgg^|N#&J-w4_Q6_SVRj2k-sjH3j$oHfr|Z34L}inSCOi-Liw_u-$f2y8!u-7a$)O zerUV^*-rf4H&Mf{8Lua<4I;xIDguaxnixcX=}f#i`-fd4AWKBJzYh zj_56C#OMgk~F+#lN!CQC6z#YGk*A_qEKrz{nq%I!sManRhW!bHDtoSR#E^QWkTfZcC5UJqNb8rqa-f5ER{?V(Na_Lpl%_#yhhj!khlH~HxrZsYiPo4cVl{^n|8 zHn;Ft^yWI&)6MbTpohS&!O&S!3n~+|mloQ~f+*0k zI60#|oT{euL>#8C*(yi_1Zk?p9cbtM|6ukFk03SDHr~GoQX{0_h**$EO>&DN*XI8u z-y-FWvWa>2-0}R{*`r2H{C~{7eS8ze_6NLa8wiE6;iV8%q)60)D2al$Vxh%?6WB^X z)C#DDdTUkG0tu8Cv5-W%E~~kU%2luBN{dk6P`QZW)fSXD722W*)O*FZ>%`#CA`0b2 z_W8`2na$><1^oFuzsEl$&2DDqoHOUlnVECGN3ri7r%c*y8LvpYt)ySKA-_fwedn1X zSof~_A5xIqI8N!=alEpyqlF%-9?6$~mgN7s!oq(3f2v~V-Ut>Z zX`Fb;zr;?w>2K4CckQpni8qx7G8&~I$*o8}j-Pn9Mw5vBez%P*A#8oRjjhBpZLdI* zT5T`X>wk{y1SU9>;p1d5d>ryGTTr|%LKg+t%B3);o6b4NkX#Zg_QX8Bn^XnT;8tuy7 zOyb4XI82JTVL5}WVBmTzv^7|9!sJbpRCCXp2AP~q&bsiBiW5nmo|0-#x@nNfrS@z< zs`*$|u@LTs9s8>^Ni~Ni4l*HmGg8f8O_(mw%wct=iOkGWlznVgD(M7(A@d_AoiyaR zt6D1Xr`U9Sm4?*WFbN<%K{Y=HP4fhFdJ_YYR06Hsll^M*;*Z+6`@Y|?%^q|_&O$fmKzp{)@JTN%JkedEh5z&(g$d|JMnztZ1 z&kgyv#Mu1v4QgyY{aMraZza|Ip9zB)-Lx14r7ZMj3KJf&KU--~Y5W(#AU#)ZFh*m1 zGOSvIQVNk5lQ`fK5h4#{<@hgLev>A|%5T&JU4GZR0P<_t3-TK{fy=Mz{o*sp4>pF& zIilW;ia~yP$0G7uN9DK6ZIoYb8}hs6kU@TrBYP0E_g_{j2p1 z3kMWvLm5ckC&?cZsc@wKN;Zlh55x9c7mS`ogPH#qj`RQ4G5_zU$mC%;_^u3I!&sMM<$4=sg}?Y z6BEQX+z|%64eDQiNwZs)zwm&7AN;+_s7oK6^2h7aRY*<0`*yBN(vOT8d7K&dy+)bg zJ7i==M1?59p}){>9}3M7aQVK72$$u}74Q$IVno<$#%kcqc0)vEoJiXcCKWXm>4+GS zUO`3rNGMjM-%~2|{8siO)qLoy2Xx<_)?eRSr6K5^dg^DCbIeVgYTm!pAm>kxMC5!h zO3wS*mh)CTlmM$9GSSWIgY598!-@=9+52FT z4%Hpw2i5x}dAB6*jdd<0ILw{phRXHZ;#?1a2BqguC#iBs@($dxj(cV}u#E3?pF7%a zd<0V5nMf&g(DF<1`~Rr>?;^6lFC_c>!bpW6L$w}tl0A#w;d$(c;rpH62zx5e>&4*W zWa;QBVtQ~GduY;+TcdiASPvUx zdsxSM04uU}7xd6CwufCeMS6I)jUIk{?^QU($`?La!u^rCdUkP zYR;oBxz!~fcF8AP@)2CX&gBwcy8XN~uGjDjpS1fQwLjz9ivMNMaurP1cXuNc~ zrcq1})jZ|8xdNW^Tb1U^dH9>59HOGk2vJdnH@rk4D0etDq?#*hYXxJF7MX!EwWte; zQB3c;HbBoo(6)Sg;rZ6u(nP?YEoS?>c6` zH!}OZF&e*YozY2TiHckE?c-s7@m%#5Hoscg{GzGb4E{}~IftxBpYonwZMlW*Z(G@{ zgJ0>Oar9TXGnB0Y-Ym422cbU4R1@6-ma-^JBLL5O4!|>ld|s)49`=pNP$?+3prekc zx?Z322bm7h;EsHInWO{C(?mhS1(RNeO-a=n;eM1XK)k+W5ew#=SjLbqp4SsU4^qFM zhS*P{iJC>^Q#s|X4t@lE*P z;g098*8FweA$qQz1IZ>|&IkWy_htFyXL)d6HqQco;?Mq3V~Enje_33k(etAz+F6W$ zNP_qozQ$CPX9!~8FpI@5ja0ov3bG-s9?8hIDV1F=scCB&hOE+!R=nm3v1;Gs#eU(P zG_rjE(7&4II3+OQaBW$HKb*?zr)u82kZS(yN{@hF{~7jgR$?o*=Gw>}?#t?0dYSm* zmu+7regVvxXafKu-OTr|t~IQcbUSbyK-2a0Q%PH>fLI<=wAysSCO<0DW0-ME67{D5=WF}^fZo)EHHFdU8LBN0r%mOnuxeUmO@o@2nL2knI z4E03q>%rjX)++q!WX$)$El4qE$q-qTP5y~Qn#VMNn+jjl+G#(*GEDJf7qxNd|Dx_c z{welpb|ol+r_yP{clSzYpZe`@+dd8bdz5|pXyG~8r^5;2-?DLf3*#hR5)3t;P5#BtLcITOaNQ{j-()OgjN5auUwGdV%ecX}QpS}L#)1E#dF}^R zQSaE(K~iq8gp*x_KOVC1vN|1wNHy30;ukjcV225AJ;Js1o`_`uqQ!`v>dqQ~3rG*dMkNVkPbM zoe#Ti2SN8kO3ul}WWEkNwU{|zG^m(oxC(4D-_y<@3n$qv5xB@nb}K&lFcn?IDx6z= z^G$QkwZ3^LEw;Y-?AWv0=k?s!N&|eO#5^=zSG5YzRbesLRd(D;$u8w&mjT(h+bdek zne163RpQUR=ZaD}fKmzcEl3obO*~AXWGqt6H}_j0;FfQzG^C_CfvWV2$Um|>!kL z;WijI1zGitIWOj2hsxqey#`IOS&uO*#u8_q@?e72rS0Vhn%L8VAzS2 zZjy2vp)xmSyD7>0SWyGXUPL%Rp+mRk*-VkpeO@%nJPVrbJNqHZ!i0-FR%gZEd>n7j z!}zoK)ARHi?VUc+{5kJ|fPfctkLAzWg}|TMg?}!8CPK4)Z(7(Mf9{|82lzARjx(=+ zFw@C;@$mwn?vn*k>jfVrpYXYK!k?q3_IlYltb(I7{rvv6v+>Vt)aG}F@uziJ5bK}u zp}P}9E44XveEh+)^Ux+F(quY6Uq5^Q%trk)X@0~%%bFkY&!k-y0{-FOiTtyJJKOfp z(t`&7Y~`=f{u$>?A?3`uIcfO71Lq*rpH3&hw>cO8?7Jfo|7@icANJ=%!bG^%M zrK0--P8vS%{&RKEEHU)YDL+^LjOpr~b3s>&=EnMGoa`(bddkQy1F|Wlf5b_1%s59U zP3$Lx&Oh_|Jm=wd{RiT|J(a#dz>Wjpzs;Nj{@e69+<&`tTde;!W*PV2mj4v(zj4l# zpV8wObzd7Ehs#J2?d6uo+VbCkzDuHWBamXDqi{KbT4QXI!p?hHzu_&=e!ktZ<*e|P zPo=ekugs8NWmcj$&@B4jOapx7cWRs_!E-T^`);gpntVC?KVnG)Y3pj7rf?Ue=Dbwn zG~r(!B|J4=xWbNyp(>B+JzB2M^BwG0Aa8bw@8XVmN9!{R#QcUJl6Qquk-TfPv&p%G zf+`zBB>1&#P?DQmzHj=ud?$K&v&475=``Dn0?lCuMO8*hCluJ>fv@@+asOfv8UxJ{ zTA?^=zP(iRzn3Zq%1u^zl6~;v6J^gjdWnH#8i9Cf=tF{(y+sThhd8PmE#ih-Y)HA# z-{kFyl=M$$gLT<88?4KY@Z^dUCU2^a{Av z)$rv{7Ym6ID-&^pK52wIh3F@G{QKe)-t^Ls#J~v}fS5LnvExS}mL2IxNq>J9u;YVS zj2%;g3HafNmR>co)U|@@xx)SZvxn!vLHt*~{?SH>R6I||I6{2&S|bstvTd1! z9!()K(4HIlw0Dewnx5o0gqC|#BD6sLvNcijXK5n-5UukT8d`hg_36g>(~GxxM6{ZY zh?DDJ^3(Xq1ySv*ueUed)XiVbWitn3n{!2y@Zh0i01j>KPuPA$Q&tHp;_HB2T2R?sGSOE(W$lYl|ny$aq#rq$@FMQnDJ< zWMnX*nrwErr6yODwyP#$6m9(z(Wa)4eXLjr-Nosnq*$)89cPRzXNm^aVR%tbzC|GZamdE(ci8mjZPJ$VTI%Zdet z67R8>g;ubbcSKK}N}&!Uh*a@o1NBF7WBA~>}=QQd>X zc-DVUX#Qp~(8m;s76>AFC-QyW5BZMw68$uyjYd7<>#dOA;osrOV0W5?RQ$=2#N`0C z8vuulB>)6g0${s9>oP!8SOc>(``Ct@f%)HFRVi$Gz>pYA?DzRkzN+D;S5;}wW~8QF z?pZA$d0PSme?#gk4drO0_W8NhwG5s9jrFyfkrY!RQWPr-&B(PdFo0Q^QSO_z7hJaI z=#c-tkpkM};wM)_o`Fp-*;ESRNAgbR4mt-WkU4OrJ_n|oz(3#gV$}Na=$|tS+BPEX z?0sU+Iu}okKkNMTaLjI8QmgF_J^#|)1-6iGmVb#@{v~4hu|=#zPX(`3V~XtK0I0~9 z8hMeI$&b89Bg18nJ)bvH5)}PMQUoDSaa-8|-N)-Wpb?e-@Rz7R?w?_z34AQFUY(hO z6xyPm0z$eC=SHG8q4=J8o?q5WU3&zJl8sZ=HE*f~v*MIe=KO-a>AYvg}Praey^@sRN-^pb0 zk>ROi_jc2%JaOk3xu+$ZPQjA&(0e}{*A`wR0nuy{w<)?1g7Islnm_m_-TPGV5*mbq zwKYs23(is?V~jaD3~Ky)*&vgwx`<4ob8=`D{OD`9PV-Aai{Jb67HK1wGabV}YN(90u<)ew5KHMLQe-(4YMCxYy?$v#lvi_^5euZ6`&AYTc>enl=`}=2 zZzcB`wx$q)B@xjj!KY+H{n8e3XquAs`iT5`zzaLY9i!wf zspHh4RvzRZMA^q?596o*NHs583RUSOxgLN0uT>f!l*GX4Bzj#9Bh>Q+mV+4`tEMDL zaw8rapcu}WtwupZdTAo@aITZz6q+LQm9t9m*z-9{U2=oO^e9-7Gx7tGH zI8DBsJKr2iE1RWV{e;sL?v9|e*`Oz!CY)Xl_YV@oA0czNmE|zB7;2kM>^)lEljr-U zUxECYOMLgoj(JD7WE6<`-vkTfo#D;}^3KuD??&@uI9_m!My*%VgysVITbJ*oOKauI+*#O~->tB_>SimRV zshRF?E1_gd2UOAf?y-hq0bHp`Xsvmn<=sj$TUTYf@PT^JAw+fBj9id zmCQNJFhNnUe7yE)*gP*;OgGP&%olVpepWE2G0VVT@^>yh=IH1(R0Jb^=oP^lA9+>7 z(lb?hIk1Cw8=yIir08boLZq7KFD@4F=Wn0A6`FfX8y0Ae;~cFIEx1lLZ#R4OD$A*J zSiyBxKgz4uk81JiPY&Y&@cm)jZ2Yooq?s+o?~i)u%dbVg+>gKZ=q*2Oe0hh5Hv;&P z#-F?v`AM+U!O%^2nRz8j+{mO&h-iEU-9q-Kxo{pgJkd< z+ah_YeXugY3Z<=7^RH`W2#{cW9EYBbJ-=_HzJq&>0o}9+*FRgOQTzO&0O$Lei%zl<3r0h< zMlAm4jZ984x12s2X+ZXeMW^}x@YPhUBiMrXm_PZRy^gIV@O?n@bVh1g_YN-$ zCBbkCJ*Rn(;j=-+N1+8NZYxrV^NyeWrWUZO-ONrQ=Bup({2RRBi7EgKg2xbEpZ$xc zBY>@kFDJhPyCkI+QtF{0W0@qj=>Eip{ zkveQTqqPv=Wtxzh)6iv*38_85APmW3R`a38ANeDe$SeJ=(w$XBFK@GG_@rXfWP{KUm4e$btR)0D`Q>=z<+SmT3~ zpcNpzh4u>}W`m7?g<<@KDaP>wumRnWM2-KOgNfw^IYb{l9xb)9cBGbJGDxk<#R;XB z{$M=CbpPW!ZWaR}PIj?QwLHmgN9wQ(7}4d7XgeXPf)QPAAi6l&NVJs^T@*v~PhYh| zv^$3ABG~`7Nw?KVcTamlx^I6VfutkqSs_IB%}5>g-~*Ic%+zx`Q_mJgFE-FSJIP3I zi(X14ir$hSKKY--6j!kM+5A{E(e8FAZZYcTMFSF2{PO(?=XNJ?X>}5ayQ5*2Q!cC! zB4;~D9X7C>a$!5;LLK8m1LMMW0~hW$8Mz=Zsb|GV{n)<~^8gNV52(=$$ZCfHf>GrC zFG|ROd*>!(fJF?v#mJ_&%%d2Y;Gd~ES6SkXQ;<D0ak9Z2mVjP7Z@{ z>J>3gfFThReZZUuhvb>(FI5yws{U6{~D&57eGQH8}S-`zru(8p;oI8 z8zKVVV-9ZAuy6b_v7i7!(WyiWDwnSRZ3@d~6qY9=p|F1UCKOhx7{E+eicYvZ$)17K zVX2JnRz`OQ%)BH@cPo=rDpJ!LPuB{D^%FA{&5WUWa&y}>mjv;qN296EY=>fO)XydT z5>h-aF~yzZT!%{Ib*DP)CNCwslxgKgrj=z(;-!W;`o-_HhB=yP;^=$Pgikw=m~glu z%#R_vydAPLje=G#Oi1=}Pof1Vml!0Qrx#RL-4VwY*>BHG;*-|Q!-hXK@* z{B2>lvQ}`~(!ZTaYh>&LeywMZ*V_-W0^$28J{Srd1(sExVk|ofFR{5&NLWCJFxf)k zOOl9-eaZgBtaF$mXKHw{9L>VQc361OICD_nge>efGr`P(kh;0ob2OyOe@j>&^6#cN ze1Fya^+dqGdxK(jrBlqVk>63wE;Vg)H?sRo`?$bq^5s;&z=Gz?TMC?}a95<}yj$Qj z5&f86qY?Q|d_cetvbMU>w#KNutvR%<2cfM(y{)?oSODG~1x^#52`!}$s=t$_7NKqV zcEEQehSZ7zO+--UlP5q>bw6vPEw3xM&Nn5(_b5=Ppt&+C% z2DEgq-qKp$(n`{jZ(2UG^+f=uttMw(iXyazvM zf>B<_>VZtQ(gj%=V|OkB;Yk zb`S3Wx>%PHL0D1tO%_jzvo0(${`-2j)7#b@V{hSS&vZWYuQ+_VDE;S|<)v_M3CRY8 zz0}zu6Vpn$sCoduZUk|gP`=o0B$=y|m%wr6TSW-~>?nSJ3Q}AacJyF?uA4bGA#`2p zECY01a0{M4L!bP+ujA{~#mo$po=N|a?~nz_gY8HiZ0CAsr>Hc6I!{kJjR<|)kuunh zd>>l2U<>Jyv~Dd4f`07={o0W*|1d%O1N8QLKqz~mC93(g_wnY%e!`jBr}A5ySbxhb zpu^ccybs0c@Ac_if2Xl&Jj+V65who6y#+{_WuyN0T$^`fq@%H#xj%NO5JM>~UFVP;ddCKRnKU$Jxh{HfakI;mo00Yt=)m)z_n4MnxnN>|8&mGg!)?$tH0jiu>&RkO^@iI+W1gyFw~5!aqSyP zd>}h&sP{z=mCldZur)uFMaJkLV|3u_-=YwNnMgGs3(ppC_cc|TFX#NH$hzB|jz%U* zZtg$WX$oJ!D~Dv_fs=`kl9M_Z{Im0KtI_b$H_30mTFzaO|6ayik$+$2G~w1lGQynw zmpM&HHIH2C6E;y?zqCcYR||Omu^))f^Tbm#giUFJAUJp6OW5Etki6v`TGG%w>!}$6 zR==#$O123m^2M~L=y7w#JH#KvvkZ^M=#To6N4FXtU8X;}HboGEc(~!2s6Ts8uTOKn z;rY+Y`SXA2&rdc-p6}M5r}O)N+-!LMy8gVk{(O_+`Q!TYp8E6W49_3bpP#2cUtoAX zUVlD0MX#@8cs@jbzEXca-0)n~pI@N2e?EWi%h8@7@)c>amTW#g&}j;WyCF5_=YbRx zGXtmHN*y%^@_m>E_+P`XsnJ4n+63W(_$mE-{81B)pJM0Zh@Fokw)Fy_bJ=f)2wv5^ za>oJzPpRQkMO{cH^TQ4L-2~V#d4|1(%=i}kG?53E`n+=_3)ac_<IiF)4;qVg z8Ub8$!2dIll0NoASf0jRy+%Ot9`ue-ctb0o-Tkf48aUJ}1n9FM+Lmw6Wq|q%smofX z!xLL@pns3j=H=6Vshb%>tLLM@tGAR4Vls$u$E(CZ(C<+TzB4)Db`aNPfQfNI1d$HmmN> z67>};L^@Cy;g)>yjifwrd0k0xw7<@qMz$$?!ZjQotQS3vyU~J_MOLJm%ZJ@7;3Gd* z@#0ZeN{WyNsShprVtv;<^)@Zg?CC90mbKu@|DjAk64ASYK%KV_gfc0Ut$5jCW=`xT zL2$`+^hY#pZ>qgelI!t~W2cSx>&;@|JH0ffY7P&dC*YD7h!`GJbTK%LVsPNq?ixPW z?!KHG6n6CDwnBcd6+hyp#Af(AP=jNKSBB}`M*5Ffo)2#0>qq*W2C@QD^Km8jBHt)m zC_q)o!?;5-F*-1BHd$!4!1WEXfV+}@<$V#c_YJ&cxN?s+C~bciJ3YR*B7S;&OU(&V zY)CctN?ZNE!H3C4zC#YeiA=(YOj@>GNw=Lx7XGi0ybGy)dtA8&PQAymAc9Qf`_K_L z(#zvV8h-xF_|20{XTWcOEm8N1`MJsBlFp`hC_Q+Gf!T6QZsOc;$D3xs_WZL6F;Ltu z)%t`@9oX(WSI^K{HvLtNqWo)l761v|hUEW{iC!-0xXuj**u9e{VZwXwV$hW4AOELJ zz%|d23H(|mnRPuVqN8kOkhX41xF4IzSwY-fKz18$3zENpJ6oK3qtR}7u394)f%%M+ zh2u-4y>tbj_pG@hg5GlmkO}M`+zuc^s6_X1qVP2g_Q$aPIDn;*B_{(ZegECtX+rM^ zznBM^sH5=NkTn7x(u1xv4hFJG6*vN^xBK{MEds8fFB%RV+md4_a77{hONSS=M2~>< zk|2KWGJa;_YzseR&XAb-ucY-Q<5&A$IAjgP^x|RhvmWR1mc#G1pMTHrrMoA$i7(9q zt;zaL0gEHk{hcI389M%)y`Nj@v5zNGbtA&{B&E0)D#{#UJMURqT*n;G*@YUns*nX)*-0HrCi-($c zu3!|{u}W{FwGr+)bzjH82_3`Ub~E)-}+iRhyj-IHLFkj z%Uz%_&?NhKf0O5Yq^5uVolnp&{kPF;&Q2`UnsP8HwgL*TStYTsLWvh-Ql8h#2Jj+9 zL_+w|f6y4xo;<LyvrG^6DWl0P94JIJ|2me4ZmPW$r%Lf z#LE3(FYPm@vl~3Hw5s`|OZ22h$zI6qWe`sp5}VQ(jhvm9ItYwY=Rw>!#Uo_LnkX`@ zGx67#CN@#x24bRCozn5$#7AzY>qi;U;ZmZ*rEO!R@VtYFh9#SLG7x)7hdtMS{5(T~ zsbe_*=Ic1Vh0;9|#Jrvb@z=TJ{Vu>Gjg+Be^{194(Q;{k*k4!@L;=k+iURJ^B~5~} z;lO|I;l9R!G8$T(rU&f#>%7;{Iv#*{1rgSs`;KUM_kECSrbGG{BGs&nrXENs@_krF zoIeVZV$iE+cX8h@c)PByT_H!k(pDURCT)_mi zPKX4jLrfr(c0-J`laeFvOY(BKI+k?18VPQ1U=xAYJX&LD7pdmrFNz`lXw#Ebnx6Zs zqn1@9b9H-`;O^Nj%Y_|myxY0hXu`=I&gI>M^sw?N)O95?K3_MPGecA5$0^a&p;@<6EL}Z($ zQ!iV?>EPJWzuEce_4M$AcILMDa#k$TH;tvRXCa$La1KlHr`OkLTXP*Ivf|uO>2^jO z!Q^=_3GqZsrIsE=2JN!ZK{uX}Lo@Bbp;`9C9D5HGl)<{WUoF2Cqp)IVPkLg$}4 zi}>!pwSzy16sx41mshbMH+dFZy@Txgu?)C}qn~VU_xa;r4S=T(5fEz;b$$!%{ zq?qp-0O){!8DK;Q5TLr#>#e!mvMp zEmz^zeESe~B!!f||LPpGKUhCtjey0DbbpXbUN*7wqFE5orCd!2P$pXVZlMLqd*S^3 zSGs4QM^4ZSjmqGA28VvUM58NkrxX9s5SIKQ8%jfxH>X zdtGv?B!7jQkDfi~H-6y4GnRcyaQ~Kw{>ydxmr?o$Qu?buGSGi00sVddWcoK9I~V%< z{t^1cN3M(aKYis{g7CE_+X}V%X}}e`CI#pP)jW4>v4CeSp{Q3G?3{IME|SM0 zU(P+{Jg_JW0*kV6<#jb=$y{`i6C#T;!-J6G&O%CIE(_^0`fUy2Z(!gqwUCB^FhoCx zXiXNo<=eAF>-ARh0g2Y@GsuTRR)IpY=Q`_GvV}>HB_H?28 zZ&HYxV^ciV3?|=xNHx31-z&(6@jd@y*_z&K87kWZVgsy58S9|cB}sF0hQjnv@+}zv za*MBgX^mz$B2Y#-kTN+7H_v*___e$p$@_81NR}_PA5R$>wZ7u;dB!Oi44pii`UzjQ zu|C4Y%Y}(YM_vewcmWvE#RZit)t(m7nnVO|C7+Qx(aQeLKx!8YQe7FM)kOYwD3aab zJKksRAm8zBo>b6p-|;@)e6*3{61hqY89;=7;lDJkvfO}oq^PzR-{hMV7ziH zUTAkzcMt?`f1*9U&8OtO^(U<2+ndF=|MN~Pso>VdQj6U=QKYi_bz8gfBa&KeFW2!o zex+L^3&ZCS7(R!~9wODm3V!ukxPwhI@L)AvNvg;l+9>BBZ7* zb5!dE&N!+LALzQ>?G7~EdjnF_ny;k?&o-o{jfBP|ij8X1>zk6c?rOiS-eTZAdO80w zYp)ckX+ICC=BZKS3)WPh_L^FJ;@T8J5SP9oaD1}&k^})HGjlpW@=?>CVl5X@rC=?8 zu&dpc|3zB55vgf+vzE${nl^3-Wncx{YnGG7IwRFQYgaAJ&r95#j*m#j>q!s&3;vj# z0>9tHneouHLwMieHAefiQjdRmsyEoDgUmkd zWA{ZPh$n zybn^Bd(7kE+6qfhlW)mD@-3OZoQ@ANmt~BNcvy>U_>!xLht;%5Bpwz$8VYTO6OzLf z^BjVwv$$b`b8DVM2!;(TnV3bq4LTZmv%kqR*zhb@YeIqMMP;nG79&zw4@5ef!m|wT zX3_#zm*}L$aGh~%@rMT~mVo&vTmbbw2LD7q_NpV{X0(IUo zD7#U7WE0%mHozLNEu|OLsOx$m^e)6gsE%dSw zN%WJHJ2NEZZkv>SK=e&E(P)7zA|5i8UCPkUkTOC)QAP4EWLHYllAzRK3B#w^O2Z!t z$M1v-FtdH2GCEFLwrnP3IfBGvcG2?ER`1D?drDgY10J z|6!1lFUk9{m43vQVKthh&?VXBt8*av1d>}MxgN>?VO!;8@DThuKTUSC=2^+-jr4N{ z`MljE2+H&Dk37{rSbY0E`)4LWD3KT12l4xJ-^mNarN}})^c0u+lF0|F=%38v2Yn~I ziT?g3`aDn~0>L*7Ef(;SMfBhlkzSyA$vz0FIfGs z^y_&79<>PgfBppmEt0>Sz2dg`a)#YU=0i^wyW+O8vZ8Jq#Cck2QQc{d8V#xCHh73{ za@1&K7;<5T`1Vx$pc1*z?#nrJFKMVNgsXvo3o`-sKa+ohhePPb^Gr`?+a%@s42d|( zbp94(*NeUOlAuHsfb5C!MD`&J%>t zJS))WA2XfOH+&&wS7yvK`nDv(C%pHqXeLpY*8J6;c>+GM02nko5rcjz)fv>#HiO6` z+~W!(gUnYXV$chv`fSRKn@!{!{L|&_@n@)&^Jh}2kw0?>1AnZ21R->rNOY~Yxb)T} zVxN5{(?$Pa6a6mm-_AhyQb)0XlNM0MSz{P??@Lko_uQM&tYa9b_J6bawP`-EZ&IHG z?0fBQoqfT!*$2sfpA9y$Z|mSh?7Q=BeSTTv=ND8*esyqr{QIse=U>mejr_ajGT>iB zZ$Sw4=}PGvLh(6p^E}F?j2Jd0ua2+@&v_%7N%U^Y+^>0_fS;WQ3_4;93qt5$RQ+&9xqy9hDW5Dce0uqT@+kX${_D}}UnyBXKPT(oT1Lp^{-gxkR@(LK~U}RfoJB=xX$|eR~*ZqO_u_HCiN7A(BD%9Vev`G zJy^OWg`OXroJCEU?_^)mKL8BbEHTixBXDxjx&;ExometjbQ_31QS zA1m9|M+kg4a*2^Y-(Ql5KZ~a6{3(m$5BUavdP#fy`P9PsGjy7fKet{C{AuYX2%&6? zA^NiOKV$RFa{G%{^=8>Ng`#+oJ z2lhy0|BH0~t!$frfFAMI#ZmVE;)M3UNatTg9RDi7{$Jc4|CV&r?f;!o_TNtJzm?ek z4nSJIoB3Z5U&)g3jr>`)%)p;pYNPqHo$=@6c>ipT>Hh;(?{G{E; zpMX6Pe=fXJ=TB}Nf505>rKOXS$ozt{ zH~*z3LwyhWJRm_TkohOqd;yovq%5_?u(V}{L1mNIMq9FSvVJzq6Y!v!z|Z8=1pMrK zhi=Kr+puKi*fqe&$>9SMaq_d3^w7e8O%hu6ZHjm7*o@Kz5pAxN>9dFlX*}Aw{Hh|AE zD3bv34V*XBzFw4wKkKLJ{Bg(ehkS#RFKUlJUnFz>+&k6CA2kE`b4i*YgdR*5gy7t|fiy(b+)5V6Jr4i_yQCyw z;MOTR12@Jo@FLDYIE_7&5ye0OH)kZ`pJ$5Bzw$W#k#F#pjQ04qEQ#}P&=e#83i<*6 z$UZ1EgsR-NYZnOkxBDrVvJ!Kt*Cz%aLavF{ydtEUKi@e|!0Tw}q^nZ`7Ok4BYhF#TdGJ*>P z+&rU7hl`0?|86#D-kj>_iL-|J51)|rZw7E>PjaI5?>2qntZCc61Gw2+7e=jr7baZ) zZqs?=h~td|*1rqe=FRMU%9qwc(u#%fr6d?O<34?XGjDbh1eZD!?y++X^)-%(k3W7$ z(~$h1(7!{PCdu0+xgPub*YJ=n|?V_9baHy2n|1*`oIlw@l6oZWTY?mjP$)x zS{_9okAL?9KtZm!VOENglv{Dy z0AD3}XXW~jdM1ioJaB&=TW4Z-@2q&2w#Cz^Vmz5K%_ll@v+xY`GmV8CH;kD5Mfm^FGkA6#G`eL zVoDf!jW27hj*rhfeTMkFKSe$>r3f1AjK1*7;L-t&u;eZ~bBZ3_0=#`6K@s{>fh-Yu7)4OvVO0E-T(K zxwUtDj>&Dm#8VZ8pY>;rUu}Q<#V~&5n)vZQ)2qGl|LyP@$N%V`GX7=lj~^hX8}QDn z;|bWC-W~z_TH*=FX9UpkKmKQozj5B3?T!Bz(VA3(#6_D45#|I$bjz9E4iPMIURx7r>_04?#>=m3kH#TC#|!GL==)RrpKe$GpZllF{+_`9 zc`C~Pc{t+#42|-CF5v#p1=0S`l}7)k6>PWG>iFaS&rknX{?CLl|4aXe5}(xSi1L4~ zjPifF{c->2&>#1I{`P0+=Y-LBo?(A2DfhzKF3ATaIn44mu8h~x8(yB)j+V;d>a)*( zg80Kl|7+R*mLEeKm3Vhaz4+Oe2bx@J&(By}Xb`9j zk$*v&qDOk!;_}sHLipT&00~B-8N?oYZh>MUW~VeywB}mGZu#~y^2sK4qe+h($wFe6 za|MANqMv*a{oSBG+#Mz<`@rn666AtHur@I%hoQpQe~@Zk{oUOH{)c;&CaF^(sniXC z=8}?cFOtYik?39NPCaD0{=X@b+{J;^>l`$c@QKkwO+rb~n<~kZ9G1`$G7Py9OPy=9 zaJi)3Xp*vb&c52v?=Ga8uOR&ngnq}x_8Ze1+Lq#A!HcZNjL|gja$CLwf)~SGC3)*; zXC2;{TBEt-mIC=>(yWxdLwx+j)0!s9`%8kMC8sqFspj?H-Ywt<2Uo=%mEmhc@w4T> zzZ>&c<_wR`-;1Cm0$?b>l}yOwsco%VQ=9pDv?$9~ocK^K989QRXV-t(+4n!@touJx ze&he&p9BByiOX;M{^92Eci z#9;^Ee|MmWf;|82ztvj!(dhgRq{mOc2+Dsbi{S@47=9r6mw~Uc!u9g=3{-HL-Ocbr za+6>+^h`l2FRHS&Bxt}tT4iPUNAeFyT@SBBJ@@I)_aXUXob(2*5$2$XdSpyn@Tchs zG{pAbcnz@wfbApk{OwC2(B3cLXR1$Yv9a{ue#iO^zZb#W-UU5wKiBrJSry;D?;P46kr4m&0zm6l zZn8iz&A?esEtMKRAuLR2(_@!5$nr7)HAfM%&ab z|Iev?@!Z=7{@mX_e($I_{NB~?y`cH)JOd5L;*)I*>S(MDWskA~7Ix>7AYSlZ+w27V ziEoS?4b4b|FFYnO{(7#Czuu2#da$IATpP)t zBmI{}_3w@Jzw_&J?tgf+{jSWX^&75uPzd6aIv_Zk3`BxvbM4hKeSm-fKz(z*2}LcSJM3ZEl4$g^xHiGbc>E&3U-#qqu)gEnME?j{U#_?4 zA4)&<5d%LG$4*(#Xq%IPl&5L##+5E*6mlt(-IBaNsO|Od5Ch*c1e3_S@6pbc8_4e} z`R{U(ODS}_6jZ3~4I+6Luf6Z-jO4?(;ow>gkXcy3tL$gt5+1u7$%kp}+3>JhEfQ}| z>$tCH<@Yz_+sBV~?ilTCDj@q8KZ{!3gL_>`ce=TpD});o3;N~c5bi*cJVs0%gJW?c zbveA4r|kh*NvgTV9N}=N?srY24U9sPydPIyR|^?+g|yPVYQCm!iGbg{ew7|it`ne4 z%s|SU97>1g06wvgrN7XkE$`C}Q-k(}zB}@@_VRX*K$_5e)37tBCn~7JhCW@(>L>mp z20l)SyoT>ZYl%Ylc)FG!glt^8R&(z70J5}~Ev}{8d4(2PBMc}Ey}|n71&D$So2Lcv zQHR%RC{VZPFUG3RErvI#;I15c?t&``;wcU)x{l7eP%xR;2`YgBDFz9QIHhT1UsdMP z>RkYRA;~+*yeZQ22W2)Uz2YAoEBRHSE4xvAY$zn$PqLRuQ0YKf&t~wL4CA~d8og#n ztsa^T6@g3$6g*Yk{iPVklcvVFRlepBMU>kr9aupvl@fQ_f0?KJJClBJk_S! z5moaHjj%tK*^}%=WVcsJM7NLQ>x90KZ?BSr7srf;4My8b%MGiGOho#nuIyG?!kjc3 zo@zvc=GnxpG@fPrzm`NGn~3#0Ey>&P-||*zNL^rxAVq^*HoN5Q5fEwGmZWx>!#CYG z%9D0lZ&Z8kyivViCrx8pbT!!}TuR;`1HV!3xs!ahn&{gW4j||99q$#s61x9FVz|_} z`>AS8lD{HdP|yM~Nnp}ibsw~CJu zMQw`!>>g|wa5=9Z^NYB&093PuD3bJhHB{JD`@UGQm~1Gg9A6~hqvz@F&t?1geq`}6 zO@s5N2I_n)hmF{wb?p3U4Lg5Y6SdSlA1O!3jPgEMRP*h*5!5@5f(M5KEE-(qM@M5V zWXUD7szB)`DU+>|Jk?%WpiFm2@?G}w0%am#K{=dF;bf$3ma>~fH3Uo2;Lq|Z9?B5B zA!3FyB^k;v6$mcnuR*XxsYq@`@)1d{&!ZSAWfb6;q82Z*A?2AB49Q55>{(D)iH^!e z%K}!y#}ksgO_F!zX-(`vgD5$EYw#hBO_W6$l5#^XQqBF6?-fw?4OyNJc~CD`4E)BJ zQN+MWC)$uQ){2z*Hc8%scfUX}lFIH=?$IBfJ{_MtPh|*wD-NY1iMam)zQq8X< z-3uiMitzMjtF)4!zu8lc^!ns1b4cNcv_yX{r;BYFL##;9W})8Z6;T5m!UyQF7b3Y# zAE3uxh^voP13oeQ6u9EoQ}nagw&Zyo#d3uZsnt$wW^M$^a+2L4DO2sGl5&^5Jk?%zZAi$5fz z*}~1fOLdue**i(zO#OQst8oZzWgiyR%UB_Q+86clOX;d9DWjN=|8)p_e6qxCc!vA< zHh+^R&EM>?f}c_n3=fF)^1Dk4C77BC;QslK0{71c zX>?(y<64w~lxL`;aIH(pLoVeuwC!-dFd+je&o&ryc$FpGkE3KiNt94)ig%953hRkCELV25#sc zc@vM#0sr{Oqq={*VqwHTo-v2`$Dy@ptgbNgpVpZoP7JPe)N0215|3>a;<>|8Jf7F4 z6Ye~9O+0sKJ=|#SZ0Fp$TBKV)&V!Anwg*K0?>94RwTR!HYvO)4(Tt5IdfBm&q3-VE z`-&9W8ssK7+PU|wPvBeuaApmfDJhS%Fn~~|nXS>9=}e@FT*bu=pzri$(v7Z>HyAY1 zrS#lRG_sKUvGbWmjt5lO!}!wWppImG{$@{4f0L(!zuD6zd>#N5hvsXV2A{-!g1<=& z+zXntjJ4;=K+0d~)@w0!Q^q2)-1>E>Te`?rQeR*neFl!LKJ_XY|Hzx+%Y%CUmpbhE z%38W7L!Be9;Jw$voO`%ZpL6#4kvZ2oo9;IXSs9!nc5+>sL?IC@$q@twTXF_{yA;6jgIgjjF3r6UJkF5zb(o1@0KJgd&<2Ny~O2yXa;_hMBfpTBlCk!v_-@~ zwj$pT{Yrw!r*-pmKt8QE><|ZZA`NMMynTs1hwhaz2q|~CC9)G=4qs_s5XM9M3gf0i zxrsj=40~Deu}_)G78+ERW#NWSg35k#6;;_ngUZsd`H5L%+!j*=-4#^!rH%&R4B5|$ z@+Te$s4T^&wbw?vX+wSMnEI|`>U+?rzVaU2yFbI|4m}*FtzcOq+DbR3Tw6TA_ERA1)?`SRJF>1t{?9R?f>S1@pKF)*8{X;Hgs%3!@$wx^>a1zJ-4 z@LG6KkS2Vo!%q8|c7A1MMVg6rW?ci?`L$oy&PV1%v~zM9)y^`eo#jkBE0{Rha0@9w zjmw7A^k@9h>(3peH+ehWef3(6a>fg9K>UfJtDhgFUF9YvxWZE58hRO&6NU|?gMX+@ zqKdmhSKKsncXnjKl&y$YB!|DB*LzsOe!5Zr>GSqF+U{`jxk3Nj_m?!56vgzmjy0Xh z{@$KI*BjV7W$c}ONp0)8LDN&6b)iyP|0<&F8{?IIqps{_OvlQZP%8BLZOxfX`24GT1U*S|jmoF9Ip}Zl+}hRv=(>Df zf2!a`Z76uuxfs{z(R~HMSts@rLf1G8fr0du4LO ze6KKkUc)|b_1ots3xbJvjn#DOn?pTx^*#H>ssg%vej?5rU-%wrk{VFW|}Izf+Hh^CEKd*<*vP!8Ilbr^nAsY-5@TRO7h`Uv`klp70?+)C(w?qYhrQv~NbL0Dgm3Oq*t0WKp$i9H@2 zLB!w6wh=AN3{ju45%M2JdUD#r9NX5&$!Tl!$?0geA==1{3i&sv?G0T{zE}IsdH~Lg zF8g7TfVWzz*eTLf`fWP-b{+XvtC!@Dd3J0`5M?)t>X=p{!<1bGO0G>($C(Ngx0QSr z`w3F^?%8*d^|OV;<+GzYn#8wXBKsv`(cd~UUBHhG=Ak*u^`qBy>IkWpiz=S0Cw1p5HkDZj{Z7z9_Bsbxg{#&g{@&P1&6%1Vl zT=Ce;Vg*{3K%n^30aTi0k^H?@@v%>jwjOhX<>5k#yoTiC_??R=PYQt-9e!zt7mxL(3v@K$oT`L311Gzj-Te0S<=eT~ZCbe;YwM>a!O-5*aX+r)hlnwwVnd1?4bbxmb~@1gBX&9fw{<+Po1SM&Y#(2s zOmGk-*$1C*%aUXoXyV)v8e?MK%1Y*PtV@cVgRf-E#F`{_i<{K;ZkH@eRoKUoXWmT z)i1Dxvbn17cFCVf@_``4H%Rg~Nd78xfktV}-Y=?eFtolFIES|Hl;mna2+6BhXwMMD zz$*BDhTU4AEVNq+0zY{^lH^uN4&y-`X@#UR6EBzWSGwU%)wA{0obUfhcy10P9Sec@z~vbZV;Qd&qNslg+!g2rn!`%_Q(xbn=^7R;VvEU z92-)eUcuj&$XwhO8RkCTwM#xM$y-Z;aFT8uF|JMjqXVvhP{_WWO2H0oKDY?*k&@V= zvL{kBB@*nq-NdG#ow@SV`ghqyrdm13YaS8Tiy*EE)&k`=OF^JX^koqHFh%ZMT=FlHyfsg2f|!RWiX+o^4V%97xGwsrPGTL0 zULvh2PS|#*=r{ktL^uDWEjrlfI}1J}eU$v#!W46D@xL5vteO)Yzxxcj{cCu-fOp&D zbvto~XRF(<^oi*9-ru=y7swwL$op7*=C7(XB!5*P9}NBTcY1kN!Md(A#on>+>e==g z-*!`UWvzxpXM8_dW6t-P4x0x1t?NXn=TiPaX8An<+}+n;?vuf%%iiyJ1}@++s> zZy4=wM)HX~t;xT`J2i4Cb9MZscO}#4AiK{giVjBc!g5w@uBFQvakFI)%>*cO?g(ch zg%P#*!vH@+p=5uPm88m_`-StNCg zNg~E}z7_n-ZL_CGit#|fF$!k$&EJ;@;GqyhhKF9XN+Z*c#>J1f`f?`p9%>STUNe$A zhRxX1T&+>8YWakVBAx0tT2t-il6s3tk|$c|h455+(Rg`kqjj8mUE_Gw-dLdCWw-cp zv|ePg+9jnLSU6s`H%ctxe!M)R(ULE2kcb?1gtH_b*npq=lB`cZNb)X;-}6>}S*_(m z1)tIWrqObvOa7I&Bl?2^^8?l~-0C_Z;s>lV0(BuhS7_<)Of3y@#Ey63ZVH2;DW}d@KWrn_-{CG3cwil7=lU&dV!C7XS)%zfEUZahXfNlN<16Upc!4sp5GfO_0QC!BO|}*&6K!l= z`$v)CX1A0UC*?qpN_TqXN;ax+-a5&i<#D#tOYbwGJp_MPASTLR9;i z=!hJWl5(1ivoNosoUF62z%Y=tKyh0rK3`ym=XyzQkmQfC_4Er&hhp3!Kpo6!{C+w| zd?{lNQEo6#YY5#9j*P?T$FP_QexrT+d{GSFpbw z>~DHl6{Xx6##po8ZluahLn4WCH+7}?YlbDZr73DD>;D;D%GSh0Gah7fx&r)%P3zYt zj(^s3S!9kDz3i-qJ0@ie1J_3n*0To&%S92|dy4F}w*^u5F;SiRJ1tsTR-klg zl~`;z?A(H4K#ktId3LbnZS%1gG(90NZl6uj^>ZHjO5bN=LElIa&XBFPAtEB+D0toDPz~zCMU?Y?_F8M7b0!I1`aJLN`6oFubIv|%uf6u(Yp=_9nar5% zvW&diCa~wy-OzO75jWG^T~))~HEa}lqlM3OLx?tQTvspHHPMdXzV%~&k?}3{V-Y|e_$vfFLT+N%5e=!sT7IDA`_K1(qCAAJ%Z?%P%s)5f>s)9-<@#8Ztfdg88 zL#k>kdU;*#%X!MR?Odjx>svD>yABt>*q)lbwzUVMDY17v;~m~%l(*OxQqQvJCO^1L zATV@nAfoCSLcL|%1_w$pJ!5R3Vu-KD4dS8}FE9!Ou7zH!LJ1&!o>k;}IfW5I7>-fw zqVwN%%(MK%?xQRI^T12wqSw_w*9(@Z`BQfo)iBosS_yr@pk^LY2+#j zMyk!kL8!W$8d{Bm;3MS3-9gt&pr5I6{Wfkw9@N+Z)wgXNKiKhI?oWb0kuPLN79halPi zU7p|}e+n_otJW!;|`F8P@kc zrfNIO6a3Y4+R~QJ+O{->#HO*!*6(Rx8b5M}wR`itVWVeWwD32X06iPl`sAg0VIB+7 z_C^!Yc0$#5hP1|H>}%5$|EI$`vKT@+WspRZ%MOe<;JD^4E4*X9i^4m^8pi+hMarr< zB$f+^$1zsZ;$*E9y=bKXy}W|rO7LD!>h%{CzV*{3c8wm5(CXzbYoM*!3h(G0!SIe+ z2jz7RY8N@Km%Hrn4p?>d9<-UybhQoknC60Dk4Hrh`9D5SS(xEKb_B}>4j{h^exzcL znvB|#FBzQ^%U}iu92-=M;L^LWPCXTk%z*-{U1mL!tyEvZjJ}^nV#>M;a9uv}&Ul3x z*B6xcbMco>*n|jK0V#+dnprERn%FpEd#cCFqH5&{7H{^&pGEDmA;)ElB5zJDfps3wzkSz_6UXAld^7(z zq}H|Yio4r4$>Pm3F0m?F$Qb&jS-?WdlOnw&xoafP(@n!D)xf8R+d7Q^>8~t7h%tz1#e$zi&Y0 z=0CDPxoIH%el6+u@IN}uuhbMU{roq2T6mL)}`v6o#K-=*{^DYvZICOnf_P@ z@D^_>iy70rP=9tyy~(1}a+R7O)6ahsAK!_O@50A(Rc%mSw6MW?JSWwi8PjqwK4~*N zAHnAz#OEKv=O4!BBdRv2G+H>zdcFjnM|}BL#q(0biB2n0YW{=i=ii6zlw&*hV>?Bv zHi$(F3!oh@({3p!Po%mqV_E^PfmY67&aG+MziWsC9G5E;u+bpDZ zTaoty*!a5tVQfrMHLq%%KkZIUQMHnykj{!idZZwv*TM-jY(yYjVikgFPcBDzD#J5% z!bF8%@0BH}p(ggN@al7zHn2dYg9LU&kuCO;Zg)^&530?|eJT?}b&rrNDtYxr-QOx=-a`%)%J)VwSlt(k_6^TxFUG~&?v99YdW-a%MSxo{$;GruMZ=8& zd!vQ7Vspba_uiC;*KVXC+I3aRp=yuzGW`xe(mm34mnae(;oTKG}wS(9>9ePFJt56=?|bxBwo z=nredv!jK#e+Bf1v`K>gkTKQE|GDw3^soN|(Err=G|73FyY1N>VTNa2$)gJYG7Dz+ z`M1m2{rRc>VBduK9Z8?x5gy-|KEJn@$oc)uZQnk>mpkWo1v5NP-#<~|x4KbWA}B63 zr_$#4a%+A=DS*1a!~Cwi4d-`6HM$Qkf%*NT+uF?UiuC#2_f)(2edFIrc%JNsBNJgp z-?zWA=lA+sHHH7?a{I?yeiB#KU5r1zE`F@N+%dDSiondSedF(&iMs1m;`QaZX%n@C z>32k!KCu)XF4jbSNK$dTm*(joH=I?@_xv8@{Ifn%&M&!3%DF_1@azmfs_-sdLDa7t zD@DCCyyhI00tP_Vd!Vf2H~hC7(#8Eyn8dyN%3F}h?ZurHSkW9P?lDGW>OnrtrESr_B5Y{@hyFpuYUlxziED z?)$N0N*ve+?JS<+oDwnef82Jbx1+|g)9G3Mo;`WG3wlmoij${x#G?wo z$_tZ69U~`CzyHRy#4d75qifYRjjT_fLcd%}Q^>P#v>4r@BBl>7LNmENg@#KnBQrev z$|frO33FMS5&hGbZDtXSWAoa2N1T0vMor8a9JSgnNq=+ifchg(t)+2m4W!MQ0;bU;c=|+n-Vep zmz;f@Dz&$%RbK!RVw<8}>e@6S&UNUZo}Ng=k1ZnZv56>RM&H*9Z6YcJ5t$tj!Spe3 zvMCB{#r}{sIy+i;l_X*!5b=nY|6wiq-q)h}ydmB9&L{k5eOmqWXTJCz_^hiCU$|DB zk*dTQsj4k*0yES=9-i{Y28u9)acrPOUX+T9t%CzUbun!R@BDtsL~Ja}y)-(9>5~}K z?-VDk2%UieF=G9{R+v@-rrwolJE11Mxi8jGQ(?&?L~@UeB*cLXJ?K5EyI_2CuNoiQ zHn)P@j`Hdvfh+XwIazg%JBK{j}DhLPSiN054wudo946D)e_0$==o z2rJ&rA9`nn$+Yds+fAp3iT~<1X&7p`4oF@&|4v}hqq$;ibHv!@V4A;*Mv*7LZxY{A zJz&o%bK4{Qn<6pd|RA zcbAwf-cWrNRu0!$Hp6%tW=9qe4ixcQk|}T}=COFQ?>CzmK(Zoe@VG#QwvTG>Pt9Ta zMtJ*1rPCpWb;bS{lywPON{!@x28s-dyDS%~szUHE?a0om#74 zX$gyNiL}G_jQOPOaITW&jAz3N%H@+lK)5iSM@vnzBOYA!=kiq zY+$G=%??^Dpg_!XX-=51GQ;tIRgWm1H9e50_~OOg6eX;`fG})-%yl^`Aco@~_~u{I z4b9;QPM7>MfD6#;XKxYIY!+>Yq8q@JtoY&+GQ^Q@HCWjai7?r}!|{gduAyLS^<~Ld zyDCbwF#IpUysjY)?@VF+}|;b;N>C*q!bJ86bq|Q-O2Q)A=oH*p!zZyGR1ps zMDLyq<~~WbecT|{7dhgbnfACKHCj07Xnz@BGDozS%3{WPsPCq&!q&u)fE(Fm=c})E z*pfT6j*B&m5_XtDi6w^T#WOD|{Mh~_4!z{0LivC99tEWX-liAl@L!(Oaj;l~d{3q1 zInfK5PF8WhuLs&j#peip&ZW;4^tphzp-^_Cl~`qXW|}Wz_M~9Lz;@*F1>@6c zWqPE7=_OT6udNl!|EMR9TAULzaHxzESM?kr%LPhJXORDDe_Q#C?eWD*Ty67=DVxWb z+2ZgXJhevpF-vloerG8&y1!c-RW>4qzvuBal?uOajL>f2XaXt7MwM5#=J1dXPV-8< zw9fXAE~12DPL2%78ZlP4Z6FQ*U;;fKJ5>FM%$QV-zEl7Bf}#c&L*isj7gfJd>=mib z`Fn=sA1Y6Xo$Ue^{mNC-FQnh%4@IYCyJ~(k>xL_9dP`19CgwL|m{?xhAJz$e;cq?L zKa{^m@U~BeqSUE@A>V_)!N0cS?}zt9m5tqyzgPaXQsJJ_Kb*fK*0$$w5#<51jPK@e zx3!YLzStu2;$i;z`D(to`HfhCO9 za#fq%a)h1*{(fPb%`#}ms65Y`xtG!Gt0iQQZ%l=7FwGzHbb zFn&YMQ8OWb%0HCf%T-p~tb?q=~rzW8y8m-8=rWeJ4axn*MFs7NBDHCgI;SC9{(pWh%4 zI9>zpN zs@4cdr?DsD&cT5aK4;ew$6^|?R9(?$nSpg79zP!`VR|S6p5NAxSdvdOqp<8xWeNt% zrHU+BxaQqd2SZDH8K$Fl?eLbipCN<$HdCxm(~k(vwls~Q9l=`eetSh)q^=C?uWg^X znj?0L;yo+cWBF;@0b7Goc#9~1cN}G?+GDv9c{MZ7PF6Md$C_(;+AJL$C@D`s79cXb z$4)21ZD~tqxKY^Uk8NTm57SZC(qK#m{PPo_iIV6gS^&`RJo#W$vB3%}WN7M@eMtep*? z{N{VG9P@(_v&dq4(j!?8`TcKvKd%4!rL%M05wZF$j2|bCX72NnbFretoYiFtGy0DB zTv%DtNEq&ziAAHI?bZ zK}d4*SCO1oF~f7s0*FNHbaa{7;mxltR~!)luRu`0MEaUl4p?bb9~`L4Z_YoI%IQ#v zN)~)+N_>IfF`rRRiXq0VW$hAMd#wfTyb#j-WZYoFalMqTF{n6{t!fJ)UP2Z6IDmSN zaD{_SlSA^jiiwkWepKgAQF!O0%dD6c>>@>(uW|&{P^>XfH(_tVaHEeuTKM&0aiD-M z)dK2jAOA?Bk3VeOFeEu}~- za+AGaOaXlzN?EUsJZsuvvoc~@lAcbrO8zhjz?jtOMG9?a7TytsA}Evuuy^~C^dUF; zR(pRCNGB>jWDXJ@vz@sn0H&_sI7#bL;BB^kbbL|=~X#ohdTGRqjnh^ zbCX4QaNo>7bSN(vzw42SUVL;^+B}9Gv(B{tp8aKkw7+QI!~POH+TQ+hU-bWl{bj+o z+F!=|A5aqfuASe{{<3%f54FE&9ok>cc|hSGzxn;`FL&+#!SBsD^zwxtwmTR|bURTOGln~BqSRwkX6Gx2mRx(26Z`n;Sz*V1Rv z#pLB(t@ufzFa8%eAf6xIcQ-)d#GixZ;bNwb@-ls>=xX59go1(9XJ)M4D)R_gD9eQwKls z-ZEe=MTIwAe2>E4rzk-ruEfi<5`VPt?E^wT=nh6a*l_(Rz__B%y!#T2vs&fAm2=6Q zYI&_ML_+k{$b$GD-~5aFAP=a2-7lsDufDJTHqXWM?i+ra=i;C3PMOJ2C-IX|%m*^2 z9phiUwZa}6<7JFJAJC9c^*L!a)2oxqFH)3fVQ=U{7pB3jsqSskdZaf zDk5TdE?8Nn@F$KebIOpkdM^D|`zdgB{|dBto^&|{M5a`b{gkq~w3pF-`qTYqv!8~Z zsi!~;ZL`?T4A0;Cj92*QhnLwyhmjBq)4~4Yd#dkYMogm06`T!Kju{&Q+1_?`s{zaG z`~&!zGA?-JYQP^|mjuU$;iGmj?B1|k{vH=!Ul5PT3$ zFxnqyZxP$(=8#e3g6_%uvQ57EeKH)5O6%=H#D+(}?Wk=N>t5o`6=_IVHQj{Xcj0F6 zsev5?aGW*BW|C(&J5R37*i4^qO?6?ji;IF>< zKbILOz0j#mW=(lp`|09mrF?rXzo`-o^>vv@taz9o^E_*&x{C<}AIrR$ZUYSq;i;ko zn4(U2=BAvK5Snq(I?244AiXUH=;wHpj0Fz3;mBAZuDRp-q`cM#`Bi;Hwn|v+kmKUU z*QJSxz5y5%GOAoGcw%xPGdy3-gmf@*hWhh=EraB=A&-K%mx0h5^W?F-lxQ zZp0hH6B-Ie89iOm!l(8KVI8E3y~V94qqLr`QASU1*cbyxOwko_oE&Aiy_l$mU6Q$K zC*3kv?P_Lteh$R#6+9M=@dt-LYo<{oX%RhLONyJ^W3mYE*kha9xd)f6j`F7(e`njr zX@w|dhG+fnz#37ek_nz`LCf}j*kjw?Mbl2a@>`yVC9Rzg}$H z=i$A^YPidB%WKa%Zt2wFEzdk_nehFc0WszYX-pS9kFLeC0y9|@-5IXw)u1D42YKrg zN3D#`x^aP_mZD({H!XNT!_#FM;5%o$wan~56`9f7QbU?0+CjdVoStbXB$XZ~M|PhWqs}D1@jW%(t+7CBCq;3=n08VWrRFMo7n*~+5QDtr z!*E>`v8QqB7fyK-LUp$JQT#h=eZJrbI#R`B{M0(9BUQYV4;_5eO!huwn#^oagAI=^ zmZq$*-m_7x8Ku_ZyEssRi|mc!y4G=BN7pv&&Ei0n8@JM0H|YeO2vegIExw&78ZLNZ z@<6fWO`W3ff&;YdcA{mslXI80vCjzBj5-3GHb&zL+(}W?3A+nM8hy@-7WR5mtiZ!n zeKGW7q}Jy=@q;w-Rk$r9-+9u=SL?Qoe06Rz@I6p9i^G@WvDDIuyQ zQx=%g7YCZUz~ubx^h&`Uv4>9R54%I`P|cMvP4R}B>6IW4*vRxiDIa9rmyy3m%#usN zcqpcHf|dt~_$m01?Cf!1uu{z)W_bF8U5?yi!!uZDk`mRf*FTp55(Al6>1Hd3c$f9c#v^W3Q@vi* z$nr)DecStElBnC8Y|5k~;4Z#m0UQC7f2Ac~BHEOaf-cMVRY(&V*@dd;%vC--LB3AXzq z*7)hgp|!JS{$+o6F{NEwQ=Oo~+CEmfQ`!FXjcoSErfJ^H?%B^=yV-h0xv(&m`SNqj zaQEO>ybPy-q9^Dy;GxriM^TbDwIMLC4S@x12rME3^ZvI8bnRwq4_&ur|D1O&8pKW{ zS>spdirtU(+s?EW{=i>=^mw8J(xXZ`>Dg^a&uK$?Zib>Hpt^!Z`vpWe+b9WVt~04j zLG?PN%R_a?0PEU)4*y^k(DBWJ_H@|V#6-X*IoZjfO$1L&zJeK^_>)xZf5jsRt@*wXyIF1#iSVt2Ne)f_g?Ws*eHU{LkPT7)gvBK)tS+AFEhsE z!tUZx6xv8?;c}oq)r%RPFP^A^ylZ0~w9B8r=~+4BaIn$0 zVCgBb)tqA5=gCKpn`X#tlsgjBHmO>Z8f@?x<32Y{7HslG@$d=wX^oIwuJ_DP^>G=9 z&)Sz#zERg(3A$f6c*GYS3OMkA&?tTShhC<&jL^q^sEp93f9MYxzjBQ-27f39!54jw zut;%TqtZNDy`>-loTs)DtB4q$>+Zc@sCTM%iuY?-W<`;Mnh6IlwZ$JTEPS1!z1=Ms za4%Zn5e=~+O8|bySqG>E9{opHdmZXEzAGJO_6cs7Ym_$lLvN_@WA{j{=MBS+0XHyX zrZ-x+XA9bwx{lPw-QZ3B`HX3*+FLy9@p?14>#1FS}nH75OJS)7iJyX5X33ZP+K8;JxeW&5*V`q-_%OLhdd?pT@R1yM;dQ%?WRip4lmvwk1W^0Yfif;g^pAVT=Zvyhg z5q`tGdXrx-KI>TaBoy6TzyMwZQpmu&3dVsRfba#{nZFoRpFH{ix=#^(0OhB|-GQxn z$x>RupgfQ+D+zh_Pp(w>p3ALcEgBqOMsT}M?dv^4QuOB#53sP^sR;6Rf~~&jF{-f( z7A?K!_L2Iy?Os*CH&77{zU_-{^9Yu_A8P!-JwkI|I>H!mDe^P23GzcmXyY#RCQ=^0 z?lHludf4n^&A!+P0>UkVv%((|pti3EOv?DbeDOSB;nXT+X17puYOUg%zrpoyZ1jd_ z{6fd3{ErnFMuDt(LZWH4L(#GrgviVZfIGGxOGtpQwhh9f4S9g1{!bGsy7ai|Lz6d^z(A@qJ#sEKZv{NHU=m>3`Ur1=hTp{qSVQoi9 z+nrnj3sQ^PW~!2Z4JNCZsVJj#_x4fx*zMkMaIY`=p7=()I%kA2AP3*EtO4FJN}HbJ zO?kuGNnSixOoYTD7_JPauf;Wd)uIlo->LytY_?cAY9u#MdJ*iJ$AZBaoAHH_%dYN;!Q_1GiGo* zEF`4&+$30z&|Gw4k+q5qPg!lHQl8*9Uhb$JRnsSSs2WNw4uQY~xDw+Ue~=>3urUhn zyP-odf|3c{B|DSnx$JF2Y!?#s0VtgY)OWe%2Y*_}eV09LP=#h1z69l*JnIYu& zD+u{*#{^1em8zgOWDM})y!#!r(JiEn^LkTV5Fcd*&9!9s8`I2h;KS!&-Et_95N#{~ zFr1xK_--{72LK~itHa23(qZKCx@{v@w!58?E2J-ydY(dho)`7J&nhbw{z)H8&nrpO z^HkF4on>TgHBW9)tH`52_f#f5HPWll=tq!%9?I%2j<-L}=I; z0D3zE<1LEH_{W|4-?OL_lysyM)Y`R4WLc9{>BTv$2Q9TghF-~_;u(<;U_MclZJM`O zhj4ZCoe8_J^j!Q78GB;yjbB zwBOQ?JM!) z3y(sX{_+HW2ESMczqhDbGuPl7DDPIJ@M(|Ya#n@Qncv!owN_ZxVwU+H{oix&D0+?! z(l*1(G|Uy0E0^IJa$hCcuWrn?ma7P5p;TYMqU*s9U7o1v>RU55FeEtx$FTcDXb$(g zoW(n_b>4E3R5g1`^Y{=jk5d~rxG;iuNNi8_g@R>~cFRsL+Nr%B+d1#|*bey|$90~( z)?+}25W#E@&eS^6Y;ru#oqBP*ojM^6dSgqcDBSm2`+XV+mIghsFJTfFn{cc^HQfE9 zgQj^d*S zwTX}JFXN-HoV9*lo3QAgbr2SP>Bjb9(IX`>smGk}f0RX!7K!&4i1!y@HkCFmP$JsQ zld;daLM1mmT|bRX>*aq5SA3%8!Qsz|@IpwfzD3>Hyr_A_FxiOgd`D z4pkR`mm?EnW*nZgUri?`EQ$%<;hFNwN`>!!Z;6?@2CDC1s#A+heM|db_g_iVnPWW5nU1Y5Bx=T#Fntmz z_i)1aK0rQXKp%&ITXUTA5wJf)KlelJ%Ybv*T)7DtvN?9Bh2YD}l@Y$5f zEB=r&G5M5A-f5F^qJ@orBAgkS0zEZ1)sq=hb7k>c-a1)q8vA9hRefMi@vPcBrTX#& z?+IT(bw)%<=@kXn9A% zRK1cQsW7iz)rRM$dPrdcc-H49)=Kz8GlF#weGnpQ{FUOr9qCLGF#c zYJ~y{)mxZH%C!A>zWl453nl}FTO0udP%9Yf#u31BNgICTS^N;~Hi{wilg9;~H?mGe z3%C3MJSVEw^Hi!ERJhyCXIF_48j~G1m`l~iz(N%c?(#(+qj=J#E<5-XazN4}n#NBr zQ&cUbYK^L9s@hJT=jck4;(*t+Y&z7Hr5$u7q`e+OTxO~JiPwc154%TbV?Evx#&nMo zE&O@~om<9wl$2N1_V61Yrl1rD&%#<0=-om*p+altGp5O+Q~gR!SNI`$9J0FXnqiAv zZHk^6^JFRjVpTY<4`kRF$T$lp;w*&OM`30f)j`%LW#h!20&xQk^jnjx4WBJ9a?y}| z^=(rS_#%V!vx}Zs(m|zeX{Ig)3`u_cN$@uBnu^}$T+%P|u+2rke8DQ}&0kuGMYL+s z{Y)Sqva*I4k<=il;6a0(K=G~quL(91{jgV-S(P>5cdN3-Qkw0xc4dvMu3;nOjTRO! zCsfOEUA-wk0DkWh=aUDiu!}wLiyUQJNoM5IAeRM)*oU;QL)u=;*Q|Xm#SQcKvZx|9 z?r6hvLV7U^>!VA;U>!LVf?_a$c;3waeEla5Na<=Q%@xv`L)ur6TqbDCqX3`^UN-0x z6GF{0Y@=U=Ba@`okx5cYgI7Tz=2eukR7>J83kPaJoS_m(I4>5PlYxc#H zUsB}_iG6;6wm#-^#&s^XqCaJ6j+4YA@jHKc0r0U~WygH1>wu4d5B*g-D@$!w;`#rM z4%m755@ct0+4JOOU$$p!DB1vp`c$LuKg(ZG!oh6kd=Mv>3e-CW1jL70`Jv{Duzo4* zvKip<9talF1bqM#sW<|s0;0LP3_Bw`k>SX~me;zh-MtgS~z6 zUyE(cD0Qj9Ba<;PXqT#e#0<}&>N3cme&vs1^S#HRoG-R&HOwNJJwOX8lu*X^ig#LX z61(k4ZLH!QY4lX0g$tH}FLI=or6m6XCbN^Owx5S8>P=PKmRv$rL=MwdU+XZXF{5z& zJXs8-;NxYcRdiWb1EnmuV}?6_PwJ4Yv1TA>1*; zli!d?<+OSBss9P9Nmqo+4oc+GR9 zmSuTUm!eY0KPiXs#?-m^X1zL4VwVU=A6t9mn06|pec5iTjX^FoxXriVK2UddsM?Wa z>sR9P03Y;AiQCV!he#97{Lk8&A;5leR~u|Oy`+TckqFaSDU|*%eD=f~M3&=OKeJ%v zo_q2kCBbie1(vPr(sAY5BF6n@ur%DvZ*TvoJtOTOkuG5Wz};pg?lK1cx3S@h;dGIq zD0O24!)aaImrZ$H_rnMTr*P@+`%!!hNYMX1oTtZ%6MH z9bJOj+iO@9{Uq!6E{mG?`ivK8d00wC)=Cm1j4Xv2p?mT8Y^|FKYYQ_^cyI!DSq4+dn(hJ(>IVo5lQ{Fh^h}Q zW!gS|-qoK#pZyuA$A!^y7}ATehPZxbMOZJZ3h9$-L2LU8a-u#CY0av3kpDIKiOJ%o zZ~ie#c0H-sTASjswKl)Y*4iZSo~{ozdxtmGg&B`{`ESbV!7_Z9$m5Egm)k0@bzEy@Eljk(KJ(ZT zi!X$mk^2{kn<38c=N)asx6zSe-}?8wldlTt#RVb#j-rqr$_)jJbE-SzhSrmB?Y+c| zwz}kVsf_%FSc5P2xyx!JC#;8ZeHSYbZ26X$3bP8You21XsxMQu^M5iu&lN2kwV38W z_sgf}xrF=__MM*R;@&cJ9xkUu#Z`)389f}|Q+@Fe-gl$^6DdXEX(9?+9Kv(J zAv{eE;oE5|Aignv)`zl(SW zaR2ls{`)8J_;CeQ5nl{n`_`y|q5P$ml$n6<^AF`WC-~{q$7cKe`hN?IFF~|1tokqI z3@mt5|0sd9_K~Q1IZ*oqQTp)a;_UVW_T76c=n!tO^QsI3%0kE#O|EVysxYWX}&g5*Uf zB*@VNH%MJ@&T*j&{(JsA<9qn;%ARlUzng!<|J;AKeQTQk?$!8r`tJ%B{2>2bDEI^Y zcX?KQ%ZsqSc?tRN82Rs58rTkj?--Z{AeY%D$Mpfa2K!+MdIL8kn%$v3Jp79X{+y^wR;$PCZZ_mwHUW{Ets zk-0HJ1%u&jntV|;id+P%84k|yGGjnSw6Ofwr08U2BuAO1$uGa7-b@Yw5O)F`!wO@c zJ}NdtF}D}4coFTp&&>P-OwSS)-!lUi+vP9@sZqB1To#YqkXC(B)#ce+!j_UG&E8Ui zo>_t%F^2k8tr;Qqtdg~eJqwq$UdV^E$HenuS*1eqGwrzGd5M>tCVA*zB6$hxb$GG@ z3`1xG4;RT5ik0yIfpW$~*a+)fXV3rb=a7vYG>D!VSZQT-W7_2#rkq`dWqP!qrYSLN1x2sZMAv7-{tE7A;(nu<#x@V3+jlCVr5353N{xIAf%d)h%p< zAihLF7(o}rpWt<|KlLMKcpfaY@E$nUSD5C-_>y5Pibe^g=4NJi-22POzwtb{F6#CE zE~a^z#5{4TuG>(~U9vZ-Rb#}eedwFJ76dNj4e7l@`XdxRS_JW<#a5vk!!z$E_bdFd zr!jaGkJ+RA(Zc!#j^NRzTk4Tyt9*@WjCO^!(GW2z#)hd{RySr0=!QXD#3}|*@$(rg4=xyO20Nu^iN#yHAIzud3#zJMIP&)R`TJmr@m!> zNt~AZ%Ts6{X?5fN!ri#Pz<&*ce&BfGrsIhR_Zh!KozHPx+iJe2x)eYe9$bXz1sFaw z7);-kzG}Jl=gA`hK+Tjm+AEdU(bL|U*NXL^rM;THfw^wtPa#14(fbMc=%mU1|) zX=~CqP}=uuayrRq6X~%c2G8Ci_`X?eA*CU+!M8?ioZ3EeZmpH&k{fX))$BNTK~*T& zG@}+YIVfB$v+^Oltj~4;+-_Ssx-GuVhKPlq@X@$R7>Fv!kK4G!E>8sh9!gAs{Qmu! ziju(i6sDcx>aXMu_4%?F!T(YF2a_3|>-Ll?a^S`B@!sDqvkP473+a0b%hxD8!SMV% zI0aHLYQ-~o^bB$hm_SudHIzHp0>$=^^E)->e>xTrwh5Gs^h2EXcBbbu{SmK~S)t=1 ztOgr=QG+r{D;TZ3>V$@Z5k?=^D5Iwe?o3#aR1ruQGQ%?)Qo`oTNI*W(7d&UReq zit7kRN-0fSi z>5N#QiWDpx4_=J}s@9Cr;uok?U{=-Z(R>~}=!*`5^Jt&YDE;2Iz0Ud?@s&M&i!d&z6-+y3n?8vGtY5f8)ul0tx+VS0!Q|vyN9k9;JxU+L{uRifW$5BCe5IjrB|m8B5FdKXm_8=hVdYohl`^}S?6rdG!zh5=i|m<0FTV4$C1&hU^))ILLsMlGyHp^g z9!WXF$zS2pH?X+Up|aV}h&H(AGtel@6O^B1fqV=@kdI*q@3L3sqp&G(fo(c%51ma&4p|?mE7N|rT~1T{LFu%VzS#J zSrkt4K>Ei7d8woWva05xU+Q3tZ_@6ql;)gT;|;E6x>Pq`EQVk=*=d9tqV$0ebGX3(%i*+W}WzkA0o(v4gL$JI<2xDWL>b zR%3vnm+T8`-L^K`p3z4lP*Zz!9;i!@Bp!m=ovj&)lHZVj zhyowMCvs>={s-V6F_V||r80~XmBsLk3{;?Hh}X{}U5xV2;8hgX>dm0A){6rb3ZF`M zdONr?SKfK+*fNEe%)<>E@0gS)L<}?7rWOdXY^5|OuNzlUFNI_HsoqXO25r4)Z9atk z$Zr;J%7O1B;0#_V))jZjtHah+cBZ^)wZ1!PUFE>9<%v`|R0P0CCb8*p!u2>zk)W;c ze*-2T(St%SSOmmwfJ9$OwA~2|dl!om@k6|#A`_eN63!t4Lf2d2dSHABp7I%&bVgbV zC|nE?tyfZB=VFLg5j0^AbI+YH!kID%mE)|=7Ssv0g^h<@vQ|Mjcy#hi0BWNU7%a86 zSrtp`$Ex-zGd$XuGKJr(FEdqR0xa1D6mpP|Ia-vJD94i#LeydE`pHZuE0Bng_J)vX zK^tO~s0H4UMpi+zu-`23XN}Z)7NmNIG*i`fsoEZX&k#gOEdVB&l0SkCIT<$J#C!9g zlcQa#J~bQA4dyAxAFLneiCj{FSXA(Qv#PzTYWw({$3+is`9VF*%Ww`hQKHj}v=|Ng z4zUxIQhqrnM(1VNV=Coil+kBvSSr&Vnie`=7}q2C2HKf`{#Ex-${l|Z3M#7X&vNvPB0(`hp5I0=)3 zzNVmFU;L2c`LJ=POV!J=!@+}-r@{H|*Z&%)Xf@b3;3dj5WEJ+#(^#q`p1#d`r) z(Rd)>3hPr5tWd{QFC0wzq60vBd^! zTuAP-fejt^a47RC~>cuP|a(Fh= zi~UT$Bb%SR7fh(TRgC_wB5kjhHf$W^fnKKH>F00Yy)V$cv*_MBOfY|F^JLIML=*hE zGK@SBdW(#U)iyD$2})?~Rkdb_FaGEgTia^W|Ff~SeP<=Bzvt9vCrwbdb4ir~MOJJQ z?}RlDL+(~2ep=^GOcrnU#V(|=Dj_w@FA?-8vm={Amr;9Rk(i62|Kcz}rKA6Xd(ZB_ zs2nEGuk-L3Ei1r`=>abQ1AEhS$wIm}!C!4ontVz*m7^j@pq~u3EtF20LrlyiW<^LY z{lr9agXC+Q=b@!@&tdiCx)pf9M}|#99r;lw;i^UAiMA)di_#2vIcP}RwFKj z;c420QX+2W(@MWfN_g!DC?bbxw)tt)T8QJK*Zh_r$=o15zq2bS?RIL zLWAa0C#J+<_>~LrFbp{l+Cjc~wo`4DpneC1esjV73a_W14}cz+>cez8M$O)`3h;mR zg@i3M++{`V6RmCgzDl0Z1QSQkd{}Iu)B7hENlld*o~>WcR+zRA>|e9- zP|!*uj5KYQIS9_xBDmZ4Sbsl?9H-d{h9GS_>vxJ7J;$)d_cAeZcRO>v#SG8S;YG(7 zCV+^3^6j53alCK?zCyblutl5nz)A10eM?jy0Z#Y`Nu*U~a9(U}js>tu>^IOwgu z8syth6eScrmF0^^#nn2QF&PeeYpRQ9*FuJD%`dU!;v6(3KFz`Hwy~>NuHRZO7w(n^ zS2)lAIZR)(NJ0=w`nSn#TWk-sQ3LMAPF34eY__ECX8On+rq4#p-BaN9==GX>#e?t) zvW#F6!*pm5Z2Ev~TE5r;?SVYaZ%$lm? z{{t&fk1U|IrhrHz49TNk%vD}3rqoCA+eQ}^@95oUr6Yn9_S{atOqt2QpTU%%v~AP4 z-PKkxv*}rl;vM|lXPh~M9gz6NIl#pM`qGXXd}8}LoGGO80M=4%51 zT;seMmc#VBy-;!uz8~qAdo<pCz|Ya0$7ae#DUE8bt3ti%gHBMbq%Yk z@$%n`H*9X)x0FaD}RN2v&vsIQR9vA&R|>_Yer_GqfdQcCcgC&{2w z;ii5Pv-0G?P)Tm_Jmf!xv{ruWALR=6Qia`lj7Qh7Zch(q=e2ia|7GV@ZF{k~C%H{I zJ9qiDchVeh*Do!G-)UG<0J6D%2>riVDd|t$-{Igf{U%9&NNebD@V-*DZ6WOo7{a$; zDPE0p&)f=n8Z4|Qd<$;-+BB1;Um+wPWXu{P;k15|w4jQPBuv}Q6A$4M4QYSUelM2l z4KAnYdJ^~oL(!Aonx3Jxaz|8yovN=*egM1S$t+(S@~hU$-B1m7^2G)3XU`zWi1pt# z5S{KxSMd)xRD37%RDCWLvK2cj?56<0_(gs*pYw`jd2RXs!hHGj8Pl};b5_dLvhPhf zE<0-uSVZ%O*GQ6IzwdueGR8-pApKh``N^RtO;gN8tU`(9@4;e5F?R{Koh-V@Z6}K^ zr|TbZ$bJ76$07H(qrdZz`|E#xk3;T5KFOf^d*P4^r$$<3i=-ta15Zfu)O*J_pR_;q z#>!H7K56)Gv9E1_;%=enHh)+>ec?+*RGF z`0olu0ko2J8ZuyGdm!0#g3EWY5)OVc`4LrXf)+MRcI;zv5#`oQ$v;loa83X!+!4G@- zezDJk6)*wT#OZy!$z`xgomMqKG85nP`fKVlZqeEwFk%F1DgaR17Q&vOsn9acc&{HJm6aph5(RH!dgpMJCeK_ocX9W zwa{Ce=xt4zj^YVIZF>JRRGUgjZK~)aGl?mtHc=LOb zr*A;JLhvh}F^I@4mDMS}h0M})GI14flIeAlIngF_{8gyg-EC5Zn%(@NYwMvTkT^&Y z=d+>PdqdjW0G|t+`QEVhRan~vVN~GoV-)!4ul^nzlTm6w};lg{U=RJ>*YvSFowwsUa zXSpWObaM;1B!c@UPwK$`aM)dene9{~iTfV1U5-xIgWV0=zkDFWN&Ys7`fEeE(dXT0 z;U{I34rqDY-sM;1g2xR6o?aumm^@;8%pQm4yPic3rGFS@g&Cfj>)OcS;0OO7%3-H6 zTMmC@$syrOUhzYO@mwj3R{UBAGMSs%kxY(x;Qv@AmGK?Q{_gzqnutG=gD-dfsTD4)EnW1&>P`c4N|ui@adYR&K1!BymRaHT?U@0R=y9bCq8 z+rdToqr<*awOhL*-NlvGUwz?Oq=4klVFh+}Tgsv3(i(EAy-N#dc}ME#-2bnn$>Pn` zdEaGH4k2C!_zz!5c3`FHAQFvf)qz}98yv{v-pr0e(wHu8(FX_elJ^~?d<4kPyMslK z<}vMoKrS=HAE?T&jSCcs=9y@|1d{ahbD2ISCzioxZ$jMPGmwQv#b9~f@9XV6yj&LD zlGh=nyvcQzkhzE3XW@k)Ztil({5@JBXe<>pmWH;y4hIG8fk0&I;J`3U46g2+-;n$p z<&;$+J`TYmR588Btf>V`O=lK;#H&-ysqh-D+)918Fg;n)s-#g#*NU^z> z#Shio2APwL8RsvyD;5t9lrRIX#v;uw(f_LaX8xbQp#;X|uIe7q!)NLS2ZmuC13g11 zS)$X?EftXNSj9uPrA+%f{`8@xj*pm!*-3IZk$m;cSu#%?`I%R;=uyAmtyl2Y8`jHn z!toDkE)KW8HLJ!0fo#FQaPaCt&Hj)U2&8tOEx(1IknxZ2 zT?X-wi@X^BnDAo!BmCE5fu(@mVF7+X`|*bATmb#JG^DR$2>MY(pdUV=$mKyySaQH+ z_^gfd@v-Y$aXyX&6eU_X;jWHxKHQgBI3KD$*RDn$ik`gJXKbW^e@05Am<@>$MphSu z`j{ufk!M_6rtnkuq6ZC2!C7_551g$oc|XC5B8eY&<24wWT0{qUmSN+=IBJt0cGf2U z?VTM1fBgAJ*cR~FK%=chCCzhO7s+eAD#y2GjW~Q2)kzy~RSwffMiOGzM^{GgYIlBf zib-f~Rcqug{u<2(IG_#~*pb;RIMiR=CBGqcF6CeE|DAQK*2uJ$SaWp|zGV%Tp%@C_ z;aHb$O2i)W{5|=H^3CMR9LyU5A)38K$kt{Il6^cu$z==f%CxI6#gF@9Z}k!D$@=9G z1+ZXQ27SG`4_5t$c!M?YA@&jI``L*8l5OeK$I8Aa9l`=c`&H z;d?xJR#sqs+fcv6?eOzY_x(=db^t%NGOZ;w&e0}UpG>oio}I;BXfu)W^QSs!wA@)g zBevrrkk(b5=O}!{1oRq<(`U3$jR;8^z_wBBL9Le=Gh6L60H^;i_G23r0jSda<%!gl zn2j`6w7qN35-{+U&;~5-;urQ6dc{emZAbjsNI^(vMPe&Q|F-KWZSz9%{Pd|a?* z(ZZw}F)$NJeB7lH6IUOT6T-6L(MzCgc!@ek+2~djg-=?y1ZR$M{bRjeP*||4sOB=C zKf~7p9VR~iK)+qic3_SyXPXK@37AYr2^hz93tdA^l}v=4o0W+$bPe=5L7!Xb^HTaO z?{CdWzh7x{zdut^#AdvZG*}D>ffP7FUsnF{A^8o=I6tSPKcJQgo`&_&Iicu!Kntkp z0;}5+u#F>dzc2nEY^6_P`u85JXs%)rlxhSPsDo*eCgvkuIJ%eL{X<8$y(sY>PEksl zJurZth8U6v5}9`5z*4#n>7g8}u&UuXdf$r*|IeG97&YP-zGX+s1Soyt;bG!wp5!@w zE|NTV+e?x}!l73jEXQKjV9dR`{j2WSkuvQ^B^(X|IGhB(@l?u8jyq+V2)gui10-cV zxmJ<-&7m1Sap)yBY{4|>oWZ^x>lz^IqInEfu-Z0zEoG#qe9Tz47V#Y?K-)zDP<;KI%AsR7>ohiV*`0o+CthFP)*|Ic^2eR-|2b%CI2bypL>1a*l=vqWacUj23MHWq=1LtA7Z#mtUhCIA27ASR8I;N1I zR%Z%cdj9aQ`dINn<>w&~tssCuG5~kX%Wo$Mh3)3S4j((#}6Uuccb z)*g-kdq9N0@i}+{j?dao6f)Q8yT|9UA&&8>z2j`-V~n)MM-Y0}@j;`wMQOaRb9{0n zMlg*Jfo3injN>C3=C^Le@sa4(vdFEMloZGTHaA&C+JgIh3tm2Ln)U*MtH-9K365h- zPeSw)&)PW?VAol7JMKF2D1;|)%u~YXU(8d2soR_igbe0VwI=&kc^lq>^Cx)9XVj1@ z5z8vNcNWj8&7t|_i@%uxMQHqrFK&>aF}E#fC5}Y5Qpa_bb=^I*WR9Ikwhe2;dSRU} z$+jy@tR@ftLiF%&!`v>}PXi0%YPp$!}D%;6m#(?|NKAD zP$#hwmgD&$xZ4+HBmt01IuFJ-q`A9XB~yM z6Wf+&IoS5<&)TyMnC9*L9ZX9MPh;BWzIrp6{Mt1C4GDhinX^f-|NoHy*Jl4934Y^Nt9Kz`5jc-;V4|VCHs^82(run+AHtEHCH~Y;@C@E^Vz$CZY+hno z5qXA?a-0hM$?jBDbUP;5Yem`7LX}ZMIWE(x=1rXo3FY{?Ji$+QNB<4x%VaS9PA`=8 zGz$N60gYzoq1?t)TGhDs-{1E-xs2P=B;l;2!iVm)L{5 zi%nCR6pQ?6LC89R2@uPwank!U@wZC9JKsU|m{K-DtiM z6&vx21fNFe9J0`0D=1@IvhVr0Pj&&eK$PAhgB*3_1l-2Y+I36Q5+Qo%tpa;#)8{@bH1W5Q;DjB0k#Xk zD5U*oDdIm57VPS&Qk@f3TY%$tI+e||(~xjMNp4^r&hLsyC952UB~|Yl)<>6y^-x9l z|D*2hqyR4OG*$qDI)22o#g- zE@m7C*On?OP$U$i(iW9Q9xNn)kl<5@7QwU@wbi>UZNUc&qRj7g&$)MYcC&fFkL~aC z^$(fs&d%J2bI(2J+;iS%W| zv>PtEwo*dW{Q?mmZSnjL@bla<#|Q$TmEWJkY+n}uY#)+Yzj0I}_HT5ZT0vPs&dB0E z#^rsn%RBlYp+7}Je+Ne#M9;54c^|ygAjhvk28RMQrGT~jKoCwH#l}@-+N_cnUajG$ zlq=v~ndhhhfe)No=5`-dDeX!D)?}(yp%J^Dr?J)WzypL%V4n+z5CgA{5d+r>!bU{7c{y)yeAk3|Z|9WD3S8;K&rH#f}2iolbHZ?19?=+KIZRYIBB3 zH)~6WNwRVV{w>fRas+ap7{_`&X6k{|tMQD`_|i7f-tQ*yN4oisO!z}_ULC3DkVeON z<`CseS1?B%;Q#}f9ALo43uRaHY=sOS;}Dd12$5#J;9q`;zO@rK6+z|!#YTg=n?c=I z7{|>b`h0{haS;>F;3vhad6L2wPPBE5A4_KfTWsFdwm`1t=5$N))ebnwC(7G2zdIb{ z->ei~oi1x`WEgnxoUTW1Ij8INs-7Fggcz{aiYUDqpF!9JO|uoK<;({U7li8Up)Wbg zU#5wbGt0!p={8+^_%(>J6^D*}zds02BtVsFo_Uz@%h(2ecY|xHHq;i#edQ+Bt0}DS z?2R`o18g^I18hR7vyf3U9YsYhhIUR zUnRxQ1U1b>8@fwUKF5u2iubE~q{R@DyiiGH{mZ|-lB~Qj!XyBY9fo9#i$!J^FLCIh$njC7+PY#c#$?`~q_=(t%M z>L}1=I|8{s`;h=eb08=he8JYr7=E2@y3T}aMRqu%cd>OMsDv`P{5Np<&#=Ub=$ZUS znfz}<`9BgT|J^pmjdmuN^9C;8>_JnNLPvV!6M?92QqQd>mCS)=;5ywJ^DD{)+YvWg zyzCDf3SEX3c=J}p3mtC`^G_S>fi)6h$xYFQrUY_bxdz+%NzS%DP3w~)*w$M)+xir3 zK#EYR0Jn%rHQmaU>QJIt&qYw`*mG#VKXxv4#(JIg4aax;$0xc@AFyuJ>HX|~^Q~-g z?}@zi3Gxd^KNCm;Kn`q>0%uxc%bK$RuQ#y)3%pW9Gq?WWv{$12HVPEgfx%{fzhH|m zO*Atyo*SauOfyqwnwcik^)Zvjhc?Fei~^N_erE!+jc=lLsr(E~2p0dlj@wX8=AAQf z*97>`JlsC7BARs-^-J{TNlCU(G?k)}^+k@NG&pD148l znkanxP`{w?-3I*nLtb8|n`av%WkBJZ1^ekq`=dEbIbX{+RcvfiqU`E|PKIuovykz=VC4 zpWd28Wqfk3S~sJs;oxz+Q4wQQUybFzaa9uL_z&ASNMIe$=ff>i9%~Ea&dL!Cg<~C2 zTY=I<&z!5)Z&v1v<(uVx`=cQ?AEoDXo%z2OiyNOzsLDa{?g5CYcgs4C95cQ!VnHjQY#_5NGjlN-K zi0K9qrC^)YEFE1Q8xL=g?-(>Qj>k+l7&JP^PGHNG<&V}Y87FU3Gjg9+xY$;`gT#w0p5i349SA07A_5g(>Q#&_nwHzf7n z``?(%4X+Po=VTj^p!ORXhAW@K2YAF^DkK!pH89;J2Sd9mI z54~W#^uhN96G7$s)trf-^=SJkXpkRf@M9PD#{4jjuOH_4`r&Q{@duciKwO|SA-`~= z&q~yu(Uj~)gZX1#qbiSrv#wa6o9t&aeH zoXiV~Io?7BQJ-w$Cqu<43E02M@H1aEJs*Ey{n0H$nEKm5KG)&7-xiShyYs)f{_y@_0M#DMa&G(`Ive<| zEK7TqyRIE)UsVT$gcE~xzRQr`++wd>!k(zVm9Ly6UwuI8&)q}Fz3qa-083l0XEVT(1Gg);zWa0g4)_b}o z&d(5dR65bDj~(~M_yg6YPB-!+uU!}8I#WCVLh{ zUD=ksVw|9NfuL#vfyL33c@o_^Mi5x=8&z>* zjKiX-BMyrVSuqZae73IVovzkP!jW8#G>~C2SS&J!2#oNzCT)`F(V;O03;W7dXEBc* z4^hKWy9hbtYiw}kbb+j*)n_87C^Phfb;^fcAiVtOR|w$BRMunML91&= zY?U>Fa%&{@#5IX!r=fgXz@3#Kh=eu&uiZK9{p9)ozH9Rd^nZ=`q$2;xsf8Tf$_rFJt{qJK`P22eB5ZwPB?{NRSiq8>0SmNia z;&0|({<~U_fq8pd-5$|kuU#3 zSmaRuaaS^auqg@rU_TW6VA8Mjz4V4picS2T1T80e^}2qtGmu0hV@H8uo5^ySRdT14{jXe1;BXdlKgjJ zdC>R9dk1w$jsBr9hsqKC5c10cl^wi&AKA<8ir1OIe0d4h6!C9hmg?US;&NmAbAuj_)^8A`F(`ml%o1lnuhjh9tIp_H2($iuKi z0=D+B7thR1z*V5_KI;!AhKh(>j8^N>hv0F@oLVh`qaHv>xx<;2uRfg)AF05lrUu}&Q&o%LpI;Tj zcRS%wRehPYGc4N29w=*<-E-B?r2^%ru0ZY#(Y}0Tf;-wXUt8j)_Z_d+$$|0d%x`4U z;vs>3MSD$G$~#0$i|i|r=)T_TgxY!Vppc`tzip?!Z!*^R#c@QDc$&2v4nZQ%V}6YzyN;Gcs`bcIoNpx)VLaS6g1q44ZGqg&FXQF1Qyfu0 zOx48W)q3>j{9Jo{hOCl|0`)PRCq;rI=qd>g>5n^MrVErX`!+ftU)u(^DTtp!m#{Hc znus>6@wtGsJsru}|6yUWd&A{QriGpvf@{~z$8BvCWBzpK^?&x|D^WjXu<=i47=*jeCS_s>}6ZFr%a@PJb*8Z}X{uyB5 zqzQo?4k!!^rf|~{&E5q?_8p(t7G~kfpOp!fJvj?pz8=7%8XZQIlhnT+ih|G7t2B{kXuf;RVW`eESaCW8CTbi~@UJQ#k6FnBAOxI=eaA zgZ+PEcC)OyGYS+>Q6Ts65gc)&l;kTOPxO*}t&Grqv|7*C$~?5;(`r4M#>Tpg1WuIi zg=8Yu{3%5O0F4CBT*xc{EIebT#jotonf#aq8AO>@6v!Ppg3sn8LX_J*(XB*VM(E^E zn0dU+1N?*RWowDLz%6UmzMpv|IcL1fXWhl~qwOIdIH*1+;r70)K7x=$uu=T-7%!l8 zWj98zkkvwGR=zgH5<4d=bh_Ax5m~ctIpsy>J?2blL*cnHQ;Gu`VP}z=wD06u1>64V(c zSVI{!g^NjW5xWtB2buZGDS$IP6pmb}i-76$*My{B5z~`k|J7TS~7w6)M)+b7!61^djte6Xd>{*O_!IZUX5R~KzGw<%0ez6+a~ znteK2V!j^_;;i*E@0P-JrycFLtJxh{CL@lRjW{>GZcr4Ai!2gqwEub!a>5{`?;NLB zIn3u~aRyO$!`pY`*xc%_@;OHtFMVU?-4dP5-#H2^;oEyB)+eUpdtD^d=(hiQzr9v= zj_UcAa?-pl#v70gd)gY1Tia37F#od?_ePJ4s6}p~5&~O8?%({C(ypFNH_Kb=^{PDQ zD565^>bHV?cWJwSVHp>tFf+b!ewi$9AdMOP+?&z}?V`6rP77Gzu5j6S%A z|JrM3*ibOXLHOMQEYp)s<=h3KI^PXY$~`Jy-BOID+(o>UdnnWjWj97nSa~_G1!LV7 zDCafTbzhLuVO@8Hm2ES>8kW4Sd*sK}qOO~$y9k(St>ntTkqUh)d%E@qp6`PG+8k$5 zc&gS%BAT+5FP&ndSvQ@UE741?*bwvVL|wP+EJ|9`Jwl`q(Vzdj+LZ1ie!kRMWK?ql ziQpqx%KiG#F`0;8ZjoT$arTL2?EUayXpP0|5qLJ!2e)&w~m;d^&8-ZUwg=J}A`Wdx*fO`l)2L2z$>>}oJ^@ju717`B zuHis_Ed!p5mtSR)E09|_h+Fix3*YSJ4^Tsv5#=3Zvj1>;)bz_485l-X7Ptbr1L5a= ziMo~N&n<9A`w?xiTUZ%1?}KWj!7pRJ4E=Kcr#eE%eyT{T}Z|_WSsiHtf%bM_GuPcKGlp3*Fui+3(|S(X1)QnTs;)^^Z14^wt_Y zcMhA_@A2ute(x1ber*n&!*s~Xs4nO&IeX;chh7#BK>p^xoDnwEJv)WnG65NPznlH^ zsIZ^ZF4#}EIosM#p`HH?`{~gR?WYRD?58E&yJkOqZa-i9Nlj)ytsr+xv`6=@+fPgE z=WRb#ZST7M#O#;#UkLlfhx~iTdZYbvq&M0x@UIed(%zDk-2&>3c6$$3H~Wk^iD44> zWH_KDcPD{!7x}M(3>GL8)o!T0oaYAf1P(<1TLFJZZzO?pgZTYerF=toet!eMzlq<^ z{*Lw_TH0&(SFyLcWOclo`GWp%d2aZNQQVz;^ovoJK<<_S+{Cdy{KY7ACzpLO%0lzs zXYM4Hs6rlHN(=>B_?6Qxny4Hc7x-{^f%1C3eMh9nxYK)>UwJef?LRTQ1rPLNgDzTNVa0(IRlyp#34oadBQ@q{qK6T#Tq5y+M`HEM+iyMwx~Ojc(Ug$tB-^8+6Z z&kuav&(}Ra@byLh>tkRnAA5I<~ekn;(MVVvyy!-pwL+@kAbJs^+ z40*oFPf4NpBGlru67{-hO7>|svix}Hv%lU4+<~X4cPO5i*YJ_r!Zo0ksH4S?s?cP~ z{rg=0qwDyO)^m923@mm&W->s|{&z>mBV_2l6J`-)hKYlR`7g+ag%!EW!IKQ@ERwWvEKw)9hwJrdX5Cy@A<@ZB%pb$s`UP?)_T%*Oj;M_&2k7#{)mX9(&%4b< z)aig&LzF|b*Ul&?zh1@*?CjNe>kfw{)>+XKD9?rr-PS?=rJ_&5Yf{VCOXxgV3seb? z$k_VevpV!IY*uBZp8j(129v^iDFJU|8I-cR&`xU+#XBY8s8^&_WH(2zBWib|4y$%rEA{zGtI=pB z$gA!}&c{{`!n(#_BWL{&rf{HsWSY9wCi4UVSslz2M|pRE^d(ZV>Z&PMIyI;6r>4Y4*n18ys-pC6;q?B6>lvG2V49p+07)>?7u7~ zSUgWfjnS*K4oCbwP}`TW?Q?OF9)6ng;5vaC)*S?1V8Q`j^|RYTJe{_rxB zEJclGaQPn?yVLY}u+AQQ96aqQ4x%njCz^Fe17=4sMMy7uV4Yqy$2k%6y+;I_{R4t6 zzQK9++B_%J-@&_nAoI6J3-OzY!8+eK@%1=iP}#+8`GLh{(nFa*ZrIKkP4AAGx^TPt z%P=PgVRk8p6cA|w1mssgEc#Wx3*P3t5SlV^Vz5r;)n}2{I2Aw{gh%G1qovWHs64s%N z>?B89ZxvKBh*tTVzmd0lh#Wdb>gjN@z5JmU-%G=c7F*P20AX*Jdfr=g3Xq{wd(l=?%e1s!f1WEv zP^8YIRfK;o*x8DB6$N|_jT+2)&D*sj)~=zBXm7!T#qPN49qHgxV@Sn^x~|_ue%eSZ zhsX{|8k`&L_R=%#k8Lg2*S=Tz!H@~$s|cz8x<91FTzQZvO>|UTN5;K7R|-ddFP&#k ziuvbW{&}gH7_Y;gq+n0HUFwOJ+7IpDFU)P$-kBS>EtH9@t%mJ@ zh7%_5TLQU#Y&?!~n=RUtXb;-x-EUSy4Ne(HqATwvNfut$RVA+35O$NKotW2hls*8> z9%dhkfkhQvHO#O1MO5!>=QWCH^g2=P9K(;Uw?8@o3c}w3Njnm`iv6Vp!E_DNA!FB> znBilltAKzm=e2k2ZpcG=vTgcjo&gBW;~eJn&-ahamFOS)#nL~+JpJ<|7k=?_6R%u3 zuPuef#OHxN)g2KVls+j?A2wRob$aU?)p{h8XM%=PL?$Tk`<+_LlR@i;Zj$I5pP?&P zF8DD+&C4!fO$c*RZ(zFMd4tS>h}8FrNpp51NR2?B1|wh_8Ua@ns8tRgsUK3HPInim z`L2?1L8y6IAHxM|iCzogDYiXERsb``D$Y(k#UUOEgLeuhtCfkq%MxQTW;2pyG1t~0 z4P=2DW-lKXOes(YG3(KR*kU&3iEV=!yGm9zI~~0wDPLOvMrC@hc>6K`9brGNa&7^X z?@x(l9a78e$9H7qC_Onp&VEF8f9uzOMElXf?Z<7vuQEU0epFT=Knxg2so8bWd9k#> zqwjhRmx^xouG2}tCHcTD@&ZU%^agQlGUuwzzj}cG%D!q30!Of$gLVGPiIz6_&ACQ- zp;3UQ24UDr!jZMMxW|s%6|)j?{oO690!Id${h7fQpOa{5uf5U!LnBjc9EZC%FEkhw zv=DV>7Eya4iARRTl=CYHgW5N-DGZRN&H#4>|5znu zgjs)~Z@E6su$Tw|)fGlFY`k31%eAC~|1F_q@DW%BhsdFiNd58QWS7Y@xG>tAeIs&@ z4+NdW8Y`6an95d*P1mKS>vE%<)#D&)X*w`mSvfEf`?oV|qZjRW0(AdXucPiSxAH6q zs|lh@TVOG!O@MWQT!3g+id<1&Sf@dGtq`N1#-Km zFr73V$Z-%Ru1VHXn?(Jj$5fnMEQ+&t+vKloBrn=?P+xkst=5iZuN@h=F7h zgQV5V8rHZQXh})Lz`?~Jy>l_>*nB=20RidRhyvo`0^)8*Ktz45NlLCEn)Q*_0%9`>NP02>$&3kzO9;r{d691s7Z8aHNGnFRK0b&7!rn(8 zUxWgJph#&w8c;w)emwh0WEGZm5yCt|dx)7v6*3X&4x+cjimh)KznhUdc-kZ+)1Xkt3*Kk$VaFcyY zYWr%tPi+5&CHd8X_$4{HN3tc^?=|z1obkkYuJ3!S<#I z%z6%GuUV%bz*zw834Ge4)v{%HM|%-rR6 zV&u0bV=_Om$HD9Z>VT(cE|p+zH9Lam&V$coNf6EFUA zbT=_qGvlJWsX<&FyUgksu;#LeW*xonKBLJr)D2fKbWXgV>*g#j$F4Xz7Wg538mDMO z8v?ltT5)}Q*s5SXpQa3Gn5GSA5HLE&tg#TtNh=S5Ow;-_6lnRdzS&TWv-h*GYX@GB zb3_La&HC`(`wRp%`omHvP`jYPv_29==J4!wx;b8=rXyiJ_Dequ-6Y(LC)|Z+Ph)+I z1XIjaRFAwE6OWQGo&6IbA9fza?ty|ajSGfd>I%lRoYqDprr$X620dRKi+ki&GRWRhf)1j||~lhnFEZo`+O zF_yOiIyOz|Q#VcPQz!6tR$F6YSYzd4I895fE705^r`t@{V}r0Bqxldj;7cTvFA)Tc zupX#G`DL%8i|@gmC@TfiP4Z&?EdK%9WcCuJ)!2S8%v3H(QW)Y(0mx5zKl16n*e0|Y zQSG!}SQ3xOyLfDk!4h$NEvtBzEa$vu*LHn~ND^4$as4-7_#y#D7&Md(^10y*drFb4 z>;d2qd#D6rLu-tx%JP) zliX=V?5iy(pqs7$L~J(xPk-}F++lwF@vjH)uuarCZhitB82|)BkpK7<4{dHix*UJ+ ziP?1%vm2u_^4nPaJ;BydZBZcL6_moq_`j4Nkl^R9)5gE7HD!a;$y(YIFK>jjRwR=QN?X*N`pCsn*r*( zUU|omot#s4?GwOYzzpH4InGH$z5Z=LO0^)vk*tm{;*3NBBbPRRS_9MG8au#{)$T<3 zY#g4qiIWN@_f@iUax(QIel5U*PO_0bdK8S>m+I%j9K>swt^B!L`4hG}#k%4eX7-C4 z4W&ZwZCPtd+2#_Tb8ul{zS2bMKLYe-WHV0fH$@xU3(=b=|9dn?Z|-M{TIq9Jt97;! zOoIKn+1G0aFhi|Br^CmS1D{zUzXEY=eJ^|vz;`S%3%o~(|y z6{w^L6QM34Y8XKu`{%1}QUGODeLEq##VL~ z@fzE_SpH#F_UY&(q82){#2&)LfFAxwjgHu~>PrSs_)@1QUpWOh-avle#O}yMUzI&T z@i{ZiyAchatbqlYNpe~rdaC^b+^Wag=Ko#aPMRg0``T+Qfs>ZK$-dwFM#ulf-m|ye z@3YwVuH@g_YZ2ce*obI(NJ-ZG&;Wa_>?9@OV56@Gq*g}Z7@$dceQ(0==QuNiExt>T zCNZ$onbFPfD5=P~ZKA(t`GYAl?W^je-Lo5`DcOxmL)$i#FLf44z9HpHon?}5K>1Rq zSMsH?#}xOnui8@*X0Hu4`}$z=GSi09i|w_Tq%7ncR+%J8(Uk1d*@zK-RynjcCcldk zYMYfgOm?7*VJX|v<~W%HbLvlXC3@oAS{<`OwPC}T1*GkRq!@1}8%z59-N%^@+k59v zV9#*ToR^OC3{mwq8&NH>I_0V)R-XIXw=4}l`IQ$SF9 zm?&Rk`M2U@uD^`M?WH{5_eTPc(e9XJv-b;v&1rW`N@v$c@H&%SQ@nPu>sBe2tP}&z zuOrG?`pCOD174z8KR9upL~r{RBZP36C@`nBVa+f67B&$r*Y)aL$=D-Vcj=^?uq333 zTPnP8&Ot(r#6Iy<45MO}jo2q1l{uUN_!nRmhZ=oDvtb0Z+*`(o;-&jWZP0-RWUtH- z4`hxn!hSGZ{2-%dg9L1RV1F9F0gGLV;gzhHVsY~=QVgs)%qx6&;AZhrADAr*4z1-I zG&fS*$j|rH0$8A>(d*f)6k|e#X6;s00+oNI^vvhNK7p@I*$V7oZGhp<(9u}YGpCoW zBy0e~&HOz8!^vu%)59GIK*DGK!+zL~TZwWivf*1@uj+{Xm6=j5nTZaMKdnf<9%5v$ z%#LzFU1Q{5-z2UPS-Zn|3>U|xAjc=LFlsX&KK`$=#=tw?#-n-$Os6C)A%%kyDodU2 zsyydSu)W9%g4M`Ig^RUn%Up@>{Tjuzh#bgs7NbncPA^Wb>?|{)tj3I|os3mzaR3}e zc6ynjy{QTaU|~0#<1E9iimzRmYEdmBFxmxxqT%ssva=YG#h?Gd2_5Ua0y&cXH+5`@ z!x&WTV?(pIi?c)Lspl~<{`RW4+58;A`B8CxYWV!D=kp`Lnh=(2K{{(pk-c`Y!(Fx1 zc@tEpD|t@0tWL>9GhCgKC4(!%_xxg6U5)O=&vbKLb&!CplzwS~~0YO|09nM%-X3(9g0tm=+s6LbO6> zDO<6!hSM~WUx)cM8{JZXmSQ7RT%ZmvP-n2l$;vx))7xM&KJ*HjjOCKK;JXmfw8H!k z5(AEcl|9T}yIk5{1f#dqS-Pv61VqlX|DCWeMV+`WdFeARn2-lh)vrf6U{iorOPID) z8TISu+O1#z4ccF2Y!5AEduS21NF(mDLjzpbm1x~bh=UP6*@iQ zq8Kj*{!Ua=b8?MBC#m8?ZrZV#w7Y2ibtj;%rIZBrm33LH)vB(GwSBl0IomNl0o$K5 zjs1B>Du{Ry-=95vfA;XGMX^!CwUs;3i?i6ktrvTd7*ur%bioo>qj)}x@Mmw zD<9Lx53bdt9`?dIQ=MposW$Y8Bzbgbdb<#f8U)wut!qwN+~)byN+nXzU);gZSR4c9(BLj zAdQ16Am+baz5xniwcO!fR!F*>$p+V#j~SOQ3m>dN&Ie$c_%FtaC*vZ-FbmBjYfR#ZOCpxjSX@%^=&@2}-taBH}XZsFQ`8`svt4r<`q zx~a?Bn(u%_8(1sUc2yp_R|J@2m=-PqpbWlY^IZ*LLGgE>#0>VtO!h?Z%w1>{KoCMHbb9E^m8jR#+4yGwiUrf_Sxm3Hm|k}?y-t{3_eAy^ zN}Y}07978;&^~G6P9q%IQ3^$x+NU_Z2)lw`&xyE$8jbFzq z_c?RZfjnms4zv%3^+)WYR1lq)OPo&_k?z>AX@yP~j=IlD@ILF0A3>!R27JWVga->@ z8qJym-_CIs(NX*>4o(K40d3fgcXKzF*%K~UQ_P;I+`$B&aKUe26Vreb!$xQ?-B1qr zojbdN-?Ikohf-!gc$xj+HPo`m5>;M}b9`jJ9mzc2EEr2bQeY&tLg+upVG)}jR!9Y>?`fE@i49YJZxeMbLg3TokaQ4aeaold{uGzsxsNV z23DMlAb$zBY3Y|WXwY5;`G{!Hx(FDw`7NWd_RAjaL+@E%tw*i+?SVX}NBAX0!Y@g1 zP*gine{AEHRUv%46oe+V3Wdf)zutpF!`C$znvZ{4DQ)k=g~kouE)$x9ZEb|63WX+Y z*qqe6jB7GxU$t~*Um5z%V(C!7t>)4cx4f7Z60RHp$Bt;$h8v0{+U=jhe^a4b3o~$6 zXWkZ`FMt<7&t8UoWQ+4AHgKiLR&10rYiZkFm@A>Vucf{E+6K5TV;v+!8+O_6mP^}b zu?l zd|$@#-Nwgv3m@Mte0&=OUyvy)2J*)FYNe7nYev{aOPys^dCtjTfKYo5aOL}FIjfNG5zgs49X+%UuL}(^vH`B&V>?tkFdcvB{Zj6pG!WmwK-PnQywhcw@^~8^4 zb&j(*Uz_0I<^2R_Q_TV}qyxB(3#&J5vJ+zwn}L7lwkNvxwS~^fc~!z^n}hDrYR-F9 z&e8Z9_7vG!Cbr*eNNte`C zdIzO4j&v)&iHTPH}LotQi?h#}pBD-Fglc zl4)sEq+qXcSW!U#7 z$0u0DTQ|!_LM=W!(X5y3_eo(oWY=0fI*utzuTYky!s#eC0BNQ;P(=fsl8>!)>xj?- z(2!nwnu?KQT{h6OcPqsz-6OHNlvqX81k|(QmpvfzQ z>B$m-g`+PBnZzjJ-sH<%}Vp2@BVTTt7r0s*b z%!N(Heo2@<{bB+>N!HIDPKt}?OWglg zbNw3T`Ze5vea^NnVVetEovm;%uia?VXx7%J=SuXtPxyWYp}>iJmv1Y|T3VwBLyE|w z*N8lpa?r>^rh(x#uOF5BzkZ-I^q$4&6Mp4`Vn+&)g`}340df~JXIiLTAxLe&NMfURw)N)&|y9 z&jsFBudEH+_ooeTUCJcEMYLfLZe1>IzZ=HxJtIbU?{wJuC-=h`ox3DV&pwghU&c@m zAwD<8FQltqvI8O}UsWhy0o=b^xqO}E@^zBSmrXF!@?4^HaSmh<-5I7fCa<8N56( z)NEg|nValH<{~TfN7$r4V!CADIVpC=C1fJ%IISc_oC>q|82sNFt^UiHdaJ^CX+F%}!1M>qw=@p<218Wn<$xqcb$c7z_UU8{qe z;4*oc+$%Wp*MPMBV#AdbUcrr<+sHTuZBc<1Ef6Apt=_@;&gI|bdD6be4T9?89+rAKExSlEnFu zBp#Y}0M9@*cAO!skoe`XTg3h=!WCYYCcGf*#@Ov_^?)AFRrv=k&ON4ROZ z-n2DrF>MWXiKgXxZdwxd2R9q9T!f~j1o`pXj`&3)308{d(0Lt?rhqy z#ib_Oa=pp6q~o5Avn+iVaH~>6mMpeNj19#687jpI_Xwr<~%?$?VrXGxWTdk_NO2dl9^^i ztF(+;r9w0Elh7*jk$6}#aUZK&jT(|8!Zr=lr!Q)2oSKh8yBhkNIsZKLWQi%hywNEc z{B*}qbl#M&-U1PeEs*l-2Nk+4p5d*>uVWe%&n~ThS>%;uw!M-K$jt9%U1^Vc<@wGC(Ud(fr)miD$UNVN+;NBo-Nd$*uDI9YaI&YHI zJDeU_CxS`uv!Y2~Mz31Y=D-N%w_+cgcD}mryi2U^mTxh_U|vjQIgIJbt#G$IsUD_!(CBOv%LI1`k$fKRh2G;KVX#jd`_f zRTIsc^Xs`1z5cK{Ne=A;bt^nkWVH}AW@HlZelWs4$c~9ErF^QthT6Ke=)v_Xxpq*3 zJfng0FDol}lDGhQfYu9}qlqY=(?4zo6Jq76xk;F}IKrPg-a*t^=~Tgc=ka^X1sj3| zcY#tO7<_@ZM8Uuw9Fl)sACiccJLQ$-(k?}kr0t{G?mei7I3a)S(dE*vABz)Uo`2R| zd|Q6ma%tCC<9zs|?#B5r>+LRU-1)G;AE8f=gZ004%ufvX6?#S0alYrMkKxhqlQn2d z`Z9^OKu6N39iaUeoFmFtaja3FlTdTC8&Tf#Wyf+CN0XezHUYFYgeXS@f6&vJ9B)l_ z7DZFC>w{mR*19_cygBM+HEpXi_9jfp#IL{@y`qAN%WR?L{cap*2MVd^BDj9C7P&S zjDOa(iGPBDN`i)gN`!%0MzmqKJfGA+r6vQl)nuSD+gli@=Ijvjc`s9O4W=#Xh{-^O zaOXB|pn3#)AhWOL$8u2Ul4o&YH%KNXX3cuXAJ9Ifzz@jpIl}Kb#?ukdpBVPuohB1? zTjKt;Cb^Zm9^;%f=GdqCGlSD>R+Uje@aR0Tt64>g!v7!nnRNMFiC%i>yXR-N6Bs2% zVAO2{MzyVc)VFpuKeJcb_miKwXYTivpUKbv_IGstm*@0~#LF__otKIrYjK{vcAhP- z>JH~k5NUQoz;amVQ9J5I!5Z_p06UKk2 z*>^3Jx6ZJ!?v>^%9$O%H%Byhvov&m?ZzjsuvT}enRIv5^Ui2ox8tThx`@8b%+qVio1~N0&i|bBo&3skLSBq?P>u*6pY1&-L%urfmI;99byIk77 zB#D_xZyW=AjN|O>+{WBr(dL*v{>+oDM$1pcYP_g@8^z>5UVZ-lqmkufIE%uA6zkJ% zWVk@gu$XAp{9oP+n7v0a{hO4L*GBb8nQh$-&-}8jvSc9eSWA`3_a*_{-^3HiVj?{U3r>7bf=O901qmvl+ z;YC)M0vGoWv$%iA{>?w|8YCGhn|Y}zRxIz&b57>zNw|sIYiHT8B#x(2<3bcs#2J~w z%ZVkfDGl_NT_8|J$i)X_2Dm=A!dqe{B<#NUFxI_EA|H^xlWNj_SRNuWdtlmQfgZMe zj+vIyNpY?6ne@=*8(_8k)m_;EMc%MY8GYx2a&PjqJ2J&XVoH4~RfbizU0^J}=mkSuLE;^X6B7iAhS$l9>t?RUihNVHOy8I%O! zpG!e65dInZ6s1t-Tf{#r#?QR$GcW(F6h8y_kuv@ncmdj$Dk;Xri?k(%nX`uX<_yiW zeyYdfw{`YV8V4FBn6YCbXBVynM-*9Y4y`1P-{(PtAAa56H=+5^uhbFceWD5jLp*AMg(&yiNc~5t`AVuIUmNSds?h8|VtsMGGRI+ytoc^g>7$FQ z^~f*3)!PI-xfVg;MFd(Qs;W3jPn1{AWV^+Ph4S>)WY1a?Fa8P7qKmFuuXp-F*wd~l z5_{U-uVeffSCPO82b(Dyn<-m?T9Q!^`n!KHQODcp*F8RkOg|e5>~rj;(H~dq(MDOD z?@WjM;GB_8|9kn0(-}R~N&eZ5DIMgW@d6S)1~T6#F~yo_Xw zz&gB5G7(;DX)DED*{Aal)akmehv||hATv9~9-JebWmM!gl+RGJJ-AmgXsC&n_DyvK zG8P$6p+6803E|GiEC&bvK5)jev}gGbN4V{)_D55)PrHMseIrfyIb;lV$N-Ye8W6@ zzcI0+$XG}@ZB=OwY;lO3|KO1}!Eqcn7q3B8+SDM3L?jl-R8h^RU?oNC?5|G&7 z#8hdZmRNV-9CbQiN-%Hp)2CzI*%@fBJK!PFF-xlTa2L*mKfk4GIa+te#|xQ*e6B*; zX=86}C;k+(FEUcwwJ!jXhbvnIwX$Zsu}GpVdvTxP-uQ`;^CWtJeRjZY>yBc(d0&M@ z6dO6_TlX7n>4u*ySs!Z)a&D!4zO^EuEdz6* zEgnFG!nRCsV_PN=Y|Dp#;BA@UiuNVi5*LpjErbTWd-Xht{$WpCTWa?hZAryX=51=z zmY=n0OWKRw#kd%4DdKG@#IS7FHX0Wc1TNoYP|{MAI{gdVdyogI3_= zsy&G^-4n>|BOY{r5rCBxQPo$iXSZZGMi5*CE1E+szI+;c`K(z(o9P-)? zc}1HfqAc(Pa<~7UJ+co`#uwR#OOXnYo5e-6c|o-vS!gk%v#{}-J>XkrYuQ8ha$6*w z3!%ddlglyG$`@xyz8?F_nXP9bnsxMrL22hDY?%#MQfun+ZE&s%{>6}OwV?Wz-3t&& z7!fN)1}98@kyUr5Y#2e->oI#K#$3<- zracy7O(A<*uzM2vw8Et#l=`V)N;7@?1O6?9U6iAA+u(EN(Uvvq;afLJvNGNi$esE- zu|i-17Z=f=-_L%%#;7jBaN3b%HfKAZ3T1`)Khw=%29eEY<6TMEe~aSzANS`u9Z=bj zZuot0w3SY@w8EBWL5pVqZ7;i%&Eo^dY9u79n!kE&B3UrBg}&o4wgaEdI}LSAY0rBfg&TOUTX8@o!q}6;NK)6ro?04%{-5M&vn=IbTkN67Es~U1B|8Tbb!G-p8X(+C zv|)oEuYj@1!_pms4n4Tw>QZJD)Z!y$=U_N296B+(1IXd#Gq)u+cxWs?d3{5QPyS3hWmb2OF35(5CCb#%PLiaGd=& zdpdsGpgeo+9nK+G{>MjKb`Fmm1&e2)>dzb4wS=Snsp{iubdPgWGQnM2L>jMvT#MI9LiTt6)1c7@jxrlat}XNA<=C`^(MX1$qMZ) zce+BorWK0oQvu%36UD5JMXZfQM4jLw>Qpx%gFpJX1;L^H!%He$cin3bP3y{-9omfgwT;rNnU+Qz40_HpLnHjgkIC=xhhwTEzw z=RN4V(?7JlEOnuuy*XoZg|yR}FeoMS@0)86tzfoJS*oujY!5-?gU^e7WeYrWXM@Dg zAMGob838vdldaO-tn*bb0wo9#zQn~_#V>) zyLPAW2`*V?p5S;{nSzh1o}VBq4_qOpB2HF@EK87;*=fv|2%5LR$D8#QRah{OhbcxBQCJoSr&2K3udA?-|!ZvZosVt>R8B#Dk8arTk? zO%nU)wuH3{^v$H|wk@W5 zu$sxqRZQf*wi)DIZ{LO3zNbE~l<59XleX{XuC>p0zU|8=ffMPheGb+>2hps<4{;%( zL+-291G#w{IB1Ra9rq{;^Urb*x<^?`!gO{?HB7IA1ooxxr7I>?>(S>Eo_}+^{VL)| z%gmL`K4&qn!ewhGROcH&RH-CP&wi7}4Dqp7 zAU^hDyY}yW@%yKE|02{Pp*kPw*d$+kFo{V%Z{9}0$6XO;l+X9YwK`09=EbeQ`F!9! zoPW7X<9C1C_Q&$;{%#Mgis51`MG1gjT~E}3cl@X$^WYVwLZVN4%;o`oeqrYl^2vlw zC1ir=DE9DwL=Ow&dw3r5ap<3M@{tnXPC8@4ca{%d^7XaESW5*&wRPY%4!royXW_&T zK>&o;=x!EX;}0G&dyRDRg7~ICF+NU4ykc?Lhj%I;Byhq;l#x!NjdY53U&bEoVC^1A zH0zS6VHAvXlE6OOUV7mEwR)Jn!GYuRHjGbWyW>OReJ}Bzdt$B^cgL7xD5h)tXEm@X-8r(d+*-Oe^bcyGMM{QgAD@2$z!|Npvw4c(3Yfk*%B zv84UWdN4`5IM)R{KKkMr2{AC(OC6^8f6ml&dnk+h z_nADZ0l24^q^#A$!8&`eKTpQXwAU`k0ML!t@7=CN8TJsK#V*PsISaDvp^q@5(S`3{ z?4d3Ay~piZ>Sd;iEhtKrV` zM|u9#1EuZcP6=&shjAJls`KR%)kc&)P6D+uOWDhf@Z!~8k>$-MRAm#Ikb*?J-y?*Q z&dwDlZuf)OZH9M%o>&QbqN>CAm?{734XNGyFWv{i6D{C(^6>mNxI*I076W1(;`_U) zUo(G({VHGT^hmzJy2Jyuf=4OV6(3W z`@Ae3O0>=Rd~&xjK4Zq3>odjp#PaiDeO@WnXGY@sG>y;mT^OG=Nyf)_Z{lRfasbTr zQP-8=_}FVPgF-;QR&mJJ{`Okg=@x*mE(7qjP4DT?Mej?(bj%ph|LperpD+6FZnysr z+;=|mJ+=e+o_eQ{?^GufZ(ExVTw!z|Oqcxd`;zaP?>c|;yEcCd?-27h$C)7@cO6Ww z(>s9NZPWRy?h>8H{HvV*)%@Z9@|@Ime<3!aUO?0=k~7uje~73{(n(HPy5DcFEz5Ab zmSp(vw%3+j;&v^$#6P#q-tyYnHB7@2p!Q7xeD-f&8AE=dE6z3?sVDK@XU6xl@Dd*-$eO9R$6FypKf+kEI;eeq8xu?M;2vXynAxH5TILVtW`ATSc7zk;Fe+)PDQ}X@Bfm1F0F|Z#kq4k6vYkM-H_}nB2$U&>!rlEt?x|e?R^Amb9z7yIru3gc!vB29OU=W}Ce%?R+ z{b=&{E7zRw`>#(PKXzgK7+&m7Cu)ACekc||Hoftp_&2@)q2rkRb{aqaPwyXnyS9IL zM*fHPkN9>O9 z_T_8?cgEeZRr%iKC-iom06M5`JEK+R^B4aUu>K!wSAKq!ynXi=sIEmOuY_r$8CmDy zl{}c)saNtqob78qA2H$kzSlm!uMz)gHUpMuh0aU?BjpkoL_q0dF;|MLj<;bU_TqG| z*}Z>`>IQ;pF|QL^>MR9*p1dkvobJeT7TNpdIWyUnmtDEoRT;Y?=GZT!C@#f3ECT6a zo}{?FsLQ8b5g)%kdk&*Us|{yuC>J)&&+FR-|KPjWCm%l>XP*?_YS<^wU4FjyN&Eh} zuur<=pI>>RGylBr<=@Fa|1as!Ew9AKe{ShG{&U&)ra%8%{!@Ki|1K%)uz&NM|F8A$ z#>UxX4P3yGP~xqWzj^7_3|tWoKv@h3R`SjorFZ+2z~ zZNC+Y`e4BK!+_U`=TAuPKY5epSHz46PX~mRriGM~(a}O$5|>(`LBk$S=>IP|iBCKq zi%%G&QUdG8h)~4zgRG=FWkq({+EWzIrgadVNLrnC%ka+TAEOi3i0DN8`BBI53H$OO z%72?N;PU^+PWsQ}|3~LL2z#E=O@lx$nAYhkz@eCOao2`ogcu4Og0W%BP8%PP{d#Gf&oC z#X7NRX!1_jYgs3}u}*Z&KPpOYA1*XQLU++f>~o;gL!8Kvc8tW*I3ux=H8|X*{jIbU z`FgG$`C?LECUX$BBs^@~SCE~>^j*n3GhGItmFU^Q=K*7LZJPs>F2z58+IIfp`u`~J zzX{%(HP@SjIEFQqAZ^FE*UeMeg%V#!*Sc!tcabjVcRhsqGr_878 zeK>YX68z_L?DN9f>pti_vGyVZ;uE5;woAaABnozOjJ&0|E%2}C<8j`!QH$E8Rqk~PTK!p z&@b1Yj(#`&^7IA&`Th0(vVMKK|9{86XtVbwIloEVf0OLCtf_85FryWAb5y-!xUoO> z>lAKmM*I$XKIbFy%?5FhBKmE5)1lrZESKB+% zuD>MS#F<2gR|b?3e(`<=;1X~*{aCH+sFpZ)IX`=7DjzlZ(Lbw2xF+V{QxO-~-b zyE}omH5rvF^0ej?qO_WWd&y`H5A{jjZg7EPvA;(k#1=HSudJ^CmH!1bnb3L5Z1zhF!&SJ>B~}HmNIPHkP}K_W!Dm?f|26IOzvHf6a^3lvYWK`tCRiX*X_iAI^RUXbj-`=83pRqwGKwco1=a9&>YdRnMv?_0=T|S zXXtozuFP?|vKylpumzY-v?&(E!2`Cgz?q)E7)O+Yr2fNHqF!$!>e$}0nrE>QRUTv` zIbZpQgO5&>ld`gxUT|!U9<1~K5gQyh(=(b%0$=yEudR!n!kdo7oIT>oDsIs`z@O&) z+geKd{M!QjHLwklFG6Poj)MTaNJyYCNTJm*!T_%hbEx>MWPpe0c6}T?gdpltD*??m zG!<_8;L3Q!49;Z1;r!K#^?(nC_r7#p9Ck+Rfr!`m6kt>Q4)0yg?=8aP3(YFu8j^Nq z8`u=7h)n_Up&ue4yqSBOXlw;)4;_oE4;p%nsC%l4>v99V5#Q?IZ}lSELqeB-IR$Qt zX3iD0uCa(tl3ss|x4$}iu8G52V3Q{8`-}LCNBA#R^Ixow{{`YkKGk6G@8hou`LAmD zueQYh3Xy=H0yO-5{KW|Vi*5WD99)0eq>!{TOTfYJ?#@v_R^=oaW=JQQl`0CPJV_9Q zaQ!_hCE{n%OTR^^qI6UTnsvsR#S+yPAf{vn(X1anxJU}qCF~O@_#?o?_Vv#O#sW7Y2C|vjo86M#nD`k1*xO}i@093mxn3FNth0qS+57{eAn?(z)C=ARG)J2n)EE9J_6S{@C_8^^`w`-zoz{P z?YrVy6j|J9e8j%|D#Xt-*%-pU2(kjq@5`oW{4jL zYSxKsO%PM~X`nR)e(*cR1dL?-;POENp~>_E>!R#HYbyNe+bb)josPs`E&EN9*K~&; z9RIvR+L@O4g9ol@^BB+%f!5xO<_B7PF8V>B)ds)!kFS(=_DlTznwgc-&i=`M-wS^A zL?Bt`ezmUxK@!c)Ok3QVtO116i}4nouDjVYl$UMzQ7{24+rEl|KN%-_xk70_xBg*5@LYeSU*45jDL=HY<3;3f94q- z@G5p^uwKu&eiMM+7n4A1zXcN!Q!7lDj0a6J;F<(9t%;+BK*XVG$*C`xM}>K1iY2~T zL>>0l7uQ;dX4Qv#Ia`Ce)LBG5b!&Ci5p3}d#NYLc{~fl7E!sKgVibXWwEh{L-U^Kz zIO?jo025<0a(#BvMn2o^h4`tfydo$8K4*4gw$APd#ov+an11{>8YUX}vo>7pmC!EG(jIxY zLfXy5i;jj{5bDzUThlGewp1WiKDEOw2+3%zG~IH%uu|I1Rwq5NhuwnE$=08kZaIBd zrL_A3z*mD?cm? zaZISUO!po5MWwWR0DF`RZn5DlFPLswysA>#J&@fp5N_$o`ISt!6#YRA&S&-P7DQpQ z-f6n!7uHH?cVBkP+i(j)$XUmmZn-bLQrgXw3Ed30^ub$(n{HXTr$X8d>P3ND((smV zhQ@Bm_@YAE%|53ka7$mj<*4bFP0eD6C%`QT&1bDO-7@f|N@;gLWBi7|eGY()zW5ey z1%RMg$*F5C%nHc8>D09r_>f*RsM>T02>jP)Ht3Nbw5y|Fe|9C0|BXibH&o~Ar%JTB zRX5}CS7#at+pVp9B}HG1h4J<>XSXCA-Pt+*u6_Bh(Ec{XP=it+cT^$k?r1@W$E+PQ zK}Mo|`{8i3&7y;1E73ak{W6KZ^440NgO;X!eho7shyDGUQ5Mv%jSo1&bl~O5x;ogWgk>a5IJK{U}`YCQ8}ROAE(rfQ|c#XH|HxYv|{<* z#AGP?yRXDhZo=nxVt&WYcjB-c($cV(=SGgQupSn$NgT<{{!pXe0rppzUh)FID-%cR z{mC_w*`BH=$`PUsTXLsgqNk;UdhEOGI(p|2V|czkErzF5PwrnOo^R71vS$8t}8^ zhC|8hug#kMHIuqv4zd1}t*k#KeERa9H(hDqc>h4K%FHRJOT$fgWb;H}ltJHy=LoDY zvOZkhkZi1Ybu$-A%dR7qLV$M5Yf{>XnFO_=AK{Ed8wt7uml)|(O{e(?E?+V3b_A691@4y0J)&8Od0kZ8>A zdZodach~i-vgLqbU9U8RdLlV5qwAFh+|Xx(V&{A3O`J2r;LEdLPb<;L7yMMC1Xst~M1X(iMav(fe>RYQC4874nLWaQ+pcR?kT_rw`AIap z0KCF!YT3`C*&`@%rjoHG=WWo*8~nQ;Yn0GaiRGU&>ix2D(%PlmZmKRG#)odIR#2ny zUqi1nz)y|FAK9fZucc6hplv9dp5~!f8t|9BBOvHYAb2vdd?A9>l_urK$RXH0+5g>; zl%Iv9Svfi(6c>JfohuVb1dmr|Y~=8Xp)Ev(ub#1yL%B`venc?qgt1O&%LCrK*-cin zapeN0KPwoswxy%f1qg0R?O37~aH@oH|f1NumyFJvO!e=J% z6;t>O48EDH>Z6f!FW~T;o1asBdAAFM%-xw=%oH+1y9L3Tj+YWb!v=JqeFGQvMXR<0 z^GwSFew+uGUEyEA;Z377q?R75(bYdnpkMrr+FzvvKPSP@3DGZhKF5qCXq{=4W)M8v z{B5q8T3`(DtqYB&;W9uvefmZY-!=r0?m2xU^+Dav+BMK<+99%sdDzj>=H)rrZJ{Md zHr}h;&EbN1w97~)6}*eY3g|K-4{+=yN<%%JQ77`fT}sF@*0q4cediG>4xGxU2)!&V zjEY58gm19Wt{=KPiAjd!n=MFum)KOSD!P=4pqXO}P6>Rjlmwu4N0ru~U7CWBG~0%x zB@QIt&-!2Gsnw+KJM|!k@4BH{VGvAl`0^f|qBgLwK?4gLeyP_6XuQkHCX(kMaUnwT zH7&lpIaAnrOKS<4!2d}`Lr(>z9!a!(1Im4$e|(&xC?$d5sk4d_Ns$3~E^xwN-vTax z*JUL-Uwg~<2@E`}6J)yjUqVXa{-*vq*9^ubQ^I{8ryv?Ikc~IsJGkt2eDBO^a0b%9 z&qLBen;L>e(hTT7T1+Nst`%h~p{tpm5nbX7G9e3OWI*C+Bp!!`u0>?-*pqS(@Um#o zQg$H6(oPRoIFQumecI+!Hr9=BakzaBwM@(GeD5424+v##Buoa)`hfm{&!Hc9#cGb@ zTxkeO5s>L1(+15KbB`~CigKl)u`E5MLhXV!@0&ZoZYjk@1ao_d$PNHVz(F z|5+Lm)4B_CTK7WPX7c4tN3_2g66ba|1x?Ty;DjJH;+M>Xe;R}TI;#Mql?hS`l4h6+ ziKDG?a%}3|Bi{B^!5tt%CU43>8E+NNqhwKxH5bVwy>i(@Ye^KU_zcwJQ>f zOr}sTB%UPT9qmcG4~zTA{u#WUKuNg$bWAsMkWcL)RX!!$Klzp0xY+&xYJV^yf2U`L zjJwG0?dp!CS&%RiO3Q90+#{$7x3UXjXxAcn8N|@Wi>=^axst|TKD{F%5(Y7|xz!BDiN{=+*kPW`cEcP(nH-y0=k_fyT^uzf*DOn9`I%{h>D+= zFW~U~!?jIgvI=n^IHwc&=hsKaX6F(*0u%P_|JMy1%01{FL@<(ak!(CU1y&fY&uCHf z`&qm=D?JXmBN!v8LM!$3`y-`a+#VM&U#x=lNhBT@#Qk{Xz?T(z8cv*R%?u#f_|JP5 zaQK6ps4U1rvhmUu57F=O?wg)dq#~{9 zeK#7$%ECKL(BTkzsHygB^7DxAVCp?hobH$!j{oy3*PSc=1723N2zq7!HQKE?%=vc3 zyB-ejzcC)tZ%x#AD~lja)M|=s7XAyMNGK}XtvUFepY=y|ljC~$n~re3Ffk7T|J@SF ze*vm5twtNU0B#@9qG(mOk!)UyG%XQUliiw*FZ@}5)*i_NHr)Wr;?t!II6Qlpwk)pv zMpY0iBiAoyh^4=lJ3=;(_aiH`(cND*o~^!4hWT3>-J40xMkD%Ho$GpyUhl8Jlfy4v z3G{Le(?E--jMKG7W!+9S3`M_EQ3KZjJ=l(~BEY_da2=iB;VH5Dv6do6=2tOj8D@}r zVE)^MBdGr@*VugF2!s1V{KVcWrJ|1aPc+bmqGePCmdrnVInsb~jh}xxk_@|>4SSr6 z9HyeGhB-0_H(Wb^0f+m|d`?|@#(VaAIBc33!3`Od8w@s$8<5HkIT0cY;a*0{3^_P0 zO)s)km02L*P~P-VSb)dV2`sOdF5s{{Bg~nfz2o5maK63KmT6$Xq*GvA<27I$@#Uuj zm#3+m`9NytfGO6N$z`RgeRq1g+B{P>UjL4V!$+qBKxvU{<%?@IfQnUsY!Ltz<7255 zARGQVB^ICvB|OYjr$3Kis#l_v9LBZhA*mbr?2e@AVfCdADy+67^Kr8K&Fua#_cy5j za}6E(M;(!|H?`f2MUaiZq~Fg8G#*_9v%2gxHDnnPavFVMOhAdz|1(u)u1W0Q{`4I8 zul*N9@86?K7I2t%gt_mw2D*QrzCPYo_Rnh)h{p8r{%uH6`R_OfJuq8S7I66G>xreg z?HbKq&(hoLS-8cZ+UxbNZ{Rw+2mbX)M|Cjig&1Zqs&9^V$@C(zzLgz%i zhr>@!13H&R(s|W5jn1|Rp`+2+hM(b7q4T&>L+D&;Sis?l(+Hh~aT=X-^mNX_w{a?+ zXT7#T-^vJV9$%vc+6$gyhwZ?2?~b6>P(iwKfK41r4s?MS>t#anHNAX!hsKh3nvj^* zt0WLI;*)1<6r}8OL)3TdGmm&#eCfxjdC%f=#>h)WoKL6vBnsdwl=mdQ3`UM=eoCAEu#PBu$z2;o= zQ`%$lzjfslXxBicO#?d%N#?&CA89~R-@n3#nlc4Uk=x=vpZR8TN&>k5ddLgC0feHB zW_tVETwRbf+Z0L#CY!4^8zXGClLkHq^q%PBY6q}nGn*Qv!97pwt1|4QA>;uCXUe%+ zp5r*yQUiZ=N=aP70>AjT7<(xAQ+x&!sQ>0`>c82{{5R{F|7N{bWra2MR-2|1 z{j};%4(AS`)7mAwF1tO{OH)PE`tEK^oL1lVof|l+|1`OcNIV=eA@T5Tn%nvmXh2gf z$hS1zNVD_Hb4Oh@Cd>U>?}KS$+&2NO%aAlN14(l-aq(a){}O#~k%?w=dRaDSW!U97Ap=RX zGw}>M@Cr6C5K(E(cxaBF+dT%Z=|eP+#IyX%kqw%5XO9CYMu4^0q=dRQReU?>>& zwjh38aQtrt^}mc41|Jcm+pT4S0X{uslv5BtEf5bCh%JKHEQkjS#m@@Gqa^_$w~d#B za76Rs1IXXD{8HpQY2a7%Au?9^pg{Zu9sd;7E8~&x8v`<&MoM!iwLtu(Q2cvAeQ124 zAyjbSw2=D=zv3e}4g4*?q8_kwQCDXfoW&Ew+bPS!DJPpi)J%cq+WmmUPX+P&Lh*;gTwXSWs?MGmHb{>VAx0S zgd>`cg50-x-n zj#D+tPBM3RCAqo~^xNGhYm}Xk8ul8wg7l;p$(0HEli+nHYZAmy2LCld{3P>CWPe+* zuXN{&VSA|HkobOqc%l~4_ry<$ZvJ>5pq|U3VjiyW8T~yDJgfhb0G?zebXfjgV)^86 z=2x!bIL;LHjO|+@G8CsP$al)H zupjc(pGC?CNNK?P40^G%liqm%x16X^vg>f#iA2-#=)nYJ=$$zJ+0zi${sj4~bmLci z0wTHZmBU6DkS~vXbaSO;w}q~WENGa?tky$FJXqU}@=yCyRj?5{2{_OOx|Fs+&#Y*3 zjUw`^+d>cWH6AC%indg{k)`UZKaRwYaBYN}4G5nVCVYE35Pr>SO86|*D4TP?PPS)h zgkN=di_S5-6EXum$7>V-7m26v6~_}1HoGkWVRxSGh`;1y`(K9ZR@nJ?{Ew6R;=s`? z_QQpM>6Sngi>-XZ$L-FDVX>M+5xdx;UzCnAUL6M#Ao!aO{LgtY{aYukbF29U+u-WLTT=PnT)cE*BsSr-eL-{l z;U{NginH%_Kezkp7{bl}XiG(E$X5g#eXGDPBT*0nkN>KcF#j(Gm z>L|%Y5Mm#TWMkzOE)L&z&2vfs)fz6Hbf@_8pZ|eG6RJJ?w_R%&7mczY5t;0KZ;yjO zSgx&ZXHO4KF5Z$~BuJ2LSWjsTt&j#RnQkTl0cB_v+B^LZtJSG`xG1n-QV zpZar}A3WT};fArv=cmzTIrdo_kusj*4yMU6brXlLGA5WN$GqLu`Z9)xE{`7S(P2X2Cq?gFp`ZYPB}TeD63kX|CEUNPp9)g zh)(|wj;wdEoJ+*~j0AJNa{KdYOmf}3HM;(OiSoN*^Cv_*^jF1mj{iYHe#PAl`P-ML zWjBYWfsd;q1<4aG+1-Vu2>$Cr3S~b?B;mKCOMK0SN_0us?-~K$*Ka(pAYYx0$Y9E~ z>Ab~eVZ~W&8LT#oEsK?ADI%NAGOMl2L%onZ-GFirK3o@cDGFd#TEQV1U4nAob(y8^ z{EiuEBD$nRbPS2kvj{Y+r0AlNg5rM<)$hs({-p%}(t^f!I7ozHu{_UyyR~n)J#$H; z-AWAqM!OYh?V24G^fL#^<}bT(x_lAIZLRf8buG5)n#J^3{a zNY3wB(eCCUn*$H7paV15PA!}N!TRv3JG7l%ISFhAB=vpZhv5b!r6{f7i>Cg!-2C)~ z-T57}GL(iAaaINr^V7*Ux_yartrs9U{}LKCY_wY)FrkfhYcaW?ID<=vJeA);hD&yu zTn@cM9Y}H!t(B0?_jXwWex>GlwiD373C4x{FP?7H`15R{{MgImpRc$GNfS)?S^oz8 zxr!c*HA<)%&QYlKAKV{7Nt6SL<@3ui{TuNH(?$h}L}bmiveUj&nicW8j*MS)5fbas zfg`9M4??@V55M*i_32)m5=tfi%s{QR~7uN#n@)?JrQyMKR;63h?B zpK(n6OM0-LTI9Vv{gCgJ#XYEk`OgoDM)jn&_jhKeheYzy%PM&EMHmJO4J0 zj?RbC6X@s**ywxNXgHR49vwIt23|)8_SQlgbRYo=2RRrx6$T2sd#ZZOGV8*pV?-v;@b>&S22;cN4eO4LDt20DL6n&0Cg^H)aZuMEk?{Px9M z0Pm*xp*<&W;*e<0`}0VHFK_$B>Y<1+e;!E>MGXJ*NCW=hNR1LejcL{rRb?<~8U=o0 z(hJHY{wC#iK^lG838vd*h{pYWMj7Cy(%73y0(ee>+oV3D3}k{FEN}UP4}FxMvg`1j zCHmD(24UAX3M5VS;QhS}92Ybjs5d{2GXC`<`V6P` zj5*pf#OP-@@zeAf?hBYDVtj+#FOhllz3pkBY1`QGGSOXZCVU;c0Qs-}IO=6$KM8Nu zD8X;eMA%Oq=qEo#ocp|c?>Xxy;2(}tAMbja^$V$Pvhl}CH-|@zU|GMs#Sm9u;VZtc z(%N5x|7ow5e*g&`2`SX2Y`twZZNaelKne*NDW)Ys{+b7hCE3~*zlS@CVBSl)RsR(Vgoy$+Zp&e(cg*DkI^j6iW^Qw^mlT7tAW$Jr{>@2KN;u!v$gl< z#=d{zNkxJDD1%=0`E$^zJ7YxtZx3mJWodwk0GP(#N&1_`=j^$_*{ptp3juU#Rjf=06AcZD54WTf%=F!PTjz=qlU8G!4_Wb+pvzAGc(>!-nI zw|1$+Y2g=^1n};o5w8q)W{EoAt3MxW%I)DEC80Ea5SKeO%{^2?rrfC}_aF)N%$?fP zeW8Rbxl=7}9{K9hk*^^gFJ2w4=MvMM=b2r44J#za+24X(wEc^GJH0d;<1Lo|;h~3D zB=fBOBMnG0&W4YIEad=iNwb2XPPhkY6;?BuyO0RrF};tn0<99tKyu%W*(Dqjr)T)` z9__0I`#ngUo*6n1$q!~S1D5EoA5$|Rhq?k}WA_R-M-&T0<=1ZRIi)sDD^^0||MGxs z=5lJ^ta~S@sG70P_6+yGuZ_qi`u1#WeN|^Mkm~od41M|4DH8iwDx$D=M_KYdJrMLMYG9!R}ua0`q(Z>Z9~TAYl1>>P=n& zAGwc_f86;<+O;0^W0bp>T)3~q3*il}Aq?$j*Rl+%OjZC8NsmHdzbT$%_`ea2fB(+l zf2d>pAE5ZxgrSNvkGy{c{J-3Ra+f&V9waSyqTD4;_q|A3UWRg)l(}!mB0S19M>oHe zZ4r{DIq+Td?`zb*i`Bo2ku=STr#=wL9i=LFlp<+L86N&X66##JEs{FKzB_%k6ZH9C zkq@^lPA(tv7blkwgBK^44~E6b<-=$0Wb)yQ*E=sC?ny*DLZ7K7s%S>weuo=oIa7tm zf~48$49+R(D0hMdD#djV;QmtL2?zTq63zw6f6e|`?&?7PyE>5nt`6kCs{{G(N-F-_xAjE)@|-x*n^`gaCBr>GTv8g1YepmpSAbH?KvKr51s15r7Lr{DLL-lABswMHok zgnpmgenFCX{%)e^<=wS=q#>&K3;b^^fd2r3gV{tl9i-RS+@|K0nWcftMd z?)rD`?@WClEk7aBNBG&^ySV_~J%CmtxQNnx=FSzg8i9G=LxlR~{<}sRe0eW)S3N@K z?;2@s1KdozR@b@sMgIDgiS5PvgwZ`^If$t{dd=nWOeLVT~qwo-NnK&MGSy~15OUxFIJCjX}ut( zn~*%xEtR>o77DhVs0=Dd9?%=jqi5;yBOe4=%>=0%4I=nX8hHN`tfnq~+ywHt zqGwldwf%I7_Y1xb>M9h>09RZwz%C0`=On&&F1aY97c?D|UYpwhLBU!q$mV(e6>#k& zx0j}Kv{p_fa|aibF9C)(9Ji;{ep8fIT@^!#7+1a%27XQ5W`nDb@5tFoyY)9@bU+&| zfnR?vZC{~3TaVKop>ewSf9vGboL3^`)bKd=QKJ6jBat*a+`C&^m?20LhZ-krIHUcZvN9F(ii|aW5S6oGDCGLR(2ZC6^>Su3bM;DgSJ}kCMyLCLJ zqij6!zLUd0^`i_`tW6{$6G>Av^qKnRW)_8Y^4kUL_)5rnpG!}al(C$3V#~rgBXLhu z#y*8ZkSJVY6A};L6E}nuda%%!%kj_GMdz+2Z+)|COHD_uZ+4tbnxDq6e1(fSze=VJ z0z1+SINL{0{W*|SWqc zuTm18-)W-jqlC)WooszObX5O&TA_4tpF+vr#{_Fz5I@2G86ibIpX90}3vMf2 za64&qFuOhaHzc+S;$i$sON|o1n>N)b!Sb_O{QWsDCO#xhG12v-rikdG?<{UXTP>HR z)8mJt3;u@m5#u|r-A|odcGtPK6YtOJMjWmuzlX{(vBKKQ zO9cdyEI`C^#2u5Cu zf#dQkI6<0{PJ75mGqMOw#p>#J6iVrWNYCOGKn?pnKn<-bpLU_|uMmW^$9p&=b!Vb_ ziHS8~s-ndKW#g+`@8odhozE#qvQ)IYhe9cN`qvX%?_{Nn;4JTL+Mtx|Hso(}4WY7V zMmiHbH<^5S_bAy^=~DW*b;dn^=Rnd}BrP;S401@&%L%e^;Xk}wer+np zakX%iF2`Q2;6KsltYXiJIGz{%oQE+yX9FhBA&-D<5FeXZt>C-qbL{Ln>-Fk#^mEqI z=L|clK1UFn@fPxw%ji?ie&E#UOzI&`@Ust)zVvgo_h|_LMkZojekiEmF8kQt?L@M< z_L_NYSxRg}EG44LsqNkAH+-$ABDIp%$Pc81`%6@-LdlY_zr-VP&i{9!e32`odcNus%K`Ewl*I zgmgigks(O4Gs)5>LM(?`8@F50B)<1GR&rI$t}b%`2i&f28wk=Mto%f21(5$amG<{h z^ZTBU%pWH5sqPn5KHbp`NXM*@Cl8xuTawmtszf~1FBgns0ei~1_ zd?%D1T+en32i{M|@q;)`KJgX%Qn~Q)KiRnNJts%(ck^?K)}Dv?VWd@nDw1YdkTg9V z$$7iaE9W3NhNf4o9AB+yt6x0~>@b8613L}uFtEG^>a5c1zSG`whU>M;V{ZPs8n#|q zwsjkO>2ix8O-_ema18-G?n_wdecq!hofdJephaAzHS8AZ|HC{Ti(BZ}GB(!3#{kPmy*;tM=1Ti{;8y@HHc&OXO{@&M4Tz>%enm8UPLUy@ub7oRx7oC0UI5^y6X)EN-`>j$UZp~ z&m|TlEu;_ocy2id)&B+A`1NngxdO2nKdyVyZM)u3;Cx#<@2@h1HHR=-k}AE4n)a8^ zfpo9F>kK0*RxkvO>rLexCzwMB)#ExE}{v z-%yaWhf(illP|CEM0Qvyzkg4Sj_4Wz^DRi4m5#5X0QQUzVBevv{X{f?ceA7)x z%4YCwRpI*yi3bRL$3BRL@73cv_zvu@fhSQm%4hal`!ArfX0e)|HYC2Q9uZL5puXnv z^B|8kyE(fp`{!&W_<1T>M&v6$hzkb7Cv_zzY0BRw0;nPWuMzXNp3R>F_xTLS^IcP1 z@=U1kal0>JM|^e6dNzRP)X?+2k#Dxs^YGxw+04qOi1kR$d+CUm+e>e5rRRe`e;GtU zlh%U}@@3_`hqaNCy1mb}7ULdld>tEKMwX!$bPu!ap>&jxNbFuzAC#}!C6OMz6J zUJ}6T=x7%ky_JpL8D})UkB&ubY#kfhWQbmklj*=gY+x%JcqraOFQQ|A+E2$GVPmmD z-(V}OQ;qqyoU1*L%8ls<{9JzREs)A z?}j)!6|Pa+uUgI(KQK9@#MA=U%6{)*WxuyU*>8Jg1vE+GEp$BJoAz!Z-^qCLJ&S#} zutucb`iTAcJyN^{yb<+6K@rB)0hi@p4t~hnM%EmX}c7mQk{>6ba>$MuLW#JmG zO)R8cOl!E#?QRm}wC=vVz>ka%(z!pQfGF==q8MPiyBVeolD4hsH17_7Z8}A=1D@W-`FoXf3no*E36gGqdcsvW}-a znfYGF4CS0jtmj}F!g*+av2He2vuYNs62Ol>0`@&*K@KCO3h_~R6+;NnOH*AuDWe%v)e!QD8TD!2i? zg3IX?T#HV@%?K;F_taA<%uxk*c{^2bO-#Y{#3;CU&S6;YqwDE%w=nUowyE>z_1i1y zSQ8tY!Nz8?{o@cV=CgJU)or;L-S&_71{K`>PfWL^jT_9nN~vypj1dO2Rds^tw#W3k zt$8xlZK(p1OSC=MRj$hi)z#(hvT~v|G`jx7SrHb=vJO)5F@WX(rWf zU(-Fw|Hn5}|7Sbzx9XJTFlv(ODkD4UKR*J}{rN3t7+JA`A!)2Td`AE9gpg4J8MGvG>xk*RipY z2C5#bNp#@AH)FNhn1}YGV}INePqAIY7&oi{j{ZEX06H2q1#o5-RRFUh6hID-dwWY1 zcdk7eq5u6Mf~yaOW6jL}*chWe>DVmL5U!~ftv`jGm31*H6lEsp&00qED1o^U1!*eL zr}C8pVJX!c<<2s>hd{FYL43t@$Q-&5G$a%(NgZqx}i&o7vwQN08%hUw~tHC&AH&x3Zq3`5RVYSQ?R?AuwsAVT{tXg)# zt4uAU74KEej32~-a^?vuXU1Qca)wu|QWdkc#}lVuAj$a5CdglTc2m6k6(kuSr2j98 z`@gP!-zY_9=oD&!ts;o#1n|16W5YT6T5z4!GiOTY zpl6n7dM25lIyygpr}IW5;k5;mE&+=c-bRz%thjXycXc0yGb|*dG zFz$GjR==9}-NE6@*$+AF;NOd;6~)j+}CQZ)hrW|3`s3K{M{q*S6RaR zNMgU0DXRTeL*t_s*1yff`nRe65u(%-`s_kc^cpK9-ZG(BpdgBc`t`^|3w`%l{5v^L}Td# zUf=KnNA=D0ZB9s*FGXzs!b5&@ROgCinP<{M3-UK3e$o#Rz<{4-n-D+guprTmn21&a zWuVaC?7BD`C?MyJxvHGo3!eDvhZ3vr6C^eWOnXp;F}Y!odIPtKU2FWa;sRQ z=8k}gxK+K@mc=%;vgzyti=c4zjAmL$4XH|kP4(YE_nk7@g33vA4rJpO58uK3m4`#? zV_Wao>GDUheRmEY$)@R-bGw^L0z^fCt~*z4A}T^7?L9>FgH^y`pdai%qv;1VXB4HA zTMqM&SDcG~MYBko~xW*ZH>sS2SQ9S*kuVJCOv_qUse4+1PvQO z1I3BUf)fcFuB84RnxWF!eYnNfd3x}JxQ^?KzF>7|@?$z^*576^`H{)wM`nakv@nAZ ziK-?`vS@h?vQVJd21}bOw)5L3q}wa)*6Y*+I;S92T0rJB;UTYlqm-!mM|{PS6q>$X zhNLp5AlXU<36-f<7ptGK%<2&&+FYNYe;rO?Za@!fV@39=M(XpW^Rxz}h`NGII)_WT zdQH1ST_i}ingp>5JRXAh0+o1;RIQ@9tyGns#P=RYuD7b!QWce{(ruPPX-+!1cP%gt z9Z$yAY4^PV;)VsIUjXp{Uyy8k`caqWE5YJBRk{dAmFjAJebxOihP(jZ!N#ao^C7m; zd%*mo{UJVU1iS9zOK8>B2uCoK~`xhIzJvdKLIvBm27@0BW$pRkVBKDN=BQSa+bsV z=195-NmERMSceC{_>BVndoDwgiSp+%qF>%*^5wY>>k_}#{$5S|%Atv06^Ge$F`LPQ%Ra&6w#}3fFHPhm| zD|M+-bkYN1)8fiy>KeM^tS*1^L}9qdWcjz1Y<|3Ke!NNYO%KSU@+SiIj7#rCOL{$cV4iqQ=zd^S8Th z)QZ97Kt~mr6Sk)={yeG&0f0p7lf53Zd2Ocru@(4(0To7c%3C!4`(ng`mW{7X_Hnxh zt8!l3vDSI%j-`7jTW$3ob+vtTri1enRk8Vb>V#=CvM0iD5g6?S=B*&x)7FmSt9>8S zhgCNx39I54F4d>)b#~9V*K-bghCxvj{r;eEiT8)_zQDEv6tNxPzSZ9-3ATdy2X$M4 zyf(ZQG}^5WE^;G?*}x?pNjI68*SDQfkZerp#Ztetugo#N`fO-UkPm zr+jj8s2h@(7vt}rqL|x22-Ee;Xo!&f@R6kXNpqiL@hP!^OdvwCaqn|?a=142IVIE` z$#yHkBf31tnkW0)Tt!TdP<#pr=UfeJ4XvD(m(8Gx#J!Ixg{ zE!wWe_+HhW9KQ1!3hceD1lXQPHlG>(2!}*dh==pM=I@6;!r^j8>s+eQ>NZ{jn+%^@pP&7(vVAP(v`&0c3uVAP-VLWJ6}8 zt3x!%^j+T^NWRWOvsG!Vh4!|yAgRoR{LRa+0=<&;f{T8qJm7aby!1Q=eIHcS$YFk& z>%s#en;~CmRUZ)r(}&bHRQ5q_kCFh&{g8iro}wth>lGF`OnlVygR+jMJpTFIg6Q=j z&`@w0*}}xr+097K`$DYd3dMH|#rgvA81v48|8ZGeV!n^dn8V6C$C$7_kd&W;q**rP zJDtWqPR}`qxvWEo$lfu zP@c2MwQ#<>Z%Mf)?cO`#{_RcbkOuwy+!(#~)KkM?A5w+n_AxA@2N&?wvC6Uox4jrH zbfv3$9dEMm%6pScQLt2r>QB=d_*PuRP9)-&dc}or)H%TS^*x=1Pmo`*7Hj_7pa z-2)prl-nB9LQhQNxB!x$%z_+4d3P3I>dT@5FjudF+*TLpXTc+B9OuhRYhpnSxFcl5 zcDY6g+c0Z18;0iIN|5>^-``b`d0qX!fldjACv(e=}dvBZcDvfq)=ANr}?t>RyoB=DIkzJC!{7r~Od`xoTC7 zB1li#Ac1pqcfeAR)=}&?Q0#wNG#(=Df@WaDSvcc`>j)LT5X1w5_$i)$V7(%+98F?L zl@*9@7laV6Bc(6pN0vbO(ma3K#P2UxL?@G z@-z)s(717^uX?2pz_&;>N+5uwry<g&;Mt$nBO}xWf~%hZ zL#$L+iJ2e7!9od^!}~vdo4nu5a1M2&`PUJc8IiP?ro#b(B>^F~aZx@fQv<bO$W= z<6A#i9|Noa4ZXz%mZG$tS!JHav>pZ1imu;p?~#_lz((R;N|l1Q8K=SDgF63-6b>{%^;tEqu#c6Pf+i%>SUf*SZ~wJCq1t~f z_^aHnqaQ^!=xGE}dBBB_Rdcvz=JUjS9Y=pkBR@S(f6Amk{UBF!0lbv{)`$M~ce$Fw zr88M~3|b%`d+wyW4Yc4Y4Zd_zr$WL0H$SHK&sU4@X8O_Yzg9ubo;RsVyK$ddvuEEJ zsM)jI3-y2Yu}L!i$;;~hZ1K|iKPw}u_Iz7Xql6xfqrb(eLh8|#Uso#ur?Ymp)TC(B zJ$cmARq-2l=@iU+OFC3A?^YBA%9+ymWnu1cEAL;VC`y57wFd8s+g~L=KK$b}s4oJy zPq7J!P59koN|+#l2E61ct-$ODcc=wsHvdFf-U0PuUh8CiBi;|0a>NWQ2|)by zV%l&v2T3z+$agA@fBbi<{)>F4Qr#Dol;_UBm-l}Knq`X1H8c3Jntw%x``?2WwL~3t zpTCP$-&%UY%asIzufbnLLv{DwWukv=?N-hO*TNrEWrYTMOJ{MeKHjCpoV(X9>ZdeU zU+v>U3)Lr1`Inaq-Hv>xjP9}JxkNQB3Ap=sA52^1?zM}W=jOUvFBh_v=MwGIo#TBl z&E+1Y{#X2_mkU{u?^GA}!17$8oRa%X${!@^X-{?3d3%Yy-b4%;t<=-cPwGoO@&32Y z()lh41h;jjzTcZM{s%G_G(P$z@882*R}PqsM^$26o7}PR+4eZ@iQ(lNI6U;_DkXGH z^1HhPYc(_yl7vR5& zdFzU`PJx6HE|zbe-CQ94P$=$WPRJ8T&bxY9HHY)>(_3bE#uFW{@5gTKaD7iz@zJmE zn^mlCjJv)kN7nXJ*Y^}!lFwh~8l;-pVk_*!KVd8DCczq-JheKK$Y0$OQM33N0qS~_ zwf-`!^^I};?}_-UO2=QWd#L}`65l}t0<}mbp9HR=7X0%j@DcqZ6wgPr`iB>pkLZt^ z^_;`@hd?A|Jt8op_1Sd%bAw80fl@kNeYVTA`fPoXY+P`JxsSuk^}2w%TmwL}4}fOP z3F`~q7hAt8flv+V;rb+<;ZJ_$vY7r>5&ZEu)73pRug+iRV(}Da+ivQyf}?0r3%5~O zAJ4*dtc|vC$^QOW0)(+40j@#B&@5&9+kYHC(`Drw7l7jz)M{bBj7Z};lpw_60M*d$0!iy)PzljYG=Af7A`e-y;e1o0n8{6rAj z@y@ZK&bZic>)d3EV@9MPS)h{iwhsNjiyl-2(mt39+SzH@p|oKWDUG^CE~h zoNND_3Gw?2O$IXn$ZONR8o0Ruf4(}TMD|K%>PEL4BGirN!aarl2td5_>%4!0A;J5_ zqH}%!==lDd9O}P;7u(X2RFD}zhK(LN30+dm8|#|wV4$?P$tkOyJZj)v{%xg2yd}li?v=@rL3d1-Rfa2tz&!D z5`2-J-)^V%*kkevsVr@o7U@4aeU^}h9uc6-b}?f%dj7PR(z*V(arW1%VSkO?S~I(a zbXzOkR7a~|gUwb93i5#XsqV%VoYytQH9;d<=+6GN+qqyj;`rHnY#!jS>6N22h5r~~_YOW3{^$Tq)>&VOZug&md; zf|zC{MzJZ8pcpzPiFF+}r}D3pJC{>ALba|n_&Z@=^D8T8{2+z~EPn7t2lx}ga_zYi zVM4Q_BLaTX-C_8WlH%P-og>91Dk&%lu2D%4*+?T^{&>v%KN@d;fb`kUJNbVa*f}SE z$exUw3)O8Qa(+ATU)~stpJpEwCqp7X3W;g=c7%kjk{~f80TTRnHGh*K(K-95IKFwnZwWydJvKz`?1?VuR@ zy`%W+!&H98#L$`iY={>>R|7f%9Drr1wsFqSvaSv@Ag@yVNf7HHNAkl$@sQrg?&Oq1 z)qlLw*7->nq`6iU?4#H2c>hR7kU-Gd3I3noL4JXhj6QKlLO_R3QH}s!m!tQ6ByW}V z`1lT6WeIWPUmeKT{|tYBcIq7Yd+W9TDgNG=Tt8@GN6eEIl&P%HPNK&f#&1^-_t4+@ z?L}5+WgjcyeyAyBV%g3`1T*LrUIgdE#*NeKQkCHzpwLHb87)nP2$dZ8@jObPxSkiN z+!O2>R-knAKS-s|1qtJWarE28QTlD1zGDQM95@(_Uw<&viS}W*<(edu9K1)>b|d9; z2m9-<0)HDm+8OwJ{0HDK>O_9*GAK@v5%m*!e-@GoGO2LY+m{J3C>WOvgMTMK_O=e> zqd$RsOez|2{y9iS_t*|4}O@!-OcI-wy5VM(`jey+# z3%>rJ_Gl+uU7_D3TV1c}yxqF>)y(pdgLP*U$+tNE?FHHqcN-KAs-1LXCtN%0l!>=HpbIw6N zzcl98md{H&@DJ{Z@(-#jM|Bbkte-E@^4C%=KYFDRfT7}GDGm=`Q zVt)RhmO4(@@HJjbSbE5Nh9hc|(K{tOTUX_RtIom59v0StY@PJqtx2w*zps_X){26w z<;b=%#;jmfX=oR;N;rlV=LUjAS-7_ploZ!1=~&2!QpY=0yy@rcb12@_Ev%y3I;Wp| zI`F^zp)>v$ft`X)?uY5w7zZ=wM_=i_spH_27c5ts1*C+V1&~|uySHu$H)N#M7|kPZ9Bx2T zZ><}fRA6Go3yh~{J30LGIsn1C($68Wrxi8YttKiI8p6HrmRUX7KTpbr(!QJ7*=+~G z0@_E-9QeAD7-fp8iaOr35Z?Fj?4&3M?ubD7!G{u|{Lw8G<(+y5i)7BZfnYt|qBS6a zYBNy3(wH`z)ek@YEP(RGL0=g4VPVvFGBcqPsfsI*(p+8K75FoD{u-w?&{=wKNfWr*7U7QR}HLzmPCdJKsN@q?jtN=2P3k7#LGNSbW{P-snnY3X=2{d*w!I}^zhGUzyY zc1CSFAwYox}D4|Yfw`PRTT);Jq6;&1!4DE#StJUAm zKbD%J9#s{aXnhIG76nOt-<~qkfTS_+kPj%@1XZk#2k_DjFDVsue1)H`o7>ML1E@%- zJLKeW|EJXIqtMMlT1^GRGly9Jss0OS{o9$eM}QNFy?lB9DpxD}nV_5~7m}B!!&jV3Q9o~381+}buHfFf22f97s9$yT zE#Q$d*3jlKROk-iInC=8eD$iA71rM7S+ei=@}Bgvf)Fc+gbMXU@-A|LU$NIHQ07$a zl7T+6j{IxB{{)1EPYIV%$!|wvr^vy+***u)Em9ZCm6r?K$kZdjpE#OdY zlY2%*Dv>Z^ku{ySOoUaJ!CNN6s>|Xn6Jgca2+kdtZTeJ~79^WX2j0QqiFZ^ffsz0| zeQAvnYqse6AE|{Q8WQ`L?~U~DA=$XmyoA-~=>J5OvbzV>UGF=(07{q0#vjjm+5dBn z?op6vOuJ&F!IyVtIh&OMzg#}jKxQTHr^`ng@QwBw{b7>pF0D~Q{$%w*-WjFV2U)k8 z)(7cNL6|12VD&+2eyHJ)XqG0E7gwk+Hu@&B`XEatLw%5S6C&z^ymv`teGnpFw^I3< zPwN-AGWpuXyUA=84@>_sjr<3dT^g5GVZ>85cp=$*7jDLn!g-f1oLb5S?&oWMJU4^axs#4Tv z6X-L@UY#k3#mJZU(J}%;S0p+d0U{nf4%`=J2_YmEJJc=8rfyLVb&Dc@+*bDadwfvB0{xlE)joIfejV zv6^R%LG8FkCn`}3Hh$Ea)e_~q|lk-QYpupQYpt;QYpu#r&5m1NTnQ`nMye} zE0vaRBlqh|yOI0#rQOm~b*0@b6>z`S5y(HY7sv5Cw!z&czOxqok*B+I9E(qv_|B&A zk4#K~D+BLuRl7wJ(0m>z=e~g7QD*XeJ+SL=0 zB&DlVO2hSL^_nPVj1+6NxzgH@0`pdB(fmrCouwAwxAWUs9WKq5W`*!}*eOqXX^%s~ zDGh+5f4n)28Qyp$$5qt1%<2!pvR;&QJ6RRI6RgE`6Z>vTq2CX&@9FG2X5TYYsEK1r zp-@|(?I)4H_3K&TbA0SpXeiP=h1OhyAw`8}tKM(Ei)H>xkVv zoDiG$Z%7UQNY-%4@%^?mzG5nnY%93!B`<*B|Cz6-G;mx#zdhZ1daV1Ql14f;8C(EK zl@z?KmGq9a`tsWWH!Vh{}b zeR+R%)56puJT!Q%nd9(`aWzVCG+Csgi|javwnC%RnO%n$zP(<-uigwg`^xJgyKQLu z)UX!a)Ly*4f_rOB?9`SHjcB5v@6obKom#lwtX?Od+V0AMUw3MeWOQYLY;|Y-cgxm5 zL&PeM5}L>mwTcZ&kH@<;1XfWRpSdzg*%wYvU`b4eDQhPZu59QkfG;o?_(x*_BaJ?lEy`u5^CK zvIowF3+4M18(%Te5GigwQ4>`eHBoD$CTcUAs7f|b0hlQ8FYMl>iCoKEn5y8!4yJ0| zm}6-3|>Ue^dHb)bSM+dh{jaL{f1vl02nI zzTaTycQC(u?(s!JiCwf?ClmX#`yFb1`=zwZC)_MfDfQ*8EhECygv1HOC15`+DaLP% zu2Jj+*~zRHz4Ls9IH8T&Ue_HQ+)^xyqPnE!90{C{mn{QqbI{vY^% zWviM1Q5icxnuFvD6;ilftGnK;UW;o0QXxL1DN5_F4QZq=#Y2556j16;p@344N`=6}nlbwXtzx!6QBRN4gGxc#MN9DeO{>T)78 zL?sdQKNx4=IQ+)@si6bf0C4p0@OX8Ti zkeEv%hq)-4*muOfA7bB&*>}vom$L70ADtL>lQuc*CT)V)P1+p05bvW|%_xUUIn>tmeNL)Snq&;QPu@VEDT)@A(qe ztza`Hz91eA;PxwO6o4ISP#}M^`(`9LJkVy>5N^3!r@L;|T_0iB#NsF84OA+y1RpXI z4SScYIWoh6;CUC)CaJ|*n{vp6w5dCho!@>%zW2-={*i_>sL!77Ju{qtgs3z5-ZPi* z73~~HfAfC_J_`zImJTAD?%JWdcIqG{g(r^grgzAy-ek9~O;-$AB;M;DzAnrq6e;hXt(f23wE4;r4^eU(V3Kd9CLa7yL15Mn289>WDz(2B~5Ba{- zBZ!|6e2Ju0apzLQ*B0G%MrxQQWV{91FGsqW*T5Zx!~P+NdzdGhdYTFOGE;#*PgCLX zdrF^8dioH^&YsT*3gZffy(fs9D0Ti;Q2)#Lg2C@imHS-m%R74;Yq0QiCChj!4%VH= zu5k9S8YTGJdAg-WbQ!NsuLrJu`x@_=+rS`JvW)uhNZ{0#euKnK`^a-=yPJ9sO;(YlrUI zshbxvo-+WirZQel)$wX-m{(I1@hWA~yL)$%NgueCdDq|>!7K~M;cY`}l;98xdFde} zwjl8bT;Gr50u}9i#Xq?Y*|U{@aGL2>-D-NOU9dkJ-rd#bk@Kf zj6FScxvr+{_zWdM^;#8#8+k&keMnqQ`S5K)tk&_NF!)G;+$YtSxA+#uhpWSUnBGg} z!bJZfT1YWYIHqf9&gsy$ z=&mz#B!JfHDTp;nC!Ao?Ni9oQYMtPcbHaFYCpqCBX9Oqw(u3phmdk3C;Ez4n`Img} znG(L@8Uw@Bf0Gdu%G$YJj#lA@tSfv&U)E~==T7m8)FXmdw(3M#o$k6-cYP#9w-Kdq zTng|?9g|m7JzWELFkT@VXcAsI-Mw?XGUeu2UfI@-U6lmzQfrM8+|VsCw_FCDl#J)Zmnx?2R%j_J6F(-F#|yUx%Njf_vD@}CjS#E51I6YWIu1-8l5 zIimHQ7fZC;x~dBdU0S0Ai@GKz*^goSJ>PrA#aFyY`EP0D`YO|5>eXEbbl2;36d>bm zGzl<;uCL0J@cJTmvGwIiNxr@w>(a^fW&Ul%`YJMV9G-GXjS`$<46m<;c)uYB{-SlJj>NQadpj8#qtSiO|iNvwV|Hv+4YRF1>0!8J;7F6hZdG&@o_ z4XEP@_8Lg6KP^*A-O{p4jjkrr?#0PKEG@F zO)LM%eJPz|`+;*}*?yQoW&7zFHA?UzLqfJkQs3>zM;HXj<`J&&(ql7lZ0I-=Tk-jY zZ%{vy6PHc`Khog6^T3bfq*eE|ht9R;Ald96UCzB_VNN7x*oh?dJZA+9x~aSL3f3N` zU{$CJmfCG>4O6hHw6?)srb!Y73+m+y;{HiuQ=xdEQ2c-Fy?cBVMfNw`J(&qZAoOt4 zAff?BjhE;IFPjL+1cTOKM*~KP$}T}6EPF0eM;k zbHHkArItLAJ&#QpE7V^$R(bSTVMya2b`^$BWCk+u`L!@~B0E@!v|Vg+lv1~bq$la& z^Z;t;7>&Xo({;P>4ydn1rYG?fy`MO5m6lkN4B;tqSK<#bIHiZ+)ZPrAqwx67SwLkt}j#BolpzNt->?t>~r!QeoFD73Y zf1(EdL{sr+N*VBn?CZpngg+~XtkM#X;~{%&2L5<$X8x4e%={_0{j~g9Pb-LW>WHBy z;mafwUwRY1q!X5mIz5(%lOS%6vgBEH>A9=4#4N+UZ$7Is7}?5O>3utU9)gjIF3 zg(jPLkx6*bBYGzLXY@qV{&|M1kNJaFX^AIDfl1!L5YEC7mxUqOw*S)p8GJt7KYPzR z32#no|D2LP=ihGP58Xd^ox}FeTH}I=S@_dz;m@J}7JrTpq5S#dke^(>Xt$-1FCzvq z{v0;SUsjzoWT{T7uOI%uBwr4mdy;i?D*1BCCG+J3kS|Yye7QVJmoLWc6tb`*YGFq$ z|C28lwPi3}DbnDRtdugdl!>0X$lX8QByyio2c5l2OZ<{(pfsZfO0#I7G>ZmG`!B4J zsJiJK%#9QdveQ`~&l;HVY$|5FT>{K_7S>1av)KALY!oM)g&8gjGqTfu>h;lxm&lug zR%zlX3)Su z$(hJR(oTwOw4@)sNh%|UDV1asOOxF>>buv{c1TuA4n05MujI_h|6E0mRps>f6d=5~ z9x3bC`RaP4T=UI_+vo2Mxo_ zM~Y+JV>3B**_0PFijE^8XL!^ykzU4i9pL};T}ARZ6~_yQR*}hy(ir^}-03AGs;?Zb zJDoJdXngSL)bISJYkrX&rOfbFqJq7`lI>*RrS5z>jnZUy#f~EP&oYqIf|LdBpF#1; z!)mXRHwX_ZkTPB)=|PD!yq6+-7GxF*^;h@xhB`BXUnP2=om(|cgXxUyS#SkXX7i}v z$m~))kbHE>2k4R(q)gI~^a0y;L-&dNyGXf1OZ1`-NxMbqU6Kdcu0Hg`D?E%kwg$Nx(CW56H)HY}hRFJ*AkwiPJ^ z5#u8y?M2cNV!te})hLig!QO=dR;9YgU8Xktex(+zjs>O=xCK&z4;3^#b|V2M5bAsL zczuW3a|1b{_R9hngxaqNoEK`J5*Vb6e<{>4=;6M~_$^WVhcn#J9BS`5w>M4V1n5)! zFVnZ(;?mys^+^^~{QJ(6=BFi6tRGa47_KH?IjrG~w}^ZA3HJ3PWw4;CV=U*C!n|ga#n~Tcpg@kn#whm{%BT%bV>k z47C-^J^7Ob=044zd|G3%)L@Dm--@(%k+!o~YDAHvkM%1O>NEV&!ce%6Df0T z@l_nhbr~p;Cv*8?sUg0YxFnB1cEiKB3H816{n0bopM9*8*tUtdiH+Z2`IIB9(tKKz zD81)9w%^y#KH3-lCol55kk*8>9X_cYMVcP#C)8gjoX>efnrC*pH>6?yO2^_;G)>Ek zsh{;BO%zLw)+Xo_HQ*_7u_c2isIB1PcZ;RQ_^&!~16ZEc^;xAw>Ha=K!uGzbz$>{N zujFz)rC(X#u0+bhW<#O(s=l<)JB@ESC{+KB8ZKO6s4X{mxv2QGVriFwFdyGQ7Q6## zyA%DWyedcG?G@X6(k>q+_Mq_i-Q>=;eo$fPxF?uXtlX&;OMf@G#*6vgqA~!PKxV&F z8=JQ$FE%!>iA)uq|KoYHFDeWjFPNL%?K{L&Ok88^*hGZ(cCqvYyG##%$`|vW__TMB z7Auy1D2{yfm}{(1KcbM#L?NDucSUkpW8=7}FMPtbV02+<#1+AUu|oZPo;-F1er#?| zv9iG3DN60WWB>3qXrq1MFKos9KYZc8c5dV$J}91Hmwm<9kQJr(ij|xBu|oX~Jc<8ky9~e4 zmKz*dtQ5IBi>2*`ZE~w(Pb*fuJnkkS6f2K*7Lqj^?@t0OlRPSx-Y=FK$L1Z3w-Y3W zJZ)^=K?prr;6@@v8EVCPQ5jW}8{&w;;E$@CX1t;4izpcuug7O3m(@@KmQ{VJ`^r#9 zuCSa$9+0eSlIciH%jG(B6$xsrF#-+fzynLc&@RP9G0YfjIY=zPiR6jXoYeJflNwgT zXQtI~$fv#M)3y~$UlvES$NG&G>T?Q1Cp@!>{5etZ@Y}@&d*}8MrH@4EgJNlS{L@ZN zBY5R|qUxqztF*kBD7CA3y;f;>i%ajKWBXA<`)EYA#(QL`ZS_e9kaPsEwsS;j?^vP! zZ1DedcxLx140RMdye*L?N_*)f7wnlkSd==8mHE6+`pzf4ElMpu>3}F5C#mL0Y7wP9 z)c@0qcojrxkLn?$UYq&+C#_Ie{Cf@JHhZkDt`OG@LIkP3!i2AH?$zTYarZm z0Oe_nxARnWw-!q% zE;u&Z;gi}D1<553g&Zo7;;16Wo_4i)98FcAhhS1`b{mr3!!t>qMGT*1oMKNy(q6hg z`cYVgDvH4XP%HR#gc;?{izQ0VWZ0>{9katOc#szJ;e+HppY$!dWFMWsg2Rs@pYjmz zD>yu7KRI%V0C7~;9}nxeC^d=FPW3xqt%j62JfRg+R!$LMq@6ygkr>yB=R=#xzUKm$ z<;9RPq%$W(mlHm??hV&!Dc2U>5x5iep(WisfwTs(pyAPr#DbPNBgYE$=k~-pDxjtw zDk|7IyARgwQiE_lM~Wp7|8Ebx4;w|PMa}84N{gynKd#gK(fFnxPO-mUahL1(VGWsN zi)90TSQg-iF`O`h3l?b-sxRd^E;M2oi9cQi5-}gZ!@LmwLo!Op@yleJD)#<5R*!Or zhMT2VjYrgIW)gZTqhLTV{#tHH*+?FjY?a>SWF-)l5l!5=4EJU`XQ;w59!W}kY>3m2* zJxpyeFVEuV+U^#X%pma{ZCB16SQu&>78r#84)iDX$Ll@GPm_g+F%sApZs;`Ga5iki z5y7cE#4{-&oKHkk1_JS(xD6XEH;JHfMFuaWIQ}M-6S+;$igRvcTbbR0*WGX!)V)KcM{r)rCs>+(0YPU_<*qFR$h-kY4Zz_mE4a=a4RKvaUTQ0e=F)raBFIU zdnXCT^2yC;j@0!yQzE;}zlqLfO6P%01D&}k=xk0+XNG~X3x6O)&K4poeoRhMW$VZ{ zQYhchmBPl<6lNMI{O~xTFz_Q&NRMESXL}ncjF0I`VJtO;Jq;9&pcDp$$a;rCeuq2K zg{6x~)M1%zgPoj@Rez{f+u)*YsqOv1g8H+a3LQe6GN!{cvUI#}vGBQ7IoBo1uMpCT zm09kNB4s_7qiKbUG!9F(a6jH)|NFux(uJkh+c~a?S}52+lOWs$?0PIOu@!c+a;^<2 zciHk{gidjX&5pPN)z3jQ55*gF@u1Wc=Ks4%~!LeZWQmz#=WS zq>>bs!heexO~{$)0750bfQ0|9Y9KvTU5WSuGL@x zT|Ed%>i|yBw2-Lnnkd40oZ}6kii)E+Be{?O-^hy_ga1Ba8$$B#D?4Y zb+zNZ*M2~slel)D|m>`zZUgwC(X5VWt(bO>eo5H{Hi zr2C`l%5w?vrO%w4_%ftq{`!e-iT~3lrzXCT5AgDj7)LYF-mg=?#Fef(<1Iph{#TKg25gwxG{%keYCi@7c5r5y0~ zk54_|k}t`C$A8)Ffc;VRczd0Oq*nF2_Bu`dy1lNOV&v=IPklWTKYrxY^|?w?-d&lh zF_6$!(k=nib>VIZ%4inu)uooYs1GdVHIjN(SLy&i&mV4c&As0rZnMq3)E{o+183vE z0SHua9Jvf|W49s2VILaeHl-2YNVv@&xD?O7KiuXF^vA6P=OM-M$J;`5^Wo>)ZZ&*( zD~Gk@9~I)}Ugr_0ztkNBKf~-Vsxf2s zvs05lyue-Q3|5JFas*eAyAqHaA-aH~H!`F=0#nDJ@(8p$tKb6oAS)lH21AzG*M{x5 zSU?aa#f+|9i~rN|tG~M&MSRrjf}ZfLk$ny zo!5V=k~bn;^RogTm^6cX6O%?muZvjyG7)lR)ih$`an((MJmO9yAq8q?A7Tp!^s63P zGP=J-OJkH zU4^)f*TFOT@4evn>R2ETNna3f4CDKWHu}5jR4MSX5o9~*3qAF>r#qoke!X)B^BFJh zOj%#$I9>mS8XC#cxkzz5w{s4s{$a!m8nuKX2OqnI+{4kB4JGr-ejy5cu4WE@9k1Wu zNP4#<7qMuka1O)*k?SfK!~&JNOVo{D)oGLqdfi>cG3%~sZqv0Kx%$(P)Tst;rU6I! zRAnoU8}6J*;$sIBvP!YC#{CS=(SeThk>rZ%9p$UzzpB%aGUU?Dt2iVzP#JD5^s9<* z8#TE<8b5eC@k1*q{|q&H0Q$Lz7TZF^>Qt}nOD(&6Bo}&+d`CW#$9t2N#E{gYE=^wE z-IA!VEgNgenwKQ&QDVuK=Dz(s5LBn$U236Zk4xH@BZ7jwl@ zHrjN56{DNGZx6D$V{m`99`3K!o3fnNfezmce#6^%RM0YKB;NJS;Cqqw!2wxueAF?8 zQw#EHHS(Yg&&ca^IEF*e_*yt(hv06fYKJ{*7#^|Irfx_#KsXdM3QO)zhqJ5bu4Gq< zLmP1O#7C*vdoee(9%ZOp&65Kgse%D#RvPk`xSH*PypAbJCsVbDo>mW$u&)MkP$lL? z(wGSuj2E9WpeLMG|8=a60ckJQZ(b{sSQOO6PY5Ep3?adV`$TE0KKe*Z_+<|V<@E|v zojel6N0ikzBsHr4Y<@+HQm=Ui^_u_M4s{5_ZP^R@ga3S3peJ#e-=D^DQjxnT$&-h8 ziZRc;Cb+l6l}K@1+)g=xzfk90$=q$EhT(fi+A15Hk!T3w4tvJra9f73tcAn9I)kG{ z*)ZaUoo5Isr zV;>&B(7+xKQXDxZTIQv0fUScwqj*G?+bU>g(XiDG@pjzOB#JjWg1&T#Y*9cVyVH`&^EewXfrA}Hs>ml z-t&sI)=?Q!9P&{@ochV-wVEgwxywX)y}K3Mz7=}47-G#S_6($4^XAzhZk%#%y6@P2 zQEF0e`gffsm%5A4v$N7E-D{?Ab$Q2nwETeIepp?`7m@pmVRVgD|P`%->G|f7Mja9k~jTuKinWJzLnPn zUX@wkQ7@}~5OWn91fG+I{^~ni1g{hocoj%-c)vGn^QSMP0&lfR;8m~&MLj~A3O<9t zYyY;61j1Hf21E@$Igv_1>d%Y!K8{&3>axERr@`gqzhqfY#`|(?EUl;4$uSc8pp4XhPZ#?%cBs%arQQAS`PcLQ5lWC6~NZP%_e%3G&HoHGh%R4Gc+pNv1)8f=G zaTol5Tf9yarDoz;S8t5hX=-7-8)pR#D79@rSwQJ4ZB*S-`(a5+`yrdy4|z?AG$b8C z1-l=cDAW&dF6zL;c+`pIvp&<{aL2HK zle*)Bze7@^(L88PWh+qs_lRwEC#!#=*N?RNSH2|&abm4e<7c>2&p1vRKi}d5ya)3o z2U|Z6Bx8@5^)v3gr1jGiDf2w)y&uJwXmVA3{mxP!Ie4bKrQDNu4s680#fE=;6^X*(&)A$Q>cAwY8P!B=6k?@?*sP+kTf96 zzq2UI`G~m#-2Q0Ve&fS;B4tjm)a_4$_BUN@X+M{CfZInKX+BL_G!diCl;%|jJ zo4ylV1AqOuS`I&yi9f6+A9l^|xp6x2&n9|r^kbpqApg~rx<{j(J2X;>rcL_5A5{nU zdsP$aOWmVG9n*s%3Lm#GxDhG0{eTMgKKyf`zBKIz{KHj9x$Ol0YBc`pM5rS-n2nU% zI-~fzZ2VnksKXQNjsMbWO4B-#wmUgiBsC*xzZ(6tPJ=%q$v@|P+EomY^_Y!?L5|w7 zrHdROD>Iv{`uO}4r*XdcjLL^{ygtkD`YeM2NJZ`ny1U*dS2#s(&!!CgF>>>(kcA+R z&qvDD=Mb5MpoP2$rrD+-X}xcV!iTGgc&)UrxH zSUSIvWtGmm|BiP?3z7~HIWvYwQeplMd;do*$8GiF%`APOOgoi-?r_Tat)zwuwt9$z zOnnb*qzdc#8t@~e7WMKYng-=usfH1iF`n?KPtQ({qmNH&7p0vl|97nM-xHOad9k2r z&TYnMUNY0~k=z@Qr~SX2!l@4ot7WZY?)=iwY6hmGM1A8R9yN(wT!2;0%{-FES>5cNMyNGJY>TJS%t0RO`ZbN!zvcnnt4sxvonXlIeTilcZd6jEg;1;-?BD2{W| zDbPt(4Op2H{aI9sXoc%2w8SGBIYpU75Jvja_&cww@M!E(q52TVaYwhEEmV`64jJXs z({q^z$yHua@p?%3EoSBzq&U8aPvO)t+4N$Mp4~AsrwpWWKpI0VqDs1ED%Gm}by(f$ z(nM5zyeOgk9rj+Ai*ja5pFF-$*!WLw&d;qq`=hwa>yY9I;4a@g-`eGu11u}FQq9

M%ld{}Unh+PD(js@-#q}cn5(l#~vITf;H z_!LUVI58U*>%^S!D6PNl8!R^$K`U3U#-o;R$w$g~9?8G(Ao($`sNBfr?SnZtA;obe zp=zJH@HTjG+-teeT`_Zy; zauI&_Mo;`z8@-YsRR_z}@AuVd@h5E@S9rAHQla`Ko-FskOjvL>w&3t|dXeIAd@+U9 z9~)xjRaHNR5AOkdc#rzbKGUKbZ$nZES>HQ~dhr?Y5ZPWif%!--$q{95w(pWg7C*jK zSbPp~7kIO+%b&)d5cw7O9IyX#yR84dR{7P-LJ1F)WRS)!i`a{M5@l}|?#2U?Rg|2p z&d;WB>K*4ARh4cYK2z8AwagUp-GjYQu8M!F)8c9pKdSI(1Am%Q zX*?$OjlotHHMvqtrH|k5Rw`wSa^{GPZlx0La3oS3hd!OcsUx~{SmrXW59lrM{(mf$ zM5#f&eSe)6RloV=i<eezP7-F2PYg;@BOWP^f3`1#pcF-P=WpR5`!YP7UU+!e zg~x=#nVgzC%yiq4E9e>49%F{JM=iqqQZh%qOp5UB*ps44wdFn2A`J)6E?s}}O-g5fG?Ji--(i9s^tTDzn@!S}gY0olq=xdFLtfH%dC${qa?HV&Zvh)Wjo2 z%M|!uT1o*1rOgCjP?VOFDqEsNff(`kQI`25LZ~FxoE0@i?nyP1-4n4bR|atL<+da| zp(r(r(m{3j`CB!b3KVGyWH2o7L?0xN`rVpb9x0jYH@?Cp<2`8-&JQon<<#fSdx3;& zmXTIb6&6Rd2Ld7x9u?^YLYu-UBB`u0(HALImFye!{pLCiZg40-BE{PXj~dqtb^yWd zz&n7TdaExt*XbwNEF@E#Rof%fi|&a~8kl;`eNxOP?H`-B2g|l9EZZijJJK0`Fkb(W zH*EB9T&3nNGvM&+^#N75w?7Q`_HA%)&jA;m0LJeE?qne#NVugqEnhcMVu@XE=X3tnaM$%0pSwD}Ms;iUzx zmW(GgLukoTb^o_3HKYvu!+|N}3YL|wCg(7PeI7t7lM{Kdvxr0!a>)hPbyd=<871?| zixzQ(8~fva9VcUm#Myc7*9p!#qUi40Ys5Ei`+TtAL&oM;U~a!Q5;*| z3~`(KfO%1_gF93oT0`t9d9!}!-U?Oal_Gb(y8Y%_BGRIUGW+aqTK(dZn5H|(JxFoX z=g;KSCkIjV7Y{{$c``kTZ&PM8PRi8Z?5+b$iC;fY;a`k3%1LBq&182@jp)7v&!z{@ zCbgGDdPppFm#C{=qvl#Rp2!@$!Y)ZwoEcAKN&NQiw9t<~f3I!me*XG=Lndj)J6-4R zyRXSl;yaf4`(5iIZqwi{^SAw@lh2=h+)3u|;vCET9ldrYr?#AJn!gr%xAXT!6Pv#e zSNzBG_wniU zlSuk7HXLe1_wA&_u1_w>7NtgQ50a4=Nv&E-R2?jX68$qM(Q;K?l1hm-f)Z^8CE5x~ z^biEUsSx~j7=qv0Aoz`ArMP&rl5FM8MRl2yRV_-E=z>U3+nLu>vuYBoMDcsx;4jEP z@x)EU6L&kFxC%URm7)ynlqoxlg!)qVB=vTZ{u2xIC9!T)bmLiyZev>5@a48MEn{OO zbUkn!i4g5`NRpYm!>^hwpCBY6w?(#ys4Xo|LS-M7a z_f4gT@xIDe)mMxMZQNboR4SM(o&5MYCrtpy`~Ofo+y8-q)J2>QF5+}>5vPL)PX`g6 z4kA1qZ@J~})^x~sOb1a8zhiT#W-^up)p~lk2Y)BJCnjY9%N3VipczN(MxbG;pNp!; zzgkJ6$}^FSvWU#6js-^%>#B^0WNubp6cRV`u{qyH%=x6^p+y4K*CT zONU{Ro}>hlV29+*kJnlv&FM|E_v`aVlX~mQKkiPp87J0ytj@oUKZy!Y%|HuStg>>U5~Em2R$cSCO8q zbB8}yrJKuO*Q6WDU`L+lXBLrJX=V|blV%o?tVo#CP$aBKcxyR%(O($u$QB~2UFJ4d zI4oxyhvjVJu$*liRDk05vW3XNeo&~-0fqYi?o5I`xq%g0t942;0fJZjI2 zC9Xn>eGpQ-8d8QF*;q?qAk-`GS*byg4SiFmC}GQsRmX(t3@iwgJ2c(@Ar|Zx7LV%7 zalY_zURZn)sR85b6ixU>wv@)Vj)IfP1y4G zRPPZYZBC-1f<5zMc}?+MHt?9@9jkBYTei&S)FySMmW)YFmK=rMn`7R+&72|T9b!t6 z{A4TSBI1{^AYBS(oG)7<`wKs=wfLjev0x7h&lF6)JwBVg8a3D=q;8UN`zLAg8fcQ2 z(q9X92cYG_DA}ia+1-S1hWfA(e|j=+62Fc+j<4YjIivFIES43k?IYIE67$d5$)s6W zlX#hF`?~Nk5(~^jat-~i)gRSbMrH(WGcc~v!Z=hx2Tzu5a!mb+aZLMCCru?|s*VNd z|r0)1^B<;}0LgLJj)ShCdBe7t5UXwqX7@8an9*eNN z0YOebCJ#Sb-4yU4xu%gl)OAdF$GVIIdc1t4RvioUOE$HXG?j2!hec{B?I&K&DR$13 z@kbwvQmud$*|bJI-8bCsoihl}AJ$O>stWD>97Vnrp4%EtoQLTsC%GMt%^&zV^)2xQ zJzZHkfH%`|hR;D-Iy=gmLc;5$76|@3aV-jOChc&+f$E&IULd=woS90%A?T+R_w!Bh z3tBao6n}Vr4nCr3B)0@KPBv(q9MCu(&^Y;^alD{$5NMnd&^TG?W|J-_-E7k3r=Lq)(m5`ffJzsNwofe>7t^{C*fF29 zpCxyTdi7<4ppU8tuYuw#JC12u+~zPz!5S+~kDVq>k^covYR*VQ{yQe^GE5pxg4acC zjzP%aXPRJl9|m^-Jy4?@UG$QD6mIj*8G^?^OggEda5KS$-TSE+`Izh-H}Uw=ACcmC z^nE|4R{3aQRJs!z=nity`h=uKx_=PeKO_?X|D7nn`=^BLpDgvN{&fG8z;K~4y*tIx z7x(qXIMWvDRv8mmk92DFH>W2NzZgf=8+s?}Mn+>cgyV=01u^UyMkAQ=f+o6OTtTUnlTe{fE`mFnqKIDHzg{i)J2^r3 z+fMz{W_|-eTx3rm9m(UIi8K^{@aCXQOpG8LAyOqJygN0&*^ZD#?xiq|8R ziEp~r$j9G)K=}ChmY;%;Mea&b$^83n%tRNvpPc_$S4R2^7j=ZVpnk*It*E!~A;-dp zdy6lB@n**O!_?!=)+u$=|je+Mxg>`+HuIt@b z8|K3wRR`}QGxG00|1>jFAu5?Od+K+XzfCb4NpGw1+w~N9bHCcLu1-VJF8t?%>*_QU ze=V|JwaEH5i>!CTR#(%2C252u>#s5{(Tu+lhJ3O)6+;}eCM@DMoeky={!I@^ny`J1 zroQw3N^lImyqV^Y9G}Mk;ZN=O{pOcv;`klL*ZIUh;0+#aONqM`j>2%rnN z%gi+*%0&X#AWzC7Ae7rgsR>*0O@S+s;&|=%_Y$>|jgQwk>hXQL&uf9ZLKRzMB(TVX z!rSw=5$~%0>6D{X`<&hY;}_`>&m@29=P3MTHXd6R9$OafCx>3m8QlVrSP-88FVY=8 zBtAQQd>}a(3iz0>3>k3wB2JxAvXYRUg~HpjjX47kD8?A_#A4`wV)y+s-x72_O!s1= z@bN*$j?=@7IQ8pWyXpA*rKXN0OZ?pZG=8oM(@=?NsMN1P^spY5?Hr&$9OX5ldvwiY z_x0o=lc9n!C_E7Y6c|>ZPkxI2+^X$S(9uvkKlc$GA5@-Qj%1b)o;+&ecB0xoJr4wt zq6zA_>*&#QG{iFm+!dw}n=(B2*Q?V$(KHH=gjbgrvco64Q6ew-l%*Xb4D@=a|Fwx0 zX*Z_$SEBIts%=T~Csfgn2+(ipacFxOA^^O6s-Yf&2_CN56i){4q2?)($% zex^?bxt~F4^nQjE99Q6fiI&j96J8EQ(XnldXRwO=FVb*)Qr1T*a#z+&c2BCoVwu&k zDOVr3FV$rP2PHtAP~8q*o7) z6W*%U{n(8#vCVL|-wJp8hgf|i)qpXG5AOKbTS${VE~s3s1wABPCMe^&N^0T1hj zh><;n>ak$hu&S#ZZ?3xP;>}f8v*Gh$`0Rn(ar~ZLh`g0%Zq92nH&mH-}HX zxH-94q5iaVelz68be2P8DMFw#L`%~rLjtIYLviz zNEr@HPd02!&>Bt`B@b5JLV6DeoGCkqbY)6ft-es-T3C~}*1I#W$Cc@V$# zfr#xV^N-{xL$O*1e)!70x`S7!Zx$7YJmwW=NVyc)5UP6!B4U?4b~6y z-&&)oM|ZMg&D+15!l@TO@S{Y(EE4T7_zRlBU(iZ@WS)!Q9ENF77w;r9 zaM$mqBwf_(UO{mTuUy1!8kB-&byxiwO&zNfJQx%F@cm|jISauq3&GhIf;~X63kc2v z2Zxta=U-?f`kftw=>K^$CDB<$hQp(Y=z*B%=nh7-|II0!+A!;MPLArv(CMA2p87sj zoDjA@*X#D@W}08n2=Re2h!4d7V?&Y5m-GUeFRW?~LA;;}@q&jT&b2L`V=6GQplv_Hev~&=%bPxrN zT~0N&KuQH%!9HIksm zw~FvFa55IBA_eBDV$t$Mh1Gxxi-HQHK>Cy2NSy?c^Ty`7?dK!}zz&dM2gtAkWY_^R z>;Ozm8$<+>Eg;h^0QvWpRt>8u+p=sumSyX;EZdS42#$F%Rn3O*$r6859kG>2qyewd z_{kCkI8aCK(*>yLF3|_|#d z>Yw?03Vc+G3-uF1q(c4tHJVm^FfdNPPYQQr2hT(Dz>nwT@+4%XIq%>WGd?Pk2fjTg zm(M$hqy}JWvk^U2-vIv^glf*bGiK?ZP8PrZfA!O8>!)}A@!!@@gU>r%{WSfh|D}Ff zJL&)Gr~g0bCv=WMKdszEM1SCAi|8MJPfF4MuE>8duQ>mxo`+qw1B+WTvj@EaZq>c5HN6)Xi!9ny>3Fs#T`U!!4Dg)_O4$`dx z^iw71rz((HA&^-$AhVc8Y@pb9$;QdBQcuJmI%kc>t`RNEBvLKUJogJ7C#O ztOJ%O%Q|35L#%@`&`&v3KSk5%O%svsax#sU#HxmmrwI{>WbEhPGF6C7EtV!+z$5wC+0m_TJNZPQRp6U;E%Sa-oX=A9c47DT89Y zlieli&1X@4zM7}{+@Qc;c`m8IvtTJ_!&1%x1@3|G^No-M3Jv#Fzq!?*z$-w3SAqhs z0tFrd1zrRBeo@HxTLJlg%s8t6olSxys^9|&uB+kAsd0MfaaRRyW)6`;dwA>?xfu}}CejE`>Xw!4$i0g^%nNg;!zkU>(&ASsBz1wBqgg-k_- zdU01mwi&m#YLOpp7Wv_{Z0{`Czipr(IX)TRGru2b$uhP1k3>tZSxL1dfyXaLisSLg z1}#~pYssN6uhF9F%0DtS`OwNKoci`1XR0RE4fmh1JioES7+)Yf{_+1g{doLWnpPbP zl$iA6g;?St+0n zxx<#`nD>}9$Gpd^xoo(wJ4~DV1=&3VcTLLW$vquxCMq!}yGbB@Hi%Cm1eMJ5f4`6x zjEJh6UVTkNk=TNsNFKOsQZAox5~OB8a?C-;8q%;>8z;&(k$?*+vz{m=*6^#!&xbk%kMKp`tG(S&8ES|Yq_@8JG*>U}}Tmmdj zf8GyUe{Yu-v=|Dvc^~a9)R)>l;SMeMRbt>ydMws7O+!kl+Y`Ts{N)(;+!PKeL*^{2 zrT5pjQ{$gamd9qEEU#sW}-N3JGrjmRyA^C(M&XoX5}C3*%PbFg@6 zx`T|WSo&EOK?I+SEvj9_l!6?XKXb;UNICPS@?0KGYerHdKFhS|mRSxhW`n1JXnU06 zE)#3}atNlZ;6d9H#>>EX5Cd=}-2WMJ&KiZ}fz4C8c>c_Nvd~Sk?(zCQYd=;(LGvCr zzu}lS1>2cktIIc=87Vb%qkoYdBZIxIssEatvWwqME97Q-U9G^JtD`1~48 zz2SAX<&5APD}Fe6{ioI+ z*#4VFAzD{Md{-^Rchy3C*IEd?ib3F2V_Gu59`76)&BXw=0<;pi3Qo*JX;3y9qO@Am zX#Px5s*ta82>GgjkgrPUxe9s?LC9APG!}(USoU7IC8Vn|&FpFkrI}qVQG=^Rh^VI# zC_o%EyjkJ8_@u)1FQU*O93Q-tc)EA?)g)$0{Pe|jq_;0LXJDerXhBNo7hqLkK zaJG|0B^lojS*VUezz#k2L-<3jCFp0ZA?W8+SL`H+(Uyz`%8RLAr5kReiGOy)YI^?@ zO?4y9K6e-2O~kb+zMGzi@X~{DhF=~GvEc6Jw`g#8Ee%G%t2}Cm?lyc)f-{@bATwG= z-Ir-dx3-VdwDu8pI!= zh$d9O*{NwP{ME{5+Oit(Y8p#-IMexoY0;0yVd1(~x(oPoN?G**MWOKc-&Oi18qGcG*42>HE|5 zDW|Wy**k;i<@vuj)9B?(+70Rs>$kPXnSR^Qljyf*JJoL_RZD^YC7QxQ?&IumA7?jK zFI%TWh}BYEH<#SeIjCA|vlCtTFuAXDQ2(OK!Ex&IDHmT26a(`WVvt3H-!~x|*)51hb_=4B-H`qskzonzo+z8e6J@g`!P_iJ@Nj~}?|FsD z+h7;cl%6MJAf55>wLM1s1kiU&{sb`YF6s&;2a_y4H<#uBv%mB8zcYoN5C9JSwE^?8 zAaIX!&`{HC-hdAQ8H;%NJX}NXdW8Cbd#<-;ojVT<*;<&`e8_iO4JimDOGu#|#`go! ztz4358lOlBJ#6@!OA@`Y2jGQqW}=9it{2@8*DR$bX?>}CZq0Ic96};%jS1^Imh?Kk zDmr1dL}Qjk;5Me&X=DyCg$$mInvGT;rLt5zMD5M4P?PbVE9{XY3OL4ycx}t zz3;S}-)HHMt1an|>ka9Tm~5BbkdDkucXkn8W&sAOumA&98GwN>FS8(_Dw`%$&FFlI zS|M0bsvBM+7RXaes0Gpp^V19#NaIN@khPr7T`|dBHeW2GxaVHo2)X%pRE!dtvuHaO zMFuHp`c_^}CQ+0plrcD4B<=7?tv;!VV3ZZyY-My9<}6?8*^n%X`MDpTBpsD)|ui)KQE@*j~lnx#23gGyR!PH*kXE8_td}R zT{ZxBc;RcQc3CQ3`pv1f-LaX$#OQ3{Eo|W}Y~d|zwMSw#WH39d}g!*}Xy)_Hm*NXC(EKF3s zD38m=gn5xX#)D)jM$k(zG1p>Z@<|;bCRB=WQuJTKF8PuK$#S%M)obLO5IEbCERalhgnOqFl21vq2H214_v7odxF^LR ziT$qM&#b2L3(epkZUp~uBY*n%u*OZpY#Y^L+q7A18@7q7;2s9Qmrd_4gvj0YWRYCV z+^QOp;?a01!`J52J%nHr3PZuKB)0P^1)KQzNnUR99?0L+Do`E|?W(Gy;NQo;MEqO&t z;y)b}BBXqrJaDZ~kJw4wc3@n5yp0uX2B8Y@$P8)OG0jKw(rUUH=tx)Kwvl~ITP z-KAs>f|HOu(B?~exl=U+{O>13{>;;~9P5b z!7?m2Hr8kXA#SyR5UUm|p^ZyIwh*mPL(=+u_Y%o&T5ZT~TA$2r`lj+;{Tyw~ZhEdy zGP{XX=e}q;QA65%s)p7ZO)7=enmK896G6e9WD0U5<$FXWbI4PRxWbL+LVoG-x)k|M zrj;!Z9DUQtw~~&vkCcJED(}@{_Gw1bhRkF}69wIOyck`?Z8{gukSmOdHg7Cmqp24^ z&F%(H%$vfgWd$#qU?plSGrz(z^Q$d0-wlfK)FUq$ss#M;DZ=ul^HNm_a13-AGJ{M6 zA78XaQy+ec5iDYYf0GZHL8xZ3yQD^RkH>|E|4z{T%2Hdw_0Zq?Ee7bUBu~OV}Uf_z!&O_KNa7ZX}Y(Sjq0jQrU?O zkWa9Pk~#~e!-dk3v3Yw`4+Jn6Qt&A{!Us2-N;y^-^q8Uk-6OVc>)+KRQBY%$CX08Z zw}zs_du!IYTR3_m+e7|e>fURDucudnA&PF#1ujBiYS3}P!AQwG8eNz~W!*`4JJ~H^ znrX=e&qH#iRFuo(bMWo2kQLAhgd76v&X}sHMjq8Ps6TR0h%APMMfPQ+NvI}J{5y-> z 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%0Ae2*#q}=|2@(st14!cF=3$I|-2Gi) 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∓%(k8hYDA3g=8rPo}DkTl>+mzOa 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

MBoZ@8m<=y3!S+Rzr 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%0DW^KH@?G5iyVDbczwxWA|AGDYd9?q= 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


3IUJw278%U|dla=Fi(^d1Tqkqs&)*!(e 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
`JUL{%G`(GvcQW2RvPFBtET0xDi5 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ð!Pjyo5tm^6p$Yke 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

1K9#1`eM9QTbpzC-e~VfHOsxZ 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%0DHQ!$!C)TBJ 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

E->-9Xk>!Gm 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

X66#6>xuQv<)V&SRtDOl6Cp+O<)G`tNr{ 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

Nhg_-$LKB$G-CK{IF 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

#9_oR{SjNME|He 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
  • `^+ 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

    Uz{tEFonVIv?P`Z7skK-SCg5oy! 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

    y0i^bBE%yi{<@W-^hhXD+$lMzi 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

    pceN*;7eyw###@JctUq^(04Y`nvi_#?j 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

    d@gArBg~E`}c3*eDC`VY{7 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

    uB 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 z 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š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

  • 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 z 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≈Uw(h?^v@DThJrREhY=1JEbk@ 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
    gR9^7`{I}m3 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≶(01Ett8BNpliNETP&5i5>qw@p*=rV5y_2K zv0$#X3S+Y-VCQN+FXcc3{Z^?&aM=m2W!3oBary<67S!lD~yhMl4vOCelgRNIJ zO+u_(KU}Lwd|ZeuizA`eV#fHXs&c1R>9k(dLN|LRG7+hep*w)v_{7sjOHVE4ai|g? zy#cd9!R-oq3Gjh)a}~;Fm%F9}xtZK}sW zt{aUpgYKB7b)zw+ew_K{J+5reUR_+Bmk&E2Z7hi;C^166^z`io0JeBZ&3BQK&vX3j zi2ja5{?<8z`mGMwL@Z#CfX*r~&30HUb#5LWv>9L6m?BNvW9-TIbdOMhLc8bG%1MV# ziw7iLp-UEnRaCyJK)^Htn}b)EhXE6d*$tMB#WW`UZ_W~t`_`ve9as*XH-;u687C|g zp@?DN#YslG>e#H)5>fU+zRy+8lT1XQMBeqD>oJX%s-C868+F&AxnmC7ay)_78-BbV(<>Ri zX-0f8?{biD8AEAk=q9R2Amz07RUSZx@5*V5tflOXo!D!`;V+O>p=A z32fJO@*$UurtcAHHN|zp%!ycth(!hVTBnK$>qziS&o|c&dW&_{>bu(FvYevQ7V=wI z{P%4U1DMm~5mU8oZ0=q7)`q1zCnBLwROVch$n;=oLv>>GH(AJMY7Uzh@ z&3LxXd7UO|%v)Kn<@Peo(y)ik(_x$5sd;d{m711LLy0lHXv%KDaaI!X8xV$3s_^C|m&H_$&g zjt~~>IiLQH&1HE1fAq|E<~F`~_ecMC+G_vk2hk>+I+i&Z(MyH{u8GJ2^~DF?>o~>z=nm;+pRVEr`N-4;}JQOpm1Oc2_#=uPX8o(KbA~8iy0~&TAv3W!;%mt>p z9~2XE5obz5t$c|x`qhU+O)BjkUE+KQ@u@L1a%j#`uXHZv{YEe_pYhxx1%(zK8rbp1 zZ&3x-$H5}Hg62daCU$G`?7J+6@tEqQVo9~$EbBQqI_?PiaCX%lG&nl8K?f&?cQfIw zTp;1(spb(Z{^|A->HFBQw!`hf>j8|A<*IK{FB}9jXAjYakExLF<3vEmzmYilNzNqLl@ z^)ORa;lp3}Qb!Ngz~oX*ExO#dUw~#O6fudKPT^^-8zUoF;5+CIS)Q4V9Pds~o}`-# znSZUYAxr+hcp_OvFpvibkAh4xXcm$RR!5^1$*SA#uBP)Ta>|{+JJiDOg%)NR_ku`C z5c4zh$iq5o>Q9T8q$*kMAM70sS(@+|-@Y5`waA2>rLC2Ycyg)q1C|}?7Cy4yS)l(Y z*UmuGpq05jv?Vs#l-;oviRoF6EuNZL6@o8?c!_)U;6xQnU%+vQI9OV1vmGBFV zps^2USFlZbxJenbNeHy2JMW#$4MDIK`aynLSixzmUEj!TkuXe+PjnT`snA5HG@$qq z+Zp#GmE}K+l^=AA!xgt+J_f;_x1XseJNr+~L4yrJjfBz0p!$(S>1b<;WAm)hs7yHo zY_Xy4H{KXD*bvmpbX^M?tSgTW*(i@R0_HZI6SHYb`sRvf1 zbt%$e1>M01k6KEJn$nSml_QbS9VL9ld~Skqu4xiyVy1MrR9|z@U_(%|@Mu%en)Ya2 zS=1+6k$Ph*!}6V4%4Uvb#oX}1rT*2Rb(`S(b)KcexZGFgGS5~uzGgTRb8dc_zC2S& zF_#^Fif!-7e)Lx3#g0LZ=Agj_hsI4uYMs@nI25)sFKa=K$XbOpN%W1ZkN5XTU>nr; zJ9G_%#1m)*&%=UeQB>rs&i7OgYJ5)~O;ak_yX1K+d;7NWiM2}=rgN|a#RQM+jni?x zyBv8v2yZ4ea7KxGxVwu=y>KhEYqfglnG)qENOEJy#vlnhi5L>A!4{}N6Lxg-%k9P8d1>41F&aB~ zgcaIjTM(fjbvcpI+3o37Z}ih?Z*X+1MNY&{1b&B>=jl_zwN%S7PZFn((TEl`1`W0e zI_L^&ldY`;wUH?sg9aOdHh;P{O66lRWTTKvAKx>#Nk|FVwRp;*?z)?aUsRSvHN145 z_I{A!DNh|a)9kQQA^rWqRq7kf5j}veTZ>B<;~bQC&6BDTS&QNcRK2<7Xqvy9#3Cx| zIwX?0O&>5Z+qCK$wj{H{vgP0_pqj1oMQ~U85uQe9mBf<{)523?@5Q2pXzAm9KG0|P zb?YYBc|SD=4K@Tda#b6HnvR43BN&0dc*&OBGuecj%ts+9ZShT=v2@-DL*B)6u`y_@ zRI)Lss34l=_Dk7gq0FWL8IK2Px>c~MO$uFQ5G4(qBcuX4F$fRaIS*voBFJjKo=Rw& zm;MQ{WT;OwWWirQ`S%-GV0%&s&VUlPqtg5W{oWwEMC8JJ&{88+ zO7AiA^I*{mu2yt@J0Vy{_1oXy-x~}L_6CQ?gQNYUU|lfmAW z3eLm5y`!U}{r&x;{ek(FS0{s4dxQP`ll`NUgTuYUqr?5ZeGqAGb?&@9zdXIW_~-fk zr`ro)kJ8ykm*LWExLj;ndU@*#$)3D3^g)Z1P!Q5326a&3tqVi;Irw(*#Z4D* zb_p5t2%Oql`HSq@T!>^t6#3azX7YR-9)610iS=kAoedx%i3|*~VJO{W;O+jVmHbYb z5Bdfcbe`C@70<$1k5Z11opGJ>sZ>dfOY(xpi8%*6LsSsY85Ykl%UFV|`ybwNE%%4z z2(EeR;}np1-|N7!^^SH_nj>4!QpoNdx@C=EaWn_)ZDDY=iXx*!ELa{kKZblG|2#0qs}hg-ENM02Lb_`qAsM!w~5LJ zTSXmi6?L*X>P|du@xDHNx_IYDWg1)5ueN^Oz1DXD(a9MnwdoRI2;NW{F2cmqE}jnp}h zlg)fi3#IWSo$;}7YEQ?9J)Bibl$_#QA}&0Qy4<`^_!ORR5CG7o`pSI6b19ZsO5wwA z>LK$9YU~QLt=SHI6gxu;5NCcyexzeo^WX$v9yztnF}`3i;B_Er=}Z z8eE_#RpeWYH*ndY&SaUZYjV=gGd5FmH|t)Nic64sqY878Z_qlXD=`h49^ zgq&tvcSG-MQEk}!5HenRq`iJotnEaZgUq{`w#`w4O;L^St2wGJU|a#CwV-=H09Kw}`>SUra@NKo9(A=AC3dvOowALsTM#5fc)G{B? ziv3s3cACL|atM`*q)3qh8Z7XCPWLd(&70f6NJU>ZJ0MxscNpaqgk8VGRv_m6*qy;e zIj8xG`!&tZC2C4Uei`x1>XLEImLf^azmqr-Em4+M38rO<&~yGE!WoxCUv>(li^!P- z{^(qQecfV%J8N^)U{h4HkE_WA+-{^3lTzW1HHkBwBV*BP;Fk>!xQ5U1r5m2lp3jwx z!3ek0AAdcn>FIzrb~)c@FE{EqJr+EHwm7-*Qm?Qyo4R~^dwO0%6A+Ky2T;GFJSse%^veCU!JCEX6s5(*Az@EQ9(NZ5$)2W)|~h>&v4Sm!-sG!syoOk zN&5=rl6H)OqQ*SJtQ(C+T<`IUrynPo&_$A$Lex=|nKx|S{|j#Cdta8!S8C&0OL3r_ zuJJ!h5PvlvtAt3cG}hF{Hl6T9n`9Zs`F!}lLkzd#rrOH!T#MR_Y_|$6KPE$VYYp;z zM|Z@?G9ZOJL>g{dXh&gw44np^$J(qWHO=4_WvE7F;Wce2z0&5*pxOI{B&E`-gzQ&g zd0>dA6H``B&A!KT_I;p#Fh3!}aNSEYMmXQLkxW#?>dvf`Xt_Z~fVe4fgtnKjyUDX; z1xW@(c~Um<6x4NoI`;swAtTY^dQ#!R=S8*<6=`GS4*e`v=TD^4N2^{X3Izh&qU?$2 zj;bpqH@~m0sA;B(bZsQSoD1{U-6S2%1Y}%lb0IgQ^y^WBO;H;l_!GQKHJlv-B+{BWtGiiAOkDlwL0X&QnSEzxlCZ${f zya3mMG4!s!mr9nt1|YwvzkT!Kn_i&5dHIZu1q|b`7;_x(K((6Xa>Xug*y!|HBSt)h z?nF%ixgy)V4V1ipyj9r2V5_j>LmUIz{N9=+rQLm~laPoTp;AnsE==I*K*ZZ&b27_07M|-bM_6J9&j-hGOOmN&pl4j|* ziOVXbA7!#uwzwc=(_O6H2)MVv+dZQeuvc4!8Bc{~W8uKPsBaIj!3)%e)jq*mm`4`w z(6aTzI^=8}0F401EzefwJr9yVCuI`-|g%AK`#6aN+g za37h4e9+vEoW)X@EIb-nU$>~7E2m2U<6I(NQZE;pHVX?|ht!UQ5Ho&7E z)~1G=ra0Z!?Rm5vu*+(WuB|4t>tT%_;cJnJU6;kz00KuRa&YoNDgNrrG<(kK$;`9L<~~pGm|mmD-U8-MU*}06N>XXSlkj;M~hp+>Tq#O zSRF5J4XXmi?O})8g`I2>R>zE6!s?)L3lzV~1>YR@kI~2Lw|>L{!gN#>Z!S+PN&Q8~9)0Q#~a|mXqVIR(}N=&#L?rjMhYz%7zd|SfS5Z`ge@8PVV zK=YXEnP+NEHrF7ACDKH#HX_zdVS|lfZJ2da*xJ$NX(nbuZbH+W!!{qS+sD`$z2+i= zo@*|!boBW3z-4!BZj#e8+xnH)kwmf7 zLw5JycQmjJqSaJd2MgxRw6TSP{Fn@zjW1r>8VYy6Aq$ow;X03DY3;^|&9n1fWg?!+ zpT+9Tl}^9RguIHU8La8HiEf`%Aic>|-EJAk5;iXy^Qp{bcuO%~p2q88?x)}~x(g-2Zq0hN?e3ikp1zH9JwiW<4`(-- znhsI6!sB5f*pL?aMFc(?a>yQpNEyH}8od3+Nvqy1Q4XKdI9vIWuIO#bvskNcMcc~g za+hFj#ipbyti<L?XqlLBrmr-`VJxvqtkR0(W^qB@tu_-q*9ztH@q89v(= zjl`1&WKs`kF0v^?$GL(Om7eLEEoob(+7Q;P`I^sm$MJM%X*^EW1ZPJnP4?V6k@!S{ ziE+-y)SeGjy7I#8bW3dCm^(s)(oP&`6?Ol<_~AA#?W&<=D* zTZn8tWP!N=LL!ohxEOJfRU{H3S|sAB6|7tjYs4WPD%cHuwuEgyTI0oP39BDXr(E{+ zQizn$o0LnMJ42`xe&!_Op@aC`s*K{uFqjYl`~VdPH14m(Q+{KvDJtID=|;S99HKCf zlX{p8{ zVcLyha8oygVZVLj(Q09MG@SE5X%x5EqIg5fcqSxgrid+h&s~BUZDDIX<0hEUtT2*v zW@F8Q$oDwC;^{AOKC{9^Qpw(&r@qf=Rsy*0q7%>uy@fS&4{xMacrWDIJizzhC`V(= zl%!14HznHEO-XGD8*B_~1n*kHT94MLlhPK}d9>C`-xk(Hn!V*qwbbS|Uav~!n8noycfar=>QSx~dvs3W9W$I%Yd%)A{7n{5QK@ceH@ zIo$#hE4IMI%t<6rteidoOb6MgR#VrkA82`6)!emQ?KRn5&;AR&N>MM>T%w_Qe=mZ+ zE?&ARs!_-j?rFej_#RC7H`$+pY7QK?(B>AJi(Mye(I~2iM}WN%ZcCglu3!!3Xch8k zds$H@qPB&p>;a0&%{!(&e%U`bdG+em$*YsSS10?2 zheyY+j*bSej}BfRogD4&9~=#i4qopa4~~vsADo=LK6t%%@OtmnU~qEq>ecb#tK-+N zUJs6rj$a)Qj$a=g><^AkFYnH88Q5&HAKB@rZKfgV{K06<=AAjt^`p7pP!M=_- zx(guAA!;Qmy~C1m#={4ZLq-bUi1#&fBWS9A4i@7tcxUG`#MItrd@hL6rLvk#ky@JM z2tqs~(Oe`+JQXs(i$&(_S_l#P;94(WcNij@)$vp8*xJHkc@F1sb8Onv3I2BBV}35y zfqtc+u#NM)E9sG#C{O4t0%9OG+3aFQ5RzuvGpW4d>4m9@e-;ybmfX3 z!V;V^c{FSh&Y?nOx>+~aP6(kwK%qrs;zSmQ8%4xj2Y)5=b#Y%snM6%s@$d=#c6`YCvWcq zA`8wg=lE4A$Y~S(37^Nwsz#I_uUzTI^W0==#Qsp}%87gCioL&a)+7Lp4RIpeY97-p zCMzHtnl+!}(@f(PB4&3Lvs?tP;8HZ(|xtDss?ftlTZTud}BHRiiM*cJZe z4cl`hM;b{4QI6no$mW9UA`|5Nkh?g`KQ*^17irZ91Ns$~afOI7&CbG%az1&2h~@OrD4^5N{N7DtI;#S;K9jVh94 zV(g6YjBBq!Sd|WL&xa#15t&Ixhb-!+T*jffeF3_MmX;Jt2&pRiwjZx*=vZh{W%dc{ zH?V+}I8kQ@0ZoO5)-=iuL^~%OS`Nh`4)c#mBy zUjcrD@d5j`s`Sf zQ-*hGkdAr864W4VCM-QbCKfBXK_IpzZm>D7Sthn6ZtZwjvX{GAMGrcbFy6X5pv0=W zc~wL(@s=jkWh3s{6xaCvFwR`r_pyXbDH{^^(%lKMW_2akx1i&SJr+s>;GT4G6}-%m z8VEP@Axs>{`D#{ldrh>)4K~L$B28^^oocEb61H_E z*tR%})WCG~ygqubBs^8Yq8wUvi4f+n#__gV{_>Eq{FI3wH*-;1+Z$ zpoRkpsG^7?f3ow_Cm`{{0EA2GSnyak-D^Ykn&KKw{LJSwiRKH;li!%!CWZeB8I9<* z#mfp+2?2wP8wVq+iQR$Q)hEL&Hia0u*aLaUp>5B9cn(Bpn=_XEtKX@)^hZA`cmn8W z|9AXgfAoKkq#hNMN&NH&n~5Z4pP}Ik9jy7B%jgTFJJ2kl{HI^uEGW=msxHgHAy-lO zE6=t!X9?{loo}las;0$>GWCuIUBF6umdVI=mrSIzJX>8#Z+;fAPSC7vz=H%;fJ!x z+-l8w!^R`9KnAR+Ef4|yVs`S8n^7vsN_>NCcWpoLfa0ScZQ3PJLJ*=MXjt%-n zZmE~gI0&u*hz`aozRe@LBi*U8 z7KRtF&cr|xHRuY&*+wX7o!y+IoYuYoMd$|PXAP=p30%i&x&pUQtvo%uG)vCrK!QZK z(81Jj^)?6olV@S=Q&Z#CoV`zXXSn)83hEpSDmfm^k(m|b9$M)4Ay0W2=c^$LmRmqO z*c;s;F*^rYnk{@L+scW?z(%=C=nvBbT;~y+0vnH5ic8w5vs1eXdL>A( zz?f1QQbu5TZ@wms4MFf>^`(D&k^5GTxmgXRD9Hi7=3#x7sv_Y4uF9~p zK%=EZFW$v-1bcugQMXdGQg|a_o+_;V8nh2@v2kO^ zAMWY%LZ2%EJL_;gUc(5pSp27?r?ZNV}$?!1WEwaRuR>blCs^!k7+sjswygKC$GjDBf z8`9KL6Q(j#wJ0}nlg4t|j=m9vT13QNskZe}w6Kp$T6&W(6 z4vuE{+HzHeI)a8SP+zqH8*0QXv*G+XiqQGgLBx?-V- z@w1Jvg}GS3?1XotA?t|5xR~M`IvVT8U<$&42Vs?7$_W#kQ_1?~&NDyy87Jdv2ttPn zUfq+emF>|K*a&juDlM(q0P)OKnu>_MFkdWroWtneD&c}VmByh5BaC^( z&Th}lMKPy%SjW>{U?EX&F)|l(j3bGNTMyauKtI=cW)_qoi<3l5dBRT9RLJN;=DY7< z5x zP3IdxjEzcq&>OjsH32+IB1vz#%q2+!ue1p^Z_!+yl`!{`kSsOHRyG&S?3sz*LX1!@= zZFhKMV5{#OVEE?#`|$Dfm(%|tV+a&`F)7U(7A!nG$j%}W787fnu2XVqvOVhaQuE45 znW_nn=az`ZM&#%nwduCd$*U8CO8MdQvq7ojRBG3iQmk|XD&0SSit`tHFD(*~3!SgA ze&DZy-a&a)koV(VW@`)w%o}j}6bUCI6h9DQ9>)QSP)(hH#7bbII8CZnN!R8t_z0I1 z?c4-~by|0}2M)FkJlGW2V&l0U*v15E4IFF{xZS62V;9w2`dayu?SX?WeE+sNVk?Uh z5RY>iX+$o4o=2P@9s)FvtelX9dk`Mh@4P%*e@7yAPdz^W+QZtcr{hTUMA;b*ZD;sF ztQru~Pq!B^i)|A{6um1ENK@OAsxU0$O8ze($p1Q<@oZbf&}trTjyxD_8+m-VH4J&O zSxPaTB8{<}oUu0P=(P^u4C+_o-1OuAtAoQ=gM-6YN3UNUpX|NbdwqDgzyEr0czCjZ z@OuCC-tnu0lflXU;OOM|)xq)ptAkgsPfiZ^4vr3A4fc*+9}fnHd&jSjULPGC9KYT_ z+&dl|oni}}R`eycqkT1UfUFYHKPM89&x!mELfOnUSebLQqvRDM^h1$t4~Ra;LpWLcYx2X`80lwFzoo-=iBlKDdz*a8x6p?p{&!vW$dqV`A&7@Bj6_svE%#m-|oY>|_IR*7a_)v-*s zaeT!|tcezR&BKq|p%lDEmav36jc`wmibzd|G?$_K;E6;e2`CvtbN9wJkMIz~W_`uh z$iX&|Ez*u{k?Y6oMuDvwu`K*LAFPhf{=+S zBDV@`^x|8KY!yqKWJ>0nG*{Ps^jiOVV`LjJiL|m!!;o8$)XvNnFS0EnN5y>3vlR&* zL*`wo8jeK?vEc$4=uoMLSo{Y157gtqmuw#GGy@$20@I~Hvln4nyd1JUYj>mZM^WkQ zxButB){g$$HfSrk>6Ifo&RI=mj=yVLf?DJibhLB*?1&s}6S)z@?OZ<_z*)-%rVIU> z#&TWA5N{O`u`9So-XkTMjAlz3QuS~sL=Bp{rF;Z7K_0~u;B^_52BeHw8@UHbK=ftt zrK(Wl5|Zp-;rUE>HWX2B=1GI8!3inNk7AJVj0+NJB?PLn#J3Niy%-ENA7yG*{5ND}nU4o%*@Ee%*1Vdsb z7-+_G7LWkpx{q7ij?f(0;tki}`evo9(bW-8X}wV_6?XGXiNeH!CucJr%WD;hs*GfV z(|ZH;vBkZ-A+p86ydkp1;d?C-coh}n&fpPFgJbekaOj~0EXo~bT;v{h3;mvW8t3{J zaE>5iFY;NeS;gbiMm~tuTD`rT#kl~w*N_Ea1Gs&|^BM7uBOH!{Y9iqe!lfaddq+p) zV4KLMd#NL`eoV8OlW)*iOk*i&P@BeZ%{d|MN5XK~Sma9~Bs+b3;Z#SgUofC>^Z3c1 z%`vY##&D`d5h=^`lM0&rp_5Layn~dgdb$`>!@gY1=RA90&?BKsR538l9$+w$pvM}u zz)qIX>lJ*q^BT445QZ}mKA69%**MPU=6l{G2U;xeCrLb=IJUec9FHoNnk5h$fPdP5zpucDc2hJ zJE#!AMGaTV)7$Hs#EQA4-e25|Xx5}%Yq1Vd*Ch=*C}itiX)VbqF^dG^_lnBYXlQRX#7l!awy-Jj_8nh=6pw z3;?ko47LtEK779WoEkSc3e8y*FJhROfudn5p3IuiKNvi=dYG-NwEOeUsVOe2o?M-1()sP}$6J5#0p#UubX5iOc37}Dr|EG%hLMy~pa%K+c1y1@@v3|$ z5Fa1<1SH?_3qG=s5|!vnH5AV)is?85w9IGtC47qOmdVFhFTkz?OaPTVrX3dOXAaD( zfi4ZixDwH#M2xum$S2czoB$3{Xwk2S;>)J0p3{gXY1rsBM9mGQn1#f-6a%>N5qfTL zpO+3XELeC}Pj&~~Xlj<5lWeX&PE! zb5#j~g0!*t3^;2EV$PK%s=`W(Xk8~`?R2SoKhJgVXR+#CME`p6`Ly?cdGG69@Adt! z{V)Gt@OiKI`n30+_aHsdjCUSDmY<6;u4A*h$=^kf@4RsMAilj%TO>KcOWp`MIjcuQjJzhqFU4IMY707et6 zCZTx@t1!Z53#aW0_?FOibYiO#z78d9KpkrCN?lM!Lum6+*X)zpLmiwT6|{9Rw|2QN zdvS5YluTAHYrX%jqNXc!uqm{)Sm_E~>*_bTFIg`qm7&JeI1~J#s+nh(O_VQpv?;7{ z#Z#KZVNAn!usS)5F{xw^UY-lH`jwk&StP)!WfH8qM^OT`jM=PsX}d$7wv!|dkz3kq zXVgxWY7E^>mTL01x&KJ+C0%r>cWNnH2~$6xXyhtd%2fZ7k456k^Oc=G99O}0gwiRw z!mQfvja9w3@>f0OHw^Wv5_5?_&u=VHbHn}GG<-X~;@QJ5Dti!FWprU0mOr>sk(jC; zFHBjf^Y!86M44M<0qKr@HqC^P(~RrQmIKpFEMW`>O9rVJkHlkvOgX1-1)m5(1~)C| zy;VCyLw)ifYH>>Pe#MmHfI!uVURYX_n-p>=T(ho*NKl8yR<7=ru#m)H2nFTbT*CdQ zC*b_hDhl0x-0?MqdhhM@^5(ikrh>=stO{KtEZ|X~5)?^b&-b2}q2*SzQzaG=oDe~F zloh}b_dFv!wANg6ZmJMxk$!f2dc`zP^749Ah>gLrq~1U&j1)fFaq-T%xVZ-LVoln# z+RhGTf=02dw+c2=9t)n3(otQO@C~-IL>d>a({1F_B;3Y%q6BqD(v(K z2qgmeVK}Np@;>Hh|d;Ul%7neS53K@YNgx;WOezj(IEjJA`3x03cmlm*rbWJi zo85R*=-rxr4DG`N}k2(y?L-?xJu*j0W?3}@`Oup6e-u3Yq1;^ zW0X$_7U@H%_Xk6tM*x>*$J0w9f1+js9ikLK$_G0VHkTV)#_;sE^^8sE2pYviQv!}& z6o+-4y&?4BVBaje#USK)VQ*NyCMnmY28a#j9ymRAuCFbjjZ7`2a$LmOoIkOYPla}h z&g6`sacZMYHjcjZNz>aZ%*iP!EsI__C9NHo$mx){>=$vg*vTF?;Y!&(^ z-awxZ4ceR2P{aqpy&rvb5-PaS+}dYDcnZqcXt=p zA4XW6Ydd@3iPAmS?7g*Fv)y4}h|z*n)uk)-&>qCNQE8}1R{$ix}R%CJ*i+nOf&g2kwoZ&R%GVcMQ=(lCw z8w;L^%+aK@z+2{XBxso14h zmeK}~9+RcJ$GTZJZ0RWI3p^2maq}45p*#^>C3s?8GM!)oPV1}rOV(Qj5p^ytfEs5e znZ;Rfz)a$=qTapLVa8LT%}IkfAkST=|I18(mUynrs>cYzfX6|EMJAx@Z^{L!a&Te{ zRSFJ%71}rEALi$$MHHK5xYj@I9+K~h9c&ld*qH5#Z9Xoxi`>Km*^8Ld@e!rG+3D>y zj7ZtZDF?FRGU@k9hb)LTjLSFmaa%|0|6C(?O%kjQyRw4^n(YrxU_JpR zQ5Z(8YgTm)hp#)LwD(>&j)(sg>s(DUKDV7f(rq%;e^w+yThgC-0nT(GBY#Nr34s|l zNz~E-_b847&%D?FEz_~KfpRw{J~%qwFeqNe9_;<#(E&9?kjq>GxAB|I<15_%f$ zvw0$1C3DhAAnf?9ibvm4KL-xHNeVga-Ea}|6^m2|HE0bK4rmd9B(o(-i-_8W zC1*m4smjgWQnn7QH*-y+>dY^Mnq;bmR-d-tJXCFJ=C>+ZH8{=XvWRmS*OEd=I-`79IKq;+hnaF!qvSvE)cAhXSsgk8@$7zdM4#eH3? zseKQi)!ca+I;nmodu6@~MTDM1PsW#^z*~(5KH<+Yn!2?Eze5yo2Bi`hp{DJAq5I}L z8u`VEI(odzVu_d~rMOqHFnjR+;N(yAh{3U?qNOjE?1pDK>I0zN&7<|3F_oKC8FZxq zK0_wBIpa=JxwZ4!Knt*~S3)3M!`V6T!y0stX6oA*meT`bmS{17Vi21HFyR=*+P^0V z1Zi^ccwfk{)5XJDkX-Qx40g8#e24Dj6gw$oc!`c5#07#?A4HfSzt31Dmek}0r&`GU zje;gCDHbPsZDHzNS@Y>e!mM#kt{&~WR+Ko6$O7ULI;X+nJHOF1Gqv8L)`Z>QRMHVU z*eh4Ku5)&!B9#C3AS`qGE^^^|rYxDD9DiEqlE9Vn@B!LNQbpoT zlUqjn$Z>OQvp|)r&xX)&u-h6?+Vu{?`}j@8<2;^xAZKbNuVALMW^~@BXLa!on;q7@ zLF6Tb=rVhFreep6wA%KCIQ56?!G?jd^bk%luq!f7UY&IR3jJleZ=Z`ay) z>m#Y#xovN9Qn7y3RU%VGw}r}qx&`)m1fvs`31zF`XuEw~u_ei{8hiWhdPJwUe9_e+ zTaA%6sHU_v@n*Kr(!rxQL>Ox}SDC;+prl}@qqB>PG7aC|O^dNE#&x=zGu#UFZm!Ze zG+#NJgdJR{!H-WYEp(3TvMEC6+F3nQ!d$|1CEt_K#&5kT$w=6<{n>G z)lsa1$q!WtlW$N#^!n4~<@0TwpD$!uRFLTYAGq$?1Sd?DG5$*YC08}S*fR48p321ywcF+vzNO{vWGUG8w?{<3manE zZ5EUWzZe`Hy=>Oc@6e!F6S8mb^x3W;)?-_mFE<4bwhV3_Or6hp*)_Ag(UPm|3mMX# zyPgy{H&XMk(W|uWm~^WEX;+r;ud5Qx#eE5LqXml4Af`e|w1lRwmHk4<1`*MEW3Kbm zbq5c&4DRUpwFD2kn||B8=a%4YkGxHvvim(h#kpST5IivH3mU_R+zDjTkOdys2MdQ) zM?%ko1jObAPw!*Ma!pF*VfkiF*44?j4ru~Vop<^K?^QO(U}^2J`XxO@W$Yc^OzyRY zE}d7Q0x$*BHLy`M@yb=Qnkv~qEiZ-BvD_Mh-&*j93CXA1%l^ldKNcXJ>iF`mboi#% z`=;J`qCsW-n^v-a%a=s{88T-W1lT?aIMT_U^L(~DHtU{UPo3^5$Z_O~arXCdJndh| z+*N0sfH&;~%_vp&W(cKl%qzQQVkFjw8?-am8bN%j=>*;V)g@ej2D2l((FL!_nP(sW>4XPj0OiWM~W3ioI=Q%Rm8o0oPjNLkr3CJ(lp*TE5#@ zg#NF_o~(E~jy-vg(AJu{y?Jzmy^xC=e;|s`KvD7^=3GCp;E6bMeCjG)Q~heW-v>VB3$s#DGpmrAPeh-T`F~`2wqm{L4d8ZZp1pil zR#LUuD!4J$Myqti;=`A#@?~SpZ4&%-@mwk?p2G+8FmRV}pcDzLVR?~>Q>%|;_5{*i zwP+($3C{jV51&0dBiV1N&h2^5*ylihp~sDgrYz8BBvrEz3`IM9G=*zc(V*)4-k4i- zeUO^#Eia>)NRl%(Pv3$3SiB&gh#?CiQfNmH6!Yw6V5Jm&SF$op=}U8(uHiD+J7m|& zj?@3!vonvg0mu5cXaDx>C&80^c4n?EzzC2Z+SS^lf&|xqx}JOB1aZN zGWT*?=-JpDtu*>HIn&rAMK6NKm;I5*HT=;j&&Fo2rwI;FK1Pq5RAix$IiHIDrp{7r z0IW8Ah2TRQd$y#+5=bGO)gzo3KJ_`w4bj|-t|{J{ll0;C<_y{=U;#M^5csiho5=x>;0E+e|!lq{MyIYtFQj8Sy{D} zB&+fn8;Ly3^A+s7?^PyHyv+_{jaK?5Q{iczXAo`HKaeGn5p19F6PqK*lWEW$2Ntr( z<`rYcPtshtw=0uB^1Q0j1n^oz^lc&AqPHCNvdthEN$OvV<=NfskX`)KuH|qA&@>E( zmvFqtGC}9UJfX>k&O>MPVB6^C-a|RSWcxJb1e1NG9AUEa92quy%BB(MLpT#KoPBrp zJbK77zO;946zi1dpp8UG=k)gGta*f})D_!?9*V^fiJVcYXU;d3+$LQ|4q2xMLrZi^ zZ+1iU;7>&#Y!%(&%g_?t-QZ}89&8)^C(cRBJy@#`yxRu*?B*_8#F>&HbXXmm3UqaH zDpQH@kAPGjsQk5<(rsaie@{}&Bm!p7Fpol$NuaY6{3ze!HhQCyI4o5y{hA4DGX0%5 zFSu`R-N804fN=lboAl8msq$R+W0h~VW92X7|v;$4F ze{33Qa{VGZSY*m~CG)8%L{>Hz!R_#IbIP@ZdV0?lJhZ;py-s?y9(uHJRN`g8QtgsBKlY- zy9q=3Y_2Wx?)2`|`eR3pgCm8``!z++I-(b+XLa&BGKFEUVEUC#Br8 zn2!Zm;(3liReL!gW7<)l7!Blb{{vF3-q;N~!@D=8c2H$>$eJBD4G*31)cQMkb|$9u zPiHF)ocq+|&2A#gwoH9$FN=X{>3YDs=EC&Mx=6jIEw%nPL=U!&ZX6@(j&447#cB-K zDN_i399db+7f@8XXqZhv*92s`JF9Q+%)4lKEZEpAE`rUWAi^OxPo>Ut?h{Y>_Q!^M zWK%TW9(adUZ;sEy;OR?6MKW0F$7C0&I>U0}##Rha_2&xz?pUd$JNmI6-R0B=Gg5zf z!|rdUp?SH~E2J*j*{qNcqxfrC)Br)2di3RS_#kq!+M&JHAGQi-3cwgvNUQiIA|g95UBtQYqiwz{ z!kL03i6*n`U%Pncbr8)?jqOcp$y-xC{8%`0Wvfw78pZFqEWUWEUTdanf!<+Nxjl}+ z1A7pwLQ+dcW#u@iof&cpkT!8|R2SUJz-zNwXS;IY*2ivDx2c$FLDdM)R#n2%Nn17( zF0)B^G8i;)E^E;xh*UK;#3i6QvQ>}pro7zW1F9uJiAp^uX!q|J;A_}S?=2~uKaxx|L}bjFIbpxt=~|d&@)T) z4}l)C?{}kk@dFF=_q$2_!?X9b7JZISPR5s{NeZ1scavXC$|mLx{Ys*y0Q;0PKxjaq zvQ=ZZ?Wgn8cg^j#?QN!DBI*W#G}ILSaE6c!&#hhr$UUPe1&w!2GNEUV9RgCP_EeG| z*bDsaeMu9#=wJussvu}q9b7tZRsOm)h z?FOk%?alcaT=HO>ApQjv8gGJVhlMl12;u5wZ-T{_Mjm1NUSZN`Vvl4i#41mtDAVR? zIz`{A#SSFfXpf}jz6S`Koghx3s`7*ZOC+9GyxWpkKEQot^KBydB=I-{E;A|4q2X`Y z*LR}N$iRmk=2q~iHqVqRr**Zf9~0&^5aG>jo;zwHIChOGHEjwapA~u~3aOeqTy4-jBJS-4pI?zSqS#iZc)akK)YldyNwwK7e#$ zJ9p2loYZWZCTh$R_LggbtuMT=X7i&iWz^PhYLU}zZ%_T1@HS!H_V7P*^frlIhgDIf zw=Ta%Kd1|^(QMMTytigPU3IozlM2BCmP+5IrDmW`PaigiG7+jQD#`MRQV%SN9|Ys< z?s8QAIaDZuw5G0#wun{25e12??<j3^VVJ9W(SM0eSB*v;Lk z!428z=+5INDi+S-B+4K;YnYrlQ|ao$jRE&RE=0zY1pTPzJZ0`=mhwZz?_OwAgqhc%Bo8t}vh3gL`! zr*)VAV0!?YGX4Dwl4g+I;n8n}&Y?*d6;@yhXIi91$s0=ggUvNPg?|F5b{m`dQoO0# z9{^X&-k77C0jPrEdSo5}MB&`G z(V84@C1+5+NeBpsWW*Du*vqUB(>7$1X;xs!N%!~m&Xmk!S%{xdnh(<1X6Dbu4I7p(tV(Jh>piUp|>=2YC-Bw;L2P{BQ9mYI$0um*Jo>(v*$`OzZ4|y@22ywmHC>hE z2elh$_9D=|K)+=CYmtc_trEQ{{EVk@k4SdAfxeJ=|AQL86PW2ZNdk&sK~!C!u4sKo(!WAyQQ$X0?w z-&Dtu@b;Fyo!75lzy9LK-@*9(hIlA=3vDVq>4ZzqZa$$#u}%qyBu|9?FL6FI3lmOE zH;;GxSD|u#gABH9;{9=uZR72L2~Tl~*4%whz2$NVuvV|g5^}}(&OTaiihR;LaYg^< z;M>KQa#R+H&!;5KjCH8FVX2PAqP)9~g}NRoKTs$9Db|mPj^J4yiDYsyxrNmPt*_vI zV_KPKe2aK#63?U>kMyrnvlNGuU>9-iO+Xkc3*MSjjLnfxZ?7o?Kvl~AA@iRqR~X=` z)b}aBnksy_+o2y%mgF?V33F2LXreCLqD07@0D&7X&Qv1qc_w$5h1~*8S}>XBc7oP6 z;b$D0OmGgc>@%)oG=rmDpl$C~h$kDA@z%6lu1E;k=|{TBSSZRgG@(6B8LqVoDHq3afgPJ+TdiAI zGg`{|k44^G&zD@7DVEMw7TZ)4;lO3MwiC0BKDHe&FrThM$i8`R7=(nBtTrs9CQ!72@)cbY1uGaP+3kD|;`(w8J+ zDgxg%9hLHNR;iHQyb>eVfenh+-Y=kThAD`V`DB8KOoYn`vG;I4uscs1XD2U#{?ck< zCGxJmM573`snatxj^zy)unn0MOZ>7jEfvd&0@h3^t}Jn5OiQLU%E45|SzNqV@nmZ9 zwy=IHtXHwxp*%B+b*L61+YAtI1Dd;$i(pmjADDG;`oGieuy^jAO5>2Sy^D7`&&<0(-5bOHwP;wvGcF^5*(+eWso)^q zbFqX9&TEXChYV~ou=iu)yLlW$lbDnOyclmv??T4r?cb7MO=;2#gKGA(HCOMSZZEKW ze{3$_J9R!9;9ywqZbzp(?ELKA=oI!F!V9VMs;T)M z49r8kkSOo_{cfOts3)yx00KWYKYd}joU45GNZiEJAlZ5TCx7A1^NU=}->yF0Uhc4|$a6|0XsU$RBB&~X{n!nfyMWpAsZZJX zRG&qmHUlB!@TG^61bUllm@>Ls!L^eA{`p`q5A?Ht|GYQ<_s<6h^Up#5U^3TV*uQ^1 zIQ(vZ{y9@iJq#9KOau!wQ&<mhS}bqP zzKcD*R#}Bsg$JxdVY@m9n%mF9RA*N_7nw<)?8u5qWME%xMn5|$zgBd$`xh#u=r)7; z9ltR66Ti?=?RNY^>%=~xxEsgtEA`@<7A8!$(${AI(@csaSs&n981a~j(d>&M6&M5|ep=qKDU4E<^0u3Dmi_JADHLu@Lo08`2?JzA= zl_-yD;YD&N2Nqu}r&xh3GnETZ-wMgIVFHsNb|M#*mpo-0{J7RxftHpv;gvOZb(|!> zp!k}fmg}4+IH0k)@TGFIUiqR46FmGwhe=sqb%JoFW%4jgP7yrE7N^wVTl#$tM+kp7rMuPdBb#HibTvc`;Y&C z(XtD`e&3Wo@Z8eKso$fhfc-WZUxI^)$n5zD9TKM~(RZaXL+yS6M<-QgMJ`OzyyI4L+n)0tvl~#> zqcPKrob{Zn!+5nOquFA?gByi2;^{I>$M5L*h{-_&e6J~OWizwh0Y?*-t?L~o=CQdn zy0r4Z%GIk@buSi`4WE-wTo=3^50jN1cv?od!YaLgN-vT!eR$qE4qCpH8aK0ZWIpS_Q>(zQ5(DdW74Ao@Q> zAFr_|T2;J32J<-x$zG{QfZe+M)4u`V(V}aivaBFR0IrPpu2=Bs?)}LnhVRe~^_xluo*Y3ntIpRHZad%f4-g?|6#?=OBF4nObpj_B2w z-@f>9_-mhj`0~fUmDis@b+g3p!IS9y2=5^CqabRQ1nr{WZ1Ed)*-;#OHzx`0LWR9w z?Z{#Tpc!0TcxhvUq$2m_bx3#=F+Jm^#K{%oMXq|W3^QRZr^iYqg2OCOhw-`RCPgY5 zAqiPR%VP*MOLKn9nSOe#6lOSh_C>Y@vR}glHcqxHDeeiqkHA^2T>_$A3G@Fa?mxiX zM$SG#yvN@E?z(O7eE;3My}kQxcgyn7O-fBRKrl-!nPO8?k2<-@p0O=y+C`v9Vgv$g z6xiJyNtbiZIp>^n&N=6tbIv(E^}bbw0?7`N_1)ReGirhWNCJhbH~a$3qR@THE4@db zlafi_ImNw7b2dIc*H=4zUmT50dQDS0Iw`Qc8XU$)pAob zVGSXcL;+df)Tdi53(;fA36||2OR1XaEK%m+R}_50)nNLP8(uALa0B|_iX&E5WUj#z zNag7(5Ctu=yVE`BleeVTKi)lfO5T!oueba3fV?GpkB{4(uJn|>HCP@~p4WcpjiNN8 zV@Zp6^N>z_S0Xp%e7$qfQ|ch``fWrHu#s{q0~C#T$8V8^%ww%duDpZDgWiwWt#f$L z-#s{K_jeBuP`L!d)SP#pn5ijlTP*!}OlkUERr^_R_txGl#v(GImn5I_q}@khg{~#^ z*VIdCJY#50OTNI2PkmQ<{{>N+ddigA9nV4$G>Koo0%f4FnPC(b)z>`NSfFfm2GgUS zru(gO%l`U;8$$7yQ?d;%5-O$%Qla-j}a z3L?%;c?HwUMs+ zqXJL)UTL;T8eXJ339=BTaTy^hn|Sx zU}&NXLykY~=zSDk7#7bsN~B|h?@9Bep+s3di!LPJQf9-^5c#!!h&hLN1pUyIdP~W^ ziS+VBuXzon!n&6jJkP}B(mvV+abRqiXo&_s4_#8kUj{q@bi4IfJdC2`QO~6)iMzp3 z6kh_>WWs>+Wr>_{25%qFLiT0*_+aUdg)QY9KE5U3(5`yDkf0_A^3wDx<@^?}=5$ zD=a)TRL%e<{l3@k84z7@#e2x7ea_~jql@e-!v1VGWrcvf(O1NDnR%-lj3A#WF0#pk z@A=^v%GJEkD^s!C98!KS_UZe5%9Y{>*((}E)O)O2 zjk1IT)-WKfg`}+Wl#G-+$I7qA!Hip??y<42_JKub!6$J+GE~N^GzjLKN+XjG#XV`s z^iyV^7>1gm}mNB`VDEwL$$+{ZMaJm=9YW{@#(^HuWFfz++o3eu`exNid{u9SvFzJ7{8w!?}=sY%n<)z(o{Q@qt^23 z2wOAaRSk~L1gvJLDlsLgoSNauB(IiQ0RW^7I@|~B5=EZHA4i}GiuY8hN2*;H`)caW zKnw*FHjDx_tBV^vjS`$Uf;oxKSsX}tFF!1Tn0{JtBg#_YN=j<3uP}CW!N*@jq(}2) z9EG5*ANV25s?ad@THaF?MjP_qMJ(tbYYm`SYB2&GFp)#S9x~GNqi{=%ozwL7>A4Ml zr(5Z!68wzoHGj^rdHg>D-ZD@Z-@V&V#3M2u3dK0m2(KKc?nIJaW>;(baiCaS2I)G5j10RTnWb-x{%9a z+hd%NAU}#?6>rR$3;{v-?>6CR8#AyS7W&M)9_v2(n0}Wx& zP-|b7Vo}YTt133s<%~X2Viv#^w7qmJ+2BtCI_l{1;FDSCwm>Wg>6!Wg1c76%`-12c z8C;5|M&n^n9;yVMy6{(8=tgQ|wjS<_Tv(Qsb6lwxzgHwDsrK?1N`{M7atw;z zXtS(Ylym9VJ!`9vdUaQ$#B@JM-86lng~IHl@iJoIinPOhgDG(s;v51ZFJW zB6p==wwgOre^cocivbPn4(&8mRTHbsRNi!v!A^0R0{tY6wECM6)2ZZRN=3>ha!N=E zHi6hK5u0?hnM%!{E!Fxr^`-DRoEJqs#OhR%o-CRh$mf$m6i8AYtQR{Sp)IC#u8B8FS^jF0a2&8XQtNW& ztlQq{9?Q@RjzN>HY}TTBy^6{eGadD>4%hss)IEH%3BlS9hL2~P(Bu?EjC!ObGM(m!)1ZNm@8f!ejw+Zi+-OJGYsjEw!zV z!r~yH;cK0FQx}_;Y(o8j&j#>#XdoVZz|?nNtEu`fbyZzLru6(AdZ|CyCJFp?{}zry zD~g)k(7U>%Ns7c?DVMR#S>a?B>X8e_nD7%=3>Qhl=^QWK&XzXm;zwjC9f3b&VgTG2 zRO*LC%L-f?1yN;QAotgKSE4tI9v_oTkqEHXk_C+{ z-e&Y8rF@I7bBj?0uG6L}WA5BQ7Io#?91RK7-qmXu3#v>jmfDT3%w;wfXd=F5fn!K6 zZM@(SluJy;)<8T2scb40&j2Kzh>xW4d`CU%0L#fno|{HvQ|1z|bY7TR3y-1e-y+{c zp;o#Tas4pHJW<5ZemF~*>7_xvMG-G zMALb(heqeOu!%*mM;_4}ukO9Yf7I){g-3<_3)X#=LPG8p9)0%JOMW;1;zf&c*Y{hm zUcIq5%hlSuM}_VD9domVo9`4}^1GW0@(ub%As;$(EfqtVc?*aPTq^xg_bYX$K`zIz zLu&MDsESKHBk>G#9SNwqyC05H57&VoGP(PP9GDwW=Sj_mHZVxqNTC^v(=k4q9)}9i zmWUT(SB`5LqKKSaq>}kuQh?LHW^?!(hkcZcp%5hrmbZX(pq@+?)e*=USW<(4#}0#g z%z`P&ok0X_64P^Mt35KHPBUPM?*dd2jbu|ayBBiZb4~j-Fmp?kb`&Q?F4A@&Num=1 zM!b5hMhc~`j20o6hnlLmIukyE7nuMW{#kAc;Jf{FiICAS#J@3wyi4qouV*|dipVpW~1$~uKnh3@& zc5&M=qe_xq{JGB(Dz&0gw}30iqcBwRJ6mCaY?Gob#Vz9zf|>wX-O+YQM{#uNGj7&O zbaaq5w*kihV|jiPPkx2nqw2L_8O7}QE7z*kJONy!Zy}x^g~c>$T_vNxtI}A$s4;$k zig1gumqgr1y*Pc4UctrUBwLhnSG7E9sR2F@-7T6#6W?uN&nrfMBYr`r;#Y)zpoOrL zh`?`$fbH4yohQZa<&=hAaSy!M41A;<_UTF$%uVe5Qn7Uw8t#?GaKDXDqgh)^{Tf%b z*HgZ@%8S!j4i0)>diOOhixS5`)B}j~Ll$1IC1-aNHZkR;uZ7sB3|A2`sCn~F>y8}l zm<5VKaWl+*rU0BN)E<2YT@e!C*tv}d;R;JZIl>H?KpBaMXmuv8KE#MQu41a6?(fMc zTqOuU-QQ~=jT@F(Aj9N~k6wEB3N3P1{zdM-d_nH!)kfU(iu^eLf?Qg~CM^zM-7R!O zub4zd7J7gT3f=i88O#yIC5smbRgq~th6Y_DbU=kqam_|RvXHTd%9Ra6w3Tw(;^Fke z(bmz)6()CwpicvXF|FP~+l~!^{IB8G}{Lo97=N=M!6l<@FdKwk9Pi>ucaKoFDFp~CI~Y2mzN8LFO#q$-!1^MpCD%jnwRsJd z1>JXaPm{zm$twyafE?W~?n^|jk*}_=X#QilOg9_Rq6d2q%FS2WpDBZ77NV2h4R$zK z4u1^HmiG|8Hs>mw0;NM3Kt~m)NbwMH#<*A%E4)^yOYe0>BqvKIsi3uC6s#4s5Doiy z<_8`|%xSaEPdFL+m&_{yWL7890CX1D3}{_VleCvF)i=!NEfce= z4w8~zG{QO^(2LP~mN`mJYA0eqiQl`rS}p_da!a$G7m3bSkeoG*S_T@@UKLgXs4l}| z5mT29X93~kS>i<(Qhi(La-phC6sisSc0G$Y;0I2Q_e2P>5be8TKctY}(W!rPxG#@F zUR5+qFiY^*>Z4F9JX7(N;3{Z>Xw$=t+&Eth^NkW1)?-jGRq9+4it$iN;P;O-0@u=IJ1crUY3R_woD1 zB)SMW{7Sgq07?wz%Dz}7X-{UMdpKOqG}6bqYNZT7Xc3t1(gwoN;0gL6Xm@YI8FL<= z4aCYhV5JH3d@8{vH+s+0kqS$2n5cGHFdb7_C85TR+6Q zG^NS7MRI4DbQwVhknu8A_!X`?86vifW z#(s@zV=c8D{E!?y@AQ7yAQ!UbX0{As#%GgEvq3%@X=_LJ4OXUW+7M;x8vWDF6uxvL zv_wvyn8hsvQji@Z;*+%C8(`|;#@O8u(HqS5vzhO;!2Vd@X?96n5g}=-9ca2-%t2~J(A1)1Y%W-Tt~S*k;gxkswBEGE%?$)b{^ zNJOWI(ELfJdZzLP$e&aKh904iDrp1js}Bo&j?0fcoSTRBQZ_h8QD}Jn-GiH2Dl zK7NyN_XXuDyai4s=O7}}7s-S!Uv848Ou8=Z`9tQ;-GHHXIjDObOn%(NK zg;uf}Ea;e}WLhV_=V8~7O85i~e9GmD`5u#1T1^kd+S{83egd}em>}^qKce0_gy67r zzaOl6Ht1yVIMNXtc7kpgcIQ;96b7a`iFkh%ye5gJHzI6ONA1U*9R?Gc_>nhRYnzA3 z#>#CDgGN|SHviHVFL(^5vN9zicX^J5sVn)0Kr{pe?to4tJk%f^X2H< zHvE>=!J!}0Km(;$#o+3&X%x&SQ9K>{u9%aVcxa(OmAi*AdG0*bCC>5G)7V(grQ>}R zBWhXi|7ysY$qJKdCnn1q5P@7e@+K zoxX1{>{Kz!71LUvg(gj9yR^O?vI~ji(v_p!Imyd;t{_neV&s-E(89e#b|D6ED|K&7 zLsS6aiC7UnN~}~m%)e6HNrgbv^L*L8mi=L1_FbdcgjIu7feD|RQ#bP1b-GR09cGZ} zWXB1Tq-P;0vS)PNvEHMq5u< zGTmq@vR6ZZX^+lOEl2FVBN8rYPO4HKjYhs6nkVZPehn$8A%HdtJXr>K9;xAHH(+In@b zu$4qp-_j8^!Sq_JfajG^kiri#Dp3YgGmg9So}# z+bLITRjX1NScAG(9}K<5fR^jlz-d;TvQw=Nhl9$XZZXRpc(uWxG8oo}PT6*v)}UFT zmgCxFHQrR z45N5b(o8QuBqMj9#;-G4bA&UdRUar{q57Z!t;_6Dxc>%{H41#!XA+^Dtw@VId`AxK zJEUkNdzun27OWAAQ&5=#SfeiiS4vxklP`AZFkrqi0Mw$LgPBOW#r0Dc6PSfDlO^wy z<2|Eoq;wvLen3Z1A(OY$l0H2E`+grl{WOjyJ{m`wNOUa*r{r3voXxyQ4X51MG>H*% z8kewFmFEJFDFd@W}$pA`H;zRO&vFP8*8p z3b>NdJ5(4*5jM^yfFlr(2EbP&F`=WTDb+EI+80#%bio{1>c+7MAG_gLq>n#~W^soG zladCasPf7R95IwRA*#$^QSib;S?D>N846!SsTvC&FL`qB5XnZU<>M&b?<8AVfcq%Vp?Hde4+1|I_r2XTdb>{#x;ro> zzAE10f9pAp>y~W(V7*d7<8wf&#Icv+0#shFm3}aUh8)8+sq-?(!4wWIk(fO4h1J|X zJpwZ%zvH7$+Vxndvcbp02GqVw@i|clkPv*ZsQY>p6-6)?!`iXb4iZU>SQ9p72b3os zR^R!$6bVRifRI9HCne1s)<&}`63X!Y<>aut^B(Mf(}h8oJG+-t)I`L?utgXk}Pirb(a%Fuu-UG!<_yIJCasm)}teO)6tg_?@Iz;aoIyO%O|@L5a)tn{7K zY)K495o2-P8PvB0F4SugK;vbK248RM14EWfqabLJLColDGV}Bzv22@UP+PyXeEw>quz7$uQS)qDfQ!JMe2~u#H1kN{dj)0O|gkn1!#0y zB?T@|zjq9-Z8T849a+6q>ulshE8P!OmL-R!VUq?OA`hX(x&8-1Pm2?;x>ydv=&jqy zw369mz&sC;eArHIkz%n(`q0KB`4=x*m!3cJlh&(O_X^}?9^rTS(%r%qz)D{haE61! zuGRNFh*XDI%?D}mqa=k0m2#jmcfzMdELFZc)&&D~d!gfct;fyA_QQ>g#m$`!F;#9H zob2swJomAJ&`Y8VG60m8ve+t-V-W;H$-z&?v%wY=+M;;0#gpjb$~L7*8hO7?<&8&v z=_lje)H%^hC6Np}P;jx~(gIKw`0k8ZFuj8-hlXuYj?B#{3QFV%)r6HQ=scRCAV!*b zX^C&GRhL?LDe{?eAQdyL=}8++StvC@iwV0-?rR$+t7MhzMR(dHi4UTXiGO{H*6nXzjH`5}tp3&I_P|_+CBMRT2ibJ93pP z?R3V+5H2A!*&Q=vH9$xin*ccd-r^&jgKmwAAJe?q4-j zg2(}7)h`Oe5->=<<{}PIdR;6@Ck{j52d=UzTgNjuxn_}8ww>9PU0etd0fS7EC0Om9 zENOB8Oq-g&U_$4phYmz#kxLp1HK=SZORnfl9!(}b7;!`~$o`78g}Sd(zDN*cX(E{( zrz{ue&NfvHlrl|ZlTjU=wAVmgvr zq`=DR1qn1UZdj3|!=0}2rPG**LQx|=E@ge@#XRK)aO4W-3z9p#k8NGG!7f?i7`nv|1zxpg3#kSd6BA?1R|2 zVU@4f#vkF+Y?!L6x86TaoC|h`|7V>_oFcz|j9ryhiOj z@e=rQ8)CM2un{dsGp?26p)CZRl=oEEfHgfT!0;YM7#(t^aA_IKt-hZ36Pjr zLQ|aIcJ>r242z z!fB8ViAdmuLq#&x(K>)8#U1p(;2HY`7Bq^GnrP9$U+BD5#ognGCz~)u!*d=)(G>D_ zu^m$jiK;JYsQ^=LGlr`u6RP~in~egrC(`;veq(#1VD!p8KbF@c8OLBRWm;T89YfA+ zxHzV^xL}h64cM7GCP4((SISN0u?(>>!ErTA8S+B5EqWDn`GXPRTI0zJIFrn$1t4plZ(h2vL@dv(>)) zsSaMQzvPjM5EZZ=L==lGuBz_0H1&zRdEvHFWu{~uIl^jcUYdA_G;xJ_M~X51@>%z| zOF}*ckm)vgR4BB+?47ndoo=sp`n>zI)7>5MrL!B6kgkMa3`Mq%5(h*!DKR_-L@tC- z@(2zg=QPG9<5Z*+ymY;P3QuV0(bxk+0%QxG%9{Ol6kh3zvfNo$1y%(nE>X{uN-sc$ zBIrp1CPuPuAR(Lphmy||XCv`@k*T)Awo4CxgG5g;F)Jcp5rKb1vK6J+W(@U1J{uHqLzb;|{qi#mBAQ&ebU|LfY_*QEJj!BS zbG+eL7%w!7lOq>n2CQg;I6J&lI5z#Xytuer8D1jLV8z%n3dNAa>_eM+o$Gp@w*A!7 zmF_I&5V&6$Y~Lw`dFSqNbiq^OY8^Rcm@n!W<d z(ib1eY$@g~ohZ%zE>F#tQ&}B4fH~@lOey;VdMGP{#!Wq~e-BF>T`jjdp;JIHW_1Gb zbp6Bqz1#S+ql+&N95cdzMk@X!uJbhQsE6$i4nZK65{px@u+FAIL~o|qU%jAZx@jpz z)SU2*3WU~5f;gifF@wYJWu-?rO?*C_lYKu_R#<@JrnHhkp6-z)F6;>zud4$Cvj;kLeS? z`DA|d&Eu`kH_uO4Y|m%I9oi;*HkpXEQW2Z!j2r#wXt-*&1=u_{nkn_I-Pj_Ti;g71rV zF;5S7x{ptuY97xpie2avV0Zm#w2=zctdAL;s`6iJNq1m{6v4|^(=Lr?r9wND^)UW42c1qRb&SrptxSj9a zd$xuq86jvxJrK!TviW_4#h>R4x|lt{)S&f~MkTXk2_=l81=61dAB@eE9_B;yJ9h>O z#AoJW@nO8bta+*7RGO_f41CXH;D9J|8!4b-NI{#HCuZ48^5%60dNWq=bXin+P8Sm2W!k7tHbDqr^0k!mcfD|G-e)A(PYucTe8-6N$`zsf&z z2Xo`|j4(1jI1j`1AjniXZ@3DQ$Y_G(p>vWSly|rk*ESutPr4B1#u?g!U*o zhyVp3A6CONJ!Mh?fWsTWe)uJlNRnu@3JJz8K&!mH8p*G|aLRJMa*WkVtYYSR<(R9L zQx(gV*z@Xa2#W5Q_Q>i$wsj|_5qCPnCEUS6GP#_*7RXVwXT#nfCh5%+o&!* zGcifBE{ZwNvMjlZJ5pD%QYycs#;Zo6$yzH=d&lx#LyJrUTbQSM>{B{Y{C~-XBGT1x zh4@p-A-=`ol8?++9lnR+R3N1moMUGQxeh?c#0Va{Er52Cg-l7-D_vP)nxJm7(%4vy z=Tiu4!pAHK-hUy!l0OY|ysWB0tv-%IRScZQVvg|78Stoe`%|lD8>YWT05WDYP6muh z4V`lul#FtVQrQosw{G6|wsT$qzmxJ;Pr*45My}93>Yy&YLPn+P)pV5r5?^QNw=8sM$Z`7VPy#HGU+({vA#*BaRvt2&)`!hOgRwdrRA}9` zhD~PI$^(}Vsj`9#*T=tvOY%L8(KV4yz9wHW+x-YQ5HM zG-?C4R<%8=Hn3c`>I|%5%@OBw9agS;<(gF))CP9lvxjA7m)%OaQXe)3E~~L>&7qZw zH7wWbmQ(i{cG+VC$D!7+LT#s6sd|lO!!0*!SI4(k$HZyed~fTQJHB`-0_9$}bKLEl zodelRkZ)YqOHf+YIj#!u15jj3+u5NB$jKPSmezCp>Iqvqe%~--%N7cx;`zG;?4$6r zz)#regaT9;yC=zf%Czkp0?bXCT*}@Ra|V`Msg#?Ip=-N#rAdc_Va07Uo3-JfS+11plvQk2sa2YTrc-fg zrCDt@?Loa!Ee{&iYR1YbtK` zL3UQvbcO+B$7%ULsd^4xFvSiq)&Tj*7c2;h$|NFS zK%`51^_?4dXK4hsnt`UM9x%zt)K3cbtLd=?7wAFg2M^`Nd(b_6@=&gOnvttis~|l` z$x0S_1oFmBt@NK(NVA-K8B<2_Vn~TdZ5{SPGh8|qn=9Xata|8ggQCi^5B!HPe|Q&ISP}ngym1eF_hUs&o<&oH=fCV*{%lNjnC`4xE_8 zSoozi4nqeU0db|njC(9$lO64oVW5McQlZ%Q$vjokUh4&&~d;n@M^=x3WCa*lsN z*#MM{d5gTs@pqf3Brph=+L}9m_hd;$K^m%@8-(r>>Am)`Fe~o3<_$fIqSs%&*lYrJ?e5t29T=e77lR@U0V;=a`ir=97e~iX~ugX4U%XW%Zqi9!e;wY%9$CXe` zaihXy)3&PR&6rI$AxMFdaynpRdhSQ@CJSeiZE0#ir+x`)5Rc`%iqR+1d>VQrnt`0@ za;aO=iH1IlAye3pTDtNCoX@2G?xNPNy6i9j#eVR#q%)Y-N0a@-gpQEjRm$?5+B*-V9o#3CU}V#mEUf?_Wb-fPZEV}CR*iYqBs$n@rs z$V~vToB`^$h;^B}OwCb`s2_7!6T}sZJkzfn^{=L|hw9`=OI1%7ACDRJ`jFe29=y6O zWGHEJUu>lzi)K8SuZ!>nOo@ECAOqF@CTUrf@j`xkz1vfUaV_RO5D*jTtTwy9c98`i zx0?!r@8Pzjfe{AraKuVimNQfNYY}k)=nDyVB1lvVt9bD63~4CZQxCO<_Abj}XLTg= zd0Gf*Fn^mL6zJQ$SMcd5jNay_1whk`nfNn~U>h&Y!)W?8pA^Qdkmo*s%NZ|xCOtRd zjFLTbD8{kIZX#iLmW)xj5*9tJXjjFB*DbNj%ig_0{v|Kn{c+*Z z!uyX_Xuglo-cJj?OD=M#3E-*uI|#tbs=kl4q9WJdL`(f^*vt=hzj1QIw>Ekg*JaSss^XcV#7 zZa(RX0RudHfMS{71~5OV`IiyX->Mxed7W1fFLY7PW2mzMcos-qeNHGD)7T6A@HNS& zIOaJQ*SXY7XmXkq$~BScS8BCd-L6_Sr&$*->Xu!#8gjp#i~^64Xa+aE0uD^ zY1;L&U2Bx<<+4+2ST*~`b2wJ5?o_Mwrd=!7EUR2|tcG22s!64%n{UPzwRTF~aVrgS98leIO5-3~b#qO8gC$ADe}9lXlU*nlY&eZlS>^XH`D5~mjBLq zm?X(Yw(LIujbEWuZUIucO2=&~&KHN<2Zn=;NLKuS6^DL+3=o<0Ni*K@gt{%%^-7^A zX^%{=j?*~uW@z(qHdE8HevW#b_FnsVlk~bjIq4pBy2W0OtQ6iJDigpTgZ2@&vFl2nTr zt?T{1lw!HYI;FTs%qq{Mf$j(3yoNCa%r#v4Z0cfMkSAz>@@%VX6qa zn%6Q5Ij9LG$~6`ayMJYsOeOvcF1>o0UI;-Yh*z2RrunE??vrsGB}tGgpr^Ugn*^0%3^fN-^)mfQrquINA0vo@#p*g>ASk%|RWlKN6zm5izo zDvPJ*OL6LWK{qi)(*70N8Qd7As_`t2_(}YPoU%l66U3A9qKNA&|)WBEB*H4z3%Bjd%ug# z6~m?L6llt{lpuB&Spv9!uk)l}k@L+&g!2VQVmTWQ6XmK*WuUIg2lSuuDMGbx~DmKdPGY<@S? zVqH-K;)D{c1CV^xUdH!&YJ2O>h1WRp-PdArgh$bb5^S39>lu-H^G)>WfCLb(gV;OkkcH5z$5>>(8hS+yjeIzF zx>^An27MM`z^c&#skp%gL3mkamrINrB`jaI;_s&uUgz+jzk6`f?(ZHRkYOa&4yl=# zIpW4Oa6&Kp=oSl0pd^oA$1ZPe65Fz@S1Efw%{!m(_nxyk*gQ&dp_Vui<2n%e^fgTS z_hXcptok%pdm0&?uc@>wltURG`LqF-ZQ|SxfNKf~q1YL|qo06Voh7vv4>g5YHK4q# zTZg0&WJt1bKYI?8V*-G|Y{GVFUjeswljJ0RZozcK5Nk14e>r<%X+cjeDYn?0jA9n} z402~#_3T8GNfd%u7nTP$VLbHO2VC`t+p7MO`o9^}+=ZH#s^3h_`VP-dFd96?6@H8^ zz^taAu#&0_r^u_)^%&UXA_5wgIH?RlQjnzhjS39w$q)bwB#yyZJXEC8T zn`e6#3VtdlsatdI#xxif5p`2U3zlX2-2!b{dh~8^ql0T8pkN;}|H*c9B|3FeImF^A z6FR!Sv70+jYt#6#D*jD18!`Gy_rtJGo5F}`Am`nh{%}2Q_3D*YOcau4WsLC+zH+TK zTl`8WLQnr#O;YSR6nT%Ocnrx;=q0hON~2n@7Ot2i@JzC2h?RaZYSZj$H|*0XP9-=? z$jjaWTA*ArFCNlm#RHx`RB{S@B7V1| z+^FR>MJZ-Y<`qx^OaIl8RH9wb2 zN4CqkH%qkw4KI^3f8e;l)NGX-hk>>pcirj!?zdFARnITBJO@DBMa8WB7(*B!|L`x} zZo+Lkve{o2>wyzmFN%mcF?fBP)XvSu_IJNn!sUUe(=<;3rM)i>+i*xw!k()%B6%N)m8m7~EVC)mSm&Sg;lG2iP5^N4vCv~k#wl+CFVjFqi zkF&@Zg#juhU6pa5^bOr)(onx_;IXhzFcvo%&u68gepJoEu!RV@Bx=tGg_7nUK{7Tw zzbhf}tz2w$`Mp#1lyavZ9wpbrHPS!K0NC%50mGANilOTrUg?5$y-0Ne177hs>|UEp z&v8v(Vp%FrFSG~E6(P%1r0gmlb!~xYP03o$f&Iyey_6(Y;BRV$%U?qkYmAxbbdTbw zDCP>!yRSx$SDz(vmmkn4p8(Z8;&^x%m~U~Vsc~vz>`yJg=JEobxBVK{V}6$9>^PqdOR( z0o@~hH3Lung>>J6l)ozfeY7Z+>_tmK%6{wS-BF$dG!p@Q2{G36o6%mG%$aITrCbxK zQ;Ww!hvw?9hU4~`8k%L&6L=#*^l^?ZQ5jyP>)dv9Wn`FK;`7%++#_O@tV!IkP8uxZ zB5uzUcZW~wzfvW}t^Gv)!1dYhXE1>~`&iAt5_~%b?fo!Qj(OCVO7aohLFx$E?vC65 ziylZ@G~rSI@Ax!_B;^DoEca(r)R)CdnNA4@@oW8f_{^_{Pc)&O5~x@cn>bkyIX?o! zI>gt{paF`PgN5mUs*gc4GU|by;M~<+4I~vQ<+U*4C%c>R`5WuEhId>#3FA&j17+DK zSLO6Q3P=P%yLUroZgKFJyP3hpL}Duu-mj>0ZqGVK+( zG?rZ6(Iw^657X>RMGV^*R7osR*DyJKXdMr2Q+^U3E5Dr4VIg2N{cAa>E@6jEbWXW> zO_c^9)`-)bVJA7+ARx5nRI6_K?BtN*ZS!Rd5ZtIWNO_?h7*On|HAIR0Lm#n+E5Sb* zf|DaJ5stn37Q#rBAA*Z}D>(lhYssb_RZLvH=PePPbhVro;hj2^&xeg7lC{G+A<8CU zcwTFRY|{+>>OcJNxzvL2O@_3imRd$&b?_Iq6tb`QSprcDOa-DPBo!xkXdm|pnnN_n zL(;mPDJf4WL|ja8vWHeAXd(|-bYuF-$@JVSm|9ry$vh4q{giSVZ(hKYl}a3HitEbJ z`nFq(ITZ~Z9xruMO;UJwh?KN`cPEFLF?hg3M-0+NLV02w@&Uq23#hC<{ z2SlEx_6ch;vXx#sPia&sjicP}l?*6&XUjG#SVSUZxm9I3tfOsLY^0=W2i1H31Eb=5CS5`lyGb0d&n>eceN zE**w|)GFBqXCu`n-D;lWCig0X8g0i(#Rf}og;%MeD_>TVZIdCJo^z>Tje%;hF=N^| zxJ0L+%COKetx9pQoEPB5H(XD`+X2x&b!>AG^d5B8t%%j~a2|H#arCM%0BGmff=yvx z$-RbnUiH=HlRg(vvU7wq1j*aiZb>+*DlLhwXn!LKx@r6ARY;JkfMV!rFV*uK=iPzL zZKwvTfhgYiQ@ymV(pe4zjhgT}b~*ZUeLH=FmUTse&>6}I3*%8Qet$aHMA39VybLbTVKf9MwxJ{+>0)hp+X473lH#BuWabLz zg@a>cQG1jpo@W1+V1LV{*<;J=o}XFD(JL<5n?%@yL$Q%^Hej4>Swtw^0>y)XO3NGY zdf!6fi_(Sb7c0p;h$Im!=Q;b*oYkC&mFjd|S%9AaL4GnH8J$u$!BHlO3es)zIkUsa zp8>sgH08T|l~PZCv;un}6dE(*c8=B}+sJt0dT{1HHqIKz@R&YhN&cc_<#&t*r&RAe zog8eFnEZVDoQK)SC*Ei&LV0Db6s~02_b;XKVt9ENX&5<%NT0);yR1ssYz3H76lY1n zx9b0hWHa{e&`WA04^ei{>q?TSCgh!eDkWI_Qxto6>zw<}**25oLhO)lOt!TTFS$a; zYE#=(ce*m;KV*gl$m2YqrnOg&XTKf=sZd7tw)OgrEnU=TbZ{ax7 zv?vlaM_GJhEFthF-)WesXkC@$xJUfZ^@BXOM3u#{WO{c<5w02P@83gwZ&;%hfcV@~ zL^0&kLEcDbALdNo@UiWb{a$U*Cg^IXMrtB~RVQK@iLpkEOKrY&lR-8y39HAIt)^(G z9_RfVkmR|3?K*;YrG8QRemLDzYhi`;4L*dKQQ)WPhbbbC8pUvuLlOxtSBI`RPE5IW z#z{9WkP^GwE7}VC-Y&vGfeR&aS-qXt-1V+dXI9gVY(Xx2({_hbq`4HQLc(8==vC^ z)0r4P*~8L{q*6CGz1iKW7iiOI-WLzHy%_vZmTYh6rA3sJocK!ikF|lM*>G6mU?^00+_RxOhJ8MO=XOCGU-HoP)rHR z1j6`IjFutKLV;gjd7{UUWXm*n5HUy~bUM^VeZKikus1Pb21LJ|GDcq} zgZ3eN_aUfXhB#lGR?=I-N=9S(+$6s+Mimr+j6NwCOK0dabiYKWFvQ*M86l|y+iM+>)SMISgXEqr z(02gS4*||EqMWb$``)I$w;2w|0TljdTW>$V^g8=eZa=I7Y4{?C6DC{n#~IJ0I$wXP zzL*2eh-jPfyffB1D+e%`$S+#z)6X`f{YI=pkTo@_6uDcmqt#ll@2D)*`hO@?poJwM zje@P6t|U0{B61YBZkccH10@3FKSWqq6FavMKB7?_fALtvmLpf_k}Nh$@~QrBN^x=_ zwRnql@NcOY1Csnt^1w9vRO=bND67oD@pm^CnTeN;gwa=C9ie_ZYpX3|X(-|6%Sl_O zyO5j0F7sKHA5&9m;w{)}-F~w*h7B86(@q^~52vFBkGs*XYmX)MMoLr7xvO1y;)2JN zbXN;E!_yQEiz5E*@LS7(02>#7At8eCVOp(1%C9*YSJ)SJ&7XsGTom<^m+TJoOFL?= zHP-9WF@Kqo*n2vnGJrWFEQ$92D+6#`1Q8-{DQ&vD_-@|tx%zDkAL_)8URxiZw3-** z++H>Yyb(iNCA7yNtfSv5s-CwLQl{b%X2ALOS61GZi!|bjwkyma`!|5G5y|V@TLt9> z7enhDS}q~6<04V~!9+bP%~faGHwoHE=Fr&-cpAFwnSZb;D zJ%x2QCfwM-We~Aad}SD7D5U)%PwF3q1eezZYdpSoVlk>=3}m7=V`b+|eom55IT1j6 z`)?@T>J##jL)3?^Od}Tz$4Au_ukSH`aHvbX3}5!a(OUYMJ$?p(e)oH+RE9(wrjM?J z{`Wh~8x1)=pgy~blVt8KHmSzIId1gl}%cZU1~4{!GQ7 zgx95Z$Dmd_RoC$j1BwVcO@+ODOhGy!yV}<9s{g)lc7o*4=CFm0?E#rTd0SYH-agg^ zl9}iI-~Hfy%7a;}iaQ+_Eu{QlRJpH+yGY@Kwa7(+rtuX93F|915N)vjl+K!}z>_lF zo%ohLgwAaD{7c2!JLA&X^w||2#RfVf-OS4C8o?-PAHARXX-Oe8RKv-A{N?ND)tLbjlU+}I&d)+?HorceTU`Nm?RoqI~ z!)9^N(+y()*pYlDT~)si!p^Zx7(nFea|e0OehpEbU!Fss;Zo{JGm6;b_+TTvRZ?ND zWbrdqq5eju-;e7~DxTMJ?7!Poy^@D~v)9Efg&(a0Dp8OVVcw4OIy9Gsv8H+>Qr#{( zCqCqU+ctx{HFuAtPrA;4trSufN4;YN2fxBMX#&3))29`TrE|R!sI~$b?>sBkqFun@b;5GsXXP-wM(%r?5%Wk z`I~J~c)G08VG*FxG89&6q37J;jF=uf@`UM(dy_z!yqv(9bI!h)hPJuuw_}YOUZfK@ zWc#U%q#K)}hhA~d*7v`I<$(#p@DJ*7HlBzW6J_$wJv|7-vSxnL_wc#!?S(bWM0$FRxQmy^bbTVf9DD`q88-W=~ zF^rk`FTWW)kf{}9M}u>i?B;fLYDWVl_Rm2(1|t$M#!N=@d`R$>3jSDCTihF=^$QSI6^h< z&H>4{l44Z-L;m|X{B&K}8iY>u5}8gHG}Q^doucoM6BRt&iMT1i-%d91{QxuG^0)Qo zjm%3ME%P<-G*Bm-G1$7{M2}XZBq~%Q^zY89t@SmyB?xdN^uJ65B?#X+j1Y$|;)#>V zd?9!Saue3*>x&!_*bRCZX3MVi1TF(dFZL;$YBOIFHWduneOk<}I{-%P zk6j4o@35uDtGhux(i$`${*4VB_KVJ-D{zh;r~|S|*^Obg&MeZW)s5IGey#OvxjfwC z$8P={7ts0|lIS)Ow(8SZa!oyfG3G;oWhW8u$cjfZ>fbPW+e;YK`fC1B+&Gvcs1-=_ zJyjU_yrt>YoKVD=zfcoaD`}l6=^Hdu^PlP!@=+BUFDTr-3i*WF^tVW(QF<vTeljkIpn{hHFp-=ky40tG~0k!_P zcT3!DnEB8CXjX4C2I3nA7GEcO=W@wF7x-(R%9ST4i6L3tM1ikv`#ywr%4(z!Z@}n3~b-L@I@7$yRtHDr}~7B>z$$@BURKjh~Nm{ zj*!fT^o%{AG^all7;yhPAaF(S{M-}!spG6`fZ@cUr7ApOG~r{-0)$5X!x&2g>e{YcN&0+WQV^vmknlF3*m-#%-f|!o_+!#V!P=4 zsQNthB5^4C**j{c!rj#mj-M%2^!WOd)#6zU_eEfO`fYv7bEgtTLcf(exT4R+?jz3W zgUHqTeV3QI|3X&#@NoDrs|VGgAbmD58k*v>ZQZde#T8AIiMMnTr~Zixu1i(dgD&EX z)R4gg@vhxc1<%Z18Mb--MIi<~SfTjX!Dv5Hv!vHVj`N8dGsllU3)vM{(|AaTFqEs~ zi*_P=KxF>T(1wPD)fA_MMlnyp7^7QuB{V;@$ndEa+ll-udi1mxHrmf6jed%^^%2Mo z1yCNowTzK0eoxgJR(el$m-G{KA8DOiPM%x;{toA6)o(XIfVl7Un1@++x!%#cVV{RN z#lOKhZ5&#nQ|CNh&#XG>O`;3_!+)aMVBEsgpJ#-N5xM?6{0XUR^g zO$(lxF}4Ie9Tj`-4YQ3oj!l|w*@j>T-La;qhQE>T!TG{D=WfCGqpqdv7aK@|1dSYo z%=ybZ?~PD9ca4c%4!hdg_sW-k`=%oKbpqUvQo0FiPt+~6JAq`Le|CFuM+TBpQ5xxc@O_>B#|~n{|b^AvM7$ zBL~r!Vpjbs7ifrPj%4ryN;9fz4|Bpa1Z?WG`6kZau&WMQyJadGS#M6bn)RGzf*LYW zE&MmZO627&H6+IS|KWyy0Gvl9fGT*7JKxa^mQiekOIh$^_0rJrnR_xna^`AFkI8W| zp2=)SB>V3$sG|Lkj$Dfhpn&_F1XPCo#g;RRg}qwgmUn(Lr zTy`HOh_yq0^t(|MeRM8XvYGC-iEV&OXi&|j*z7Kr)aN?XH6U2bM(xOXz`MUlccvyJ z#I|$e$`AKB)PRa$R+#&v-_7*g&aBE%@6pg8_ie3KN`YNksfpgd(`(4A{RDArAcayxW-=tl zBO~?OuYsXxcQ^|nI^^ZoLLPXD!u-1wMvf{)4)^cY#;tqO2Uvc$6XhajKsu~`wt?}S z>Ku@jdXO@|Lw+)TZn^7oz!9JMq@#oC_L-AK599AK9f>ihmn_!}yz- z$I0a553HBIDqh!83&kL?`7+JSw+J!i5IYa27{^e9CW-Yw`UDG}U34Dl!e!tw)drz5 z?J<=WU56#rxj#bv5>3w7ql z-6DHtiTq^Ki9)dWVc=)hRuUC5l&&PUESugZCA%m+rSi{urI7Q#%4JO34i!i2tUWr` z)p?S65^&VuC)R*Q(`u~D$?sNr;Zwgk%Xl(XI(oyJ!PeeQbU*6S`RHT|X zZ3%{c7yV?2&@%dTS`=>k+ANl1xbRhKpXKY7WBy6yZe&??6_|8ykUfc^^Fpq+(fQ*V zsv91vxLg%*_t%M!wBNB<(?R!SQlePXX~|27%-6fi*hjxg*E`E==y=bzVJwWwv|-H= zOv1yuN~}5kXVJOzxYesdqj1lEnN_b+*6MF&ihq^h?WtjvWA7Xu$d>R|s9CD{>_3O7 z*GTz^aa@1?QCtbC1_csf=R|bA_$ixFvaI5GCwGd`w{A?AuE~+b(%*lKRB^0*dCZC$ zu;kJQwcs8gw=zS_&|CXtLTetK;|EsbsezUwpX5 zJ^Qrw=Mxg3iYR)JXt(t_Dao})Efy;PW(l}ILh{q;JV$uZb(_A#!+U+ca5+r|7J>lv z9`(ULpJ9eUDFxkZ^~P;aeYde#*#7IJ-2?1!msd09k_}|M+HYwSCk?(Pz_W{_`O$iX z!8&Msg8B`;ec(zQRlVE}&a(|`Bj5@LR%iI7R`omKzm;@`D1{L=G+F<)o29a9%erxD zqx5h7@%n#4`B7Pf^-0x56VeIn^l2=Rczh+dYPPekJr6rB4Jb-hsR#oK95g?#?qd1A zK5Ub_)V+Dk;yY)QHGFD$_?ew6>2-@wX1y?oV%p^+-S;2TUnLYQ7}U$z7U6jMUH49e zw)7j{)jC5&-{ianlgp--)-Fy=cEP6!Q(SVCZB%f5;@1l8_788r%@{#qk%DY1jGMCd z3=4J3`A?cMZG?3v9T(0N8!Y%)D>j@BsZ`y@5Tn3J_iKKCwLq*+mA(qX7<4{cvB`n| z4>-z-pRClNM#o9F3GqJ!c5KkCbL8#NtkSMXvF$Q-T_9Wa&h##};QfO+UcPG6v0TQV zHQ8=bp_3hEQoX>e+os{V(rnW7$E(9Jc#Rz;B`r$8t4q^^%&l_0Qjh#46HjSBJ+(BOz5kY+qF#+Kj_o{F;04o+}p!Mg}w2Xd3?o3X%uzMrBn;h1y z^t-|KklU$H_hYhal^MH98QPT0&qsOG{`m@9d>724Wo+J;&N9`W?hQd94Yz?~kwvW{ z7PBVQ_<&pmV2b*bNTvip;>YHe;P6MAp{r43Uq}4-a^F>F_|vxFPNaANDmON}Ld+F4 zhd*D0NL0$9*_fYIIGuKrzeT}Et6+xWm*nu?*h)LkANKpBTI@uBzG?PC!ZZ24oonbx z5YvuMg&h=rP(Om7?0P4?NQ)d2mrX`Z#*?}pJXAaPD;XSma`6Ud^NrjHeq|43@SmI~ zIh>S?3yT~e$?B98Qli4iiu~sq>xf}VVybQ(pLJRIKxl~TzD$-W6=GjT$6%6q=ea_V z!Bc>&#o&R)ile3-AVk}m)%+>GfAO|7slGFNm(n$<6sJz9IR>Y~?S;cU?e(*K-8=cc zFo*RQEDdF$8EYY>34ktFv_SOf2t#rX0Z$-GUq^Ddbo)O%<;T1RKe@d9aZdDmocqtI zU(I#=Km9E38fvr^kBTZ}$o=|kancuj1`rh$*aIl|aXfy({9!r5 z78Owu0cjpVkH;8e%Mey_t5d!irTGV?p8ovMR&jtGc#-+|&YPip;k|yT)HG2oQCEh$ zwHBA2CWU8(@%#_HGuMlGHh$GS?>n`C>6JZ4m9|g2y`+h6LCN&-e`TbuzLajU2l=ld z;-$8&279+d@HL!Im(EU&yPPb}7U5w{Y7|vLPiIYP!8a?VJsxLso85P#0E6e-mg=CV z^(M8PCbbi%yq9lhb8=2S4pwJ#RZW|>2<p^Lb|F{=7Qq;&tUd(`j?OD(ISYu^R?! z0tDNg8TA0qj5ZCQ7w#9t42+(4SDo?#>+etvo_7Nf+{RW~f^E)LdF$`agbbd~u@OMW zfFU9SL}bKk7fzd+F7|`h5mf6J`p>T0{MA7LL1#u)O#o5j=Y{>1mW73GD6>QrUww21CH95>@8-6}m&u46OUdFj84+7z1dA`H^rhEl|6&Xj4e1wim%mm+9? z4fnD^razZ1L;BWD3#2L~XEavKaCX^hUNe;u29%X>1Le6NVlM{NaUAw}W9f{Z>lTG3;xkUna60Yt)M4sMfZ~7F__`S8Q8%+wKqZ(h6((LDaZQze6*S|`#f}%KE zJY>>_ySeYG8T{y@AB~(BTmrv7kE#*!e}&T@ML07qpU?-uT(2ARM9zGY&eak_U9bHv zF3l0nTgsvDg{6*lQ1lv#0vO+p7m@pqN+i>)_tTd-w8s{doM?izu@oY#TaufPp5En7 z4EE3x|0R@}huOk}bEiv@a$5d<$p260`1xeB?Xt^y?a!dIdoXPMDU{W(FsO0$!wYVbqU^6FBl-n#K1@;fgzewih$tI%Vw*cHkY6FTD5Sn*J6J z8rzJ2!QOnPzI%c>fdbb) zszHNSY+l&~K>?yK9l#p+Nz!Hu?EZCYx)^>AhsVK2#hu_ycJMQw*MIB5jhAUp@S}^@ z($`Znm)EKrI23-5;tlUzGaGsB--N1(JQ7s|@0@CiNm{@v!| zIsE1BV)OAi_~D=f{t9^934nLrEZ)FhJAxl>f?qbwUZ2F_U~$-B4-gIrzUhI7i9Z~P zcU}?2z3yzDsl8sCRl_HV;5Vhgx7*@fP(3*~^x~yK4SpsUe18E8Ce=|N$M`b#3GFiW zs_%jO=1Y$0zSd_Qr~9Y%QJ##J02r3QXUWdBlkv#i&)4Zod+z=dVP~fBNYB1=M_%W; z8N2T&@F<6ChS=^Q92&mu=_K!(;7@i_^H^OIC!q|ZorGHT55q6@UCSXE&$n+k350up%iqth15Cbc z(uj#8Vs|MUWm)gjx;MD;<|^iY*ZL5h3S=$Klxww|b5ItAa|MNVXlHK}qT(Ip`Zvs3-$%)J{Ek#%D_GhYAb@{Hm-BQ#MJNoiuLkOct4BklQ4nXi32{@!^3Is@_oO3 z^S5hGUhxO*a6=WNA%xD7dESEtQ4pSY7Zy<`sj*-NM>=8 zxfERtE+YHxSK1oo`e%N{F162EFgM%uDqN4~D@URH2VzzHhHby^vipF{c=tOETZ^~X z?!6=06psC2(IQ zn&avQ=CxI=U2h`C$Ywj0!3aJx*Nx+ndaET?k;vw0eOuMWY|G@SPQ2JM zEg{dno+iT<5qq1x_WZcf*Jq@)}4Sten9Gkt<9iOAH3SoE#Xt+ ztnPJhY_+mfV`wfg4L>oKgJqxcE44vvHCFWFEFbK`kVb+L6|5n&R=K#SkY(|lLzZD_ zv%5d3xzR5xwz5ij#&E`NRa5zG1Mhpx3mWftALpU6`yQ5lYV72BoV0B30>;D{C&t86 z;|+~A=?n(!}NF8~S}wwsh7bK53l2gVdI zGpCUvKM8%H6|Yt3vKHSv5N+8?74=gC-TB|uLm$fQ_%`qgsZ0(o7+hWwR04?79De_oG1+k9eN z$DNJZlj=z8@N2L-dFjB5YB&jLN@7)G-NwY7o>&VkxK|$ zR3Ou)73__JyqjQH9&4cF00{O`M1XW&%b7r9>hYcVqmxyN&F8>2~@K zai#x0s>9H*N}L$B)`~Ou8D}sMVbG4-;7Og@k|R;T7%J_966u1CD@Trx>7cHACZSS? zGMO!CkK^}`YV0>NV`w!C296FTRhXzWi;XjO0jO#*>92XIpv#xh!q6 zfZ2~DMGlckf*M(#);3X}tfSKR@!hzz1`L(LrT63s?0?g zl@R+#)1Eu3c9t2T0tQ{LP;&)P>%QXt`Ae@Isa95!QETI4NcGg1s$0scliM6+y^=cM zU_{R?J!cn@m5aj~Buh8@tCEqsJ~b<$>E)L*%Opc|-!EHK?$p8wTuEEhZ97zjX z=FxU?D*1Y(UbY$Zu}|S{WYTtuD*4)_UY@gT-!%MWpTGq=usO+ll(0-@qzWF8=q4WO zChF5Du!t!bGcyu{ij>h5mT?p7D`*HL`Pz=w_CVmb!{Z5XzSGTOShZOmX}g=1 zt-XbXwXd(QtFN^+(ASxT@8z-|uRkerblX>iPehcQvYQiVwv?E-Y+cPByVT zp{|aUdS~=1p{*@4!P?!HCWVAD1BJ{WLROBR4!00nT!d3dkXMjIZAh;4phV7Yd+Tt` z*!lJedSX?#w6(OgwYGG*cDXb%a=Uc+a=5g#6jOI~wX`%au(dS5Hm@%tCXkvg|7%it z^4BDt?ePA7*ihmYrBX4(>gMLE&MC6Dj`W6qh@O6UXyNUlS@S%CrY`kgEY{Doznj(VWcmoUEMmEG1={BrUvh?bGdq1XAo_ ztE=$R(gTXz3q*RmrWL{rlK;ibJgZc#YvbKi#ceA%YC&x?;PmL zMxaJ_04Xom4g`u3_Xq{@0?$^YU!F#w4>6>p4}G_iRD{v=VPPe>)YKl4Gc%(DOZqIF zVq)p(>7NvpRWRvGN)K?kxwRqJ_T`Saw932|@mZX!XT@*`gnPP}MZ+psV?TUptC zTUo%bsb921wnM|EwsclW+*)&5+-?yQG-0^hh(W|Xx;vum$i~Ypo|oOm=jF0Lv=);A z$_Fj$v+$C}4cp;G4xHZJ-kwfOOt8TC5m%Nnot;+s{He&+DY!zm+ft*gt} zeek6cbmL73eAxDNzdp8hcXXs7j+>^%qmJCY^%N207f(~B3r{MaS9S-AC3FgT@%q91 zMf`S#jNP|aB$)`Ki^IY!%eV8l=NZV9V`5ZFhlZ`n!zptSy{1}RQj%EyU@el8u2xi1 zidUZTpzP=hWJ^(0DXpF|Q!(jCm1kuc*tbgZxUsUTdmOd*6r;#XSCcNh8MStPMLdT` z5U97JPXGA$pZf9f<>eYUAz=VqSJzvChv%V(7x@5we4KBZDW7plsvC70wSMtuLA)pg z1bl<+?GK+WFE6192?-~Kg@ud5LqpYZadBpO>FKSnm;KmgdD+>WV!XUwq7-pvYBacu zrKP1c(-RZMc{w>t12L}f=W?lZ!rzWSx>bYQk*R|H}+S+ec0%Czy z)-*us4^aO7gJD9;x*3pf;5Q34zLsxiDreRRH4+S;icnCep*^a<9Bqj$>8^YFAxmG`Z5+%)f!q zk-LnF@KRfsOgD^%aD)_#mB8ctL1(&0)s=Gdo8@#00d5^A;8Wm1X7L)U>EQL*7OLb( z5bvobPL6(}Wuvg|dGF7&GApm-4a=*sG|La<)JlSu{}t5MLz)!x11mSZtI}Ud+0Z{-vF0>x%C|v(raB)Kovb{rg8~v*9^_ zp((ik?_^eEpDoQ#bXVlfW_jDyf|%k`bVl$HxmzK*4JoGo%qrXG75%8{<;7$~77ZGjpy+8oN5^0@FWrVpiW^c?Gnu7!(seGVlGrWSSt$T@i{8MLcD zuhk)+qt|@Pg3PGqadmYZi!DcaV|@#{&iFo4Kfczvtbe>lWy74etl_3q^SokFAzRKm zw%)3BAUAfAA?7b$N8awX3cC)kWp291D#_xZ2;x}J$@aZD_wKh9bIT1u`pxy{CF)QGcUwYssdQnDHHkYoXU)zpy}zR zcXhpopYvU0BkS$P+&=d8aw6HqKmdJVcQ$Qmo1fnnyv>TyKM~7X`?G(Y@zX0G6K@<$ zRdcQLhnU`Eqj4+|dbnh%pLxzBW<;M)a{VCilC z4gYgeeBepdLAT6!@Z+SBS;>PEK=c3%U&w0dyfF*9S8Vgb27CF3kmP4g^@?DnV7)Gp7f{^ zpcmER4X?^H^{?y;;vKKc^1J6Ki#^S+O^A%uiJ2i>6H&ASovsRI!)<$hg&r*C#UY+? z?duU#?ZPQ=2NVo_FoSKy*u5U3z>lw1o??qc^mpL9#C*+-P15W(AEmdjSuv;f;Qlbb<{nvfbv%LVPv4-`no52d?3&YdV>$N zu!5rFi?!4}k%7z*e5gQX2tK%=X+Wiz+IAYhZjbV|9-nTHcfOUn@jpIWDvV+Ww-n`KZ0IiTM0q0@lX{5253B-AyTb} zoEY$hy04QJln}JJt`B1aZ6buC0Bs@|h=Ifr43I$L2tmGp#1VqvfZ&LRnyEir4;_!= zzxrB1hw-}+;-i6D_;nG?=3>BkvQ#y}_fR|2U^-ks*mF(rF;q>4s%8@iYg^2VmVUj4 z)riBNZW2b!#9p7$%;48p5A!FRzA#b*2Dr!G^O9z^VFX`jp!7RgF5U3IEAN6{JGBgT z^>jg}oG4ZOf&)&_Yec;!pI42{0?*13)_NQM_1?n!u(PU7-^a(8w4TPR>olsSX4rw* z+M@6MyP6<(7-)8wyG^b8?vv=o3tL`5Pk2g?(gE;FV34opzQy%rw+@=d54_%n+VQ&v zrx#q59wy-jB^JbK-7-dr$;{|P0e==y<{#qW!x&`56=$&3Z{rxAgMOABHAlR&1$ z2cG>e82A5(hpf7Kymko2?g`X3#S0nso})@H77=oGLyn#?5%p_)pStA{>=4BO&E)H# z!MS_d|3w3%5shQc?cUr7ZXCG3OA}eZhu#KlAa1U<$sSP2czpCsfM~gBP|tB)Nm=Oy zIzj;dC*b7&B@l<|UjR0J_k{6boCG_=Jr94o@lIM6%uM0$WrFK#++bNJ>@~sPV9QYK zSIE0(l0^Uvas^dO7V|m~J+;9OP6fgd=-7W_q%A#iCvszjVm4Q>|LI7@97w5}9}BP% z@mjEBc$x`{IoUJ}_JfT=?H2QH^{e+l`wj4AiB zQB{CHFKT6-jX}Z3O&9C*i)N;!ceitSr%s*Ew@>3Ilt#hcFe~lH4z*WA6Kc}_e-pI! z9QI=JfQZ--^BY0e=Scx?|B#f!ZirrAK=NlfL>HZ(%DZmHa`YUj#o<@e!N#PIk7s$C zvGW^`137Baju&g~9?Y5n2RlAu6bQnJ96PEearn`6FbM)$${D6=@-c0dVhlW+T0~^U zf)8#IR)nWF{lpM;vV6LU5mYh4n-TNXqAhpEMc!vpPLxse)j<|#=m{%L!;2Jg(p(uc zGc(FGi5jx>vMKU3g)yozjsYj!#5SIumOO?3q+C2b9eE06sG5_MX>(LsYp!B0danBU zbA5M00U}pJ*rKN({@jNO%Fe3+Qg+{^XarIZ4kcCVyn=KO@w@(CTHycCny@|2lB&Ic zng6Gn(%NKJY}o-1Bw{9vczj+N5e;w~hSn9-eM@K_#ddz)Bao=o%;bhp6Z(WK7wxSp zonfJ$0V#rR2qMY1^WmBrUxuIFg-UiXy^3+>n-DnMd^)mxjun`)4N{qSnL36COCP~I zaEhzm9KiC6T>{cNTF#RT_yOLz8_Gbv>+Hj$sdcQTIaEDe?~PPI#$@&Hd2!ay1fBft z_%~~xZ4w#}KV%jZUw4$dJdFu|Nbr^gY_K`cZ@|u_WP2y|H6kA`VzE<_$4{|xQYb)p zBCu1Jb#Kr^Cw(gkx3HC4vgWA95p8#WKsT^LN6|8(*dy!y0N;sWoab+f4V0w9_%i2* z!`KC$a=<_U#*7g+SR|iB2(EEVIF023 z=T{^Bv;546JA;C#{?lO6X_1rRGdaO7o!ObW5ewO{=HBmmiy>VR#wkYtiSTU801?GcdbO_sMY@_+#cRO*iUUbRz;x$Q|`>cLw zk;dEz2-5p@>OyjnN0qtw0~`07kI{KV$R_oncM|eN(CN2v&2lq!sY%S+$fvKGY-dV~ z!`O()5$1nJ&1;LJ*y?hZY%V&tQ~tOsTq_2jr5g!t>9;{PUe>>GM&E1s2R3LcJc} zV_7?GY>Er5eXDo+xZ?7!9WK&*wW9aXuvlawEL z@VX~{vU6_J?GM61epf2{gJzs&aM~Lv=Ke{KZTB_NgdT7za1Tq%?ML~49N>4#Uff!t z7`mLFtS{e$f-ypsW%#v_lx0{$gD{K+IV|Yb2DLwHY4mDKXG9^F6oAUN(xW)~ABe*& zY6-6-@ujLpJl|<)jB0Zz57HvXaVS%Zr8-&Hrb%E0+j?zHSMt4N400&5_hWD!P$Ot6LF4&myHzrxiQ|96a@{UyHt#kcVNFa8IN zp8Z?=C6Ue(E=O@pHfVm-vz2{Ezsl-~1c=+;9FntOy^+itq_s z`_dP1?JJ+hwJ(1W*IsxI*S`7*T>I0HKL>-TZ(fBO-x z{ih$|+W+w+uKmXkvOpFH($WDzy3V_>rXz3 z|K?L4VJf;1D<8tj{SgfL+R$GK=&x)+f8|;9SN5UbcNG18K);_uzrPv%{vKp6o=5gl zC$g8K$o5tv+gp!pZxgbYJCVKIgzVWp$es@(d*L*)T@}c7)gar|foyjjvfY))c6TA$ za}e2{c4W`&L-x!7vduwcqk!zO5V8kPAbao>vIoy2dk~R5REO-I^Tt6`9< zi6R%SL@qRdT&NYfKqqpQ=aKX6Lk=pDgIeTZABOtQVCeE`3|(r#(4`g(UAlmw)>;gm zI)$N==P=ZG1VfDx3^i3^=tLiePIO`DL=}ck9Kz7?UJM;ShN0ttp@+_4=*UqF9c{Y*ny#gQ4Afd!_dCH7~0>6q5TaQiqvB$Qj4LzJs8^CkDDy(2We7L54Ym44g-XsYeFRA_INMFdQ;WH8K^4k*Q#jsqi6F5kjV-37Lv8 zG8L7`R2)GDI*@@LWMBXph#&)XbeKe@g3^s5!!#is>=@=EGR$RUn6t=K^dQ5~PbV@J zZOByYMW%w*+k;HSL&#L@N2cNcG8Hw*R0NQLE65;AM`L7gFEV%(89aszATm&e3{)Tk zRCcPzL1bVrGSG?aKm^&oW5^C1MgP%iWCxBQJJ5^lz+SA3v?6;2ksV;r-*6WFhdYq% zYeN5#5c<0=q3>7)RyGIllmGB{$W%pp8wBHLAq{+d(B_W00W(}wJs{pe={=&NI}G89E$ z??v?0H6d4Z4E=Sr=sS82eWx#@udW^|JKE8I_z+fN8-^}kz{*Yz{m_P$?G;%0P&@iN zPazjNhyLmd=x007NB!({6SC*K&>y~xzGgtSrvurZ0Q&nY(C@29zdwTh#(wlSS7GIz z8f4G6p`X2s{*E^M;NQQ6AN%d!Fu@)sc#a94WrCNP-~bc6$OKO_!A>UF#sr&~;7KNU zf(b^Mz;Pzf!~`0dKr0jIU;?L^z)2=>kqHbifwN5DJQL_*0<}!w027EXful^|7!%mb z1okt5eM}&XANhyZ@%_K~Z}CIFd3@Z=?dwFgw-s6TH2O~-!C<%!gSFKdXs*FP zYY^G9P3S*<2L06CA3B6wOA7`AhcM9QL$e0SxW|40Ikqe{%zd4!0uLa0t21ZVX;Hi@}-(474?1;L1K^8_yxzcLv%1 z)5z{Ui2jQl`h#`o-wPPQCQREJ>7}(c{Y~y7N zv^8SDUxjQPhyH;9KFzi2QYZ30t0)Z7&zLD{=UP=bpW!>2a#(CV4#Y_ zz}^;QPq(1IuMOGIVGMTc!(i1z$X1`g(9ve(xQiHU>cK$kNepyFkZU=M0sk=!)gMN# zz6L`_Ph+sI5rbWOFt8_p-04%uRrX-uQX8^on~|;YVUSMY^%WRA(2K#2Dr7tMV6b&R z2Dn$1vDYi@~!Y3?A;rz=^{cIC~TW z6~{2JrvcgKi^v`xK=#}P^q;(h{?8$j;t2@EtHK-SlQY&eA6(N^RR)nTyp z7zP6&4AdROKx+g;N5jbV*CH3JLaufX22XZj;M6e;TwpP9@Eo$u=h5HcLw|oI`Y&Hb zzrPJb2L~_!2hkrz^!EVV6DFt1&Qu$etZQ|H&)p zKNLj&l~c&IS7WgE3S1Fgt4 zUqNnf7=yKa$kz8GcW5sL8;)X-t-?Ud5%l*TMy~TLau@a>SJ#WdD`zm++lfIRhrxY* z3|wfyKo^UF!^e=VJcVp!5dG06^wT9q>plz~twZiY7Y3pO7&vzU*)9(K{SoxnHKG4# z8wM|(z+mkFveAby5bnc3=pY96w_>2J7XwWV$a0MsI?|79YXG@UA97I^xkxhxPwc@! z{eI;96&O5HkHMZEWcT$U8>~b>U4B+qAh-7*a_w}w!|2Yl=hfiRj?gX-3J;>r=^q)G4{?>Z*hkWP{9YBA$68#SyLVs%) z`g;yysO}-;TI-N&zk=L}UgS>HBG=T29BtdKZsfYD9b7_=iy(LC7;=Xq7(CsA!S*@~ zc64K~qX&b1)fgOzV(?4^gCVL<4+i%f!QlQT478oZ!0`qQTsnn;&|wTz^m z1L0#B2!}CHa|{DDM==2VFo3kL>oD-p2@LGngMr$E7}$3T*_MZp?dV1}+K6nl8QF^g zWUIQ6t+{}#?*y{G!^j@Kfb7wBWDnG$zvUSE=`?x14*kJB7(De5vd7P1Xipt-ot4P7 z9mddsGsv}dBiDHjIqI7YRmfdwLawh3xhp4-8#shq;3RUPYUIMb$c0;x!v^I1Ey(Su zMQ+bw7*44n31ptA=9XL~Ww(29X*7Y0sp7`R-E zfq_O03>?Hj&m|1>^kSg94FlbM80bENfeR-vaN#rtg3TC!qZshDW8m0X3>>Y*KwS;8 zr!OGed>q-PdSowzkqvhv8}2|B{K!@?$X0YA>+eUl0+FrQi>%*|tdB$XSPu@=J@D=>Vq2CFVMVb#Us7{1t!;ftLZzSxT4ix)6_@f?OP1u=Z7 z3d5IbFnlS5cik}Fb!+ghTa9;JdaV|#E`{;#`!3_%_YL6P_g%uf@4JY1-**A;zV9^N zeP27?eP0_^)gQ*H`jZ&$@4#?>6NU#K!tlU83}5kM_(}-FSHc*+Qib6w42B14Fgy^z z@IVm518o={px5?d_(~myuk6S0l_MCwaty;)j$-)AVGLh6fZ;0v3||Ri_)0Z~uT*0A ziVwqmS1{ZU81DCDxZj82{xF97YcSkjh2j1XhWl9z_aDM=|9%Yj@4;|?H-`JqV7R{v z!~Fvo?(e~H|9K4eu^8_2VRi3utnNL5)fadOJF?hRqJzY(jeTClqA7*^NSV^t%EzP6)S)e*(2juRL@)rr9-2CFW0 zVO8~6tg5QP@Cm?h+d~-csm5@{0SpIwvHHLn3nmmBN#qZjp4&|tvrCC z_5lp_wPNVvUJO;9!O%X$P+b#NHJrrI;lmg@T!~!MCFD-_Aa}A0x#NeCJAMJVbG69z zpGEFUHF5*=-Y$wn#1{yHnYr+6? z8Uy<;W1#*5*04vhrV^3u3L|?tglymdvJpS}JKNEJp&R|@TG2mn0sWPi(AWA9`q~bl zFM1Sx4LWvmI1^vfmn+`EE|Yb1Y#`%v2C5$1c)sHu_Yk33B-1Q zI0T3z0dcZG+#-;Co{+o-ByRx8J3#U-kOBcx;DHoOAcZ9$#iCA%JdovOktamui3U6| zfG0WNi3L2dfhT$3$rA890iNf9=hMLR0`Pnmcs>U_Zvmgq0H2nDPbPzm@M#nH z^dj(S7kEJcUKBN6%m6RSz>8VnMICt20bVQsFD?NuE(4ztfX^%fpK*ZC6oHpqjhE8E zO9t@L67aGj^D+;-EYV}&Wfgc?170?Pmy5tFip?uL@QMVyq5`kzz$*suiV3{32z*us zKC1wq%>th_fX|x1XD#5f4)ED!;MFwnst&xm2)yb7ujYZ*9N=}L^STVYt^%(w023e35aSD zL`~B~oq(t-AR2}w8U~2QB8XU>Ws!`PhK!Y?$B?mX$hbUYTmdq!2pKm68CQmky9gQAf{dGoj9Y|E z-hxcgDoR8XB|<kVFk6aT%nH3X)`iB-K~fEn)Er2fCP|tK zlCFcK=Rqrx%B)JNbWL7c`YyHGa%(Hkn%Q2g)~S71*C!lQc(e!5LYG=$V3I1 z=pd5<$YdF0o(EYdf-H)>EEhpm6hl@B$VvueMFLroK~^-7H3G8cf~*T5>ki0<0J0&1 zY-B+;43G^IWK%a~GYztt1=(~!wyeBt^B~&>$PRI2*EM8U0l8Qd-Qh(Q!$fI=)# zcmfK~gTfax@TQFE%Is-UP2 zC~5%|bqN&B1VuMNF$_U5WKc}OR7@8XO992UHN|m=;;ODv08|P(C0;og*m1IFBI;g}1l@~zebx`>nsQe(?)m#A3*)T{(*)&@0O1XU%=s+tB>&4Q{CP1OugwM9@h2UKkd zR9)6pou?2~-2_#)LDgMQ^#Z5{F;pW1s*wZLG%eLsKs8lRO$}7j2Gv{!H7A0a%Yd3Q zLCsm9=9WNRy9&BCcwsLA4Z6tt_aP2C8L)YPq1=#8zz{R9gVm&VXvm zpxRkbZ3|R~2i4I*bxcrQ*HT>`R967i6+v~gpt?G!t^ul>1J$)b&6~QKmq5*1pyroA zEkK1@$bwohL0uxCE~PG$jL?LeI&dDOu1I8?qp?pqVOYrUsg6fo9sEnaiMAY0wrfaaQ@xkb?2Wzg~@uN5@VmSxbE zmq8~2=p+L=kw7O3=tKpb7@!jybW#AFEQ8L=pz|i^{37VQ3p!r_J*|MA&Vim@1U+qm zo_0YO27B0JhU9l8h$$+jHper`$N&$3L6?9brUDZHW zbD*mQ&^4mznh3g<16{L0*Gla0_eph(2L8UFRP$0 z>!2?ipfBe@UoL>YybJ~*u0hgZkPH|^27{WXhk_AICz))N;lp+|)G8kDC3{?U{HNns{!O$fz^kpy%!!(Qx7={dnp@L!PV3?+5 zm;xB42!?5ZVdlUvT`(3+Ff3j(EFKJ71;aMLuuU**8w^JW!?D0{6)@Z!7_JS5n+L;P z0wYiIMu7)oX%UPi3yfls7)2e7q5;OT0%kg`m{JY`< zIUP*PQcTMP({jPIZQHa7m=67@U@q&BBgDuN335b(9HDp)a>RukuRty>KrXFAPDn#e za3CiNkP}VFiA#{nXpocX$AFxoDLF-hoRWi_N+742kkd>prxD2MHslNma)tpp!-1S> zKrUxO&LWVr1jtzu85Py84AJDDei)0xQ1mAunY+-(=;rT2g}UR zW3Vg}EJp{+b#2QP!J>Q%P-zuZunHzvMHg&B44Y)YCNkJ$5o}_EO&qXE9&EAoC*lA0!(<<0$4eYc5cG?6xZG$Zsf-R)M7G$tRU9`mv*djevz!q(=B_i1p0b8QS z1+b-Muw`IuSpi#C!IllMWfyEkF>FNuTamz4G_VyN?5qX0s;Rb`23w`aHrSe$w>1H5 zO`*qNYelei-L!QAwyuD!XTjDDu=O0+`Xbo64Ypwr+em|Ls9+m8u#F|KjUw2lsoSOs zwz&wl>4I$*!OjU_=QOZ$HrR`cifvgr+v35t46rQ=Y-3@B%n|1{_`jhd06D3*hj};G`9B(nW9t0USXBN07l0 zMa>Zfa6}y((F8|yz{x1!NRsMEX>cSH9LWVomWd;4;K+;M$QC$?VmV3%97O_0QNdAk za1;|9B@d43s*b9Gqgvpo4mg^mIa&rBZ3!H$2#zj;qZh$3Y{M~Ra7@#1%nUfD1dh1~ zPEG+Qr-PGQ24~R($8s&la>23k;8+E4Y}<5f0USF6jxB*>XTh-x;5fu_9043h1josO z<5=K0HaLz0jw^%XYT&p!IPM}ic>$cf22S1ur%+Iwf(%Y!5u7CnoFb8(A_1qE2WMFa zmv_MxbZ{j_awP(;s#>n5fUEQ18Unb61+K9Ku4M_XrGRTW;93Q6Z33=ift#1X&1>K; zFY|dKL7pg(CkEt2(a4Kw$cs71D~gy`(vVm3kk@R;>lw)F1<0GGmNy;9TPEaP1M;o| z1)>=RB0_;==`j?D0R>_~fzLsKUxWg0K_RU`LA0PCDNv9lC@4G>6c-9g9tv3kg{%Sv z&4z+*LcvHw!BC)JxKJ=ntzhy{Fl{JUHWX|X3XTp1*M)+cheCnC63N37ufS5;f+f+0 zC0RC?Gy+Rn8kRHxmh=oP=>{z67AzSAmJAD)ObM1u1D0|YELl7(*#wqs1(s|bmTU`_ z3L+GV4n<-@k>sFAY$y^3iX;z3QiLK|h9Xa($n#L-i%=9TC`$BGfTE%ZMb(6&CPGn@ zpr~n3)HNuYrd2czC|W!eEfI>A21VP3qD!FYicoa3P;?zAx&>G!GFc`PEb|&H3t3ne z2`o!8EX%UFEHA;bLSR|bVOdvT*$`pbb+zTCC0Jf2@Y~=1_O~a}rk)eTOtiGQb=3Rj zxD(N3TaND7Xgp(D(Wdq@=e3oND2A?#rH0G_k*- zaWIw~fA7$AeCEAg0-^VgPE3t7Y;LCh$Rp8qBieYAmR;GMVA9(UJuREjhQ`wk(Sdz2soI(wjB(s8re1b2})vlO3IJ@8191>)&X@dyM|ge^D=8r(#Gu zEk-jXB^})=)8FtQB17|Yb0djVZ?y4d`EaGJw0Hj_ryr$fH;-2uN))dH~udo#69c}LB5O)ZSm!l z+|kCeWM0!aUS0&-j223j%cMLKu94o%v9^<4w6x>8-4b7j%?1?Dm-VpK55l*sRcHB&XA(S^MX>IVq!%5qo>3UsiUnlwnf{G{=QUfaG<43 zX6FXzo5}r4=`*SRN-2B0N71Wbi;kId%83!oT&bQnuFZ|aW2vF>9m83}PIVfh{r^?8 zxxM3bfAjr=n`ex~%T-7;szXWmdlcE;Ie*K``y1M4qK!9q3a~vWmNlHQ#2m49878$u zllL<3?DTV5e#fxU->})S-H)zBn;z+T)ZVg#o;KQ@+k^L}vZX$X_D35UqW5b#QOb@; z3vOpPjC%Po%SnMxd0Fs1Gme&WBxFoYE4>h+I4$?Im>|%G5tkf`l=AZLpjvX$w3nG( zP|B{U*qbgWnLE8bZ3^Xa;Q5|**u;Mw9 zPG0vl+h+20dcN1|MS5h2g{{`wv1ss;Rc)O-b*g-(zwzdYE%94>TDG0XGX$>@y4%_t zOQp+F?Mgf2&9)_PG|V0HZRG>*h(@PGIs-R)8&}&=#eQ2aO6;VNFJ_65U_tq{i z0GjRSdrL%kv2Al*Mh8dN%W&TtRSesq3Y(b{#e3;o6QiZ=3N|Z>cADf$qiQcT>Kw70 zt;D|D-K03SsAYCjqnG;|Z&J|N+1vS^_w=rCy9$(ZE)l-JadTX1evi}K^7d339m03s zOXk$6tuAhDZP{J>!L!%4;MAnkr77iJrsaNYEi>PpSZ4D+q2Du(?Zt@l?nm3-!+Cby zD7~!{oruyBbZQn2FHL90tEL#zJ%i-d`5|4{A^P^o{^s|3nId=RCn}YQDn_}@$_+%- z+2uIfdfhBl@s>=-`=iaLn;+;!CE@8^b~&vwUGPYn$wza@9xxc=R8Q^*8YZQyA-{z8tq8#?J7KIFnoZ`jqZ|qbJf|q$*e?go8@~q zGpXCr=F`1YWrOHqZ*#)~%8T0XV?Xr9`F9!5Jz1@&N@$NyjRQSQe>OCzurP!s3afdY23duw#XHq^q7YKJsiBt%cFmVCa!bfSwh}8$fJi? zCNC(kgA(2LPj98-9(w+nQ*ug;%sud+K0UFfpEWV#X*KfY%ctJGrWf^CzdYQ&M{j~p z+kde$t~u|f*|ugZGu>U5nfF@K+>>&typnZWc(>!>JdZ2u)0Fg>wI;gw&pBnM=3Bg1 z#@M!F#>O&f#*S!NG8|kkn>LyfcV@YithUPqx!db}cy|$VQz#y97+G+d%X{4>HjOpQ zc{jWRrm^M)(KiyJ?-3YN^NWg?;Qd?dp6OdFQH)qX?%*loGdeMLz#(?vCmh!btVa;< zVWOS%@Hs8xw))_x7LvujbD9^Be~*^#5{LWcherCL5w3}yGR~b1_MFel#nKl{wTE$A zJ@Vw3=V6zf6Xa=W@+9(~sG2gRO75d9w^dAl6Ro6K-#SRDSdb@a&X-8WZGB$8ENU{Y zK5&Krr99M~t@5O4^*JVb?3F2IWLj~C>2D={D`~3RXE75~d_MYDdZud_{d*_i!8NTV z))S;7;&<+x2Ua>8<8ralNt!fuij$UR=F_G^aB`Fc$2^SPPTmZNcGOS0cqk(-hjYF= z=7>k47S3sw$EuSqFXun`jR+=OtaIXz#HX4if9^%qOP;7%WqNv=;-&a5nYA`{IHX$^ zXD=zf6pz;~c;wNOmiR)IFUTJ{XdxL$BRoVA^1Y}?Pft_6G?hBFFq8NAX{|KHOYtY6 z`P^S~6#8|S8~y;q3;zd>L*u_W#O^T%BbaRD4Kpn*cIG)fu~TNfp-BIbI|@2u)^5*@ z?}+E+%Vu=UC%?u|2cly|Hhb^^gzT%J*r^E=_YO1l8WWd4_I^BbhCTA)^H2prF?#Dv zErD>DFWB5HoK8Bep63@Vl`GQZ72@ga%!fksJWt@o(_Du)Tp<(9Xp$7qRo^Y0jpPey3?PL~+t1W9@u#~ix)Wqu~$w>#Zl8Lok2k|P z%|GJoM;`M$CBlO>gk0c0yjGJS`1A-pZ9To-FZw{+Pw( zk!RN9M*wd5hv&?U4xekq7w6hk3*si%9H*}G>Cg7FYeioO<1@U+h_7Y5yv55$e`gZ=&>P(mc%6{$=iSZI&G9;5YfT>W@W*s# zTYYE!4jRizsuaC^=!rQMADevep;AnV4h@_Y#lJZ6vDpI+i1kEL+^Xhh<${|tHG=~5 za9n<4F!}{re7}i){9hrr^Uj$+;Q6Gl`5xB9JI(PERp4WL+^LB*#|oU525-IQIUb6$ z#gZ4+nG<;SPNZjcV)QJPB+R|&!u#c855E4Ydv2T+I=i}tDF9Li_6WsSU1^& zvT)qOID<2ajJ>D8CsikO!PI$+_zhN^?2JVa3xa>q69T!Dall&->+!HoffIjsGTZOv zcz1lh1xsNblYWc;@rY#>+tJUca~vKeiN8BalE)pLh@S$;3lf?2%O6fzF84s^FaOF5 z%f$otxJMS*Q}A{(>z4aiw+A|ix4@iBC&L!~JqGDRmzzyv1JN%cGbiqhrbbKiv*M&R zvf|HjV12UNqiuG?H_#OQF;yD7AUXoP+bn)&^xHU-c*bI6$*Z2==iyb(6a9IZg>$m- zD?cBZhTPPn!Nbc18zVgS?Rjb35gdH+PM6Dz1QPj}T%uVID|q1di;q1-h&_(d7c7k( zbj&!L6?@0+b;ed-ChnJC(VI|gC}SoQHovH}g3Qq(VfxN^cza>8@tleEh(}*@SB>+K zHq1H*PWkdrb!#tQ@Cl6)e?{;q+eAj4j0L%!9@qU)fQJ>lF1e8xY_mUdn1`Q5@%4`O zV00Pq#82Jjo>{tbu1l)~~<&naBrUintiT zmKcAqk~Z~OW`Tn@Ct5kd<~639ct?iC9u!#KZOt$<0%KwX#?D(4lg+G;wWlO5Fte^i zlb!dP)2%#jwX=}L$|w5hbe$%hPP8eWUu6|?opr_4IhA>a0;R&*l+RUHwyIl;6lG0T zg|<4iyrHVe;xMRJHLRS=UWP~D-Heq@^eNI6O3|)5sInHignC6@VVz*A%&N zoYBsbqH+X_$C+v1vof-?)rDmZRd!=#rL}yOc@-@*ss)EpuSqS*H!4%B^FC!!86I8=C40Gx(wm&gQP*%lw|wn#_`# ztiPrp&MB~NCu1i?>C;uDq`Xvzs;0Ryr<~5VXj*g)=30-&UgJ>aG&HDkO4J^gQ&ZtE z6meBT^Iua^beuAnR->IalJZpIXjKN3hOAU&wXdee=S!{j6_8+Flfp$a;l83%zD0sbC$OjGwxJ< zNkeLBWs%m;)w?S*9Kk~WrzpkFlhqq$nrNO?SJxHRHJ0RPTv|g`d1-NBbD6rrQmrtQ zG*&k0>jizKDUhn-Tikh{!o1*SOq|n7>}y5)wGEs)RprnK+7h+CwxB38%V0L97PT6k zH36T~XDG9HIl*EzS-kus_8Gs2{DY}QZc0VEN+;eP*|miZZ+WV<)fQ;>88SVLNhvh? zm3I2Dbu6NgSO0BU9K;$)ulFM zy9`D3fkJ_`U8y0tv(xFV{G!9%ks4jRY2tqoRP5Q@N_PwMbi-+1#3~Tvc9DtzP9R&UJVS3M{$x0i(rH-B{rH1iK!=Z0C%kX(chO zcbY1MdVgcKOJ7w}qEeOxH1#UGEx*XXTC{539;h<6C`*cp-LA)&_6WRRyp3U*6mi*q?TE2ptZo1euw*{ZC3bxSbMr8TY+ip*7yju?6OQVFcdmd1NL8BKlx z?gmx5GF|z|6ROt4HW%du%3Hi-Fzt_D`Uit(xxMRaBLqszI) zvya&xBBY~6bfrmT~2d_kJcE=D{QIN0Vf@F zTC*Olsg+N&^Hw)m&R{W9izZ8S8QF>^L2D_>uBtPuEBroXSxZ4xj@@Ln(A7$<0D-g3^vr4Ic?20cZuKc)?2eGOcgl|fr<)`snD8R zlNoHZX1krmmI8*J#k!qwS~IL<&*Y;?7o;g^g_c$*wMvynMeEa)Dl=*z!$Su>^nrlk3b*Z&JRn4QO$*Rhkc(*IVW}30EWI64vO)gID%VRvXY z*4Fq1I#uhjc(~dEeT%8SAn@o+Z(>Z%rVNwK>uh$jjG1*$RTq|5F10$hRjV=Nr8*q0 zrdms|l`iA!YMrfYL%_{*c4dKH+05z63JUadn08rBywe$7U%_T>tGTGKsHs4a6)5oY zd3h~0sg44Vp*q+ks99%?qop+~XO*w6wW4-zn;ak4eyc*6ooVpbIa>>CUbdX^`8htA zm*>iIw3M-myo~Jf%)FXZJ@0GIo713+@p#C4Pn_8dZK0zjs8H2-l&v`}T4kNNyg)CM zDf}jzQ{UQDQ&5pztmRBDPf^+2X36AIMf)_mfpP1KgD$pGnXBTRd{u2upx#{T$`Ojy zxv4F#5;t8N@bSSiTcgJ5nbWR^b^ACIE7myfPSGjUG_6u<=rpA<)1+4GRBDS7?#>*2 zjWV@P5Sk0~%@q|ntBTpwh5`$t_7yhx?Si^7kXlr?swz|0)L@;nR3Yes4$6#nP)(tt zI*=#W1z)k%liT7_)f&0l{47_l%E1OzT+r(B<`uBs>{ZQknha$4)MWWmL>I(btJ&?a zI?Hr*4LW6>x2CE!+n8-u7iTG|OIwP0yW5}Xtg36w%C38KL2Tljtu}84=d{>a_(ee6 zV3w#9y8M<_udUvsZ}8RB+4IYCatub5wj!e@vn;2iI=4ty)m&YYn~^t{T_<@wl8uKN z9*>32>g=F`)8s32ZTjr2{6I^7YoMg1#mBa;a+fMA>J_!lRjFlmW|mQOke!lXBTt3c zb=*TCJI`9`)Ra3z?@Z+UsuIEI$4}1e}>1;Sp>1N8hH5Gy@gFpwdDfY zmH7&-ni6wXeo;14s591E%9~k>Ki}!fwODG3njf9mF4k^m1&(!-UKel9uVM>1}8t9F}gnGTymx5^ao<#{u6GjsD?Mm6UNG!ft2P@S4lpHcQ$>%7B3 z);T&|5k0d~TdWmM#>{f6yhfk3+8-#^RhPL66wL}(MWbNTRGJhjA?R^2C66`ia`PsO zC+@A@z}mPBN1(KXW;uh2E~HaaHG-?Gpq33}>-~+IOnq6A)u69)jm1|uqxB+X;cPtbuG$jp|o14tT7kl*0(mXWvW_ZS#f2iSFmQ${zs1rJe=F> z@~}?WQhVWk(}`AVZ0=lzA=A~Etx(pkqD^%{I#*yT`JBQ`U5P$VSe5Fq>Ke1E4Z4yMSfG`j4~^)5?xeNk$5s@7uW8(nUb zbqM>4)pJ;E@-udU zb^BRHu(56jW_R&IXt z9M)YHJ7bNmGqAG^rq<;fDsn0nOsYPZFYp;=w^f-_tnt#pYCc> z=;K_hTO4-i0auxZ&tq(MYrQX{-dVWHWi^(x>bTOPK($4y5rV8Thf7_RU!w8MQb(_m z_izHAVdVwZ>5H49HFme6INE!GxIlQYwhn(NG~wHFx}ZK1`Q*V;r|HD+CG zIpouM7wa^!PLJ1<&cT7QQkkxWC%d`XZLD{<=GyBr%}!%0U#at0%2UmSHnvz@oLOAK zGz3hB+|pD&Rz+Bq(#h+2Aj9Mix&%IMzo(!xl?sJMqo8$Zv_8{lVKiEuMggzCx*~OP zmXoi_W_681u_>ErDC9H-fveC9RfR@F&8k3Ys>@kWomFm~r6?yW#FwL>6&msmrdFq^ zEh?JPm}rHHwvcivEL=XPE;f3b>;0_C-s(>cc%5#(P~mXqC|G4dP-6;|7iYP+nub}* z;Tf-BQ_g6TLa9|`s#QvDnkCc3Dl%C{MJwRRq|p>=nsjzvX!Yjj&}Mp;as)OYi0dXC?ecb)-&d(DVNCUk z#(JNpTIa2@@xj^#UrCnNWvOyk7i8y`sWi%h*@j%;95Xif3MH+l)wG`0r|DRgg;toA z8kG`iUC6nWl^MA#UGFm31b0b6L6fh>sB8!rtieWIUVcSQX_2X>#>M$#J6!QIMO=A| zi-Vf$#i{Sh4c0enS+7gaR%LN!rctHvl-CzI^+ID_slLT!6bhQNbJaniil57(m36}2 z=#dfD(prr=O|53tT7}W5)zEN%cuTVz=wM-PPLr~-tSVDqQlDE>l$-B&X110nTWzU= zwO%m#Dl4;_ismfQ?J~ha8$HhD6-HB)mUC2<6;-&*?g~{+y+zrosjky0>y5d7^D1u% zU6yM%>9ag@nT$UnP(~lKc}?mO;L)gsillxO7`f}GCUP-Dm{Ud3`*Wv#T` zP+?}88}l_BlbPS*bZH9IGYt|##gx&P8K%+{%qzAv&}CVIo@vnLnlwsvr8Cu4q0B5v z4Vt~FY=&u7jjJm9pl{Zb6`9O)2V=5vPSy=C8_MW0sx3dDtuYD;zJPXWa~o5wYGb~j zv1qgTvgV4Wl6p^7zL(bN%2ajM8TQ0IUYd30G*>Eg3Y}7+R;KBcx=f2nt2XP^uqK#O zOS7xX8&sx@k^+~`o@=yM+YQCdOfaCXvopGSLv0b$$`_QG8~7RJG~0P=^eiDd4fT!+ zXOl%y?J!igwQ)E3zLNJp)5QfA@qHeg%==%-bFchIYQ_MC=c@e z5amI>YbX!$T}OGK|07fc={Hajr2lNabyQo;6EKVi*HSFFgcfU|XhKrlTC74TMT(T- z4#A;Nq_`9+Xn_JxaV;JiiWa9hBtR%mf_w7icfR-i?>*=4?Ch-E%%sVJO7b%jGNcaQ>)*3y~KSSmhsHS2L3b zoiUTISPN4f?+a7yzGo)CT#Ji5jZUMPmy3MSuNeQL|BR$I6|2$n4)4JX*y0ytoCr@) z(j_?ds9j=H*>(wZt7_P@I6z0Z7G(2=^dJ?l(-Vd75|r7z;R;m4!csYo@rsA)m)6G2 zs{}Sm!D~W+q@oM=d<#-RagD$O}prpB(pKVi0e zEbHh|0TJ_vM~L_002y`NI_l362`19G`hNNlvURnVd>u*LolL+wH0cGJ!-4rL^}{b}syl6M8xMD*03qfMVu zUt|gL;FO_8 zC0lngku#3fFNDdZ@t#BOzCW)P1mkwfZp}Bd&PB=;c#jRK8QMtS1$00#6#t66$0Qya z+6ev^ahWB=_af$QLFalL;CTUUJF}pk=xXG%GVa}JA;qzX|GM3Iy~%e>09+iW)E$$R4uB_aGpal zW%~&K2ZAy+TwDdb{uoN4)%s#AE9j6ckVtPy<(Pd(e-G-8p$sBMf`9TbtbjwFBvhRG zxQNQTOP8#SWu8N`67hVBdhLqVnKBF@uO4cxRf*`*VL#`J771oyT8yPfWc1TP-q$_E z_QjE=`z7LTuSUSs*b(_ceCKlZBzRz8WY@#4=+mwgJlQqL4ePca&kd#0hcKETyG6RS&}{z8BK=XD7pLs6H|tJorfZw1BFBl``_KZ|1SwKEfg*7Y?rB z!IGS!a}ie83ZAM^ip97TQpJ@W#4sGxQjPNpp`MKe2zK)4Q|2KyBFW*La8?2}oR%pH z?{_VY(>cG}gF@Uh!lfL@qaR<(p+^r!A7VKsWKu6gw1}|gsZi*LVuRWTq`&gh@C?x$ zdR-Jj2_*&tK|(hb#|8))gA>G~a;gc567GI8(PwI%+)ljFJ0+tU=N6`_n;jy!k25`tX0@**$mT^W1!r0(NlvOE87vb@g4g~+ zb*=l7>blbR&g_Mw6C*BQqJ)`H`v7n*Gf`sS@eyzJh5XuV%R7z`)j)Et<8&8iG{K6_ zXUhUj31p^b)<6nx7e<%Ryhk|D46)Hui$b!E=~t>n+L^9nqp@Tty>l+yM*Kj$wT}3G z(KM>Ntj`|$tunDz3uK-b_3(=TQE@QQ@q~SH29a{VX4V$qE z%NECs>Iqdct&9h-mpNVM#4$N!q)Du$D2Z`Z;+l!#eQIvK)7Go*w+49O7bBgp31H&-`=q^KZl`^hg=Kksru+ z-ssrL`0C;h9l`^8#9%WmH-`XbzR%ZqOJmMYBP#xN@ytNnp29XWDO;#P^FtycP@G4C z`DJ=UB4V_FKlP%+9{Pnu?AxpUW|Gg5bSBami|9WO>#)KX{hcW|noNV~5>X=|Ih>C; zN2y=~=7^}N^$!ERQIdf#4{zb<(nmFvtuqlft}oao&xjUFn)^Ek9gorb=R0Cvq*FJA^Y9PFw>$p z1ymo^+i%ZBwu-(iYYvNN{1mURh7Gg_gfVHy<_{SFzDN{`0B)v&q}tBQG%k|AL^mW}rjzHe=PuF1_wOTyZoRxKsr9veVvJJu-Kal^&RGY_pL_K|U%yN4GQCB6=0E zVZt|cMP?g`{NHnxrX-GaFe*eij?zlICgr6!Whiy~hboO0LIji|jKeZE1Y5uqiPD%6 zM4gStA_B5sMfkTj+jE|iKcxtQX##QF#3zSWIzXIG85x}X0Ks2GJJuEtM@t>kmGv2o z@khY4x*~$E>2FBSeU9nIt|%|baiRaK18g!O77W}Us%mFnb1I3=(fRM|o|0nqPv7NQ z>z|T_ixMe#lRBnzqx24&jXZmP+)R3h@#qziRc2X|zBCR_ZK{3_H7j&9MkG`2jxuG4 zfHKW`h`2K4brMEoGgO3#R1&L>M$?}lP%mQqAZBM9%f1yEQM=JV<@(p5slJK{em zRn3uyIQ4bF6p24Rnn+kvyS}9^8x1&^q#h8F)g(qt`%Dq%5I6Ni?4w@9kv+Aeu!upb zUPOMkg#aO>o$?Sg_)nvgvQ87NJ{Qv8teZvsO7bhy1ysU-0vb80jt3o>_Y;)oGE%We zb)%&D>8dmrd0C;1=alWd$6e9QQTS|!nv|@Yq}?HeqrEj*2jR|@EY9N~a4dW6sDM!M zh%rd7&N0%!!F$X?Eco_$&LhT?%MZKeXzzCNL(m#;DoiVj{-X1)0qOU_bU_rYIqkj2 zM8br_9Rxju{=$iv*k!p7?>NvF=xb|08y}HQ^}p>e{dgxrrJe0?=fJQ(|4!6R=Wd|6 z7|umj6?4@p$@bIqdu)hIzicE5VJ1jWJb2chFM1`08OrLuD3{bZecYcd5#{sLoG*;$ znC@Vqz*^0g{qvqz76|`?t zpQ(3j+do4Dg-{>L_uKFdS!H$ymhFm~lNWa-R!81=thp5Q^>;D^X>;Xd4?e2%i0U*a zx;&SCe(Kimn0Ei61eEH+?VJ;{VXx3XBNF9fVqQ<5=Of$pKM?ze>LN#$v42f%%x9(k zp(2#&7Vh3yY&9AAxuuOnC)IT_{R$-7{)YoAnwyK#HRH8S+auan5?=wksiGuchkR21 zfq&#}4)F-SIWn7SS3%EQR~F9>*ZZDPyY+~qI#9${dvElcxq5_Doe28*oGIF+&H>?8 zw-K@6U`^U7ZNa!GXh78|Xh6E38OnbCU6TE$K@-_ei!7=|VFN&?=nzS#)Rlr~bt370 z23O>jgBY6hGZ);rmyBsZ5`mPJz{UNcg4|t;=(B%}SgU(ulmCZtH(NOZWN(O$NCf2d zL}3C!;P-$5{38W%AGK>I2sQB64MGmi+|C&Y3a65lm{GOb5_00yXb@oQDG{ z(*K6fnjA0DNpnr!N#&1!eColB54cv?B+&4a;{i~rgYZCqxoP3!-LIqWl>0&cJf7&e ze3J0%U6}~Q{2MOZb5^lO>0-kGF)=9$Y5kY9ud)O%AP5l`79(h{kj4%mErNJ_33W^=Ec{in(nJNiqp0(!pK z-$ut2R0A%jo6Tt8pUwBZ1sB@l^b{y(g3E4!5y5)ZWZ}6DlyDf$rNo^~U+(kQ6U;b8 zJ;w-s(OgP=mULl&kY@IT1H!wN?1i2g>5naL8!0!E>G2c9GhgzWv@n))sY_8bYFviA z>#^KJVK=I}2FkZ3ZV!|HMM{4uMQO&l7cMcMj=59QHE{fb&eOey@kV&2GCutIF^uvT zs?a(T_rn(&-8>!~;V~YH2)m^4jDXTWw3x_@CN&Up$L46|O9+lkmA+lqnk;!NJJM|P z2O_+ni!LM<55-wts-l@T`N^usnz7`ULu4u+ng<73(pq#yRMD^oohde5XsE!CN z4a~?ZeE6lj?mC3Mh3F_>+BJLw(g|J7gx6dwNu1-+f+69!njSHy^q-<(ddx!}zP1-h z(vn@{3G0fxWX5jl3@~@Ep-+>P?lJ&{pA+-cB$KxQE+)aUqNTU3){?3qLL?3s;obvGaeWKSwSaAa@K6k zRCu||*K!w&G8b^UOIw*sTY12Y$xM^UjG=zW)bQlgu;BJTuI=X_zaI&$jWL%44%_q3 zdbg1xO``)Y-dNba_VGw>O^Ylq;hJQF0)T#X}8opufUzr zSkcI|dHPASf^oCL$kj>z_E+Rlm}(uBJx{-Xs*9R`#4g1grMFCfsK8kigyc}5UqgT? z3Zjm280(_H%vK}FZdy~_3>AcP9m^zKmbx<I{h~ z&H>p*h*0od=pXZY~e|hhJ}1@(C%t z%k@!=W!tZYhK8SPX|kM|&T|HXdRjrbZWlMgDU7ekUZH{y#2U*$vX6< zy1^7{lBUGC-f{XPz5nb>M9kCGTU4jcQj86)Ce#Cgndk!d6Jr!ub7}d}(z5!}vi?$7 zQfnjkZ4%!8KNLdj4=A10y^9zwir_OlW$Ax zaH=UYaDcz@gsml1D$Rq1jz3pLAA|c$BzC!hZiltyWu7eT^^E8Mv`znk!jF5qQ%7q&3KAMb+ppYM>(`jmf>Si^*227Sw0cYJk+06^OaB<;K{`@i@ska8^o*RBkYj@A zoczvvUZ=Mv^dzRFdV^wH3m6v!IHo+KGnMB2fEZ)ilBdS{q9spF^yN#YjP<2TrcCrz zOa2r;eNbX*d{?x@)a0&w$%IIV@Aj`)jbJvY%Duz!JVo)3S*Ba!AM;EdOr5`&N{Bb6 zoBj}Q{9@`N-k4>&Bi@*2O8lbm^1ry<{j9t3#w>+m>Kf5m)VwS~LbAebZ5wyqrqZU0 zusPJ5R>-`*p6JF+pCqWeU1{uDsP73Ep1R*3<8VgtIWK^yV$}CMV&+dl>NX-%%gy3b z{`aOjlZzX2^`jBSWucF4%l16W_Fj~QZpIrgj2kZy3nKQL=9<5V!!&goU+EGXDB1Jg zuGUuH3ue<}t@R0E5$C0AY)<&NMc0^5-N?^zbfRIS+s;kf*!7XwnTNXZ1jL$3n^^ttHNgQXJI22iN4qRQcZ0}ZP-PzH&=M}W}rtq}$lm3-n?d|v{gGP@mBgLFH z^h_TvP(Q`@2vO&g81S%axJ8Ydi7aHX~T-WjFc+vfISH$#&;|5n26ZD(PvcCqcWcvha;JS}FZ!09?$;pvQ? z@4|)g0?T;6{}?bxXbMktf5!h=jtR}Z-_k^`y%xXd-qOvkWMAvqQm@ihcjI8y*aNR@ zZ+|ns%A2JSahqfK+{&iD*Jksr0UKGIry0k|A|YtSAVriNJI_0|_;C{PcFLqV5v!B; z^M+7TGmU$aIz1I0eZ60Ne=iiCt{KI}od`Kib{bm{gjiM)k{|LN;|outR&Vb6X{|CQ zC@u-r{FVMs>>>JvP=h5}LIF%Jv#&FE{D4CfMANrj#uDLQgfz z;>VZ^Mb&kp^Wy%*H?0KHau<^ovli19a~D$;-!5h><`cm@Q@0ZRKOnt5^K&7m%&B*xe<6K0`+Ip5se_|Gx#U_t@t34~2a1=*dc(!DQ@k(5V^f?@O{8J#$4?kxe|Jk0 zr7{OJKmVcmezmmlwK8)~*E}jSsnAvWgOBO(@YDK-bG(^LdUNENL)tBinSGA~Lo!iH zqXAvPZFYPb#ZOu0ymbE)QP+z8Le0SPQpi_xGrm7@S4nf)Q;1#QqrfwPzXI|CjRJlG zCjx@itVAau|4%@B_@A!TcIi&JOKiEz&D2SA*^cE@TeZoIqAm>j)BWM)0Y0=tv*Ke| zh|Q$`R$pvTP%%G0_q^oId4I`_c*6TS&&=P3ffQR;j>|Be9zmhYVyrbw6sWj4Ak0%c z=;|1-QND0hzOYcX&_=w<7lO+cbjla{N}5xatTZ$&e(l-uCoWnEe|sDhd<58t|M{>d z?)db!P!sC`H_JlYEHMD5X1iJsQG<)vaSDMi} zskJosaLL?gX-;=(>-&DY+R~i*lCt)avfdKcw|#ok0BPc75@7ZuV8%G0$~d6eG{CxO zKc`^d-y{HB-nKNgEvjhYTpCgujFGwD-}B8^eS{;5-p>GNu)U|nZ`-kwN# zu1I4>v48rMVfwtDX`8MyNBoYEm!(KmcF##VutP*gMsH8FyrVe4C@D8RnK79NP7-s! zfcPz7O%8b>uH^km0*aA~^xkyiP>70dkCW_ju6-tPRv%OS%%I;9U@0Al^G|2t6seGaZio2Am}MF|Z%w@mhhwA=dO z0eU*4spDX|>5uoCzC6vb$%q@av*>?u#yoBi(-IqJCHsfSC@bCn1?lnA8Wf)+G5_Vi zVo3c#>g|{HDwinQ{=dro2LDF5Wa~##6>zxE|S~vQh>CtNNwMe zJnXgZpso1!-(y-P>q4683vVifBNs)AKqMj! zxAg(XA2tOy`S(B(^e(^YdB>n+taE~IHY2842#4MuQo^YiKoOy+C)$FKW+m;?WQ zr}8@_cg!5~Pf!8;d;9c*o05L78L&t^sHc02eVn|AOt5zE#o(9HRY5Q++3Si9&mYu+- zk9b&*{5}jrz)h$7&rO%-+blLx__!<#+!egX4c)O9s{)C6IYzhiRR5(gCNn1arBvp^ zR31IAtgX7RTPo5her)4fv0=_~`00M&BNM(SA+`x|v9|zEx(si22=%511e64+dsLWpq15&BX!@4K4LZEBN5J}8}ARV#_nw5YUv zT+sQLUOp&`TU941uT)#cxClA5spag-AV000)cC~CrM#BWxgvvm=UZ><9WQy5Q4gsQ zBa4@2x`?^-KUkG>kCR_Xm9VCoi!{l|`I^Yx(9l1<+$p15B$58^XEI--hkGy ziI`c?8vZl&^nOBX=x*3OaC$3eSGRj$gxI7MZEr>-68r5FiNs8u*6@_r!J3$rqA?F? z4H>_qG1Hl&(a$}Oh^h3tGILlb@Xze}p-C9q`aKgyxpmJc|Gr0$eK9DM-$7GUxKYQ> zkF4sBssN$2Zpp&-UHSHz0M zj@M5g^5pg~+Ss-;bbP%V+;(9Bet3Kz2=%0mRb*Q0?^ghBEhP){G_4)b{Wv&(&v$L} zScWklme?nggIIa2p;XsNXOyS#0ppYH#7uk*?}ZTT)f3YvVC;<@vRe zH>q@eseD~vr(yf{q^W-&KeoMxalTeJ+TC8g+*Rz(b>v6K?xnU06S4luF?I|74FDNaB z(!>UUafFuE-yBX?Ro;g(E{)!;bfj`S+-k`ZWyibw7Qpm8yLz~vgsSjF~uBu|Vd z9O(dD_GCAzP=1g68sr6^Tu^E+XNpy1SjGJ_1d5%^hmgiL`>x@#ij>;@V2oYFfUR16CcsvM03Rj=a84S~=`{@CT0QOKxZFSsYs zBJueeZi_)Fq=`3nlo5@ag94%8cgT&i72L&*Qp1@DV}4g6k|TK)_kKtT5<(w)y4P12 zDy$T8aEs9z_-iF$!}Hu!hS9q99jI*vjq48ss*JryW}mI$)}cTZ;`r4>`I#xAaesN0 zLi{*&=BLqP-3dy*o{Gs0ZpgG#Y2emoZ(8z+(nKwbj*9fE?uIsS3z8(93-BsF5=r*$ zcrR>O>Q%f0O!oEYP20Crny3fp1OdG4mlS|=HC#H=*1c(d!b){3;>oVAeQA%0HAi8< zxv5BDo|KibaZ=!%H@!~NtM0VQU{Cv@K%mNWitvKsO8+Ubkr#=Mza=6qS5;}Mi%n;F z@tp=ya8m)yvEb%a&kcXzTn9Iingm)fL?1i`d)c2c5=nGA{#az1s>e!y-i+s_CR1{I zD2vYWHX<$5!plA!ki3hE6Ani8rbR7yzO`XW20A0tkN{6izZXzB?3T`@|H@doqGxe9 ze{#-jj7AiX7pBJv$OY%op^{$hM~DIiy-KTB`^Tt&T#$Fdj#hnXa%P^G-9Vsn8oRp4tl;=L2CcW=DqOYGiu01u<`Q3zxgQUZ9+eQT1Qvo^M>Ky0_5{Hmy$sWuX@;c zW>&_2he2u&m>DhGBS1~QEAdio2R&J8klIFaqxR_p4dFIiPg4|8fv`hrZ*Jwm?c^9O zdArws5L;Er!EMhhh-m?CYb3)5Itg^)<+GlQ?_03yW4lsVjlbDB=!ramx8IQDDIKfi zDYerW0k@EAE=H^Ic0Ue!YONq%u55f*cO)AKe9$w%2U!lKFrs(+z19(Y&@*NNx$jG2 zlw+O*8sS5%?aZL#k1XM<>O6Uz`^4fX`hbDhX*~hHI_MAaIuXiywG;`O+5Mg2Vz_ef zc;Uc)!3omR#GB$_6$_fN>RwrMJg`4|2?<=6f^?QJ8J)U!XLRh~?6G{necoRg9Z_&r zIG0fsI1w~MEbg442N(c2OfMVUTXn?&(y~RJw^&DRARP=*vw(H4~_sa?IJP&%fHqdk>Ov zLuLqb;G&w`&eg62!fO2Kh>0U?ER+=XqM01_;*2V6Ozs`OD|auGf=3^dm33?%6I)*2 znhxU{pl#mke9`IJ=8O~)=1P*n502$;@8C$`hb8gvTE_D4s>bjGXH)vFVsTMXeYhy3 z4lYXA?Yuip0)CCrzAgxt2)p-_8^+n1*cYp?dQixA-aRJ_57{IO^E_bXgI%eFc{*{z ze)>|vIJXc?+6pTG;p#PjaQ5v#xR%tMI`qdoM$_ni|2c{Ji@}g*_z9$;Y0>iiF50U5 z8UOmT9w0T|3Sw=N+^1zWat~#DF=-2&{5)4{C*DK@v=Ix8cCVd50-+v*bHofocD$rH zFgcUdmE|5#e@y)96&H5o_GoGj(~!^8>z3=S z^x_Ww@eMpY$~!WJD& z1+Kl;0$3E=N@Qf%W_4an9DOh=az9^v`BU~zr}+3|M4cHTVcV<}0G+0jup1-_X$_?N zMM!kL#H`d;4_0}r!(5|jL+hmc-X^RXelq!Jd5a}Z?tJ^h)@iA$ z4&Omuy{>tOo+3d5iS;Ubg!evQl-bDn3Y9obJ!uAqcq?qyhJ7y8f_}Dr3rl+=CAHkR zpGd>Z5yJk8(MYuo`u9*)-f?YDMCy}&IE}RL+M9AYamQTf$S|0<;>jm(C04)0ZTWac zwZQ5c@6VfIXN4+a10Q920?|oXnL6{Xtg5DuQTaJfY$_`(M&f92aQobUpV)ZD8J;bk z-}h$oAg+GQMv+ncr;?9DRx2I9CQ7VB@qgb&n#jn>4Suas9uM1Z+3335KF)dc@^mnB z^#^*Hr@<=M?e?@G_)AK_?M<&*v5{Z3lXC3I!tj=b16*x;-@=K(_c>trKOWv%@aJRxvt9M&Fi&M9-8cj|DD%;_UWR} ztIOaUP_kRPIcC=lFWa1L(369OkdKNZJcOg3W?I*KUwF5Cb?u()*&_)1z_;C$KkokQ z{t+^m$R$Z=z1|rRSsqkbcRHzsf|zsyUw(l&eID3Je#2r!&$rE|xKjs!EnQieF7Euv z9P-6=wb5HqlLpv5=)V`9B4YA&wG?sP z_s5-zn?#w@$7}?sLV9k+%w~7bqA@B`Kvt1mm$*HVrVN=RpS|c;po7%zWH!`kCWUQZ zuLgbZ(v7O)O!a@$|Ltp^cXW;(;SWBPnwR=N{_(u><&(cv9kv%TCdZv&e^+ok%k`zo zlYr8~abK8+QV4GB)Dns1oa^+!>W;8HHd~W_ss z>oE1PpXc4fT6e8Bb(%A9+`c=62x&g~Yz=5eHC&BJvyxA&d^W%6*TlXNm;@hHxeq<> zQnfa!*2{J@?(;HQ-*S8E|Kx_afETFF{jdwn_<^?yxvpZRQ+q~~`Ag}B}96z94dL%fM{^asSgp&E25~=&-ORx~M0M`a?IrqHG zi_d_+$!=QZ2yqu*ZX2_mj0Ct32|pAo_}EwRRmhEdShBGomA#)Qr z*-^T1x({y8-d5nJoH!ihy7jd@*{~tk`SxhlYyHE$HvpUOY0^%siWR)pj-S4%H!Xxl z!Jkd?aw``UJ+-$eR7&tte1iMZd-siCLiJ&|S{?k7FSG;t9`ZvdPm7f8>Gv%gsODWg z_em7RXqJ@AzXzpWV4+FntlBzq$ zLdnePA7!-2a_rZCq&2A10JztBonA{!Df00xXXx}jf|Q!KnES^lB)nI5zg(AEM@@D* zopq<}x*;Ds`osH99`8fjXBx|3Bh|32rr^#s{QS? za0CSGf!iG&eQMgy{+(~2eqni9F2>N6!ixMa7p_suP!!4~sO)jFKmYx~-=CXVl)aA% zPeKgP~U~aPAhmTo~LP z|HFH^ynzg>F)68BHKWg zfain5EtS{& zL$tm68K%r{b?NkNl_UmZis$#69h!H+Ir10X)K%Ba+R`gAXINByFh!eBkVehG>mLF& zjQjHePyBJX#$MbNB_Qo+{Iuihbe~_@)AOubLpYd8aPXd+VOp;CYljW{9mDS% zPGL)ViC&!xmCc8-*{{yuNI8G~KGM3CW0do7X!#;+pB`GkHBimkYE_^2T;#RpM2%JC z+(cv~uLK}lX0+-;3;byrv3oH1d0`Xmi^l2tNbT`2e-<2n#WJ(M&>Rc6^_`0mP>t$< zSqEvaJ^1XS1ooYTN(H&@ZIPAE&;Z?v{`@L2Y*%<QG8lD;2*&RBwwIYV8 zCaV4uxki@JxF&opy)+Rp#hpNhkk*V3T!g`mULDpuzD$lXYF=p+VD& z!%aHvrm!urRBx9))vi{%b=14+mJPjILoV)iBhQ!Z-qgW~_V;mj?%!bl-Vv%Vuz#fYh=*0$hrUte+&sQF4U?dm-6Y{N=g<{7( zCB8R$4b`u|JU{Zjn*8c_bC2FBJVR)BXis0h(_-R>_j%ver*575*Tu&N>thWl39b2P z9+GfgoFt;s>QWo=8lhJGige5)AZjMLym=wmeQ-(EfG|WF+wM=*aa~!D_9~je{FU}?2+r!;%?m!d{}gWbOqZl--4uEj0uA}2{E$ni5MoOe;l zAT<11m9HbX{q!azALahpf%hbbB)|Sm;hIA|&KfIubdN_hB!rF+www1pEULc2C&4Vd z=|m1<0PX;ZV<$^DDBu@|z=4 zF&>|^Qs_r)LA$3DL)N7s{2{p~A?;PrNL6{BS9@wOLa+Hbf`0=ix#RWrHvVYuLmu0v zISR`46TER)h$y5L>{5Myc{dySFE}Bz;hG}I8%Z=W+Jh~xXekGjg>Esksq zU6IEUVNkTmlo1Qpy_@j+Q#h~Ue7PGkDBbyom<;th%J)UZv^f8HJ`Q@rr>Df~3CRcD z3_zelLxnMc1SV3f(f7CfCn+lzp%FT%;S^i3sdypunpo0xU$=mctzo_$-2L+8Dvj=qE@D1rs1pQkJWb_RpB?b_N5VR3Hp98OwS3{1UdEKKGgzCG7`LSatlivr|4_S_? z&LLbEhdDF*bP?8vm{~L75rXwG1}T9~iM3rGl~`{7beQt>BKYJl`v`k;}4PU#(Uohv`C+Wq%h>6Lh4T=y@H6efa? z{3iw;q+q^;{!^H$k&UOMG)z7_AKi4{tZMQA8J|4sSX z;vbZO;6}ADbeV677?70#dLDm=-xDGkO0->14Kwu)%=}&_Psx!fVczIRaXBH5A zjmzl+ya~~{*SSGTFze|%O6^m8qso6YA2^L%`;@J4cnZ8{#G!WsHoGl>H zkE2f9SwutH8vY6Avb_{w%0Hj-8Iw*c^;w?6k15=IC&z>JeEH#iS%J!{mCbg1A%8P> z9K4myo>ZqF4BhKVPT?f%4Ecz6c8LP)yj>Vwcsg^Dmve+PC&*e}?l;!j_zeoAS=)cq${=fIG{w1|uYxRepMub66 z7<2I&nOB_KH)%0R27VU@ee$j(Z^HlEnIUK*?>{7c(Y5{D65l`E8lr(b06%bT*FauA zhKIe-@Z!%Sr)_xBW?tGyvSWF9aXtl>Z|B(iqt?>0S!#iN$+X>p70cc4u+AQR0F=Xl z&;EJd+Iso=t8~EMkK9&8h39e%Iy>Cc+;Ds;ck;992~W-w_py6zWG5s$Z%gs~;%7n= zgor~z+-X;|KdBDUO%zs$0O%(e6?Y{cn~g1tZp?shFz?x+^L zCg18c?Z7+Va3_bOS#PeRxRY<1Vj6#-Dz3;Y8lA-bJcP(zQJ0ZekS0WsqF*6c(X0qQ zge;m;EQ!h@HJOwR!R*P4o{c4Fr34Rb$anHz@Z=uk#GIr!DP2Zp`?fGSD_w%QKY$(p z0k^sU=U3dxq{*;~*Ly68b=cH;meUI?AY_9{K*u*|7bH&j7ITuFis#0iQ{gTztalDW zttW8Tu*oC2l8wewY!J|{r0efV@5xau)>#Qph7NcDya8KQ;U}>!MEzwa7=BwZ>=3SLa+yBeB*ZWv#(B${ z_tsjkzsdu7Cu;o5W0Dk|mHdbM1Y_la;dFyDY2n>9hGzJuGr?O%zF^efnuC1q$gf&pH!L74Tp7-EaZV5ydft{L7hDT_rnSC7a=sG;bpJgs(KyUEs&QX3_2E_ zRafLhkymoRiI7LA*pPeP@}&0!8b3ARuL%<#B&f_^DQ$+(`!bzv`D1UgstAR!DO?(C z;zTB_I%d3VAN058IjN-63!?|X+-u%k#?{Q()F==9>sFEe};Bo7@g^@XjJ7R06Evr%JP)dZ^J zR-)MNKRoD4W11xalHXc`2*z>p^wwx2sf0Inp-q_k*ra$+93&zDODv_7y_ z39XBnyF*-g3e)I|f|#|4A{Y6JY7J$??o$RAiE+k>q{-B9m3dO2D*0Ycd7%>B2?>v5 zQHQmfa)ZQjgm*;JNkl(CWksdB>cd*@iwM8O;A_UmOkSliTsFhSDFR8}jZ9&>NYNU? zl?|3W`HZ;YKext=Iw{5Y?)m7ZIK3dyA+noyyskBo2WIlX8|6G?Jnd;{e%NUC%vnTr@kxhmg zM>LZiOd%+w}v8b30n7icmp|qm>Ho?d2ZSNH=RCYe5hGh~Yvc&?OOIdDnIZ+
  • d$9Lb^5e)fc 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୾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

  • |SgB5Ih0i1GeCF%;Ylbh|AAg~G?lT{z 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

    dOgo05!)&}Qe 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

    K8gk$)DV{Qrepb@UR>DCP?hG#-heyJ$q=R{ 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

    KtG|o8?s}erkdqiwxqOPRqbi{2zfhO+= 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 z zH3qejY7x>3guEP+UL?#Kc62)DGThhvL%bznZTeDmX1*k|tXzG@R4It%mMXYL0Z^mF zB~gm#Y*s;9l483smX%-?9L12k#K^Erf7i-?YXKFOlTm=$&6%qTRDm0;MQO46e&0Ro zO-(@i+yBO;2?NtuTh&&4BrdP*&kbH)pWOk=i;90btx`QAVJX#FMNPsp2VjL9W;lti z9lTzWs~LT8)kryYqr1NuVkKGfkN+}d#QfvhPk&?{W#)?2aC|xD)MNA5Q3eWGPzr|Q zat*GUj}L~Bakuw?6VtGWhIp#-z6QS7F^{*f&vVE*VQq$y_>cmLERUW47 zcA13soSWsW$jxe6WR~i-3l0Wru`m|gT-LF_-Hw!%@w2K3xbMKG;i>CqBjGF_rh}OjBYrg>yo@rlAFTXggd)+N!~5VTeNU_LjEPJKYfLj@uL?fnR~!L z&&vQg|% zSuu*?n_xU#A;!JAF)prP6np;wdco(SUvvH_b{NgK59J?iyOW(iO9Oqp*FpDWZ>Cc( zadwnAKZ{)_$q`B3sb%%+5N`j>8JIu?UM!!L}g7^Chgl{-r1t&;qjxDV4L zIM8|C4xi9%&RQ0w{VBVE`}J}#RW;p-rYh}u&0?i$S#DUVD#K`}dUHA2sU92)cB3_GLcH&)5C2YCHU8o|Rr8K60 zSDSykemIViq&yw7DORy=@$)X*V-tWv+P(9gd zHf9L~QMF<#m0Zp7J`()DUN_pKo}bXfV%-Y^4Q*S*qg-WJDr)jwO_7|-d{}Y=uEtu^ zhlNe1#t|DwCqroflezC^y65dOO7&At*@u|5BZcMtMBYQ``^shPY~@I?INQ+ysbH%N zmj-%Lyg5YP1C>Ejn30fn76YRi0HCY}=(NtGz$(7QhD8nXN40zB83;MKe`4r%#1Gm* zZ{(PRd_q?9oiH26E0 zO6*lOjw^9~7Ny!2=y`f{0?%W2zIk zV=A_02ybOo!c7*;@)}TD_UL$8Wqm@5^w9^*(FdPN#GO-W(!OUhah zo$UT(R?(M2-MtjPi*;Q$`%v%Whig|XZ!eWwfI3Nl$wwsl{Ze_q0U5jB`chE;3EG)) zetr$9Q3qCN*r!pF??XL`u3}H^X7S0PP*r0^RhZ&xDwHosOi1Mw?aB8mAKf0ef7>z3 z4rGoCb@(m;K0?K*4UNLap;|*QD7evE*{N>p&Ucu7=#|BBvvd3!HW=|BfK^7Tt}P1;zOik%QCB>t2^ZjE&a1N zOF+sw2m7QT(HDiWhW!!3SC66-vfWfD>qSSpQ8}z$%rpL$>);(om5|PH4s_YhHU2jC zEi@v*R$v^{VN(@}YMXy2JEqeIVeJ*ga!xmzkCTZyu`S?w!%y*E06%~#nAJv9`mYp@ z>J$b#6-N+26vh@iq8}g{*Wr%Wf@fA{>$H7Y&Q9$1bmRW7=MbDi*P)i(f~U#|+ux%> zo=aM9quK^6`Ee=!u0tx@F-ESFkLwZ9FQ{NpZHo`S!)fn7$B5NwCD!v{-|*Xhd49W8u;ljG{s% z^g^Gm`!|cXQ(}aL;FEpKG=e%9mAxuU!Iqr=Y?g5={UMQeMQ;JeQrjz&c5vEN&nC!^ zOD`Nkew?#xB>54(emME@@1!GaJJL8XXQI@gSHkLxNHk<&-Yg2}R zZ>rEN(v zC=W4E*5n>F)deDdSSmM}o3p8;V__I%+30!4*sZf2Em98LbaRp0@^I75M+;Q}TC57O zFbx=p*5xsSlpT9^;E1`%hIyzlAMI;3 zXkTLn`x)TuP;2p`0Skb-{D6gtC){Wx3Gs*y_TCaPH|eEgHyC=tT+yMubmk$rDsvDt z(Z##=in*3%t4j?95kfNLJSIu0E~3AiT~5Siq~CK9zKmwBK* zMBAt}dGMolH~l7i#6omjBn1K2#CSJlL?+BS8 zt&^;FO4@mDWjK1*z{vg)&Y}JL&LPT7hw#=6J5k0Hd56Bo;^z0+#BM#d1>F3=#qR@f z@q2$r`)7}tU-e}cA6tw0RsEP>m7NafI3U1Axh;<&5PnCtWEnGs)KH3ClNLKBDA33*VWztSeTi*f{*1o zm;=HJu78}xN6nr(qV8{=o?2U37h%ztut+_odCz2C)@97WkaAzMHm|EwPkv~ipW4EJ$x3wfN#ZQ40ku=_X|O~KJr*Cju0 z=fLLz?&8w$E-uZyi-SD%|NczZjR4t!lQMsd zDUO%8xQ^AwSkb3*9QVi!V^PDsWtvfE(2b=T|Nb_!LAenpjPH_@0PKDnDpS~}owPtu z>FFmc5HxyVu>NS~2l!Vy(;qQEKn>;xfKPd~7|z6`jhUF75%UJD$;9kE8K#fUJ#Jjz zp$_4hVmzy=?hy_bdpwqR6z)fbLR-v6GS9*@6g5Ns#%$Hk3V7>jWL zqp2vA+G}lbQC2W2QIxT+2hn%@b@BXN#>J6_!M~jt{7ah-oB!)t)Bo0&3;T_cQII!o zePVN%aefz^5y4flhQ)hPl%ogZ0H*p&{t+$o)@QI-+Q1yRE#XSfFa&3?gFO{@hRtt- zZ5a7oGA(ZXqw{9gh)tX0rk)LGB95dRc|a2Ke_R{4-)%@|_B)WXI4B6^ljLvS?TWWw zV`J@CqflRiLVd$Y@~=JXis%0*vgZFNH1dD!%iuU|$CqD$v+HKeXht7`MPz_3*uZ9S zwT}!}#->xW`sag2z?_L&Iwadu-+W6l(kt zIW04q3l87lv~`&ioVKF26JT0#XYJs$j^znvggv>Y8G%V9k{fVsd(gbTWFpIYeMz5a zN1g1-lbxK)@&m5t9<;<~u$5ev2k{ws#uKpbZE`|YZMf0A#csLLOjxI??SDq^;IvB< zfjxgHV8@RLEExpszaKE$n4pfef~t+PfVn1Pcrd@r+`(y2E=vG&`58lix#$54eoR1f ztbnrnoq}Xw3r7U@zJfTg{prI2OV!tmL^YRk=umQ!?VD{^oOItDE1YcK+%t5YS-O7` z)Bdty4D6qUXn!d{`wRWFoKNx-{3)6D&^C{F3(L=J){(YFChg+1{w0UvmZ$CR0?#sq6+YTYP4SnEx&?k=h0@^k`v5Y55&Sv_mRV5pb=XPbp?2az@Oi{qB-(UAuP-UVp)RbMlBhGe6+^(R_5YoRJ$FP1MJ7 zE5q93mvmcP|7TVOT!r(I{st^Ft10~-t2Ul!H(pBDc|CfxLv&&RvlkWesAhK>3AJ+w+C8C3yS+kJ>JXB$EK=9o9Bo&vU_6A-K)PJX5oU28X|In)f4r-+A7B zVWMUqy{nyjkDlkWXDBZQ`uQahGayANvr7s`0)6R1a1&H<@5}JrQM{t?p=$4Z;cQL_ z-AT9n;uSS%4=oTvl8xhv{Wa-}g-|i56u0W}`hX6?Zz1YporI1FPdB2A&l;%d9R-yo z(3dHMZlI%VTyXbK?_GTFqK8Y1>_X^R8XLlX?;;@-O-s;^0{y)3v@O*_gur9=R6*?n zpL*gTN_j42s6Q=0|I|Bi39{)Cu!=&JZpED&cc0A?K@e^8h>mNtN7}#AON1Zj_ejdr z$vwKRlfV)&ms>KOZpf21){}Hhq$W?W+9HCKI(6d=ydiFOu>BOZQD1k=d@3J?AoD> zIkkQA6Le~;LyvhoI<>LyTGs_^A7cAxG1P7)+l#5B;{vYNeu6kF&W(MKsE_7q&F6RP zF}vA9-VwF;>w58u!UrFE=mFm?Fh5^)*jEC@(v{Wt+U?~;Zzb|g73BDSsMsGk=pcMk zz%|1d;ifVwu^%tf?gq;IBf72+`dxhQ-HUt=LBI2=e3f+0RYbi>HXm9f5f zfN{$jvH1(>aQL zdYqdA%k6MEZhP@Dx@Bdrf{#fr(GU3+JCT3v2)ORQ+oBshO@|3A&*OXr+Klv}Hm+%R zCvRMHXd8Ji+}VDsJxG#UD#N7chCJbEaOGFsyj0XAtZcw!72xE*27+^%N}CR(-K@+` zvCmW{rpyYpFU!6`Xz+Yb4;TA;F7;mPj7aisqPpIgX*dN1UpL~vOsp|HO9~?gWUgo? z5KN%lkSi%a%9D!rEuKo64y4VJXLEElaRJv&6`(wn$`iThO}egYzn|Q#M~kV5k&n>z zwZ2E!C3(NrmEWyPazu;ecblsW8aZG?!^)3$#FGpYt}MLfi=L8(UjU>;9&fMAFBGUI$2=uH=%*Z?kh z#eEc$EMlWHa3Edcw>w*%9ns0KZ}-}*<9`2-?c7E?9rxvJ-)7u=+L7?Y7I2~~?nxNX zZVY&N3Jf?326V9j2O8VCjicy*Q%-%r$}kQ&N_e6L{G*DGCk#2t81g!v;lg+6it83V ze&vegY2JH%XBo?7+l_=TZCpHm!F>1e?ECT8NT4^zYjbvlV{SIRJ+JTKv|Ii%!p!0wBp`LH3FDLX z9LMpoyI?Ag71#L|-+PJAPN(wlJV1oaC&1H(eHs4cY4gI~?~y=ns_(4I71w#^`Ofe! zPpS4TWop>)~ht-Hmk!vnblR^eT_gkT$K@-&3&YA~>HE z`+JHW$&=J^a&aKiRw6V+Zc)?9N>|WLm|L=KBmIbFkWhy&#o0;%y?in3#HE7NYT5PN z7Q`>nb-i(vnV;gW^Sl2`<4f~*b30z1W`H5dKPa@)e?Zq8VFB!)Y=vNI9D*sr*&~eK zk~Ds(b!nQjHI_{Ry~29}w*DWT`mpM}c_`LKbJkOE zI6C3*|Ihp_Z(qq<^S6xFyS{Dy7GY%xyZb^yqKm zcK|@Y=|kl&keeZ~hHAU>iCvu5eeTzQw1Oa~X-5)^^Ls?Q_Q8oROl?DK6 z2y$WVu4tc5)a?56j&h`^#rFW!<(f4E;H4rwkwJwoOb8|W|*=w!xXosof)Q> ze}*IA`e!*PuZCkrZWtUL!2QCZbxxw1MiV{1^mcQxRB)2tIaJyO&1Ou8MYUa}54Q-| z{2JN(+;o10bbf`XvU)@kdm>JD1LJkM9w>obAq5XM1Hh2D!QNkaHoWn2oq2 zoR*4HO=D9n{JuHW0yfpdKM3$#*f$zenw8}mQ=Kj5Ym@0z)$Cp~LP>K-ygO|yN|HKZ*pnw5kJHvb*mp!La4j2^K($Z1#iviYAw=f4-z1cr3q zC}+F#Sk#aDS{|kkSVFPqrE{Vdp(BsHo-|ORH{S9<~$MqNL`Bv-iFT<@rFFOSpON=hY zOnW~?#(8HQW%Y~q_`DP!=@cKahfwyap7V=48Yr)XWzUt`Epu~Q8^8Odm{-=%Hf8lrR z{}I}M$44Xfzpwk`{R=BM4#9sOv4$vR6_Qd>MMCYqbZ3XNH8z%j{~6=}Zvx{2QOc?% zrJ{zt)9ySL%O`Q)SMzPgPyfJ8tp*Hyl2TD7DOKe}o+=V~wrB_I+WSSQjF!qRrSg7B z&AH{8cCL66*f8Z!B{`~H@Zu3YiLbP-E}Ud^id6(j>TBWwGyltZtiHsnc>lEu@4r^z zh1WXtj&4Km=zY8;NJn0cUetA%Rc-8MumQmzg)C;jauQYfFDFWkgUCIS+$_nh`iEe4 zZ%$>m2}Hee&AfLxQgp-sl|X90H<|>dE%r_$p-3zh-uX3sr|5_;iv*@E@}5gVkud&J z$9@q)kAN*>TAC25LjM33K~!Ew6jJ^ki|_utPfv)?IE0}u%z^vXTqA3t-X4Zpk?%22 zi(SA`@hXmxobd4u%3nF%7yEfhu^okv>|+`xLoK0CwcvYk8 zM~x*%f{`;Jp5Bi+Gj3+s|UCe*4jK-Y5=4)SO=) zJ;qgrNl}{*(uC3ZY72HU--=JcUBjkNeUo!`Xf+>w1y`6HB(ou^?Y>LiI!If?%GIzGZS3#tXVCwM;B~KY&sK(f#1hQZGj1^w*;wXYMd$7j3)wIm@B-E= zmJ!t>7HS3Wb?S7!>zTFn;1}Dtu=e*?XHB&=>;Z&=(e~O~>_NVS7kApP$D+%2SljgM zVLiGymE*!%+YWZZ&qwqWqKAqby$%a73D7Eb@~5jb+#J?k`u5G5&DBZKUT8^i6xL=! zcf)mK43pR$U7}g^zYL;Y8U69QoDlpgD#f{$hzqZS6jj@OnItgnej)ffMy4~bh;Z89 zf0(e#ic8wfU=l_xN5B=CNvY+4uvPXjw=!((w(ObqHvzqMS*5OQSFD?5$gpM{(e7*g z_87CshrGCaV1D;6cEPd|hnBPYkMj>L=Y3POBip~ix_!0_ zvY?VsewLq)mC;Ue5io43=Pfhi^NMWIyk)fg`gr^8=YyfY<@{xQ%#qywB&5Hk#Y%bu z4+dU_A^ngdcJe_gVp;xuZ`trehP96E-+s)&drMgRpY7j)Z4KF?&d3!SW?sGtG=?dA z`jX=JR>J;}(|9`WUg!+2+~@#f&PIC1r`uSE5c(}xx_Z(canhM*h3Vhk7o*Q}@qD&K zDRyXSQ;r(`3qr`N>w4@Q66m>K2r}th_Oxlg@8gA)x6>D9LkbtfUP0pQpWkMky)oNl zY$nd0*;o4uEdD8~t?sf2r`d*;#zr_H>RO+J%NUTR1_I2PVuPMsws zv`$?E|CiB;Q-AC8p`_5kt>2zzkd_}(?j?wt!6GT`>#u;ns95^yl*CdGlP#Y{m-D2^ z_Ca(x@4KintliaYij{B%h^1#U{Cw;tt60INRTG!drgu(U#``YP&Tak*@=rt4E6)Xq zbk(`Z5~=5;5~(t*ZEF7Zbd7hY0J?%Ej`wjE3b6dl&EJJ@M$QTq&`#-m7Ja;X#QFjn z=7(j@{i`s)Tp07qg)P^I1w@&X$4>vsqI{+rDKi{kIv~nzx%3o4i1KKjzL%(ySZ(NN zehzgs!`8s=azvRl z?;Oa$bPs&E?mfrPv-8+ZZGAecO8^(-O3q_rm+_L4QmnVpGjjn^Zp){=lhaa!XCUqL8GnB~Hw2x<;%Kl!{%uM9^wjU3-5tenj5C(7yh zu8f}V%7`*EmswDhISvX#9#IzMVTj@kyXN`mD;;VrxWPC?VRLJ@9Q;aWkkJEoy#CB) zz|3s1kOZ#bgwPwD<*Fl>DA^Bv4r{LB^X0tn5-s{3thgMa*v?9W6?Zm#%oYn{5?p++ zzQ7i$WFN_eRrhJ`GTL};ym8Z6u;#YF2W>1QH9rca+mk=_RP!z6Uf z&@^*8Gmmm$k9{8V^bra3C`-%+v>Dy3Y%B94oK}20yVW7=uu$wavo6&pWjuxh*CJat zlqV^p$B2OIG`GdSmRX9+a>2hg*LVW+pJwaUCDm4cpqq=?CAlS*3JDXNiQL3|X4f#T zUT2hSD32#ZME3^f5wr-b?rx$y<~9Oo%a~bNxviWo{6Z4YQ@oiZpr;lK&o{+VOPsBq zT1mWssJ5f`@8qEfX!D*)SPkj>y7mHz7%gd3G`*sbDpJr z$Ith1vGe2Y_t5XBlfXbKeBD65W)L+e_2>IAg3QcEIajQS1Glgcy1d%#Je#OFKclVZ zgMMf9|M<@n;Pd|6fNucc8%Tz4S`vI$B*Hh&fbW5y0etcF#B;?eeYaVR1U=n|d~-#> zwajIjDr<;*M-?U0vMTth{V9c#>4xfntK5bDM?b1T|Dzi1&nXb3Jf?CNN8~P|W_w(J z;)v?{=zsTd+N$(;VoPU-vvn}n;$2d{@s?KdsjgG@o-5`v)7KD;ZfEP`pkcQ<+&_%{ zQdk+~lH<$4svG3O+O*7morH8D_yRNhdY98>Qh<9lR=mj%6V>*t7~wSOmV~QZY5H(i zxdEOn_dK@T&zo+dwjj}dUZ9oJS5?=W|LjIjc)6d*hZ6&}b6JfTHKyx^fypE0R))1{ zulDN2by za3N3?%YYAOBpC5tLX_-BX}eIX*G804u?%M`>JP2U91uy!^v??8%$>_)e!^Uyv!==o za~2yLq@fKR^JYoPY_ZDO9{mHzgq&;HR4#*$*Q*UCbS0LZ@bVn02AsIH4I z_VY}?0Z)NM{A!hVutPD}l8#U1H=CqC+9@d9ooX)lR<9IGMX(*b(&ojp{ zhx<2iFDW-ns|h|Y=V|A@Hpu6No*_c5OC0R3sc6UI(c$QkRHm+%$KwQc5;fa>vEj7; zk2An&KSii}RA)(0I&ow-QS3x1hj@w)Ft2NHHojEA$4e!E%T%-)PedaSAafiLVAF*_ zfXx?D0@$uL2(aNoKOYl_>iYeKlmMJI0X!8THFfrH;N^W+LH^~q@h|&H+Lvke%PzyO z%-$jM4Xlbhbkv+?`wAWst&y3wt&b}CbW6LOeGC*_#Ks455 zS2;U}jyaB~t}J|?KG$yP?=m#T?EWc!K1_dM2gp%Su8b(W_Pd|;>w}qNwpc;bnP8tU zz!l-gQ-hln?GT>c3}JM1tAtQHj0jLRpiOY%7@{m0V<##)=*zv@!R1Hvu(s*@jGjG6 z^fFU{HQP=wlGQsKic`T)6f@kND}vDV(Ubed+5t?N8S+KX|w42j4c;;+fpt(`9Uo zat~2&<%wJdp6?KW4p1){Z71ru(E-L}C$Hqfk^Ik|xMM?EqFYRv!6-=t_ z_*V>MJ4SQgI5f<~rX@kOiRoA$qyJh4ccBS)?o_M){(ZmgdWPF0>G|mZ+Z<10$v0lb z^V2FkKdnlvPZ-91WSx69Xis593h0c0QCEwcSTw2}S6RSP)Bb z9-~{?BKo@9sM$x13Mt)7j>OFhaKl=F^?y(2!75Qa)(=6W7QhV6Vbe4>#IzwWiAtTsT!6#D!TzwM`QJyjB=S7AzpDO+gl< zf9vNl7A&MZ1=g5y#(%#)%3MsVDJE*Px4Ln21V0_+%DuE*=$O|gDe3eW9hnu1cqf~z zv?fYfsSES#zi9GPu)}wC67Wc0x}6(bWH@R`R8&)R1h!T+8?H@n@GOF)r0@t9?PT6d zv+15QTP(Bo2h0-h3SKt*8v%@AnrWB(p;JEzkR~gI_9U><=>sS8zZ@Yy%CialrL=zs z{_5nC?R(CMc6TPng-J;F5fbX~UdimIhHtN%$h(}!P;jd@-`Rd%Ys2N{X0{P3PgtYd4s8_?@_KXht2|Z65I|F34$b{|Z-M4NXJV}|E4@ZwqB7ZE& z&82dSB)4kz?xRK+#$2%+{jq}WLMRXY4H#fXkzsOia*^Tt4pZ(%^(l1B3)UAp@z_LX zL>pzz^i4v#5LylWeatumwm-Sc*-BK~$9;{Q_UOz*dcgI`Me!8vZ1{rMSo53uSb=u< zYpT84?tiZlbT2|rh@3VJTEBKtJkcVwzM+t|#&7DfLhVmqcj@#%PG*H7%PQ%VtDLQs zVQ@wTQkhj{TZ}zTXz++v(G8=GZ5aEo`0TfOmp{dKDNk1sb%q;EBgQl&X341%9FR_g z?qGt$?Vx|JVt?mBniBSR0sWgkZ4zQOfKASN9aOE7AAm z0<x{1CG=v7+ODLnJ>fUZa17|?a?_iH-!p%FO5rIfqYE9PrGe;fKL zN@(zk`O&`qk^G-W*#BQm-2eaj9pv-;lw|+9`1j5V&@~IwOA+e9unx!Tyz1|mKy(tTtJS0N}B$Y zO4O;(k=>t@DP1JcJ8sdo*bQM4=oz>83ZmX#P&+%#Lsar5J+(FUUPsPpA?n;T4>|r1 zXN0cf+a97S(Z@vI5`9e9^^N1;{ztout|z$#zG^pr-IZ7YiPJiEBxouRo*2qM`v^bS zzC0KFd!bk>q&JN_b*i=-&aiUms-7ecz50w~;+}&Iw6(tj;$C?M5cl2gM#H$XM66)> zO%+G@T_o+-r?Y+v^!G!@mR@KuCRJ^>p6=)6uFA0X$}5bn1;Cn;YJ2;1#+7Rlx$-5( zm35~lab?GG3s){XJsI#Sd|&JOEdajcbO79z2>6F}iGW{~0QfnKCuf7S91VbLpS{e$ zE(CTAcK9aZJ;7|ToU&W&Y^LiNCh<1Q7rmM8_(l7dT`n|CJ=5(UC|H#5_74<2axPJ) z`vcqB+(N@KqE1}~^-l*NQg272HBv7^vJ$U( zXrInS`?QhtBp)0s8&3oO&3|_5z+bu$G#uS)aaW-%_UUNmpZ>~K3GOP-K5x3Klrwh~ z`8-pxs5P!3#~Rm=aC6zH#TCh{t=*QQF3d!g2R705pLOe0Th1q;j%5?je#pYSovqGe zQ1>AETh1uU9b3vEHNaMF&e0K0`|?T#?)MnDue7Gt4+Aa)CNzP1 z&Jxfh{1}MjOLD8E*d>|S4+MwXZYU3e!woeMTR6{0YzMt;Ri%>F?*Ha9of>&1j!RGtw-YQIAD4Vg_uea?5Jul~sn#RPPj~*ttZt z%`9m#&5xB~ZNkL~b@B*lI+#w>iS~f2;2cV+LcxKfk4>e2!r)`CcMx@)ov63v(Psd} z*cAFFgvF1Y;fT57mlj^C(lZ0m-#jhgK)lb4|LtFOD4rJwilZt^*tIv{ciwGj5?aDTF*!;>p$?+d~Cc}mYF)WlCEdO_$Vb?~6VOU9y7^ySgk7ZfELGsHjMDB@R za6;E1)qxh$jEzh?bE|O?7#>2CWBZpQWpI3zhXomdn@_n?W|wD+6NzfO>G~Ep1>zOkv}AX9Vy3~Az_tJa)ii7NZ|dnb7s%I=2eie=7Yu`!m=sz7s|q+D;8l$#uqa(k{vcy-bE$O$X3c)7yub|&EQ`v1x?84GOufr!oBcwn5olg~l z&*I-#rwYLk6=HhycO1us>1e6m3G^e)_fTn|FHLx21;=qE3Ma{KdpLGisrsm1TGY2_ z9%W<}h(>ADOypj$e^wsR(MU5VH{j}@WaQ6qz+uv%o%sn>P}&%}nF$6QduV6+Hd1s% zc&3|b|NkDqJbLX~#ur^WIGxfjeV=#fMBgqI?OM94L}-{;SQ6~;9+G5|FUe&E0hc@} zo<{!a$Ztwh5gHU?N{UB{xTTxW`I9gYzk3af4CB|nEmm}W%Rvu@GZgEq&+yE-9HzQ zz}CX#GmkcAF!<3q`pEH}JDGhbc@B{Op+C)=Ndo;2Uxl+hR*f+_p@{cPyr1oO*yS%= zF4RXXU@5MxQ|T14{{kPjZBv)=V1?Kt$?t1xa;B7xq_rI|v*ID4?& z`*rMNz~w%`Wjj%;vseqjC6PO!e)ef6WuIa3$5^J!*&6#{9AgtGw_GkX*aHVU{k;c} zXDrjU`>)Z5m@u2tv!7U}6#E0wn<~QzGx{p_FPPDOn9-iWGm1W(JR8O;6xMP6Lft0_ z4TKLI6#Tus2}ko^zr*|!`R94YKd&b6&(+934_EsO5BMekQBl6H7VS1 z3^LAt4M01SL7OrZo1`FDlpnOP$V~?g7AZcMz#{W4EHc_)k#OuI!02AU=+Vga+;l30qf9eqzc+JatP4@SJ;!$jh*I@@FU_z1RENi5e=`*eM% z{-Cc&?0oIqZ*=CrPQRX!+*};M=EH=6Yk{{1%iOOA+v1J&XGjd2vptq&Bmik9`WDy# zMhgv79q!;U@1fXdK#Pxo7W+sbl0^bd-9U-v;qkwo;Xffp)*}`g``bA%bY?tE){=mP zJrEikwX?+ws6=Zz4PktnVOmqMbkhvVXi>M#-2}N&$HW;e_qIbUc`Q0oba;+ z;TDk(=lg%s!-F#toj0_6`V{!#BjAUqE{kX0Ef=jSSoE=v~yV&ZRzjRyFzn*hDA9Fvk-5V>bl7HBC=+P&z{1WT_ho|QsU zJYu!6vQwSy;b6Nrj|2v?geTJJ5l=1aj^_)_BK%$w*wzj1&Ll99=DQgf*+Z0^&n{ZV zlYonUWC1i+p?bb&BZWcR`si0l0OU~sOsSILY&XWANCN#?iG=Gc!dCvCeR!HM-TR*m)+hjvmgb2I9pnWz& zS>?b$nzt01IX1Lc-nRL_XbNq)arJ{)gSN4pgoj?X^^FCEHKr#9^Ve9Cd`hW1!I|1g2y z1S?RfAftK&A#fZj%B0b!mlCy_7aAVpE5mNTp1JsJ5*QGKKy#V_SDIpa?P)L}{hq~h zB-NebnZJtyP}~&Fx=|e`7w`VWGi7fn^k0+4ae?gx?%K_1b(Z}0(DN;699OI^jCY-4 z*k__Fk*zy*aL>hZzu7q-?_34GsYxjj8k$PxM_3~*>qa%rU%dN3$&@A%&;=o|C6x~O zs0j}PQtVn(|MvUH{)ZWv%69$?xrdXckn`rM`)Ol5-#@lWG>EQ zZ=DB2*3coR)|nhJz(JO|dluhG)HI%`?$na`ElE=?nbO9H^kE9e6$c^(p4#A4mE|9% zJ+DtOC&PM<;}6PBt6BUkwKT0{ejDrfKUp`b6Q3*I{b`B3wPeb^(m<~u1S%|jKMk`* zaD;{}Lm_eti$9=XO-SLm5_N_NmNh>zh3`w+cK$bj)~^LdC+}LiO-rApx>FcA z|HxB(PN#2Nioc|Kgoc@^#s1#R#d++drM$^B(^V6loq*2XdluhA)Uy3>m1AI3%D zQO7j^Hh0JG&!MY)+Et*bz*Ac{{pkew*--r)$1!GLBT@81u|i25S1?Px%~mphKf_Nf z>qb?4rFi#eCGy`&rW_2H2Kodcu$GJW{|rMd15Ie?N?fwVQ@SWfix(Het=0wrhXS#9 zcJch934F;wVF=91AZlqU3G@n&oXe^-JcapjUzt5vY`rajefRHOx+F(7!k79Fx^(u} zQyW?=jj>Gn+W!trqr0w7jLAVZM`Xd5rei zJ(d>_!Iw_<<)HPK5B69<*lvC8ZR;;@SbjnOy*4~Wv&NPd&E&vKfEvRK`OrYnILQ4Tr8qa7@8*9LgoX02I$mb30v$er`V%z!b z0&;OMAzv%Bp!%-t1doszrDVKq!~dOFR#oD4W1wZTQm*RcF{LB7FI z>L=q|7fP}*{`R$QJjfrRLmCD(q#9_3p@Xqb@hIWCBv_DO+rh7@GH_hJTx1YzE&Qr7 z17&2zO#XwhTxo9Y4pW}5#a-l-7eY2|o*))l%8_imiIOCUP57NN)Mg_(Vg!oOTWBed zBu22H8N1?=vs%~mD2hWYwmAM3PxwDc5cjuM^eBo`JZcTFXJ2|jn?xhxLt zHH#d4O|fN$AT6+zMS0^{)nk)eXDEsyh+X;O7p>Xw@gOk{A83T71pcqa4h4B?W2pSK z{Glkww&x*$Pc`Iu1H7;P4@D8=T!UcS@sQcU*EkI1d)J=UcgYW8K=rSUX@vMWd8V0s zWGB*O@+5PqpWG8{%{`$g7V-$rs#Yd6c<5KO*Sjzjr!jv=qw z?3A5=zp;DyO!6+gQ*1y@-{pzha|1XokFN;`a=L#XOl@3RuIGDx7GINc2C}s;%Dz?} zi}I>tXUlOz$-|tsBMV;*j)WBNc549FUwc$n3L(PO`JU zY`m587~lyJzeF(Vf;V~#%!!`<@jXvP;ZHI3@B13umpJ(33X{kFr#M=rQU}|8Fae2m z))xF>Lx-X!xP&Omwgy;!uW(eyO8j;Tbs?62tkwuNBfJr825zh;B1WF|^Yh2J0YJ}wc&(2}&+af@QvM-& z{?8!%OC$Var(G!jvwh8I25IJ4m2mXRPk(B!37#NuRLkB)z9hKIH-PO;?V~~8!F=X2dBb&h+ zN8Z2JkYU63e^$Td)dA1yWx5%n^D`tiYW*vXsuNxtkysl%1KvE|+R*xH498g;82$`6 zSmN9!BzCnzr+QD1nfF}=m-t)rW9Z%y3e(dJHok^vjU0o6uR-K2RS+x4#g?o*K6$Dj zjlXa7a)Z?z1)y*`^q)9y3lf#quOB^>!=niV;t3mmQflAW04>p z6vQ8}gC&p`@HK^&vuM8yE&5N?m1Qg>FO6}K3r1BJTCOCIw3A0(MIJc~$$}-zA55Zd zRr3B6f!j3-w!*tve>w7Nv9+P~3Jo$hwg$+4Km_C^@?_rkC~$A2gRhxI zxHp?{@5WdpJ1iLvJ~>;E(k~fBxYw<5Zx52v<7bfNVQlw(3I5+2mEz$*YbgubPI> zZ0-R6>e&%IN(UZ|1|FqV7g{bNH(pF`oJelG1O_E6>H!vYg4Fr~{F8y!qdg&aW0LA_ zY`sKL75#WcRrF(^-%22{HAPVrV6l5RVKF`5?mVr~;7eedLx;cO7W{L>`1WYJ!PnwG6UoLMr<+uFpSlC$^G_&BpBo}}Mj3Hk zpZ^yLdn9ZE6I5rdSck;DPO*Lm@|-fe$HRV^==5wq=JeDiBG2|?)It`- z&+=*VtGIthuX}qxOeM?OoJan@p|x1&<4<((HDeRTOU!f&auPQ3F5+v(8jx-8Lzg-D znnasp+#UyClaib_Zg;6aH~UN1KK+d}K&k%e-@$C=wL3Z#rxI|I?bbY#uStx_BO9*2 z^eq3|3c|1BFk?S zs&iQGrP<^zK%ly63uKX(QLnz7`s?>iTyQLsjn!REp-4g4K(c-3_tELPC>mYh&|I2$ zFSK?#Le8%XFG1oiUH-Xv0G<3E)&3eQ$Z=0Nn+^*T>QwunD`nxof_IaD7u~4!Q3Dov zwr5orCfwZJxeh3VWYeI5y;=SnPH%M0VJlpXHIY*K#G z2->iGTvhhOQa|sjB!4S=koYA!*@9}jryxE#KMTDb!eSv%}uH-0D>q3jAy3leiU*ocjW<&H=ONJYoio1Ka3)Vhm*< z$^JeMq3caNgswl?t%j~!dfLIXI+um6&takKaV&J55j}LR?4tekkZnIN;~qtE@HKH+ zxmBH6{K`W;iiUrbTh(dfSJ(BB4J+|kT@M*V+5S_kWP@#PUpJ>sUA+ z$u}5~ZQsIKXhH{VhW44-SZ&;HBqy4K@kso}O3X%ePc|d51K+{WK+=d|X4YFMjl>F? z`7g3g+L8Dr-uiL)`wfeDzp2U~-tUvRKF&|YmLf31k!*ago_dxp=xJxQJ}f^kW@#>= zvY_g!Defz)mK&zHFGup?9;euePJWAOm1)THOAIpf02CEbl;iaB!p;@s0Zy?I)zvCY zRb^Y7gUMh{v_rRX2ux=a1B92~hPL(KmvLFL1bP++kH8T@+<|B9*W!2H2Htxgx!SHM zWa-@+L*0m($hK$M*it|53B*#Ei7ZwuG0~mS8f4HDS!9>2?KHtu5c4=Yw>mBx$+HZ) z_>7tNq{MRE^lDeU0onHOt9ziK^}{h}!Xf>9?*YBHA7DFc5=WP^{!Lv|c;5!t5EKLN zeHFTRC63OQodzV&R*6n6{aZV39rvZCRC--%^osmytlMAw4!rG; zeZc|+nIMyU@WN9}#lNKwP$5ruBEM=jyg)&s=8Vj)PPsxoe7<8R6DLRAW!#je$~(LiZ_t6V$N`S#V!NAA_jT7d43gbCw@aLxq{b?PcB`~E{%1H zoq5(~IPHMX$RE6~*L(JUaj`u(bKuLI;wgA$aCEPq^2O~)-0u_v`Mzd%HnF*vjYYnO zr9+T>gA$zIdqiKu(sKqLQ4j;Ym(t8?A;yg40){_qYpOh#%+Q3RL{t|QB6%^`kDRLC z74yPRgIP%2jV81s`9VIIn7b=3i$ls@ir;j!avdRfVJi}kz+Qk&TWDYl{^;J^q0mq5 zo5`Mwf89)eJ&0f0qW*9YzG_b0&w=04J@el>GEW7;_#{`om9Q_^W@! z_Km*^Af=iOufuV=1kaln4aX_8e>L!H-ecQs8M5u>S3XL{k#h}9ez)^0A7oYY1r*^# zwXnrKrGDIfoEq0I`7U<^&j7jT&%F5?ec$sPs` zhbm~{CT{Jdh%+xR9b85>{u1(-ihmJVgtKZ((2Zo{RrT9AJc^?}>qJ)4<<@-GWz=UK z-?mcgh|l%vh!6dX-($f8tAgaonIiNhqBSylP*hV1@+@>Ii--SU+0QbU_b55{gC{dXKe_cneS_H52Gh;@*+cMOF+Vu zMdVOuRn^U?*V_UBlq?P%qE0g7csfOb;t`eI8C_zyB%BhZQ-@|}w|!~$4= z+MZZiW-A*j0viD}Q9Oj(j<<)xQYF>~e{eaHjVE_)<8X6No1TrgxFXpY2(F~~_aQbi z{QD3i+cxMK`R(dH7>SfxL1g<|)3S-k(_>nguq)1_2=cX^!SA4Wt{ph0LWf0d;Jj_AK7|<;!jm;hfmhq>YSb1xKclEIo(F< zjsX{mHPJD9?9IQf1pL�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 z

    #=JUrH3y++q-fG9FKkBV1L>uz;TW~z=c&k_}zp5vT)8?bY9th2!uma{! zTw%^%25>bP>6)MK)kgWh&w1h10dh>3!s zp3L4(0Z7_b2FHIWKAepd%c!mN_wVC1|9S66U7699^P>Wuwg0yL==3Y1X_J=JxW81a zZYdu`bW832QjzE*zW9B!KtFdMjM$mTe~g>oX$05z-oAR!J^QSTRK^Pe+Cfc6 zJE)z>Xb07rjCN4)tuB>mGTK9RBx8UK>p=9g76xMAo~~rHk2;);p~3QqZYe8!N1*R* z-vgP7tZsEz0R8D)a-O0m{e1I5CW@CQ5UmQT1^cdpfT-mI$?OWNU=xHHR=4U8{DRJ@ z4=mYW#s@yJ2UBy_3N|x8=pWZF7ij$t`wi0Mk_$|~*g~SuYK^!&sqE$-JA0LB-sF-C zSj|FcvB@P*6L>->?pCUqLsR4m(u5wfkcq3Q3Y=Im?OonMwz|eZN_Vgo&Q(RX{-l-Y zkb9+vf9{_?MEJpBM7LBe-hjbQiLS^6^opr_4QPYt7Jv2E;N!AN5QOzIc!t!2ff-R3 z!b3$}Ag|+LXxJ20^;5KY6*io!R8V5ftK@&v+05JKu`^3bu97qG?;`$};NKPeFIy&x zZYfA~KEzFU789;*2=@n-e~5ErqNZ9b8LKcm|p|C&1BcZm1#D z__MVJ+Y0k&Jo87QKQB}oMwq{7ljf}95ewKpbf-1DXVEXp86T()iQ39OK-B8E|NJ`c zKfjL0F>B_rdRlp~h&&$O?v!B=-QtK3E&Ycs}==*>)p*8385G9)>B(n=qE6HN5$CcPoh(?|9g z-pqI?Gk{l`U4eQm_@}RD|LCAUL!Hs*zah{jsMETa)fo=F3Q@h4z`|bf>M+LHeh8fH zMfgsyW$$R)8>|I>S8zqyux9iRfWCZ)d$ATNl@}?MhLq~X2ud||uSuz{CHjY~82`D# z{HfNOl*$#NR0>e4$9Js}hN~=C`&Av^)(n&uEVGgY+E)UA(-~pXpX63b`-~y7AeOm`kQjW3DbVN0YhY@ z_Qx%r(jT`te$S9o)~A4B>M`<;qb`_8np~S0XDkq-j%4}-L74H~I&c)hSN+Xbf(WnJ zS8xEl>W8n2d?eG(ULIO!$6VPFP4fFc26D!?M7KQOQ7jUDD(?kRKgav$HjIM>eVo0C zb-jVkt?V?wkqY_0JBjx@D^W+wL?12F7C+mQN83a4x#h&4ibck~X8!P}Vv+V=)@jiA z23F{w?R;)6UztU=vm)QX<@RWqcsE%asJ*h&2)^8_e?tgzu2z(iTYa#61c8`Z)pedE zOaW;&RQ&!P!>2G7HP<;>F5l@^WjVO*v(Nr*|78=xt#CaG_pjA;o*a}X(us3>*(jn9 z-z$AQj5yoM1`|DTYmswkH@_0FT6>f28Vtz2_|KgN{o*~|wG`;u>(I5uy}|cH!7nsp z@jH)|xwRR);}t!AH+QVqO`J!{(lpoRc%qNpEPZ@sQMT$(UAyCn9>2NBr3&hd&GFrO zcZBvedv}DMexuW%S4Q`4HtSuWg3bSbg#RD^_Wu(8i=)OrC1U(pZ2WA@qczXw_#&V4 z43k2J?`Bh?CvJw>@CW-yulv#XE^64)8=+yxzrpqMMnam)(AM~5BSV>nuZ{nSJs z#AC*II5QK8y4lfQUMv>*=&)Bi4QXvs=e|<0Ch7aF zrD9c!XAJ#E0;{!khpBM<6$}C_jjZxrM9=(tIitmvZ^kqWbk~wjBj{dNG4A*r`nQ3s z-pf0<-quo$<+ft=dF2q`NY8w%yjY~mmq28rQY`WgYwFo0+$EXlNvF1!iu1(CY*`J& zd)g}L0}aEFHtZM5650Z@k1(*o&bB~sAN4)eX#}=J>&ke1BcVI~Dl-o;R>SA%FRe}b zdT*&1jB~WqBz^x+K){2(%FNC1UaESBo!FUv_D`yMO%Q~2Dc*J8(*_XU-u;(3(x*Kz zjIS<-k^aR~ECwGYdglF}Vv&Bl7)I*DBI_@27U-Lc0cp@w1vGU}sHp-h_ck_lhle9A zn>F?d*Y{Ooms_ zZN5y_L(edkfl3!LFF_%6q>E>;vqBK(AT9^q~?L9}cK;2j)C#r@zcoBpMoqYIbcDMyhnFy-v=OTd__;VkdPv%g1oyN2JmzxBq}FFV@TC!)+X zahrd)C{UiH76btAZS-Mx#Z!XOWLY>!)+SK8&uJEFr3vm(TO!Kz#2nmM$|YxKC%X;|9oq4C))5a_HW7JUepTQ{-L}V zzlAwKZ4m#BLXZ3hsv_sPG|S+YQgK3cohOYrN8}Y3i{&Xq8*+DXv8ZTqp)}IjMr%Y; z0_TW+tYDGPrCCO7h3e%_qI%>)o;*R3^Hi5Sn&_4@|AcM&;3drhJv!zfBLSoNohaCb zvf|p1uE)*-jxIR|@44}BuX$nyd62@yQmjB&|Ff;nk7DdE(=`aJhg_QFP!nRxp=epw z2>W`=(8r3!@?k_9lKL2F(na!^r6r-J-p*T%h0V+;0%QEM9{b7*$%4r%9XD!RKI7X2|2r+VXD7i#>{* z(q2aKQ1|<(=_TEBx4GnW?TXo3N=0Aw@p4B*3N%n!=$4`_ur5EpxLKfgI1U;i+dng{ z*^v7mfjJ80xpu%r^_GAB<;Q!bNW9kw@4tWI`ijD#ODW;;}vIP*%pX70ryip2GcG~5s!pu+p^^Xz2wXN24(_*lw;u6rEZ131vN}f8h|8N zA^)RSOU!%2nE7oL{Z09BD8AMj5ks8w_*ykQz83qg%-r_{uy`{tS>AoAD?oo$yO$m2 zo3@zz^Q#YY{`rN6fq!m)4)kVYQ&$M|IVig*RQ8F7xzgaVhl@q}0hF8}ll3cvuok5c zG3vlbH4%^0mOy}e%GO{kAs@yPVh4!7qmQ>MWoSD?iR$0}&G~y(k33o(D-+#?Q)(qm zF4<;=G__}01cB~K5QGWRZN~kIHul0Um`2OL9x4{Aa9b?iDu zE7kb!O|uq5O*8yF9i#PGq1K_%e7q=52OjPQ2!ojsk^d1)_7|LI7|5X#-SWq!z`(Yy zJs{9m?_m7vM~`(Hf%F(uRMGF3cjDw;jF)aJxPE#W*H16wdg*n*$Di5;lYFR;Ae?Ar z=l|@JT>$?xD7Ke)JNtnx*#{6Na(tKj#7+pY_I4j^2D7n48jLkO?ZPKq_lLPlggXr!qMxjsaL;sjB zLy_$D;a3Ol0;Sk7qMm^q%0xW_{Lvr9$QaHL9|sdpuzohVEMAF}}BUa}X7zA=h?|No)RG@?}@ z8uV3JhYd(Tdtxu->7D&eofHw=Kp%cNo0SSOyB-TRqOa%dldPDezk9|o0`6FdUG$rX zT_J=KTVR9{YyM`4%@f0jU3DgmSo1d^mdBT^?bj2vCmx7Gt%)CPA>e1sLd4oGj;4hi zO)X;v*Nn-R?^oOWhwSPWf50ZKZDA;8br$%b&cA_L>zQt-?GnR@L5M#5TobieFoasz zhWg4gh5+8JS#$`tKD2zYtsbTsVALmO!TBb>!dpa7-R9@XG1mu)n!Xj1^x!uQIcGE0CMhKznB5pC5!s`zG(nENQ{> z0vbhm_e+qMdTWIJ(+Oz~25j;mSC|*N`6xWm8b+1JBsLfKjY(`EYIeSyN}O$_QyAuE z$b}^BOOn>+R=Xle3K-lDzdC4ft6fDtQr%LX5E=4)$P4!si;&a45f1R}bTQARW=05a zr58O5#!N&#<)iI7;NSBy;Q#wo2L#%j-wXafpVkZhd$)gr+9z5a+k!)?`bcZXCKIFH z(U>KzJ?^L0G4US~=a;j-Inmm1cKPsw9`Zj|c>FqYg+SNs2q`>*5?4fo&#x$j#4V1N zU?MRh^5b)TT!J>ZrWV2xUKn9vvi7L|kaf)9RqWvLcP0@18oN69IilYs67Om2jD1DE z;A&H`F*lZC!$)6zkZU$BH+s)M*Dl12KY;m7Z8Q3vXbt=s?2-+fY-H}M`V{%-t2_>| z`AAE4v`T9y_tOTy=#tiE_stoz(9386`(uGWR{RqWe-Z^DTdng`JNsi31k5;Ln;@;N zgZG2kqvmXXz&b%%+mbV8p(fbb`sJ^Ovwk;r5wG7$yiHwdEAbju>A7;lFiwDc5+H_Q z^d^)6e^S)DTqcba0_|u1J^P^^vY9qyMIqY>XG|V_JAEz+SFu+3_YcJEO>oiw1%7&W z_|k8}fAs$XUz$5dh@pR;J$!}Wqpxm{sekUz_0Pd{Z|1x@lOdjTcd-~uCVJ+CyNgBc zzf={ay+kGN%n!l}-W2b;?}OjA1%jRQ{rfwOz{64N90%hu2je|yopCSYg1nvmJmZNs zC=&0neni^PDU_XaRLVHqml!Q^N4$-3>|tD4lKCv2cpKxP zMcYw=&l;`78?Xis5oyEzxU&AdWMe%0FP0^k%|TQ9g)$33WQTpP^arwpD{`WiFWZ>7 zV+T_jMayS0|5Ul~s9VZ7BEV;V_#6nISyuRRNWSG$@8_Sp)bJK?iKIOdXy|A&1P+1Te} zDeQB4I(tcz+2>*S>`E?jNmsk-l8dAt|5+scxT8q=abHok^kWD6*up-(U>|$f$2Y{= zloi!C{Sm`3Sl{}D`et^AnoVx*<@uIgo_|KXCvBypS%1%sStMKfaWnA-Y{c7WV`XQ4 zQ6zcVSpmOTB$e&5G87g`#cju=XDszkvyPQ*PbrehcE=YBvan}5bZ_4X_G3E2u(8Q>@4~lSgeNcp}P<|lGG$ndjTi+mB*H3R2y!yYYfnxbWu5OtvpIU>|5 zd66gxjaBlxK7t^6Gk4T7g5_jPYpRIZIrIuE(bqu3QSl=p+CNsqt#@QlXe_|Gx@Bll ztw7g|*$Y|nI{KJ73w6sf_d5b@e;ciyMuRyK3@E$6n|X6Br z-??GqC@|dwBQ_fvKh>DOp?9j8y3m}b1t`(NH zLYgrPlYuv(b(uN*ojr&DTD3X+W|{*tnJ9--b(&Q?a#%kbQF#krAKuLA>-qZPHMNDj zf1&a26ne&A*Ua^m5s`*dw_N@6T8J43E$G-Ho#5CDJFq0wHY8$F=Tydl|Ia$p@2e(` z8*Z~7bkZ{n1Qa3~ykim;Y`@u?*skoZdGyg?clK00UKF-4s#)ZV`|bOsJt#kwu+dIq zqn!o|%+cc57EEAlg`(EE)Xj{!fM9N20;KuPL5C=f6c8=1Fl;f;WSH*p0UzPk(iPb? zRklhY0aE>*uI2*Ne9vZYu2kjOJwG2zg^w5Os^=xWfqE z&S>gXOpKF9ZNdQqvaD(h0p3j|kXei|cX$ni&xn@v)|6tAXqhXf6pQ8+5x#S&@#~1u zsHmS4=iZr9T+-UA%OM??exs;3Tgvt^E|7q`y-Rh0Zd_5f65VpktmOg(%{)oeFX>zU z{e}XXx_pd)4EH4kVA1j_MQqU(J-6uT*(Q}QC?FasB)X;IrHyv5VZ3Cl^YmSZ1s#J zn&o$Qu=yBahcDja*_+rvd=1jt)n3T>>yfY0HdLXM^^C)(XclYrqoPRyA-vOi;l%S# z3}EvmeooX+cuLJGqy}qOt2}e?;fPp6U=@Rie*9Y_G(t6}0#f<-vW_>#OI5q!%($a~ zXcHMi9z3>EpmA^PG0eC)8{;A|P_q{>;F(IaAywtzU{YRQES6sxipQQ6axkH_mxugI zmX(8l$?|g3zXa@j&9c#mX&~B&teaVR?68(o(X%t4fA5SQ)yMPA?U+Y&%m3D3V9p_* z?uXo4l|p#VA_hGD=t_YmFUJ9!$*1zTFY)3%;o-jIf#J^en8PiMa<^=wpE*Lq{lEjm zUF|W4TgaU(dl~NJn|cg4vMaRhK-5STu2N$QV3p}w#Qv;{NUI8yoOQg>>baDtt@OQ9 zhC!-Zr0QRI#N7_A{H76jG3(f{&QoTc)x6HK$aK=(>cmM^Z^Pq>g@9h&GVI7ofv$bM zm$l@h|ucZ}5&ef1R zxVk|Qgr*$iX0$t|5v{ZYJED5z3Zh%~Pg%+2*Vp&(wAR`JzHDwUAex&ko9hm*6zJ~P z@N%q#Xl}d1a2$85hlyHGAm=N{-EMWWqPAok+k)3cthuj zO!H=zeZaYpJ4ztxdOm`zO1_?27LjGyVE@?_3||4(qzmaz4;cN zq%H8!sVMv4P=4SQeSR}PFwuO-JFKdS3s>8?kFrvFPF( z4%c>*ORb~#?hB^^R@qyZJWb4*p>$(^lID~Yi;B}yR#GgM4^`AU+Hwg*OdQ3dZJ5b~ zv7_32lWU4jh-;P#EsxIcSK|HI(mmmf#CR@kv_?|nQ#-S85a6qeMriv@_(bHw2m?hC;^7+hs!kUkj z)mE{?&6!tGZgG~(@Ju9H(g~n=BPjb)7a^#p-s3Y^!$A3hNujiK&-Vt2G-bgqu3YDX zv_Dl}0xM9-8Wh01@j_@ci8NK#@MqyMI9ljcWt|3n;RNO>$AQnr-hB5rGmZufJlq)< zbmn=O)9P*Ix!AGlx@QKX)Z0D5aWiAVmqn(n)@H~hMLt^lORPN2utFK_==o|ye=yHT zN_Y%22KGP))fye1}p5+2JsDg_z%QXd? zgj%#>Qsi_DQ?8z&AKw-nZS@+pC6y(a%-k}=JeC_o9f^kDIV2%6{LEb=O)6rKgeCv zqm=py@`7qB{o*dn@4b^RLCSBI?QC6kaA(HD+%6ymCDSuRpCP9beO5;V|NQ!NIfX>K)s7rD`sUA&^L)m(9#wQpzdPR*=z-cOqrgw|Ba8yS8HPrIXEE}+Ah(yP zI21J%h@WwB-Qzokn04f_(XIkA?yJlreuh+TyHx~IIztda+u9V^jWzX(nm1bIq zQ6C(`WUBGub1%8`05EEWj9DF@t=18Bcj#VPLkJV9>pcClXLlKbAUyLj(JjABc~_uc zZa`FAh^V+jk3dEHc?ToHOJ!9Z_gqAD%Y`$TXb<^$KS04A4prP9DBDkmDP?oX?`Mv& zeX6t~I~*~SW@Na9(9^~_DsrsmoKCkBeF=L8A?{&O7(2SxcGbjZfHBop;yfljyNokh zgkkM+6Kj1HeUccwit|U{#t6A`cJ4o5>L&OQn4q7n)-m?hOzl%h^e05(JW{q0GzSWb zf(%1LpN`ZW{OJQQy%WQ2O+`yf)Eq#lxIiw?cTmYks+c2H8x#h%nLx4)V}~#BIk$O; z+>>uj>`8)Oj2#C6*Wc%TV&2aa4YD37S`8qKv8pfjFDmo1Esi_!XOQ_|MuNi-L9nV@{nyzR$sXn)~q2s!;A?~&gx1Wx5 zudkf-!Iw#bAl#sjwYt{{{U572Vi<-ZHma+2aG^D;Pb1zl{mc6|&SArd3nmfo8L_+{ z{*9N`mgZ&EtbV~4gg}ELn)aS+yFbyT@BIIJ%Era9Xxi`&VDa!yNeg7dgZ%`Nm4bMV}`@=f$+RhKN|t2G_{F4O6P zhdK>Ko3qH&pXOHAN!80hvTY?AAw(<4BGoOP>*>9xyEnV<&#YM~vRR+m?$~g<(B!yK zlMu43y2X=CZ9Q7l|7_}60Ry}(IxWcu0du$=w}Z?=#NE0q)iCpSa&IE!+-oF>g{$# zZHcrqiE$`Bdwnm5($A;Q!XHR;xAn|#i==^Qi$bJf8HgZo$stvn$9Xy<4CNOA%cy=% zb-o1B3C=Ika4l8Wl`FVhDyl@r;T{Bx0&6=PF?!E(Qxq{Vx*jmPp@@xXwuw>m{>}Vl zDu7MyrL`L?L!X*pDqU?xZ~i}bi9Pt2p5q@aMvOn1o2X?pR~%c3x1q3=HsMn!d9`3#tJ?RmCt)#n*u(w?t^-#WmY zTtM{2NUyTP9MyU&vQy}X&zJMT*Q1v609Z8`AMk#-5<#gkiu3CEt9x9d*6yw=Ka4l$ zqKb1#i2wIv*;m|i^SgqNj$4hq$+^gzc#qcuZ=xsV3_K_hHAx#^EP69#v;P+Fcy6Ek z)OfH@9(NzuUk$$bU4j1i0k$<5+nT(^Z0mS3v~?r2wevNztv`Sg;%#FL@Uiu_!Wg)FSvSrW2oqh5QjbW5T?2iz$ms?>7^DY%)>(K-LtsnZEKlr)wud{t8-Y7SS!2E-VE~ z$QoV$i@AinUHzo$X@kpeXBNumM$-(Qt3oY&qFS5mr z%T#R)-fosB5#{Yfx4ghwrXc|(k~BpYjoe{(L(}|*zERQR&jm-Nz-Q(u@!wemM6;9^ z!b+ZA_+MSgidv8P+MV^1-t;RItn(R*U&WUQKhkXGkw(-V^wodzx&JUOdhRcOp)`C7 zV(IQP*nMdb-SW%x48>r37Gs{R>$^fFw>@7f7WvGX);w~$dW7hueTes)Umzx2uAZ3g z*2kt3eR`szXZLY?JAS!Qj~8?GtVH5H74JzhyBFwV7)G}0cY9Cv@eDMdVtynF+CO|! z`E=qRrRp7L45RYtq)G5zs&0b618$M3{|>(-L8|`njA3y55$?bA+$a$@&@>aBfI%Of z@)_XIGv&WcMw+8C5KWb*!KBdIS$hnk5Ak%p4h&2)UsycwR?#fKP#Y(p~Kl3AHTqV*-( zT~?yGt$0yL|QE8;v++7APKj}6^%l@Q%xV~w+&PrrH9RKmjRdT@XS z8;1}IfSprWbN>DDM4g&oCHn9LZ{}_vUZtw>3E*Gx7tp`%qsQ_)jliNahT#KsyWh+o zIOS(r_p^t zpn-qwH+oDih|lkjHO1!%rnVR5=T-4N?-!@a1&(bFBY3W&#cwA@J@GeLZ`2bjZ`9+P z6|spp+h%aiF7j-S(&)KJ@oD_^Mn3Gxwx{8eFP!p);fO0DX)ruK(^37-o0eQ(v-0Df* zyPNDpo0y_#cchZ)7HRHlaTskcUD59`6!qQ|x3NW0??`o@Xm|ThU+4CAX5@<7y_s## zLj01xih74Vc#fieuBdxyZa#x?9?>o1i&tR&RyuS)AjF&bI;&AW2x8t7^<3zNqF$dG z{5|SDTUiJ7CsH9D`U!aLqr+H>Y9j_t)+>N5D0DmXGGD$m zWVqAXa#fP$KC#QKZYTZ&ecb+&*SXJcyFnkE;LV%~O`qdd^U{L}Jih_&T!Eu5*iTUt zn}|{8b~Ze7F43N`5p9xP(Gu&4v$?c0zyv(EH$x~-r4!!SV|X(!)zOv$gEGejlYl-@ zGMRPrlv{0e!?IoUs5w>d9oS=33Es?~7x0RpfV2i}Y&U8yIh`g>Mq6m)+@G=vo=b>! zhpnoQH?xjcQg5&lb)qfkB>K}<+RiHIPub|U$(=^I6hJT*x-0lekUi!rd=Wv8$ zX*s_kPa)dn-b_1mz(UmYpp~dibn)a)zG7hE&VPhs1Mxp)FJHa;HI5UHoI=!daq*f4ao@{UJEZ|17`9M4w7bK8xeY22K-0#2b6q9^Sd zSubo%WOU!d>kc`6JFDw4>)NpHM_BjSh`J9~`!VGU%`oe}4|OxT)qN7{-V{-H!5e;I zV_!HwPyfs--vO0RtD(yMiQ43&*v$XWO~oR8I~b+Mz2lNjBe?GD_W7>~ z-S1CB8rw%O+!5ZFHoD}Cz``We^pBxae#Q8|hnw)egcT8qHsaOE5W#HexD`SuT}mF! z{f_NMbdZO}=rGVDfVqx&^+PY}*U|l11S74Ej$)**KC6Nn;-7~2-)YGIrgHu_h4a7c zJ3>Wm7eRXXqY!d{F=Zph^wEcYff3L7u?bi_v$RMw%U|<~MN(bIIA&WU$9$!A6>`i} zc|OE0kEmd!byGJT#VXrw4ztSm+H%v?D+K!J`aOoDF6?OF3l3*|F)KpbYLPD{5m{m2 zlG}?Q1kdA46t5EmAy*TKULr#Lvm<4r6bOZ^ZU^m?pXipk{ZgPuBrEC&YcT43W^$EA9&O-4EhJ9(+J!L5f8wOAfNGG;5wf8_#Pu9W`<=qeaNv0 z%Og}Bs0+DB1;EyXtnLbkioxBv8y4rWS3mH&K>zkYzzEf@t;-)UELTv`)hpc>3SSU+_TpyUB?*qTK}X zZ-}$GEQ@Gk>p@(2vtS?EfO@M@FMdmVj#5&@RpIsH^3t*6lWFVFS^# zZB^~%L%HRYOSaRmJF$ayICjBs0G~i$zc7{PBi`d7H&VHGql*WsV-Q55O->=z+self zE!)m_p%9F7)Im5{>;&Fff-bgkb-OzGv@ZuI-C z^8J#pJ0s=$b1wQ1<@=ER_J?u5ZNJU!vLlFHWk^-xt*{DGl?zO{DpI-slvLd(E>dk{ z?!4&sh;A8k+j5~cg-bU@3-+6V;4$R_lh4$K^(o=3dGE+x<;REb1OIvQx=#-h4q?w;iW6<^w8Ua?z2mJ77W*1=B5LTs<4;($Qc z*g6a!on-9mX)GPf(Bm(1FNPk8zxIspdG`Hv^?|7U_09$V(f;E6x6nQR9J(c|id+#v z>GB#~@<>cK@+n_!rEIk|5 z!sEl3cGB?6gWyDNY6>hCtQB=Iu9d7%{AlbJ3OSc!oH@*#R^+3#zwV1n2^T#XMLs(0 zf}XZ`{}FxL&=H0IQNRC>^_PVq{_QGsQAy$ao1OD-@U1RIw{UfVoFQ@pyds}e^&{MC zU8N(B#2V=N+;0l4}zi%>z1!kD5U?v0@ zMDy8`Y}z@dW^YO{6{^5EF8Uxsp;{245}-RXc}J;gDUVu){G&Bj%d_TcSvJN;GA0rd zHV{S4$Ak?fk?iE}I$js(<@3VqBvCX)E>Vzr)$^NZ6RZbSb_GNqo~5YyyRC}q+HE8H zHM_l;!)E}MQ`E%WfolxI@X_|{P9xyptY)Ff>G?hd8AKU^nQG51_9Q zu7Rr|wyw66FET}*rs$UMd|wN0)z2!Y!~IijJhGnAGiy1h0PW2zJ0Q@Eb2@s9@G8)8 zBYTVQ3Qi;4td^ih6K#wueSqkLvxqihhm~l9cQC$`5Iu1U(WY*-5-oA78T-)LHFG3! z?wolZ<6;#p-tTrE_Iwkalfb!;Gq0hXd9=^?PR1Y5(>a}n?=128aacPW{;l}^NO_&7 zr;jB1;8{c)+e);ltyZEbtu~?_j_g4fQFnoSe|GrM(KurBXWajJdE8n3pVx7|s*Y!< zGCe@d6g17;EwqEXYV5@GxBY(Hsui{8aABmG-$&sU;1vm#ejyuj?$aBu#f4N+B@%r$ zTeT2}8JH(J@J+nXsHhcVH{_ocYN+qE-OKJY^J!t(Bd1td)+4$*QxNDC+YfMtP*>za zmz3-zx~1dh)dC%-p=&8@o9dQlt_okSOqC0y+v<)I>Eec?k}YZZ*aN~*=`R0KDH()Z z+;@(4u*N62uOEFVoJlFt2hy~RaO*z2qe2)*B^z*yTiEW+0+%jEf3mm}8NB=WWvUvs5=#Pvouo3MysmAqeL3r z%MaNa%JR^+4OX74jF)vVg+R(HD97Jm3ll}j8gKHB~$&Ob0CS^R#9mz?0(hJ|%- zAUsJYxy%GdhM!TE6+H3xb6=e?jKF$sil4$oES@SX15m=ryCUaN>#z{N0&%b*^c*Y4 zkQgHGm>()|`j_9ZAAD0zJ!78lzgS_56vW{c$&14+0^jNaxg-v^KusKO5nmi`k%~Cn zI@7qQQW(cWH=^0wx~dNZy1j-Ibqo-Y)X*Q>H0==KqIc_ydyJ4vmcBsF6X5`G5`Cdu zh`+C9ze_^DKanfN9x)2ivdu$!A--0zI=ytuenYL2r}FzqbS0gf0wx7JCUH}tEL3=COL|lMM-EP`_(G~2W3S2vamIGb9=ZpAG(oGM3 zv%#&V76qX+b2+~PE+Y34-7!yn!z)?vxe6JeZ)nrTfWF) zOz~2fQ4&$Uf^OJ{hb|uGHl8#K?_vvm#Cf7L!E7#gG0`paCoC6Clot8ulxMp6!(c4x z0^;8vkG)e}R;!{XTD_Tfm4R~D?60CGS_4C2)16cpue6;t!rsv8j8227pS#sIqV5j- zj5^j;W$z30oVjK!XO&oa7#)!RpzWcog>~jg)^Kav5_?bvaS-3pi&*P=i5+g~aJAF2 z3^QXv|7X4ysC;(-$Z|;>&*97X3m@ZO+W#)lxz&3>X$BijTL2pmGAu@1c1 zq>)0v;7 zf^c)wuIv^`CGs~P$}_g`Fo4!vZ33Wa_lD0q@Ve;j+RC@tv^-US`zrM?ZguDw)godP6$wb6G!`cZZ zm~R{{Yy`_fre1uG!pE{3T>0quYa*;rje3P~TW;re>A4|{75MR2BV_AD*9FcPXI%`j zr@Ss=%1g`*=8}@HRdl>HnII)+m}`LO7Dwg^fsWn=7esW^ZD7_m;>zWKtL}Tejx&fQ zbXWlt{OLL@*lnZ#uPwaMiJtW4GyLAL$9|_{t`9OA`|dT-OQ6nl^`|eioo(T%`-r-A z0+YZwFc5tI$97PlPD>P~;ed*W|GPta?tO-Gy{98&x9px^NJ8f)|5l1mNQ4`B<2Yly zBI2hv3cbfq*CtwtRtm5(h?Zjm4TR>l`;0a)jbZ$!KC9!b{O{BZlk2g3Q@avXP(E7w z+8!f#nS#!U32yCjqCI8J)pD#5Ccd^091|_{r>j|STyhpoSdI$LEFQmWTX}u=FwpcH zDKh_`G&f)DML!o6DdZ+An7jK(Q;rqsVvZd$Fy^GN#o>@hE6*L@m!Fzbxbzsv6`$0iRh}uer+yckVrCAuzfS~e3xBM?_M4KvS!A&>OJu=CL zls$OF?6})6(Dmbk+&@as7J0Pz`dKf9^f1-iJY$fX(?`speqlX`RTmU~AG(U7=k7Fk zfCMN=`@%~|v%n^n;oL^F96NC~KXD;Z>q%M{NoyniuItG8^+X?juA`2Yez-qE5lF|6 z?Jdm2Lj!uz7?i|t(kEJ$wc$7O_blz{AB8FFe8hRItep5e;}tD_kfJGrtVF+N5OE$U z%Ll_YEk1#0o&+mVJ?B}8J~qLd+4T_E_YgJyydq!FLWf@3X(+0aVD)D1fmeMMH9jGj zK-3dOKKk@!(b@VTzunx+L;3BVzPu+MXy2YFIBR_7AA9EK2#-(lg7XWG@jRlUT$Wp)mAeu^QOL-&q;1FP=@ju?Lo*vz4kftmQxzUuBipJI@>E6te2YCpn z5<3KFsR89F?hU2ok9i(?^npti zXL5P+>?f@c7C%r?ZY`SqWa2{}j{;#8@0?Jz&C?HqpcCRfWt|!CXb+BJ>q8$gyq#C9utED@QI@x$6wVhRb4F#Ld{h9ZZ@J09uY9c`Lo|) zjtaHuJU`uyK$#a_je>y5JW+1GTLSS5=)bVkdsktp!;vuwP4|gWD3{VSEStky6!^Nb za@J%O=Qz21$l>SnmTkPWJ%W*;UrvHD>6c)c6fxqGLgOn|!xg-75T8;u5ajpqD6tmT z3-qzfpaGba)=ri0MohZ;Zx22Mnvcqe(a`%4<_u>nv*vCvO^&G&V1|#cpFMtop1Ov^ zgqg3Zld3QN)iA2sJE#bkF{7r(F=FITsET1f;{m2BMyBDA&^s<$AiIT>mzd>*I!Uz1>i*j~mMMb>@3J zFK-7WLwUSoTks;b%h{x_-xkNSC=ne4IMd=+_8Cl=TEul~8FntInv=2hQC5IlZibIM z^TNmAIlSXfc*#~^H}6|`4Ih2=(S2;Ow&3-svsIdRMKa1|tk=HW>UOE>Q!#WBH-LK{ zwuJYq3fC(xv-8WMRd%>6%1P#zLv|#v09#!sudw3+E&z$y9tsfoiM-Apx-5c9x@GUW z*9E#OD_}qXL_m{%MgP`LfjEz1P-uoiGbr=`GP}Yq*aSh+`DN2xS1cFIFwnH^VMIb6 zwte9CHIQGX41C7z800xCg?)Q7*A()6@(ZxIN^HSoqF30=C$!w-SQ@p&igboQD_G5PfVr@qc4M{a&AV2V>4E6wT$ZDPk4(%XB%c><q%5{0grOm>zzj}a+5P;xnDYlU1W5bxi}(S>ccpbG9(h^x zK`cq-y&I@Ef0gI=gR3vR3K6?6(c>etX zi)Ha*1jb|eRY3V15TPf1zG#!MF_oV-tlyy%j=p#$NMLsn-O?Og>7LiRpD7Ps83frV zoh`ZD)Akur;yF|UZh4k)P@qeGHq2<^IU*{|o%PbQ_wqeoNc6-y;@@vUcF5ew+SCLa z88tP*PPDNJWE4sujJN+pu0uj_ouXICt#(v%u-_dKzYp`@MBPbuT@M&KdLd${juXXZ zJ7Sv9by%Q{7ii@LcG^P@n@f48T!UG7FWtdQ)1IZ{2Nn6~6fExH#Sio1T}UME zG&)15-k8iMhV?KT64N3Zu>G2PfgT$hG}$_iB0WBVwFHxJ%Y*x1-xE8J=$k|*xHi#6qgj3QC_>SZGMJ9m$XKXs^e@b}&E3p6n8{IfL<`*_5 z@nMwMBe)qlCN`8DD|I4-ZI{J_FfJOxioAMZKrL^OnN9kC%~(C>2q z!ra&pemoro;jQFeu~gj)get+rJ&woH58`EMg zoz!R`zrVY;r33n>OJc)WWcnvv3!w62gZlf4C{T00>y_%=+zT9VslF9~{FoXONI^7^ zS5tZ=8b6GV4Fs-{j${Im`LTf$G3kI3OkvwHF|(7?1@Bxs za7#C0N zmDcL9U>ucfbDC{}P(-9>>gap~_2-;ru|O?|2IZSqA2tAp2KD<`pro}gwAlnf(T6l# zx=c`b`-(o~r;i>K-TL5d3?v72el)1f{d-*kAE&|HS0{^S9_;Hm)luayR|>$h9i%OL~V7n1QUq% zLIINk4L_;gR(^z3x6G1Ab)6@{QOAaQk3Hn+j4k)--!+bSzsn%tN~u4BR{U9LeV}K) ze9$j^ng}tsEO&q0B+!I7RMVvs@1_i24?UfBtOo{zOMb(@Yy|OsXC>-rndqZss=m=- zko)S0Hd-d$P1XjQaqNH*+;NurlY8rbk&k#!#?6rEEkZ=68;G9y+B<&X)BZTDthG%7 z9V14S=r*d4j`kc?Rrvm_LFgIZ7YsM2%6aPr!N!(y>F+U0;Gx_08}KYRoV4v{&8HIG zlF#3Mb{mFsP7OJmr4w}vY7cGG_8I8r?QEVgI2`{+5aMU7A!>8*oF^O*Yy&bHJe=uomQg9pGPmfWna`~^-dpc9~8Z?{`6yH&wRnx z&T5|CgT9g!qUG5c)B!|`-yKahiwE_vh3E0Nd#q1beG#rv1$?Vbl`G6>pEKkPA2@>& zeaK6ribXtf4!fie;-rQ3RolwXCAwwCsA7?R`F1Dw^kehNtuFK-9sH(}{mvg%EOKw_ zeDqQ-K-WBPCK**M3guT3-SS-8GQrVKt-HT6yqRroh=0Ke_oz1#d56 z3l2gpx*}Kb`^f=dcj>63$8XfD!zMqCX<1{5$@4XZJ6=V`Y?o*_Pme|J=XtoEY{)F3et4LZ2MN zouMFIVP7yw-W~EVCF_L!KU?S*Umh^%b8j3lTs4Y(o$1u%W(Bvq)h+)Idv6{dMX|*V z_aqrIEU^bdGzv)6QG%jo6g4A85)4=a9gGq+2x{D7P=o+85*0CFGMKh$?d!!W3RlB* z0e4((L{OO_NC+qYkp-WKq1|^FHtM@&}o%t4^J&I(5#e zbACq<>z(2sg7}kD{9O?D<%l&oBF+&{D0tXaH1)L?m51J1cYH8`$;Nd6vcy*jw&CTq zuDQtTa}R=cu{RyO>{C*wnvgu;nx|_x+-KVkVp#0dM`MEI&1+9qbNDN1 zmrB=PW15z_`C;;64)@yflTn-~xL+`A^1p6vn}5mA-9gW1gN|U>`l)NPZD(-`AeOv0 zXsSue{XUzY?^hUP$qR#~n((1FcGC@zjO2vZ*r7&V&m2THHxv{BSuD^tO{E$451MM? zTFYYA^+VP4(|>_h>z6wzQS$wz4_6`-*I+T7wG$R zte^YROzGn(eZF^UIDA8g^j+9h`XGNr&riLf8@(52@kzNXJ}H+4bQG{qq#~AWQOv3n zSD0u%OIXP?L&|-L7SEI;Sp{)5o4+iz!FbpG{J9@d{Z|N2D1~4ts;}iDahtliywO#| zN~mUXpr3inZSJ=f9pB|rcE5c{ONOMVfk~^)^gjC#>qlY1-_4xiew#BH?zd?WFWhe* zqHdJgFTKj)6XyjWu(sGlBaoiWi!lVu%2%EJq2a!pBE^S_ASZ{4AkU?3K6Ga2&bv^- zjbnC!o6)KVV1EJuHWcUY6D>#^UT12rwE$u*pqmvyPSaj9fB-VWOp^iqQT&`nWwWF) z1!~zz(uZL&1z2cTWXw^Z^f!$iDGXRg0m4H((q4^Jq?81<(7Fux1 z{PynMdiD)enu9C5h{&C}Wq#(r8g_P2#s6B^r0ShvbTPDlPxq+pk2bd7yPfv8T(X+A z-(PI=w3!ac1RPDaNk+4$l>Ro{h8CRvuR#~mSwY(WBX!KozDon;r@$3egO~zJ+sbhE`E)jR9KR!P`O2nOP?r9kDs(3bKbzFGr&7?v< zhZmnoS5ApOZ*p7@1o;M(9U!0jA$qf{WptF-YXff?p>n-Gml^-QyfqXpoqF}*HdDrK z_nH5Ut~T(W4I4z`7y3k9hZ#E!qls&0GaRz}IlL)JyC0|ivt?{smr(y%?J4R%o7b&V z2zv|I`Vg9)QAQw>QoKlTn{;5d~ zZtYP2xjzCw%Cj6wPP<1SsbZ<2%8RrdR$bW%a)`~gQInh%f)VTRviVwZn;N*W;lfMO z0LW1j z#1W(lCPFOTmvVx*ft@dqE@CZjjHH+8?5?2E!_!O@Vpm*Os06c- zZ2q+8Vh%r_y-N*2@I12a;RQkQDaSsU}0hMKQD~egr*2h`u(QSv@UC z9@^8Bai4<))P2IzGl%vJo((0{AO#bo`=Qn*RS?%g2IxoNTpFcFp(z$!0!bF^3X7&kk!)@ti|o>9#NT*LC&b_0LW$39L%b3g*Ae3i71H~yNH*t@-ap8S z(tGXIo%Fu#WJK?bZ}K#gQ(Oit>)TUtN(rbTbmy z1xJzfXCd>S8D*cwT^+Vh&tUtsP{I99cD7UN!guOtSLr)-U6h>)DFCBd+V0fpadf9X zv^adH7Ag8xU2bJt(`m{P>6D3nZEFVN1#umLk*dawd;L#D}(=Q!cFx!=V&xC3xO68m_#6DkYU%N9hpsF2k{< z)4Pl_o7+<&ssFE*i&}qE(7{s}j71UAT}uQCSCVZ*?3_okqM_iW3DSb4aGU`INu5*t z0qR#c#cu^MAczzJ9lvomRq4`LIy_u{&muC!Wh=oC=5d@cebTH$KBm!P7?NO1#rG6z z0k)qWqjx~19qJRCR{u3u zhu~n04CzZqkQ64FwyH}wLEMCwEzo7~PR_ugkPOa@t}1~59*Jc0voVV~JZadjP;pmH z0DIEH1aJZqzzSaYn^FE|wvoRu2wnJIm!=C}C5rHceNp>+TjBeA>k<&YKQCm-!wmld zXq4wxGV8a9E*G&L+a?$ppf&S8X+}?qqqtxAu@`l=HT`+E5&iOZ(_#)^acvZ~371FL zFCRGCG1qj6NsV!_m+OqHjKVmG@=|_l%ec=^QO14pvXOCwQ!$KFC&$xmQUtl$;8DQ) zw9i=eU%`fOpGP=DA>}S?B8E@f&^0@D(;pqw|D6E!f7g_f{Zm5r4>yO9GXrAe|I&%mr^j=Frli3^{=V`H_Rq$4Qgv;7gF_U}<%ZJl-UT3+RD$ z)U&blhKiv*oc>_EApQtoN}>9EsH~ML;1pgDP7y%@aVSU&mVthMk15Bod&b*j|Ctt( zoh*p8g7}jl?kiMq<2Abs@HOmA`F#j0pgTvabX!dE?u&6x2t1gl<1FXv&{w&vuEaK{ zxY`I#R}dJYs%nR{%|x>K2p3Kp&Wc9ag!U<$cIZ!2W?(d7aj<_F=Qnt2OK+&?#W=r> zhDem1p!}ZS9>1OBkaZlL@d=X6=NiX^i?5C{pl2>=J0KqZF#p}JO{!j~Cck4oU*8^| zHJa{1viTXcGDMSt8?TBs{}+ep6pX>v5Gk{4xr_j@juAG|R^S9Nvy8H{7p)I-@{j1S z6gcMF=o>dM$+%Mm`F>j+yBz5a{()u8Kd_Yf2bLN=YU1ZQz8z+M0=RdmSj27*7BM)K z`8JMSnlu~z1)3s3fn)@!lIjw#)6>LT%a^|!OSk=2sE+vsZ1eOS@q|;Y5ya(SP>a82 zdA=#Vv0_Lsr~lV@f#FwW^Hr1xz-WQrodVETXW1#bq&|f%m(%I14BI9*nQ|N(W-LIm zdBZ6(eY*wm1Zc!2-5=C>JJ~avTR|EJd>Uj6Vnm z8e#A47sOwP{c}aM@ek^3{J|#X+wOeuuu-eqOk0vsSVR)64>8AakoQpMxjDBboO+nQ zh4v`)|M#L!=>O`#>C$hQB{Dzl?lJ{=RlfY`SdLSmaAENB95LurzY@fybcVm7Gd$4g z|2e+R(}EbFShCtQe-4B#rCeJc#x1@TAxXj&8|DHld% zQXlOVlmCGx4X>>OPSL@KIQD~6tZ6gju`uK9)6RQdq7(h#i3s|uE{{TgovkbMH{!pG zenO>wSogYI3HBF^JM|CGx20JX*Rh?tA5fzT6;!5%_9u$A+y%BjKSHv3N;6yGba{h* zd0CX9e}6$I>wE8hqJJ9(Jj+(x-e^(u{W%ca`0WrJzCT4eZOe`usK+tU2=Ct+;X_WF zaKogK>4>%=kMZSq!-h;IonIt~zeaAztcqU4$%c&Bhei56{BN6m$ZjWckSGl4d44Ah>9?cs*DV@yLBYW8Lb?fKVNHibMD%$8~Etf10H zcUIhXuI{X8j^eB!pW)rR+d3=wpQ*DV{+S5KR_3bL96dCQ0}5^;u^y*8jXcpBTYZrF zdX}@fg{TwRt8?gF2*_Qit?1TBrJ#CDPQE6L%#FL%wW^JRkb6T9)-f2N74&gr@=RMD{^Z!?!dUG`D2X;pN<$oXb zg19f@xCjm~$f+Fht1QpD(vcN$a9rew81TWJWzBT9-tWq3;rm6GzeyKH8SmxibV2?O z`%zbTln~D8pF1%w=;Xuz|5l$6wGY~&P+N9(+j|_Cm6v`Xv+^g%6YKO{B;Ra8^cI@1 zI?#H8I%ATNIFXi+NhNwRRD($egg`+QXcdm!?23uDd<9SVqDiZyHIY`BNrh^yb045sPolr_g$M#$pcNcL_~d ztz^Q0#>85XY<}yv4>_ED3BV3nOcXZHY62c+Bs0W4=7QHtm(urmEMa9EusxLK$%sv6 zV0%ad+dH59R`c`98t!`-f=)Po&|-3uOOJ4P-6OkH{fRJaJ-n|;$JSfQf`XdEQFy-6 zexe^OH1-dG^c?6*4M-0;?Czl&klrN}NY8x%3+=T-U=gD6X}J)e7J4vLEWtHcLEZ+p z8F_1i=OPci%I4_%Gsyd`@V*D~)_xXC7Nv!}BCM{+w%uJJ*zQu?iGbGvX^!gwo{GvM z+tkH$e=QvRgX+n6{Y=8%L4e)<35$J<#2?zQmySF*C=|O4!M?1?X`@zfc;2%=sG+lh z9y@%M%XT-AMZp8l6j%uaa%^p&C6@)!uN`V+V1%P*xKo{UgBunV?mOT*xw4~?&E7n@nJ4!`j*Krr4NeVO?8 zL|-Nyw=Zc=fdpp=^hFGSp57Y;2P4@$c;pIQbSb!TAj6-BD&Tw-A&N90$Z?|6zcX&M z+&{*Xv8OMYzl%XT_{k|A(q_@ve^1tb;7LFt)?#H{wi1TmZ2lm71*c6YUOn#zRqw7? zi_ru~tiZ5VRpqN@+3tc&nGFzA9ukMoPsa8>tcW+jyF%t=8Bq&^=g=%Lc{yf8(E4GGq~)qKA_QKAM|tfjqFpHD zG=?nF&&XT+-sUD1SHQ2Q_0jZG`g5`Yf=Sx1o3-=%iOqz2>u}J4knXbz@CJSQSSh?>d!r<*l+=7m8clvk7BLB(Z!gFW<;3is#_>}{-0PZ^-QoP~=b*+bA%}<6#|)PS+ZM`XLG)W@rY< zc~DjIT0ts6+O4R)*4`L+jtR#KLz;{r-C`A_5y^ryIt7W}+G_=IGoBnvd8~m`=7(3D z5;RYO-Xp;9pTOU3qf{z7690U?)Ur+*t3SvrQ0$fC_70*XGIBi)iF zNcrhG{0Ex^DkbO_PS4}1oXZ)i-B&|ZN03-@QjLjTA%npuFJd0*MJ$JeX_-tz3hZrF zRr|5Pk7WBw3bmXoISv0Cc^hW;0x4s!4Lnb+Ug{fKPP1c{?bN*~+RU!YqD-bUHiv2w zFH=M585$M4Vws-b@_=!A;m3H;Lp0}zqY4$Fsajw`e@@R=nHp0CaaWFbkW4iBCX2Vm z+4$ZRb2^K+X4|afU7hwWg}mFTy-OqS4jFu7nwO2J;dRWhu$5V{S~wYXPQMG!l~T>v zgv7o!L7Z%}WbyN>k?IHS8)Av*`S+8mMS|XMD-aw_{Buyvkqsg6u2vQU|Koj4Q+zt4 zDH`fqEbXYi1(73H3(~06@@`1F1p;%^orcO520eKG_nP)@K6gB;V}XAgrkAmR8Wufh z35&-g%2-^wl?eH4TPD8YdM%*J+u*KgQ^CUaUXu#(6~oj{@bB-pEv4hTjwY9GW#g-3 z5A{rKVND!+9u@*o0LKCbx>fQW^ z)>QdK_mnnATtR^P*dO%#LxNcAB-*~VCg@Xwo@hh&qrjwep@O`P{Ij3O8AGua=_L_; zS}_?&0(+Syjn)R1aM(7Hus7F=q_pxzzC6WbkY9S~cUI6Sy*s3VJvv_ZD}ZsuM1y8u z5&D8@tVp4GPh%w*SrG0$vyainqNzl>iz04)Fj;R*3%_IS3GyhD;Ha6ArWXd4&CigQ z#Z5>&EQo6r+^^3rRgiBmkw=%Z;@9H0nguL~y^gf0O7HOVa|Xv5(ohGlMT7lL@i036 zBl7QzMgG>|=)6PZYv7=1ZQyQ@UfH%1e914WN|^5T8(EZO`Ex8PK(g7t-N2%}-jOUS zh-A?xVPTazi&(^$Q?1Pr*BiAsiPpl*F>MoAdZAMuqdLhN+n6KP2c%P~nprW+b|cLm zpq9Os2)HpzY-YvdG`9g!c;Wmi_qoRE-OAHcjdQKTk!PPpU=AC>v{^q+}8GQBkI~x)3#P9Jb1n?u6NSVbhdxQeM>k7Ktkki ze%MBO+mN9wKs_2ZY)1{Pg9o&a(mh4mo|DZVZ4C`W5ZB@nytc6C>jdis^0W~RU8k>Z zM?F7hw8^-tH>1Jz+T1j;RlQmFr(`hB@*#0E5?2SzE#!Qv!<*v%+|1`9+5FTN!_4s!RDSM$sHnEl zDV`wbd45=YSLj^7q`ryOXU$C!r2J$-zE@Rp98LV(MNmSo@AJst6gOHPdJd8wU8ei) zLJb_KV~T-?7Ir4>^WKlyRP1EQ27RDJ~B1UbZW@>tDTMp_ruy!7Fbo`h>b|B$B!57P|JPpOUMGWuwod=tT+Y*HK;0Qwc}{%kf5V&e_i>6 zu#fOpo^BE(E0RjA^nQ581SFgDzK5t&LeQk1yFeOJEAJ+&Cu1&0j5jk9j>?T`EaMQhqWaU?kM-LbCa?v=wkE zxv$4At-h7ZhNARR4O=LJVU8pG)338=Z@{n1b&7Rp@X4FxxKgKoXB_gM9PT`?ZnWGt z7Rlz-m#^RiaU@ z$pl+2R@OABS$q{r3SPOcNfpGMf>@6a)ikMgAF-zP z)pWFa-JKn* zujG(C;J@$oRuG!gvwfa zZlU-7K&?F8gv7K^q(+HV)ANy7lI+QN;}5c~&mgNlAMDCZ3l#RSXrJJrtD96pg^#Hm zq-Q6M$~Gh@6S2)w<@Cy}o|CHEg2Y3CeKC6W^40pvp<)UaTG<-1?y3d(mdM2BL_M*Y zUiXFOSkdyEp92+0X`7@+niCvbAiVeTI-;7_3*u&6-fdTigW47ED=pI^E~LqT=v6Oy zh2LLAWuJxVF`!q7b&#&R-4NXoxCU|tJ0PbR$>z#$b#i_;MMFvI^7LvYlW2k=O zZQ#p)iU~m}DJvnUvVV?zuPH~1josndPe6!vmR7+>WHI;NPUh%f6{COJ@*%_{KykP$Cez50Op`HglRYERXQ&%$88hcoO`)|D zxkj}5i-b#QF&wutj>bbGw)_OKhT$)MMg8;5T6JgYi4Cjod>wNU`Pk%JOd-ic_>s#< z)=EdFGOc$R^M|I=ox{PO1zPZ49TZ6l#yMrTNpSr5 zk53Kl{W>Hb(Ti@1i&(Ano&p0^q-8TQeyKOe8O4GgN!;9d zB=Nb`l^j0NvePK3X(Vyt;b~DLiHH2x7)jh5J(4&gcf97%G%XyP8Y|)9*yJ;uSJgI* zxO5c_$1a)pLud=o5Mo#+S_b*@e&H-kj$q+}F#c$*pTBAeSE%5Y+x3X-gMXQioBfp> z{_tcJK5qCmIv@9Z+yy=^2E z9NWCJt$sG(=T7vqOFwK1RpDF48IKvkRuIb1Yh+>27UoDK@-tuq{jq%#c~2STbG%Nb zf+rl0LZ|y+Cv?e#54iMyfG&Md){5s21TRM_u{N{+e1XkSGsZB&>2* zDqPPpB%3evfjL6-yJJzt_d>9f@xAc@b-;uVZ5|73h)ll=n}y3la6-}PdlJcJ?<$SH z#^0mR_xpiP=rjLi`V1IEgv)`Q&4k?LR5yX}h#bfFye9>GyM3?E;;k_db3or;lOx|^ z)jq3ZzsZqrNzpz7On>>hYmod@8gGqjY=1(!bPfhflrR9svu%we%U^1(q5kZQInb@KVizD@B>a!^?X}; zL&bIdo&I0r^+^&{BH!_BIpwd^F1X z`7iEd{e1OqxK{}qK(m};oi<{D31NW+tAsYR&%mcZYip$738!7pt9fIsJMg-EmA%XN=mS=tGNN^(%fz%|3d4?-0r{+(1H{?IdiSSw7t0%-h zyArlNxUKfF{OrTg#=oz#@xRk{{M2zJ(25aS&|bLDgw0p~kbf;It-Pn4&exAC4D{l( zXrzwrjMO{cJ`GZl{J6Y+JEb#+WQ!@_KE#P2@PvBuHg&D<&74kn|G00HHu$zw!7CR5-`+8KaSGe(y{o zM*aB0U+GeylsrRz;>j4kM^hrnlc0-(QkK7zsF3wQi&NZ+#A@h3{1E!`@9Z{O9vbV( z;NbBz-kNR81v#E=DX?U^LvBHV`U)Lzg$ z)}#yLLJ=HDp3iVn=p9oq1sq50Ojg(dw17D^eAMa0Kl?4{JiPx=bR+Z*u1 z5Z0jA5tMGX2vWQt-DE}HhS}F`kH_6qhxr0Vy29(|~{esHIEz=gXM4*=NK%_oy+m z69p;LBCsoLdqZGX4EYo6lfyz}MpeWmB6YPOZa|JL{If%ulNc^Y7@l$c;Wt?YRD&elhu>4e8)7JiV+{| zrr^d(s(vjuBy4IS;Q~1a1m@`v-LEZW_iMR1L>&|hEO5CNxQCI12ub-sQla8>9OXUd zs9<9)TLxECg7_0Qx1s8Mpo+y9jp~G`0s~PfL{#9zR=P2b=(rk@QEypu_50Ni03|Jq zp+tTXrhY-}!w-y19knl#{QDXWXpE}xTwo_6_U-*yl>#Nf*bclQro=ExPJRZkXsr?E{lDT1R}u0c};g}zzHG| zSv1ALDb@;u{Zz5??~X;D4Kcy9J6uDVYzPqZ zCt76R22XA2h>Bi`MjXxve2?i5v$bg?mF%lU@6zk)-J%w(084Eyne~uuDBb%VM#G44fA9Od}l%j#_@sJR%7P*V4QO z&k1YR3Zh^Myikwi{A4WyB1hcd9DKs*KQTP#ylsMMBXS&dr9*kyqlC;kZ#Ai*)e0FB zkV3`MnRL1|JeFcBl1eOsWEm^>H5u|ZxA1cgk{5%wO8dJyP8gqAf#{x5-OG~6qkkRe7wa$nRWk0xXa zmEhA6O_ByPkZit>HMsJJum&3&n2#ks*d5{nTmBWYGMg?(rRw8~DX~W;?1jHeL%zGMhHTW2l{a)9 zZEs^FQ8D#~m2y!hB<278`th=k_2cheH}dqNHss$>XCVK<`TtY>I6szDf^UrcTltSJb@wOruOS)uI7GiT>na!ditO1$M?SSf3$vF{qO&weq8wP_VnX} z|J3#4d*U{kZ4+aQ%4Le5xN`IlnXg7&{kY%vk*g_vy>Wj{c=q(< zQ)l||uqmgd9~s1ol@1u^QG_;GCFt zX{%ghr0qyUByGHrwktcL4Ru0WrbgS16>CX*FXKy(2?N+D{%8uF_^aqV>hAK)XAu6iqchTu4a>ezs zajmSaizIsYSBA9`|IF#E6{uC&u1LWLCUqcC0$)df+)?}bIjCQBu!z{#1;oBCAnh0P z1G(~AR}ZkQ0}UpQqgHmZAZIaKbE{`VX+{4Y)Yhyv&hqq|=&5R@h9M0dTZ?4#=$8P0 z0{`b*Y8Vz%2CZIWV9>q_7PPsV=`XoKDN1t=B%50n(B{U4H#fuB+>33R(?(FyzlXiH zW8*nfQ-N-auypDDG}8}V3#hsK^~NwV4ptk;uvTcAiNSs@Z^wSVfHn9;c!LY8Bkbpu zPe(QyVLulj&zhp@j;1VMo3gwJ9<%)GYNG$XNZEYwn=o>E8ON9QbOf983zgv9DDy_f zcLQs1VR(ZpS4WJmac*RzhPeaS#V-0jZjQoevL09bi!!=TI3ZUMLJD>LHE(XDn<6Mi zX^^bQNvuKt*I^Cr@*7xXp4)-fBQUbnxWOv~TQcrjXx!C&m0(Mz=hv`5y5K)M5Ziuz zzj;jS%Y+lWAV>5&2d@(VA>vQoFHGsce#(16x1ZkHK!szeE*#hT46Hd&PKBd}=9vp2 zxe=EO54UeT9hk56MDdy1^p@`n^M7`syD;NP5LXA!>Da*6PK>Bl(;6h3M*)rX5dXD4 zlD_4u!tOsjA^LP2MWhkQtfohzTTNq;Y;OD~wVJMM(@*Xy1J_+$=teV{z|m#24mR?0 zW`W7HksLw!$kQ4!nKo0CX`-ztN8FGz*st45-!l2x;<^HirWQiwrT=Ks>*R-#Lqm5Y z7twH_>RpKymaJqE{<&Z(VF!rSb;M4(>}h5voy5E0+d4t? z<7D`B9kHnro^Bh*fw$h%)>pcR=>g&RiB0BC@e_&FkjzrHG}9u5l|sv8X?&&3s(|FY z6-!lB3y#uo1Xr*3ajVP}NARv{ALkUC@fCAI8CvBgB$rhhBEA4jP*a)k{{5kRHVyvp zjR}5kRRV4D#cCfzN>p%TS=-;{UhC&pQBtn@X|?uSye!I3kK7q*HdAjFd!zjHUm2lR z#Zaqvz)wG?%<`&y`DG>pDz~0H^6@hi9D(o<&%J?kDP!5sk|>!n72%mOy;ka(GMP~_WneHbmA1{4`AURLnL-7x zWN^qOEKvq#`wW^WL*!%2UR6ahl?2&*ZwHd8Vw}zQz81;mMZqc#&-`WwES*$}Z85uF zC^m3DEKYl){g_=HY4-)kX|sk`zoV)eerY(6Aw{TgmicL}9c>D>-6p8-3)dNfj>oi~ zY>5g(fFz{f*Eq!^C@itpT|pCj?Z*J8H82`>OP;L+GX4au1R-EyCF|yaScj7t=B2`n z_60`7A8CXYT{0pWN#~$T?y%@vWKWC%i&R{sL!QxRrdyHs*z6uiia{@-ow5etDt+}f_tueg(E_qtavlR(?(51_U z0HqDzT>YcUSLNAmEN^g~NvpDfy}}|>?G3@ZDRh?xCTa}kUJgj5_~-X2dfl_*Rh81T z%_;gcngW*s@p-mlr+kY^k6NXuqNFRwrr9%*2yVb$bx2%SsNjVuyHw=$x#R4}*hssN-H&^XwXyN!JDSws+mZV1x3vCuD(NGI^pS$RK9>dXEgIdt z-3JnleC%11T8%s>Oi%R)z2|TD9YOrX)kpZ=*|uc<_FD38-4VXGV6z_K@A4nvtpobb z*u@p{zgF|NH;qgz@#)c=v^U^3x~m2kyM8cjh`(!SfK zn2=a+KL-At=V|$cwaDAxK8zekXT{kYf@Ao9S0nKdA;^k6Ym%#-Vjc1~S&)34RglGE zkoHFaph}l;A9%D10wQVBsrrz(SrAtvZ>=jHIX2B)88jou(ctTlK)sEwuP2*Sr8E2G z13JIPk;vx7MelG5exhav6!Pdxmr(CLep==uVa}l491;^AesYS*lX3qi?7%bM_v92) z@C+np-0|cTQ=x*NC;=4wyrOqFd^v0DBHGsVUskiWuBL5W4s9jtZ4DxA^+IySxlc|p zVS5RU45jSC_vSaLg-TcORhj?xHdDL)Tb9wmd*_%!{#rqgIKRcB2y&hcjf6yriMITa zeD7i8MUnQRguI}Dk5uM?^b1wR&$bmqY5cY2wlZ1-;2E0l@-j`LSYb7V5&%bOaA=3er5G2cG+wy6m zTwG5riJ}OSD6(xOeD6#vBv5SL^BG0NsK@VI{6kwf^DZC{Cf?RH{WVi9>8i z9%9q-qWY0Xt>lF0Ng5ntL!LF3YJ79~4pk9|aDk+#?PNlg;HIxT{1>hL0ebrhNXoQ? zdid27*27jvyK3mHeS_4~ddLPr4(rG3bEScM4Ox(5!;Jn&9y$R@aYv9e@rVUU!Vzmo zCLwVvzNDl{#f2InDL}}FK*&4o&hLP5DscS2jgrnV5mUw)CnC7|>#yO<>dxeQJdN)v zCVdo-*gj)C(Q}ZX>w*FeD04vx6C@r+;ub;t5y|G? zhrYq#L(6xnf;_=Qbvasaktw+OfXt1=^}62f-xnu{d1>UlO!H*yc@KO#g4io9XvRxs z5J5P`1oyYK{BsjkqP1=V+_1=VzuzrwjrW?6l%f24gUS~~_?Joemx-uN0eo@M9ISj+ zu4Ww)Tk!oa(tMSCBqt;feS<@CMsH~sF3dZ;4VKO^2b{{`wYfm!Io}s44xgjX#oEi@~pK2M9u~#`^8Xkp;>gL0zOw{LED9dQU^DpFEL{9P9b#MyV8_90jfj+k|-G*s!zZ>(*%Z zXD>zBf3x&LU)t8gzt-$vwRANGLTQ`=dt>n2&>jIj!|Cx`p-2pv z9of_`nvakDp;g-Qi_=_-4C{hTb3LbR2)sPwmXUXmkEupr3zsE8`GWCZ68#KM zSh*uqhOZ_wxf|8(uUqNkkch0Prqrhwx+*1YtE#H5Erse=YcnmTc70D0D{Y`bulIR= zhl=Ec;A53xIiXsPD23!sdUx(F&QRuV?;;T0Hq5K;_7esXQ~B%Hi!%S*YNJr9fwYpz|>k zC3KAN6_>SqbOfQxn*Ri$)d~>0sH8(epY(g;+21W5zVPKli9quO*o|{g_cC(eanw-gyD2!zD*qN0ab}k1ZKE7r(2N{_) z**44B+Ei&l3A1cP`q+yFdIQ6z@vUo*sCt=TiEYHPHDvEpS7h5P6%%dUA*q>28i-;^ zA*XvPQM1zU7-tid?X&Pz8OskaU?Ah^6~#_sbhK?@RV@M7`}F|*CLpYv}H-*Wy@6?s+H7{FvGa>XI( zDGNKMTu@$d&)wDBN*gRX!B(`2)?{hLpN&1B5}mpRi9ga5X^BjL=U{0yfG#=?<q= zsK3=Ld-MG>D_MQ=_cUzAi8i!0F1ZI1kJ?rHF+(Gv!}hWp!*033zjdk$_uJ-}XyFOUl{4Bs3tRoQkt-25geY$5I@NVltKs8-!P!kH{RiJ zV=v=?c2sHux=q#x#Hs>|H>U>Arvq}xJ`S7MfKrkC7`QM}@GlR*V6Fk82l#BeIo!DJ zl)=7eNB-dNvpbMFflu3CV|0C;+eSZLP76qJc;U<)YG(N{cjA}i6N;rT4@iH`#|0-7 z0>H_U&Ww<)WcSDk`$ZoI+pAE)Pdpw}k=HjX4avDCs+T(IDO?*G>_=)Xu|{;?J|Q|C z$^Fj?_8_FEk$sX5mIIw5S+Hf&Q;6ZF(0F9*7D48ZomR=QGJ^mzLoAN%74X%S57Mu4 zwF*S)D?SEJM;g`69{f(p0o9=Fi*@*=q9#?rGj3>70~_1e8G`(}jnnU!mrxgHDZ5`T zVfV`=>|R-6_soDVC?#0OOfe})N+N&hDORV}BRL_p=X(Zx({;QzlkDdwOdRh`W;J$G z;egU0N=zJw6OR%VIpL41rFUiZQ11fUGf%`q)SI~LZiZJ>EY$w ze;_mP;Z!mM7Ei{f|JIL^v~cSs4S#(vm5?dWOre7NO=6=Uhk%GusrY?i?|wL&OX$UB zsfiYKoU(5}S)E%JOf$9l7FK4$b#HJO&j~X%@q(-{6KJq;lEFW8bHv>Xm2Yg>gD8dy zm$~>C!1_Q1WK~MUn3HCa1qa9#NNs5M_QPQ4_RQ+Y(0xRW;(vWKudDQpJ*5|7KMfL# zGCLyip)eAGzQPFX4618Pq~>)lX*r(;1B=?JBD*?-{!Ve5s)2!YmVTsfVL17Fq=^?}?drZ~`F^ym41|4CTs%R(!?y(##! zGw@JG*JfaZs^Q1{75ZO40rdO+e)`|O?oZSISJr0 zscjE%YG0le(-uE1qxP=JMAf+ZO&_b@EGJw>h?TDz^!-{6|EKj26^Z6x#uSq$qx>H% zM$AJpsnu-oKcU+`7d^h9?SUzKZ8 z(#M(H*Fd6*W1Pi(DUwh!k}|DG8fRtk_hXV>aduzOg2YYu*<+1rD8izhXbbVmFmv$n z4ljs+zJlgj+_Fqgtck z(o34uus}p;|Hd}4-)~&|4#T&8;w7qh4WSzHgmc%>nC$^`PBd{y^iw5<#bj^1xJeDZ z8)iQ@+H0#jiO=@Y%Zo$Z;PS%9;!l>d_><-A5`P`bw1Jc?ua7V95yx>-uC?ssSKZV^ z_b?416s4#5_rXM|53+#pM{H#F*K@*sCFz;s2@>@ijkac%fyKrcdE$KVsaHBPfMJ8 zNLhN`Ew_$T`11d799Nc}H{JaJU;Zz6?Sj|O(E4NZC8{0O#mY@516CF=VAS9B0IJ%vg(r{%8UR$d0LDd4t#+5Pq92UH~bk@%CA8)lpm zzN#L{S5@Fb6O#LHMzT5Mo>#ec<}T19hU1j7lb=jfckTMQ)pshO`(Z7&T(8Ip4Hbyo>nvOJrSCk9%O3x^3UieWJ1U% z5Afwn;1e=MytkI)IPz(s!k0fsn$uFHz;{-J#G^<~5FXLy?X3ND-mVAW{nGR__Zdh| zGLf-JE?ZjgrqXmfeDq76_R+1S>7(4^k(|`1e>9jqod-Xy)<3_vG`-N>2gymxw2$ny z_Qs&SG~HFGxRa2a^kV1>NVW`;59eqfB01sM1-m(WBl6a|3PUSGJPP5H=zCs;Bnp3t{NpQ5S+jRzffqd3}njSSihT_ns*x&UGOY&F|bp zq~h0Qn%(}|JxnUTe9sgUzVOB-EnI1l4ii#>ybZ1tzUr2F+p>b9zq1&P*&+oSqXg zZZnb+gBKwF%f#RSr{_eRyF21nB?f!*1Ih2qZZo+gjJV{k=sUtNFLk)^A()h>oKYv`exbcdxok*Blj4+bK0!ygNw2T&^qlBE zv%k}GBA$-&T&L%R#ck%R5`&5Sr-@21!Ra~C!yPAeJir(B=mQ*mXBP(Oodg3sH~Omc zjA?IxIhS-aKqSwHSTR}-J@+rQ?#U1t- zGW(yuAk6IF-E4@@y4KV|{I%ET>V~9TOE4CRtH~0cs+4BDb{E+Q7a=j}KX;LhP(54Q z2ru6?#S~0Ha>hUInqpFLzihG-^0Z_T2y*o{xCZi7)6Wu*d-e@M(K ztc6{0ChP*Ay}{lX?7?0)+8Y!>THUO|iU)|q_i`QZUjTwq~qr}<;7KF>v#PV4jNnZQIpx!c5X3SXXM zVrmM}F=ozY>PmkkCl%ZQ>Iz@pK;sgXov&~KB0S1YwmkKp%iO6*PWt>2s?zjAa#GqI zuX2Gm>2L4f`3kMy`Z}lSFYdFEoFwdgg&u(O=*kEKETd5$8$$w4TaqdGFM2jQ79O`gXL(^sCWNG+dv`0XEW&L*L?X?L#n9S8rD7YN9QZK9Lyuz+M|PGp@P%YSPwN z6A6MC3-rLwA|#vb_f>N%FJu8r1-eK*d10i0Gqj^rNBNLYY8(0%r=i^;iK6FWo>4x4 z{1=C$OiMJ<^tw{s1}G4dlze+=&A1*_N;BRZPlVrKB%0qCPlVsv$28&h@9|SiK`W9o z=8vCZqVadbsU`qn2oO_{o8$Gl&L7EFp|eJc>$5z&2IhzxocxMFeAcnmDLH)hHV}cy zAodzT@&$V`U4Xn*a>Q*;&+dWjd~E5-KmDi)UUlQ2ehqYk7L#j|c7C?R@N@ddz^mAq zeaL%qlJ*RqhxjjhD#3G{#GL4c_*FfFXE;4Ape^(yhiOkFu2b+6_d-ZDFiJMdS(RKQ zzW@WW7C%35zsgtDA^ED*AN0fahg(C3t??PBr=`ct9MDf%;Cye1r&J|6JuPs)_Y7M2 zPkSoC7@!0Hc8`&aZc)epPI#|?s81;ttzZxcrN~h?{R$+Tw@zQft+WFSfL$dEYw-mg zEUaogC#=W$nQeOn{5(&~nf%l5&{~5>iOw4!QJC1Z;d_5-{A|!9pSC9g@~W+ z!%)ogKJLo;z`tfgQ}#cK!bSFt~=zZu(J;o8a(0oVdb0i}9UK&Sv7l%HM7-jv{* z?gk#E4v5O5FZgP1<@u33!sndVv3!drp>%~q!7I-WQ|sP69xcBq&(sEAK{lT^_#IBc zEl*Sb%TVfnnfxsCza+%qCdj|2R0!UFtg={(!Z0CT%OH zR?FqD+7E51=a9A*=xrT8huKWOoHNCQKcp=^Lt1)(wM5yKVBxe({>ikZub`!|dP`qu zEqy{-dJtMlNO^G)M+1p#vTey6gYvKvGqVSh&4=sub4oDI?z7j@ z5L-q{Bl^=Ai+c>*ra7Lly0hBkT`%0;sFwR&sfKjxJ5pGf`REh{IY!X?!S49xLyhgH zV7tx=TSgD4#`=^6(X*KEpnA5~=W-}WHrHSD4u{|MhPm_R_0ZgTAMb7B&ZGDdqqO@! zeCSL@Lr{d=X1%`Ui{Q-tM_2u$DY}2uiX_h7Naj~_P!1WTIZ5gH*jfG>jDLE#ZDjZ1 z2b?=pHVY8oZr*sEpH|Pr&s_hzs;7^p+Ex28yv6yuio^lQcCxZwnx-vU&dyfW@w6!> z{Lxj$%u&2MsYwl%vHhDs_iq8AA)nBYzdVL|(;!1q&N3lSGtbLgSP*n3UW14NoXKUD zA9HO-;w%~~%Pcx6Nlqh{&sDR@A4ff))eNAa=18o^H*Rgzl51ILReHJ4bv5#wpujeE zB*&eN7<>yVr@ z6+K|$t9tb~<}cu1@CVODQo_U$lT9?-{Gs8J3{+OClygccS})FP}&4O;?dpn(^LP&HeT6ShAMCnW9O_*T=H8ym0Ik z6TWCDReAw95TsEuQC|ADZ}bPPnz zi@KQQ5)Tg37yOik+EbzUhdyDVZbfTn@elmm+$i{)i*&CLJ?FO}+5Gk{^ zzM@GD#K%y3m+a3!=<-2w(m$@R?IWuyzyr1d!P`bsW18_7xk`u3GjzP~ia zV)yC!g)2Xy@Hc5l+>Bs^kWDc0EQ=t=o#n|m@G#5pi#scL1`D7!%&h@ZTn&BR!?Hkt^vTt5^Slc&~$FO~K-5yX0@r)ePA zS0~RT3_FCU=kHgMxE6_rsNFE9aKGBt3eUC`P&`C&8^iA!bs&sCfGg@0Ct58|SOM!F z`v0hV7qFhL&@jes zyKU-dH#=c>D=RA_Q;*Jo322{zmZ_8pnXPfGyp#$i`~R$Wtv$16W`o-C{QCYq&p9%C z@3q!@TWh^*y*HqbO^h=8jQHmppe6v4<6j#LWXYEAFsPG3uzL8X`kqx3?;n4JC(1b9 zT_-^n=be8(`Egl(p78Z=0U==H!b{j)hMi_j%1N#BT|zYxwmLZ6X2>{VM%F@8@h$A` z5N;7qBXJiJkKvmdh@w?&30x4ecmdKW1P#bz4amA{(MP`5X&9N#;uBs!;7rVa6u(dL zuhYq&u|N%(rP)!kEC@d}@Q_mG=A9CY@4M=4O&$h(ESD}K-Tl`%Ie9MaG7?ZdAxKs> z4rLwW;!kq@3s4qKmNzY^B|U{gIoYX}6x?axA&su%r&j27s>Ubtt8VT1WS%*n{eN~u zSpG3JAw?3bj#&{LCn0lb%Qfy!U+_f*UGOIz+4HYBe&70EHS!7I7E zp!l^;5gf-?vNdeLb3X=>>$s|E2fVWx42Usb3|dLs>;wZMYjg5hO`Gb{7P!Z|2FWpf zQrPFOX+N)dF8K3^%=b3H=kMRhKDU$4?`5AqAM!ci=p0J{I-@qpB)|Dhtj+Y0HedyP z;wg?$Bpr{chv7Eg&e|Hu=Az>NYzY2jgMrV@>gT&T4Kl6Ebw+Z2OwSL0OH=XZn2B79 zWD(5%{&$poeWdtmB*zrq03R1Wiuld6^E?+`5klIP-H-oToQ&j{Dl5I8t}PzLf68E) z6$A_Hk1eeak3R+AH(XDGAqS(2|iz))ts;R#Y@BUAJXtP2w*f` zx@aSZ$IYYh>M3OgNBV^O$f|2WQY;e95M3xgY|?}=-ZhYhF}i%0F+Hpr$;K}iZshQ& z@4f{{5?B~AqLIJGCtW{sdeL!sQs*GhM}@_|@rz#yJD(tN2}?V?mZlwcP~%z@zholI zGMu1&EpD{Xti`k$jyj_{6a)ugpR zjyxBhvWkw+;##C}2~dc90o{4hkO+5ZQkEr!nxyFY2oR$25%NRenX>LIA^Ut zCE+@jkHt;r&y;AI=-S0BB+oN|SF$=fYEAPste(y~R;b{_+!fp7OKh zXo&oLyly3jyBCMcPcH%F=furg`T6Z1q4IOd)#oKYOSlmEnLqQQ%FlHim7lCeDnDBL zhOYcv{^oxsKl2CtXYzBo@&AHJSKeH=Wa(G8kxcuz1(R3`STKQRfPpJIt z>UUo9BecC9EI)%DxTx}TXzWrdgNJHL7N z@>^;CBNr26IE(};Y$8XCLbYFf>@Y1vu!enEh-Bkq->&3v+Cwx&m|DZL5cvySad;4g zD~{-feq&7+M|zK`v_4EHBo2c)`lt!tn5dPtsTM@eXTzcWSJ!LXk1{*b8>T>gMAAM1 z+9%*&`_haj`79%~=QwYUIeaNi98E2N*U|2V3l-Y#5*_J}Phl&@uq5a$3BS@8tQeEY z$l|CJNBTYR36JDkDn~YPNGwXrbNS3jel!iqx4bs8iNiY*sj4;))+aju=zwtmzrRdg zh9f=J5C2Hy>w)CE5#;^<1}FEWw;R$jnjBs#V{5{=1R{u#Ia*o*$tN}$;nw!3veSFL ziR17XZ#awg?OVy=QD??d?S7ZTv_UkBpSE~FenjFrbr>+R+&lK8zU{HI)pVY}= z{JHZA9sZ2!spZd-JD|HaMpbCLOLU|+PYUIa;R;IZTzofeRCrYo3@MKE_xz30pivtB zqK}qCH;;9@Z;E_{X#_*F9H z532~5;z)0}+s~gg;7=OkkN5Hp`IE!=lS}v$<>$}OQM4*Z4(@y?oX)>DtmJUc1C-A7 zVUuVg1@gvZO5}Q#$k*Sk5=AAkaJdeNM_!^Ov6um!y*jc&(-|T0_Y(so?nX!q^*wq~ zfzH8WX}bsdYJnhhe`{js)Y;lAgwA*wZCsE<$z1Oz^8;$*5Gp%*{TV7h5xlkKxv1cm z`*kP~_tiw)A3qq*hVHvpa=0#^vY|GN4POogBvxHRDNw7j;mx}U4zYv{YAp)nZ1lwe zN7jP@-~ZI!NsvaHe33SBuK-k^aThDmLUjNnPEPQ}66*W4f_1%gcse^)%hOMW0AxFc zS7;z3yy<#ZC~pQ_2Giz;tJQ4>PavPfAo-S|nRMInZ#p+*HgR|oV`jNp;1Ji)(N?T&BadfAboy(fay>>HeKnp@ENZZtQsf z{-(0-A!fv%hCipR_Ft~WiZJu?@u54??U#nK&y)_0n=C8+m2xTj_K(wN->IH|f_+G0 zx^?N6qtxv#V*%Aj>WIt%xYWkv@5>Ke<>U5>X-~7Xy1l zB7UeRbs?Zu2Uh>=_a?b;slycEG;lQj`UWBQhN6 zjvR(o78zp%B4{l{RK0pWj-q8kjxFZu^R0eEz(p>+;-L5Dd}W-ev=#gTELiv)T|`m(sa#z2Aa`4t!!uUOImwX$Mz-s)`>8jy*KNNfFQqaN%80R zOQ!YXa#(&p#Pa(gc9tzy>%*~|l6;o$FPGh*6tWu?H6LI(D@Wz_m!mQ+NnFVZ;&vqN z#ih9iU|Cj+R+$azSIa<4rT&P^ph}ebcbfn2_~s~D*via+NMNf>xgk*0j{KX%%C%A8 zmRVBR?|JNZnt=}KW);9P*l#m?@202Zh4(_y0w_l2;%niUeUy3~s@F2hfYxf=^3=xE zlU@oZ+!5reBml_LU;3My+tdm4!~Vb1s$I12h22u?$jV2C^z|hRFQSjXP%4hVjUxUQ`f^1xW@Bn8M z>yS*BW~f1r@BvI1l|&id{BPb+Q2_GTu~G+5oM%Q+pK%| zr3n#K3QJgQ+_WsdvRkjrl9r*o^JWOY1OJ0#{L=p9*W!K=WM?`Cl^>)DDJDVco#GOt z*MSGw&V%+Ig1nmkupY6;dk+v!$n>=!vVW!5fm5U9fpKKad4!lIVA*QAH(F249xRA2 zu`O$YB}WjagQ{}8FPRxWL2SY!Cmw(@WH|!UFa&A3rO+mRj>InoaWzw@7FY^L%US)^ zvaBEVX;usIEo0I$!BR+mn3(9)G6_G;;?br-&04?csRUidq@H1uMVZAc*_% z$h(L*unQ}-MqLONTU$+Dhq6pAZuP*@{Bg?zRdA~hNYd@Z5ACVW{ zQ-3H5l8rxK4rL-L?O(wm>rvi$ zTO`Mo4C3tFk!)-n;pWzp0~k@9jUVN>x%Ea+z3BymVBO0*EInv}N}D*Li^(Pr?&3(F zjle_3CPsDfx_FMm|LoSRco*|9;`P>TSM$!rF#oQ9ar9m8b0@Rf=c^eXFGo`E)>KAw$g)&q6{7GJXkzE z)h&qC0$HZgCyw`Un=S$SuuN;$06`_ef?UYDjdx6qCGa;#5gARR8Ej)sNFE&PNPl-E z^Yn>|_11RhIJ~`Uv*O*Z2);D83qi65f)NA)8-ZYOcX~e$^j~ad^smY40%@Qq4}Kj%TAGn;oHNAD0V|B% zVHeLE;^wfSYqR3=o`?aKaDB4eymJU;$;it#tM|*mnQItB1nFM0mMNdBOxYY@N)2Jk z=Qi=1Y^Oq)f^DTgQl|VI#1zk1l_`5AJ&L@;w@Z;rN6_jmVpOcldvgrO;aj^jE8gT7 z!W0YzJDQN3?pmetc<5G1w_!Sdk&o_y4eZknL7AKF&Y`WLsb zxUx(G$Atu9&T*Bb_v)_(VqVsNmcfyJ`*4O_pV6?bZ&O_A-)85 z4F6RKjmR8#skj^BlItNZIpgHkM1jw$(!?dZSzI#wMe9Gh?PFbnSmh7POyJiycP@(K z*EdJcjzrSs$k|xjiM+8VYhovt&}Bu6MN$_e?jR2c^_1P-SG&?JUqj4V-mw6GoMdsom1k7Y+F*e4Y6+GhM(z zjU*=r8u~^yh;?j(a8u*poa^1(h6rY*A@BTFn&RHnN|SF0=u}KO+vwkp^NC6ad$!zX z*L7}c|6B0{^@gP%11!}%I*1JAtE*Wpw<@`T=0Th+DQsWxDk>c1K5Gve${ z&5Adpvz~bFIU>VH($66yY z-`l`H@foB6xo6mrJpPH>A_Ds#i|@xZtsYs-`xW&V5&XATf#B{MQniM6e!vCET*i$RROXhdhtzdUNY;g%x!L;i z)Xl6CPT2YqpKv&s%0c{nJGxzJj~=3(-m@Z_74JWc41b!x1)L+b_=}yw@MrUDV}uU= z5gc=p=bv~UChRrtPG1yXqv>#6Cr0@=){i~HZ(lEM1#iiq@nb{B|CVuhuz#!|$=G9N z{jX);#RbFZje>SNO1?hAKQWrRuF~G~0{Lr#S!d+^{`b3h=hs|-U4k?WF8^|o)Pt~& z-T^V=y4>f?)oz{Xk3T6r*L;V5z*ktbbv)TSKdv|9{$*@e21X7J%<<`w9Eb1cnicP4 zCe%N1DshVYYAA3=6rljY-#(3e=H`NF%IpKBt>7@)N6SAR*kMmb&PJEF9J&W5(PGU< zuSe4QImo)J_-;s2O^;vr!Ci`?YC8yuPFfpy$J!{hME^1syDkK~E{^mWgH-Igco#=- z92S)(#k+utn#v(`W^N{83PDF3IGRI1eYnB@hA*3F;J9q3LX%w}aV=cx3E~1v z1_2<2=tkM%A2!ENeaXXlHiy!)xNj!E{$S^#1oBVxY@;Au>x;CB-(@?0=F2*%K2$A8 zHa>D<6^DOIrV1dG27+r8x<4XEYfp%u>_>!HEm)tzL^H#MSERA{qzRUJWp4Z5p~0o> zdOx^@ua|Bgc+b^pEcY)1e^LUR>w%=3G>WkZki|bE%rqeB7Kbp?0QJ##@=Kp&7ds{3 z#N`D>P~Ur(($Imf?X$WB>)zRS=$!pdq%otP@zE4|_9FsdEJ$&4*mSlDLXvCgrC~iS zKT<1*d$DY2RsuVL=9X1|N1z(08gPPtz2tngOnSrFr{F3#hpmrYkgm~Xc*o1nlaGZj zKeKOWXX*LkHtqKF>zO9S+uWuoNUXK-~ zc;ApQe=YQbe_O1|-~%@W$)F%br~(7G*I{f&Vgr6wX#$*=vVRxTe<6Ptdo){VQt&MH zBai&}2m3LJ{W})^1u+^CXg`R(y*cnUNofjC8GOmUCf)k_8;+cB{q}WH?bdHcvhjrX z9S-k6G`iVLqZ7vVPy^h*UIk(4ZNC*59O<9lqDJ_h{H=g4oIn3oV8Hb)1jLxkQw0WE zPfCiv9{!$SNkFpk!@DavJQIEEH~S?z(r4ZhR7yxwl`aLBwl?`Idzm>}9@E7BO^BpW ze>Y|$hZ7LkbH~;<)A~f0-r}!GmjspTSbd@imLx2YPFa6>H5m!eTO#Wa@iZf7m9Hxyr~wEX$q3q;j@4?eB4YtTub_`&N5CT>Xdn7$)V1&k z2%1VC@s=&*kxI}Z^yz>%;3*I^oj$tnWq6d2XpX} z4A^ptkkuG}yug5@m`>y$G3HLVVcK((+GJ#ZrWXw9Kg)oRoorI@%mixoE@TCW)hrms ze*I?|kl4opT`X6-i0Q3%aS7?-{ZmaeCb1CJQ12jSHvBzmGZfw`#1HoRHYh|=u;d_T zoxL-XjfqeF#QCC9>r&lFG`^Nd2D;8a(27Jh&@+j%40t#}PmUkLS8#L%mg9?_&4a0! zPfa7vozUkOOQFx5(C0nS=blv7XZ+o2pJPa$vCyaS_Uj)uq&5cPCwoI8%edt)!$@l7 zwh5LDmLH0aGhI7QG>lW|A4loS#yQz{mI1$gl5W4{)LFs>*=p8)-K2PLJQKFo1>1Lj z=i0UJvg8T8^G3G$P75;fQsZvG_)9m@Qmy8hV26G+^x2~Ju^ zmU5{;%@!MwSjDRHi4FMZmoy2E#+d1< z#W+l$g6=I+1BeUymND#qR{O0WdHr}T>0Pr@9`(0?N9Ni z>Fhc9Q(vdYpBE!8gg;;G{C~?I$p4Y9U;khxtADV7#@A*L5=$8-B#lcr|FT24wc%VC zdFKX|J`f>Wi6bCCNq+f>r1cqdnf&B1`N`4B&mByD@|paoa#PL%7oLZI*|AP6qjE;1 zXk|c(YJ;Vy9;E0uB<}W0hW~yeARnGH0kNtL6|4H-ZQmZ$= z*S9rZ!2CY4<1d)sDWUn7a?Hp&-VEpdE}ubU@W7|Fl~pv+v4esD_I;r1U-vGJPYW8u zjHE&ngfv?(;hm2eXyzU@w^Kc&KhEIr{I?pFGB;l~mE9L5A*l#z-=?tpySZlGIn=;$ zd}UEWM%vs2-kC~&T?YAo(&k>qJNrW8qC{k!o5(w3;n%1XB;AvQq+vD$>T86gF**1%`ugwc>sg#+YjVZ+Q>1#D5*5r9=qO5sHdJ--KCOy@DUMv@$@`aYa-s{@J^Q+CdCwzZU zXAn&3XM8h&d(JVzrX$bU0%JJ+FgZrPEptr zHZDBB&=&4o^7|~;j{I(T9q9i^uznk^**WE^s{E~^nZ%a}dbaOZ420`ds4aw<1725==*t&E2heN^($CeTT z!#o1RJWAsXO5g3;M3H_~ONQd(TQxiI+sEk+j5~GKb1pYmujlZ!x3V-5?0U!SNWZ3E zsB`%U+@$MVe)cMQ>#I7K=ee}*ew{!8>tySVhdwEDkG z-@zfe3FskGe95)~1G4rh-Bw_rIsu@u3+FrA(d8ei3R>u2WA=g5X zf9aebVxF!mFd)hJ4E$qDP#TaNbG^8l=1ZEQmK2gMLC(5`S0hn!L21igeVBjXKOsM% zuN#s#0F%Zw6YxeudfaFvN>q0oort9I38ahuNR(DV7vJ<|7nA=a0tG#gKd_nhkbgQ~*JLD^=zaeG{tc`XW>ix`hyq5^ni4{7MNyQkC4?S^tr;c*l9#|$j+(}L zjT%8CvGF829`0cTyN2&b1wCJ|Ylckr=fh}C-Ix9!5?-Iod=gvH;v=1gD2Ll&B7zJQvbquC67|bE< zf$734PI!U7g^UOEY!(ys(}QGI6_P%mr#6U&rV0*!aUCQLR~<*mp^CIfJvltpEwDUJ zf*e2T&=xLp!$cOn0$7eqJ9hq9IwJwgzxz7G@`F=BSmt(bj~SK6DUwL_{iR6uJp@S3 z^PeYW&9~|xw)2~kkVLB_O zJxsqiMlmg6n9?ARm|K1%n2OXERg2&J`3Lxl2AE8>U!EzIOqve$fC!&h~alfP=pW5ul)3dj!~iloDW? zK~v67iWzv25a8)@<|#tsgG73%AXst<{+QsOOzR$fQx(A962N~N!@pjOKgaOT4dB1} zLh$D({fD+0`BLo0rGD;>ke={Ho)zxar!m2i)Lg}Fn zsc_YaAS%r7+#bjG{!A&5W6)@~Qp~U>puieNfkaAybxZ)5SI5~OD>!`mY9PV5IL)NL zDL{f8L*VkvPl7}PjczN~u6}pEeF0Q>^(;_f{*N6};kx5NR46vJM}=KSC>7Me1FF-< z3_bu3g%9Lz(qvGrgDhkx%6B)EIJCqROp0TPrm61cS_NMlkkFM$853&H;n zivPh5@n3K>82{*Y@%K^ua~b|e8UEh`{`Cxh8YC?4VNyW#cjKuaDmZ-H!g8o+q+nox z1i6d^N3|qKU{X+`l>*ya=T8L}UU3G_GedgET{jXEI``=+o2A8T*vi)yAkl_HQ zje!<16N5q|8&5P>aQK&gG;PFb4GjtdG;lE*9MIArg^59-p8)913lM`9trY*}4)I_9 zOECV%cJcRu+By6?qIP~p_4d60t5)MY^p6YBI9pl(!ktYWLKqng;TKWuK{&umIiv>3 zucI9L=eNM2(~LvZT~Fj#c9VQ08^;p;Q@9E^G{p3IfJ4gy9Gb^Cv`)*RB*vk9KmKpN zeoRq+ki(~&TI^~KEboSy!A9g8Px_b|70k?okUaESSXvBvK0Tz9e-Y}CPPG)0^JFI^ z*-XAGkQ{SK$rf(&5EZ&?(Sz3)DavONG}T+gqASVgX5?rw*t^jBJuMN%H$$}xn%qAX zIa(s^osgp?s<_*_NdNQ8kfX&|+<9FTRCw}rffNbws$8%PW%l{_`#zxlc0}RJOsV8t z_)H?zKi^mV#9Ctf{#-f1equSe`>rOI|1sbv_HoPRP(QKzui41qS82zMtC*kID}jCy zT*Y=*{lpNi+!=5Z+nSMJ;41~o&~kJcb<`A5qQ+Nj$6-&Xuh@@$!+gcAFoyYx{cyHg z$5*UvVVJL&bsqB-gFwWhG@2KfCUy+DR(0V)ABN|e_$iQc5$5_xA7{hflW^HO-{Ntm(oGpPM@ zUIyKD&yjo%98boisr; zWhNkLOd?(bpV%K&Uni-rlaMqf1wTz+Pie=>T0~zDZpX?xp1$s*v9eMFTP~7DO~V6= zIw&4=+Xq3mv~tZgh#*h5l+(+P_o?&4X?BNpl-;301_9Oi;bnGH$@%j$INkOldc`Jg z4frJl^3w(G*B;ud-mh(B8@t_N*1W&d|DGitll%N#DKOx@XQ|u5QF;S+8gAgC_WO++ zlipX28#glJ28FI9aQ|;p?6$ zZRVYBdUu$}-Y4?T_vw=qWJM{wlLmYsCjX-|)B@%x2U$nw@J@P49?j$*P2-)jz#{?W zr;X0%o&TUeW&nTFM$h1#cLqB@$mLW!|7W?HJ9QTx_=f`1!xC_Vc#>lg0Vzm&nV$0> zKOKArOU7Rc+;aLLe*Yml$@T{(SuZvXIw5I{31_np{@wm89Kb$#QS(X2OpJz4?DN~1 ziFg*gp4!e#tfQ~f+wpgJhrYgoQb8V8NWYUO7k-ui^`~ZaFjM7sn?mZ-o-;r0>y}*q z{bd!M!buTy3MWR;DNO$LPvNc1$dJY^GgDYGn6gCyFD04;xzI$WD$Ud5pQYD+9dJ&f zsg5(dL zIo>ziKjI7h`b$0|WN$)}$%UjG6OwER)WYLA-IuSd6{}e4w<;vZk8i%uaDq2?d-4Q7 zx$ZbW$%EuRL-*fjkOoTDt^5s%;LW{DPw-RsoZu(zI>F~w9p@+4@i)}6`cR86QxpZF<$PT< z8L7a_UW!FhCi8q?sJaP!mu@=15fqQ}=J;zj6IgGkFOHbM?KmGBWx?LnA@CmO&Bp1Q zNt3C-r1Kl(qkjhm*}4e^sp6dtZHh8~t9M%)bPH7w)b2im#NXS$X!0+w;J>{}UHxPA zJjp2kKcV$SG&VReO;i5o=<*+lo>P0Abx7RC3$+ApA_n3vNAn^i-*V_yDh$sCgdu(B z!21kYQq*&q)>>L{6p4EsKP+-K@@3Bwp_pokBbsd*6$bAv1Cxs+LcacPLJYG&SV~Aj z{udi%$#dbxw?e2*MOKdapPQI?K)WQubs{)QExOlzf;YzznW#U(Pug~Z&-G9NVv@lx zHWHa|v9n8xkJlItCBc&7Eu}&mWpUv%?}T$Zi*&{0d%5~4ZqWS_1pZbKqF;g6lQ#n2 ztB&*LsTNZn|Lfl4d~PFeu076Aa_8|k?BO4ut0;| zlL2(lm3+@?1{$!k!@C0Clb>Kq>NcF-(-Ho?!a5KkBCSfl+sE zP)Gg!ER6cgSw^zN5HATl_YGCXuRp7&zvSxse#z;#Zv25m*4E;lNJdFWJc|FfJIzZM z*m#nVG%68^N0kPshqyH}iPPPgPP`sudwoJX{?);`2?HKG2`*|b*JK97@2DO5s@3)b zI&4oSV@Mx)Y9B7&rY}1D5Bi@UQd@{56A7li+{Vg0+*0h9*BuRl68 zbO56|!1?sgFaAEPK91kM?rh|jt_F2+w1S-5?W1WK1V~mdnUGk8*7++zi@Q^IqEjaz z;Le4l5h{eADfGWZv{GSm1Ly_5!L)d6fLc_B&FIQnO`#m>YZdDX%t-1(WUXEF1Kpus zK&M(DL!ZBmY%Ke-f*e53`VMe-kGx;2lwkZy&~d7zBM)XupPga;nJRqLEm-pT${g7c~)*y>P09l7zL8jSuetlC&N^z~RrAs3ZZ3>|V(z0t7K>M4aOPX1IT< z2GQ`%7iw{)pnK~P|G_qE?VLVNxBVU>7G|;f)SduAx*@UFmySH%L?oUQy}qKGiUyr$Vx^%l`tIU-KTI`K6>_;d`(`D|{~R{BzfzgZ)7}|HUjz0@ZyILYFx0 zZe?B@*sUy|(A}yyVt!5NVzK9Cb+LF_fBZS^kMHYsoS#hel|GX{KEUxeR2L7Of5ftC)GO%*1S(YSReO6UbthGfS`(mJK zi@&C4d zGK^VWN#(JDT4Wihw6%@M@)m9D%ZdEnyT{)_`>mZj7u5!>v5DJ2((4W#;IO@Xf7ro~ z+HYS9Km0{2!S|OlLU}ipxt$i81UWwS;~zM|y0f?sl5-LTIU@;f^mgOYPTH!5f}D{k zfR;qVWm=H<4a~oD*FM~{Lf=Cb;$NnmPkqP*^n9v`QJ@#%G<3~wnU={{#%4=qLGB}c zM6mh3*oeeqKJtI5Cj~Lfk}rUrNCcl`$m|R*!qCZ73mTr<=!+Xs9+zNKs%@TDld{d9 z|F4l>TE}r*+0Nqck@KYeF(maA{7$=l%L&o%)5IRQGxV$8ksb4`cadRb@Midobi{@rVg(a&u{{ z2}w60d7*;D+mTZt!myPx`zFYu3~wGakyl;)uZm1a8b7#Rio&PjB$k z=IZCv^TYYnXPr}^=fA5%pi9{ls>Q}}lt4*rvSga@I0DXR3OiaS9pybHc@n|Lh`*W8 ztn2U#`AMD)+WBTGI`LhLbm4=`0O$^AJGWca%Gs;dD_hMi|{*ozUXn%)dQ4Oc2Rv82LSsnyNXL2w?r+mn;4|!UzK;nMnIWrU` z??d7)XxW(Ocn({KF zV!U_vhNmxiY9r!5*oQo4ZbY8ep~<^u?5cf_tD)bEkp=ig`Z z3`iPSjZ)i?X!n@C-HEizecm{m$MR>MZBvx$_Sc8dosB4k3KA2Lvr(frm_d(+H@PPA zDxfmtP#vGD3A2YGX==S0NhyB)wX_Xh^hS|WkD8H4-ty~D3}xQl>K)5by2QO-8Q9zL zE0tuuySVTTX%D^x4SX8VTmjg6XkjxF*aGu^0M-9;2&9NWijZu4<*hZG3!hOM;mnZ% zS-5bwvycbfSp6RJ&uvs16-WBPBZX?ppp4*@K^ge6kEl~b8j}0;U-bjb5!qOM)4R03 zP9yC2|n#X zjbdV90uqfkE-5hhdLelpHPzu7(n3y8SW;lXQ`V5yDM*@ULe|~I-O8c~@ep!s$sx2u za-T>3{yvA~n431f&0%?GqvFE%yP6bl6|4Z1e$SmF{xYQLi7{)5d~UngZv$@rlLV_)1$++UO*Hna3BATBo^+ zaA~hl*E|)pm1UA0fx>??<$oc8KcB##kE`o{(B{zrr%*6f0IwiJcRWkajn=E_xslx4 ztn%@H-dIEQ+YM(M)smr+Kks4EsFq#*M_@S)YisG`t&-7NU4tKLBZ2|89W+U;jRJEy+iYErr#ve=luPyp`=LF@ikZ zvW^u`=|qD&n16$t`8T+kO9L&bk&}c<=cPqPaNJ{4khn~ZEx2XfT5dyR1WkjNf8u+^ zUqP*ASPDF^83wH!>65&LP+3YGmZTP>^Tnut;hFD|$=Hg-dTbcm1UobJ03Vxzox;e|+MDdrp3_5x#})ao3ASbvF%RXnJs#<@AU{$%pL0wvIdX z^xW=Hk0H)1h+|ET^rtYvq>~`p%)ZV@e#DH&yx*h-sDu}iO&3lEtf0n&JEr_;60kV$G9!bqfOO}JRsW*? z+3%{cZ(>7$2sW_=)nwAnq_JrPA3^TT3D$l5<3zv63)Dy0!$0wIB+~VKbmbnKp-K>`H*%`m*GrIR83bv%C0BJ(wh>M1j38pcdVrVhkZ!E-6mS#q)rgO5yW5cwOW3NqjDVS=ukKhV${Fzly}I4XrQT9B{GJzz)~3C1R>Kr zL0VwRv5D0-aj&+%XnwXl)*y&u(VcQPTlT%*+$qLwC*pgjIAOc#PMQ1|XLh95{73-k za;G?byV+X`=^tAK@tbV1iJbol|HW^-GawJ+!_$zInTwn!`K4VUe@nLWAYb+y69XhY zoPwlBl0Xbzff^}?vc&@eFB}q*t62K5-D-K~D|aC|YLLHfr?b(1rOk6N5)nQ(;nzNG z(v(=VTQZ1Vn=6p%c?@s;vXQ3gT&ZSmUPDvy$t*qRN|q70gt?=xV!h<5sU~OzXmKN} zZ(I%Tt#mC*9`Q1Vr*HWwz$U3^8kwz#Mwe3WtkgQ+b;xrllI)eYt)&^w+|&b$tf19* zioL6BidztCk+@9|J;>^LEXyX=BL0Kz$kArt%jQ$LrYR_Gjuyopjb5;wYVjG-sXeJX zk#*1P@kkmwO_0Xs3R3SHo3*~^ZQm_|e1{@ftLI#aq*2q5G%goOQ@=lrte!btkT~`D zX>XCDD0s{2CPfh4WI6s!{j&kTznU;}FMe}%lY(EFuwN0xz4)^Cn&98D?BC9?1beUn ze%IkgR?~kUhQYa$W#d0St>89rQFKrG>d5!XXXJ;kH)?1i z>H^ULhJ0GVA#ppdJn}s|j;q&#DM;L&s^q!wnLoZ`WzDR$k8PRTgWUk9Xzx6?5pwM$ zFybSNn-uT;fwL@~G*WS883Vf?rSaD%Ael$U9Fk72tVww$Ygq(>Fq!%SFwxt^Qu(AIpGb!IDEA z)hAe{(E?}_EQM-Sv=Z9y?JfdS8f+@-`}e!5?BGksw}VdzjxPcTiw8qZ3g&-`kc85Z zxQ7~^bC3)={8UTMXC{v0HfI2CE7}w#)$Lsj+aAN1;xDPizao@+#!^PL(k*VN;HZ9| z>b{Uy0WdNE&@b_&ZK?%99%ev}(RQwcTYl|M!VyJQ6#|PyUC%62z^MaE?^(kYlqAJzF*OQbJ)?O zc<)pFF!b#As{d#&xJ`QTdatHBBJS#FQhap+wE@%k`QmTD9kij{`?o8Rk(sdT(*kY>26G*o^+i5>A#P?0=^ZARAH*_oflSWQTsc!7*cR&d# zTIj-O9#@TfYjx+hWSjw=^m*XL0z-8>>(^#ZKmI@#EJ^CLNmHi{qER04SJHm3BL9f> zxJNAj?NP8m6GaBfIV0KF z(#P-RE?AN_N3xm+9%lK`IM(BzOV!<=A6)~fFG+3!5^Jm5<)1C|eiDwM;2al!^9zs! z!SVw0C%(j=uZ`-rmrrSI|E4j|g{PE;-Ie*C45j}A5#jU~Ec1x6P|osHl`tD&4h;$+ z>`C33=ki6_cx*{YDo@`iaKEkjmLTR+6(xmIY-?$eb-@Bry9_ojodBvY7;NlvyBKAcO+nDfjM@ zEl)8Ktv$_={zfA^>G+G2XT1W+V&6NmncL6_NYkK33gK04ih>=VH`04!K{nnEpb11P zj*4}p-wnM*BQY!16ueq_>YSh2y&mUqgPP^PH$5bn`E#_lT7&JmPWR}%kkS*SAZ&*gT%P*NFLlB z$%{;m^s0R-P~A;FBR=@D3XgcKLy%UCTE%%!p9PSfB7YyDe>+A&{VVTxXB7pX{FttB zx-lq$+g<$r!VWHWy*X#wv(JA_*AK0xB^wP(-{D-i@kk@2{O(S-?8QsnEai8z04cw> zFE21S(zom_WI2(mmlqg(-I1KWetCf*&xISovThW16&m>U2e{d!=iF=D9PF`qkblGY za}PK7Su}7z=AY1?-QVB*qND-tbtH5}p>NWBZCf_9f4StfNiE znPJf=!!zJMDkSgw`=95BTXrr}&guX4lOf!{gw}5=ITNwyf65x|ca)ql z6kmZHis`Y=sK%`*isCb_GX*&xl$?nuE&}MzkVE2?P>$}jR#8`9jp*#phoUx(Eba;_ zrMSS7>ziA0Cd!^h^pBD=Mi@3qJ8V?2&qIy-4~04@`5&AKejwQ`i70t1O7>`(a}?GP zo52kkiU@yT6=3TDWXx9qj)x?+b^MYQ?ChGT`cGL~_$MGYW%8HwN;!Flc8p_moica` zMz=EmhY9}vcjNg)H+8xfnCbdxt>qVI6D)@Xz$g2SwbmZ1gIAU%7bS;~*#Co`-(H5g z2Sj3yzTBj^h`^LjwREGti6XcL*)56q<42klA~;0!x>5HS@Eane^X@*|;rdXlW8cL8 z6HW8WHZB+rdNhtiWKJ%c(|H|XW9m*{6mm32J5C!Oiw6O(@w74Q)OBF5xGV58l^mw& zJkYml9-9{?`+2VO^KY5ish#=1fCi!FqEdyhd-g3zo^3$ZW3&7Dvsxk9ICoVAhj;G( zUV*ptmSTY=Kcjqbf;S3obrmjy<7SUT^6ZGP)>hJb8EqXAXpO{HjV!*J%=#YmnV6^=g{X6JV>Owqh(Mmh@#PZ|BFX-}C5oIz z397KzSij*Nu!zdDjWj+h1Qy?$6&xNxVKH6|Sm48W?T3-b^J{PNGAhsIwfNzKs}2HR z1%^!9FcbQrY%dZU8F zryBv<=>MnC!iW8|9~zP8*8${ZC+`Ol0TejU{vBH=3Z^g=_Pt)g;aeyQroS8o_;5hb zhnwY^rs;Ys@dx6c1Jaf1(2wI40g1bjr#TwQgJY50tqYQEC8)HG zet$EZ!OukSORs>hQ3MjVAx~3xBoDMAxf_pUv1GHNpwd>_;1>hOk^Uq3rF&^eZX|6H zkL1CrNbZ&jExr%5cpKErGg17~<+MQ*ZP1$zQCYJ2`(KfvCB#3Iww+Ad8u_Ioplyzk zBGV5U8vHn1N_Bh9LEuT zrl$I=qA2t)q7zm7ziWff@cxopBaK5okRb6iwlo`1w+78s!gWhxU)n}Zd`CL3y#@7w}70O62Vbwuhy!y zk7(R!f}x77pS5!mK)n?AqM90oX_)K^Q63x#2IpfeyoNqbb*I)L@p~k0*WNbn!E64h zbK;smEBwTDO|btrzxYcX{H9X>=|t+B#6svbqG+w>pD0t!a7gs{E~V&* zHS_?vKuquj&g zj0~FxcM_7_E*G*^74-yydoO8~+@PkFcveKjC#I~)SS3oY+( z*d7dmy90Ky1A2=@^X%t%h3`gnl>&W}?l7}tI1;WqTvfN@7C7(ECW zKkp3!eJ_XWdop9%*Yx=p_B0Eb{napC!ZUyL09iOB{)ZuJ8)Tm@t>0p!jnn-uNw8tOYg z(4=^8ZTEbvwT!5Cmn;IW89Ckdfs#octCY5CFRk^wSL@Ede}>s_2S?Z+B>W#7S=f^E-lHMoLLb#JTwMNf>^relpm=mz9!#BkcDxT=&JQ=Av+1W5gg_H(e8q>y@K* zdG+Z_A-FCIAA+H?AYjD>^DTBK}e>dymddsQsmfhfcV~yVTd&9>c%r8nC z+#TAyrweluAI5k;f6PoiW9|13?qSdNOX6#bgCuc+C0G(a9jQChvR??1#3euIk*iSm zsn}g#KKI3v@{ApHAa`RlFQ?$z6v zMxZNy5uDy6b|;68g=Ay4PEVooH$)fL{Iu|vRQ`JO(EI+2@bNYBw^$eEE~8XoIe+=< zR~96HUtJk2f7cs=d3nMM>*r zbGkY_oB6(6Ny}w(nc~@%8Q7|k;z8E!3;Xevai)^id+fi;MHLw(ZI{hCBo}RlKfZHR z)t9t(p7S;8z_hC8e+XGit#)Q{3_UQ@gV>ESW(-59^z+t@({n!?ZVIbVR-MYmqWif&QEsd!DmM+)Xzo)eTKwZ zJi*_^;U_i2!2Kfr)Zb9nzJzy|2k>7M@{Z=l{v!_kVAl4Y~jOETV(_##ZAK;|bFjMgY5q!H+2se)*aN z4+he=6W~W|ghoE-du-6W|6D6yo#D|-^nDckctra?79Qo$_g{=7Kd#rl_rRkln%;T= zUB1}VkS18tkaMTK05lDjebboKr;?+klJZ=*@%2UpIo-VTJ?h=x_3--;8Vz!C;@#mAAK%^uSWx_{~u*Y$Gx^mjLNn+ON+?lwii4J*`@ z>MchFha-lCXPm(?;V^k0IhTJIqeJ-K&Svnf$}TVz^RVd!L3sJP&D1aK%y|zWj&H+$OTA;bSd|f{#3_ z;#sv2{5vjB*TMAavElT;sa^VCJp5)gy|3ce@1^s@@29s^KE@LKy7}>Iehly%G*}0} z5jlSme&g1t_}#JM{P4^Fm%99?o>mlm-EtMb2#Vj7L3-=|ofn2*Dc9lo>qb;yu%{ra zaSZw68e}zQlRvJ2^SN;n`MU?Q8gmg_h=-yALvfd&>2~mdDuxf7QWSjOG8K(M3o1DL z?Cm;8yfP*niR@4$g3gzlN9vw0=Onjtzm<~b!t;+Q9mdaG9u9@?osj-J)<2GoXh;7z z_^K+p6Hh7%9{W#~CfCfb;PB&C9h%757hnH)WQ4lEkI-8v-+xgRz%{=s3V!z)70S{_ z$^PD$rUT|7;UelEEyGp)Xt*AH9>P~C2RiZwL8^)QWZt!MGAwJg51R^5>yg9mb?pMH~B&tpEwV%GCFvkDA2b|zTb zyOh1msZ}vk>*xXe)~@6L-ff#dn3Yw+bfmxQ?`(kD*_EWTEe|#+sqQ=%Uhxz}U;Q?# zf>k6_udA(JAI9KcF^s~0W(I9f z)XRsUi})nd%W#lOU`ehgSP~rRuc}?dC#$e064)DOQ2b>W{rWsg##IdeH4J}Rc=+#r zFn-QteH_dr_|KsE18Qj;Z9T-%zKWWZJeT*(ALpT8Z49$t2i52Q&>t}Ebn|6U+P>0U z(rPH~&P*`IIe0VY%P(n-C^oB)e0VdL=kkp&X^jkgw}X6_L6vktHV&EbHUu`3zmG=; zTX-(HN7vTvTcB0pU3kh|f1#Q+Bh}#1t62$c>0|9~$1nfmqX2hsWMblZDD zD&<@g5^M3OgPMfXu4=sA?k6CxLgHH`&?Le%KK)Y=nh(!ye^N(Y03$Q|n?0WfG@6n8 zu;PnE$`0f_xu82=IryeL7np^P1et}dMDhp&vU-ZHMajpIQisGH=+s{1X&H*HtVM<@ zUnFGit`D*r;n_2q6#UCr;*N*QdIgG8e>$!}&kZ)Y4%lUA&{n&+C47sJwnDP?zd`0Ap3?`1iG&Tg`>6mlUUk zC0EPq4dJPMVSC~$$C}~DlQ!NAsnTN8M#qMyO4Ayg7Y_?Ey3SQP^lzPWvwr@C8>w|B zxIREoa&V&m5A)|YfTRpShpj*d_XYN!sMr67%!}54l3xE)E?)mBdi|ftxM=;S>Gi+j z;`N`Q*Z-i4*FVzhzj5eA>pw@Y|M?fM|6E=9zj*ym)0O`r7p?z%UHQLw{TJ%WfBHr1 zf1a-VpGW^0`s@D~O(GFm$;V7bdZvWs*=aA7_v-ZUL+kRuHt-e<|H>DCdi?TpjQ{4~ z3mX4cefp*Z(-*4chu0grT^-B!ae%;|!w8!%tpDeA``E5MkY68oz)8YB24_|3=c)$Z+_W+c^;l>%~asK&_=r`ljF#1jX zG>Cq4rv~WvZc8xzy7$pN=Da>Dh<@=i{PcUkdLi@!`5U7zfB72k75`u5f+Z=Ve1RpI z8D!yxKu2|g*<3DI63EAw;jhwy3RhMNmIS_Xf#ou=p9JJq2J$})(_ac-;W^j8)V~zIdFNdJ{uB5L!u5Oq{Tb1Jo(d_5 zZ?|L!)CWd=RxVi52q0GGMF^&eXJ}5r6N2c`KMeT6hZISmAz>*+9}!5DBuH77Brjqp zC9(TS-g%Fz^-OH{e)qqDU-_TF@7)_OK7M2MZjSv=7cUO;-w8UOE@0~y;BvPHmpm7; z#?P=&|BCp03lR%fr~@Tn_RUh&kMEsbih|!LRI!?$TfyPoJ@+g4>B)XB92(%SA2vmc z74IxoSE`wT^C!R9aRKm82!;Q%ehmI~{n}xRZ?5XX^7Bqb!T2E+_)T|LaQHF;{8y9w zz$XvzAD~%%#&f`b;qu$*e}m-r?!e%ylP^qu_3l5e_TPW>M3M8{r`W=y?uNXMe;a26SA!tGI@#m5KA?tf4!&u*!aTma!=Pw^>L*_p<)tFzpfcb?N z*0xWdZ=2{-D0+^@JOtrMj{Z+9#Lq?d9s==m(NRN;__^rIhd}&Xbj%P&$XYBAa#c%0 zUa>)sq7$o_d>QbBPRz%qyv|{%??DZBn;Mia(}(HuB{7te@6aiEe24L4=TG0?gzo>n z!TrDbf3g4BHKF@|PjLUQzL5R@UGgb;Fx%Fo!EMN=m*(roM*40|!{~8+ORu>5bq>$& zb5O&hf=iIEI$!xTJN)@J%YgYVlYT%zzWIu_6@(GbGGJML&{vv-==pb7@cbM4zvNG#j{!P;3}}Ns{xe7C&kuHL8eaW~P9O8`e4WDwq7G_! z$z)>*{vqc`!ud`{f3(T0B12B|-^@pZ;7kH=-zW8Y{X?Ur}If z&<-ghb9w`tzU(Ofyc6+hecFys8|&=wex{S_>$5Rrec#_{tna4S3try^o{wdr^dAJ} z{lOP-K4!Kbe{+4S_?sh*by^Ws4{7|3!$zwrBu%unA9f=Q4yp6tZnHjp==|eb$N#|m z@g0<>@0snzV;k$*txrGaijMpLCbbJ6OvNDk@>E^eaBkc;WS+n~Mtt^LVqCMPL5TJS zfre;jL_mnPGXg@i>HqR_F^BaF%8LkTNrWOGST>9OoXW%FNj&Xib361LLbMP^^qEVa z;Pnn)RDUeX&q1oiH7Ae9AO7bsv;`~Rp+8Yy7?6E*&dK9xQ(zw26w$BcMRa~L504ZE zgu;MO^iE;`400!Nf@ePwgm2M2n<6m*>d-`gw1&fZ3VatwzGHoNmF4siS~57Kgq*_*{z0D!H8W+$Ch>MJ-YxLRVYGFxfu_WGxlo(2Fp8EU&MP`q$;I+4Qrgl804O5Y<7A!%8_xuEuvBq->QS zl+bw@BnlZ=F%7&vp1zh+wX2NtFQA25+kM_YEp)ou`q1fE{P1_3n{yb<`PFM>oWFM` z<~#!Q?Ql26x@I}tO`_o0%Y}eZc}p2x^?jX$U?f2B&75tVe-YOq1c66PbA7)HF#NA? z>0HA*nrj5i8`4JAhp?fV3u-<_uFm-4`aj8qDOq=K*eBkTN^13Z29 zHVC+P~sz zMc62s01q$FlOhXwY63B|h9i8Bzo9_~@QbS}Ql?o0T?n5jOJEV?TS=K{4RmqH)kr=- zSeGI|-Yv1kG5f*#J%@KpH#1VS^^zy}{09lp;80&KT49xc?7!B;y1>e~#{*;$(LKjM z&Ld@{o_s+jByVZ^ihQoFiN3`8fQ_KFm!yjU3aq1*`vXpoAb02Olmc-i$OjKAy zKQZ>S0#74_3Hs-^6ZyZ5WzcS>EfgK@CYzwTB8Vg`suYT*Mlkz{{;*&yIS|xoM;&s# zUSY@mgH2N2qV$)pUN_L;KGRiDH}m=cYk2a;9ZinpUBZID&|XOx$-9sm^=x7T>~`YG z35j~eS^V|mxL+!=HY3NZUYJRNjH)gNZ(*4st9hY)JxY$%qb$_!i6DC#lhUG8;HaULwY_ujAnB z3ifqEL`x8MPp8Aa!-h>_!=}?1!hcl5qVLzZ zL~^V(P*hD3GoF9ewsr9bPv%dNR7>+q%Q-2z%+)<`o1|KfzOA7`{_l&D_X#g#YMKV|P5rt8rB~8xu{NaU$@@SviQ!?V>2Hm+KVm)kNnIo^h59PV zNL?bXhQG%kHF|j(kit@?jl}2;Rw?;Mf7kUr=&#C%bu9>{>l(|rP1kZ9XB53y^5?K( z_YZHZ;c(J|mST7GQ$*}WnZ$0uW)`>EG}^%=TTK#If*!4a?}MSzwRe~AIsE9o!3`w# z@4LM~ye=0xwu(Xkj*AW>Uf-kr=Az#pXNcEACSJKP;8SMH*VS9%C$fQCGQa^!l` z4ptaDxJ0ZC?q+Wb?B4ni-ExWOqub^ZClE@lV3H|`!Cb|l(A9Fl*OowEZ$tE!&Q-qF>9c%IGE}2jT2vR@5&eu*%hV z&mKa%$chvq3ZGY&6Z)?eJac%a+>_zS>Ien07|QPJJs;_%Ts>ov&!5*D32r)jqd zCB3?)6`mfE@AvD@Z-F6wAl|MV;2>-Vt&5EHGe;)^o|$+dcaTTdks+mor--U)S; zXqz(y>YrTRcK>7|4l0=L4cgMgIHb4VS7y)_W=TkSHWtZq#Vkn~ZC1VZ=6S_m^D)zkFzDN{sv?__8%N^4rBlJN>C{cM`d^aIYMA8^KrGB=s& z2Xr7J&-Cu=YP7F;O|bd8o(!#81X~%m=}NP5@XU*#90WmEEw}!44Xuwe;8|$hi9j;N2-;4 z5uly%auR)Xf5u(|x#J;SoejG8;!WK{>$9E<;~#9dKXcQ!hs|!|$Ge|be`ZO2OU%-A z|6q?El*QoicpsEWmHjV+r_AIRwDGKuHI=gsdh_wBkp4LypHNiB2rSMt4q?wEs3}+x z@dPh;+(g}_*~pS=x#y8Q{%D#|nxK_?PCgfhRLd=oJei<0uh z5ZZtGe)6BZh!F_53 z6KId&e%*-ica$P|IWuQqxkAYlaRic&N%A&H-W`-b?rwlry$5mvv2R$bti4FJeCA)p z;k$M*y9Zf|>htgMf;*dOH{?zK+HN7*O>d|#xo=hv|GI8Wx1p)c4C#7(W5FFy^dF@g z)%As<=PjJ6#>5obt7Y`JpKwUti~n^ORC|PSrt)%-IkeUv$X_CUVR*g1IH0PjUCl@IQ-5c)$)P!V+uo(ehA<*li7;5G5}Vy73Z~DF+}4? z)cB(e4xoEF3Ji(+bfw}XKQgg0fXGC?V2}RRn54HRHZvxxchqU*gU@hKq-J}IDutpd z=0<4)gD!DI>dA86b*cMEb84|G1c%-WLgMXRVH1(=mB;^;F5)KY^XhQ4n!nqXn_6t* zJ$JUC()A3tPNX2zno9r9hf-;NIZ&wwtdVRBEYPW!sKNcD|0R_kNpH!9u1RcxKX4`o z2h{RuO+5KA=EW`j0!VZ@D>a{m6h{JqhDG&)#88uE>)vmc>7E@@ol6)=g=22ifIjah%zKIHH}ZVR0i zMo;KyZGtDtgo>orz?dF~`jCQWD;IntuS4V&utyzP@Mt?rx`kL$P;Cu)wEQ8)3N6}) zO#W?}U|uHv^_;l@x?Z1MuSd(?-qHLahZlsrX#Dmb`7JyAZ!eMGCYpcqhHtU(!r6xK zEf&(xh4s%I3DbXsrszQ3A-SJO2Dg^mMcWA6eS4iYL71vNEGeU|YSf@sP7EQW$z+lQ zq)fFUY z3*5j46zG^cZnuKLd*f87leVK9wRgKEp2X`05^1v=$# z4LJKugC2i>rnwXO1OKMM9lz!f{A3aQ(9)&_hAo;aW|Z5-VXOc>Jp0rG(0Rd2g-o%4 zl{QqP|ICBAL;ijtgBY7rL?=?GKqYz#Uxp=5%B21b+W><94d3-gO77 zSMCy7GCn!4ucqhqCG5N&M&wBbJ3nY~Rtd`Br?R~x$Z~JbA*a)am(bH`?IrYdnhPVx zNrcpX$G~hTB_-n$Y7{%je^B9XE|gqOVz23M;3Ip#)6756kwc+varTTl-4MRNNBz0q zdH(d@8FKzy+js%zPZZy>KDCK7lgjPlU=HoDi?N1B}G6>2G)>Ybc$`9 zzq+}t`sD5I&$AUF`=gv}I6wc^!(szCxBf|0n_pKl|M61hKPLa1oLWSWrW75A!C%AjXl6VE(L6tB}XoSP;K`g>SwY)jtZCa8e0UvPJYk`48xmyZ8$d%Lw zsoH6M*s(9vYeWf3;9L`#yP8MTx4MK?$Lyh17y0t{2qkv$iq%AQZD=mG6Cz=bR-lv6 z(dolve>(dD-n-{Jtrd*H`+-saHS@p!DxH=(rk^q8A@p;{Zx_JdFY>MXQ)G%+CMHj% z=Z{f>KGgp?7|x%Df93M|vkkg=`YsdQj9?8fBybrO(jS@q2-)1fo<6LRP{tw#5}&N=|TDHqvEy z^Ka1ahvI}1Nxa%5CWb-ja9vEqnR;gEXt;n^K(fG>w0`YZAY9_wY{`LRPP953{B}kl zosj?AL*@VR3!smm_}2Y(W2sJ<`*Ji3hc!~TEPG*DbI_#SEY-*VtF=@g z(TbS}eK!Jqmx6v*%;>w2(RZO)zsm(r?NUbbD@|q4%kAPVATl$Ma(4`b*(*^u9LePw z>X`bHT%AA7Xg`CHYFRolkH>qr9ERpNIY^Dl<~dd(U5$EnBBmJ!PNw3i0uRVF z6eD^iunxfUoODGZWtNo)IH!TnUjP1(!#hURYa6;5(XbL3Niqn6-A=26#?0Hw;WORg z;y;xP4DcTpmXsln&ow64Wb0%Zk%QDHc?*O%>SuHYbEh(dKEJ(~?z?td4B+Z~-^9Os z@txMrz@b#&#bX1l$)HFfQ#ha7%nWWBZ_vP1e>dCOJ~FYESyL|?WGq^}pZofm!8IfsC}y6V{j~nLQf261QHtymm9ECcPAOiLQ6S4g-40XIt(P2K?tLf zk=#8POm14T`b(h&q_v*KnXhG}-oWPP^@}lv{$c>QR;!ln z;y5FWn4Xjn6J^{IgX4`|i^BbHXhPHVxvOau);n*L^CSkTmcQq&<`hXBhg}OH49UDE zNN^exOmGs4K7=SnFtSn=yEqO%do5fLnK;BQ=HZ8~gSaZ6DXyw27+1Bu{!NI?<;)>R zOV}M?^q&quXjK&x0JY!|m^XhLx9KKRXq6Wa_!God6|)U;BGvNq%rzV?n*u9xLSR){ znvv-OkJ|LkO-7~*z32>dg}~L+)|oC`_)M3%Vh&4lu^NHco^K8_|9X8KED&%SEgs6{ zU6F~Ef$2uTeKD+U#?K#8=f+ZY8IZ;LpNydK*aL+Y=`M4{0&Sl$u#zbj$fdgCS5zq! zjfepAaSV|w0QpI>p8M%~P8hnVYB_!6L;YG7X2_>S#P5fh@)Mu@@dnDOG8VP&zqpRuC@(8{V{_sr}3q2KY|3iH+B+p=%`)HUO zIWr>lH}SLY)oVqZJLUOX+K?&?Q@?Xtai>_X7(I6XA? z@>`71Tx+Y)T=ET$i-gQZI+KbUx0anRtJ(Ron#HbFv8(D@c2(WLL>EMY(1yC}80A0=jRbKI z5X36Udc5}37$hGB>xZ8GNqP)Oi;&s}9|2)rx6%lyrNL~7IV+qjl1=Y*1o0Jk*VU#t zSb9B~fj_$%WOcDgRxb_8>Vn=716yp4fdw5Vdh^~j!T4C6fK-ci+Q)4gV2**E`A0BO z;N(E6W&D$CXn(>xK}@Hz_}6hP_<0I>(&i0BQ68Hj=HSWvVVZxX2dz4h;t~raBlpQ- zt2)f#$FBr=yI#+qj{fLCE-!fY8L=U7ibwD44iXiDvGqtPS~-1RkxwXE#svpL?lD~c zwfLp`hy*GaYX}0^+lYV-DVrfqXOY&RA-M@D{R#j73HU#QI$m(XI}qkwK>0k84C4hx z$1F1_5Un#h*5mKSa;$%o!bt7;?Q20g+Lu_LGV#aRF75CKki1C`Tge53U*|H1tdsip?(Smt|0Y|G?I-*9H?x0l);N=YFEz+z zdQ2M&3|B3Vam)w2WD8s&tY`ARg7Jh;4`%^$Bs#YX=ppRmxv_b?LHepL`Ii{bheo}E z+pqGW)h4&!*uR6&R}f7Re-J67b57>+l45!EWG-AI(iY85vO5`V#1pLyN?q1H%}J9l zY3z3E{g)s$fdF&1c{PVWi=)9?t|`H;mVobzG93*&Aj;taz`5KERG$j;%jWI_y|7iw znvq*M|Euu#mZ#QmMmNkhX;$7Y~=!W zy?gm)rcSbmFsjYzGD@`!9J-a;6v5PQ@_>;$eSIIlhSvU@R#J|g$mNj|_5BI3Vw^-kWSCzLeGkw66bwTBXF63_ zx(hwbOY2%6=3ku&SHHB~^LyiaA?Nq51Lu9eFl%Vb{*IYq0v^wru!rwZ5!o8}z$fj? zzXu~Pj{IBCwUB=`t>xcM;pN{VBa6q!9RDlDLxOf7nYIfhh7{5I$f zrr3ynasO)Q#d`|Ld-1y0Ld5VRNEv6usA8kVnQ~RrvOg9(YB{}WN;;P5iaQNCQ zFIX0L%;P~>?1BA1*T`fs{$wc3+gF#vLx*qWvb}z$u#I{wL=t<3*6ZV7&rUuQ6`>wq( zDLeg})>8J7Gw0!doA!2S{?peNY9IZd>3?6fmVYBVtN)GE<=?ss)Bh4LK>xchME`rG zwf^@j=zqWd5A?r*bsuo}vn&3m`rmIM`rj2T^}jfi{`aR){qKsF`rpI4{&yf${~Od& z|9kN~^uL%k^}lXJ|GUhr|7j~iWzAn6DdRT9wbuWfE%m=Y>iS=5sQx#+ZT;`KS^q2j zztjKxp#S+htN*=sf%;$7#nJ!X2-W}gTtIwDuZYgXzh2o^{A&Tvaq?VIM9G$iD_aGd z_=mR)HVKBmQXj8sDI3njP}JIRF|f*9Q8eOU*O=m9=M4`R2YY3R)EUa+VDFk@7CYM) z>%PW~Q>d>|#EDOL7#ce?B!czI^9YSy@-vlbfB88#Y-lVD+^^-p+1?I@_6DP4$NWsm z_S&CwJBp62Sbd(+u`~+hlHIMym4=*eJoo$jk4-B==(p!r7eK#}=Nlip#uOj>QF%yw z?3ioYijN(5Eu+#$K4>pK)_+aM@v$}<6Dthnen(g=|4#U@Se)}^gI<7@^Vc{3&iJ5d ze-G7vc3r6cvx#q0{|Tq}nB>b=v+|N`;l2ookCo$F#>c|lp(Qt-?bm1TnUxzuseuT` zX{HFr5%HlBjwVIM93MM^N)8(P77`vi?RbM89{ZznH9Z1T@y3jLEikCnVW8TH0>I$` z(;+@Km2*ue1b~pzpT@hXmaJb_b9lg|aFp*R2b#|mF#EYsVi!jQ<6m2zc%k#1*TeYj zw;)(H{PBgm?FG;c3+4aH|2hAch4TNfHu-;;&j0VW%l}t*%>OYLga6-b zi~lPwD*yjAl>c}9zvutbQ2xKFE&jhs=l^#)%l}vXKK}oAkpCrv|EILi|5MxKf8Tv; zI6UBz{}=qfvVHz9znJ|0YAFAI@jvJPEus8>Wt;qerOyAW+U5VD9rJ(e#o+(f+v5N2 z7nT4263YME{@?Te=b`*Rq%Hm*qVxZoo#p=_zmNZa3GzQO_}|$+|KHsv{})z%z~KSC z|6lO`^7i?^>|*l&pF{b-^aA*Q;_u6!IRtdIdSgibOyc17^Jk(4GxExKqwV~eZ@D0K zRbA1k{26MkzBR#YtzKFPrm3gKWkE_0Dnu?YWu{gB%ilWAfAO_;R1|eS|K;V-{Fklg zEk9~Oe)NX;lGRLptYq?IrKzHbNscT9#$`D%16fW?g?aCx{*dLP^|`#@dDZN)xN(qa z>yc5rOkO1V%=JrDOZP#H2By3YB4#b~pXxCs>skGS3SH#HAvJm-6FKDXO#^`_5(rVm z>2A0->0;5XCb}T|cjh_f$e2s$YJP*UIwn7Z(rNQghIA^w6{J&=7Y~r?wZIjG*;fLy zuhzv=669A-0{N80^7m3r`Fj;6arBj*VAIb?chRfDF$rTHpQXo`^Y_|+0ry=BA}IvQ zaM?1CecncH{72_5C_i-C;?VPN^M&Sze%E$>sFBpE2foUiSqK!X&TLe&TE}iMsh_$6 z$!BmKuU9FOGYJxVEyN*DrE47W)Vppn9I*-6UMT!h6S#s#4%x+2++%*7 zX1JRY=wP zg!Bvaa<#>JU={U&$y10#WvLx9t(O{Y^{=3R7tj)W!LTtsa#ar?w_NehGH%m#9LH_# z!u-%tW55rcq5Gk~MQb?xS$v2O`m;;fofj?aVP!68NzA~z>l;{!>+Nd}b8V-Sh6^mh z)f+pCDe~`bMWS%NjccXf8Ug$nRKBe=I{eVD^l1AlzFp1X0~XLAE)7=w@%UU%BPG?E z?F~GNRLj)#HF`NCvdY!$g?=F~q>>i`V~}dWz7Ncg&xXhIdl^2(j6h$cpd=*Mdg0wj z@-AzDLeq!z{HIMHayZ%iK2RNfAGLa)y;YIFio;zj^%~R%arHHoGtxC-y)uVMF9zM^ zjt%Br@cNf^LO;I0W$hQe;tP}Lo=O6t!)o%os+N0f+qq3|u$z!L<0jos@EkA0z{hHTmNQ7#|ojntHnKg#8^ zz4*-j1`Vkem-s1%KcvsDH=ccsJlhMYDT_bK<#9DU`NfQ_9KBYeJx%0hyx~URsRR%} zs-<|s8V)~nwNbOxX?3SO)Ysst1T#-1;Ad;euu(JLIm{tBDz_?^cc+XtKzO){fiS%) zm&cO`2nOEZeEO_G^Pg;U69GS0^6k{`QHrbd6awTv6PNHw5hm$oD-^@~)ZP{VxILe2i9T6&9-X z|E+>mq;qO}O_lA)Q^~vX`!M;OfFGj(<@XAinpM1s)hpiUtTM>8io+QkFj!=wFVH=N zS9JQT!(Z1mu;MAeCSpm5ivMX_2sY&}jfrS8f60)^EpnH#y~v~G_udcG2I z<--J5yO4YusVT$HY~l10p8vYX$EDFX@oV=UqRkzk3YwQ4e@mH7o&+~UN**l&B=6Ps z(Kz7#EXOI86@iUD{Z%fHlB0h4Dwof{6b@G;SL2O~p*q`_`u0%Khu>_f3tofnduL7P zH7IV{qTivKuR#~z0IZUwr(S*c#rqsix-z81ZIX?#3OP|_n-Srgg`c9a4D`0vX>+Ft zHghbnGlmvIj)7oc`!@|*Vm(r$#=b@PY6qc~&`c$ekP_S|<+RRYqUQ+Iic4boGmNO> z_HN|xn`i5Y{Kd=8YJ@+oFyd`9s9b0{oD%itFLQaMq`dNFF0aSywv#wTg&-aOlQ!hw z0(w?%u#z!^&#O1t;ExmNp+-sgdoB9|D8;!i*hdi*JeT&uT28FE4*`y}zZkXB{_iZ4U_ajHEa z{Xz>xpF&zY{DJd7n|zsT$}|jqJgOK88OUPX^ZJUPe_ZRzDRb?-5=&-K=SWtIU?C z`ESHgwYErSgcVV3^@qkkTtm*fFMH_+&3kXN zgXSM^=koZcss?R+3NgQKhOBU9(2H;9@~E^S5~-taPa&k-t1D9Gb|psHWi_ifJfi>( zyjUdLkUE}c_LsZy-npBD4HfaOwGEm-+c?9ielZ=ne~lrq*$8YlIwOu)|AUt8P0=`x zduD)8Qi0UymwtSR7fO2da39VpJRK`6Db4m0O)2V`?;qpkZAh-bUp?`oCYM6{Iva9t zk1?x0&b4N&K?`-jPxmeqKY0X(90Eg5u-va*EJ&vyMJD2cSD6*i6#JTxUrb?{R1u6glN@-E>8C4#8-C6bj-bCFRvalHxjJ30M(Si9CGVZLd)A|5 zJS#szb-tcf*mU_bo72_Fyp+6eW{o6EhrR^ByLlEW zVFGZ1M3eP`PzDyz=7tCGht&<5LB0*; zsr=twh-iYgnhTXwa`f!Q#LA7(kSbA|kmw6^mE>wkJ_zAUgq3dOAq6Uf7>aqtQ^ect zLP;-L-zx3-(_~@Kb(Pe~d>|3`y0t+QN~VangYB!=rq4^0OC55Zxv~ZH&r5Tk{$qX* zI=w?a5%5Uz6fvu)CV!fw-p>nzIVt(j%n5eNzN+Q=Z&z><5hTYX`5=D&5`y9BJe!Wj zHn~Kno$R?p^bv>bL-HPd&I!f668u9oO|#1tc*5g9vgA_rX&$1Xl26U(Mzf;=ak5>M zkZSSOuYg+9_|i)bX-J*P6Aez@qmZA;%f*pBLRQ3PJ>ih65^MY=&6bzbW2%4B&|du$J#}!M5rMfjq+a)C=27gIh}64yNsUZIo=S&c zucB^ZNlCRy3bLllW$E!1QgYe6$0w@2ERW2?j%ItsFyNleq%igkwM9lwj?FhN~13)sl9l@nodb^+9V}L7|f+7@0@u9 zQZ2t7Ab78rJk>@3T5F7>j!Ho4EZ&_WSeT+rJ4X%Oy^8{(-kv&Hs0KnL%3D@a|sau-pqN>Th# zcgo;MBNjUg$u|YyFZ|a^vfhek{($1kki6ee(WrJv-DL5l!GOEXx`S=5Uebx)X&A>E zt$t$%gTP#g1&{oywIUXDap4p1wBz0Kf74c$9LUeVfc{)ScH-(`Ul;om$RR2`T>?--U}EaNv~QJWQaWxCWbgsZZL#y zK(hI)?9OIXAF|Q}q!idBg+s}wW)4TH<;*@NaH_F0%9sjX)&-=#gt_1fOm(P{HeB{K zkbFWAFd+FjfG#nD=0EmeB*3;i6|dO=h)!bn*A>r9p&MTvT5grOVD-uY)RvT3Tr*;> zP3knr1Z&jEQalOn-P;Sc;qklL*l%ooyA6}<`qnDA$v-fUZ^u8No9mm6ZZQCNEwlYW z6`LfQ!iW=)Y8iCH8V)!11^;p?SS!@ubb>SdO~~wTLbyjc+|XXK%4m(s!pBY7bI zIE;R&)4-Xk*u^-UOg<`6bxRI&NTn)npD{>vQSaZ)EK^=( z_0{rNBCkY!1m5m?k5akXa8T!7*m>Z^M2fQjDXBRqd9Sc=yV0pbUs+DMUA(CWAzF2= zc+(b8Pmbb$b_r;3iK%_kh%=GHN~3UH8giqssYky#_6|D@Z89XyeoyfgC zV;ho>;v3+Az=0j1j_O_N zq(FCCjA9>>o2XfTm=+$mIkixWdM4Vg-hL{ru#unDhkSPR^nb!}Txy{fo8O<7U^bTS z{+=g?fjUzQtW7P{t`s~n2Zc(Kz-bHS{V0)qqVmpGZWm*EWP5S_qphkz6MNX>n>z-n zPM$d^t7lAy>UZ(wxB=36szA0ld1rEy?uc8*NCY{I>m7A}RO$~P(?(cbt-$(R4Xg)qs(>sq#cE;ee z!m~qNm!}n;9p>trR(Lkk6_r+aws6MYY;T~8B=03g$il&WIgS_t)c?AY=Qu}vtwXCw zm&+WdY8|DGw>XB>qWC%of0WYJfqF7qrKyTG8lQB5m(x3D0; z50N6Ld0|0jACBFCGD9NKM|2M8e^rg&8GlFv$EdsqkNM^Yjff7<8@(Vj!OIFatcCiZ z)xrV`*&kL`iAddo^!SR9t(S(BN%55uLzu*uk<%c@q2}?>4m0`Gj2^m58=&W17FqmS zw$HJwmK3X7T=CTkBQ`>kOL0sjv;J6nS30<4T>5UKI+PuHZjd3y7e{uHREI{lJYC+4 z~oz*lG{0|78VNopsuIW6$>E^Al0jv|uur7@V!fI;?Yj7U`%JN8SHv(n4 zyqC)FQ)ejRX9x>dL{MQbw2m(GQnTV2jRDN0)DF*{+j^) zY{663^I`!BE#WK;J54~|U;>is1dzQLkp5SjD1c82p5^Cxms8_ zqNg6;Opdz+(LGHq^VAv5x@zV=5`ol#2}pgqInjsYWB7@2hcwzAeQPY#2f}A||Dd51 zO|x;r!g;g>U%lYT?`E1$SqJ0BA19}nu52HdSQOkOwO>2@XSxcDPIcut*#$RfPKot(B5z77Bs#@j3+--oGoM=6oG*B`TgX`C9ieDF`N@bctrtA+Sm5NPD{z-K1*QQ(8eTha#u75GWhM7=h?Y&OTdg-7V$@|OAH^rO zHE4{mmor5osA~9hfOJou&OBcKXaA-2JxlPscF~xy3Raf&g=uAWG(LA(GjcaY%(HBSXn~0l zy2_{b*V!#BnAA;YGxrEzxR@K4z^PN;@DkG{d*{~wfdJ0`ro%*&H5jB3W*Bn z_BH<=9WcYZCly?X4!C_=s1De#DY!iqT$?&zMhhLV*{lQRo`AmSUe3gS#I*U%v~do( znpiPG+8Rx^xgHPkwZqW>To{h_A33IJx+#d%L66<$ z<2DcmNYoNfI^?7HmjE&NOObpiocT&o?Bs*iSuo&~HQd{|zfMDHwA=Z2N>@%+pEiTN z!=_F6t(4mUHBVqX!^iYk=jSIwfs^@Ya1;^c0)X^WHuR;lp>f3*qizZ9#ZPM-aaF4uw#8=R6<`*}(1qVcDd1Aw2Y1 zDYrok2jRQ^PHiBBU+I%B`G!uK-u|S^ZY||D#D<%6l)nSC%zT@o#r1X@ZW(0>Orrb^ zwrc@YH+a#@R46zTYEk?Nq|V_bc^fVzgsQ(L!)r2q-ks9#m!}|Zg$@(wh189-$m;Na zHfV4jtk*dl|8?XcO^?Y6iz&Rnh9D;@;o}ulM7M#Q(OpZq4OfIi&Skg*JuC=En`%dO{NTQToksJjD2B>ct-nAd=&PUcCb&=kG>Z3pyAETr`ELO1oP}CFu>w0$ov6kI`=zTFjKofN;(T6=F z4{2zJU5ue;m`Xc2&95@&b};;y@;i2Z!ty(et1~7Vj4L#~Ot;=cSwD^KVhlb(_+DY) zJimQ?i2!V3q(__s5~tYUh=*y#oJEB{)@;Ym$(8ohDKHtWZW-JISs zlOFME)ST)qP#M*WmmT$k{sL_yY2ObTYwS#Qr$qhylpX<@fn;YAjew*Eis;Pt)a3Wb-jSLy z=efY;+1~8uo8~;{>X!X{)3}@S2g4JxGeanuBIXo3rzO@WR+{|OswHX>tAD6RM=$HH zX+~sz98xWh#jN4*gwu8A=;#R)x*l+ODBA+PS;%LS7teXGK||`GDbF6}kX&j`07a^$ zR%G?Q_1T8EobBvoYdE~WF=V#=KZVYw2bd<|-Z0tEvs+Il+eKQmBBodpW3lB$AO{=S z%^0CX5@Y?x+RCpHUU-cQ8y~resHpfrA5O0VJ2?(1_r)S*b^=mo@OGgj?LL%zDj24; zc*6>+j_MQaR2qlW8Ig1?BwYni9M99m z-Q5p&m*DPh!7WJe1Omb3aCevBnh@Nb;O_1gf`s6H^1t8rRqfr}bk*!_?QXs4dDE}k zP7}5^N(y$M1K($qZ#c(E?3Afq8fp&7xK4WNn z#utaNL(!{uj-fBEuOn^qXI!7OfgJh48~s~_Qg5N#xxXL#QkluJzymr#0L6#D#@j7j zvM#ApIvR|lPnZv!#{~3zQs_WL`6Iv|x~FUY2aR(L{}doFAMF{W4Yl=(icoKd+OAcZodq3Nr4^5E3SIm$i}C6b!n0>VCM-89Kc&3HtB42*x=IyY9zABPOOv1yh`n&+bxcobALYLNjPi?(ic&Vp>x}q8=LYCSzOsk zrByHxgE8x#BgL4;1vs#ZLn_V53!^|iGQ*>I2tD0bSlm_Xvx}@gWvm)H{weXguMLsm zviZ$T>#DR)n~)}KY$f); z{-(v;5=^cgP{B(|Go;Dgzg>Dn4c8atZ(xy;)cVC29ho57?P)7@R)2&Zs9SQq0<@uV z@%=NJcVIPragFU|vYnXwLiiw?p5p9BXE$#Oj1DIlt|V4wes((!S7%~K#3Xn662O4m z&Z^1Xt$*pG+T~AL#2siUPs^=hROOVkD9|pVhA6!E{qdrxZnr{IEuVgI#i?f~h*{2f zT|*K+^Xz5?M~=-kU}+`Rw5umQ2XZElgC`mkj`Wi;)`TGbU%-Pc1`|YBN@a+ipK%b= z-xoj8yMW_FmD72&M9DOj0{mr!bwjqF;|G46|JQ>K zBL3tCmH1)_+bg6w&=CXS9O%hm9~R-DQ`i{&oBT&nl_SL%I?qV^`Xf3Zw;kMCWW6P? z?ACet$h%dzx7$Ye>eVr)fPo3N&@kH@X?ge~w*C6i#ri^<%E|VEiNVmhE@!MQSlw%U zRU6E*;~(&5X0`LCJOkK5&_!I!!+$tV#Z+9Dq`re4s(y&`00G&P;534tn z2aAvHVX#4V?7%W%&t;y`v7$9XXf!pRG|A}j02aZIktknbGuk-N{Ef7Xxc0dvz2c2UN(nGBBx3oUcw0Bc6hP=_(*T<0ask>r_@iqUcRz{T+dw>riS(6XlQ>Nrd zUzKXyZwm>&xMRpov?C z?zHl#(`raYUaSy1{<)fz(4CSks=i5J>&MG(CDzu8gJK%B0=CNYux*?XU;Wr=c>+H2 z{l`X(KmAL1EjFGhfo@dI@K;Qadu!9`3h0ow^^lNdKS2Wuznk0&Z0onH!;)rs2}_pE zHY@S)qP-40P~gIEgzF=VPy2tW!v91U1?+xCl@@<&3om+I+Z@nVkaf8Jk2`L4ad5h3zj#Qyj;(7`|=RNHG zfzqB>dR*$eu#Cpgz%7qSOCi~_Df{jd1BP_Py3+6ozpv~A_5qr=mvXT}wbz0?zQN~M z6e0*q_lCU0@1vE6rhrbQ*!_R)9Pzf*yITq^lp~s)k)xBB+rPD_dvPdWy{J>hT(fxb zjZ_sR5lIC2Hh~RGs=q}O5lU_`AhIFzsZ2ERkEFL^%M)Oq8FBsDMIarMd_WC%woaOe zM^Tl&HD8Eb9`937-g!wzk(76#HXG=Dmv!ywmLSg5IeG2mK=)$lQY@_Z$D{;qAl*)N zvRovutb7{~pW%m|=AYlk_2!@@^W(QJ#*&n|=^BA5>QlsCu6{k9#wF%w9L>a?Efld!#S=)YXiyiC<9atr-x{+FeEh4+`UkB5z3A>=CLST>{R zD%PU9lBwpJ@5gX=9TUHaP>Z7f%Lx67jKErU`>D|q`1zWCliU8_!qRCTL|*wklwKhj zQMzRfysMXq6HwCA`;_z?=bBYy#>|B+d-C8TFe=I+#Mt|R`@2&QV--JAnFzw7f)`PJx;a9qj9yCSEz~hfO6d$| zkxCM3T=F#clPOQ^Q!z*GO}yNVI^mu7!F}fCk| zBT7M@Q)PnXOJ@Vt?_{?e!jja7%#ho!r+i@oJ4}=fJG^R%=2+xH80S0k^PKF7>u5N>3Ffgsfpfaj{Hde-Aby0=p(S~eZi1rmZEM13YZEwp9bG`gU=(tnO`L#0$S zMRU@pcW5(yA*uFHcT#Z5vW#`PAQZ+r93zYeK*Q>XEAD_u~aq_TJQ%-1L1fAmw zL#ITBG$!Zgd3VuOfq_$h2C2P4wV3Z&g*-nGuQ7#JU1AK8es_$%sI>XRWS3MQ8<^;X zoJZ{+F$%qHd%evYOqjVPhN($k-H#_cmePF`+#-#+z6}&6tQ0XOa|=lRa9zQ-w@$9i zK?&NtKh6wq^Dyg9XSq-wN)Osd|Ch0;hKQ=F(&jpCFY?Sv>7Eh+G^Et{{w8uVfieS~ z-0;5N%e#IMHgQkY7194fLfdIr!`2p$`1P_qq%EL$??HG6LGHr7_os!Nj!{%qB!TK* zo(v6qR7L~L!Yx1W?3g|S(WQgm&o2$(Ffpvc)_2D2-%rtUa4q{7Qh{a#CtSC`ldUJ_ z2+#J>=UK%_&VRAtyndv5Zxg3DK|FYIvd9G2U_RCI#<>~kPaD4aET&y!$oS<$eD(u~ z%t%6ynYpnuKCo_AiMq7|MkO1md?!ktTNz^=mp^t%oy)xKF6MPk{WUgk%4x0l)BmI` z)y7N06@aD>aZn6+DZ;ZdquN~DRlzji((mZ^G_J0({hjU|a;MQ6_%=a-QzRyHWc0(4 zu>QR-e+2EA97=kpM0 zV7LtdBGE>Utn`yhAV7>S;Q+QB|tEY5xLQ>@l?< z&kl~?06NYGv?_Ti?uqWDmOOfxrY_w66(3QbBOL4aIA~D4Gq3Wcs%coAHqj=WKS|QL z5^Jy|fuCZo)e2zjdl1dd1r{fee7b5PdFPccUE09r0SOtbn z*`JAN^X3Ehl?peZgbitu`qTT_CPqVl#39{V?q569yLnQ&K$p@q6Z;4IfHTY%q@*f6 z-$a95c;N)U)qcegjZ#x(0zKsldZt?uJ^p0ECW+5Ou)XYOL#4&rIR(|SmlAR0b^*EM z`ar4}c#3Q)>Iu#`Vu&e>f7PF}#gXT-=(an0vF&7)PwGaRd@HHeV3kEio)Y zP`|;6mGkF^rvITS7WtxBVmI{{6(&NIKWal$JGmB9Lwm<+il#Qcl%0E+p2p>L-)k)~ zCYr_(DV<;3SVNfnU$g){=Qbr$tXxZ^3udW>30!LNn6ep6`~Cuo)`i6*>2HNpiL147 zGH7q0Ax+8KIO=)VZw-DbVe!f=cJf_&^WqGDO=RK_;gRxO^H~Op>pRUe`sFhk5$vb{ z$Ktb7vn_=zCoP)7hQ$B9Y7HG_qG;9)PKju4&2OC&7oEa*gBDON70updO4jAbQlb&z zL{0qoSLaF3KCW#N|HWjcqdiB7<#>sEv;l>Oi&s)j_Z|Bl5;n({K76UWLWuJN2Zu-? zHT-1(>Gvm!zv-luf*|%6InB<1bjT}duTbI$F6C9f#xB&0zxc@dt_3mSX?ZsSi6hGrotv+{Rk%X!FNfbK=#?(X3G!M!2d^biu26nJpbkD&nJ5$!bO{Nn1X7BjRtp` zfD13g^!t_TQ^IXbG!>XL1vEYqJ+B_K8I(S&9MDFm>Bf&C^Xt0ENOx8)KlDFB;IZGuXV?vcvm~t8{pHg4D5(0t= z-3tS;KQrB>92WnEm0Wi2xuiDT)9c@h_y5g=hV!o5IMx7!3Y*D1RyiByw>hr?*fV+X zxCcE|&^zwviXUR0wd!Y{Lm{&Ql=FViCCL6v@o&uXOqiZR6y>HQ(*e<|4m*fq)}a=s z>98d`wF@ldeVpb8-t3EEmvR|F#Gq^mnfD-gBGWQH6qplJ zOsM$5|4ZPvX=mPFJ5IfCswg~TrN^6o?L+K46XwAb=|>;dn4N^4r!4cLd<5a;?P+s; zs)o;acO0;LqLw!dd)$M=NsNaJ*Uy0b3UqEJIZj7_O;M2^$k`vUIv|+k7$TH3|CzI7 z$2eT1KY9@nYX`i> z>86M@wnId@SoOdZrO0`Tu+bmCG5qQSHPWV>QsN8oSsNX35}sGpdD`OnMsg2-kEE^l zkIbqbtE9)o#`|cy%|{S)lQCr2#bxWWXvIr1l4;SCX+7K_aWn*L*F2DhM;H5cKJ!0g zL#89n^hi+J(v;i=_2tkdlw9wnn`1UAI45}Hr&TyGPZ}|))Ud${u^$HGs{}@cvtr`} z6qOqpwd`=bvvWeVwZgsVnz&I-))bn!Sxk(gq`y-WN1OtbWuecgrvS@JAdvvLZ2i4p z1=(!H;qSxlhI1j;6@O1Oiom~7bLJ3YmDtSyAMWJk)9tFhs#t9oO$+9GU8XF4j>f+E z$o+(aTh!AteU;pAamL$8hT*_EIP*SCNYYlb51hHg6}Ek(_7valx_W`T4&x8nD8e|L zAxFcoWw7j5P`aIfua&^e~Jal{k%32IOC685TP046CPI?})d)swz znPmF*D#e(dW}6*YZ3FONB;jW~W5W4uKB!fENtR+Vd1*s~>!SqD9g0wtvrhq62r+p& z!fDae=F6!+xl?6VUSiu3o}0~7Us)&xxsW~7e!SVbm=T?eI3<$Ylhkja=xqB5Xdl+g zzQK{oVULh_cv*6aoh{7+jj#070FKLf5&VP2OR7Ez0_A+r8b$X53nBTVpH=CM={u73cvnNajoFad5-u+7(T&`rkQQJ91E&BhPgdTb$p2!Jkp!w&a!? z&`-Ulb@9p=3Rf9Fq9eld;AheA|A3<1Ti}7etk3s4*vwj9^j3FxJ)h}Cu^z1(6=Zxo zRdsV_SZG3$Acs9AKc@jl<^%%ZW@vqQSjqsFn_6zapZwIdnbDpB72+ca+i!SO6NX-M zNAv7iR-F-J?QdQ#Ce!AsM=P|UxGuYg%=xZ!?s$_4!n;PlAAhId&wk>c6+ms}%#CNH zD3Wv}3M1*_Y(G^$^dvAJeX0O_x<3jyqQxb;ih%6|MoeCe>9Q2c4B zCCP|>Bb2Z_0c=0;C3s9(>2Kc}x|SNIUETKMR>A0T4z9=U*}uK~fjM=tLa{7}y{QB{ zAYbm}jD^i3ccyKwg+F^l@I*!*8Dm&SBD+k|FPR>-5e1k$5-4b3Uiu({AtLg#bCmuc zj;xZVn55H{#{)!(h!Mhf#A>U$QcMo;AKxRBW#ZB7z*!)NA1P!hbzx@pL zKQUwF#gaJ{t5|7ihvZs_cS5kC{pQg8)&19@IyXM9>(X%S!xip~9%2OHR98PD$P*hq z|(XT6KpqI89FQ^@Tb#K!4KPrV3jGpTfDhGpT%*AM z4E88jRgC37%J@?zf6*;BmrDMt_4+`I8Nr%|w2x6hje3%{N3*8ZJ@%?Wb zTa_>hteQ*PU$=I2fd+Ur6=4AoC(S!6+4^pZxmoQydY_}*KuW#RIuIeg=E7l-$IHOb zvGVIDu|VhDpHm;DnD47>CBWzmOh% z5d$R9CmUzXe`Vn4_ge5sHFNwtY3%)H5p!kP_Pye<@vGO{=2*A(>E_tQ(V!#X$4H|a zNBj38)i*z839Rp4S027HH7~YeInuj1K=+Q9ovOK6K=gK1=-*vn3c)Zc?#XQ^=Pf1J z8xYuC6ey0*rpt8wB5>=6ftm3%@n3$e&^lU}r!KH^2Z zM>3i7u!S-EV8aia!crOXk^*Xu0yVSO%ieiwSr>Va`Q^}SgI49tgm-Yioow|0QjAS% zZR{&~NY#Hy@f?K(DaQ)d*;t|jnlaULEsX7*2`OBCRQ~>I&k1^Ma2)Y@WS01w}yl%n(kvu^fijE*RY3wj9RBd z6h?KE-f(6ADy_(g=UUu@5hUZu!0Z&Nb4cKT$>cfWz*IS}szIc~lBZy#VtZ2=V;J3& z?)r=q{g**5nr6G3+C!)g++Ini-RnYschKfOgqp2Czv^L(Rfb7r5ktlAz3`oK@??P^ zXn)N0C8*INfn%2FD4ywt055Buaw_i&HYBiP1!qb z=h)v`n`rlefhbL2p|(`A;y-9|n@@6bsTd&IA&rwWg%=$Oi5r_yH@b93*Y=`F6p!OP<@LZ9>q!Tf;B`00tM@U3#z|X|C(3pfZg|qU+ZQ0LAZiMiZ{<#3uFI zlE6*|z*WAzs?;n&rS*+)`UxF_oq-hX#GZ-=OJRbV_183-K^|{^rUgv`Ay4lC;^BOk znYxwQ2o5I-xupFmdlme1uQ<;bFrYrA>vX4BDPuQOvN2d`Ww*+IV70!CoTKP`CI0kR z`(U z8Zp0;*Ef-*n)3vXerm#E(HywW(0x|kpjh_2(S;T2F4ekpOYv&oIbCBr0?A_YZ%dYx zxC()oOK5F+i6=ro$X%-}e9{)UNYryp=VgBbyVa%AcmO_=R@KSt=$br0jW2PLoNv^X z7|rB8=C?k`x6-MBb@3CYj9Dj>!)pcio3e`ZNqQK}^w!Ug>yBr+CWIy-nPOP?Y3R3s_$GNkk-1pwz*Ok-GQ(`hGY9|bK+@*t5r2D(v z(Xy5CZ1<6!TUqQR0aqlnRkumh4##2jSE%QO?5=r5dN_v7@HBT$ue0JknO+#x``9Kf z&jrF&Kds6QxeY#gc8ZWD?`OFW7Z<%hWyuwg57j1J4m1h2>P{BW#OSA5AQoyS^?D1| z@V_vWfaptM7Rh@^GS6vC1tpCFTS-UdqjWixCx4_L^IXf&;@Y8g5B|8+^aso1k$wKA z+|lV-XwpyZ4rtkx#=YNyM|PKVv8)aj-)HY&m=(BaN95jBGYxOo%RM-xb`Mg<%Khcw z;)td@(6@&@9Ic9sT^s^F+Nu5adRQb2?=nx^Kx$czK{myZqe0BuVMzIp-lWBnrp#dh zBXUlZFi-}c(w%r(p@(=MF>XBs!Lh)LBXSN_Q^d0d9-uRdGCWieVKy_l9-@t@dJ!v! zQKbE6=mB(kor^W8vV^U$E*7o%>9z0F7-L(BRa;=QLkukS7WJp7~;DR zDh;h}NP0*75>;E5b5i zrQ*Tih?A+|$vdQ(rk#f1I5VF81P%!3kd#ynJY|65IG=}WH^iu%?PiNStR!d)F$$}A zlvzmzKdHW&ed?mj*!;{+AyWjH=(YP~JJlZ57W!Z&%}UC#7~`=Z`(T!N-p**->4SLO zn#nYNp08RF_H|z5Z}FFVgv2u86_K>>#~Dg5fmH?qBh%CM)DxFXKPOa=JGPOmXMltv z+`?MMcXm`$z;9ESLK_*W4(a=!EvrSfm+*YmK-K3x;03AE53qP>)74ZNeh&K3j9~Fg zLE?<$W1q42Y(`bez=Cka(Q<0ffos{bg{paf8yqqzl)q6IlK)wp7BJ_#J|{(zaD}c` zc%E9Cc~F|~p#*#a;N{yQdmt)N6KAMnT?R3!bO3quP`-5q^I3&OjGZ?pF}!?OeOmg` zUpZfu%5Qzhb?mrRZZ=(y6T~*aqg8FfH;*Nquj9FZ(2pblLPC+Q*qcQ{>BBzQ=kQ6N zFzAqlmhA_in*y)wUjgRQ|4_j7>F2MWwC-XI^8AP z#jh{Kz4?+!1o5g6LU`#xpBXNk?xxRC3h|=`77#;d26589dKexi58`ROHK+fb(^@a0 zbV%Fi5nNg?%4oR^7k_hD1izqm>`D+mI$=!>KeUXtvSM0$2b zKP9PBqQ<^?mp4izku69t1q&C0vF5&JiF$$~9HuNY0} zw;Tj)L+7}c6L1euNo_CZj=UD0{uqT>3j+++yog5)l=P=!1tXvap%>RB_WPiJd=C2L0`YwU51d}p)i zi`+~@hoi>*T0ppI>b46E zlrLP>Z7N?kP+3|U%y;81?^5GcgC{cuZPZQZ=qD4CqIj?Y1(4RIwLzSu9UC1Q24up#?MXpJ&u?^&Y8y8&)cei^uZ>R&7=x2{zm2*q0a_a

    D5_#+^u-47COTW3L@w&g=q~K8RM}g~#?3U%i@S0&TqGEz zJj+;(r?mGPf{19PhIka~=t5GoSu7t%UF(f@TWm*hc! zd5OA+Cig!~O`P)((`*$KS$7vDBw1~{{QZx(VI^$J5$^=2b|JdhgX~9ux!9i(O zy#8Dz`*l9-=V%m=E#83jb)p#b8NTr18wyAs5wd_)t6T{WE!GL7Hf`4|gEcDW@0PJy z)4pMHD4_lj?du`EW!iaoMhyJGsm{9*IHqoH$S~pUg8&PW4FJLS4cFuN;iT<+q>VA* ztn@2+O8XE>xLk9ezoorMw8($=sMdk0{&#wNw{7LnrVv@gcJVZXIKCLVgZ8?YxFh2; zecYe$TX45v2pWqHz_(mddn3nYnYI`-S_IRN0O zIbC(JgxX$m z%iGfT5B+%*%)qgs9>UMXw@;+k$JzQ^w@;rPcLanqAi*^Meio=5JWAjlw9ft;-$Se) zb{Dr>x1-10_eu3?Ar`kuoj*oH`BkJ1ok9fj@R&nk5ObFUL0!wg`|p~hvPkQozX}E= zDxvV1+&zur*W!FX17H^jyG3}I!EADxS}_QOu)G{t8~8y$sTB1Soh+A)qW)*MHVz2kykxO0!$x50R1X|GK_YwU~=yyr>#4EsH#MsPnXBZId znJ?5P283~@)pGHWz`dahtwq6IZ#fdp*3$qvq9DS^_x)^!U|iEb+I;uYjuVA8E70QB zJ)#wsgT0lsZ9wuvu$p*xIacET+dI*55Umw@LpQ4I$HG zULLU39`*leb`YrLmKw9nQhy$-0r=uy{0ONkJ!aYA{0B-MG144o;!cV3bq`%03CBc& z`uGdSoT2YCXsN?pMN7iZ9tn=%^Qb6G+=P9LWwA_YzS&1UOQ=#-a0HK}-;nUcP-tfi zS`OwxA5dAw&Ai>ieyZ(@NZ$a5;oA=8Z2cNHKdl>~zo=K~l4u_1_#s8dNYX_>dZ`j2 z9|@uR>Kh05xc~mn+27;V2|Jjb{r5DewV?Z2*6+%I`Un0$RtQyP`kbXL;pwxC7E>ab z5n54~s%z{{#lwFYc%&?|B>w66sdPyOu~23I9Ud@y%m0y8ICt3iCfy_<^C4IWc?l(? ztSRqj^XpB%0-P1!dmkrjm9e3Q>+G#dQS0-W+Vt_iCz^{)p4+b?Ep@}S1bQgj$ZI3d zV%g)r75YL~C(_3u!i;xBj#t95a=c8qb$6xm4Z}s0EX(6IXpn82Q2@;4$Rq|1Qp=I? z+P@rSRzLQ~+G+S`VYS0vsq@%r*jt9lVtNULO))kdVBCM@T6T~9<{h(%iP8n;Xb`y9 z_vPeurMyIgL8Zm>pPNur1DGucFnX_}&?Da|%9U)RTeB{^A>@95q8E$l5KTs|_MpG_ z>Y%EN)@rEs-b-ewl}>1{_ST%=lqd{qaN;-DPQsA`e(up(;>dv5nSjML0%Js;j_UOx zPg`gpT$Bva-AQP%7sNLlDy#nJ%K;5v4L+&`UHLEizxt0tJ@&;|ND5s;JR)9yOl!(d z&RgM{Pum6=jNx9QVWPx@QTMaNr?xl^GFgww11l*Yo9+Ut1k;sQ4aw7+t{lt26x!6cx9c^YGUVARvw?v2L%I~>v34Vvtav|(D(hY{zE@3GFwG4YdJ zu?^DQh@!rTahoF_5sb-#Fjq1#i@jDwNT3L7wxi@XJVca-2U>$7nC}AfkZ-t6I3dW6 zr?IMyjU{wclr*Y|G1%A(jRz)8?5cAXK-KkzQ?EE|9@!xK1YDdj+#D&(>4@h_jqpCb zZygx+?Do1UBST(tB=bhtrx#W8P=!iaD>h3I@xQ<0bjSQ{4`zs*_a){z+fpfLCJ~K&9s{mvH6xXf8g+|D6vci z0w9i(e%qgg=xRWsFJ{U(pYK>(q~5V(0Y8U|N0#M)aPPa^&A&b$KsqHEPNi8Df;HbZ zj@J^`eu3&?F@vyy7wez{|2r>3Fsdn_o7)@;8@AT?f*8a-9mm!GE@Hf1g?zKnPKj=S z)|VH9U<3V}`GF!x6&7)NLOTI1u2mUxTqc4~jIcHjfEW^z4;` ze}bZuDYNFmEB6WR9Q|P1B>s!=UVJ1TU2+lqd-2?39^zH zQQUfbeR+UCj4RN2x9AKFTP0Pdc;s>XPUX}Jl)czaHGCs&NurqeYbDdJoR~P1+BUC% z-2D}c^ z`w$H7%GpyrUv`UKa;YQvrK;;3YZGkl92-|pCU?z{baemK@8fxrHKW`?Fe^8%FcbdE z3Y$2s+Am7nV0~a*{U4R(b4dmJM6S?{!cn_;k@DMEDrh{$LUCyGcuqoH6nnKFlp4?CgL_p#-Ry_4B zsZ12k$9;f92|=?Y6mR80sO*#HZ5^(+e3r~41ycT#4h|PlXK^Lvf*ct-f{mBY*0$!G z^jl7|=j1LtOBMUgk!s@=<0|4qKJ)awBgs;OQ8CP81V;m(yJBhR5Ea6H3cbHds~J)2 z^7weO52=km67ia;D`sAJhkczm3naA?6)P(|1QdA+%Cz5`XR}S8*S#%NRC- zXfDyJa;tX`w{_XuRjt>$hTyZ;SVv5X+eL(2=9i{#TA6EJAJ5h>9K=S-P{)n5)NQE9 zRexJJTS_{xGl9I@mMhYdaoKWLD|#Gwkd87tT@rHy@3?aWnIg=nM>jwF&@QP9*rhVtg)mdVy1-U^WK#Lcgu3H?HD`T)x;%}Z8(d<6%*Tp?gVv|>7BSl91SUF8Z zw-h8vsigfufkt=hYkxJkubkscjr%-jcCouEYmFhpW3nzTVwP4-&=PBhE-$G3h3DBS z7`HZlX#>)aQdb`viOl%>P+V|}csR-YAs+R4K%r-!9q-Q{56%OIn||LAmYYo62Afz9 zNxGOXAtV(@l0S7Bn^|PJNjusNw+V1%>5q@LzW3WZkReivvEh)dlMo_?Ke)#A70y|x zuHLT|BdI6De4`x0jN@-Jf>K`cX^>Ge7z#JeoPH=cYqR;IDKVk z>HCUoF_S2>V?|)AUdGYs{)X0{lZ_jdr);Pcy=NY#qS{_=m9{MEOg-|rCm&pl2ljr_ zfu)0vI%~HYDBy|KQ@ISk0Lyc|UMe{TIXUJ8cVqp_z^zCz^(HpAA~qAdyQW%$I7y?G z(>*r#Nv{OA*?r=C+vuCJmdZA}K5}scU;X~N3Jtq>;>I0HmL4dW`OmED81&ae>_Ryd zRpOn*yWp0Hqp_R)QkBQ%tW&f!MRx(GZQ|?*+Mr;{so=IRXg{w~+}}{QH>4xZpzghX zF)I-G+GK3>cHlt4Ae{!ZpP;TjArY|E=&eVqpz|RYJUvRZUNi#XBRi26`47S$aqaJ5 zxEuZ-st38ccYqQ95#hj4T}n5H#!T!wdP|xDIGp1lwe0dIIf+dYJ&SpRr=L;d<*#21 z6!}eAo#-t(gX}Yu4CyghmJW7~U>m$<;J|}q_)l18hMLG38uGX-I}L%)kn}PpeM~+^ zdlWEI0Sy!v%|Kq`1+Sr%k#E2QEiZ~Y=-|VkU=5ViwCev&&J_95?v=|NHb>ehfGFv? zLMx)rVUa9l`*X4gZ{<<4*%8t_(k`P#O{~vl>qFNpm;4QG=Jq2+fsTdV8YUL;_W+#4z)8z>3kH)Q{o`Xd+_^L)B~V?86R!j*qPLAI+_AWJdM@RV?@TBzcrL9i$gzg z%CQs+@J%ws#SkP_v)IqRPjMrMItHHzEj&EA=}l~l>DAus!G-=pOn7$ltrJ+GfMVAw z|7V-;;>sKWBJS+I6M0vpHs&#H$Ju{R=)5S0&zwEU^PLY2RMUV05;*8q&S6d!-}nFU zJxG5D3s(WoVg82BOD-7oy=7NqyZ1vdsmpsFpjKz7-9fZT%%ep!A80?2|;Q#jQHM?#DKjU|W3#I#OrbBtoNChlxm_ zxaPDsO~%((2{B(i)MKrBZP!&3f6wp@NdQ?YLl!f=xI1ZtYU*C+KD)0Jb<0jV%S_Ja z_hDCrAVKmE6I`{4AkIY3;u_c5$#76jA_#k=bg-qxT?RVj2Rw9}^%`ge2O|CX2bR64 z=fl2qOAFfS-Q4_Z)(1%_R&5P(6jbJu5$<#BwX_t`5U{l)T}wnDiCG{~__vtB=fN=b zsa!>gwEQLtrk9|@){@?g))X5=S}jXF_(O8BVOcb5ExI0r6oiWeMgVQRJDH3VP;dd+ zWB>l=s7z_OJF-WR6g~o`^SR-DIEei%f}I+|&55n$)yRn7{DuH|8o3^Of`gVk9Q2_; zIWQqg_OTda`;R-GXykP*(vULD6eUtP za!lTCTl_0i_oScj79p2k;Zqvn%rlTx;v3<(R*`+@%8M*i8aU;xss=U3rcz|?je78c zCg|;s6xT;d=!~o)^BD1}7{ za+{LOz5yELV0jET+{hLN#}*Tr@n12w89JP~(yh$JOFA#8@Lba<_bb^8 zA74;#s!_TDH8I$!AQ@QfQs+j^xv1Pz5f zT0K1b`Q9R}SgGScMg`~rRHyD@x$~b|7kLlL%|wh`;G!)an3-b%N~$~&lqUNR9I7DD z%i@}?^F}Fnt=$TZ)CEb%-NZsGQJ>xX@t!Xji>_4jj{NnWfhe%7l!!w`DS=o}i}_bA z+>riRpQ7l;R!L(JC2weJtaRoHtZuKmj#@TtB6q0xu8N3Swv7G|QjuO4(gup8T6`1I zKQi_G2JT-apV6fz?2xJQDl?xMe(l*Jg4#_E`Z4l~8u&ob7Xhv$&)T7@=4NQ1H~D}c zi3k0^aDyp8S7*4KA(#&E{bIzae+>0S_bNts02Lb5Lr6}+tlTVl^cpu2c)c8@*n`9)_&}Gpg^$hk>YkNz*k;{si*CW zFUKM2jxSef@PoVVXwb8%7`(^PTxWgwi1adA4~K8?2bs)hfHJ&CJv0`5h0(d1Dt1jg ztt0{YXE&@te~7j>BsBUtXxASCZ|ZRK7lde@d@wWz^EHrQrqFO-$D{%v9D8u-n0DB` zF}#X5UqMT_7KLsacBfxeMdmT)(;CCa>gy5uB{q&u`L(>bGlXgsL@xysIJ?qa%?$r` zo%7xawcfqo^rz~&&wnDwK%NC{F~jYS@tpVFGt{AH{ufS8Ox(r^Rnlg|(OeNl+zQ_t33W0e z8^(-dj-mPB4{}6rp?HkE>Nwo|Teu#@ULNkLg;03Y#cR(f@cy*oqW|L|eKUBUx1}#2 zwQk6|_~~jCy6i>v%~#dLY(?Ix)xvpjb?ebf7w{-loqVozYlBY*fH2hK#oy4X=_VTX zeKYrG`jXbJ@(s4wC*05C&tL9lVzOrW=w!0jeT<`b46&6MM1Q^@Tv-(<1-`c{rl>t+ z=jR*0Mc9~&AJ%)2E$!N;#OMq~)oI>+7#0$GEc)Sa69xzeQA23tH@Hp&p zJ}Mi$r9aUXUCwRbUYFD=<+>g0eL87+G7tlS;ee<#^6zL6LsKYug4iryo5J!& zZ?_n$EA_bjdlU~DZzGJte!H{P395b$%gk|HPGTZ4 zDHG+-xFK7->EOTa;0K>)@Yu>w1Er|TY*CcPrXTyP<7M`(Vt!~j9CbPzb~;czl-#UI zJiClMyHxlhX2=d?>T#1CwP#a|*JUl}b>~()1HGR{llO9JxuKGhN= ztK67*40rwD&n5ivwixE|{0VY?^n0QO!o~7_!#Al$iu;AJ(X}fjjbS10^>2F-_+92O z$5K4Yq@qrUcU7lxv>sAyhir*OOtzhXpLQo0j?w?9K<@G#f7RKFRW>fIQHNyzxz!h~ zt9Q;>?pvxAq8@sf&h3eW&PGf0J=n%S*$E`ag{5fRh5w-b^1;US63Ev+m|8hft^0dt zjxdJaM^U&rw+Z|hrZg}coa%q^jOez|#U{=cc{4AzO$3J_W7V5E&stlmP|ZceVgO*% zj+~Ln{;~q$qQVwb5?sw-+%I$LXGL1sNS532ieOTDi72d?!+$JoaPi@1OJZc}eRz%L zIGgVkj6jy(VOvI6zH7D5fokSeijuS5)leLLvosVRU?X`$%n#jvb)94CkMR4s`Npho zD#Hpt_rsCIrfcZDUDw4~OZ|n}%W^N>bl*n>2W3~`R=FAyNOd^3^t{iIyrDb0L0qLX zgU>iE7ImDAFxJ)jG$0*Ra!GJHCLpa;4k)9a#|?L`E(F{(nG;y(kXlYQWce5XEf_-i z-i!|U3}HtTK?FhV_sh)TMpzI?!WvuBDA9m+&G^qUWaE&$bx7+M#H!M;WYx#vrXLbc zw}=u(vP71r)}(3hvJphllJ4ZH6xvrWt}gCZuzJrgNY$Rm4}tAVKN?&14`Q(MMIQ>W z4Eu#g-uD|-zfiv)>b@B)qJ?H5g|m5Ku#wH!f8L(`4jfGED<3=hpwgNqvKf!YI_4|c zdrd=m;q_EEdG~w&pvp!kOO;=ZS@$mOuNJ0xQefspxy8)Frr>dn27{3J{{X^3J-^lK z@Rjlo9X^!ZamjUZgWRmnjt49*MapEPEVYyRt(s8tuBFH#R01GVZf4bU?Z`KNFh&G~ zl!uZfg-1C*EX&fjdNK0Z<|e(wN%B4_?TqOLr}Bgi%EJiPLDYmr$-%pu}w2lks@DS`{9!uk=IDEH8!&DZM(0JcYoUf z{agQI%=*}{|4x8>RgCwa2k$?Ro@liU6ZJ|&OSenP{4`n={+?t~5Z)=&-fMRXwGa0a zYUlPYP%anqm* zB>-}|kv!jyceg z7*%=8Cg5rJ(bK^O`XXN?*(`3=i(#ZQ$T?*QN?&_vNow3f;gNE?9Vv5?@qYbi7&-5S zzp%F~=vhLf!A)h3A)K^o#qKRlRWl(xyCO3?1psc#UD5T6TLvn{C z@5A&1!=h?`**^0xEWY|?CzEVpPRx%;?ZZKk;1a)5F2phctsSO3mcfRP zB)92wMsbQ6P)pk-pOxhI^0gzvFs{0;yar=cCerqT29SG9Dt z*MwnQ`-O{L;s>d(pMh~B9pgqiQs&z6;FTG6KgwxX=0No)6OfXcDJjlOJIXn{Y&fd_ zA^|ChS0H7@6?P;yN%B7R%&&n>r=zO<8T*jjLh7eZ`LRt?C;r%``Av${H6NLAx@-RX zci8_PJVrMjqg$^`Sqh__VMo3tyo71$!^xQV7vM!g_%R1O=ChT3|98v*)Gc|K{1Y7o zlkJ9abQkvw*woYCu{;Y~z6qnIULU&Vc2*-1(pj?-;hUg-Pjy}S0>cylr$rCcV3tIW zSz#PS7)M$c1>(NKV>9F&R__m)sCKkC5rBPxm!V%fBxabgx(a44^BqAfVSNrhALT zE4`999AjSw#=cBUM6xmKc3{?x)NvmGIZ4OgyApqII7Y+_jEH#Wi`n||IMiOls0!Af z*Ma{0G3d`K)t^sN{rM!-mZ6~9S`ugNb&7Mnk~qg(1p2a_Rtieyji4u&@~od>V|86c zLRMqoauRn3TqB!h>H-D(_x06{LNz-%2nq3YM9F}1oC`Wp{i%3V^?n@7%t9>x6ua>^ z)%)gS=og8le&k!m;~|j^l5=L+U~=+|3fMj3U*goeb3lqL)$=saG{grI(uh$NM!M7( z=`kYpXEo{-ew7XS0SEko_V;+p__tfe?{z}$w+H}`onj@tHqA1t9b}e)!4l<9F0Bs9 zhp2E@DarMiz6;M>PAe#GvD8rCA+lgRZ!ECNq%NH#&h|>;El3%9{t($~@jGCz-J%Y1 zv%OXrw%3^Yz0M@ztEvZ1XV+1yh6k9u0nrS-HX_}o7_xNB;AfLD9?!*i?8YOTV^qpx zCN+u92JaX=4fVU;a8|auIjE7$lqW&GSHW)3f#hapQ83?OH8(AQEtBMWy?z0P?*>{% zmE~yPMB&N=Fm@a&YZXJ24Z~PUDffut$gy z3TxZD1ApSwY&sq{QNb0W@X@{R6dh#ak3v4%oL|>+YGNLdv;W9bIlIrbRL&-Po!cJh z4{~-Ps}DEjn>LN{1xa=%SLL;g#9jL8B_Of7ei>HK2@XJ`n(z&lgAO^du0O`F8Uuz)SY?!CPexVVQzNMrpa}C4PbU81mSj(MUjELfZh;2)K0C!=fyepj;(MAzXtw|lPYiG)2 zQXbHy#JPxiz0~faDt0ld+F#mDL>B+meMD}*ExL@2`Qvurk51r^O_V=2Q2yA!@^hFA z56CQR!l*~Qowmc8k=h%Kl2G)PC9zCWW+Y3>+-!-G8>dh^Ki%mq5@$Pw+Iy~adKZeb zuu44K>0K-qNXo-$k}{3Vz7#1-Gj;V(dDsCiB;{eG>xx*?rq!SeAO(dacarF})s()b zfZDbs+01OQ8g)kPcS}&y39)>a9fa?hBTT~g1A#UT2tH=MIcJuQB3=YD=UshaBd4Cq zVrRY;e4Dkp-6b!xm-quVwKdSD zxvHjcLQOI)oCq=jF@Z_Sv}F7SSoORCi2=hUm)QeJ7}i7{7RjKqxrzdd9czW?QGac& zO{*{TJy)9+`pI@(OQIWK)&3@0e!t6>sQMJy!|I`i7z!2Hx$VC)Y)(Y~ogJe8$}7Zd z{6VbwBsym@;U?(f_ zx8I?4gFl`E`%WdELm8e!8S@ahXGTb zxeizTe|os8&hvPxMVPlzrNG1TBV`>4%tATuFTWmvRoU$_co%lQ!m;+yzPCq^*?On zB)MMwcJv92kOgAXREqE?-l19#v6WKY#1r_P%Qt>9lfPU!9l{guV1gy@b&c$B$={-p z@1gqO4bqh-5Pv}O{faNh`CNEHCPnAZyR<_EIZXw^?7eu{BhN{`IU21#UvTB;E`F~o z=WO{@34~H7D1m?gNAV#4`&}CY1Yt#%QIY``i5{0PaR~CcG#a0KXlWmp+<@ff_7{Vi zrYeCpjg*oF|B$+i(8Lb>_U!?S6~(}Q^}z#?alXXgemu7Q2lFQ{@TaD}gg>`5_Em8`$NW9rAi8pzj;&d0tFhqaL?Io;v+y?2*5Al%RJc*p& z$>oKbM@_|;P>!v2&mz7&RgeF+HSbx(3pGC`frdan=UZZDWtvdV4@-Nq-1`9$`E0-b z-$ssAbn>gat|NG3Cq`LTuX-(wSV^_FxA%e~sTX=#22qFyA(Z%0j%^P4{>@1o=Qj-? zA@TsOLOz@NoiPA)3Vc7o^!>9~#!MzZ=GT2Iq$Jqe7vNFESKP)%VAMa$v9<1A#Frc9xz@l2I-}L}02jpKsDGRp)F4$#yWKjm*YVp1n&1C2dF_vVy7Ags#%tfS zllaWs9>SVWIgZP>d36=HA`K57)P5{8&FSHhwhrHC{@;SWC8%QVuOBf<-N>A8Z4U|s9dSMG-% z(4Ng((!V)qb-MC|thzvk{yBwZyIl<^(C7Z3rj{K2T&wEfiTzrr{){uf5Hhuqw>6je z)kk{LTy0#)3Kq zhD>Cy%ImybPuB*0jC5_JO#aBvF|iE6a9`fp?bPkXAV^8zs{NfDJ%Sq%AmL0ZSkH@-gzw;<-yd6^{LS2{M5{B75qpgowe2s|Flr93_jQSlJ8 zc=cYYBo$NP7#?irG5Jjr)-=UIqPcBQe<`=OP~FN|NgIy`Rv8(AhasQM-eIC|ci{1v za98&$fe3jZ!EOQ>10jHp*uRh87u2u-bdx#Cqf)o4=%G*3v8Z&j`fi)1p&G3s4L?pS z8|S~*7-kPmxP*1P$Nb@RYA(y*!G?k-9`y$3H1DYun!DvD1l`G z3$rkvov!cDTjRs$k(*dP*F*!pd|T&FpS_LAL6*%#I6jI>2UZ(j`6kZ1Bq7lG@?OB| z?G&p^V`25A>44Rx466~w>T4rm^}Anh;!?7O|1|u~!hh=jhQI$zT(|k3<@@W0cftQKTvI9*n!b;$-_IxCZ{@A< zg}^UTfGH|A68b%j!8>qwZoi7<;p^ABgULTT@Q0@G=9uGdd_`TSe*($hBKaIMZ(7NO zzIC^owys}mCd{h|nAfaNUnR_|iI@Z$kZ-_`4=?1AFYyp=Z2`{or%(29y9CP0n#`&(A5a;g-$ zSG$eDFHjuR)UPhGPVeAOmqqT>nZiC*i#xrkcX|qU`uqE-y?djIk?xh z$h|6u?BVvt6$4p*);ghjJ&ERm^eD#DdeFMbr+{xN zE>b_b4DMurD*?O)bCBUO7y%_xXUPY+IqRc)Dp=EaprH4jS%fEF+vyseskiY*{=){i;+flP}-f2 zlpf%C zFe^oJWjdC%E7RC5^{o$y_avP}&8z!A>>`G$bY%|auR?V@FqxwtZRFJVhEvZM)-Qrv zv3{{@I2nH`8~^_k^znPFz_}PHy}%Wf)4SXXSADDyzUhVVO%|S$ zjUdjEMNZAlG`*NbR_Nh4fbP`4l?bQ`pRs&05|T=Pje?}hBHPJGWRb=bWA(l$_OlMK zpONI8t4{l={me`4XAFC{Q0(1KPYby5fTB5ZrX|DKA!SAyrc)kCnVZgH`iUDxi*qUN z441r5k{ev|Cz5ie1^8KA zSNRDL5&-LE%B=7U?zC(N4N6)@TRa)s4}vjgRn|n2s8gv-Ryax^mf= zoUQ-47|wr3f&U{D^N$S7KQi#Qv*~#cGHQA}r&x~(Pa`ojawlw>WIDq+WUCYdIZG}f z@i8^^Kth{NZQxX8D3H)}-~*rBznxQ;4<$4dJhpb7bXMiv*W1Djk_j2oFg_`v~;Q<-sCZ&J$H3%s#;x$p6q8kF^(}h|d zlfw*DwLg=RM)=)@3vI+-x^$sc2aWSn4X{6Ng8jLZ?$7OXe{MG$NaPJvm!V-R@(vmw zMpkBrzKPeFH6)n@*AhYqG4T#bnVU?GhnPdY()YlfbYT*ni%BTIgapj_M zSGL@37KU-TyioHN*st*bb8PEh3H5J1`^q9-sHx;R&hLjY=GZD;G5k|Y$bGP)NMd#g z67H|}lNsTkjU~dEx{7`eCzl9g8Y|)+xt3hVJ<=Cn3%{usUaad?ABf9pgo4`US(ON5 z>V>uS!uq-^>%;GcLiFrR6B8~Ah3E$}!Nlr8IZXtha5{l#GiB<;Rgqw7eg9IrVoX=E zzQ2&%ttZx9C%CRbez@bT7U9)Ja9}DE`SN!6VOqG~9n@6iYo>+Y{ozK=ukL#O6U`U} z^5yy1^EAIL?le#DH0r~Roch%BpG0p$L3X5IVJ8ju%0RyHDIjO({IKjw z+?B*X;^j_D1b09N4f-I60x>ukZ+r=TNMs@mO?~=kn?~6*(VuR!(}S`!2Y|w zp-oed;Xltdv~{)XRo@@FWVY8@b~xVOCt-h|1Nn3l-QVlz{$5A7E8D(oJMX018xX=x zY;i|)mRD@xj4O@#^h~xoHwf~?5(WAMD4JB~%4B!kAUTy`$;n|Ds7lovS6~9cRo9h| z)a@RW=3+HWT@VLUU>!hp6YP2NO&9%UGg6R4Hz9h=hC+D6UE&XU2C86t=-De^O)=$jT54^GSsE;$m`^h)jC| z|KN5FCBG%H@*i>FF)8t@yN;dG)QP7Ue@J|PBd7k#_lZX336DB|VXIbMhf!1#v)gag zG!6M||9)>HhkQf#oI1g&Ild^|1oqd9=MIjM(OaGxi0 zH5qKv@x4q_zLD}9L8DXV5Vax`Fv76jrjsNv>S`*UW+27o0K+W_EOel%{b(P3Q1(*L zX2SYqu;eCmA@%1;iW8%^aR6`nCd&c5fl-4DVg9*c@%K79R~pgw%);j`C3}V0x63CI zV{Ofm^3mi}Vdx1fW@yrmZQ;v%8-d#FY&Wq*R1!l>_04d2z2xXNPUZU&t@~qM*SgC< z>;B>V{VXQF63K2|>n;>4)lqdZ?WX#TOjB#kap9T$#!%;E(gB$w`I+@{rOA5fh4XP# z?ioLbkTFR0lk>w;LS&IYkO_!F=!(zwXNratop+ouZ;Zv_6eOOCSp)cTE4cAnQ{;Q{Ee~ z1!QrgQY*@mniOXu;0644YtK));;L=t1f7m|Fu8ES-!tL9%$J@hzUuCHG zz&bX+b|f&?cs9}_x_Pxs0zaB=9-t{3q95-i_PG~hpYI)Vu^aK-N5kT~C0$|(@r&t3 zG$S-=B{Rk_6Ha$0id^GUz z`D}l`bvvi7?LnCBzYG(18Zg_ZzrEk=FH8>fVC#hUt49vzMFM8nb32Bp))oiR~}ZL1ycgI--W;CRP-L4uOn| z)bFIs&ViJ<9$JhOvm%$=7%~R-nZRVz^AVoVN4v#xM4r$9-FR{d=Jtoyc8ONC7h}uM zuf@n;p+1xkXU;QN>C>Ho`}x3V*r7h#i~Bd4>z=L;+|R3Do&S^whZ&^kDNRw58B*?) z+Sm5BFv=wu?@8ikOqx^}dYz}+jn zC>j4B=0z#^|4=XL$F@kBPCkw>l+L8&M0K46<8(UWd6H;`dBvjSr5yBpth|)n%Foe< zkD)(8JU21Dl*8dOvYZ)Cp>|rb)9Vz6IfdF8DNe5>Uf~pK=k{}Y3&o*u7_$%)l65Ui zkUgrNJ`vRZo`$c5-OaGB@$pEGN5bw#bg-UOH4~i8NZad6J>r||K=uFWf%v_CKa%@X z`xs3H#r%s72$LQPf)obCFbs$*)Rz;;R~pd4z4Wz*kXG+YZ1lMtsJ^`i;_JbX#P`-k zrcgyRG(I5d*-MNMAm{fGsyb~)@+cAcMu|wVXV;(6 znXQZXKqB(xsaqHE>V@t2i=#wTwcox^9sO*Z7I;1M{dY(7EfYU74Qrm@-pr{TAGeZH z;r&hdMs<%XkVOdHa%j!!jT9oG4q5dzzeP2Fq&w&Tp5SBU$I)#NLiHIVXaMX_n2jhX z+Zt$=oz)na%FI-mG<=M8OQTs1N}+^5lFz}t45ZcT!DQJ~jC5y%*^JPtoR-I5Lq6Nq z)~%fC3=-|~q9IQdgFG=gpeygCR^`1^eSoah60*7FChZsPigAr516L=@H-nh^}~lP zTCV!B4w$ahy}`nX-v~^(vIodDGgQaPmiU6 zaOy5!Z2hAf`1Rnz=;vcmjaHuH#YDJByu$0mbjg%cc$h&nh62%8Oh*m^9e7=19hz0w z`(jYv?w*hB)n)!OZ;?33>l7z?C2;~$ZY#x8I70Fd)(O=cj1;I9OG(SqoSx40aV%Z< zBrzMZv`QjkKRoycg8a6tX*M-N1(<3^R2;}0nk^~4NjksjS#|k%E4G*&R(14Dik5Bj!JbT*v0jm_FOgH!%M{->Lz% zp;_9<*7TTCST1x?|Ht|dfv8%OSkiyZkriUGQ>dMv>=bJ6NpT9b_x5AbL#9h^aLMOf z@>!?c4x7~}w>af5)CIZ`ijULj4NEv3jeXCOW3g{{gslqr^C%x0KTYEDByc6LOy*um zyv|!BUh8#=BlTzolCCowDKCH!)IkywjiMy~S)DUL9N+r}`+L@FzEyq`*@Su=bfy}g z19H!G$_o5Cmaf`36gCns(6#FEcuS}>X@igFr+HM4LhxyfYd2cf1AoRXC$ z(^vGtJ1%ALmnAUcgjNq8b38Psm<{ohYp{#~lViBuiiF)~tvU&AI*$bB8RVPEn~>di zC-1xbxbF@Jst@!){Kv?b&>Mr^l+Q;;U3rC=ND{eX%q5Z2=@@e})LU!9Fjv9PD)?Ci zKZ`XUjJO%?F0(QZ`1=hP9$#86I=qs2nYTzB=yi$%^bJGeirplAhP*<|MLwHn%SKMU z<=a+W<-K|NTbw%WTkx+iwv~S}y2?B6k8PS#DCWxUWTCcD9N=}Q;{OA^?g9A!WnT9{ z4EHo7yVI)jerVH0XoO_9ZeuGHkvi&+Z7emaZeyd2Ej_9-91X1G{9aY}AsZ#Wo5tTf z#&;wBW`iCFx7`$0Lqq8$P^rs^m0AKWhza0=8Og5t&*BS&-Hk4wsRe@b5DOg5#%wXw z>0KyJ!n|>S)4N!l=oD%n9_aM05GO$BJ=yz^{%9rH`!22iW?y3Cbf3%Ns&DTh@x2Qa z1!D4=@Y>tGYCVjgBOr2v2@uBm2jc;~f%QWAVhXGT2L4^ES_M zj+Ma#Va;xi{EB;g9EOi$Wsol)gs+8~|HX40DdS@#gD1sgj7!JLV0^_5QjYD957YQQ zDaZEm!;5&KW`vF7T*B@{Axt%)(dTfWdbNk~5-G>_B<`L9`DtvcNPqm{?)7)94EA{Z zR>#Vqt-|4#a%_X}%aWuVTN-)MRQ#d^haxce2=5A?Ur(WW1whDNF|`E0|JjGg_~JRP zpyr71LcLJi*u9raa-Ad}mgHu2;;5j8gxyEc!2`6|#qdso~euMnNa2md`9q?FNyf=C$37wkbKnuh0_l3u2 zI#vezR!o#~Y=2vhKfaj16ch?utz@CPmc?H>Rt8flBs{<6Y<}buSenM4kPo5e&)|S{ zHz(^@8SGb4!2Ew0|M8o9Vfr?DyhMMNrHgf8yUw@*RyEGkQU5;EG)YO0JPygYyjc`7_)Y_rX(cSb= z?8{dNHNU!E@392G|J{(scN}AnFU9Y_Pk;JG`u_DH9o}zd9rDThr|3OW@cS2sJf5tN zzaM^olK%7;TjBjvLONWf59l)yzyEkW>+$B+jhvbo^7!^f_WrlTpr-y=f4Yjk|M;)q zn5{)vaCjrgV9k$2loYUN873+G^PJ`ULUMfA`C6ZC>R}o(#tI>1p1)|sq-P?ZO|x(1 z)Q{U+nF8*%SLJuTJKIa?j|9hO|jhdt3!<2@yKUeY`IjSdjAgN zelqgewuRoGLhkeUeh=ictq#3E#JJDn`G?-Wa8bYC3(r6F{&8|Y4&P72^AEkh%edbM z&p-73dgFd?JpcKj^C$P?tMc+cz^K+2^m*C#*CmViKnn8Zy|!c#3DL+_-6Rx%sqE^i z$~Mj4e!T1Y84ng)?aKv9NqRxemlaEB=$Qm2qYPA2S3Xv#O?C>k4&Eu$qByyU82R6G z%KMyhqq^ok=@=N1aOv-`4f<8 zK>%s{_Yv)*KNtRg^Hl`=-y8}5%YRnJ%BXyi*%z-D(__raf{*DFz_UWn5s5ix^EP=OTOd{U8b8l-?GK0A55i1ETM$^V5w5SM&jKI)WPCHa&Z7zk?s zWpn)MkUw;ZU+Qhky4<6wbahGrp~lcX>emAuVw~Tj=L?2JKVLvGPN*s3yK&e+hH3y9 zh)s0Awoof69G2YxS@YP@pqe8>HKZ6FEXhR}#?vT_lOcf@zVP6SI(kuxFPi8@CB8UG zE~@op#}2$G`FO)kgZNNO764+&s3hmnBoZzsr-~#au{!E9I4)*BmY^vVr(qG zkl(FH-j`LU&PqLD3SacHGONVd@9?e=GqK>G<@7qmad<(mmq>sL#!2<)12myJ9u^7s z%fQ3R#KX!W!x~41bv@xEB$qs~zuyt;a{tlzy-(tz#_xG)r3smp%7h$~cr{hJn(cHo z|3gET*VON8?a@^Zc^=meCZ%;Epncv z3X-~W6;~i-z?9NOJn~I&KJ+=+@Ex>71pbWhcA+?rR4k_+-;=Z$CLU{voGPkMeje0V z{-EPR%|Ch5*)>cJ*5ZbPPO*}sX~ft?&yOpyKF#D2?^4m43ZfIFD!f}dV@&}$GN zW)OUC&`a@EA~{jSkFBJbXg4Elni*j;vKqm^%R`VbFcBatGcu6!a3)gbr|Xb?Y&@!I zd~7VqPMPz=vUKol`fMvUZsgRDj(!Tcq4nc#o&yPedI#c>{NBoU$dYp9L&+gLbN)AL z4B!gAo?N+DY|he1lCABqgO#<^C=FUhBZaLmf^zfniL5##9}fG9&vty@{X8v-96k!% z3CkO_1hMtzC2hBbi!XV*wQrB0N=UxVVyUKSu*I(LNwyd%G9z!JdAQ)e>)=0$y+__g z(sX%OLrrnHTJ-R+^NM+*CNAelMm^O?;slYbC+P;Q(+Ljp*?uu{GpDZmTci+x|MIXY z@Mo$UD|%+twSUB!av0N+3cHA{qvG2j3H@%-U0k=PBjuq?{oB)R8j_m{U>`*C$7J+N zc_c5%aC#H^v*I~q<|M(kZ@};##*W7Xi6mF_t=6yY6kL#d$mlJLV8nqT&#R!x_bhy|!+|NW3x zktHFv)4Ymst+vZ;8uBH5?m0=;L8bnu4$98qdLM!l{g&~OSZcYMoTd0@ctyb&W5&@%WUq>n3xw91#h1nTQo{A~0H_`?mK zXkCJs8Ksd|65VRULeOnMLdRopx3BGt9$)w1wW#WJGS*G(SU0gV`^8|a>#Hw*93(Qi z9aZg5-lra3(53|%u_~L!>?0K)VcjRt98G?%1LnRI@?X?Z`FSUmpLfzd&x+He(fSW0 zRkqBMLK{1Xqje!xMo5q0g3M}?+@Ku+`4w~W`^>3}jRTRHJgqM&)a<57m>W!o#tEtM ztLp!;qXWfO7cPVg~m@cDtfZ& zxBEyYCK&pmU5^poM~pJ()8+RC zAipP5`Q1+CcRQ7r-E=E^=vFVKTe*y$3$4_p2bRQId0{&XyYxE6+j4sfYu@KLE;n9S z^9Bd?T`FekJ2%I6(X)szPt&b4B!B%G&mvx^@%I3TVe&$Mn|24|7ZS~On;9JOx21I#LI)2gDp9i(}1qrw_j375&s1_4Au6< zV;slj+JtH$0nR^PPwOQNiz9V7a*VID{NyR*vx{vI16PS^8ig13u@R`dJ`8H@XW}_7 zx0g_}%uL4=CW%R6rMjbcP+R$qm_yiILRMp-gr2fBgs)O-y^b;>pOcCmDdzlV#aWGk zk(LJa?FUG?4wkBi-UIq;s+wAAs^3w@>UZq=Lo3wpfb8Z;iURdJS|}PoSr6Ojum54x z?`Sb6J%90&i;)S zNm#QA<5Xh#1QX8Z%%k|3Jr5&_5O3foB-q@EvHQKKsBwF*pvDwpkoDCA+zBmw#@jy# zYVA+*9GBZysF?}quaDx9Tk*&5h_fuU!&qvhph}iTB%K^TC=x44ewdm%q53OOPBN*y zY*ah(u+q7#_$`tfcE#Z_#(fEldAlj9)PsEE2V?41hLvwg$xp|6_Xy0hOOem^hJu;f zJ|s7*341?fB_fJM4=Km}KC#iT)ORjlLNYOufXb&XllAl$tXAT@40?)aUS?I^=e3mW zGGqI!^uRBW@3C~&qMmuAO$*F0mIm+T1+D7&lR+(TeQv+UA2LC6df_6zJQ4E8`KG7m?PQ24p-IfQ2 z1gDTPS+#E>k)`dU`pgI)gAMov949g?)0r+4BF7Hm=;7u3`T^d8fn+DP-it&h;{@xRh; zC4O}Z?l@8Jn2101s|bBw_zU|~FWe(R@A2`I8##4CgdPdIchkgmAMrs=J@OLku?6>t zkI>`DJFLeac@|%^UhlR9cYD`K4}wMH>FU2cF*teq?9Pbsu`R&7?*#ky7Al`_qVhQ_ zCfrHoZ6<%)c|#3jY8l={_+4rED?t1% zGmGCHRL#aOpY2QJ3w$oVD(|DWbP0T21PPqvGZrg}1n!q|-Us=c=BdK?C&}-r3wOh? zy}JCp>a7s@+Yj>XgKawXUcw`JDV4wJf)T>Vf{=C;_fsG2;lD>1aa;9`XQ3Qd5&cY}X)JH_8E z6o0pH;kDn5n(&ku$>n0Y1a5Ci$f!$(9O2AF%5QhF10qQA!Y44NI_MM~-~%DKEFM3p zi=Iq=lNXB}SgY<(H>|+ZyARXI9=x86maz*7+^KbDe_NC8Z!@U|WqOTvJt3B1)MXj3 z(hbufIgn428TrVOHD<4Zf){c<9=wBLiTauv)J*4W6$-&s`?q&v2@49lT*4VaYyP~= zVz#b79PUAu5K;ZXLG=emH}nUSe;}Kdn`bM{R-R!3TX|-$6z@uC1oQlMk+&@2*GGeYnQGbwZb{ZpgHFzHI@m}E-R0fbQ}Wq63{-&dNeDy*dn)(o<% zp&uh?M9~9OG3*Jw{-RT}jtJDOgVdK!*f&{14#5Hm4C>cAL=xwb?7*QkQGjY%u*^JQ9s0a<6mXt+7JHz;(z{rfK z=s1eXWRT4c;ekX(44@E*1O$}oX&q5VNI_ns@d6$!p4j)u*?W;E(MR7Hkb0mHW!@MSO*9&SQ+cuNh#L4rHfeEq(#QxZX}h5 zZG1hA#+7#^TT3Hfi#k0S)|1Wki0!JN+h$C;v+EPcSPO| z@!xg(Eh-HP$(BD`?N=stzk3wm3Hd`BhQM>lL$^$wH zNWx>|AUj*FwAW(bDzGQc;-^lxTXA*0fg>n(sM@cZjfi^gud%zh+Qbs=Yir7o z#~+wdwWV-K%0sbe^1o@K$%$wx4{5EBazv$4L={^Q6`sWrrKSHh-pY8@o5uQM_TcT) zy2p|nwqObKd-fhr3eRH9@#VDC2Gmx46N9Hf{(?97idkuJw4Y5wO!+Q@6BkZwx;8i0 ztJ4kp5WToOC>hb~q=B}z#kVaFbr&f37Ed)0_NTPfI=L-)iqZ|5o?<`+b{Y z^!NRxpRK?5&NkH^eEtnC zpREO9a&;05Q+(-lLylg_O4UUNVWc8H(cYMX_n8MJR-R&$Ff{}FPO%Z?UI$UeI_akS z@p-0YLa&{)SFIWaV<^sxLHtDP5|B&b3axwgOWo{wtb-_hNpR<^zF-W<4M%^$x!rbT zl_-oFB&Kcms<*o#nL0Soa^`CgJs*JEa~3$nL5%fw7G%)hE%-Z&{?-IbxqAg&_lP=t z&#&7ANwxbPY!eDVWyF;?lH8xB&MBb%c(-(X^#HC?t zy0?~)c53PYT{}KCCN;G76^Ti&@`T=PeFY|e+>_Le{4w9i>(*?w1RMS+K4hrNkfCPT z6DlOdQw@oinrp(o31&*@vBct^!81L1_^C_})G+6d?tA`>UIRIU#<@I_I$DQJWs!$$ z7zGMpp(W9DBVIFx+22~|suW_AGcV%Fnc??h{#%wXEEb$L%S>4viv08Jpb#&-$Y4a* zSUDMk8CzsHk5@o(EXoNg=Md#7C%sm4iE6KPzb$Atzr9~)=CCo&K>oy6=&@lZa-XPO zoA)ri!%oJqk`6L?hnuL^3<>044{h0nCJz`wRQjLS!FcrgTnQPhY|LZ)=8p^xuUbxp8ivSb>YDLsLru6C2m{L)EYL^^QYuouF*T>IT=c(;QjsMr6*5{?qf)^RKtw4w4nf|#u z32u?-*=7RR)yzF+=rD}Xq_^ohC#JE~c5gqVTL}Su27t*_Yxs@nd~SpA0hkUhKC&N( z$YC>#40yYtWntwuq#QJ|j?Ka>7)(rGZV}VP5dxLeueOL|(hQ5l4)K?7#IpOPrqIqE z+hAd)&Hls%t+Q;Nix>>+fn(Vg(w=TQ!@j>SSrGgulf)WZvT5J+pG+2OrrGEZyBNGb z*+gWD6_FY7h@^N-iNT}Xtcf4TqA@cDjVRR&_tr8rviy^W5SLDd%QEhu3AhYttxac4 zp@Jc^jHsiA#UqnqGRK0+xsO?OFQ2|1i^j4Z(db0~#v31vMPz0|M6Ouc8Igmmh}3pH z!11_?S@LRaCgY7>sNXi8v2e!S=|b)#s{N0ZD3Er%hD-ApTYK2jcwNY~Wu`9V&d$0J zrO-8wu9+ByEtVoIq_ys#v^CR8TgYdItbFEjE1$WF^OY=0r#@*2fwm$d78)Jb`XY7{2@AZ8AF z@Bqp%6>u-vzZky^)S4CGsJv5B?Vp^PX!EK=n<*7n;`#kkUA?gG0Fgj$zZzy^qb&`) z`KB31bxNN#M*R1bWr8;4lFxNW^14I&V)A|f3sFab-b{i`V(_k%*eQ7oOZ7o(s1?funZ;RgIE1Y8 z^JWowlQ}<3rTYnyzti_<&1{M-){=phWGfzh$cJOV2xYmq)Idy$jn4ldGtOv;^oL7c z6);C{NV_kH^0(EfA=cF}_r&?ohgi1=f*9zoJ!TORAySSR=P+W9R~W4H%B}J?%GR_= zERaNd_rMttv4X>r8Glc&`XosiOqnI9xetM3c<+kN(IDz(;BOFhvlu!Ai>j0!2+)2I z^O10}Zw8?~!1T-H4zxHh7q7WkOw{2kO4u}kv06!$MqEkWi5ce+)t*0jnV>EHBW3zP65{bA)hr%_*?(1f ztSn`v_jYJ~9%Ao!=77yUC_2h51p8N-6oM6zu{$o%zh&6v^ zlI}pFZ_6cb!+}b_)6P!Yr(=Dzm3Um!zg zv1cvD7p@iJ^Be)?EsSstNo0z`UdBJkd4e6DI3^!Bp}- zEHzL{`NMW1{~&*Y?n=LBtXvib5JBp8)qc}wuVKkd?K406VgVIrYR|6!(h>`AO1JUp zWj%s+>Uyhu8!O(5BZQvvV}pEa+&?FVpnRLewF~F$)s6Z^ zgFYC5pWSxeMj_IQXZXZKpZ(L%2kMVsjO)Kqh`fPcynAuyFGAWn2$9F} zlV3Ki>^z7ZKgh{`8-++Aej&Nv?)=3)_=Q+=F58>*t)z^0l!uDx;}<9==+9sH*kqgF zyIzv*3m%(n3*^7^JUv+kNvs=5PMh`EWLxxnqUKjUHrd9XYo+%b(4!8s8E#TZp6~KA zcUby&aWL$=ph&DMIjczCRS-BdqFDaaE3W-VpMv8JnZ;t^p^zjuM$eMu#-iLKsBek( zHGcA(G+z)kf3u%CO+kK}KOWJw7d|?o6D5RqVoPo--3p;K%nJaL%BuPOpWYyBv~m40 znxe`>+Pcs7<3YJ8nnKBkzQPNB7g6)mZ)?MkwBLQUUl;2*4eljs`e|>Qz?d0?HWFrZ z2vhf_SKrYl5cS%Rp&bh;0e>2KH3lS5{+Gi47Mq1)`(?i&Xs^z)(BC;sg^0=qI?3GQ zxq9RQ5imafq6CEaP~7)RnOsxo@)+O$HVwXiDbe>AcKY7UzArPrpVJS%-{(s3{g=-^nlVHPzHZGu z9!-~+6S!9;HsC^cgGzE7FPy=3EWEO(vYu_5TjA;qL4=M#`A=?m$ZHfA97!^F7~*%Q zFO?{x9noaUxl(Muh`Vj%w8=Ih2?V-M)jK15B=hSrOi)PdqAUDZmqsuA6;D(b)`gVFLRp;Q9pI# zKwfwb6zwyq40>XEKT2biJfk;rMXh10Q0+(WUj_>Sh2Pp2Sa7t$Z5dckj-sNJ zh&-X6gQ(~A3*`Sz!4z3?O21I#v!8UG$Q?vJpf!)7Jmn{mO+V?TyGU@SNBsR(zO0dZ zXvZZ??naqeTbzUARPa=m7(Iq&FQZQ>`KIHgJu~FbzjzYe7?%*) ze$gblBW`_;?TF#$Phv@*(kD%}G5Z1lo$FVYf?9@aDj>hnPTz<^vF=x0ZwO~m?h$(E zMf$=rDw6~um5GBWdheCwqXnRY zET-J-F72`5=4-9+Vu8tuNK>kP+Gr3GbHhX({$Hcp1Z~dt{d#vhhnUtqwii_UU&fm| zhuQys_j9*TbuFgfl~ekaha$I}Hug_Q!u@mgX;hiTZWGR2XpdapyY2GFk2`Ib243!n z?-4><=fv)j_`Shh5hcZwW$uv>@>j4wTuC@1!nZ&UZUJS0i#s_o1zX;HR}K9z_&MK3 zR9<13rnN^a!I!|{#SoG;7PA#m?QcD{0rfFl1x6(}+D7|Z*-^cRGq4jT50_fbz`Eyu zE)w5=mPyqq{h|Z;`F9)Q@4wIJI-OfalIeV(g}-m$ORaenmO7l^QZv|1ok{e@?}^p2c&ew3J;7hA}=jJ9^iANh;BI`S>#yqKT$7bTe$aDbNGF|=HZ zvctV1pyvZYAB-dDS|)!inF{zDdj6jh(R9nSu4wx3{XOEZ)4eXU~HT+MVh+3%uIBD~-iJdixBj??7yCUaLC;WVJ7Vffu zW0(4K!O=Xo^A`W+7KBEiD{B7x#l55El*Yu=yxc;~P---jQ}g#|$ujNm^Z~lOJ+YTLX3QPrVEVRa8d6tGJQ*8jI6O>q=Z}aW6l?zoDDI-&zV?stl{U& zVP4#j<02yt7n2Yd$-Te@oGlsyg{fq$m0TH~+L^AiF+bEVtolWa*x`Xc`y)vq4-kn2~gCdcSk zFM7S#`qd>D{IB(^)u*|B^`}9gUv(s-epN_D{VMz`*SH|fvb@xlk&KF$RHBrC;$lC*jFvYGk}muw2}pKOad>4Bf0cmHIYwt4gc zT|Pm@{7go>+_(gP2Y31|C=}~PpH(E+7X%KDD3&*Q#kE?Wg5&j6s%Z`pxh*<`$ZbWr zJGpEFKWL8_=?2FqkBMl;Y}P;R+8}J~OA(f$9??-hREHW3KTl%;(+K%3szk$kfm`Pm z0WfNIRt;pTzH7g^woQoU5~X&H5qbnl$Iq^9i%~j)zdNaCD#tA>Mu({ZRQrMMA7c6y zjXCumW5rr43)Uo|n5U_tU;-f6S{{mQ<158WKmDEQI6xUw>{QrL676;Xx)%CD0qkx% zkSlhe=)*7u8s*a)LK_Uz6&<76W(ud>j!|hH1MjbO17ijfYnl+%hx0!$QCwGn+JQ&R z0>gz^w%y6BXnuy!cIJbLWIBBRu*o)h|DLk~)BMrX^^K+UtSNC2C8s<@(YxT=6f;dz zZa8ux1!nNTh<7^^+huGf7nwCId4eexiDl?tLyU@gnBomM#a(AxrkDy-%#jq2LsE#d zTexaZrU^o%(iTgyHGg6x+H4`wgGr|6>oJpD!4y^8g}#@H$8ceA0x>{Vm$ zhUS}y3^1E&=MLli2v?L8<+jCK$zXOKw*jwYxC-WMrZ+@G=d?z^hU8zPY!Ei4GWloS zydydZHu)C72Et&f^ufvoGq!3g%2>VHKsm7+$Rj}hmdF*lu0sVJWYo-Bh(ags8E*D* zSXQ^1*XfoNkDK#q6DSAOA}&}PTa-SB2UtP`DH`ZoFn$IyO(OGEW-wp0+h`GJvl#DzaF{c4~iRSe!p$#TvO#Sc{8E(S;R5rp!B zIZvfL^kjKR3_AN5$}uBC4l<(dH0*m5A@PqHmaIMd-f0lFD=osd-#i+Q*0TGD?f+_i zztW?a*}%EgYcX>zvO-=`Z?;K!TW4HPRQr8jEJGOoAjw;_zsyR20X7k$rcZ-`w@B)p zHp#%oVLP$?5Xk@I3xJ=Mqk5UmQJ+pR$5P6tBrw|PuwIdK8 znlVER?z1x>KJc&@{FuJ+Kb88B7~Etxp;;RPP0F~O(}ytwCG0vl$nF~a8^UHhfRDoGYNCE46qsUy4Pb#rfFQc>U>b6bJ8d?N#pW5B#jbA8m0W!kWsx3M!8;+ zhUb8lG=4iXF=><_X{`Qh*QD|6V+LuIn50q0N#j8~kj9R-Wr8+80;Ey?*A1v&kKAfE zU?KB-jtCAW|G$G<#c6>@rU{SXe?@pW89Xv9@W^EF$m%6La@wr$nEP~McsLOrD^_<6 zkH;$wcsNaXWO8_nL;kCN|1u$@J*@#i?pnP;h}@WB!lE$-7N$p|Iv6r>ZQN?=4}9|SRj1NW_o| z`yEqu0br}zX;O_8d0y*vri{S{lJEPZADI^EoE!`NVi^&VT>U5_W z(7)7(nZ=meO-wP%N@pmkbSTUKa)(30$jugrdFznmt&+T5OM3cN=iXmZiWhX=e9p{L_ z8)@schx$$*A+9~tXNH|9S4WeH+(v@O=?9*g<32l)cSJ`Jd50$7eMFC@$F74f4hu1x zGFL5(VW6SEIBz4Uf;((t4V+-=V`oUM$!VlWWYdFAAUq1lp6#5&`@We0!1=m4? z!I5`T5Wbz^KQSKuH7N-H87aBPqeTgE5WRu~Ix>8;fs0P`@G|goqOZ(rz%pr1tR5lPs*hObbKM*rYVxclqh)g3B_9}Z**uOL_3!w7)kLD&uN?4hr$*XStifoa+6UgXs&j*TS%Z;8 zwWnS2UgrjGHpNScYM(#g?YQ{xyY}jkd66ex*%5giuk;5jO^v?3z6)J_gHPH7K^f;N zoOANPtSj7Nu*Mq1tzKK$v;_BW-uG2yMzFUs-T@_}lq9&pA)Uwg61ZT7G%Z0*nI)YZ zQSJH|X5glG+d*sI&!n4<>gA!xNgQw7^~;3Fn}Q(BIk|d*eozc9jGfOl*Ds@U5rfZK zgU^-e4kG(pB}5s_BmY7nqKMwlbz= zy%7>vQn2O%K@f^^n~LO*w1z(%(v7+{kN;)A9=+2toma1;ce!ENGoWD&DAJfh>!4t< zo_>APQ9ar>Mv`+{SdUE3dKgLGnEsSUJwiw3*}T4`hXZ%@p)iKuqp zj%9)**K2>DwqK`IEMKKKLMYCw7Z>KW>w3i14(gi8#eWvG zTOQx5ldT@d5X|=R-?KIfM0W6Guuj~+4`jVU<)a^3>1Wr_&&1fz$`XEdN!BZZR`f%w zj-G?-EOrdFYcz~2#hi^QpL;R$~2q4M$feBw!$9_XoP7G)RQ+LNh0WvG!9 z$>omZ9#3E?wB(QJo6>dun60RCHOx-*eD+so2qE9oMvgrrOR!nrMZNa(WMlu*$Ykg35cdt={ zs02g2Sn7IHnLMgrAV2zR)5*oI4Rm3W+)^kh;&YXSNZxL7Vfz_fk8D1pTM}k@9CUNE zFy%vHh~k~RHYE{I$GIv$M9rUb+Xi7HWFZ)Ro2Hu?Uskhgc&4k;D~G-EUWWSb zAg6%#<11GDua3b#hiQ_+q;vYoG_KHL#u*FIOrI^g2#!3PMDG3Y=@F-$D27apCREf z{vk3JRDOFZgD7`8iE^%_+~Q#J%e`u3Zok@dv3 zmjuJJhEfz)u=wplS4r;9P&A8d?IW;IK5NlI^wkJ#$z(}kzoQ2P=I{}nHdgnrz{zVK z5~UBhl=*IE*{qhKajt5!k^@Hq-`u;jbN{rT6$XR6Q@KQW(kZE<0i$=Y(`16nLsa|N zD*&TJ-a(Q2i-%+K&Ka!Ws)c>rxbTZp`mxw=n)>_9e2E^v_gLlnQmD1L_p@*NX6 zeuqWv+NGJe#R+V2dN}0m5*Pjx@H^908TlCedFmxO%=D`l(y{8bAs6!NMyu7^5apCV zKKD#7>eDLdf0IMxDXuJ{(*G&xXWuo=Caygs%y1Kx*obPs{Z_^+YURJubc>}4>`QkS zZ4k7}A-t7-AK0AJz`hHe-Nqt(uSoFS`SiOVUyk_>mhk{zM&zEZ^F!hMe~0t;(D}RR z{GlK$LHn9-lBY)Z6%jSR<`%yBi*C{M50b2=veuUxOslFo{N7tOu>6;7W^NML>}eos z{)s}?39Cl$o-(6#?CtNVo$1Qdo;%YPf8C39GhLaHT)m6^S&RE~Jr;jxXZ!OQ z+n>OVeD(wuFE1r(+8Z-o0#+u>F8)Ry+|ILj2Ah2Sh?@Rb-4P)aP08Jv+eDOK5h6Fn z7II?}!b=C13EEv#u>TUuzM<_sEqm++VBfZSGSK9nRu`mCh?8vfWU)u%Yv55P+3Inl zbv$kKGI*3jwt5JQ=iEJ>J}U8$t)9|;ESpR{eN;*ZtiTVio%09!sIrWx_M(ng1eTDV zRsH&54)T^T?pBYJ{u{`DtCUrX2Lrl;Rg0HgC0fI9s1mlG0V~9Swb%lz5Cc|UqS_1p zdPIn(0yYVzxKX+ z>C;tkR&Mpv<>QpEUHBoqV0p7YJrNJ^xqbwAKL+rA0Pq{{LE|^5b7e=!fH={{o(B-` zSNW2_5-;!qmmmNzK)1f%8$f^gBG;d;djz5Fq2s964&8D@u;hrg=7+xcLY5!ex(uS) zJC461Xsc&iM3b!^=MY%U)VmGx@mR^nqt%=Xi#a|0C9|N~RN1;1$`-Aro7u5yj=H} zWr8;LVO(RDWsMgn#>;E}dPUG4cqS2E&M{}6Wu1AJmWwl=^w>*gGPkWLl?c|ldBG-M zf1=voTXjSz?*)FIdTW`W{k|OMo@pGBYTC5f3FrQgA6^l(S7#=g`+wbO%staO_e`xS z1Ll6kqc53hKewWoz~{co0`=qX^akp}C(8t_^&y;j2AvL`S!t8*ia$-ic-W+@LHOuV z_eSI9VUMQbqn!99pZNY2L3{6MTyhFqatbVY@~`NUhoMwXfdveq{laf2*`nve@(W!V z+T+9M^7F-SCt+lx_7HubuuFQ*=5{Ef9Xj5oM=p&`HjDhrBII8zIXH8hqA5_$AE2cl%2bNw6ZOcLdL9E@^coYc9Wlz=jB9A zLhXE`6xTV`>sQ}SjXi_%JE|!p*7scHkd-EmQ>PrOgh2kiGa#RNq_E}Nl>V`-ZG-x95-mF!QatGta;5Q z2;M+@Qq@BwaLOhIU!=2e=lF8{?p!gbK!^6o*R(@qk-J-LJ+#Yh>ZTFJ#Wi!>zUfsD ziNVXT`{#Pqec+T`44zC9ggNf=2d2yjiNS9u$yBF2BnA(I>E2$@Fa zJ|+g~OhET!@Cvj_LT5;7x8&QYuHj)IZ=`)8fGjjy<^lhqr`r;1- zsJLg8jQZWQ)4HJ!aTC@4n`c&nf9!u@WQ-fDz}Tj z{`RD*OV&ILEJ}l}>-q<A2q5v-Nx2K3TW5DC9-7eN>HbIDhnHT-L3jFN@ z#D&@T-XR9x73fXXkyKS$&g(~x{fdJ1VF+VtdOVY;_NJ>gpu(w(nXc^ieV$$alJ*!) zLir84Ty#q}izBN2-VzoW+r{Gh`o_Rgf`u%Pj+^piS(vZ=`WH{@+V{y&2Y)D~Z8wWG zo8TgmA-2SwY6Xi=>s^eNR^>74TR!)~T2e?QR$K`CQ$hR?u@XY@CZH-sI=vIG$yl-|DLU z*}r~>CF_l&u=bJDx)GI_Lsa`c)hh+S8G>|M>MhX;1raPwUzbS8_XJ(^<;|&9%FgN*wtfUNvtQZM5BJwBjsg z-#zsiH2nHz-tbM@@KvMX)3mqU*l5U2yixGCr&)cxr;V0lY0I~;W#pH<<$bifyNyPd z(MI#I(Zph2ZtptUDA#Dzhc^1nXRY1XM+<8W`{=!qwyy1?kVTdmNS!A;D^Q`n!3+}k zx{S(JrBt>86HP^Ipu|H-5GX;^LYG^T8#McK``P+W-FF7!V}^igm$GP7JSruD&1DUS z|G^6j_Uj*V(TTq^M5o1CjOg@;RnJTBr&V}A6{7vNncYu~?0#xw_Y!wsXc5d9uJTYc zmFV@7youy(6BiszM%O%^P=OSRbtw*d9*FZs;St)m>erGwI!VggGUIlMRpKV9{l~K? z8*mEpF`tm+En49n`*p)#h?lc4Y$w~zXcZi-d~3>C6MT_MUDpfz?ft4M=pdB-jDc!d z{pW*FGUw=~)Dia6@*V-_9y)%{V2&fJre7r7SU zKa267rGg*?cUHM#vUVF)6x2dj1!iLm!hncLq3V31*rT6MvJo|{rv0F$lm&C74Inp; z4cB7B8AV@MY8G=z3WznuMbw!t2T>uLj4}6U8qQrKSA!wti<^%K)~qC``5~o5DJhc_ zPlch^mlrXwBc`ELNF`B9swKtmXSHWE*6bK-hQ3C%XqXORawh*`!CDX#iwBtnU2D<# zH-t_o{#C4T25X$j8gtwBsu(vrZx+w2jj67w%-qksi_jTLJN9v_9@6?9YSSb3Gcov= zlK}rE6k3Eri$JP>Pc4*BD|D4c&m!`%LU}hBzdw=W2GhT%iRG7)XHuRP6lcH$F>h_{ zoQl&r3jKK<;=CcWX*QIC1}%V_WN)Xt&Q0X+jVdAE(No7G+3KN&r~gzEx*DMC2-1KH63=MeoI#5I9T65$vw`tF(`Z2fN_4D zt5hF-8P13{$2CyK1P6+&rN?~WRBDxzb$5+8LWr!ur+uo@*wY+L3{`(2&r7fO2&W-S|i3hP!+F_rHsEe!2y_Y(xTIXV6{c zq`S&Vlv+IPLzpn)F+G}0^z9^geC7bLZq!vCzkWs4KcoG~)-5`4I0Ah&lBl=XNM8N) zOG);3L~o*ZIh(V&e^KA?yG&SRmK#i-kBZ1{QW z1OEBHV(Z^2waaaS5NxUv!7!sOPQs%%gDABSkE{$L!JR%QQIbM>vsoLDD0cNBr4}8t7B?oGe^2X!`4@FR{}x;9{A+APz1Klh`mq}Fn z%lVzx7j2DMAM~FW=NrUNc>=c%J?P~QqUJj$9Tv1p*XZ${Jmy}eTUnD^JMCh+iKB}W z(O>t}+4K7t`&uSlLk3+#221u+pBn~K(J}Ge=U3PSL0q(nsB=~@9gVX*RI{^6)XsVV zedwI1mI-`7p(s=hCUT>8UpWF7-$7^do~Q5+t)*M|m{<=TtK;=xtIw|eeenSRPX-BW z&SW63-p3uC?&#zKM3fRIQA#tgHb!%&SZpXl;rU1r5x^;%UmR|*+I$j%r`)mI{d>Q13-rINk#t>)4$?zH~gpI zqfMme-}^nDf4l$F@agUT{`RCnKedg5aZxAO-#>m0fIR+n=l%WBXV(2K*7?KT@jo!X zJ9TH=R9$EtKZ8!GYOq*G@&olJ{2j@Ur-D~p zgIMR8*zoi91D*$ZgzshX{PCz{UrKH`+OIsM-6#kG1f0j7{)O8)SU2>%e>`z#5A-k> z{GUiLTt$Z(0-b47F_TIO^QSRS4*IhBV?O2^vHjoES+;U&b9G%W57mSzcIn@Pv1{(C z6I))86Aq7`u!=|b8pHm!i}fWOKPhhf-`Wz4pVW)-_x`<`@x?k%#lN+GDu_D#K)~ET zXLqrG?)!VU`^V5S;~|?!KZ2^_#cR6Ok6agD|DDU55}mPq@hx?NHY9y77&$WHyhF9M z+xP_EPdvYF^*1r`JC-^4s~-@21V<^R97tWT_? zR2Dn;JGSz70S5l}d&0kGyoK?9nlt3ev7mb06Hw#ZOfJ=x?@>*k( z3;q}I|KuOB@XwBi|Mvfhhd;7L|GxbM;J2vjMm>Gsv;C&~_dg3h??htZlM@f0w>ST< z=yOaYo<4JkI{b~N4EnrcP-ptQVRLu%3FF_=Tl{M==Sx8eQSL46r2lE)`nj2_LW}WUypue!Y`-W`|H&fxW8U&>3o0PR^Q3K&|Cfaw_jSu zH)A zb>QFk8|ZhqO%L_jzDSf(C&?RLbhN_e>r3*67apy!RoUTIAgX=V`A3BAR|uK5l+w(u z>BE!N!~NnE>*jRngV7WJ&};ppxj(4fxJ9rLnPdd=Z_i-KJ4&6=zC^8dYHxxcgLQLQ zeDT!vooFYzv}gPEa|!C>Ou%d?C4RS1RZ6xNx|}SD(@a+e{WD8I=g6m+Gq95hyb!xv z=*m(^ia0_DHdURAzU(SVAu3F?Q7eDiD2h(d{ER$je7zf7)S7jj9SnJVD9(QX`WIHy z`B&2UR}$qm2T{gnuqe3EPNK-osEpykaYm)#qTFzFP=UYW*9GFDdZO18d3T}w5y{&& zYj&YnH^4z(`KHwD^raQ3V_){4Jo|~1fi<0GT8{qV zr!YUyLFOOc!u-QqtO@;$f;sD%n<3`%#!Fc@N-tBn7sayiJCsSdWk^tnydN} zWr(CqbVU0Xtf%9z1(og$Nq*3kRUAC>gd;bc+f*KkUPx)%O;r0;k)=XzYi<*fKau3G zw7>|&h+9$~q(?sZBtp!_E=m4EOF7!6v&amVG*B5wn=N8)pyOzBRw9=tPL{{Hi0EV~ z#Re6+O6VUe*&k)}k2UO%O8N)H-3>zba7=lpAQpi=X{J<3~e_OS+PPL2` zojtYdF*ox6f>u0!eV`ajhtbk5*?(B@<~3IJkz|VBzLMNj@PQzhGl19}mV~%gFlSVC zwm0uFXVnm|GS528Zw67)H@-8; zhQUQFxIy1R)Y~C{sgD(}u4Y-P{bn+3oDVB&FH7bWiM%B@OymQQjjBVd9={(#*D5hHAed8gE215>)G+K8eEtuWCez62g?TTgnxO} zp+&48+#!(Wno<2?_V+RN_e%D+U=xfCa%O@`wp;4hnZXNw@{||M2cE8L6~o>dmd`6J zU@G%Qwso4>)~Uc0)RdGPd@03>$05mKN#3UYV|lAinW114Wt^^Yc>HIssQM>moa&Kr zYMLpMylpcE;`w|phTnx*SeWE;b5h6+8^mzDbUzD%4L14CCu)A-$@RSCI7=p{OmJ0e zZ{M|F*RoHxKpZSl^S7@%3?xVo0d3GpKuk>LPFKXKx$_&k}});xE} ze?VcpSpLJv!^cy?;i>C)3t}(@OjUPgz>zU3S**Dy3D=D0^7FjTMF{fLk8+3$=L&)_ zDrI)zsHEA~jk5WMk4h4QuK^QS2K!J*30@+9n9m0i#l94 zJ~3kXf1$=k;4BN*IMGo!_5Qxo=G0&)DT3&rCw$EGJs zLl>|lCM*FlMEmB)7M-YR7rnBQ=TfJ4lWL!`AuO!B9IjrTY@5hu#1Vpa+R3SPPri*EzTmJetK^qd-tCNX*vq~-xnTWwh$p1}T&A3dTD~C*6 z4}nOOMam+o-TlYE2)V7=^Fw)T+t$%#0!u3GA@cN!Kz>a>&ajsP!(OVrvb{|ws{NQ5j7m>Qj}N{~P=H*PnPlIhw=lXRg6ADRkoUdyAo~ zAN#Vpn{z28L?QMGGH@dEeh(gLp9;v9xBT6kSDvwlGT}G5ztRN0Et2&RF#mhq^ua-j1 z8ZAXsd-=Yl0#S#L`F_8ktzF!z6S4Gt_K5uq-w~@Y;^i`Ou#ba8}`ffU|Kto?4Q5;H7-y zX~+dkdk>MkPsDjX7_viRY`izS-HbZ(j%=q~5bd|v)?BEJbB!wqoJl!D;OWg zg{xHz0JWBy&;@~$HnHZ%B>0si)-1pr$`GG+GDQqN(?<{#pQ|KrCdGFR=l)rJkmKUQ z`XO{vt^kY|%ZI($f0tOc-Qw)8z1crS)A=`)QKPM>&|F6JEk=%OO9_c;s2MFO6sO8e zS83!BxTRwOQAru^l$75%isk*q*@w$RQeNwusys+b_c(}rk28?}b&4get`mF!7-U$AdLp0XH54fLF$@ra39y!w@eaxrS3()V zYtH3mZHV%eQ&KK~`i435d~R7PNb+Gx-m7^d^Ce zTyL}X2KaZ+XT$Injd9Rbmg4H1f&9TKm>(jIf*y;AUmrF8&}!IPk*piVdF_KJjcxME z&E&*BQh)L$GP0T2wm{l-n^u_6l(^)Kic|Yw9 zeZ6PvmcCqDbF@uG74K$C* zV)=7#_BQh{je4_B;bDp~-z(T*O0O?N=W`Ar>=1Xt(X#`1a%>6=#vdl+5)(J^a-k(io_6fk!05SMm z%mtY$27fm|5R{xbXDX*Z>Z=-2KBqe6(W|Nk(NBPZdKMgPq8DQWG5FvBL4ZbAi^0+X zNF-*%sRU5ay^lEYpX6Y84ELiSfe;^MSmoGWG=!ayWYxQgf099 zpGN@%AO8H=oOPUjg@EyIT!U`Z43s3Oiwow%=eLv*dviT|Whx|4i9`XWWOtHi=#mQPJpWpUV ze10B2KaVXAbWhjEgRVHZQ(UkV=ZDI>7gibbTaNQ{#?0?)2b*831Lg-gD&!ZcjrsX; ze$r&kP3OqxcLmIEfF!>S*Gy1{DOSc$u_fH5lVI2~#b`1K>a!~8W`NToZ?8D_9tUnO zl#<$|>;tA&^dl*IFFA35)ay5SN1lTEN%V@bostxwKuKP22o?lYw?>u@d=hC&#af3x zK4>|UU%wFNV%-@W+DnH%>Xo-i*q`y`CJVP^ zB+g?c;}YOYHD#zd>3T8nw==pPg8eJWEmZJaMfZu^qE*17b`~E1?of-++)Kf|6f6YZ z>;}lq(ds?X>a9O@lQgo0P6%tBx>7lq4MZzg`dQ*cf@M>Xl<+E+n=KlEa`Sx9M74w0 z&}AkFUNP3mcv-X;9t4o?)#Pl%juYkQZQ{Hg3_U!lji+n$ERR7?c}P2TX$*b{;>W}A zLuW+s^Dxh9>z%x-G!cHJY%6|J&%=qVV)$vc;K#}F^DM`_QgBo4(HYhi9P}^}a;w{sPf56{S zt9@Tt#1@tie=FnhcjF~7_{%{2IT`*mw!faC_=764kL&{JGXV)Y}*w0$rYXvJo zizv)A^NRu|A3US$(ILgbCJrR8yeBgGB;|j#QyUDd=4`VIBT^iv9aO`!~w|eTDto%KrV`x;9xz@rnb`vq~)Rp$_8v_soB-0B^zMHjW{(I!cq;>w`%ZE@aZuBts= z+2xAv=*s_T4Jy~uu)aVe^M496|0iBT7E`p%XO|GBSE~^M`EMMfOlYbkdz{h1L@jZ8 z<)4VWM;l#75qDGqH@+I)s3bFbE>TM|v5{B)QIdCSC;m#C{u5eb`anJak(uF}vy*a- zQ4m|ROpNY6B=*uQB7fwSPkH6fi*mmSMZLVZrNnB{(XHdK9DkfYfYfVS!B>-2akUuT z(OY8*6mJn1d~8GGS2fnzk(trnNXa(u98AepSsntF`Rgf0QnpG|FbRtA=sW;< z*;oq55a`N9OwLBkx z?s2);=PHq~q(=i!+o&}S$MYER_-jWXzxqE}aVn8-aYXwPb(TY$^e$=^4>AmBmcp&M z$D9Zw>5>WpdXld{xc`MBr-8U}<;BWVZX)mYD)%^xmDvtS znc%AM=Is&#pE5eHWfnx#a;!k+2Jg=?s%r$hKVuFBHSN3e;x5sZ1*ih5AnJ4*CuKTG zHa>BSxzf!bVjN{F^^V-kL0N3u?3GWm+J@2>iWPtNm8`s&K)ooP%S#7+lG~Ye6x~*5mbtQS6%OgRO^}!3IP%UCi{CZ}%n$OGyOJfYJ^ekP> zt~2x}i@m0ba`oIM3gl|~57GiYsKkHD@Sh4I?}$zT4_4@9Ymxj3Gx@GyTNttxOGfz< zHok)6(>t(~@vke{rowsdU>6_P5tP_aKMwcZm=s)MhDGkAOXT_xD3l@3q!$#w0&9lg zq2c6aWSC~-j6`N*Vw#OT+-!VnGCwrtv)#$f#=jblhX;=Wc+7ibPM7j%0CR9vCk=Y`!Y^J9tSF+D1r0;AFDzGT?-Z zgFD5A&HYR#R^X>d@$y(?jo zWM0D;tWoUpU1`01u|eGBOHryx!|?J&B_X|hBVSoA-?TrsnLt#SGo(@j&;n>kh6MDM zRe*|_G^AFZ;Hm)o%9zu-UJ&R=sjA}OO7Z1N>`*KZ0nBRq_5ibV$v8z#uvHeTlWei$ z%Z=vfkThf@aKQCbsZVm1Mebtb z_o3_UJ=7w@e}as%JfAG?U~NcWl+6Akn2CIF%CL&OlxC`nfQLHN$GTZ48)e-m$M`q@q}ffU0HGW$@CKbim zdnCEK(tF~7w_d-g_>rB!L5w^p*>(r=S083KbG_8bO3p4vD~b^zp{-2U6PL$%k5DI{5((| znsqZpRi%`-Q=I!JJN@RAl)c9*e=23~q$~zkS)cT(qt20(5;wi_C}kAo>af3m$<*sN zK}vOrVsLpf?dPPF{fSrJC1rm^Wj)?chgThSwxo~>iRnv#gs&NgCNmsW%5HIm58kE7&c+F^T+9vAhG^xL|*rdgiy1CC51T=FhQNWzl2c ztks0|L5AS=I>wcGO^nm#)$xU{6+bw+lzvR{Q#lM3Kj6@y{B|)aenRY6YGI0>2PkC1 zom8$%@h1wzEK``vxO^G>)Hr3_l@;A5c3a#!ptPVy=0p6+geK z@G8^G=sX)4W~zBiRwpHE9CBt4wj!tFU+DhDT^?3hkfR9}WqEWU2_Bc^eUiK_=oqzesBHho1~E%#SN$_ z)lnHe1&Tye1|iZS+G|ck+Cd>so5~GP zj;=SAJ9bl@J0u2aZm%*uhlf*$BLHtt(Fv_ds7j4P+!kl7C|DlSmVAxa1H>=(2vr-GKW5g+Z?vR?>k=i;-~ z_-q4h=9t>bM8@)vcH?V?(3tbu&lMWWLt3l$)D$`^3DU=Xb;o9x5|kC6QB1)$mR-8}UFCzvaG^SlNAv#gS6sK6_tc{qv@mE&At_eVz2r?Vx}D7ZvQEfTmx8`WIE3 zluoPpC=}I|RAi5yOXPOrWW!fLSBeh`tcwd?Ov1{U6%Z0lVrAmW6eO+^AgcdP0;;%% z5mpJ5(PV^0IuTX{BdoHTR5b_eq3w{Z2P2h^7y?axd9f9$<^d=u6BKR#)j64nU{ScG1R1}%!%Dry5%Q!JMg zm`H%46?*Tj3bia=3p84xN+FGO7)GL^7X`HTT_~_-Sg>oM|EuXbh6$1;rVmR z;V!d6l^+u4n|>K@_lUrk1w)W;JbY=?erfkPF9#yjd=FkGCc->oA}k=5;R>%bqp(_* zo+(s~fRhT9eNE#Z3Y%;RG|gx#q@TT5mk|)-gGBIQHh9>6UP$r5OYy<0Ir=$TQi!7^ zg)ly}J{TGwmMqfX!}s6ShYyb|(&9rQZKy!g5Y_?msQ<}-J6^VhIxq8rU>6g4Ji`m9 zk!#SnS8@m%sHoAOA*hiGs4*pQ6v19_Qp9l9LW~@W7+C-jhZ%}C>YBW%4S|VNfQSx? z#VDi;3Bw!skNUY~1MBH76N^*=-M1+g#F5gq;5dME4$37vvWY9Sn>ama6BF-)^dSw& zDpdFJL*HslQ&SgewlUo6hx$8Sx@`|!x+Igk|JKrH@26b}xm&Yfx9+y{HTZoewViv( z##jip^NhFD{V?{efdBWctB`LlKHJpI(E4(aeDh4-p!{ZH^x*NUAZM9qtPGoAkh)lF zSG}06H0iDQ{{CcW@chNAHU9$x!{iOvVvvqlLllsK=P=F zBV@cvV!fPTGjjqmIr#04-lZU4mp?yFG3MIE?ro4bRz~|yksLyzaqIHMSQV1`9X(2u z0H{c>+%bsVuURGB>tyEC3)CsJ&MOBu)RQeXyV%c!#Ajqu6-&r5bAkz3&rQ1(iN=SP zFJ?HR7raLsRNlsK^2Koc<&t@J4ih5`c!@+|Q3!6QtGo?2(G(Y$!8!XdgKfx~|%3+EnljhAxA!hv?xTgvSWF|ojh<)eN@TP*3QxEZ8 zY0;bXek926Z*8t(B=lGvl|iM4Ty+R*-_@1m0@mkfwMTwiniIJ^+E3GzAd>41N|IdQP~{Mn>D*}%T|2GpCr+=2CUH89LDVZqH< zmLDd}yBW6;FGG%Dsf~$jTku_E+4+1ku|^FvBXJwK(sJ)Nu%YbyVl)22Z>*R!SmMq^~U}Hh|a>7pc3Jp7zt%KPq53oaS zaIN@SWv7C$6L~G{3>PMM&l)b|cF!3uEbb0ch4qezNfQlh{R=X$7BiU~_MBp;S*&ytX485nA&eAVEfIm7XXGrZD_1=Y&+<*WsYd>|RKl$_Sx zE;X2cs(@_%D6;u$==pnwp1)@_!M~cz;!gekXT{IMYF`kyk^A8vh0#0xAf@50$xSLt z#c+Uzup3eg_QB$qvq^au4eX1vV2@ttzB?QB+SiIN_6wp9DhK1B7#gB zR5e5nfipYpd{T}(@r~VZX~ND!>QH|>ySNF&yIPJ*bitE&?=4XGUIkn< z+(+Y&ZdAl*P!NUOF3x0jLvj~8Ck)R)!Zt{G#9v6}cj0ZwKysfIC+s;bmHuf_pmMUhs&WzET!OuUuW(+@fLLs294rIz)SF3$WgcVa~; z9>e?9upNF-9DWN(cN~;}|1KhbBV`w|9S5Zbk`oQe^hY6aOdJx8(UZtF!-S;uHnPq1 zV~@9)?>?%Yo*}YJ4N*^FSKausx~tYrR(92wmvr@2R~YKdKSL_Msyjw|Ugi-U4H6W< zK1rc^SRB-E<|dUTz#hSCB2GCkZSiOQ_p8}Nyd@a7W9{NJL$Z)&u_TFO!6j`&YQ!2x zq{mEB+!I!t^&l&{WLX|Aq+!CEv$X^Ud>o$HY)dSkX0af#(=({}q!BVYIE3U*33h?& zWW$mIlf)n9_>yG)8|j{KO;U$+T~Y^!*v{+_?M~d4RCnTqop^Rlkm11}>6OOLtCsCT zni<*gMpD?`7C~+#TBORbV9Lmy_~}l1;-#6Lz6)1~oiSBn=T*x-{}lxtNqpOU6(61R z)tNj!QJKjB4d>^h`iWehev+@`E=X3C2|gFgmWrRviHMpi*qj_FsG{-Rxywmbg<|R9 zPby^ODaw8T3C<`^SPI1KxKDN=+mi0U^XGt&1Bmkw7SmQMgfxpy;4I1Ve&i`~^-@#W z31iZU1)5p{lqk&jGJkw6GmJRY5O^`fOUQbd+Z{2FNn=Amp#9Jd83aru z_v1rt2}Kj7NEA%vGYL4rlnqEUE=gOu-ld zDAy|O&nI!osq_j-I`t02wanUSZ~VRN{85fCfgG^q9KYMnmnrQy`0pJ25eM&w`bq3d zX|1(+PN^pxYnk|{Oy!h3qBPqgQF%%BE_yGUEXsX>nC8{(qLdC_mxi#2FlWBYM-CSw`cTI=xfMd(+(pvEtu-1U4SM#{E*+O}1nLJHNDI82g0pz@%X~S&JdW zmrH}Ysv+3Z>*3}TH9oCQh915w%U&;LsR%}BjMT?Q-(x8r!9J7TH0i+N8Kb8df{?jNADOc44R~&|JT+$}J7MFx~7BZba5| z({4ke@%fh*GaO$jeFt2mVF9j$CPFEt_XpNfr9#PTOboG|+Cu8qay#BHzhQv9Yd%Sf zvQpO(k`{%S>~V({ZN(jeJSc=9O^Sj)NbGFV!S&ks{!(_%4UzPs`=KEF=K`7rm8v>1 zhCn0_z*-F*sVME8Jxy-T_0+<_D0lea->C=*gPcfs25v>yXfEQ(2k|l61JN{__-DAX za&VcF-|v&+Qz|7+n7tmNMv&PdAd_9li9+HO10MTHoSHE@ncNT}>7a-kW@^?VubXuQm#>{Hjj_08myeAMzsdR*1$`VHy9K6%ai4pc; zd_?hZu~V@_9BEG48OG4RJL12Gi35v~IMd`#Ji8e;)oK`@R&4ScrPRD?x#2z1(9XT% z0!{P+4gwASv|{ty68te`_ia4As`HwQ8=n2!;B>@~+1bGtHz}W-c6RU{PK;jq=~D&= zJNO9M3)vPYo`t*A8!n=8+Dl|7?AcN0PAH&9MJnD7q56(HYK->I7owTAz0z~qBQ0B4~B6Xgc&AxY95e5p-$KrXyK zBt|4ScppTVHFj3A&S~BCLw?e>yoa6RFlZ3DR#@2q^~Rv#NHUhzlicUqxbETpT;Tax>H+xp-8ME_n#c+aH1!53q`Li9Sg!!S6U z1$lkXoFzRMqeo1gXyEvL9Dj`Ce~{iw(L&~C%t?MLcjA@}PmyGot^BP)zptELErT$s z=6z5SRwNLIf(;^a`NPtbnGmKXO_)g{hzxnvvRAqY-%9w0xWJ#iX43rqQf1&vbKp1T{ly?pnE#yU6MaZ+OnuZ_DX;BBe!(5JcaatabxQ6fZhFjNHM?R`?>v3 zlK3flKX=%pO}wAG)Z$e2hncNO{!6Mq#8UksmWuN>syHaAtg$GbmlMaho`&?7^iV|F zr$uA`(d!xMyImEsJF)r`^%f%`q1<95ipul^>6aWl!sUvfj%YRvyyQ}qlqXo;-ybaP z-)`rR*!dk8Zb@ioiJh47>2O5FqHNLK*|evVeuUmpYm zIgC#`U>e4A2h77o%K>-d%O5>uV7#u#VSK~^e+R^$=lCC`wa-+`wB$z?abi;;2Cm^k zXFMl05i{C@KTCJ;XVQcJ{k8goKQs8?pZ+2_`1fxm2Y*iJgP&8Q_j4^-`h!0qzgiQ* zs~-`lW2ik8aSR_L$={K)97({UEKQ9V`seKiWjl+>C+vi*mczi3waCOu>7X z2D8%yE}(!YiiMdfAj)S&Au&;rB>^T6CD;W!vI~#e9Kr}E))fLdbbg(djbBiL%OtI@ zRW$x#f0yC-LsI+AI<>*+PP}cMqBcN;<#d~5pH?j^1EjPKxxW^xQk$x>l@R4&1VY6p zA`qX_)`Y}PZQY6Aen8{ly0`UrgoE~wgFh_2lueUGUc+Yi?Yt~YM(|g3vLNbKRu37t z0sl}A68@frgfGB@A|@F)>#k`d@e-5Ba4e5{i{bd45MR7eJ0f#Qs_@PqJf)@z$Agk3 z^_z-0Kd8j6lGZqJf&tRi32UfxyU(6$>e~(HiRk**gO>ujGG1Zt8ML6U&oIc541+a9 zbTxx$MuX&1>uKx#8d-+JJq3C8zc3t$M&}c&88DL`mW-brB{^c~tp>t9Kh=!*sZs94 zKh^|vO*}p(sne8dnH1cBV`2gloaX#6Bt~C+QX>^&G@LtBJ6+QguvEBgjRr=_!1qn1 zl36?A$c?NuG?$DcisOIaR0*S;aMzU+9y1}~IWs3rG$W99rD+qiMI_*Dz68=68p<8Q zAT!6GP$dSj{iLdsjMO(wV~3KrbHX@Fs@?kS%sf@@pyvvlASC$XI$4GUGaqGF%hFS> zYFWy3RR``jjCBR#|6KLO|4AL4^_2;_`)r-^Bl{u>aepD%0#(PH7^VEJL6-S17QH-` z>`Q;pd>l}wEEYeTAYBJ*F4qzZGR{v-ldmk~SGqEF*Azg$A5e8kxihebog*~irb25z z+2Zs)2-g$BSWkahmic5$iZ5O!o22J~OM%-6aSh%^@SWFRMA$x!s1ci|1?2x}bb>Us z*re$Xk!dm0;^Ukp#`mJ?bmYWwmI`|RfD~t1N&P>C)c;ecu@7--ni&E(kpE^?9rlAiMd(sLe_p8I8J>{A9deaVb~BVbK603ZD73`hP`XK2HpJ=8^g*(VC7(j zR~oRF?D9-F2d@JRhFJ@lW;YL#o0P*DsHYgEyHK&LLZ!Ngo%4wr4-?uplNYef^hU3yJG-CB1+lUHoUYES>$QYR>TgQ-A-W@}Et z^8Jeob>F{OYGG9SL+9%NBJ-&IA&1%@a;UvwCABatq!tFRuGGR-Qn5`muKZ;KBR%mM z@hcWkzvAOdsbOhWDXpTi31ahRWD=QuA(gBPsoBA6sHd6+Nds#FO9X%d`6o4)P=?nZ z2Ng6N{D16x6~~u2_zF8o+eer#);TB1ciEO4NY75MsFEz4<1Crrt8}&}eN}=Z&jgi^ zBso(iTe3KskW-uTOvPyGr^Nf`8)ChX6zhe@tXeN5YP~oUuwI-AWxaql3F0CpkxJWk z!8ye`R$NjgX-)pgL+qSZX3dpoB@~h8EKWtUqIQfk0Xv2i%8o%2y3{Du)s(CpMt1(# z2*s4KST$uFRFYT_Q-+d&idr-9==(<@(fFp37&6Fo?2~?46EI{bxv>;;G@>`j�tT zbyNvT3u(*v@?AK-b*7Ay1jG`N~1N)%N)$CQY`b#{j^CetB2 zp01?2SH~aB@3|d9I6TQ_Q%;DKOS0--=ERX|?}K|y!Zzq&D&rXNch%4PzDv}O;aSb- zcu#N$kH;xm6tKLheJz)9fMJd=l5X}BhGFce*Fei~NJcrnw2|Yi^cS+JNN3FfbyKl! zl+q1aKtGeJ6jROlk%&Kr#ORyGPBcJp!WlbX#_`1*|BdugqBam;dFLZS@+I=^+hjz) zh&2Rs*S{$lg^*~R+ZuFNY0zq-xDuo7T>Q8@G3_0Sg0o?Lw?pD){DWF8O-(m@McmX9*jgjx>wR991NPz8Y`%k-9ouBvn`KDLYN$qxeEwF@T4&Bqd5-YWnwlb zrb#C?O+Krn=DIbsTi7az|fQKV(_5w61-k=uZPe;%#C?|6-%Yk~vy) z8svtP)1co{-RNzE(R=6(1#(v^l?5S?{>i@u88e|}afAW!udmk~Z=LqE_1d}DBMgI<#PsfQ*vyf~(Dl1wn;99~9s2nG}+BYqD` zvxfPW<{32!WIX#fF{G9aw+D?3u`*O8RK2mc4nR)Iw0 zACnd{l5@#XIk0yL@ol zkPNDB^Fi3Ml0w(?dLV^vJLKMJLi{<&G6t^2zV*;*8i>pvmdf8DM)LxaU#paIpNaUX zPQ*`5btiuQ8d3B4L5TQ-Jp26}kvJVm-#$vrBKWHpCK5|JEHe@kkz~$ikQjZ%Inkh| zu}D{{QAqdQtp$+HklCb_J8}4Hn$vLFqr`rYL#*mp1ur4_`xH}PCbdsh$iRiUIB^a2SB;|01pETxnQaPdh(OoCWu~{x{xT)NRj*gr!PG+`Qp*$tCB4P<-R zn54YRVXUW62W_j#p((<45Z)pQ_&=|q=Vp?S(kTJ&|G)Do7LMcBC{W+=j&~V}ds~O| zHGuOOuPQi?Y5C1a+$_=fTWQ84)qzFHe@Ea-z?8+u3=V!7W`ge|_)Y30E6zPK6*({i zuY&D7+mh+qa~Ti+38`dkwT$KO8EI-z&HAy`vNTEkOzcmK#;U)2$EsGU!D*_|y?UK}P`JI~2zjfD^7V&S5-QH6Et)z|Dm(qZ1FlB`#K=-j0f)F*S7S<7(g4Y-QD)K%nF448N5l3t~h zkikxeg254CO89^83#j*btwZ3DDuEd;BnzCSPm=q5c=ipd(I2Tb5yNHTPDv&1C8aC^ zP1Wx3lu>t33b=zVByCpxK@N8C0ZxoI^WYCUY#008NY8d>qU zYd@vKq?7N;8Fjd}L%QE`jowLX_H%~awZ|yK>#NfFW!i63r(w^t*_398ouo_w-b{VS zW+E%k-_9+Exmxl0mNg7X&|Q0Ch;ykN1ii@7&e@7}+#`9=u_yU@L{zXBPe?H(M z2K?zZLgOa>n^2#d*gQgU6LT~UQE7zZ^L1tLu!5Oo(7TDLXGHOb_y^nhN<06Rga6LX z%fwSF(6>}^aUaL;ii{L9kWuGe#_~Us=BvR_dR~1WT&8AL&ztl>QK|$)(SM13x^tUbCK?n&E0(vx z#>A5wukOUL1(40!!KYZV9DJH3$KT5?=325qG1xDOj%pcy&f)kY^nMIx9Iwwt@Ysg% zXkzmp3#0XQ!7AFjQEz{xL}F%zw0cg}T0My|z<6aWv3fr9vPSb)v+pZb&nM?-^gLmh zw!DiHx0yz!RXZyhlc!f>@+=6LJW2jX5{Q{SmY6-idYK$B8Vj{jNJdEmlSgfz$Lk2h z?ENUQcotB*3+W6p1yaH|&F;ikUL@a#*t=?Lxx$KOz|h(uMD* zM}@uTzF}e~6W(gE2IYw27f^MNgpldNFk^$lFyn&4Fd2$mc+Dm4OtKm5{D@R{;tw8x zT?e1!^tZN)&p9Q}uxs27?_3D7E>p2nZ{5c@MVCm1*UtJS?Qi56}UOC~! z&OgSTVmL9{d+d~oSiX+|K^UOr$qUo0tAeC~A!xiuXmA=DfbWySps2X%wjhTv&f)}v$}s%Iq~kfm z#oS)Za3Q6a%`Q$g3=`6NB@7dCdm)am7%ryuVjSYw1Y|u&E+Qe4Bv-K*DfczD(iFXm z)#Tl!nsQ1=G@Aapkx}#K3=og%)*{$ec+QO6iNj~ZHATo~;%~2%43j4Ol}NlfN@wl- zw+{YGj^0VN^I(px(45>F1Fu6IV;Ih-^|INEPeyQJ^wz3V%tL(l>xYU1uP2uy56{A_ zvdS1g#E-k)c)3Zi6vKM{3)ZF1pY=V(IHCpvMUasP{l|;v6Wz8n~g}8eKC6De>X8mY`?G9T1IM@ zQ2|N3I+`_0=;u)hsAXlyqL z#6Y78`A@AP#(+4T{q636{SEZhSZWZ6ZJhn>ty=cC7uORtG>)7Pd(=#z4Ow-c5$+FD$VBB(h^_6k-mGQoxXi6lf*LRF+-ghsj zEFo*@vk8=&25fV9|GlHP3VrogVinr)S5>Rs^w&Dgb2dhr(X$Tw+)Zl!bsGPCCj9E+ zpL6Soe;%Zbf6lEp{&`Rf#6Rz$*9{vH|Lh4YDGO~URBgH33mRHsG(umoq}U*KWTidbH8VT zVx6&A+D8d=jvNl!2FQn=CdNAN<{A@V-10|>Q&Dt2_3~x}B zu_Li|l(DpMkb1O;gH+gr^m_uE_SiwVB!Ltk`YPMN>VNW2f1cw#-Z?WTDc?>Qsmnw8I zyg+QQgWqT8e}(+;%19|m8)^Qch{!;BQJOwF8E@vrs^qNHZp_g}|C0MRO9x6-LG2%aKWPzKQ+n$)1bcGS`VqO2ffBs- z-ZfBvHL$L0II4O%4CNSR`hXc|{x+&#U5IquND@5@xfaAxD~NB^6*xbM$!I4v87Z}< zOXGBnN+j9+tsP<&shm zHnpjTFKEp~vzMw3?qTN?8ZItugHih@W8ucNLujcqNX?zDwaYJFcGryHPF)vF4QA_((he-HaA^mKv zmZcx9pc9k)GFDZ1DYvS^%a_)AgHB%TRNqzHf^z|pgy^?_Z-Rcy))!wQz8NaMq0b(SZtKt}dWVa>5Y0h;6-nz17%}9yD6v)qiQC6%ra3JA(DoV|x9x zPXf_TEeYyebxo*GKdrp34*m3TRX<%x>;D)*KCGbfVL6o#%ckEDfFrr^1g~42enujZ9ow6wpkI zlx#Noy58)m#jC{(P6{r7kT0fmDvCo3a<;@vmu;%atUQMtv+U_*KOAS#PPa zxNDhO2{5uC0MrG5KTl0sxKg>P1nbV%ng->rjjxua%)7MtFYXHDzqqUZ{1@%(&3_U4 zim}H2_?hvl?2o-O>!|;DhqnG>W_|X@&+hoY&A)Jegtj0HM@|PP)vF-&g3kUJ`$|y$ zg~<`un17*LIEDX>VZr$qE-upMUpN=8rZi1cN&;MK{)I4hez<`~#>^lGLAXIzX_A`l zoUh8VG|UO5CbNZ8fy8Z4YO-fWpwwgsB)(vy{>9rGW6bM+E#}0U1;OUT*T!pLVN>tM zaIjIi7p&N4BWl}c7hG<%eRe^5efHT5t7@O!@^lmJv$x&XnC|#41!=V~QZKzM%M$+( z%-~17ZU&J%@gL)q8FXUh;{_+gr^hy?x#{%$`FbAB3!#f|9N2`c6FQ@8hSwK!Nvl-e z@p>)#d)PVOHZA{z(RCel@`81NeJv@~-!sX5KGJo4(D#pe8C8`&7%)!+lgGY*-(Ceu@EonrudvBAe=;Jb1o-|KzPif78`) z<199~A5+HWUt(1MNw!**mm@*waY!^Cn!AjV_Geef5F47zc1%E`@$n~DL;idEbrcef zcUFDGNUO8KAx$94k!bj*x+6h+*AJc{urATb9Xh?3sBrCLT} z4m_10y+%I4qh@Ii`4j^$O3&Rw%x4JkD2`V6Knd=|IB2*nsiecBSd4l(vG7qE4DTo< z>9BC4D^C~l{2pPf@BDuCNRw))Fm_7Slo$$|QB&J!S zq}Dsgc$tx4K*FP@Kt)06oA7GcXV+E))WpZnHPjs+FAO!&-b8W2pcqaV8jFOHah%W* z33ijiv!Bhs&%iL*5e{LbiMsxBF^1C8sOc)dq>LlPXc76fEW0%ljmcY2G5(17qWCgW zOQclZPvalnKP7K7Kz-CPr(~*k6(iAjQ^7JY3Xj2XO6oxx+=<=(K^FxW_(nh~@#nzU z>Xe+8Y8mY!C`yK(M2zF{-kEQi#W0M4)`Oa!fP|?wtV|YYq#q=7;^)E-LM#5 zLVPC+-r1)3GExm0FF^=k$MWOy%QEs5xy-?V+Sw6Eu$iPS|2`rk(U=kk5fss=ijh|S z`-tq7ZVIcGGrYdB_16c&G)n6G-TiYEUX^CND$PhRBLSI^bMhl>w~qY3R^J2Mu!cf^&1C^#aO8A28t@h=F~zml)&|L>~D=LS@KDgp@+ zHzFbJMw5Ol=JZm>0{TBR1oi^nW_YEGux?Ugk!bY(xJ0oT=UQyiV?`A*awjnCJ9Wd8 zSK7kV8Vs~i8KPRAKZ*wxVZ+nHt@f8cMFethy7D1>T8V*9^QiQf!IjDVs%Wv*`Y zSVB=4&&-G~mG0d}Sc(f8s0^>PNUoxVMi{$WPckZCR>m+{G|$dl4Gf4wd$;*=ajp@;e~_J#0M*6SRV;UY=8N;LRcRV`C&t% zap0q$Gh40$);LQ791MuRB8|?yB$H(W7v@BxMOZ=Zk6xTqLG8LcGPwY=Kuo_AFQ%$O zLmc8wUVnQ?mw@Grj(AR?$VIDPs-aBMN&?q-L`vd|;wyu{BemSRUZyM1x32auHxYk! zC0k;Ma|;Vn<_s@}qU(_maRj#&qk|!GK3T@(rnGP zbb9_))Vl=r-j3uwh(CtTRdS-uU@tx%j*2fnVDDLhm2h#8?0;n=Orr`)L|lWvy(L)Y zz9B}Du`yCfD=*Rk$N1#CvEBm5O~FTVhvSSiX?sKX*js7-&x4O$HrI)dGcGg&AB{wR z$ih5iVjeO9A9*O`hy~X{rlDd#11%Yjg`+XCoY02mcf1FxfpcX0aj^Z2MT=?ufwAdF zWmTuq_*`SD4++YnN9@7N0+LMak;*_5!`ccIlH|w4(cL;U!JRl@G~K_+DkzK7W8tIZ z>{=~LdmfDJgKdmtg2fMWQjL|C@}osNeT6-wQ=z&F#MTIy0+7iXzb=$!ANJvSI`(WI0Vj)q(z#jAD=ftz=iTzY89oN z1ebpxC&5O7`bDIm9_@G*K96oyI)2^#u<#U(fjY$1m;&R3q|ccx9T`$^4*#YeUJG5d z*&dfq&#wV`)(14eI(LJ@`k)Z3D~Fh_J8+1loK+67iMo1z_^bLbOh~r0D`_CU?F?Dp zcMnEmK{;|LI+uH)-?lRkH8X zx&*iumoFAYHA24l@|xreS3tgarm^yckZb8A@6GU9ue{JmDPvyUQU(YaAKjo6G9LU* zD`a%8OUP)7e3280_2116>c7AK>Ew$IAJ!>fbo=%HLcSRMnId0Ye59%J#e^R9$QPAd z-SWj5bG0l@y06jlMPB@yj5MH+PQKvIG_!nhu~W4yo$XYge33`+_jQurouQZaYbgHW ze+y_SR8`FQQX^)t8_2KmMgERNy`;hhiLWbX#n^~|z>!Jw7{N@^zjB0ZOOE@Bft{BW z&M>pC$gLL3AXL0k@>YjFy> zmK1rf^$I(Glvbii6|ya9>Qe|e0A@gIwgs{Cd&#m4K`7n9O$@6?x!?=R=R5_uf9`?L zd*Z4j`3vqP@{Z!BC1z9O4*DD%%IEGOQcs0O>X9^3Pod`iVBq9a9OZ%B$s{D)7&#$W z@Ok*DOFAZ~$k8Kr1tVQZtB?cNo3RXW&aTQ3g+Vd|{w$eTMTWRiMP!H?av(7VD*hyB zqA!m8B`_jV`+KMmv@*2JHZDOU1g+ExL9b2@*@d(jD;Vj%T3zVZKoLob_P?DJlKr=)uVAE{vBB)S zQ2p$`*j`~j_h>!rV>u&BvMRin65dyxAiS4S-btXCaq2f3-b=N-M}_A7#B(bcue4=M zF!LLS)X#ibJB9gem9?2yL{MFa@L5uTPu;Km^fX~Nq*=^t55_m3;rkQo3BHXZ`cpZT zFH0%DDY5jx+b=bMYjNa)p5TmCqO_D?A!(2D1pbl4wi4rid{MlNtQD+y$e_y)zLyoh z#7JYUVBHnqXpPtjE*cvDvzK*mB41y?U&oR#M?Tq-nJgq*CgWo(79ViwNpfkjHQAE> zf+-0^6@M@MD7X-v_|X*N734XKjXr8iV&5qmoL`h3rxH!YPo}Cw5q=E4U_x?{?*WW$ z@-E+f6ypN0rs#B7S8LlX09^Qd84yqKZ6TwH(GZQ_-$?YH9O=e*0&Xic;I>f%ZVH&K zRI-F>qtAJocso$(srR^GaC8d}u z|FKnTz5me>?0-xn@_{YGD^(g)|Ks}II{)K|_b_srkdSIZd}*C7NXhzrt?}>|=+<|A z?T;nx$05-e*ZMu3|Fe7l?o?-k*8ywW0g zDI!sI`z0VgDFMHP{}i7~kh;Q4BTPu>iah&YXpK3Ii!btb2?WlNn`h$R%@FyOOqKvb zLR(0ohlEjzE#pHXeU{4y=|Ue7i}+(ulyE!NA9gKa5Wi2#SV@GI7>J;Ha-iBH8{(ZN z|8*oxD%oQ5N;4RGXY-Afl=K0Gbexv-0poi>x~-0MyI|5CRnk&Vm2yQ8U>syV?1lUy)_s2UlcSavZCYeWe;1 zsfqX~!m&B?OhyR*^SMase-0edx1mWTSxD>`MqUg&dvhD*SuL)v3$Jy8H#fektVN;X zQ<2DU0OM1{sUSvfQ5k{#onB9TNw)yLXBF%4-S9S^w6 zM>@n#j9uUulSAmvaN=XKuMPfj*A5x3L~tbia10G!O|~G1=lk5-9pYq*fz)62v9mj4 z{kHcBB$wIwuh6-}sQCN?_MTrm41TXa9IgR?h*$o_5{BkZ8vIU$tl0lNLqQ=;A(55{ z30xNw5;}E3;uP8ITLkXUoibSH&gS+);$IEOTFlOdAA0{6$z_QDhBk_NmLkJ;e>md5 z0gc#BHpU}gEFo79&PhKn!4jrB@wa=ao(RBb_U(iK_+9W>y7f|(49P(3@>dSe_w2l1 zuE_Ebc0-?=lkzV2b@_bXgQvOG_0^8{AzvpPlsP;|5Yb` zjjd<|el4ySzj74(8omYaD|RHtub1zx2fvn`t5O8DBOBqR-$vk<((Z=zr>b!0)k=3+ z=jsK$mwWg%j_ALU>YtfwPI z%g~R`!;juNoq$}2yYwJ;Pz!Q{&Q-}7Uf*^N%w5#O9OP&GH~e1a@Ra4YAHr_vWJ=1r z(AV{gzm~I@h}l2BjY}{~@v-zJ9`aDS_t_pwx#5=`!=ZZ8TST(gHdpKm^L6}T{ssHe`x^V;o(}B)HtXMehi7mza7NL{hQ<>t)!B;DKUDy`re|D@AV?@Vg2J(D*xRIS?mbGTWEfM^@zDsd&F3NCi11P ztLB&)O^=!G8u=KtgnYd7164jA@CxB~&@J>p1nf0IyY%XcO?ud0CHwBh^6{GgkW+2x zf2e$1`EPu(eOFc``?4-IqkP;IP1=(~54TK50=OqFMci&WxeEj5(LGtlWLGtm5M##sH z`w5ba@mI;xYd>KWng3<;$;TK!QYn7inj0(}_xkB7@FQ-O-v8mz;m7tFP4Itw*%J5> zTY=@jc@4^cJN|s~pSy1PZ%6at$I~l_|05CnA3f^xf1GL#{7C)Z;)i#6!2j{${}MlL zSRU|y@YMeiU7!EsR5RemO+OO+xbep-SsMKV_&duP<0|6@xt;zuFL|8WoG|L9T=ew;pX?f4xMDpHi{ul z!;g1V{P^VYzSp+|(b*=|LRvZb!kADZ@$LU7k$C7G-A8%Gy$QXZkx2b#lJ3S{o#FH-yVrCs(%MH{Ch+6 z>;D~Ynv~QR-)6M#onSyhbpO2*47DGG(I~n4_K^_%?)nJ^BpL^GJsyG)Bt-M%_nV6A z_}xl>FRJ7Bp5*ubb^V@1eqT}-{odsF{ZXNQZwUVy`u$qx?^@SSh?S4TQL?`kl6RB* zZ2NQDu^alCZFyJvx_G=6~YuQ1jnV|Nr0oUB&zjInFJ5<_`(c zkFJLO88)&i}!1~+XDjA8!eoNLc(q4GBqK)$G-W3xJ{&q-A+__?cLHh4E@Z|1g zYZz%6Jo$n8q~Y*vs`~6Y zh3axlbqaZM^|H4asTVxiSAFtt%9APh$sy#)^c8Cu>0)>2zxw0=rTx1|``u{!=8qU@ zFFae(T6tDpPN|+O+|76!PS5JX5{k$-e57iOQ4x@RLKxlQFAt|GPo|)h9YNCtIQ%);<>3H+J4)@s|egkA~8U)8~$CJzPlOeKO2Joo0~xYKIHxxZXZP~Kk{RU^KV)6(LWS|{)5d(|Gp6PPc3bU{UQEX-~M=dY0K=7LqCL=|E0}1 zKc_>?|9j22enZfI@V%Dh|J0IZTwmXZIRBcF{%0ZR-`tG!ZwNuZ-~Jf> zZp-YC&rXGy|H5XRpOYcxzZvNt3PJzo7UsX?on~BLCqkTm%}D=WA?SxUBmHy7L*U=r zEwMiwC+gcDcfQ>+`{Q3B`d9K+GtSSk5cA)R^gjzhKfHzce{XR!uCJ;P=U+3@f3`XV z{w-=odS!QeZBmDXhH)k^&R|OB-c9q&|JV#TRP|Ju7GKcq&6R3a&byODL6$>mbB zqQxP;9Pz(Nryf2evptynqU=X$Y}r&Z5^^nZ$oj0=H5dtlqL45=1_@(gkab9u>uzbv zQ-|dIqU_s91~Fj-O}}d$73=E4ZWs}lFe=W~9trjYWF3~kE-3bg#g~yRe!!=77*;^_BRbYWup{DoQi_64)`de=ipaGH>iWk$j?G*l1m)dWWf8@?MhjEp ztk1@|97q_HfP~>TB#f~k>yQN30Le1x5Zr&vFUsz#3=N_~gIwL%4I}K(e!?g_EGj3m z4s+HXDX(^@;$GGb)d{?F$oMR5Xn#zuwLeNmDf`12Vt)**wLfl?Moff}=ow;v;2y*w z>#(@`=lW@{wgY7U50D$N|AjjGcRdo~pnv~BLXH_(XP8~1wLLw9_r>9n!1qAfP24XC zjD3i9?ypg<7%6)KJahx?oIRElw6hM4t+z{FY0-S$q;MhE?+3N{4{)iQsqBdOGJiMC z`t3II5LAnZATATPXe`I`FJ+rpyC0!41)AbO!e>Ne$j|GW+EXuiiGnDZ~o}%pQwb@SlSde>% zsYGi1#Ua^?&s;Ox1C9jOUO0Bk>WD9@MZcR$zb!^Ph3RGy6=i2COF*0=`@@m^4f34L?Z9prcvptk zmM8ah{p@e034!iOL!hVLUQhTlSpu5Cg6lu3lBJinQvPEUDS;fxPs!v+_KgePjiJWp zR&{)CK!S11dk{V~7XDENs@GQCK-HG3>Z2d6(r-_$DJWF;ZqZS#0IK_&Jim3)f4X_- zcU9@P4$!_{Px~m)KG^v84{UDq`?~pw-tUI+ssjs-YZkI+^EJ$mp8jowzW)_1{a)8X zzmEOAZ&NevZ$1B0X9NH5n@?!?AHV4u_-_dRHnkA`ZESh`+xY)q{9B9h@3ZE>zdFW0 z{TZ^w>ZfFU7eR@O7;w!tM)fBua4xW)1H-ydBC zzBVvEyJx`oJTXsq{(saG^Lyt<%|E}!{%-*O4R}L`e;>98{(acO_}6s$YJL9@r|4jE z-NI9peRDw0kXG+h?hO{4)Lto;US3blb0+DBJgU-piT^aFPXFmu$Tz*$U!!~zTK-*k zZTSA`x~r6*m*l|y37@OoKZDmb8~zR@^nW|9#jn#JG(Ud5{6UMHPyL?-{%@Y6lm8pb zKdkTmq1X5Q>iWJOiN=rKhbt*U$x%j%oOnc*iq{^}7Q>P{zMwO4E(gIoKv(0}Pq2EnM|MZ$>qrcfj@V~QGzwxYTIsK;hnwHUT_PyUs>$eX2Q{Hd! z^S#6S&40fCG>ynV`P%ifY<1)3_s^l9O?#(Gmj1n}+3i!&N2bE~wAGD|XH|3UFXL)2 z$S3c6b@s1SEn@##*~0d(l`UxhT6vB3uN7B$ey`3V=WCvB{#P^`zD_0dr_Iuxf6Yh# z*QbI0Bpv@>E^mJMV9N5V!@m%o_uk-nSMZ}VxV76^gk(!Zzzr`Ml=g`4{VV9h&PLIX z)zR;y(2uZa$S+x@BmXs!-xX5+u!U}=KeU2d=!yjJv`cGe%9=<5s86~~m8!iiC8S^# zw2S#`g!~brSt7)wp!T;c)pc_xG*#3LFHDr;eX9yXoV{ ziAyc9vJ#(he+P)qNTu-^P8y#9|MFWcIq>g1OBVe5i6zfKO21~(kd1T$!*G1Qr2yVD z7QMKNkp`SRBqK4$jD+^Kx1Kb(6RmqE8yHtB#3Qpm(kqQ!PzBXtNjX_sz*(3Fw2-g> zX#2Y&z5)sKM}8mTe^u*;dG@m}RktDer=6I&LWW_ycslSmrk%+ab04Y8fJ5?N_7Qm; zC-m!81L<-C^Y^?Fk$R_?fVG^Rb7yVQrq(g>uOIqBMxIJG|K8T55^y?l zpATm}?`j^*n3eE!mMbet55Mm|AMTI9|94GhKg058 z#;gld$HS{rbgzbKUp;Tqy&6wmx-Bm!EX!rlycDi|X@@DmAab9NWIZJe!^}!}=CP?0 zSkGs`c22}UvsuskbV0ecFX#C?ZP>Ly2v)h%z;T z4ilbI69$ckvcxQv{~7tZ{TQy!n-`DbSZuvl6nVKAr6vhWqmL-L40baL)~| zVS&N43!jZ0G{>mf-&v6cq#5(D(4*Npw8P`W=x60e`n@BJ9FtCU{3F=e?eXY{k6uFj z5ha6;`&0xcwu|BfQt5s$yJ1Ws;t$|s7(AY5bgM27XBLuc68@4 zgiaj!=%pWR$nll&XXE9;@nwVKzxT)FUHAvPU^|ja_=6n3 zD*!EcK2}09-ixe=r(zJhq0{X!fB2RB#SFvX5%0wDJCnsh?Vi|%&EF&uvi@#i^yFURkcxUVZ^PJGb7Zom%+ zX_i#Hc%ihjkZZ~01k5~LE}TGnB;;Cz{zDZAbwb?JMqh6 z3ZV-KtNbXZzatW7IF)at-(L*1H!{4w=*yVDQjR|%nFVEuL<)G(6q66<=fVeR%G@fg zKLM^B;sK38d^Sma8YitCU+V@U9yh2Q8_NmFmN?(U|7uN?oH))>M3mFZ?Lj#ufVhU} zf+GEwSEBhBt3Z340xtlr;3XTSLf${H^~|J!#+kPe{2ypw^LYcq3=CuQ`{94XS#dVQ zFupwo*dGI1&1^p~lFc7)U>M)^_yJS)cz@@C9oYGQU`2Ca8#ezPhG7P_oB0qDjgD6q z;Wb-^_`P4?9p;s~?WvT}E}O{+&@`}UGStTuJMY@Lg+aX8&mw*o5<73)xrLFQ_EgD8 z9A)tRhbYkU%X(_kH@gY3NFer~Z3?m9PwR-CKD~vJZc>OXA;dlkCN^ugma`=)vD-^^ z#JZPmVWjW!DY4Ob2+ZvKr4%0qvMvV_jiZB!TPX2XKzy)De8jIh;)8zO!bmv^@fw&? zqbZo!p)xJ8nlBV$ZS}-1{dWr^-L4ROALNUH9kU-DcwKhe`2F!^@kPGZNej!pK`ppw z3npmcb+v^L*sagQkk2y;OCHNObe!TyN(j4Qc9zgt|ycn>{f!WGblB@g!5<} zErj?Jrd=NcRw55%z|Nr|q-~&S96a(H%PGmhdwGH0bn4BMO9psRd z(xP$g{6%nH=Bek~jM7ROiPH>tL)s9(7b?o*H-IL;fHIYhKVag;Cn6A^*2aXy?rq$O zlRwA(i$r`x8@~zh$E10)@CK(>aD)+2D%bl58i+0xl3CJs|4m3Vw$ZSd;gu?PQU3V7 zne4G zZ`2um*{fZO`|y`EOGf|B)*HT~z*`KU$0biAT3E()hfq<-c6VKYjo%ukdh^ zt52=hJvFdRHcQWX^0@yd&9kL?iUP{S=gdArlF|q53h#WrI=%>r(Kmj%h3>y@a%H{y z_knr81q*^_*)cnNOqqA_R{%cObEZ3U*?L4FZ1`&Kt)cVk=oDu z!~Q?&-aRg=s{0>52N*?@22GMI6Kg8$3O%M!qM&2$u|uNqB&8LF(byGrFiP^$fN?q= zo61{SW@c)cWo2ZN24V`D1!&&wLYHUbbg|20$|&de+I#JD=A4;fE^5#3^ZiHJ`t~nLFXEUHj)$Wx|u4i@Aw4gRbzZ!e7 zV7<2&&!cno8zx^%=}gtn$+NogZ>-QY z#8neg^1NKBN}iYYG0D?clRUHbRdLu2O^I0U_(+s<&E+33%aV1hYX>K>Fjb}!iMmJC$x66Bg=Etw+9e0TD$K^ z_Kqnk_uDL70rvlAjQjtm?F^d9yZ^6K2kp&jzd@T{UB%)4PX-w@zrpiPxE$|@l~orf z`mah?O9rnW=20oey=4_MN|v&7GVJ7saOsfp#fDP`Rh=9CiTn9j}&>jy@m zAc))Wy^k}YK$$G`gp;dYsp3G5-m>H;1xd`ho4JJ;eYJsXOFVW=V2iS4GqocrzWShF zZsE(wB%`6aD8Ry*d= z2|Qjj#gKq@$L)s|x9AhUxCG)C5&4Ep@(uKW)*Mg~%BvldwQ$BfnzFkV$);s^1)2Yz z*Y+x?yt+68A}d9~l0yE;2{(`1Qrnl)RdWoLf*Wjd-S7iB_ea zV8d?k@&G&CZirXBF=&7(?cWK3vY3nGEXnY-IVIHaMiNRw;y!7dB}Hju>^GF6eHHW{ zZBRjt*S?wh-M31h!#l_fAoF|dzx7{BPuj8TzL-FxqLb(2NU)#r>@duDunQzaJhH{l1;bn(_e!4 zcDU@gi=G*j0%rq>hy&YeRw8B zD2uu9mmN%L*|guiiK|McA1_!kKc$pHu?=Tc{HVBa)k2l-{rrr@9R7LG0lgE;g*~GU ztKsdoK=H}((7!pPe-Y_lL>`d``Z4L>7g+z&rsqpJ@nWv!YOR}l>|M^`ZcCsa^QBzN z)iYb~I^OnY@f8pvE+@>(d7DG&yNWLaP(`{U7D+s5K0?kdIkoII)2~0R0M{bk@(RSy zldiv9?JMs;5tTPNdYLPq?2#oNcmAihO+10j8-DAUb*wr`Fk8QLxjPO^txs)AJq8<@AlBn6 zHWJyJlgY%Mc37A8m)h~Zhj?K*#~9(ywHyp5zel9~ck?Mj|1E<4drUI)-vo*D-?OU? z{Wnfx{db$B_TP!3v)zCHse-*r?Ka)s6{7#LN1j&yy$t=AM*1&>^dFT|^o%$}R?tNF zi`3!HCl$I*v)I{JxzJ8T{-RkAl1PimhMdxoZOBbX+?86Ns^E7%g@&ad=aw{m!|2Wk zEre@o3)!9C7Cv;VzJ;!E@;^*@$TxR_mNrmMs9n-bC5s7(+ll?Z{bP>fIENX@H^kFR ze-}$-M?z)^kXXo7eSy4j+APuO9$_tFrx%!h68`&4N7Mavc2o zS4UI-eg*UI&tU$2RY_MJ4taQ0pBPSc49r-cLSzxx6?sGzx(`WflX)$FPx=if#@@p_ zE^;CHqE!3~WD6?3M*ThfOj`RbvtM$Mv>r2aASJcQ)p8}(@7ZU}+)_amQK{lvKou~> zsN5I8aQWP&)E2r>`YyBlCB3=d{u!HQ($4*nyeSPyC>}|fiAb`g(K$e8PntA3ABp?K zU9<|(X@SpwVXs2Pa}ko`TAo-;ZHXfA?8>Hd(MGQ70w$Y_wEd0W;i2cxAsBDj)UbaA zhgWX^WIhFnDAt*=dga4#Y(I4s#j<1j1q;HPA3n@v`udx`_UnSc4c?5>Tg~!F+GQ8* zv6?HLq`||=s*5`!=hP(5aY&GEvEM3p?=+)|9-rxQ#NR4)>6BewU)*t6S+(O6_fSC^ znv`8$?RbwaD4P^3hz)|cnW~KD^6!~>qZ>PR@LdkgzS8nIJ#~-By@1`D8K`?daw&xbf=%Gc1hm z_6mjDM;JEPl_w4BYay(!Oh~?k+4}mHtuJst9CQpq(uGL=gsr>j-}>dh8aGi*ZDqRr zU&|=MPffv(_wH5Pebg`f7QPVEFOy&V%6M};Z|-WfB$?y0 z;>jN==J>26@<*mQo>X_WT5`x=Ddeww@>eGLtBA2SiA0!B2~s5~oMSd{W@Q?FVdXe{ zQ&%DcOl3nR@aD3Is50pwCgSZWNV>kzrR<^m<7j%p`1Ju>b7gde)pD`dtZ)&tKd$7JhxrX;`W`jE*VR0?hUQnQFYbb5 z(_ODT%;TKsuVEP^BRTGM=CL4u4}Rrg9xP9p*`R6UBYD#NBp89+9LJG&(vN4lKxd`V zTxs|Ye9a{X6rVa>mp(V#Kfh5`=>2=jm4W%wJ&`md7WXuLt)on1>E^?VyWYr;4iZNM zYr@{SVnjuJ0$@G_M}x>2NZ8Ev&%t|Oy(t=|yB50Grie^wjC4>29Z%a9y5 zVmgdsM|0&lg)VngYJG)ZxfXH@l_2NOGipKIC~qQ99YUYlKzRYP*@H8-WiREBd_xWy zHraGSoWSGVM-D4!o7F=0a5%m-j}+~cLoFx#msc6osw$JGNm*hk3bNI5tw01K`74L~ zRYY3I3)0g|IgZOx8jzHe3<_^~^>iCZJeuSR9z*T_WYBWTtEb1LR=aaZ_wcl%$ZLy` z6s0tf*>SDbR#$E4dul=6%2_;ESnSPdhBv1%{fgX~UT2>3s^+Njy)%V!&B00GRidSe z3PvDkEUPZ=LS|_ig-qS&u_J@UYQ~z#B=4!HQ*S5g25GGcuRW#ERBD2vC}A{-Pu^L`A#p2`O@EY6;IaHO{frBdoUrVj zg&ff@8;URTc{h22wMaE1eW)k>b5hpZMP)hMBUN3SOOl-pYrepR4}s z3YT}eI4;*@lk~hwWmpL7t)LFod>4(J^-=D^cJC6cmWy;3*BUNXSS=SKsn^&WX_(i; zmoB4v+J*S(PxmV3%2+AaauF(MLN(3N&hI*+PK{*yO7g0Z@WI$|FpAUprr?C|QZhxT zW+{Ndlt;9WG))gdpohq&DQ~^U;Zg7IRbcoe@&@z9MkL0fZ8bEm(`;=-@(5n;QZL&w zQB6w+&=0SEndpbTm`4{SlBedIyJjYlKZ?v<#yq#S>|k+MBxl9o z#jWIH=7N?cjYuxzt>&&QQb_LA%LJ2>7M(RQNSqCfT6s1jjseg@-o%riOP!o2cyrl2 z_B7;tBA#;$K~hg7O-w=JI@Wtnq>}smW;%a$0@J)9gR*?K;5}tI=Va0t3>k<`2 zq7P(!IdjWCFdc4AF5{dTjW0dSbFSjfXj^7H>0I|YNG^#_t;Q{PksgDa-hK(*y)6@I z_n_2j{29B)YVKN+=FBM9ZcCxJor~m>l+OlS<2HOb%7(!98bdRB5W!Tv^Cx%{Vz@^5t31@2A^pe(0FZe=o=nv>Bch1y5>o zPh)gY>IP*4N>gGY@dW;UyGNn=`9bsSHeL|e zW%EC)GzptnYZJe+0faU~wQPwlX&1;e6U628CxX~4NXzN;$(F`jlF2{u^e=J;4JH$R zvzjZfDO~XYpDkG|f;iq%B1o6rP0C`cAZ3hO@c?hFxSC#xB@d6!77y8K+|f4Y4;^jd zXGmKqrOo0DxKN_J*g7f^`SCT1qu#Jr@IF{c#8CYL0-@Yu13$zMtMg>i?Kmcgfp z^?qCs_v2;xhm}GXXdZM)uVRe(Rg5vuxC-OZr(D%FY)zAEs)Y{rpXXx_jW1lNLo&D3 zt>EyoHz9DZ2#Gnd&WvUAnIxXgZjD7!+}10WF)P`fL_{>L2Yx>JDZMB^k&NT=4hKXt zb%6PmY3%^!sewGnbbj1roFCNED{pe7NZnlJO~q#Fa>3n>v#?rvSxW{zB3YL?Udl_P zzHTWq-Z!88iv!f)<=KY#?x4fuZAW`JXo%lCOD(aSd0zX6R3q7RZ1^Uw>e6`i@iuN{a#&C?yJ1Ao@Sqs-oD|6$P4!i^eM5mWjkVVw%pj*y)9DkhlYh zHApty-D??#_y3oO6Poy*22HcX_jaDfXL>KN9rU{3}E9G>KY zS1i?Y`=yF~s%;@!Eu}~{{e8(t9Bz6Yz8bS<)6SG$iU;<4zw?%Hl3*#t(pR*%%6MnS zyDqZEu18W=L4x1e#CV%r5{u-CvF6^?S*h#4*Y1J-b9YCwsqB)EsPTX)zbY1DoJyjA zzn%c^g7rz?7w;v!WyWg68fj8a>Oo}>lDb>S^*SC-JZNC&3K03Ndw<3~>iEsI9AzPB zm(rXnM8sJD1`!L-_mc%X zj{3JWG7U+OXL^HG)ToNT@zu{o(UIWT1d3&;0peLofJBx8Ac==fI+=x`alA1sEuQy= zrFo;x%IG&ZGZLQDLjIs-LsQ&cwURtF1zT=AtT;1%nM3Zo%p0E;?Tt+v8c+VtfxnaJ zpqVfGfNBZkUfkSapQ2~59n}S*k(RJvgqyBiMmu0V(=frG6$Gv(p>hP zjNi}7R6o9rjM_Rj9hcC4lAcT=eYOhT@KQXRnn#;p27_nb^xZFOI2ZOT-K!uuVI55a z5U*0bkXRH;#+^Q*T*)-g+h#RaS}jwpowhkM_Q00T zYV={nO1k7_X7*fI7VXUFCo?kD(8QLl9z{XU+C+F79x;mkpygdsEt?MB_ZEkby$U@; z7rq=fyaQ8{RE>$4(%;QyU#!MV=EQ5`Cgvr&FM%u+a23al2K_+21)nz>SkEAmY+jMn z$V5`=LF(7jWRH)Gq4M~PbC+?rZ=)uU;UE%IkCK%fzW!Ajv3L%(NMoHDsk5nlMn`EM zYXvd(OJda;;LnT#`<6VaEXtYDDzWuFB-Y&t$xp`O3v#IP@c!c~IlOZTeaY5n_L9%( z-52TKp&4i5koZCuQJTDO#5;4mZ$t8v@h)6763&;u_bm=T22Wqbv!_2QY4c2L!Fl@U z6}s?L_QZv3Oq>~MlJ7tz>b@zN4pgExP-Bf>l#H(&c~~)5j?kt zEA-3eaO}%=Kg-^sZ#NqcF)N9_!`te;BXx{-`H3XFm4fVSW1hK%?ANt=kD*}6!_C)% z!a`4_pe~}kmUEB$s!&va8s?)LN~2=|9ijH4BN0irQPO~!)_V0fl?34D>D+pa!PB|u z^Pv70=D&L~nE#H&2o+JkFVOZTB{JvN=vZJl`$NiGNoD37-=fCkwSdxjrap{->p-c z6>KB_Sf?~Azz^Kqtl(q2n-$=<+Qd4D%7t(Z!IFlbSlO)jycXYI8N=kCrv(rk-sCLQAN!o&mqyol(l z{do~1{jn~vFUmMy|FyNkY8gN$qUOX#Ft4sh;&EjUnOFVj88_ukj;jQzGjlPLKB7Ct z0Poz*f;s1PAM2)cs*-w4?@Vq-ne+NeS@gt=>H4KEz{uF%ux)=`coZL)?ayxQ<*BiRPd7}H{J&`=|SLAHtr`$-& zj`LgA@oaxZ&J*WPu^{J(9>v{}^CkenKt8{Y27q6u!3QqnJkir!UQTY`(A;U##pVso z9VeTR^e=Zb62C^}$H)&d%Z{1LJ5s6Jh(`qcgdW-_44|KI9u20X`5D4^|K}Wgf6w;b zU;GrKb&b=wWsMMj_%dBJmg(B6c?|J?Fj^D?$*4y>5xXWeD|p8ySn7;iC7TXdmT`=~ zC|EM_j+JEhOk~h{MaE5Uzu=#Y*^nv`X<%Csut{}@tEg<>d5Jk4mf2%_jl;ipr$2n_(Kk6y5T2^Q-ab5hf zGrHaQWkH-vHDp12nQGLeOjJ8-gdqUDri9jzLCzbhY8Y&Aqvn zDN$^a_okD~tWB~j)%oAkTs|s_&96S~%`ZpC)OyIRBR1j(ii}enUVnl1`hN8F31t4Y zRP+AtH_zSd?pvsP|6;bjCdZ^Uxy|$&qLFkV*~#W^cK*SuP>AY~6&tA=-`txkt9RT) zK56%3%?kdK{L}f9X6n7mWBjrPnh~d)imc!VIq>e~l~osaC(|KMHD>Y1FPas1Pv4gT zVR!OlWE@`BZ^v|h^em+7Ys*x1eVNNXq{CUp62s&tW=mIFkUa2w?Myq>UQ_kRN{8iE zD-nGo1s3lwus9MyY|c`?Lgn?2c;9G?igA`~wxb95ULw~^s9i&!X0_ztu1jH`wG-_u zn|eWg12|;U)wj`=I`5%FYW#6my6XBp^d^VRa}BF5|7C5}6?s?Pl{de};bHKrwg=zj z@ctJKzq&Huul^eL8i&nY4+PFoK$aMIgvg3Z6U1CgragE z-$>&us3rEKFTc4H&A#)qo$N39WPhRLvLfIriQ_CKME0dv&0W)xoNLJh6F@i-0M6i+YW5tPtC{l~;m zJu;0o&_TYnD9POoKFVP!f&GcKkMz(;@(FJ}Pd{O32lfeXP7C7`J{+q5gl$6&pYVY1 zCz!QQaN&bP53~JFHjVuETO7U;-d~`aXnn(Z{|$!s4`*QsdKKhnnlCVzg?r~;Gy^C-*z0rrcF?VlBF z|EyrU;3_6K?eru*(Lt<-C+YG|6Qm(Y0(>LbGC4@P&??#Tk!-r@{S};5tjFiof}c(* ziY+^6F6+u`@r=2|Xvihc?WyK^k!~eF<=$Vx;e(s?zbjwIX=$e@_DPMHSnBmFuQ!)% z2kbqGdKEI63zaED`9xmRr`z)3h0Ytf;%h{~ay3p^v{!Lvv`uAfQX1S6<&LBHGEU4S zL(nP-maEA(%BBb2TfyPxTG)p&kr?mHsGX|K(R?Hp#Zm}2mKJeZ7WqBolcttmsRiNJ zOHWbxT>TvYZm30mALTO`{{I?+ifMCrX?CAE1PzHyOFC(V#L}K zjad6;?vDz#+^ z;3X^}(Kw5pY!kPrbB*j2BlMaRAfxxi6YUFJy)fDGU4nGoFsX!0nVs*h-~`ca6;I%0 z)rN_)l}(&{HgQxS*gJQQ1fDxNTJC~s@7yV&bLU!7un2hn0y1|tKcUT?5;Awrr8~F_ zAIwlEj{uYB%6C_A_>CHt)s#-2S@gH(2-0{cSN$0;}%{d7E@I$zg|(Es=@eJWUYUku!~R6syVF1ZhZ-FAa(e)l$Y= z$)pmTcFJHp&m1TUBJhvFW#D@+rCMr|BHve16yfXdrGnz2b5|Op8&)3DNeORsgEQwx zh2}rbR|Q2QTFl|AJ01vAC?W>6h*kNV%^WsnRgJ&bp$<+27qzzsk9lZWz@IVJ2Q9`Oy zC|Ib}k8lxYQ59+$#8~qS7 z@<-->yGQN+QNtH=_-&J+|0{^ypLl_v3#Mhcu77EKl0No|`dua^Qk+B@5{tH3E%6#} zIgu2T8E-j*WlT~B+QAqFQfzsBac3mc^H=u)CJv!g_}Rq6iqHAYQ;hy6B#nqg(w&LG zQjmtkv#!$%UMcR*ZWDOQ6|EzNthft_zvEvAom7|}%{wzjI+&~e4(h6ZA{M`s4xa+P zD%yXZ9*32dDeVSvG5$mV{<(^Me4-^6h$qHFqG~)4vtW=QTP*pigtm`DCfCV$zi zvie6FGcZ!`UdiFl%jq<}%*3fiU_8J>na01_E(1T-7S&JtV7q>_9MBV})lt?bw5LE$`M!dbs2P>f{OFs4X%*&m_zhT50iBKF_Zo$|>aQR*AJKsb(k8jf44EcObE`(1ksV z$@q_LR`7eHLBlTs&5Q1_tSbe}U|lp@atDqJ6dx5(nW^d;TA3NpevELS_zw!^RS1?V zkTi+4=T9;VQb<#F+}W()pGHAbGKn5Sw2v$Bt{9FB6p~Fffb+ZhgD~aZ_m2q_pDf*$ zf+Y2{{e(f$95QcgP>)G6TlXMkv)sK&9-WD5j&wkL10*hp9#RrWJkYO5@&5`}%hYhr z&tD7pTR!>5Jo1fspdN|qnERpBk^_jGbbApJ_hQpRU2te712k3DZBhz#m}X0{NIWWt zJII#|z}II$xJxGE{B5I19Ijg6QM^ALox=Po{gL=3!|@=tL~OuoGa4>`BwhnhE+ z#)q6Y)W7a&3u*r_`D%&^;-6uH(nrn~x-w_9MVZT2@m`zTAbZJI7f}I>uV3m>P`P53 zU!jAcoSZ(Cp3k9p$ex){dl@knZ`g9#1l~QKT&A_ZK<%%j_Esb%?1b_cq&x`nFDs|$ zov*`{<>ZP5Ih8hA`xMkpBemy}@>Nj2ikYNhBNG4iH%v<*EnX3|!tZ5sMP&|Xv>ci( zswadF+=i4Ud|hR;f;-P_R-75p0zK>zPjrK}L-DPLPFkciGv4DQY zE1(1B_mOT%K@!nL3tf2er%K@bK9|IWo!=+lS3a>sIV_0+OROcjX(4Qw=C} zlo%`ij>NCUUAXe{Q~D%6K{>f}e&DimLh-L*R)iy;Tp*v;f_ys4V2m{i*vPL zGF53`OVLpF`pUVM=js3JEHAKJiwhaDx|BhrKptc{yu>VyPvWi1sV+pC1xEMay|4Sdu|6tZG%1K#6R8wg&uS#~|B4OR*Bnetg_F z_f{#Hl@22A1Pcq$Qw^d#YelYQFeOF*DTp=rCg1P2gFL6M2d`=lwh)$CYgi_&pn{CN zJdM096IXT!CC$kEO|ufgnn{lYFv|CBAm58f8||cxc8x!*d6si6BUMkb*Rx#4;>N6y z+cKZ6cGh@${=+&$`_%_%Hr`0u2bx$HG!lSM0PTydib73Fn|MMqD0A4hkw^N>j+|SH zYIVWi5FJAUV;p1(TP?^+#1CmpE`HhseU_v#h$u1zIi^UTA*)2u<;q-3Zp-d=wgEan z2DG<-7rO9GAL!bT*DMX}UI5PCZ!vzu=w1>!|K60*?duPvmQ1|6Ko+ptOSVvKa=(2c`uUnlidZZ#0b~Vl;|^CKi`D4er_SN zPl$98;S+0hJwU#oq@ugU8(ENRiPh{k>ZvxaG0AEXXgA&ByQElt@Gcy8R@c>)Q4y>w zSE&3eI{d3PD*XHaS|6*UKt@!~wIr$D>lD>{ojJ_hHBHcX_gOUPr#tDRRSeBY#Cvx$ zul7gGtDU3zhV#`wikMgX?MkmF8?W(tvS+_n!xHq$aWmG{FsxeV)&AFd&8waG0eH2G z%<)!B4$ECcyzjGa4e+e<^v^1E z;i*Z76-lsk7g3^0)3M*YlEcyP&`&tuhn~1I)CVTB56l!~)4KP;rHuj&1RJ6D5*_Fq z+y8Al6i@)UT0CLsPr>}#2cL=I@RZ@r3VwbN$Kk6Nwd3F3b?Q(E|Mrnc{M#U%hyr;F z*)~SB>)IB_kUaxT&;Yc0fc%J7_q)wJ)r?mXpXXO7bi{bEmYqNsiyD41%cT6Py@76Gt8U5cgJ>K9- z=I}<@5(joN^;aJi#I4}L#((#Xrq9S^EDH5^ql=KTnLMs?26-Igq@;!6NuqND;^$6; zo*zAe&kysgp1i;QNY80wR2r6HCUZtxw7I;IcGh5!Z|3rs8J}z^>!^IPBJ;@F%%P5L z&10e`f7>LKf~2lU$|92xDUJBNrOgWd^}%Mvneq2+nr}E?^9|?Yu8Ep&xJ1pa=nd-J ztNJy(Zs8oV(DQ6kPRcMTGapFC{#eCBZh^KUc%r-R`L0;3)Z;x;^fT2MD;5p|mze3*Z9J*5Pgq%c7fruk0La4Z~f zb-r}$P2vcT&nwft?ut?oi{VjO9d1xIRaD3$W%nCsPVO=sB?x)7Q>Z?jt%%8SBsSIx&5-(gZY3t<*HF5G(?o z`{$wdtx_wsN=Z|NmUB+|#SflEew4g5Y<^VhDlb2(|5C42`PS=RtMc*{0r*iZZ)%q0 zp5^~TepJ`=l^lLMpPE&}{OC-}vP1Es8oPP8u!#W!yapxX&78;sy(w#N$6ka%lF7Yo_VW65qFpG9QJPk2vf z_=xtkvi9|X)?Xvm2Zk#~{I_3#+{%J;+YKb7$ieDhH5#QD!2tVf7FaApT8#?*6D!}_sE>nMt){MXd# zRK;y)xhzY`4DGiWNmEn6VTpJ2^k>pY4oeDBw)z6q5JMk*TM21+GUE5r$ZK{y#8L9A zBo|6QTKXb+bbx-PO{?;6TFVv2@iWir6o6k{rZMN2GUogMB=w+Hz95Z^rQYFG#odQ$ zvNriio|*3JR4vzP89=?lLi(3x`6ZR6BStc6@HHXo?7z4QHp?Fs?QWvS)1V;1lz~ zpFern(u|_dX@lq&TNO=&|63OpR z@u2_l6L@zr`#oriyWq-ho@t7^IzqXluco*VG?S%XrVeCLpz)aF;Ox4Ffb<;K3(X28 zz~i5?niV{Aatw>q)qY`1f%DKL3J`47k#Oc}>KM%GI_jS)bm6JdWJ=VV%Ri>>E|v!q zNh4$7T(&Xsg47YE|1o($#W>5Y%tdW_W7)?XC7ABT8*<h9N3u~&Y&jHh1P>RMf3`FL|B+_!p_zhnXaq-m zYPCBN&JK`o<{_SzhE!6DOnSppeIc4x>RyAS$tjR1w9thwTuhIPacl|W^qS}JA;0|h zW5eMm{v2R`ps7m*HKhvd5-I8~k(gRNjOK4`S*)J?B~aClY!+bOPDMzpb18e72$QUq zG<@yE7!J2w!Epw!*ZMms=cx{D+sw9|fPM=92{K7qzVLG-5c!BfJ}v?O`9dZiT}(c@n0#Ey zP{IMkE^A;;ojP`GOdi{s@&)N0su_{3={i9gPqwB~3(q3^9Axi;UkOZTP@HW5nXYL< z`Zs1dhS$!bEYp%PFshc+rBx-{*rYrpkn!22jt@I(LwYQR!#7{9%jsih!B?f;^NS&B z2=wx~ zt#u(NzY zj@jYNkTTSRTX$#&x31#Z!L6#EP)KhwA+fjHgttdQezxJx@96&Z$RQV#AIND zC5ZK2{j1JA=LhxZJ*JBgGg_7K5CsGST?7M-C2gQt{@xkv0cy+wjgRoEB02c0@zBT; z?KL?r)t9YTM6ySMB9fiSiLLzrb=!zNUXn1pOn4=^u$q|43v>c=MS4k%GO?=scc&|f60G*F*;o>K3-&AK^j6~Erc*Km>D0BJFD0UQ-wx>(%!4i8gQwOm4 zut)Lg??kUz5`h2yhn*LsgoHor2L3zL4kopf{|@Eeq^#q=|4wU9{BAe$-=Vtccc$1h z{te~7$u@!j!AL!36C1L{Ml!gGu%{&P%n^{MO+dzi2h(I!rm9=Rk?t;^L}^s7S*6o! z*6Q?{RhnLt?A2@DVtPyp(__}MavCese6+7ucoZ+O1aKmv&a7qXOdV5aLaHz_BxyFN zGgzcq1&4lu@H*L6jv`V2%X(IA#xbr98KkbOXJTb$FvFrC1K{6>v$qb3( zemBez|G5z+v$A2|p$Hhumz-4jHRf3hx%SVe!cRQoQM7MJF>Jkwsr6*4lf70R!2<%3 zUN>zJ9Nb6GqGh5v1w?c9EZrUq@zs+-tN1uftpXp}>#tDs50Ss%-H`gl+*!f(3-?{Y zl?z9Cd&)&m+bMP;r&0r%ljMFmOnqo$>cbx>y>9xF@RSDJvL~2};T&UE==iZKgXM?u zXCn`2pNOoc^;U)Tm~x$pU=OJx^amB;22c@}`ozAFSGfCW*_q`hc|71Qj{@mPl+C1- z{f+7Z5*x`YZlJot@<6%*b&~271v?!yn14>)z-f+%e5NRTVyV_A4bH)Dk2CD_jH!{Y zZSyyfZN5JqcJ!p;^)FnaP)lGho zw#i?2gzms8N9?@&KDxkY4#ZN4FJ?!|2aphj7%feDG(`DccZ~R1xGeG>rpR+X9%eOQC=kXH>=da}O z+6+nsnGo$8Qn2F6P$30h{dP!WsnjQ|# zqn+(&Okv`4LHRE~D}e(hmVF*J|K;}Z_%HE-^kAYiI@Xs0b2MB0E?Ybz?!k}7oIVfc zj~$W2o0(k8O`-9@aQQLx+@Wy!F++EpU4G2JxFGzPJ==rxV>Sh_FEr?rBB25CPxs^P zBcDd#^M>3Q4j=7o1U^B39SG({GBq#AtK{w_D!kc~aq_+JW*s{x@@Q#Un26?++k?yt zS2+0(*#1%w`utuE->hc%=6an`;$`1x5NDywJw(kXNiBuAQ682zR8PoR%QT1e4EL-K zfP22jX}G6`cY@u}rIk`B8RF>$Jgt_ZLKj{9y6TVg#iRJLGz~fBphZ4xBoc|pf5nMcqdcGJYUfID1vvlclSQF)cAyfX> zGUdNor{p*2{{B|?_fgKP{Lf&|YhcQMo}givO!@zot@>)FRn{@(e-%^y-(<@FTTJ;k zE@AcTi9pJK=ZC2BZ!WL*qLyq4LQoz~PGfjwMJT+|j%3q@rvR^Py2^`JRv7R~yAH2B znB<}5W+YIWX|(~!py@|T-wnnA{ixQT13FaEegEFz`PKB~PoyV*>hj@EDnjx! z9?u@(QPU;B28754RN==6ed-PxC8DxHb5u5{FhZYhtvx1Z4z~Uo#i{vy%BC-P7i(EGcZ6Gvb~1D(1pj2h+(*q#Ex8-Mx|J#tbDyge<71H@Q$tC5H-6%#fI2`Z#xhL zJjwOIlcWqKKa%7iAW2$Pii&KS`h>=mbX{R!N|stmRGOrf0gAwtTyT-bmCRSUk|zZ5 z%WRS6?#jnkG*f|+EjD;%%6%834=Jh?33^bN6gPDrl^vz~ys|@ghbuxOBD*?b zGW~|203_AlpJ?BAFQ^`S@-;B<_2-jqbUy?v540}l@PKpnQjDRqPC}^3tLc#u$@s6U zqB&g}k#^K#{K%*N;KLokEFg1bEHZDb*D(uRNU4!y>gCK#RD(O9=%FRGq3oxDzWh+? zRPVtKxtdml&%YVM|B`T*n>~su0DMiEfOgd4O`+HSkN!{xpfIXzLO7n&=J_{A5~H0hB*B9 zEzrC~ByJ{KI|X#r_&*QT|2$0p+YS2PZm<65Vfr6j8NXZA|DbH$4f>yl>3>jr@oumF z=VAKaF3|UOsrui3DDOAwe_F_Od6RiwM|x~0EJW>s6c_syU2>hivTK2?zH!>&thMhx ziFmEu>Lqmvd%v1OdOvQx+g23vnw0osS89%UWPmEF9H@cAL?B79~@gp2U} zFxoRI;39cVpD_P`uiTP{LsMGUoDik zG#J+3D^RT^#_UGT*x_?D;`R^JPANs*;Mq$OB}u`d9UKk z=$D{{uqSIF?8*4n{f8igo&IVsq*9Ou(8b)ru$WmoIVtX@M!J{>HhLFxh*Wa{7jyTI zBVNorSeOTIE6tSyd1T(Gc$0q~M@ltPw#fq(d3q+Q`K<$ro?3$VHk95_ z+K9xXuG-JT$RGAp!2Oq=a6~tuG(j3p6SO3yD((!@Qu4JiHwx6d#WdSVgV`j)_Q9Yd zr>HtI_2(9mRwfDQ+e$a7YbPv6;DL`qubuY!0YrbT1O4^e7^=UnXZq_}roXN=SgL?` zxHNtdjZZ3jo#$YsmC%Lg;Y)8YS5p75ZlU#~3+*DSxiXW_nsFRfnyu#Bjsm|KR$4b4 zH;ii^Ut)`F8q`kT$@oimL;0Saz+dtJe<=-W z(|0od5?f(ip}N~nw!*r?j@NCMuZLqT=!fe;KP2Xm)KQQ|#uHuGmj3(XTUZtxY6Y2E ze|?FgNqWA-&s}s-*SeAM&WyLaGUhJPS{uGPq@EbHpThg(DMY^(ACI-k{bK!=q2W`= zVtj`-A>-YhUS-yJM-L>X%ki z0@%a@HnGNwqmHwbWS2LUP8H<4`Rw$4lmE@K*b4M?)=z$ZiG#yU1aX@nevNPGc~BAL zu{`~u{^`s!QG~?JG{I7tb|?@fW6GB6v&-wV%=2O_w)6w$S@ms-V(!hgd`&*d*?Mw% zhRxaP0e)XS?eY`#WPRL6F4B?dvz=C7vfa+R1tcZ#P>v$yfi`FBDatN52tPhlZ|B{Y z7rJcDRv6b0pnhFF8`lrMgz}d`$CUx|HgRHXwwM*~%$RyET`)GWtNUDtpu->UIs}xI ztJGtj32*E8bf3kDsOUFs2)dqfhu!b($qala*%Cp zSZcL2Y)Z{=xl8>p*_LUmY3Y#7*P-;kOPd678-6U! zqog*uFJyduhb6^aIq-a($KI8Ul+A1t++2DvqLZ(`S{r&3{5_Bt2l}TJ`o~Ylr6@?c z>A5%UeDS|fdA)f-jk&TufG({c4zo_}l{4-!RdJhQX#R#gkAgq{?;dts)3U>hIC?%s zuw-H`?0GjhKmMk0;uGh$$N!^2ibVGS>YszOxzv(EmeuC|>I_Ivn6t{x7x#fNDsM6` z*lezB#jo}EYWb?B(%^L|AUUHTMs537V>}9O_)Bg3ibIPy%(vI_fN0I1??i&unABc@ z_TLZoflm%tVjm1EYciK#s%kB1%rrQMYAj+yq04UC!cdORnm4^!;}*ePG%LU~flx7cZZ9;UGDgxW8*FsonH1yQLGZ zlx>0ClIbjWLG9gJm{h%MJCwHvWMgS4eR;K`6Os}>T4Cqi9g&pq&I&u9WuCV=%Urpg zW;FXI^%(GZK%VtGm7YXp~}BYAM0% z#(Eg(gYwJu{MKa3Z@n3n*Jqj+Y|S)R9z*7h$I!NIY=Qp`A106Fk+N0pcTAp=iE4iB z04`9zjpl$EA$RXUnv;yu>!u~MV+knXl8R7ZT_Vc5MCqo%Z`gUqbM81scvX*4&-fRw zu9r7*J;0yDi+@)a&BXnSIQ;p7VB!MrTpf%X`=x(3>ipLe!{^6pd6FP>-{_P!@*8iu zQ`hnNz8z20BqN<{9S~rz14UR9HvO&#X_Q72er<)m7QbX+N1})Hdx6&PIV|ZI9ctYO z&!wME+f-ja9zvG#kh7I9y;(gDeVDnj zXVwhQjLGpI6Txd054iuW`d3<`N-rN~uDp-WnsIW*EsaKWqZ|d;;Y2MyTDiiOJ`UAg?!VX@@OqoJ|7VZmFp5 z@){G>(XZM0O!K_0f|Qw;_?$Yj5XP^-yL<>%9*{d3gSuV{|e0?MAe;e)k{B%2^_KS_` z{s-lEHrjpj(>dWv*+zr4co)>(y;0r&YN1>kM*mV}-PX4j^{vSk583`cXshuI7W(X? zXW|O{K5v5{$&|Q55Wl0=|79DD z)TN)$E0#~#NJT?A<`eK=wt@fhF#P`ODzE>tjoE*2WnGnO|J6XbCY+UEoY?KnY5ZF~ zGx5SwL0(%Pi3;*TYd{qQ^pA`9Q2Ix|+jO$gtADtNDs~RtAE_2H0*;Mk8bMHvBr~8! zl8of;g8>WFNB7Ykp-?ALj z*`Tt_IIeDSf863x@Gn^1;%XZf!TEyE1-EZ5d_A~*v$!n``zAg>{y`PZUZ+v}7kYzx zU)Iu!R2U+88nfT0T6g8_+dYGJ&ba=VI-8c;;QS`M_$N*O{etMf zv-c}V&gi7wIMwD+@D%MPf!wrmb|jkBOG_istR(;Zm-PJNfWCu57fLtX`;wh6z6KRU z<~NAeTKE$3D0uFVY6~CSxroD`NkPqkt*-_%1CZbO9In&w4=lUf>mQi5(9RcM2>yYB zR{YH6p*#bZ{a0;W)o_o3D}PX1H~aHN9RAOe{^vFK>V5e2l`zd z!av|#2l~xAgMVNR)V{Nh?Yc6Q=dAPd4-~+a@#_r!fefe}w2tk%85^LyA-I1)N_cy| zoks%%j32K0C(lAYM5-w|N^z7B2w-x9+9AA|~i|EKN#G4t%aV}ZZj z-{TK;HLS6E6ujy?bu~<@U&P`4&jelT2NnnArymTPpI#KX{jZw-%nuOI{vUB#_J3d4 zUkY0BjhBSB{OxDa^55QvS^mubp77d>#Qc9aa`Qj)s5-2BhIka*_>DTOE4MA;aMY|w zgxp^*MIz)bH{_pWwzJ{|?yy?-=cWsNM9AYX5^g-n1@E`#%XuMTvrB>h(Mk z$E`@*M-4k=kI^KeDP59+*!uJ6cgM|tH*8x!N9)J*WWa?l(9C=acI88U#Dl7>pFvIi zu1HE)zlJvQ<24jN)NK9lpt^Yt!w+kqyqS~-QaisJk`fj}?aONbKh!M!$x!cDqw-%q zfbs`t$WoVSh20b@7%#;eh_-L)z!eE?4bwHI3lQMvVghl66M*`L7oQw$JV1+2=w*O#r(* zGg7;pSj$&4L%Cg>{3^-LJLb4rmNKLKUl&lLyf-R1;cJd3Uf@j+qP^f>nmLYwnBy+` zu1}w}^Ntk(?D1*;Q8k$EH+mFo-m6ZNA2%&x=MUWU6g9|mwL6cbdldZR9`(+uO^Y~u z{!@|YIs!NK|GF=xm>f4o=BrIK6?da z$jK|tjC+3noQPRLqXQaZQmm`IzBoFyx;C(bDAYvN&X4e&pHh$Vrs8vrQ&G&dSm=EH zsk=v!NTHw=ALt(8jGZ8dp0W3R{(0B#>LTnIX_My9J~RIL?BM+K zQD?|M|NDY)`R5tSApT>SfBXkr8NW=8|A4Y}nKAwYYA;^qAOGhabGw%7qXCq$BrZ(^V*7)bw zAbH?SR4_Pv3i=mFJX#x?e?C1D{`p|=(8@6zvI{r^1N~^c%0T}qJ~#vYlZY7Td1C0* z)32Q^OvgXpd;0wIS5*G_q%-87%jbv5Ki|ECPXDi#82IOHP^&Cq{PVA&{LK;r|9m~v ze!RrUKYt#oUs%Fc*z?Pwy!^EI=XRBUzG3wum49yj^?(om{Oa!?^77AfR{HVJ?JEB~ zOYB||jCtPgRk{>!c=dFc=X-nTnCJNcnCF%L%=6n`p}mv)ih+6l6x2?8g;}2R{a^YWamQSzflt5GDMEZY@j2Sa3!XFL(^*hGy&l&J(&m3BNa*hu^y$kAh&tW~eYc7=M{y&CKOQzGrr(Y;K4SZUbVgAYneEK7( zT`w~$egTvh$_9LTBGgWj4fymeP%Fr69Bz3L$}gTpeEONik>JzmQ_dKl4$Uv$ZTVl~ z)BQr>)8&uadB>~f-W*Cd&3yC>_~ow6>bCVlFOP!d4eGX4unhR+Rr$gBlrubgw$HIX*Iar=`1Q4(*8d~;^$nr$Yv;ohzb4~P{wix(&4BC&TU*-$vPZVI z8iDLW7kO7kSWq_bBFMYmK(JtjA}NefS-7wN5TEqYy5|$i#Yti-4xUA zuHJ~xCpUG~Zu-xwi#R;w?nqRoev=|mnPzF2HY$ik;&#;d9ja*^j8YpT1+yuBkR1xY z-gCSapfe=4qQ?KgyY_EN#TZ&|Z*2&1nGZD=#>H-RlhT>yO%6!^E#o&7%In zwpo7o*`?3WE0$-}_$MgGJY&Gm4#V%ip5=$1eE?V1%~Io^WI}@4C-?5S6+Z~Rz zs`$2HM&n=p8`*4j;i->?p3Y<1_kn5ncjQeEj_(J+zyBL(5#!dsB3!`YBN5>Huzptr z$G;ysQ~bNNHC+7L3I2VjKmH9@#yeH~8_HIv5&wqTi=F=X_tSuPKds{56;Q5-0RMI^ z;_&JN6#w2982^?6;@?^8$y5>gY_^FFsPTxc=G(!xn&X3o)XnW7<8RP*WUO$W5i(Bn ztEmq~ED-Q1ef}FSK7J#^$8F+q)c7B0!M5Ck|sd=!irggB8 z+GI=reR8%TbK8vB8gl;C7rw~(AGHthT%k+F&bwE%pSvv-c7B{TEaSxV)4|Rc6V)wP z*0v4)*m;j>wC571Y3G7b{|D3#nWp+bpnSZNLwodW4$$SNS3ChTg%s?0XFG`;Lg<_s07|@2Wd}Z58N0DLDTA(O8DRSB|yw z#W#jw$+Qo~fBLTKRH*6fQCzrcrRr69{<%dQ{y94+zV^$#!SJ=~{Ou5E-|ExJ|At$& z`0mO(8UFs^op!!BS;gOtI@0sFHAK{R?K^7QKkKCCx2js9wSNw2zYu{}h3KaT^CLR{ zGw}F76dZr=dlurqe{BsB|2+lbzo!`EzoGV>DJuU7%5$dp$A80>@l%ZP-%vYfipqZ~ zg>q?7{CxvB9~y|c)re6|^I#a`1|%h{&I=99U-39abCMrFLtvhaujlSayyw>h9$!AB z|9oy-2z>q)RPa05!5V);HOgR=+IEIu{h**=z4!d~bW{2mJMWl@(oJb&?7X?mp(u(! za&KR)F0BVUcocm9>*}hyNm|6=`L>`^Wx-v+q{_!(;xzkHkMccWfkLv_qiya`!)t-yiMNE`I+B!|$cDiQiuo9KXMpY>;8&_pcX0{<9(j ze!mlHzbI1kpF#PZB0v1z30KOB4EX(BPPLm2yzD(Wjo;lU3 z;HMX<+g;w%i#Ys2W>6JpU2ZTHXMTwM!Z(~X{6G54@c)B>@&DrR@qe+#*7z-~-MX`p zWX_h}FfA=qg1IRIQ(=n*EIoNVl;79Z>`PRXWwMKkqJ$Vx$*yb>CLyFK`!Z(ilC3Ps zI)v;d$TeBk2 z=6RlAGrC{A6eSN{MA}Sp1XtBtb)uEbz5m|#YH=}_CfgkS`tT1DbD>Kz&o)SNF+q*B z$EJN?S^q@%+uP~wgfrlFj|qTEI%I{!4fEZyXD7i5K`3D=1D;X*DY^IPHI^^t6!eYM zgqOlWw-6*+(U)rmMO^MShu!){I&9oyEFWf50mMKrx79L3Cil@vSI0BEe2^B7mr^7OQb__ zw(i~|oI-feC=;59jaGDJeMvp56AX=TqPptr6wrZz;`SSk9aETK!GhZoP$=4IQ<4|= z=d1pk=i83w`7r>o@a^&}x)762c-5KJ+lWN3ZTB=DWtF#8KO ztO}GyU+FZewz%Jqi`XyRy|%nhU*hD)_vB8}k=`*)B>@8ec2{pnAGMXx1#Yt!LhpV< zz$h(I4XQ=A06%4t_{kHgWC)z#^#_By*@N_s{%aDbvVNjy?&#Af0i(VtyV5+%kJjdV zp^q6M!zY5|QvkRWtbNv|+D!`<_VWxVTFYw$d=~Af$-8$xNu>t~Fx8`zomA*x zm0(o=rf<+(`kOA5<=sq9+ORmfbBr1=CpsaI3pYo*@XOOeVBt3ujSGi-eMq@d>uEz~ z1TUW{#`n~Rtq>|UjjsB?iP1)sI<0W~=P}j@8 zzh|RD5+FyExe8`29x;Rf3t;;E`l--{p!qM{1XIGjwo-RqD5yvCituuts4~>y8BS5b za%CE_iA;bXW&zdZ>G(5q*C1j~2>sTqnOfDnTX}qRZ#r)9!-LKYW&n{00f!XVYf(;a z#KMKBd@Iwq>J)ZBoRxGWFGb_2ha^5Cc*~93v`_~dQxDvJ5JTLu z33aI;Nm*TmpxuN|ueHZn6+)>bQxJn%fXWtro7xWAT{6r3&dj4SXXL9Wd6`)iCNK`!7Qs2uo`;jmrNAt>;4Af-}`a*);*t zKK-}>{FYKU86$C>V#lzVE3r-4w-he5rVo;^L;(uj5qTZmTIif@=AY*F6sIbCXqo`}Vh6EjPV9$cwPef`0kG6;G>qvLq2-K&&L%itT*w(BKFAPi3)P3~?XN{_PHF&8Cg7_ITg#`cZ zb)$xSn4Cd@KM0lr<{SK_+PK@mb}egeQ=3d@Dc2vi-qR#Ky*$unI9Ro^L?G=_tNz)o z>6j;za0gCvHCn8bvp@Rb+oUVojyxp4&v2-nn4~rpyZ)5mp~VE{3Z6oDWf0!3p*#PC zuM&|uNq6#zNIsqRE#}L>mGgar3j`1PbXVgn9dX#w_mg4MxAvWLqF%d!p|tx;d6wwx z?XeFFM{-$Uv-H2suOw*uH)dP((AEw9o#-nY);z?GuIkOPtE^w;s-3)FI2OG(K>G7k zgIg!TFs;jXDIu$|PYGMSr#gJO#VO5aYhJ3D)9g7{Tu+^cqZlTHc*H5{qBX@A&TeYK~yLl5(61cPI-R$kN==&&!?N1TWGf#NAc{*tOUcEoWO|u-{K`=4V zsC%8ve@^(}o$F}LlR!?wPO>RnaL<*Zcpj}np86`0V7NMj=S+V zbh!TM5vT@8<_5DbIvOz?bBKA?SI#QY7%3P&o&|$STbd1gUg7h(^D*=|O=sXR({_6v z{nu)P-^TS@AY8_kQ7*rxR9fdvK~gG1jNJly)B6?>YE?kS1--@e4{xC($icTOfmp&^ z&=}df>AJR~Bfv8OBUI5^L5U}_@GKybGp{U8~pmDsi33|>N%oUq!etkPl+vp

    3n7q1E7jshN918}Dg_kKa( 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